- メインページ
- モジュール
- ネームスペース
- データ構造
- ファイル

- ネームスペース一覧
- ネームスペースメンバ

関数
ネームスペース mist::conjugate_gradient
関数の最小化

共役勾配法（勾配を用いた多変数関数の極小値の探索） [詳細]

## 関数
template<class T >
double | Polak_Ribiere_Polyak (const array2< T > &g0, const array2< T > &g1)
| 共役勾配法(conjugate gradient method)のβをPolak-Ribiere-Polyakの公式で計算する
template<class T >
double | Fletcher_Reeves (const array2< T > &g0, const array2< T > &g1)
| 共役勾配法(conjugate gradient method)のβをFletcher-Reevesの公式で計算する
template<class T , class Allocator , class Functor1 , class Functor2 >
double | minimization (array2< T, Allocator > &p, Functor1 f, Functor2 g, double tolerance, size_t &iterations, const size_t max_iterations=12, const double armijo_rho=0.7, const double armijo_c=0.1, const size_t armijo_max_iteration=10)
| 探索の開始点を指定し，共役勾配法(conjugate gradient method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する
template<class T , class Allocator , class Functor1 , class Functor2 , class T2 >
double | minimization (array2< T, Allocator > &p, Functor1 f, Functor2 g, const T2 &data, double tolerance, size_t &iterations, const size_t max_iterations=12, const double armijo_rho=0.7, const double armijo_c=0.1, const size_t armijo_max_iteration=10)
| 探索の開始点を指定し，共役勾配法(conjugate gradient method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する

## 説明

共役勾配法（勾配を用いた多変数関数の極小値の探索）

## 関数

template<class T >

double mist::conjugate_gradient::Fletcher_Reeves | ( | const array2< T > & | g0,
|  | const array2< T > & | g1
| ) |  |

共役勾配法(conjugate gradient method)のβをFletcher-Reevesの公式で計算する

引数

  [in] | g0 | … 1回前の勾配
  [in] | g1 | … 現在の勾配

戻り値
  β

参照元 minimization().

template<class T , class Allocator , class Functor1 , class Functor2 >

double mist::conjugate_gradient::minimization | ( | array2< T, Allocator > & | p,
|  | Functor1 | f,
|  | Functor2 | g,
|  | double | tolerance,
|  | size_t & | iterations,
|  | const size_t | max_iterations = `12`,
|  | const double | armijo_rho = `0.7`,
|  | const double | armijo_c = `0.1`,
|  | const size_t | armijo_max_iteration = `10`
| ) |  |

探索の開始点を指定し，共役勾配法(conjugate gradient method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する

探索の開始点を指定しその位置での勾配方向に向かった最小化を繰り返し，最小値を探索する

引数

  [in,out] | p | … 探索の開始ベクトル，最小値を与えるベクトル
  [in] | f | … 評価関数
  [in] | g | … 勾配関数
  [in] | tolerance | … 許容誤差
  [out] | iterations | … 実際の反復回数
  [in] | max_iterations | … 最大反復回数
  [in] | armijo_rho | … 減少率（１次元最適化のパラメータ）
  [in] | armijo_c | … 条件数（１次元最適化のパラメータ）
  [in] | armijo_max_iteration | … 最大反復回数（１次元最適化のパラメータ）

戻り値
  極小を与える座標値における評価値

参照先 Fletcher_Reeves(), mist::array2< T, Allocator >::height(), mist::gold::minimization(), と mist::array2< T, Allocator >::width().

template<class T , class Allocator , class Functor1 , class Functor2 , class T2 >

double mist::conjugate_gradient::minimization | ( | array2< T, Allocator > & | p,
|  | Functor1 | f,
|  | Functor2 | g,
|  | const T2 & | data,
|  | double | tolerance,
|  | size_t & | iterations,
|  | const size_t | max_iterations = `12`,
|  | const double | armijo_rho = `0.7`,
|  | const double | armijo_c = `0.1`,
|  | const size_t | armijo_max_iteration = `10`
| ) |  |

探索の開始点を指定し，共役勾配法(conjugate gradient method)によりユーザーが指定した勾配計算関数を用いて最小値を探索する

探索の開始点を指定しその位置での勾配方向に向かった最小化を繰り返し，最小値を探索する

引数

  [in,out] | p | … 探索の開始ベクトル，最小値を与えるベクトル
  [in] | f | … 評価関数
  [in] | g | … 勾配関数
  [in] | data | … 評価関数,勾配関数の計算に必要なデータ
  [in] | tolerance | … 許容誤差
  [out] | iterations | … 実際の反復回数
  [in] | max_iterations | … 最大反復回数
  [in] | armijo_rho | … 減少率（１次元最適化のパラメータ）
  [in] | armijo_c | … 条件数（１次元最適化のパラメータ）
  [in] | armijo_max_iteration | … 最大反復回数（１次元最適化のパラメータ）

戻り値
  極小を与える座標値における評価値

参照先 Fletcher_Reeves(), mist::array2< T, Allocator >::height(), mist::gold::minimization(), と mist::array2< T, Allocator >::width().

template<class T >

double mist::conjugate_gradient::Polak_Ribiere_Polyak | ( | const array2< T > & | g0,
|  | const array2< T > & | g1
| ) |  |

共役勾配法(conjugate gradient method)のβをPolak-Ribiere-Polyakの公式で計算する

βが負になることもありうる

引数

  [in] | g0 | … 1回前の勾配
  [in] | g1 | … 現在の勾配

戻り値
  β