background image

 

 

Rachunek Prawdopodobieństwa
Grupa wykładowa: środa g. 15.15

Grupa w składzie:

1. Wojciech Nawracała
2. Paweł Gancarz
3. Michał Frysztacki
4. Paweł Trajdos
5. Jakub Bubin

Prezentuje

:

Ilustracja metody 

Monte Carlo

Monte Carlo

 

obliczania całek podwójnych

background image

 

 

Spis treści:

 Treść zadania
 Kilka słów o metodzie Monte Carlo
 Algorytm obliczania całek podwójnych metodą    
 Monte Carlo
 Przykłady rozwiązań, tabele zbiorcze

background image

 

 

Treść zadania:

background image

 

 

Kilka słów o metodzie Monte Carlo

Metoda opracowana została przez polskiego matematyka, Stanisława Ulama, 
nazwa wzięła się ze skojarzenia jej z osobą wujka­hazardzisty tegoż 
matematyka. Metoda ta wykorzystywana jest nie tylko do obliczania całek, ale 
ogólnie rzecz biorąc, do modelowania procesów matematycznych i fizycznych 
zbyt złożonych do obliczeń analitycznych. 

Na czym polega metoda MC obliczania całek podwójnych?

 1. Na obszarze całkowania opisywany jest prostokąt, i za pomocą generatora 
liczb pseudolosowych generuje się zadaną wcześniej jako ilość prób ­ liczbę 
punktów tego prostokąta.
 
2. W każdej próbie sprawdzane jest, czy współrzędne
 wylosowanego punktu zawierają się w polu obszaru całkowania czy też nie. 

3. Wynik to stosunek sumy wartości całkowanej funkcji w punktach trafionych 
w obszar całkowania do ilości wszystkich prób, pomnożony przez pole 
prostokąta 

background image

 

 

Algorytm Monte Carlo jako kod języka c++

inline double gen()

int MAX=1000;
return ((double)(rand()%MAX))/MAX; 

double calkaMonteCarlo(double a, double b,double c,double d,
double(*ptr)(double,double),unsigned int n) 
{

double w; int j=0; double sum=0,xk,yk,temp; 
if(a>b){temp=a;a=b;b=temp;} 
for(unsigned int i=0;i<n;i++) 

xk=a+(b-a)*gen(); 
yk=c+(d-c)*gen(); 
sum+=ptr(xk,yk); 
w=n/76; j++; 
if(j==abs(w)) 

printf ("|"); j=0; 


return ((b-a)*(d-c)/n)*sum;} 

Generator liczb

pseudoloswych.

Kod “liczący” pole całki

­ sprawdza,  czy

wylosowana liczba

mieści się w polu

określonym przez funkcję

podcałkową.

background image

 

 

Funkcja pierwsza

Kod funkcji:

double fun1(double x, double y) 

if(y>=0&&y<=sqrt(1-(x*x))) 
return x; else return 0; 

Wykres prezentujący

zbieżność wyniku 

analitycznego oraz

wyników numerycznych

W zależności od 

liczby prób. 

Kod funkcji

I

wykres funkcji.

background image

 

 

Funkcja druga

Kod funkcji:

double fun2(double x, double y) 

if(y<=(1/x)) return exp(x*y); 
else return 0; 

Kod funkcji

I

wykres funkcji.

Wykres prezentujący

zbieżność wyniku 

analitycznego oraz

wyników numerycznych

w zależności od 

liczby prób .

background image

 

 

Funkcja trzecia

Kod funkcji:

double fun3(double x, double y)

if(y>=(x/2) && y<=2*x) 
return 1/((1+x+y)*(1+x+y)); 
else return 0; 

Wykres prezentujący

zbieżność wyniku 

analitycznego oraz

wyników numerycznych

w zależności od 

liczby prób. 

Kod funkcji

I

wykres funkcji.

background image

 

 

Funkcja czwarta

Kod funkcji:

double fun4(double x, double y) 

if (y>=(x*x)) 
return 

((exp(exp(sin(exp(x*y))))));

else return 0; 

}

Wykres prezentujący

zbieżność wyniku 

analitycznego oraz

wyników numerycznych

w zależności od 

liczby prób. 

Kod funkcji.

background image

 

 

Kod programu obliczającego całki

int main() 

srand((unsigned)time(NULL)); 
int N=1000000; // ilo

 prób 

ść

double t; t=exp(1.0); 
a,b,c,d 
printf("\n%f\n",calkaMonteCarlo(0,1,0,1,fun1,N)); 
printf("\n%f\n",calkaMonteCarlo(1,t,0,1,fun2,N)); 
printf("\n%f\n",calkaMonteCarlo(0,2,0,4,fun3,N)); 
printf("\n%f\n",calkaMonteCarlo(0,2,0,3,fun4,N)); 
system("pause"); 

Ilość losowanych

liczb ­ prób.

Obliczanie i

wyświetlanie

 wyników całkowania

poszczególnych funkcji.

Krótki opis zasady działania programu:

1. Na obszarze całkowania opisywany jest prostokąt, oraz 
    Ustalamy liczbę prób – liczb pseudolosowych generowanych przez generator.
2. W każdej próbie sprawdzane jest, czy współrzędne wylosowanej liczby zawierają się
    w przedziale całkowania.
3. Wynik, to stosunek  sumy prób trafionych w obszar całkowania do ilości wszystkich
   prób wymnożony przez pole prostokąta.

background image

 

 

Podsumowanie wyników obliczeń

Jak widać wyniki obliczenia

numeryczne zbiegają do 

większej dokładności przy 

większej liczbie prób.

Dla każdej funkcji należy więc

dobrać optymalną liczbę liczb.

Pamiętać należy jednak o tym, 

że metoda Monte Carlo zwana

też inżynierską służy do

szybkiego otrzymania wyników.

Dokładnosć wyniku schodzi na

drugi plan. 


Document Outline