|
|
◆ WZgesvd2()
| Function WZgesvd2 |
( |
Jobu As |
String, |
|
|
JobVt As |
String, |
|
|
M As |
Long, |
|
|
N As |
Long, |
|
|
A As |
Variant |
|
) |
| |
特異値分解 (SVD) (複素行列) (実数部/虚数部分離形式)
- 目的
- WZgesvd2は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^Hを返すので注意せよ.
複素数を表現するために実数部と虚数部を隣り合ったセルに格納する(左が実数部, 右が虚数部). 得られた解も実数部と虚数部が隣り合った別々のセルに出力される.
- 戻り値
- min(M, N)+1×1 (Jobu = "N", Jobvt = "N" の場合)
| 列1 |
| 行1〜min(M, N) | 特異値 (降順) |
| 行min(M, N)+1 | リターンコード |
M+1×2M+1 (Jobu = "A", Jobvt = "N" の場合)
| 列1 | 列2〜2M+1 |
| 行1〜M | 特異値 (降順) (行1〜min(M, N)) | 左ユニタリ行列 U |
| 行M+1 | リターンコード | 0 |
N+1×2N+1 (Jobu = "N", Jobvt = "A" の場合)
| 列1 | 列2〜2N+1 |
| 行1〜N | 特異値 (降順) (行1〜min(M, N)) | 右ユニタリ行列 V の転置 V^H |
| 行N+1 | リターンコード | 0 |
max(M,N)+1×2M+2N+1 (Jobu = "A", Jobvt = "A" の場合)
| 列1 | 列2〜2M+1 | 列2M+2〜2M+2N+1 |
| 行1〜max(M,N) | 特異値 (降順) (行1〜min(M, N)) | 左ユニタリ行列 U (行1〜M) | 右ユニタリ行列 V の転置 V^H (行1〜N) |
| 行max(M,N)+1 | リターンコード | 0 | 0 |
リターンコード.
= 0: 正常終了.
= i > 0: 中間結果の二重対角形の上副対角要素のうちi個が収束しなかった.
- 引数
-
| [in] | Jobu | = "N": 左ユニタリ行列 U を計算しない.
= "A": 左ユニタリ行列 U を計算する. |
| [in] | Jobvt | = "N": 右ユニタリ行列 V の転置 V^H を計算しない.
= "A": 右ユニタリ行列 V の転置 V^H を計算する. |
| [in] | M | 入力行列Aの行数. (M >= 1) |
| [in] | N | 入力行列Aの列数. (N >= 1) |
| [in] | A | (M×2N) M×N 複素行列 A. |
- 出典
- LAPACK
- 使用例
- 行列Aの特異値, 左および右特異ベクトルを求める. ただし,
( 0.20-0.11i -0.93-0.32i 0.81+0.37i )
A = ( -0.80-0.92i -0.29+0.86i 0.64+0.51i )
( 0.71+0.59i -0.15+0.19i 0.20+0.94i )
とする.
|