Metoda Monte Carlo
Z Wikipedie, otevřené encyklopedie
Monte Carlo je třída algoritmů pro simulaci systémů. Jde o stochastické metody používající náhodná čísla. Typicky využívány pro výpočet integrálů, zejména vícerozměrných, kde běžné metody nejsou efektivní. Metoda Monte Carlo má široké využití od simulaci experimentů přes počítání určitých integrálů až třeba řešení diferenciálních rovnic. Základní myšlenka této metody je velice jednoduchá, chceme určit střední hodnotu veličiny, která je výsledkem náhodného děje. Vytvoří se počítačový model toho děje a po proběhnutí dostatečného množství simulací se mohou data zpracovat klasickými statistickými metodami, třeba určit průměr a směrodatnou odchylku.
Rozlišují se dvě varianty metody Monte Carlo, analogový a neanalogový model.
Obsah |
[editovat] Analogový model
Musíme umět modelovat celou situaci na počítači, to znamená například znát všechna pravděpodobnostní rozložení zkoumaných jevů a fyzikální zákonitosti, kterými se řídí. Provedením této simulace získáme výsledek,realizaci jakési náhodné veličiny ξ. Tuto simulaci spustíme n-krát a získáme soubor historií x1 ...xn . Odhad střední hodnoty ξ se určí :
a směrodatná odchylka se určí jednoduše jako
[editovat] Neanalogový model
Tak se nazývá případ, při výpočtu nepoužíváme model reálného děje. Například výpočet určitého integrálu, případně obsahu ohraničeného útvaru.
[editovat] Integrace metodou Monte Carlo
Hlavní výhodou integrace touto metodou je její jednoduchost. Na druhou stranu, přesnost výpočtu je velice nízká obzvláště pokud má integrovaná funkce úzká maxima. Pokud se potřebuje přesný výsledek je výhodnější použít jiné metody.
Pokud určíme hodnotu funkce f v N náhodných bodech ležících v integrační oblasti V pak platí vztah
kde x označuje náhodný bod v oblasti V,
označuje průměr funkčních hodnot a yi jednotlivé výsledky.
Pokud budeme tento integrál počítat metodou Monte Carlo musíme oblast V uzavřít do co nejmenší oblasti V'. Případně oblast V rozdělit na více částí a integrovat je samostatně. Nyní zavedeme funkce
takto
potom vygenerujeme N náhodných bodů ležících v oblasti V' a přibližnou hodnotu integrálů určíme jako
a směrodatná odchylka se určí analogicky jako v předešlém případě
[editovat] Příklad
Je dána funkce
tedy předpis polokoule. Oblast V bude kružnice s poloměrem R a V' čtverec o straně 2R který ji těsně obepíná. funkce
bude definována takto
Během simulace si stačí zaznamenat pouze hodnoty
a 
Zde je jednoduchý příklad jak by to mohlo vypadat v praxi
#include<math.h> const double R = 1; double f(double x,double y) { double fx = R*R-x*x-y*y; return fx<0?0:sqrt(fx); } void integral(int n,double &I,double &u) { double r,t,x; r = t = 0; for(int i= 0;i < n;i++){ x = f(2*R*rand()/RAND_MAX-R,2*R*rand()/RAND_MAX-R); r+= x; t+= x*x; } I = 4*R*R*r/n; u = I*sqrt(t/(r*r)-1.0/n); }
[editovat] Přesnost metody Monte Carlo
K odhadu chyby výsledku získaného metodou Monte Carlo se většinou používá střední kvadratická chyba aritmetického průměru. Chyba výsledku získaného pomocí n historií je úměrná
. Takže aby se zlepšil výsledek o jeden řád musí se počet historií zvýšit alespoň o dva řády. Abychom získali výsledek s přesností na 6 desetinných míst, což odpovídá přesnosti jiných metod musíme získat 1012 historií.
[editovat] Další použití metody
- Buffonova úloha
- projekt Manhattan
- Rabin-Millerův algoritmus - test prvočíselnosti
[editovat] Související články
- Genetické algoritmy - další skupina numerických metod používající náhodná čísla.









