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 ba 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 xln x 1 C gx f g 1 2x 2x2 2 2 x 3 x ln x 3 2 dx x 3 gx 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