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

gsvd

일반화된 특이값 분해

설명

[U,V,X,C,S] = gsvd(A,B)는 다음과 같이 유니타리 행렬(Unitary Matrix) UV, (일반적으로) 정사각 행렬 X 및 음이 아닌 대각 행렬 CS를 반환합니다.

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

AB는 열 개수가 같아야 하지만, 행 개수는 다를 수 있습니다. Amxp이고 Bnxp 행렬인 경우, Umxm, Vnxn, Xpxq, Cmxq, Snxq 행렬입니다. 여기서 q = min(m+n,p)입니다.

S의 0이 아닌 요소는 항상 주대각선에 있습니다. C의 0이 아닌 요소는 대각선 diag(C,max(0,q-m))에 있습니다. m >= q인 경우 이는 C의 주대각선입니다.

Amxp이고 Bnxp[U,V,X,C,S] = gsvd(A,B,0)은 결과로 얻게 되는 UV가 최대 p개의 열을 가지고 CS가 최대 p개의 행을 가지는 "효율적 크기의" 분해를 수행합니다. m >= p이고 n >= p인 경우에 한해 일반화된 특이값은 diag(C)./diag(S)입니다.

Amxp이고 Bnxp 행렬인 경우, Umxmin(q,m), Vnxmin(q,n), Xpxq, Cmin(q,m)xq, Smin(q,n)xq 행렬입니다. 여기서 q = min(m+n,p)입니다.

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

벡터 sigma는 길이가 q이고 비내림차순입니다.

예제

예제 1

행렬에서 행의 개수가 적어도 열의 개수보다 많습니다.

A = reshape(1:15,5,3)
B = magic(3)
A =
         1     6    11
         2     7    12
         3     8    13
         4     9    14
         5    10    15
B =
         8     1     6
         3     5     7
         4     9     2

다음 명령문은

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

5x5 직교 행렬 U, 3x3 직교 행렬 V, 3x3 정칙 행렬 X를 생성합니다.

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

C =
        0.0000         0         0
             0    0.3155         0
             0         0    0.9807
             0         0         0
             0         0         0
S =
        1.0000         0         0
             0    0.9489         0
             0         0    0.1957

A는 랭크가 부족하므로 C의 첫 번째 대각선 요소는 0입니다.

다음 효율적 크기의 분해는

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

5x3 행렬 U와 3x3 행렬 C를 생성합니다.

U =
        0.5700   -0.6457   -0.4279
       -0.7455   -0.3296   -0.4375
       -0.1702   -0.0135   -0.4470
        0.2966    0.3026   -0.4566
        0.0490    0.6187   -0.4661

C =
        0.0000         0         0
             0    0.3155         0
             0         0    0.9807

다른 세 개의 행렬 V, X, S는 전체 분해를 통해 얻은 행렬과 동일합니다.

일반화된 특이값은 CS의 대각선 요소의 비율입니다.

sigma = gsvd(A,B)
sigma =
        0.0000
        0.3325
        5.0123

이들 값은 다음과 같은 일반 특이값을 재정렬(Reordering)한 것입니다.

svd(A/B)
ans =
        5.0123
        0.3325
        0.0000

예제 2

행렬에서 열의 개수가 적어도 행의 개수보다 많습니다.

A = reshape(1:15,3,5)
B = magic(5)
A =

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

B =

    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

다음 명령문은

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

3x3 직교 행렬 U, 5x5 직교 행렬 V, 5x5 정칙 행렬 X를 생성하며, 다음과 같습니다.

C =

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

S =

    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

이 경우 C에서 0이 아닌 대각선은 diag(C,2)입니다. 일반화된 특이값은 세 개의 0을 포함합니다.

sigma = gsvd(A,B)
sigma =

         0
         0
    0.0000
    0.0439
    1.1109

AB의 역할을 뒤바꾸면 이들 값이 역수가 되어 2개의 무한대 값이 생성됩니다.

gsvd(B,A)
ans =

   1.0e+16 *

    0.0000
    0.0000
    8.8252
       Inf
       Inf

  • gsvd의 이러한 식에서 A 또는 B의 개별 랭크에 대한 가정은 없습니다. 행렬 X는 행렬 [A;B]가 완전 랭크를 가진 경우에만 완전 랭크를 가집니다. 사실상 svd(X)cond(X)svd([A;B])cond([A;B])와 동일합니다. G. Golub 및 C. Van Loan [1]과 같은 다른 식은 null(A)null(B)가 중복되지 않고 inv(X) 또는 inv(X')X를 대체할 것을 요구합니다.

    하지만 참고로, null(A)null(B)가 중복되는 경우에는 CS의 0이 아닌 요소가 고유하게 결정되지 않습니다.

알고리즘

일반화된 특이값 분해는 내장 svdqr 함수뿐만 아니라 [1]에 설명된 C-S 분해를 사용합니다. C-S 분해는 gsvd 프로그램 파일의 로컬 함수에 구현되어 있습니다.

참고 문헌

[1] Golub, Gene H. and Charles Van Loan, Matrix Computations, Third Edition, Johns Hopkins University Press, Baltimore, 1996

참고 항목

|

R2006a 이전에 개발됨