Common Library  0.9.5
tadah_fussy::math_lib::solver::HC_Operator< T > クラステンプレートabstract

山登り法 ( Hill Climbing ) 用多変数関数オブジェクト [詳解]

公開メンバ関数

virtual ~HC_Operator ()
 仮想デストラクタ(何もしない)
 
virtual T nabla (const std::vector< T > &x, size_type i) const =0
 ∇f の値を求める [詳解]
 
void assign (const std::vector< T > &x0)
 初期値を代入する [詳解]
 
ft (T t) const
 F(t) = f(x0 + t∇f(x0)) を返す [詳解]
 
operator() (T t) const
 dF(t)/dt = ( ∇f(x0 + t∇f0), ∇f(x0) ) を返す [詳解]
 

非公開メンバ関数

virtual T fx (const std::vector< T > &x) const =0
 f(x) の値を求める [詳解]
 

詳解

template<class T>
class tadah_fussy::math_lib::solver::HC_Operator< T >

山登り法 ( Hill Climbing ) 用多変数関数オブジェクト

利用するには fx と nabla を派生クラスで実装する必要がある。 fx は関数 f(x) の値 ( x は多変量 )、nabla は ∇f = { ∂f / ∂xi } の値を返す関数を表す。 平面上の楕円の方程式の場合、以下のようになる ( エラー処理は省略 )。

double a_, b_; // 扁平率
double x0_, y0_; // 中心の座標
:
// fx : f(x) = a( x - x0 )^2 + b( y - ya )^2 を求める
//
// ( x, y ) = ( x[0], x[1] ) として計算する
virtual double fx( const std::vector< double >& x ) const
{
return( a_ * pow( x[0] - x0_, 2 ) + b_ * pow( x[1] - y0_, 2 ) );
}
// ∇f : ( ∂f/∂x, ∂f/∂y ) を求める
//
// ( x, y ) = ( x[0], x[1] ) として計算する
// i = 0 で ∂f/∂x、i = 1 で ∂f/∂y を返す
virtual double nabla( const std::vector< double >& x, size_t i ) const
{
if ( i == 0 )
return( 2 * a_ * ( x[0] - x0_ ) );
else
return( 2 * b_ * ( x[1] - y0_ ) );
}
virtual T fx(const std::vector< T > &x) const =0
f(x) の値を求める
virtual T nabla(const std::vector< T > &x, size_type i) const =0
∇f の値を求める

関数詳解

◆ fx()

template<class T >
virtual T tadah_fussy::math_lib::solver::HC_Operator< T >::fx ( const std::vector< T > &  x) const
privatepure virtual

f(x) の値を求める

引数
xx の値(多変量)
戻り値
f(x) の値

◆ nabla()

template<class T >
virtual T tadah_fussy::math_lib::solver::HC_Operator< T >::nabla ( const std::vector< T > &  x,
size_type  i 
) const
pure virtual

∇f の値を求める

引数
xx の値(多変量)
ix の何番目のパラメータに対する偏微分を返すかを指定する添字
戻り値
∇f の i 番目の値

◆ assign()

template<class T >
void tadah_fussy::math_lib::solver::HC_Operator< T >::assign ( const std::vector< T > &  x0)
inline

初期値を代入する

引数
x0代入する初期値
戻り値
なし

◆ ft()

template<class T >
T tadah_fussy::math_lib::solver::HC_Operator< T >::ft ( t) const
inline

F(t) = f(x0 + t∇f(x0)) を返す

引数
tt の値
戻り値
F(t) の値

◆ operator()()

template<class T >
T tadah_fussy::math_lib::solver::HC_Operator< T >::operator() ( t) const
inline

dF(t)/dt = ( ∇f(x0 + t∇f0), ∇f(x0) ) を返す

引数
tt の値
戻り値
dF/dt の値

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