Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef NormalDistributionH
00033 #define NormalDistributionH
00034
00035 #include <zeusmath/Stochastic/Interfaces/IDistribution.hpp>
00036 #include <zeusmath/Stochastic/Distribution.h>
00037 #include <zeusmath/System/Constants.h>
00038 #include <math.h>
00039
00040 BEGIN_NAMESPACE_Zeus
00041
00042
00046
00047 zeusmath_class TNormalDistribution : public IDistribution
00048 {
00049 public:
00050
00055
00056 inline TNormalDistribution(const Float& rfMean, const Float& rfStdDeviation)
00057 {
00058 m_fMean = rfMean;
00059 m_fStdDeviation = rfStdDeviation;
00060 if (m_fStdDeviation == 0)
00061 {
00062 m_fStdDeviation = 1;
00063 }
00064 }
00065
00066
00069
00070 virtual inline ~TNormalDistribution() {}
00071
00072
00073 TDistribution sample(Int iSamples) const;
00074 TDistribution sample(Int iSamples, Float fStart, Float fEnd) const;
00075
00076
00077 static void sampleDistribution(const Float& rfMean,
00078 const Float& rfStdDeviation,
00079 Int iSamples,
00080 const Float& rfStart,
00081 const Float& rfEnd,
00082 TArrayList<TMappedValue>& rlstData);
00083
00084 static TDistribution sampleDistribution(const Float& rfMean,
00085 const Float& rfStdDeviation,
00086 Int iSamples,
00087 const Float& rfStart,
00088 const Float& rfEnd);
00089
00090 static Float getProbability(const Float& rfMean, const Float& rfStdDeviation, const Float& rfX);
00091
00092
00093
00094 virtual Float MQUALIFIER getEntropy() const;
00095 virtual Float MQUALIFIER getExpectedValue() const;
00096 virtual Float MQUALIFIER getMean() const;
00097 virtual Float MQUALIFIER getMedian() const;
00098 virtual Float MQUALIFIER getVariance() const;
00099 virtual Float MQUALIFIER getStdDeviation() const;
00100 virtual Float MQUALIFIER getMode() const;
00101 virtual Float MQUALIFIER getSkewness() const;
00102 virtual Float MQUALIFIER getCumulativeProb(const Float& rfStart, const Float& rfEnd) const;
00103 virtual Float MQUALIFIER getProb(const Float& rfX) const;
00104 virtual Float MQUALIFIER getSampleProb(Int iSample) const;
00105
00106 private:
00108 Float m_fStdDeviation;
00110 Float m_fMean;
00111
00112 static Float getCumulativeProb_internal(const Float& rfEnd);
00113 };
00114
00115
00116
00117
00124
00125 inline TDistribution TNormalDistribution::sample(Int iSamples) const
00126 {
00127 return TNormalDistribution::sampleDistribution(m_fMean,
00128 m_fStdDeviation,
00129 iSamples,
00130 m_fMean - 3.0*m_fStdDeviation,
00131 m_fMean + 3.0*m_fStdDeviation);
00132 }
00133
00134
00142
00143 inline TDistribution TNormalDistribution::sample(Int iSamples, Float fStart, Float fEnd) const
00144 {
00145 return TNormalDistribution::sampleDistribution(m_fMean,
00146 m_fStdDeviation,
00147 iSamples,
00148 fStart,
00149 fEnd);
00150 }
00151
00152
00155
00156 inline Float MQUALIFIER TNormalDistribution::getEntropy() const
00157 {
00158 return TMath::ln(m_fStdDeviation * TMath::sqrt(2 * TConstants::Pi * TMath::exp(1)));
00159 }
00160
00161
00164
00165 inline Float MQUALIFIER TNormalDistribution::getExpectedValue() const
00166 {
00167 return m_fMean;
00168 }
00169
00170
00173
00174 inline Float MQUALIFIER TNormalDistribution::getMean() const
00175 {
00176 return m_fMean;
00177 }
00178
00179
00182
00183 inline Float MQUALIFIER TNormalDistribution::getMedian() const
00184 {
00185 return m_fMean;
00186 }
00187
00188
00191
00192 inline Float MQUALIFIER TNormalDistribution::getVariance() const
00193 {
00194 return m_fStdDeviation*m_fStdDeviation;
00195 }
00196
00197
00200
00201 inline Float MQUALIFIER TNormalDistribution::getStdDeviation() const
00202 {
00203 return m_fStdDeviation;
00204 }
00205
00206
00209
00210 inline Float MQUALIFIER TNormalDistribution::getMode() const
00211 {
00212 return m_fMean;
00213 }
00214
00215
00218
00219 inline Float MQUALIFIER TNormalDistribution::getSkewness() const
00220 {
00221 return 0.0;
00222 }
00223
00224
00227
00228 inline Float MQUALIFIER TNormalDistribution::getProb(const Float& rfX) const
00229 {
00230 return TNormalDistribution::getProbability(m_fMean, m_fStdDeviation, rfX);
00231 }
00232
00233
00236
00237 inline Float MQUALIFIER TNormalDistribution::getSampleProb(Int iSample) const
00238 {
00239 return TNormalDistribution::getProbability(m_fMean, m_fStdDeviation, iSample);
00240 }
00241
00242
00246
00247 inline Float TNormalDistribution::getProbability(const Float& rfMean, const Float& rfStdDeviation, const Float& rfX)
00248 {
00249 Float fVal1 = (rfX - rfMean)/ rfStdDeviation;
00250 return 1.0 / (TMath::sqrt(2.0 * TConstants::Pi) * rfStdDeviation) * TMath::exp(-0.5 * fVal1 * fVal1);
00251 }
00252
00253 END_NAMESPACE_Zeus
00254
00255 #endif