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 <RayleighRV.h>
00035 #include <math.h>
00036 #include <string.h>
00037 #include <classTags.h>
00038 #include <OPS_Globals.h>
00039
00040 RayleighRV::RayleighRV(int passedTag,
00041 double passedParameter1,
00042 double passedParameter2,
00043 double passedParameter3,
00044 double passedParameter4,
00045 double passedStartValue)
00046 :RandomVariable(passedTag, RANDOM_VARIABLE_rayleigh)
00047 {
00048 tag = passedTag ;
00049 u = passedParameter1;
00050 startValue = passedStartValue;
00051 }
00052 RayleighRV::RayleighRV(int passedTag,
00053 double passedParameter1,
00054 double passedParameter2,
00055 double passedParameter3,
00056 double passedParameter4)
00057 :RandomVariable(passedTag, RANDOM_VARIABLE_rayleigh)
00058 {
00059 tag = passedTag ;
00060 u = passedParameter1;
00061 startValue = getMean();
00062 }
00063
00064
00065 RayleighRV::~RayleighRV()
00066 {
00067 }
00068
00069
00070 void
00071 RayleighRV::Print(OPS_Stream &s, int flag)
00072 {
00073 }
00074
00075
00076 double
00077 RayleighRV::getPDFvalue(double rvValue)
00078 {
00079 double result;
00080 if ( 0.0 < rvValue ) {
00081 result = 2.0*rvValue/(u*u) * exp(-pow(rvValue/u,2));
00082 }
00083 else {
00084 result = 0.0;
00085 }
00086 return result;
00087 }
00088
00089
00090 double
00091 RayleighRV::getCDFvalue(double rvValue)
00092 {
00093 double result;
00094 if ( 0.0 < rvValue ) {
00095 result = 1-exp(-pow(rvValue/u,2));
00096 }
00097 else {
00098 result = 0.0;
00099 }
00100 return result;
00101 }
00102
00103
00104 double
00105 RayleighRV::getInverseCDFvalue(double probValue)
00106 {
00107 return u*sqrt(-log(1-probValue));
00108 }
00109
00110
00111 const char *
00112 RayleighRV::getType()
00113 {
00114 return "RAYLEIGH";
00115 }
00116
00117
00118 double
00119 RayleighRV::getMean()
00120 {
00121 double pi = 3.14159265358979;
00122 return 0.5*sqrt(pi) * u;
00123 }
00124
00125
00126
00127 double
00128 RayleighRV::getStdv()
00129 {
00130 double pi = 3.14159265358979;
00131 return 0.5 * sqrt(4.0-pi) * u;
00132 }
00133
00134
00135 double
00136 RayleighRV::getStartValue()
00137 {
00138 return startValue;
00139 }
00140
00141
00142 double RayleighRV::getParameter1() {return u;}
00143 double RayleighRV::getParameter2() {opserr<<"No such parameter in r.v. #"<<tag<<endln; return 0.0;}
00144 double RayleighRV::getParameter3() {opserr<<"No such parameter in r.v. #"<<tag<<endln; return 0.0;}
00145 double RayleighRV::getParameter4() {opserr<<"No such parameter in r.v. #"<<tag<<endln; return 0.0;}