对称正定矩阵的Cholesky分解

对称正定矩阵的三角分解

  A \ A  A为n阶对称正定矩阵,则   A \ A  A可以分解为一个单位下三角矩阵   L ~ \ \tilde{L}  L~和一个上三角矩阵   U ~ \ \tilde{U}  U~的乘积:
  A = L ~ U ~ \ A=\tilde{L} \tilde{U}  A=L~U~
  D = d i a g ( u 11 ~ , ⋯   , u n n ~ ) \ D=diag(\tilde{u_{11}},\cdots, \tilde{u_{nn}})  D=diag(u11~,,unn~),则
  U ~ = D U = D 1 2 D 1 2 U \ \tilde{U}=DU=D^{\frac{1}{2}}D^{\frac{1}{2}}U  U~=DU=D21D21U
得:
  A = ( L ~ D 1 2 ) ( D 1 2 U ) = L U 1 \ A=(\tilde{L}D^{\frac{1}{2}})(D^{\frac{1}{2}}U)=LU_1  A=(L~D21)(D21U)=LU1
其中   L = L ~ D 1 2 \ L=\tilde{L}D^{\frac{1}{2}}  L=L~D21为非奇异的下三角矩阵,   U 1 = D 1 2 U \ U_1=D^{\frac{1}{2}}U  U1=D21U为非奇异的上三角矩阵。因为   A = A T \ A=A^T  A=AT,所以
  L U 1 = U 1 T L T \ LU_1=U_1^T L^T  LU1=U1TLT
由于A的分解是唯一的,于是
  U 1 = L T \ U_1=L^T  U1=LT

  A = L L T ( 1 ) \ A=LL^T \quad (1)  A=LLT(1)
以上就是对成正定矩阵的分解定理

Cholesky分解

设A是对称正定矩阵,则存在对角元全是正数的下三角矩阵L,使(1)存在且唯一,这种分解称为Cholesky分解,假设以算出L的第1至j-1列元素,由(1)得
  a i j = ∑ k = 1 j − 1 l i k l j k + l i j l j j ( i = j , j + 1 , ⋯   , n ) \ a_{ij}=\sum_{k=1}^{j-1}l_{ik}l_{jk}+l_{ij}l_{jj} \quad (i=j,j+1,\cdots,n)  aij=k=1j1likljk+lijljj(i=j,j+1,,n)
于是对于j=1,2,…,n 有
  l j j = ( a j j − ∑ k = 1 j − 1 l j k 2 ) 1 2 \ l_{jj}=(a_{jj}-\sum_{k=1}^{j-1}l_{jk}^2)^{\frac{1}{2}}  ljj=(ajjk=1j1ljk2)21
  l i j = a i j − ∑ k = 1 j − 1 l i k l j k l j j ( i = j + 1 , ⋯   , n ) \ l_{ij}=\frac{a_{ij}-\sum_{k=1}^{j-1}l_{ik}l_{jk}}{l_{jj}} \quad (i=j+1,\cdots,n)  lij=ljjaijk=1j1likljk(i=j+1,,n)
  规 定 ∑ k = 1 0 l i k l j k = 0 \ 规定 \sum_{k=1}^0 l_{ik}l_{jk}=0  k=10likljk=0

Matlab实现矩阵的Cholesky分解

function L = Cholesky(A)
%CHOLESKY 完成对矩阵A的cholesky分解
%   input: A -- 要分解的矩阵
%   output: L -- A的cholesky分解下三角矩阵

[r, c] = size(A);
L = zeros(r, c);

for j = 1:c
    if j == 1
        L(j, j) = A(j, j) ^ (1/2);
        L(j+1:end, j) = A(j+1:end, j) / L(j, j);
    else
        L(j, j) = (A(j, j) - sum(L(j, 1:j-1).^2)) .^ (1/2);
        L(j+1:end, j) = (A(j+1:end, j) - L(j+1:end, 1:j-1) * L(j, 1:j-1)') / L(j, j);
    end
end

end
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Doolittle分解是一种将对称正定矩阵分解为下三角矩阵L和上三角矩阵U的方法。通过Python实现Doolittle分解,可以得到矩阵L和U。具体步骤如下: 1. 初始化矩阵L为单位下三角矩阵矩阵U为0矩阵。 2. 根据Doolittle分解的规则,计算矩阵L和U: - 对于矩阵L,依次计算每一行的元素。首先,将L的第一行元素设置为原矩阵的第一行元素。然后,依次计算L的每一行元素,其中,L的第i行第j列元素的计算公式为 a(i,j)-∑(L的第i行第k列元素乘以U的第k行第j列元素),其中k的范围从1到j-1。 - 对于矩阵U,依次计算每一行的元素。首先,将U的第一行元素设置为原矩阵的第一行元素除以L的第一行第一列元素。然后,依次计算U的每一行元素,其中,U的第i行第j列元素的计算公式为(a(i,j)-∑(L的第i行第k列元素乘以U的第k行第j列元素))/L的第i行第i列元素,其中k的范围从1到i-1。 完成Doolittle分解之后,可以利用Cholesky分解求解线性方程组。Cholesky分解是一种将对称正定矩阵分解为下三角矩阵L的转置乘以L的方法。具体步骤如下: 1. 利用Doolittle分解的结果,得到矩阵L和U。 2. 将矩阵L进行转置,并得到矩阵L的转置乘以L的结果,即L的转置乘以L的矩阵A。 3. 通过Cholesky分解的规则,计算矩阵L的转置乘以L: - 对于矩阵A,依次计算每一行的元素。首先,将A的第一行元素设为(L的转置乘以L的矩阵A的第一行元素)减去原矩阵的第一行元素。然后,依次计算A的每一行元素,其中,A的第i行第j列元素的计算公式为(L的转置乘以L的矩阵A的第i行第j列元素)减去(∑(L的转置乘以L的矩阵A的第i行第k列元素乘以L的转置乘以L的矩阵A的第k行第j列元素)),其中k的范围从1到j-1。 完成Cholesky分解后,可以利用线性方程组的解法求解线性方程组,通过求解矩阵L的转置乘以y=b的向量 y=A*x,其中A为Cholesky分解矩阵L的转置乘以L的结果,b为线性方程组的右侧向量,x为线性方程组的解向量。 希望以上对于Python实现Doolittle分解后,完成对称正定矩阵Cholesky分解和线性方程组的求解的解答能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值