|
|
◆ WDgesvd()
| Function WDgesvd |
( |
Jobu As |
String, |
|
|
JobVt As |
String, |
|
|
M As |
Long, |
|
|
N As |
Long, |
|
|
A As |
Variant |
|
) |
| |
特異値分解 (SVD)
- 目的
- WDgesvdはM×N実行列Aの特異値分解(SVD), および, 必要により左および/または右特異ベクトルを求める. SVDは次のように表される. ここで, Σはmin(M, N)個の対角要素を除き0のM×N行列, UはM×M直交行列, VはN×N直交行列である. Σの対角要素がAの特異値である. 特異値は非負の実数で, 降順に返される. UおよびVのはじめのmin(M, N)列はAの左および右特異ベクトルである.
本ルーチンではVではなくV^Tを返すので注意せよ.
- 戻り値
- min(M, N)+1×1 (Jobu = "N", Jobvt = "N" の場合)
| 列1 |
| 行1〜min(M, N) | 特異値 (降順) |
| 行min(M, N)+1 | リターンコード |
M+1×M+1 (Jobu = "A", Jobvt = "N" の場合)
| 列1 | 列2〜M+1 |
| 行1〜M | 特異値 (降順) (行1〜min(M, N)) | 左直交行列 U |
| 行M+1 | リターンコード | 0 |
N+1×N+1 (Jobu = "N", Jobvt = "A" の場合)
| 列1 | 列2〜N+1 |
| 行1〜N | 特異値 (降順) (行1〜min(M, N)) | 右直交行列 V の転置 V^T |
| 行N+1 | リターンコード | 0 |
max(M,N)+1×M+N+1 (Jobu = "A", Jobvt = "A" の場合)
| 列1 | 列2〜M+1 | 列M+2〜M+N+1 |
| 行1〜max(M,N) | 特異値 (降順) (行1〜min(M, N)) | 左直交行列 U (行1〜M) | 右直交行列 V の転置 V^T (行1〜N) |
| 行max(M,N)+1 | リターンコード | 0 | 0 |
リターンコード.
= 0: 正常終了.
= i > 0: 中間結果の二重対角形の上副対角要素のうちi個が収束しなかった.
- 引数
-
| [in] | Jobu | = "N": 左直交行列 U を計算しない.
= "A": 左直交行列 U を計算する. |
| [in] | Jobvt | = "N": 右直交行列 V の転置 V^T を計算しない.
= "A": 右直交行列 V の転置 V^T を計算する. |
| [in] | M | 入力行列Aの行数. (M >= 1) |
| [in] | N | 入力行列Aの列数. (N >= 1) |
| [in] | A | (M×N) M×N 行列 A. |
- 出典
- LAPACK
- 使用例
- 行列Aの特異値, 左および右特異ベクトルを求める. ただし,
( 1 6 11 )
( 2 7 12 )
A = ( 3 8 13 )
( 4 9 14 )
( 5 10 15 )
とする.
|