이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

행렬이 양의 정부호 대칭 행렬인지 확인하기

choleig를 사용하여 행렬이 양의 정부호 대칭 행렬(모든 고유값이 양수인 대칭 행렬)인지 확인합니다.

방법 1: 촐레스키 분해 시도하기

행렬이 양의 정부호 대칭 행렬인지 확인하는 가장 효율적인 방법은 단순하게 행렬에서 chol을 사용해 보는 것입니다. 행렬 분해가 실패하면 양의 정부호 대칭 행렬이 아닙니다.

A = [1 -1 0; -1 5 0; 0 0 7]
A = 3×3

     1    -1     0
    -1     5     0
     0     0     7

try chol(A)
    disp('Matrix is symmetric positive definite.')
catch ME
    disp('Matrix is not symmetric positive definite')
end
ans = 3×3

    1.0000   -1.0000         0
         0    2.0000         0
         0         0    2.6458

Matrix is symmetric positive definite.

이 방법의 단점은 양의 준정부호 대칭 행렬(고유값이 양수 또는 0일 수 있음) 여부까지 확인하기 위해 확장할 수 없다는 것입니다.

방법 2: 고유값 확인하기

eig를 사용하여 모든 고유값을 계산하고 해당 값을 확인하는 방법은 효율성은 낮지만 양의 준정부호 대칭 행렬인지 확인하는 데도 사용할 수 있으므로 유연성이 높습니다. 하지만 작은 행렬의 경우에는 방법 간에 양의 정부호 대칭 행렬인지 확인하는 데 걸리는 계산 시간의 차이가 크지 않습니다.

d = eig(A)
d = 3×1

    0.7639
    5.2361
    7.0000

isposdef = all(d) > 0
isposdef = logical
   1

이 방법을 확장하여 all(d) >= 0 명령을 사용하면 양의 준정부호 대칭 행렬인지 확인할 수 있습니다.

수치 고려 사항

여기서 설명한 방법들이 동일한 행렬에 대해 서로 다른 결과를 내놓을 수 있습니다. 두 계산 모두 반올림 오차를 포함하기 때문에 각 알고리즘은 A와는 미소하게 다른 행렬의 정부호 여부를 확인하는 셈입니다. 고유값은 정확히는 아주 작은 양수 또는 음수이지만 기계 정밀도 내에서 수치적으로 0일 수 있기 때문에 실제로는 허용오차를 사용하는 것이 더 견고한 비교 방법입니다.

예를 들어 행렬이 eps에 가까운 고유값을 갖는 경우, 고유값이 수치적으로 0으로 간주되기 때문에 행렬이 양의 정부호 대칭 행렬로 분류되지만 비교 표현식 isposdef = all(d > 0)true를 반환합니다.

허용오차를 사용해 비교하도록 다음과 같이 명령을 수정할 수 있습니다.

d = eig(A)
isposdef = all(d) > tol
issemidef = all(d) > -tol

허용오차는 0에 가까운 반지름을 정의하며 반지름 내의 모든 고유값은 0으로 처리됩니다. 대부분의 경우 허용오차는 가장 큰 고유값의 크기를 고려하여 length(d)*eps(max(d))를 선택하는 것이 좋습니다.

참고 항목

|

관련 항목