Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/08/2013, 21:24
Linearz
 
Fecha de Ingreso: abril-2012
Mensajes: 2
Antigüedad: 12 años, 7 meses
Puntos: 0
Pregunta Problema Simulación

Bueno, el detale es este. Tengo que usar Montecarlo en una simulacion que genera numeros random distribuidos Uniforme(0,1), esto lo hago dividiendo el numero aleatorios mas grande de c++ (RAND_MAX) entre el rand().

EL problema en si es el output, no me evalúa bien las cosas. Les pongo lo que he hecho:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. double func_esperanza(double y)
  8. {
  9.     double f=0;
  10.     if (y>200) {
  11.         f=y*10-200*5-2*(y-200);                            //si hay mas demanda que 200
  12.     }
  13.     else {
  14.         f=y*10-200*5+.5*(200-y);                           //hay menos demanda que 200
  15.     }
  16.     return f;
  17. }
  18.  
  19. double define_dato(double aux)
  20. {
  21.     double y;
  22.    
  23.     if ((aux>0) && (aux<=(45/300)))
  24.     {
  25.         y=100;
  26.     }
  27.     else if ((aux>(45/300)) && (aux<=(95/300)))
  28.     {
  29.         y=150;
  30.     }
  31.     else if ((aux>(95/300)) && aux<=((155/300)))
  32.     {
  33.         y=175;
  34.     }
  35.     else if ((aux>(155/300)) && (aux<=(215/300)))
  36.     {
  37.         y=200;
  38.     }
  39.     else if ((aux>(215/300)) && (aux<=(270/300)))
  40.     {
  41.         y=250;
  42.     }
  43.     else if ((aux>(270/300)) && (aux<=(1)))
  44.     {
  45.         y=300;
  46.     }
  47.     else
  48.     {
  49.         y=0;
  50.     }
  51.    
  52.     return y;
  53.    
  54. }
  55.  
  56.  
  57.  
  58. double genera_dato()
  59. {
  60.     double R=RAND_MAX;                          //genero los aleatorios uniforme(0,1)
  61.     double dato=rand()/R;                       //divido el mas grande aleatorio / rand()
  62.     return dato;
  63. }
  64.  
  65.  
  66.  
  67. int main()
  68. {
  69.     srand((unsigned)time(0));
  70.     double aux,aux1,p=0;
  71.     double suma=0;
  72.     for (int i=0; i<10; i++) {
  73.         aux= genera_dato();                             //genero el numero random
  74.         cout<<aux<<endl;
  75.         aux1= define_dato(aux);                         //lo evaluo en que intervalo cae
  76.         cout<<aux1<<endl;
  77.         p=func_esperanza(aux1);                         //calculo su esperanza
  78.         cout<<p<<endl;
  79.         suma+=p;
  80.         aux=0;
  81.         aux1=0;
  82.         p=0;
  83.     }
  84.    
  85.     cout<<suma/10;                                      //aplico montecarlo
  86.     return 0;              
  87. }

Este es el output que me ha salido:

0.0765
300
1800
0.736337
300
1800
0.623635
300
1800
0.43767
300
1800
0.914628
300
1800
0.153492
300
1800
0.737618
300
1800
0.149986
300
1800
0.80858
300
1800
0.797272
300
1800
1800

Cabe mencionar que uso Xcode(Mac, Mountain Lion). ¿Alguna sugerencia?