Common Library
0.9.5
|
固有値計算関数用名前空間 [詳解]
関数 | |
template<class T > | |
SquareMatrix< T >::size_type | GramSchmidt (SquareMatrix< T > *a, T e) |
グラム・シュミットの直交化によって列ベクトルを直交基底に変換する [詳解] | |
template<class T > | |
void | Jacobi (SymmetricMatrix< T > *mat, SquareMatrix< T > *eigen, T e, unsigned int maxCnt) |
ヤコビ法による固有値算出 [詳解] | |
template<class T > | |
void | Householder_QR (SquareMatrix< T > *r, SquareMatrix< T > *q) |
ハウスホルダー法による行列 r の QR 変換 [詳解] | |
template<class T > | |
void | Householder_QR (const SymmetricMatrix< T > &mat, SquareMatrix< T > *r, SquareMatrix< T > *q, T e, unsigned int maxCnt) |
ハウスホルダー行列を使って三重対角行列を作成し、QR 法によって上三角行列へ変換する [詳解] | |
template<class T > | |
void | Householder_DoubleShiftQR (const SymmetricMatrix< T > &mat, SquareMatrix< T > *r, SquareMatrix< T > *q, T e, unsigned int maxCnt) |
原点シフト付きQR変換 [詳解] | |
template<class T , template< class > class MATRIX, class Test > | |
T | PowerIter (const MATRIX< T > &a, std::vector< T > *x, Test test, unsigned int maxCnt) |
べき乗法による一番目の固有値・固有ベクトルの抽出 [詳解] | |
固有値計算関数用名前空間
直交基底への変換や固有値分解を行うための関数を集めたライブラリ。以下の処理方法が利用できる。
SquareMatrix< T >::size_type EigenLib::GramSchmidt | ( | SquareMatrix< T > * | a, |
T | e | ||
) |
グラム・シュミットの直交化によって列ベクトルを直交基底に変換する
a | 変換対象の列ベクトル(行列)へのポインタ |
e | ノルムがゼロであるかどうかを判定するためのしきい値 |
void EigenLib::Jacobi | ( | SymmetricMatrix< T > * | mat, |
SquareMatrix< T > * | eigen, | ||
T | e, | ||
unsigned int | maxCnt | ||
) |
ヤコビ法による固有値算出
求めた固有値は対角成分として mat に残り、固有ベクトルは eigen に保持される。
mat | 対象の行列へのポインタ |
eigen | 固有ベクトルを求めるための行列へのポインタ(NULLなら無視) |
e | 収束したかを判定するためのしきい値 |
maxCnt | 収束しなかった場合の最大計算回数 |
void EigenLib::Householder_QR | ( | SquareMatrix< T > * | r, |
SquareMatrix< T > * | q | ||
) |
ハウスホルダー法による行列 r の QR 変換
ハウスホルダー法を使い、行列 A を A = QR の形式に分解する(qr関数)。 但し、Q は直交行列、R は上三角行列をそれぞれ表す。
r | 変換する正方行列(結果は上三角行列になる) |
q | 直交行列を得るための行列(NULLならば無視) |
void EigenLib::Householder_QR | ( | const SymmetricMatrix< T > & | mat, |
SquareMatrix< T > * | r, | ||
SquareMatrix< T > * | q, | ||
T | e, | ||
unsigned int | maxCnt | ||
) |
ハウスホルダー行列を使って三重対角行列を作成し、QR 法によって上三角行列へ変換する
ハウスホルダー法を使い、対称行列を QR の形式に相似変換する。
mat | 変換対象の対称行列 |
r | 変換後の上三角行列を格納する正方行列へのポインタ(対角成分が固有値となる) |
q | 変換後の直交行列を格納する正方行列へのポインタ(NULLならば無視) |
e | 収束判定のためのしきい値 |
maxCnt | 収束しなかった場合の最大処理回数 |
void EigenLib::Householder_DoubleShiftQR | ( | const SymmetricMatrix< T > & | mat, |
SquareMatrix< T > * | r, | ||
SquareMatrix< T > * | q, | ||
T | e, | ||
unsigned int | maxCnt | ||
) |
原点シフト付きQR変換
ハウスホルダー法を使い、対称行列を QR の形式に相似変換する。
mat | 変換対象の対称行列 |
r | 変換後の上三角行列を格納する正方行列へのポインタ(対角成分が固有値となる) |
q | 変換後の直交行列を格納する正方行列へのポインタ(NULLならば無視) |
e | 収束判定のためのしきい値 |
maxCnt | 収束しなかった場合の最大処理回数 |
T EigenLib::PowerIter | ( | const MATRIX< T > & | a, |
std::vector< T > * | x, | ||
Test | test, | ||
unsigned int | maxCnt | ||
) |
べき乗法による一番目の固有値・固有ベクトルの抽出
Test 型の引数 test は前回の解からの収束を判定するための関数オブジェクトで、初期化するための init、判定対象の値を収集 するための operator()、収束判定を行うための isConvergent をメンバ関数として持つことを前提とする。 ConvergenceTest_BySum または ConvergenceTest_ByMax を利用することを想定している。
固有ベクトル x は初期値としても利用されるため、要素数が行列のサイズと等しいことを前提としている。 等しくない場合、ExceptionNotEqualNumber 例外を投げる。また、処理終了時には第一固有値(絶対値最大の固有値) に対する固有ベクトルが返されるが、このときユークリッド・ノルムの値は 1 に正規化されている。
a | 対象の行列への参照 |
x | 第一固有ベクトルへのポインタ(渡される要素は初期値として利用される) |
test | 収束判定用関数オブジェクト |
maxCnt | 反復処理の最大回数 |