Main Content

특이값 분해

특이값 분해는 m×n 행렬 AA = U*S*V'로 표현합니다. 여기서 S는 대각선 요소로 A의 특이값을 갖는 m×n 대각 행렬입니다. m×m 행렬 U의 열은 대응하는 특이값에 대한 좌측 특이 벡터입니다. n×n 행렬 V의 열은 대응하는 특이값에 대한 우측 특이 벡터입니다. V'V의 에르미트 전치(전치의 켤레 복소수)입니다.

행렬의 특이값 분해를 계산하려면 svd를 사용하십시오. 이 함수를 사용하면 행렬의 특이값을 개별적으로 계산하거나, 하나의 함수 호출에서 특이값과 특이 벡터를 모두 계산할 수도 있습니다. 특이값만 계산하려면 출력 인수 없이 svd를 사용하거나

svd(A)

또는 하나의 출력 인수를 사용하십시오.

S = svd(A)

행렬의 특이값과 특이 벡터를 모두 계산하려면 3개의 출력 인수를 사용하십시오.

[U,S,V] = svd(A)

svd는 특이 벡터를 열로 갖는 2개의 유니타리 행렬 UV를 반환합니다. 또한 대각선 요소로 특이값을 포함하는 대각 행렬 S를 반환합니다. 3개 행렬 모두의 요소는 부동소수점 숫자입니다. 계산의 정확도는 digits의 현재 설정에 의해 결정됩니다.

A(i,j) = 1/(i - j + 1/2)에 의해 정의된 요소로 구성된 n×n 행렬 A를 만듭니다. 이 행렬을 생성하는 가장 확실한 방법은 다음과 같습니다.

n = 3;
for i = 1:n
    for j = 1:n
      A(i,j) = sym(1/(i-j+1/2));
   end
end

n = 3인 경우 행렬은 다음과 같습니다.

A
A =
[   2,  -2, -2/3]
[ 2/3,   2,   -2]
[ 2/5, 2/3,    2]

이 행렬의 특이값을 계산합니다. svd를 직접 사용하면 정확한 기호 결과가 반환됩니다. 이 행렬의 경우에는 결과가 매우 깁니다. 더 짧은 수치 결과를 선호한다면 vpa를 사용하여 A의 요소를 부동소수점 숫자로 변환합니다. 그런 다음 svd를 사용하여 가변 정밀도 연산방식을 사용해 이 행렬의 특이값을 계산합니다.

S = svd(vpa(A))
S =
 3.1387302525015353960741348953506
 3.0107425975027462353291981598225
 1.6053456783345441725883965978052

이제, A의 특이값과 특이 벡터를 계산합니다.

[U,S,V] = svd(A)
U =
[  0.53254331027335338470683368360204,  0.76576895948802052989304092179952,...
                                        0.36054891952096214791189887728353]
[ -0.82525689650849463222502853672224,  0.37514965283965451993171338605042,...
                                        0.42215375485651489522488031917364]
[  0.18801243961043281839917114171742, -0.52236064041897439447429784257224,...
                                        0.83173955292075192178421874331406]
 
S =
[ 3.1387302525015353960741348953506,                                 0,...
                                                                     0]
[                                 0, 3.0107425975027462353291981598225,...
                                                                     0]
[                                 0,                                 0,...
                                     1.6053456783345441725883965978052]
 
V =
[  0.18801243961043281839917114171742,  0.52236064041897439447429784257224,...
                                        0.83173955292075192178421874331406]
[ -0.82525689650849463222502853672224, -0.37514965283965451993171338605042,...
                                        0.42215375485651489522488031917364]
[  0.53254331027335338470683368360204, -0.76576895948802052989304092179952,...
                                        0.36054891952096214791189887728353]