




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、20114073143数理统计中回归分析的探究与应用黑龙江八一农垦大学回归分析问题探究摘要本文主要针对数理统计中的回归分析问题,通过对一元线性回归、多元线性回归以及非线性回归原理的探究,分别运用了SPSS和MATLAB软件进行实例分析以及进一步的学习。首先,通过变量之间关系的概念诠释引出回归函数 QUOTE ;其次,针对回归函数,分别对一元线性回归原理上的学习,了解并会运用这三种线性回归模型、参数估计和回归系数的显著性检验来处理和解决实际的一元线性回归问题;接着,对多元线性回归和非线性回归进行学习,掌握它们与一元线性回归在理论和实践的联系与区别;然后,通过实际问题运用SPSS进行简单的分析,熟
2、悉SPSS软件的使用步骤和分析方法,能够运用SPSS进行简单的数理分析;最后,用MATLAB编程来处理线性回归问题,通过多种方法进行比较,进行线性回归拟合计算并输出Logistic模型拟合曲线。关键词:回归分析;一元线性回归;多元线性回归;非线性回归;SPSS;MATLAB一、 回归概念一般来说,变量之间的关系大致可以分为两类:一类是确定性的,即变量之间的关系可以用函数的关系来表达;另一类是非确定性的,这种不确定的关系成为相关关系。相关关系是多种多样的,回归分析就是研究相关关系的数理统计方法。它从统计数据出发,提供建立变量之间相关关系的近似数学表达式经验公式的方法,给出相关行的检验规则,并运用
3、经验公式达到预测与控制的目的。如随机变量Y与变量x(可能是多维变量)之间的关系,当自变量x确定后,因变量Y的值并不跟着确定,而是按照一定的停机规律(随机变量Y的分布)取值。这是我们将它们之间的关系表示为其中 QUOTE 是一个确定的函数,称之为回归函数, QUOTE 为随机项,且 QUOTE 。回归分析的任务之一就是确定回归函数 QUOTE 。当 QUOTE 是一元线性函数形时,称之为一元线性回归;当 QUOTE 是多元线性函数形时,称之为多元线性回归;当 QUOTE 是非线性函数形时,称之为非线性回归。二、 回归分析2.1 一元线性回归分析2.1.1 一元线性回归模型设随机变量Y与x之间存在
4、着某种相关关系,这里x是可以控制或可以精确测量的普通变量。对于取定的一组不完全相同的值 QUOTE 做独立实验得到n对观察值 QUOTE 一般地,假定x与Y之间存在的相关关系可以表示为 QUOTE ,其中 QUOTE 为随机误差且 QUOTE , QUOTE 未知,a和b都是未知参数。这个数学模型成为医院线性回归模型,称 QUOTE 为回归方程,它所代表的直线称为回归直线,称b为回归系数。对于一元线性回归模型,显然有 QUOTE 。回归方程 QUOTE 放映了变量X与随机变量Y之间的相关关系。回归分析就是要根据样本观测值 QUOTE 找到a和b适当的估计值 QUOTE ,建立线性回归方程 QU
5、OTE ,从而利用这个公式来近似刻画变量x与随机变量Y之间的关系。2.1.2 参数估计如何根据观测数据 QUOTE 得到回归方程 QUOTE 呢?一个直观的做法就是:选取适当的a和b,使得直线 QUOTE 上的点与实验数据中对应点之间的误差尽可能小。若记 QUOTE 为直线 QUOTE 上的点, QUOTE 为实验数据点,则表达式就刻画了直线 QUOTE 上点 QUOTE 之间的偏离程度。通常我们记 QUOTE ,这样 QUOTE 就表示直线上相应点与全体数据点之间总的偏离程度。总得偏离程度越小,回归方程 QUOTE 就越能客观放映出变量x与Y之间的线性关系。所以,在数理统计中,将能够使 QU
6、OTE 取得最小值的a与b所确定的方程 QUOTE 视为变量x与Y之间的线性回归方程。而且把利用这种思想求出的估计值 QUOTE 成为参数a与b的最小二乘估计,这种方法成为最小二乘法。我们利用微积分的知识来确定 QUOTE 取得最小值的条件。将表达式 QUOTE 分别对位置参数a与b求偏导数,并令其为零,即得整理得上式称为正规方程组。由于 QUOTE 不完全相同,所以正规方程组的系数行列式不为零。因此,我们得到的正规方程组的唯一解为因此,我们得到了x与y之间的线性回归方程或这个线性回归方程表明,经验回归直线L是通过这n个数据点几何重心 QUOTE 且斜率为 QUOTE 的直线。为了计算方便起见
7、,我们引入如下记号:这样2.1.3 回归系数的显著性检验在上面的论述中,运用最小二乘法求回归方程的条件除了要求诸 QUOTE 不完全相同外,没有其它条件,也就是说无论变量x与Y是否具有线性关系,只要诸 QUOTE 不完全相同,使用最小二乘法总能求出a与b的一个无偏估计 QUOTE 与 QUOTE ,并能得到变量x与Y的一个线性回归方程 QUOTE 。若变量x与Y之间根本不存在线性关系,那么这个线性回归方程就没有任何意义。因此,实际问题中,我们必须对用最小二乘法求出的线性回归方程进行检验,来判断变量x与Y之间相关关系是否真的可由所得到的线性回归方程给出。若果变量x与Y之间存在线性相关关系,那么模
8、型 QUOTE 中b不应为零。否则,就有 QUOTE ,这意味着x与Y没有任何关系。因此,我们需要假设进行检验。当拒绝 QUOTE 时,认为变量x与Y之间有显著的线性相关关系,也称为回归效果显著。否则,称为回归效果不显著。这时变量x和Y之间的关系有很多种可能:或许二者之间关系不是线性的,或许除变量x之外还有其他不可忽视的因素对Y产生影响,甚至是它们的相关关系很弱,不是必须重视的。为了给出显著检验 QUOTE 的拒绝域,先做一些准备工作,记称SS为总偏差平方和,它反映了数据中变量取值 QUOTE 的离散程度。即称 QUOTE 为回归平方和,它放映了n个回归数值 QUOTE 相对于 QUOTE 的
9、离散程度,它是由x去不同的值 QUOTE 而引起的。将 QUOTE 带入上述回归平方和表达式中,有记其中 QUOTE 称为第i个残差,i=1,2,n。 QUOTE 称为残差平方和,呀反映了n次试验的累计误差。由回归方程的意义知道,它是n次试验的累计误差的最小值,即小面推导残差平方和的计算公式,由推得这样我们就得到平方和的分解公式对回归系数的显著性检验一般有一下三种方法(1)t检验法 (回归系数的显著性检验)取检验统计量可以证明,当 QUOTE 成立时, QUOTE 于是,在显著性水平 QUOTE 下,当 QUOTE 时,拒绝 QUOTE ,认为回归效果显著。在回归分析中,t检验用于检验回归系数
10、的显著性,即检验因变量y对自变量x的影响程度是否显著。(2)F检验法 (回归系数的显著性检验)取检验统计量这里的F检验其实就是方差分析的内容,见下表2.1表2.1 一元线性回归方程的方差分析表方差来源平方和自由度均方F值回归1误差2总计n-1可以证明,当 QUOTE 成立时, QUOTE 。于是在显著水平 QUOTE 下,确定临界值 QUOTE 。当 QUOTE 时,就拒绝 QUOTE ,说明总体回归系数 QUOTE ,即回归方程是显著的。由于 QUOTE ,所以F检验法与T检验法基本上式一致的。在线性一元回归分析中,回归方程的显著性检验和回归系数的显著性检验作用是相同的,两者可以互相替代。(
11、3)回归方程的拟合优度检验将回归平法和与总离差平方和之比定义为样本决定系数,又称判定系数,记为 QUOTE 即决定系数是一个衡量回归直线对样本观测值拟合优度的相对指标,反映了变量的波动中能用变量所解释的比例。 QUOTE 的值总是在01之间, QUOTE 越接近1,拟合度就越好;反之,说明模型中给出的x对y信息还不充分,回归方程效果不好,应该进行修改,使x与y的信息得到充分利用。2.1.4 预测与控制回归方程的重要应用就是预测和控制问题。所谓控问题,就是对于给定的点 QUOTE ,预测出y的取值范围。控制问题则是问题的反问题,就是将y限制在某个范围内,应如何控制x的取值。预测问题设自变量 QU
12、OTE 与因变量 QUOTE 服从模型且 QUOTE 与样本 QUOTE 相互独立。首先,我们计算 QUOTE 时的回归值将 QUOTE 作为 QUOTE 的预测值,但这样求出的预测值一般来说是有误差的。产生误差的原因,一是由于 QUOTE 只是平均值 QUOTE 的一个估计,而 QUOTE 的实际值很可能偏离它的平均值;二是因为 QUOTE 的取值是依赖于估计值 QUOTE 与 QUOTE 的,而 QUOTE 与 QUOTE 是随机抽样误差的。因此我们还需要求出 QUOTE 的预测区间即置信区间。 QUOTE 双侧 QUOTE 预测区的上下限为或双侧预测 QUOTE 区的长度为在实际回归问题
13、中,样本容量n常是很大的,这时对于在 QUOTE 附近的x来说,我们能得较短的预测区间,而且当 QUOTE 时长度最短,这事预测效果最佳。反之,当 QUOTE 得取值超出原始的试验点 QUOTE 的范围之外时,由于此时预测区间长度过宽,将会导致预测效果不好。当n较大时,通常d取1,且 QUOTE 用 QUOTE 代替, QUOTE 用 QUOTE 代替。这时预测区间的上下限简化为控制问题在实际问题中,我们还会遇到控制问题,即若要求观察值y在某个区间 QUOTE 内取值时,问应控制x在什么范围?也就是要求对于给定的置信度 QUOTE ,求出相应的 QUOTE 和 QUOTE ,使得当 QUOTE
14、 时,所对应的观察值y落在 QUOTE 内。我们只谈论在n很大的情况,这时 QUOTE ,这时公式 QUOTE 可改写 QUOTE 当 QUOTE 与 QUOTE 的值确定以后,根据上式就可以求出相应的 QUOTE 和 QUOTE 的值,作为x控制的端点值。需要注意的是,为了有效控制x的范围区间, QUOTE 必须大于 QUOTE =2 QUOTE ,即 QUOTE .2.2 多元线性回归分析在实际问题中,一般影响因变量的因素常常不止一个,这就是因变量与多个自变量相关关系问题,要用多元回归的方法来解决。2.2.1 多元线性回归的数学模型多元线性回归模型的一般形式:式中, QUOTE , QUO
15、TE , QUOTE 是 QUOTE 个未知数,称为回归系数。Y称为被解释量,而 QUOTE 是 QUOTE 个可以精确测量并可控制的一般变量,称为解释变量。 QUOTE 时,上式即为上一节分析的一元线性回归模型, QUOTE 时,我们就成上式为多元线性回归模型,这里 QUOTE 是随机误差。与一元线性回归模型一样,对随机误差项我们常假定其期望值为零、方差为 QUOTE 的正态分布 QUOTE 。对于一个实际问题,如果我们获得n组观测数据 QUOTE , QUOTE 把这些观测值代入上式可得样本多元线性回归模型:写成矩阵形式为:其中: QUOTE 2.2.2 多元线性回归模型的基本假定为了对模
16、型参数进行估计和推断,常常要对回归模型 QUOTE 做如下的假定:1)解释变量 QUOTE 是确定性变量,不是随机变量,且要求矩阵x中的自变量列之间不相关,样本容量的个数应大于解释变量的个数。2)随机误差项具有零均值和同方差,即 QUOTE i.j=1,2,.,n3)正态分布的假设条件: QUOTE i.j=1,2,.n由上述假设和多元正态分布的性质可知: QUOTE 服从 QUOTE 维正态分布,且 QUOTE 。2.2.3多元回归模型的参数估计多元线性回归方程未知参数 QUOTE 的估计与一元线性回归方程的参数估计原理一样,所以选择的估计值 QUOTE 与观测值 QUOTE 之间的残差在所
17、有样本点上打到最小,即使 QUOTE 达到最小。所以求 QUOTE ,使得 QUOTE ,即有多元函数求极值点的方法可求得回归系数的最小二成估计值为:另外,未知参数 QUOTE 的一个无偏估计 QUOTE ,实际就是残差均方和(MSE)。2.2.4多元线性回归模型的显著性检验多元线性回归模型的显著性包括两方面的内容:一是对整个回归方程的显著性检验,即F检验;另一个是对个回归系数的显著性检验,即t检验。在一元线性回归方程的检验时,这两个检验时等价的,但在多元线性回归模型的检验时两者却不同。回顾方程的显著性检验提出假设: QUOTE 构建F统计量,见表2.2:表 5.2 多元线性回归模型的方差分析
18、表方差来源平方和自由度均方和F值回归P误差总计给定显著水平 QUOTE ,查F分布表,的临界值 QUOTE ;若 QUOTE ,则拒绝 QUOTE ,接受备择假设,说明总体回归系数 QUOTE 不全为零,即回归方程是显著的;反之则认为回归方程不显著。回归系数显著性检验提出假设: QUOTE ; QUOTE T检验的计算公式为: QUOTE ,其中 QUOTE 是回归系数标准差, QUOTE 中第 QUOTE 个主角线元素。t值应该有p个队每一个 QUOTE 可以计算一个t值。给定显著水平 QUOTE ,确定临界值 QUOTE ;若 QUOTE ,则拒绝 QUOTE ;接受备择假设,说明总体回归
19、系数 QUOTE 。多元线性回归方程的拟合度检验采用调整的决定系数 QUOTE 作为统计量 QUOTE 的取值范围和数值大小的意义与 QUOTE 是完全相同的。2.3非线性回归分析在对实际的客观现象进行定量分析时,对变量间非线性相关问题的曲线拟合,处理的方法有:决定非线性模型的函数模型,对其中课线性化的问题则通过变量将其线性化,从而归结为前面的多元线性回归问题来解决。方程形式应与有关实质型科学的基本理论一致。例如,采用幂函数的形式,能够较好的表现生产函数;采用多项式方程能够较好的反映总成本与总产量的关系等等。若实际问题的曲线类型不易确定时,由于任意曲线皆可由多项式来逼近,故常可用多项式回归来拟
20、合曲线。若变量间非线性关系已知,且难以用变量变换法将其线性化,则进行数值法迭代的非线性回归分析。一般来说,数学形式越简单,其可操作性就越强。根据经验公式或散点图,选择适当的曲线回归方程。为了确定其中的未知参数,往往可以通过变量代换,把非线性回归化为线性回归,然后用线性回归的方法确定这些参数的值。直接代换法直接替换法适用于变量之间关系虽然是非线性的,但因变量参数间关系却是线性的非线性模型;多项式模型基本形式: QUOTE 线性化方法:令 QUOTE 转化为线性模型: QUOTE 双曲线模型基本形式: QUOTE 线性化方法:令 QUOTE 转化为线性模型: QUOTE 即 QUOTE 间接替换法
21、间接代换法是先通过方程两边取对数后再进行变量代换,转化为线性形式。指数函数基本形式: QUOTE 线性化方法:两端去自然对数 QUOTE 令 QUOTE ,转化为线性模型: QUOTE 幂函数基本形式: QUOTE 线性化方法:两端去对数 QUOTE 令 QUOTE , QUOTE 转化为线性模型: QUOTE 三、 SPSS软件操作及应用实例定义变量和输入、整理数据。选择“分析/回归/线性”,在线性回归窗口自变量和因变量,单机“统计量”按钮,在弹出的窗口设置参数;单机“图”按钮,可以选择输出的图形。最后单击继续按钮。在结果输出窗口的一元或者多元线性回归计算结果。根据选择参数不同,得到ANOV
22、A和回归系数等数据。例1:拖拉机拉杆的朱爱丽和速度有关,测得拖拉机在速度X下的拉力Y,数据见下表,求Y对x 回归方程。变量数据X 0.9 1.3 2.0 2.7 3.4 4.1 5.2 5.5 6.0 425 420 480 495 540 530 590 610 690 680首先,在SPSS的数据编辑窗口的Variable View 界面定义变量和在Data view 界面输入数据,见下图。其次,选择“分析”,在窗口选择自变量也因变量,设置“统计量”的窗口设置参数等,见下图最后点级确定,输出结果,见下图描述性统计量均值标准 偏差NY546.000095.7369110X3.45001.76
23、33610相关性YXPearson 相关性Y1.000.982X.9821.000Sig. (单侧)Y.000X.000.NY1010X1010模型汇总模型RR 方调整 R 方标准 估计的误差更改统计量R 方更改F 更改df1df2Sig. F 更改1.982a.964.96019.18691.964216.07418.000a. 预测变量: (常量), X。Anovaa模型平方和df均方FSig.1回归79544.899179544.899216.074.000b残差2945.1018368.138总计82490.0009a. 因变量: Yb. 预测变量: (常量), X。系数a模型非标准化
24、系数标准系数tSig.B标准 误差试用版1(常量)362.06613.90626.036.000X53.3143.627.98214.699.000a. 因变量: Y结果分析:从运行求得回归方程中可知,X的系数为53.314,常数项为362.066,于是,回归方程为散点图如下图所示:经检验,回归方程的显著性达到0.0001,极显著;对回归方程系数及常数项T检验都达到极显著,说明该方程有应用价值。四、 MATLAB应用实例炼钢厂出钢水时用的钢包,在使用过程中由于钢水及炉渣对耐火材料的浸蚀,其容积不断增大。现在钢包的容积用盛满钢水时的重量y(kg)表示,相应的试验次数用x表示。数据见表4.1,要找
25、出y与x的定量关系表达式。表4.1 钢包的重量y与试验次数x数据序号xy序号xY12106.42811110.5923108.20914110.6034109.581015110.9045109.501116110.7657110.001218110.0068109.931319110.20710110.49x1=1./x;y1=1./y;plot(x1,y1,k+); %变换后数据的散点图x2=ones(13,1) x1;b,bint,rint,stats=regress(y1,x2);z=b(1)+b(2)*x1;yc=1./z;plot(x1,y1,k+,x1,z,r)%变换后数据的散点
26、图和回归直线图变换后数据的散点图及回归直线图R2=1-sum(y-yc).2)/lyy;%模型的拟合优度系数plot(x,y,k+,x,yc,r)%数据的散点图和回归曲线图legend(散点图,回归函数)b = 0.00896662968057 0.00082917436336R2 =0.97292374957556第一种方法的程序:format longx=2 3 4 5 7 8 10 11 14 15 16 18 19;y=106.42 108.20 109.58 109.5 110 109.93 110.49 110.59 110.60 110.9 110.76 111 111.20;p
27、lot(x,y,k+);%数据的散点图x1=1./x;y1=1./y;plot(x1,y1,k+); %变换后数据的散点图x2=ones(13,1) x1;b,bint,rint,stats=regress(y1,x2);z=b(1)+b(2)*x1;yc=1./z;plot(x1,y1,k+,x1,z,r)%变换后数据的散点图和回归直线图n=length(x);lyy=sum(y.2)-n*(mean(y)2;R2=1-sum(y-yc).2)/lyy;%模型的拟合优度系数b = 0.00896662968057 0.00082917436336R2 =0.97292374957556用类似
28、的方法可以得出其它三个曲线回归方程,它们分别是: 第二种方法的程序:format longx=2 3 4 5 7 8 10 11 14 15 16 18 19;y=106.42 108.20 109.58 109.5 110 109.93 110.49 110.59 110.60 110.9 110.76 111 111.20;x1=log(x);y1=y;x2=ones(13,1) x1;b,bint,rint,stats=regress(y1,x2);bz=b(1)+b(2)*x1;yc=z;n=length(x);lyy=sum(y.2)-n*(mean(y)2;R2=1-sum(y-y
29、c).2)/lyy;plot(x,y,k+,x,yc,c);legend(散点图,回归函数)b = 1.0e+002 * 1.06314674075167 0.01713977247928R2 =0.87731500489620第三种方法的程序:format longx=2 3 4 5 7 8 10 11 14 15 16 18 19;y=106.42 108.20 109.58 109.5 110 109.93 110.49 110.59 110.60 110.9 110.76 111 111.20;x1=sqrt(x);y1=y;x2=ones(13,1) x1;b,bint,rint,s
30、tats=regress(y1,x2);bz=b(1)+b(2)*x1;yc=z;n=length(x);lyy=sum(y.2)-n*(mean(y)2;R2=1-sum(y-yc).2)/lyy;plot(x,y,k+,x,yc,k);legend(散点图,回归函数)b = 1.0e+002 * 1.06301275014382 0.01194728720517R2 = 0.78514164407253三种方法的拟合效果比较:R2 =0.97292374957556R2 =0.87731500489620R2 = 0.785141644072531.原始数据下表给出了某地区19712000
31、年的人口数据(表1)。试分别用Matlab和SPSS软件,对该地区的人口变化进行曲线拟合。表4.2 某地区人口变化数据年份时间变量t=年份-1970人口y/人1971133 8151972233 9811973334 0041974434 1651975534 2121976634 3271977734 3441978834 4581979934 49819801034 47619811134 48319821234 48819831334 51319841434 49719851534 51119861634 52019871734 50719881834 50919891934 52119
32、902034 51319912134 51519922234 51719932334 51919942434 51919952534 52119962634 52119972734 52319982834 52519992934 52520003034 527根据上表中的数据,做出散点图,见图1。图 4.1 某地区人口随时间变化的散点图从图1可以看出,人口随时间的变化呈非线性过程,而且存在一个与横坐标轴平行的渐近线,故可以用Logistic曲线模型进行拟合。因为Logistic曲线模型的基本形式为:所以,只要令:,就可以将其转化为直线模型:下面,我们分别用Matlab和SPSS软件进行回归分析
33、拟合计算。2用Matlab编程进行回归分析拟合计算源程序(Nonlinear-Regression-Model.m),如下:clearclc% 读入人口数据(19712000年)y = 33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 34523 34525 34525 34527;% 读入时间变量数据(t年份1970)t=1 2 3
34、4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30; % 线性化处理for t = 1:30, x(t)=exp(-t); y(t)=1/y(t,1);end% 计算,并输出回归系数Bc=zeros(30,1)+1;X=c,x;B=inv(X*X)*X*yfor i=1:30,% 计算回归拟合值 z(i)=B(1,1)+B(2,1)*x(i);% 计算离差 s(i)=y(i)-sum(y)/30;% 计算误差 w(i)=z(i)-y(i);end% 计算离差平方和SS=s*s;% 回归误差平方和Q
35、Q=w*w;% 计算回归平方和UU=S-Q;% 计算,并输出F检验值F=28*U/Q% 计算非线性回归模型的拟合值for j=1:30, Y(j)=1/(B(1,1)+B(2,1)*exp(-j);end% 输出非线性回归模型的拟合曲线(Logisic曲线)plot(T,Y)上述程序运行后,输出(1)输出回归系数B及F检验值如下:B = 1.0e-004 * 0.2902 0.0182F = 47.8774(2)输出Logistic模型拟合曲线五 参考文献1 徐梅. 概率与数理统计. 北京:中国农业出版社, 20072 吴素文. 概率论与数理统计. 北京: 中国农业出版社, 2003.3 叶中
36、行. 概率论与数理统计. 北京: 科学出版社, 2001. 4 金兰,回归分析与方差分析教学的几点思考J.统计教育,2006. 5王兵团,数学建模基础M,北京:清华大学出版社,2004年6 徐玖平, 胡知能, 李军. 运筹学(II类)M. 北京: 科学出版社, 2004.附录资料:不需要的可以自行删除 C语言图形模式速成第一节 图形模式的初始化Turbo C 提供了非常丰富的图形函数,所有图形函数的原型均在graphics. h 中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外,使用图形函数时要确保有显示器图形驱动程序*.BGI,
37、同时将集成开发环境options/Linker中的Graphics lib选为on,只有这样才能保证正确使用图形函数。 不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。设置屏幕为图形模式,可用下列图形初始化函数:void far initgraph(int far *gdriver, int far *gmode,char *path);其中gdriver和gmode分别表示图
38、形驱动器和模式,path是指图形驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见graphics. h。图形驱动程序由Turbo C出版商提供,文件扩展名为.BGI。 根据不同的图形适配器有不同的图形驱动程序。例如对于EGA、 VGA 图形适配器就调用驱动程序EGAVGA.BGI。#include stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 30
39、0, 250, 50, 1); /*画一长方体*/getch();closegraph();return 0;有时编程者并不知道所用的图形显示器适配器种类,或者需要将编写的程序用于不同图形驱动器,Turbo C 提供了一个自动检测显示器硬件的函数,其调用格式为:void far detectgraph(int *gdriver, *gmode);其中gdriver和gmode的意义与上面相同。 自动进行硬件测试后进行图形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver
40、, &gmode); /*自动测试硬件*/printf(the graphics driver is %d, mode is %dn,gdriver,gmode); /*输出测试结果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根据测试结果初始化图形*/bar3d(100, 100, 300, 250, 50, 1); /*画一长方体*/getch();closegraph();return 0;上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置,但Turbo C提供了一种更简单的方法, 即用gdriver=DET
41、ECT 语句后再跟initgraph()函数就行了。采用这种方法后,上例可改为:#include stdio.h#include graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(50, 50, 150, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出图形状态的函数closegraph(),其调用格式为:void far closegraph(void);第二节 屏幕颜色的设置和清屏函数对于图形
42、模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数: 设置背景色: void far setbkcolor(int color);设置作图色: void far setcolor(int color);其中color 为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关颜色的符号常数及数值见graphics.h。清除图形屏幕内容但不清除图形背景使用清屏函数,其调用格式如下: voide far cleardevice(void);#include stdio.h#include graphics.hint main()int gdriver,
43、 gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI); /*图形初始化*/setbkcolor(0); /*设置图形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*设置不同作图色*/circle(320, 240, 20+i*10); /*画半径不同的圆*/getch();for(i=0; i=15; i+)setbkcolor(i); /*设置不同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=
44、getmaxcolor();printf(maxcolor=%d,aa);getch();closegraph();return 0;另外,TURBO C也提供了几个获得现行颜色设置情况的函数。 int far getbkcolor(void); 返回现行背景颜色值。int far getcolor(void); 返回现行作图颜色值。int far getmaxcolor(void); 返回最高可用的颜色值。第三节 基本画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。 、画点. 画点函数 void far putpixel(int x, int y,
45、int color); 该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640 x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。关于点的另外一个函数是: int far getpixel(int x, int y); 它获得
46、当前点(x, y)的颜色值。 II、有关坐标位置的函数 int far getmaxx(void);返回x轴的最大值。int far getmaxy(void);返回y轴的最大值。int far getx(void); 返回游标在x轴的位置。void far gety(void); 返回游标有y轴的位置。void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。、画线I. 画线函数T
47、URBO C提供了一系列画线函数: void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。void far linerel(int dx, int dy); 画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的直线。void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。void far arc(int
48、 x, int y, int stangle, int endangle,int radius); 以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0 度,逆时针方向旋转一周, 依次为90,180, 270和360度(其它有关函数也按此规定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle 开始到
49、endangle结束画一段椭圆线,当stangle=0,endangle=360时, 画出一个完整的椭圆。void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。 void far drawpoly(int numpoints, int far *polypoints); 画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。polypoints整型数组必须至少有2 倍顶点数个无素。每一个顶点的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边形
50、时,numpoints 的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。下面举一个用drawpoly()函数画箭头的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16=200,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardev
51、ice();setcolor(12); /*设置作图颜色*/drawpoly(8, arw); /*画一箭头*/getch();closegraph();return 0;II、设定线型函数在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。void far setlinestyle(int linestyle,unsigned upattern,int thickness);该函数用来设置线的有关信息,其中linest
52、yle是线形状的规定,见graphics.h。对于upattern,只有linestyle选USERBIT_LINE 时才有意义 (选其它线型,uppattern取0即可)。此时uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。 void far getlinesettings(struct linesettingstypefar *lineinfo);该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:struct linesettingstypeint linestyle;unsign
53、ed upattern;int thickness;例如下面两句程序可以读出当前线的特性 struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1, 则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。有关线型设定和画线函数的例子如下所
54、示。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*设置三点宽实线*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4,
55、0 xaaaa, 1);/*设置一点宽用户定义线*/line(220, 240, 420, 240);line(320, 140, 320, 340);getch();closegraph();return 0;第四节 基本图形的填充填充就是用规定的颜色和图模填满一个封闭图形。 一般是先画轮廓再填充。TURBO C提供了一些先画出基本图形轮廓, 再按规定图模和颜色填充整个封闭图形的函数。在没有改变填充方式时,TURBO C 以默认方式填充。 void far bar(int x1, int y1, int x2, int y2);确定一个以(x1,y1)为左上角,(x2,y2)为右下角的矩形窗
56、口,再按规定图模和颜色填充。说明:此函数不画出边框,所以填充色为边框。void far bar3d(int x1, int y1, int x2, int y2,int depth,int topflag);当topflag为非0时, 画出一个三维的长方体。当topflag为0时,三维图形不封顶,实际上很少这样使用。说明: bar3d()函数中,长方体第三维的方向不随任何参数而变,即始终为45度的方向。void far pieslice(int x,int y,int stangle,int endangle,int radius);画一个以(x, y)为圆心,radius为半径,stangl
57、e为起始角度,endangle 为终止角度的扇形,再按规定方式填充。当stangle=0,endangle=360 时变成一个实心圆,并在圆内从圆点沿X轴正向画一条半径。void far sector(int x, int y,int stanle,intendangle,int xradius, int yradius);画一个以(x, y)为圆心分别以xradius, yradius为x轴和y轴半径,stangle 为起始角,endangle为终止角的椭圆扇形,再按规定方式填充。第五节 设定填充方式TURBO C有四个与填充方式有关的函数。下面分别介绍: void far setfills
58、tyle(int pattern, int color); color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的符号常数见graphics.h。除USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle() 函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。 之所以定义USER_FILL主要因为在获得有关填充信息时用到此项。void far setfillpattern(char * upattern,int color); 设置用户定义的填充图模的颜色以供对封闭图形填充。其中upattern是一个指向8个字节的指
59、针。这8个字节定义了8x8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向个封闭区域填充。void far getfillpattern(char * upattern); 该函数将用户定义的填充图模存入upattern指针指向的内存区域。void far getfillsetings(struct fillsettingstypefar * fillinfo); 获得现行图模的颜色并将存入结构指针变量fillinfo中。其中fillsettingstype结构定义如下:struct fillsettingstypeint pattern; /* 现行填充模式
60、 * /int color; /* 现行填充模式 * /; 有关图形填充图模的颜色的选择,请看下面例程。#include stdio.h#include graphics.hmain()char str8=10,20,30,40,50,60,70,80; /*用户定义图模*/int gdriver,gmode,i;struct fillsettingstype save;/*定义一个用来存储填充信息的结构变量*/gdriver=DETECT;initgraph(&gdriver,&gmode,C:TC2.0BGI);setbkcolor(BLUE);cleardevice();for(i=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智能农业作物损坏赔偿与病虫害防治服务协议
- 二零二五医疗事故赔偿协议书撰写要点解析
- 2025年度智能化住宅房屋租赁定金合同模板范文
- 二零二五年度知识产权战略布局专利代理合同
- 二零二五年度主播才艺展示及经纪管理协议
- 二零二五年度能源合同可撤销条款与节能减排合同
- 二零二五年度全新办公区转租协议合同:商务办公空间租赁权转让
- 二零二五年度合同管理制及流程图编制与执行标准合同
- 2025年度智能医疗设备研发团队技术人员劳动合同
- 二零二五年度新材料专利共享许可协议
- 《动物细胞工程制药》课件
- 本校教材选用组织机构及职责-选用程序及要求
- 材料供应履约信用证明:免修版模板范本
- 2023南方国家电网招聘笔试参考题库(共500题)答案详解版
- 门式起重机、架桥机作业前安全隐患排查表
- 不合格品处置记录表(标准版)
- 德语现代主义文学-浙江大学中国大学mooc课后章节答案期末考试题库2023年
- 机床数控技术PPT完整全套教学课件
- 店面租赁合同店面租赁合同店面租赁合同书
- lm3s8962开发板用户手册
- 《小学教师职业道德》课程标准
评论
0/150
提交评论