algorithm - 如何在特定时间访问变量值?
问题描述
我试过这段代码:
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 开始,我从一开始就需要它。
这个问题有什么直接的方法吗?
解决方案
根据人们的评论,您现在知道 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
。
希望现在或将来有所帮助。
推荐阅读
- java - Undertow - 通过 k8s 服务调用微服务时检测到 SSL 读取循环
- java - 奇怪的 TextInputLayout 行为
- python - 删除 Python 请求中的默认标头字段
- c - C 程序:在具有 16*16 乘法器的处理器上将两个 32 位值相乘并以 64 位返回
- mysql - 从多个表和查询中获取总数
- android - Camera.Parameters.setZoom() 跨设备不一致,在某些设备中缩放更多
- javascript - 可选地传递变量/参数
- javascript - 混合 Django 应用程序 - REST API 身份验证
- javascript - Highchart 中未定义的值
- apache-spark - 司机无故停止执行者