Modelování a simulace - spojité modelování

Podobné dokumenty
Numerické řešení diferenciálních rovnic

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Obyčejné diferenciální rovnice počáteční úloha. KMA / NGM F. Ježek

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Modelování a simulace Lukáš Otte

PROGRAMOVÁNÍ V C++ CVIČENÍ

Obyčejné diferenciální rovnice (ODE)

1. Téma 03 - Rozhodování

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Operační systémy. Cvičení 4: Programování v C pod Unixem

7. ODE a SIMULINK. Nejprve velmi jednoduchý příklad s numerických řešením. Řešme rovnici

Obsah Obyčejné diferenciální rovnice

Parciální diferenciální rovnice

Algoritmizace a programování

Transformujte diferenciální výraz x f x + y f do polárních souřadnic r a ϕ, které jsou definovány vztahy x = r cos ϕ a y = r sin ϕ.

úloh pro ODR jednokrokové metody

KTE / ZPE Informační technologie

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Q(y) dy = P(x) dx + C.

Demonstrační cvičení IMS #1. Diskrétní modelování Petriho sítě a SIMLIB/C++

1 Modelování systémů 2. řádu

Množina čísel int stl-set-int.cpp

Jazyk C++, některá rozšíření oproti C

Software pro modelování chování systému tlakové kanalizační sítě Popis metodiky a ukázka aplikace

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

8.4. Shrnutí ke kapitolám 7 a 8

Dynamické datové struktury III.

dostat zdroják Petr Zemek Fakulta informačních technologií VUT v Brně izemek


12. Automatické vyhodnocení derivací. jaro 2012

C++ 0x aka C++11. Základním kamenem je třída std::thread

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

NPRG031 Programování II --- 2/2 Z, Zk

MATEMATIKA III. Olga Majlingová. Učební text pro prezenční studium. Předběžná verze

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

U Úvod do modelování a simulace systémů

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Úvod do programování - Java. Cvičení č.4

Chceme určit hodnoty parametrů závislosti p 1,.., p n a to

Odpružená sedačka. Petr Školník, Michal Menkina. TECHNICKÁ UNIVERZITA V LIBERCI Fakulta mechatroniky, informatiky a mezioborových studií

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

1 Funkce dvou a tří proměnných

Základy algoritmizace a programování

Abstraktní třídy, polymorfní struktury

DIPLOMOVÁ PRÁCE Nelineární řízení magnetického ložiska

Programování v Pythonu

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Vstupní a vstupní proudy v C++

Základy programování (IZP)

Cvi ení 3. Cvi ení 3. Modelování systém a proces. Mgr. Lucie Kárná, PhD. March 28, 2017

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Dynamické programování. Optimální binární vyhledávací strom

Úvod do programování. Lekce 5

Cvi ení 5 Simulink. Cvi ení 5 Simulink. Modelování systém a proces. Lucie Kárná. March 26, 2018

Programování v C++ 1, 14. cvičení

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

Digitální učební materiál

R zné algoritmy mají r znou složitost

Objektově orientované programování

Digitální učební materiál

X37SGS Signály a systémy

Zápis programu v jazyce C#

2 Datové typy v jazyce C


68. ročník Matematické olympiády 2018/2019

Numerické řešení diferenciálních rovnic

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Řešení diferenciálních rovnic v MATLABu

Analýza spolehlivosti tlakové nádoby metodou Monte Carlo

1 Rozdělení mechaniky a její náplň

Diskretizace. 29. dubna 2015

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Funkční objekty v C++.

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Digitální učební materiál

Algoritmizace a programování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Konstruktory překladačů

Základní datové struktury


Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Poslední nenulová číslice faktoriálu

Programování v C++ 3, 3. cvičení

diferenciální rovnice verze 1.1

ZPĚTNOVAZEBNÍ ŘÍZENÍ, POŽADAVKY NA REGULACI

Knihovny pro CUDA J. Sloup a I. Šimeček

PB071 Programování v jazyce C Jaro 2015

Budeme hledat řešení y(x) okrajové úlohy pro diferenciální rovnici druhého řádu v samoadjungovaném tvaru na intervalu a, b : 2 ) y i p i+ 1

Jazyk C++ I. Šablony 3

Řídicí struktury. alg3 1

Numerická matematika. Zadání 25. Řešení diferenciální rovnice Rungovou Kuttovou metodou

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007


Jazyk C++ II. Výjimky


