OpenModelica中处理非秒时间单位的技巧

Techniqes for dealing with non second time units in OpenModelica

谁能告诉我处理秒以外的时间尺度的合适技术?

例如以下站点上的 Lotka-Volterra 'classic model': https://mbe.modelica.university/behavior/equations/population/

生成的图表显示了 1-120 秒的 x 轴,但显然这对于​​ rabbit/fox 示例来说是不现实的。我在以下代码片段中对其进行了调整,以了解我正在寻找的内容(假设 alpha、beta、gamma 和 delta 实际上是 rates/day)。

我的调整有点笨拙,我相信一定有更好的方法,我就是无法解决。

我确实想要与标准库兼容的东西并且正在使用 OpenModelica。谢谢!

model ClassicModel "This is the typical equation-oriented model"
  parameter Real alpha=0.1 "Reproduction rate of prey per day";
  parameter Real beta=0.02 "Mortality rate of prey per predator per day";
  parameter Real gamma=0.4 "Mortality rate of predator per day";
  parameter Real delta=0.02 "Reproduction rate of predator per day";
  parameter Real x0=10 "Start value of prey population";
  parameter Real y0=10 "Start value of predator population";

  Real x "Prey population";
  Real y "Predator population";
  Real alpha_S=alpha/(60*60*24) "Reproduction rate of prey per second";
  Real beta_S=beta/(60*60*24) "Mortality rate of prey per predator per second";
  Real gamma_S=gamma/(60*60*24) "Mortality rate of predator per second";
  Real delta_S=delta/(60*60*24) "Reproduction rate of predator per second";
  
initial equation
  x=x0;
  y=y0;
  
equation
  der(x) = x*(alpha_S-beta_S*y);
  der(y) = y*(delta_S*x-gamma_S);
end ClassicModel;

我觉得你做的是对的,问题在例子中。正如你所说,费率可能是每天,但由于它只是一个演示,如果时间数字不是很大,那么从中学习更容易。

我会做的一个改进是省略第二组参数,并将原始参数定义为parameter Real alpha=0.1/(60*60*24)等;这样代码的结构就更简单了,可以清楚直接知道实际的速率是多少(如果你比较分析结果或类似的结果),但你仍然可以在源代码中清楚地调整。

另一件事是,您可以在 _S 数量前添加 parameter ,因为它们在执行期间不会改变。