PchełkiPchełki SQL

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ć.


Hrabia Duszański Hrabia Henryk

Dodaj komentarz

avatar
  Subscribe  
Powiadom o
%d bloggers like this: