数值分析 解线性方程组的直接法(三)

三角分解法的补充

列主元三角分解法

从直接三角分解公式可以看出,当 u k k = 0 u_{kk} =0 ukk=0时,计算将中断,或者当 u k k u_{kk} ukk绝对值很小时,按分解公式计算可能引起舍入误差的累积,因此可采用与列主元消去法类似的方法,将直接三角分解法修改为选主元的三角分解法.

    for k in range(0, n):  # 换行
        col_P_index = np.argmax(coef_mtrix[k:, k])
        coef_mtrix[[k, col_P_index + k], :] = coef_mtrix[[col_P_index + k, k], :]
        b_mtrix[[k,col_P_index+k]] = b_mtrix[[col_P_index+k,k]]

我们只需在三角分解法求 L , U L,U L,U矩阵前,将系数矩阵 A A A和矩阵 b b b进行选主元换行操作,即添加上述代码即可将三角分解法变为列主元三角分解法

特殊矩阵的三角分解法

在科学计算和实际工程应用中,经常遇到的是一些特殊类型的矩阵,由于它们具有良好的性质或者结构,因此可以给出更有效的三角分解公式以提高计算速度和节省存储空间.下面介绍三种特殊类型矩阵的三角分解法.

1.对称矩阵的三角分解法

