gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Pareto and Weibull random distributions
0 1 0
default
1 file changed with 28 insertions and 1 deletions:
↑ Collapse diff ↑
Ignore white space 4 line context
... ...
@@ -738,5 +738,5 @@
738 738
    double exponential(double lambda=1.0)
739 739
    {
740
      return -std::log(real<double>())/lambda;
740
      return -std::log(1.0-real<double>())/lambda;
741 741
    }
742 742

	
... ...
@@ -783,4 +783,31 @@
783 783
    }
784 784
    
785
    /// Weibull distribution
786

	
787
    /// This function generates a Weibull distribution random number.
788
    /// 
789
    ///\param k shape parameter (<tt>k>0</tt>)
790
    ///\param lambda scale parameter (<tt>lambda>0</tt>)
791
    ///
792
    double weibull(double k,double lambda)
793
    {
794
      return lambda*pow(-std::log(1.0-real<double>()),1.0/k);
795
    }  
796
      
797
    /// Pareto distribution
798

	
799
    /// This function generates a Pareto distribution random number.
800
    /// 
801
    ///\param x_min location parameter (<tt>x_min>0</tt>)
802
    ///\param k shape parameter (<tt>k>0</tt>)
803
    ///
804
    ///\warning This function used inverse transform sampling, therefore may
805
    ///suffer from numerical unstability.
806
    ///
807
    ///\todo Implement a numerically stable method
808
    double pareto(double x_min,double k)
809
    {
810
      return x_min*pow(1.0-real<double>(),1.0/k);
811
    }  
785 812
      
786 813
    ///@}
0 comments (0 inline)