Common Library
0.9.5
|
数学関数用名前空間 [詳解]
データ構造 | |
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 > | |
T | Integral (Op op, F f, T a, T b, unsigned int n) |
区分求積法による積分値の計算 [詳解] | |
template<class U > | |
U | Pow (const U &t, const U &n) |
t の n 乗を計算する関数 [詳解] | |
template<class U > | |
U | SquareRoot (const U &c) |
c の平方根の近似値を求める [詳解] | |
template<class U > | |
U | PowerRoot (const U &c, const U &e) |
c の e 乗根の近似値を求める [詳解] | |
template<class U > | |
U | ModularPower (const U &a, U k, const U &n) |
繰り返し自乗法を使った法 n のべき乗計算( a の k 乗を n で割った余りを求める ) [詳解] | |
template<class U > | |
U | GCD (U a, U b) |
ユークリッドの互除法を使った最大公約数の計算 [詳解] | |
template<class U > | |
int | Jacobi (U a, U p) |
ヤコビ記号を求める [詳解] | |
template<class T > | |
T | Round (T x) |
小数点以下を四捨五入して整数にする関数 [詳解] | |
template<class T > | |
T | Gamma (T x) |
ガンマ関数 Γ( x ) を計算する関数 [詳解] | |
template<class T > | |
T | Erf (T x) |
誤差関数 ( 2 / √π )∫{0→x} exp(-t*t) dt を求める [詳解] | |
template<class T > | |
T | Pi () |
円周率を返す関数 [詳解] | |
template<class Res , class I > | |
Res | AccuratePermutation (I n, I r) |
順列 ( n 個の要素から r 個を並べる場合の数 ) の計算 [詳解] | |
template<class T > | |
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 > | |
D | 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 > | |
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 > | |
T | GradientMethod (F f, T x0, T h, T e) |
勾配法 ( Gradient Method ) [詳解] | |
template<class F , class T > | |
T | BisectionMethod (F f, T x0, T x1, T e) |
二部法 ( Bisection Method ) [詳解] | |
template<class F , class T > | |
T | SecantMethod (F f, T x0, T x1, T e) |
セカント法 ( Secant Method ) [詳解] | |
template<class F , class T > | |
T | FalsePositionMethod (F f, T x0, T x1, T e) |
はさみうち法 ( False Position Method ) [詳解] | |
template<class F , class T > | |
T | InverseQuadraticInterpolation (F f, T x0, T x2, T e) |
逆二次補間法 ( Inverse Quadratic Interpolation ) [詳解] | |
template<class F , class T > | |
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) |
共役勾配法による多変量関数の極値計算 [詳解] | |
数学関数用名前空間
void MathLib::InverseMatrix | ( | const MATRIX & | mat, |
SquareMatrix< typename MATRIX::value_type > * | inv, | ||
Solver | solver | ||
) |
逆行列を求める
内部で連立方程式を解いて逆行列を求めている。連立方程式の解法は選択が可能。 例えば、LES_GaussianElimination を利用する場合は次のように記述する。
mat | 対象の行列 |
inv | 求めた逆行列を書き込む正方行列へのポインタ |
solver | 連立方程式計算用ソルバ |
T MathLib::Integral | ( | Op | op, |
F | f, | ||
T | a, | ||
T | b, | ||
unsigned int | n | ||
) |
区分求積法による積分値の計算
計算手法 ( 中点則・台形則など ) は引数 op にて指定する。以下の計算手法が現在利用できる。
積分範囲の大小関係が逆転している ( a > b の ) 場合、積分値の符号が逆転することに注意。
op | 積分値を計算する手法 |
f | 積分値を計算する対象の関数 |
a,b | 積分範囲 |
n | 分割数 ( 大きいほど精度が上がるが、処理時間は長くなる ) |
U MathLib::Pow | ( | const U & | t, |
const U & | n | ||
) |
t の n 乗を計算する関数
テンプレート引数の U は、乗法・除法・減算・剰余・等号演算子が使える型である必要がある。 剰余演算子を使うため、整数型であることを前提としている。
0 の 0 乗は 0 ではなく 1 を返す。
t | べき乗される数 |
n | べき数 |
U MathLib::SquareRoot | ( | const U & | c | ) |
c の平方根の近似値を求める
ニュートン-ラフソン法を利用した平方根算出ルーチン。 c は符号なし整数であることを前提とし、√c を超えない最大数を返す。
c | 平方根を求める対象の数 |
U MathLib::PowerRoot | ( | const U & | c, |
const U & | e | ||
) |
c の e 乗根の近似値を求める
ニュートン-ラフソン法を利用したべき乗根算出ルーチン。 c は符号なし整数であることを前提とし、c の e 乗根を超えない最大数を返す。 但し、e が U() の場合は U() を返す。
c | べき乗根を求める対象の数 |
e | べき数 |
U MathLib::ModularPower | ( | const U & | a, |
U | k, | ||
const U & | n | ||
) |
繰り返し自乗法を使った法 n のべき乗計算( a の k 乗を n で割った余りを求める )
テンプレート引数の U は、乗法・剰余・ビットシフト・AND・比較演算子が使える型である必要がある。 剰余演算子やビットシフトなどを使うため、符号なし整数型であることを前提としている。
a | 底 |
k | 指数 |
n | 法 |
U MathLib::GCD | ( | U | a, |
U | b | ||
) |
ユークリッドの互除法を使った最大公約数の計算
テンプレート引数の U は、剰余・比較演算子が使える型である必要がある。 剰余演算子を使うため、符号なし整数型であることを前提としている。
a,b | 最大公約数を求める二つの自然数 |
int MathLib::Jacobi | ( | U | a, |
U | p | ||
) |
ヤコビ記号を求める
a が p を法として 0 でない数の平方数と合同になるとき、a を「p を法とした平方剰余」という。
a が p を法として平方剰余(1)か平方非剰余(-1)かを判定する。この判定値を「ヤコビ記号」という。 但し、次の場合は 0 を返す。
a | 判定対象の数 |
p | 法 |
T MathLib::Round | ( | T | x | ) |
小数点以下を四捨五入して整数にする関数
round(double用), roundl(long double用), roundf(float用) を同名で呼び出せるようにするためのテンプレート関数である。
x | 対象の数 |
T MathLib::Gamma | ( | T | x | ) |
ガンマ関数 Γ( x ) を計算する関数
tgamma(double用), tgammal(long double用), tgammaf(float用) を同名で呼び出せるようにするためのテンプレート関数である。
x | 対象の数 |
T MathLib::Erf | ( | T | x | ) |
誤差関数 ( 2 / √π )∫{0→x} exp(-t*t) dt を求める
erf(double用), erfl(long double用), erff(float用) を同名で呼び出せるようにするためのテンプレート関数である。
x | 変数(積分範囲の上限) |
T MathLib::Pi | ( | ) |
円周率を返す関数
定数 M_PI(double/float用) と M_PIl(long double用) を返す。明示的にテンプレート引数を記述する必要がある。
Res MathLib::AccuratePermutation | ( | I | n, |
I | r | ||
) |
順列 ( n 個の要素から r 個を並べる場合の数 ) の計算
nPr = n! / ( n - r )! = n( n - 1 )...( n - r + 1 ) を正確に計算する。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。 テンプレート引数 Res は明示的に記述する必要があることに注意。
n | 全要素数 |
r | 並べる要素の数 |
T MathLib::Permutation | ( | T | n, |
T | r | ||
) |
順列 ( n 個の要素から r 個を並べる場合の数 ) の計算
nPr = n! / ( n - r )! = n( n - 1 )...( n - r + 1 ) の近似値を計算する。
n | 全要素数 |
r | 並べる要素の数 |
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 | 各グループの要素数からなる配列の末尾の次の位置 |
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 の取りうる値の範囲を超えた場合は正しい結果は得られない。
s | 各グループの要素数からなる配列の開始位置 |
e | 各グループの要素数からなる配列の末尾の次の位置 |
Res MathLib::AccurateCombination | ( | T | n, |
T | r | ||
) |
組み合わせ ( n 個の要素から r 個を選ぶ場合の数 ) の計算
nCr = n! / r!( n - r )! を正確に計算する。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。
n | 要素数 |
r | 要素から選択する数 |
D MathLib::BinCoef | ( | D | a, |
I | 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 + ...
が成り立つ。
a | 指数部 |
r | 次数 |
Res MathLib::AccurateBernoulliNum | ( | I | n | ) |
ベルヌーイ数 Bn を求める
ベルヌーイ数の計算に利用する組み合わせ(二項係数)は MathLib::AccurateCombination を使って正確に求めている。
n | 何番目のベルヌーイ数か? |
Res MathLib::BernoulliNum | ( | I | n | ) |
ベルヌーイ数 Bn を求める
ベルヌーイ数の計算に利用する組み合わせ(二項係数)は MathLib::BinCoef を使って近似的に求めている。
n | 何番目のベルヌーイ数か? |
DiffMethod_Forward< F, T > MathLib::Create_DiffMethod_Forward | ( | F | f, |
T | h | ||
) |
前進差分による導関数計算用関数オブジェクト DiffMethod_Forward を生成する
f | 導関数を計算する対象の関数 f(x) |
h | 微小量 |
DiffMethod_Backward< F, T > MathLib::Create_DiffMethod_Backward | ( | F | f, |
T | h | ||
) |
後退差分による導関数計算用関数オブジェクト DiffMethod_Backward を生成する
f | 導関数を計算する対象の関数 f(x) |
h | 微小量 |
DiffMethod_Central< F, T > MathLib::Create_DiffMethod_Central | ( | F | f, |
T | h | ||
) |
中心差分による導関数計算用関数オブジェクト DiffMethod_Central を生成する
f | 導関数を計算する対象の関数 f(x) |
h | 微小量 |
D MathLib::Newton | ( | D | y, |
F | f, | ||
DF | df, | ||
D | xInit, | ||
unsigned int | maxCount, | ||
D | threshold | ||
) |
ニュートン-ラフソン法により f(x) = y を満たす x (x0) を求める
テンプレート引数の F は関数 f(x)、DF はその導関数 f'(x) の型を表す。 また、D は x の値の型を表す。D は浮動小数点数の型であることを前提とする。
y | y ( = f(x0) ) の値 |
f | 関数 f(x) |
df | f(x) の導関数 f'(x) |
xInit | x の初期値 |
maxCount | 処理を行う最大回数 |
threshold | 収束を判断するしきい値。| [ f(x) - f(x0) ] / f'(x) | がこの値より小さくなれば処理を終了する。 |
AddBinder< Op > MathLib::OpBind | ( | Op | op | ) |
OpBinder< Res, UnOp, BinOp > MathLib::OpBind | ( | UnOp | unOp, |
BinOp | binOp | ||
) |
Res MathLib::Sum | ( | In | s, |
In | e | ||
) |
データ列の s から e の直前までの範囲の総和を求める
テンプレート引数の In はデータ列の反復子の型を表す。 処理内容としては、初期値をゼロとして std::accumulate を呼び出すだけである。
初期値を渡さないため、Sum< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
s | 対象のデータ列の開始反復子 |
e | 対象のデータ列の末尾の次の反復子 |
Res MathLib::Sum | ( | In | s, |
In | e, | ||
SUM_Op | sumOp | ||
) |
データ列の s から e の直前までの範囲の総和を求める
テンプレート引数の In はデータ列の反復子、SUM_Op は総和計算用の二項関数オブジェクトの型をそれぞれ表す。 処理内容としては、初期値をゼロとして std::accumulate を呼び出すだけである。
初期値を渡さないため、Sum< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
s | 対象のデータ列の開始反復子 |
e | 対象のデータ列の末尾の次の反復子 |
sumOp | 和の二項計算用関数オブジェクト |
Res MathLib::SumAll | ( | const Container & | c | ) |
全データの総和を求める
テンプレート引数の Container はデータ列の型を表す。
初期値を渡さないため、SumAll< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
c | 対象のデータ列への参照 |
Res MathLib::SumAll | ( | const Container & | c, |
SUM_Op | sumOp | ||
) |
全データの総和を求める
テンプレート引数の Container はデータ列、SUM_Op は総和計算用の二項関数オブジェクトの型をそれぞれ表す。
初期値を渡さないため、SumAll< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
c | 対象のデータ列への参照 |
sumOp | 和の二項計算用関数オブジェクト |
bool MathLib::Normalize | ( | In | s, |
In | e | ||
) |
データ列の s から e の直前までの範囲を正規化する
テンプレート引数の In はデータ列の反復子の型を表す。
データ列のユークリッド・ノルムを 1 にする正規化であり、平均ゼロ・標準偏差 1 とする正規化とは異なる。 後者の正規化は Statistics::Normalize を参照。
s | 対象のデータ列の開始反復子 |
e | 対象のデータ列の末尾の次の反復子 |
T MathLib::GradientMethod | ( | F | f, |
T | x0, | ||
T | h, | ||
T | e | ||
) |
勾配法 ( Gradient Method )
テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、ステップ幅がゼロに収束したかのいずれにも利用される。
f | 関数 f(x) |
x0 | x の初期値 |
h | ステップ幅 |
e | 収束判定値 |
T MathLib::BisectionMethod | ( | F | f, |
T | x0, | ||
T | x1, | ||
T | e | ||
) |
二部法 ( Bisection Method )
テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、x0, x1 が充分近くなったかのいずれにも利用される。 x0, x1 の間に解があることを想定している。
f | 関数 f(x) |
x0,x1 | 解のある範囲 |
e | 収束判定値 |
T MathLib::SecantMethod | ( | F | f, |
T | x0, | ||
T | x1, | ||
T | e | ||
) |
セカント法 ( Secant Method )
テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したかに利用される。
f | 関数 f(x) |
x0 | x の初期値 |
x1 | 直線を求めるためのもう一つの点 |
e | 収束判定値 |
T MathLib::FalsePositionMethod | ( | F | f, |
T | x0, | ||
T | x1, | ||
T | e | ||
) |
はさみうち法 ( False Position Method )
テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、x0, x1 が充分近くなったかのいずれにも利用される。 x0, x1 の間に解があることを想定している。
f | 関数 f(x) |
x0,x1 | 解のある範囲 |
e | 収束判定値 |
T MathLib::InverseQuadraticInterpolation | ( | F | f, |
T | x0, | ||
T | x2, | ||
T | e | ||
) |
逆二次補間法 ( Inverse Quadratic Interpolation )
テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したかに利用される。
f | 関数 f(x) |
x0,x2 | 二次関数を求めるときに利用する二点 |
e | 収束判定値 |
T MathLib::BrentMethod | ( | F | f, |
T | x0, | ||
T | x2, | ||
T | e | ||
) |
ブレント法 ( Brent Method )
テンプレート引数 F は関数の型を、T はデータの型をそれぞれ表す。 収束判定値 e は f(x) がゼロに収束したか、x0, x2 が充分近くなったかのいずれにも利用される。
f | 関数 f(x) |
x0,x2 | 二次関数または直線を求めるときに利用する二点 |
e | 収束判定値 |
void MathLib::HillClimbing | ( | Op | op, |
std::vector< T > * | x0, | ||
T | h, | ||
T | e | ||
) |
山登り法 ( Hill Climbing ) による多変量関数の極値計算
テンプレート引数の Op は多変量関数オブジェクト HC_Operator の派生型であることを想定
op | 関数 f(x) |
x0 | 初期値(結果をそのまま返す) |
h | ステップ幅 |
e | 収束判定値 |
void MathLib::ConjugateGradientMethod | ( | Op | op, |
std::vector< T > * | x0, | ||
T | h, | ||
T | e | ||
) |
共役勾配法による多変量関数の極値計算
テンプレート引数の Op は多変量関数オブジェクト CGM_Operator の派生型であることを想定
op | 関数 f(x) |
x0 | 初期値(結果をそのまま返す) |
h | ステップ幅 |
e | 収束判定値 |