数值分析高斯顺序消去法、列主元消去法LU分解法.doc

数值分析高斯顺序消去法、列主元消去法LU分解法.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析高斯顺序消去法、列主元消去法LU分解法

数值分析实验报告(1) 学院:信息学院 班级:计算机0903班 姓名:王明强 学号课题一 A.问题提出 给定下列几个不同类型的线性方程组,请用适当的方法求解 线性方程组1、设线性方程组 = x= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 ) 2、设对称正定阵系数阵线方程组 = x = ( 1, -1, 0, 2, 1, -1, 0, 2 ) 3、三对角形线性方程组 = x= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 ) B.(1)对上述三个方程组分别用Gauss顺序消去法与Gauss列主元消去法;平方根 与改进平方根法;追赶法求解(选择其一) 编写算法通用程序 在应用Gauss消去时,尽可能利用相应程序输出系数矩阵的三角分解式 C. 通过该课题的程序编制,掌握模块化结构程序设计方法 掌握求解各类线性方程组的直接方法,了解各种方法的特点 体会高斯消去法选主元的必要性 实验步骤:(高斯消去法,列主元,LU) 1顺序高斯消去法2.LU分解法3.列主元高斯消去法(如下图) 高斯消去法运行结果如下 对方程的系数矩阵进行LU分解并求出方程组的解 (3)列主元高斯消去法 实验体会总结: 利用gauss消去法解线性方程组的时候,如果没有经过选主元,可能会出现数值不稳定的现象,使得方程组的解偏离精确解。 源程序如下: #include iostream.h #include math.h #includewindows.h #define MAX 20 int N; double a[10][11]; //增广矩阵 void init() { int i,j; int a1[10][11]= {4,2,-3,-1,2,1,0,0,0,0,5, 8,6,-5,-3,6,5,0,1,0,0,12, 4,2,-2,-1,3,2,-1,0,3,1,3, 0,-2,1,5,-1,3,-1,1,9,4,2, -4,2,6,-1,6,7,-3,3,2,3,3, 8,6,-8,5,7,17,2,6,-3,5,46, 0,2,-1,3,-4,2,5,3,0,1,13, 16,10,-11,-9,17,34,2,-1,2,2,38, 4,6,2,-7,13,9,2,0,12,4,19, 0,0,-1,8,-3,-24,-8,6,3,-1,-21}; N=10; for(i=0;iN;i++) { for(j=0;j=N;j++) a[i][j]=a1[i][j]; } } void GS(int N) { double x[20]; //存储解向量 double m; // 中间变量 int i, j, k; //消元过程 for(k=0;kN-1;k++){ // kN-1 ? if(a[k][k]==0) { cout 求解失败!; break; } for(i=k+1;iN;i++){ m = a[i][k] / a[k][k]; a[i][k] = 0; for(j=k+1;j=N;j++) // j=N? a[i][j] = a[i][j] - a[k][j] * m; } } // 回代过程 x[N-1] = a[N-1][N] / a[N-1][N-1]; for(k=N-2;k=0;k--){ for(j=k+1;jN;j++){ a[k][N] = a[k][N] - a[k][j] * x[j]; } x[k] = a[k][N] / a[k][k]; } // 输出结果 for(k=0;kN;k++) cout x[k]=x[k]endl; } void LU(int N) { int i,j,k;double x[20]; //****** 开始LU分解 ************* for(k=0;kN-1;k++) { if(a[k][k]==0) { cout 主元素为零! endl; break; } for(i=k+1;iN;i++) { a[i][k] = a[i][k] / a[k][k]; // 矩阵A的严格下三角部分存储L矩阵的严格下三角部分 for(j=k+1;jN;j++) { a[i][j] = a[i

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档