C++线性方程组地数值解法_第1页
C++线性方程组地数值解法_第2页
C++线性方程组地数值解法_第3页
C++线性方程组地数值解法_第4页
C++线性方程组地数值解法_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、实用标准文档线性方程组的数值解法、下三角方程组的解法对于线性方程组:01L2,11,0L2,0Y0Y1Y2B0B1B2Ln 1,0Ln 1,1Ln 1, 2Yn 1Bn 1即:Y0L1,0Y0L2,0Y0Y1L2,1Y1B0B1B2文案大全Ln 1,0Y0Ln 1,1Y1LnYn 1Bn 1实用标准文档Y0B0Y1B1L1,0Y0Y2B2L2,0Y0L2,1Y1Yn 1Bn 1Ln 1,0Y0Ln 1,1Y1Ln 1,n 2Yn写成通式的形式:i1Yi BiLijYj(i 0,1,2, ,n 1)j0C+ 源程序: #include const int n=4;void LYB(double

2、Lnn+1)for(int i=0;in;i+)for(int j=0;j=i-1;j+)Lin-=Lij*Ljn;void main()文案大全实用标准文档double Lnn+1=1,0,0,0,4,1,1,0,0,7,1,-1,1,0,3,1,-1,-1,1,0;LYB(L);for(int i=0;in;i+) coutYi=Linendl;、上三角方程组的解法对于线性方程组:即:U0,0X0U0,0 U0,1U0,2U0,n 1X0Y00U1,1U1,2U1,n 1X1Y100U2,2U2,n 1X2Y2000Un 1,n 1Xn1Yn 1U0,1X1U 0,n 2Xn2U0,n 1

3、Xn 1Y0U1,1X1U1,n 2Xn2U1,n 1Xn 1Y1Un 2,n 2Xn2Un 2,n 1Xn 1Yn 2Un 1,n 1Xn 1Yn 1文案大全实用标准文档Xn 1(Yn 1)/Un 1,n 1Xn 2(Yn 2n 2,n 1 n)/Un 2,n 2X1 ( Y1U1,2X2U1,3X3U1,n 1Xn1)/ U1,1X0 ( Y0U0,1X1U0,2X2U0,n 1Xn1)/ U0,0写成通式的形式:n1YiUij X j(in 1,n 1, ,2,1,0)Xi j i 1iUii#include const int n=4;void UXY(double Unn+1)for

4、(int i=n-1;i=0;i-)for(int j=i+1;j=n-1;j+) Uin-=Ui j*Ujn;Uin/=Uii;文案大全实用标准文档void main()double Unn+1=1,-1,-1,1,0,0,1,-1,1,3, 0,0,1,1,3,0,0,0,1,2;UXY(U);for(int i=0;in;i+) coutXi=Uinendl;三、 GAUSS 消去法解线性方程组1、消去目标文案大全实用标准文档a0,0a0,1a0,2a0, n 1x0a0,na1,0a1,1a1,2a1,n 1x1a1,na2,0a2,1a2,2a2,n 1x2a2,nan 1,0an

5、1,1 an 1,2an 1,n 1xn 1an 1,n同解变形u0,0 u0,1u0,2u0,n 1x0u0,n0u1,1u1,2u1,n 1x1u1,n00u2,2u2,n 1x2u2,n000un 1,n 1xn 1un 1,n2、消去过程(假定在以下消去演算中不会出现分母为 0 的情况)为直观起见,我们把方程组写成如下形式:文案大全实用标准文档a0(0,0) x0a0(0,1) x1a0(0,2) x2a0(0,n)1 xn 1a0(0,n)(0)(0)(0)(0)1 xn 1(0)a1,0 x0a1,1 x1a1,2 x2a1,na2,na2(0,0) x0a2(0,1) x1a2(

6、0,2) x2a2(0,n)1 xn 1a2(0,n)2,n(0)(0)(0)(0)1 xn 1(0)an 1,0 x0an 1,1 x1an 1,2 x2an 1,na n 1,n第 0 步,实现第 0 列目标:消去第( 1)、2)、(n-1 )中的x0项,(0)式保持不变。方法:(0)(0)不动1)(1) (1)(0)(0)(0)(0)a1(,00)2)(1) (2)(0)a0,0(0)(0)(0)a2(0,0)(i)(1) (i)(0) (a0)(0) ai(a0,0a0,0i 1,2,3, n 1n 1)(1) ( n1)(0)(0)(0)an(0)1,0文案大全实用标准文档ai(j1

7、)a(0)a0(0j) a(0)aijai 0即: i1,2,3,4, , nj 1,2,3,4 ,n 1, n注意:j=0 可以不算,如果要算,其结果肯定是 0 。经第一步计算后,方程组变成了如下形式:a0(0,0)x0(0) a0,1 x1a0( 0,2) x20(1)a1,1 x1a1(,12)x20(1) a2,1x1a2(1,)2x21xn 1(1)a1,n 1 xn 1a2 ,n 1xn 1a1(,1n)(1)an 1,1x1(1)an 1,2 x2a(1)nn 1,n1 xn 1an(1)1,n第 1 步:在第 0 步成果的基础上,实现第 1 列目标:消去第(2)、(3)、(n-

8、1 )中的 x1项, (0)、(1)式保持不变。方法:文案大全实用标准文档(0)(0)(1)(1)(2)(2)(2)(1)不动不动(1)(1)a1(,11)(i)(2) (i)(1)(1)(1)a1(,11)ai(11)(n 1)(2) (n 1)(1) (a1)1(,11) an(1)1,1i 2,3, , n 1即:(2)(1)a(1) a2 j(1)aijaija(1)a1,1ai,1i 2,3,4,n1j 2,3,4,n1,n经第二步计算后,方程组变成了如下形式:文案大全a0(0,0)x0a0( 0,1) x1a0(,02)x2a0(0,n)1 xn 1a0, n0a1(,11) x1

