gpt4 book ai didi

if-statement - 在 if 语句中分配变量

转载 作者:行者123 更新时间:2023-12-04 07:37:00 25 4
gpt4 key购买 nike

当我尝试在 if 语句的主体内分配变量 x 时,如果该变量也出现在 if 语句的条件下,我会得到意想不到的结果。
例如,代码

model algorithmTest_25p05p2021


Real x(start=0);
Real y(start=0);

algorithm

y := sin(time);
x := sin(time);

if x < 0 then // replace with y < 0 --> x is correctly truncated
x := 0;
end if;


end algorithmTest_25p05p2021;
结果是
enter image description here
我在OpenModelica 1.17.0中使用OMEdit,仿真时间120s,最大步进时间1s。
我无法理解这里发生的事情。
在我的理解中,算法部分意味着将x初始化为其起始值0。初始化后,我认为算法部分中的语句是按顺序执行的。因此,在 if 语句之前,x 被设置为 x=sin(time) 的值。
之后,我预计 if 语句会在 sin(time) < 0 时设置 x=0 并在 sin(time)>=0 时让 x 为 x=sin(time)。
你会看到发生了什么:在条件第一次触发后,x 保持为零。
更让我困惑的是,用“y<0”条件替换“x<0”条件解决了这个问题。
我在这里错过了什么?任何指向 Modelica 规范的指针?
编辑(27.05.2021):
由于这种行为似乎是 OpenModelica 1.17.0 中的一个错误,我将其发布在他们的 Github 上,请参阅
https://github.com/OpenModelica/OpenModelica/issues/7484

最佳答案

它一定是一个错误。
显然,x<0 应该有一个事件,但事件逻辑仅在 x 时才重要接近于零,因此对图形的影响应该很小。
我可以找到的规范的相关部分是:

  • If 语句仅在为真时才进行评估
    https://specification.modelica.org/maint/3.5/statements-and-algorithm-sections.html#if-statement
  • 如果条件和隐藏状态不一致,则生成事件:
    https://specification.modelica.org/maint/3.5/equations.html#events-and-synchronization
  • 概念 x用它的起始值初始化,但没关系,因为它是无条件分配的 https://specification.modelica.org/maint/3.5/statements-and-algorithm-sections.html#execution-of-an-algorithm-in-a-model
  • 关于if-statement - 在 if 语句中分配变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67692496/

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