C语言课程设计2

上传人:痛*** 文档编号:66950565 上传时间:2022-03-29 格式:DOC 页数:19 大小:420KB
收藏 版权申诉 举报 下载
C语言课程设计2_第1页
第1页 / 共19页
C语言课程设计2_第2页
第2页 / 共19页
C语言课程设计2_第3页
第3页 / 共19页
资源描述:

《C语言课程设计2》由会员分享,可在线阅读,更多相关《C语言课程设计2(19页珍藏版)》请在装配图网上搜索。

1、.数值分析上机实验报告姓 名闫三木学 号20093514班 级软件工程0908指 导 教 师邵新慧实验名称曲线拟合最小二乘法 线性方程组迭代法开 设 学 期2010 2011第二学期评 定 成 绩评定人签字评 定 日 期东北大学软件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 )试分别选用Jacob

2、i 迭代法,Gauss-Seidol迭代法和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

4、);void main()float 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;flo

5、at X110=0,0,0,0,0,0,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,

6、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,-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=&A0

7、0; p1=&B00;p2=&C00;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,X

8、3,x3,10);coutSOR迭代法解第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+

9、i*n+i);r=xi-Xi;if(rR)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

10、*n+j)*Xj;xi=(bi-t)/(*(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

11、; for(i=0;in;i+)xi=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;j

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

13、t05101520253035404550y01.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#d

14、efine N 20class fitprotected: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 dev

15、iat();void output();/从文件读入数据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,

16、 k;double *vx = new 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 +=

17、 vxik * vxjk; for(i = 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*

18、 b)double *tx = new 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 *funcV

19、alue = new doublem;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绘制的拟合图像六 小结和体会通过这次实验,我对最小二乘法进行的曲线拟合有了更多的认识。通过几种不同形式的计算,由运行结果可知,三次多项式的均方误差小于二次多项式的均方误差,二次多项式的均方误差小于四次多项式的均方误差,因此,三次多项式的拟合曲线相对较好。通过这个实验我也理解到了,数值分析是一个工具学科,它教给了我们分析和解决数值计算问题的方法。使我从中得到很多关于算法的思想,从中受益匪浅。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!