首页 > 解决方案 > 如何在特定时间访问变量值?

问题描述

我试过这段代码:

model var
  Real x;
  Real y;
  Real z;
equation 

  x=6*time;
  when time>=6 then
    z=x;
  end when;
  y=3*z;
end var;

但它会给我y = 3*x(在时间 = 6 时),但从时间 = 6 开始,我从一开始就需要它。
这个问题有什么直接的方法吗?

标签: algorithmmathmodelica

解决方案


根据人们的评论,您现在知道 Modelica 在处理时间行为方面非常严格。您可能会争辩说它是时间的更物理表示(除了量子和其他疯狂的物理学),因为您无法在代码中进行时间旅行。

根据您的应用程序,可能有一些方法可以解决您的问题。一种可能性是将时间行为移至初始化。这样您就可以捕获之前的行为time=0并从time=0预期的行为开始。

例如:

model var

  parameter Modelica.SIunits.Time t_zero = 6;
  parameter Real x(fixed=false);

  Real y;
  Real z;

initial equation
  x = 6*t_zero; // or some more complicated set of equations/functions

equation 
  z = x;
  y=3*z;

end var;

认识到这限制了事情,可能太多了,但是您可以有很多参数并且在初始方程块中有更复杂的表示。您还可以调用x=func()已执行积分等的函数来获取 x at 的值time=0

希望现在或将来有所帮助。


推荐阅读