... | ... |
@@ -840,6 +840,46 @@ |
840 | 840 |
return gauss()*std_dev+mean; |
841 | 841 |
} |
842 | 842 |
|
843 |
/// Lognormal distribution |
|
844 |
|
|
845 |
/// Lognormal distribution. The parameters are the mean and the standard |
|
846 |
/// deviation of <tt>exp(X)</tt>. |
|
847 |
/// |
|
848 |
double lognormal(double n_mean,double n_std_dev) |
|
849 |
{ |
|
850 |
return std::exp(gauss(n_mean,n_std_dev)); |
|
851 |
} |
|
852 |
/// Lognormal distribution |
|
853 |
|
|
854 |
/// Lognormal distribution. The parameter is an <tt>std::pair</tt> of |
|
855 |
/// the mean and the standard deviation of <tt>exp(X)</tt>. |
|
856 |
/// |
|
857 |
double lognormal(const std::pair<double,double> ¶ms) |
|
858 |
{ |
|
859 |
return std::exp(gauss(params.first,params.second)); |
|
860 |
} |
|
861 |
/// Compute the lognormal parameters from mean and standard deviation |
|
862 |
|
|
863 |
/// This function computes the lognormal parameters from mean and |
|
864 |
/// standard deviation. The return value can direcly be passed to |
|
865 |
/// lognormal(). |
|
866 |
std::pair<double,double> lognormalParamsFromMD(double mean, |
|
867 |
double std_dev) |
|
868 |
{ |
|
869 |
double fr=std_dev/mean; |
|
870 |
fr*=fr; |
|
871 |
double lg=std::log(1+fr); |
|
872 |
return std::pair<double,double>(std::log(mean)-lg/2.0,std::sqrt(lg)); |
|
873 |
} |
|
874 |
/// Lognormal distribution with given mean and standard deviation |
|
875 |
|
|
876 |
/// Lognormal distribution with given mean and standard deviation. |
|
877 |
/// |
|
878 |
double lognormalMD(double mean,double std_dev) |
|
879 |
{ |
|
880 |
return lognormal(lognormalParamsFromMD(mean,std_dev)); |
|
881 |
} |
|
882 |
|
|
843 | 883 |
/// Exponential distribution with given mean |
844 | 884 |
|
845 | 885 |
/// This function generates an exponential distribution random number |
0 comments (0 inline)