Metoda Monte Carlo

advertisement
Ilustracja obliczania całek
oznaczonych metodą Monte Carlo
Paweł Kopeć
Paweł Dymacz
Michał Marzyński
Piotr Moroń
Askaniusz Gołdys
Metoda Monte Carlo
Metoda Monte Carlo jest stosowana do modelowania
matematycznego procesów zbyt złożonych, aby można
było przewidzieć ich wyniki za pomocą podejścia
analitycznego. Należą do nich całki oraz łańcuchy
stochastyczne. Istotną rolę w metodzie MC odgrywa
losowanie (wybór przypadkowy) wielkości
charakteryzujących proces, przy czym losowanie
dokonywane jest zgodnie z rozkładem, który musi być
znany.
Zastosowanie i dokładność
Metoda MC używana jest w
przypadkach, kiedy szybkość
otrzymania wyniku jest ważniejsza
od jego dokładności (np.
obliczenia inżynierskie).
Dokładność wyniku uzyskanego tą
metodą jest zależna od liczby
sprawdzeń i liczb, które są
używane do obliczania.
Zwiększanie liczby prób nie
zawsze zwiększa dokładność
wyniku, ponieważ jest skończenie
wiele liczb losowych.
Algorytm do oblicznia przybliżonej
wartości całki oznaczonej
1.
Weźmy dowolna całkę oznaczoną:

b
a
2.
3.
4.
f ( x)dx
Następnie losujemy niezależne liczby u1,u2,…,un z
rozkładu jednostajnego U[0,1];
Obliczamy xk:
xk= a + (b – a)uk dla k=0,1,2,…,n;
Przybliżoną wartość całki obliczamy ze wzoru:

b
a
ba n
f ( x)dx 
f ( xk )

n k 1

Przykład obliczeń

1
1 x
dx
1 x

Poniższą całkę obliczamy korzystając z twierdzenia Newtona – Leibniza
oraz dokonując odpowiednich podstawień :

Przykład obliczeń

1
1 x
dx
1 x

Do obliczenia tej całki metodą M-C został napisany program w języku C++. Za
funkcją losującą liczby z rozkładu jednostajnego N[0,1] posłużyła funkcja random() z
biblioteki standardowej.

Przykład obliczeń
Otrzymane wyniki
Ilość losowań
Wynik M-C
Różnica
pomiędzy
wynikami obu
metod
100
0,649038794
103
0,64786397
104
0,646812814
105
0,647339558
0,010233812
106
0,647323202
0,010250168
107
0,647330828
0,010242542
1010
0,64731663
0,01025674
0,008534576
0,0097094

1
1 x
dx
1 x

Jeśli przyjąć wynik obliczony
metoda Newtona – Leibniza za
najdokładniejszy to wartości
obliczane metodą Monte Carlo
dla coraz większych rzędów n
różnią się o coraz większe
wartości od wartości prawdziwej
całki.
0,010760556
Jest to dowód na to, ze
ogromny wpływ na dokładność
tej metody ma generator liczb
pseudolosowych.
.
Przykład obliczeń
e
ln x
 x 2 dx
e
Spróbujmy najpierw obliczyć tą całkę metodą NewtonaLeibniza, a następnie metodą Monte Carlo i porównać
otrzymane wyniki.
.
Przykład obliczeń
e
ln x
 x 2 dx
e
•
•
•
Metoda Monte Carlo.
Wybieramy na początek n=10.
Losujemy 10 liczb niezależnie z rozkładu jednostajnego z przedziału[0,1] :
•
Skalujemy przedział [0,1] na
•
Obliczamy teraz wartość funkcji w podanych wyżej punktach :
•
Teraz sumujemy te wartości :

e, e

zgodnie ze wzorem .
.
Przykład obliczeń
e
ln x
 x 2 dx
e
•
I otrzymujemy wynik całki :
•
Zatem błąd metody Monte Carlo względem metody Newtona-Leibniza
jest dość duży, bo rzędu 10 .
2
.
Przykład obliczeń
e
ln x
 x 2 dx
e
•
Spróbujemy teraz zwiększyć dokładność losując większą ilość liczb (np.
n=1000)
•
Wynik całki :
•
Jak widać, dla n=1000 różnica pomiędzy wynikiem z metody Monte Carlo a
wynikiem metody Newtona-Leibniza zaczyna się dopiero na 4. miejscu po
przecinku. Wniosek : im większy parametr n, tym dokładniejszy wynik.
Całka z logarytmu


ln x 3  3x
10 3 dx
42


ln x 3  3x
10 3 dx
42

ln x 3  3x
y
3



ln x 3  3x
10 3 dx
42
Całka z logarytmu
Sprawdźmy jak wygląda samo rozwiązanie całki nieoznaczonej:



 
ln x 3  3x
1
1
2
2


dx

x
x

3
dx

ln
x
dx

ln
x
 3 dx 
 3


3
3
1
 x ln x x 2  3  3x  3 ln x  3  3 ln x  3  C
3
 


Nie wygląda aż tak źle...






Całka z logarytmu


ln x 3  3x
10 3 dx
42
Obliczenia pomocnicze: (Jak widać trochę tego jest...)
 ln x dx   1 ln x dx 
 ln x
2



f  ln x 
g  1


f  ln x 2  3
 3 dx   1  ln x  3 dx 

2

1
x  x ln x    1dx  xln x   1  C
gx
f

g  1


2x
2x2
2
2
x  3  x ln x  3   2 dx 
x 3
gx

f


 x ln x 2  3  2 x  3 ln x  3  3 ln x  3  C
 x2  3
2x2
3 
1
1




dx

2

dx

2
x

3
dx

2
x

6
dx 


2
2
 x2  3
  x 2  3 x 2  3 


