특이값 분해
특이값 분해는 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]