计算机求解线性方程组

0. 引言

在很多工程求解问题中,大部分的数值计算都可以归结为求解线性方程组的问题,所以求解线性方程组是数值计算中最为重要的一部分。其中还有很多其他数值计算中,其中的关键步骤都涉及到线性方程组的求解。由克莱姆法则可知,线性方程组 A x = b Ax=b Ax=b中,系数矩阵的行列式 det ⁡ ( A ) ≠ 0 \det(A)\neq 0 det(A)=0,则线性方程组具有唯一解。克莱姆法则在计算高维度情况下的矩阵运算中计算量很大,不适合求解一般情况下的线性方程组。常见的求解线性方程组的方法有两种,即直接方法和迭代方法。直接方法是指通过有限的步骤计算直接求解出方程组的精确解的方法。迭代的方法值得是用极限的过程去逐步逼近线性方程组精确解的方法。本节将实现这几种求解的方法。

1. 直接消元法

直接消元的方法是一种便捷的求解线性方程组的方法。高斯消去方法是最为古老的一种线性方程组求解的方法。通过改进高斯消去法得到更加便捷的主元素消去法、矩阵的三角分解(即Doolittle分解方法),是用于求解低阶稠密方程组的有效方法。特点是,通过消元将一般的线性方程组求解问题转化为上三角方程组求解问题。

1.1 高斯消元法

1.1.1 顺序高斯消去法

