next up previous contents
Next: switch Up: リファレンスマニュアル Previous: sum_row

  
svd

【目的】
svd - 特異値分解
【形式】
{U,D,V} = svd(A)
   Matrix U,D,V;
   Matrix A;
【詳細】
svd(A)は,行列 A の特異値分解を行う。A は,正方行列でも非正方行列 でもよい。{U,D,V} = svd(A) は,行列 A と同じ大きさで,負でない実数 を対角成分にもつ行列 D ,A = U * D * V# を満たす直交行列(ユニタリ 行列) U と V を求める。D の対角には特異値が降順に並ぶ。
【算法】
文献 1 の算法を使う。
【注意】
繰り返し計算で特異値が求まらない場合は,次のメッセージが表示される。

Solution will not converge

【例題】
>> A = [[1 2 3][4 5 6]];
>> {U, D, V} = svd(A);
>> print U, D, V
=== [U] : (  2,  2) ===
           (  1)           (  2)
(  1) -3.86317703E-01 -9.22365780E-01
(  2) -9.22365780E-01  3.86317703E-01
=== [D] : (  2,  3) ===
           (  1)           (  2)           (  3)     
(  1)  9.50803200E+00  0.00000000E+00  0.00000000E+00
(  2)  0.00000000E+00  7.72869636E-01  0.00000000E+00
=== [V] : (  3,  3) ===
           (  1)           (  2)           (  3)     
(  1) -4.28667134E-01  8.05963909E-01  4.08248290E-01
(  2) -5.66306919E-01  1.12382414E-01 -8.16496581E-01
(  3) -7.03946704E-01 -5.81199080E-01  4.08248290E-01
【参照】
singval(2.214), singleftvec(2.212), singrightvec(2.213), maxsing(2.127), minsing(2.138)
【文献】
1.
Gene H. Golub and Charles F. Van Loan. Matrix Computations. The Johns Hopkins University Press, 1989


Masanobu KOGA 平成11年10月2日