数值计算方法上机实验报告.doc
《数值计算方法上机实验报告.doc》由会员分享,可在线阅读,更多相关《数值计算方法上机实验报告.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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 xN,aNN;fp1=fopen(a1.txt,r);
3、fp2=fopen(b1.txt,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-) /*回代*
4、/ t1=0; for(j=i+1;jn;j+) t1+=aij*xj; xi=ain-t1; for(i=0;in;i+) fprintf(fp2,n方程组的根为x%d=%lf,i+1,xi); fclose(fp1); fclose(fp2); main() LZ(); l 具体算例及求解结果:用列选主元法求解下列线性方程组输入3 输出结果:方程组的根为x1=6.0000001 2 -3 8 方程组的根为x2=4.000000 2 1 3 22 方程组的根为x3=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,x200,y200;static double L200200,U200200;fp1=fopen(a2.txt,r);fp2=fopen(b2.txt,w);fscanf(fp1,%d,&N);for
6、(i=0;iN;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;
7、i+) fprintf(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*xk; xi=(yi-s)/Uii; fprintf(fp2,n方程组解为:);for(i=0;iN;i+) fprintf(fp2,nx%d=%10.3f,i
8、+1,xi); fclose(fp1); fclose(fp2);l 具体算例及求解结果:用杜里特尔分解法求解方程组输入数据 输出结果:U矩阵为: 2.000 3.000 4.000 0.000 -6.500 -4.000 0.000 0.000 -2.5383 L矩阵为:2 3 4 1.000 0.000 0.0003 -2 2 1.500 1.000 0.0004 2 3 2.000 0.615 1.00039 14 43 方程组解为:x1= 6.000x2= 5.000x3= 3.000l 输入变量、输出变量说明:输入变量:系数矩阵元素,常向量元素输出变量:解向量元素3. 拉格朗日插值法
9、l 算法原理:首先构造基函数,可以证明基函数满足下列条件:,对于给定个节点,次拉格朗日插值多项式由下式给出:其中由于是一个关于的次多项式,所以为关于的不高于次的代数多项式。当时,满足插值条件。l 计算机程序框图:源程序:#includestdio.h#includemath.hint n,m,i,j; float x2,x3,z1=0.0,z=0.0,t,x50,y50,c50,A50;main()FILE *fp1,*fp2; fp1=fopen(a3.txt,r); fp2=fopen(b3.txt,w); fscanf(fp1,%d,&n); for(i=0;in;i+) fscanf(
10、fp1,%f,%f,&xi,&yi); fscanf(fp1,%d,&m);fscanf(fp1,%f,&x2);fscanf(fp1,%f,&x3); for(i=0;in;i+) /*选m个最接近的点*/ ci=fabs(xi-x2); for(i=0;in;i+) for(j=i+1;jcj) t=ci; ci=cj; cj=t; t=xi; xi=xj; xj=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*(x2-xj)/(xi-xj); z=z+Ai*yi; for(
11、i=0;im;i+) /*求值*/ Ai=1.0; for(j=0;jm;j+) if(i!=j) Ai=Ai*(x3-xj)/(xi-xj); z1=z1+Ai*yi; fprintf(fp2,nx=%10.7f处的函数值为:y=%10.7f,x2,z); fprintf(fp2,nx=%10.7f处的函数值为:y=%10.7f,x3,z1); fclose(fp1); fclose(fp2);具体算例及求解结果:对于一组数据表进行二次数值插值编程,根据下面数值表计算f(0.49)和f(0.51)0.20.40.60.8f(x)16201510输入数据: 输出结果:x= 0.4900000处
12、的函数值为:y=18.86375054 x= 0.5100000处的函数值为:y=18.36375240.2,160.4,200.6,150.8,1030.490.51l 输入变量、输出变量说明:输入变量:插值节点输出变量:插值所得到被插函数在插值点的近似值4. 曲线拟合l 算法原理:对于给定的一组数据,=1,2,寻求做次多项式使性能指标为最小。由于性能指标可以被看做关于,=0,1,的多元函数,故上述拟合多项式的构造问题可转化为多元函数的极值问题。令从而有正则方程组求解即得多项式系数。l 计算机程序框图:l 源程序:#include #include main()int i,j,k,m,n,l
13、,N,t,t1;double max,A5050,x50,y50,S50,T50,X50;float yb=0.0,xb,a1,a2,a0;FILE *fp1,*fp2;fp1=fopen(a4.txt,r);fp2=fopen(b4.txt,w);fscanf(fp1,%d %dn,&n,&m);for(i=0;in;i+) fscanf(fp1,%lf %lf,&xi,&yi); fscanf(fp1,%f,&xb);for(i=0;i=2*m;i+)Si=0.0; for(j=0;jn;j+) Si+=pow(xj,i); for(i=0;i=m;i+) Ti=0.0; for(j=0;
14、jn;j+) Ti+=yj*pow(xj,i); N=m+1;for(i=0;iN;i+) for(j=0;jN;j+)l=i+j;Aij=Sl; AiN=Ti; for(i=0;iN-1;i+) max=fabs(Aii); /*选主*/ for(j=i+1;jmax) max=fabs(Aji); m=j; if(m!=i) for(k=0;k=N;k+)t=Aik; Aik=Amk; Amk=t; for(j=i+1;j=0;k-) Ajk=Ajk-Aik*Aji/Aii; for(i=N-1;i=0;i-) /*回代*/ for(j=i-1;j=0;j-) for(k=N;k=0;k-
15、) Ajk=Ajk-Aik*Aji/Aii;fprintf(fp2,n解为:); /*输出结果*/for(i=0;iN;i+) fprintf(fp2,na%d=%10.7lf,i,AiN/Aii);fprintf(fp2,n拟合多项式为:n);fprintf(fp2, P(x)=%10.7lf,A0N/A00);for(i=1;iN;i+) fprintf(fp2,+(%10.7lf)x%d,AiN/Aii,i);for(i=0;iN;i+)yb+=(AiN/Aii)*pow(xb,i);fprintf(fp2,nP(%f)=%10.7f,xb,yb);fclose(fp1);fclose(
16、fp2);l 具体算例及求解结果:对于一组数据表进行二次多项式曲线拟合,根据以下数据胡二次拟合曲线求y(5)123456789101.62.83.64.95.46.87.99.210.211.4试用最小二乘法求二次拟合多项式输入数据: 10 2 输出结果: 1 1.6 解为: 2 2.8 a0=-0.3012450 3 3.6 a1= 1.3167338 4 4.9 a2=-0.0166439 5 5.4 拟合多项式为: 6 6.8 P(x)=-0.3012450+( 1.3167338)x1+(-0.0166439)x2 7 7.9 P(5.000000)= 5.8663259 8 9.2
17、9 10.210 11.45.0 输入变量、输出变量说明:输入变量:已知数据点输出变量:拟合多项式的系数 5. 改进欧拉法l 算法原理:当取值较小时,让梯形法的迭代公式只迭代一次就结束。这样先用欧拉公式求得一个初步近似值,称之为预报值,预报值的精度不高,用它替代梯形法右端的,再直接计算得出,并称之为校正值,这时得到预报-校正公式。将预报-校正公式称为改进欧拉公式。l 计算机程序框图:l 源程序:#include stdio.h#include math.hFILE *fp1,*fp2;float func(float x,float y) float dy; dy=sqrt(2*x*x+3*y
18、*y); return (dy); /*定义函数的导*/ main()int i; float h,yp,yc,y0,x1,x2; if(fp1=fopen(a5.txt,r)=NULL) printf(cannot open this filen); exit(0); fp2=fopen(b5.txt,w); fscanf(fp1,%f,%f,%f,%f,&x1,&x2,&y0,&h); for(i=0;i(x2-x1)/h;i+) yp=y0+h*func(x1+i*h,y0); yc=y0+h*func(x1+(i+1)*h,yp); y0=0.5*(yp+yc); fprintf(fp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算方法 上机 实验 报告
限制150内