ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:92.20KB ,
资源ID:7194931      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7194931.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数值分析第四次实习报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数值分析第四次实习报告.docx

1、数值分析第四次实习报告学生学号实验课成绩 武汉理工大学 学 生 实 验 报 告 书 实验课程名称: 数 值 分 析( 第四次实习) 开 课 名 称:计算机科学与技术学院 指导老师姓名: 熊盛武 学 生 姓 名: 学生专业班级:软件工程0803班 2009 2010学年 第 一 学期一、计算实习的内容:实习1 给定矩阵A与向量bA= b= (1)求A的三角分解(不必输出);(2)利用A的三角分解解下列方程组:Ax=b A2x=b A3x=b对第题分析一下,如果先求M=A2,再解Mxb,有何缺点?实习2 追赶法的优点分别对n=5,100,300解下列方程组AxbA= b=再用现有的三角分解法程序解

2、此方程组,比较一下两者的效率,哪种方法机时少,可求解的矩阵阶数高?实习3 Jacobi 迭代法与Gauss-Seidel迭代法的收敛性与收敛速度研究用Jacobi迭代法与Gauss-Seide迭代法解下列方程组Ax=b的收敛性,通过上机计算,验证分析是否正确,并观察右端项对迭代收敛是否有影响,比较两法的收敛速度。(1)A= b1= b2= (2) A= b1= b2=(3) A= b=实习4 松弛因子对超松弛迭代法收敛速度的影响编写一个超松弛迭代法解方程组Axb的计算机程序,其中A= b= 分别对不同的阶数(例如n=10,n=100)w=1.1,1.2,1.9进行迭代,记录近似解e=时所用的迭

3、代次数k,观察松弛因子对收敛速度的影响。实习5 用欧拉公式求解二、计算实习:(一)三角分解法程序源代码#includeusing namespace std;int main() const int MAX_N=20; static double aMAX_NMAX_N,bMAX_N,xMAX_N,yMAX_N; static double uMAX_NMAX_N,lMAX_NMAX_N; int i,j,k,n,r; coutn; if(nMAX_N) coutThe input n is larger than MAX_N,please redefine the MAX_Nendl; re

