Main Content

gsvd

일반화된 특이값 분해

설명

예제

[U,V,X,C,S] = gsvd(A,B)는 행렬 AB에 대해 일반화된 특이값 분해를 수행하고, 다음과 같이 유니타리 행렬(Unitary Matrix) UV, 행렬 X 및 음이 아닌 대각 행렬 CS를 반환합니다.

A = U*C*X'
B = V*S*X'
C'*C + S'*S = I 

예제

Am×p이고 Bn×p[U,V,X,C,S] = gsvd(A,B,"econ")은 결과로 얻게 되는 UV 행렬이 최대 p개의 열을 가지고 CS가 최대 p개의 행을 가지는 효율적인 크기의 분해를 생성합니다.

[U,V,X,C,S] = gsvd(A,B,0)gsvd(A,B,"econ")과 동일합니다. 이 구문의 사용은 권장되지 않습니다. "econ" 옵션을 대신 사용하십시오.

예제

sigma = gsvd(A,B)는 일반화된 특이값 sqrt(diag(C'*C)./diag(S'*S))의 벡터를 반환합니다. B가 정사각 정칙 행렬인 경우 일반화된 특이값 gsvd(A,B)는 일반 특이값 svd(A/B)와 같지만 역순으로 정렬됩니다. 이들의 역수는 gsvd(B,A)입니다.

예제

모두 축소

두 행렬에 대해 일반화된 특이값 분해를 수행하고 일반화된 특이값도 계산합니다.

5×3 행렬 A와 3×3 행렬 B를 만듭니다.

A = reshape(1:15,5,3)
A = 5×3

     1     6    11
     2     7    12
     3     8    13
     4     9    14
     5    10    15

B = magic(3)
B = 3×3

     8     1     6
     3     5     7
     4     9     2

AB에 대해 일반화된 특이값 분해를 수행합니다. 직교 행렬 UV, 정칙 행렬 X, 대각 행렬 CS 등이 출력값으로 생성됩니다. A는 랭크가 부족하므로 C의 첫 번째 대각선 요소는 0입니다.

[U,V,X,C,S] = gsvd(A,B)
U = 5×5

   -0.1882    0.6457   -0.4279   -0.4268   -0.4271
    0.6897    0.3296   -0.4375    0.2067    0.4261
   -0.6849    0.0135   -0.4470    0.2542    0.5160
    0.0534   -0.3026   -0.4566    0.5787   -0.6019
    0.1300   -0.6187   -0.4661   -0.6128    0.0869

V = 3×3

   -0.7071   -0.6946    0.1325
    0.0000   -0.1874   -0.9823
    0.7071   -0.6946    0.1325

X = 3×3

   -2.8284   -9.3761   -6.9346
    5.6569   -8.3071  -18.3301
   -2.8284   -7.2381  -29.7256

C = 5×3

    0.0000         0         0
         0    0.3155         0
         0         0    0.9807
         0         0         0
         0         0         0

S = 3×3

    1.0000         0         0
         0    0.9489         0
         0         0    0.1957

이제 AB에 대해 효율적인 크기의 분해를 수행합니다. 행렬 UC는 크기가 다르지만, 다른 출력 행렬은 동일합니다.

[U,V,X,C,S] = gsvd(A,B,"econ")
U = 5×3

   -0.3736   -0.6457    0.4279
   -0.0076   -0.3296    0.4375
    0.8617   -0.0135    0.4470
   -0.2063    0.3026    0.4566
   -0.2743    0.6187    0.4661

V = 3×3

   -0.7071    0.6946   -0.1325
    0.0000    0.1874    0.9823
    0.7071    0.6946   -0.1325

X = 3×3

   -2.8284    9.3761    6.9346
    5.6569    8.3071   18.3301
   -2.8284    7.2381   29.7256

C = 3×3

         0         0         0
         0    0.3155         0
         0         0    0.9807

S = 3×3

    1.0000         0         0
         0    0.9489         0
         0         0    0.1957

일반화된 특이값을 계산합니다. 이 경우 특이값은 비율 diag(C)./diag(S)와 같습니다. 이들 값은 svd(A/B)에서 반환된 다음과 같은 일반 특이값을 재정렬(Reordering)한 것입니다.

sigma = gsvd(A,B)
sigma = 3×1

    0.0000
    0.3325
    5.0123

svals = svd(A/B)
svals = 3×1

    5.0123
    0.3325
    0.0000

일반화된 특이값이 경우에 따라 Inf가 될 수 있는 이유를 알아보겠습니다.

