Common Library  0.9.5
tadah_fussy::math_lib::solver::GaussSeidel< T, Test > クラステンプレート

ガウス=ザイデル法による連立方程式の計算 [詳解]

公開メンバ関数

 GaussSeidel (T e, uint32_t maxCnt)
 収束判定のしきい値と最大処理回数を指定して構築 [詳解]
 
template<class Ran >
void operator() (const SquareMatrix< T > &a, Ran b)
 連立方程式を解く [詳解]
 

詳解

template<class T, template< class > class Test = convergence_test::BySum>
class tadah_fussy::math_lib::solver::GaussSeidel< T, Test >

ガウス=ザイデル法による連立方程式の計算

テンプレート引数の T は係数や解の型を、Test は収束判定用関数オブジェクト (BySum か ByMax の利用を想定。デフォルトは BySum) をそれぞれ表す。

構築子と解体子

◆ GaussSeidel()

template<class T , template< class > class Test = convergence_test::BySum>
tadah_fussy::math_lib::solver::GaussSeidel< T, Test >::GaussSeidel ( e,
uint32_t  maxCnt 
)
inline

収束判定のしきい値と最大処理回数を指定して構築

引数
e収束判定のしきい値
maxCnt収束しなかった場合の最大処理回数

関数詳解

◆ operator()()

template<class T , template< class > class Test>
template<class Ran >
void tadah_fussy::math_lib::solver::GaussSeidel< T, Test >::operator() ( const SquareMatrix< T > &  a,
Ran  b 
)

連立方程式を解く

  • 計算回数が最大処理回数 maxCnt を超えた場合は例外 ExceptionExcessLimit を投げる。 但し、それまでに得られた近似解は連立方程式の解ベクトル b に返される。
  • 係数行列の対角成分にゼロが含まれる場合、std::runtime_error を投げる。
覚え書き
係数行列と右辺(解ベクトル)の大きさが等しいかチェックしていないことに注意
todo:
対角成分にゼロが含まれる場合、std::runtime_error を投げるが、実際には式の入れ替えで 解ける場合がある。対角成分が大きくなるほど速く収束するため、そのための処理を実装したほうがよい。
引数
a連立方程式の係数行列への参照
b対象の連立方程式の解ベクトルの先頭位置(計算結果の未知数がそのまま返される)
戻り値
なし

このクラス詳解は次のファイルから抽出されました: