C语言课程设计曲线拟合最小二乘法.doc

上传人:文库蛋蛋多 文档编号:2384802 上传时间:2023-02-17 格式:DOC 页数:17 大小:305KB
返回 下载 相关 举报
C语言课程设计曲线拟合最小二乘法.doc_第1页
第1页 / 共17页
C语言课程设计曲线拟合最小二乘法.doc_第2页
第2页 / 共17页
C语言课程设计曲线拟合最小二乘法.doc_第3页
第3页 / 共17页
C语言课程设计曲线拟合最小二乘法.doc_第4页
第4页 / 共17页
C语言课程设计曲线拟合最小二乘法.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《C语言课程设计曲线拟合最小二乘法.doc》由会员分享,可在线阅读,更多相关《C语言课程设计曲线拟合最小二乘法.doc(17页珍藏版)》请在三一办公上搜索。

1、数值分析上机实验报告姓 名学 号20093514班 级软件工程0908指 导 教 师实验名称曲线拟合最小二乘法 线性方程组迭代法开 设 学 期2010 2011第二学期评 定 成 绩评定人签字评 定 日 期课题三 解线性方程组的迭代法一 实验内容1、设线性方程组=x= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 ) 2、设对称正定阵系数阵线方程组= x = ( 1, -1, 0, 2, 1, -1, 0, 2 )3、三对角形线性方程组 = x= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )试分别选用Jacobi 迭代法,Gauss-Seidol迭

2、代法和SOR方法计算其解。二 实验要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,由迭代次数体会该迭代法的收敛快慢;3、对方程组2,3使用SOR方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。三 目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤(予给的迭代次数),对迭代法敛散性的意义;4、体会初始解 x,松弛因子的选取,对计算结果的影响。四

3、 流程图设计1.主要部分流程2.Jacobi 算法流程3.GS 算法流程图4.SOR算法流程五 结构程序设计#includeusing namespace std; #define N 40const int n=10;int jacobi(float *p,float b,float X,float x,int n);int GS(float *p,float b,float X,float x,int n);int SOR(float *p,float b,float X,float x,int n);void print(float *a,int r);void main()float

4、A1010=4,2,-3,-1,2,1,0,0,0,0,8,6,-5,-3,6,5,0,1,0,0,4,2,-2,-1,3,2,-1,1,9,4,0,-2,1,5,-1,3,-1,1,9,4,-4,2,6,-1,6,7,-3,3,2,3,8,6,-8,5,7,17,2,6,-3,5,0,2,-1,3,-4,2,5,3,0,1,16,10,-11,-9,17,34,2,-1,2,2,4,6,2,-7,13,9,2,0,12,4,0,0,-1,8,-3,-24,-8,6,3,-1;float a10=7,5,-13,2,6,-12,14,-4,5,-5;float X110=0,0,0,0,0,0

5、,0,0,0,0;float x110;float B88=4,2,-4,0,2,4,0,0,2,2,-1,-2,1,3,2,0,-4,-1,14,1,-8,-3,5,6,0,-2,1,6,-1,-4,-3,3,2,1,-8,-1,22,4,-10,-3,4,3,-3,-4,4,11,1,-4,0,2,5,-3,-10,1,14,2,0,0,6,3,-3,-4,2,19;float b8=0,-6,6,23,11,-22,-15,45;float X28=0,0,0,0,0,0,0,0;float x28;float C1010=4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0

6、,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4,-1,0,0,0,0,0,0,0,0,-1,4;float c10=7,5,-13,2,6,-12,14,-4,5,-5;float x310;float X310=0,0,0,0,0,0,0,0,0,0;float *p3;p0=&A00; p1=&B00;p2=&C00;

7、coutJacobi迭代法解第1个方程:endl;jacobi(p0,a,X1,x1,10); coutJacobi迭代法解第2个方程:endl;jacobi(p1,b,X2,x2,8); coutJacobi迭代法解第3个方程:endl;jacobi(p2,c,X3,x3,10); coutGauss-Seidel迭代法解第1个方程:endl;GS(p0,a,X1,x1,10);coutGauss-Seidel迭代法解第2个方程:endl;GS(p1,b,X2,x2,8); coutGauss-Seidel迭代法解第3个方程:endl;GS(p2,c,X3,x3,10);coutSOR迭代法

8、解第1个方程:endl;SOR(p0,a,X1,x1,10);coutSOR迭代法解第2个方程:endl;SOR(p1,b,X2,x2,8);coutSOR迭代法解第3个方程:endl;SOR(p2,c,X3,x3,10);int jacobi(float *p,float b,float X,float x,int n) int k,i,j;float m,R,r,e; coute;for(k=0;kN;k+)R=0;for(i=0;in;i+)m=0;for(j=0;jn;j+)m=m+(*(p+i*n+j)*Xj;xi=Xi+(bi-m)/(*(p+i*n+i);r=xi-Xi;if(r

9、R)R=r;if(R0) print(x,n);cout迭代次数为:k+1endl;return k;for(j=0;j10;j+)Xj=xj;print(x,n);cout迭代次数为:kendl;cout方程解发散,无法用Jacobi方法解此方程!endl; return 0;int GS(float *p,float b,float X,float x,int n) int i,j,k;float t,R,r,e;coute;for(k=0;kN;k+) for(i=0;in;i+) t=0;for(j=0;jn;j+) if(ji)t+=(*(p+i*n+j)*Xj;xi=(bi-t)/

10、(*(p+i*n+i); for(i=0;i10;i+) r=xi-Xi;if(rR)R=r;if(R0) print(x,n);cout迭代次数为:k+1endl;return k;for(j=0;j8;j+)Xj=xj; print(x,n);cout迭代次数为:kendl;cout方程解发散,无法用Gauss-Seidel方法解此方程!endl;return 0;int SOR(float *p,float b,float X,float x,int n)int i,j,k;float t,R,r,e,w;cout请输入松弛因子w(0ww;coute; for(i=0;in;i+)xi=

11、Xi;for(k=0;kN;k+)R=0;for(i=0;in;i+)t=0;for(j=0;jn;j+)t+=(*(p+i*n+j)*xj;r=w*(bi-t)/(*(p+i*n+i);xi+=r;if(rR)R=r; if(R0) print(x,n);cout迭代次数:k+1endl;return k; print(x,n);cout迭代次数:kendl;cout方程解发散,无法使用SOR方法解此方程!endl;return 0;void print(float *a,int n)int j;float *t=a;coutx=( ;for(j=0;jn-1;j+)cout*(t+j),;

12、cout*(t+j)endl;六 结果讨论和分析程序运行截图:七 小结和体会通过这次实验,我对线性方程组的迭代算法有了更深的理解。迭代算法给计算机解决问题提供了有效的途径。使得一些人为难以计算出来的复杂线性方程组通过迭代算法交由计算机来进行计算。同时我也发现了,J,GS和SOR迭代方法各自的特点,对课堂学习的知识有了更好的理解和认识。课题八 曲线拟合的最小二乘法一 实验内容利用数据拟合的最小二乘法从一组数据中找出其规律性,并给出其数学模型的近似表达式。问题提出:在某冶炼过程中,通过实验检测得到含碳量与时间关系的数据如下,求含碳量y与时间t内关系的拟合曲线。t051015202530354045

13、50y01.272.162.863.443.874.154.374.514.584.02用最小二乘法进行三次多项式的曲线拟合,并计算均方误差二 实验要求1.用最小二乘法进行三次多项式的曲线拟合;2.计算yj与y(tj)的误差;j=1,2,3.3.另外选取一个拟合函数,进行拟合效果的比较;4.绘制出曲线拟合的图形。三 目的和意义1. 掌握最小二乘法应用方法2. 理解最小二乘法进行曲线拟合的意义四 结构程序设计#include#include#includeusing namespace std;#define deviation 0.0000000001#define N 20class fit

14、protected:int m, n;double *a, *x, *y;double dt;public:/构造函数fit(int m, int n)this-m = m;this-n = n;dt = 0;x = new doublem;/一共有m个数据点,数据点的x值y = new doublem;a = new doublen+1;void input();/进行最小二乘曲线拟合void fitting();double value(double, int);double* equation(double *, double *);void deviat();void output()

15、;/从文件读入数据void fit:input()int i;char fileName20;/保存文件名/提示用户输入用户名ncoutfileName;/从文件读取数据点ifstream fin(fileName);if(!fin)cout不能正常打开文件fileNameendl;exit(1);for(i = 0; i xi;finyi;fin.close();/关闭文件流/进行最小二乘曲线拟合void fit:fitting()double *vy = new doublem+1;double *f = new doublen+1;int i, j, k;double *vx = new

16、 double*n+1;double *coe = new double*n+1;for(i = 0; i = n; i+)vxi = new doublem+1;coei = new doublen+1;for(i = 0; i = n; i+)for(j = 0; j m; j+)vxij = value(xj, i);for(j = 0; j m; j+)vyj = yj;/计算方程组的系数矩阵for(i = 0; i = n; i+)for(j = 0; j = n; j+)coeij = 0;for(k = 0; k m; k+)coeij += vxik * vxjk; for(i

17、 = 0; i = n; i+)fi = 0;for(j = 0; j m; j+)fi += vxij * vyj;/解正则方程组,并将结果存储到数组a中a = equation(coe, f);/计算均方误差,并将结果存储到统计变量dt中deviat();/计算基函数的函数值double fit:value(double x, int m)double result = 1;for(int i = 0; i m; i+)result *= x;return result;double* fit:equation(double *coe, double* b)double *tx = new

18、 doublen+1;long double r, r1;int w = 1.5;int i, j, k;/初始化初始解for(i = 0; i = n; i+)txi = 0;for(k = 0; k N; k+)r = 0;for(i = 0; i = n; i+)/计算误差r1 = bi;for(j = 0; j fabs(r)r = r1;txi += r1;/如果达到精度要求,则结束迭代if(fabs(r) = deviation)break;/返回计算结果return tx;/计算误差void fit:deviat()double *funcValue = new doublem;

19、double sum = 0;int i, j;for(j = 0; j m; j+)funcValuej = 0;for(i = 0; i dt = sqrt(sum);/输出最终拟合结果,并保存到指定文件void fit:output()int i;/输出各项系数cout*拟合函数的各项系数为(按各项次数从小到大排列):*nendl;for(i = 0; i = n; i+)coutai n;cout*均方误差为:*ndtendl;/main函数int main()int m, n;coutm;coutn;fit express(m, n);express.input();express.fitting();express.output();system(Pause);return 1;五 结果讨论和分析程序运行结果:运用MATLAB绘制的拟合图像六 小结和体会通过这次实验,我对最小二乘法进行的曲线拟合有了更多的认识。通过几种不同形式的计算,由运行结果可知,三次多项式的均方误差小于二次多项式的均方误差,二次多项式的均方误差小于四次多项式的均方误差,因此,三次多项式的拟合曲线相对较好。通过这个实验我也理解到了,数值分析是一个工具学科,它教给了我们分析和解决数值计算问题的方法。使我从中得到很多关于算法的思想,从中受益匪浅。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号