prueba

Dependencies:   mbed

Committer:
Sarahi
Date:
Fri Dec 04 23:15:18 2015 +0000
Revision:
1:ed464543ca57
Parent:
0:c344a92d3ca2
Simulacion final proyecto 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sarahi 0:c344a92d3ca2 1 #include "mbed.h"
Sarahi 0:c344a92d3ca2 2
Sarahi 0:c344a92d3ca2 3 Serial pc(USBTX, USBRX); // tx, rx
Sarahi 0:c344a92d3ca2 4 DigitalOut myled(LED2);
Sarahi 0:c344a92d3ca2 5 DigitalOut led_a(LED3);
Sarahi 1:ed464543ca57 6
Sarahi 0:c344a92d3ca2 7
Sarahi 0:c344a92d3ca2 8 #define u1 8
Sarahi 0:c344a92d3ca2 9 #define M1 1
Sarahi 0:c344a92d3ca2 10 #define u2 3
Sarahi 0:c344a92d3ca2 11 #define M2 3
Sarahi 0:c344a92d3ca2 12 #define u3 15
Sarahi 0:c344a92d3ca2 13 #define M3 1
Sarahi 0:c344a92d3ca2 14 #define pQ3Q1 0.1 // probability of sending Q3 output to the Q1 input
Sarahi 0:c344a92d3ca2 15 #define pQ3Out 0.9 // probability of delivering Q3 output as system output
Sarahi 1:ed464543ca57 16 #define tf 50
Sarahi 0:c344a92d3ca2 17 #define lambda 10
Sarahi 0:c344a92d3ca2 18 #define pQ1I_Q2I 0.5
Sarahi 0:c344a92d3ca2 19 #define sz_a 1000
Sarahi 0:c344a92d3ca2 20
Sarahi 0:c344a92d3ca2 21 int Q1[sz_a]= {0}; // initial Q1
Sarahi 0:c344a92d3ca2 22 int Q2[sz_a]= {0}; // initial Q2
Sarahi 0:c344a92d3ca2 23 int Q3[sz_a]= {0}; // initial Q3
Sarahi 0:c344a92d3ca2 24 float t = 0; // initial simulation time
Sarahi 0:c344a92d3ca2 25 float t_events_Q1[sz_a] = {0}; // time stamps for the k events
Sarahi 0:c344a92d3ca2 26 float t_events_Q2[sz_a] = {0}; // time stamps for the k events
Sarahi 0:c344a92d3ca2 27 float t_events_Q3[sz_a]= {0}; // time stamps for the k events
Sarahi 0:c344a92d3ca2 28 int k=1; // event number
Sarahi 0:c344a92d3ca2 29
Sarahi 1:ed464543ca57 30 double SI = 0.1;
Sarahi 0:c344a92d3ca2 31
Sarahi 0:c344a92d3ca2 32 double Q1I1 = tf;
Sarahi 0:c344a92d3ca2 33 double Q1I2 = 0;
Sarahi 0:c344a92d3ca2 34 double Q1O = 0;
Sarahi 0:c344a92d3ca2 35
Sarahi 0:c344a92d3ca2 36 double Q2I1 = 0;
Sarahi 0:c344a92d3ca2 37 double Q2O = 0;
Sarahi 0:c344a92d3ca2 38
Sarahi 0:c344a92d3ca2 39 double Q3I1 = 0;
Sarahi 0:c344a92d3ca2 40 double Q3I2 = 0;
Sarahi 0:c344a92d3ca2 41 double Q3O = tf;
Sarahi 0:c344a92d3ca2 42
Sarahi 0:c344a92d3ca2 43
Sarahi 0:c344a92d3ca2 44 double SO = 0;
Sarahi 0:c344a92d3ca2 45
Sarahi 0:c344a92d3ca2 46 float Q1_lambda [sz_a]= {lambda*0.5};
Sarahi 0:c344a92d3ca2 47 float Q2_lambda [sz_a]= {lambda*0.5};
Sarahi 0:c344a92d3ca2 48 float Q3_lambda [sz_a]= {1/(u1*M1) + 1/(u2*M2)};
Sarahi 0:c344a92d3ca2 49
Sarahi 0:c344a92d3ca2 50 float t_Q1=0;
Sarahi 0:c344a92d3ca2 51 float t_Q2=0;
Sarahi 0:c344a92d3ca2 52 float t_Q3=0;
Sarahi 0:c344a92d3ca2 53
Sarahi 0:c344a92d3ca2 54 float eventtime_Q1=0;
Sarahi 0:c344a92d3ca2 55 float eventtime_Q2=0;
Sarahi 0:c344a92d3ca2 56 float eventtime_Q3=0;
Sarahi 0:c344a92d3ca2 57 float eventtime=0;
Sarahi 0:c344a92d3ca2 58
Sarahi 0:c344a92d3ca2 59 double min_2(double x, double y);
Sarahi 0:c344a92d3ca2 60 double min_3(double x, double y, double z);
Sarahi 0:c344a92d3ca2 61 int max_2(int x, int y);
Sarahi 0:c344a92d3ca2 62 double max_3(double x, double y, double z);
Sarahi 1:ed464543ca57 63 double var_rand_q1(int x);
Sarahi 1:ed464543ca57 64 double var_rand_s(int x);
Sarahi 1:ed464543ca57 65 double var_rand_q2(int x);
Sarahi 1:ed464543ca57 66 double var_rand_q3(int x);
Sarahi 0:c344a92d3ca2 67
Sarahi 0:c344a92d3ca2 68 int Q1k;
Sarahi 0:c344a92d3ca2 69 int Q2k;
Sarahi 0:c344a92d3ca2 70 int Q3k;
Sarahi 0:c344a92d3ca2 71
Sarahi 0:c344a92d3ca2 72
Sarahi 0:c344a92d3ca2 73
Sarahi 1:ed464543ca57 74 uint32_t x_i_s=7; //semilla aleatoria
Sarahi 1:ed464543ca57 75 uint32_t x_i_q1=11;
Sarahi 1:ed464543ca57 76 uint32_t x_i_q2= 17;
Sarahi 1:ed464543ca57 77 uint32_t x_i_q3=3;
Sarahi 0:c344a92d3ca2 78 int i=0;
Sarahi 0:c344a92d3ca2 79 int main()
Sarahi 0:c344a92d3ca2 80 {
Sarahi 0:c344a92d3ca2 81
Sarahi 0:c344a92d3ca2 82 while( t <= tf ){
Sarahi 0:c344a92d3ca2 83 myled=0;
Sarahi 0:c344a92d3ca2 84 //exprnd(1/freq) simulate an exponential pdf with parameter = average time = 1 / arriving rate
Sarahi 0:c344a92d3ca2 85
Sarahi 0:c344a92d3ca2 86 // System input
Sarahi 0:c344a92d3ca2 87
Sarahi 1:ed464543ca57 88 SI = var_rand_s(lambda);
Sarahi 1:ed464543ca57 89 SI= SI/100;
Sarahi 0:c344a92d3ca2 90
Sarahi 0:c344a92d3ca2 91
Sarahi 0:c344a92d3ca2 92 // Q1
Sarahi 0:c344a92d3ca2 93 Q1I1 = Q3O/pQ3Q1;
Sarahi 0:c344a92d3ca2 94 Q1I2 = SI/0.5;
Sarahi 0:c344a92d3ca2 95 printf("Sl: %lf \n", SI);
Sarahi 0:c344a92d3ca2 96 Q1_lambda [k]= (1/Q1I1 + 1/Q1I2);
Sarahi 0:c344a92d3ca2 97
Sarahi 0:c344a92d3ca2 98 //printf("Q1I1: %lf \n", Q1I1);
Sarahi 0:c344a92d3ca2 99 //printf("Q1I2: %lf \n", Q1I2);
Sarahi 0:c344a92d3ca2 100 //printf("Q1_lambda: %f \n", Q1_lambda[k]);
Sarahi 0:c344a92d3ca2 101
Sarahi 0:c344a92d3ca2 102 if(Q1[k] > 0){
Sarahi 1:ed464543ca57 103 int q1O= u1*M1; // service time in the queue
Sarahi 1:ed464543ca57 104 Q1O= var_rand_q1(q1O);
Sarahi 1:ed464543ca57 105 Q1O= Q1O/100;
Sarahi 0:c344a92d3ca2 106 }
Sarahi 0:c344a92d3ca2 107 else{
Sarahi 0:c344a92d3ca2 108 Q1O= min_2(Q1I1,Q1I2)+1.0;
Sarahi 0:c344a92d3ca2 109 }
Sarahi 1:ed464543ca57 110 printf("Q1O: %lf \n", Q1O);
Sarahi 0:c344a92d3ca2 111
Sarahi 0:c344a92d3ca2 112 // Update queue Q1
Sarahi 0:c344a92d3ca2 113 t_events_Q1[k]=(t+min_3(Q1I1,Q1I2,Q1O));
Sarahi 0:c344a92d3ca2 114 //printf("Q1K :%d \n",Q1[k]);
Sarahi 0:c344a92d3ca2 115 if ( (Q1O < Q1I1) && (Q1O < Q1I2) ){
Sarahi 0:c344a92d3ca2 116 Q1k=Q1[k]- 1;
Sarahi 0:c344a92d3ca2 117 Q1[k+1]=max_2(0,Q1k); // Q1 is reduced by one
Sarahi 0:c344a92d3ca2 118
Sarahi 0:c344a92d3ca2 119 }
Sarahi 0:c344a92d3ca2 120 else {
Sarahi 0:c344a92d3ca2 121 Q1[k+1]=Q1[k]+1; // Q1 is increased by one due to Q1 input (only one of the two inputs is considered)
Sarahi 0:c344a92d3ca2 122 }
Sarahi 0:c344a92d3ca2 123
Sarahi 0:c344a92d3ca2 124 //printf("Q1K :%d \n",Q1[k+1]);
Sarahi 0:c344a92d3ca2 125 eventtime_Q1 = min_3(Q1I1, Q1I2, Q1O);
Sarahi 0:c344a92d3ca2 126 t_Q1 = t;
Sarahi 0:c344a92d3ca2 127 t_Q1 = t_Q1 + eventtime_Q1;
Sarahi 0:c344a92d3ca2 128
Sarahi 0:c344a92d3ca2 129 // Q2
Sarahi 0:c344a92d3ca2 130 Q2I1 = SI/pQ1I_Q2I;
Sarahi 0:c344a92d3ca2 131 //printf("Q2I1 :%lf \n",Q2I1);
Sarahi 0:c344a92d3ca2 132 Q2_lambda[k] = (1.0/Q2I1);
Sarahi 0:c344a92d3ca2 133 //printf("Q2_lambda :%f \n",Q2_lambda[k]);
Sarahi 0:c344a92d3ca2 134
Sarahi 0:c344a92d3ca2 135 if(Q2[k] > 0){
Sarahi 1:ed464543ca57 136 int q2O = u2*M2; // service time in the queue
Sarahi 1:ed464543ca57 137 Q2O= var_rand_q2(q2O);
Sarahi 1:ed464543ca57 138 Q2O= Q2O/100;
Sarahi 0:c344a92d3ca2 139 }
Sarahi 0:c344a92d3ca2 140 else{
Sarahi 0:c344a92d3ca2 141 Q2O = Q2I1 + 1.0;
Sarahi 0:c344a92d3ca2 142 }
Sarahi 1:ed464543ca57 143 printf("Q20 :%f \n",Q2O);
Sarahi 0:c344a92d3ca2 144
Sarahi 0:c344a92d3ca2 145 // Update queue Q2
Sarahi 0:c344a92d3ca2 146 t_events_Q2[k]=(t+min_2(Q2I1, Q2O));
Sarahi 0:c344a92d3ca2 147 //printf("Q2[k]: %d\n",Q2[k]);
Sarahi 0:c344a92d3ca2 148 if ( Q2O < Q2I1 ){
Sarahi 0:c344a92d3ca2 149 Q2k=Q2[k]- 1;
Sarahi 0:c344a92d3ca2 150 // printf("Q2K %d: \n",Q2k);
Sarahi 0:c344a92d3ca2 151 Q2[k+1]=max_2(0,Q2k); // Q2 is reduced by one
Sarahi 0:c344a92d3ca2 152 }
Sarahi 0:c344a92d3ca2 153 else{
Sarahi 0:c344a92d3ca2 154 Q2[k+1]= (Q2[k])+1; // Q2 is increased by one due to Q2 input
Sarahi 0:c344a92d3ca2 155 }
Sarahi 0:c344a92d3ca2 156 //printf("Q2[k]: %d\n",Q2[k+1]);
Sarahi 0:c344a92d3ca2 157 eventtime_Q2 = min_2(Q2I1, Q2O);
Sarahi 0:c344a92d3ca2 158 t_Q2 = t;
Sarahi 0:c344a92d3ca2 159 t_Q2 = t_Q2 + eventtime_Q2;
Sarahi 0:c344a92d3ca2 160
Sarahi 0:c344a92d3ca2 161
Sarahi 0:c344a92d3ca2 162 //Q3
Sarahi 0:c344a92d3ca2 163 Q3I1 = Q1O;
Sarahi 0:c344a92d3ca2 164 Q3I2 = Q2O;
Sarahi 0:c344a92d3ca2 165 //printf("Q3I1: %lf \n",Q3I1);
Sarahi 0:c344a92d3ca2 166 //printf("Q3I2: %lf \n",Q3I2);
Sarahi 0:c344a92d3ca2 167 Q3_lambda [k]= 1/Q3I1 + 1/Q3I2;
Sarahi 0:c344a92d3ca2 168 //printf("Q3_lambda: %f \n",Q3_lambda[k]);
Sarahi 0:c344a92d3ca2 169
Sarahi 0:c344a92d3ca2 170 if(Q3[k] > 0){
Sarahi 1:ed464543ca57 171 int q3O = u3*M3; // service time in the queue
Sarahi 1:ed464543ca57 172 Q3O= var_rand_q3(q3O);
Sarahi 1:ed464543ca57 173 // printf("Q3O_ant %lf", Q3O);
Sarahi 1:ed464543ca57 174 Q3O= Q3O/100;
Sarahi 0:c344a92d3ca2 175 }
Sarahi 0:c344a92d3ca2 176 else{
Sarahi 0:c344a92d3ca2 177 Q3O = min_2(Q1O, Q2O) + 1.0;
Sarahi 0:c344a92d3ca2 178 }
Sarahi 0:c344a92d3ca2 179
Sarahi 1:ed464543ca57 180 printf("Q3O: %lf \n",Q3O);
Sarahi 0:c344a92d3ca2 181 // Update queue Q3
Sarahi 0:c344a92d3ca2 182 t_events_Q3[k]= t+min_3(Q3I1, Q3I2, Q3O);
Sarahi 0:c344a92d3ca2 183 //printf("Q3[k]: %d \n", Q3[k]);
Sarahi 0:c344a92d3ca2 184 if ( (Q3O < Q3I1) && (Q3O < Q3I2) ){
Sarahi 0:c344a92d3ca2 185 Q3k=Q3[k]- 1;
Sarahi 0:c344a92d3ca2 186 // printf("Q3k: %f \n", Q3k);
Sarahi 0:c344a92d3ca2 187 Q3[k+1]=max_2(0,Q3k); // Q3 is reduced by one
Sarahi 0:c344a92d3ca2 188 }
Sarahi 0:c344a92d3ca2 189 else {
Sarahi 0:c344a92d3ca2 190 Q3[k+1]= Q3[k] + 1; // Q3 is increased by one due to Q3 input (only one of the two inputs is considered)
Sarahi 0:c344a92d3ca2 191
Sarahi 0:c344a92d3ca2 192 }
Sarahi 0:c344a92d3ca2 193 //printf("Q3[k]: %d \n",Q3[k+1]);
Sarahi 0:c344a92d3ca2 194 eventtime_Q3 = min_3(Q3I1, Q3I2, Q3O);
Sarahi 0:c344a92d3ca2 195 t_Q3 = t;
Sarahi 1:ed464543ca57 196 t_Q3 = t_Q3 + eventtime_Q3;
Sarahi 0:c344a92d3ca2 197
Sarahi 0:c344a92d3ca2 198 // System output
Sarahi 0:c344a92d3ca2 199 SO = Q3O/pQ3Out;
Sarahi 0:c344a92d3ca2 200
Sarahi 0:c344a92d3ca2 201 eventtime = max_3(eventtime_Q1, eventtime_Q2, eventtime_Q3);
Sarahi 0:c344a92d3ca2 202 t = t + eventtime;
Sarahi 0:c344a92d3ca2 203 k=k+1;
Sarahi 0:c344a92d3ca2 204
Sarahi 0:c344a92d3ca2 205 myled=1;
Sarahi 1:ed464543ca57 206 wait(0.02);
Sarahi 0:c344a92d3ca2 207 }
Sarahi 0:c344a92d3ca2 208
Sarahi 0:c344a92d3ca2 209
Sarahi 0:c344a92d3ca2 210 led_a=0;
Sarahi 1:ed464543ca57 211 wait(.5);
Sarahi 0:c344a92d3ca2 212 pc.printf("k=");
Sarahi 0:c344a92d3ca2 213 pc.printf("%d\r\n",k);
Sarahi 0:c344a92d3ca2 214 wait(.5);
Sarahi 0:c344a92d3ca2 215
Sarahi 0:c344a92d3ca2 216 pc.printf("Q1\n");
Sarahi 1:ed464543ca57 217 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 218 pc.printf("%d, ",Q1[i]);
Sarahi 0:c344a92d3ca2 219
Sarahi 0:c344a92d3ca2 220 }
Sarahi 0:c344a92d3ca2 221
Sarahi 0:c344a92d3ca2 222 pc.printf("\n Q2\n");
Sarahi 1:ed464543ca57 223 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 224 pc.printf("%d, ",Q2[i]);
Sarahi 0:c344a92d3ca2 225
Sarahi 0:c344a92d3ca2 226 }
Sarahi 0:c344a92d3ca2 227
Sarahi 0:c344a92d3ca2 228 pc.printf("\n Q3\n");
Sarahi 1:ed464543ca57 229 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 230 pc.printf("%d, ",Q3[i]);
Sarahi 0:c344a92d3ca2 231
Sarahi 0:c344a92d3ca2 232 }
Sarahi 0:c344a92d3ca2 233
Sarahi 0:c344a92d3ca2 234 pc.printf("\n Q1_lambda\n");
Sarahi 1:ed464543ca57 235 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 236 pc.printf("%f, ",Q1_lambda[i]);
Sarahi 0:c344a92d3ca2 237
Sarahi 0:c344a92d3ca2 238 }
Sarahi 0:c344a92d3ca2 239
Sarahi 0:c344a92d3ca2 240 pc.printf("\n Q2_lambda\n");
Sarahi 1:ed464543ca57 241 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 242 pc.printf("%f, ",Q2_lambda[i]);
Sarahi 0:c344a92d3ca2 243
Sarahi 0:c344a92d3ca2 244 }
Sarahi 0:c344a92d3ca2 245 pc.printf("\n Q3_lambda\n");
Sarahi 1:ed464543ca57 246 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 247 pc.printf("%f, ",Q3_lambda[i]);
Sarahi 0:c344a92d3ca2 248
Sarahi 0:c344a92d3ca2 249 }
Sarahi 0:c344a92d3ca2 250
Sarahi 0:c344a92d3ca2 251 pc.printf("\n t_events_Q1\n");
Sarahi 1:ed464543ca57 252 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 253 pc.printf("%f, ",t_events_Q1[i]);
Sarahi 0:c344a92d3ca2 254
Sarahi 0:c344a92d3ca2 255 }
Sarahi 0:c344a92d3ca2 256 pc.printf("\n t_events_Q2\n");
Sarahi 1:ed464543ca57 257 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 258 pc.printf("%f, ",t_events_Q2[i]);
Sarahi 0:c344a92d3ca2 259
Sarahi 0:c344a92d3ca2 260 }
Sarahi 0:c344a92d3ca2 261
Sarahi 0:c344a92d3ca2 262 pc.printf("\n t_events_Q3\n");
Sarahi 1:ed464543ca57 263 for (i=0; i<k; i++){
Sarahi 0:c344a92d3ca2 264 pc.printf("%f, ",t_events_Q3[i]);
Sarahi 0:c344a92d3ca2 265
Sarahi 0:c344a92d3ca2 266 }
Sarahi 0:c344a92d3ca2 267
Sarahi 0:c344a92d3ca2 268
Sarahi 0:c344a92d3ca2 269 led_a=1;
Sarahi 0:c344a92d3ca2 270 }
Sarahi 0:c344a92d3ca2 271
Sarahi 0:c344a92d3ca2 272
Sarahi 0:c344a92d3ca2 273 //-----------------------Función para obtener el minimo de 2 números ---------------------------------------------//
Sarahi 0:c344a92d3ca2 274 double min_2(double x, double y){
Sarahi 0:c344a92d3ca2 275 double min=0;
Sarahi 0:c344a92d3ca2 276 if (x<y){
Sarahi 0:c344a92d3ca2 277 min= x;
Sarahi 0:c344a92d3ca2 278 }
Sarahi 0:c344a92d3ca2 279 else {
Sarahi 0:c344a92d3ca2 280 min=y;
Sarahi 0:c344a92d3ca2 281 }
Sarahi 0:c344a92d3ca2 282 return min;
Sarahi 0:c344a92d3ca2 283
Sarahi 0:c344a92d3ca2 284 }
Sarahi 0:c344a92d3ca2 285
Sarahi 0:c344a92d3ca2 286 ///-----------------------Función para obtener el minimo de 3 números ---------------------------------------------//
Sarahi 0:c344a92d3ca2 287 double min_3(double x, double y, double z){
Sarahi 0:c344a92d3ca2 288 double min=0;
Sarahi 0:c344a92d3ca2 289 if ((x<y)&&(x<z)){
Sarahi 0:c344a92d3ca2 290 min= x;
Sarahi 0:c344a92d3ca2 291 }
Sarahi 0:c344a92d3ca2 292 else if ((y<x)&&(y<z)){
Sarahi 0:c344a92d3ca2 293 min= y;
Sarahi 0:c344a92d3ca2 294 }
Sarahi 0:c344a92d3ca2 295 else {
Sarahi 0:c344a92d3ca2 296 min=z;
Sarahi 0:c344a92d3ca2 297 }
Sarahi 0:c344a92d3ca2 298 return min;
Sarahi 0:c344a92d3ca2 299 }
Sarahi 0:c344a92d3ca2 300
Sarahi 0:c344a92d3ca2 301 //-----------------------Función para obtener el miáximo de 2 números ---------------------------------------------//
Sarahi 0:c344a92d3ca2 302 int max_2(int x, int y){
Sarahi 0:c344a92d3ca2 303 int max=0;
Sarahi 0:c344a92d3ca2 304 if(x>y){
Sarahi 0:c344a92d3ca2 305 max=x;
Sarahi 0:c344a92d3ca2 306 }
Sarahi 0:c344a92d3ca2 307 else {
Sarahi 0:c344a92d3ca2 308 max=y;
Sarahi 0:c344a92d3ca2 309 }
Sarahi 0:c344a92d3ca2 310 return max;
Sarahi 0:c344a92d3ca2 311 }
Sarahi 0:c344a92d3ca2 312
Sarahi 0:c344a92d3ca2 313
Sarahi 0:c344a92d3ca2 314 //-----------------------Función para obtener el máximo de 3 números ---------------------------------------------//
Sarahi 0:c344a92d3ca2 315 double max_3(double x, double y, double z){
Sarahi 0:c344a92d3ca2 316 double max=0;
Sarahi 0:c344a92d3ca2 317 if ((x>y)&&(x>z)){
Sarahi 0:c344a92d3ca2 318 max= x;
Sarahi 0:c344a92d3ca2 319 }
Sarahi 0:c344a92d3ca2 320 else if ((y>x)&&(y>z)){
Sarahi 0:c344a92d3ca2 321 max= y;
Sarahi 0:c344a92d3ca2 322 }
Sarahi 0:c344a92d3ca2 323 else {
Sarahi 0:c344a92d3ca2 324 max=z;
Sarahi 0:c344a92d3ca2 325 }
Sarahi 0:c344a92d3ca2 326 return max;
Sarahi 0:c344a92d3ca2 327 }
Sarahi 0:c344a92d3ca2 328
Sarahi 1:ed464543ca57 329 double var_rand_s(int x){
Sarahi 1:ed464543ca57 330 int32_t a_s = 40014;
Sarahi 1:ed464543ca57 331 int32_t m_s=2147283563;
Sarahi 1:ed464543ca57 332 double exprnd_s;
Sarahi 1:ed464543ca57 333 int32_t x_i1_s=(a_s*x_i_s) % m_s;
Sarahi 1:ed464543ca57 334 x_i_s=x_i1_s;
Sarahi 1:ed464543ca57 335 double U_s= float(x_i1_s)/float(m_s); //Uniforme [0,1]
Sarahi 1:ed464543ca57 336
Sarahi 1:ed464543ca57 337
Sarahi 1:ed464543ca57 338 if(U_s>=0.2 && U_s<=0.9){
Sarahi 1:ed464543ca57 339 exprnd_s=-1.0*float(x)*log(U_s);
Sarahi 1:ed464543ca57 340 }
Sarahi 1:ed464543ca57 341 else {
Sarahi 1:ed464543ca57 342 x_i1_s=(a_s*x_i_s) % m_s;
Sarahi 1:ed464543ca57 343 U_s= float(x_i1_s)/float(m_s);
Sarahi 1:ed464543ca57 344 }
Sarahi 1:ed464543ca57 345 // printf("exprnd_s: %lf", exprnd_s);
Sarahi 1:ed464543ca57 346 return exprnd_s;
Sarahi 1:ed464543ca57 347 }
Sarahi 1:ed464543ca57 348
Sarahi 1:ed464543ca57 349 double var_rand_q1(int x){
Sarahi 1:ed464543ca57 350 int32_t a_q1 = 40014;
Sarahi 1:ed464543ca57 351 int32_t m_q1=2147283563;
Sarahi 1:ed464543ca57 352 double exprnd_q1;
Sarahi 1:ed464543ca57 353 int32_t x_i1_q1=(a_q1*x_i_q1) % m_q1;
Sarahi 1:ed464543ca57 354 x_i_q1=x_i1_q1;
Sarahi 1:ed464543ca57 355 double U_q1= float(x_i1_q1)/float(m_q1); //Uniforme [0,1]
Sarahi 1:ed464543ca57 356
Sarahi 0:c344a92d3ca2 357
Sarahi 1:ed464543ca57 358 if(U_q1>=0.4 && U_q1<=0.9){
Sarahi 1:ed464543ca57 359 exprnd_q1=-1.0*float(x)*log(U_q1);
Sarahi 1:ed464543ca57 360 }
Sarahi 1:ed464543ca57 361 else {
Sarahi 1:ed464543ca57 362 x_i1_q1=(a_q1*x_i_q1) % m_q1;
Sarahi 1:ed464543ca57 363 U_q1= float(x_i1_q1)/float(m_q1);
Sarahi 1:ed464543ca57 364 }
Sarahi 1:ed464543ca57 365 return exprnd_q1;
Sarahi 1:ed464543ca57 366 }
Sarahi 1:ed464543ca57 367
Sarahi 1:ed464543ca57 368 double var_rand_q2(int x){
Sarahi 1:ed464543ca57 369 int32_t a_q2 = 40014;
Sarahi 1:ed464543ca57 370 int32_t m_q2=2147283563;
Sarahi 1:ed464543ca57 371 double exprnd_q2;
Sarahi 1:ed464543ca57 372 int32_t x_i1_q2=(a_q2*x_i_q2) % m_q2;
Sarahi 1:ed464543ca57 373 x_i_q2=x_i1_q2;
Sarahi 1:ed464543ca57 374 double U_q2= float(x_i1_q2)/float(m_q2); //Uniforme [0,1]
Sarahi 0:c344a92d3ca2 375
Sarahi 1:ed464543ca57 376 if(U_q2>=0.4 && U_q2<=0.9){
Sarahi 1:ed464543ca57 377 exprnd_q2=-1.0*float(x)*log(U_q2);
Sarahi 1:ed464543ca57 378 }
Sarahi 1:ed464543ca57 379 else {
Sarahi 1:ed464543ca57 380 x_i1_q2=(a_q2*x_i_q2) % m_q2;
Sarahi 1:ed464543ca57 381 U_q2= float(x_i1_q2)/float(m_q2);
Sarahi 1:ed464543ca57 382 }
Sarahi 1:ed464543ca57 383 return exprnd_q2;
Sarahi 1:ed464543ca57 384 }
Sarahi 1:ed464543ca57 385
Sarahi 1:ed464543ca57 386 double var_rand_q3(int x){
Sarahi 1:ed464543ca57 387 int32_t a_q3 = 40014;
Sarahi 1:ed464543ca57 388 int32_t m_q3=2147283563;
Sarahi 1:ed464543ca57 389 double exprnd_q3;
Sarahi 1:ed464543ca57 390 int32_t x_i1_q3=(a_q3*x_i_q3) % m_q3;
Sarahi 1:ed464543ca57 391 x_i_q3=x_i1_q3;
Sarahi 1:ed464543ca57 392 double U_q3= float(x_i1_q3)/float(m_q3); //Uniforme [0,1]
Sarahi 1:ed464543ca57 393
Sarahi 1:ed464543ca57 394 if(U_q3>=0.4 && U_q3<=0.9){
Sarahi 1:ed464543ca57 395 exprnd_q3=-1.0*float(x)*log(U_q3);
Sarahi 1:ed464543ca57 396 }
Sarahi 1:ed464543ca57 397 else {
Sarahi 1:ed464543ca57 398 x_i1_q3=(a_q3*x_i_q3) % m_q3;
Sarahi 1:ed464543ca57 399 U_q3= float(x_i1_q3)/float(m_q3);
Sarahi 1:ed464543ca57 400 }
Sarahi 1:ed464543ca57 401
Sarahi 1:ed464543ca57 402 return exprnd_q3;
Sarahi 0:c344a92d3ca2 403 }