Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Jak wyznaczyć wartość π?

Metoda Monte Carlo została omówiona w e‑materiale Wyznaczanie liczby pi metodą Monte CarloPar6HTDQWWyznaczanie liczby pi metodą Monte Carlo.

Załóżmy, że wpisaliśmy w kwadrat koło o promieniu r. Długość boku kwadratu wynosi zatem 2r:

RA23zNB19cz7c
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Pola kwadratu i koła wynoszą odpowiednio:

PK=4r2
PO=πr2

Obliczmy stosunek powierzchni koła do powierzchni kwadratu:

S=POPK=πr24r2=π4

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ąmetoda analitycznametodę 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:

R1a4cOpfBLioa
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

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 ( 0 , 0 ) . Będziemy losować punkty o współrzędnych ( x , y ) , 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ń.

Ciekawostka

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 0 do r. Losując odpowiednio dużą liczbę punktów, powinniśmy otrzymać przybliżenie wartości liczby π.

1
Przykład 1

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

Uwaga!

Podane niżej wartości liczby π są przykładowe i dla każdego uruchomienia programu mogą być inne.

Linia 1. from random import random as r. Linia 3. def monte podkreślnik carlo podkreślnik pi otwórz nawias okrągły punkty znak równości 3000 zamknij nawias okrągły dwukropek. Linia 4. punkty podkreślnik w podkreślnik kole znak równości 0. Linia 5. for i in range otwórz nawias okrągły punkty zamknij nawias okrągły dwukropek. Linia 6. x przecinek y znak równości r otwórz nawias okrągły zamknij nawias okrągły przecinek r otwórz nawias okrągły zamknij nawias okrągły. Linia 7. if otwórz nawias okrągły x asterysk asterysk 2 plus y asterysk asterysk 2 otwórz nawias ostrokątny znak równości 1 zamknij nawias okrągły dwukropek. Linia 8. punkty podkreślnik w podkreślnik kole plus znak równości 1. Linia 9. return 4 asterysk punkty podkreślnik w podkreślnik kole prawy ukośnik punkty. Linia 11. kratka przykład wywołania. Linia 12. print otwórz nawias okrągły monte podkreślnik carlo podkreślnik pi otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 13. kratka 3 kropka 168. Linia 15. print otwórz nawias okrągły monte podkreślnik carlo podkreślnik pi otwórz nawias okrągły 20000 zamknij nawias okrągły zamknij nawias okrągły. Linia 16. kratka 3 kropka 1556. Linia 18. print otwórz nawias okrągły monte podkreślnik carlo podkreślnik pi otwórz nawias okrągły 9000000 zamknij nawias okrągły zamknij nawias okrągły. Linia 19. kratka 3 kropka 141952.
Ważne!

Jak możemy zauważyć, wraz ze zwiększaniem liczby losowanych punktów wzrasta dokładność wyznaczania wartości pi.

1
Przykład 2

Aby pokazać działanie programu, posłużymy się biblioteką matplotlibmatplotlibmatplotlib 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

Linia 1. from random import randrange as r. Linia 3. def monte podkreślnik carlo podkreślnik pi podkreślnik graf2 otwórz nawias okrągły punkty znak równości 3000 zamknij nawias okrągły dwukropek. Linia 4. import matplotlib kropka pyplot as plt. Linia 5. X przecinek Y znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 6. X1 przecinek Y1 znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 7. punkty podkreślnik w podkreślnik kole znak równości 0. Linia 8. for i in range otwórz nawias okrągły punkty zamknij nawias okrągły dwukropek. Linia 9. x przecinek y znak równości r otwórz nawias okrągły minus 100 przecinek 100 przecinek 1 zamknij nawias okrągły prawy ukośnik 100 przecinek r otwórz nawias okrągły minus 100 przecinek 100 przecinek 1 zamknij nawias okrągły prawy ukośnik 100. Linia 10. if otwórz nawias okrągły x asterysk asterysk 2 plus y asterysk asterysk 2 otwórz nawias ostrokątny znak równości 1 zamknij nawias okrągły dwukropek. Linia 11. punkty podkreślnik w podkreślnik kole plus znak równości 1. Linia 12. X kropka append otwórz nawias okrągły x zamknij nawias okrągły. Linia 13. Y kropka append otwórz nawias okrągły y zamknij nawias okrągły. Linia 14. else dwukropek. Linia 15. X1 kropka append otwórz nawias okrągły x zamknij nawias okrągły. Linia 16. Y1 kropka append otwórz nawias okrągły y zamknij nawias okrągły. Linia 17. plt kropka scatter otwórz nawias okrągły X przecinek Y przecinek color znak równości apostrof red apostrof zamknij nawias okrągły. Linia 18. plt kropka scatter otwórz nawias okrągły X1 przecinek Y1 przecinek color znak równości apostrof blue apostrof zamknij nawias okrągły. Linia 19. plt kropka show otwórz nawias okrągły zamknij nawias okrągły. Linia 21. kratka wywołanie. Linia 22. monte podkreślnik carlo podkreślnik pi podkreślnik graf2 otwórz nawias okrągły zamknij nawias okrągły.

Efektem będzie rysunek, w którym punkty w okręgu zaznaczone są kolorem czerwonym, a poza nim – niebieskim:

RPdAmPwszXQdK
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.
Polecenie 1

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ż 0

  • n – liczba prób obliczenia liczby π, liczba naturalna większa niż 0

Wynik:

  • pi – obliczona wartość średnia liczby π, liczba rzeczywista

R1SwCZQakYVKi
Już wiesz

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ł matplotlibmatplotlibmatplotlib doskonale nadaje się do wizualizacji.

Słownik

matplotlib
matplotlib

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

metoda analityczna
metoda analityczna

konkretny sposób oznaczania analitu za pomocą danej techniki, poprzez wykonanie określonego postępowania