【数值分析——线性方程组直接方法】LU分解与Gauss消去法

  • LU分解
    Gauss消去法,本质上就是对系数矩阵 A A A进行 L U LU LU分解,即将 A A A分解成两个矩阵的乘积
    A = L U A=LU A=LU
    其中 L L L是单位下三角矩阵 U U U为非奇异上三角矩阵,然后再对两个三角方程进行求解: 假定矩阵A存在 L U LU LU分解,则方程组 A x = b Ax=b Ax=b就转化为求解下面两个三角方程组
    { L y = b U x = y \left\{\begin{matrix} Ly=b\\ Ux=y \end{matrix}\right. {Ly=bUx=y
    显然,上式中的两个三角方程组都非常容易求解。
    我们知道, 当系数矩阵A非奇异时,方程组 A x = b Ax=b Ax=b总是存在唯一解。但是,并不是每个非奇异矩阵都存在 L U LU LU分解

  • L U LU LU分解的存在性和唯一性
    矩阵 A ∈ R n × n A∈R^{n×n} ARn×n存在 L U LU LU分解(即存在单位下三角矩阵 L L L和非奇异上三角矩阵 U U U使得 A = L U A=LU A=LU)的充要条件是 A A A的所有顺序主子矩阵都非奇异。进一步,若 A A A存在 L U LU LU分解,则分解是唯一的。

    • 顺序主子矩阵(顺序主子式)
      矩阵的顺序主子式(principal minors)是矩阵的特定类型子矩阵,它们可以帮助我们分析矩阵的性质,如正定性和特征值。顺序主子式是通过从矩阵的主对角线上选取连续的行和列,然后构成子矩阵来定义的。这些子矩阵的行数和列数相同,且与原矩阵的行数和列数有关。它们通常用于判断矩阵的性质和分析特征值的范围。
  • L U LU LU分解的实现
    矩阵的 L U LU LU分解可以通过初等行变换来实现,给定矩阵
    A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ] ∈ R n × n A = \begin{bmatrix} a_{11}& a_{12} & \cdots & a_{1n} \\ a_{21}& a_{22} & \cdots & a_{2n} \\ \vdots& \vdots & \ddots & \vdots \\ a_{n1}& a_{n2} & \cdots & a_{nn} \\ \end{bmatrix} ∈ \mathbb{R}^{n\times n} A= a11a21an1a12a22an2a1na2nann Rn×n

    • 第一步:假定 a 11 ≠ 0 a_{11} \neq 0 a11=0,构造矩阵
      L 1 = [ 1 0 0 ⋯ 0 l 21 1 0 ⋯ 0 l 31 0 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ l n 1 0 0 ⋯ 1 ] ,其中 l i 1 = a i 1 a 11 , i = 2 , 3 , ⋯   , n . L_{1} = \begin{bmatrix} 1& 0 & 0 & \cdots & 0 \\ l_{21}& 1 & 0 & \cdots & 0 \\ l_{31}& 0 & 1 & \cdots & 0 \\ \vdots& \vdots & \vdots & \ddots &\vdots \\ l_{n1}& 0 & 0 & \cdots & 1 \\ \end{bmatrix} ,其中 l_{i1} = \frac{a_{i1}}{a_{11}},i=2,3,\cdots ,n. L1= 1l21l31ln1010000100001 ,其中li1=a11ai1,i=2,3,,n.
      易知 L 1 L_{1} L1的逆为
      L 1 − 1 = [ 1 0 0 ⋯ 0 − l 21 1 0 ⋯ 0 − l 31 0 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ − l n 1 0 0 ⋯ 1 ] L_{1}^{-1} = \begin{bmatrix} 1& 0 & 0 & \cdots & 0 \\ -l_{21}& 1 & 0 & \cdots & 0 \\ -l_{31}& 0 & 1 & \cdots & 0 \\ \vdots& \vdots & \vdots & \ddots &\vdots \\ -l_{n1}& 0 & 0 & \cdots & 1 \\ \end{bmatrix} L11= 1l21l31ln1010000100001
      L 1 − 1 L^{−1}_{1} L11左乘 A A A,并将所得到的矩阵记为 A ( 1 ) A^{(1)} A(1),则
      A ( 1 ) = L 1 − 1 A = [ a 11 a 12 ⋯ a 1 n 0 a 22 ( 1 ) ⋯ a 2 n ( 1 ) ⋮ ⋮ ⋱ ⋮ 0 a n 2 ( 1 ) ⋯ a n n ( 1 ) ] A^{(1)} = L^{-1}_{1}A = \begin{bmatrix} a_{11}& a_{12} & \cdots & a_{1n} \\ 0& a_{22}^{(1)} & \cdots & a_{2n}^{(1)} \\ \vdots& \vdots & \ddots & \vdots \\ 0& a_{n2}^{(1)} & \cdots & a_{nn}^{(1)} \\ \end{bmatrix} A(1)=L11A= a1100a12a22(1)an2(1)a1na2n(1)ann(1)
      即左乘 L 1 − 1 L^{−1}_{1} L11后, A A A的第一列中除第一个元素外其它都变为0.
    • 第二步: 类似地, 我们可以将上面的操作作用在 A ( 1 ) A^{(1)} A(1)的子矩阵 A ( 1 ) ( 2 : n , 2 : n ) A^{(1)}(2:n,2:n) A(1)(2:n,2:n)上,将其第一列除第一个元素外都变为0。也就是说,假定 a 22 ( 1 ) ≠ 0 a^{(1)}_{22} \neq 0 a22(1)=0 构造矩阵
      L 2 = [ 1 0 0 ⋯ 0 0 1 0 ⋯ 0 0 l 32 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 l n 2 0 ⋯ 1 ] ,其中 l i 2 = a i 2 ( 2 ) a 22 ( 2 ) , i = 3 , 4 , ⋯   , n . L_{2} = \begin{bmatrix} 1& 0 & 0 & \cdots & 0 \\ 0& 1 & 0 & \cdots & 0 \\ 0& l_{32} & 1 & \cdots & 0 \\ \vdots& \vdots & \vdots & \ddots &\vdots \\ 0& l_{n2} & 0 & \cdots & 1 \\ \end{bmatrix} ,其中 l_{i2} = \frac{a_{i2}^{(2)}}{a_{22}^{(2)}},i=3,4,\cdots ,n. L2= 100001l32ln200100001 ,其中li2=a22(2)ai2(2),i=3,4,,n.
      L 2 − 1 L_{2}^{-1} L21左乘 A ( 1 ) A^{(1)} A(1),并将所得到的矩阵记为 A ( 2 ) A^{(2)} A(2),则
      A ( 2 ) = L 2 − 1 A ( 1 ) = [ a 11 a 12 a 13 ⋯ a 1 n 0 a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) 0 0 a 33 ( 2 ) ⋯ a n n ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 a n 3 2 ⋯ a n n ( 2 ) ] A^{(2)} = L^{-1}_{2}A^{(1)} = \begin{bmatrix} a_{11}& a_{12} & a_{13} & \cdots & a_{1n} \\ 0& a_{22}^{(1)} & a_{23}^{(1)} &\cdots & a_{2n}^{(1)} \\ 0& 0 & a_{33}^{(2)} &\cdots & a_{nn}^{(2)} \\ \vdots& \vdots & \vdots & \ddots & \vdots \\ 0& 0 & a_{n3}^{2} & \cdots & a_{nn}^{(2)}\\ \end{bmatrix} A(2)=L21A(1)= a11000a12a22(1)00a13a23(1)a33(2)an32a1na2n(1)ann(2)ann(2)
      依此类推,假定 a k k ( k − 1 ) ≠ 0 ( k = 3 , 4 , ⋯   , n − 1 ) a^{(k−1)}_{kk}\neq 0\left(k=3,4,\cdots ,n−1\right) akk(k1)=0(k=3,4,,n1),则我们可以构造一系列的矩阵 L 3 , L 4 , L n − 1 L_{3},L_{4},L_{n−1} L3,L4,Ln1,使得
      L n − 1 − 1 ⋯ L 2 − 1 L 1 − 1 A = [ a 11 a 12 a 13 ⋯ a 1 n 0 a 22 ( 1 ) a 23 ( 1 ) ⋯ a 2 n ( 1 ) 0 0 a 33 ( 2 ) ⋯ a 3 n ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ a n n ( n − 1 ) ] L_{n-1}^{-1}\cdots L_2^{-1}L_1^{-1}A = \begin{bmatrix} a_{11}&a_{12}&a_{13}&\cdots&a_{1n}\\ 0 & a_{22}^{(1)} & a_{23}^{(1)} & \cdots & a_{2n}^{(1)}\\ 0 & 0 & a_{33}^{(2)} & \cdots & a_{3n}^{(2)}\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & a_{nn}^{(n-1)} \\ \end{bmatrix} Ln11L21L11A= a11000a12a22(1)00a13a23(1)a33(2)0a1na2n(1)a3n(2)ann(n1)
      为一个上三角矩阵。我们将这个上三角矩阵记为 U U U,并记
      L ≜ L 1 L 2 ⋯ L n − 1 = [ 1 0 0 ⋯ 0 l 21 1 0 ⋯ 0 l 31 l 32 1 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ l n 1 l n 2 l n 3 ⋯ 1 ] , L\triangleq L_1L_2\cdots L_{n-1}= \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ l_{21} & 1 & 0 & \cdots & 0 \\ l_{31} & l_{32} & 1 & \cdots & 0\\ \vdots & \vdots & \vdots & \ddots & \vdots \\ l_{n1}&l_{n2}&l_{n3}&\cdots&1\\ \end{bmatrix}, LL1L2Ln1= 1l21l31ln101l32ln2001ln30001 ,
      则可得
      A = L U , A = LU, A=LU,
      这就是 A A A L U LU LU分解。
  • L U LU LU算法

    LU分解伪代码

    Set L = I, U = 0                   	 	  % 将L设为单位矩阵,U设为零矩阵
    for k = 1:n−1
        for j = k:n
            u(k.j) = a(k,j)                   % 更新U的第k行
        end
        for i = k+1:n
            l(i,k) = a(i,k)/a(k,k)            % 计算 lik
            for j = k+1:n
                a(i,j) = a(i,j)l(i,k)*u(k,j) % 更新A(i,k+1:n)
            end
        end
    end
    
  • Gauss消去法代码实现

    回代求解Ly=b和Ux=y

    y(1) = b(1)/l(1,1)                 % 向前回代求解Ly=b
    for i = 2:n
        for j = 1:i1 do
            b(i) = b(i)l(i,j)*y(j)
        end
        y(i) = b(i)/l(i,i)
    end
    x(n) = y(n)/u(n,n)                 % 向后回代求解Ux=y
    for i = n−1:1:1
        for j = n:1:i+1
            y(i) = y(i)u(i,j)*x(j)
        end
        x(i) = y(i)/u(i,i)
    end
    
  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coollingomg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值