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#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
double func_esperanza(double y)
{
double f=0;
if (y>200) {
f=y*10-200*5-2*(y-200); //si hay mas demanda que 200
}
else {
f=y*10-200*5+.5*(200-y); //hay menos demanda que 200
}
return f;
}
double define_dato(double aux)
{
double y;
if ((aux>0) && (aux<=(45/300)))
{
y=100;
}
else if ((aux>(45/300)) && (aux<=(95/300)))
{
y=150;
}
else if ((aux>(95/300)) && aux<=((155/300)))
{
y=175;
}
else if ((aux>(155/300)) && (aux<=(215/300)))
{
y=200;
}
else if ((aux>(215/300)) && (aux<=(270/300)))
{
y=250;
}
else if ((aux>(270/300)) && (aux<=(1)))
{
y=300;
}
else
{
y=0;
}
return y;
}
double genera_dato()
{
double R=RAND_MAX; //genero los aleatorios uniforme(0,1)
double dato
=rand()/R
; //divido el mas grande aleatorio / rand() return dato;
}
int main()
{
double aux,aux1,p=0;
double suma=0;
for (int i=0; i<10; i++) {
aux= genera_dato(); //genero el numero random
cout<<aux<<endl;
aux1= define_dato(aux); //lo evaluo en que intervalo cae
cout<<aux1<<endl;
p=func_esperanza(aux1); //calculo su esperanza
cout<<p<<endl;
suma+=p;
aux=0;
aux1=0;
p=0;
}
cout<<suma/10; //aplico montecarlo
return 0;
}
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?