Matematický model: Porovnání verzí
(Založena nová stránka s textem „'''<span id="k21"><span style="mso-bookmark:_Toc496507649">2.1<span style="mso-spacerun: yes"> </span>Vytváření matematických modelů</span></span>'''…“) |
|||
(Není zobrazena jedna mezilehlá verze od stejného uživatele.) | |||
Řádek 1: | Řádek 1: | ||
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;"><span style="color:#0000ff;">'''2.2 Simulace'''</span></div> | |
− | {| | + | |
+ | {| style="border-spacing:0;width:17cm;" | ||
|- | |- | ||
− | | style=" | + | | style="background-color:#ffffcc;border:none;padding:0.049cm;" | Obsah kapitoly: |
+ | | style="background-color:#ffffcc;border:none;padding:0.049cm;" | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k221 2.2.1 Princip numerického řešení obyčejných diferenciálních rovnic] | ||
− | + | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k222 2.2.2 Přesnost numerického řešení] | |
− | [ | + | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k223 2.2.3 Stabilita numerického řešení] |
− | [ | + | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k224 2.2.4 Stanovení hodnot parametrů modelu] |
− | [ | + | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k225 2.2.5 Simulační programovací jazyky] |
+ | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k226 2.2.6 Příklady simulace] | ||
+ | |- | ||
|} | |} | ||
+ | <div style="color:#000000;"> </div> | ||
− | + | <div style="color:#000000;">Simulací (pro účely matematického modelování) rozumíme řešení rovnic matematického modelu, přičemž měníme podle potřeby hodnoty vstupních signálů a parametrů a sledujeme jejich vliv na hodnoty výstupních signálů. U modelů dynamických systémů to znamená řešit diferenciální rovnice nebo jejich soustavy. Postupů analytického řešení známých z matematiky zde lze také použít, ale spíše v jednodušších případech. Většinou volíme řešení numerické. Navíc jsou k dispozici simulační jazyky, jejichž používání je většinou snadné a nevyžaduje příliš hluboké znalosti z programování a práce s počítačem. Abychom však dovedli výsledky správně interpretovat, je rozumné znát základní principy, na kterých je numerické řešení diferenciálních rovnic založeno, a je nutné vědět něco o přesnosti výsledků.</div> | |
− | + | <div style="color:#0000ff;margin-left:0cm;margin-right:0cm;">'''2.2.1 Princip numerického řešení obyčejných diferenciálních rovnic'''</div> | |
− | + | <div style="color:#000000;">Budeme hovořit o numerickém řešení obyčejných diferenciálních rovnic (ODR) 1.řádu s počáteční podmínkou, které jsou lineární (tj. derivace je v nich vždy v první mocnině). Princip řešení si ukážeme na nejjednodušší metodě Eulerově, ale je společný všem tzv. vícekrokovým metodám. Mějme diferenciální rovnici obecně zapsanou ve tvaru</div> | |
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
− | + | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | |
− | + | || | |
+ | || [[Image:Obrázek1.png|top]] | ||
+ | || s počáteční podmínkou ''y''(''t''0) = ''y''0 | ||
+ | | align=right| (2.15) | ||
+ | |- | ||
+ | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">(<span style="background-color:#ccffff;">''t''</span> ... čas, obecně nezávisle proměnná, <span style="background-color:#ccffff;">''y''</span> ... závisle proměnná, <span style="background-color:#ccffff;">''g''</span> ... funkční předpis, jehož tvar známe). Každou diferenciální rovnici 1.řádu na tento tvar můžeme převést osamostatněním derivace. Princip řešení spočívá v tom, že spojitý interval nezávisle proměnné na kterém hledáme řešení diskretizujeme, tj. rozdělíme jej na stejně velké díly o velikosti <span style="background-color:#ccffff;">''h''</span>, takže dostaneme řadu bodů <span style="background-color:#ccffff;">''t</span><span style="background-color:#ccffff;">i''</span> , pro něž platí</div> | ||
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
+ | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | ||
+ | || | ||
+ | || ''ti''+1 = ''ti'' + ''h'' | ||
+ | || pro ''i'' = 0, 1, 2, ... | ||
+ | | align=right| (2.16) | ||
+ | |- | ||
+ | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Hodnoty závisle proměnné v bodech <span style="background-color:#ccffff;">''t</span><span style="background-color:#ccffff;">i''</span> pak vypočteme z Eulerovy formule</div> | ||
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
+ | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | ||
+ | || | ||
+ | || [[Image:Obrázek2.png|top]] | ||
+ | || pro i = 0, 1, 2, ... | ||
+ | | align=right| (2.17) | ||
+ | |- | ||
+ | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">kde hodnota <span style="background-color:#ccffff;">''Y</span><span style="background-color:#ccffff;">i''</span><span style="background-color:#ccffff;">+1</span> je přibližně rovna hledanému řešení <span style="background-color:#ccffff;">''y''</span><span style="background-color:#ccffff;">(</span><span style="background-color:#ccffff;">''t</span><span style="background-color:#ccffff;">i''</span><span style="background-color:#ccffff;">+1</span><span style="background-color:#ccffff;">)</span>, přičemž na počátku <span style="background-color:#ccffff;">''Y''</span><span style="background-color:#ccffff;">0</span> = <span style="background-color:#ccffff;">''y''</span><span style="background-color:#ccffff;">0</span> .</div> | ||
− | {| | + | |
+ | {| style="border-spacing:0;width:17cm;" | ||
|- | |- | ||
− | | | + | | style="border:none;padding:0.049cm;" | [[Image:Obrázek3.png|left|top]] |
− | | style=" | + | | style="border:none;padding:0.049cm;" | Pro názornost je užitečný grafický výklad principu Eulerovy metody, který je vidět na obr.2.2. Metoda vychází z náhrady průběhu analytického řešení na úseku mezi dvěma sousedními body <span style="background-color:#ccffff;">''t</span><span style="background-color:#ccffff;">i''</span> , <span style="background-color:#ccffff;">''t</span><span style="background-color:#ccffff;">i''</span><span style="background-color:#ccffff;">+1</span> přímkou. V počátečním bodě <span style="background-color:#ccffff;">(</span><span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">0</span><span style="background-color:#ccffff;">, </span><span style="background-color:#ccffff;">''y''</span><span style="background-color:#ccffff;">0</span><span style="background-color:#ccffff;">)</span> jsme schopni vypočíst hodnotu pravé strany rovnice (2.13) <span style="background-color:#ccffff;">''g''</span><span style="background-color:#ccffff;">(</span><span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">0</span><span style="background-color:#ccffff;">, </span><span style="background-color:#ccffff;">''y''</span><span style="background-color:#ccffff;">0</span><span style="background-color:#ccffff;">)</span>, tedy vlastně hodnotu derivace <span style="background-color:#ccffff;">''dy''</span><span style="background-color:#ccffff;">/</span><span style="background-color:#ccffff;">''dt''</span> (směrnice tečny). Vzorec (2.17) pak udává, že bod <span style="background-color:#ccffff;">(</span><span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">1</span><span style="background-color:#ccffff;">, </span><span style="background-color:#ccffff;">''Y''</span><span style="background-color:#ccffff;">1</span><span style="background-color:#ccffff;">)</span> získáme jako průsečík tečny v počátečním bodě a pořadnice <span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">1</span>. Takto získaný bod <span style="background-color:#ccffff;">(</span><span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">1</span><span style="background-color:#ccffff;">, </span><span style="background-color:#ccffff;">''Y''</span><span style="background-color:#ccffff;">1</span><span style="background-color:#ccffff;">)</span> můžeme nyní považovat za počáteční a postup opakovat. Můžeme tak postupně získat body <span style="background-color:#ccffff;">(</span><span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">2</span><span style="background-color:#ccffff;">, </span><span style="background-color:#ccffff;">''Y''</span><span style="background-color:#ccffff;">2</span><span style="background-color:#ccffff;">)</span> , <span style="background-color:#ccffff;">(</span><span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">3</span><span style="background-color:#ccffff;">, </span><span style="background-color:#ccffff;">''Y''</span><span style="background-color:#ccffff;">3</span><span style="background-color:#ccffff;">)</span> atd. až do konce intervalu <span style="background-color:#ccffff;">''t''</span> na němž hledáme řešení. Výsledkem numerického řešení diferenciální rovnice není tedy vzorec jako u řešení analytického, ale tabulka bodů |
− | | | + | (''ti'', ''Yi'') , ''i'' = 0, 1, 2,... |
+ | |- style="border:none;padding:0.049cm;" | ||
+ | | align=center style="color:#800000;" | ''Obr.2.2 Princip Eulerovy metody'' | ||
|- | |- | ||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="margin-left:0cm;margin-right:0cm;"><span style="color:#000000;">Postup řešení (kreslení tohoto obrázku) je možné si prohlédnout </span>[https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-Eugr0.htm zde]<span style="color:#000000;">.</span></div> | ||
− | + | <div style="color:#000000;">Na stejném principu je založeno řešení soustavy ODR 1.řádu s počátečními podmínkami. Soustava obecně k diferenciálních rovnic má k závisle proměnných a jednu společnou nezávisle proměnnou. Rovnici (2.15) si můžeme představit zapsanou vektorově</div> | |
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
− | + | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | |
− | + | || | |
− | + | || [[Image:Obrázek4.png|top]] | |
− | + | || [[Image:Obrázek5.png|top]] | |
− | + | | align=right| (2.18) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">kde je <span style="background-color:#ccffff;"><u>''y''</u></span> vektor závisle proměnných, <span style="background-color:#ccffff;"><u>''y'''</u></span> vektor derivací závisle proměnných avektor funkcí (pravých stran po osamostatnění derivací). Stejně tak můžeme vektorově zapsat Eulerovu formuli</div> | ||
− | |||
− | |||
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
− | + | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | |
− | + | || | |
− | + | || [[Image:Obrázek6.png|top]] | |
− | {| | + | || |
+ | | align=right| (2.19) | ||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">takže vlastně dostaneme samostatný Eulerův vzorec pro každou závisle proměnnou a v každém kroku řešení vypočteme pro danou hodnotu nezávisle proměnné <span style="background-color:#ccffff;">''t''</span> hodnoty všech závisle proměnných podle těchto vzorců. Výsledkem je tabulka vyjadřující závislosti proměnných <span style="background-color:#ccffff;">''Y</span><span style="background-color:#ccffff;">i''</span><span style="background-color:#ccffff;"> , </span><span style="background-color:#ccffff;">''i''</span><span style="background-color:#ccffff;"><nowiki>=1, 2,..., </nowiki></span><span style="background-color:#ccffff;">''k''</span> na <span style="background-color:#ccffff;">''t''</span>.</div> | ||
− | < | + | <div style="color:#0000ff;margin-left:0cm;margin-right:0cm;">'''2.2.2 Přesnost numerického řešení'''</div> |
− | <span style=" | + | <div style="color:#000000;">Numerické řešení diferenciální rovnice závisí nejen na nezávisle proměnné <span style="background-color:#ccffff;">''t''</span> , ale i na velikosti kroku <span style="background-color:#ccffff;">''h''</span> . Aby přibližné řešení <span style="background-color:#ccffff;">''Y''</span> odpovídalo analytickému (přesnému) řešení <span style="background-color:#ccffff;">''y''</span> , musí platit podmínka konvergence</div> |
− | < | + | <div style="color:#000000;">[[Image:Obrázek7.png|top]]</div> |
− | < | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">tedy přesnost numerického řešení je tím větší, čím menší je krok <span style="background-color:#ccffff;">''h''</span> . U krokových metod vyjadřujeme přesnost resp. chybu metody pomocí mocniny <span style="background-color:#ccffff;">''h''</span> a hovoříme o metodě příslušného řádu. V případě Eulerovy metody je to přesnost 1.řádu <span style="background-color:#ccffff;">''h</span>. ''Tento údaj nám slouží pouze k hrubému odhadu chyby, tedy např. je-li <span style="background-color:#ccffff;">''h = ''</span><span style="background-color:#ccffff;">0.1</span> , dá se očekávat, že přesné bude první desetinné místo výsledku.</div> |
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
− | + | |- | |
+ | | style="border:none;padding:0.049cm;" | [[Image:Obrázek8.png|left|top]] | ||
+ | | style="border:none;padding:0.049cm;" | O odhad se jedná především proto, že chyba závisí nejen na velikosti kroku, ale i na tvaru funkce v okolí právě počítaného bodu. Z toho logicky vyplývá, že chyba numerického řešení se může v jeho jednotlivých částech (pro různá <span style="background-color:#ccffff;">''t''</span>) lišit. Na obr. 2.2 jsou chyby numerického řešení v bodech <span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">1</span><span style="background-color:#ccffff;"> </span>a <span style="background-color:#ccffff;">''t''</span><span style="background-color:#ccffff;">2</span><span style="background-color:#ccffff;"> </span>označeny jako <span style="background-color:#ccffff;">D</span><span style="background-color:#ccffff;">1</span><span style="background-color:#ccffff;"> </span>a <span style="background-color:#ccffff;">D</span><span style="background-color:#ccffff;">2</span>. Tato chyba je chyba metody a protože souvisí s diskretizací nezávisle proměnné, říká se jí <u>chyba diskretizační</u>. Při numerickém řešení se však do výpočtů vnáší ještě další chyba související se skutečností, že výpočetní prostředek (počítač) pracuje pouze na omezený počet platných míst. Tato chyba souvisí také s velikostí kroku <span style="background-color:#ccffff;">''h''</span>, protože v rovnici (2.17) může docházet při násobení hodnoty funkce <span style="background-color:#ccffff;">''g''</span> krokem <span style="background-color:#ccffff;">''h''</span> ke značným řádovým posunům. Je to <u>chyba zaokrouhlovací</u> a její velikost je tím větší, čím menší je krok <span style="background-color:#ccffff;">''h''</span>. Celková chyba je pak součtem obou, jak je znázorněno na obr. 2.3. | ||
+ | |- style="border:none;padding:0.049cm;" | ||
+ | | align=center style="color:#800000;" | ''Obr.2.3 Chyba Eulerovy metody'' | ||
+ | |- | ||
+ | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Diskretizační chyba u Eulerovy metody závisí na kroku lineárně, ale obecně tomu tak není. Zmíněné dvě chyby působí proti sobě. Abychom zjistili '''skutečnou chybu numerického řešení konkrétní rovnice''' (a to v praxi obvykle potřebujeme), musíme postupovat empiricky následujícím způsobem:</div># <div style="color:#000000;margin-left:0.635cm;margin-right:0cm;">podle požadované přesnosti a řádu přesnosti zvolené metody numerického řešení ODR odhadneme potřebnou velikost kroku <span style="background-color:#ccffff;">''h''</span>,</div> | ||
+ | # <div style="color:#000000;margin-left:0.635cm;margin-right:0cm;">nalezneme řešení s tímto zvoleným krokem,</div> | ||
+ | # <div style="color:#000000;margin-left:0.635cm;margin-right:0cm;">krok zmenšíme, např. na polovinu,</div> | ||
+ | # <div style="color:#000000;margin-left:0.635cm;margin-right:0cm;">nalezneme řešení se zmenšeným krokem,</div> | ||
+ | # <div style="color:#000000;margin-left:0.635cm;margin-right:0cm;">hodnoty závisle proměnné z obou řešení ve stejných bodech nezávisle proměnné porovnáme a předpokládáme, že správné jsou ty dekadické řády výsledků, které se u obou řešení neliší,</div> | ||
+ | # <div style="color:#000000;margin-left:0.635cm;margin-right:0cm;">pokud nejsme se získanou přesností spokojeni, krok dále zmenšíme a porovnáváme vždy výsledky dvou posledních kroků; to děláme tak dlouho, až nám přesnost vyhovuje.</div> | ||
− | |||
− | |||
− | |||
− | < | + | <div style="margin-left:0cm;margin-right:0cm;"><span style="color:#000000;">V praxi se používají metody s vyšší přesností, které pracují na podobném principu jako metoda Eulerova, ale mají poněkud složitější vzorce. K nejznámějším patří </span><span style="color:#000000;">metody Runge-Kutta, a to 2.řádu a 4.řádu. Zájemci najdou jejich popis v každé příručce numerické matematiky, vzorce uvádíme </span>[https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim-RK.htm zde]<span style="color:#000000;">.</span></div> |
− | + | <div style="color:#0000ff;margin-left:0cm;margin-right:0cm;">'''2.2.3 Stabilita numerického řešení'''</div> | |
− | |||
− | |||
− | + | <div style="color:#000000;">Vedle problémů s chybou numerického řešení diferenciálních rovnic mohou ještě vyvstat problémy s jeho stabilitou. Je-li numerické řešení stabilní, tak se výše popsané chyby vnášené do výpočtu v každém kroku vhodně utlumují a nerostou. Naopak, při nestabilitě se tyto chyby kumulují a mohou narůst tak, že výsledky jsou zcela nepoužitelné. Na stabilitu řešení má opět vliv velikost kroku <span style="background-color:#ccffff;">''h''</span>, a to tak, že s rostoucím krokem se pravděpodobnost nestability zvyšuje. Pro každou diferenciální rovnici existuje krok při kterém nestabilita začíná - hovoříme o mezním kroku stability řešení. Problém nestability je ilustrován na obr. 2.4., kde jsou tabulka a graf numerického řešení rovnice </div> | |
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
− | + | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | |
− | {| | + | || |
+ | || [[Image:Obrázek9.png|top]] | ||
+ | || [[Image:Obrázek10.png|top]] | ||
+ | | align=right| (2.20) | ||
|- | |- | ||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">získané Eulerovou metodou s různým krokem. Při kroku 0.2 je řešení stabilní a blíží se řešení analytickému, při kroku 0.5 je sice řešení ještě stabilní, ale informace o průběhu funkce je velmi hrubá a při kroku 1.0 je řešení nestabilní, kmitá a výsledky jsou zcela nesmyslné - z tvaru analytického řešení jednoznačně vyplývá, že výsledky musí být z intervalu (0;1ñ .</div> | ||
− | |||
− | ''' | + | {| style="border-spacing:0;width:17cm;" |
+ | |- | ||
+ | || | ||
+ | {| align="center" style="border-spacing:0;width:6.285cm;" | ||
+ | |- | ||
+ | | align=center style="border-top:1.5pt solid #000000;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0.049cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | '''''t''''' '''i ''' | ||
+ | | align=center style="border-top:1.5pt solid #000000;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0.049cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;color:#0000ff;" | '''''Y''''' '''i ''' | ||
+ | | align=center style="border-top:0.5pt solid #000000;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;color:#008000;" | '''''Y''''' '''i''' | ||
+ | | align=center style="border-top:0.5pt solid #000000;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;color:#ff00ff;" | '''''Y''''' '''i ''' | ||
+ | | align=center style="border-top:0.5pt solid #000000;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;color:#ff0000;" | '''''y''''' '''anal''' | ||
+ | | style="border:none;padding:0cm;" | | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:1.5pt solid #000000;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0.123cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:1.5pt solid #000000;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;color:#0000ff;" | (''h''<nowiki>=0.2)</nowiki> | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;color:#008000;" | (''h''<nowiki>=0.5)</nowiki> | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;color:#ff00ff;" | (''h''<nowiki>=1.0)</nowiki> | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 0 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 1 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 1 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 1 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 1 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 0.2 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 1.000 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.961 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 0.4 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.920 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.852 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 1.5 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 1.000 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.779 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 0.6 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.773 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.698 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 0.8 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.587 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.527 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 1.0 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.399 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.500 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 1.000 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.368 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 1.2 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.240 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.237 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 1.4 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.125 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.141 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 1.5 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.000 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.105 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 1.6 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.055 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.077 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 1.8 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.020 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.039 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | 2.0 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.006 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.000 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | -1.000 | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | 0.018 | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0.123cm;padding-right:0.123cm;" | ''': ''' | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | ''':''' | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | ''': ''' | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | ''': ''' | ||
+ | | align=center style="border-top:none;border-bottom:none;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0cm;padding-left:0cm;padding-right:0.123cm;" | ''': ''' | ||
+ | | style="border-top:none;border-bottom:0.05pt solid #808080;border-left:0.05pt solid #808080;border-right:0.75pt solid #808080;padding:0.049cm;" | | ||
+ | |- | ||
+ | | align=center style="border-top:none;border-bottom:1.5pt solid #000000;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0.123cm;padding-right:0.123cm;" | 3.0 | ||
+ | | align=center style="border-top:none;border-bottom:1.5pt solid #000000;border-left:none;border-right:0.75pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 0.000 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 0.000 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 3.000 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 0.000 | ||
+ | | style="border-top:none;border-bottom:0.75pt solid #808080;border-left:0.05pt solid #808080;border-right:0.75pt solid #808080;padding:0.049cm;" | | ||
+ | |- | ||
+ | |} | ||
− | + | | align=center| [[Image:Obrázek11.png|top]] | |
− | + | |- | |
− | + | | colspan="2" align=center style="color:#800000;" | ''Obr. 2.4. Ukázka k problému stability numerického řešení ODR '' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Pokud je řešení nestabilní, pomůže ve většině případů zmenšení kroku.</div> | ||
− | < | + | <div style="color:#000000;">Z toho, co bylo řečeno o chybách a stabilitě, vyplývá, že nemůžeme numerické řešení matematických modelů provádět mechanicky, ale musíme nad ním přemýšlet a vypracovat si vždy způsob jak výsledky kontrolovat. Protože lze předpokládat, že budeme většinou řešit problémy z praxe, je nám velkou pomocí právě možnost kontroly výsledků srovnáním s realitou, s fyzikální podstatou veličin a s praktickými omezeními jejich hodnot.</div> |
− | |||
− | + | <div style="color:#000000;"> </div> | |
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
+ | |- | ||
+ | | align=center style="background-color:#66ff33;border:none;padding:0.049cm;" | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k22 na začátek kapitoly] | ||
+ | | style="border:none;padding:0.049cm;" | | ||
+ | | style="border:none;padding:0.049cm;" | | ||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;"> </div> | ||
− | < | + | <div style="color:#0000ff;margin-left:0cm;margin-right:0cm;">'''2.2.4 Stanovení hodnot parametrů modelu'''</div> |
− | < | + | <div style="color:#000000;">Při odvozování matematického modelu nebo i jen při vyjadřování některých dílčích závislostí veličin v modelu často používáme parametrů (konstant), jejichž hodnoty předem neznáme a musíme je nějakým způsobem stanovit. Hovoříme o tzv. <u>identifikaci modelu</u>. Problematika identifikace představuje dost rozsáhlou oblast, my se zde budeme zabývat pouze nejjednodušší metodikou, kterou bychom mohli běžně použít. V matematice se probírá postup aproximace empirických dat metodou nejmenších čtverců (prokládání přímky či jiné funkce naměřenými daty apod.). Tato metodika je sice obecně použitelná, ale nedá se využít tehdy, kdy je potřeba dosáhnout souhlasu výsledků řešení diferenciálních rovnic s nějakými empirickými daty. V tomto případě je vhodnější použít metod optimalizace.</div> |
− | + | <div style="color:#000000;">'''Optimalizace''' je matematický resp. početní postup, kterým hledáme extrém nějaké funkce. Této funkci říkáme účelová nebo <u>kriterium optimalizace</u> a její tvar musíme předem určit tak, abychom optimalizací dosáhli požadovaného cíle. Hodnotu kritéria optimalizace můžeme ovlivnit změnou zvolených parametrů matematického popisu optimalizační úlohy, kterým říkáme <u>optimalizační proměnné</u>. Extrém (buď maximum nebo minimum) hledáme na nějaké množině, z níž hodnoty optimalizačních proměnných vybíráme. Na této množině může být více extrémů, kterým říkáme <u>extrémy lokální</u> (jsou na podmnožinách dané množiny) a jeden <u>extrém globální</u>, který právě hledáme. Při většině metod numerické optimalizace musíme zadat nějakou počáteční hodnotu pro každou optimalizační proměnnou, tzv. <u>nástřel</u>. Lokální extrémy jsou nepříjemné tím, že v nich optimalizační postupy někdy „uvíznou“ a pak nemohou dosáhnout extrému globálního. Pomoci si můžeme tak, že zvolíme jiný nástřel, ale musíme být schopni (podle znalosti řešeného problému a charakteru výsledků) rozpoznat, zda je nalezený extrém lokální či globální, což nebývá vždy jednoduché a vyžaduje to určitou zkušenost. Pokud se týče optimalizačních proměnných, může být jejich výběr co do rozsahu hodnot neomezený, tj. z intervalu (-¥,+¥), pak mluvíme o hledání <u>volného extrému</u>, nebo omezený, např. pro každou optimalizační proměnnou máme určen uzavřený interval z něhož mohou být její hodnoty vybírány, a pak mluvíme o hledání <u>vázaného extrému</u>. Ve většině praktických optimalizačních úloh hledáme vázaný extrém, protože vždy existují nějaká technická nebo technologická omezení.</div> | |
− | |||
− | |||
− | |||
− | + | <div style="color:#000000;"> Základním problémem optimalizace je '''volba vhodného optimalizačního kritéria'''. V případech identifikace matematických modelů by mělo vyjadřovat shodu modelu se skutečností. Při identifikaci hledáme takové hodnoty parametrů modelu, aby odezva modelu na změnu vstupu byla co nejbližší odezvě reálného systému na stejnou změnu vstupu. Předpokládejme tedy, že jsme na vstup reálného systému přivedli definovaný (tj. se známým časovým průběhem) signál <span style="background-color:#ccffff;">''u(t)''</span> a na výstupu jsme naměřili časově proměnný signál <span style="background-color:#ccffff;">''y</span><span style="background-color:#ccffff;">E</span><span style="background-color:#ccffff;">(t)''</span>. Stejný signál <span style="background-color:#ccffff;">''u(t)''</span> přivedeme na vstup modelu a zaznamenáme výstupní signál <span style="background-color:#ccffff;">''y</span><span style="background-color:#ccffff;">M</span><span style="background-color:#ccffff;">(t)''</span><span style="background-color:#ccffff;">.</span> Pokud má model odpovídat skutečnosti, neměly by se časové průběhy těchto signálů podstatně lišit. Optimalizační kritérium vytvoříme tak, aby kvantitativně vyjadřovalo míru shody obou průběhů. Prakticky vždy se používá osvědčené kritérium <u>součet čtverců odchylek</u>, které má pro případ porovnávání obou průběhů v <span style="background-color:#ccffff;">''n''</span> bodech tvar</div> | |
− | |||
+ | {| style="border-spacing:0;width:17cm;" | ||
+ | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | ||
+ | || | ||
+ | || [[Image:Obrázek12.png|top]] | ||
+ | || | ||
+ | | align=right| (2.21) | ||
+ | |- | ||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">nebo v případě hodnocení shody na spojitém intervalu <span style="background-color:#ccffff;"><</span><span style="background-color:#ccffff;">''a''</span><span style="background-color:#ccffff;">, </span><span style="background-color:#ccffff;">''b''</span><span style="background-color:#ccffff;">> </span> tvar</div> | ||
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
+ | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | ||
+ | || | ||
+ | || [[Image:Obrázek13.png|top]] | ||
+ | || | ||
+ | | align=right| (2.22) | ||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Tato kritéria nabývají při naprosté shodě obou průběhů hodnoty 0, jinak se nule blíží. Jestliže jich použijeme jako účelové funkce, pak optimalizací hledáme jejich minimum. Jestliže bychom potřebovali porovnávat průběh více výstupů současně, např. <span style="background-color:#ccffff;">''y(t)''</span> a <span style="background-color:#ccffff;">''z(t)''</span>, pak jednoduše použijeme účelové funkce ve tvaru (např. pro spojitý případ)</div> | ||
− | |||
− | |||
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
+ | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | ||
+ | || | ||
+ | || [[Image:Obrázek14.png|top]] | ||
+ | || | ||
+ | | align=right| (2.23) | ||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">nebo obecněji</div> | ||
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
− | + | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | |
− | {| | + | || |
+ | || [[Image:Obrázek15.png|top]] | ||
+ | || | ||
+ | | align=right| (2.24) | ||
|- | |- | ||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">kde <span style="background-color:#ccffff;">''v''</span><span style="background-color:#ccffff;">1</span><span style="background-color:#ccffff;"> </span>a <span style="background-color:#ccffff;">''v''</span><span style="background-color:#ccffff;">2</span> jsou váhy, pomocí kterých můžeme podle potřeby upravit vliv výsledku porovnání jednotlivých průběhů na hodnotu účelové funkce. Podle stejného principu postupujeme i v případě porovnávání tří a více průběhů.</div> | ||
− | + | <div style="color:#0000ff;margin-left:0cm;margin-right:0cm;">'''2.2.5 Simulační programovací jazyky'''</div> | |
− | < | + | <div style="color:#000000;">Pro řešení matematických modelů existuje celá řada simulačních programovacích jazyků, které umožňují efektivní práci bez hlubších znalostí programování počítačů. Jejich podstata je různá, např. existují jazyky rovnicově orientované (programují se zápisem rovnic modelu), blokově orientované (programují se propojováním funkčních bloků, které realizují základní operace, např. integraci, různé matematické funkce atd.), modulově orientované (obsahují moduly představující již hotové modely zařízení nebo procesů a ty se pak propojují pomocí signálů reprezentujících toky hmot a energií) apod. Mají obvykle zabudovány různé numerické metody pro řešení modelových rovnic, dobrou grafickou prezentaci výsledků simulace a možnost práce se vstupními i výstupními datovými soubory. Jsou velmi často oborově zaměřené.</div> |
− | < | + | <div style="color:#000000;">My pro naši potřebu budeme používat jednoduchý, poměrně univerzální, blokově orientovaný jazyk PSI, který je k dispozici na síti v učebnách VŠCHT. Je to blokově orientovaný jazyk a byl vyvinut na univerzitě v holandském Delftu. Jeho předností je to, že je speciálně zaměřen na řešení soustav obyčejných diferenciálních rovnic. Z hlediska uživatele je velice příznivé, že je v základě zvládnutelný zhruba během dvou hodin. Součástí této učebnice je i jeho volně šiřitelná demoverze, která umožňuje řešit úlohy malého rozsahu. Popis jazyka PSI a možností demoverze je v příloze této učebnice.</div> |
− | + | <div style="color:#000000;">Dalším simulačním nástrojem, který je k dispozici na síti VŠCHT, je rovněž blokově orientovaný SIMULINK, který je součástí programového balíku MATLAB. Jeho určitou nevýhodou je, že k jeho používání je nutné nejprve zvládnout základy MATLABu, což vyžaduje poměrně dost času.</div> | |
− | |||
− | |||
− | + | <div style="color:#000000;"> </div> | |
− | |||
+ | {| style="border-spacing:0;width:17cm;" | ||
+ | |- | ||
+ | | align=center style="background-color:#66ff33;border:none;padding:0.049cm;" | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k22 na začátek kapitoly] | ||
+ | | style="border:none;padding:0.049cm;" | | ||
+ | | style="border:none;padding:0.049cm;" | | ||
+ | |- | ||
|} | |} | ||
+ | <div style="color:#000000;"> </div> | ||
− | < | + | <div style="color:#0000ff;margin-left:0cm;margin-right:0cm;">'''2.2.6 Příklady simulace'''</div> |
− | + | <div style="color:#800000;margin-left:0cm;margin-right:0cm;"><u>'''Příklad S-1'''</u></div> | |
− | |||
− | <u> | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;"><u>Úkol:</u></div> |
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Řešit diferenciální rovnici (2.20), tj.</div> | |
− | |||
− | + | {| align="center" style="border-spacing:0;width:17cm;" | |
+ | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | ||
+ | || | ||
+ | || [[Image:Obrázek16.png|top]] | ||
− | + | [[Image:Obrázek17.png|top]] | |
+ | | align=center| | ||
+ | || [[Image:Obrázek18.png|left|top]] | ||
|- | |- | ||
− | | | + | |} |
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Eulerovou metodou s krokem 0,2 pomocí jazyka PSI a simulací získaný výsledek porovnat s analytickým řešením (rovněž naprogramovaným v jazyku PSI) výpočtem chyby. Totéž řešení provést pomocí metody Runge-Kutta 2.řádu a výsledky porovnat.</div> | |
− | + | <div style="color:#000000;"> </div> | |
− | |||
− | |- | + | {| style="border-spacing:0;width:14.896cm;" |
− | | | + | |- style="border:none;padding:0.049cm;" |
− | | style=" | + | | style="color:#800000;" | Výpis programu: |
+ | || <span style="color:#008c00;">%</span><span style="color:#008c00;"> </span><span style="color:#008c00;">Příklad S-1 (řešení dif. rovnice)</span> | ||
− | + | <span style="color:#000000;">y = </span><span style="color:#0000ff;">INT</span><span style="color:#000000;">(-2*TIME*y </span><span style="color:#0000ff;">PAR</span><span style="color:#000000;">:1); </span><span style="color:#008c00;">% numerické řešení</span> | |
− | + | <span style="color:#000000;">yan = exp(-(TIME^2)); </span><span style="color:#008c00;"> % analytické řešení</span> | |
− | |||
− | |||
− | |||
− | + | <span style="color:#000000;">ch = y-yan; </span><span style="color:#008c00;">% chyba</span> | |
− | | | + | |
+ | |- style="border:none;padding:0.049cm;" | ||
+ | | colspan="2" | <div style="color:#800000;">Ukázka výsledků:</div> | ||
− | + | Eulerova metoda, krok 0.2, max.chyba 7.5 . 10-2 | |
− | |||
− | |||
− | | style=" | + | [[Image:Obrázek19.png|top]] |
+ | |- style="border:none;padding:0.049cm;" | ||
+ | | colspan="2" | Metoda Runge-Kutta 2.řádu, krok 0.2, max.chyba -5 . 10-3 | ||
− | | | + | [[Image:Obrázek20.png|top]] |
+ | |- style="border:none;padding:0.049cm;" | ||
+ | | style="color:#800000;" | Program v PSI: | ||
+ | || soubory: <span style="color:#cc0099;">Prikl_S-1.PSM , Prikl_S-1.MOD</span> | ||
+ | |- | ||
|} | |} | ||
+ | <div style="color:#000000;"> </div> | ||
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
+ | |- | ||
+ | | align=center style="background-color:#66ff33;border:none;padding:0.049cm;" | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k22 na začátek kapitoly] | ||
+ | | style="border:none;padding:0.049cm;" | | ||
+ | | style="border:none;padding:0.049cm;" | | ||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;"> </div> | ||
− | + | <div style="color:#800000;margin-left:0cm;margin-right:0cm;"><u>'''Příklad S-2'''</u></div> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;"><u>Úkol:</u></div> | |
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Simulovat reakci výstupní teploty elektrického ohřívače vody (viz <span style="color:#800000;">příklad M-1</span>) na skokovou změnu teploty vstupující vody. Matematický model ohřívače je</div> | |
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
+ | |- style="background-color:#ccffff;border:none;padding:0.049cm;" | ||
+ | || | ||
+ | || [[Image:Obrázek21.png|left|top]] | ||
+ | || [[Image:Obrázek22.png|top]] | ||
+ | || | ||
|- | |- | ||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Hodnota teploty ''T''0 odpovídá ustálenému stavu.</div> | ||
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Doba simulace je 60 minut, skok vstupní teploty je proveden v 5.minutě. Číselné hodnoty parametrů a jejich rozměry jsou patrné z výpisu programu. K numerickému řešení je použito metody Runge-Kutta 2.řádu, krok výpočtu je 0,001.</div> | |
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
− | | | + | |- style="border:none;padding:0.049cm;" |
− | | | + | | style="color:#800000;" | Výpis programu: |
+ | || <div style="color:#008c00;">% Příklad S-1 (simulace reakce T2 na skokovou změnu T1)</div> | ||
− | + | T2 = <span style="color:#0000ff;">INT</span>(Q*(T1-T2)/V+P*eta/(<span style="color:#000000;">V*rocp</span>) <span style="color:#0000ff;">PAR</span>:<span style="color:#000000;">T0</span>); <span style="color:#008c00;">% teplota vody na výstupu (°C)</span> | |
− | + | V = 5; <span style="color:#008c00;">% objem ohřívače (l)</span> | |
− | + | Q = 0.5; <span style="color:#008c00;">% průtok vody (l/min)</span> | |
− | < | + | <span style="color:#000000;">T0</span> = <span style="color:#000000;">37.91</span><nowiki>; </nowiki><span style="color:#008c00;">% výst.teplota v ust.stavu (°C)</span> |
− | + | <span style="color:#000000;">rocp</span><nowiki>= </nowiki><span style="color:#000000;">1*4187</span><nowiki>; </nowiki><span style="color:#008c00;">% součin hustoty a měr.tepla vody (J/l/K)</span> | |
− | |||
− | |||
− | < | + | T1 = <span style="color:#0000ff;">BNG</span>(time <span style="color:#0000ff;">PAR</span>:<span style="color:#000000;">15</span>,<span style="color:#000000;">18,5)</span><nowiki>; </nowiki><span style="color:#008c00;">% skok teploty na vstupu (°C)</span> |
− | + | P = <span style="color:#000000;">60000</span><nowiki>; </nowiki><span style="color:#008c00;">% příkon topení (J/min)</span> | |
− | < | + | eta = 0.8; <span style="color:#008c00;">% účinnost topení (1)</span> |
− | + | | |
+ | |- style="border:none;padding:0.049cm;" | ||
+ | | colspan="2" | <div style="color:#800000;">Ukázka výsledků:</div> | ||
− | + | [[Image:Obrázek23.png|left|top]] | |
|- | |- | ||
− | | | + | |} |
− | |||
− | |||
− | |||
− | |||
− | |||
+ | {| style="border-spacing:0;width:25.982cm;" | ||
+ | |- style="border:none;padding:0.049cm;" | ||
+ | | style="color:#800000;" | Program v PSI: | ||
+ | || soubory: <span style="color:#cc0099;">Prikl_S-2.PSM , Prikl_S-2.MOD</span> | ||
|- | |- | ||
− | | | + | |} |
− | + | <div style="color:#000000;">Z výsledku je vidět, že po změně vstupu se teplota výstupu ustaluje na nové hodnotě - v čase 59.04 minut je to 40.9092 °C (viz graf).</div> | |
− | + | <div style="color:#000000;"> </div> | |
− | |||
− | |||
+ | {| style="border-spacing:0;width:3.771cm;" | ||
|- | |- | ||
− | | | + | | align=center style="background-color:#66ff33;border:none;padding:0.049cm;" | [https://uprt.vscht.cz/ucebnice/mrt/F2/F2k22-sim.htm#k22 na začátek kapitoly] |
− | | style=" | + | | style="border:none;padding:0.049cm;" | |
− | + | | style="border:none;padding:0.049cm;" | | |
− | | style=" | ||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | |} |
− | + | <div style="color:#000000;"> </div> | |
− | + | <div style="color:#800000;margin-left:0cm;margin-right:0cm;"><u>'''Příklad S-3'''</u></div> | |
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;"><u>Úkol:</u></div> | |
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Provést identifikaci modelu elektrického ohřívače vody (viz <span style="color:#800000;">příklad M-1</span>) za předpokladu, že není známa hodnota účinnosti topení <span style="background-color:#ccffff;">h</span>. Pro identifikaci byl proveden experiment, kdy byl po zapnutí topení naměřen následující časový průběh teploty :</div> | |
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
|- | |- | ||
− | | | + | | style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0.123cm;padding-right:0cm;" | čas (min) |
− | | style=" | + | | align=center style="border-top:1.5pt solid #000000;border-bottom:0.75pt solid #000000;border-left:1.5pt solid #000000;border-right:0.75pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0.123cm;padding-right:0.123cm;" | 0 |
− | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 5 | |
− | | style=" | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 10 |
− | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 15 | |
− | | | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 20 |
− | | | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 25 |
− | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 30 | |
− | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 35 | |
− | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 40 | |
− | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 45 | |
− | + | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 50 | |
+ | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 55 | ||
+ | | align=center style="border-top:0.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0.049cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 60 | ||
+ | |- | ||
+ | | style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0cm;padding-bottom:0.049cm;padding-left:0.123cm;padding-right:0cm;" | teplota (°C) | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0.123cm;padding-right:0.123cm;" | 15 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 26 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 31 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 34 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 37 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 39 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 40 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 40 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 40 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 40 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 41 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 41 | ||
+ | | align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:none;border-right:0.5pt solid #000000;padding-top:0cm;padding-bottom:0.049cm;padding-left:0cm;padding-right:0.123cm;" | 41 | ||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Simulační model ohřívače je popsán v <span style="color:#800000;">příkladu S-2</span>, program je ještě třeba doplnit o příkaz umožňující zpracovávat experimentální data a příkaz pro výpočet optimalizačního kritéria. Protože model dává výsledky prakticky spojité, použijeme kritéria podle rovnice (2.22), kde meze integrálu budou 0 a 60 min, místo <span style="background-color:#ccffff;">''y</span><span style="background-color:#ccffff;">M''</span> bude teplota <span style="background-color:#ccffff;">''T2</span><span style="background-color:#ccffff;">M''</span> vypočtená podle modelu a místo <span style="background-color:#ccffff;">''y</span><span style="background-color:#ccffff;">E''</span> naměřená teplota <span style="background-color:#ccffff;">''T2</span><span style="background-color:#ccffff;">E''</span>. Výsledky experimentu musí být v tom případě k dispozici rovněž jako spojité, což zajistí příkaz FNG lineární interpolací v zadané tabulce. Odhadnutá hodnota (nástřel) účinnosti bude např. 0.8. Pro určení její skutečné hodnoty použijeme optimalizační metody, která je součástí jazyka PSI. Výsledný program je následující:</div> | ||
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
− | | | + | |- style="border:none;padding:0.049cm;" |
− | + | | style="color:#800000;" | Výpis programu: | |
− | | style=" | + | || <div style="color:#008c00;">% Příklad S-3 (identifikace modelu ohřívače)</div> |
− | + | <div style="color:#008c00;">% výst.teplota - model(°C)</div> | |
− | + | <span style="color:#000000;">T2M</span> = <span style="color:#0000ff;">INT</span>(Q*(<span style="color:#000000;">T1-T2M</span>)/V+P*eta/(V*rocp) <span style="color:#0000ff;">PAR</span>:<span style="color:#000000;">T1</span>); | |
− | + | V = 5; <span style="color:#008c00;">% objem ohřívače (l)</span> | |
− | + | Q = 0.5; <span style="color:#008c00;">% průtok vody (l/min)</span> | |
− | + | <span style="color:#000000;">rocp</span><nowiki>= 1*4187; </nowiki><span style="color:#008c00;">% součin hust. a měr.tepla vody (J/l/K)</span> | |
− | |||
− | |||
− | |||
− | + | T1 = <span style="color:#000000;">15</span><nowiki>; </nowiki><span style="color:#008c00;">% teplota vody na vstupu (°C)</span> | |
− | + | P = 60000; <span style="color:#008c00;">% příkon topení (J/min)</span> | |
− | + | eta = <span style="color:#0000ff;">PAR</span>(<span style="color:#000000;">0.8</span>); <span style="color:#008c00;">% účinnost (optimalizační proměnná)</span> | |
− | + | <span style="color:#000000;">T2E</span> = <span style="color:#0000ff;">FNG</span>(time <span style="color:#0000ff;">PAR</span>:0,60,1,T2mer); <span style="color:#008c00;">% výst. teplota - experiment (°C)</span> | |
− | + | krit= <span style="color:#0000ff;">INT</span>((<span style="color:#000000;">T2M-T2E</span>)^2 <span style="color:#0000ff;">PAR</span>:0); <span style="color:#008c00;">% kritérium optimalizace</span> | |
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#800000;margin-left:0cm;margin-right:0cm;">Nastavení parametrů optimalizace:</div> | ||
− | + | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">1. položka menu ''Optimization'' / ''Optimization Data''</div> | |
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
+ | |- | ||
+ | | align=right style="background-color:#c0c0c0;" | Criterion: | ||
+ | || krit | ||
+ | || (jméno bloku, kde se počítá hodnota kritéria) | ||
+ | |- | ||
+ | | align=right style="background-color:#c0c0c0;" | Initial Stepsize: | ||
+ | || 0.2 | ||
+ | || (počáteční krok změny optimalizační proměnné při vyhledávání) | ||
+ | |- | ||
+ | | align=right style="background-color:#c0c0c0;" | Stop Accuracy: | ||
+ | || 0.0001 | ||
+ | || (přesnost pro ukončení optimalizace) | ||
+ | |- | ||
+ | | align=right style="background-color:#c0c0c0;" | Maximum No of Iterations: | ||
+ | || 50 | ||
+ | || (maximální počet vyhledávacích kroků) | ||
+ | |- | ||
+ | | align=right style="background-color:#c0c0c0;" | Optimization Method: | ||
+ | || Pattern Search + PT | ||
+ | || (metoda vyhledávání s předčasným ukončením) | ||
|- | |- | ||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">2. položka menu ''Optimization'' / ''Variables to Optimize'' </div> | ||
− | |||
− | + | {| style="border-spacing:0;width:17cm;" | |
− | + | |- | |
− | {| | + | | align=right style="background-color:#c0c0c0;" | Variable: |
+ | || eta | ||
+ | || (jméno optimalizační proměnné - blok PAR nebo CON) | ||
|- | |- | ||
− | | | + | | align=right style="background-color:#c0c0c0;" | Value: |
− | + | || 0.8 | |
− | + | || (počáteční hodnota optimalizační proměnné - "nástřel") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | | align=right style="background-color:#c0c0c0;" | Min: |
− | + | || 0.5 | |
− | + | || (dolní mez optimalizační proměnné) | |
− | | | ||
− | |||
− | | | ||
− | |||
|- | |- | ||
− | | | + | | align=right style="background-color:#c0c0c0;" | Max: |
− | + | || 1.0 | |
− | + | || (horní mez optimalizační proměnné) | |
− | | | ||
− | |||
− | | | ||
|- | |- | ||
− | | | + | | align=right style="background-color:#c0c0c0;" | Gain: |
− | + | || 1 | |
− | + | || (násobná konstanta - sjednocení řádů při více optimalizačních proměnných) | |
− | | | ||
− | |||
− | | | ||
− | |||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Optimalizace se spouští položkou menu ''Optimization'' / ''Start Optimization'', průběh se vypisuje v textovém okně.</div> | ||
− | |||
− | {| | + | {| style="border-spacing:0;width:17cm;" |
− | |- | + | |- style="border:none;padding:0.049cm;" |
− | + | || <div style="color:#800000;">Výsledek simulace před optimalizací</div> | |
− | | style=" | ||
− | | style=" | + | [[Image:Obrázek24.png|top]] |
+ | |- style="border:none;padding:0.049cm;" | ||
+ | || <div style="color:#800000;">Výsledek simulace po optimalizaci</div> | ||
− | + | [[Image:Obrázek25.png|top]] | |
− | |||
− | | | ||
− | |||
− | |||
|- | |- | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
− | + | {| style="border-spacing:0;width:25.982cm;" | |
− | + | |- style="border:none;padding:0.049cm;" | |
− | + | | style="color:#800000;" | Program v PSI: | |
− | + | || soubory: <span style="color:#cc0099;">Prikl_S-3.PSM , Prikl_S-3.MOD</span> | |
− | {| | ||
|- | |- | ||
− | |||
− | |||
− | |||
|} | |} | ||
+ | <div style="color:#000000;margin-left:0cm;margin-right:0cm;">Hodnota kritéria se optimalizací změnila z 367.924 na 7.26312 , výsledná hodnota účinnosti je 0.89858, čili prakticky 0.9.</div> |
Aktuální verze z 29. 1. 2024, 20:13
Obsah kapitoly: | 2.2.1 Princip numerického řešení obyčejných diferenciálních rovnic
2.2.2 Přesnost numerického řešení 2.2.3 Stabilita numerického řešení 2.2.4 Stanovení hodnot parametrů modelu |
Soubor:Obrázek1.png | s počáteční podmínkou y(t0) = y0 | (2.15) |
ti+1 = ti + h | pro i = 0, 1, 2, ... | (2.16) |
Soubor:Obrázek2.png | pro i = 0, 1, 2, ... | (2.17) |
Pro názornost je užitečný grafický výklad principu Eulerovy metody, který je vidět na obr.2.2. Metoda vychází z náhrady průběhu analytického řešení na úseku mezi dvěma sousedními body ti , ti+1 přímkou. V počátečním bodě (t0, y0) jsme schopni vypočíst hodnotu pravé strany rovnice (2.13) g(t0, y0), tedy vlastně hodnotu derivace dy/dt (směrnice tečny). Vzorec (2.17) pak udává, že bod (t1, Y1) získáme jako průsečík tečny v počátečním bodě a pořadnice t1. Takto získaný bod (t1, Y1) můžeme nyní považovat za počáteční a postup opakovat. Můžeme tak postupně získat body (t2, Y2) , (t3, Y3) atd. až do konce intervalu t na němž hledáme řešení. Výsledkem numerického řešení diferenciální rovnice není tedy vzorec jako u řešení analytického, ale tabulka bodů
(ti, Yi) , i = 0, 1, 2,... | |
Obr.2.2 Princip Eulerovy metody |
Soubor:Obrázek4.png | Soubor:Obrázek5.png | (2.18) |
Soubor:Obrázek6.png | (2.19) |
O odhad se jedná především proto, že chyba závisí nejen na velikosti kroku, ale i na tvaru funkce v okolí právě počítaného bodu. Z toho logicky vyplývá, že chyba numerického řešení se může v jeho jednotlivých částech (pro různá t) lišit. Na obr. 2.2 jsou chyby numerického řešení v bodech t1 a t2 označeny jako D1 a D2. Tato chyba je chyba metody a protože souvisí s diskretizací nezávisle proměnné, říká se jí chyba diskretizační. Při numerickém řešení se však do výpočtů vnáší ještě další chyba související se skutečností, že výpočetní prostředek (počítač) pracuje pouze na omezený počet platných míst. Tato chyba souvisí také s velikostí kroku h, protože v rovnici (2.17) může docházet při násobení hodnoty funkce g krokem h ke značným řádovým posunům. Je to chyba zaokrouhlovací a její velikost je tím větší, čím menší je krok h. Celková chyba je pak součtem obou, jak je znázorněno na obr. 2.3. | |
Obr.2.3 Chyba Eulerovy metody |
#
- nalezneme řešení s tímto zvoleným krokem,
- krok zmenšíme, např. na polovinu,
- nalezneme řešení se zmenšeným krokem,
- hodnoty závisle proměnné z obou řešení ve stejných bodech nezávisle proměnné porovnáme a předpokládáme, že správné jsou ty dekadické řády výsledků, které se u obou řešení neliší,
- pokud nejsme se získanou přesností spokojeni, krok dále zmenšíme a porovnáváme vždy výsledky dvou posledních kroků; to děláme tak dlouho, až nám přesnost vyhovuje.
Soubor:Obrázek9.png | Soubor:Obrázek10.png | (2.20) |
|
Soubor:Obrázek11.png | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Obr. 2.4. Ukázka k problému stability numerického řešení ODR |
na začátek kapitoly |
Soubor:Obrázek12.png | (2.21) |
Soubor:Obrázek13.png | (2.22) |
Soubor:Obrázek14.png | (2.23) |
Soubor:Obrázek15.png | (2.24) |
na začátek kapitoly |
Soubor:Obrázek16.png |
Výpis programu: | % Příklad S-1 (řešení dif. rovnice)
y = INT(-2*TIME*y PAR:1); % numerické řešení yan = exp(-(TIME^2)); % analytické řešení ch = y-yan; % chyba
|
Ukázka výsledků:
Eulerova metoda, krok 0.2, max.chyba 7.5 . 10-2 | |
Metoda Runge-Kutta 2.řádu, krok 0.2, max.chyba -5 . 10-3 | |
Program v PSI: | soubory: Prikl_S-1.PSM , Prikl_S-1.MOD |
na začátek kapitoly |
Soubor:Obrázek22.png |
Výpis programu: | % Příklad S-1 (simulace reakce T2 na skokovou změnu T1)
T2 = INT(Q*(T1-T2)/V+P*eta/(V*rocp) PAR:T0); % teplota vody na výstupu (°C) V = 5; % objem ohřívače (l) Q = 0.5; % průtok vody (l/min) T0 = 37.91; % výst.teplota v ust.stavu (°C) rocp= 1*4187; % součin hustoty a měr.tepla vody (J/l/K) T1 = BNG(time PAR:15,18,5); % skok teploty na vstupu (°C) P = 60000; % příkon topení (J/min) eta = 0.8; % účinnost topení (1)
|
Ukázka výsledků:
|
Program v PSI: | soubory: Prikl_S-2.PSM , Prikl_S-2.MOD |
na začátek kapitoly |
čas (min) | 0 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 |
teplota (°C) | 15 | 26 | 31 | 34 | 37 | 39 | 40 | 40 | 40 | 40 | 41 | 41 | 41 |
Výpis programu: | % Příklad S-3 (identifikace modelu ohřívače)
% výst.teplota - model(°C)
T2M = INT(Q*(T1-T2M)/V+P*eta/(V*rocp) PAR:T1); V = 5; % objem ohřívače (l) Q = 0.5; % průtok vody (l/min) rocp= 1*4187; % součin hust. a měr.tepla vody (J/l/K) T1 = 15; % teplota vody na vstupu (°C) P = 60000; % příkon topení (J/min) eta = PAR(0.8); % účinnost (optimalizační proměnná) T2E = FNG(time PAR:0,60,1,T2mer); % výst. teplota - experiment (°C) krit= INT((T2M-T2E)^2 PAR:0); % kritérium optimalizace |
Criterion: | krit | (jméno bloku, kde se počítá hodnota kritéria) |
Initial Stepsize: | 0.2 | (počáteční krok změny optimalizační proměnné při vyhledávání) |
Stop Accuracy: | 0.0001 | (přesnost pro ukončení optimalizace) |
Maximum No of Iterations: | 50 | (maximální počet vyhledávacích kroků) |
Optimization Method: | Pattern Search + PT | (metoda vyhledávání s předčasným ukončením) |
Variable: | eta | (jméno optimalizační proměnné - blok PAR nebo CON) |
Value: | 0.8 | (počáteční hodnota optimalizační proměnné - "nástřel") |
Min: | 0.5 | (dolní mez optimalizační proměnné) |
Max: | 1.0 | (horní mez optimalizační proměnné) |
Gain: | 1 | (násobná konstanta - sjednocení řádů při více optimalizačních proměnných) |
Výsledek simulace před optimalizací
|
Výsledek simulace po optimalizaci
|
Program v PSI: | soubory: Prikl_S-3.PSM , Prikl_S-3.MOD |