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
00033
00034 #include <ChiSquareRV.h>
00035 #include <GammaRV.h>
00036 #include <math.h>
00037 #include <string.h>
00038 #include <classTags.h>
00039 #include <OPS_Globals.h>
00040
00041 ChiSquareRV::ChiSquareRV(int passedTag,
00042 double passedMean,
00043 double passedStdv,
00044 double passedStartValue)
00045 :RandomVariable(passedTag, RANDOM_VARIABLE_chisquare)
00046 {
00047 tag = passedTag ;
00048 nu = 0.5*passedMean;
00049 startValue = passedStartValue;
00050 }
00051 ChiSquareRV::ChiSquareRV(int passedTag,
00052 double passedParameter1,
00053 double passedParameter2,
00054 double passedParameter3,
00055 double passedParameter4,
00056 double passedStartValue)
00057 :RandomVariable(passedTag, RANDOM_VARIABLE_chisquare)
00058 {
00059 tag = passedTag ;
00060 nu = passedParameter1;
00061 startValue = passedStartValue;
00062 }
00063 ChiSquareRV::ChiSquareRV(int passedTag,
00064 double passedMean,
00065 double passedStdv)
00066 :RandomVariable(passedTag, RANDOM_VARIABLE_chisquare)
00067 {
00068 tag = passedTag ;
00069 nu = 0.5*passedMean;
00070 startValue = getMean();
00071 }
00072 ChiSquareRV::ChiSquareRV(int passedTag,
00073 double passedParameter1,
00074 double passedParameter2,
00075 double passedParameter3,
00076 double passedParameter4)
00077 :RandomVariable(passedTag, RANDOM_VARIABLE_chisquare)
00078 {
00079 tag = passedTag ;
00080 nu = passedParameter1;
00081 startValue = getMean();
00082 }
00083
00084
00085 ChiSquareRV::~ChiSquareRV()
00086 {
00087 }
00088
00089
00090 void
00091 ChiSquareRV::Print(OPS_Stream &s, int flag)
00092 {
00093 }
00094
00095
00096 double
00097 ChiSquareRV::getPDFvalue(double rvValue)
00098 {
00099 double result;
00100 if ( 0.0 < rvValue ) {
00101 GammaRV *aGammaRV = new GammaRV(1, 0.0, 1.0, 0.0);
00102 double a = aGammaRV->gammaFunction(0.5*nu);
00103 result = pow(0.5*rvValue,0.5*nu-1.0)*exp(-0.5*rvValue)/(2.0*a);
00104 delete aGammaRV;
00105 }
00106 else {
00107 result = 0.0;
00108 }
00109 return result;
00110 }
00111
00112
00113 double
00114 ChiSquareRV::getCDFvalue(double rvValue)
00115 {
00116 double result;
00117 if ( 0.0 < rvValue ) {
00118 GammaRV *aGammaRV = new GammaRV(1, 0.0, 1.0, 0.0);
00119 double a = aGammaRV->incompleteGammaFunction(0.5*nu,0.5*rvValue);
00120 double b = aGammaRV->gammaFunction(0.5*nu);
00121 result = a/b;
00122 delete aGammaRV;
00123 }
00124 else {
00125 result = 0.0;
00126 }
00127 return result;
00128 }
00129
00130
00131 double
00132 ChiSquareRV::getInverseCDFvalue(double rvValue)
00133 {
00134 return 0.0;
00135 }
00136
00137
00138 const char *
00139 ChiSquareRV::getType()
00140 {
00141 return "CHISQUARE";
00142 }
00143
00144
00145 double
00146 ChiSquareRV::getMean()
00147 {
00148 return 2*nu;
00149 }
00150
00151
00152
00153 double
00154 ChiSquareRV::getStdv()
00155 {
00156 return sqrt(2*nu);
00157 }
00158
00159
00160 double
00161 ChiSquareRV::getStartValue()
00162 {
00163 return startValue;
00164 }
00165
00166 double ChiSquareRV::getParameter1() {return nu;}
00167 double ChiSquareRV::getParameter2() {opserr<<"No such parameter in r.v. #"<<tag<<endln; return 0.0;}
00168 double ChiSquareRV::getParameter3() {opserr<<"No such parameter in r.v. #"<<tag<<endln; return 0.0;}
00169 double ChiSquareRV::getParameter4() {opserr<<"No such parameter in r.v. #"<<tag<<endln; return 0.0;}