首页 数值分析实验报告

数值分析实验报告

举报
开通vip

数值分析实验报告09级数值分析实验报告 数值分析实验报告 计算机科学与技术 课题一 解线性方程组的直接方法 一、问题提出 给定下列几个不同类型的线性方程组,请用适当的直接法求解. (1) 线性方程组 = 精确解x EMBED Equation.3 = ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 ) (2)设对称正定阵系数阵线方程组 = 精确解x = ( 1, -1, 0, 2, 1, -1, 0, 2 ) 3、三对角...

数值分析实验报告
09级数值 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 数值分析实验报告 计算机科学与技术 课题一 解线性方程组的直接方法 一、问题提出 给定下列几个不同类型的线性方程组,请用适当的直接法求解. (1) 线性方程组 = 精确解x EMBED Equation.3 = ( 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 ) 二、要求 (1)对上述三个方程组分别利用Gauss顺序消去法与Gauss列主元消去法;平方根法与改进平方根法;追赶法求解(选择其一). (2)编出算法通用程序. (3)在应用Gauss消去法时,尽可能利用相应程序输出系数矩阵的三角分解式. 三、 目的和意义 (1)通过该课题的程序编制,掌握模块化结构程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 方法. (2)掌握求解各类线性方程组的直接方法,了解各种方法的特点. (3)体会高斯消去法选主元的必要性. 四、实验流程图 Gauss顺序消去法 平方根法 追赶法 五、实验源程序代码 Gauss顺序消去法 #include #include void main() { double a[10][11]={4,2,-3,-1,2,1,0,0,0,0,5, 8,6,-5,-3,6,5,0,1,0,0,12, 4,2,-2,-1,3,2,-1,0,3,1,3, 0,-2,1,5,-1,3,-1,1,9,4,2, -4,2,6,-1,6,7,-3,3,2,3,3, 8,6,-8,5,7,17,2,6,-3,5,46, 0,2,-1,3,-4,2,5,3,0,1,13, 16,10,-11,-9,17,34,2,-1,2,2,38, 4,6,2,-7,13,9,2,0,12,4,19, 0,0,-1,8,-3,-24,-8,6,3,-1,-21};//增广矩阵 double x[10]; int i,j,k; int maxi; double max; double temp; double sum; double l; for(k=0;k<9;k++) { i=k; max=fabs(a[i][k]); maxi=i; for(;i<10;i++) { if(fabs(a[i][k])>max) { max=(fabs(a[i][k])); maxi=i; } } if(maxi!=k) { for(j=0;j<=10;j++) { temp=a[k][j]; a[k][j]=a[maxi][j]; a[maxi][j]=temp; } } for(i=k+1;i<10;i++) { l=a[i][k]/a[k][k]; for(j=k+1;j<=10;j++) { a[i][j]=a[i][j]-l*a[k][j]; } a[i][k]=0.0; } } printf("GAUSS列主元后的矩阵为:\n"); for(i=0;i<=9;i++) { for(j=0;j<10;j++) printf("%8.5f",a[i][j]); printf("\n"); } x[9]=a[9][10]/a[9][9]; for(i=8;i>=0;i--) { sum=0; for(j=i+1;j<=9;j++) { sum=a[i][j]*x[j]+sum; } x[i]=(a[i][10]-sum)/a[i][i]; } printf("x向量为:\n"); for(i=0;i<10;i++) printf("%f ",x[i]); } 平方根法 #include #include void main() { double a[8][8]={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}; double b[8]={0,-6,6,23,11,-22,-15,45},g[8][8],x[8],y[8]; int k,m,i; double sum; for(k=0;k<8;k++) { if(k==0) {g[0][0]=sqrt(a[0][0]); a[0][0]=g[0][0]; for(i=1;i<=7;i++) {g[i][0]=a[i][0]/a[0][0]; a[i][0]=g[i][0]; a[0][i]=a[i][0]; } y[0]=b[0]/g[0][0]; } else{ sum=0.0; for(m=0;m<=k-1;m++) sum=sum+a[k][m]*a[k][m]; g[k][k]=sqrt(a[k][k]-sum); a[k][k]=g[k][k]; for(i=k+1;i<8;i++) { sum=0.0; for(m=0;m<=k-1;m++) sum=sum+a[i][m]*a[k][m]; g[i][k]=(a[i][k]-sum)/a[k][k]; a[i][k]=g[i][k]; a[k][i]=a[i][k]; } sum=0.0; for(m=0;m<=k-1;m++) sum=sum+a[k][m]*y[m]; y[k]=(b[k]-sum)/a[k][k]; } } for(i=0;i<8;i++) { for(m=0;m<8;m++) printf("%8.6f ",a[i][m]); printf("\n"); } printf("所得y[]为 \n"); for(i=0;i<8;i++) { printf("%f ",y[i]); } x[7]=y[7]/a[7][7]; for(k=6;k>=0;k--) { sum=0.0; for(m=k+1;m<8;m++) sum=sum+a[k][m]*x[m]; x[k]=(y[k]-sum)/a[k][k]; } printf("解向量x为:\n"); for(i=0;i<8;i++) { printf("%f ",x[i]); } } 追赶法: #include #include void main() { double a[10]={4,4,4,4,4,4,4,4,4,4}, b[10]={7,5,-13,2,6,-12,14,-4,5,-5}, c[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1}, d[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1}, x[10],y[10],p[10],q[9]; int i; p[0]=a[0]; for(i=0;i<9;i++) { q[i]=c[i]/p[i]; p[i+1]=a[i+1]-d[i+1]*q[i]; } y[0]=b[0]/p[0]; for(i=1;i<10;i++) { y[i]=(b[1]-d[i]*y[i-1])/p[i]; } x[9]=y[9]; for(i=8;i>=0;i--) { x[i]=y[i]-q[i]*x[i+1]; } printf("解向量x为:\n "); for(i=0;i<10;i++) { printf("%9.6f ",x[i]); } } 课题二 线性方程组的迭代法 一、问题提出 1、设线性方程组 = x EMBED Equation.3 = ( 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迭代法和SOR方法计算其解。 二、要求 1、体会迭代法求解线性方程组,并能与消去法做以比较; 2、分别对不同精度要求,如 由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR方法时,选取松弛因子 =0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 三、目的和意义 1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较; 2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序; 3、体会上机计算时,终止步骤 < 或k >(予给的迭代次数),对迭代法敛散性的意义; 4、体会初始解 x ,松弛因子的选取,对计算结果的影响。 四、实验流程图 J GS SOR 五、实验代码 Jacobi #include #include #define N 15 void main() { double a[10][10]={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,0,3,1, 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}; double x0[10]={0,0,0,0,0,0,0,0,0,0}; double b[10]={5,12,3,2,3,46,13,38,19,-21}; double x[10]; double x_true[10]={1,-1,0,1,2,0,3,1,-1,2}; int i,j,k; double max; double sum; double e1=10e-3,e2=10e-4,e3=10e-5; for(k=0;kmax) max=fabs(x_true[i]-x0[i]); } printf("%f\n ",max); if(max #include #define N 20 void main() { double a[8][8]={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}; double x0[8]={0,0,0,0,0,0,0,0}; double b[8]={0,-6,6,23,11,-22,-15,45}; double x[8]; double r; double r1; double e1=10e-3,e2=10e-4,e3=10e-5; double w1=0.8,w2=0.9,w3=1,w4=1.1,w5=1.2; int k,i,j; double sum; for(i=0;i<8;i++) x[i]=x0[i]; for(k=1;kfabs(r)) r=r1; x[i]=x[i]+r1; } if(fabs(r)<=e1) { printf("总次数为%d\n",k); for(i=0;i<8;i++) printf("%9.6f",x[i]); break; } } if(k==N) { printf("已达到最大迭代次数\n"); for(i=0;i<8;i++) printf("%9.6f",x[i]); } } #include #include #define N 20 void main() { double a[8][8]={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}; double x0[8]={0,0,0,0,0,0,0,0}; double b[8]={0,-6,6,23,11,-22,-15,45}; double x_true[8]={1,-1,0,2,1,-1,0,2}; double x[8]; double sum,max; int i,j,k; double e1=10e-3,e2=10e-4,e3=10e-5; for(k=1;kmax) max=fabs(x[i]-x_true[i]); } printf("max%d=%f\n",k,max); if(max #include double lagrange(double x[],double y[],double h,int n) // 拉格朗日插值函数 { int i,j; double k,f=0.0; for(i=0;ix[2]) for(i=0;i<3;i++) { d=1.0; for(j=0;j<3;j++) {if(j!=i) d= d*(k-x[j])/(x[i]-x[j]); } f=f+d*y[i]; } return f; } int main() { double x1[]={0.4,0.55,0.65,0.80,0.95,1.05},y1[]={0.41075,0.57815,0.69675,0.90,1.00,1.25382}, x2[]={1,2,3,4,5,6,7}, y2[]={0.368,0.135,0.050,0.018,0.007,0.002,0.001}; double x=0.596,y=0.99,z=1.8; printf("%f \n ",lagrange( x1,y1,x,6)); printf("%f \n ",lagrange( x1,y1,y,6)); printf("%f \n",stwofen( x1,y1,x)); printf("%f \n",stwofen( x1,y1,y)); printf("%f \n",lagrange( x2,y2,z,7)); return 0; } 课题四 数值积分 一、问题提出 选用复合梯形公式,复合Simpson公式,Romberg算法,计算 (1) I = (2) I = EMBED Equation.3 (3) I = (4) I = 二、要求 1、 编制数值积分算法的程序; 2、 分别用两种算法计算同一个积分,并比较其结果; 3、 分别取不同步长 EMBED Equation.3 ,试比较计算结果(如n = 10, 20等); 4、 给定精度要求 ,试用变步长算法,确定最佳步长。 三、目的和意义 1、 深刻认识数值积分法的意义; 2、 明确数值积分精度与步长的关系; 3、 根据定积分的计算方法,可以考虑二重积分的计算问题。 四、流程图 复化的T形公式 复化的Simpson公式 Romberg 公式 五、代码实现 复化梯形 #include #include #define N 2000000 double fx2(double x) { if(x==0) return 1; else return sin(x)/x; } double fx1(double x) { return sqrt(4-sin(x)*sin(x)); } double fx3(double x) { return(exp(x)/(4+x*x)); } double fx4(double x) { return (log(1+x)/(1+x*x)); } void main() { double a=0; double b=0.25; double h=(b-a)/N; double F0,F1; int j; double y,x; F0=fx1(a)+fx1(b); F1=0; for(j=1;j #include #define N 100 double fx2(double x) { if(x==0) return 1; else return sin(x)/x; } double fx1(double x) { return sqrt(4-sin(x)*sin(x)); } double fx3(double x) { return(exp(x)/(4+x*x)); } double fx4(double x) { return (log(1+x)/(1+x*x)); } void main() { double a=0; double b=0.25; double h=(b-a)/(2*N); double F0,F1,F2; int j; double y,x; F0=fx1(a)+fx1(b); F1=0; F2=0; for(j=1;j<2*N;j++) { x=a+j*h; if(j%2==0) F2=F2+fx1(x); else F1=F1+fx1(x); } y=h*(F0+2*F2+4*F1)/3.0; printf("%f\n",y); b=1.0; h=(b-a)/(2*N); F0=fx2(a)+fx2(b); F1=0; F2=0; for(j=1;j<2*N;j++) { x=a+j*h; if(j%2==0) F2=F2+fx2(x); else F1=F1+fx2(x); } y=h*(F0+2*F2+4*F1)/3.0; printf("%f\n",y); F0=fx3(a)+fx3(b); F1=0; F2=0; for(j=1;j<2*N;j++) { x=a+j*h; if(j%2==0) F2=F2+fx3(x); else F1=F1+fx3(x); } y=h*(F0+2*F2+4*F1)/3.0; printf("%f\n",y); F0=fx4(a)+fx4(b); F1=0; F2=0; for(j=1;j<2*N;j++) { x=a+j*h; if(j%2==0) F2=F2+fx4(x); else F1=F1+fx4(x); } y=h*(F0+2*F2+4*F1)/3.0; printf("%f\n",y); } N=20 4 _1387219887.unknown _1387219904.unknown _1387219912.unknown _1387219920.unknown _1387219924.unknown _1387219928.unknown _1387219930.unknown _1387219931.vsd � � � 开始 开始 输入积分a,b值及N h=(b-a)/N F0=f(a)+f(b) F1=0 i=1…N x=a+ih F1=F1+f(x) Y=h*(F0+2*F1)/2.0 结束 输入积分a,b值及N h=(b-a)/2N F0=f(a)+f(b) F1=0 F2=0 i=1…2N-1 x=a+ih i为偶数->F2=F2+f(x) else -> F1=F1+f(x) Y=h*(F0+2*F1)/2.0 结束 _1387219932.vsd � � 开始 Y N 输入积分a,b值及精度ε 结束 _1387219929.unknown _1387219926.unknown _1387219927.unknown _1387219925.unknown _1387219922.unknown _1387219923.unknown _1387219921.unknown _1387219916.vsd � � 开始 输入数据n,x1,x2,x3…xn及函数值y1,y2,y3...yn,所求值h For(i=0;i|R| 判断k==N 输出x[1…n],k |R|<=ε i==n i++ 已经达到最大迭代次数,输出x[1…n],k N Y Y Y N Y N 结束 _1387219913.unknown _1387219908.unknown _1387219910.unknown _1387219911.unknown _1387219909.unknown _1387219906.unknown _1387219907.unknown _1387219905.unknown _1387219896.unknown _1387219900.unknown _1387219902.unknown _1387219903.unknown _1387219901.unknown _1387219898.unknown _1387219899.unknown _1387219897.unknown _1387219891.unknown _1387219894.unknown _1387219895.unknown _1387219893.unknown _1387219889.vsd � � � 开始 初始化系数矩阵及右端项和维数 循环k=1…n-1找到最大列主元,k<=j<=n,|a[i][k]|=max|a[j][k]| a[i][k]==0 i==k 消元 for (i=k+1,i<=n,i++) for(j=k,j<=n,j++) l[i][k]=a[i][k]/a[k][k] a[i][j]=a[i][j]-l[i][k]*a[k][j] 则b[i]=b[i]-l[i][k]*b[k] j=k…n a[k][j]与a[i][j]两行互换 判断a[n][n]==0 回代求解j=i+1...n 则x[n]=b[n]/a[n][n] 则x[i]=(b[i]-∑(a[i][j]*x[j]))/a[i][i] 没有唯一解 输出x[1…n] 结束 N Y Y N N Y Gauss顺序消去法 _1387219890.vsd � � � 开始 初始化系数矩阵及右端项和维数 i=k+1..n;m=1…k-1 a[i][k]=(a[i][k]-∑a[i][m]a[k][m])/a[k][k] y[k]=(b[k]-∑a[k][m]y[m])/a[k][k] 循环 k=1…n;m=1…k-1 则a[k][k]=(a[k][k]-∑(a[k][m]*a[k][m])^½ 开始 回代求解则x[n]=y[n]/a[n][n] 则k=n-1…1;m=k+1…n;x[k]=(y[k]-∑(a[m][k]*x[m]))/a[k][k] 初始化系数矩阵及右端项和维数 输出x[1…n] 结束 α[1]=a[1] 对i=1…n-1; 计算β[i]=c[i]/α[i] α[i+1]=a[i+1]-d[i+1]*β[i]; 对于i=n-1…1; x[n]=y[n]; x[i]=y[i]-β[i]*x[i+1]; 输出x[1…n] 对于i=2…n; y[1]=b[1]/α[1] 则y[i]=(b[1]-d[i]*y[i-1])/α[i] 结束 _1387219888.unknown _1387219879.unknown _1387219883.unknown _1387219885.unknown _1387219886.unknown _1387219884.unknown _1387219881.unknown _1387219882.unknown _1387219880.unknown _1387219875.unknown _1387219877.unknown _1387219878.unknown _1387219876.unknown _1387219873.unknown _1387219874.unknown _1387219872.unknown
本文档为【数值分析实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_997062
暂无简介~
格式:doc
大小:1MB
软件:Word
页数:31
分类:理学
上传时间:2013-04-23
浏览量:299