algorithm - 如何在特定时间访问变量值?

标签 algorithm math modelica

我试过这段代码:

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/

相关文章:

algorithm - 从 N 生成长度为 K 的所有无序排列的快速算法

sql - 在 PostgreSQL 中创建最佳图形关系

javascript - 如何从 SVG 坐标系中的 3 个 x/y 点查找旋转度数

modelica - 如何追踪 Dymola 中用于计算管道质量的参数和方程?

modelica - 在 Modelica 中访问记录参数而不声明记录实例

algorithm - 广度优先搜索和层序遍历有什么区别?

string - 压缩特里实现?

sql - GUID 有没有可能全部用完?

c - 读取N并打印以下: 2, 4(2个数字); 3,9,27(3个数字)

differential-equations - 如何访问modelica中的时间变量