| [section:nag_library Comparison with C, R, FORTRAN-style Free Functions] |
| |
| You are probably familiar with a statistics library that has free functions, |
| for example the classic [@http://nag.com/numeric/CL/CLdescription.asp NAG C library] |
| and matching [@http://nag.com/numeric/FL/FLdescription.asp NAG FORTRAN Library], |
| [@http://office.microsoft.com/en-us/excel/HP052090051033.aspx Microsoft Excel BINOMDIST(number_s,trials,probability_s,cumulative)], |
| [@http://www.r-project.org/ R], [@http://www.ptc.com/products/mathcad/mathcad14/mathcad_func_chart.htm MathCAD pbinom] |
| and many others. |
| |
| If so, you may find 'Distributions as Objects' unfamiliar, if not alien. |
| |
| However, *do not panic*, both definition and usage are not really very different. |
| |
| A very simple example of generating the same values as the |
| [@http://nag.com/numeric/CL/CLdescription.asp NAG C library] |
| for the binomial distribution follows. |
| (If you find slightly different values, the Boost C++ version, using double or better, |
| is very likely to be the more accurate. |
| Of course, accuracy is not usually a concern for most applications of this function). |
| |
| The [@http://www.nag.co.uk/numeric/cl/manual/pdf/G01/g01bjc.pdf NAG function specification] is |
| |
| void nag_binomial_dist(Integer n, double p, Integer k, |
| double *plek, double *pgtk, double *peqk, NagError *fail) |
| |
| and is called |
| |
| g01bjc(n, p, k, &plek, &pgtk, &peqk, NAGERR_DEFAULT); |
| |
| The equivalent using this Boost C++ library is: |
| |
| using namespace boost::math; // Using declaration avoids very long names. |
| binomial my_dist(4, 0.5); // c.f. NAG n = 4, p = 0.5 |
| |
| and values can be output thus: |
| |
| cout |
| << my_dist.trials() << " " // Echo the NAG input n = 4 trials. |
| << my_dist.success_fraction() << " " // Echo 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)` is equivalent to NAG library `plek`, lower tail probability of <= k |
| |
| `cdf(complement(dist, k))` is equivalent to NAG library `pgtk`, upper tail probability of > k |
| |
| `pdf(dist, k)` is equivalent to NAG library `peqk`, point probability of == k |
| |
| See [@../../../example/binomial_example_nag.cpp binomial_example_nag.cpp] for details. |
| |
| [endsect] [/section:nag_library Comparison with C, R, FORTRAN-style Free Functions] |
| |
| [/ |
| Copyright 2006 John Maddock and Paul A. Bristow. |
| Distributed under the Boost Software License, Version 1.0. |
| (See accompanying file LICENSE_1_0.txt or copy at |
| http://www.boost.org/LICENSE_1_0.txt). |
| ] |
| |