繁体   English   中英

Modelica中等式中while循环的语法?

[英]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;

说,

  • 高频=11
  • dh=10
  • v_guess=1

我想要的是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM