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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

东北大学数值分析实验报告.docx

1、东北大学数值分析实验报告实验一 迭代格式的比较一、问题提出设方程f(x)=x- 3x 1=0 有三个实根 x=1.8793 , x=-0.34727 ,x=-1.53209现采用下面三种不同计算格式,求 f(x)=0的根 x 或x 1、x = 2、x = 3、x = 二、要求1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;2、用事后误差估计来控制迭代次数,并且打印出迭代的次数;3、初始值的选取对迭代收敛有何影响;4、分析迭代收敛和发散的原因。三、目的和意义1、通过实验进一步了解方程求根的算法;2、认识选择计算格式的重要性;3、掌握迭代算法和精度控制;4、明确迭代收敛性与初值选取的关

2、系。四、程序设计流程图 五、源程序代码#include #include float one(float x0)x1=(3*x0+1)/(x0*x0);return(x1);float two(float x0)x2=(pow(x0,3)-1)/3;return(x2);float three(float x0)x3=pow(3*x0+1,0.33333);return(x3);void main()float x,x0;float x1,x2,x3;int k1,k2,k3;printf(please input x0=);scanf(%f,&x);x0=x;x1=one(x0);print

3、f(第一个公式迭代结果:n);while(fabs(x0-x1)1e-5)printf(x1=%6.5fn,x1);x0=x1;x1=one(x0);k1+;printf(x1=%6.5fn,x1);printf( k1=%i,k1);x0=x;x2=two(x0);printf(第二个公式迭代结果为:n);while(fabs(x0-x2)1e-5)printf(x2=%6.5fn,x2);x0=x;x1=two(x0);k2+;printf(x2=%6.5fn,x2);printf( k2=%i,k2);x0=x;x3=three(x0);printf(第三个公式迭代结果为:n);whil

4、e(fabs(x0-x3)1e-5)printf(x3=%6.5fn,x3);x0=x;x1=three(x0);k3+;printf(x3=%6.5fn,x3);printf( k3=%i,k3);运行结果如下:结果分析:初值对迭代结果影响解析:实验二 线性方程组的直接算法一、问题提出给出下列几个不同类型的线性方程组,请用适当算法计算其解。1、设线性方程组=x= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 ) Gsuss列主元消去法#include #include #include #define MAX 100typedef structint row,col;fl

5、oat MATMAXMAX;float SolutionMAX;Matrix;void Gauss(Matrix *M);void MBack(Matrix *M);void MSave(Matrix *M);void MInput(Matrix *M);void MOutput(Matrix *M);void Solution(Matrix *M);void MSort(Matrix *M,int n);void main() printf(列主元方法如下:n);Matrix Mat;MInput(&Mat);MSave(&Mat);Gauss(&Mat);MSave(&Mat);if(Ma

6、t.row=Mat.col-1) MBack(&Mat); Solution(&Mat);printf(Press any key to halt.);getch();void MInput(Matrix *M)int i,j;printf(输入行数:); scanf(%d,&M-row);printf(输入列数:); scanf(%d,&M-col);for(i=0;irow;i+) printf(第%d行:,i+1); for(j=0;jcol;j+) scanf(%f,&M-MATij); for(i=0;irow;i+) M-Solutioni = 0;void MOutput(Mat

7、rix *M)int i,j;printf(MATRIX:n);for(i=0;irow;i+) for(j=0;jcol;j+) printf(%10.3f,M-MATij); printf(n);printf(-END-n);void Gauss(Matrix *M)int i,j,k;float temp;for(i=0;irow-1;i+) MSort(M,i); MOutput(M); for(j=i+1;jrow;j+) temp = M-MATji; for(k=0;kcol;k+) if(temp!=0) M-MATjk /= temp; M-MATjk *= M-MATii;

8、 M-MATjk -= M-MATik; MOutput(M);void MSort(Matrix *M,int n)int i,j,k;float tempMAX;for(i=n;irow-1;i+) for(j=n;jrow-i-1;j+) if(fabs(M-MATjn)MATj+1n) for(k=0;kcol;k+) tempk = M-MATj+1k; M-MATj+1k = M-MATjk; M-MATjk = tempk; void MBack(Matrix *M)int i,j;float sum;M-SolutionM-row-1 = M-MATM-row-1M-col-1

9、 M-MATM-row-1M-row-1;for(i=M-row-2;i=0;i-) sum = M-MATiM-col-1; for(j=i+1;jrow;j+) sum -= M-MATij*M-Solutionj; M-Solutioni = sum/M-MATii;void Solution(Matrix *M)int i;printf(Solution:n);for(i=0;irow;i+) printf(X%d = %fn,i+1,M-Solutioni);printf(n-END-n);void MSave(Matrix *M)int i,j;FILE *eryar;eryar

10、= fopen(Matrix.txt,a);fprintf(eryar,-BEGIN-n);for(i=0;irow;i+) for(j=0;jcol;j+) fprintf(eryar,%10.3f,M-MATij); fprintf(eryar,n);fclose(eryar);2、设对称正定阵系数阵线方程组= x = ( 1, -1, 0, 2, 1, -1, 0, 2 )平方根法:源程序:#include#include#includeusing namespace std;int main() int n,i,j,k,m; coutn; double *A=new double*(n

