[英]Syntax for while loop in equation in Modelica?
我正在尝试在 model 的equation
部分中实现一个简单的迭代猜测方案,但是,我收到以下错误:在 OpenModelica 中No viable alternative near token: while
。 为什么这个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;
说,
我想要的是 v_guess 变得越来越小,直到 hf 大约等于 dh。 然后我将在我的 model 的下一步中使用 v_guess,因为它接近于 dh 发生的真实 v。 我也尝试了 for-loops 和 break,但无济于事。
我正在查看 while 循环的语法,它看起来完全相似。 我的计划有什么基本问题是我看不到的吗?
Modelica 有方程和算法。 算法的工作方式与大多数语言类似,并允许使用 while 循环。
方程总是有效且无序的,所以如果你写v_guess = v_guess*0.95;
这意味着v_guess
应该始终具有此值 - 只有解决方案v_guess=0
- 这可能不是您想要的。
您可以在方程式中使用 for 循环,但这是为了处理数组,其中数组中的每个元素都有一个单独的方程式 - 写得很紧凑。
所以,如果你想写一个while循环,要么直接写在算法部分,要么隐藏在function中。
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;
(请注意,算法中的:=
和方程式中的=
以强调这种差异,大多数工具都可以处理。)
补充:请注意,model 中可以有多个算法部分,因此您可以有几个方程、一个算法部分、另一个算法部分,然后再有几个方程。 拥有多个算法部分的好处是每个部分都按顺序执行,但它们可以自由重新排列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.