LU解线性方程组_第1页
LU解线性方程组_第2页
LU解线性方程组_第3页
LU解线性方程组_第4页
LU解线性方程组_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业LU分解法解线性方程组实验目的1.熟练运用已学计算方法求解方程组2.加深对计算方法技巧,选择正确的计算方法来求解各种方程组3.培养使用电子计算机进行科学计算和解决问题的能力二实验环境 VC+6.0 语言:C+三实验内容 编写一个解线性方程组的算法。算法包括:矩阵的输入输出判断矩阵是否奇异进行分解输出、回带解出y、x四实验原理 1.若一个线性方程组系数矩阵为阶方阵且各阶顺序主子式均不为零,则的分解存在且唯一。 2.在满足1的条件下可推导得出以下公式 (1): (2): 3

2、.公式(1)用于求解矩阵、,公式(2)用于回带求解y、x。从公式中可以看出:对角线上元素为1,第一行与第一行相同。4. 分解的具体过程和计算顺序如下:(1)第一步分解:(2)第二步分解: (3)第三步分解: (n).第n步分解: 依次计算: 五.实验流程图1.程序总的流程图2.考虑主要目的这里只给出分解的流程图:六VC+源程序 #includeusing namespace std;double Fun(int n1,double a11111); /声明求矩阵行列式的递归函数函数double Fun(int n1,double a11111) int i_1,j_1,c; /c为数组b的行

3、double b1111; /用于存放余子式 int p=0,q=0; int sum=0; if(n1=1) return a111; for(i_1=1;i_1=n1;i_1+) for(c=1;c=n1-1;c+) if(ci_1) p=0; else p=1; for(j_1=1;j_1=n1-1;j_1+) bcj_1=a1c+pj_1+1; if(i_1-1)%2=0) q=1; else q=(-1); sum=sum+a1i_11*q*Fun(n1-1,b); return sum;/主程序,用于矩阵输入输出,判断,分解,回带void main() int n,i,j,k; d

4、ouble temp=1.0; double a1111=0; double L1111=0; doubleU1111=0; double b11=1; double x11=1; double m=0.0; double y11=1; double temp1=0.0; double temp2=0.0; /完成系数矩阵与右端项的输入与输出 cout!请输入待解方程组未知数的个数: n n; cout!请输入待解方程组的系数endl; for(i=1;i=n;i+) for(int j=1;jaij; cout!请输入待解方程组的系数矩阵如下:endl; for(i=1;i=n;i+) fo

5、r(j=1;j=n;j+) coutaij ; coutendl; cout!请输入待解方程组的右端项endl; /初始化LU for(int p=1;p=n;p+) Lpp=1; for(p=1;p=n;p+) U1p=a1p; coutendl; for(i=1;ibi;coutb=endl;for(i=1;i=n;i+)coutbiendl;for(i=2;i=n;i+)temp=Fun(i,a);if(temp=0) coutendlendl;coutendloutput:temp =tempendl;cout矩阵奇异;break;coutendl;/LU分解if(temp!=0) f

6、or(i=1;i=n;i+) for(j=1;j=i-1;j+) if(ajj=0) cout请重新输入系数矩阵与右端项:endl; else m=0.0; for(k=1;k=j-1;k+) m=m+Lik*Ukj; Lij=(aij-m)/Ujj; for(j=1;j=i;j+) m=0.0; for(k=1;k=j-1;k+) m=m+Ljk*Uki; Uji = aji - m; if(temp!=0)coutL=endl; for(i=1;i=n;i+) for(j=1;j=n;j+) coutLij ; coutendlendl; coutendlendlU=endl; for(i

7、=1;i=n;i+) for(j=1;j=n;j+) coutUij ; coutendlendl; /回带求解y couty=endl;for(int s=1;s=n;s+) for(int t=1;t=s-1;t+) temp1=temp1+Lst*yt; ys=bs-temp1; cout ys endl; temp1=0.0; cout=1;s-) for(int t=s+1;t=n;t+) temp2=temp2+Ust*xt; xs=(ys-temp2)/Uss; temp2=0.0; coutx=endl; for(i=1;i=n;i+) cout xiendl;七程序执行结果1.系数矩阵主子式有为0时,随便输入一个矩阵结果如下:2. 系数矩阵各阶主子式不为0时,输入课本70页习题12所示矩阵系数与右端项,顺序执行程序,结果经matlab验证无误,结果如下:验证:七实验优缺点 此算法可以一定程度上判断是否可解并解出其解,但由于未添加主元选取的步骤,导致对于有的方程组会判断失误并认为方

温馨提示

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

评论

0/150

提交评论