線性代數 中,科列斯基分解 (英語:Cholesky decomposition 或 Cholesky factorization )是指將一個正定 的埃爾米特矩陣 分解成一個下三角矩陣 與其共軛轉置 之乘積 。這種分解方式在提高代數運算效率、蒙特卡羅方法 等場合中十分有用。實數 矩陣 的科列斯基分解由安德烈-路易·科列斯基 最先發明。實際應用中,科列斯基分解在求解線性方程組 中的效率約兩倍於LU分解 。[ 1]
描述
對正定埃爾米特矩陣
A
{\displaystyle \mathbf {A} }
進行科列斯基分解,即求矩陣
L
{\displaystyle \mathbf {L} }
使下式成立
A
=
L
L
∗
{\displaystyle \mathbf {A} =\mathbf {LL} ^{*}}
其中,
L
{\displaystyle \mathbf {L} }
是一個下三角矩陣且所有對角元素均為正實數 ,
L
∗
{\displaystyle \mathbf {L} ^{*}}
表示
L
{\displaystyle \mathbf {L} }
的共軛轉置。每一個正定埃爾米特矩陣都有一個唯一的科列斯基分解。[ 2]
當矩陣
A
{\displaystyle \mathbf {A} }
是一個半正定的埃爾米特矩陣,若允許
L
{\displaystyle \mathbf {L} }
的對角線元素為零,則
A
{\displaystyle \mathbf {A} }
也存在上述形式的分解。[ 3]
當
A
{\displaystyle \mathbf {A} }
為實數矩陣,則
L
{\displaystyle \mathbf {L} }
也為實數矩陣且科列斯基分解可改寫成
A
=
L
L
T
{\displaystyle \mathbf {A} =\mathbf {LL} ^{\mathbf {T} }}
。[ 4]
當
A
{\displaystyle \mathbf {A} }
是正定矩陣 時,科列斯基分解是唯一的,即只存在一個對角元素均嚴格大於零的下三角矩陣,使
A
=
L
L
∗
{\displaystyle \mathbf {A} =\mathbf {LL} ^{*}}
成立。然而,當
A
{\displaystyle \mathbf {A} }
是半正定時,分解則不一定是唯一的。
定理的逆命題 自然成立:對於某些可逆矩陣
L
{\displaystyle \mathbf {L} }
(下三角矩陣或其他矩陣),如果
A
{\displaystyle \mathbf {A} }
可被寫成
L
L
∗
{\displaystyle \mathbf {LL} ^{*}}
,則
A
{\displaystyle \mathbf {A} }
是一個正定的埃爾米特矩陣。
LDL分解
經典科列斯基分解的一個變形是LDL分解,即
A
=
L
D
L
∗
{\displaystyle \mathbf {A} =\mathbf {LDL} ^{*}}
其中,
L
{\displaystyle \mathbf {L} }
是一个單位下三角矩陣 ,
D
{\displaystyle \mathbf {D} }
是一個對角矩陣 。
該分解與經典科列斯基分解猶有關聯,如下:
A
=
L
D
L
∗
=
L
D
1
2
(
D
1
2
)
∗
L
∗
=
L
D
1
2
(
L
D
1
2
)
∗
{\displaystyle \mathbf {A} =\mathbf {LDL} ^{*}=\mathbf {LD} ^{\frac {1}{2}}(\mathbf {D} ^{\frac {1}{2}})^{*}\mathbf {L} ^{*}=\mathbf {LD} ^{\frac {1}{2}}(\mathbf {LD} ^{\frac {1}{2}})^{*}}
或者,由於
L
{\displaystyle \mathbf {L} }
的對角元素必須為
1
{\displaystyle 1}
,且
L
C
h
o
l
e
s
k
y
{\displaystyle \mathbf {L} ^{Cholesky}}
與
L
{\displaystyle \mathbf {L} }
都是下三角矩陣,故如果已知經典科列斯基分解
L
C
h
o
l
e
s
k
y
{\displaystyle \mathbf {L} ^{Cholesky}}
,則
L
D
L
T
{\displaystyle \mathbf {LDL} ^{T}}
形式可依下式求出,設S 是包含
L
C
h
o
l
e
s
k
y
{\displaystyle \mathbf {L} ^{Cholesky}}
的對角元素的對角矩陣,
D
=
S
2
{\displaystyle \mathbf {D} =\mathbf {S} ^{2}}
L
=
L
C
h
o
l
e
s
k
y
S
−
1
{\displaystyle \mathbf {L} =\mathbf {L} ^{Cholesky}\mathbf {S} ^{-1}}
LDL變形 如果得以有效執行,構造及使用時所需求的空間及計算的複雜性與經典科列斯基分解是相同的,但是可避免提取平方根 。[ 5] 某些不存在科列斯基分解的不定矩陣 ,也可以執行LDL分解,此時矩陣
D
{\displaystyle \mathbf {D} }
中會出現負數 元素。因此人們更傾向於使用LDL分解。對於實數矩陣,該種分解的形式可被改寫成
A
=
L
D
L
T
{\displaystyle \mathbf {A} =\mathbf {LDL} ^{\mathbf {T} }}
此形式通常稱為LDLT分解 (或LDLT 分解 )。它與實對稱矩陣的特徵分解 密切相關,因為對於實對稱矩陣 ,存在特徵分解
A
=
Q
Λ
Q
T
{\displaystyle \mathbf {A} =\mathbf {Q\Lambda Q} ^{\mathbf {T} }}
。
實例
以下乃一個實對稱矩陣 的科列斯基分解︰
(
4
12
−
16
12
37
−
43
−
16
−
43
98
)
=
(
2
0
0
6
1
0
−
8
5
3
)
(
2
6
−
8
0
1
5
0
0
3
)
{\displaystyle {\begin{aligned}\left({\begin{array}{*{3}{r}}4&12&-16\\12&37&-43\\-16&-43&98\\\end{array}}\right)=\left({\begin{array}{*{3}{r}}2&0&0\\6&1&0\\-8&5&3\\\end{array}}\right)\left({\begin{array}{*{3}{r}}2&6&-8\\0&1&5\\0&0&3\\\end{array}}\right)\end{aligned}}}
以下乃其LDLT 分解︰
(
4
12
−
16
12
37
−
43
−
16
−
43
98
)
=
(
1
0
0
3
1
0
−
4
5
1
)
(
4
0
0
0
1
0
0
0
9
)
(
1
3
−
4
0
1
5
0
0
1
)
{\displaystyle {\begin{aligned}\left({\begin{array}{*{3}{r}}4&12&-16\\12&37&-43\\-16&-43&98\\\end{array}}\right)&=\left({\begin{array}{*{3}{r}}1&0&0\\3&1&0\\-4&5&1\\\end{array}}\right)\left({\begin{array}{*{3}{r}}4&0&0\\0&1&0\\0&0&9\\\end{array}}\right)\left({\begin{array}{*{3}{r}}1&3&-4\\0&1&5\\0&0&1\\\end{array}}\right)\end{aligned}}}
應用
科列斯基分解主要被用於線性方程組
A
x
=
b
{\displaystyle \mathbf {Ax} =\mathbf {b} }
的求解。如果A 是對稱正定 的,我們可以先求出
A
=
L
L
T
{\displaystyle \mathbf {A} =\mathbf {LL} ^{\mathbf {T} }}
,隨後借向後替換法 對y 求解
L
y
=
b
{\displaystyle \mathbf {Ly} =\mathbf {b} }
,再以向前替換法 對x 求解
L
T
x
=
y
{\displaystyle \mathbf {L} ^{\mathbf {T} }\mathbf {x} =\mathbf {y} }
即得最終解。
另一種可避免在計算
L
L
T
{\displaystyle \mathbf {LL} ^{\mathbf {T} }}
時需要解平方根的方法就是計算
A
=
L
D
L
T
{\displaystyle \mathbf {A} =\mathbf {LDL} ^{\mathrm {T} }}
,然後對y 求解
L
y
=
b
{\displaystyle \mathbf {Ly} =\mathbf {b} }
,最後求解
D
L
T
x
=
y
{\displaystyle \mathbf {DL} ^{\mathrm {T} }\mathbf {x} =\mathbf {y} }
對於可以被改寫成對稱矩陣的線性方程組,科列斯基分解及其LDL變形是一個較高效率及較高數值穩定性的求解方法。相比之下,其效率幾近為LU分解 的兩倍。[來源請求]
矩陣求逆
若欲對埃爾米特矩陣 直接求逆,可以通過科列斯基分解,類似求解線性方程組一般求出逆矩陣,這需要
n
3
{\displaystyle n^{3}}
次運算(
1
2
n
3
{\displaystyle {\frac {1}{2}}n^{3}}
次乘法運算)。 該方法即便要求逐步計算也非常有效率。
非埃爾米特矩陣
B
{\displaystyle \mathbf {B} }
也可以通過下例性質求逆,因為其中
B
B
∗
{\displaystyle \mathbf {BB} ^{*}}
總是埃爾米特矩陣︰
B
−
1
=
B
∗
(
B
B
∗
)
−
1
{\displaystyle \mathbf {B} ^{-1}=\mathbf {B} ^{*}(\mathbf {BB} ^{*})^{-1}}
計算
有各種各樣的方法用於計算科列斯基分解。 常用的演算法的計算複雜度在一般情況下為
O
(
n
3
)
{\displaystyle O(n^{3})}
。[來源請求]
下面的算法何者較快取決於執行時的具體條件。總體而言,第一個算法會稍慢,因為其以一種不太尋常的方式讀取數據。
科列斯基算法
用於計算矩陣
L
{\displaystyle \mathbf {L} }
的科列斯基算法 ,是以高斯消元法 為基礎而調整得來的。
遞歸算法由
i
:=
1
{\displaystyle i:=1}
開始,令
A
(
1
)
:=
A
{\displaystyle \mathbf {A} ^{(1)}:=\mathbf {A} }
在步骤
i
{\displaystyle i}
,矩陣
A
(
i
)
{\displaystyle A^{(i)}}
的形式如下:
A
(
i
)
=
(
I
i
−
1
0
0
0
a
i
,
i
b
i
∗
0
b
i
B
(
i
)
)
,
{\displaystyle \mathbf {A} ^{(i)}={\begin{pmatrix}\mathbf {I} _{i-1}&0&0\\0&a_{i,i}&\mathbf {b} _{i}^{*}\\0&\mathbf {b} _{i}&\mathbf {B} ^{(i)}\end{pmatrix}},}
其中,
I
i
−
1
{\displaystyle \mathbf {I} _{i-1}}
代表
i
−
1
{\displaystyle i-1}
維的單位矩陣 。
此時定義矩陣
L
i
{\displaystyle \mathbf {L} _{i}}
為
L
i
:=
(
I
i
−
1
0
0
0
a
i
,
i
0
0
1
a
i
,
i
b
i
I
n
−
i
)
,
{\displaystyle \mathbf {L} _{i}:={\begin{pmatrix}\mathbf {I} _{i-1}&0&0\\0&{\sqrt {a_{i,i}}}&0\\0&{\frac {1}{\sqrt {a_{i,i}}}}\mathbf {b} _{i}&\mathbf {I} _{n-i}\end{pmatrix}},}
隨即
A
(
i
)
{\displaystyle \mathbf {A} ^{(i)}}
可以被改寫成
A
(
i
)
=
L
i
A
(
i
+
1
)
L
i
∗
{\displaystyle \mathbf {A} ^{(i)}=\mathbf {L} _{i}\mathbf {A} ^{(i+1)}\mathbf {L} _{i}^{*}}
其中
A
(
i
+
1
)
=
(
I
i
−
1
0
0
0
1
0
0
0
B
(
i
)
−
1
a
i
,
i
b
i
b
i
∗
)
.
{\displaystyle \mathbf {A} ^{(i+1)}={\begin{pmatrix}\mathbf {I} _{i-1}&0&0\\0&1&0\\0&0&\mathbf {B} ^{(i)}-{\frac {1}{a_{i,i}}}\mathbf {b} _{i}\mathbf {b} _{i}^{*}\end{pmatrix}}.}
注意︰ 在此
b
i
b
i
∗
{\displaystyle \mathbf {b} _{i}\mathbf {b} _{i}^{*}}
是一個外積 。
重複此步驟直到
i
{\displaystyle i}
從
1
{\displaystyle 1}
到
n
{\displaystyle n}
。
n
{\displaystyle n}
步之後,我們得到
A
(
n
+
1
)
=
I
{\displaystyle A^{(n+1)}=\mathbf {I} }
。因此,所求的下三角矩陣
L
{\displaystyle L}
為
L
:=
L
1
L
2
…
L
n
.
{\displaystyle \mathbf {L} :=\mathbf {L} _{1}\mathbf {L} _{2}\dots \mathbf {L} _{n}.}
科列斯基-巴那齊耶維茨及科列斯基-克勞特演算法
科列斯基-巴那齊耶維茨演算法以一個 5×5 矩陣執行的讀取順序(白色)及寫入順序(黄色)
寫出等式
A
=
L
L
∗
{\displaystyle \mathbf {A} =\mathbf {LL} ^{*}}
,
A
=
L
L
T
=
(
L
11
0
0
L
21
L
22
0
L
31
L
32
L
33
)
(
L
11
L
21
L
31
0
L
22
L
32
0
0
L
33
)
=
(
L
11
2
(
symmetric
)
L
21
L
11
L
21
2
+
L
22
2
L
31
L
11
L
31
L
21
+
L
32
L
22
L
31
2
+
L
32
2
+
L
33
2
)
{\displaystyle {\begin{aligned}{\mathbf {A=LL^{T}} }&={\begin{pmatrix}\mathbf {L} _{11}&0&0\\\mathbf {L} _{21}&\mathbf {L} _{22}&0\\\mathbf {L} _{31}&\mathbf {L} _{32}&\mathbf {L} _{33}\\\end{pmatrix}}{\begin{pmatrix}\mathbf {L} _{11}&\mathbf {L} _{21}&\mathbf {L} _{31}\\0&\mathbf {L} _{22}&\mathbf {L} _{32}\\0&0&\mathbf {L} _{33}\end{pmatrix}}\\&={\begin{pmatrix}\mathbf {L} _{11}^{2}&&({\text{symmetric}})\\\mathbf {L} _{21}\mathbf {L} _{11}&\mathbf {L} _{21}^{2}+\mathbf {L} _{22}^{2}&\\\mathbf {L} _{31}\mathbf {L} _{11}&\mathbf {L} _{31}\mathbf {L} _{21}+\mathbf {L} _{32}\mathbf {L} _{22}&\mathbf {L} _{31}^{2}+\mathbf {L} _{32}^{2}+\mathbf {L} _{33}^{2}\end{pmatrix}}\end{aligned}}}
則得到矩陣
L
{\displaystyle \mathbf {L} }
的元素的計算公式如下︰
L
j
,
j
=
A
j
,
j
−
∑
k
=
1
j
−
1
L
j
,
k
2
{\displaystyle \mathbf {L} _{j,j}={\sqrt {A_{j,j}-\sum _{k=1}^{j-1}\mathbf {L} _{j,k}^{2}}}}
L
i
,
j
=
1
L
j
,
j
(
A
i
,
j
−
∑
k
=
1
j
−
1
L
i
,
k
L
j
,
k
)
,
for
i
>
j
{\displaystyle \mathbf {L} _{i,j}={\frac {1}{\mathbf {L} _{j,j}}}\left(A_{i,j}-\sum _{k=1}^{j-1}\mathbf {L} _{i,k}\mathbf {L} _{j,k}\right),\qquad {\text{for }}i>j}
只要
A
{\displaystyle \mathbf {A} }
是實數正定矩陣,則平方根 下的表達式恆為正。
對於複埃爾米特矩陣,則適用如下公式:
L
j
,
j
=
A
j
,
j
−
∑
k
=
1
j
−
1
L
j
,
k
L
j
,
k
∗
.
{\displaystyle \mathbf {L} _{j,j}={\sqrt {A_{j,j}-\sum _{k=1}^{j-1}\mathbf {L} _{j,k}\mathbf {L} _{j,k}^{*}}}.}
L
i
,
j
=
1
L
j
,
j
(
A
i
,
j
−
∑
k
=
1
j
−
1
L
i
,
k
L
j
,
k
∗
)
,
for
i
>
j
.
{\displaystyle \mathbf {L} _{i,j}={\frac {1}{\mathbf {L} _{j,j}}}\left(\mathbf {A} _{i,j}-\sum _{k=1}^{j-1}\mathbf {L} _{i,k}\mathbf {L} _{j,k}^{*}\right),\qquad {\text{for }}i>j.}
因此,要計算
L
i
,
j
(
i
≠
j
)
{\displaystyle \mathbf {L} _{i,j}(i\neq j)}
只需利用其的左、上方元素的值。計算通常是以以下其中一種順序進行的。
科列斯基-巴那齊耶維茨演算法 從矩陣L的左上角開始,依行進行計算。
科列斯基-克勞特演算法 從矩陣L的左上角開始,依列進行計算。
若有需要,整個矩陣可以逐個元素計算得出 ,無論使用何種順序讀取。
計算的穩定性
假設我們要求解一個良置 的線性方程組。採用了LU分解 的算法,除非進行某種繞軸旋轉,否則是不穩定的;如果算法進行了繞軸旋轉,則其誤差取決於矩陣的增長因子 ,這個數通常(但非總是)很小。
現在,假設算法適用科列斯基分解。如上所述,算法的效率將會是原來的兩倍。此外,無必要進行繞軸旋轉且誤差總是很小。具體而言,若要求解
A
x
=
b
{\displaystyle \mathbf {Ax} =\mathbf {b} }
,
y
{\displaystyle \mathbf {y} }
表示已計算出的解,然後能解出干擾方程組
(
A
+
E
)
y
=
b
{\displaystyle (\mathbf {A} +\mathbf {E} )\mathbf {y} =\mathbf {b} }
,其中
‖
E
‖
2
≤
c
n
ε
‖
A
‖
2
.
{\displaystyle \|\mathbf {E} \|_{2}\leq c_{n}\varepsilon \|\mathbf {A} \|_{2}.}
在這裡,
‖
‖
2
{\displaystyle \|\quad \|_{2}}
是指矩陣2-範數 ,而
c
n
{\displaystyle c_{n}}
是一個取決於
n
{\displaystyle n}
的小常數,
ε
{\displaystyle \varepsilon }
表示單位捨入 。
值得一提的是,科列斯基分解與平方根的使用有關。如果被分解的矩陣是正定的,那麽只要運算精確 ,矩陣中帶有平方根的元素的平方根下的數字永遠是正數。不幸的是,由於存在捨入誤差 ,這些數字可能為負數 ,並使算法擱淺。然而,此種情況僅當矩陣為病態 時才會出現。一種可解決此問題的方法,是增添一個對角修正矩陣至待分解矩陣,以增加矩陣的正定性。[ 6] 此法雖或將減少分解的準確性,但有在某些情況卻頗有作為;譬如,執行應用於最優化的牛頓法 時,若初期值距最優值較遠,則此時引入對角矩陣可以提高演算法的穩定性。
LDL分解
科列斯基分解的另一種形式——LDL分解的計算方式如下所示,
A
=
L
D
L
T
=
(
1
0
0
L
21
1
0
L
31
L
32
1
)
(
D
1
0
0
0
D
2
0
0
0
D
3
)
(
1
L
21
L
31
0
1
L
32
0
0
1
)
=
(
D
1
(
s
y
m
m
e
t
r
i
c
)
L
21
D
1
L
21
2
D
1
+
D
2
L
31
D
1
L
31
L
21
D
1
+
L
32
D
2
L
31
2
D
1
+
L
32
2
D
2
+
D
3
.
)
{\displaystyle {\begin{aligned}{\mathbf {A=LDL} ^{\mathrm {T} }}&={\begin{pmatrix}1&0&0\\L_{21}&1&0\\L_{31}&L_{32}&1\\\end{pmatrix}}{\begin{pmatrix}D_{1}&0&0\\0&D_{2}&0\\0&0&D_{3}\\\end{pmatrix}}{\begin{pmatrix}1&L_{21}&L_{31}\\0&1&L_{32}\\0&0&1\\\end{pmatrix}}\\&={\begin{pmatrix}D_{1}&&(\mathrm {symmetric} )\\L_{21}D_{1}&L_{21}^{2}D_{1}+D_{2}&\\L_{31}D_{1}&L_{31}L_{21}D_{1}+L_{32}D_{2}&L_{31}^{2}D_{1}+L_{32}^{2}D_{2}+D_{3}.\end{pmatrix}}\end{aligned}}}
如果
A
{\displaystyle \mathbf {A} }
是實數矩陣,下述之遞歸計算式適用於矩陣
D
{\displaystyle \mathbf {D} }
及
L
{\displaystyle \mathbf {L} }
中的所有元素︰
D
j
=
A
j
j
−
∑
k
=
1
j
−
1
L
j
k
2
D
k
{\displaystyle D_{j}=A_{jj}-\sum _{k=1}^{j-1}L_{jk}^{2}D_{k}}
L
i
j
=
1
D
j
(
A
i
j
−
∑
k
=
1
j
−
1
L
i
k
L
j
k
D
k
)
,
for
i
>
j
.
{\displaystyle L_{ij}={\frac {1}{D_{j}}}\left(A_{ij}-\sum _{k=1}^{j-1}L_{ik}L_{jk}D_{k}\right),\qquad {\text{for }}i>j.}
如果
A
{\displaystyle \mathbf {A} }
是複埃爾米特矩陣 ,則矩陣
D
{\displaystyle \mathbf {D} }
及
L
{\displaystyle \mathbf {L} }
的計算適用以下公式:
D
j
=
A
j
j
−
∑
k
=
1
j
−
1
L
j
k
L
j
k
∗
D
k
{\displaystyle D_{j}=A_{jj}-\sum _{k=1}^{j-1}L_{jk}L_{jk}^{*}D_{k}}
L
i
j
=
1
D
j
(
A
i
j
−
∑
k
=
1
j
−
1
L
i
k
L
j
k
∗
D
k
)
,
for
i
>
j
.
{\displaystyle L_{ij}={\frac {1}{D_{j}}}\left(A_{ij}-\sum _{k=1}^{j-1}L_{ik}L_{jk}^{*}D_{k}\right),\qquad {\text{for }}i>j.}
同樣地,若有需求,該讀取順序可以逐一計算矩陣中的每一個元素。
分塊矩陣變形
當
A
{\displaystyle \mathbf {A} }
是一個不定矩陣時,LDL分解 在未經過謹慎的繞軸旋轉的情況下是不穩定的;[ 7] 特別是,分解出的矩陣的元素可能是任意的。一个可取的改進手段是執行矩陣分塊後再執行分解,通常將原矩陣分為包含
2
×
2
{\displaystyle 2\times 2}
的小矩陣的分塊矩陣:[ 8]
A
=
L
D
L
T
=
(
I
0
0
L
21
I
0
L
31
L
32
I
)
(
D
1
0
0
0
D
2
0
0
0
D
3
)
(
I
L
21
T
L
31
T
0
I
L
32
T
0
0
I
)
=
(
D
1
(
s
y
m
m
e
t
r
i
c
)
L
21
D
1
L
21
D
1
L
21
T
+
D
2
L
31
D
1
L
31
D
1
L
21
T
+
L
32
D
2
L
31
D
1
L
31
T
+
L
32
D
2
L
32
T
+
D
3
)
{\displaystyle {\begin{aligned}{\mathbf {A=LDL} ^{\mathrm {T} }}&={\begin{pmatrix}\mathbf {I} &0&0\\\mathbf {L} _{21}&\mathbf {I} &0\\\mathbf {L} _{31}&\mathbf {L} _{32}&\mathbf {I} \\\end{pmatrix}}{\begin{pmatrix}\mathbf {D} _{1}&0&0\\0&\mathbf {D} _{2}&0\\0&0&\mathbf {D} _{3}\\\end{pmatrix}}{\begin{pmatrix}\mathbf {I} &\mathbf {L} _{21}^{\mathrm {T} }&\mathbf {L} _{31}^{\mathrm {T} }\\0&\mathbf {I} &\mathbf {L} _{32}^{\mathrm {T} }\\0&0&\mathbf {I} \\\end{pmatrix}}\\&={\begin{pmatrix}\mathbf {D} _{1}&&(\mathrm {symmetric} )\\\mathbf {L} _{21}\mathbf {D} _{1}&\mathbf {L} _{21}\mathbf {D} _{1}\mathbf {L} _{21}^{\mathrm {T} }+\mathbf {D} _{2}&\\\mathbf {L} _{31}\mathbf {D} _{1}&\mathbf {L} _{31}\mathbf {D} _{1}\mathbf {L} _{21}^{\mathrm {T} }+\mathbf {L} _{32}\mathbf {D} _{2}&\mathbf {L} _{31}\mathbf {D} _{1}\mathbf {L} _{31}^{\mathrm {T} }+\mathbf {L} _{32}\mathbf {D} _{2}\mathbf {L} _{32}^{\mathrm {T} }+\mathbf {D} _{3}\end{pmatrix}}\end{aligned}}}
在此,矩陣中每一個元素都是一個子矩陣。故此,可依照上述遞歸公式類比計算:
D
j
=
A
j
j
−
∑
k
=
1
j
−
1
L
j
k
D
k
L
j
k
T
{\displaystyle \mathbf {D} _{j}=\mathbf {A} _{jj}-\sum _{k=1}^{j-1}\mathbf {L} _{jk}\mathbf {D} _{k}\mathbf {L} _{jk}^{\mathrm {T} }}
L
i
j
=
(
A
i
j
−
∑
k
=
1
j
−
1
L
i
k
D
k
L
j
k
T
)
D
j
−
1
{\displaystyle \mathbf {L} _{ij}=\left(\mathbf {A} _{ij}-\sum _{k=1}^{j-1}\mathbf {L} _{ik}\mathbf {D} _{k}\mathbf {L} _{jk}^{\mathrm {T} }\right)\mathbf {D} _{j}^{-1}}
上述計算涉及矩陣相乘同精確的求逆,故而實踐中不能使用過大的分塊矩陣。
修正 分解
在實踐中經常有修正 科列斯基分解的需求。即,經已計算一些矩陣
A
{\displaystyle \mathbf {A} }
的科列斯基分解
A
=
L
L
∗
{\displaystyle \mathbf {A} =\mathbf {LL} ^{*}}
,然後在
A
{\displaystyle \mathbf {A} }
上稍作修改而產生的矩陣
A
~
{\displaystyle {\tilde {\mathbf {A} }}}
,欲對其進行一個修正的科列斯基分解
A
~
=
L
~
L
~
∗
{\displaystyle {\tilde {\mathbf {A} }}={\tilde {\mathbf {L} }}{\tilde {\mathbf {L} }}^{*}}
。問題是,能否用已知的
A
{\displaystyle \mathbf {A} }
的分解去修正
A
~
{\displaystyle {\tilde {\mathbf {A} }}}
的分解。
秩為1的修正(相加)
如果修正 矩陣
A
~
=
A
+
x
x
∗
{\displaystyle {\tilde {\mathbf {A} }}=\mathbf {A} +\mathbf {xx} ^{*}}
,則其修正的分解被稱為秩為1的修正(相加)。。
以下是一個 MATLAB 語言寫的實現秩為1的修正的小程式:
function [L] = cholupdate ( L,x)
n = length ( x );
for k = 1 : n
r = sqrt ( L ( k , k ) ^2 + x ( k ) ^2 );
c = r / L ( k , k );
s = x ( k ) / L ( k , k );
L ( k , k ) = r ;
L ( k + 1 : n , k ) = ( L ( k + 1 : n , k ) + s * x ( k + 1 : n )) / c ;
x ( k + 1 : n ) = c * x ( k + 1 : n ) - s * L ( k + 1 : n , k );
end
end
秩為1的修正(相減)
如果
A
~
=
A
−
x
x
∗
{\displaystyle {\tilde {\mathbf {A} }}=\mathbf {A} -\mathbf {x} \mathbf {x} ^{*}}
,那麽只有當
A
~
{\displaystyle {\tilde {\mathbf {A} }}}
仍然是正定的時候該方法才適用。
此條件下,上面的代碼也可用於相減的情況,只需要將r
和L(k+1:n,k)
的賦值式的加號替換成减號。
證明半正定矩陣的科列斯基分解唯一
上面的演算法表明,每一個正定矩陣
A
{\displaystyle A}
都有一個科列斯基分解。此結論可以加入一些限制條件 後,推廣到半正定的情況。但該條件 並未被完全建立,例如,它未給出明確的數值演算法以計算科列斯基因子。
如果
A
{\displaystyle A}
是一個
n
×
n
{\displaystyle n\times n}
的半正定矩陣,則序列
{
A
}
=
{
A
+
(
1
/
k
)
I
n
}
{\displaystyle \{\mathbf {A} \}=\{\mathbf {A} +(1/k)\mathbf {I} _{n}\}}
是一個由正定矩陣構成的序列。而且,在算子範數 中
A
k
→
A
{\displaystyle \mathbf {A} _{k}\rightarrow \mathbf {A} }
在正定的情形下,每一個
A
k
{\displaystyle \mathbf {A} _{k}}
都有其科列斯基分解
A
k
=
L
k
L
k
∗
{\displaystyle \mathbf {A} _{k}=\mathbf {L} _{k}\mathbf {L} _{k}^{*}}
。根據算子範數的性質,
‖
L
k
‖
2
≤
‖
L
k
L
k
∗
‖
=
‖
A
k
‖
{\displaystyle \|\mathbf {L} _{k}\|^{2}\leq \|\mathbf {L} _{k}\mathbf {L} _{k}^{*}\|=\|\mathbf {A} _{k}\|}
因而
{
L
k
}
{\displaystyle \{\mathbf {L} _{k}\}}
是算子巴拿赫空间 上的一個有界集 ,因此是相对紧空間 (因為基礎向量空間是有限維的)。因此,它有一個帶有限制
L
{\displaystyle \mathbf {L} }
收斂子序列,也記作
{
L
k
}
{\displaystyle \{\mathbf {L} _{k}\}}
。容易驗證,矩陣
L
{\displaystyle \mathbf {L} }
具有所需的特性,例如,滿足
A
=
L
L
∗
{\displaystyle \mathbf {A} =\mathbf {LL} ^{*}}
以及
L
{\displaystyle \mathbf {L} }
是下三角矩陣且其對角元素非負。對於所有的
x
{\displaystyle x}
和
y
{\displaystyle y}
都有,
⟨
A
x
,
y
⟩
=
⟨
lim
A
k
x
,
y
⟩
=
⟨
lim
L
k
L
k
∗
x
,
y
⟩
=
⟨
L
L
∗
x
,
y
⟩
{\displaystyle \langle \mathbf {A} x,y\rangle =\langle \lim \mathbf {A} _{k}x,y\rangle =\langle \lim \mathbf {L} _{k}\mathbf {L} _{k}^{*}x,y\rangle =\langle \mathbf {L} \mathbf {L} ^{*}x,y\rangle }
因此,
A
=
L
L
∗
{\displaystyle \mathbf {A} =\mathbf {LL} ^{*}}
。因为基礎向量空間是有限維的,所以算子空間的所有拓撲結構都是等價的。故此,範數上
L
k
{\displaystyle \mathbf {L} _{k}}
收斂於
L
{\displaystyle \mathbf {L} }
,意味着,
L
k
{\displaystyle \mathbf {L} _{k}}
的每個元素都獨立地收斂於
L
{\displaystyle \mathbf {L} }
。此同時暗示,由於每個
L
k
{\displaystyle \mathbf {L} _{k}}
都是對角元素非負的下三角矩陣,
L
{\displaystyle \mathbf {L} }
亦如此。
推廣
科列斯基分解可以推廣到元素中包含算子 的矩陣 (稱為算子矩陣)。[來源請求] 令
{
H
n
}
{\displaystyle \{{\mathcal {H}}_{n}\}}
是希爾伯特空間 上的一個序列。考慮如下算子矩陣
A
=
[
A
11
A
12
A
13
A
12
∗
A
22
A
23
A
13
∗
A
23
∗
A
33
⋱
]
{\displaystyle \mathbf {A} ={\begin{bmatrix}\mathbf {A} _{11}&\mathbf {A} _{12}&\mathbf {A} _{13}&\;\\\mathbf {A} _{12}^{*}&\mathbf {A} _{22}&\mathbf {A} _{23}&\;\\\mathbf {A} _{13}^{*}&\mathbf {A} _{23}^{*}&\mathbf {A} _{33}&\;\\\;&\;&\;&\ddots \end{bmatrix}}}
滿足直和
H
=
⊕
n
H
n
,
{\displaystyle {\mathcal {H}}=\oplus _{n}{\mathcal {H}}_{n},}
其中每一個
A
i
j
:
H
j
→
H
i
{\displaystyle \mathbf {A} _{ij}:{\mathcal {H}}_{j}\rightarrow {\mathcal {H}}_{i}}
都是一個有界算子。如果
A
{\displaystyle \mathbf {A} }
是正定或半正定的,即對於有限的
k
{\displaystyle k}
及任意的
h
∈
⊕
n
=
1
k
H
k
,
{\displaystyle h\in \oplus _{n=1}^{k}{\mathcal {H}}_{k},}
都有
⟨
h
,
A
h
⟩
≥
0
{\displaystyle \langle h,\mathbf {A} h\rangle \geq 0}
,則存在一個下三角的算子矩陣
L
{\displaystyle \mathbf {L} }
使得
A
=
L
L
∗
{\displaystyle \mathbf {A} =\mathbf {LL} ^{*}}
。此外也可以把
L
{\displaystyle \mathbf {L} }
的對角元素化為正數。
用程式語言實現
參見
腳註
參考文獻
Dereniowski, Dariusz; Kubale, Marek. 5th International Conference on Parallel Processing and Applied Mathematics (PDF) . Lecture Notes on Computer Science 3019 . Springer-Verlag: 985–992. 2004 [2017-08-30 ] . ISBN 978-3-540-21946-0 . doi:10.1007/978-3-540-24669-5_127 . (原始内容 (PDF) 存档于2011-07-16). .
Golub, Gene H. ; Van Loan, Charles F. Matrix Computations 3rd. Baltimore: Johns Hopkins. 1996. ISBN 978-0-8018-5414-9 .
Horn, Roger A.; Johnson, Charles R. Matrix Analysis. Cambridge University Press. 1985. ISBN 0-521-38632-2 . .
S. J. Julier and J. K. Uhlmann. "A General Method for Approximating Nonlinear Transformations of ProbabilityDistributions".
S. J. Julier and J.K. Uhlmann, "A new extension of the Kalman filter to nonlinear systems," in Proc. AeroSense: 11th Int. Symp. Aerospace/Defence Sensing, Simulation and Controls, 1997, pp. 182–193.
Trefethen, Lloyd N. ; Bau, David. Numerical linear algebra . Philadelphia: Society for Industrial and Applied Mathematics. 1997. ISBN 978-0-89871-361-9 . .
外部連結
科学史
Sur la résolution numérique des systèmes d'équations linéaires , Cholesky's 1910 manuscript, online and analyzed on BibNum (页面存档备份 ,存于互联网档案馆 ) (法文) (英文) [for English, click 'A télécharger']
資訊
電腦代碼
模擬中矩陣的利用
線上計算機