A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Transkript:

Modelování a simulace - spojité modelování Slajdy pro předmět IMS Martin Hrubý hrubym @ fit.vutbr.cz Vysoké učení technické v Brně Fakulta informačních technologií, Božetěchova 2, 61266 Brno prosinec 2005 Modelování a simulace p. 1

Půlsemestrální písemka Modelování a simulace p. 2

Spojitá veličina hodnota se nemění skokem spojitá veličina v počítači Modelování a simulace p. 3

Spojitá simulace Formulace modelu: Diferenciální rovnice Schéma s integrátory (blokové) Spojité simulační jazyky SIMLIB Pojmy: Bloky, Integrátory Simulační krok, integrační krok Modelový čas Modelování a simulace p. 4

Úvodní příklad Metoda sniživání řádu derivace. Nesmí být derivace vstupů. Počáteční podmínky. y + y 3 = 0 y = 3 y y = 3 y y = 3 y Modelování a simulace p. 5

Simulační model #include "simlib.h" class Ex1 { public: Ex1() : y1(3-y), y(y1) {}; Integrator y1, y; } EX; void sample() { Print("%g %g\n", Time, EX.y.Value()); } Sampler MS(sample, 0.001); int main() { SetOutput("ex1.dta"); Init(0, 100); Run(); } Modelování a simulace p. 6

Sampler - implementace class MujSampler : public Process { void Behavior() { while (1) { sample(); Wait(0.001); } } }; class MujSampler2 : public Event { void Behavior() { sample(); Activate(Time + 0.001); } }; Modelování a simulace p. 7

Skript pro gnuplot set term postscript (nebo png) set output "ex1.eps" set title "Prvni ukazka" set grid set xlabel "cas [s]" set ylabel "y [m]" set key left plot "ex1.dta" Modelování a simulace p. 8

Graf 6 "ex1.dta" Prvni ukazka 5 4 y [m] 3 2 1 0 0 20 40 60 80 100 cas [s] Modelování a simulace p. 9

Graf - počáteční podmínky y1(100) 150 "ex1.dta" Prvni ukazka 100 50 y [m] 0-50 -100 0 20 40 60 80 100 cas [s] Modelování a simulace p. 10

Snižování řádu derivace y (5) + y 8y + y + 10 = 0 y (5) = y + 8y y 10 y (4) = ( y + 8y y 10)dt y (3) = ( y + 8y y 10)dt Modelování a simulace p. 11

