高斯列主元消去法0425121523.doc_第1页
高斯列主元消去法0425121523.doc_第2页
高斯列主元消去法0425121523.doc_第3页
高斯列主元消去法0425121523.doc_第4页
高斯列主元消去法0425121523.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

数值分析大作业(高斯列主元消去法求解线性方程组)课程名称:数值分析授课老师:宋国乡指导导师:丁振国学 生:王伟伟学 号:0425121523日 期:2004/11/20高斯列主元消去法解线性方程组一:问题的提出 我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。实际运算的时候因为只能有限小数去计算,因此只能得到近似值。在实际运算的时候,我们很多时候也常用高斯消去法。但是高斯消去法在计算机中运算的时候常会碰到两个问题。1 一旦遇到某个主元等于0,消元过程便无法进行下去。2在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。其中又可以分为列选主元和全面选主元两种方法。目前计算机上常用的按列选主元的方法。因此我在这里做的也是列选主元高斯消去法。二、算法的基本思想大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。高斯消元法的目的就是把一般线性方程组简化成上三角方程组。于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。三、算法的描述1、设有n元线性方程组如下:2、第一步:如果a11!=0, 令li1= ai1/a11, I= 2,3,n用(-li1)乘第一个方程加到第i个方程上,得同解方程组:a(1)11 a(1)12 . . . a(1)1n x1 b(1)1a(1)21 a(1)22 . . . a(1)2n x2 b(1)2 . . . . . . . = .a(1)n-11 a(1)n-12 . . a(1)n-1n xn-1 b(1)n-1a(1)n1 a(1)n2 . . . a(1)nn xn b(1)n简记为: A(2) x = b(2)其中 a(2)ij = a(1)ij li1 * a(1)1j , I ,j = 2,3,.,n b(2)I = b(1)I li1 * b(1)1 , I = 2,3,.,n第二步:如果a(2)22 != 0,令li2= a(2)i2/a(2)22, I= 3,n依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!最后,得到上三角方程组: a(1)11 a(1)12 . . . a(1)1n x1 b(1)10 a(1)22 . . . a(1)2n x2 b(1)2 . . . . . . . = .0 0 . . a(n-1)n-1n xn-1 b(n-1)n-10 0 . . . a(n)nn xn b(n)n简记为: A(n) x = b(n)最后从方程组的最后一个方程进行回代求解为: Xn = b(n) / a(n)nn Xi = ( b(k)k - a(k)kjxj ) / a(k)kk以上为高斯消去法的基本过程。但是如前面我们所提到的,存在的问题。1.一旦遇到某个主元等于0,消元过程便无法进行下去。2在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。其中又可以分为列选主元和全面选主元两种方法。目前计算机上常用的按列选主元的方法。因此我在这里做的也是列选主元高斯消去法。他的特点是:每次在系数矩阵中依次按列在主对角线及以下的元素中,选取绝对值最大的元素作为主元,将她调到主对角线上,然后用它消去主对角线以下的元素,最后化为同解的上三角形方程组去求解。由于列主元法相对高斯消元法来说就增加了选主元操作,其他的求解步骤是一样的。四、程序流程图 五、程序描述程序的名称为:zealous.cpp1. 程序的结构如下:程序只能最大输入60行60列的系数矩阵。2.程序要用到的函数(1、)matrix_getElement(array,n,m);此函数的作用是获得用户输入的线性方程组的系数矩阵。(2、)matrix_outputElement(array,n,m);此函数的作用是显示用户输入的矩阵。(3、)selectMaxElement(array,n,m,row );此函数的作用是选择主元素,并把此时对角线上的那列元素与主元素行交换。(4、)GAUSSProcess(array, n, m, row);此函数的作用是用主元素列进行高斯消元,把此行以后所有的行的,此列的元素变为0。(5、)GAUSSProcess_result(array, n,m);此函数的作用是显示经过高斯消元后的矩阵,此时的系数矩阵为一个上下三角矩阵。(6、)GAUSSCalculate_result(array, n, m);此函数的作用是对已经消元好的矩阵,进行回代求解。并将结果输出。六、程序代码/-*高斯列消去法*#include#include#include#include const int N=60;/最大const int M=61;/60列,再加上等号右边的一列值/-输入要计算方程组的矩阵-void matrix_getElement(double ARRAYNM,int n, int m) for(int i=0;in;i+)cout请您输入第t(i+1)trow:endl;for(int j=0;jARRAYij;return;/-/-输出用户刚才用户输入的矩阵,以便用户检测是否输入正确void matrix_outputElement(double ARRAYNM, int n, int m)coutyour have input the matrix as fllows:n;for(int i=0; in;i+)for(int j=0;jm;j+)coutARRAYij t t;coutendlendl;/-/-选择主元素,并把主元行与对角线上的那一行交换void selectMaxElement(double ARRAYNM,int n, int m, int line )double max=0;double t=0;int j=0;int i=line;max=ARRAYlineline;for(i=line+1;i fabs(max) )max=ARRAYiline;j=i;if(jline)for(i=0;im;i+)t=ARRAYji;ARRAYji=ARRAYlinei;ARRAYlinei=t;/-/-用对角线上的元素消去后续行中此列的元素void GAUSSProcess(double ARRAYNM, int n, int m, int row) double ROW1M; for(int t=0;t(m-row);t+) ROW1t=ARRAYrowrow+t; for(int j=(row+1); j n; j+) double ROW_CHANGEM; for(int r=0;r(m-row);r+) double mainElement=ROW10; if( fabs(mainElement) 1e-7) cout Single! press any key return.n; getchar(); return; ROW_CHANGEr=ROW1r*ARRAYjrow/ROW10; for(int h=0; h=0; p-)for(int q=n-1; qp; q-)ARRAYpm-1=ARRAYpm-1 - ARRAYpq*aq;ap = ARRAYqm-1/ARRAYpp;cout-the final result as follows-:n;for(int e=0; en; e+)cout x e+1 = ae endl;/-输出经过高斯消去法处理后得到的矩阵-void GAUSSProcess_result(double ARRAYNM, int n, int m)cout您输入的矩阵经过高斯消去法处理后得到如下形式:n;for(int i=0; in;i+)for(int j=0;jm;j+)coutARRAYijtt;coutendlendl;/-/-main函数-void main() double arrayNM; cout请输入您要运算的矩阵的大小!n; int n=0, m=0; coutn; coutm; cout您所输入的行为:n 您所输入的列为:mendl; matrix_getElement(array,n,m); /获得矩阵的元素 matrix_outputElement(array,n,m); /显示输入的矩阵 for(int row=0; rown; row+) /高斯消元法的主体 selectMaxElement(array,n,m,row ); GAUSSProcess(array, n, m, row); GAUSSProcess_result(array, n,m); /显示消元后的矩阵 GAUSSCalculate_result(array,n,m); /回代求解并显示解结果 cout This is the end!;/-七、实例本程序可以自己选择在60个未知数的方程组,可以自己选择线性方程组的行数和列数。例子如下:2x1x2 5x3x48;x1 3x2 6x49;2x2x3 2x45;x1 4x27x36x40;输入您要运算的矩阵的大小!请输入您要运算的矩阵的行数:4请输入您要运算

温馨提示

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

评论

0/150

提交评论