数值分析第四次实习报告.docx
- 文档编号:7194931
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:20
- 大小:92.20KB
数值分析第四次实习报告.docx
《数值分析第四次实习报告.docx》由会员分享,可在线阅读,更多相关《数值分析第四次实习报告.docx(20页珍藏版)》请在冰豆网上搜索。
数值分析第四次实习报告
学生学号
实验课成绩
武汉理工大学
学生实验报告书
实验课程名称:
数值分析(第四次实习)
开课名称:
计算机科学与技术学院
指导老师姓名:
熊盛武
学生姓名:
学生专业班级:
软件工程0803班
2009——2010学年第一学期
一、计算实习的内容:
实习1给定矩阵A与向量b
A=
b=
(1)求A的三角分解(不必输出);
(2)利用A的三角分解解下列方程组:
Ax=b
A2x=b
A3x=b
对第
题分析一下,如果先求M=A2,再解Mx=b,有何缺点?
实习2追赶法的优点
分别对n=5,100,300解下列方程组Ax=b
A=
b=
再用现有的三角分解法程序解此方程组,比较一下两者的效率,哪种方法机时少,可求解的矩阵阶数高?
实习3Jacobi迭代法与Gauss-Seidel迭代法的收敛性与收敛速度
研究用Jacobi迭代法与Gauss-Seide迭代法解下列方程组Ax=b的收敛性,通过上机计算,验证分析是否正确,并观察右端项对迭代收敛是否有影响,比较两法的收敛速度。
(1)A=
b1=
b2=
(2)A=
b1=
b2=
(3)A=
b=
实习4松弛因子对超松弛迭代法收敛速度的影响
编写一个超松弛迭代法解方程组Ax=b的计算机程序,其中
A=
b=
分别对不同的阶数(例如n=10,n=100)w=1.1,1.2,……,1.9进行迭代,记录近似解
时所用的迭代次数k,观察松弛因子对收敛速度的影响。 实习5用欧拉公式求解 二、计算实习: (一)三角分解法程序源代码 #include usingnamespacestd; intmain() { constintMAX_N=20; staticdoublea[MAX_N][MAX_N],b[MAX_N],x[MAX_N],y[MAX_N]; staticdoubleu[MAX_N][MAX_N],l[MAX_N][MAX_N]; inti,j,k,n,r; cout<<"请输入矩阵阶数: "; cin>>n; if(n>MAX_N) { cout<<"TheinputnislargerthanMAX_N,pleaseredefinetheMAX_N"< return1; } if(n<=0) { cout<<"pleaseinputnbetween1and"< return1; } //输入a[i][j],b[i] cout<<"nowinputthematrixa[i][j],i,j=0..."< "; for(i=0;i { for(j=0;j cin>>a[i][j]; } cout<<"nowinputthematrixb[i],i=0..."< "; for(i=0;i cin>>b[i]; //分解过程 for(i=0;i l[i][i]=1;//l矩阵对角元素为1 for(k=0;k { for(j=0;j { u[k][j]=a[k][j]; for(r=0;r<=k-1;r++) u[k][j]-=l[k][r]*u[r][j]; } for(i=k+1;k {l[i][k]=a[i][k]; for(r=0;r<=k-1;r++) l[i][k]-=l[i][r]*u[r][k]; l[i][k]/=u[k][k]; } } //ly=b for(i=0;i { y[i]=b[i]; for(j=0;j<=i-1;j++) y[i]-=l[i][r]*y[j]; } //ux=y for(i=n-1;i>=0;i--) { x[i]=y[i]; for(j=i+1;j x[i]-=u[i][j]*x[j]; x[i]/=u[i][i]; } cout<<"方程组的解为: ";//输出x for(i=0;i cout< return0; } (二)追赶法程序源代码 #include usingnamespacestd; intmain() { constintMAX_N=300; inta[MAX_N],b[MAX_N],c[MAX_N],d[MAX_N]; floatl[MAX_N],r[MAX_N],y[MAX_N],x[MAX_N]; inti,n; cout<<"请输入矩阵阶数: "; cin>>n; if(n>MAX_N) { cout<<"TheinputnislargerthanMAX_N,pleaseredefinetheMAX_N"< return1; } if(n<=0) { cout<<"pleaseinputnbetween1and"< return1; } //输入a[n],b[n],c[n],d[n] cout<<"nowinputthematrixa[n],n=2..."< "; for(i=2;i<=n;i++) cin>>a[i]; cout<<"nowinputthematrixb[n],n=1..."< "; for(i=1;i<=n;i++) cin>>b[i]; cout<<"nowinputthematrixc[n],n=1..."< "; for(i=1;i cin>>c[i]; cout<<"nowinputthematrixd[n],n=1..."< "; for(i=1;i<=n;i++) cin>>d[i]; //追的过程 r[0]=0; y[0]=0; a[1]=0; c[n]=0; for(i=1;i<=n;i++) { l[i]=b[i]-a[i]*r[i-1]; r[i]=c[i]/l[i]; y[i]=(d[i]-a[i]*y[i-1])/l[i]; } //赶的过程 cout< x[n]=y[n]; for(i=n-1;i>=1;i--) { x[i]=y[i]-r[i]*x[i+1];\ } cout<<"方程组的解为: "; for(i=1;i<=n;i++) { cout< } cout< return0; } 计算得解为: -2-3-3-3-2 (三)雅可比迭代法和高斯赛德尔迭代法程序源代码 #include #include usingnamespacestd; inta,b,m; double*x0; voidJacobi(double**c,double*d,intn,doubleeps); voidGauss(double**c,double*d,intn,doubleeps); voidmain() { intn; double**A,*B; doublee; cout<<"请选择求方程组的迭代方法! 雅可比选0,高斯-赛德尔选1! "< cin>>n; cout<<"输入方程组的变量的个数以及方程的个数! "< cin>>a>>b; A=newdouble*[b]; for(inti=0;i { A[i]=newdouble[a]; } B=newdouble[b]; x0=newdouble[a]; cout<<"输入每个方程组的变量的系数以及方程右端的值! "< for(intk=0;k { for(intj=0;j { cin>>A[k][j]; } cin>>B[k]; } cout<<"输入方程组迭代的次数及所要求的精度! "< cin>>m>>e; cout<<"输入方程组迭代的初值! "< for(intj=0;j { cin>>x0[j]; } switch(n) { case0: Jacobi(A,B,m,e); break; case1: Gauss(A,B,m,e); break; default: cout<<"你没有选择求解方程组的一种方法! ! "< break; } } voidJacobi(double**c,double*d,intn,doubleeps) { intk,i; double*y=newdouble[a],*x=newdouble[a],s,temp=0.0; k=1; while (1) { temp=0.0; for(i=0;i { s=0.0; for(intj=0;j { if(j! =i) { s+=c[i][j]*x0[j]; } } s=(d[i]-s)/c[i][i]; y[i]=s; if(fabs(x0[i]-s)>temp) { temp=fabs(x0[i]-s); } } if(temp { cout<<"迭代成功! 迭代结果为: "< for(i=0;i { cout<<"y["< } break; } if(k==m) { cout<<"迭代失败! ! "< break; } k+=1; for(i=0;i { x0[i]=y[i]; } } } voidGauss(double**c,double*d,intn,doubleeps) { intk,i; double*y=newdouble[a],*x=newdouble[a],s,temp=0.0; for(i=0;i { x[i]=x0[i]; y[i]=x[i]; } k=1; while (1) { temp=0.0; for(i=0;i { s=0.0; for(intj=0;j { if(j! =i) { s+=c[i][j]*y[j]; } } s=(d[i]-s)/c[i][i]; y[i]=s; if(fabs(x[i]-s)>temp) { temp=fabs(x[i]-s); } } if(temp { cout<<"迭代成功! 迭代结果为: "<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 第四 实习 报告