gpt4 book ai didi

if-statement - OpenModelica 中 'when' 和 'if' 之间的区别?

转载 作者:行者123 更新时间:2023-12-05 00:27:46 25 4
gpt4 key购买 nike

我是 OpenModelica 的新手,我对“BouncingBall.mo”的代码有一些疑问,该代码作为示例代码随软件一起分发。

1) 和有什么区别'何时' “如果” ?

2)变量的用途是什么'富' 在代码中?

3) 在线 (15) - “当 {h <= 0.0 和 v <= 0.0,impact}” ,, 不应该是 的表达式'何时' 够了 "{h <= 0.0 和 v <= 0.0}"因为这变成了 当撞击发生时,的目的是什么?影响 (对我来说,这里是多余的)以及在 之前的逗号( )是什么意思?影响 方法?

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;

最佳答案

好的,这是相当多的问题。让我试着回答他们:

  • when有什么区别和 if .

    里面的问题when子句仅在 when 中使用的条件表达式的那一刻“活跃”。子句变为事件状态。相比之下,if 中的方程只要条件表达式为真,语句就为真。
  • foo的目的是什么? ?

    可能是为了可视化。它对我能看到的模型没有明显的影响。
  • 为什么是 impact列于 when条款。

    你所谓的问题之一Zeno systems like this是它将继续以越来越小的间隔无限期地反弹。我怀疑 impact此处的标志旨在指示系统何时停止弹跳。这通常是通过检查以确保条件表达式 h<=0.0 来完成的。居然变成在某一点。因为事件检测包括数值公差,所以在某些时候反弹的高度永远不会超出公差范围,您需要检测到这一点,否则球永远不会再次反弹而只会继续下落。 (如果不实际运行模拟并看到效果,就很难解释)。
  • ,有什么用做在when条款。

    考虑以下内容:when {a, b} then .问题是,如果你想要一个 whena 时触发子句或 b变成真的,你可能认为你会写成 when a or b then .但这是不正确的,因为这只会在 时触发。第一 一个变成真的。为了更好地了解这一点,请考虑以下代码:

  • a = 时间>1.0;
    b = 时间>2.0;
    当 {a, b} 然后
    //方程组 1
    何时结束;
    当 a 或 b 然后
    //方程组 2
    何时结束;

    所以方程组 1 将被执行 两次 在这里是因为它会在 a 时被执行变为真,然后在 b 时再次变为真变成真的。但是方程组 2 只会被执行 一次 a变成真的。那是因为整个表达式 a or b只在一瞬间变为真。

    这些是关于 when 的常见混淆点.希望这些解释有帮助。

    关于if-statement - OpenModelica 中 'when' 和 'if' 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20016232/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com