Sarahi Moran
/
jdijdfie
prueba
main.cpp@1:ed464543ca57, 2015-12-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |