58
Jihočeská univerzita v Českých Budějovicích Pedagogická fakulta Oddělení celoživotního vzdělávání Závěrečná práce Vybrané deterministické a stochastické metody ve výuce počítačové fyziky Vypracoval: Mgr. Jiří Blažek Vedoucí práce: doc. RNDr. Petr Bartoš, Ph.D. České Budějovice 2017

Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

Jihočeská univerzita v Českých Budějovicích

Pedagogická fakulta

Oddělení celoživotního vzdělávání

Závěrečná práce

Vybrané deterministické a stochastické

metody ve výuce počítačové fyziky

Vypracoval: Mgr. Jiří Blažek

Vedoucí práce: doc. RNDr. Petr Bartoš, Ph.D.

České Budějovice 2017

Page 2: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

Prohlášení

Prohlašuji, že svoji závěrečnou práci jsem vypracoval samostatně pouze s použitím pramenů

a literatury uvedených v seznamu citované literatury.

Prohlašuji, že v souladu s § 47b zákona č. 111/1998 Sb. v platném znění souhlasím se

zveřejněním své závěrečné práce, a to v nezkrácené podobě elektronickou cestou ve veřejně

přístupné části databáze STAG provozované Jihočeskou univerzitou v Českých Budějovicích

na jejích internetových stránkách, a to se zachováním mého autorského práva k

odevzdanému textu této kvalifikační práce. Souhlasím dále s tím, aby toutéž elektronickou

cestou byly v souladu s uvedeným ustanovením zákona č. 111/1998 Sb. zveřejněny posudky

školitele a oponentů práce i záznam o průběhu a výsledku obhajoby kvalifikační práce.

Rovněž souhlasím s porovnáním textu mé kvalifikační práce s databází kvalifikačních prací

Theses.cz provozovanou Národním registrem vysokoškolských kvalifikačních prací a

systémem na odhalování plagiátů.

V Českých Budějovicích dne 11. května 2017 Jiří Blažek

Page 3: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

Anotace

Práce se zabývá vybranými kapitolami počítačového modelování pro potřeby výuky.

Konkrétně je v ní popsána metoda Monte Carlo, Eulerova metoda a Verletova

metoda. Uvedenými metodami jsou ilustrativně řešeny vybrané úlohy v MATLABu.

Připojeny jsou jejich zdrojové kódy.

Klíčová slova

počítačové modelování, počítačová fyzika, Eulerova metoda, Verletova metoda,

metoda Monte Carlo, MATLAB, programování

Abstract

The thesis concerns selected topics of computer modeling for teaching purposes.

There are in detail described Monte Carlo, Euler and Verlet methods. These methods

are illustratively applied to selected problems realized in MATLAB. Their codes are

attached.

Keywords

computer modeling, computer physics, Euler method, Verlet method, Monte Carlo

method, MATLAB, programming

Page 4: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

Poděkování

Děkuji docentu Bartošovi za vedení práce a výběr tématu a mému otci děkuji za rady,

týkající se programování v MATLABu

Page 5: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1

Obsah Úvod ......................................................................................................................................... 2

1 Počítačové modelování .................................................................................................... 3

1.1 Techniky počítačového modelování ......................................................................... 4

2 Stochastické metody a metoda Monte Carlo ................................................................... 4

2.1 Princip metody Monte Carlo a modelové příklady ................................................... 5

2.2 Schéma řešení problému pomocí metody Monte Carlo ........................................... 7

2.3 Základní pojmy matematické statistiky a metoda Monte Carlo .............................. 8

3 Deterministické modely a metoda molekulární dynamiky ............................................... 9

3.1 Princip metody molekulární dynamiky ..................................................................... 9

3.2 Metoda molekulární dynamiky z matematického hlediska ................................... 10

3.2.1 Úvod – pohybová rovnice ............................................................................... 10

3.2.2 Analytická metoda řešení pohybových rovnic ................................................ 12

3.2.3 Numerická metoda řešení pohybových rovnic ............................................... 12

3.2.4 Elementární metody – metoda Eulerova ........................................................ 13

3.2.5 Ilustrace Eulerovy metody na příkladech ....................................................... 15

3.2.6 Verletova metoda a její varianty .................................................................... 19

4 Praktická část ................................................................................................................. 22

4.1 Problémy řešené metodou Monte Carlo ................................................................ 22

4.1.1 Určování čísla π .............................................................................................. 22

4.1.2 Výpočet určitého integrálu ............................................................................. 23

4.1.3 Náhodná procházka ....................................................................................... 25

4.1.4 Modelování Brownova pohybu ...................................................................... 27

4.2 Modelování dějů metodou molekulární dynamiky ................................................. 29

4.2.1 Oscilátor ......................................................................................................... 29

4.2.2 Pohyb planety v radiálním silovém poli .......................................................... 33

Závěr ....................................................................................................................................... 39

Seznam použitých zdrojů ........................................................................................................ 40

Zdrojové kódy v MATLABu...................................................................................................... 41

Page 6: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

2

Úvod

Tato práce se zabývá základy počítačového modelování.

Proč je počítačové modelování hodno pozornosti i pro studenty středních škol?

Mnoho fyzikálních jevů popisujeme diferenciálními rovnicemi. Exaktní řešení těchto

rovnic je však pro středoškolského studenta nepřiměřeně náročné, navíc ne vždy je

ho možné dosáhnout. Velkou výhodou numerických metod je jejich univerzálnost.

Nezáleží příliš na tom, jaký tvar mají rovnice, popisující daný jev. Vždy se postupuje

víceméně stejným způsobem.

Díky znalosti počítačovému modelování by bylo možné do výuky fyziky zahrnout nová

témata. Studenti by sami mohli řešit problémy, které jdou sice nad rámec

středoškolské matematiky, ale které lze numericky snadno řešit. Zároveň by tyto

metody poskytly studentům nový pohled na některé fyzikální zákony. Jako příklad

uvedu Newtonův zákon síly 𝐹 = 𝑚𝑎. Většina studentů tento zákon chápe staticky

jako vztah mezi silou a zrychlením a neuvědomuje si, že jde o rovnici, která spolu

s počáteční rychlostí a polohou tělesa rekonstruuje jeho celou trajektorii. Ale při

řešení pohybových rovnic na počítači tento fakt přirozeně vyplyne.

Jelikož počítačové modelování není v osnovách gymnázií standardním tématem, má

tato práce sloužit zejména studentům se zájmem o fyziku a programování.

Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně

dostupný, jednodušší výpočty lze ale také dělat Excelu (i když poněkud těžkopádně)

nebo v programu OCTAVE, který je zdarma ke stažení.

Page 7: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

3

1 Počítačové modelování

Počítačová fyzika se zabývá počítačovým modelováním fyzikálních dějů a s tím

související počítačovou simulací a počítačovými experimenty. Připomeňme si stručně

kroky, kterými je nutné projít při řešení fyzikálního problému počítačovým

modelováním [1]:

o Formulce problému

Jev se popíše fyzikálními pojmy, které ho vystihují a které budou odpovídat

zvolené technice modelování

o Vytvoření modelu

Zformuluje se model, který se bude dále na počítači řešit. Je třeba mít

na paměti, že model podléhá různým zkreslujícím vlivům, např.

o je téměř vždy jednodušší než studovaný jev

o není jistota, zda model jev dobře vystihuje (skryté parametry, přílišné

zjednodušení atd.)

o Získané výsledky vypovídají přímo pouze o modelu a jen nepřímo

o studovaném jevu. Počítačový model v principu nemůže nahradit

reálný experiment. Navíc přesnost počítačového modelu je limitována

přesností vstupních (experimentálních) dat.

o Řešení modelu

Zvolení patřičných numerických metod, které řeší problém. Nejběžnější je

řešení soustav algebraických nebo diferenciálních rovnic.

o Srovnání výsledků modelu s experimentálními daty

Aby se ověřila míra korespondence modelu s realitou, musí se použít nezávislá

data, která nebyla při formulování modelu využita.

Stěžejní je při práci počítačového fyzika první a druhý krok. Zbylé dva kroky spočívají

především v rutinní činnosti.

Page 8: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

4

1.1 Techniky počítačového modelování

Rozlišují se tři základní metody počítačového modelování:

o Částicové techniky

Studuje se chování částic, ze kterých se jev skládá. Například plazma se bude

zkoumat jako seskupení atomů, iontů a elektronů, Galaxie se budou zkoumat

jako seskupení bodových hvězd apod. Model se vyhodnocuje statisticky.

o Spojité modelování

Jev se popisuje na makroskopické úrovni. Například plazma je v takovém

případě kontinuum o určitém tlaku, teplotě, rychlosti proudění atd. Obvykle

je model popsán parciálními diferenciálními rovnicemi.

o Hybridní modelování.

Jde o kombinaci spojitého a částicového modelování.

V této práci se zaměřím pouze na částicové techniky. Na nich budu ilustrovat vybrané

deterministické a stochastické metody, využívané v oblasti počítačového

modelování.

2 Stochastické metody a metoda Monte Carlo

Stochastika je matematický obor, který se zabývá zkoumáním a modelováním

náhodných jevů. Stochastický (z řeckého stochastiké techné, tj. umění uhádnout,

trefit se) znamená náhodný, nahodilý.

Hlavním představitelem stochastických metod je metoda Monte Carlo. Její rozšíření

se objevilo současně se vznikem počítačů na konci 40. let minulého století. Obecný

princip této metody, ačkoli nebyl pojmenován, je však znám minimálně už od konce

18. století.

Page 9: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

5

2.1 Princip metody Monte Carlo a modelové příklady

„Metodou Monte Carlo se nazývá souhrn postupů, dovolujících pomocí

mnohonásobných náhodných pokusů získat řešení problémů z nejrůznějších oblastí

vědy…“ [1, str. 26]:

Pro ilustraci uvedu ve stručnosti dva příklady, jak lze metodou Monte Carlo určit

hodnotu čísla π.

Číslo π je iracionální a v jeho desetinném rozvoji zatím nebyl objeven žádný řád.

Nejstarší metoda zjišťování rozvoje tohoto čísla pochází od Archimeda a je založena

na počítání obvodu pravidelných mnohoúhelníků, které vepíšeme nebo opíšeme

kruhu o jednotkovém průměru. Tak získáme nerovnost:

𝑜𝑏𝑣𝑜𝑑 𝑣𝑒𝑝𝑠𝑎𝑛éℎ𝑜 𝑚𝑛𝑜ℎ𝑜úℎ𝑒𝑙𝑛í𝑘𝑢 < 𝜋 < 𝑜𝑏𝑣𝑜𝑑 𝑜𝑝𝑠𝑎𝑛éℎ𝑜 𝑚𝑛𝑜ℎ𝑜úℎ𝑒𝑙𝑛í𝑘𝑢

V 17. století Leibniz vyjádřil číslo π jako součet nekonečné řady

𝜋

4= 1 −

1

3+

1

5−

1

7+

1

9−

1

11….

Jak je vidět, každý následující člen této řady je menší než předchozí, „opravy“ jsou

tedy stále menší a řada konverguje. Konverguje však velmi pomalu. K tomu, aby bylo

jisté, že 4 > π > 3, se musí sečíst prvních 7 členů, a pokud by se mělo určit číslo π

na čtyři desetinná místa (Archimédova aproximace), muselo by se sečíst víc než

4000 členů této řady.

Metodou Monte Carlo je možno určit číslo π například následujícím způsobem:

Je dán čtverec o straně jednotkové délky. Do něho se narýsuje čtvrtkruh o poloměru

1 (viz. Obrázek 1). Obsah čtverce je tedy roven 1 a obsah čtvrtkruhu 𝜋

4. Pokud se nyní

náhodně ve čtverci vybere dostatečný počet bodů, pak poměr počtu bodů

v čtvrtkruhu k počtu všech bodů bude přibližně odpovídat poměru obsahu čtvrtkruhu

a čtverce, tedy 𝜋

4.

Page 10: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

6

Obrázek 1 Určování Ludolfova čísla metodou Monte Carlo

V triviálním případě zachyceném na obrázku je 𝜋

4≈

4

5 , tedy 𝜋 ≈ 3,2.

Je zřejmé, že čím více náhodných bodů se zvolí nebo čím více jednotlivých pokusů se

uskuteční, tím bude odhad – v souladu se zákonem velkých čísel – přesnější.

Uvedu ještě druhý příklad určení čísla π, takzvanou Buffonovu jehlu [6]. Problém byl

formulován již roku 1777.

Nechť je na linkovaném papíru vzdálenost sousedních rovnoběžných linek rovna d.

Na papír se hází jehla o stejné délce d. Počet případů, kdy poloha jehly po dopadu

protne některou linku nechť je M, počet všech hodů N. Lze ukázat, že limitní podíl

M/N je roven

𝑀

𝑁=

2

𝜋

Metodu Monte Carlo je tak možné realizovat pomocí náhodných dopadů jehly a tak

aproximovat číslo π.

Velkou nevýhodou této metody obecně je, že konverguje velmi pomalu. Například

aby se v posledním příkladu aproximovalo číslo π na dvě desetinná místa

s dostatečnou jistotou, je potřeba alespoň 100 000 hodů.

Page 11: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

7

Tyto dva příklady pouze ilustrují princip metody Monte Carlo. Pokud by šlo skutečně

o výpočet Ludolfova čísla, existují iterativní vzorce (podobné Leibnizově řadě), které

konvergují velice rychle, například již druhá iterace určí π na 30 desetinných míst [7].

V současnosti je Ludolfovo číslo určeno na několik bilionů míst.

2.2 Schéma řešení problému pomocí metody Monte Carlo

1. Formulace problému a vytvoření modelu.

Odpovídá prvním dvěma krokům obecného schématu modelování v části 1.1.

Fyzikální jev v tomto případě popíšeme pomocí náhodné veličiny. K vytvoření

modelu stanovíme obor hodnot, jakých náhodná veličina může nabývat, a její

rozdělení pravděpodobnosti. Musí se také určit, která charakteristika

náhodné veličiny obsahuje námi hledanou odpověď. Ve výše zmíněném

příkladu určování čísla π můžeme říct, že obor hodnot je libovolný bod ve

čtverci, pravděpodobnost zvolení určitého bodu je stejná pro všechny body, a

konečně určující charakteristikou je, zda bod je v kruhu nebo není.

2. Generování náhodné veličiny.

a. Nejdříve se generuje náhodná veličina s určitým, pevně daným

rozdělením.

b. Potom se podle požadavků modelu tato veličina přetransformuje

v hledanou náhodnou veličinu. Pokud se budu držet předchozího

příkladu, tak první krok spočívá v generování dvou libovolných čísel

z intervalu (0,1), druhý krok spočívá v přetransformování těchto čísel

na určitý bod ve čtverci.

3. Opakování kroku 2 a statistické vyhodnocení výsledků.

Jak již bylo uvedeno, Metoda Monte Carlo konverguje velmi pomalu,

ke statisticky významnému závěru je potřeba mnoho rozehrávek (pokusů).

Page 12: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

8

2.3 Základní pojmy matematické statistiky a metoda Monte Carlo

V této podkapitole velice stručně popíšu základní statistické a pravděpodobnostní

pojmy, které se používají při práci s metodou MC. Tyto popisy nesplňují nároky

na exaktní matematickou definici.

Veličina se nazývá náhodná, pokud je možno stanovit (nenulovou) pravděpodobnost,

s jakou při pokusu může nabývat určité hodnoty, u níž však není možno předpovědět

její hodnotu při realizaci konkrétního pokusu.

Náhodné veličiny se dělí na diskrétní a spojité. Příklad diskrétní množiny může být

množina 𝑀 = {1,2,3} nebo všechna celá čísla. Příkladem spojité veličiny je interval

𝑀 = (2; 3) nebo celá přímka reálných čísel.

Pro každou náhodnou veličinu se zavádí „zákon rozdělení náhodné veličiny“, který

každé hodnotě (v případě diskrétní veličiny) nebo každému intervalu hodnot

(v případě spojité veličiny) přiřadí pravděpodobnost, že náhodná veličina nabude této

hodnoty nebo bude v daném intervalu. Rozdělení pravděpodobnosti náhodné

veličiny 𝜉 se obvykle popisuje pomocí distribuční funkce 𝐹(𝑥), definované vztahem

𝐹(𝑥) = 𝑃(𝜉 < 𝑥).

𝐹(𝑥) tedy udává pravděpodobnost, že náhodná veličina 𝜉 bude ostře menší než

stanovená hodnota 𝑥. Z definice plyne

𝑃(𝑥1 ≤ 𝜉 < 𝑥2) = 𝐹(𝑥2) − 𝐹(𝑥1).

Pro spojitou náhodnou veličinu se zavádí hustota pravděpodobnosti 𝑝(𝑥), pro kterou

platí:

∫ 𝑝(𝑥)𝑥2

𝑥1𝑑𝑥 = 𝐹(𝑥2) − 𝐹(𝑥1) ⇔ 𝑝(𝑥) =

𝑑𝐹(𝑥)

𝑑𝑥

Page 13: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

9

3 Deterministické modely a metoda molekulární

dynamiky

Deterministické modely jsou jednoznačně dány počátečním stavem a pohybovými

rovnicemi. Pokud se modelování začne s totožným počátečním stavem, daná

deterministická metoda, na rozdíl od stochastických metod, vždy dospěje

ke stejnému výsledku.

V práci bude deterministické modely zastupovat metoda molekulární dynamiky.

3.1 Princip metody molekulární dynamiky

Metoda molekulární dynamiky je metoda částicová, tedy jev se studuje z hlediska

jeho částí. Řeší se pohybové rovnice pro každou částici. Protože částice spolu

interagují, bývá obvykle příslušný soubor dat značně rozsáhlý.

Metoda vznikla v 50. letech při studiu kapalin. Dnes se úspěšně používá pro široké

spektrum problémů, sahajících od studia atomů až po astronomii a kosmologii.

K typickým problémům, které se řeší touto metodou, patří modelování dráhy

molekul, odtud název metody.

Obecný postup je následující [1]:

1. Vytvoří se odpovídající model studovaného jevu.

2. Systém se popíše pomocí souboru N částic.

3. Sestaví se klasické pohybové rovnice pro všechny částice.

4. Stanoví se počáteční podmínky a pohybové rovnice se vyřeší. Obvykle se

pracuje v určitém předem stanoveném rozmezí času, pohyb částic se sleduje

pouze v tomto časovém intervalu.

Pro účely práce je typickým příkladem principu metody molekulární dynamiky model

pohybu planety v radiálním gravitačním poli Slunce. Nechť má planeta určitý vektor

rychlosti a určitou vzdálenost od Slunce. Z gravitačního zákona se spočítá síla, která

Page 14: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

10

na planetu působí a z té okamžité zrychlení planety. Z okamžitého zrychlení, okamžité

rychlosti a okamžité polohy se pak jednoduše vypočítá nová poloha a rychlost planety

po uplynutí vhodně stanovené doby, během které se gravitační síla příliš nemění.

V této nové poloze se spočítá nové okamžité zrychlení a celý postup se opakuje. Tímto

způsobem se postupně numericky rekonstruuje celá dráha planety.

Je dobře známo, že řešením konkrétně tohoto problému je kuželosečka (hyperbola,

parabola nebo elipsa) a řešení vstupních rovnic lze v tomto případě vyjádřit analyticky

bez ohledu na počáteční podmínky. Výše zmíněná numerická metoda však vynikne

v situaci, kdy analytické řešení problému neexistuje nebo je příliš složité. Pro typický

příklad není třeba chodit daleko: místo dvou gravitačně vázaných planet stačí

uvažovat tři („problém tří těles“). Pak řešení závisí citlivě na počátečních podmínkách

a jeho analytická forma neexistuje. Problém se řeší numericky na počítači. Právě

tento problém tří těles stál u počátku teorie chaosu – konkrétně v práci Henriho

Poincarého na konci 19. století [8].

Poznámka: Sluneční soustava je samozřejmě obecný „problém n těles“ avšak

vzájemné působení planet lze zanedbat do té míry, že je jisté, že planety přibližně

zůstanou na stejných orbitech jako dosud v řádu milionů let. Ovšem jakákoliv

předpověď, jdoucí nad rámec několika desítek milionů let, může být i v hrubých

rysech zcela nepřesná [3,4].

3.2 Metoda molekulární dynamiky z matematického hlediska

3.2.1 Úvod – pohybová rovnice

Pohybový zákon ve tvaru

𝐹 = 𝑚�⃗� = 𝑚𝑑2𝑟

𝑑𝑡2 (1)

s danými počátečními podmínkami se stává pohybovou rovnicí, která určuje

trajektorii částice. Síla �⃗� může záviset na poloze hmotného bodu a jeho rychlosti,

případně i na čase. Uvedu několik známých příkladů.

Page 15: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

11

V případě homogenního tíhového pole je síla konstantní:

�⃗� = 𝑚�⃗�

V případě radiálního gravitačního pole, kde má centrální těleso velkou hmotnost 𝑀,

síla závisí na poloze tělesa:

�⃗� = −𝜘𝑚𝑀

𝑟3 𝑟

Síla, která závisí na rychlosti částice, je například síla odporu viskózního prostředí

(vzduchu, kapaliny):

�⃗� = −𝑘�⃗�

A konečně síla, která závisí na čase, je například harmonicky se měnící tzv. budící síla

nucených kmitů:

�⃗� = �⃗�𝑚 ∙ sin Ω𝑡

Dále budu uvažovat zcela obecný případ síly, závislé na poloze, rychlosti a času. Je

třeba si uvědomit, že v obecném případě se musí řešit soustava rovnic (1) současně

pro každý rozměr 𝑥, 𝑦, 𝑧. Tato vektorová rovnice se „rozpadne“ na tři vzájemně

svázané části:

𝑚𝑎𝑥 = 𝑚𝑑2𝑥

𝑑𝑡2 = 𝐹𝑥 = 𝐹𝑥(𝑡, 𝑥, 𝑦, 𝑧, 𝑣𝑥, 𝑣𝑦, 𝑣𝑧)

𝑚𝑎𝑦 = 𝑚𝑑2𝑦

𝑑𝑡2= 𝐹𝑦 = 𝐹𝑦(𝑡, 𝑥, 𝑦, 𝑧, 𝑣𝑥 , 𝑣𝑦, 𝑣𝑧) (2)

𝑚𝑎𝑧 = 𝑚𝑑2𝑧

𝑑𝑡2 = 𝐹𝑧 = 𝐹𝑧(𝑡, 𝑥, 𝑦, 𝑧, 𝑣𝑥 , 𝑣𝑦, 𝑣𝑧)

V práci nebude trojrozměrný problém řešen, zabývat se budu nanejvýš

dvojrozměrným problémem v rovině. Jednorozměrný problém a problém

vícerozměrný se liší jenom počtem rovnic, mechanismus metody však zůstává stejný.

Jsou-li zadány počáteční podmínky – obvykle se jedná o polohu částice 𝑟0 její rychlost

�⃗�0 – je možné pomocí souboru rovnic (2) stanovit průběh pohybu 𝑟(𝑡) a rychlost

částice �⃗�(𝑡) v závislosti na čase. Při modelování pohybu jde o to, abychom k určité

Page 16: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

12

posloupnosti časů {𝑡𝑖} stanovili posloupnost příslušných polohových vektorů {𝑟(𝑡𝑖)}

a případně rychlostí {�⃗�(𝑡𝑖)}. Získané posloupnosti se pak využijí ke grafickému

znázornění dráhy částice.

Posloupnost {𝑡𝑖} bude mít v celé práci aritmetickou formu s konstantním krokem ℎ,

tedy

ℎ = 𝑡𝑖+1 − 𝑡𝑖

3.2.2 Analytická metoda řešení pohybových rovnic

Spočívá ve vyřešení souboru rovnic (2) metodami matematické analýzy. Řešením je

poloha 𝑟 a rychlost �⃗� jako elementární funkce času 𝑡, 𝑟 = 𝑟(𝑡) a �⃗� = �⃗�(𝑡). Pokud

do těchto funkcí budeme za čas postupně dosazovat z množiny {𝑡𝑖}, získáme přesné

polohy částice {𝑟(𝑡𝑖)}.

Zřejmou předností analytické metody je, že poskytuje přesné řešení, ze kterého je

možné vyčíst další charakteristiky děje (perioda, zakřivení trajektorie atd.).

Nevýhody jsou dvě. Řešit složité diferenciální rovnice analyticky vyžaduje pokročilé

matematické znalosti. Například studenti na střední škole se sice setkají s odvozením,

že těleso v homogenním gravitačním poli se pohybuje po parabole, ale v případě, že

se těleso pohybuje v radiálním gravitačním poli, se svými znalostmi už rovnici

trajektorie odvodit nedokážou. Dalším omezením je, že ne vždy analytické řešení

existuje, jak tomu je např. ve zmíněném problému tří těles.

3.2.3 Numerická metoda řešení pohybových rovnic

Numerická metoda vychází ze skutečnosti, že polohy 𝑟(𝑡𝑖) a rychlosti �⃗�(𝑡𝑖)

v posloupnosti {𝑡𝑖} jsou spolu (v určitém přiblížení) svázány rekurentními vztahy.

Z veličin 𝑟(𝑡𝑖), �⃗�(𝑡𝑖) a funkce �⃗�(𝑟(𝑡𝑖), �⃗�(𝑡𝑖)) (v těchto případech představující sílu),

lze vypočítat polohu a rychlost v následujícím okamžiku 𝑡𝑖 + ℎ: 𝑟(𝑡𝑖 + ℎ), �⃗�(𝑡𝑖 + ℎ).

Tímto způsobem se pokračuje až do předdefinovaného konečného času 𝑡max.

Výhodou numerického přístupu je jeho univerzálnost – nezáleží na tom, jak složitý

tvar má funkce 𝐹 nebo jak je pohybový model zadaný, všechny problémy lze řešit

podobným způsobem a bez hlubokých znalostí matematické analýzy.

Page 17: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

13

Existuje velké množství numerických metod, které se liší svou složitostí a přesností.

V práci se zaměřím na ty nejzákladnější. Všechny numerické metody se vyznačují

rysem, že čím menší se zvolí časový krok ℎ, tím přesnější metoda je. Současně ovšem

narůstá čas výpočtu.

3.2.4 Elementární metody – metoda Eulerova

Nechť síla, působící na částici, je obecnou funkcí času, rychlosti a polohy: �⃗�(𝑡, �⃗�, 𝑟).

Funkce 𝐴(𝑡, �⃗�, 𝑟), udávající okamžité zrychlení �⃗�, je

�⃗� = 𝐴(𝑡, �⃗�, 𝑟) =�⃗�(𝑡,�⃗⃗�,𝑟)

𝑚. (A)

Při vytváření posloupností 𝑟(𝑡𝑖), �⃗�(𝑡𝑖) Eulerovou metodou se použijí rekurentní

vztahy

�⃗�𝑖+1 = �⃗�𝑖 + �⃗�ℎ (V)

𝑟𝑖+1 = 𝑟𝑖 + �⃗�𝑖ℎ (R)

𝑡𝑖+1 = 𝑡𝑖 + ℎ, (T)

neboť z definice okamžité rychlosti a zrychlení platí pro dostatečně malou časovou

změnu Δt = ℎ:

Δ�⃗� = �⃗� Δt

Δ𝑟 = �⃗� Δt

(symbolem Δ se označuje změna fyzikální veličiny za čas ℎ).

Rovnice (A) – výpočet zrychlení, (V) – výpočet rychlosti, (R) – výpočet polohy a (T) –

výpočet času, představují vztahy, které se použijí při výpočtu veličin v následujícím

časovém kroku vždy ve stejném pořadí, jako při výpočtu v kroku předcházejícím. Je

však několik možností, jak pořadí rovnic pro všechny kroky stanovit.

Page 18: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

14

Nejběžnější pořadí je (ARVT), tedy:

𝑎𝑖⃗⃗⃗⃗ = 𝐴(𝑡𝑖, �⃗�𝑖, 𝑟𝑖)

𝑟𝑖+1 = 𝑟𝑖 + �⃗�𝑖ℎ

�⃗�𝑖+1 = �⃗�𝑖 + �⃗�𝑖ℎ

𝑡𝑖+1 = 𝑡𝑖 + ℎ

Možné je také pořadí (AVRT):

𝑎𝑖⃗⃗⃗⃗ = 𝐴(𝑡𝑖, �⃗�𝑖, 𝑟𝑖)

�⃗�𝑖+1 = �⃗�𝑖 + �⃗�𝑖ℎ

𝑟𝑖+1 = 𝑟𝑖 + �⃗�𝑖+1ℎ

𝑡𝑖+1 = 𝑡𝑖 + ℎ

Případně pořadí (RAVT):

𝑟𝑖+1 = 𝑟𝑖 + �⃗�𝑖ℎ

𝑎𝑖⃗⃗⃗⃗ = 𝐴(𝑡𝑖, �⃗�𝑖, 𝑟𝑖+1)

�⃗�𝑖+1 = �⃗�𝑖 + �⃗�𝑖ℎ

𝑡𝑖+1 = 𝑡𝑖 + ℎ

Tyto tři postupy dávají ve většině případů výslednou trajektorii s podobnou přesností.

Pokud se například uvažuje pohyb tělesa v homogenním gravitačním poli, dává první

a třetí metoda totožný výsledek, zrychlení v tomto případě nezávisí na poloze tělesa.

Tyto postupy se souhrnně označují jako „Eulerova metoda“.

Page 19: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

15

3.2.5 Ilustrace Eulerovy metody na příkladech

Až dosud byl výklad Eulerovy metody obecný, nyní se však omezím na konkrétní

příklady pohybu částice v jedné dimenzi. Značení se zjednoduší, vektorové funkce

budou nahrazeny skalárními:

𝑟(𝑡𝑖) ≡ 𝑥(𝑡𝑖)

�⃗�(𝑡𝑖) ≡ 𝑣(𝑡𝑖)

𝑎𝑖⃗⃗⃗⃗ = 𝐴(𝑡𝑖, �⃗�𝑖, 𝑟𝑖) ≡ 𝑎𝑖 = 𝐴(𝑡𝑖, 𝑣𝑖 , 𝑥𝑖).

Než přistoupím k běžnějšímu příkladu řešení Newtonových pohybových rovnic, které

jsou druhého řádu, ilustruji Eulerovu metodu na příkladu obyčejné diferenciální

rovnice prvního řádu:

�̇�(𝑡) = 𝑦(𝑥, 𝑡) (3)

Derivaci určité funkce podle času budu v souladu s fyzikální konvencí označovat

tečkou nad danou funkcí. Rovnice výše vyjadřuje, že derivace polohy podle času je

rovna dané funkci 𝑦, která závisí na 𝑥 a 𝑡. Nechť jsou počáteční podmínky 𝑡0 = 0

𝑥(0) = 𝑥0; úkolem je modelovat dráhu částice 𝑥(𝑡).

Zvolí se dostatečně malý časový krok ℎ. Ze znalosti počátečních podmínek 𝑡0 = 0 a

𝑥0 se podle vzorce (3) nejdříve spočítá rychlost:

�̇�0 = �̇�(0) = 𝑦(𝑥0, 0). (4)

Ze znalosti počáteční polohy, rychlosti a doby, po kterou se částice pohybuje, se

spočítá nová poloha pomocí prvních dvou členů Taylorova rozvoje funkce 𝑥(𝑡), tedy:

𝑥(ℎ) = 𝑥(0) + ℎ ∙ �̇�(0) = 𝑥0 + ℎ 𝑥0̇ .

Tím je dána nová poloha 𝑥1 = 𝑥(ℎ) a rychlost 𝑥1̇ = 𝑦(𝑥1, ℎ) částice v čase 𝑡1 = ℎ.

Analogickým způsobem se tyto hodnoty využijí pro výpočet polohy 𝑥2 a rychlosti 𝑥2̇

v čase 𝑡2 = 2ℎ.

Ačkoliv je použitá metoda jednoduchá, není příliš přesná. V časovém úseku ℎ se ve

skutečnosti rychlost poněkud mění, zatímco v modelu je nahrazena konstantní

Page 20: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

16

hodnotou. Zanedbáním vyšších členů Taylorova rozvoje se dopouštíme chyby

ve výpočtu řádově ℎ2 (značí se O(ℎ2)). Přesnější model by tak vyžadoval volbu menší

hodnoty konstanty h, tím by se ale stal výpočet početně a tedy i časově náročnější.

Existují však sofistikovanější matematické modely, které pro danou hodnotu kroku ℎ

vedou k řádově větší přesnosti.

Na předcházejícím příkladu budu jeden z nich ilustrovat, další alternativu pak popíšu

v podkapitole Tři verze metody Verletovy. Slovně lze tuto metodu popsat následovně:

Předpokládejme, že poloha částice 𝑥𝑛 v čase 𝑡𝑛 = 𝑛ℎ je již známa. Ze vzorce (3) se

vypočítá derivace polohy �̇�𝑛 a z té nová poloha 𝑥𝑛+1𝑝 (index p značí „prediktor“) v čase

𝑡𝑛+1 postupem stejným jako v předchozím případě. Nyní však tuto polohu nebudeme

pokládat za konečný výsledek. Ze vzorce (3) se vypočítá derivace v bodě 𝑥𝑛+1𝑝

v čase

𝑡𝑛+1 a tato derivace se zprůměrujeme s předchozí derivací v bodě (𝑥𝑛, 𝑡𝑛). Takto

získaná „nová“ derivace je přesnějším odhadem změny polohy v časovém úseku ℎ.

S její pomocí se vypočte konečná poloha 𝑥𝑛+1 v čase 𝑡𝑛+1. Vyjádřeno rovnicemi:

𝑥𝑛+1𝑝 = 𝑥𝑛 + ℎ ∙ 𝑦(𝑥𝑛, 𝑡𝑛)

𝑥𝑛+1 = 𝑥𝑛 + ℎ ∙𝑦(𝑥𝑛, 𝑡𝑛) + 𝑦(𝑥𝑛+1

𝑝 , 𝑡𝑛+1)

2 .

Lze ukázat, že tato metoda má chybu řádu O(ℎ3). Je zřejmé, že pro malá ℎ ≪ 1 je

chyba mnohem menší.

Nyní aplikuji Eulerovu metodu na rovnici druhého řádu, tedy na rovnici, v níž

vystupuje zrychlení. Částice se nachází v silovém poli 𝐹(𝑥, 𝑡) (například gravitačním):

𝑚 ∙ �̈�(𝑡) = 𝐹(𝑥, 𝑡).

Zavedením pomocné funkce 𝑣(𝑡) ≡ �̇�(𝑡) převedu rovnici druhého řádu na soustavu

dvou rovnic prvního řádu:

�̇�(𝑡) = 𝑣(𝑡),

�̇�(𝑡) = 𝐴(𝑥(𝑡), 𝑡). (5)

Page 21: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

17

Funkce 𝐴(𝑥, 𝑡) ≡ 𝐹(𝑥, 𝑡)/𝑚 představuje zrychlení částice, obecně zadané jako

funkce polohy a času.

Soustavu (5) je třeba ještě doplnit počátečními podmínkami:

𝑥(𝑡0) = 𝑥0,

𝑣(𝑡0) = 𝑣0.

Postup výpočtu soustavy (5) je analogický postupu, použitému k řešení diferenciální

rovnice prvního řádu. Vycházíme z pořadí rovnic (ARVT) z předcházející kapitoly.

Zvolí se časová konstanta ℎ. Ze vzorce (5) se nejdříve spočítá zrychlení částice

v daném okamžiku a daném místě:

𝑎0 = 𝐴(𝑥0, 𝑡0) (6)

Z počátečního zrychlení, počáteční rychlosti, počáteční polohy částice a doby pohybu

částice ℎ se spočítá rychlost a poloha částice v čase 𝑡1 = 𝑡0 + ℎ :

𝑥1 = 𝑥0 + ℎ ∙ 𝑣0, (7)

𝑣1 = 𝑣0 + ℎ ∙ 𝑎0. (8)

Tímto způsobem se pokračuje až do předdefinovaného času 𝑡max = 𝑛ℎ, v němž se

výpočet ukončí.

Následující úloha je inspirována úvodním příkladem publikace [5]. Její řešení je

v publikaci provedeno v dostupném Excelu. To by mohl být zajímavý námět

pro středoškolské učitele a pro žáky se zájmem o fyziku, kteří nemají přístup

ke specializovaným programům nebo se nechtějí učit programovacím jazykům.

Zadání:

Modelujte volný pád tělesa z výšky ℎ = 20 metrů s přihlédnutím k odporu vzduchu.

Předpokládejte, že odporová síla se řídí vztahem:

𝐹𝑂 = 𝐾𝑣2.

Page 22: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

18

Je známo, že mezní rychlost, při které se odporová síla 𝐹𝑂 vyrovná síle gravitační 𝐹𝐺 ,

je rovna 𝑣M = 10 m s−1. Počítejte s gravitačním zrychlením 𝑔 = 9,8 m s−2.

Řešení:

Zrychlení částice je v každém okamžiku dáno rovnicí

𝑎(𝑡𝑖) =𝐹𝐺−𝐹𝑂(𝑣𝑖)

𝑚= 𝑔 − 𝑠 𝑣𝑖

2. (9)

Konstantu 𝑠 ≡ 𝐾/𝑚 lze spočítat z rovnosti gravitační a odporové síly při mezní

rychlosti:

0 =𝑚𝑔−𝐾𝑣M

2

𝑚= 9,8 − 𝑠 ∙ 102.

Číselně 𝑠 = 0,098.

Nechť je v čase 𝑡𝑖 známa rychlost částice 𝑣𝑖 a její uražená dráha 𝑥𝑖. Zrychlení 𝑎𝑖 je pak

určeno vzorcem (9). Označme časový krok ℎ. Rekurentní vztahy budou vypadat

následovně:

𝑎𝑖 = 𝑔 − 𝑠𝑣𝑖2 = 9,8 − 0,098 ∙ 𝑣𝑖

2 (1-A)

𝑥𝑖+1 = 𝑥𝑖 + 𝑣𝑖 ∙ ℎ (2-R)

𝑣𝑖+1 = 𝑣𝑖 + 𝑎𝑖 ∙ ℎ (3-V)

𝑡𝑖+1 = 𝑡𝑖 + ℎ . (4-T)

Jde opět o pořadí ARVT. Konkrétně pro nulové počáteční hodnoty rychlosti, dráhy a

času a časový krok ℎ = 0,1 bude první iterace vypadat následovně:

𝑎0 = 𝑔 − 𝑠𝑣02 = 9,8 − 0,098 ∙ 02 = 9,8

𝑥1 = 𝑥0 + 𝑣0 ∙ ℎ = 0 + 0 ∙ 0,1 = 0

𝑣1 = 𝑣0 + 𝑎0 ∙ ℎ = 0 + 9,8 ∙ 0,1 = 0,98

𝑡1 = 𝑡0 + ℎ = 0 + 0,1 = 0,1 ,

Page 23: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

19

Pokud se jednotlivé kroky svěří Excelu, získají se tyto výsledky:

Tabulka 2 Eulerova metoda realizovaná v Excelu

Podle tabulky tedy těleso spadne z výšky 20 metrů přibližně za 2,7 sekundy. Pokud by

se odpor vzduchu neuvažoval (𝑠 = 0), dopadlo by těleso za 2,04 sekundy.

3.2.6 Verletova metoda a její varianty

Přesnější alternativou k Eulerově metodě je metoda Verletova. Je několik

ekvivalentních způsobů, jak ji rekurentně vyjádřit, několik příkladů lze nalézt

například v [2]. Já zde zmíním její klasickou podobu, verzi nazvanou leap – frog, a

takzvaný rychlostní Verlet.

Page 24: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

20

Nejdříve si je třeba uvědomit hlavní zdroj chyb v Eulerově metodě: v časovém

intervalu (𝑡0, 𝑡0 + ℎ) se nahrazuje zrychlený pohyb pohybem rovnoměrným

s počáteční rychlostí 𝑣(𝑡0).

I metoda leap – frog počítá s rovnoměrným pohybem, ale rychlost bere ve středu

časového intervalu ℎ. Pohyb částice mezi časovými okamžiky 𝑡 a 𝑡 + ℎ je tedy chápán

jako rovnoměrný s rychlostí rovnou 𝑣(𝑡 + ℎ/2). Rekurentní formule jsou tak:

𝑣(𝑡 + ℎ/2) = 𝑣(𝑡 − ℎ/2) + ℎ ∙ 𝑎(𝑡)

𝑥(𝑡 + ℎ) = 𝑥(𝑡) + ℎ ∙ 𝑣(𝑡 + ℎ/2).

Počáteční rychlost stanovíme ze vzorce

𝑣(𝑡0 + ℎ/2) =𝑥(𝑡0 + ℎ) − 𝑥(𝑡0)

ℎ ,

kde 𝑥(𝑡0 + ℎ) se spočítá ze vzorce

𝑥(𝑡0 + ℎ) = 𝑥(𝑡0) + ℎ ∙ 𝑣(𝑡0) +ℎ2

2𝑎(𝑡0), (10)

ve kterém pohyb částice v intervalu (𝑡0, 𝑡0 + ℎ) pokládáme za rovnoměrně zrychlený.

Ve verzi „rychlostní Verlet“ se pohyb částice v časovém intervalu (𝑡, 𝑡 + ℎ) také

považuje za rovnoměrně zrychlený:

𝑥(𝑡 + ℎ) = 𝑥(𝑡) + ℎ ∙ 𝑣(𝑡) +ℎ2

2𝑎(𝑡) . (11)

Rychlost částice v okamžiku 𝑡 + ℎ se však nepočítá ze zrychlení 𝑎(𝑡), ale z průměru

zrychlení 𝑎(𝑡) a 𝑎(𝑡 + ℎ),

𝑣(𝑡 + ℎ) = 𝑣(𝑡) + ℎ ∙𝐴(𝑥,𝑡)+𝐴(𝑥,𝑡+ℎ)

2= 𝑣(𝑡) + ℎ ∙

𝑎(𝑡)+𝑎(𝑡+ℎ)

2 . (12)

Rovnice v tomto případě nemohou mít jiné pořadí než nejdříve (11) a pak (12).

Konečně klasická podoba Verletovy metody spočívá ve vyjádření druhé derivace

polohy pomocí diferencí druhého řádu. Pro malá ℎ přibližně platí:

�̇�(𝑡) ≈𝑥(𝑡)−𝑥(𝑡−ℎ)

ℎ, �̇�(𝑡 + ℎ) ≈

𝑥(𝑡+ℎ)−𝑥(𝑡)

ℎ .

Page 25: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

21

Na základě rozvoje do Taylorovy řady lze ukázat, že platí

�̈�(𝑡) =�̇�(𝑡+ℎ)−�̇�(𝑡)

ℎ+ 𝑂(ℎ2) =

𝑥(𝑡+ℎ)−2𝑥(𝑡)+𝑥(𝑡−ℎ)

ℎ2 + 𝑂(ℎ2). (13)

Se zanedbáním členu 𝑂(ℎ2), plyne z rovnice (12) vzorec

𝑥(𝑡 + ℎ) = 2𝑥(𝑡) − 𝑥(𝑡 − ℎ) + ℎ2𝐴(𝑥(𝑡), 𝑡) . (14)

Z poloh 𝑥(𝑡) a 𝑥(𝑡 − ℎ) je tak možno spočítat polohu 𝑥(𝑡 + ℎ). Jedinou nevýhodou

oproti Eulerově metodě je skutečnost, že není k dispozici poloha v čase 𝑥(𝑡0 − ℎ). Asi

nejsnazším způsobem, jak tento problém obejít, je spočítat polohu v čase 𝑥(𝑡0 + ℎ)

pomocí vzorce (10) a teprve pro další časové body 𝑡0 + 𝑛ℎ, kde 𝑛 ≥ 2, pokračovat

vzorcem (14).

Jak už bylo řečeno, chyba Eulerovy metody je řádu 𝑂(ℎ2), zatímco u Verletovy

metody je chyba řádu 𝑂(ℎ3), je tedy podstatně přesnější.

Page 26: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

22

4 Praktická část

4.1 Problémy řešené metodou Monte Carlo

4.1.1 Určování čísla π

Obrázek 3 Určování Ludolfova čísla metodou MC

Číslo π určím již zmíněnou metodou náhodného generování bodů ve čtverci (strana 5

a 6). Kartézské souřadnice vrcholu 𝐴 čtverce nechť jsou [0,0], vrcholu 𝐶 [1,1], a

souřadnice [𝑥, 𝑦] bodu 𝑃 jsou dvě náhodná čísla s rovnoměrným rozdělením v mezích

0 < 𝑥 < 1 a 0 < 𝑦 < 1.

Ve čtverci zvolím čtvrtkruh 𝐾, který má střed ve vrcholu 𝐴 a poloměr 𝑟 = 1. Pak platí

𝑥2 + 𝑦2 < 1 ⇒ 𝑃 ∈ 𝐾, jinak 𝑃 ∉ 𝐾.

Počet bodů 𝑃, které při náhodném generování padnou do 𝐾, označím 𝑚, počet všech

vygenerovaných náhodných bodů nechť je 𝑁. Z porovnání obsahu čtvrtkruhu a

čtverce vyplývá aproximace

𝑚

𝑁≈

𝜋

4 ⇒ 𝜋 ≈ 4

𝑚

𝑁.

V následující tabulce je 20 krát „změřeno“ číslo 𝜋. Pro porovnání byla první polovina

odhadů určena ze 100 náhodných bodů, druhá polovina pak z 10 000.

Page 27: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

23

Ludolfovo číslo začíná 𝜋 = 3,14159 …

Je možné ukázat, že směrodatná odchylka metody Monte Carlo obecně závisí

na počtu pokusů 𝑁 vztahem

𝜎~1

√𝑁 (1)

K tomu, aby počet platných desetinných míst narůstal aritmetickou řadou je tedy

nutné, aby počet potřebných pokusů – rozehrávek (výpočetní čas) narůstal řadou

geometrickou.

Na výše uvedených výsledcích si můžeme tento fakt ověřit: Poměr směrodatných

odchylek pro 10 000 a 100 rozehrávek z tabulky by na základě vzorce (1) měl být

přibližně roven √100/10 000 = 1/10.

Pro 𝑁 = 100 označím jednotlivé odhady čísla 𝜋 symboly 𝑝𝑖, 𝑖 = 1, … 10, pro 𝑁 =

10 000 jednotlivé odhady označím 𝑞𝑖, 𝑖 = 1, … 10. Poměr směrodatných odchylek

v tomto označení je

√∑ (𝑞𝑖 − 𝜋)210𝑖=1

10

√∑ (𝑝𝑖 − 𝜋)210𝑖=1

10

=0.0183

0.1943= 0.094 ≈ 1/10

Zdrojový kód programu pro výpočet čísla 𝜋 uvedenou metodou je uveden na straně

42.

4.1.2 Výpočet určitého integrálu

Naším cílem je nyní metodou MC spočítat integrál

𝐼 = ∫ 𝑓(𝑥) 𝑑𝑥𝑏

𝑎.

K výpočtu je možné zvolit následující jednoduchý geometrický přístup, který je

v principu totožný s řešením předchozí úlohy:

Předpokládejme, že daná funkce 𝑓 je na intervalu (𝑎, 𝑏) omezená a nezáporná. Na

intervalu se odhadne maximum 𝑐 funkce 𝑓 shora a vymezí se obdélník, ohraničený

osou 𝑥, mezemi intervalu, a odhadnutým maximem:

odhad π (N = 100)

3,12 3,16 3,32 3,32 3,44 3,16 2,72 3,04 3,08 3,32

odhad π (N = 10 000)

3,1696 3,1604 3,1688 3,1592 3,1276 3,1604 3,1428 3,146 3,156 3,1224

Page 28: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

24

Obrázek 4 Integrace metodou Monte Carlo

Vygeneruje se 𝑁 bodů P o náhodných souřadnicích (𝑥, 𝑦), kde

𝑎 < 𝑥 < 𝑏

0 < 𝑦 < 𝑐 .

Pokud bod 𝑃 padne do plochy omezené křivkou, musí být

𝑦 < 𝑓(𝑥) ⇒ 𝑃 ∈ 𝐼, jinak 𝑃 ∉ 𝐼

Počet všech bodů, které padnou do plochy pod křivkou 𝑓(𝑥), označím 𝑚, počet všech

generovaných bodů nechť je 𝑁. Pak přibližně platí:

𝐼

(𝑏 − 𝑎)𝑐≈

𝑚

𝑁.

V příkladu jsem počítal metodou MC integrál

𝐼 = ∫ sin 𝑥 𝑑𝑥2𝜋

0 .

Jelikož v tomto případě není funkce na celém intervalu kladná, je nutné předchozí

postup modifikovat, příspěvek bodů pod osou 𝑥 a zároveň nad křivkou 𝑓(𝑥) je nutné

odečítat. Označme

𝑚 = |{𝑃}| , {𝑃} = {(𝑥, 𝑦), 𝑎 < 𝑥 < 𝑏, 0 < 𝑦 < 𝑓(𝑥)}

𝑛 = |{𝑃}| , {𝑃} = {(𝑥, 𝑦), 𝑎 < 𝑥 < 𝑏, 𝑓(𝑥) < 𝑦 < 0} .

Nechť minimum (resp. odhad minima) funkce 𝑓 je 𝑑 a maximum (resp. odhad

maxima) nechť je 𝑐. Pak zřejmě platí:

𝐼 ≈ (𝑐 − 𝑑)(𝑏 − 𝑎) ∙𝑚−𝑛

𝑁, kde 𝑁 je celkový počet bodů.

Page 29: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

25

Hodnota integrálu byla vypočítána pro 4 různé hodnoty celkového počtu bodů 𝑁,

pro každou hodnotu se výpočet opakoval čtyřikrát. Přesná hodnota integrálu je

samozřejmě nula. Pokud vezmeme za procentuální základ obsah vymezeného

obdélníka, pak rozdíl mezi odhadnutou hodnotou integrace a skutečnou nulovou

hodnotou v jednotlivých pokusech byl:

N 𝐼1 𝐼2 𝐼3 𝐼4 100 9.0 % 1.9 % 1.0 % 0.0 %

1 000 0.5 % 0.1 % 1.7 % 1.2 %

10 000 0.7 % 0.3 % 0.1 % 0.2 %

100 000 0.3 % 0.0 % 0.3 % 0.4 %

Zdrojový kód programu je na straně 43.

Poznámka:

Minimum funkce hledá MATLAB numericky pomocí příkazu fminbnd. Jelikož

analogický příkaz pro nalezení maxima funkce nemá zabudován, je nutné toto

maximum určovat prostřednictvím minima záporně vzaté funkce.

4.1.3 Náhodná procházka

Nejdříve zmíním často uváděný příklad náhodné procházky, příklad chůze „opilého

námořníka“ ([9], str. 82):

Námořník jde z hospody a je stejně pravděpodobné, že udělá krok dopředu, stejně

jako že udělá krok dozadu (kroky do stran zatím nebudu uvažovat). Co je možné říct o

vzdálenosti, kterou urazí po 𝑁 (stejně dlouhých) krocích?

Z důvodu symetrie je zřejmé, že střední vzdálenost ⟨𝑑𝑁⟩ od počátku bude nulová

pro libovolný počet kroků 𝑁. Je však možné učinit predikci pro střední hodnotu

kvadrátu vzdálenosti ⟨𝑑𝑁2 ⟩ ?

Nechť je pohyb námořníka omezen na osu 𝑥. Hodnotu kroku číslo 𝑖 budu značit 𝐿𝑖,

𝐿𝑖 = ±1. Střední hodnota kvadrátu vzdálenosti je obecně dána vztahem

⟨𝑑𝑁2 ⟩ = ⟨ (∑ 𝐿𝑖

𝑁𝑖=1 )2⟩ = (∑ ⟨𝐿𝑖

2⟩𝑁𝑖=1 ) + ∑ ⟨𝐿𝑖𝐿𝑗⟩𝑁

𝑖≠𝑗 (1)

Suma v první závorce je rovna 𝑁. Jelikož součin 𝐿𝑖𝐿𝑗, kde 𝑖 ≠ 𝑗, může být se stejnou

pravděpodobností roven +1 nebo −1, musí být střední hodnota sumy v druhé

závorce rovna nule. Odtud

⟨𝑑𝑁2 ⟩ = 𝑁.

Page 30: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

26

Analogicky by se postupovalo v případě, že by se námořník pohyboval v celé rovině a

směr jeho kroku byl zcela náhodný, pouze by se počítalo se se skalárním součinem

vektorů. V případě, že by se i délka kroku námořníka 𝐿 náhodně měnila, byla by

střední hodnota kvadrátu vzdálenosti

⟨𝑑𝑁2 ⟩ = 𝑁 ∙ ⟨𝐿2⟩ , (2)

kde ⟨𝐿2⟩ je průměrná hodnota kvadrátu délky jednoho kroku (nezaměňovat za

kvadrát průměrné délky kroku).

Metodou MC byl modelován náhodný pohyb bodu v rovině 𝑥𝑦. V každém kroku se

bod posunul buď ve směru osy 𝑥 o ±1 nebo ve směru osy 𝑦 o ±1. Osa stejně jako

směr kroku v dané ose byly vybírány náhodně. Pohyb byl zaznamenán do mřížky

s vyznačeným počátečním a koncovým bodem. Následující obrázek zachycuje

výsledný pohyb jednoho pokusu.

Obrázek 5 Náhodná procházka v mřížce

Page 31: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

27

Srovnání kvadrátu vzdálenosti od počátku pro konkrétní rozehrávku a teoretické

předpovědi (2) bylo pro pokusy s různou délkou kroků zaznamenáno graficky.

Obrázek 6 Srovnání predikce středního kvadrátu vzdálenosti a vzdálenosti pro jednotlivé rozehrávky

Zdrojový kód je na stranách 44 a 45.

Poznámka:

K určení směru pohybu byl generován náhodný dvousložkový vektor s hodnotami 0

nebo 1. Kódování bylo:

[0,0] – posun −1 v ose 𝑦

[0,1] – posun +1 v ose 𝑦

[1,0] – posun −1 v ose 𝑥

[1,1] – posun +1 v ose 𝑥 .

4.1.4 Modelování Brownova pohybu

Cílem této úlohy je modelovat dráhu částice obecněji. Vzhledem k zobrazení v rovině

jsme se omezili na rovinný pohyb, ovšem rozšíření modelu na pohyb ve třech

dimenzích je přímočaré. Ve srovnání s předchozí úlohou došlo k zobecnění ve dvou

ohledech:

1. Byl generován libovolný náhodný směr v rovině (pohyb nebyl omezen

na pravoúhlou mřížku).

2. Velikost kroku nebyla brána jako konstantní, ale byla dán exponenciálním

rozdělením. Stejným rozdělením se řídí i volná dráha molekul či částic,

vykonávajících Brownův pohyb [10].

Page 32: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

28

V programu se v každém kroku vygenerují dvě náhodná čísla z intervalu (0,1). První

náhodné číslo rnd1 se použije k určení velikosti náhodné dráhy 𝐿. Využije se přitom

distribuční funkce, která má pro exponenciální rozdělení tvar ([10], str. 62)

𝐹(𝐿) = 1 − 𝑒−𝐿/𝐿0,

kde 𝐿0 je střední hodnota délky jednoho kroku, resp. „střední dráha molekuly mezi

dvěma srážkami“. Částici, která urazí dráhu přesně 𝐿, odpovídá jednoznačná hodnota

distribuční funkce 𝐹(𝐿) Tu můžeme chápat jako náhodnou veličinu s rovnoměrným

rozdělením z intervalu (0,1) [1]. Odtud

rnd1 = 1 − 𝑒−𝐿/𝐿0 ⇒ 𝐿 = −𝐿0 ∙ ln(1 − rnd1) .

Druhé náhodné číslo rnd2 se použije ke stanovení náhodného úhlu 𝜑, který svírá

směr následujícího pohybu částice s osou 𝑥:

𝜑 = 2𝜋 ∙ rnd2.

Náhodné posunutí částice ∆𝑟 v rovině pak bude

∆𝑟 = (𝐿 cos 𝜑 , 𝐿 sin 𝜑) .

Simulace pohybu, generovaného jedním spuštěním programu, je zachycena

na následujícím grafu.

Obrázek 7 Brownův pohyb metodou Monte Carlo

Zaznamenáno bylo také srovnání teoretické předpovědi (2) střední hodnoty kvadrátu

vzdálenosti uražené od počátku v závislosti na počtu kroků 𝑁 se středními hodnotami

kvadrátů vzdálenosti, získanými z opakovaných simulací.

Page 33: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

29

Obrázek 8 Srovnání predikce středního kvadrátu vzdálenosti v závislosti na počtu kroků (červená čára) s průměrem kvadrátů vzdálenosti tisíce konkrétních rozehrávek (modré hvězdy)

Zdrojový kód obou programů (generování pohybu a testování středních hodnot) je

uveden na stranách 46 až 48.

Poznámka:

Pro průměrnou délku „kroku“ ⟨𝐿⟩ = 𝐿0 v případě exponenciálního rozdělení platí

⟨𝐿2⟩ = 2𝐿02 [10], tedy ⟨𝑑𝑁

2 ⟩ = 2𝑁𝐿02 .

4.2 Modelování dějů metodou molekulární dynamiky