9、a1(,12) x2a1(,1n)xa(1)1 xn 1a1,n00a2(2,2)x2a2(2,n)1 xn 1a2 ,n0000(2) an 1,2 x2an(2)1,nxa( 2)1 xn 1 an 1,n由第一步、第二步的消去过程,不难归纳出任步(第k 步)的计算通式:ai(jk)ai(jk 1)a (k 1) aika( k 1)(k 1) akj akk实用标准文档0,1,2, k 1, k k 1, kn22, , n 12, , n 1, nGauss 消去法已经将原方程组变形为上三角 方程组,逆序回代容易求出最后结果。在第 k 步 Gauss 消去法中,要用到 ak(kk 1)

10、做分母,这就严格要求 ak(kk1)的绝对值不能太小。对于文案大全实用标准文档事先无法估计的 ak(kk 1) 值,解决办法是: 每步消去之前,先考察待消去的几个方程的ai(kk 1)绝对值大小,并交换方程次序, 以保证 ak(kk 1) 绝对值最大。程序设计思路:1 、 设计数组 an 1,n,其中前面的 0 至 n-1 列 存放方程组的系数矩阵 ,第 n 列存放常数 项。2 、 设计求列中最大值函数,为选择主元作准 备。3 、 设计一个交换数据函数,为交换方程做准 备,4、 设计一个消去函数,其中要调用求列中最 大值函数确定主元,要调用交换数据函数文案大全实用标准文档来交换方程5 、 调用

11、上三角方程组的求解函数求出最终解。6 、 主函数准备数据、调用有关函数、输出结果课堂练习:编程实现用 Gauss 消去法解任意大小的方程组。#include #include const int n=4;/* 下面是求列中最大值函数, 考察范围是: akk 、 ak+1k 、an-1k, 返回结果是主元的行号, 为选择主元作准备。 */int Max(double ann+1,int k)int t=k;double max=fabs(akk);for(int i=k+1;imax)文案大全实用标准文档 t=i; max=fabs(aik); return t;/* 下面是一个交换第 k 行和