x

3
x

3


 
 

1
1
1
 1

 2 x  6

dx 

dx   2 x  3 ln x  3  ln x  3  C
2 3 x 3 
2 3 x 3
Całka z logarytmu

• Stosując Metodę Monte Carlo możemy oszczędzić sobie tych
obliczeń...:)
Liczba wylosowanych
liczb:
N = 10
N = 100
N = 1000
N = 10000
CASIO fx-991ES

ln x 3  3x
10 3 dx
42
Wynik:
106,368928736782
102,646049997934
102,235650194547
101,993618785577
101,8795832

Przykład obliczeń
1
f ( x)  sin 2 ( )
x
1
 sin ( x )dx
1

2

Przykład obliczeń

1
 sin ( x )dx
1
2

2
1
2
2 1
Si
(
 sin ( x )dx  x sin ( x )  Si( x ) gdzie x ) to sinus całkowy
1
2

Obliczenie przy pomocy metod numerycznych programu MATLAB:
- quad - kwadratura adaptacyjna
oparta o interpolacje wielomianem
2 stopnia (metoda parabol
Simpsona)
Wynik: 1.1033962966
- quadl - kwadratura adaptacyjna
oparta o aproksymacje
wielomianem 8 stopnia (metoda
Newtona-Cotesa)
Wynik: 1.1033962962

Przykład obliczeń
1
 sin ( x )dx
1
2

Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1].
u = [ 0.16888, 0.74517, 0.47713, 0.65344, 0.96658, 0.03130, 0.07644,
0.79142, 0.36538, 0.58510]

Przykład obliczeń
1
 sin ( x )dx
1
2

Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1].
u = [ 0.16888, 0.74517, 0.47713, 0.65344, 0.96658, 0.03130, 0.07644,
0.79142, 0.36538, 0.58510]
Przenosimy i skalujemy przedział [0,1]
1

na przedział [ , ] :
x = [0 .79511, 2.42214, 1.66538, 2.16316, 3.04724, 1.20208, 0.53412, 2.55271,
1.34988, 1.97021]

Przykład obliczeń
1
 sin ( x )dx
1
2

Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1].
u = [ 0.16888, 0.74517, 0.47713, 0.65344, 0.96658, 0.03130, 0.07644,
0.79142, 0.36538, 0.58510]
Przenosimy i skalujemy przedział [0,1]
1

na przedział [ , ] :
x = [0 .79511, 2.42214, 1.66538, 2.16316, 3.04724, 1.20208, 0.53412, 2.55271,
1.34988, 1.97021]
Obliczamy teraz wartości funkcji
1
f(x)  sin2 ( ) w tych punktach:
x
f(x k )  [ 0.90513, 0.16098, 0.31925, 0.19891, 0.10388, 0.54643, 0.91185,
0.14577, 0.45547, 0.23624]

Przykład obliczeń
1
 sin ( x )dx
1
2

Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1].
u = [ 0.16888, 0.74517, 0.47713, 0.65344, 0.96658, 0.03130, 0.07644,
0.79142, 0.36538, 0.58510]
Przenosimy i skalujemy przedział [0,1]
1

na przedział [ , ] :
x = [0 .79511, 2.42214, 1.66538, 2.16316, 3.04724, 1.20208, 0.53412, 2.55271,
1.34988, 1.97021]
Obliczamy teraz wartości funkcji
1
f(x)  sin2 ( ) w tych punktach:
x
f(x k )  [ 0.90513, 0.16098, 0.31925, 0.19891, 0.10388, 0.54643, 0.91185,
0.14577, 0.45547, 0.23624]
Sumujemy wyrazy wektora:
10
 f(x k )  3.98391
k 1

Przykład obliczeń
1
 sin ( x )dx
1
2

Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1].
u = [ 0.16888, 0.74517, 0.47713, 0.65344, 0.96658, 0.03130, 0.07644,
0.79142, 0.36538, 0.58510]
Przenosimy i skalujemy przedział [0,1]
1

na przedział [ , ] :
x = [0 .79511, 2.42214, 1.66538, 2.16316, 3.04724, 1.20208, 0.53412, 2.55271,
1.34988, 1.97021]
Obliczamy teraz wartości funkcji
1
f(x)  sin2 ( ) w tych punktach:
x
f(x k )  [ 0.90513, 0.16098, 0.31925, 0.19891, 0.10388, 0.54643, 0.91185,
0.14577, 0.45547, 0.23624]
Sumujemy wyrazy wektora:
10
 f(x k )  3.98391
k 1

I ostatecznie:
2 1
sin
( )dx 

x
1

1
1


10

  3.98391  1.12477
f(x k ) 

10 k 1
10

Wnioski
•
•
•
Dokładność wyniku uzyskanego tą metodą jest zależna od liczby
sprawdzeń i jakości użytego generatora liczb pseudolosowych.
Zwiększanie liczby prób nie zawsze zwiększa dokładność wyniku, ponieważ
generator liczb pseudolosowych ma skończenie wiele liczb losowych w
cyklu.
Ta metoda całkowania jest używana w przypadkach, kiedy szybkość
otrzymania wyniku jest ważniejsza od jego dokładności (np. obliczenia
inżynierskie).
Poprawność metody Monte Carlo w przypadku liczenia pól lub całek można
udowodnić stosując twierdzenie Picka (lub jego wielowymiarowe
uogólnienia) do najlepszego wielokąta wpisanego w figurę, której pole
chcemy obliczyć w przybliżeniu tzw. kryształu wirtualnego, tzn. regularnej
siatki punktów o stałej sieci równej średniej odległości między
wylosowanymi punktami. W nieskończonej granicy tych wielokątów i siatek
metoda jest dokładna dla dowolnego kształtu.
Koniec
Download