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.