Main Content

balance

고유값 정확도 향상을 위한 대각 스케일링(Diagonal Scaling)

구문

[T,B] = balance(A)
[S,P,B] = balance(A)
B = balance(A)
B = balance(A,'noperm')

설명

[T,B] = balance(A)B = T\A*TB가 가능한 가장 가까운 근사치의 행 노름(Row Norm)과 열 노름(Column Norm)을 갖는 유사 변환(Similarity Transformation) T를 반환합니다. T는 반올림 오차가 발생하지 않도록 방지하는 요소가 2의 정수 거듭제곱인 대각 행렬의 치환입니다. A가 대칭 행렬이면 B == A이고 T는 단위 행렬입니다.

[S,P,B] = balance(A)는 스케일링 벡터 S와 치환 벡터 P를 별도로 반환합니다. 변환 T와 균형 행렬(Balanced Matrix) BT(:,P) = diag(S)B(P,P) = diag(1./S)*A*diag(S)A, S, P에서 구할 수 있습니다.

B = balance(A)는 균형 행렬(Balanced Matrix) B만 반환합니다.

B = balance(A,'noperm')은 행과 열을 치환하지 않고 A를 스케일링합니다.

예제

이 예제에서는 기본 원리를 보여줍니다. 행렬 A에는 오른쪽 위에 큰 요소가 있고 왼쪽 아래에 작은 요소가 있습니다. 따라서 대칭과는 거리가 멉니다.

A = [1  100  10000; .01  1  100; .0001  .01  1]
A =
   1.0e+04 *
    0.0001    0.0100    1.0000
    0.0000    0.0001    0.0100
    0.0000    0.0000    0.0001

이 행렬을 밸런싱하면 2의 거듭제곱인 요소들로 이루어진 대각 행렬 TA보다 대칭에 가까운 균형 행렬(Balanced Matrix) B가 만들어집니다.

[T,B] = balance(A)
T =
   1.0e+03 *
    2.0480         0         0
         0    0.0320         0
         0         0    0.0003
B =
    1.0000    1.5625    1.2207
    0.6400    1.0000    0.7813
    0.8192    1.2800    1.0000

고유벡터의 효과를 확인하려면 먼저 이 예제에서 V의 열이 되는 A의 고유벡터를 계산합니다.

[V,E] = eig(A); V
V =
0.9999        -0.9999            -0.9999          
0.0100         0.0059 + 0.0085i   0.0059 - 0.0085i
0.0001         0.0000 - 0.0001i   0.0000 + 0.0001i

참고로, 3개 벡터 모두 첫 번째 성분이 가장 크다는 것을 알 수 있습니다. 이는 V의 조건이 나쁨을 의미합니다. 즉, cond(V)8.7766e+003입니다. 다음으로 B의 고유벡터를 살펴봅니다.

[V,E] = eig(B); V
V =
0.6933        -0.6993            -0.6993          
0.4437         0.2619 + 0.3825i   0.2619 - 0.3825i
0.5679         0.2376 - 0.4896i   0.2376 + 0.4896i

이제 고유벡터가 올바르게 동작하고 cond(V)1.4421가 됩니다. 조건이 나쁜 행렬이 스케일링 행렬에 모아져 cond(T)8192가 됩니다.

이 예제는 크기가 작고 완전한 준특이 행렬(badly scaled)이 아니기 때문에 AB의 계산된 고유값이 반올림 오차 내에서 일치합니다. 따라서 밸런싱이 계산된 결과에 크게 영향을 미치지 않습니다.

제한 사항

밸런싱은 특정 행렬의 속성을 없앨 수 있으므로 신중하게 사용해야 합니다. 행렬에 반올림 오차로 인해 생성된 작은 요소가 있는 경우 밸런싱을 적용하면 해당 요소가 원본 행렬의 다른 요소만큼 커질 수 있습니다.

  • 비대칭 행렬은 조건이 나쁜 고유값을 가질 수 있습니다. 행렬에서 반올림 오차와 같은 작은 섭동이 고유값에서 큰 섭동을 야기할 수 있습니다. 고유벡터 행렬의 조건수는 다음과 같습니다.

    cond(V) = norm(V)*norm(inv(V))

    여기서 다음은

    [V,T] = eig(A)

    행렬 섭동의 크기를 고유값 섭동의 크기와 연결시킵니다. 참고로, A의 조건수 자체는 고유값 문제와 무관합니다.

    밸런싱은 조건이 나쁜 고유벡터 행렬 모두를 대각 스케일링으로 모으기 위한 동작입니다. 일반적으로 밸런싱으로는 비대칭 행렬을 대칭 행렬로 변환할 수 없고 각 행의 노름(Norm)이 대응하는 열의 노름과 일치하도록 시도합니다.

    참고

    MATLAB® 고유값 함수 eig(A)는 그 고유값을 계산하기 전에 A를 자동으로 밸런싱합니다. 밸런싱을 비활성화하려면 eig(A,'nobalance')를 사용합니다.

확장 기능

참고 항목

|