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.