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

連立方程式・最適化問題の解法用名前空間 [詳解]

データ構造

struct  GaussianElimination
 ガウスの消去法による連立方程式の解法 [詳解]
 
struct  GaussJordanElimination
 ガウス・ジョルダン法による連立方程式の解法 [詳解]
 
struct  LUdecomposition_Doolittle
 LU分解(ドゥーリトル法)による連立方程式の解法 [詳解]
 
struct  LUdecomposition_Crout
 LU分解(クラウト法)による連立方程式の解法 [詳解]
 
class  Jacobi
 ヤコビ法による連立方程式の計算 [詳解]
 
class  GaussSeidel
 ガウス=ザイデル法による連立方程式の計算 [詳解]
 
class  Jacobi_SOR
 ヤコビ法に SOR 法を適用した連立方程式の計算 [詳解]
 
class  GaussSeidel_SOR
 ガウス=ザイデル法に SOR 法を適用した連立方程式の計算 [詳解]
 
class  CGM_LinearEquation
 共役勾配法 ( Conjugate Gradient Method ) による連立方程式の計算 [詳解]
 
class  Verify
 連立方程式を解いた結果が正しいかを検証する [詳解]
 
class  HC_Operator
 山登り法 ( Hill Climbing ) 用多変数関数オブジェクト [詳解]
 
class  CGM_Operator
 共役勾配法 ( Conjugate Gradient Method ) 用多変数関数オブジェクト [詳解]
 

関数

template<class F , class T >
GradientMethod (F f, T x0, T h, T e)
 勾配法 ( Gradient Method ) [詳解]
 
template<class F , class T >
BisectionMethod (F f, T x0, T x1, T e)
 二部法 ( Bisection Method ) [詳解]
 
template<class F , class T >
SecantMethod (F f, T x0, T x1, T e)
 セカント法 ( Secant Method ) [詳解]
 
template<class F , class T >
FalsePositionMethod (F f, T x0, T x1, T e)
 はさみうち法 ( False Position Method ) [詳解]
 
template<class F , class T >
InverseQuadraticInterpolation (F f, T x0, T x2, T e)
 逆二次補間法 ( Inverse Quadratic Interpolation ) [詳解]
 
template<class F , class T >
BrentMethod (F f, T x0, T x2, T e)
 ブレント法 ( Brent Method ) [詳解]
 
template<class F , class DF , class D >
Newton (D y, F f, DF df, D xInit, uint32_t maxCount, D threshold)
 ニュートン-ラフソン法により f(x) = y を満たす x (x0) を求める [詳解]
 
template<class Op , class T >
void HillClimbing (Op op, std::vector< T > *x0, T h, T e)
 山登り法 ( Hill Climbing ) による多変量関数の極値計算 [詳解]
 
template<class Op , class T >
void ConjugateGradientMethod (Op op, std::vector< T > *x0, T h, T e)
 共役勾配法による多変量関数の極値計算 [詳解]
 

詳解

連立方程式・最適化問題の解法用名前空間

関数詳解

◆ GradientMethod()

template<class F , class T >
T tadah_fussy::math_lib::solver::GradientMethod ( f,
x0,
h,
e 
)

勾配法 ( Gradient Method )

テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、ステップ幅がゼロに収束したかのいずれにも利用される。

覚え書き
進む方向は固定していない。f が初期値 x0 から減少方向にあり f(x0) < 0 の場合、 または f が初期値 x0 から増加方向にあり f(x0) > 0 の場合、h < 0 とする必要があることに注意。 h > 0 の状態から符号を変換するか判定を行う場合は、以下のようにすればよい。
// 逆に進む場合は h の符号を反転する
if ( ( f( x0 ) > f( x0 + e ) && f( x0 ) < 0 ) ||
( f( x0 ) < f( x0 + e ) && f( x0 ) > 0 ) )
h = -h;
引数
f関数 f(x)
x0x の初期値
hステップ幅
e収束判定値

◆ BisectionMethod()

template<class F , class T >
T tadah_fussy::math_lib::solver::BisectionMethod ( f,
x0,
x1,
e 
)

二部法 ( Bisection Method )

テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、x0, x1 が充分近くなったかのいずれにも利用される。 x0, x1 の間に解があることを想定している。

引数
f関数 f(x)
x0,x1解のある範囲
e収束判定値

◆ SecantMethod()

template<class F , class T >
T tadah_fussy::math_lib::solver::SecantMethod ( f,
x0,
x1,
e 
)

セカント法 ( Secant Method )

テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したかに利用される。

引数
f関数 f(x)
x0x の初期値
x1直線を求めるためのもう一つの点
e収束判定値

◆ FalsePositionMethod()

template<class F , class T >
T tadah_fussy::math_lib::solver::FalsePositionMethod ( f,
x0,
x1,
e 
)

はさみうち法 ( False Position Method )

テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、x0, x1 が充分近くなったかのいずれにも利用される。 x0, x1 の間に解があることを想定している。

引数
f関数 f(x)
x0,x1解のある範囲
e収束判定値

◆ InverseQuadraticInterpolation()

template<class F , class T >
T tadah_fussy::math_lib::solver::InverseQuadraticInterpolation ( f,
x0,
x2,
e 
)

逆二次補間法 ( Inverse Quadratic Interpolation )

テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したかに利用される。

引数
f関数 f(x)
x0,x2二次関数を求めるときに利用する二点
e収束判定値

◆ BrentMethod()

template<class F , class T >
T tadah_fussy::math_lib::solver::BrentMethod ( f,
x0,
x2,
e 
)

ブレント法 ( Brent Method )

テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、x0, x2 が充分近くなったかのいずれにも利用される。

引数
f関数 f(x)
x0,x2二次関数または直線を求めるときに利用する二点
e収束判定値

◆ Newton()

template<class F , class DF , class D >
D tadah_fussy::math_lib::solver::Newton ( y,
f,
DF  df,
xInit,
uint32_t  maxCount,
threshold 
)

ニュートン-ラフソン法により f(x) = y を満たす x (x0) を求める

テンプレート引数の F は関数 f(x)、DF はその導関数 f'(x) の型を表す。 また、D は x の値の型を表す。D は浮動小数点数の型であることを前提とする。

引数
yy ( = f(x0) ) の値
f関数 f(x)
dff(x) の導関数 f'(x)
xInitx の初期値
maxCount処理を行う最大回数
threshold収束を判断するしきい値。| [ f(x) - f(x0) ] / f'(x) | がこの値より小さくなれば処理を終了する。
戻り値
f(x) = yとなる x の値(計算に失敗した場合は NaN を返す)

◆ HillClimbing()

template<class Op , class T >
void tadah_fussy::math_lib::solver::HillClimbing ( Op  op,
std::vector< T > *  x0,
h,
e 
)

山登り法 ( Hill Climbing ) による多変量関数の極値計算

テンプレート引数の Op は多変量関数オブジェクト HC_Operator の派生型であることを想定

引数
op関数 f(x)
x0初期値(結果をそのまま返す)
hステップ幅
e収束判定値
戻り値
なし

◆ ConjugateGradientMethod()

template<class Op , class T >
void tadah_fussy::math_lib::solver::ConjugateGradientMethod ( Op  op,
std::vector< T > *  x0,
h,
e 
)

共役勾配法による多変量関数の極値計算

テンプレート引数の Op は多変量関数オブジェクト CGM_Operator の派生型であることを想定

引数
op関数 f(x)
x0初期値(結果をそのまま返す)
hステップ幅
e収束判定値
戻り値
なし