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

◆ WZgelsy()

Function WZgelsy ( M As  Long,
N As  Long,
A As  Variant,
B As  Variant,
Optional Nrhs As  Long = 1,
Optional RCond As  Double = 1.0E-15,
Optional Cov As  String = "N" 
)

優決定または劣決定系連立一次方程式 Ax = b の解 (完全直交分解) (複素行列) (Excel複素数形式)

目的
WZgelsyは複素線形最小二乗問題の最小ノルム解を, Aの完全直交分解を使って求める.
|| A * X - B || を最小化する.
AはM×N行列で, ランク落ちしていてもよい.

いくつかの右辺ベクトル b および解ベクトル x を1回の呼び出しで扱うことができる. これらのベクトルは, M×Nrhs右辺行列BおよびN×Nrhs解行列Xの列として格納される.

まず最初に列のピボット選択付きQR分解を求める.
A * P = Q * [ R11 R12 ]
[ 0 R22 ]
R11は最大の主小行列を示し, その推定条件数は1/RCondより小さい. R11の次数(rank)はAの有効ランク数である.

そして, R22は無視してよいと考えられ, R12は右からの直交変換により消え, 次の完全直交分解になる.
A * P = Q * [ T11 0 ] * Z
[ 0 0 ]
これより, 最小ノルム解は次のように求められる.
X = P * Z^H [ T11^(-1)*Q1^H*B ]
[ 0 ]
ここで, Q1はQのはじめのrank列よりなる.

セル中で複素数を表現するためにExcelの複素数形式(例, 2.5+1i)を使用する. 複素数値はComplexワークシート関数を使って入力することができる.
戻り値
M >= N の場合 (N+2 × Nrhs (Cov = "N"), N+2 × Nrhs+1 (Cov = "D"), N+2 × Nrhs+N (Cov = "C"))
列1〜Nrhs列Nrhs+1 (Cov = "D" の場合)列Nrhs+1〜Nrhs+N (Cov = "C" の場合)
行1〜N最小二乗解ベクトル x分散(分散共分散行列の対角要素)分散共分散行列
行N+1ランク数 (列1)00
行N+2リターンコード (列1)00
M < Nの場合 (N+2 × Nrhs)
列1〜Nrhs
行1〜N最小ノルム解ベクトル x
行N+1ランク数 (列1)
行N+2リターンコード (列1)

リターンコード
= 0: 正常終了.
= i > 0: 行列のi番目のピボットがゼロになった.
引数
[in]M行列 A の行数. (M >= 1)
[in]N行列 A の列数. (N >= 1)
[in]A(M×N) M×N係数行列 A. (ランク落ちしていてもよい)
[in]B(M×Nrhs) 右辺行列 B.
[in]Nrhs(省略可)
右辺行列Bの列数. (Nrhs >= 1) (省略時 = 1)
[in]RCond(省略可)
有効ランク数を決めるためのパラメータ. ピボットの選択により行と列の入れ替えを行い 推定条件数 < 1/RCond までの部分を有効ランクとする. (省略時 = 1.0e-15)
[in]Cov(省略可)
= "N": 分散共分散行列を計算しない.
= "D": 分散(分散共分散行列の対角要素)を計算する. (M >= Nの場合)
= "C": 分散共分散行列を計算する. (M >= Nの場合)
(省略時 = "N")
出典
LAPACK
使用例
優決定系連立1次方程式 Ax = B の最小二乗解を求める. また, 分散を求める. ただし,
( -0.82+0.83i 0.18-0.94i -0.18-0.12i )
A = ( -0.76-0.24i 0.57-0.16i -0.08-0.27i )
( 1.90+0.26i -0.98+0.54i 0.21+0.28i )
( 0.50-0.30i -0.31+0.37i 0.22+0.19i )
( 1.7126-0.6648i )
B = ( 0.8697+0.7604i )
( -2.1048-1.6171i )
( -0.9297+0.1252i )
とする.

WZgelsy