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