Jako příklad kombinovaného modelu použijeme model skákajícího míčku. Spojité chování míčku odpovídá volnému pádu, pro detekci dopadu míčku používáme stavovou podmínku. Stavová událost (dopad míčku) vyvolá skokovou změnu rychlosti míčku.
// model MICEK.CPP - skákající míček #include "simlib.h" const double g = 9.81; // gravitační zrychlení class Micek : BoolCondition { Graph G; Integrator v,y; int Test() { return y.Value()<0; } void Action() { Print(" Odraz míčku v čase t=%g \n",Time); G(); v = -0.8 * v.Value(); y = 0; // nutné pro detekci následujícího dopadu } } public: Micek(double position) : G("Výška míčku",y,0.05), y(v,position), v(-g) { Mode(DetectUP); } }; Micek micek(1); // vytvoření objektu micek int main() { // popis experimentu Print(" Model skákajícího míčku v C++ \n"); OpenOutputFile("micek.out"); Init(0,5); // inicializace experimentu SetStep(1e-10,0.5); // krok integrace SetAccuracy(1e-5,0.001); // max. povolená chyba integrace Run(); // simulace Print(" Konec simulace \n"); return 0; }
Chování míčku je popsáno jako volný pád. Integrátor v integruje tíhové zrychlení g a jeho hodnota je rovna rychlosti míčku. Integrátor y integruje rychlost a jeho hodnota představuje výšku míčku nad zemí.
Pro detekci okamžiku dopadu míčku na zem (y=0) je použito stavové podmínky
y.Value()<0
v metodě Test
. Tato metoda je volána systémem
řízení simulace při každém kroku numerické integrace. V případě změny hodnoty
podmínky se krok zkracuje tak, abychom okamžik dopadu míčku určili s
maximální přesností (přesnost určení doby dopadu je dána minimální délkou
kroku, tj. hodnotou proměnné MinStep
). V okamžiku dopadu míčku se provede
akce, popsaná v metodě Action, tj. obrácení a zmenšení vektoru rychlosti.
Tímto způsobem modelujeme ztrátu energie při dopadu míčku.
Řízení experimentu popisuje funkce main
. Po volání Init
následuje nastavení povoleného rozsahu kroku integrace (SetStep)
a určení požadované přesnosti integrace (SetAccuracy). Běh
simulace se odstartuje voláním funkce Run. Výstup se řeší
podobně, jako u spojité simulace, je zde však nutné zajistit
výstup též v okamžicích dopadu míčku na zem.