4、turn 1; if(n=0) coutplease input n between 1 andMAX_N; return 1; /输入 aij,bi coutnow input the matrix aij,i,j=0.n-1 :; for(i=0;in;i+) for(j=0;jaij; coutnow input the matrix bi,i=0.n-1 :; for(i=0;ibi; /分解过程for(i=0;in;i+)lii=1;/l矩阵对角元素为1 for(k=0;kn;k+) for(j=0;jn-1;j+)/计算u矩阵 ukj=akj; for(r=0;r=k-1;r+)

5、ukj-=lkr*urj; for(i=k+1;kn;i+)/计算l矩阵 lik=aik; for(r=0;r=k-1;r+) lik-=lir*urk; lik/=ukk; /ly=b for(i=0;in;i+) yi=bi; for(j=0;j=0;i-) xi=yi; for(j=i+1;jn;j+) xi-=uij*xj; xi/=uii; cout方程组的解为:;/输出x for(i=0;in;i+) coutxi ; return 0;(二)追赶法程序源代码#includeusing namespace std;int main() const int MAX_N=300; in

6、t aMAX_N,bMAX_N,cMAX_N,dMAX_N; float lMAX_N,rMAX_N,yMAX_N,xMAX_N; int i,n; coutn; if(nMAX_N) coutThe input n is larger than MAX_N,please redefine the MAX_Nendl; return 1; if(n=0) coutplease input n between 1 andMAX_N; return 1; /输入 an,bn,cn,dn coutnow input the matrix an,n=2.n :; for(i=2;iai;coutnow

7、 input the matrix bn,n=1.n :; for(i=1;ibi; coutnow input the matrix cn,n=1.n-1 :; for(i=1;ici; coutnow input the matrix dn,n=1.n :; for(i=1;idi; /追的过程 r0=0; y0=0; a1=0; cn=0; for(i=1;i=n;i+) li=bi-ai*ri-1; ri=ci/li; yi=(di-ai*yi-1)/li; /赶的过程 cout=1;i-) xi=yi-ri*xi+1; cout方程组的解为:;for(i=1;i=n;i+)coutx

8、i ; coutendl; return 0;计算得解为:2 3 3 3 2(三)雅可比迭代法和高斯赛德尔迭代法程序源代码#include #include using namespace std; int a,b,m; double *x0; void Jacobi(double *c,double *d,int n,double eps); void Gauss(double *c,double *d,int n,double eps); void main() int n; double *A,*B; double e; cout请选择求方程组的迭代方法!雅可比选0,高斯-赛德尔选1!n

9、; cout输入方程组的变量的个数以及方程的个数!ab; A=new double*b; for(int i=0;ib;i+) Ai=new doublea; B=new doubleb; x0=new doublea; cout输入每个方程组的变量的系数以及方程右端的值!endl; for(int k=0;kb;k+) for(int j=0;jAkj; cinBk; cout输入方程组迭代的次数及所要求的精度!me; cout输入方程组迭代的初值!endl; for(int j=0;jx0j; switch (n) case 0:Jacobi(A,B,m,e); break; case 1

10、:Gauss(A,B,m,e); break; default:cout你没有选择求解方程组的一种方法!endl; break; void Jacobi(double *c,double *d,int n,double eps) int k,i; double *y = new doublea,*x=new doublea,s,temp=0.0; k=1; while(1) temp = 0.0; for(i=0;ia;i+) s=0.0; for(int j=0;jtemp) temp=fabs(x0i-s); if(tempeps) cout迭代成功!迭代结果为:endl; for(i=0

11、;ia;i+) coutyi =yiendl; break; if(k=m) cout迭代失败!endl; break; k+=1; for(i=0;ia;i+) x0i=yi; void Gauss(double *c,double *d,int n,double eps) int k,i; double *y=new doublea,*x=new doublea,s,temp=0.0; for(i=0;ia;i+) xi=x0i; yi=xi; k=1; while(1) temp=0.0; for(i=0;ia;i+) s=0.0; for(int j=0;jtemp) temp=fab

12、s(xi-s); if(tempeps) cout迭代成功!迭代结果为:endl; for(i=0;ia;i+) coutyi =yiendl; break; if(k=m) cout迭代失败!endl; break; k+=1; for(i=0;ia;i+) xi=yi; 用雅可比迭代法,程序运行结果如下:用高斯赛德尔迭代法程序运行结果如下:通过运行结果可以看出高斯赛德尔迭代法比雅可比迭代法所求结果精度高,收敛性好。(四)超松弛迭代法程序源代码#includeusing namespace std;#include#define MAX_N 20#define MAXREPT 100#def

13、ine epsilon 0.00001int main() int n;int i,j,k;double err,w;static double aMAX_NMAX_N,bMAX_NMAX_N,cMAX_N,gMAX_N;static double xMAX_N,nxMAX_N;coutn; if(nMAX_N) coutThe input n is larger than MAX_N,please redefine the MAX_Nendl; return 1; if(n=0) coutplease input n between 1 andMAX_N; return 1; /输入aij,

14、ci coutnow input the matrix aij,i,j=0.n-1 :; for(i=0;in;i+) for(j=0;jaij; coutnow input the matrix ci,i=0.n-1 :; for(i=0;ici; coutw; if(w=2) coutw must between 1 and 2.endl; return 1; for(i=0;in;i+)/形成x_k+1=bx_k+g迭代矩阵bfor(j=0;jn;j+)bij=-aij/aii;gi=ci/aii;/为了简化程序,假设aii!=0/否则要附加对aii的处理for(i=0;jMAXREPT

15、;i+) for(j=0;jn;j+) nxj=gj; for(j=0;jn;j+) for(k=0;kn;k+) if(j=k)continue; nxj+=bjk*nxk;/迭代 for(k=j+1;kn;k+) nxj+=bjk*xk; nxj=(1-w)*xj+w*nxj; err=0; for(j=0;jn;j+) if(errfabs(nxj-xj)err=fabs(nxj-xj); for(j=0;jn;j+) xj=nxj; if(errepsilon) coutthe solve are:; for(i=0;in;i+) coutxi ; coutendl; return 0

16、; coutafter MAXREPTrepeat,no result.;/输出return 1;1.2时 解为:0232179 0.0662066 0.4941941.4时 解为:023218 0.0662066 0.4941941.6时 解为:023218 0.0662074 0.494193由以上3组结果可知,越小,精度越大(五)欧拉公式程序源代码#include#include#define f(x,y) (x+y)int main() int m; int i; double a,b,y0; double xn,yn,xn1,yn1,yn1b; double h; couta; ci

17、nb; couty0; coutm; if(m=0) coutplease input a number lager than 1.; return 1; h=(b-a)/m; xn=a;yn=y0; for(i=1;i=m;i+) xn1=xn+h; yn1b=yn+h*f(xn,yn); yn1=yn+h/2*(f(xn,yn)+f(xn1,yn1b); coutxi xn1 yi yn1; xn=xn1;yn=yn1; return 0;调试结果: x10.2 y11.24 x2=0.4 y2=1.5768x30.6 y32.031x40.8 y42.63067x51 y53.40542

18、第四次实验小结及体会1、任何非奇异矩阵都可分解为三角形式。2、如果需要重复地求解系数矩阵相同,而右端常数项不同的线性方程组时,三角分解法是很有效的3、当系数矩阵是对角占优矩阵时,用追赶法求线性代数方程组是非常简单的。4、高斯迭代法公式比较复杂,但在一般情况下比雅可比迭代法收敛快。5、高斯迭代法是异步迭代法每次迭代时都会用到刚才已经迭代出来的数值,因此迭代对收敛情况有所改善。6、迭代法是否收敛,与迭代矩阵密切相关,在用迭代法进行迭代计算时应先判断系数矩阵的谱半径的绝对值与1的大小关系,从而可以决定迭代法的收敛性。7、超松弛迭代法的迭代矩阵与松弛因子w有关。8、欧拉公式精度低但其数值解法给我们很好的启示。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1