收藏 分享(赏)

LU解线性方程组.doc

上传人:HR专家 文档编号:11607425 上传时间:2020-08-22 格式:DOC 页数:12 大小:301.50KB
下载 相关 举报
LU解线性方程组.doc_第1页
第1页 / 共12页
LU解线性方程组.doc_第2页
第2页 / 共12页
LU解线性方程组.doc_第3页
第3页 / 共12页
LU解线性方程组.doc_第4页
第4页 / 共12页
LU解线性方程组.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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

2、,第一行与第一行相同。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的行 double b1111; /用于存放余子式 int p=0,q=0; int sum=0;

3、 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; double temp=1.0; double a1111=0; double L1111=0

4、; 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+) for(j=1;j=n;j+) coutaij ; coutendl; cout!请输入待解方程

5、组的右端项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) for(i=1;i=n;i+) for(j=1;j=i-1;j+) if(ajj=0) cou

6、t请重新输入系数矩阵与右端项: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=1;i=n;i+) for(j=1;j=n;j+) coutUij ; coutendle

7、ndl; /回带求解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.张军等编著.数值计算 .清华大学出版社2008年7月第一版2.罗建军等编著.C+程序设计教程(第二版).高等教育出版社2007年8月第二版3.施吉林 刘淑珍 陈桂芝.计算机数值方法M.北京:高等教育出版社,1999

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 高中教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报