KrisLibrary  1.0.0
DiracDistribution.h
1 #ifndef DIRAC_PROBABILITY_DISTRIBUTION_H
2 #define DIRAC_PROBABILITY_DISTRIBUTION_H
3 
4 #include "ProbabilityDistribution.h"
5 
6 namespace Statistics {
7 
9 {
10  DiracDistribution() : value(0) {}
11  DiracDistribution(Real _value) : value(_value) {}
12  virtual void GetParameters(Vector& parameters) {
13  parameters.resize(1);
14  parameters(0) = value;
15  }
16  virtual void SetParameters(const Vector& parameters) {
17  Assert(parameters.n == 1);
18  value = parameters(0);
19  }
20  virtual Real PDF(Real _value) { if(value==_value) return 1; else return 0; }
21  virtual Real CDF(Real value) { if(value>=_value) return 1; else return 0; }
22  virtual bool IsDiscrete() { return true; }
23  virtual Real Minimum() { return value; }
24  virtual Real Maximum() { return value; }
25  virtual Real Mean() { return value; }
26  virtual Real Variance() { return 0; }
27  virtual Real Skewness() { return 0; }
28  virtual Real Kurtosis() { return 0; }
29  virtual Real Moment(int moment) {
30  if(moment == 0) return value;
31  else return 0;
32  }
33  virtual Real Sample() { return value; }
34  virtual bool CanSample() const { return true; }
35 
36  Real value;
37 };
38 
40 {
42  DiracMultivarateDistribution(const Vector& _value) : value(_value) {}
43  virtual int NumDimensions() { return value.n; }
44  virtual void GetParameters(Vector& parameters) { parameters = value; }
45  virtual void SetParameters(const Vector& parameters) { value = parameters; }
46  virtual Real PDF(const Vector& x) { if(value == x) return 1; }
47  virtual Real CDF(const Vector& x) {
48  Assert(x.n == value.n);
49  for(int i=0;i<value.n;i++)
50  if(x(i) < value(i)) return 0;
51  return 1;
52  }
53  virtual bool IsDiscrete() { return true; }
54  virtual void Minimum(Vector& bmin) { bmin=value; }
55  virtual void Maximum(Vector& bmax) { bmax=value; }
56  virtual void Mean(Vector& mean) { mean=value; }
57  virtual void Covariance(Matrix& m) { m.resize(value.n,value.n,Zero); }
58  virtual void Sample(Vector& x) { x=value; }
59  virtual bool CanSample() const { return true; }
60  virtual UnivariateProbabilityDistribution* Conditional(int var,const Vector& x) {
61  for(int i=0;i<x.n;i++) {
62  if(i!=var) Assert(x[i] == value[i]);
63  }
64  return new DiracDistribution(x[var]);
65  }
66  virtual MultivariateProbabilityDistribution* Conditional(const std::vector<int> indices,const Vector& x) {
67  vector<bool> returned(x.n,false);
68  for(size_t i=0;i<indices.size();i++)
69  returned[indices[i]]=true;
70  Vector newvalue(indices.size());
71  int k=0;
72  for(int i=0;i<x.n;i++) {
73  if(!returned[i]) Assert(x[i] == value[i]);
74  else newvalue[k++] = x[i];
75  }
76  return new DiracMultivariateDistribution(newvalue);
77  }
78 
79  Vector value;
80 };
81 
82 } //namespace Statistics
83 
84 #endif
Definition: ProbabilityDistribution.h:14
Contains all definitions in the statistics directory.
Definition: BernoulliDistribution.h:6
Definition: DiracDistribution.h:39
Definition: DiracDistribution.h:8
Definition: ProbabilityDistribution.h:41