Przeczytaj
Jak wyznaczyć wartość ?
Metoda Monte Carlo została omówiona w e‑materiale Wyznaczanie liczby pi metodą Monte CarloWyznaczanie liczby pi metodą Monte Carlo.
Załóżmy, że wpisaliśmy w kwadrat koło o promieniu r
. Długość boku kwadratu wynosi zatem 2r
:
Pola kwadratu i koła wynoszą odpowiednio:
Obliczmy stosunek powierzchni koła do powierzchni kwadratu:
Gdybyśmy znali pole powierzchni koła oraz pole powierzchni kwadratu, bylibyśmy w stanie wyznaczyć wartość . Jest ona czterokrotnie większa od liczby S (czyli stosunku pól powierzchni koła i kwadratu).
Powierzchnię kwadratu obliczymy bez problemu. Niestety, z kołem jest trudniej. Aby skorzystać ze wzoru na pole powierzchni (czyli zastosować metodę analitycznąmetodę analityczną), niezbędna jest znajomość liczby .
Spróbujmy więc znaleźć inny sposób wyznaczenia stosunku powierzchni koła i kwadratu. Jest on dobrym przykładem zastosowania metody Monte Carlo.
Metoda Monte Carlo
Narysujmy kwadrat z wpisanym w niego kołem:
Następnie zacznijmy rzucać na rysunek ziarenka piasku. Gdy pokryją one cały kwadrat, stosunek liczby ziarenek wewnątrz narysowanego okręgu do wszystkich rzuconych ziarenek będzie (prawie) równy stosunkowi pola koła do pola kwadratu.
W praktyce nie musielibyśmy pokrywać całego rysunku piaskiem. Wystarczyłoby zadbać o to, aby ziarenka spadały w losowych miejscach. Wraz ze wzrostem liczby rzuconych ziarenek zwiększa się jednak precyzja wyznaczania stosunku pól obu figur.
Jak zasymulować takie doświadczenie za pomocą komputera? Wyobraźmy sobie wpisane w kwadrat koło o promieniu r
, mające środek w punkcie . Będziemy losować punkty o współrzędnych , mieszczących się w zakresie od -r
do r
, a następnie sprawdzać, ile z nich znalazło się we wnętrzu koła, a ile nie. Stosunek tych dwóch liczb będzie odpowiadał stosunkowi pól koła i kwadratu. Dokładność metody będzie rosła wraz ze zwiększaniem liczby losowań.
Stosunek pól będzie taki sam również w przypadku ćwiartek koła i kwadratu (jeżeli pole koła i pole kwadratu podzielimy na cztery części, to stosunek ich powierzchni się nie zmieni). Wystarczy zatem, że będziemy losowali punkty o współrzędnych od do r
. Losując odpowiednio dużą liczbę punktów, powinniśmy otrzymać przybliżenie wartości liczby .
Zdefiniujemy funkcję obliczającą wartość dla zadanej liczby losowych punktów (domyślnie będzie ich 3000). Zwróć uwagę na zapis from random import random as r
– pozwala on użyć innej nazwy dla funkcji importowanej z modułu języka Python. W prezentowanym przykładzie funkcji random()
nadamy nazwę r()
:
Specyfikacja problemu:
Dane:
punkty
– liczba losowych punktów, liczba naturalna większa niż 0
Wynik:
pi
– obliczona wartość liczby , liczba rzeczywista
Podane niżej wartości liczby są przykładowe i dla każdego uruchomienia programu mogą być inne.
Jak możemy zauważyć, wraz ze zwiększaniem liczby losowanych punktów wzrasta dokładność wyznaczania wartości pi.
Aby pokazać działanie programu, posłużymy się biblioteką matplotlibmatplotlib i wyświetlimy losowane punkty:
Specyfikacja problemu:
Dane:
punkty
– liczba punktów wykorzystanych do metody Monte Carlo; liczba naturalna większa niż 0
Wynik:
wykres przedstawiający rozmieszczenie wylosowanych punktów
Efektem będzie rysunek, w którym punkty w okręgu zaznaczone są kolorem czerwonym, a poza nim – niebieskim:
Zapisz funkcję monte_carlo_pi()
tak, aby wykonywała n
prób obliczenia wartości liczby i zwracała wynik jako średnią wszystkich prób.
Działanie programu przetestuj dla podanych danych.
Specyfikacja problemu:
Dane:
punkty
– liczba losowych punktów, liczba naturalna większa niż 0n
– liczba prób obliczenia liczby , liczba naturalna większa niż 0
Wynik:
pi
– obliczona wartość średnia liczby , liczba rzeczywista
Podsumujmy najważniejsze elementy tego e‑materiału:
Metoda Monte Carlo jest przydatna do obliczania przybliżonych wartości.
Możemy importować funkcje z modułów i nadawać im własne nazwy.
Moduł matplotlibmatplotlib doskonale nadaje się do wizualizacji.
Słownik
biblioteka służąca do przedstawienia obrazów złożonych z punktów o współrzędnych x
oraz y
(wykresów, histogramów, rozkładów itp.); moduł matplotlib
nie jest dostępny w standardowej instalacji języka Python - należy go zainstalować, korzystając z mechanizmu pip
konkretny sposób oznaczania analitu za pomocą danej techniki, poprzez wykonanie określonego postępowania