Rada Monte Carlo max 120 sek precyzja 10^-4

0

Tak jak w temacie. Mam napisać algorytm monte carlo tak zeby nie przekraczając 120 sek dla procka 1,6 Ghz obliczył mi całkę oznaczoną. Zrobiłbym to na wątkach ale nie widzę sensu skoro dla 1000000000 strzałów program liczy całkę w 7 sek z dokładnością do 10^-2 dopisanie następnego zera skutkuje dodatkową minutą a wynik jeszcze mniej dokładny od poprzedniego.
Ktoś ma jakąś radę?

0

Jak może być mniej dokładny jak masz więcej próbek? Pokaż kod

0

double inheritance::monte_carlo(double(*f)(double))
{
int number_of_strokes;
printf("Podaj ilosc uderzen (im wieksza tym dokladniejsza calka zalecane min 1000000):\n");
scanf("%d",&number_of_strokes);
double integral,interval;
int index;
srand(time(NULL));
integral = 0;
interval = end_of_the_range-beginning_of_the_interval;
for(index = 1; index <= number_of_strokes; index++)
integral += f(beginning_of_the_interval +((double)rand()/(double)(RAND_MAX+1)*interval));
integral = interval * integral / number_of_strokes;
return integral;

}

dla x^2 + 2x w przedziałach od 0 do 10 całka wg Wolfram|Alpha wynosi 433,3333(3)
dla mojego algorytmu dla 100000000 całka oznaczona wynosi 433,322
dla mojego algorytmu dla 10000000000 całka oznaczona wynosi 433,301

0

10000000000 przypadkiem nie wykracza poza zakres inta?

0

Ktoś wie jak uzyskać taką dokładność?

0

Skorzystać z innego typu danych?

0

Ktoś wie jak zmodyfikować rozkład ? Jakieś obniżenie wariancji albo standaryzacja całki? Proszę uprzejmie o pomoc.

1

Tak się tylko zastanawiam jak duży wpływ w tym zadaniu ma użycie funkcji rand(), dla której RAND_MAX przyjmuje kilkadziesiąt tysięcy wartości. Przy sugerowanej liczbie iteracji powinieneś ze 100 razy znaleźć optymalne rozwiązanie.
Może skorzystaj z mt19937.

1 użytkowników online, w tym zalogowanych: 0, gości: 1