4.2.1 Oscilátor

Cílem této úlohy je modelování závislosti výchylky oscilátoru na čase. Pohybová

rovnice je dána vztahem

𝐹 = 𝑚𝑑2𝑥

𝑑𝑡2= −𝑘𝑥 .

Po substituci 𝜔 ≡ √(𝑘/𝑚) má obecné řešení této rovnice tvar

𝑥 = 𝐴0 ∙ cos(𝜔𝑡 + 𝜑0),

kde 𝐴0, 𝜑0 jsou konstanty určené počátečními podmínkami 𝑥0, 𝑣0.

Page 34: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

30

Platí pro ně:

𝐴0 = √𝑥02 +

𝑣02

𝜔2 ,

𝜑0 = tan−1 (−𝑣0

𝑥0𝜔) .

V modelu byly počáteční podmínky v čase 𝑡0 = 0 stanoveny takto:

𝑥(𝑡0) = 1, 𝑣(𝑡0) = 0 .

Hodnota 𝜔 = 1. Exaktní řešení za těchto podmínek je

𝑥(𝑡) = cos(𝑡).

Problém byl opět řešen Eulerovou a Verletovou metodou a obě metody se porovnaly

s exaktním řešením.

a. Eulerova metoda

Vyjdeme ze vztahů

𝑎𝑖 = −𝜔2𝑥𝑖 ,

𝑥𝑖+1 = 𝑥𝑖 + 𝑣𝑖ℎ ,

𝑣𝑖+1 = 𝑣𝑖 + 𝑎𝑖ℎ .

Počáteční podmínky jsou

𝑥(0) = 1, 𝑣(0) = 0 .

Časový krok ℎ = 0,01. Výpočet je ukončen po 20 periodách, tedy v čase 20𝑇, kde

𝑇 = 2𝜋/𝜔.

Page 35: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

31

První graf zobrazuje závislost výchylky na čase a její chybu:

Obrázek 9 Horní část: srovnání exaktního a numerického řešení. Dolní část: vývoj chyby v čase

Podobně druhý graf zobrazuje závislost rychlosti na čase a její chybu:

Obrázek 10 Horní část: srovnání exaktního a numerického řešení. Dolní část: vývoj chyby v čase

Přestože chyba postupně narůstá, dává Eulerova metoda pro několik prvních period

harmonického oscilátoru velice dobré výsledky. Oscilace numerické řešení stabilizují,

chyby se během jednoho kmitu částečně eliminují.

Page 36: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

32

b. Verletova metoda

Nyní vycházíme ze schématu

𝑎(𝑡) = −𝜔2𝑥(𝑡),

𝑣(𝑡 + ℎ/2) = 𝑣(𝑡 − ℎ/2) + 𝑎(𝑡) ℎ,

𝑥(𝑡 + ℎ) = 𝑥(𝑡) + 𝑣(𝑡 + ℎ/2) ℎ,

přičemž

𝑣(𝑡0 − ℎ/2) = 𝑣(𝑡0) − 𝑎(𝑡0) ∙ ℎ/2 .

Počáteční podmínky, časový krok a konečný čas jsou stejné jako v případě Eulerovy

metody.

První graf zobrazuje závislost výchylky na čase:

Obrázek 11 Horní část: srovnání exaktního a numerického řešení. Dolní část: vývoj chyby v čase

Page 37: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

33

Druhý graf zobrazuje závislost rychlosti na čase:

Obrázek 12 Horní část: srovnání exaktního a numerického řešení. Dolní část: vývoj chyby v čase

Chyba Verletovy metody je asi o dva řády menší než chyba metody Eulerovy.

Zdrojový kód programu je na stranách 49 až 51.

4.2.2 Pohyb planety v radiálním silovém poli

Pomocí Eulerovy metody a metody Verletovy (varianta leap – frog) byl numericky

simulován pohyb tělesa v radiálním gravitačním poli.

Analytické řešení problému

Nejdříve připomenu základní poznatky o analytickém řešení tohoto problému, viz

např. [11]. Z Newtonova gravitačního zákona lze odvodit, že hmotný bod se

v radiálním poli vždy pohybuje po kuželosečce, jejíž jedno ohnisko leží v místě

centrálního tělesa (mluvím o případu, kdy je centrální těleso mnohonásobně

hmotnější). Nejmenší úniková rychlost 𝑣𝑝 se nazývá parabolická. Je-li rychlost větší,

těleso opisuje hyperbolu, v opačném případě opisuje periodicky elipsu. Ze zákona

zachování energie tělesa lze ukázat:

𝐸 = 𝐸𝑃 + 𝐸𝐾 < 0 – řešením je vždy elipsa,

𝐸 = 𝐸𝑃 + 𝐸𝐾 ≥ 0 – řešením je hyperbola, v případě rovnosti parabola.

Parametry kuželosečky jsou jednoznačně dány celkovou energií 𝐸 a momentem

hybnosti 𝐿 tělesa.

Page 38: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

34

Při vhodném natočení souřadnic je rovnice kuželosečky v polárních souřadnicích

(𝑟, 𝜑) dána vztahem

𝑟 =𝑝

1+𝜀 cos 𝜑 , (3)

kde

𝑝 ≡𝐿2

𝐺𝑀𝑚2 , 𝜀 ≡ √1 +

2𝐸𝐿2

(𝐺𝑀)2𝑚3 .

𝑀 a 𝑚 jsou po řadě hmotnosti centrálního a obíhajícího tělesa, 𝐺 je gravitační

konstanta. Konstanta 𝜀 se nazývá číselná excentricita, 𝑟 je vzdálenost od ohniska a 𝜑

úhel, který průvodič 𝑟 svírá s hlavní osou kuželosečky.

V modelu jsem volil počáteční rychlost tělesa kolmo ke spojnici počáteční polohy

tělesa s centrálním tělesem. V tomto případě leží tato spojnice na hlavní ose

kuželosečky.

Hodnoty hlavní poloosy 𝑎 a vedlejší poloosy 𝑏 elipsy lze určit z rovnic ([11], str. 120)

𝑝 =𝑏2

𝑎 , 𝜀 = √1 −

𝑏2

𝑎2 .

Numerické řešení problému

Působiště gravitační síly bylo umístěno do počátku kartézské soustavy. Vektory

počáteční polohy a rychlosti tělesa v čase 𝑡0 = 0 byly zvoleny ve směru os 𝑥 a 𝑦:

𝑟0 = (𝑥0, 0), �⃗�0 = (0, 𝑣0).

Síla působící na těleso je dána Newtonovým gravitačním zákonem

�⃗� = −𝐺𝑀𝑚

|𝑟|3∙ 𝑟 .

Tomu odpovídá zrychlení

𝐴(𝑟, 𝑡) = −𝐾𝑟

|𝑟|3 ,

kde 𝐾 = 𝐺𝑀. Pro výpočet byly v modelu zvoleny hodnoty 𝐾 = 1 a 𝑥0 = 1. Za těchto

podmínek platí pro parabolickou rychlost 𝑣𝑝 a kruhovou rychlost 𝑣𝑘:

𝑣𝑝 = √2𝐾

|𝑥0|= √2 , 𝑣𝑘 = √

𝐾

|𝑥0|= 1.

Page 39: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

35

Jelikož MATLAB je tzv. vektorově orientovaný, je možné problém formulovat

od počátku vektorově (není tedy nutné a dokonce ani žádoucí zpracovávat rovnice ve

složkách).

a. Eulerova metoda

Vyjdeme z pořadí rovnic (ARVT), (strana 14)

�⃗�𝑖 = −𝐾𝑟𝑖

|𝑟𝑖|3

𝑟𝑖+1 = 𝑟𝑖 + �⃗�𝑖 ℎ

�⃗�𝑖+1 = �⃗�𝑖 + �⃗�𝑖 ℎ

𝑡𝑖+1 = 𝑡𝑖 + ℎ

Časový krok byl stanoven ℎ = 0,01.

Na ukázku uvádím tři grafické výstupy programu. V každém je numerické řešení,

získané Eulerovou metodou, současně porovnáno s přesným analytickým řešením (1)

pohybové rovnice. První graf byl vytvořen pro počáteční podmínky 𝑥0 = 1, 𝑣0 = 1.5,

což odpovídá hyperbolickému pohybu. Konečný čas výpočtu byl stanoven na 𝑇 = 2.

Obrázek 13 Pohyb tělesa v radiálním gravitačním poli. Numerické a exaktní řešení

Červená přerušovaná čára odpovídá analytickému řešení, modrá numerickému.

Jelikož intenzita síly se vzdáleností velice rychle klesá, nemá smysl zobrazovat

trajektorii pro výrazně delší čas než 𝑇 = 2 – těleso se pro delší časy prakticky

pohybuje po asymptotě k hyperbole.

Page 40: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

36

Druhý graf byl vytvořen pro počáteční podmínky 𝑥0 = 1, 𝑣0 = 1, což odpovídá

kruhovému pohybu. Konečný čas výpočtu byl stanoven na 𝑇 = 20.

Obrázek 14 Pohyb tělesa v radiálním gravitačním poli. Numerické a exaktní řešení

Značení je stejné jako v předchozím grafu. Je vidět, že se chyba numerického řešení

kumuluje a rozdíl s exaktním řešením s časem stále narůstá.

Další graf zobrazuje srovnání řešení pomocí Eulerovy metody a exaktního řešení

v případě eliptického pohybu tělesa:

Obrázek 15 Pohyb tělesa v radiálním gravitačním poli. Numerické a exaktní řešení

Na tomto grafu je také vidět rys, typický pro většinu numerických metod. Těleso se

podle numerického řešení vzdaluje od ohniska a získává energii. To je ekvivalentní

postupnému navyšování kinetické energie tělesa. Odtud pochází i název jevu, tzv.

„nefyzikální ohřev“.

Page 41: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

37

b. Verletova metoda

Použitá verze je Leap Frog (strana 20). Vycházíme z rekurentních vztahů:

�⃗�(𝑡) = −𝐾𝑟(𝑡)

|𝑟(𝑡)3| ,

�⃗�(𝑡 + ℎ/2) = �⃗�(𝑡 − ℎ/2) + �⃗�(𝑡) ∙ ℎ ,

𝑟(𝑡 + ℎ) = 𝑟(𝑡) + �⃗�(𝑡 + ℎ/2) ℎ .

Pro počáteční hodnotu rychlosti byla použita korekce

�⃗�(𝑡0 − ℎ/2) = �⃗�(𝑡0) − �⃗�(𝑡0) ∙ℎ

2 .

Stejně jako v případě Eulerovy metody byly vytvořeny dva grafy a do každého grafu

bylo zobrazeno také exaktní řešení.

První graf byl vytvořen pro počáteční podmínky 𝑥0 = 1, 𝑣0 = 1.5. Konečný čas

výpočtu 𝑇 = 2.

Obrázek 16 Pohyb tělesa v radiálním gravitačním poli. Numerické a exaktní řešení

Page 42: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

38

Druhý graf byl vytvořen pro počáteční podmínky 𝑥0 = 1, 𝑣0 = 1. Konečný čas

výpočtu 𝑇 = 20.

Obrázek 17 Pohyb tělesa v radiálním gravitačním poli. Numerické a exaktní řešení

Následující graf srovnává řešení pomocí Verletovy metody s exaktním řešení

v případě eliptického pohybu tělesa.

Obrázek 18 Pohyb tělesa v radiálním gravitačním poli. Numerické a exaktní řešení

Ze srovnání obou metod je zřejmé, že Verletova je podstatně přesnější, nefyzikální

ohřev se téměř nevyskytuje.

Zdrojový kód programu je na stranách 52 až 54.