Snižování řádu derivace class Mujsys { // cislo je pocet derivaci na vystupu integratoru Integrator y4,y3,y2,y1,y; Mujsys() : y4(-y3+8*y1-y-1), y3(y4), y2(y3), y1(y2), y(y1) {}; }; Modelování a simulace p. 12

Metoda postupné integrace vhodná pro rovnice s derivacemi vstupů na pravé straně 1. osamostatnit nejvyšší řád derivace 2. postupná integrace rovnice a zavádění nových stavových proměnných 3. výpočet nových počátečních podmínek Příklad: rovnice y + 2y + y = x + 3x + 2x p 2 y + 2py + y = p 2 x + 3px + 2x p 2 y = p 2 x + p(3x 2y) + (2x y) py = px + (3x 2y) + 1 p (2x y), proměnná w 1 = 1 p (2x y) y = x + 1 p (3x 2y + w 1), proměnná w 2 = 1 p (3x 2y + w 1) Modelování a simulace p. 13

Metoda postupné integrace - příklad výsledná soustava: w 1 = 1 p (2x y) w 2 = 1 p (3x 2y + w 1) y = x + w 2 Modelování a simulace p. 14

Eulerova metoda princip y(t + h) = y(t) + hf(t, y(t)) Modelování a simulace p. 15

Eulerova metoda implementace double yin[2], y[2] = { 1.0, 0.0 }; double time = 0, h = 0.001; void update() { // výpočet vstupů integrátorů yin[0] = y[1]; // y yin[1] = -y[0]; // y } void integrate_euler() { // krok integrace update(); for (int i = 0; i < 2; i++) y[i] += h * yin[i]; time += h; } int main() { while (time < 20) { printf("%10f %10f\n", time, y[0]); integrate_euler(); } return 0; } Modelování a simulace p. 16

Řízení spojité simulace public SpojitaSimulace : public Process { } void Behavior() { while (1) { spocti_vstupy_integratoru(); udelej_integracni_krok(); Wait(STEP); } } Modelování a simulace p. 17

Vícekrokové metody Adams-Bashforth: y n+1 = y n + h 24 (55f n 59f n 1 + 37f n 2 9f n 3 ) Metody typu prediktor/korektor zpřesňují výsledek Adams-Bashforth-Moulton: y n+1 = y n + h 24 (9f n+1 + 19f n 5f n 1 + f n 2 ) Poznámka: metody. Problém startu metody použití jednokrokové Modelování a simulace p. 18

Van der Pol oscilator Ukázka nelineárního systému. x + x = a(1 x 2 )x a je parametr x = a(1 x 2 )x x Modelování a simulace p. 19

Sim. model const double px1 = 0.1; const double px = 2; class Vd { public: Vd() : a(1), x1(a*(1-x*x)*x1 - x, px1), x(x1,px){}; Integrator x,x1; Parameter a; } Vd; void sample() { Print("%g %g %g\n", Time, Vd.x1.Value(), Vd.x.Value() } Modelování a simulace p. 20

Sim. model Sampler MS(sample, 0.1); int main(int argc, char *argv[]) { Vd.a = atof(argv[1]); SetStep(0.001, 0.1); SetOutput("vd.dta"); Init(0, 30); Run(); } Modelování a simulace p. 21

Výsledky 6 Van der Pol oscilator "vd.dta" using 1:2 "vd.dta" using 1:3 4 2 y [m] 0-2 -4-6 0 5 10 15 20 25 30 cas [s] Modelování a simulace p. 22

Výsledky 2.5 2 Van der Pol oscilator; a=0 "vd.dta" using 1:2 "vd.dta" using 1:3 1.5 1 0.5 y [m] 0-0.5-1 -1.5-2 -2.5 0 5 10 15 20 25 30 cas [s] Modelování a simulace p. 23

Výsledky 15 Van der Pol oscilator; a=10 "vd.dta" using 1:2 "vd.dta" using 1:3 10 5 y [m] 0-5 -10-15 0 5 10 15 20 25 30 cas [s] Modelování a simulace p. 24

Výsledky 2 Van der Pol oscilator; a=0.1, px1=0.05, px=0 "vd.dta" using 1:2 "vd.dta" using 1:3 1.5 1 0.5 y [m] 0-0.5-1 -1.5-2 0 10 20 30 40 50 60 70 80 90 100 cas [s] Modelování a simulace p. 25

Modely obvodů u L = Li u C = 1 C i dt (projekt MSI, Josef Lukaštík) Modelování a simulace p. 26

Rovnice obvodu Smyčka 1: L 1 i 1 + 1 C 1 (i1 i 2 )dt U = 0 x = 1 C 1 (i1 i 2 )dt x = 1 C 1 (i 1 i 2 ) L 1 i 1 + x = U i 1 = U x L 1 Smyčka 2: L 2 i 2 + 1 C 1 (i2 i 1 )dt + R 1 (i 2 i 3 ) = 0 L 2 i 2 x + R 1(i 2 i 3 ) = 0 i 2 = x R 1(i 2 i 3 ) L 2 Smyčka 3: L 3 i 3 + 1 C 2 (i3 i 4 )dt + R 1 (i 3 i 2 ) = 0 y = 1 C 2 (i3 i 4 )dt y = 1 C 2 (i 3 i 4 )dt L 3 i 3 + y + R 1(i 3 i 2 ) = 0 i 3 = y R 1(i 3 i 2 ) L 3 Modelování a simulace p. 27

..rovnice L 4 i 4 + 1 C 2 (i4 i 3 )dt + R 2 i 4 = 0 L 4 i 4 y + R 2i 4 = 0 i 4 = y R 2i 4 L 4 Modelování a simulace p. 28

Schema s integrátory Modelování a simulace p. 29

Obvod: SM #include "simlib.h" // hodnoty jednotlivych prvku double U=50; double C1=0.0009; double C2=0.001; double L1=1; double L2=0.8; double L3=0.5; double L4=0.5; double R1=1000; double R2=900; Modelování a simulace p. 30

Obvod: SM class Schema { Integrator X, Y, I1, I2, I3, I4; Schema(): X((I1-I2)/C1), Y((I3-I4)/C2), I1((U-X)/L1), I2((X-R1*(I2-I3))/L2), I3((-Y-R1*(I3-I2))/L3), I4((Y-R2*(I4))/L4){} double UC1() { return X.Value();} double UC2() { return Y.Value();} double II1() { return I1.Value();} double II2() { return I2.Value();} double II3() { return I3.Value();} double II4() { return I4.Value();} }; Modelování a simulace p. 31

Obvod: SM Schema o; void Sample() { // vzorkovací funkce Print("%-8g\t%g\t%g\t%g\t%g\n", T.Value(),o.II1(), o.ii // Print("%-8g\t%g\t%g\n", T.Value(),o.UC1(), o.uc2()); } Sampler S(Sample,0.001); // vzorkovací objekt int main() { SetOutput("vystup.dat"); SetStep(0.00001,0.0001); Init(0,4); Run(); return 0; } // popis experimentu // krok // inicializace experimen // simulace Modelování a simulace p. 32

Výsledek Modelování a simulace p. 33

Kombinovaný systém Jednoho dne se Tarzan procházel po pralese, když tu najednou zaslechl volání o pomoc. Pochopil, že krásná Jane je asi v nesnázích, a tak se hned rozběhl směrem, odkud volání přicházelo. Dorazil až na okraj skály tyčící se nad divokou řekou. Protože ale Jane miloval, nemohla jej tato překážka zastavit. Nad řeku se skláněl starý strom, z něhož visely liány. Jednu z nich si dlouhým klackem přitáhl a chtěl se zhoupnout na druhý břeh. Jenže kousek od břehu bylo mnoho velmi ostrých kamenů... Kdy se má Tarzan liány pustit, aby se neutopil ani nepořezal o kameny? Tarzan stojí na skále ve výšce 4m nad hladinou řeky. Z větve stromu (4m nad ním) sklánějícího se nad řeku si přitáhne liánu, která je od něj vzdálená 3m. Druhý břeh je v úrovni hladiny. Řeka je široká 4m, 2m od ní leží oblast posetá ostrými kameny. (MSI projekt, Jan Zezulka) Modelování a simulace p. 34

Konceptuální model Modelování a simulace p. 35

Abstraktní modely Modelování a simulace p. 36

Abstraktní modely Modelování a simulace p. 37

Simulační modely class Kyvadlo{ Integrator alfa, dalfa; double x, y, last_x, last_y; //souradnice Kyvadlo(): dalfa((-g/delka)*sin(alfa)), alfa(dalfa, UHEL), x(0.0), y(vyska), last_x(0.0), last_y(vyska) {} }; Kyvadlo *k; Modelování a simulace p. 38

Simulační modely void Kyvadlo::Poloha() { if (alfa.value() < uhel_odhozu) { x =(sin(alfa.value()*pir) * DELKA) - (sin(uhel*pir) * y =DELKA * (1-cos(alfa.Value()*Pir)) + (VYSKA+DELKA*( vx = (x-last_x)/sample_step; vy = (y-last_y)/sample_step; last_x = x; last_y = y; //Print("%g ", alfa.value()); soux = x; souy = y; beta = alfa.value(); } else { //ukonceni kyvadla cas = T.Value(); beta = alfa.value(); Stop(); } Modelování a simulace p. 39 }

Simulační modely class Vrh:ConditionDown { public: Integrator dy, y, x; Vrh():ConditionDown(y), dy(-g, vy), y(dy, souy), x(vx, soux) {} void Action() { //Print("konec"); Stop();} }; Vrh *r; Modelování a simulace p. 40

Simulační modely void Sample(){ if (beta < uhel_odhozu) { k->poloha(); Print("%g %g %g\n", T.Value(), k->x, k->y); } else Print("%g %g %g\n", T.Value(), r->x.value(), r->y.val } Sampler S(Sample,SAMPLE_STEP); Modelování a simulace p. 41

Simulační modely int main() { SetOutput("msiproj.dat"); //presmerovani vystupu for(uhel_odhozu=-36.0; uhel_odhozu<=36.0; uhel_odhozu+= //simulujeme pro ruzne uhly opusteni lana Kyvadlo K; k=&k; Init(0, 30); //nastaveni casu SetStep(1e-3, 0.1); //nastaveni kroku Run(); //Print("tady"); Vrh R; r=&r; Init(cas, 60); //nastaveni casu (posunute o SetStep(1e-3, 0.1); Run(); Print("\n"); //nastaveni kroku } return 0; Modelování a simulace p. 42

Výsledky Modelování a simulace p. 43

Simulační modely Modelování a simulace p. 44