当前位置:文档之家› 线性方程组的直接解法

线性方程组的直接解法

第2章线性方程组的直接解法2.1实验目的理解线性方程组计算机解法中的直接解法的求解过程和特点,学习科学计算的方法和简单的编程技术。

2.2概念与结论1. n阶线性方程组如果未知量的个数为 n ,而且关于这些未知量x1,x2, …,x n的幂次都是一次的(线性的)那末, n 个方程a11x1+a12x2+ … +a1n x n=b1┆┆┆ (1)a n1x1+a n2x2+ … +a nn x n=b n构成一个含n个未知量的线性方程组,称为n阶线性方程组。

其中,系数a11,…,a1n,a21, …,a2n, …,a n1, …,a nn 和b1, …,b n都是给定的常数。

方程组(1)也常用矩阵的形式表示,写为Ax=b其中,A是由系数按次序排列构成的一个n阶矩阵,称为方程组的系数矩阵,x和b都是n维向量,b称为方程组的右端向量。

2. n阶线性方程组的解使方程组(1)中每一个方程都成立的一组数x1*,x2*, …,x n*称为式(1)的解,把它记为向量的形式,称为解向量.3.一些特殊的线性方程组1) 上三角方程组2) 三对角方程组⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-----nnnnnnnnnnnnbbbxxxaaaaaaaaaaaa212111121223221111312114.矩阵的Doolittle 分解5.Doolittle 分解的紧凑格式6.矩阵的Crout 分解⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--n n n n n n d d d x x x b a c b c b a c b a c b21211133322211⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛nn n n n n nn n n n n u u u u u u l l l a a a a a a a a a222112112121212222111211111⎪⎪⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛111211221222111212222111211n n nn n n nn n n n n u u u l l l l l l a a a a a a a a a ⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛nn n n n nn n u l l l u u l l u u u l u u u u3213333231223222111312112.3程序中Mathematica 语句解释1.MatrixForm[a] 以矩阵的形式显示a2.Table[Random[Integer,{xa,xb}],{n}] 产生xa 到xb 之间的n 个随机整数的向量 3. x=Table[0,{n}] 定义变量x 为n 维向量 4. a=Table[0,{n},{n}] 定义变量a 为n ⨯n 矩阵5. Timing[expr] 给出计算表达式expr 所用的计算机时间2.4 方法、程序、实验解线性方程组的直接法是用有限次运算求出线性方程组 Ax=b 的解的方法。

线性方程组的直接法主要有Gauss 消元法及其变形、LU(如Doolittle 、Crout 方法等)分解法和一些求解特殊线性方程组的方法(如追赶法、LDLT 法等)。

这里只给出Gauss 消元法、Doolittle 分解法和追赶法的构造过程及程序。

1. Gauss 消元法1) Gauss 消元法的构造过程Gauss 消元法是一个古老的直接法,由它改进得到的选主元的消元法,是目前计算机上常用于求低阶稠密矩阵方程组的有效方法,它是通过消元将一般线性方程组的求解问题转化为三角方程组的求解问题的。

