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

svd

설명

예제

s = svd(A)는 행렬 A특이값을 내림차순으로 반환합니다.

예제

[U,S,V] = svd(A)A = U*S*V'를 충족하는 행렬 A의 특이값 분해를 수행합니다.

예제

[U,S,V] = svd(A,'econ')mxn 행렬 A에 대해 다음과 같이 효율적 크기의 분해를 생성합니다.

  • m > nU의 처음 n개 열만 계산되고, Snxn이 됩니다.

  • m = nsvd(A,'econ')svd(A)와 동일합니다.

  • m < nV의 처음 m개 열만 계산되고, Smxm이 됩니다.

효율적 크기의 분해는 특이값으로 구성된 대각 행렬 S에서 0으로 이루어진 추가 행 또는 열을 제거하며 표현식 A = U*S*V'에서 이러한 0과 곱해질 U 또는 V의 열도 제거합니다. 이러한 0과 열을 제거하면 분해의 정확도에 영향을 미치지 않으면서 실행 시간을 개선하고 필요한 저장 공간을 줄일 수 있습니다.

예제

[U,S,V] = svd(A,0)mxn 행렬 A에 대해 다음과 같이 다른 효율적 크기의 분해를 생성합니다.

  • m > nsvd(A,0)svd(A,'econ')과 동일합니다.

  • m <= nsvd(A,0)svd(A)와 동일합니다.

예제

모두 축소

완전 랭크 행렬의 특이값을 계산합니다.

A = [1 0 1; -1 -2 0; 0 1 -1]
A = 3×3

     1     0     1
    -1    -2     0
     0     1    -1

s = svd(A)
s = 3×1

    2.4605
    1.6996
    0.2391

사각 행렬 A의 특이값 분해를 구합니다.

A = [1 2; 3 4; 5 6; 7 8]
A = 4×2

     1     2
     3     4
     5     6
     7     8

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

   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407

S = 4×2

   14.2691         0
         0    0.6268
         0         0
         0         0

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

기계 정밀도 내에서 관계 A = U*S*V'를 확인합니다.

U*S*V'
ans = 4×2

    1.0000    2.0000
    3.0000    4.0000
    5.0000    6.0000
    7.0000    8.0000

사각 행렬의 전체 분해와 효율적 크기의 분해를 계산합니다.

A = [1 2; 3 4; 5 6; 7 8]
A = 4×2

     1     2
     3     4
     5     6
     7     8

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

   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407

S = 4×2

   14.2691         0
         0    0.6268
         0         0
         0         0

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

[U,S,V] = svd(A,'econ')
U = 4×2

   -0.1525   -0.8226
   -0.3499   -0.4214
   -0.5474   -0.0201
   -0.7448    0.3812

S = 2×2

   14.2691         0
         0    0.6268

V = 2×2

   -0.6414    0.7672
   -0.7672   -0.6414

A는 4x2이므로, svd(A,'econ')은 전체 분해와 비교하여 더 적은 열의 U와 더 적은 행의 S를 반환합니다. S에서 0으로 이루어진 추가 행이 제외되었고 표현식 A = U*S*V'에서 이러한 0과 곱해질 U의 열도 제외되었습니다.

특이값 분해의 결과를 사용하여 행렬의 랭크, 열 공간, 영공간을 확인합니다.

A = [2 0 2; 0 1 0; 0 0 0]
A = 3×3

     2     0     2
     0     1     0
     0     0     0

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

     1     0     0
     0     1     0
     0     0     1

S = 3×3

    2.8284         0         0
         0    1.0000         0
         0         0         0

V = 3×3

    0.7071         0   -0.7071
         0    1.0000         0
    0.7071         0    0.7071

0이 아닌 특이값의 개수를 사용하여 랭크를 계산합니다.

s = diag(S);
rank_A = nnz(s)
rank_A = 2

0이 아닌 특이값에 대응하는 U의 열들을 사용하여 A의 열 공간에 대한 정규 직교 기저를 계산합니다.

column_basis = U(:,logical(s))
column_basis = 3×2

     1     0
     0     1
     0     0

0과 같은 특이값에 대응하는 V의 열들을 사용하여 A의 영공간에 대한 정규 직교 기저를 계산합니다.

null_basis = V(:,~s)
null_basis = 3×1

   -0.7071
         0
    0.7071

함수 rank, orth, null을 사용하면 이러한 수량을 편리하게 계산할 수 있습니다.

입력 인수

모두 축소

입력 행렬입니다. A는 정사각 행렬이나 직사각 행렬일 수 있습니다.

데이터형: single | double
복소수 지원 여부:

출력 인수

모두 축소

특이값으로, 열 벡터로 반환됩니다. 특이값은 음이 아닌 실수로, 내림차순으로 나열됩니다.

좌측 특이 벡터로, 행렬의 열로 반환됩니다.

  • m > nmxn 행렬 A의 경우, 효율적 크기의 분해 svd(A,'econ')svd(A,0)U의 처음 n개 열만 계산합니다. 이 경우, U의 열은 직교 상태이고 UUHU=In을 충족하는 mxn 행렬입니다.

  • 전체 분해의 경우, svd(A)UUUH=UHU=Im을 충족하는 mxm 유니타리 행렬(Unitary Matrix)로 반환합니다. 0이 아닌 특이값에 해당하는 U의 열들이 A의 치역에 대한 정규 직교 기저 벡터 집합을 구성합니다.

컴퓨터와 MATLAB®의 릴리스에 따라 각기 다른 특이 벡터가 생성될 수 있으나, 수치적으로는 다 정확합니다. UV에서 서로 대응하는 열은 부호를 뒤집을 수 있으며, 이렇게 해도 표현식 A = U*S*V'의 값에는 영향을 미치지 않습니다.

특이값으로, 대각 행렬로 반환됩니다. S의 대각선 요소는 내림차순으로 정렬된 음이 아닌 특이값입니다. S의 크기는 다음과 같습니다.

  • mxn 행렬 A의 경우, 효율적 크기의 분해 svd(A,'econ')Smin([m,n])차 정사각 행렬로 반환합니다.

  • 전체 분해의 경우, svd(A)A와 동일한 크기의 S를 반환합니다.

  • m > n이면 svd(A,0)Smin([m,n])차 정사각 행렬로 반환합니다.

  • m < n이면 svd(A,0)A와 동일한 크기의 S를 반환합니다.

우측 특이 벡터로, 행렬의 열로 반환됩니다.

  • m < nmxn 행렬 A의 경우, 효율적 크기의 분해 svd(A,'econ')V의 처음 m개 열만 계산합니다. 이 경우, V의 열은 직교 상태이고 VVHV=Im을 충족하는 nxm 행렬입니다.

  • 전체 분해의 경우, svd(A)VVVH=VHV=In을 충족하는 nxn 유니타리 행렬로 반환합니다. 0이 아닌 특이값에 해당하지 않는 V의 열들이 A의 영공간에 대한 정규 직교 기저 벡터 집합을 구성합니다.

컴퓨터와 MATLAB의 릴리스에 따라 각기 다른 특이 벡터가 생성될 수 있으나, 수치적으로는 다 정확합니다. UV에서 서로 대응하는 열은 부호를 뒤집을 수 있으며, 이렇게 해도 표현식 A = U*S*V'의 값에는 영향을 미치지 않습니다.

확장 기능

참고 항목

| | | |

도움말 항목

R2006a 이전에 개발됨