12、第 t 行方程的函数,选 主元的后续工作 */void change(double ann+1,int k,int t) double x; for(int j=k;j=n;j+) x=ak j; ak j=atj; at j=x;/* 下面是高斯消去法的核心函数,其中调用求主 元、交换方程函数 */ void gauss(double ann+1)文案大全实用标准文档for(int k=0;kn-1;k+)int t=Max(a,k);if(t!=k)change(a,k,t);for(int i=k+1;in;i+)j/akk;for(int j=k+1;j=0;i-)for(int j=

13、i+1;j=n-1;j+) ain-=ai j*a jn;ain/=aii;/* 主函数void main()文案大全实用标准文档double Ann+1=1,1,-1,1,4,1,-1,-1,1,0, 2,1,-1,-1,-3,2,2,1,-1,5;gauss(A);LYB(A);for(int i=0;in;i+)coutxi=Ainendl;coutendl;四、三角分解法解线性方程组1、对于 n 元线性方程组,其分解目标是:文案大全实用标准文档a0,0a0,1a0,2a0,n 1a1,0a1,1a1,2a1,n 1a2,0a2,1a2,2a2,n 1an 1,0an 1,1an 1,2

14、an 1, n 1三角分解1000U 0,0U 0,1 U 0,2U 0,n 1L1,01000U 1,1 U 1, 2U 1,n 1L2,0L2,11000 U 2,2U 2,n 1Ln 1,0Ln 1,1Ln 1, 21000U n 1,n 12、分解过程:分 n 步进行,每一步又拆分成 两小步,即有: 0.1,0.2 步;1.1 ,1.2 步; 2.1 , 2.2 步;n-1.1,n-1.2 步。请注意:文案大全实用标准文档0.1 步:观察矩阵 A 的第 0 行元素:a0,0 U 0,0a0,1 U 0,1a0,2 U 0,2 U 0, j a0, j ( j 0,1,2, , n 1)

15、0 ,n 10.2 步:观察矩阵 A 的第 0 列剩余元素(已运 算过的元素不再考虑) :a0,0不考虑a1,0 L1,0 U 0,0a2,0 L2,0 U 0,0Li,0 ai ,0 /U 0,0 (i 1,2, , n 1) an 1,0 Ln 1,0 U 0,01.1 步:观察矩阵 A 的第 1 行剩余元素(已运 算过的元素不再考虑) :文案大全实用标准文档a1,0不考虑a1,1L1,0U 0,1 U 1,1U 1, ja1, jL1,0U 0, ja1,2L1,0U 0,2 U 1,2( j 1,2, n 1)a1, n 1L1,0U 0,n 1 U 1,n 11.2步:观察矩阵 A的

16、第 1 列剩余元素(已运算过的元素不再考虑) :a0,1不考虑a1,1不考虑Li ,1 (ai ,1 Li ,0U 0,1 ) / U 1,1a2,1 L2,0 U 0,1 L2,1 U 1,1( j 2, , n 1)an 1,1 Ln 1,0 U 0,1 Ln 1,1 U 1,1k.1 步:观察矩阵 A 的第 k 行剩余元素(已运 算过的元素不再考虑) :此时,矩阵 A 的第 k 行剩余元素有:ak ,k , ak ,k 1, , ak,n 1ak , j ( j k, k 1, , n 1)注意, j k ,矩阵 L 的第 k 行元素是:文案大全实用标准文档Lk,0, Lk,1, ,Lk

17、,k 1 ,1,0, ,0 尾部有 n-k 个 0,0 多。 矩阵 U 的第 j 列元素是:U0,j ,U1,j, ,U j 1,j,U j,j ,0, ,0 尾部有 n-j 个 0,0 少。所以:ak,j Lk,0U0, j Lk ,1U 1, jLk,k 1Uk 1,j Uk,jk1Lk,qUq,j Uk, jq0所以:k1U k,j ak,jLk,qU q,jq0j k,k 1, , n 1k.2 步:观察矩阵 A 的第 k 列剩余元素(已运算过的元素不再考虑) :此时,矩阵 A 的第 k 列剩余元素有:ak 1,k , ak 2,k, ,an 1,kai,k (i k 1,k 2, ,

18、 n 1)注意, i k,矩阵 L 的第 i 行元素是:文案大全实用标准文档Li,0,Li,1, , Li,i 1,1,0, ,0 尾部有 n-i 个 0,0 少。矩阵 U 的第 j 列元素是:U0,k,U1,k, ,U k 1,k ,Uk,k,0, ,0 尾部有 n-k 个 0,0 多。所以:ai,kLi,0U 0,kLi,1U1,kk1Li,k 1Uk 1,kLi,kU k,kLi,qU q,kLi,kU k,kq0所以:i,kk1ai,kLi,qUq,kq0Uk,kk1ai,kLi,qUq,kq0Uk,k3、小结:方阵 A 的 LU 分解过程可总结为:文案大全实用标准文档k0,1,2,n

19、k11Uk,jak,jq0k1Lk,qU q,jai,kLq0i,qUq,kLi,kU k,kj k,k 1, ,n 1i k 1,k 2, ,n 14、利用矩阵的 LU 分解法解线性方程组a0,0a0,1a0,2a0,n 1x0b0a1,0a1,1a1,2a1,n 1x1b1a2,0a2,1a2,2a2,n 1x2b2an 1,0an 1,1an 1,2an 1,n 1xn 1bn 11000U0,0 U0,1 U 0,2U 0,n 1x0b0L1,01000 U1,1 U1,2U1,n 1x1b1L2,0L2,1100 0 U 2,2U 2,n 1x2b2Ln 1,0 Ln1,1 Ln 1

20、,21000U n 1,n 1xn 1bn 1假若UX=Y ,则LY=B即假设:文案大全实用标准文档1000y0b0L1,0100y1b1L2,0L 2,110y2b2Ln 1,0 Ln 1,1 Ln1,2 1yn 1bn 1则:U0,0U 0,1 U 0,2U 0, n 1x0y00U 1,1 U 1,2U1, n 1x1y100 U 2,2U 2, n 1x2y2000U n 1, n 1xn 1yn 1程序设计思路:1、设计一个数组 a(n, n 1),其中前面的 0 至 n-1 列存放方程组的系数矩阵 ,第 n 列存放常数项。2、对数组 a(n, n 1)的系数矩阵部分 (0 至 n-1 列)进行 LU 分解,常数项 (数组 a(n,n 1)的第 n 列)文案大全实用标准文档保持不动。LU 分解的结果依然存放在数组 a(n,n 1) 中,其 中下三

温馨提示

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

评论

0/150

提交评论