Page 43: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

39

Závěr Práce je koncipována jako teoretický úvod do počítačového modelování. Jejím cílem

bylo na vybraných úlohách ukázat, jaké druhy problémů je možné řešit. Až na případ

„Brownova pohybu“ (kde se objevilo exponenciální rozdělení) by se všechny

problémy praktické části daly zahrnout do výuky na gymnáziích s matematicko-

fyzikálním zaměřením. Ostatně podobné numerické modely se objevují i v rámci

fyzikální olympiády [5].

U řešených problémů byl uveden stručně jejich teoretický základ, zdrojové kódy

v MATLABu byly navíc opatřeny relativně podrobným komentářem. Ačkoli se čtenář,

rozhodnutý modelovat vlastní problém, bez studia programu MATLAB nad rámec

této práce neobejde, může mu čtení kódů ulehčit cestu. Jak bylo v práci ukázáno, i

v běžném Excelu lze numericky řešit relativně komplikované fyzikální problémy.

Řešené ilustrativní problémy by měly také ukázat na dynamický aspekt Newtonova

vztahu 𝐹 = 𝑚𝑎, který spolu s počátečními podmínkami určuje celou trajektorii

pohybu tělesa v silovém poli. Většina studentů si význam tohoto vztahu jakožto

pohybové rovnice neuvědomuje, chápe jej jenom staticky jako pouhou úměru mezi

silou a zrychlením.

Na závěr pokládám za nutné ještě jednou připomenout, že program MATLAB není

volně dostupný. Je mi známo, že některá gymnázia ho mají, většina ale ne. V takovém

případě čtenáři doporučuji, kromě již zmiňovaného Excelu, především program

Octave (dostupný na webových stránkách [12]), který patří mezi povedené

alternativy MATLABu, ale na rozdíl od něj je zdarma. Jsou i jiné alternativy, např.

v úvodu publikace [5] je zmíněno několik dostupných demoverzí simulačního

programu Coach.

Page 44: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

40

Seznam použitých zdrojů

[1] – HRACH, Rudolf. Počítačová fyzika I. Ústí nad Labem: PF UJEP, 2003

[2] – NEZBEDA, KOLAFA, KOTRLA. Úvod do počítačových simulací. Praha: Karolinum,

2003

[3] – https://cs.wikipedia.org/wiki/Probl%C3%A9m_t%C5%99%C3%AD_t%C4%9Bles

[4] – https://en.wikipedia.org/wiki/Stability_of_the_Solar_System

[5] – ŠEDIVÝ, Přemysl. Modelování fyzikálních dějů numerickými metodami.

