mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-31 13:10:19 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			140 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| [section:gamma_dist Gamma (and Erlang) Distribution]
 | |
| 
 | |
| ``#include <boost/math/distributions/gamma.hpp>``
 | |
| 
 | |
|    namespace boost{ namespace math{ 
 | |
|       
 | |
|    template <class RealType = double, 
 | |
|              class ``__Policy``   = ``__policy_class`` >
 | |
|    class gamma_distribution
 | |
|    {
 | |
|    public:
 | |
|       typedef RealType value_type;
 | |
|       typedef Policy   policy_type;
 | |
| 
 | |
|       gamma_distribution(RealType shape, RealType scale = 1)
 | |
| 
 | |
|       RealType shape()const;
 | |
|       RealType scale()const;
 | |
|    };
 | |
|    
 | |
|    }} // namespaces
 | |
|    
 | |
| The gamma distribution is a continuous probability distribution.
 | |
| When the shape parameter is an integer then it is known as the 
 | |
| Erlang Distribution.  It is also closely related to the Poisson
 | |
| and Chi Squared Distributions.
 | |
| 
 | |
| When the shape parameter has an integer value, the distribution is the
 | |
| [@http://en.wikipedia.org/wiki/Erlang_distribution Erlang distribution].
 | |
| Since this can be produced by ensuring that the shape parameter has an
 | |
| integer value > 0, the Erlang distribution is not separately implemented.
 | |
| 
 | |
| [note
 | |
| To avoid potential confusion with the gamma functions, this
 | |
| distribution does not provide the typedef:
 | |
| 
 | |
| ``typedef gamma_distribution<double> gamma;`` 
 | |
| 
 | |
| Instead if you want a double precision gamma distribution you can write 
 | |
| 
 | |
| ``boost::math::gamma_distribution<> my_gamma(1, 1);``
 | |
| ]
 | |
| 
 | |
| For shape parameter /k/ and scale parameter [theta][space] it is defined by the
 | |
| probability density function:
 | |
| 
 | |
| [equation gamma_dist_ref1]
 | |
| 
 | |
| Sometimes an alternative formulation is used: given parameters
 | |
| [alpha][space]= k and [beta][space]= 1 / [theta], then the 
 | |
| distribution can be defined by the PDF:
 | |
| 
 | |
| [equation gamma_dist_ref2]
 | |
| 
 | |
| In this form the inverse scale parameter is called a /rate parameter/.
 | |
| 
 | |
| Both forms are in common usage: this library uses the first definition
 | |
| throughout.  Therefore to construct a Gamma Distribution from a ['rate
 | |
| parameter], you should pass the reciprocal of the rate as the scale parameter.
 | |
| 
 | |
| The following two graphs illustrate how the PDF of the gamma distribution
 | |
| varies as the parameters vary:
 | |
| 
 | |
| [graph gamma1_pdf]
 | |
| 
 | |
| [graph gamma2_pdf]
 | |
| 
 | |
| The [*Erlang Distribution] is the same as the Gamma, but with the shape parameter
 | |
| an integer.  It is often expressed using a /rate/ rather than a /scale/ as the 
 | |
| second parameter (remember that the rate is the reciprocal of the scale).
 | |
| 
 | |
| Internally the functions used to implement the Gamma Distribution are
 | |
| already optimised for small-integer arguments, so in general there should
 | |
| be no great loss of performance from using a Gamma Distribution rather than
 | |
| a dedicated Erlang Distribution.
 | |
| 
 | |
| [h4 Member Functions]
 | |
| 
 | |
|    gamma_distribution(RealType shape, RealType scale = 1);
 | |
|    
 | |
| Constructs a gamma distribution with shape /shape/ and 
 | |
| scale /scale/.
 | |
| 
 | |
| Requires that the shape and scale parameters are greater than zero, otherwise calls
 | |
| __domain_error.
 | |
| 
 | |
|    RealType shape()const;
 | |
|    
 | |
| Returns the /shape/ parameter of this distribution.
 | |
|    
 | |
|    RealType scale()const;
 | |
|       
 | |
| Returns the /scale/ parameter of this distribution.
 | |
| 
 | |
| [h4 Non-member Accessors]
 | |
| 
 | |
| All the [link math_toolkit.dist_ref.nmp usual non-member accessor functions] that are generic to all
 | |
| distributions are supported: __usual_accessors.
 | |
| 
 | |
| The domain of the random variable is \[0,+[infin]\].
 | |
| 
 | |
| [h4 Accuracy]
 | |
| 
 | |
| The lognormal distribution is implemented in terms of the 
 | |
| incomplete gamma functions __gamma_p and __gamma_q and their
 | |
| inverses __gamma_p_inv and __gamma_q_inv: refer to the accuracy
 | |
| data for those functions for more information.
 | |
| 
 | |
| [h4 Implementation]
 | |
| 
 | |
| In the following table /k/ is the shape parameter of the distribution, 
 | |
| [theta][space] is its scale parameter, /x/ is the random variate, /p/ is the probability
 | |
| and /q = 1-p/.
 | |
| 
 | |
| [table
 | |
| [[Function][Implementation Notes]]
 | |
| [[pdf][Using the relation: pdf = __gamma_p_derivative(k, x / [theta]) / [theta] ]]
 | |
| [[cdf][Using the relation: p = __gamma_p(k, x / [theta]) ]]
 | |
| [[cdf complement][Using the relation: q = __gamma_q(k, x / [theta]) ]]
 | |
| [[quantile][Using the relation: x = [theta][space]* __gamma_p_inv(k, p) ]]
 | |
| [[quantile from the complement][Using the relation: x = [theta][space]* __gamma_q_inv(k, p) ]]
 | |
| [[mean][k[theta] ]]
 | |
| [[variance][k[theta][super 2] ]]
 | |
| [[mode][(k-1)[theta][space] for ['k>1] otherwise a __domain_error ]]
 | |
| [[skewness][2 / sqrt(k) ]]
 | |
| [[kurtosis][3 + 6 / k]]
 | |
| [[kurtosis excess][6 / k ]]
 | |
| ]
 | |
| 
 | |
| [endsect][/section:gamma_dist Gamma (and Erlang) Distribution]
 | |
| 
 | |
| 
 | |
| [/ 
 | |
|   Copyright 2006, 2010 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).
 | |
| ]
 | |
| 
 |