2017-03-26 23 views
6

하이브리드 모델링 (특히 상태 이벤트)의 일반적인 아이디어를 수치 적 관점에서 이해하고 싶습니다. (저는 수학자는 아니지만 :)).Modelica 이벤트 및 하이브리드 모델링

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; 

내가 whenreinit의 개념을 이해 : 다음 Modelica 모델을 감안할 때.

  1. when 문에있는 수식은 조건이 참일 때만 활성화됩니까?
  2. 공이 정확히 2sec에 바닥에 닿았다고 가정합시다. 멀티 스텝 솔버를 사용하고 있기 때문에 솔버가 "2 초를 넘었 음"을 의미하므로 h<0 (시뮬레이션에서 가정 할 수 있습니다. time = 2.5sec, h = -0.7). 간단한 설명 (예)?
  3. 솔버는 이제 작은 스텝 크기를 촬영? 돌아가는인가?를 pre() 무엇
  4. 거기이 평균 "교차 기능을 사용하여 검색되는 이벤트에 대한 시간? 무엇을 그 문맥에서 조작의 의미는 무엇입니까?
  5. noEvent() : "표현식은 교차 함수를 생성하는 대신 문자 그대로 취합니다. 교차 함수가 없기 때문에식이 이벤트 한계를 넘어서 평가 될 수있는 요구 사항이 없습니다. "라는 의미는 무엇입니까? 튀어 오르는 공과 같은 예제를 사용하면 : solver는 2.5에서 h = 0.7임을 감지합니다. 와 noEvent()없는 차이
+2

Modelica Book : http : //book.xogeny에서 읽어 보시기 바랍니다.2) 교차 함수는 h가 0을 교차 할 때, 작은 스텝 크기를 만들 때 느낌을 얻기 위해 솔버가 신호의 미분을 사용하지만, 솔버 3) 둘 다 솔버에 따라 다릅니다. 4) pre는 이전 단계 5의 이산 변수의 값입니다. 신호가 0이 될 때 기본적으로 이벤트가 생성되지 않으므로 솔버가 중지되지 않으므로 (이벤트 없음) 기본적으로 표현식이 평가됩니다 계단 경계에서만 –

답변

4
  1. 예, 이벤트 만에서 실행될 때의 몸
  2. 간단한보기 :. 솔버이 단계를 수행 한 다음 (부드럽게)를 생성하기 위해 지속적인 확장을 사용 이전 단계의 보간 공식 그 보간 공식을 사용하여 플롯을 생성하고 h가 0을 넘은 첫 번째 점 (가능성 2.000000001)을 찾을 수 있습니다. 이벤트 반복은 다음과 같이 수행됩니다 보간 된 점에서 - 그 후 솔버가 다시 시작됩니다.
  3. 나는 솔버가 돌아 간다고 말하지 않을 것이다. 부분적인 조치를 취한 다음 앞으로 나아 간다. 일부 해결사는 이벤트 이후에 단계 크기를 많이 줄여야합니다. 그렇지 않은 경우도 있습니다.
  4. pre(x)은 이벤트 전에 x 값으로 설정됩니다.
  5. noEvent(h<0)은 기본적으로 교차 기능의 종소리와 휘파람없이 작성된 표현식을 평가하는 것을 의미합니다. 당신이 슈 투름 시퀀스 또는 제어 이론에 익숙하다면 당신은 그것이 제로 여부를 교차 여부를 결정하는 수식을 보간 할 필요가 없습니다 것을 깨닫게 수 있습니다 당신은 when noEvent(h<0) then

많은 추가 포인트가 있습니다 사용할 수 없습니다 간격 (및 일부 도구를 사용). 함수가 반드시 매끄럽지는 않다는 사실은 조금 더 복잡해지며 파생 테스트를 사용할 수 없다는 것을 의미합니다. 솔버가 재설정되는 정도는 솔버의 종류에 따라 다릅니다. 원스텝 솔버 (Runge-Kutta)는 사실상 아무 일도없는 것처럼 직접 재시작 할 수 있지만 다단계 솔버 (dassl/lsodar/cvode와 같은 BDF/Adams)는 더 낮은 차수의 작은 스텝 크기로 시작해야합니다.