Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

svd

설명

예제

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

예제

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

예제

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

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

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

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

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

예제

[U,S,V] = svd(A,0)m×n 행렬 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는 4×2이므로, 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 > nm×n 행렬 A의 경우, 효율적 크기의 분해 svd(A,'econ')svd(A,0)U의 처음 n개 열만 계산합니다. 이 경우, U의 열은 직교 상태이고 UUHU=In을 충족하는 m×n 행렬입니다.

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

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

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

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

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

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

확장 기능

참고 항목

| | | | |

도움말 항목

R2006a 이전에 개발됨