Common Library
0.9.5
|
数学関数用名前空間 [詳解]
名前空間 | |
diff_method | |
差分法名前空間 | |
eigen_lib | |
固有値計算関数用名前空間 | |
polynomial | |
多項式定義用名前空間 | |
solver | |
連立方程式・最適化問題の解法用名前空間 | |
データ構造 | |
class | SumOp |
二つの値の和を計算するための関数オブジェクト [詳解] | |
class | SumOp< std::pair< T, U > > |
二つの値の和を計算するための関数オブジェクト( std::pair用 ) [詳解] | |
class | KahanSumOp |
Kahanの加算アルゴリズムを使って和を計算するための関数オブジェクト [詳解] | |
class | KahanSumOp< std::pair< T, U > > |
Kahanの加算アルゴリズムを使って和を計算するための関数オブジェクト(std::pair用) [詳解] | |
class | AddBinder |
単項関数で値を処理してから加算するための関数オブジェクト [詳解] | |
class | OpBinder |
単項関数と二項関数の組み合わせにより値を処理するための関数オブジェクト [詳解] | |
関数 | |
template<class U > | |
U | Pow (const U &t, const U &n) |
t の n 乗を計算する関数 [詳解] | |
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 > | |
int8_t | Jacobi (U a, U p) |
ヤコビ記号を求める [詳解] | |
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 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 の直前までの範囲を正規化する [詳解] | |
数学関数用名前空間
U tadah_fussy::math_lib::Pow | ( | const U & | t, |
const U & | n | ||
) |
t の n 乗を計算する関数
テンプレート引数の U は、乗法・除法・減算・剰余・等号演算子が使える型である必要がある。 剰余演算子を使うため、整数型であることを前提としている。
0 の 0 乗は 0 ではなく 1 を返す。
t | べき乗される数 |
n | べき数 |
U tadah_fussy::math_lib::PowerRoot | ( | const U & | c, |
const U & | e | ||
) |
c の e 乗根の近似値を求める
ニュートン-ラフソン法を利用したべき乗根算出ルーチン。 c は符号なし整数であることを前提とし、c の e 乗根を超えない最大数を返す。 但し、e が U() の場合は U() を返す。
c | べき乗根を求める対象の数 |
e | べき数 |
U tadah_fussy::math_lib::ModularPower | ( | const U & | a, |
U | k, | ||
const U & | n | ||
) |
繰り返し自乗法を使った法 n のべき乗計算( a の k 乗を n で割った余りを求める )
テンプレート引数の U は、乗法・剰余・ビットシフト・AND・比較演算子が使える型である必要がある。 剰余演算子やビットシフトなどを使うため、符号なし整数型であることを前提としている。
a | 底 |
k | 指数 |
n | 法 |
U tadah_fussy::math_lib::GCD | ( | U | a, |
U | b | ||
) |
ユークリッドの互除法を使った最大公約数の計算
テンプレート引数の U は、剰余・比較演算子が使える型である必要がある。 剰余演算子を使うため、符号なし整数型であることを前提としている。
a,b | 最大公約数を求める二つの自然数 |
int8_t tadah_fussy::math_lib::Jacobi | ( | U | a, |
U | p | ||
) |
ヤコビ記号を求める
a が p を法として 0 でない数の平方数と合同になるとき、a を「p を法とした平方剰余」という。
a が p を法として平方剰余(1)か平方非剰余(-1)かを判定する。この判定値を「ヤコビ記号」という。 但し、次の場合は 0 を返す。
a | 判定対象の数 |
p | 法 |
T tadah_fussy::math_lib::Pi | ( | ) |
円周率を返す関数
定数 M_PI(double/float用) と M_PIl(long double用) を返す。明示的にテンプレート引数を記述する必要がある。
Res tadah_fussy::math_lib::AccuratePermutation | ( | I | n, |
I | r | ||
) |
順列 ( n 個の要素から r 個を並べる場合の数 ) の計算
nPr = n! / ( n - r )! = n( n - 1 )...( n - r + 1 ) を正確に計算する。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。 テンプレート引数 Res は明示的に記述する必要があることに注意。
n | 全要素数 |
r | 並べる要素の数 |
T tadah_fussy::math_lib::Permutation | ( | T | n, |
T | r | ||
) |
順列 ( n 個の要素から r 個を並べる場合の数 ) の計算
nPr = n! / ( n - r )! = n( n - 1 )...( n - r + 1 ) の近似値を計算する。
n | 全要素数 |
r | 並べる要素の数 |
Res tadah_fussy::math_lib::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 tadah_fussy::math_lib::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 tadah_fussy::math_lib::AccurateCombination | ( | T | n, |
T | r | ||
) |
組み合わせ ( n 個の要素から r 個を選ぶ場合の数 ) の計算
nCr = n! / r!( n - r )! を正確に計算する。 計算可能な範囲は戻り値の型 Res に依存し、Res の取りうる値の範囲を超えた場合は正しい結果は得られない。
n | 要素数 |
r | 要素から選択する数 |
D tadah_fussy::math_lib::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 tadah_fussy::math_lib::AccurateBernoulliNum | ( | I | n | ) |
ベルヌーイ数 Bn を求める
ベルヌーイ数の計算に利用する組み合わせ(二項係数)は math_lib::AccurateCombination を使って正確に求めている。
n | 何番目のベルヌーイ数か? |
Res tadah_fussy::math_lib::BernoulliNum | ( | I | n | ) |
ベルヌーイ数 Bn を求める
ベルヌーイ数の計算に利用する組み合わせ(二項係数)は math_lib::BinCoef を使って近似的に求めている。
n | 何番目のベルヌーイ数か? |
AddBinder< Op > tadah_fussy::math_lib::OpBind | ( | Op | op | ) |
OpBinder< Res, UnOp, BinOp > tadah_fussy::math_lib::OpBind | ( | UnOp | unOp, |
BinOp | binOp | ||
) |
Res tadah_fussy::math_lib::Sum | ( | In | s, |
In | e | ||
) |
データ列の s から e の直前までの範囲の総和を求める
テンプレート引数の In はデータ列の反復子の型を表す。 処理内容としては、初期値をゼロとして std::accumulate を呼び出すだけである。
初期値を渡さないため、Sum< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
s | 対象のデータ列の開始反復子 |
e | 対象のデータ列の末尾の次の反復子 |
Res tadah_fussy::math_lib::Sum | ( | In | s, |
In | e, | ||
SUM_Op | sumOp | ||
) |
データ列の s から e の直前までの範囲の総和を求める
テンプレート引数の In はデータ列の反復子、SUM_Op は総和計算用の二項関数オブジェクトの型をそれぞれ表す。 処理内容としては、初期値をゼロとして std::accumulate を呼び出すだけである。
初期値を渡さないため、Sum< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
s | 対象のデータ列の開始反復子 |
e | 対象のデータ列の末尾の次の反復子 |
sumOp | 和の二項計算用関数オブジェクト |
Res tadah_fussy::math_lib::SumAll | ( | const Container & | c | ) |
全データの総和を求める
テンプレート引数の Container はデータ列の型を表す。
初期値を渡さないため、SumAll< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
c | 対象のデータ列への参照 |
Res tadah_fussy::math_lib::SumAll | ( | const Container & | c, |
SUM_Op | sumOp | ||
) |
全データの総和を求める
テンプレート引数の Container はデータ列、SUM_Op は総和計算用の二項関数オブジェクトの型をそれぞれ表す。
初期値を渡さないため、SumAll< Res >( ... ) のように戻り値の型を明示する必要があることに注意。
c | 対象のデータ列への参照 |
sumOp | 和の二項計算用関数オブジェクト |
bool tadah_fussy::math_lib::Normalize | ( | In | s, |
In | e | ||
) |
データ列の s から e の直前までの範囲を正規化する
テンプレート引数の In はデータ列の反復子の型を表す。
データ列のユークリッド・ノルムを 1 にする正規化であり、平均ゼロ・標準偏差 1 とする正規化とは異なる。 後者の正規化は Statistics::Normalize を参照。
s | 対象のデータ列の開始反復子 |
e | 対象のデータ列の末尾の次の反復子 |