Main Content

cholupdate

촐레스키 분해(Cholesky Factorization)에 대한 랭크 1 업데이트(Rank 1 Update)

구문

R1 = cholupdate(R,x)
R1 = cholupdate(R,x,'+')
R1 = cholupdate(R,x,'-')
[R1,p] = cholupdate(R,x,'-')

설명

R1 = cholupdate(R,x)R = chol(A)A의 촐레스키 분해일 때, A + x*x'의 상부 삼각 촐레스키 인수를 반환합니다. 여기서 x는 적절한 길이의 열 벡터입니다. cholupdateR의 대각 및 상부 삼각만 사용합니다. R의 하부 삼각은 무시됩니다.

R1 = cholupdate(R,x,'+')R1 = cholupdate(R,x)와 동일합니다.

R1 = cholupdate(R,x,'-')A - x*x'의 촐레스키 인수(Cholesky Factor)를 반환합니다. R이 유효한 촐레스키 인수(Cholesky Factor)가 아니거나 다운데이트(Downdate)된 행렬이 양의 정부호가 아니어서 촐레스키 분해(Cholesky Factorization)가 없는 경우 오류 메시지가 보고됩니다.

[R1,p] = cholupdate(R,x,'-')는 오류 메시지를 반환하지 않습니다. p0인 경우 R1A - x*x'의 촐레스키 인수(Cholesky Factor)입니다. p0보다 큰 경우 R1은 원래 A의 촐레스키 인수(Cholesky Factor)입니다. p1이 아닌 경우 다운데이트된 행렬은 양의 정부호가 아니므로 cholupdate가 실패합니다. p2인 경우 R의 상부 삼각이 유효한 촐레스키 인수(Cholesky Factor)가 아니므로 cholupdate가 실패합니다.

예제

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]';

rank(x*x')1이므로 다음을 A에 대한 랭크 1 업데이트라고 합니다.

A + x*x' 
ans =
     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    21

R1 = chol(A + x*x')로 촐레스키 인수를 계산하는 대신에 cholupdate를 사용할 수 있습니다.

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을 빼서 양의 정부호 특성을 없애고 실제로 행렬을 특이 행렬로 만듭니다. 다운데이트(Downdate)된 행렬은 다음과 같습니다.

A - x*x'
ans =
 
     1     1     1     1
     1     2     3     4
     1     3     6    10
     1     4    10    19

cholcholupdate와 비교합니다.

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 Factor)를 계산할 수 있습니다.

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

cholupdate는 비희소 행렬(Full Matrix)에만 적용됩니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

|