주요 콘텐츠

특이값 분해

R2026b

특이값 분해는 m×n 행렬 A를 A = 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개의 유니타리 행렬 U 및 V를 반환합니다. 또한 대각선 요소로 특이값을 포함하는 대각 행렬 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]