Common Library  0.9.5
MathLib 名前空間

数学関数用名前空間 [詳解]

データ構造

struct  Integ_Midpoint
 中点則 ( Midpoint Rule ) による定積分計算用クラス [詳解]
 
struct  Integ_Trapezoidal
 台形則 ( Trapezoidal Rule ) による定積分計算用クラス [詳解]
 
struct  Integ_Simpson
 シンプソン則 ( Composite Simpson's Rule ) による定積分計算用クラス [詳解]
 
struct  Integ_Simpson38
 シンプソンの 3/8 則 ( Simpson's 3/8 Rule ) による定積分計算用クラス [詳解]
 
struct  Integ_Boole
 ブール則 ( Boole's Rule ) による定積分計算用クラス [詳解]
 
class  HC_Operator
 山登り法 ( Hill Climbing ) 用多変数関数オブジェクト [詳解]
 
class  CGM_Operator
 共役勾配法 ( Conjugate Gradient Method ) 用多変数関数オブジェクト [詳解]
 

関数

template<class MATRIX , class Solver >
void InverseMatrix (const MATRIX &mat, SquareMatrix< typename MATRIX::value_type > *inv, Solver solver)
 逆行列を求める [詳解]
 
template<class T , class F , class Op >
Integral (Op op, F f, T a, T b, unsigned int n)
 区分求積法による積分値の計算 [詳解]
 
template<class U >
Pow (const U &t, const U &n)
 t の n 乗を計算する関数 [詳解]
 
template<class U >
SquareRoot (const U &c)
 c の平方根の近似値を求める [詳解]
 
template<class U >
PowerRoot (const U &c, const U &e)
 c の e 乗根の近似値を求める [詳解]
 
template<class U >
ModularPower (const U &a, U k, const U &n)
 繰り返し自乗法を使った法 n のべき乗計算( a の k 乗を n で割った余りを求める ) [詳解]
 
template<class U >
GCD (U a, U b)
 ユークリッドの互除法を使った最大公約数の計算 [詳解]
 
template<class U >
int Jacobi (U a, U p)
 ヤコビ記号を求める [詳解]
 
template<class T >
Round (T x)
 小数点以下を四捨五入して整数にする関数 [詳解]
 
template<class T >
Gamma (T x)
 ガンマ関数 Γ( x ) を計算する関数 [詳解]
 
template<class T >
Erf (T x)
 誤差関数 ( 2 / √π )∫{0→x} exp(-t*t) dt を求める [詳解]
 
template<class T >
Pi ()
 円周率を返す関数 [詳解]
 
template<class Res , class I >
Res AccuratePermutation (I n, I r)
 順列 ( n 個の要素から r 個を並べる場合の数 ) の計算 [詳解]
 
template<class T >
Permutation (T n, T r)
 順列 ( n 個の要素から r 個を並べる場合の数 ) の計算 [詳解]
 
template<class Res , class In >
Res AccurateMultiCoef (In s, In e)
 m 個のグループからそれぞれ k[1] 〜 k[m] 個ずつ合計 n 個並べる場合の数(多項係数)を求める [詳解]
 
template<class Res , class In >
Res MultiCoef (In s, In e)
 m 個のグループからそれぞれ k[1] 〜 k[m] 個ずつ合計 n 個並べる場合の数(多項係数)を求める [詳解]
 
template<class Res , class T >
Res AccurateCombination (T n, T r)
 組み合わせ ( n 個の要素から r 個を選ぶ場合の数 ) の計算 [詳解]
 
template<class D , class I >
BinCoef (D a, I r)
 一般の二項係数の計算 [詳解]
 
template<class Res , class I >
Res AccurateBernoulliNum (I n)
 ベルヌーイ数 Bn を求める [詳解]
 
template<class Res , class I >
Res BernoulliNum (I n)
 ベルヌーイ数 Bn を求める [詳解]
 
template<class F , class T >
DiffMethod_Forward< F, T > Create_DiffMethod_Forward (F f, T h)
 前進差分による導関数計算用関数オブジェクト DiffMethod_Forward を生成する [詳解]
 
template<class F , class T >
DiffMethod_Backward< F, T > Create_DiffMethod_Backward (F f, T h)
 後退差分による導関数計算用関数オブジェクト DiffMethod_Backward を生成する [詳解]
 
template<class F , class T >
DiffMethod_Central< F, T > Create_DiffMethod_Central (F f, T h)
 中心差分による導関数計算用関数オブジェクト DiffMethod_Central を生成する [詳解]
 
template<class F , class DF , class D >
Newton (D y, F f, DF df, D xInit, unsigned int maxCount, D threshold)
 ニュートン-ラフソン法により f(x) = y を満たす x (x0) を求める [詳解]
 
template<class Op >
AddBinder< Op > OpBind (Op op)
 処理用単項関数から AddBinder 関数オブジェクトを生成する [詳解]
 
template<class Res , class UnOp , class BinOp >
OpBinder< Res, UnOp, BinOp > OpBind (UnOp unOp, BinOp binOp)
 処理用単項関数と二項関数から OpBinder 関数オブジェクトを生成する [詳解]
 
template<class Res , class In >
Res Sum (In s, In e)
 データ列の s から e の直前までの範囲の総和を求める [詳解]
 
template<class Res , class In , class SUM_Op >
Res Sum (In s, In e, SUM_Op sumOp)
 データ列の s から e の直前までの範囲の総和を求める [詳解]
 
template<class Res , class Container >
Res SumAll (const Container &c)
 全データの総和を求める [詳解]
 
template<class Res , class Container , class SUM_Op >
Res SumAll (const Container &c, SUM_Op sumOp)
 全データの総和を求める [詳解]
 
template<class In >
bool Normalize (In s, In e)
 データ列の s から e の直前までの範囲を正規化する [詳解]
 
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 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)
 共役勾配法による多変量関数の極値計算 [詳解]
 

詳解

数学関数用名前空間

関数詳解

◆ InverseMatrix()

template<class MATRIX , class Solver >
void MathLib::InverseMatrix ( const MATRIX &  mat,
SquareMatrix< typename MATRIX::value_type > *  inv,
Solver  solver 
)

逆行列を求める

内部で連立方程式を解いて逆行列を求めている。連立方程式の解法は選択が可能。 例えば、LES_GaussianElimination を利用する場合は次のように記述する。

void InverseMatrix(const MATRIX &mat, SquareMatrix< typename MATRIX::value_type > *inv, Solver solver)
逆行列を求める
Definition: equation_inline.h:663
ガウスの消去法による連立方程式の解法
Definition: equation.h:29
  • 連立方程式の計算処理の過程で例外 std::runtime_error が投げられる場合がある
覚え書き
mat が正則行列でない場合、理論上は処理途中で 例外 std::runtime_error が投げられる。 しかし、誤差により処理が継続される場合もあり、正しい結果が得られない可能性があることに注意。
引数
mat対象の行列
inv求めた逆行列を書き込む正方行列へのポインタ
solver連立方程式計算用ソルバ
戻り値
なし

◆ Integral()

template<class T , class F , class Op >
T MathLib::Integral ( Op  op,
f,
a,
b,
unsigned int  n 
)

区分求積法による積分値の計算

計算手法 ( 中点則・台形則など ) は引数 op にて指定する。以下の計算手法が現在利用できる。

積分範囲の大小関係が逆転している ( a > b の ) 場合、積分値の符号が逆転することに注意。

  • 分割数 n がゼロの場合、例外 ExceptionNotPositiveNumber< unsigned int > を投げる。
引数
op積分値を計算する手法
f積分値を計算する対象の関数
a,b積分範囲
n分割数 ( 大きいほど精度が上がるが、処理時間は長くなる )

◆ Pow()

template<class U >
U MathLib::Pow ( const U &  t,
const U &  n 
)

t の n 乗を計算する関数

テンプレート引数の U は、乗法・除法・減算・剰余・等号演算子が使える型である必要がある。 剰余演算子を使うため、整数型であることを前提としている。

0 の 0 乗は 0 ではなく 1 を返す。

  • べき数が負数の場合は例外 ExceptionNegativeNumber< U > を投げる。
引数
tべき乗される数
nべき数
戻り値
計算結果

◆ SquareRoot()

template<class U >
U MathLib::SquareRoot ( const U &  c)

c の平方根の近似値を求める

ニュートン-ラフソン法を利用した平方根算出ルーチン。 c は符号なし整数であることを前提とし、√c を超えない最大数を返す。

todo:
std::sqrt と同等の機能であるため将来は廃止する予定。
引数
c平方根を求める対象の数
戻り値
c の平方根

◆ PowerRoot()

template<class U >
U MathLib::PowerRoot ( const U &  c,
const U &  e 
)

c の e 乗根の近似値を求める

ニュートン-ラフソン法を利用したべき乗根算出ルーチン。 c は符号なし整数であることを前提とし、c の e 乗根を超えない最大数を返す。 但し、e が U() の場合は U() を返す。

引数
cべき乗根を求める対象の数
eべき数
戻り値
c の e 乗根

◆ ModularPower()

template<class U >
U MathLib::ModularPower ( const U &  a,
k,
const U &  n 
)

繰り返し自乗法を使った法 n のべき乗計算( a の k 乗を n で割った余りを求める )

テンプレート引数の U は、乗法・剰余・ビットシフト・AND・比較演算子が使える型である必要がある。 剰余演算子やビットシフトなどを使うため、符号なし整数型であることを前提としている。

  • 底 a や法 n が 0 の場合は 0 を返す。
  • 指数が 0 の場合は法 n における 1 を返す。
引数
a
k指数
n
戻り値
べき乗

◆ GCD()

template<class U >
U MathLib::GCD ( a,
b 
)

ユークリッドの互除法を使った最大公約数の計算

テンプレート引数の U は、剰余・比較演算子が使える型である必要がある。 剰余演算子を使うため、符号なし整数型であることを前提としている。

  • いずれかがゼロの場合、もう一方の数をそのまま返す。
引数
a,b最大公約数を求める二つの自然数
戻り値
最大公約数

◆ Jacobi()

template<class U >
int MathLib::Jacobi ( a,
p 
)

ヤコビ記号を求める

a が p を法として 0 でない数の平方数と合同になるとき、a を「p を法とした平方剰余」という。

a が p を法として平方剰余(1)か平方非剰余(-1)かを判定する。この判定値を「ヤコビ記号」という。 但し、次の場合は 0 を返す。

  • a と p が互いに素でない場合
  • p が 3 以上の奇数でない場合
引数
a判定対象の数
p
戻り値
1 ... 平方剰余 ; -1 ... 平方非剰余 ; 0 ... GCD(a,p) != 1

◆ Round()

template<class T >
T MathLib::Round ( x)

小数点以下を四捨五入して整数にする関数

round(double用), roundl(long double用), roundf(float用) を同名で呼び出せるようにするためのテンプレート関数である。

todo:
C+11 から std::round が用意されたため、最終的には廃止する予定。
引数
x対象の数
戻り値
四捨五入した結果

◆ Gamma()

template<class T >
T MathLib::Gamma ( x)

ガンマ関数 Γ( x ) を計算する関数

tgamma(double用), tgammal(long double用), tgammaf(float用) を同名で呼び出せるようにするためのテンプレート関数である。

todo:
C+11 から std::tgamma が用意されたため、最終的には廃止する予定。
引数
x対象の数
戻り値
Γ( x ) の計算結果

◆ Erf()

template<class T >
T MathLib::Erf ( x)

誤差関数 ( 2 / √π )∫{0→x} exp(-t*t) dt を求める

erf(double用), erfl(long double用), erff(float用) を同名で呼び出せるようにするためのテンプレート関数である。

todo:
C+11 から std::erf が用意されたため、最終的には廃止する予定。
引数
x変数(積分範囲の上限)
戻り値
計算結果

◆ Pi()

template<class T >
T MathLib::Pi ( )

円周率を返す関数

定数 M_PI(double/float用) と M_PIl(long double用) を返す。明示的にテンプレート引数を記述する必要がある。

戻り値
円周率

◆ AccuratePermutation()

template<class Res , class I >
Res MathLib::AccuratePermutation ( n,
r 
)

順列 ( n 個の要素から r 個を並べる場合の数 ) の計算

nPr = n! / ( n - r )! = n( n - 1 )...( n - r + 1 ) を正確に計算する。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。 テンプレート引数 Res は明示的に記述する必要があることに注意。

  • n < r または r < 0 ならゼロを返す。
引数
n全要素数
r並べる要素の数
戻り値
順列の計算結果(n < r または r < 0 ならゼロ)

◆ Permutation()

template<class T >
T MathLib::Permutation ( n,
r 
)

順列 ( n 個の要素から r 個を並べる場合の数 ) の計算

nPr = n! / ( n - r )! = n( n - 1 )...( n - r + 1 ) の近似値を計算する。

  • n < r または r < 0 ならゼロを返す。
引数
n全要素数
r並べる要素の数
戻り値
順列の計算結果(n < r または r < 0 ならゼロ)

◆ AccurateMultiCoef()

template<class Res , class In >
Res MathLib::AccurateMultiCoef ( In  s,
In  e 
)

m 個のグループからそれぞれ k[1] 〜 k[m] 個ずつ合計 n 個並べる場合の数(多項係数)を求める

n! / k[1]!k[2]!...k[m]! を正確に計算する。但し、n は k[1] から k[m] までの数の和を意味する。 これは多項定理における項 Πi( x^k[i] ) の係数を表す。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。

k[1] から k[m] の中に一つでも負数があった場合はゼロを返す。

  • 配列 [ s, e ) の位置が逆転していた場合は例外 ExceptionNegativeLength< std::iterator_traits< In >::difference_type > を投げる。
引数
s各グループの要素数からなる配列の開始位置
e各グループの要素数からなる配列の末尾の次の位置
戻り値
多項係数の計算結果(要素数に負数が含まれていた場合はゼロ)

◆ MultiCoef()

template<class Res , class In >
Res MathLib::MultiCoef ( In  s,
In  e 
)

m 個のグループからそれぞれ k[1] 〜 k[m] 個ずつ合計 n 個並べる場合の数(多項係数)を求める

n! / k[1]!k[2]!...k[m]! の近似値を計算する。但し、n は k[1] から k[m] までの数の和を意味する。 これは多項定理における項 Πi( x^k[i] ) の係数を表す。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。

  • k[1] から k[m] の中に一つでも負数があった場合はゼロを返す。
引数
s各グループの要素数からなる配列の開始位置
e各グループの要素数からなる配列の末尾の次の位置
戻り値
多項係数の計算結果(要素数に負数が含まれていた場合はゼロ)

◆ AccurateCombination()

template<class Res , class T >
Res MathLib::AccurateCombination ( n,
r 
)

組み合わせ ( n 個の要素から r 個を選ぶ場合の数 ) の計算

nCr = n! / r!( n - r )! を正確に計算する。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。

  • n < r ならゼロを返す。
  • r < 0 ならゼロを返す。
引数
n要素数
r要素から選択する数
戻り値
組み合わせの計算結果

◆ BinCoef()

template<class D , class I >
D MathLib::BinCoef ( a,
r 
)

一般の二項係数の計算

C( a, r ) = Γ( a + 1 ) / Γ( r + 1 )Γ( a - r + 1 ) を近似的に計算する。このとき、

( 1 + x )^a = 1 + C( a, 1 )x + C( a, 2 )x^2 + ... + C( a, r )x^r + ...

が成り立つ。

  • r < 0 ならゼロを返す。
  • a + 1 <= r ならゼロを返す
引数
a指数部
r次数
戻り値
二項係数の計算結果

◆ AccurateBernoulliNum()

template<class Res , class I >
Res MathLib::AccurateBernoulliNum ( n)

ベルヌーイ数 Bn を求める

ベルヌーイ数の計算に利用する組み合わせ(二項係数)は MathLib::AccurateCombination を使って正確に求めている。

引数
n何番目のベルヌーイ数か?
戻り値
ベルヌーイ数 Bn

◆ BernoulliNum()

template<class Res , class I >
Res MathLib::BernoulliNum ( n)

ベルヌーイ数 Bn を求める

ベルヌーイ数の計算に利用する組み合わせ(二項係数)は MathLib::BinCoef を使って近似的に求めている。

引数
n何番目のベルヌーイ数か?
戻り値
ベルヌーイ数 Bn

◆ Create_DiffMethod_Forward()

template<class F , class T >
DiffMethod_Forward< F, T > MathLib::Create_DiffMethod_Forward ( f,
h 
)

前進差分による導関数計算用関数オブジェクト DiffMethod_Forward を生成する

引数
f導関数を計算する対象の関数 f(x)
h微小量

◆ Create_DiffMethod_Backward()

template<class F , class T >
DiffMethod_Backward< F, T > MathLib::Create_DiffMethod_Backward ( f,
h 
)

後退差分による導関数計算用関数オブジェクト DiffMethod_Backward を生成する

引数
f導関数を計算する対象の関数 f(x)
h微小量

◆ Create_DiffMethod_Central()

template<class F , class T >
DiffMethod_Central< F, T > MathLib::Create_DiffMethod_Central ( f,
h 
)

中心差分による導関数計算用関数オブジェクト DiffMethod_Central を生成する

引数
f導関数を計算する対象の関数 f(x)
h微小量

◆ Newton()

template<class F , class DF , class D >
D MathLib::Newton ( y,
f,
DF  df,
xInit,
unsigned int  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 を返す)

◆ OpBind() [1/2]

template<class Op >
AddBinder< Op > MathLib::OpBind ( Op  op)

処理用単項関数から AddBinder 関数オブジェクトを生成する

引数
op処理用単項関数
戻り値
AddBinder 関数オブジェクト

◆ OpBind() [2/2]

template<class Res , class UnOp , class BinOp >
OpBinder< Res, UnOp, BinOp > MathLib::OpBind ( UnOp  unOp,
BinOp  binOp 
)

処理用単項関数と二項関数から OpBinder 関数オブジェクトを生成する

AddBinder の場合と異なり、戻り値の Res を明示する必要があることに注意

引数
unOp処理用単項関数
binOp二項関数
戻り値
OpBinder 関数オブジェクト

◆ Sum() [1/2]

template<class Res , class In >
Res MathLib::Sum ( In  s,
In  e 
)

データ列の s から e の直前までの範囲の総和を求める

テンプレート引数の In はデータ列の反復子の型を表す。 処理内容としては、初期値をゼロとして std::accumulate を呼び出すだけである。

return std::accumulate( s, e, Res() );

初期値を渡さないため、Sum< Res >( ... ) のように戻り値の型を明示する必要があることに注意。

  • s, e からデータ列の長さを調べ、長さが負数となっている場合は例外 ExceptionNegativeLength< std::iterator_traits< In >::difference_type > を投げる。
引数
s対象のデータ列の開始反復子
e対象のデータ列の末尾の次の反復子
戻り値
求めた総和

◆ Sum() [2/2]

template<class Res , class In , class SUM_Op >
Res MathLib::Sum ( In  s,
In  e,
SUM_Op  sumOp 
)

データ列の s から e の直前までの範囲の総和を求める

テンプレート引数の In はデータ列の反復子、SUM_Op は総和計算用の二項関数オブジェクトの型をそれぞれ表す。 処理内容としては、初期値をゼロとして std::accumulate を呼び出すだけである。

return std::accumulate( s, e, Res(), sumOp );

初期値を渡さないため、Sum< Res >( ... ) のように戻り値の型を明示する必要があることに注意。

  • s, e からデータ列の長さを調べ、長さが負数となっている場合は例外 ExceptionNegativeLength< std::iterator_traits< In >::difference_type > を投げる。
引数
s対象のデータ列の開始反復子
e対象のデータ列の末尾の次の反復子
sumOp和の二項計算用関数オブジェクト
戻り値
求めた総和

◆ SumAll() [1/2]

template<class Res , class Container >
Res MathLib::SumAll ( const Container &  c)

全データの総和を求める

テンプレート引数の Container はデータ列の型を表す。

初期値を渡さないため、SumAll< Res >( ... ) のように戻り値の型を明示する必要があることに注意。

引数
c対象のデータ列への参照
戻り値
求めた総和

◆ SumAll() [2/2]

template<class Res , class Container , class SUM_Op >
Res MathLib::SumAll ( const Container &  c,
SUM_Op  sumOp 
)

全データの総和を求める

テンプレート引数の Container はデータ列、SUM_Op は総和計算用の二項関数オブジェクトの型をそれぞれ表す。

初期値を渡さないため、SumAll< Res >( ... ) のように戻り値の型を明示する必要があることに注意。

引数
c対象のデータ列への参照
sumOp和の二項計算用関数オブジェクト
戻り値
求めた総和

◆ Normalize()

template<class In >
bool MathLib::Normalize ( In  s,
In  e 
)

データ列の s から e の直前までの範囲を正規化する

テンプレート引数の In はデータ列の反復子の型を表す。

データ列のユークリッド・ノルムを 1 にする正規化であり、平均ゼロ・標準偏差 1 とする正規化とは異なる。 後者の正規化は Statistics::Normalize を参照。

  • s, e からデータ列の長さを調べ、長さが負数となっている場合は例外 ExceptionNegativeLength< std::iterator_traits< In >::difference_type > を投げる。
引数
s対象のデータ列の開始反復子
e対象のデータ列の末尾の次の反復子
戻り値
ユークリッド・ノルムがゼロの場合は false を返す (正規化は行われない)

◆ GradientMethod()

template<class F , class T >
T MathLib::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 MathLib::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 MathLib::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 MathLib::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 MathLib::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 MathLib::BrentMethod ( f,
x0,
x2,
e 
)

ブレント法 ( Brent Method )

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

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

◆ HillClimbing()

template<class Op , class T >
void MathLib::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 MathLib::ConjugateGradientMethod ( Op  op,
std::vector< T > *  x0,
h,
e 
)

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

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

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