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 DistributionH
00033 #define DistributionH
00034
00035 #include <zeusmath/Stochastic/Interfaces/IDistribution.hpp>
00036 #include <zeusmath/System/Constants.h>
00037 #include <zeusbase/System/ArrayList.hpp>
00038 #include <zeusbase/System/Pair.hpp>
00039 #include <math.h>
00040
00041
00042 BEGIN_NAMESPACE_Zeus
00043
00044 typedef TPair<Float, Float> TMappedValue;
00045
00046
00051
00052 zeusmath_class TDistribution : public IDistribution
00053 {
00054 public:
00055 TDistribution(const TArrayList<Float>& rlstData, bool bDataAsProbabilities);
00056 TDistribution(const Float* pafData, Int iArraySize, bool bDataAsProbabilities);
00057 TDistribution(const Float* pafSampleData, const Float* pafProb, Int iArraySize);
00058 TDistribution(const TArrayList<TMappedValue>& rlstData);
00059 TDistribution(const TDistribution& rDist);
00060
00061 virtual ~TDistribution();
00062
00063
00064 virtual Float MQUALIFIER getEntropy() const;
00065 virtual Float MQUALIFIER getExpectedValue() const;
00066 virtual Float MQUALIFIER getMean() const;
00067 virtual Float MQUALIFIER getMedian() const;
00068 virtual Float MQUALIFIER getVariance() const;
00069 virtual Float MQUALIFIER getMode() const;
00070 virtual Float MQUALIFIER getSkewness() const;
00071 virtual Float MQUALIFIER getCumulativeProb(const Float& rfStart, const Float& rfEnd) const;
00072 virtual Float MQUALIFIER getStdDeviation() const;
00073 virtual Float MQUALIFIER getProb(const Float& rfX) const;
00074 virtual Float MQUALIFIER getSampleProb(Int iSample) const;
00075
00076
00077 const TMappedValue& getSampleConst(Int iIndex) const;
00078 TMappedValue& getSample(Int iIndex);
00079 Int getSampleCount() const;
00080 Float getSampleValue(Int iIndex) const;
00081 Float getProbabilitySum() const;
00082 Float getMaximumSampleValue() const;
00083 Float getMinimumSampleValue() const;
00084
00085
00086 static Float getMean(const TArrayList<Float>& rlstData);
00087 static Float getMean(const Float* pafData, Int iCount);
00088
00089 static Float getMedian(const TArrayList<Float>& rlstData);
00090 static Float getMedian(const Float* pafData, Int iCount);
00091 static Float getMedian(const Float* pafData, Int iCount, Float fTotalArea);
00092
00093 static Float getStdDeviation(const TArrayList<Float>& rlstData);
00094 static Float getStdDeviation(const Float* pafData, Int iCount);
00095
00096 protected:
00097
00098 private:
00100 TArrayList<TMappedValue> m_lstData;
00101
00102 void create(const Float* pafSampleData, const Float* pafProb, Int iArraySize);
00103 };
00104
00105
00106
00109
00110 inline Float MQUALIFIER TDistribution::getStdDeviation() const
00111 {
00112 return TMath::sqrt(getVariance());
00113 }
00114
00115
00118
00119 inline Float MQUALIFIER TDistribution::getProb(const Float& ) const
00120 {
00121 return 0.0;
00122 }
00123
00124
00127
00128 inline Float MQUALIFIER TDistribution::getSampleProb(Int iSample) const
00129 {
00130 return getSampleConst(iSample).getSecondConst();
00131 }
00132
00133
00138
00139 inline const TMappedValue& TDistribution::getSampleConst(Int iIndex) const
00140 {
00141 return m_lstData.getItemConst(iIndex);
00142 }
00143
00144
00149
00150 inline TMappedValue& TDistribution::getSample(Int iIndex)
00151 {
00152 return m_lstData.getItem(iIndex);
00153 }
00154
00155
00158
00159 inline Int TDistribution::getSampleCount() const
00160 {
00161 return m_lstData.getCount();
00162 }
00163
00164
00169
00170 inline Float TDistribution::getSampleValue(Int iIndex) const
00171 {
00172 return getSampleConst(iIndex).getFirstConst();
00173 }
00174
00175
00179
00180 inline Float TDistribution::getProbabilitySum() const
00181 {
00182 return getCumulativeProb(0, m_lstData.getCount()-1);
00183 }
00184
00185
00188
00189 inline Float TDistribution::getMean(const TArrayList<Float>& rlstData)
00190 {
00191 return TDistribution::getMean(rlstData.getArrayConst(), rlstData.getCount());
00192 }
00193
00194
00197
00198 inline Float TDistribution::getMedian(const TArrayList<Float>& rlstData)
00199 {
00200 return TDistribution::getMedian(rlstData.getArrayConst(), rlstData.getCount());
00201 }
00202
00203
00206
00207 inline Float TDistribution::getMedian(const Float* pafData, Int iCount)
00208 {
00209 Float fTotal = 1.0;
00210
00211 for (Int i = 0; i < iCount; i++)
00212 {
00213 fTotal += pafData[i];
00214 }
00215 return TDistribution::getMedian(pafData, iCount, fTotal);
00216 }
00217
00218
00221
00222 inline Float TDistribution::getStdDeviation(const TArrayList<Float>& rlstData)
00223 {
00224 return TDistribution::getStdDeviation(rlstData.getArrayConst(), rlstData.getCount());
00225 }
00226
00227
00228 END_NAMESPACE_Zeus
00229
00230 #endif