2017-03-26 12 views
6

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.

  1. Równanie w instrukcji when jest aktywne tylko wtedy, gdy warunek staje się prawdziwy, prawda?
  2. 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, że h<0 (pozwala zakładać przy symulacji time = 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)?
  3. Czy solver teraz wraca? Biorąc mniejszy krok rozmiarze?
  4. co robi pre() operacja oznacza w tym kontekście?
  5. 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 bez noEvent()
+2

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 –

Odpowiedz

4
  1. Tak, ciało, gdy jest wykonywany tylko na imprezach
  2. Proste widok:. Solver wykonuje czynności, a następnie wykorzystuje ciągłe rozszerzenie do wygenerowania (gładka) formuła interpolacji dla poprzedniego kroku Ta formuła interpolacji może być użyta do wygenerowania wykresu, a także do znalezienia pierwszego punktu, w którym h przekroczyło zero (prawdopodobnie 2,000000001). w punkcie interpolacji - a następnie solver zostaje zrestartowany.
  3. Nie powiedziałbym, że solver wraca. Wykonuje częściowy krok, a następnie kontynuuje. Niektórzy twórcy muszą znacznie zmniejszyć rozmiar kroku po wydarzeniu, inni nie.
  4. pre(x) jest ustawiona na wartość x przed zdarzeniem.
  5. noEvent(h<0) zasadniczo oznacza ocenę wyrażenia zapisaną bez wszystkich dźwięków dzwonków i gwizdków funkcji przecinających. Nie można używać when noEvent(h<0) then

Istnieje wiele dodatkowy punkt: Jeśli jesteś zaznajomiony z Sturma-sekwencji lub teorii sterowania można zdać sobie sprawę, że nie jest konieczne, aby interpolować formuły do ​​określenia, czy przekroczyła zero lub nie w sposób interwał (i niektóre narzędzia go używają). Fakt, że funkcja niekoniecznie jest gładka sprawia, że ​​jest ona nieco bardziej skomplikowana, a także oznacza, że ​​nie można stosować testów pochodnych. To, jak dużo zostanie zresetowany solwer, zależy od rodzaju solwera. Rozwiązania jednoetapowe (Runge-Kutta) można uruchomić ponownie bezpośrednio, tak jakby nic się nie stało, podczas gdy rozwiązania wielostopniowe (BDF/Adams - takie jak dassl/lsodar/cvode) muszą rozpoczynać się od niższego rzędu i mniejszego rozmiaru kroku.