我试过这段代码:
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
(在 time = 6 时)但是从 time = 6 开始,我从一开始就需要它。
这个问题有什么直接的方法吗?
最佳答案
根据人们的评论,您现在知道 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;
认识到这限制了一些东西,可能太多了,但是你可以有很多参数并且在初始方程 block 中有更复杂的表示。您还可以调用函数 x=func()
,其中您已执行积分等,以在 time=0
时获取 x 的值。
希望对现在或将来有所帮助。
关于algorithm - 如何在特定时间访问变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53646899/