Pchełki SQL, odcinek 14: Wyznaczamy Pi metodą Monte Carlo

Dzisiaj przedstawię bardzo niepraktyczny sposób na wyliczenie przybliżonej wartości liczby Pi.

Metoda jest niepraktyczna z dwóch powodów: po pierwsze, jest mało dokładna (a także, ze względu na swój losowy charakter, słabo powtarzalna), a po drugie, jest wolnozbieżna – uzyskanie sensownego wyniku wymaga mnóstwa iteracji (około miliona, żeby dostać w miarę dokładnie dwa miejsca po przecinku). Jednak z drugiej strony jest ona banalna obliczeniowo, a także pokazuje, że metodami statystycznymi można dostać się przynajmniej w okolice poprawnego wyniku.

Meritum metody zasadza się na tym, że mamy kwadratową „tarczę” o boku długości jeden, z wpisaną w nią ćwiartką okręgu (w taki sposób, że jeden z narożników kwadratu pokrywa się ze środkiem okręgu). Następnie „strzelamy” losowo w tę tarczę, po czym sprawdzamy ile strzałów trafiło w ćwiartkę, a ile spudłowało. Wreszcie dzielimy jedno przez drugie, wynik mnożymy przez 4 (cały okrąg ma pole powierzchni równe Pi, a więc ćwiartka ma powierzchnię Pi/4, stąd mnożenie) i dostajemy, pi razy oko, wartość Pi.

Kod wygląda następująco:

DECLARE @trafione INT = 0
    , @licznik INT = 0
    , @ilosc_probek INT = 1000000
WHILE @licznik < @ilosc_probek
SELECT
@trafione += CASE WHEN (power(rand(), 2) + POWER(rand(), 2)) < 1.0 THEN 1 ELSE 0 END
, @licznik += 1

SELECT 4.0 * @trafione / @ilosc_probek wynik

Omawiać kodu mi się nie chce, ale jeżeli ktoś czegoś nie zrozumiał, proszę śmiało pytać. Postaram się każde pytanie uważnie zignorować.

Autor: xpil

Po czterdziestce. Żonaty. Dzieciaty. Komputerowiec. Krwiodawca. Emigrant. Rusofil. Lemofil. Sarkastyczny. Uparty. Mól książkowy. Ateista. Apolityczny. Nie oglądam TV. Uwielbiam matematykę. Walę prosto z mostu. Gram na paru instrumentach. Lubię planszówki. Słucham bluesa, poezji śpiewanej i kapel a’capella. || Kliknij tutaj po więcej szczegółów ||

Dodaj komentarz

Bądź pierwszy!

Powiadom o
avatar
wpDiscuz