KrisLibrary  1.0.0
ProbabilityDistribution.h
1 #ifndef PROBABILITY_DISTRIBUTION_H
2 #define PROBABILITY_DISTRIBUTION_H
3 
5 #include <KrisLibrary/math/vector.h>
6 #include <KrisLibrary/math/matrix.h>
7 #include <errors.h>
8 #include <vector>
9 
10 namespace Statistics {
11 
12  using namespace Math;
13 
15 {
17  virtual void GetParameters(Vector& parameters)=0;
18  virtual void SetParameters(const Vector& parameters)=0;
19  virtual Real PDF(Real value)=0;
20  virtual Real CDF(Real value)=0;
21  virtual bool IsDiscrete() { return false; }
22  virtual Real Minimum() { return -Inf; }
23  virtual Real Maximum() { return Inf; }
24  virtual Real Mean()=0;
25  virtual Real StandardDeviation() { return Sqrt(Variance()); }
26  virtual Real Variance() { FatalError("Variance not defined"); return 0; }
27  virtual Real Skewness() { FatalError("Skewness not defined"); return 0; }
28  virtual Real Kurtosis() { FatalError("Kurtosis not defined"); return 0; }
29  virtual Real Moment(int moment) {
30  if(moment == 0) return Mean();
31  else if(moment == 1) return Variance();
32  else if(moment == 2) return Skewness();
33  else if(moment == 3) return Kurtosis();
34  else FatalError("Moment %d not defined",moment);
35  return 0;
36  }
37  virtual Real Sample() { return 0; }
38  virtual bool CanSample() const { return false; }
39 };
40 
42 {
44  virtual void GetParameters(Vector& parameters)=0;
45  virtual void SetParameters(const Vector& parameters)=0;
46  virtual int NumDimensions()=0;
47  virtual Real PDF(const Vector& value)=0;
48  virtual Real CDF(const Vector& value)=0;
49  virtual bool IsDiscrete() { return false; }
50  virtual void Minimum(Vector& bmin) { bmin.resize(NumDimensions(),-Inf); }
51  virtual void Maximum(Vector& bmax) { bmax.resize(NumDimensions(),Inf); }
52  virtual void Mean(Vector& mean)=0;
53  virtual void Covariance(Matrix& var) { FatalError("Covariance not defined");}
54  virtual void Sample(Vector& x) { }
55  virtual bool CanSample() const { return false; }
56  //returns the probability distribution on x[index] conditional on
57  //the other x[i] as a dirac distribution
58  virtual UnivariateProbabilityDistribution* Conditional(int index,const Vector& x) { return NULL; }
59  //returns the probability distribution on x[indices] conditional on
60  //the other x[i] as a dirac distribution
61  virtual MultivariateProbabilityDistribution* Conditional(const std::vector<int> indices,const Vector& x) { return NULL; }
62 };
63 
64 
65 } //namespace Statistics
66 
67 #endif
Common math typedefs, constants, functions.
Real Sample(const Interval &s)
Uniformly samples the given intervals.
Definition: sample.cpp:116
Definition: ProbabilityDistribution.h:14
Contains all definitions in the statistics directory.
Definition: BernoulliDistribution.h:6
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
Definition: ProbabilityDistribution.h:41