Gauss 消元法的求解过程可分为两个阶段:首先,把原方程组化为上三角形方程组,称之为“消去”过程;然后,用逆次序逐一求出三角方程组(原方程组的等价方程组)的解,并称之为“回代”过程,其“消去”和“回代” 两个过程如下: 消去过程第一步: 设a 11≠0,取 m i1=-a i1/a 11 , 做(消去第i 个方程组的x 1)操作: m i1⨯第一个方程+第i 个方程 i=2,3,…n则第i 个方程变为第一步消元后的方程组变为)1()1(2)1(1)1(21i n b x a x a x a ini i =+++ iiij ij i i i j i ij ijb b a a b m b b a m a a ==+=+=)0()0()0(11)0()1()0(11)0()1(,,,第二步,考虑后n-1个方程组消除变量x 2 ,以此类推,经过n-1步消元,就得到与第一个线性方程组同解的上三角方程组: 回代过程为求解如上三角方程组,先从最后一个方程解出x n 再依次解出x n-1,x n-2,⋅⋅⋅⋅ , x 1 ,从而求出线性方程组的解。

Gauss 消元法的计算量为 n 3/3+n 2-n/3。

2) Gauss 消元法算法1.输入变量个数n 、系数矩阵A 、常数项b 2 For i=1,2,…,n-12.1 如果|a ii |<eps1,则输出“Gauss 消元失败”提示并终止 2.2 For I=k+1,k+2,n 2.2.1 a ik ⇐ -a ik /a kk2.2.2 a ij ⇐a ij +a ik *a kj ( j=k+1,k+2,…,n)⎪⎪⎩⎪⎪⎨⎧=++=++=+++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(12)0(121)0(11n n nn n n n n n b x a x a b x a x a b x a x a x a nk k j i b m b b a m a a a a m n k k k b a b x a b x a x a b x a x a x a k k ik k i k i k kj ik k ij k ijk kkk ik ik k ik ijn n n n nn n n n n,...,2,1,/1,,3,21,)1()1()()1()1()()1()1()()()1()1()1(2)1(22)1(2211212111++=⎪⎪⎩⎪⎪⎨⎧+=+=-=-=⎪⎪⎭⎪⎪⎬⎫==++=+++-------- ,对计算公式为次消元后的系数,表示第的上标和其中2.2.3 b i ⇐b i +a ik *b k3. x n ⇐ b n /a nn注:如上算法中使用了节省存储单元的技术,其中利用a ik 替代算法中的m ik ,而a ij 替代算法中的a ij (k),k=0,1,2,…,n-1。

3) Gauss 消元法程序Clear[a,b,x];n= Input[“线性方程组阶数n=”]; a=Input["系数矩阵A="]; b=Input["常数项b="]; eps1=0.000000001; t=1;Do[If[Abs[a[[k,k]]]<eps1,Print["Gauss 消元失效"];t=0;Break[]]; Do[m=-a[[i,k]]/a[[k,k]];Do[a[[i,j]]=a[[i,j]]+m*a[[k,j]],{j,k+1,n}]; b[[i]]=b[[i]]+m*b[[k]], {i,k+1,n}], {k,1,n}]; x=Table[0,{n}];If[t==1,x[[n]]=b[[n]]/a[[n,n]];Do[x[[k]]=(b[[k]]-Sum[a[[k,j]]*x[[j]],{j,k+1,n}])/a[[k,k]], {k,n-1,1,-1}]];Print[“Ax=b 的解为 “ , x]∑+=-⇐--=nk j kkj kj k k a x a b x n n k For 1/)(1.41,,2,1.4说明本程序用于求线性方程组Ax=b的解。

程序执行后,先通过键盘输入线性方程组阶数n、系数矩阵A、常数项b,程序即可给出线性方程组Ax=b的解。

如果Gauss消元中出现主对角线元素a ii=0,程序中用|a ii|<eps1表示a ii=0,给出Gauss失效提示。

程序中变量说明a:存放系数矩阵A及用于Gauss消元的中间变量和矩阵x: 存放Ax=b的解b: 存放线性方程组Ax=b的常数项beps1:描述a ii=0的数,程序中用|a ii|<eps1描述a ii=0的数,上程序eps1取为10-8,它是可以自行设置的。

t:临时控制变量4) 例题与实验例1. 用Gauss消元法解如下线性方程组5x1+2x2+x3= -12-x1+4x2+2x3= 202x1-3x2+10x3= 3解:执行Gauss消元法程序后在输入的三个窗口中按提示分别输入:3、{{5, 2, 1}, {-1, 4, 2}, {2, -3, 10}}、{-12, 20, 3}每次输入后用鼠标点击窗口的“OK”按扭,得如下输出结果Ax=b的解为 {-4, 3, 2}此结果说明所求解为 x1=-4,x2=3,x3=2 。

为检验结果的正确性,输入命令:{{5, 2, 1}, {-1, 4, 2}, {2, -3, 10}}.{-4,3,2}得计算结果{-12, 20, 3},说明计算结果正确。

例2.用Gauss消元法解如下线性方程组10-7x1+2x2+3x3+x4= 03x1+4x2+3x3+2x4= 12x1+3x2+4x3+2x4= -1x 1+2x 2+3x 3+4x 4= 0解:执行Gauss 消元法程序后在输入的三个窗口中按提示分别输入: 4、{{0.0000001,2,3,1},{3,4,3,2},{2,3,4,2},{1,2,3,4}}、{0,1,-1,0}} 每次输入后用鼠标点击窗口的“OK ”按扭,得如下输出结果 Ax=b 的解为 {-0.875, 1.66667, -1.20833, 0.291667}此结果说明所求解为 x 1=-0.875, x 2=1.66667, x 3=-1.20833, x 4=0.291667。

为检验结果的正确性,输入命令:{{0.0000001,2,3,1},{3,4,3,2},{2,3,4,2},{1,2,3,4}}. {-0.875, 1.66667, -1.20833, 0.291667} 得计算结果{-1.11022⨯10-16, 1., -1., 5.30894⨯10-9}显然它与正确的结果{0,1,-1,0}}有误差,只要用0取代其中的 -1.11022⨯10-16和5.30894⨯10-9就可以得到准确解。

本题计算说明用Gauss 消元法求线性方程组的解向量,有时得出的解并不是真正的准确解。

相关主题