Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Distributions.h

Go to the documentation of this file.
00001 /***************************************************************************
00002                                                 Distributions.h  -  description
00003                                                  -------------------
00004                 begin                           : Wed Apr 25 2001
00005                 copyright                       : (C) 2001 by Reinhold Kainhofer
00006                 email                           : reinhold@kainhofer.com
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *
00011  *  This program is free software; you can redistribute it and/or modify
00012  *  it under the terms of the GNU General Public License as published by
00013  *  the Free Software Foundation; either version 2 of the License, or
00014  *  (at your option) any later version.
00015  *
00016  ***************************************************************************/
00017 
00018 
00019 #ifndef DISTRIBUTIONS_H
00020 #define DISTRIBUTIONS_H
00021 #include <math.h>
00022 #include <string>
00023 #include "BaseDefinitions.h"
00024 
00025 #define RANGE_NONE                              -1
00026 #define RANGE_MININF_INF                0
00027 #define RANGE_0_INF                             1
00028 #define RANGE_0_1                               2
00029 #define RANGE_PARA1_PARA2       3
00030 #define RANGE_0_PARA1                   4
00031 #define RANGE_PARA1_INF         5
00032 #define RANGE_PARA2_INF         6
00033 #define RANGE_PARA3_INF         7
00034 #define RANGE_PARA1P1_INF       8
00035 
00036 #define INFINITY 10e+300
00037 #define inf INFINITY
00038 #define MOMENT_NONE INFINITY
00039 
00040 
00041 #define USE_EXP_DIST                            1
00042 #define USE_GAMMA_DIST                  2
00043 #define USE_NORMAL_DIST                 3
00044 #define USE_LOGNORMAL_DIST      4
00045 #define USE_PARETO0_DIST                        5
00046 #define USE_WEIBULL_DIST                        6
00047 
00048 
00049 // Mathematical function to be defined somewhere else...
00050 //Zahl IncompleteBeta( Zahl p1, Zahl p2, Zahl p3) {return 0;}//TODO
00051 //Zahl IncompleteGamma(Zahl p1,Zahl p2) {return 0;} //TODO
00052 #define IncompleteBeta( p1, p2, p3)     0
00053 #define IncompleteGamma(p1,p2) 0
00054 #define tgamma(x) exp(lgamma(x))
00055 
00056 
00057 
00058 
00059 /* =================================================================================== */
00060 
00061 
00062 
00063 
00068 class Distribution {
00069 protected:
00070         Zahl param[4];
00071         int paramnr;
00072 public:
00073         Distribution(int paramnumber=0, Zahl para=0, Zahl para1=0){param[0]=para; param[1]=para1; paramnr=paramnumber;};
00074         virtual ~Distribution(){};
00077         virtual string DistributionName(){return "Generic";};
00078         virtual string DistributionShortName(){ return DistributionName().substr(0,3);}
00081         virtual Zahl pdf(Zahl y) {return pdf(y, param[0]);};
00082         virtual Zahl pdf(Zahl y, Zahl para) {return pdf(y, para, param[1]);};
00083         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1)=0;
00086         virtual Zahl Transform(Zahl y) {return Transform(y,param[0]);}; // transforms uniformly distributed variate into a variable distributed according to this distribution
00087         virtual Zahl Transform(Zahl y, Zahl para) {return Transform(y,para, param[1]);};        // transforms uniformly distributed variate into a variable distributed according to this distribution
00088         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1) =0;
00091         virtual inline Zahl TransformCut(Zahl y, Zahl cut) {return TransformCut(y, cut, param[0]);};
00092         virtual inline Zahl TransformCut(Zahl y, Zahl cut, Zahl para) {return TransformCut(y, cut, para, param[1]);};
00093         virtual inline Zahl TransformCut(Zahl y, Zahl cut, Zahl para, Zahl para1) {Zahl res=Transform(y*cdf(cut, para, para1), para, para1); if ((res>cut) && (res-cut<0.005)) res=cut; return res;};
00096         virtual inline void SetParameter(Zahl para, int nr=0) {if (0<=nr && nr<paramnr) param[nr]=para;};
00099         virtual inline Zahl GetParameter(int nr=0){if (0<=nr && nr<paramnr) return param[nr]; else return 0;};
00102         virtual Zahl cdf(Zahl y) {return cdf(y,param[0]);};
00103         virtual Zahl cdf(Zahl y, Zahl para) {return cdf(y,para, param[1]);};
00104         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) =0;
00107         virtual Zahl cdfc(Zahl y) {return cdfc(y, param[0]);}
00108         virtual Zahl cdfc(Zahl y, Zahl para) {return cdfc(y, para, param[1]);}
00109         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return 1-cdf(y, para, para1);}
00110 
00111         virtual int Range()=0;
00112         virtual int ParameterRange(int paranr) =0;
00113         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1)=0;
00114         virtual Zahl Moment(int k, Zahl para, Zahl para1)=0;
00115         virtual Zahl Mean() {return Mean(param[0], param[1]);};
00116         virtual Zahl Mean(Zahl para, Zahl para1) {return Moment(1,para,para1);};
00117         virtual Zahl Variance(Zahl para, Zahl para1) {return Moment(2,para,para1);};
00118         virtual Zahl StdDeviation(Zahl para, Zahl para1) {Zahl vari=Variance(para,para1); if (vari==MOMENT_NONE) return MOMENT_NONE; else return sqrt(vari);}
00119         virtual Zahl Skewness(Zahl para, Zahl para1) {return Moment(3,para,para1);};
00120         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return Moment(4,para,para1);};
00121         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1)=0;
00122         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1)=0;
00123         virtual Zahl Median(Zahl para, Zahl para1)=0;
00124         virtual Zahl Q1(Zahl para, Zahl para1)=0;
00125         virtual Zahl Q3(Zahl para, Zahl para1)=0;
00126         virtual Zahl Mode(Zahl para, Zahl para1)=0;
00127         virtual Zahl qMean(Zahl para, Zahl para1)=0;
00128         virtual Zahl qMode(Zahl para, Zahl para1)=0;
00129 };
00130 //TODO: Discrete distributions
00131 class DistDiscrete : public Distribution {
00132 };
00133 
00134 
00135 class DistTemplate : public Distribution {
00136 public:
00137         DistTemplate(Zahl para=0, Zahl para1=0) : Distribution(0,para, para1){}
00138         virtual ~DistTemplate(){};
00139         virtual string DistributionName(){return "Template";};
00140         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00141         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1)   {return 0;} //TODO
00142         virtual inline Zahl TransformCut(Zahl y, Zahl cut, Zahl para, Zahl para1) {return Transform(y*cdf(cut, para, para1), para, para1);};
00143         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00144         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return 1-cdf(y, para, para1);}
00145 
00146         virtual int Range() {return 0;} //TODO
00147         virtual int ParameterRange(int paranr) {return 0;} //TODO;
00148         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00149         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00150         virtual Zahl Mean(Zahl para, Zahl para1) {return Moment(1,para,para1);};
00151         virtual Zahl Variance(Zahl para, Zahl para1) {return Moment(2,para,para1);};
00152         virtual Zahl Skewness(Zahl para, Zahl para1) {return Moment(3,para,para1);};
00153         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return Moment(4,para,para1);};
00154         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00155         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00156         virtual Zahl Median(Zahl para, Zahl para1) {return 0;} //TODO
00157         virtual Zahl Q1(Zahl para, Zahl para1) {return 0;} //TODO
00158         virtual Zahl Q3(Zahl para, Zahl para1) {return 0;} //TODO
00159         virtual Zahl Mode(Zahl para, Zahl para1) {return 0;} //TODO
00160         virtual Zahl qMean(Zahl para, Zahl para1) {return 0;} //TODO
00161         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;} //TODO
00162 };
00163 
00164 
00165 class DistBeta : public Distribution {
00166 public:
00167         DistBeta(Zahl para=0, Zahl para1=0, Zahl para2=0, Zahl para3=0) : Distribution(4,para, para1){ param[2]=para2; param[3]=para3;}
00168         virtual ~DistBeta(){};
00169         virtual string DistributionName(){return "Beta";}
00170         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) {return tgamma(param[2]+param[3])/(tgamma(param[2])*tgamma(param[3])*pow(param[1]-param[0], param[2]+param[3]-1)) *pow(y-param[0], param[2]-1)*pow(param[1]-y, param[3]-1);}
00171         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1)   {return 0;} //TODO numerically???
00172         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return IncompleteBeta( (y-para)/(para1-para), param[2], param[3]);}
00173 
00174         virtual int Range() {return RANGE_PARA1_PARA2;}
00175         virtual int ParameterRange(int paranr)  { switch (paranr) {
00176                 case 1: case 2: return RANGE_MININF_INF;
00177                 case 3: case 4: return RANGE_0_INF;
00178                 default: return RANGE_NONE;} }
00179         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00180         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO numerically
00181         virtual Zahl Mean(Zahl para, Zahl para1) {return (para*param[3] + para1*param[2])/(param[2]+param[3]);}
00182         virtual Zahl Variance(Zahl para, Zahl para1) {return (param[2]*param[3]*(para1-para)*(para1-para) ) / ( (param[2]+param[3]+1)*(param[2]+param[3])*(param[2]+param[3]) );}
00183         virtual Zahl StdDeviation(Zahl para, Zahl para1) {return Moment(2, para,para1);}//TODO
00184         virtual Zahl Skewness(Zahl para, Zahl para1) {
00185                                  Zahl C=param[2],D=param[3];
00186                                  return (2*C*D*(D-C))   /       ( pow(C+D, 3) * (C+D+1) * (C+D+2) * sqrt(pow((C*D)/( (C+D)*(C+D)*(C+D+1)), 3)) ); }
00187         virtual Zahl Kurtosis(Zahl para, Zahl para1) {
00188                                  Zahl C=param[2],D=param[3];
00189                                  return 3*( ( (C*C*(D+2) + 3*D*D + C*D*(D-2))*(C+D+1)) / (C*D*(C+D+2)*(C+D+3) ) -1);}
00190         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00191         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00192         virtual Zahl Median(Zahl para, Zahl para1) {return 0;} //TODO no simple closed form
00193         virtual Zahl Q1(Zahl para, Zahl para1) {return 0;} //TODO no simple closed form
00194         virtual Zahl Q3(Zahl para, Zahl para1) {return 0;} //TODO no simple closed form
00195         virtual Zahl Mode(Zahl para, Zahl para1) {Zahl A=para, B=para1, C=param[2],D=param[3];
00196                                  if (C==1 && D==1) return -inf;
00197                                  else return (A*(D-1) + B*(C-1))/(C+D-2); }
00198         virtual Zahl qMean(Zahl para, Zahl para1) {return 0;} //TODO no simple closed form
00199         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;} //TODO no simple closed form
00200 };
00201 
00202 // Beta(0,1,C,1) is often called the Power-function distribution.
00203 //class DistPowerFunction : public DistBeta {
00204 
00205 //TODO: Discrete distributions
00206 //class DistBinomial : public DistDiscrete {
00207 //      DistDiscrete(Zahl para=0.5,
00208 
00209 // The Bradford distribution has been used to model the distribution of references among several sources
00210 class DistBradford : public Distribution {
00211 public:
00212         DistBradford(Zahl para=0, Zahl para1=1, Zahl para2=5) : Distribution(3,para, para1){param[2]=para2;}
00213         virtual ~DistBradford(){}
00214         virtual string DistributionName(){return "Bradford";}
00215         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return param[2]/( (param[2]*(y-para) + para1 - para) * log(param[2]+1) );}
00216         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1) { return (para*(param[2]+1) - para1 + (para1-para)*pow(param[2]+1, y) ) / param[2];}
00217 //      virtual inline Zahl TransformCut(Zahl y, Zahl cut, Zahl para, Zahl para1) {return Transform(y*cdf(cut, para, para1), para, para1);};
00218         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) { return log(1+ (param[2]*(y-para))/(para1-para) )      / log(param[2]+1);}
00219 
00220         virtual int Range() {return RANGE_PARA1_PARA2;};
00221         virtual int ParameterRange(int paranr)  {switch (paranr) {
00222                                  case 1: case 2: return RANGE_MININF_INF;
00223                                  case 3: return RANGE_0_INF;
00224                                  default: return RANGE_NONE;} }
00225         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO, nicht angegegben
00226         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO, nicht angegeben
00227         virtual Zahl Mean(Zahl para, Zahl para1) {
00228                                 Zahl A=para, B=para1, C=param[2], k;
00229                                  k=log(C+1);
00230                                  return (C*(B-A) + k*( A*C+A-B) ) / (C*k);}
00231         virtual Zahl Variance(Zahl para, Zahl para1) {
00232                                  Zahl A=para, B=para1, C=param[2], k;
00233                                  k=log(C+1);
00234                                  return (B-A)*(B-A) *( C*(k-2) + 2*k)   / (2*C*k*k);}
00235         virtual Zahl StdDeviation(Zahl para, Zahl para1) {return Moment(2, para,para1);};//TODO
00236         virtual Zahl Skewness(Zahl para, Zahl para1) {
00237                                 Zahl C=param[2], k;
00238                                  k=log(C+1);
00239                                  return M_SQRT2* (12*C*C - 9*k*C*(C+2) + 2*k*k*(C*(C+3)+3) ) / (sqrt(C*(C*(k-2)+2*k))*(3*C*(k-2)+6*k) );}
00240         virtual Zahl Kurtosis(Zahl para, Zahl para1) {
00241                                  Zahl C=param[2], k;
00242                                  k=log(C+1);
00243                                  return (C*C*C*(k-3)*(k*(3*k-16)+24) + 12*k*C*C*(k-4)*(k-3) + 6*C*k*k*(3*k-14) + 12*k*k*k) / (3*C*pow(C*(k-2) + 2*k, 2) );}
00244         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;}// TODO, nicht angegeben
00245         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO, nicht angegeben
00246         virtual Zahl Median(Zahl para, Zahl para1) {return (para*(param[2]+1) - para1 + (para1-para)*sqrt(param[2]+1)) / param[2];}
00247         virtual Zahl Q1(Zahl para, Zahl para1) { return (para*(param[2]+1)-para1+(para1-para)*sqrt(sqrt(param[2]+1)) ) / param[2];}
00248         virtual Zahl Q3(Zahl para, Zahl para1) { return (para*(param[2]+1)-para1+(para1-para)*sqrt(sqrt(pow(param[2]+1, 3) )) ) / param[2];}
00249         virtual Zahl Mode(Zahl para, Zahl para1) {return para;}
00250         virtual Zahl qMean(Zahl para, Zahl para1) {Zahl C=param[2]; return log(C/log(C+1)) / log(C+1);}
00251         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;}
00252 };
00253 
00254 
00255 // class DistBurr //TODO
00256 
00257 // U,V ~ Normal(0,1)    -> U/V~Cauchy(0,1)
00258 // Z~Cauchy -> W=1/(a+b*Z) ~Cauchy
00259 // The Cauchy distribution is sometimes called the Lorentz distribution
00260 
00261 class DistCauchy : public Distribution {
00262 public:
00263         DistCauchy(Zahl para=0, Zahl para1=1) : Distribution(2,para, para1){}
00264         virtual ~DistCauchy(){}
00265         virtual string DistributionName(){return "Cauchy";};
00266         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) {return 1/(M_PI*para1*(1+pow((y-para)/para1, 2)) ); };
00267         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1)   {return para + para*tan(M_PI*(y-0.5));};
00268 //      virtual inline Zahl TransformCut(Zahl y, Zahl cut, Zahl para, Zahl para1) {return Transform(y*cdf(cut, para, para1), para, para1);};
00269         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return 0.5+1/M_PI*atan( (y-para)/para1 );};
00270 
00271         virtual int Range() { return RANGE_MININF_INF;};
00272         virtual int ParameterRange(int paranr)  { if (paranr==0) return RANGE_MININF_INF; if (paranr==1) return RANGE_0_INF; return RANGE_NONE;};
00273         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return MOMENT_NONE;}
00274         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return MOMENT_NONE;};
00275         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO, nicht angegeben
00276         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} // TODO: nicht angegeben
00277         virtual Zahl Median(Zahl para, Zahl para1) {return para;};
00278         virtual Zahl Q1(Zahl para, Zahl para1) {return para-para1;};
00279         virtual Zahl Q3(Zahl para, Zahl para1) {return para+para1;};
00280         virtual Zahl Mode(Zahl para, Zahl para1) {return para;};
00281         virtual Zahl qMean(Zahl para, Zahl para1) {return MOMENT_NONE;};
00282         virtual Zahl qMode(Zahl para, Zahl para1) {return 0.5;};
00283 };
00284 #define DistLorentz DistChauchy
00285 
00286 /* =================================================================================== */
00287 
00288 
00289 
00290 
00291 
00292 
00296 class DistExp : public Distribution {
00297 public:
00302         DistExp(Zahl lamb=1, Zahl para=0):Distribution(2, lamb, 0) {}
00303         virtual ~DistExp() {}
00304         virtual string DistributionName(){return "Exponential";};
00308         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return para*exp(para*(para1-y) );}
00311         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1) {return para1-log(1-y)/para;};
00312         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return 1-exp(para*(para1-y));}
00313         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return exp(para*(para1-y) );}
00314         virtual int Range() {return RANGE_PARA2_INF;}
00315         virtual int ParameterRange(int paranr) {if (paranr==1) return RANGE_0_INF; if (paranr==2) return RANGE_MININF_INF; return RANGE_NONE;}
00316         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00317         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00318         virtual Zahl Mean(Zahl para, Zahl para1) {return 1/para+para1;}
00319         virtual Zahl Variance(Zahl para, Zahl para1) {return 1/(para*para);}
00320         virtual Zahl Skewness(Zahl para, Zahl para1) {return 2;}
00321         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return 6;}
00322         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00323         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00324         virtual Zahl Median(Zahl para, Zahl para1) {return para1+ log(2)/para;}
00325         virtual Zahl Q1(Zahl para, Zahl para1) {return para1+log(4/3)/para;}
00326         virtual Zahl Q3(Zahl para, Zahl para1) {return para1+log(4)/para;}
00327         virtual Zahl Mode(Zahl para, Zahl para1) {return para1;}
00328         virtual Zahl qMean(Zahl para, Zahl para1) {return (M_E-1)/M_E;}
00329         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;}
00330 };
00331 
00332 
00333 
00334 
00335 // Gamma(A,B,C) where C is an integer, is the Erlang distributions
00336 // Gamma(A,B,1) is the exponential distribution
00337 // Gamma(0,2,nu/2) is the Chi-square distribution with nu degrees of freedom
00338 
00339 // if Z_1 ~Gamma(A,B,C_1) and Z_2~Gamma(A,B,C_2)        => (Z_1+Z_2)~Gamma(A,B,C_1+C_2)
00340 // Z_1, ... Z_nu ~Normal(0,1)   => W=sum_{k=1}^{nu} Z_k^2 ~Gamma(0,2,nu/2)
00341 // Z_1, ... Z_n ~Exp(lambda, A) => W=sum_{k=1}^{nu} Z_k ~Erlang(A, 1/lambda, n)
00342 
00346 class DistGamma : public Distribution {
00347 public:
00350         DistGamma(Zahl al=1, Zahl be=1, Zahl A=0):Distribution(3, al, be) {param[2]=A;}
00351         virtual ~DistGamma() {}
00352         virtual string DistributionName(){return "Gamma";}
00358         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return 1/(para1*tgamma(para))*pow( (y-param[2])*para1,para-1)*exp( (param[2]-y)*para1); }
00361         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1);
00364         virtual Zahl TransformCut(Zahl y, Zahl cut, Zahl para, Zahl para1);
00365         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return IncompleteGamma(para, (y-param[2])*para1);}
00366 
00367         virtual int Range() {return RANGE_PARA3_INF;}
00368         virtual int ParameterRange(int paranr) {switch (paranr) {
00369                                 case 1: return RANGE_MININF_INF;
00370                                 case 2: case 3: return RANGE_0_INF;
00371                                 default: return RANGE_NONE;} }
00372         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00373         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00374         virtual Zahl Mean(Zahl para, Zahl para1) {return param[2] + para/para1;}
00375         virtual Zahl Variance(Zahl para, Zahl para1) {return para/(para1*para1);}
00376         virtual Zahl Skewness(Zahl para, Zahl para1) {return 2/sqrt(para);}
00377         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return 6/para;}
00378         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00379         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00380         virtual Zahl Median(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00381         virtual Zahl Q1(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00382         virtual Zahl Q3(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00383         virtual Zahl Mode(Zahl para, Zahl para1) {return param[2]+ (para-1)/para1;}
00384         virtual Zahl qMean(Zahl para, Zahl para1) {return IncompleteGamma(param[0], param[0]);}
00385         virtual Zahl qMode(Zahl para, Zahl para1) {return IncompleteGamma(param[0], param[0]-1);}
00386 };
00387 
00388 
00389 
00390 
00391 class DistLaplace : public DistExp {
00392 public:
00393         DistLaplace(Zahl lamb=1, Zahl para=0):DistExp(lamb, para) {}
00394         virtual ~DistLaplace(){}
00395         virtual string DistributionName(){return "Laplace";};
00396         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) {return 1/2.*DistExp::pdf(fabs(y), para, para1);}
00397         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1) { Zahl u=2*y-1; if (u<0) return -DistExp::Transform(-u,para,para1); else return DistExp::Transform(u,para,para1);}
00398         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {if (y<para1) return 0.5*exp(para*(y-para1)); else return 1-0.5*exp(para*(para1-y));}
00399 
00400         virtual int Range() {return RANGE_MININF_INF;}
00401         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00402         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00403         virtual Zahl Mean(Zahl para, Zahl para1) {return para1;}
00404         virtual Zahl Variance(Zahl para, Zahl para1) {return 2/(para*para);}
00405         virtual Zahl Skewness(Zahl para, Zahl para1) {return 0;}
00406         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return 3;}
00407         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00408         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00409         virtual Zahl Median(Zahl para, Zahl para1) {return para1;}
00410         virtual Zahl Q1(Zahl para, Zahl para1) {return para1-log(2)/para;}
00411         virtual Zahl Q3(Zahl para, Zahl para1) {return para1+log(2)/para;}
00412         virtual Zahl Mode(Zahl para, Zahl para1) {return para1;}
00413         virtual Zahl qMean(Zahl para, Zahl para1) {return 0.5;}
00414         virtual Zahl qMode(Zahl para, Zahl para1) {return 0.5;}
00415 };
00416 #define DistDoubleExponential DistLaplace
00417 #define DistBilateralExponential DistLaplace
00418 
00419 
00420 
00421 /* ================================================================================== */
00422 
00423 
00424 
00425 
00429 class DistNormal : public Distribution {
00430 public:
00431         DistNormal(Zahl mm=0, Zahl ss=1) : Distribution(2, mm, ss) {}
00432         virtual ~DistNormal() {}
00433         virtual string DistributionName(){return "Normal (Gauss)";};
00434         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return M_1SQRT2PI/para1*exp(-(y-para)*(y-para)/(2*para1*para1));};
00435         virtual Zahl Transform(Zahl y, Zahl mm, Zahl ss);
00438         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1);
00439         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return cdf(-y, para, para1);}
00440 
00441         virtual int Range() {return RANGE_MININF_INF;}
00442         virtual int ParameterRange(int paranr) {if (paranr==1) return RANGE_MININF_INF; if (paranr==2) return RANGE_0_INF; return RANGE_NONE;}
00443         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00444         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00445         virtual Zahl Mean(Zahl para, Zahl para1) {return para;}
00446         virtual Zahl Variance(Zahl para, Zahl para1) {return para1*para1;}
00447         virtual Zahl Skewness(Zahl para, Zahl para1) {return 0;}
00448         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return 0;}
00449         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00450         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00451         virtual Zahl Median(Zahl para, Zahl para1) {return para;}
00452         virtual Zahl Q1(Zahl para, Zahl para1) {return para-0.6745*para1;}
00453         virtual Zahl Q3(Zahl para, Zahl para1) {return para+0.6745*para1;}
00454         virtual Zahl Mode(Zahl para, Zahl para1) {return para;}
00455         virtual Zahl qMean(Zahl para, Zahl para1) {return 0.5;}
00456         virtual Zahl qMode(Zahl para, Zahl para1) {return 0.5;}
00457 };
00458 #define DistGauss DistNormal
00459 
00460 // Z~Normal(A,B)        =>      |Z| ~FoldedNormal(A,B)
00461 class DistFoldedNormal : public DistNormal {
00462 public:
00463         DistFoldedNormal(Zahl mm=0, Zahl ss=1) : DistNormal(mm, ss) {}
00464         virtual ~DistFoldedNormal() {}
00465         virtual string DistributionName(){return "Folded Normal";};
00466         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return M_SQRT2/(para1*M_SQRTPI)*cosh(para*y/(para1*para1) )*exp(-0.5*(y*y+para*para)/(para1*para1));};
00467         virtual Zahl Transform(Zahl y, Zahl mm, Zahl ss) {return 0;} //TODO
00470         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) { return DistNormal::cdf(y, para, para1)-DistNormal::cdf(-y, para, para1);}
00471         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return 1-cdf(y, para, para1);}
00472 
00473         virtual int Range() {return RANGE_0_INF;}
00474         virtual int ParameterRange(int paranr) {if (paranr==1) return RANGE_MININF_INF; if (paranr==2) return RANGE_0_INF; return RANGE_NONE;}
00475         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00476         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00477         virtual Zahl Mean(Zahl para, Zahl para1) {return 0;} //TODO
00478         virtual Zahl Variance(Zahl para, Zahl para1) {return 0;} //TODO
00479         virtual Zahl Skewness(Zahl para, Zahl para1) {return 0;} //TODO
00480         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return 0;} //TODO
00481         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00482         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00483         virtual Zahl Median(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00484         virtual Zahl Q1(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00485         virtual Zahl Q3(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00486         virtual Zahl Mode(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00487         virtual Zahl qMean(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00488         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00489 };
00490 
00491 // Special case of Chi and Folded Normal distribution
00492 class DistHalfNormal : public DistNormal {
00493 public:
00494         DistHalfNormal(Zahl mm=0, Zahl ss=1) : DistNormal(mm, ss) {}
00495         virtual ~DistHalfNormal() {}
00496         virtual string DistributionName(){return "Half Normal";};
00497         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) {return 2*DistNormal::pdf(y,para,para1);}
00498         virtual Zahl Transform(Zahl y, Zahl mm, Zahl ss) {return DistNormal::Transform(y/2.+0.5, mm, ss);}
00501         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) { return 2*DistNormal::cdf(y,para,para1) - 1;}
00502         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return 2*DistNormal::cdf(y,para,para1);}
00503 
00504         virtual int Range() {return RANGE_PARA1_INF;}
00505         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00506         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00507         virtual Zahl Mean(Zahl para, Zahl para1) {return para+para1*M_SQRT2/M_SQRTPI;}
00508         virtual Zahl Variance(Zahl para, Zahl para1) {return para1*para1*(1-2/M_PI);}
00509         virtual Zahl Skewness(Zahl para, Zahl para1) {return M_SQRT2*(4-M_PI) / sqrt(pow(M_PI-2, 2));}// TODO: return precalculated value
00510         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return 8*(M_PI-3)/ ( (M_PI-2)*(M_PI-2) );} // TODO: return precalculated value
00511         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00512         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00513         virtual Zahl Median(Zahl para, Zahl para1) {return para+0.6745*para1;}
00514         virtual Zahl Q1(Zahl para, Zahl para1) {return para+0.3286*para1;}
00515         virtual Zahl Q3(Zahl para, Zahl para1) {return para+1.150*para1;}
00516         virtual Zahl Mode(Zahl para, Zahl para1) {return para;}
00517         virtual Zahl qMean(Zahl para, Zahl para1) {return 0.5751;}
00518         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;}
00519 };
00520 
00521 
00525 class DistLogNormal : public DistNormal {
00526 public:
00527         DistLogNormal(Zahl mm=0, Zahl ss=1):DistNormal(mm,ss) {};
00528         virtual ~DistLogNormal() {};
00529         virtual string DistributionName(){return "LogNormal";};
00530         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return DistNormal::pdf(log(y), para,para1)/y;};
00531         virtual Zahl Transform(Zahl y, Zahl mm, Zahl ss) {return exp(DistNormal::Transform(y,mm,ss));};
00532         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) { return DistNormal::cdf(log(y), para, para1);}
00533 
00534         virtual int Range() {return RANGE_0_INF;}
00535         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00536         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00537         virtual Zahl Mean(Zahl para, Zahl para1) {return exp(para+para1*para1/2);}
00538         virtual Zahl Variance(Zahl para, Zahl para1) {return exp(2*para+para1*para1) * (exp(para1*para1) - 1);}
00539         virtual Zahl Skewness(Zahl para, Zahl para1) {return (M_E+2) *sqrt(M_E-1);} // TODO: return precalculated value
00540         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return M_E*M_E*M_E*M_E + 3*M_E*M_E*M_E + 3*M_E*M_E - 6;} //TODO: return precalculated value
00541         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00542         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00543         virtual Zahl Median(Zahl para, Zahl para1) {return exp(para);}
00544         virtual Zahl Q1(Zahl para, Zahl para1) {return exp(para-0.6745*para1);}
00545         virtual Zahl Q3(Zahl para, Zahl para1) {return exp(para+0.6745*para1);}
00546         virtual Zahl Mode(Zahl para, Zahl para1) {return exp(para-para1*para1);}
00547         virtual Zahl qMean(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00548         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;} //TODO, no simple closed form
00549 };
00550 #define DIstCobbDouglas DistLogNormal
00551 #define DistAntiLogNormal DistLogNormal
00552 
00553 
00557 class DistPareto : public Distribution {
00558 public:
00559         DistPareto(Zahl aa=1, Zahl bb=1) : Distribution(2, aa, bb) {}
00560         virtual ~DistPareto() {}
00561         virtual string DistributionName(){return "Pareto";};
00562         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return y<para1 ? 0 : (para/para1)*pow(para1/y, para+1); };
00563         virtual Zahl Transform(Zahl y, Zahl aa, Zahl bb) {return bb*(pow(y, -1/aa));};
00564         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return 1-pow(para1/y, para);}
00565         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return pow(para1/y, para);}
00566 
00567         virtual int Range() {return RANGE_PARA2_INF;} //TODO: is this right???
00568         virtual int ParameterRange(int paranr) { if (paranr>0 && paranr<=2) return RANGE_0_INF; else return RANGE_NONE;}
00569         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00570         virtual Zahl Moment(int k, Zahl para, Zahl para1) {if (k>=para) return MOMENT_NONE; else {return 0; }} //TODO
00571         virtual Zahl Mean(Zahl para, Zahl para1) {if (1<para) return (para*para1/(para-1)); else return MOMENT_NONE;}
00572         virtual Zahl Variance(Zahl para, Zahl para1) {if (2<para) return (para*para1*para1)/( (para-2)*(para-1)*(para-1)); else return MOMENT_NONE;}
00573         virtual Zahl Skewness(Zahl para, Zahl para1) {if (3<para) return ( 2*(para+1)*sqrt(para-2) ) / ((para-3)*sqrt(para)); else return MOMENT_NONE;}
00574         virtual Zahl Kurtosis(Zahl para, Zahl para1) {if (4<para) return 6/para*(para*para*para+ para*para-6*para-2) / (para*para-7*para+12); else return MOMENT_NONE;}
00575         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00576         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00577         virtual Zahl Median(Zahl para, Zahl para1) {return para1*pow(2., 1/para);}
00578         virtual Zahl Q1(Zahl para, Zahl para1) {return para1*pow(4./3., 1/para);}
00579         virtual Zahl Q3(Zahl para, Zahl para1) {return para1*pow(4., 1/para);}
00580         virtual Zahl Mode(Zahl para, Zahl para1) {return para1;}
00581         virtual Zahl qMean(Zahl para, Zahl para1) {return 1-pow((para-1)/para, 1/para);}
00582         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;}
00583 };
00584 
00585 
00589 class DistPareto0 : public DistPareto {
00590 public:
00591         DistPareto0(Zahl aa=1, Zahl bb=1) : DistPareto(aa, bb) {}
00592         virtual ~DistPareto0() {}
00593         virtual string DistributionName(){return "Pareto (0-Point)";}
00594         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return (para/para1)*pow((1+y/para1), -para-1); };
00595         virtual Zahl Transform(Zahl y, Zahl aa, Zahl bb) {return bb*(pow(1-y, -1/aa)-1);};
00596 //      virtual Zahl TransformCut(Zahl y, Zahl cut, Zahl para); // TODO
00597         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return 1-pow(1+y/para1, -para);}
00598         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return pow(1+y/para1, -para);}
00599 
00600         virtual int Range() {return RANGE_0_INF;}
00601         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00602         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00603         virtual Zahl Mean(Zahl para, Zahl para1) {return Moment(1,para,para1);};
00604         virtual Zahl Variance(Zahl para, Zahl para1) {return Moment(2,para,para1);};
00605         virtual Zahl Skewness(Zahl para, Zahl para1) {return Moment(3,para,para1);};
00606         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return Moment(4,para,para1);};
00607         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00608         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00609         virtual Zahl Median(Zahl para, Zahl para1) {return 0;} //TODO
00610         virtual Zahl Q1(Zahl para, Zahl para1) {return 0;} //TODO
00611         virtual Zahl Q3(Zahl para, Zahl para1) {return 0;} //TODO
00612         virtual Zahl Mode(Zahl para, Zahl para1) {return 0;} //TODO
00613         virtual Zahl qMean(Zahl para, Zahl para1) {return 0;} //TODO
00614         virtual Zahl qMode(Zahl para, Zahl para1) {return 0;} //TODO
00615 };
00616 
00617 
00621 class DistUniform : public Distribution {
00622 public:
00623         DistUniform(Zahl a=0, Zahl b=1):Distribution(2,a,b) {}
00624         virtual ~DistUniform(){}
00625         virtual string DistributionName(){return "Uniform";};
00626         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) {return 1./(para1-para);}
00627         virtual Zahl Transform(Zahl y, Zahl para, Zahl para1) { return para+y*(para1-para);}
00628         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return max(0, min(1, (y-para)/(para1-para) ));}
00629         virtual int Range() {return RANGE_PARA1_PARA2;}
00630         virtual int ParameterRange(int paranr)  {if (0<paranr && paranr<=2 ) return RANGE_MININF_INF; else return RANGE_NONE;}
00631         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO, nicht angegeben
00632         virtual Zahl Moment(int k, Zahl para, Zahl para1) { return 0;} //TODO: nicht angegeben
00633         virtual Zahl Mean(Zahl para, Zahl para1) {return (para+para1)/2;}
00634         virtual Zahl Variance(Zahl para, Zahl para1) {return (para1-para)*(para1-para)/12;}
00635         virtual Zahl Skewness(Zahl para, Zahl para1) {return 0;}
00636         virtual Zahl Kurtosis(Zahl para, Zahl para1) {return -1.2;}
00637         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00638         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00639         virtual Zahl Median(Zahl para, Zahl para1) {return (para+para1)/2;}
00640         virtual Zahl Q1(Zahl para, Zahl para1) {return (3*para+para1)/4;}
00641         virtual Zahl Q3(Zahl para, Zahl para1) {return (para+3*para1)/4;}
00642         virtual Zahl Mode(Zahl para, Zahl para1) {return MOMENT_NONE;}
00643         virtual Zahl qMean(Zahl para, Zahl para1) {return 0.5;}
00644         virtual Zahl qMode(Zahl para, Zahl para1) {return MOMENT_NONE;}
00645 };
00646 #define DistRectangular DistUniform
00647 
00648 // y~Weibull(C,B,A) => X=((y-A)/B)^C ~Exp(1,0)
00652 class DistWeibull : public Distribution {
00653 public:
00654         DistWeibull(Zahl aa=1, Zahl bb=1, Zahl A=0) : Distribution(3, aa, bb) {param[2]=A;}
00655         virtual ~DistWeibull() {}
00656         virtual string DistributionName(){return "Weibull";}
00657         virtual Zahl pdf(Zahl y, Zahl para, Zahl para1) { return (para/para1)*pow((y-param[2])/para1, para-1)*exp(-pow((y-param[2])/para1, para) ); };
00658         virtual Zahl Transform(Zahl y, Zahl mm, Zahl ss) {return param[2]+pow(-log(1-y), 1/mm)*ss;}; //Calculated by use of the quantile function
00659         virtual Zahl cdf(Zahl y, Zahl para, Zahl para1) {return 1-exp(-pow((y-param[2])/para1, para) );}
00660         virtual Zahl cdfc(Zahl y, Zahl para, Zahl para1) {return exp(-pow((y-param[2])/para1, para) );}
00661 
00662         virtual int Range() {return RANGE_PARA1_INF;}
00663         virtual int ParameterRange(int paranr) {switch (paranr) {
00664                                 case 1: case 2: return RANGE_0_INF;
00665                                 case 3: return RANGE_MININF_INF;
00666                                 default: return RANGE_NONE;}}
00667         virtual Zahl mgf(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00668         virtual Zahl Moment(int k, Zahl para, Zahl para1) {return 0;} //TODO
00669         virtual Zahl Mean(Zahl para, Zahl para1) {return param[2]+ para1*tgamma((para+1)/para); }
00670         virtual Zahl Variance(Zahl para, Zahl para1) {return para1*para1* ( tgamma((para+2)/para) - pow(tgamma((para+1)/para), 2));}
00671         virtual Zahl Skewness(Zahl para, Zahl para1) {
00672                                 Zahl g1=tgamma((para+1)/para), g2=tgamma((para+2)/para), g3=tgamma((para+1)/para);
00673                                 return (2*pow(g1, 3) - 3*g1*g2 + g3 ) / pow( g2-g1*g1, 1.5);}
00674         virtual Zahl Kurtosis(Zahl para, Zahl para1) {
00675                                 Zahl g1=tgamma((para+1)/para), g2=tgamma((para+2)/para), g3=tgamma((para+1)/para), g4=tgamma((para+4)/para);
00676                                 return (-3*g1*g1*g1*g1 + 6*g1*g1*g2 - 4*g1*g3 + g4 ) / pow(g1*g1-g2, 2) -3;}
00677         virtual Zahl LogLikelihood(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00678         virtual Zahl CharacteristicFunction(Zahl y, Zahl para, Zahl para1) {return 0;} //TODO
00679         virtual Zahl Median(Zahl para, Zahl para1) {return param[2] + para1*pow(M_LOG2E, 1/para);}
00680         virtual Zahl Q1(Zahl para, Zahl para1) {return param[2]+para1*pow(log(4/3.), 1/para);}
00681         virtual Zahl Q3(Zahl para, Zahl para1) {return param[2]+para1*pow(log(4.), 1/para);}
00682         virtual Zahl Mode(Zahl para, Zahl para1) {if (para<=1) return param[2]; else return param[2]+para1*pow((para-1)/para, 1/para);}
00683         virtual Zahl qMean(Zahl para, Zahl para1) {return 1-exp(-pow(tgamma(1+1/para), para));}
00684         virtual Zahl qMode(Zahl para, Zahl para1) {return 1-exp(1/para-1);}
00685 };
00686 #define DistFrechet DistWeibull
00687 //TODO
00688 // Weibull(1AB) is the exponential distribution
00689 //Weibull (2,1,0) is the standard Rayleigh distribution
00690 
00691 
00697 Distribution*CreateDistribution(long type, Zahl para, Zahl para1);
00698 
00699 #endif

Generated at Wed Jun 20 19:47:40 2001 for LDSequences by doxygen1.2.7 written by Dimitri van Heesch, © 1997-2001