11、+1); for(i=1;i=n;i+) Ai=new doublen+1; double *b=new doublen+1; double *x=new doublen+1; double *y=new doublen+1; cout输入系数对称正定矩阵A:endl; for(i=1;i=n;i+) for(j=1;jAij; cout输入向量b:; for(i=1;ibi; coutendl; for(k=1;k=n;k+) double sum=0; for(m=1;m=k-1;m+) sum=sum+pow(Akm,2.0); sum=Akk-sum; Akk=sqrt(sum); f

12、or(i=k+1;i=n;i+) double temp1=0; for(m=1;m=k-1;m+) temp1=temp1+Aim*Akm; temp1=Aik-temp1; Aik=temp1/Akk; double temp2=0; for(m=1;m=1;k-) double temp3=0; for(m=k+1;m=n;m+) temp3=temp3+Amk*xm; xk=(yk-temp3)/Akk; cout输出结果向量x:endl; for(i=1;i=n;i+) coutxiendl; return 0;3、三对角形线性方程组 = x= ( 2, 1, -3, 0, 1, -

13、2, 3, 0, 1, -1 )追赶法:源程序#include#include#includeusing namespace std;int main() int n,i; coutn; double *a=new doublen+1; double *c=new doublen+1; double *d=new doublen+1; double *b=new doublen+1; double *x=new doublen+1; double *y=new doublen+1; cout输入系数矩阵A数据:endl; for(i=1;iai; for(i=1;ici; for(i=1;id

14、i; cout输入b :endl; for(i=1;ibi; for(i=1;i=n-1;i+) ci=ci/ai; ai+1=ai+1-di+1*ci; cout输出解向量a:endl; for(i=1;i=n;i+)coutaiendl; cout输出解向量c:endl; for(i=1;i=n;i+)coutciendl; y1=b1/a1; for(i=2;i=n;i+) yi=(bi-di*yi-1)/ai; cout输出解向量y:endl; for(i=1;i=n;i+)coutyi=1;i-) xi=yi-ci*xi+1; cout输出解向量x:endl; for(i=1;i=n

15、;i+)coutxiendl; system(pause); return 0;运行结果课题三 线性方程组的迭代法一、问题提出对课题二所列目的和意义的线性方程组,试分别选用Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法计算其解。二、要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如由迭代次数体会该迭代法的收敛快慢;3、对方程组2,3使用SOR方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。 三、目的和意义1、通过上机计算体会迭代法求解线

16、性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤(予给的迭代次数),对迭代法敛散性的意义;4、体会初始解 x,松弛因子的选取,对计算结果的影响。1Jacobi 迭代法源程序:#include#include#includeusing namespace std;int main() int n,N; int i,j,k; double e; coutn; coutN; coute; double *A=new double*(n+1); for(i=1;i=n;i+) Ai=new doublen+1; double *

17、b=new doublen+1; double *x0=new doublen+1; double *x=new doublen+1; cout输入系数矩阵A:endl; for(i=1;i=n;i+) for(j=1;jAij; cout输入右端项b:endl; for(i=1;ibi; cout初始化解向量x0:endl; for(i=1;ix0i; for(k=1;k=N;k+) for(i=1;i=n;i+) double sum=0; for(j=1;j=n;j+) sum=sum+Aij*x0j; xi=x0i+(bi-sum)/Aii; double max=0; for(i=1

18、;imax) max=m; if(max=e) cout输出迭代次k:kendl; cout迭代后的解x:endl; for(i=1;i=n;i+) coutxiendl; system(pause); return 0; else for(i=1;i=n;i+) x0i=xi; cout已达到最大迭代次数:Nendl; cout迭代后的解x:endl; for(i=1;i=n;i+) coutxiendl; system(pause); return 0;2Gauss-Seidol迭代法源程序#include#include#includeusing namespace std;int ma

19、in() int n,N; int i,j,k; double e; coutn; coutN; coute; double *A=new double*(n+1); for(i=1;i=n;i+) Ai=new doublen+1; double *b=new doublen+1; double *x0=new doublen+1; double *x=new doublen+1; cout输入系数矩阵A:endl; for(i=1;i=n;i+) for(j=1;jAij; cout输入右端项b:endl; for(i=1;ibi; cout初始化解向量x0:endl; for(i=1;i

20、x0i; for(k=1;k=N;k+) for(i=1;i=n;i+) double sum=0; for(j=1;j=n;j+) if(ji) sum=sum+Aij*xj; else sum=sum+Aij*x0j; xi=x0i+(bi-sum)/Aii; double max=0; for(i=1;imax) max=m; if(max=e) cout输出迭代次k:kendl; cout迭代后的解x:endl; for(i=1;i=n;i+) coutxiendl; system(pause); return 0; else for(i=1;i=n;i+) x0i=xi; cout已

21、达到最大迭代次数:Nendl; cout迭代后的解x:endl; for(i=1;i=n;i+) coutxiendl; system(pause); return 0;3SOR方法源程序#include #include #include #include using namespace std;int main() int n; coutn; vectorvector va; vector vd; cout输入系数矩阵:endl; for(int i=0;in;+i) for(int j=0;jdtemp; vd.push_back(dtemp); va.push_back(vd); vd

22、.clear(); cout输入初始解向量:; vector vtemp; for(int i=0;idtemp; vd.push_back(dtemp); coutd; coutmcount; coutxd; vectorvector :iterator ia,iaend; ia=va.begin(); bool flag=true; int count=0; while(flag) double dmax=0.0; vtemp.assign(vd.begin(),vd.end(); for(int i=0;in;+i) double dtemp=0.0; for(int j=0;jn;+j)

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2