gpt4 book ai didi

if-statement - 如果不执行分支中的方程

转载 作者:行者123 更新时间:2023-12-05 09:26:10 24 4
gpt4 key购买 nike

有个问题困扰了我很久。如您所知,当我们在 Modelica 中使用 if 条件时,这意味着如果表达式为真,则 Modelica 将执行相应的方程式。但是当我测试下面的代码时,我很困惑:

model Model134
Real a(start = 0);
equation
if not sample(0, 2) then
a = 1;
else
a = 3;
end if;
end Model134;

我认为a会每2s改变一次(开始时间=0),但是当我模拟这个模型时,它没有改变并且a全部等于1时间。

有人知道根本原因吗?

最佳答案

a 确实改变了它的值,但根据您的模拟工具,您可能不会在图中看到它。

sample(0, 2) 每 2 秒创建一个时间事件。 sample() 的返回值仅在事件期间为真。所以 a 的值发生了变化,但在事件发生后它会立即变回来。

this answer对于类似的问题,提到 Dymola 将事件前后的值存储在结果文件中。出于效率原因,中间值被跳过(每个事件可能有很多,这会使您的结果文件膨胀)。因此,您无法在 Dymola 中绘制此更改。对于 OpenModelica,请参阅 answer byAkhil Nandan .

要证明 a 确实会改变它的值,您可以使用以下代码:

model Model134
import Modelica.Utilities.Streams.print;
Real a;
equation
if sample(0, 2) then
a = 1;
else
a = 0;
end if;

when a > 0.5 then
print("a is " + String(a) + " at t=" + String(time) + "s");
end when;

annotation (experiment(StopTime=10));
end Model134;

您应该在模拟日志中看到类似这样的内容:

a is 1 at t=2s
a is 1 at t=4s
a is 1 at t=6s
a is 1 at t=8s
a is 1 at t=10s

关于if-statement - 如果不执行分支中的方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74260889/

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