gpt4 book ai didi

modelica - Modelica 方程式中 while 循环的语法?

转载 作者:行者123 更新时间:2023-12-05 09:32:42 29 4
gpt4 key购买 nike

我正在尝试在模型的 equation 部分中实现一个简单的迭代猜测方案,但是,我收到以下错误:No viable alternative near token: while 在 OpenModelica 中。对于为什么这个 while 循环不起作用有一个简单的解释吗?

while hf>=dh loop
v_guess = v_guess*0.95;
f_guess = Functions.f_Haaland(v=v_guess, D=d, rho=rho, mu=mu, eps=roughness);
hf = Functions.H_f(f=_guess, L=length, D=d, v=v_guess, g=system.g);
end while;

说,

  • hf=11
  • dh=10
  • v_guess=1

我想要的是v_guess越来越小,直到hf约等于dh。然后,我将在模型的下一步中使用 v_guess,因为它接近 dh 处出现的真实 v。我也对 for 循环和 break 进行了相同的尝试,但无济于事。

我正在查看 while 循环的语法,它看起来非常相似。我的方案是否存在我看不到的基本问题?

最佳答案

Modelica 有方程式和算法。算法的工作原理与大多数语言类似,并允许 while 循环。

方程始终有效且无序,因此如果您编写 v_guess = v_guess*0.95; 这意味着 v_guess 应始终具有此值 -只有解决方案 v_guess=0 - 这可能不是您想要的。

您可以在方程式中使用 for 循环,但这是为了处理数组,其中数组中的每个元素都有一个单独的方程式 - 写得很紧凑。

所以,如果你想写一个 while 循环,要么直接写在算法部分,要么隐藏在函数中。

algorithm
while hf>=dh loop
v_guess := v_guess*0.95;
f_guess := Functions.f_Haaland(v=v_guess, D=d, rho=rho, mu=mu, eps=roughness);
hf := Functions.H_f(f=_guess, L=length, D=d, v=v_guess, g=system.g);
end while;

(请注意,在算法中应该是:=,在方程式中应该是=,以强调这种差异,大多数工具都会处理这两者。)

添加:请注意,您可以在一个模型中有多个算法部分,因此您可以有几个方程、一个算法部分、另一个算法部分,然后再有几个方程。具有多个算法部分的好处是每个部分都按顺序执行,但它们可以自由重新排列。

关于modelica - Modelica 方程式中 while 循环的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67789881/

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