Common Library  0.9.5
tadah_fussy::math_lib::eigen_lib 名前空間

固有値計算関数用名前空間 [詳解]

関数

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, uint32_t 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, uint32_t maxCnt)
 ハウスホルダー行列を使って三重対角行列を作成し、QR 法によって上三角行列へ変換する [詳解]
 
template<class T >
void Householder_DoubleShiftQR (const SymmetricMatrix< T > &mat, SquareMatrix< T > *r, SquareMatrix< T > *q, T e, uint32_t maxCnt)
 原点シフト付きQR変換 [詳解]
 
template<class T , template< class > class MATRIX, class Test >
PowerIter (const MATRIX< T > &a, std::vector< T > *x, Test test, uint32_t maxCnt)
 べき乗法による一番目の固有値・固有ベクトルの抽出 [詳解]
 

詳解

固有値計算関数用名前空間

直交基底への変換や固有値分解を行うための関数を集めたライブラリ。以下の処理方法が利用できる。

  • グラム・シュミットの直交化による列ベクトルの直交基底への変換(GramSchmidt)
  • ヤコビ法による固有値分解(Jacobi)
  • ハウスホルダー法による行列の QR 変換(Householder_QR)
  • ハウスホルダー法による対称行列の QR 変換(Householder_QR)
  • 原点シフト付きハウスホルダー法による対称行列の QR 変換(Householder_DoubleShiftQR)
  • べき乗法による第一固有値とその固有ベクトルの抽出(PowerIter)

関数詳解

◆ GramSchmidt()

template<class T >
SquareMatrix< T >::size_type tadah_fussy::math_lib::eigen_lib::GramSchmidt ( SquareMatrix< T > *  a,
e 
)

グラム・シュミットの直交化によって列ベクトルを直交基底に変換する

  • a へのポインタが NULL だった場合は assert を発行する。
  • しきい値 e が負数だった場合は例外 ExceptionNegativeNumber< T > を投げる。
引数
a変換対象の列ベクトル(行列)へのポインタ
eノルムがゼロであるかどうかを判定するためのしきい値
戻り値
線形独立な基底の数(ランク)

◆ Jacobi()

template<class T >
void tadah_fussy::math_lib::eigen_lib::Jacobi ( SymmetricMatrix< T > *  mat,
SquareMatrix< T > *  eigen,
e,
uint32_t  maxCnt 
)

ヤコビ法による固有値算出

求めた固有値は対角成分として mat に残り、固有ベクトルは eigen に保持される。

  • mat へのポインタが NULL だった場合は assert を発行する。
  • 最大計算回数以内で収束しなかった場合、例外 ExceptionExcessLimit を投げる。
  • しきい値 e が負数だった場合は例外 ExceptionNegativeNumber< T > を投げる。
引数
mat対象の行列へのポインタ
eigen固有ベクトルを求めるための行列へのポインタ(NULLなら無視)
e収束したかを判定するためのしきい値
maxCnt収束しなかった場合の最大計算回数
戻り値
なし

◆ Householder_QR() [1/2]

template<class T >
void tadah_fussy::math_lib::eigen_lib::Householder_QR ( SquareMatrix< T > *  r,
SquareMatrix< T > *  q 
)

ハウスホルダー法による行列 r の QR 変換

ハウスホルダー法を使い、行列 A を A = QR の形式に分解する(qr関数)。 但し、Q は直交行列、R は上三角行列をそれぞれ表す。

  • r へのポインタが NULL だった場合、assert を発行する。
引数
r変換する正方行列(結果は上三角行列になる)
q直交行列を得るための行列(NULLならば無視)
戻り値
なし

◆ Householder_QR() [2/2]

template<class T >
void tadah_fussy::math_lib::eigen_lib::Householder_QR ( const SymmetricMatrix< T > &  mat,
SquareMatrix< T > *  r,
SquareMatrix< T > *  q,
e,
uint32_t  maxCnt 
)

ハウスホルダー行列を使って三重対角行列を作成し、QR 法によって上三角行列へ変換する

ハウスホルダー法を使い、対称行列を QR の形式に相似変換する。

  • r へのポインタが NULL だった場合、assert を発行する。
  • 最大計算回数以内で収束しなかった場合、例外 ExceptionExcessLimit を投げる。
  • しきい値 e が負数だった場合は例外 ExceptionNegativeNumber< T > を投げる。
引数
mat変換対象の対称行列
r変換後の上三角行列を格納する正方行列へのポインタ(対角成分が固有値となる)
q変換後の直交行列を格納する正方行列へのポインタ(NULLならば無視)
e収束判定のためのしきい値
maxCnt収束しなかった場合の最大処理回数
戻り値
なし

◆ Householder_DoubleShiftQR()

template<class T >
void tadah_fussy::math_lib::eigen_lib::Householder_DoubleShiftQR ( const SymmetricMatrix< T > &  mat,
SquareMatrix< T > *  r,
SquareMatrix< T > *  q,
e,
uint32_t  maxCnt 
)

原点シフト付きQR変換

ハウスホルダー法を使い、対称行列を QR の形式に相似変換する。

  • r へのポインタが NULL だった場合、assert を発行する。
  • 最大計算回数以内で収束しなかった場合、例外 ExceptionExcessLimit を投げる。
  • しきい値 e が負数だった場合は例外 ExceptionNegativeNumber< T > を投げる。
引数
mat変換対象の対称行列
r変換後の上三角行列を格納する正方行列へのポインタ(対角成分が固有値となる)
q変換後の直交行列を格納する正方行列へのポインタ(NULLならば無視)
e収束判定のためのしきい値
maxCnt収束しなかった場合の最大処理回数
戻り値
なし

◆ PowerIter()

template<class T , template< class > class MATRIX, class Test >
T tadah_fussy::math_lib::eigen_lib::PowerIter ( const MATRIX< T > &  a,
std::vector< T > *  x,
Test  test,
uint32_t  maxCnt 
)

べき乗法による一番目の固有値・固有ベクトルの抽出

Test 型の引数 test は前回の解からの収束を判定するための関数オブジェクトで、初期化するための init、判定対象の値を収集 するための operator()、収束判定を行うための isConvergent をメンバ関数として持つことを前提とする。 ConvergenceTest_BySum または ConvergenceTest_ByMax を利用することを想定している。

固有ベクトル x は初期値としても利用されるため、要素数が行列のサイズと等しいことを前提としている。 等しくない場合、ExceptionNotEqualNumber 例外を投げる。また、処理終了時には第一固有値(絶対値最大の固有値) に対する固有ベクトルが返されるが、このときユークリッド・ノルムの値は 1 に正規化されている。

  • x へのポインタが NULL だった場合、assert を発行する。
  • a の列数が x のサイズと異なる場合、例外 ExceptionNotEqualLength< MATRIX< T >::size_type > を投げる。
  • 最大計算回数以内で収束しなかった場合、例外 ExceptionExcessLimit を投げる。
引数
a対象の行列への参照
x第一固有ベクトルへのポインタ(渡される要素は初期値として利用される)
test収束判定用関数オブジェクト
maxCnt反復処理の最大回数
戻り値
第一固有値