我尝试了以下代码:
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开始,而我从一开始就需要它。
解决这个问题有直接方法吗?
答案 0 :(得分:0)
根据人们的评论,您现在知道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()
,以获取time=0
处的x值。
希望现在或将来有帮助。