/* -*- MaTX -*- * * 【名前】 * 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(), singleftvec(), singrightvec(), maxsing(), minsing() * * 【参考文献】 * [1] Gene H. Golub and Charles F. Van Loan. Matrix Computations. * The Johns Hopkins University Press, 1989 */