Jak se počítá Ludolfovo číslo

Na těchto stránkách naleznete principy a ukázku použití algoritmů pro výpočet čísla PI. Zde je stručný obsah:


Metoda n-úhelníků

  Tato metoda je historicky nejstarší, poprvé ji použil Archimedes již ve třetím století před Kristem. Vychází z jednoduchého předpokladu, že kružnice je vlastně pravidelný n-úhelník s velkým (nekonečným) počtem vrcholů. Pro výpočet se použije jak vepsaný, tak opsaný n-úhelník a výsledkem je tedy interval, ve kterém se PI vyskytuje. Se zvyšujícím se počtem vrcholů se samozřejmě tento interval zužuje.
  Metoda samotná je tedy velmi jednoduchá, ale má drobný problém - pro výpočet musíme určit sinus a kosinus úhlu 360°/(2·n). Goniometrické funkce ale naštěstí lze vyjádřit racionálním číslem (zlomkem), což je pro přesnost výpočtu dosti důležité (nedochází k zaokrouhlení).

Nyní se pokusím odvodit vzorec pro hodnotu PI.

náčrt pro odvození Z náčrtku jsou zřejmé vztahy:
vzorec , vzorec , a tedy
vzorec , vzorec .
Pro obvody n-úhelníků a kružnice pak platí nerovnost:
vzorec, ze které odvodíme vztah pro pi
vzorec .

Přesnou hodnotu PI lze pak získat limitou pro n jdoucí k nekonečnu.

Zde by měl být applet ilustrující výpočet PI pomocí obvodu n-úhelníku.
 Zkuste si zapnout zobrazování Javy (Edit/Preferences/Advanced u Netscapu)

Zpřesňování odhadu je lépe patrné z tabulky, ve které najdete hodnoty pro 3-100 úhelník.


Rozvoj nekonečné řady

  Jak už je patrno z názvu, tato metoda používá k výpočtu součet nekonečné řady, který je právě hodnotou PI. Používá se hned několik vzorců, ale zde popsaný a při výpočtu použitý je vzorec odvozený Leibnitzem na konci sedmnáctého století: PI = 4·(1 - 1/3 + 1/5 - 1/7 + ...). Nevýhodou tohoto vzorce je exponenciální vztah počtu potřebných členů na počtu přesností požadovaných desetinných míst. Dalším vzorec je PI = 48·arctg(1/18) + 32·arctg(1/57) - 20·arctg(1/239), který používá rozpisu funkce arctg pomocí nekonečné řady. Pro výpočet těchto řad se v současnosti používají speciální algoritmy.

  Jak je z Leibnitzova vztahu patrné, jedná se o součet nekonečné řady:
                               vzorec pro PI       . . .   vzorec pro A(n)
  Výpočet se provádí, dokud je člen větší než 10^(-d), kde d je počet desetinných míst, na které chceme PI spočítat. Výsledek pak získáme oříznutím (nikoliv zaokrouhlením) na požadovaný počet des. míst. Díky exponenciální složitosti je však vzorec pro větší d velmi pomalý.

Zde by měl být applet počítající PI rozvojem nekonečné řady.
 Zkuste si zapnout zobrazování Javy (Edit/Preferences/Advanced u Netscapu)


Ovládání

  Ovládání appletů na této stránce je velmi jednoduché. První applet umožňuje nastavení počtu vrcholů pomocí tlačítek + a - nebo přímé zadání počtu do TextFieldu a jeho nastavení tlačítkem Nastav. Po stisku jednoho ze tří tlačítek se překreslí zobrazované n-úhelníky a přepočtou hodnoty odhadu PI.
  Applet druhý umožňuje nastavení požadované přesnosti výpočtu a frekvenci zobrazovaných výsledků. Pokud nastavíme frekvenci na n, bude se průběžný výsledek zobrazovat při dosažení členu, který je násobkem n (tedy 0, n, 2n,...). Toto nastavení umožňuje zvýšit rychlost výpočtu, protože zobrazení výsledku je časově mnohem náročnější než výpočet samotný. Pokud není frekvence uvedena, použije se "optimální" hodnota. Nastavení výpočtu je v průběhu výpočtu zobrazeno v řádku stavu výpočtu.
  Z popsaného je patrné, že veškeré vstupy jsou číselné. Pokud se uvede nečíselná hodnota, nebude akce provedena. Vyjímkou je pouze nastavení frekvence, kdy se použije "optimální" hodnota.


Applety

zdroje.zip (download)

  Na této stránce se nachází dva applety. V tomto odstavci bych chtěl popsat zajímavosti, které se v appletech vyskytují a mohli by sloužit jako inspirace při tvorbě vaší semestrálky.

  Oba applety mají pevné umístění komponent (nepoužívají LayoutManager) a k jejich umístění je použit speciální typ Position, který jejich umísťování usnadňuje. Pokud by jste ho chtěli použít, bude nejlepší podívat se na jeho použití v obou appletech.

  První applet (class Okno1) používá k vykreslení n-úhelníků další komponenty, a to abstraktní třídu Poly (n-úhelník se zadaným počtem bodů a poloměrem) a její potomky InnerPoly (vepsaný pravidelný n-úhelník) a OuterPoly (opsaný). Samotné vykreslování (PolyCanvas) je prováděno ve vlákně, takže i při složitějším výpočtu bodů n-úhelníku je možno s appletem dále pracovat. Běh v nezávislém vlákně však občas vede k chybám při běhu dvou vláken paralelně (pokud se nový výpočet zahájí ještě před dokončením starého), protože původní vlákno se spuštěním nového nezruší. Pokud není korektní běh vláken prohlížečem zajištěn, mohou se obě vlákna navzájem rušit.
  Druhou částí tohoto appletu je výpočet hodnoty PI z obvodu n-úhelníku. Ten probíhá také ve vlákně, ale délka výpočtu není tak velká a je konstantní s počtem uzlů (pouze se počítá hodnota goniometrických funkcí).

  Applet druhý (Okno2) provádí rozvoj řady, který je velmi náročný na čas. Proto je výpočet taktéž prováděn ve vlákně, které lze zastavit (a tedy i zrušit). Není však možné výpočet pozastavit a pak opět spustit.
  Při zkoušení tohoto appletu jsem zjistil, že při velké frekvenci zobrazování výsledků se v Internet Exploreru občas mění jen některé hodnoty, zatímco ostatní zůstavají podle nastavení při iniciaci. Není to chyba appletu, nýbrž prohlížeče.

  Pokud by vás zajímaly podrobnosti k některé z tříd, naleznete je v dokumentaci k úloze (formát MSWord97).

  A nakonec ještě malá, i když dost podstatná poznámka. Pokud se vám applety nespustí s hláškou "Class ... not found" nebo jinou chybou, zkuste jiný prohlížeč. Doma jsem použitelnost zkoušel v IE4.0 a Netscapu4.06. Ve škole (tedy v NT učebně K311) mi to běhalo jen pod Netscapem4.5 (tedy Comunicatorem). Staré verze (4.05) nejspíš podporují jen JDK1.0.

zdroje.zip (download)

 


Tyto stránky vznikly jako semestrální práce z předmětu PJW,
zadání 479.m - Jak se počítá Ludolfovo číslo.
Vytvořil Jan Kocián, LS 1999
e-mail