Jako příklad spojité simulace budeme uvažovat systém kola automobilu. Experiment bude sledovat odezvu kola na jednotkový skok. Rovnice, popisující tlumené kmitání kola:
kde
v je rychlost pohybu kola,
y je výchylka kola z klidové polohy,
F(t) je vstupní budicí funkce (např. jednotkový skok) a
k,D,M jsou konstantní parametry systému kola
Rovnici převedeme na soustavu diferenciálních rovnic prvního řádu
a potom můžeme přímo psát simulační program:
// model KOLO.CPP - Model tlumení kola automobilu v C++ #include "simlib.h" const double F = 1.0; class Kolo { Graph G; // výstup polohy kola Integrator v,y; // stav systému kola public: Kolo(Input F, double M, double D, double k): G("Výchylka",y,0.01), v((F-D*v-k*y)/M), y(v) {} }; Kolo k1(F, 2, 5.656, 400); int main() { // popis experimentu Print(" Model tlumení kola automobilu v C++ \n"); OpenOutputFile("kolo.out"); Init(0,1.5); // inicializace parametrů experimentu SetStep(1e-3,0.1); // krok integrace SetAccuracy(0.001); // max. povolená rel. chyba integrace Run(); // simulace Print(" Konec simulace \n"); return 0; }
Spojitý model popisujeme propojením funkčních bloků -- objektů modelu. Každý objekt je inicializován tak, že prvním parametrem jeho konstruktoru je jeho vstup. Na místě vstupu může být výraz, ve kterém lze použít objekty (jako proměnné) nebo číselné hodnoty (jako konstanty).
Výstup informací o chování modelu probíhá prostřednictvím objektu třídy Graph. Tato třída zabezpečuje rovnoměrné vzorkování vstupu objektu (v našem případě s periodou 0.01) a výstup do výstupního souboru, který lze prohlížet výstupním editorem.
Celý model je tvořen jedním objektem třídy Kolo
(globální objekt
k1
). Při vytváření objektu musíme zadat jeho vstup a parametry. Řízení
experimentu ve funkci main
zajišťuje otevření výstupního souboru,
inicializaci pro modelový čas od nuly do 1.5 sekundy, nastavení povoleného
rozsahu kroku numerické integrace (SetStep
) a nastavení požadované
přesnosti numerické integrace (SetAccuracy
). Vlastní simulace proběhne
v rámci volání funkce Run
.