设A为对称矩阵,且有分解式 A = L U A=LU A=LU.为了利用 A A A的对称性,将 U U U再分解为
U = ( u 11 u 22 ⋱ u n n ) ( 1 u 12 / u 11 ⋯ u 1 n / u 11 1 ⋯ u 2 n / u 22 ⋱ ⋮ 1 ) = D U 0 U=\begin{pmatrix} u_{11}& & & \\ & u_{22}& & \\ & &\ddots& \\ & & &u_{nn} \end{pmatrix}\begin{pmatrix} 1&u_{12}/u_{11}&\cdots&u_{1n}/u_{11}\\ &1&\cdots&u_{2n}/u_{22}\\ & & \ddots &\vdots\\ && & 1 \end{pmatrix}=DU_0 U= u11u22unn 1u12/u111u1n/u11u2n/u221 =DU0
式中,D为对角矩阵,记为 D = d i a g ( d 1 , d 2 , ⋯   , d n ) , U 0 D= diag(d_1,d_2, \cdots,d_n),U_0 D=diag(d1,d2,,dn)U0为单位上三角矩阵,于是有
A = L U = L D U 0 (3.14) A=LU=LDU_0\tag{3.14} A=LU=LDU0(3.14)
A = A T = U 0 T D L T A=A^T=U_0^TDL^T A=AT=U0TDLT
由分解的唯一性得 U 0 = L T U_0=L^T U0=LT,代入式 ( 3.14 ) (3.14) (3.14)中得到对称矩阵 A A A的分解式 A = L D L T A=LDL^T A=LDLT,式中 L L L是下单位下三角矩阵, D D D为对角矩阵。
由式 ( 3.10 ) (3.10) 3.10)、式 ( 3.11 ) (3.11) 3.11可得对称矩阵A的三角分解的计算公式.

  1. 计算 d 1 d_1 d1 L L L的第1列元素 d 1 = a 11 , , l i 1 = a i 1 / a 11 i = 1 , 2 , , ⋯   , n (3.15) d_1=a_{11},,l_{i1}=a_{i1}/a_{11}\quad i=1,2,,\cdots,n\tag{3.15} d1=a11,,li1=ai1/a11i=1,2,,,n(3.15)
  2. k = 2 , 3 , , n k =2,3,,n k=2,3,,n,计算 d d d L L L的第 k k k列元素
    { d k = a k k − ∑ m = 1 k − 1 l k m 2 d m l i k = a i k − ∑ m = 1 k − 1 l i m l k m d m d k , i = k + 1 , ⋯   , n (3.16) \begin{cases} d_k = a_{kk}-\sum\limits_{m=1}^{k-1}l^2_{km}d_m\\ l_{ik}= \frac{a_{ik}-\sum\limits_{m=1}^{k-1}l_{im}l_{km}d_m}{d_k},\quad i =k+1,\cdots,n \end{cases}\tag{3.16} dk=akkm=1k1lkm2dmlik=dkaikm=1k1limlkmdm,i=k+1,,n(3.16)

2.对称正定矩阵的三角分解法

对于方程组 A x = b Ax =b Ax=b,设 A A A为对称正定矩阵,且有分解式 A = L D L T A= LDL^T A=LDLT,由A的对称正定性可知, D D D的对角元素均为正数,于是 D D D可分解为
D = ( d 1 d 2 ⋱ d n ) = ( d 1 d 2 ⋱ d n ) ( d 1 d 2 ⋱ d n ) = D 1 2 D 1 2 D=\begin{pmatrix} d_1\\ &d_2\\ &&\ddots\\ &&&d_n \end{pmatrix}=\begin{pmatrix} \sqrt{d_1}\\ &\sqrt{d_2}\\ &&\ddots\\ &&&\sqrt{d_n}\end{pmatrix}\begin{pmatrix} \sqrt{d_1}\\ &\sqrt{d_2}\\ &&\ddots\\ &&&\sqrt{d_n}\end{pmatrix}=D^{\frac{1}{2}}D^{\frac{1}{2}} D= d1d2dn = d1 d2 dn d1 d2 dn =D21D21
由此得到
A = L D L T = L D 1 / 2 D 1 / 2 L T = ( L D 1 / 2 ) ( L D 1 / 2 ) T = G G T A=LDL^T=LD^{1/2}D^{1/2}L^T=(LD^{1/2})(LD^{1/2})^T=GG^T A=LDLT=LD1/2D1/2LT=(LD1/2)(LD1/2)T=GGT
式中, G = L D 1 2 G=LD^{\frac{1}{2}} G=LD21为下三角矩阵.
    下面我们用直接分解的方法来确定计算G元素的计算公式,因为
A = ( a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋮ a n 1 a n 2 ⋯ a n n ) = ( g 11 g 21 g 22 ⋮ ⋮ ⋱ g n 1 g n 2 ⋯ g n n ) ( g 11 g 21 ⋯ g n 1 g 22 ⋯ g n 2 ⋱ ⋮ g n n ) = G G T A=\begin{pmatrix} a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&&\vdots\\ a_{n1}&a_{n2}&\cdots&a_{nn}\end{pmatrix}=\begin{pmatrix} g_{11}\\ g_{21}&g_{22}\\ \vdots&\vdots&\ddots\\ g_{n1}&g_{n2}&\cdots&g_{nn} \end{pmatrix}\begin{pmatrix} g_{11}&g_{21}& \cdots & g_{n1}\\ &g_{22}& \cdots & g_{n2}\\ & & \ddots & \vdots\\ &&&g_{nn} \end{pmatrix}=GG^T A= a11a21an1a12a22an2a1na2nann = g11g21gn1g22gn2gnn g11g21g22gn1gn2gnn =GGT
式中, g i i > 0 ( i = 1 , 2 , ⋯   , n ) g_{ii}>0 (i=1,2,\cdots,n ) gii>0(i=1,2,,n),由矩阵乘法及得 g i j = 0 ( i < j ) , g_{ij}=0(i<j), gij=0(i<j),
a i k = ∑ m = 1 n g i m g k m = ∑ m = 1 k − 1 g i m g k m + g i k g k k a_{ik}=\sum\limits_{m=1}^ng_{im}g_{km}=\sum\limits_{m=1}^{k-1}g_{im}g_{km}+g_{ik}g_{kk} aik=m=1ngimgkm=m=1k1gimgkm+gikgkk
于是得对称正定矩阵 A A A的三角分解计算公式.
    对于 k = 1 , 2 , ⋯   , n , k=1,2,\cdots,n, k=1,2,,n,计算 G G G的第 k k k列元素
g k k = ( a k k − ∑ m = 1 k − 1 g k m 2 ) 1 2 (3.17) g_{kk}=(a_{kk}-\sum\limits_{m=1}^{k-1}g_{km}^2)^{\frac{1}{2}}\tag{3.17} gkk=(akkm=1k1gkm2)21(3.17)
g i k = ( a i k − ∑ m = 1 k − 1 g i m g k m ) / g k k , i = k + 1 , ⋯   , n (3.18) g_{ik}=(a_{ik}-\sum\limits_{m=1}^{k-1}g_{im}g_{km})/g_{kk},\quad i=k+1,\cdots,n \tag{3.18} gik=(aikm=1k1gimgkm)/gkk,i=k+1,,n(3.18)
对称正定矩阵 A A A G G T GG^T GGT分解〔即按式 ( 3.17 ) (3.17) 3.17),式 ( 3.18 ) (3.18) (3.18)确定 G G G的元素]的方法称为平方根分解法,对称正定矩阵 A A A L D L T LDL^T LDLT分解称为改进平方根法.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值