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

◆ zgeev()

void zgeev ( char  jobvl,
char  jobvr,
int  n,
int  lda,
doublecomplex  a[],
doublecomplex  w[],
int  ldvl,
doublecomplex  vl[],
int  ldvr,
doublecomplex  vr[],
doublecomplex  work[],
int  lwork,
double  rwork[],
int *  info 
)

(シンプルドライバ) 固有値・固有ベクトル (複素行列)

目的
本ルーチンは n x n 複素行列 A のすべての固有値, および, 必要により左および/または右固有ベクトルを求める. はじめに行列 A を上ヘッセンベルグ形に変換し, 次にQR法により固有値, および, 必要によりシュール分解を求める. 固有ベクトルはシュール分解より計算される.

A の右固有ベクトル v(j) は次式を満たす.
A * v(j) = lambda(j) * v(j)
ここで, lambda(j) は固有値である.
A の左固有ベクトル u(j) は次式を満たす.
u(j)^H * A = lambda(j) * u(j)^H
ここで, u(j)^H は u(j) の共役転置を表す.

求められた固有ベクトルはユークリッドノルムが 1 で最大成分が実数になるように正規化される.
引数
[in]jobvl= 'N': A の左固有ベクトルを求めない.
= 'V': A の左固有ベクトルを求める.
[in]jobvr= 'N': A の右固有ベクトルを求めない.
= 'V': A の右固有ベクトルを求める.
[in]n行列 A の行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in]lda二次元配列 a[][] の整合寸法. (lda >= max(1, n))
[in,out]a[][]配列 a[la][lda] (la >= n)
[in] n x n 行列 A.
[out] a[][] は上書きされる.
[out]w[]配列 w[lw] (lw >= n)
w[] に求められた固有値が入る.
[in]ldvl二次元配列 vl[][] の整合寸法. (ldvl >= 1 (jobvl = 'N'), ldvl >= n (jobvl = 'V'))
[out]vl[][]配列 vl[lvl][ldvl] (lvl >= n)
jobvl = 'V': 左固有ベクトル u(j) が, 対応する固有値と同順に vl[][] の行に順に格納される (u(j) = vl[][] の j 番目の行).
jobvl = 'N': vl[][] は参照されない.
[in]ldvr二次元配列 vr[][] の整合寸法. (ldvr >= 1 (jobvr = 'N'), ldvr >= n (jobvr = 'V'))
[out]vr[][]配列 vr[lvr][ldvr] (lvr >= n)
jobvr = 'V': 右固有ベクトル v(j) が, 対応する固有値と同順に vr[][] の行に順に格納される (v(j) = vr[][] の j 番目の行).
jobvr = 'N': vr[][] は参照されない.
[out]work[]配列 work[lwork]
作業領域.
info = 0 の場合, work[0] に lwork の最適値を返す.
[in]lwork配列work[]のサイズ. (lwork >= max(1, 2*n))
一般にパフォーマンスをよくするためには lwork を大きくしなければならない.
lwork = -1 の場合, 作業領域サイズの問い合わせとみなし, 最適サイズを求める計算だけを行い, work[0] にその値を返す.
[out]rwork[]配列 rwork[lrwork] (lrwork >= 2*n)
作業領域.
[out]info= 0: 正常終了
= -1: 入力パラメータ jobvl の誤り (jobvl != 'V' および 'N')
= -2: 入力パラメータ jobvr の誤り (jobvr != 'V' および 'N')
= -3: 入力パラメータ n の誤り (n < 0)
= -4: 入力パラメータ lda の誤り (lda < max(1, n))
= -7: 入力パラメータ ldvl の誤り (ldvl が小さすぎる)
= -9: 入力パラメータ ldvr の誤り (ldvr が小さすぎる)
= -12: 入力パラメータ lwork の誤り (lwork が小さすぎる)
= i > 0: QRアルゴリズムが失敗しすべての固有値を求めることはできなかった. 固有ベクトルは計算されなかった. w[] の要素 i〜n-1 には収束した固有値が入る.
出典
LAPACK