Changeset 26616
- Timestamp:
- 11/12/21 09:49:12 (3 years ago)
- Location:
- issm/trunk-jpl/src/c/shared/Random
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/shared/Random/randomgenerator.cpp
r26613 r26616 93 93 double normal_distribution::generator(rnd::linear_congruential_engine random_engine){/*{{{*/ 94 94 95 rnd::uniform_distribution unifdistri;95 rnd::uniform_distribution distribution; 96 96 97 double u1 = unifdistri.generator(random_engine);98 double u2 = unifdistri.generator(random_engine);97 double u1 = distribution.generator(random_engine); 98 double u2 = distribution.generator(random_engine); 99 99 100 100 double R = sqrt(-2*log(u1)); … … 106 106 /*}}}*/ 107 107 108 /* Log-Normal distribution */ 109 110 lognormal_distribution::lognormal_distribution(){/*{{{*/ 111 logmean = 0; 112 logsdev = 1.0; 113 return; 114 } 115 /*}}}*/ 116 117 lognormal_distribution::lognormal_distribution(double m,double s){/*{{{*/ 118 logmean = m; 119 logsdev = s; 120 return; 121 } 122 /*}}}*/ 123 124 lognormal_distribution::~lognormal_distribution(){} 125 126 double lognormal_distribution::generator(rnd::linear_congruential_engine random_engine){/*{{{*/ 127 128 rnd::normal_distribution distribution(logmean,logsdev); 129 130 return exp(distribution.generator(random_engine)); 131 132 } 133 /*}}}*/ 134 135 /* Chi-squared distribution */ 136 137 chi_squared_distribution::chi_squared_distribution(){/*{{{*/ 138 k = 1; 139 return; 140 } 141 /*}}}*/ 142 143 chi_squared_distribution::chi_squared_distribution(unsigned int dof){/*{{{*/ 144 k = dof; 145 return; 146 } 147 /*}}}*/ 148 149 chi_squared_distribution::~chi_squared_distribution(){} 150 151 double chi_squared_distribution::generator(rnd::linear_congruential_engine random_engine){/*{{{*/ 152 153 rnd::normal_distribution distribution; 154 155 double rand = 0; 156 157 for(int i=0;i<k;i++) 158 rand = rand + pow(distribution.generator(random_engine),2); 159 160 return rand; 161 162 } 163 /*}}}*/ 164 165 166 /* Exponential distribution */ 167 168 exponential_distribution::exponential_distribution(){/*{{{*/ 169 lambda = 1.0; 170 return; 171 } 172 /*}}}*/ 173 174 exponential_distribution::exponential_distribution(double scale){/*{{{*/ 175 lambda = scale; 176 return; 177 } 178 /*}}}*/ 179 180 exponential_distribution::~exponential_distribution(){} 181 182 double exponential_distribution::generator(rnd::linear_congruential_engine random_engine){/*{{{*/ 183 184 rnd::uniform_distribution distribution; 185 186 return -1.0/lambda*log(1.0-distribution.generator(random_engine)); 187 188 } 189 /*}}}*/ 190 108 191 } -
issm/trunk-jpl/src/c/shared/Random/randomgenerator.h
r26612 r26616 68 68 }; 69 69 70 class lognormal_distribution 71 { 72 73 private: 74 double logmean; 75 double logsdev; 76 77 public: 78 79 /*constructors, destructors: */ 80 lognormal_distribution(); 81 lognormal_distribution(double m,double s); 82 ~lognormal_distribution(); 83 84 double generator(rnd::linear_congruential_engine random_engine); 85 86 }; 87 88 class chi_squared_distribution 89 { 90 91 private: 92 unsigned int k; 93 94 public: 95 96 /*constructors, destructors: */ 97 chi_squared_distribution(); 98 chi_squared_distribution(unsigned int k); 99 ~chi_squared_distribution(); 100 101 double generator(rnd::linear_congruential_engine random_engine); 102 103 }; 104 105 class exponential_distribution 106 { 107 108 private: 109 double lambda; 110 111 public: 112 113 /*constructors, destructors: */ 114 exponential_distribution(); 115 exponential_distribution(double scale); 116 ~exponential_distribution(); 117 118 double generator(rnd::linear_congruential_engine random_engine); 119 120 }; 121 70 122 71 123 }
Note:
See TracChangeset
for help on using the changeset viewer.