mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | // 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) && !(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 }; | ||
|  | 
 | ||
|  |    assert(he.probabilities()[0] == 0.5); | ||
|  |    //]
 | ||
|  |    } | ||
|  | #endif
 | ||
|  |    return 0; | ||
|  | } |