一般地,设 n n n阶线性方程组为
{ a 11 ( 0 ) x 1 + a 12 ( 0 ) x 2 + . . . + a 1 n ( 0 ) x n = b 1 ( 0 ) a 21 ( 0 ) x 1 + a 22 ( 0 ) x 2 + . . . + a 2 n ( 0 ) x n = b 2 ( 0 ) : a n 1 ( 0 ) x 1 + a n 2 ( 0 ) x 2 + . . . + a n n ( 0 ) x n = b n ( 0 ) \begin{cases} a_{11}^{(0)}x_{1}+a_{12}^{(0)}x_{2}+...+a_{1n}^{(0)}x_{n}=b_{1}^{(0)}\\ a_{21}^{(0)}x_{1}+a_{22}^{(0)}x_{2}+...+a_{2n}^{(0)}x_{n}=b_{2}^{(0)}\\ :\\ a_{n1}^{(0)}x_{1}+a_{n2}^{(0)}x_{2}+...+a_{nn}^{(0)}x_{n}=b_{n}^{(0)}\\ \end{cases} a11(0)x1+a12(0)x2+...+a1n(0)xn=b1(0)a21(0)x1+a22(0)x2+...+a2n(0)xn=b2(0):an1(0)x1+an2(0)x2+...+ann(0)xn=bn(0)
写成增广矩阵的方式为
( A ( 0 ) ∣ b ( 0 ) ) = [ a 11 ( 0 ) a 12 ( 0 ) . . . a 1 n ( 0 ) b 1 ( 0 ) a 21 ( 0 ) a 22 ( 0 ) . . . a 2 n ( 0 ) b 2 ( 0 ) : : : : : a n 1 ( 0 ) a n 2 ( 0 ) . . . a n n ( 0 ) b n ( 0 ) ] (A^{(0)}|b^{(0)})=\left[\begin{array}{cccc} a_{11}^{(0)}&a_{12}^{(0)}&...&a_{1n}^{(0)}&b_{1}^{(0)}\\ a_{21}^{(0)}&a_{22}^{(0)}&...&a_{2n}^{(0)}&b_{2}^{(0)}\\ :&:&:&:&:\\ a_{n1}^{(0)}&a_{n2}^{(0)}&...&a_{nn}^{(0)}&b_{n}^{(0)}\\ \end{array}\right] (A(0)b(0))=a11(0)a21(0):an1(0)a12(0)a22(0):an2(0)......:...a1n(0)a2n(0):ann(0)b1(0)b2(0):bn(0)
l i 1 = a i 1 ( 0 ) / a 11 ( 0 ) , ( i = 2 , 3 , . . . , n ) l_{i1}=a_{i1}^{(0)}/a_{11}^{(0)},(i=2,3,...,n) li1=ai1(0)/a11(0),(i=2,3,...,n),将第一行的 − l i 1 -l_{i1} li1倍加到第 i i i行上,那么矩阵变为
( A ( 1 ) ∣ b ( 1 ) ) [ a 11 ( 0 ) a 12 ( 0 ) . . . a 1 n ( 0 ) b 1 ( 0 ) 0 a 22 ( 1 ) . . . a 2 n ( 1 ) b 2 ( 1 ) : : : : : a n 1 ( 1 ) a n 2 ( 1 ) . . . a n n ( 1 ) b n ( 1 ) ] (A^{(1)}|b^{(1)})\left[\begin{array}{cccc} a_{11}^{(0)}&a_{12}^{(0)}&...&a_{1n}^{(0)}&b_{1}^{(0)}\\ 0&a_{22}^{(1)}&...&a_{2n}^{(1)}&b_{2}^{(1)}\\ :&:&:&:&:\\ a_{n1}^{(1)}&a_{n2}^{(1)}&...&a_{nn}^{(1)}&b_{n}^{(1)}\\ \end{array}\right] (A(1)b(1))a11(0)0:an1(1)a12(0)a22(1):an2(1)......:...a1n(0)a2n(1):ann(1)b1(0)b2(1):bn(1)
其中,式子中
a i j ( 1 ) = a i j ( 0 ) − l i 1 a 1 j ( 0 ) , ( i = 2 , 3 , . . . , n ; j = 1 , 2 , . . . , n ) a_{ij}^{(1)}=a_{ij}^{(0)}-l_{i1}a_{1j}^{(0)},(i=2,3,...,n;j=1,2,...,n) aij(1)=aij(0)li1a1j(0),(i=2,3,...,n;j=1,2,...,n)

b i ( 1 ) = b i ( 0 ) − l i 1 b 1 ( 0 ) , ( i = 2 , 3 , . . . , n ) b_{i}^{(1)}=b_{i}^{(0)}-l_{i1}b_{1}^{(0)},(i=2,3,...,n) bi(1)=bi(0)li1b1(0),(i=2,3,...,n)

k k k步骤的时候,设主元素 a k k ( k − 1 ) ≠ 0 a_{kk}^{(k-1)}\neq 0 akk(k1)=0时,设 l i k = a i k ( k − 1 ) / a k k ( k − 1 ) l_{ik}=a_{ik}^{(k-1)}/a_{kk}^{(k-1)} lik=aik(k1)/akk(k1),并且将 ( A ( k − 1 ) ∣ b ( k − 1 ) ) (A^{(k-1)|b^{(k-1)}}) (A(k1)b(k1))的第 k k k行的 − l i k -l_{ik} lik倍加到第 i i i ( i = k + 1 , k + 2 , . . . , n ) (i=k+1,k+2,...,n) (i=k+1,k+2,...,n)得到:
( A ( k ) ∣ b ( k ) ) = [ a 11 ( 0 ) a 12 ( 0 ) . . . a 1 k ( 0 ) a 1 ( k + 1 ) ( 0 ) . . . a 1 n ( 0 ) b 1 ( 0 ) : : : : : : a k k ( k − 1 ) a k ( k + 1 ) ( 0 ) . . . a k n ( k − 1 ) b k ( k − 1 ) a ( k + 1 ) ( k + 1 ) ( k ) . . . a ( k + 1 ) n ( k ) b n ( k ) : : : : a n ( k + 1 ) ( k ) . . . a n n ( k ) b n ( k ) ] (A^{(k)}|b^{(k)})=\left[\begin{array}{cccc} a_{11}^{(0)}&a_{12}^{(0)}&...&a_{1k}^{(0)}&a_{1(k+1)}^{(0)}&...&a_{1n}^{(0)}&b_{1}^{(0)}\\ &&:&:&:&:&:&:\\ &&&a_{kk}^{(k-1)}&a_{k(k+1)}^{(0)}&...&a_{kn}^{(k-1)}&b_{k}^{(k-1)}\\ &&&&a_{(k+1)(k+1)}^{(k)}&...&a_{(k+1)n}^{(k)}&b_{n}^{(k)}\\ &&&&:&:&:&:\\ &&&&a_{n(k+1)}^{(k)}&...&a_{nn}^{(k)}&b_{n}^{(k)}\\ \end{array}\right] (A(k)b(k))=a11(0)a12(0)...:a1k(0):akk(k1)a1(k+1)(0):ak(k+1)(0)a(k+1)(k+1)(k):an(k+1)(k)...:......:...a1n(0):akn(k1)a(k+1)n(k):ann(k)b1(0):bk(k1)bn(k):bn(k)

式中
a i j ( k ) = a i j ( k − 1 ) − l i k a k j ( k − 1 ) , ( i , j = k + 1 , k + 2 , . . . , n ) a_{ij}^{(k)}=a_{ij}^{(k-1)}-l_{ik}a_{kj}^{(k-1)},(i,j=k+1,k+2,...,n) aij(k)=aij(k1)likakj(k1),(i,j=k+1,k+2,...,n)

b i ( k ) = b i ( k − 1 ) − l i k b k ( k − 1 ) , ( i = k + 1 , k + 2 , . . . , n ) b_{i}^{(k)}=b_{i}^{(k-1)}-l_{ik}b_{k}^{(k-1)},(i=k+1,k+2,...,n) b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值