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

ガウス=ザイデル法に SOR 法を適用した連立方程式の計算 [詳解]

公開メンバ関数

 GaussSeidel_SOR (T w, 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_SOR< T, Test >

ガウス=ザイデル法に SOR 法を適用した連立方程式の計算

緩和係数により収束するスピードを早くすることができる。1 のときは通常のガウス=ザイデル法と等しい。

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

構築子と解体子

◆ GaussSeidel_SOR()

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

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

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

関数詳解

◆ operator()()

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

連立方程式を解く

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

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