XLPack 6.1
Excel ワークシート関数 数値計算ライブラリ・リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ WZgesvd()

Function WZgesvd ( Jobu As  String,
JobVt As  String,
M As  Long,
N As  Long,
A As  Variant 
)

特異値分解 (SVD) (複素行列) (Excel複素数形式)

目的
WZgesvdはM×N複素行列Aの特異値分解(SVD), および, 必要により左および/または右特異ベクトルを求める. SVDは次のように表される.
A = U * Σ * V^H
ここで, Σはmin(M, N)個の対角要素を除き0のM×N行列, UはM×Mユニタリ行列, VはN×Nユニタリ行列である. Σの対角要素がAの特異値である. 特異値は非負の実数で, 降順に返される. UおよびVのはじめのmin(M, N)列はAの左および右特異ベクトルである.

本ルーチンではVではなくV^Hを返すので注意せよ.

セル中で複素数を表現するためにExcelの複素数形式(例, 2.5+1i)を使用する. 複素数値はComplexワークシート関数を使って入力することができる.
戻り値
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^H
行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^H (行1〜N)
行max(M,N)+1リターンコード00

リターンコード.
= 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×N) 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 )
とする.

WZgesvd