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

◆ Ztrsna()

Sub Ztrsna ( Job As  String,
Howmny As  String,
Selct() As  Boolean,
N As  Long,
T() As  Complex,
Vl() As  Complex,
Vr() As  Complex,
S() As  Double,
Sep() As  Double,
Mm As  Long,
M As  Long,
Info As  Long 
)

上三角行列の固有値・固有ベクトルの条件数 (複素行列)

目的
本ルーチンは上三角複素行列 T (あるいは任意の Q*T*Q^H, ただし Q はユニタリ行列) の指定された固有値および/または右固有ベクトルの条件数の逆数を推定する.
引数
[in]Job固有値の条件数(S)あるいは固有ベクトルの条件数(Sep)が必要かどうか指定する.
= "E": 固有値についてのみ求める(S).
= "V": 固有ベクトルについてのみ求める(Sep).
= "B": 固有値と固有ベクトルの両方について求める(S および Sep).
[in]Howmny= "A": すべての固有ペアについて条件数を求める.
= "S": 配列 Selct() により指定された一部の固有ペアについて条件数を求める.
[in,out]Selct()配列 Selct(LSelct - 1) (LSelct >= N)
Howmny = "S" の場合, Selct() は条件数を求める固有値ペアを指定する. j 番目の固有値ペアの条件数を選択するためには Selct(j) を True に設定しなければならない.
Howmny = "A" の場合, Selct() は参照されない.
[in]N行列 T の行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in]T()配列 T(LT1 - 1, LT2 - 1) (LT1 >= N, LT2 >= N)
上三角行列 T.
[in]Vl()配列 Vl(LVl1 - 1, LVl2 - 1) (LVl1 >= N, LVl2 >= MM)
Job = "E" または "B" の場合, Vl() には Howmny および Selct() で指定された固有値ペアに対応する T (あるいは任意の Q*T*Q^H, ただし Q はユニタリ行列) の左固有ベクトルを入れる. Zhsein または Ztrevc が返すように固有ベクトルは Vl() の連続した列に格納されていること.
Job = "V" の場合, Vl() は参照されない.
[in]Vr()配列 Vr(LVr1 - 1, LVr2 - 1) (LVr1 >= N, LVr2 >= MM)
Job = "E" または "B" の場合, Vr() には Howmny および Selct() で指定された固有値ペアに対応する T (あるいは任意の Q*T*Q^H, ただし Q はユニタリ行列) の右固有ベクトルを入れる. Zhsein または Ztrevc が返すように固有ベクトルは Vr() の連続した列に格納されていること.
Job = "V" の場合, Vr() は参照されない.
[out]S()配列 S(LS - 1) (LS >= MM)
Job = "E" または "B" の場合, 指定された固有値の条件数の逆数. 配列の連続した要素に格納される. 従って, S(j), Sep(j), および Vl() と Vr() の j 列はすべて同じ固有値ペアに対応する(しかし, すべての固有値ペアが選択されていない限り, 一般的には j 番目の固有値ペアではない).
Job = "V" の場合, S() は参照されない.
[out]Sep()配列 Sep(LSep - 1) (LSep >= MM)
Job = "V" または "B" の場合, 指定された固有ベクトルの条件数の逆数. 配列の連続した要素に格納される.
Job = "E" の場合, Sep() は参照されない.
[in]MM配列 S() (Job = "E" または "B" の場合) および/または Sep() (Job = "V" または "B" の場合) の要素数. (MM >= M)
[out]M配列 S() および/または Sep() の実際に条件数を格納するために使われた要素数.
Howmny = "A" の場合, M = N と設定される..
[out]Info= 0: 正常終了.
= -1: パラメータ Job の誤り. (Job <> "E", "V" および "B")
= -2: パラメータ Howmny の誤り. (Howmny <> "A", "B" および "S")
= -3: パラメータ Selct() の誤り.
= -4: パラメータ N の誤り. (N < 0)
= -5: パラメータ T() の誤り.
= -6: パラメータ Vl() の誤り.
= -7: パラメータ Vr() の誤り.
= -8: パラメータ S() の誤り.
= -9: パラメータ Sep() の誤り.
= -10: パラメータ MM の誤り. (MM < M)
詳細
固有値 lambda の条件数の逆数は次のように定義される.
S(lambda) = |v^H*u| / (norm(u)*norm(v))
ここで, u および v は T の lambda に対応する右および左固有ベクトルである. v^H は v の共役転置を表す. norm(u) はユークリッドノルムを表す. これらの条件数の逆数は常に 0 (非常に悪条件) と 1 (非常に好条件) の間にある. N = 1 の場合, S(lambda) は 1 と定義される.

固有値 w(i) の計算値の近似誤差限界は次のように与えられる.
eps * norm(T) / S(i)
ここで, eps はマシン・イプシロンである.

lambda に対応する右固有ベクトル u の条件数の逆数は以下のように定義される. 次のように仮定する.
T = ( lambda c )
( 0 T22 )
そうすると条件数の逆数は次のようになる.
Sep( lambda, T22 ) = sigma-min( T22 - lambda*I )
ここで, sigma-min は最小の特異値を表す. 最小の特異値を 1/(T22 - lambda*I) の1-ノルムの推定値の逆数で近似する. N = 1 の場合, Sep(1) は abs(T(1,1)) と定義される.

右固有ベクトル vr(i) の計算値の近似誤差限界は次のように与えられる.
eps * norm(T) / Sep(i)
出典
LAPACK