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
는 적절한 길이의 열 벡터입니다. cholupdate
는 R
의 대각 및 상부 삼각만 사용합니다. 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,'-')
는 오류 메시지를 반환하지 않습니다. p
가 0
인 경우 R1
은 A - x*x'
의 촐레스키 인수(Cholesky Factor)입니다. p
가 0
보다 큰 경우 R1
은 원래 A
의 촐레스키 인수(Cholesky Factor)입니다. p
가 1
이 아닌 경우 다운데이트된 행렬은 양의 정부호가 아니므로 cholupdate
가 실패합니다. p
가 2
인 경우 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
chol
을 cholupdate
와 비교합니다.
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 이전에 개발됨