c语言编程求一元线性回归

上传人:pu****.1 文档编号:561237281 上传时间:2023-01-29 格式:DOCX 页数:11 大小:69.42KB
返回 下载 相关 举报
c语言编程求一元线性回归_第1页
第1页 / 共11页
c语言编程求一元线性回归_第2页
第2页 / 共11页
c语言编程求一元线性回归_第3页
第3页 / 共11页
c语言编程求一元线性回归_第4页
第4页 / 共11页
c语言编程求一元线性回归_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《c语言编程求一元线性回归》由会员分享,可在线阅读,更多相关《c语言编程求一元线性回归(11页珍藏版)》请在金锄头文库上搜索。

1、回归分析一、实验目的 回归分析是数理统计中的一个重要分支,在工农业生产和科学研究中有着广泛的应用。通过本次实验要求掌握一元线性回归和一元非线性回归。二、实验原理 回归分析是处理变量之间相关关系的一种数理统计方法。即用应用数学的方法,对大量的观测数据进行处理,从而得出比较符合事物内部规律的数学表达式 1、一元线形回归方程a、回归方程的求法舄一其中b、回归方程的稳定性回归方程的稳定性是指回归值的波动大小。波动愈小,回归方程的稳定性愈好。2、回归方程的方差分析及显著性检验(1)回归问题的方差分析观测值止2-几之间的差异,是由两个方面原因引起的:自变量x取值的不同;其他因素(包 括试验误差)的影响。N

2、个观测值之间的变差,可用观测值y与其算术平均值的离差平方和来表示,称为总的离差平方和。记作;=:上1称为回归平方和,它反映了在y总的变差中由于X和y的线性关系而引起变化的部 分。J=1成为残余平方和,既所有观测点距回归直线的残余误差平方和。它是除了X对y的 线性影响之外的一切因素对y的变差作用。2)回归方程显著性检验回归方程显著性检验通常采用 F 检验法。1、 重复实验的情况为了检验一个回归方程拟合得好坏,可以做重复实验,从而获得误差平方和 和失拟平方和,用误差平方和对失拟平方和进行 F 检验,就可以确定回归方程拟合 得好坏。三、实验内容编程实现要求。void FreeData(double

3、*dat, double *d, int count) int i, j; free(d);for (i = 0; i count; i +) free(dati);free(dat);/解线性方程。datacount*(count+1)矩阵数组;count:方程元数;/ Answercount:求解数组。返回:0求解成功,T无解或者无穷解 int LinearEquations(double *data, int count, double *Answer) int j, m, n; double tmp, *dat, *d = data;dat = (double*)malloc(coun

4、t * sizeof(double*);for (m = 0; m count; m +, d += (count + 1)datm = (double*)malloc(count + 1) * sizeof(double); memcpy(datm, d, (count + 1) * sizeof(double);d = (double*)malloc(count + 1) * sizeof(double);for (m = 0; m count - 1; m +)/ 如果主对角线元素为 0,行交换for (n = m + 1; n count & datmm = 0.0; n +) if

5、( datnm != 0.0)memcpy(d, datm, (count + 1) * sizeof(double); memcpy(datm, datn, (count + 1) * sizeof(double); memcpy(datn, d, (count + 1) * sizeof(double);/ 行交换后,主对角线元素仍然为 0,无解,返回-1if (datmm = 0.0)FreeData(dat, d, count);return -1;/ 消元for (n = m + 1; n count; n +)tmp = datnm / datmm;for (j = m; j =

6、count; j +) datnj -= tmp * datmj;for (j = 0; j = 0; m -)for(j=count- 1;j m; j -)dm += Answerj * datmj;Answerm = (datmcount - dm) / datmm;FreeData(dat, d, count);return 0;/ 求多元回归方程:Y = B0 + B1X1 + B2X2 + .BnXn/ datarows*cols二维数组;Xli,X2i,.Xni,Yi (i=0 to rowsT)/ rows:数据行数;cols数据列数;Answercols:返回回归系数数组 (

7、B0,B1.Bn)/ SquarePoor4:返回方差分析指标:回归平方和,剩余平方和,回归平方 差,剩余平方差/ 返回值:0 求解成功,-1 错误int MultipleRegression(double *data, int rows, int cols, double *Answer, double *SquarePoor)int m, n, i, count = cols - 1;double *dat, *p, a, b;if (data = 0 | Answer = 0 | rows 2 | cols 2) return -1;dat = (double*)malloc(cols

8、* (cols + 1) * sizeof(double); dat0 = (double)rows;for (n = 0; n count; n +)/ n = 0 to cols - 2a = b = 0.0;for (p = data + n, m = 0; m rows; m +, p += cols)a += *p;b += (*p * *p);datn + 1 = a;/ dat0, n+1 = Sum(Xn)dat(n + 1) * (cols + 1) = a; / datn+1, 0 = Sum(Xn)dat(n + 1) * (cols + 1) + n + 1 = b;

9、/ dat n+1,n+1 = Sum(Xn * Xn)for (i = n + 1; i count; i +) /i = n+1 to cols - 20; m rows; m +, p += cols)a += (pn * pi);dat(n + 1) * (cols + 1) +1 = Sum(Xn * Xi)dat(i + 1) * (cols + 1) +1 = Sum(Xn * Xi)for (b = 0.0, m = 0, p = cols)b += *p;datcols = b;for (a0.0, pdata, mi + 1 = a;/ datn+1, i+n + 1 =

10、a;/ dati+1, n+data + n; m rows; m +, p +/ dat0, cols =for (n = 0; n count; n +) for (a = 0.0, p = data, m = s)Sum(Y)0; m rows; m +, p += cola += (pn * pcount);dat(n + 1) * (cols + 1) + cols = a;+1, cols = Sum(Xn * Y)n = LinearEquations(dat, cols, Answer);/ datn/ 计算方程式/ 方差分析if (n = 0 & SquarePoor)b /

11、 rows;SquarePoor0=SquarePoor1= 0.0;p = data;for (m =0;for (i = 1,m rows; m+, p+)a= Answer0;i 0.0)SquarePoor3 = SquarePoor1 / (rows - cols); / 回归方差剩余方差elseSquarePoor3 = 0.0; free(dat); return n; 举例验证以上程序:double data155 = /X1X2X3X4Y316,1536,874,981,3894 385,1771,777,1386,4628,299,1565,678,1672,4569,326,1970,785,1864,5340,441,1890,785,2143,5449,460,2050,709,2176,5599,470,1873,673,1769,5010,504,1955,793,2207,5694,348,2016,968,2251,5792,400,2199,944,2390,6126,496,1328,749,2287,5025,497,1920,952,2388,5924,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号