3×5 행렬 A와 5×5 행렬 B를 만듭니다.

A = reshape(1:15,3,5)
A = 3×5

     1     4     7    10    13
     2     5     8    11    14
     3     6     9    12    15

B = magic(5)
B = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

AB에 대해 일반화된 특이값 분해를 수행합니다. 직교 행렬 UV, 정칙 행렬 X, 대각 행렬 CS 등이 출력값으로 생성됩니다. 이 경우 C에서 0이 아닌 대각선은 diag(C,2)입니다.

[U,V,X,C,S] = gsvd(A,B)
U = 3×3

    0.4082    0.7178   -0.5639
   -0.8165    0.0109   -0.5772
    0.4082   -0.6961   -0.5906

V = 5×5

   -0.3195   -0.8265   -0.0211   -0.4552   -0.0843
   -0.6218    0.5235    0.1942   -0.5408    0.0956
    0.0078    0.1086    0.1410   -0.0271   -0.9836
    0.6610    0.0195    0.5110   -0.5408    0.0956
    0.2725    0.1750   -0.8251   -0.4552   -0.0843

X = 5×5

  -10.0949    0.5430    0.7052  -30.7287   -4.6958
    2.1067  -13.1846   -7.4097  -28.5003  -11.6858
   14.8016    8.9942   -7.7470  -26.2720  -18.6758
    3.3206    3.6474   14.4515  -24.0436  -25.6657
  -10.1340         0    0.0000  -21.8152  -32.6557

C = 3×5

         0         0    0.0000         0         0
         0         0         0    0.0439         0
         0         0         0         0    0.7432

S = 5×5

    1.0000         0         0         0         0
         0    1.0000         0         0         0
         0         0    1.0000         0         0
         0         0         0    0.9990         0
         0         0         0         0    0.6690

0이 포함된 일반화된 특이값을 구합니다.

sigma = gsvd(A,B)
sigma = 5×1

         0
         0
    0.0000
    0.0439
    1.1109

AB의 역할을 뒤바꾸면 이들 값의 역이 계산되어 Inf 값이 생성됩니다.

sigma2 = gsvd(B,A)
sigma2 = 5×1
1017 ×

    0.0000
    0.0000
    1.7650
       Inf
       Inf

입력 인수

모두 축소

입력 행렬. AB는 열 개수가 같아야 하지만, 행 개수는 다를 수 있습니다.

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

출력 인수

모두 축소

유니타리 행렬 인수로, 행렬로 반환됩니다. UVAB의 열에 대한 기저를 각각 제공하는 직교 열이 있는 행렬입니다.

UV의 크기는 "econ" 옵션의 지정 여부에 따라 달라집니다. Am×p이고 Bn×p이면 다음과 같습니다.

  • 기본적으로 Um×m이고 Vn×n입니다.

  • "econ" 옵션을 지정할 경우, Um×min(m,p)이고 Vn×min(n,p)입니다.

행렬 인수로, 행렬로 반환됩니다. Am×p이고 Bn×p이면 Xp×q입니다. 여기서 q[A; B]의 수치적 랭크입니다.

X의 속성은 norm([A; B]) == norm(X)입니다. U, V, C, S가 행렬 [A; B]에 대한 직교 기저만 나타내기 때문입니다.

대각 행렬 인수로, 행렬로 반환됩니다. S의 0이 아닌 요소는 항상 주대각선에 있습니다. C의 0이 아닌 요소는 대각선 diag(C,max(0,size(C,2)-size(C,1)))에 있습니다. 0이 아닌 값을 가져오려면 명령 sv = max(S,[],1)cv = max(C,[],1)을 사용하십시오. AB의 일반화된 특이값은 비율 cv./sv와 같습니다.

CS의 크기는 "econ" 옵션의 지정 여부에 따라 달라집니다. Am×p이고 Bn×p이면 다음과 같습니다.

  • 기본적으로 Cm×q이고 Sn×q입니다.

  • "econ" 옵션을 지정할 경우, Cmin(m,p)×q이고 Vmin(n,p)×q입니다.

두 경우 모두, q[A; B]의 수치적 랭크입니다.

일반화된 특이값으로, 열 벡터로 반환됩니다. sv = max(S,[],1)cv = max(C,[],1)이면 AB의 일반화된 특이값은 비율 cv./sv와 같습니다.

sigma는 길이가 [A; B]의 수치적 랭크와 같고, 비내림차순입니다.

알고리즘

gsvd 함수로 수행된 일반화된 특이값 분해는 내장 svdqr 함수뿐 아니라 C-S 분해를 사용합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

|