Lab 7 – zadania M. Głowacki, L-10, PK
1
Laboratorium komputerowe 7
Zadania
zad. 1.
Zastosować metodę Monte Carlo do wyznaczenia liczby 𝜋 .
Wprowadzenie – idea prostej metody Monte Carlo
Rozważmy kwadrat o boku 𝑎 = 1. Pole takiego kwadratu jest równe 𝑃𝑘𝑤 = 𝑎2 = 1.
Lewy dolny wierzchołek kwadratu znajduje się w początku układu współrzędnych 𝑂(0,0).
W kwadrat wpisujemy ćwiartkę okręgu w taki sposób, że środek okręgu również znajduje się w początku układu współrzędnych.
Pole wycinka koła, ograniczonego dwoma bokami kwadratu i wpisaną w ten kwadrat ćwiartką okręgu (obszar czerwony) jest równe 𝑃 = 14𝜋𝑟2 =14𝜋𝑎2 =14𝜋. Jednak pole to możemy również obliczyć w inny sposób, korzystając z metody Monte Carlo.
Za pomocą generatora liczb pseudolosowych o rozkładzie równomiernym generujemy 𝑁 punktów wewnątrz kwadratu i następnie zliczamy ile punktów znalazło się wewnątrz obszaru ograniczonego okręgiem 𝑥2+ 𝑦2 = 1. W kolejnym kroku korzystamy z zależności:
𝑃 𝑃𝑘𝑤 = 𝑛
𝑁
gdzie 𝑛 to liczba punktów wewnątrz ćwiartki okręgu, 𝑁 to liczba wszystkich punktów, 𝑃 to szukane pole wycinka koła, a 𝑃𝑘𝑤 to pole kwadratu.
1 1
0 x
y
Lab 7 – zadania M. Głowacki, L-10, PK
2
Implementacja metody – wyznaczenie liczby 𝜋, ilustracja graficzna
Korzystając z metody Monte Carlo opisanej we wprowadzeniu napisać skrypt w Octave/Matlab, który wyznaczy liczbę 𝜋.
Podpowiedź:
Korzystając z zależności:
𝑃 𝑃𝑘𝑤 = 𝑛
𝑁 otrzymujemy:
𝑃 = 𝑛 𝑁𝑃𝑘𝑤 1
4𝜋𝑎2 = 𝑛 𝑁𝑎2
𝜋 = 4𝑛 𝑁
Do generacji liczb pseudolosowych z przedziału (0, 1) można wykorzystać funkcję rand().
Każdy punkt 𝑃 na płaszczyźnie definiujemy za pomocą współrzędnych kartezjańskich 𝑃𝑥 oraz 𝑃𝑦, które możemy wygenerować osobno, przykładowo:
Px = rand(1);
Py = rand(1);
Sprawdzenie, czy punkt należy do obszaru ograniczonego okręgiem możemy wykonać za pomocą instrukcji warunkowej:
if Px*Px + Py*Py < 1
...
end
Skrypt powinien mieć możliwość łatwej zmiany liczby generowanych punktów 𝑁.
Dodatkowo skrypt ma wykonywać ilustrację graficzną metody: wyświetlać ćwiartkę okręgu oraz wszystkie wygenerowane punkty z podziałem na dwa kolory – jeden kolor dla punktów znajdujących się wewnątrz obszaru ograniczonego okręgiem, a drugi dla pozostałych punktów.
Lab 7 – zadania M. Głowacki, L-10, PK
3
Przykładowy wynik działania skryptu przedstawiono poniżej (ze względu na statystyczny charakter obliczeń wyniki mogą się oczywiście różnić dla kolejnych uruchomień skryptu).
Podpowiedź:
Do narysowania punktu można wykorzystać funkcję plot() z odpowiednim parametrem formatującym wyświetlanie, przykładowo:
plot(Px,Py, 'r*') % kolor punktu: czerwony
% styl punktu: gwiazdka
Każdy punkt może być rysowany osobno – w zmiennych Px i Py trzeba w takiej sytuacji zapisać pojedyncze wartości, tak jak na poprzedniej stronie. Po pierwszym użyciu funkcji plot trzeba pamiętać o instrukcji hold on.
zad. 2.
Napisać funkcję, która dla dowolnego n tworzy macierz kwadratową 𝐴𝑛 × 𝑛 wypełnioną kolejnymi liczbami naturalnymi zgodnie z podanymi schematami (przykłady dla n = 4):
a) b) c)
[
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
] [
1 5 9 13
2 6 10 14 3 7 11 15 4 8 12 16
] [
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13 ]