차이'때'와'만약에'OpenModelica?
-
21-12-2019 - |
문제
나는 새로운 OpenModelica 나는 몇 가지 질문에 대한 코드의'BouncingBall.mo'배포되는 소프트웨어와 함께로서 예제 코드입니다.
1)사이의 차이점은 무엇 '때' 고 '만약에'?
2)의 목적은 무엇 변수 'foo' 코드에서?
3)라인(15)- "때{h <=0.0v <=0.0 영향}",,안 표현한 '때' 충분으로 "{h <=0.0v <=0.0}" 기 때문에 이 TRUE 할 때 영향이 발생의 목적은 무엇인 영향(나에게 그것의 중복 여기에)그리고 무엇을 쉼표(, 하기 전에) 영향 을 의미합니까?
model BouncingBall
parameter Real e = 0.7 "coefficient of restitution";
parameter Real g = 9.81 "gravity acceleration";
Real h(start = 1) "height of ball";
Real v "velocity of ball";
Boolean flying(start = true) "true, if ball is flying";
Boolean impact;
Real v_new;
Integer foo;
equation
impact = h <= 0.0;
foo = if impact then 1 else 2;
der(v) = if flying then -g else 0;
der(h) = v;
when {h <= 0.0 and v <= 0.0,impact} then
v_new = if edge(impact) then -e * pre(v) else 0;
flying = v_new > 0;
reinit(v, v_new);
end when;
end BouncingBall;
해결책
OK,는 꽤 몇 가지 질문이 있습니다.내게도 그들이 대답:
의 차이는 무엇입
when
고if
.질문 내에서
when
절은"active"에 인스턴트는 조건 표현식에 사용되는when
절가 활성화됩니다.반면에,방정식의 내부는if
문는 진정한 만큼 조건식지 사실이다.의 목적은 무엇인
foo
?아마을 시각화합니다.그것은 명확한 영향을 모델에는 내가 볼 수 있습니다.
왜
impact
에 나열when
절입니다.문제 중 하나는 당신이 소위 제노과 같은 시스템이 은 계속된다는 것을 바운스 무기한으로 작아지고 작은 간격으로.나는
impact
국기 여기입니다 의미를 나타내는 시스템이 중지되었 튀.이것은 일반적으로 수행해서 확인하는 것을 확인하는 조건 표현식h<=0.0
실제로 된 false 에서 일부 지점입니다.기 때문에 이벤트 검출을 포함한 수치 공차,어떤 점에서 높이의 반사 결코 외부의 허용 오차 범위 그리고 당신은 필요를 감지하거나 공 반송지 않고 계속 하락.(그것을 설명하기 어렵지 않고 실제로 시뮬레이션을 실행하고 효과)입니다.무엇
,
에when
절입니다.다음 사항을 고려하십시오:
when {a, b} then
.만약 당신이 원when
절 경우 트리거 중a
나b
진정한,당신은 생각할 수 있습니다 당신은 그것을 쓸로when a or b then
.하지만 그 정확하지 않기 때문에만 하는 경우 트리거 첫째 이 사실이다.이 더 나은 코드를 고려합니다:
a = time>1.0; b = time>2.0; when {a, b} then // Equation set 1 end when; when a or b then // Equation set 2 end when;
그래서 방정식을 설정 1 을 얻을 것이 실행 두번 여기 것이기 때문에 그 때 실행 a
가 진정한 그리고 다시면 b
된 사실이다.하지만 방정식을 설정 2 얻을 것이 실행 면 면 a
된 사실이다.기 때문에 전체적인 식이 a or b
만이 진리가 되나니다.
이러한 일반적인 혼란에 대해 when
.희망이 이러한 설명은 도움이됩니다.