(Dostupné na stránkách: http://fyzikalniolympiada.cz/studijni-texty)

[6] – https://cs.wikipedia.org/wiki/Buffonova_jehla

[7] – BELLOS, Alex. Alexova dobrodružství v zemi čísel. Dokořán, 2015

[8] – https://cs.wikipedia.org/wiki/Teorie_chaosu

[9] – FEYNMAN, LEIGHTON, SANDS. Feynmanovy přednášky z fyziky. FRAGMENT,

2002

[10] – BLAŽEK, Jiří. Metody matematické statistiky ve fyzice. Diplomová práce,

JCU České Budějovice, 2015.

(Dostupné na stránkách: https://wstag.jcu.cz/portal/studium/prohlizeni.html)

[11] – KVASNICA, HAVRÁNEK, LUKÁČ, SPRUŠIL. Mechanika. Praha: Academia, 1988

[12] – https://www.gnu.org/software/octave

Page 45: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

41

Zdrojové kódy v MATLABu

Page 46: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1 function pi_aprox = pi_MC(N) 2 3 % pi_MC vypocet cisla pi metodou Monte Carlo 4 % N: celkovy pocet rozehravek dvojic (x,y) 5 % pi_aprox: aproximace cisla pi 6 % ctverec o strane 1 a ctvrtkruh o polomeru 2 7 8 % pocet "uspesnych" rozehravek 9 m = 0; 10 % nastaveni generatoru podle aktualniho casu11 rng('shuffle'); 12 for i = 1 : N13 x = rand;14 y = rand;15 % lezi bod o souradnicich [x,y] ve ctvrtkruhu?16 if sum(x^2+y^2) < 1 17 m = m+1;18 end19 end20 pi_aprox = 4*m/N;

42

Page 47: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1 function s = intMC(a,b,f,N) 2 3 % intMC integrace funkce f v mezich [a,b] metodou Monte Carlo 4 % a < b 5 % f ... ukazatel na funkci (@) 6 % N ... celkovy pocet rozehravek MC 7 % s ... numericka hodnota integralu 8 9 % implicitni hodnoty vstupnich promennych10 if nargin < 411 N = 100000;12 end13 if nargin < 314 f = @(x) sin(x); % integrovana funkce15 end16 if nargin < 217 b = 2*pi; % horni mez integrace18 end19 if ~nargin20 a = 0; % dolni mez integrace21 end22 23 % ohraniceni funkce obdelnikem [a,b,fMin,fMax]24 [~,fMin] = fminbnd(f,a,b); % fMin = min(f)25 g = @(x) -f(x); % g(x) = -f(x)26 [~,fMax] = fminbnd(g,a,b ); % fMax = -min(g) 27 fMax = -fMax;28 deltaX = b-a;29 deltaY = fMax-fMin;30 31 m = 0; % m = m(f>0) - m(f<0)32 for n = 1 : N33 c = rand(1,2);34 x = a + deltaX*c(1); % nahodne cislo z int. [a,b]35 % nahodne cislo z int. [fMin,fMax]36 y = fMin + deltaY*c(2); 37 fx = f(x);38 if y > 0 && y < fx % test pro kladne hodnoty f 39 m = m+1;40 elseif y < 0 && y > fx % test pro zaporne hodnoty f41 m = m-1;42 end43 end44 45 s = deltaX*deltaY*m/N;

43

Page 48: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1 function [d2,LL] = nahodna_prochazka(N) 2 3 % nahodna_prochazka 2D nahodny pohyb ve dvou kolmych smerech 4 % N: pocet kroku v rovine xy 5 % d2: vektor kvadratu vzdalenosti po n krocich, n = 1,2,...,N 6 % kroky o jednotkove velikosti s = 1, L = <s> = 1, a smeru ... 7 % ... v ose x nebo y 8 % L2: stredni kvadrat drahy jednoho kroku, L2 = <s^2> = 1 9 10 % teoreticka predpoved stredni hodnoty kvadratu vzdalenosti11 % od pocatku drahy po n krocich: <d^2> = n*L2 = n12 13 % implicitne zadany pocet kroku14 if ~nargin15 N = 100;16 end17 18 % parametry jednoho kroku: L = <s>, L2 = <s^2>19 L = 1;20 LL = L^2;21 22 % prealokace poli x,y (poloha po n krocich)23 x = zeros(1,N+1);24 y = zeros(1,N+1);25 26 rng('shuffle'); % nastaveni generatoru podle aktualniho27 % casu28 L2 = 2*L;29 for i = 2 : N+1 % prvni az N-ty krok od pocatku30 % 1. nahodne cislo - posun v ose x nebo y31 % 2. nahodne cislo - posun v kladnem nebo zapornem smeru32 % soucasne generovani dvou nahodnych cisel (0 nebo 1)33 rnd = randi([0,1],1,2); 34 if rnd(1) % posun v ose x35 x(i) = x(i-1) + L2*(rnd(2)-0.5); % posun v ose x: -L nebo +L36 y(i) = y(i-1); % v ose y bez posunu37 else % posun v ose y38 x(i) = x(i-1); % v ose x bez posunu39 y(i) = y(i-1) + L2*(rnd(2)-0.5); % posun v ose y: -L nebo +L40 end41 end42 d2 = x.^2+y.^2;43 44 if ~nargout45 % zobrazeni nahodne cesty46 figure;47 plot(x,y,'bo--');48 hold on

44

Page 49: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

49 h(1) = plot(x(1),y(1),'o',...50 'MarkerFaceColor','k','MarkerEdgeColor','k');51 h(2) = plot(x(end),y(end),'o',...52 'MarkerFaceColor','r','MarkerEdgeColor','r');53 grid on;54 legend(h,'pocatek','konec','Location','best');55 axis equal;56 c = axis;57 axis(c+[-0.5,+0.5,-0.5,+0.5]);58 xlabel('x');59 ylabel('y');60 title('nahodna prochazka, [x,y]');61 % zobrazeni kvadratu nahodne vzdalenosti62 figure;63 kroky = 0 : N;64 h = plot(kroky,d2,'.',kroky,LL*kroky,'r--');65 set(h(1),'MarkerSize',10);66 grid on;67 xlabel('pocet kroku');68 ylabel('vzdalenost^2');69 legend('d^{2}','< d^{2}>','Location','best');70 title('nahodna prochazka, < d^{2}>');71 72 clear d2; % bez vystupu73 end

45

Page 50: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1 function [d2,LL] = Brownuv_pohyb(N) 2 3 % simulace Brownova pohybu v rovine xy 4 % kroky o nahodne velikosti s a nahodnem smeru fi 5 % <s> = L, <s^2> = L2 6 % simulace volne drahy a smeru pohybu 7 % N: pocet kroku v rovine xy 8 % d2: vektor kvadratu vzdalenosti po n krocich, n = 1,2,...,N 9 10 % implicitne zadany pocet kroku11 if ~nargin12 N = 100;13 end14 15 % exponencialni rozdeleni volne drahy s16 % hustota pravdepodobnosti: f(s) = 1/L*exp(-s/L)*ds17 % distribucni funkce: F(s) = 1 - exp(-s/L)18 % stredni draha: <s> = integral[s*f(s)*ds] = L19 % stredni kvadrat drahy: <s^2> = integral[s^2*f(s)*ds] = 2*L^2 = LL20 % stredni kvadrat vzdalenosti od pocatku drahy po n krocich:21 % <d^2> = n*2*L^222 L = 1; % L = <s>23 LL = 2*L^2; % LL = <s^2>24 25 % prealokace poli x,y (poloha po n krocich)26 x = zeros(1,N+1);27 y = zeros(1,N+1);28 pi2 = 2*pi;29 30 for n = 2 : N+1 % prvni az N-ty krok od pocatku31 % 1. nahodne cislo - generovani volne drahy s32 % 2. nahodne cislo - generovani uhlu fi33 rnd = rand(1,2);34 s = -L*log(1-rnd(1));35 fi = pi2*rnd(2);36 x(n) = x(n-1)+s*cos(fi);37 y(n) = y(n-1)+s*sin(fi);38 end39 % d2(n) ... kvadrat vzdalenosti od pocatku po n krocich, n = 1,2,...,N40 d2 = x.^2+y.^2;41 42 if ~nargout43 % zobrazeni nahodne cesty44 figure;45 plot(x,y,'b.--','MarkerSize',12);46 hold on47 h(1) = plot(x(1),y(1),...48 'o','MarkerFaceColor','k','MarkerEdgeColor','k');

46

Page 51: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

49 h(2) = plot(x(end),y(end),...50 'o','MarkerFaceColor','r','MarkerEdgeColor','r');51 grid on;52 legend(h,'pocatek','konec','Location','best');53 axis equal;54 c = axis;55 axis(c+[-0.5,+0.5,-0.5,+0.5]);56 xlabel('x');57 ylabel('y');58 title('Brownuv pohyb, [x,y]');59 % zobrazeni kvadratu nahodne vzdalenosti a porovnani se60 % stredni hodnotou: <d^2> = (pocet kroku)*<s^2>,61 % <d2(n)> = n*L2, n = 1,2,...,N62 figure;63 kroky = 0 : N;64 h = plot(kroky,d2,'.',kroky,LL*kroky,'r--');65 set(h(1),'MarkerSize',10); 66 grid on;67 xlabel('pocet kroku');68 ylabel('d^2');69 legend('d^{2}','< d^{2}>','Location','NorthWest');70 title('Brownuv pohyb, < d^2>');71 72 clear d2; % bez vystupu73 end

47

Page 52: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1 function test_nahodny_pohyb(K,N) 2 3 % test_nahodny_pohyb <vzdalenost^2> = 4 % = (pocet kroku)*<(delka kroku)^2> ? 5 % K: pocet pokusu, ktere se streduji 6 % N: pocek kroku v jednom pokusu 7 8 if ~exist('K','var') 9 K = 1000;10 end11 if ~exist('N','var')12 N = 10;13 end14 15 % testovana varianta nahodneho pohybu16 f = @nahodna_prochazka; % nahodna_prochazka, Brownuv_pohyb17 popis = 'nahodna prochazka'; % nahodna prochazka, Brownuv pohyb18 [~,LL] = f(0); % LL = <s^2>19 20 kroky = 0 : N;21 d2Stredni = zeros(1,N+1);22 23 for k = 1 : K24 d2Stredni = d2Stredni + f(N);25 end26 d2Stredni = d2Stredni/K;27 28 figure;29 plot(kroky,d2Stredni,'*',kroky,LL*kroky,'r:');30 grid on;31 xlabel('kroky');32 ylabel('<vzdalenost>^{2}');33 title([popis, ', < d^{2}>, pocet pokusu: ',int2str(K)]);34 legend('simulace','teorie','Location','NorthWest');35

48

Page 53: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1 function oscilator(x0,v0) 2 3 % oscilator reseni rovnice d2x/dt2 = -omega^2*x 4 % x0,v0: poloha a rychlost v okamziku t = 0 5 % funkce volana bez vstupnich parametru => implicitni hodnoty 6 % 7 % soustava rovnic 1. radu a poc. podminky: 8 % dx/dt = v 9 % dv/dt = a = -omega^2*x 10 % x(0) = x0, v(0) = v0 11 12 % implicitni vstupni parametry 13 if nargin == 0 14 x0 = 1; 15 v0 = 0; 16 end 17 18 % uhlova rychlost a perioda kmitu 19 omega = 1; 20 T = 2*pi/omega; 21 omega2 = omega^2; 22 23 tKon = 20*T; % konecny cas integrace 24 dt = 0.01; % % krok integrace 25 t = 0 : dt : tKon; 26 lt = length(t); 27 28 29 % numericka integrace: Euler 30 % v(t+dt) = v(t) + a(t)*dt 31 % x(t+dt) = x(t) + v(t)*dt 32 % prealokace poli x(t), v(t) 33 xEuler = zeros(1,lt); 34 vEuler = zeros(1,lt); 35 % pocatecni podminky 36 xEuler(1) = x0; 37 vEuler(1) = v0; 38 for i = 2 : lt 39 vEuler(i) = vEuler(i-1) - omega2*xEuler(i-1)*dt; 40 xEuler(i) = xEuler(i-1) + vEuler(i-1)*dt; 41 end 42 43 % numericka integrace: Verlet, verze leap-frog 44 % v(t+dt/2) = v(t-dt/2) + a(t)*dt 45 % x(t+dt) = x(t) + v(t+dt/2)*dt 46 % v(t0-dt/2) = v(t0) - a(t0)*dt/2 47 % prealokace poli x(t), v(t) 48 x = zeros(1,lt);

49

Page 54: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

49 v = zeros(1,lt); 50 % pocatecni podminky 51 xVerlet(1) = x0; 52 vVerlet(1) = v0+omega2*x0*dt/2; 53 for i = 2 : lt 54 vVerlet(i) = vVerlet(i-1) - omega2*xVerlet(i-1)*dt; 55 xVerlet(i) = xVerlet(i-1) + vVerlet(i)*dt; 56 end 57 58 % exaktni reseni 59 % x = A*cos(omega*t+fi) 60 % v = -A*omega*sin(omega*t+fi) 61 % A = sqrt[x0^2+(v0/omega)^2], tg(fi) = -v0/(omega*x0) 62 A = sqrt(x0^2+(v0/omega)^2); 63 fi = atan2(-v0/omega,x0); 64 xExakt = A*cos(omega*t+fi); 65 vExakt = -A*omega*sin(omega*t+fi); 66 67 titulek = ['Eulerova metoda, dt = ',num2str(dt)]; 68 grafy(t,xEuler,vEuler,xExakt,vExakt,titulek); 69 titulek = ['Verletova metoda, dt = ',num2str(dt)]; 70 grafy(t,xVerlet,vVerlet,xExakt,vExakt,titulek); 71 72 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 73 74 function grafy(t,x,v,xExakt,vExakt,titulek) 75 76 % grafy x(t), x(t)-x_exakt(t) 77 figure; 78 subplot(2,1,1); 79 h = plot(t,x,'b',t,xExakt,'r--'); 80 set(h(2),'LineWidth',2); 81 % legend('numericke reseni','exaktni reseni','Location','best'); 82 grid on; 83 ylabel('x'); 84 title([titulek,', x']); 85 subplot(2,1,2); 86 plot(t,x-xExakt); 87 grid on; 88 xlabel('t'); 89 ylabel('x_{num} -- x_{exakt}'); 90 title([titulek, ', \Deltax']); 91 92 % grafy v(t), v(t)-v_exakt(t) 93 figure; 94 subplot(2,1,1); 95 h = plot(t,v,'b',t,vExakt,'r--'); 96 set(h(2),'LineWidth',2);

50

Page 55: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

97 % legend('numericke reseni','exaktni reseni','Location','best'); 98 grid on; 99 ylabel('v');100 title([titulek,', v']);101 subplot(2,1,2);102 plot(t,v-vExakt);103 grid on;104 xlabel('t');105 ylabel('v_{num} -- v_{exakt}');106 title([titulek, ', \Deltav']);

51

Page 56: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

1 function planetarni_pohyb(x0,vy0) 2 3 % planetarni_pohyb pohyb v radialnim silovem poli 4 % resena pohybova rovnice: d2r/dt^2 = -K*r/|r|^3 5 % gravitacni pole: K = G*M 6 % pohybova rovnice jako soustava rovnic 1. radu: 7 % dv/dt = -K*r/|r|^3 8 % dr/dt = v 9 % r: vektor poloh, r(t) = [x(t); y(t)] 10 % v: vektor rychlosti, v(t) = [vx(t); vy(t)] 11 % pocatecni poloha a rychlost: r0 = [x0,0], v0 = [0,vy0] 12 13 K = 1; 14 if ~nargin 15 x0 = 1; 16 % kruhovy pohyb: vy0 = sqrt(K/abs(x0)) 17 % parabolicky pohyb: vy0 = sqrt(2*K/abs(x0)) 18 vy0 = 1; 19 end 20 21 tEnd = 6; % konecny cas integrace 22 dt = 0.01; 23 t = 0 : dt : tEnd; 24 lt = length(t); 25 26 % exaktni reseni, r = p / [1+e*cos(fi)] 27 % 28 % parametry kuzelosecky ze zakonu zachovani 29 % plosne rychlosti sigma (resp. momentu hybnosti L = 2m*sigma) 30 % a energie E 31 sigma2 = x0*vy0; % sigma2 = 2*sigma 32 Em = vy0^2/2 - K/abs(x0); % Em = E/m; 33 p = sigma2^2/K; 34 e = sqrt(1 + 2*Em*sigma2^2/K^2); 35 36 % numericka integrace: Euler 37 % v(t+dt) = v(t) + a(t)*dt 38 % r(t+dt) = r(t) + v(t)*dt 39 vEuler = zeros(2,lt); 40 rEuler = zeros(2,lt); 41 vEuler(:,1) = [0;vy0]; 42 rEuler(:,1) = [x0;0]; 43 for j = 2 : lt 44 v = vEuler(:,j-1); 45 r = rEuler(:,j-1); 46 a = -K*r/((r'*r)^(3/2)); 47 vEuler(:,j) = v + a*dt; 48 rEuler(:,j) = r + v*dt;

52

Page 57: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

49 end 50 51 % numericka integrace: Verlet, verze leap-frog 52 % v(t+dt/2) = v(t-dt/2) + a(t)*dt 53 % r(t+dt) = r(t) + v(t+dt/2)*dt 54 % v(t0-dt/2) = v(t0) - a(t0)*dt/2 55 vVerlet = zeros(2,lt); 56 rVerlet = zeros(2,lt); 57 v0 = [0;vy0]; 58 r0 = [x0;0]; 59 a0 = -K*r0/((r0'*r0)^(3/2)); 60 vVerlet(:,1) = v0-a0*dt/2; 61 rVerlet(:,1) = r0; 62 for j = 2 : lt 63 v = vVerlet(:,j-1); 64 r = rVerlet(:,j-1); 65 a = -K*r/((r'*r)^(3/2)); 66 v = v + a*dt; 67 vVerlet(:,j) = v; 68 rVerlet(:,j) = r + v*dt; 69 end 70 71 % exaktni tvar trajektorie 72 if Em < -8e-16 % elipsa, 8e-16 ~ 73 % numericka nula 74 kuzelosecka = 'elipsa'; 75 % rychlost mensi nez pro kruhovy pohyb => afelium, jinak perihelium 76 if abs(vy0) < sqrt(K/abs(x0)) 77 e = -e; % afelium v bode [x0,0] 78 end 79 fiMax = pi; % max. hodnota polarniho uhlu 80 elseif Em > 8e-16 % hyperbola, 8e-16 ~ 81 % numericka nula 82 kuzelosecka = 'hyperbola'; 83 fiMax = atan2(rEuler(2,end),rEuler(1,end)); % rozevreni hyperboly 84 else 85 kuzelosecka = 'parabola'; 86 fiMax = atan2(rEuler(2,end),rEuler(1,end)); % rozevreni paraboly 87 end 88 fi = -fiMax : fiMax/100 : fiMax; 89 r = p./(1+e*cos(fi)); 90 rExakt = [r.*cos(fi);r.*sin(fi)]; % rExakt = [x(fi);y(fi)] 91 92 titulek = ['Eulerova metoda, dt = ',num2str(dt),', ',kuzelosecka]; 93 grafy(rEuler,rExakt,titulek); 94 titulek = ['Verletova metoda, dt = ',num2str(dt),', ',kuzelosecka]; 95 grafy(rVerlet,rExakt,titulek); 96

53

Page 58: Vybrané deterministické a stochastické metody ve výuce ... · Programy v praktické části jsou psány v MATLABu. Tento program bohužel není volně Tento program bohužel není

97 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 98 99 function grafy(r,rExakt,titulek)100 figure;101 hold on;102 plot(r(1,:),r(2,:),'b','LineWidth',2);103 h(1) = plot(r(1,1),r(2,1),'ko','MarkerfaceColor','k','MarkerSize',8);104 h(2) = plot(r(1,end),r(2,end),'go','MarkerfaceColor',...105 'g','MarkerSize',8);106 h(3) = plot(0,0,'r*','MarkerSize',8,'MarkerFaceColor','r');107 plot(rExakt(1,:),rExakt(2,:),'r--','LineWidth',2);108 legend(h,'zacatek','konec','ohnisko','Location','best');109 % rozsireni rozsahu os 110 c = axis;111 dx = c(2)-c(1);112 dy = c(4)-c(3);113 c = c + [-dx/20, dx/20, -dy/20, dy/20];114 axis(c); axis equal;115 grid on;116 xlabel('x');117 ylabel('y');118 title(titulek);119

54