Modelica时间依赖方程

时间:2013-07-12 08:54:29

标签: dynamic-programming modelica

我是Modelica的新手,我想知道是否有可能编写一种动态编程方程式。假设时间由整数i离散化,在我的特定应用中,x是布尔值,f是x的布尔函数。

x(t_i) = f(x(t_{i+d}))

其中d可以是正整数或负整数。当然,我会相应地初始化x,无论是真还是假。

非常感谢任何帮助或参考!

2 个答案:

答案 0 :(得分:2)

有可能。在Modelica中,时间上的离散化通常由编译器执行,您必须处理方程式(连续动态)。否则,如果要在离散时间点生成事件,可以使用when语句执行此操作。 我建议你看看Introduction to Object-Oriented Modeling and Simulation with OpenModelica (PDF format, 6.6 MB) - Peter Fritzson最近的一个教程(2012)。关于离散事件和混合系统的部分应该阐明如何在Modelica中实现方程。 您可以在下面找到关于弹跳球模型的教程中的示例,因为您可以看到在编写动态方程时不考虑时间离散化。所以球的连续模型v = der(s),a = der(v),而不是处理与地面接触的when子句内的离散部分:

model BouncingBall "the bouncing ball model"
  parameter Real g=9.81; //gravitational acc.
  parameter Real c=0.90; //elasticity constant
  Real height(start=10),velocity(start=0);
equation
  der(height) = velocity;
  der(velocity)=-g;
  when height<0 then
    reinit(velocity, -c*velocity);
  end when;
end BouncingBall;

希望这有帮助, 马可

答案 1 :(得分:0)

如果我理解了您的问题,您希望使用n的最后x次评估来确定x的下一个值。如果是这样,此代码显示了如何执行此操作:

model BooleanHistory
  parameter Integer n=10 "How many points to keep";
  parameter Modelica.SIunits.Time dt=1e-3;
protected 
  Boolean x[n];
  function f
    input Integer n;
    input Boolean past[n-1];
    output Boolean next;
  algorithm 
    next :=not past[1]; // Example
  end f;
initial equation 
  x = {false for i in 1:n};
equation 
  when sample(0,dt) then
    x[2:n] =  pre(x[1:(n-1)]);
    x[1] =  f(n, x[2:n]);
  end when;
end BooleanHistory;