数值计算方法实验报告.docx_第1页
数值计算方法实验报告.docx_第2页
数值计算方法实验报告.docx_第3页
数值计算方法实验报告.docx_第4页
数值计算方法实验报告.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数值计算方法实验报告 线性方程组的解法 线性方程组的各种解法题目:用三种不同的方法计算线性方程组Ax=b,输入方程组的阶数n,矩阵A的元素和常向量b的元素,输出方程组的解。一 高斯列主元法1方法原理:.高斯消去法包括两过程:先把方程组化为同解的上三角方程组,再按相反顺序求解上三角方程组。前者称消去或消元过程,后者称回代过程。消去过程实际上是对增广矩阵作初等变换。对一般的n阶方程组,消去过程分n-1步:第一步消去a11下方元素,第二部消去a22下方元素,第n-1步消去an-1n-1下方元素。第k步将第k行的适当倍数加于其后各行,也可说是从k+1n行减去第行的适当倍数,使它们的第k列元素变为0,而k+1n+1列元素减去第k行对应列元素的倍数。为了避免出现小主元,可在第k步的第k列的元素akk,ak+1k,ank中选主元,即在其中找出绝对值最大的元素apk,然后交换第k和第p行,继续进行消去过程。交换行相当于改变方程顺序,不会影响原方程组的解。这种方法称为列主元消去法。2. 源代码:void Gaosi(float a1515,int n,float b15,float x15)/*高斯列主元法的函数*/int i,j,k;for(k=1;k=n-1;k+)float max=fabs(akk);int p_max=k;for(int p=k;p=n;p+) /*列主元的选主元*/if(maxfabs(apk)&p!=k)for(int m=1;m=n+1;m+) float temp=0;temp=akm;akm=apm;apm=temp; for(i=k+1;i=n;i+)float c=aik/akk;for(j=k;j=n+1;j+)aij=aij-c*akj;for(int p=1;p=1;k-)float sum=0;for(j=k+1;j=n;j+)sum+=(akj*xj); xk=(bk-sum)/akk;cout=;cout用高斯消去法解方程组:endl;cout经过高斯变换后的增广矩阵:endl;for(int m=1;m=n;m+)for(int q=1;q=n+1;q+)printf(%f ,amq);coutendl;Output(x,n); /*依次输出方程的解*/二 Jacobi迭代法1. 方法原理:由方程组的形式可构成迭代式:xi(k+1)=(-ai1x1(k)-aii-1xi-1(k)-aii+1xi+1(k)-a1xn(k)+bi)/aii, i=1n给定初值x(0)=x(x1(0),x2(0),xn(0)T,令k=0,1,,由此可得向量序列x(k).如果此序列收敛于x,那么每个分量序列xi(k)必收敛于想xi,xi(i=1n)就必然是原方程组的解。此方法称为雅可比(Jacobi)迭代法。2. 源代码:void Jacobi(float a1515,float x15,int n,float b15)/*雅可比迭代法函数*/float y15=0;double D;for(int i=1;in+1;i+)xi=0;while(1)D=0;for(int i=1;in+1;i+)yi=bi;for(int j=1;jD) /*退出循环的条件*/D=fabs(xi-yi);for(int i=1;i=Level)continue;elsebreak;cout=;cout用Jacobi法解方程组:endl;Output(x,n);三 Seidel迭代法1. 方法原理:Seidel迭代法是在Jacobi方法的基础上进行了改进。它在计算想x(k+1)时,将已经算出的分量立即代替x(k)对应分量,又称作逐个迭代法。2. 源代码:void Seidel(float a1515,float x15,int n,float b15)/*Seidel迭代法函数*/float y=0;double D;for(int i=1;in+1;i+)xi=0;while(1)D=0;for(int i=1;in+1;i+)y=bi;for(int j=1;jD)D=fabs(xi-y);xi=y;if(D=Level)continue;else break;cout=;cout用Seidel法解方程组:endl;Output(x,n);四 代码补充说明与运行结果:void Output(float x15,int n)/*将方程的解输出的函数*/cout方程的解为:endl;for(int p=1;p=n;p+)coutxp=xpendl;void Input(float a1515,int &n,float b)/*输入方程参数的函数*/float m_in;cout请输入方程阶数n:n;cout请依次输入方程对应的增广矩阵中的数据:endl; for(int m=1;m=n;m+)for(int q=1;qm_in;amq=m_in;for(int p=1;p=n;p+)bp=apn+1;int _tmain(int argc, _TCHAR* argv)/*主函数*/float a1515=0,x15=0,b15=0;int n=0;while(1)char in;Input(a,n,b);Gaosi(a,n,b,x);Jacobi(a,x,n,b);Seidel(a,x,n,b);/*用三种方法解方程组*/cout再来解一个?y/nin;if(in=y)continue;else break;return 0;运行结果:五 结果分析:上方的方程组用三种方法得出的结果基本相同,但在计算其它的方程组时,会发现高斯列主元法基本不会出大的差

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论