第7章 解线性方程组的直接方法
Guass消去法
- 消元
- G ( 1 ) = [ 1 0 0 0 − a 21 a 11 1 0 0 − a 31 a 11 0 1 0 ⋮ ⋱ − a n 1 a 11 0 0 1 ] G^{(1)} = \begin{bmatrix} 1 & 0 & 0 & & 0 \\ -\frac{a_{21}}{a_{11}} & 1 & 0 & & 0 \\ -\frac{a_{31}}{a_{11}} & 0 & 1 & & 0 \\ \vdots & & & \ddots & \\ -\frac{a_{n1}}{a_{11}} & 0 & 0 & & 1 \\ \end{bmatrix} G(1)=⎣ ⎡1−a11a21−a11a31⋮−a11an101000010⋱0001⎦ ⎤
- A ( 1 ) = A A^{(1)} = A A(1)=A
- A ( 2 ) = G ( 1 ) A ( 1 ) A^{(2)} = G^{(1)} A^{(1)} A(2)=G(1)A(1)
- A ( 2 ) = [ a 1 , 1 ( 2 ) a 1 , 2 : n ( 2 ) 0 A 2 : n , 2 : n ( 2 ) ] A^{(2)} = \begin{bmatrix} a^{(2)}_{1,1} & a^{(2)}_{1,2:n} \\ 0 & A^{(2)}_{2:n,2:n} \\ \end{bmatrix} A(2)=[a1,1(2)0a1,2:n(2)A2:n,2:n(2)]
- A ( n ) = G ( n − 1 ) A ( n − 1 ) A^{(n)} = G^{(n-1)} A^{(n-1)} A(n)=G(n−1)A(n−1)
- 回代
- 进一步把 A A A转化成对角矩阵
- 实现Gauss消去法时不需要交换行
- a k k ( k ) ≠ 0 ⟺ det ( A 1 : k , 1 : k ) ≠ 0 a^{(k)}_{kk} \neq 0 \iff \det(A_{1:k,1:k}) \neq 0 akk(k)=0⟺det(A1:k,1:k)=0
- 非奇异线性变换不改变行列式的值
- 推论
- a 11 ( 1 ) = det ( A 1 : 1 , 1 : 1 ) a^{(1)}_{11} = \det(A_{1:1,1:1}) a11(1)=det(A1:1,1:1)
- a k k ( k ) = det ( A 1 : k , 1 : k ) det ( A 1 : k − 1 , 1 : k − 1 ) a^{(k)}_{kk} = \frac{\det(A_{1:k,1:k})}{\det(A_{1:k-1,1:k-1})} akk(k)=det(A1:k−1,1:k−1)det(A1:k,1:k)
- a k k ( k ) ≠ 0 ⟺ det ( A 1 : k , 1 : k ) ≠ 0 a^{(k)}_{kk} \neq 0 \iff \det(A_{1:k,1:k}) \neq 0 akk(k)=0⟺det(A1:k,1:k)=0
- LU分解
- A ( n ) = G ( n ) ⋯ G ( 1 ) A ( 1 ) A^{(n)} = G^{(n)} \cdots G^{(1)} A^{(1)} A(n)=G(n)⋯G(1)A(1)
- L − 1 = G ( n ) ⋯ G ( 1 ) L^{-1} = G^{(n)} \cdots G^{(1)} L−1=G(n)⋯G(1)
- U = A ( n ) U = A^{(n)} U=A(n)
- a k k ( k ) ≠ 0 a^{(k)}_{kk} \neq 0 akk(k)=0时是唯一的
- A A A非奇异时, L 1 U 1 = L 2 U 2 L_1U_1 = L_2U_2 L1U1=L2U2, I = L 1 − 1 L 2 = U 1 U 2 − 1 I = L_1^{-1} L_2 = U_1 U_2^{-1} I=L1−1L2=U1U2−1.
- 计算量
- 加减 ∑ i = 1 n i 2 = n 3 3 \sum\limits_{i=1}^{n} i^2 = \frac{n^3}{3} i=1∑ni2=3n3 次
- 乘除 ∑ i = 1 n i 2 = n 3 3 \sum\limits_{i=1}^{n} i^2 = \frac{n^3}{3} i=1∑ni2=3n3 次
列主元素消去法
- 数值稳定性
- a k k ( k ) a^{(k)}_{kk} akk(k) 作为分母不宜太小
- 完全主元素
- A k : n , k : n ( k ) A^{(k)}_{k:n,k:n} Ak:n,k:n(k) 中绝对值最大元素交换到 a k k ( k ) a^{(k)}_{kk} akk(k)
- 算法
- 乘数 a k i a k k \frac{a_{ki}}{a_{kk}} akkaki 冲掉 a k i a_{ki} aki
- 消元结果 A k + 1 : n , k : n A_{k+1:n,k:n} Ak+1:n,k:n 冲掉 A A A
- 计算结果 x x x 冲掉 b b b
- a i max j max = 0 a_{i_{\max} j_{\max}} = 0 aimaxjmax=0 终止
- 行交换
- 同时交换 A A A 和 b b b
- 列交换
- 交换 M a p I n d e x \mathrm{MapIndex} MapIndex
- 列主元素
- 寻找完全主元素代价较大
- 列交换比行交换麻烦
- 可以额外计算 d e t A \mathtt{detA} detA
- 行交换时 d e t A ← − d e t A \mathtt{detA} \gets - \mathtt{detA} detA←−detA
- PLU分解
- ⋯ S x G S y ⋯ = ⋯ ( S x G S x ) S x S y ⋯ \cdots S_x G S_y \cdots = \cdots (S_x G S_x) S_x S_y \cdots ⋯SxGSy⋯=⋯(SxGSx)SxSy⋯
- U = A ( n ) = L ~ − 1 P A ( 1 ) U = A^{(n)} = \tilde{L}^{-1} P A^{(1)} U=A(n)=L~−1PA(1)
平方根法
- 对称正定的矩阵
- A = L D L T A = L D L^T A=LDLT
- D i i > 0 D_{ii} > 0 Dii>0
- A = C C T A = C C^T A=CCT
- 逐列计算
- i ⩽ j i \leqslant j i⩽j
- a i j = ∑ k = 1 j c i k c j k = ∑ k = 1 j − 1 c i k c j k + c j j c i j a_{ij} = \sum\limits_{k=1}^{j} c_{ik} c_{jk} = \sum\limits_{k=1}^{j-1} c_{ik} c_{jk} + c_{jj} c_{ij} aij=k=1∑jcikcjk=k=1∑j−1cikcjk+cjjcij
- c j j c_{jj} cjj
- c i j c_{ij} cij ( i > j i>j i>j)
- 数值稳定性
- a j j = ∑ k = 1 j l j k 2 a_{jj} = \sum\limits_{k=1}^{j} l_{jk}^2 ajj=k=1∑jljk2
- l j k 2 < a j j l_{jk}^2 < a_{jj} ljk2<ajj
- 乘除 n 3 6 \frac{n^3}{6} 6n3 次
- 避免开方运算
- A = ( L D ) L T A = (L D) L^T A=(LD)LT
- 逐行计算
- i ⩽ j i \leqslant j i⩽j
- a i j = ∑ k = 1 j l i k d k l j k = ∑ k = 1 j − 1 l i