数值计算方法上机实验报告

上传人:新** 文档编号:469774076 上传时间:2024-01-31 格式:DOC 页数:27 大小:241KB
返回 下载 相关 举报
数值计算方法上机实验报告_第1页
第1页 / 共27页
数值计算方法上机实验报告_第2页
第2页 / 共27页
数值计算方法上机实验报告_第3页
第3页 / 共27页
数值计算方法上机实验报告_第4页
第4页 / 共27页
数值计算方法上机实验报告_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《数值计算方法上机实验报告》由会员分享,可在线阅读,更多相关《数值计算方法上机实验报告(27页珍藏版)》请在金锄头文库上搜索。

1、-数值计算方法上机实验报告实验目的:复习和稳固数值计算方法的根本数学模型,全面掌握运用计算机进展数值计算的具体过程及相关问题。利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。上机练习任务:利用计算机根本C语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。 掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。一、 各算法的算法原理及计算机程序框图1. 列主元高斯消去法l 算法原理:高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘一个方程后加只另一个

2、方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。列选住院是当高斯消元到第步时,从列的以下包括的各元素中选出绝对值最大的,然后通过行交换将其交换到的位置上。交换系数矩阵中的两行包括常数项,只相当于两个方程的位置交换了,因此,列选主元不影响求解的结果。l 计算机程序框图如上l 源程序:#define N 200#include stdio.h#include math.hFILE *fp1,*fp2;void LZ() int n,i,j,k=0,l; double d,t,t1; static double *N,aNN;fp1=fopen(a1.t*t,r); fp2=

3、fopen(b1.t*t,w); fscanf(fp1,%d,&n); for(i=0;in;+i) for(j=0;jfabs(d) /*选主元*/ d=aik;l=i; i+;while(in); if(d=0) printf(n输入矩阵有误!n); else /*换行*/ if(l!=k) for(j=k;j=n;j+) t=alj; alj=akj; akj=t; for(j=k+1;j=n;j+) /*正消*/ akj/=akk; for(i=k+1;in;i+) for(j=k+1;j=n;j+) aij-=aik*akj; k+; while(k=0;i-) /*回代*/ t1=

4、0; for(j=i+1;jn;j+) t1+=aij*j; *i=ain-t1; for(i=0;in;i+) fprintf(fp2,n方程组的根为*%d=%lf,i+1,*i); fclose(fp1); fclose(fp2); main() LZ(); l 具体算例及求解结果:用列选主元法求解以下线性方程组输入3 输出结果:方程组的根为*1=6.0000001 2 -3 8 方程组的根为*2=4.000000 2 1 3 22 方程组的根为*3=2.0000003 2 1 28l 输入变量、输出变量说明:输入变量:系数矩阵元素,常向量元素输出变量:解向量元素2. 杜里特尔分解法解线性

5、方程l 算法原理:求解线性方程组时,当对进展杜里特尔分解,则等价于求解,这时可归结为利用递推计算相继求解两个三角形系数矩阵为三角矩阵方程组,用顺代,由求出,再利用回带,由求出。计算机程序框图:源程序:#include stdio.h#include math.hFILE *fp1,*fp2;void main()int i,j,k,N;double s,A200200,B200,*200,y200;static double L200200,U200200;fp1=fopen(a2.t*t,r);fp2=fopen(b2.t*t,w);fscanf(fp1,%d,&N);for(i=0;iN;

6、i+) for(j=0;jN;j+) fscanf(fp1,%lf,&Aij); for(i=0;iN;i+)fscanf(fp1,%lf,&Bi);for(i=0;iN;i+) /*LU分解*/ for(j=i;jN;j+) s=0.0; for(k=0;ki;k+)s+=Lik*Ukj; Uij=Aij-s; for(j=i+1;jN;j+) s=0.0; for(k=0;ki;k+)s+=Uki*Ljk; Lji=(Aji-s)/Uii; for(i=0;iN;i+) for(j=0;jN;j+) Lii=1;fprintf(fp2,nU矩阵为:);for(i=0;iN;i+) fpri

7、ntf(fp2,n); for(j=0;jN;j+) fprintf(fp2,%10.3f,Uij); fprintf(fp2,nL矩阵为:);for(i=0;iN;i+) fprintf(fp2,n); for(j=0;jN;j+) fprintf(fp2,%10.3f,Lij); for(i=0;iN;i+) s=0.0; for(k=0;k=0;i-) s=0.0; for(k=i+1;kN;k+) s+=Uik*k; *i=(yi-s)/Uii; fprintf(fp2,n方程组解为:);for(i=0;iN;i+) fprintf(fp2,n*%d=%10.3f,i+1,*i); f

8、close(fp1); fclose(fp2);l 具体算例及求解结果:用杜里特尔分解法求解方程组输入数据 输出结果:U矩阵为: 2.000 3.000 4.0000.000 -6.500 -4.0000.000 0.000 -2.5383 L矩阵为:2 34 1.000 0.000 0.0003 -221.500 1.000 0.0004232.000 0.615 1.00039 14 43方程组解为:*1= 6.000*2= 5.000*3= 3.000l 输入变量、输出变量说明:输入变量:系数矩阵元素,常向量元素输出变量:解向量元素3. 拉格朗日插值法l 算法原理:首先构造基函数,可以证

9、明基函数满足以下条件:,对于给定个节点,次拉格朗日插值多项式由下式给出:其中由于是一个关于的次多项式,所以为关于的不高于次的代数多项式。当时,满足插值条件。l 计算机程序框图:源程序:#includestdio.h#includemath.hint n,m,i,j; float *2,*3,z1=0.0,z=0.0,t,*50,y50,c50,A50;main()FILE *fp1,*fp2; fp1=fopen(a3.t*t,r); fp2=fopen(b3.t*t,w); fscanf(fp1,%d,&n); for(i=0;in;i+) fscanf(fp1,%f,%f,&*i,&yi)

10、; fscanf(fp1,%d,&m);fscanf(fp1,%f,&*2);fscanf(fp1,%f,&*3); for(i=0;in;i+) /*选m个最接近的点*/ ci=fabs(*i-*2); for(i=0;in;i+) for(j=i+1;jcj) t=ci; ci=cj; cj=t; t=*i; *i=*j; *j=t; t=yi; yi=yj; yj=t; for(i=0;im;i+) /*求值*/ Ai=1.0; for(j=0;jm;j+) if(i!=j) Ai=Ai*(*2-*j)/(*i-*j); z=z+Ai*yi; for(i=0;im;i+) /*求值*/ Ai=1.0; for(j=0;jm;j+) if(i!=j) Ai=Ai*(*3-*j)/(*i-*j); z1=z1+Ai*yi; fprintf(fp2,n*=%10.7f处的函数值为:y=%10.7f,*2,z); fprintf(fp2,n*=%10.7f处的函数值为:y=%10.7f,*3,z1); fclose(fp1); fclose(fp2);具体算例及求解结果:对于一组数据表进展二次数值插值编程,根据下面数值表计算f(0.49)和f(0.51)0.20.40.60

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

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