KrisLibrary  1.0.0
WeibullDistribution.h
1 #include <KrisLibrary/math/specialfunctions.h>
2 
3 struct WeibullDistribution : public UnivariateProbabilityDistribution
4 {
5  WeibullDistribution(Real _a,Real _b):a(_a),b(_b) {}
6  virtual void GetParameters(Vector& parameters) {
7  parameters.resize(2);
8  parameters(0)=a;
9  parameters(1)=b;
10  }
11  virtual void SetParameters(const Vector& parameters) {
12  Assert(parameters.n==2);
13  a=parameters(0);
14  b=parameters(1);
15  }
16  virtual Real PDF(Real value) {
17  return (b/a)*Pow(value/a,b-1)*Exp(-Pow(value/a,b));
18  }
19  virtual Real CDF(Real value) {
20  return 1.0 - Exp(-Pow(value/a,b));
21  }
22  virtual Real Minimum() { return 0; }
23  virtual Real Maximum() { return Inf; }
24  virtual Real Mean() { return a*Gamma(1.0+1.0/b); }
25  virtual Real Median() { return a*Pow(Log2,1.0/b); }
26  virtual Real Variance() {
27  return Sqr(a)*Gamma(1.0+2.0/b)-Sqr(Expectation());
28  }
29  virtual Real Skewness() {
30  Real s = StandardDeviation();
31  Real mu = Mean();
32  return (Gamma(1.0+3.0/b)*a*a*a - 3.0*mu*Sqr(s) - mu*mu*mu)/(s*s*s);
33  }
34  virtual Real Sample() {
35  Real x=Rand();
36  return Pow(-Log(1.0-x)/a,1.0/b);
37  }
38  virtual Real CanSample() const { return true; }
39 
40  Real a,b;
41 };
42 
Definition: WeibullDistribution.h:3
Real Rand()
Generates a random Real uniformly in [0,1].
Definition: math/random.h:36
double Gamma(double x)
Computes the gamma function.
Definition: misc.cpp:169