Chciałbym zrozumieć ogólną koncepcję modelowania hybrydowego (w szczególności zdarzeń stanu) z numerycznego punktu widzenia (chociaż nie jestem matematykiem :)). Biorąc pod uwagę następujące Modelica model:Zdarzenia modelki i modelowanie hybrydowe
model BouncingBall
constant Real g=9.81
Real h(start=1);
Real v(start=0);
equation
der(h)=v;
der(v)=-g;
algorithm
when h < 0 then
reinit(v,-pre(v));
end when;
end BouncingBall;
rozumiem koncepcję when
i reinit
.
- Równanie w instrukcji
when
jest aktywne tylko wtedy, gdy warunek staje się prawdziwy, prawda? - Załóżmy, że piłka uderzy w podłogę dokładnie o
2sec
. Ponieważ używam wieloetapowego solwera, oznacza to, że solver "wykracza poza 2 sekundy", rozpoznaje, żeh<0
(pozwala zakładać przy symulacjitime = 2.5sec
,h = -0.7
). Co to znaczy „Czas na imprezę jest przeszukiwane przy użyciu funkcji przejścia? Czy istnieje proste wyjaśnienie (przykład)? - Czy solver teraz wraca? Biorąc mniejszy krok rozmiarze?
- co robi
pre()
operacja oznacza w tym kontekście? noEvent()
: "Wyrażenia są traktowane dosłownie zamiast generowania funkcji przecinających. Ponieważ nie ma funkcji przejścia, nie ma wymogu, aby wyrażenie mogło być ocenione poza limitem zdarzenia ": Co to znaczy? Biorąc pod uwagę ten sam przykład z odbijającą się piłką: Solver wykrywa w czasie 2,5, że h = 0,7. różnica między zi beznoEvent()
Proponuję przeczytać w książce Modelica: http: //book.xogeny.com/behavior/discrete/ W skrócie: 1) tak 2) funkcja crossing oznacza, że gdy h przekracza zero, solver używa pochodnych sygnału, aby uzyskać odczucie, kiedy wykonać mniejszy krok, ale zależy to od solver 3) oba, w zależności od solver 4) pre jest wartością dyskretnej zmiennej z poprzedniego kroku 5) praktycznie żadne zdarzenia nie są generowane, gdy sygnał przekracza zero, więc solver nie zatrzymuje się (brak zdarzenia), więc w zasadzie wyrażenie jest oceniane tylko na granicy etapu –