template<class T>
class MathLib::HC_Operator< T >
山登り法 ( Hill Climbing ) 用多変数関数オブジェクト
利用するには fx と nabla を派生クラスで実装する必要がある。 fx は関数 f(x) の値 ( x は多変量 )、nabla は ∇f = { ∂f / ∂xi } の値を返す関数を表す。 平面上の楕円の方程式の場合、以下のようになる ( エラー処理は省略 )。
double a_, b_;
double x0_, y0_;
:
virtual double fx(
const std::vector< double >& x )
const
{
return( a_ * pow( x[0] - x0_, 2 ) + b_ * pow( x[1] - y0_, 2 ) );
}
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 nabla(const std::vector< T > &x, size_type i) const =0
∇f の値を求める
virtual T fx(const std::vector< T > &x) const =0
f(x) の値を求める