Initial commit
This commit is contained in:
103
libs/math/example/hyperexponential_snips.cpp
Normal file
103
libs/math/example/hyperexponential_snips.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
// Copyright John Maddock 2014.
|
||||
|
||||
// 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)
|
||||
|
||||
// Caution: this file contains Quickbook markup as well as code
|
||||
// and comments, don't change any of the special comment markups!
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# pragma warning (disable : 4996) // disable -D_SCL_SECURE_NO_WARNINGS C++ 'Checked Iterators'
|
||||
#endif
|
||||
|
||||
#include <boost/math/distributions/hyperexponential.hpp>
|
||||
#include <iostream>
|
||||
|
||||
#ifndef BOOST_NO_CXX11_HDR_ARRAY
|
||||
#include <array>
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
//[hyperexponential_snip1
|
||||
//=#include <boost/math/distributions/hyperexponential.hpp>
|
||||
//=#include <iostream>
|
||||
//=int main()
|
||||
//={
|
||||
const double rates[] = { 1.0 / 10.0, 1.0 / 12.0 };
|
||||
|
||||
boost::math::hyperexponential he(rates);
|
||||
|
||||
std::cout << "Average lifetime: "
|
||||
<< boost::math::mean(he)
|
||||
<< " years" << std::endl;
|
||||
std::cout << "Probability that the appliance will work for more than 15 years: "
|
||||
<< boost::math::cdf(boost::math::complement(he, 15.0))
|
||||
<< std::endl;
|
||||
//=}
|
||||
//]
|
||||
}
|
||||
using namespace boost::math;
|
||||
#ifndef BOOST_NO_CXX11_HDR_ARRAY
|
||||
{
|
||||
//[hyperexponential_snip2
|
||||
std::array<double, 2> phase_prob = { 0.5, 0.5 };
|
||||
std::array<double, 2> rates = { 1.0 / 10, 1.0 / 12 };
|
||||
|
||||
hyperexponential he(phase_prob.begin(), phase_prob.end(), rates.begin(), rates.end());
|
||||
//]
|
||||
}
|
||||
|
||||
{
|
||||
//[hyperexponential_snip3
|
||||
// We could be using any standard library container here... vector, deque, array, list etc:
|
||||
std::array<double, 2> phase_prob = { 0.5, 0.5 };
|
||||
std::array<double, 2> rates = { 1.0 / 10, 1.0 / 12 };
|
||||
|
||||
hyperexponential he1(phase_prob, rates); // Construct from standard library container.
|
||||
|
||||
double phase_probs2[] = { 0.5, 0.5 };
|
||||
double rates2[] = { 1.0 / 10, 1.0 / 12 };
|
||||
|
||||
hyperexponential he2(phase_probs2, rates2); // Construct from native C++ array.
|
||||
//]
|
||||
}
|
||||
{
|
||||
//[hyperexponential_snip4
|
||||
// We could be using any standard library container here... vector, deque, array, list etc:
|
||||
std::array<double, 2> rates = { 1.0 / 10, 1.0 / 12 };
|
||||
|
||||
hyperexponential he(rates.begin(), rates.end());
|
||||
|
||||
assert(he.probabilities()[0] == 0.5); // Phase probabilities will be equal and normalised to unity.
|
||||
//]
|
||||
}
|
||||
{
|
||||
//[hyperexponential_snip5
|
||||
std::array<double, 2> rates = { 1.0 / 10, 1.0 / 12 };
|
||||
|
||||
hyperexponential he(rates);
|
||||
|
||||
assert(he.probabilities()[0] == 0.5); // Phase probabilities will be equal and normalised to unity.
|
||||
//]
|
||||
}
|
||||
#endif
|
||||
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
||||
{
|
||||
//[hyperexponential_snip6
|
||||
hyperexponential he = { { 0.5, 0.5 }, { 1.0 / 10, 1.0 / 12 } };
|
||||
//]
|
||||
}
|
||||
{
|
||||
//[hyperexponential_snip7
|
||||
hyperexponential he = { 1.0 / 10, 1.0 / 12 };
|
||||
|
||||
assert(he.probabilities()[0] == 0.5);
|
||||
//]
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user