Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext
與 C, R, FORTRAN風格自由函數( Free Functions)的比較

你可能很熟悉一個有自由函數的統計庫( free functions),例如經典的NAG C 庫 以及 匹配的(matching) NAG FORTRAN 庫 Microsoft Excel BINOMDIST(number_s,trials,probability_s,cumulative), R, MathCAD pbinom 以及更多其它的庫。

如果是這樣的話,那麼你可能覺得'將分佈作為對像(Distributions as Objects)' 並不是很熟悉。

然而,不要驚慌(panic), 它們的定義和使用沒有太大的不同。

下面是一個使用這個庫和NAG C 庫 針對二項分佈生成相同值的例子 (如果你發現了稍有不同的結果,使用double 或更精確類型的Boost C++版本的統計庫非常可能產生更精確的結果。當然,對於這個函數的大多數應用程序來說,精度通常不是一個關注點)。

NAG 函數原型(function specification) 是:

void nag_binomial_dist(Integer n, double p, Integer k,
double *plek, double *pgtk, double *peqk, NagError *fail)

並且通過下面的方法調用:

g01bjc(n, p, k, &plek, &pgtk, &peqk, NAGERR_DEFAULT);

等價的使用Boost C++ 庫的調用是:

using namespace boost::math;  // using 聲明(Using declaration)來避免很長的類名.
binomial my_dist(4, 0.5); // c.f. NAG n = 4, p = 0.5

並且結果可以打印出來:

cout
  << my_dist.trials() << " "             // 顯示 the NAG input n = 4 trials.
  << my_dist.success_fraction() << " "   // 顯示 the NAG input p = 0.5
  << cdf(my_dist, 2) << "  "             // NAG plek with k = 2
  << cdf(complement(my_dist, 2)) << "  " // NAG pgtk with k = 2
  << pdf(my_dist, 2) << endl;            // NAG peqk with k = 2

cdf(dist, k)等價於 NAG 庫函數 plek, lower tail probability of <= k

cdf(complement(dist, k)) 等價於 NAG 庫函數 pgtk, upper tail probability of > k

pdf(dist, k)等價於 NAG 庫函數 peqk, 點概率(point probability) of == k

參考binomial_example_nag.cpp 瞭解更多信息。


PrevUpHomeNext