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 Weźmy dowolna całkę oznaczoną: 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:
Przykład obliczeń Poniższą całkę obliczamy korzystając z twierdzenia Newtona – Leibniza oraz dokonując odpowiednich podstawień :
Przykład obliczeń 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.
Różnica pomiędzy wynikami obu metod Przykład obliczeń Otrzymane wyniki 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. Jest to dowód na to, ze ogromny wpływ na dokładność tej metody ma generator liczb pseudolosowych. Ilość losowań Wynik M-C Różnica pomiędzy wynikami obu metod 100 0,649038794 0,008534576 103 0,64786397 0,0097094 104 0,646812814 0,010760556 105 0,647339558 0,010233812 106 0,647323202 0,010250168 107 0,647330828 0,010242542 1010 0,64731663 0,01025674
. Przykład obliczeń Spróbujmy najpierw obliczyć tą całkę metodą Newtona-Leibniza, a następnie metodą Monte Carlo i porównać otrzymane wyniki. 8
Przykład obliczeń 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 zgodnie ze wzorem . Obliczamy teraz wartość funkcji w podanych wyżej punktach : Teraz sumujemy te wartości : 9
Przykład obliczeń I otrzymujemy wynik całki : . Przykład obliczeń I otrzymujemy wynik całki : Zatem błąd metody Monte Carlo względem metody Newtona-Leibniza jest dość duży, bo rzędu . 10
. Przykład obliczeń 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. 11
Całka z logarytmu ? ? ?
Całka z logarytmu Sprawdźmy jak wygląda samo rozwiązanie całki nieoznaczonej: Nie wygląda aż tak źle... 13
Całka z logarytmu Obliczenia pomocnicze: (Jak widać trochę tego jest...) 14
Całka z logarytmu Stosując Metodę Monte Carlo możemy oszczędzić sobie tych obliczeń...:) 15
Przykład obliczeń 16
Przykład obliczeń gdzie to sinus całkowy 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 17
Przykład obliczeń Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1]. 18
Przenosimy i skalujemy przedział na przedział : Przykład obliczeń Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1]. Przenosimy i skalujemy przedział na przedział : 19
Przykład obliczeń Przenosimy i skalujemy przedział na przedział : Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1]. Przenosimy i skalujemy przedział na przedział : Obliczamy teraz wartości funkcji w tych punktach: 20
Przykład obliczeń Przenosimy i skalujemy przedział na przedział : Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1]. Przenosimy i skalujemy przedział na przedział : Obliczamy teraz wartości funkcji w tych punktach: Sumujemy wyrazy wektora: 21
Przykład obliczeń Przenosimy i skalujemy przedział na przedział : Niech u będzie wektorem liczb wylosowanych niezależnie z rozkładu jednostajnego U[0,1]. Przenosimy i skalujemy przedział na przedział : Obliczamy teraz wartości funkcji w tych punktach: Sumujemy wyrazy wektora: I ostatecznie: 22
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 Dziekujemy za uwagę !