문제

나는 새로운 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,는 꽤 몇 가지 질문이 있습니다.내게도 그들이 대답:

  1. 의 차이는 무엇입 whenif.

    질문 내에서 when 절은"active"에 인스턴트는 조건 표현식에 사용되는 when 절가 활성화됩니다.반면에,방정식의 내부는 if 문는 진정한 만큼 조건식지 사실이다.

  2. 의 목적은 무엇인 foo?

    아마을 시각화합니다.그것은 명확한 영향을 모델에는 내가 볼 수 있습니다.

  3. impact 에 나열 when 절입니다.

    문제 중 하나는 당신이 소위 제노과 같은 시스템이 은 계속된다는 것을 바운스 무기한으로 작아지고 작은 간격으로.나는 impact 국기 여기입니다 의미를 나타내는 시스템이 중지되었 튀.이것은 일반적으로 수행해서 확인하는 것을 확인하는 조건 표현식 h<=0.0 실제로 된 false 에서 일부 지점입니다.기 때문에 이벤트 검출을 포함한 수치 공차,어떤 점에서 높이의 반사 결코 외부의 허용 오차 범위 그리고 당신은 필요를 감지하거나 공 반송지 않고 계속 하락.(그것을 설명하기 어렵지 않고 실제로 시뮬레이션을 실행하고 효과)입니다.

  4. 무엇 ,when 절입니다.

    다음 사항을 고려하십시오: when {a, b} then.만약 당신이 원 when 절 경우 트리거 중 ab 진정한,당신은 생각할 수 있습니다 당신은 그것을 쓸로 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.희망이 이러한 설명은 도움이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top