MATLAB Function Reference |
Syntax
R1 = cholupdate(R,x) R1 = cholupdate(R,x,'+') R1 = cholupdate(R,x,'-') [R1,p] = cholupdate(R,x,'-')
Description
R1 = cholupdate(R,x)
R = chol(A)
為原本對 A
的 Cholesky
分解法,回傳一 A + x*x'
的上三角 Cholesky 因子,x
為適當長度的行向量。cholupdate
僅使用 R
的對角線及上三角部份,下三角部份將被忽略。
R1 = cholupdate(R,x,'+')
等同於 R1 = cholupdate(R,x)
。
R1 = cholupdate(R,x,'-')
回傳 A - x*x'
的 Cholesky 因子。當 R 不是一合理的 Cholesky
因子或當 downdated 矩陣不是正向定義且沒有經 Cholesky factorization,則會印出錯誤訊息。
[R1,p] = cholupdate(R,x,'-')
不會回傳錯誤訊息。若 p
為 0
,R1
為 A - x*x
' 的 Cholesky 因子。若 p
大於 0
,R1
為原本 A
的 Cholesky 因子。若 p
為 1
,cholupdate
會因為 downdated 矩陣不為正向定義而無法運作。若 p
為 2
,cholupdate
會因為 R
的上三角部份不為合理的 Cholesky 因子而無法運作。
Remarks
cholupdate
僅對全矩陣(full matrices)作用。
Example
A = pascal(4) A =
1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 R = chol(A) R =
1 1 1 1 0 1 2 3 0 0 1 3 0 0 0 1 x = [0 0 0 1]';
此稱為行列一更新成 A
既然 rank(x*x')
為 1
:
A + x*x' ans =
1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 21
使用 cholupdate
取代運用 R1 = chol(A + x*x')
計算 Cholesky 因子:
R1 = cholupdate(R,x) R1 =
1.0000 1.0000 1.0000 1.0000 0 1.0000 2.0000 3.0000 0 0 1.0000 3.0000 0 0 0 1.4142
而後藉由對 A
中最後一個元素減去 1 來使其沒有正向定義(positive definiteness)。該
downdated 矩陣為:
A - x*x' ans =
1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 19
R1 = chol(A-x*x') ??? Error using ==> chol Matrix must be positive definite. R1 = cholupdate(R,x,'-') ??? Error using ==> cholupdate Downdated matrix must be positive definite.
然而,從 A
的最後一個元素減去 0.5
產生一正向定義矩陣,我們可使用 cholupdate
計算其 Cholesky 因子:
x = [0 0 0 1/sqrt(2)]'; R1 = cholupdate(R,x,'-') R1 = 1.0000 1.0000 1.0000 1.0000 0 1.0000 2.0000 3.0000 0 0 1.0000 3.0000 0 0 0 0.7071
Algorithm
cholupdate
的演算法為使用 LINPACK 子程序 ZCHUD
及 ZCHDD
。cholupdate
用於計算新的 Cholesky 因子,為一種
的演算法,並用此方法簡易地更新已存在的因子為一種 的演算法。
References
Dongarra, J.J., J.R. Bunch, C.B. Moler, and G.W. Stewart, LINPACK Users' Guide, SIAM, Philadelphia, 1979.
See Also
cholinc | cla |