1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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());
BOOST_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);
BOOST_ASSERT(he.probabilities()[0] == 0.5); // Phase probabilities will be equal and normalised to unity.
//]
}
#endif
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) && !(defined(BOOST_GCC_VERSION) && (BOOST_GCC_VERSION < 40500))
{
//[hyperexponential_snip6
hyperexponential he = { { 0.5, 0.5 }, { 1.0 / 10, 1.0 / 12 } };
//]
}
{
//[hyperexponential_snip7
hyperexponential he = { 1.0 / 10, 1.0 / 12 };
BOOST_ASSERT(he.probabilities()[0] == 0.5);
//]
}
#endif
return 0;
}
|