⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 negative_binomial_example2.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
// negative_binomial_example2.cpp// Copyright Paul A. Bristow 2007.// Use, modification and distribution are subject to 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)// Simple example demonstrating use of the Negative Binomial Distribution.#include <boost/math/distributions/negative_binomial.hpp>  using boost::math::negative_binomial_distribution;  using boost::math::negative_binomial; // typedef// In a sequence of trials or events// (Bernoulli, independent, yes or no, succeed or fail)// with success_fraction probability p,// negative_binomial is the probability that k or fewer failures// preceed the r th trial's success.#include <iostream>using std::cout;using std::endl;using std::setprecision;using std::showpoint;using std::setw;using std::left;using std::right;#include <limits>using std::numeric_limits;int main(){  cout << "Negative_binomial distribution - simple example 2" << endl;  // Construct a negative binomial distribution with:  // 8 successes (r), success fraction (p) 0.25 = 25% or 1 in 4 successes.  negative_binomial mynbdist(8, 0.25); // Shorter method using typedef.  // Display (to check) properties of the distribution just constructed.  cout << "mean(mynbdist) = " << mean(mynbdist) << endl; // 24  cout << "mynbdist.successes() = " << mynbdist.successes()  << endl; // 8  // r th successful trial, after k failures, is r + k th trial.  cout << "mynbdist.success_fraction() = " << mynbdist.success_fraction() << endl;   // success_fraction = failures/successes or k/r = 0.25 or 25%.   cout << "mynbdist.percent success  = " << mynbdist.success_fraction() * 100 << "%"  << endl;  // Show as % too.  // Show some cumulative distribution function values for failures k = 2 and 8  cout << "cdf(mynbdist, 2.) = " << cdf(mynbdist, 2.) << endl; // 0.000415802001953125  cout << "cdf(mynbdist, 8.) = " << cdf(mynbdist, 8.) << endl; // 0.027129956288263202  cout << "cdf(complement(mynbdist, 8.)) = " << cdf(complement(mynbdist, 8.)) << endl; // 0.9728700437117368  // Check that cdf plus its complement is unity.  cout << "cdf + complement = " << cdf(mynbdist, 8.) + cdf(complement(mynbdist, 8.))  << endl; // 1  // Note: No complement for pdf!   // Compare cdf with sum of pdfs.  double sum = 0.; // Calculate the sum of all the pdfs,  int k = 20; // for 20 failures  for(signed i = 0; i <= k; ++i)  {    sum += pdf(mynbdist, double(i));  }  // Compare with the cdf  double cdf8 = cdf(mynbdist, static_cast<double>(k));  double diff = sum - cdf8; // Expect the diference to be very small.  cout << setprecision(17) << "Sum pdfs = " << sum << ' ' // sum = 0.40025683281803698  << ", cdf = " << cdf(mynbdist, static_cast<double>(k)) //  cdf = 0.40025683281803687  << ", difference = "  // difference = 0.50000000000000000  << setprecision(1) << diff/ (std::numeric_limits<double>::epsilon() * sum)  << " in epsilon units." << endl;  // Note: Use boost::math::tools::epsilon rather than std::numeric_limits  //  to cover RealTypes that do not specialize numeric_limits.//[neg_binomial_example2  // Print a table of values that can be used to plot  // using Excel, or some other superior graphical display tool.  cout.precision(17); // Use max_digits10 precision, the maximum available for a reference table.  cout << showpoint << endl; // include trailing zeros.  // This is a maximum possible precision for the type (here double) to suit a reference table.  int maxk = static_cast<int>(2. * mynbdist.successes() /  mynbdist.success_fraction());  // This maxk shows most of the range of interest, probability about 0.0001 to 0.999.  cout << "\n"" k            pdf                      cdf""\n" << endl;  for (int k = 0; k < maxk; k++)  {    cout << right << setprecision(17) << showpoint      << right << setw(3) << k  << ", "      << left << setw(25) << pdf(mynbdist, static_cast<double>(k))      << left << setw(25) << cdf(mynbdist, static_cast<double>(k))      << endl;  }  cout << endl;//] [/ neg_binomial_example2]  return 0;} // int main()/*Output is:negative_binomial distribution - simple example 2mean(mynbdist) = 24mynbdist.successes() = 8mynbdist.success_fraction() = 0.25mynbdist.percent success  = 25%cdf(mynbdist, 2.) = 0.000415802001953125cdf(mynbdist, 8.) = 0.027129956288263202cdf(complement(mynbdist, 8.)) = 0.9728700437117368cdf + complement = 1Sum pdfs = 0.40025683281803692 , cdf = 0.40025683281803687, difference = 0.25 in epsilon units.//[neg_binomial_example2_1 k            pdf                      cdf  0, 1.5258789062500000e-005  1.5258789062500003e-005    1, 9.1552734375000000e-005  0.00010681152343750000     2, 0.00030899047851562522   0.00041580200195312500     3, 0.00077247619628906272   0.0011882781982421875      4, 0.0015932321548461918    0.0027815103530883789      5, 0.0028678178787231476    0.0056493282318115234      6, 0.0046602040529251142    0.010309532284736633       7, 0.0069903060793876605    0.017299838364124298       8, 0.0098301179241389001    0.027129956288263202       9, 0.013106823898851871     0.040236780187115073      10, 0.016711200471036140     0.056947980658151209      11, 0.020509200578089786     0.077457181236241013      12, 0.024354675686481652     0.10181185692272265       13, 0.028101548869017230     0.12991340579173993       14, 0.031614242477644432     0.16152764826938440       15, 0.034775666725408917     0.19630331499479325       16, 0.037492515688331451     0.23379583068312471       17, 0.039697957787645101     0.27349378847076977       18, 0.041352039362130305     0.31484582783290005       19, 0.042440250924291580     0.35728607875719176       20, 0.042970754060845245     0.40025683281803687       21, 0.042970754060845225     0.44322758687888220       22, 0.042482450037426581     0.48571003691630876       23, 0.041558918514873783     0.52726895543118257       24, 0.040260202311284021     0.56752915774246648       25, 0.038649794218832620     0.60617895196129912       26, 0.036791631035234917     0.64297058299653398       27, 0.034747651533277427     0.67771823452981139       28, 0.032575923312447595     0.71029415784225891       29, 0.030329307911589130     0.74062346575384819       30, 0.028054609818219924     0.76867807557206813       31, 0.025792141284492545     0.79447021685656061       32, 0.023575629142856460     0.81804584599941710       33, 0.021432390129869489     0.83947823612928651       34, 0.019383705779220189     0.85886194190850684       35, 0.017445335201298231     0.87630727710980494       36, 0.015628112784496322     0.89193538989430121       37, 0.013938587078064250     0.90587397697236549       38, 0.012379666154859701     0.91825364312722524       39, 0.010951243136991251     0.92920488626421649       40, 0.0096507830144735539    0.93885566927869002       41, 0.0084738582566109364    0.94732952753530097       42, 0.0074146259745345548    0.95474415350983555       43, 0.0064662435824429246    0.96121039709227851       44, 0.0056212231142827853    0.96683162020656122       45, 0.0048717266990450708    0.97170334690560634       46, 0.0042098073105878630    0.97591315421619418       47, 0.0036275999165703964    0.97954075413276465       48, 0.0031174686783026818    0.98265822281106729       49, 0.0026721160099737302    0.98533033882104104       50, 0.0022846591885275322    0.98761499800956853       51, 0.0019486798960970148    0.98956367790566557       52, 0.0016582516423517923    0.99122192954801736       53, 0.0014079495076571762    0.99262987905567457       54, 0.0011928461106539983    0.99382272516632852       55, 0.0010084971662802015    0.99483122233260868       56, 0.00085091948404891532   0.99568214181665760       57, 0.00071656377604119542   0.99639870559269883       58, 0.00060228420831048650   0.99700098980100937       59, 0.00050530624256557675   0.99750629604357488       60, 0.00042319397814867202   0.99792949002172360       61, 0.00035381791615708398   0.99828330793788067       62, 0.00029532382517950324   0.99857863176306016       63, 0.00024610318764958566   0.99882473495070978      //] [neg_binomial_example2_1 end of Quickbook]*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -