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 21R1 = 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 19chol을 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 이전에 개발됨