コレスキー分解

コレスキー分解(Cholesky decomposition)とは、半正定値エルミート行列を下三角行列とその共役転置行列の積に分解することである。このような分解は常に存在し、かつ、下三角行列の対角成分を非負実数にできる。

$$ \begin{align} & \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1, n} \\ \overline{a_{1,2}} & a_{2,2} & \cdots & a_{2, n} \\ \vdots &\vdots & \ddots & \vdots \\ \overline{a_{1,n}} & \overline{a_{2,n}} & \cdots & a_{n, n} \\ \end{pmatrix} = \begin{pmatrix} r_{1,1} & 0 & \cdots & 0 \\ r_{1,2} & r_{2,2} & \cdots & 0 \\ \vdots &\vdots & \ddots & \vdots \\ r_{1,n} & r_{2,n} & \cdots & r_{n, n} \\ \end{pmatrix} \begin{pmatrix} r_{1,1} & \overline{r_{1,2}} & \cdots & \overline{r_{1, n}} \\ 0 & r_{2,2} & \cdots & \overline{r_{2, n}} \\ \vdots &\vdots & \ddots & \vdots \\ 0 & 0 & \cdots & r_{n, n} \\ \end{pmatrix} \end{align} $$
元の行列が実対称行列の場合は、下三角行列とその転置行列の積への分解が存在する。
$$ \begin{align} & \begin{pmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1, n} \\ a_{1,2} & a_{2,2} & \cdots & a_{2, n} \\ \vdots &\vdots & \ddots & \vdots \\ a_{1,n} & a_{2,n} & \cdots & a_{n, n} \\ \end{pmatrix} = \begin{pmatrix} r_{1,1} & 0 & \cdots & 0 \\ r_{1,2} & r_{2,2} & \cdots & 0 \\ \vdots &\vdots & \ddots & \vdots \\ r_{1,n} & r_{2,n} & \cdots & r_{n, n} \\ \end{pmatrix} \begin{pmatrix} r_{1,1} & r_{1,2} & \cdots & r_{1, n} \\ 0 & r_{2,2} & \cdots & r_{2, n} \\ \vdots &\vdots & \ddots & \vdots \\ 0 & 0 & \cdots & r_{n, n} \\ \end{pmatrix} \end{align} $$
また、元の行列が正定値の場合は、下三角行列の対角成分が正の実数にでき、かつ、そのような分解が一意に定まる。


参考文献

  1. Cholesky decomposition - Wikipedia. https://ja.wikipedia.org/wiki/QR%E5%88%86%E8%A7%A3(2022年3月29日参照).

正定値実対称行列のコレスキー分解の一意性の証明

雑記 - クッキーの日記


コレスキ―分解を得る方法

参考文献 [1] の例を numpy の関数で得ると以下である。
import numpy as np

A = np.array([
    [  4,  12, -16],
    [ 12,  37, -43],
    [-16, -43,  98]
])
R = np.linalg.cholesky(A)
print(R)
[[ 2.  0.  0.]
 [ 6.  1.  0.]
 [-8.  5.  3.]]

関連記事