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
,因为它们在执行期间不会改变。
谁能告诉我处理秒以外的时间尺度的合适技术?
例如以下站点上的 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
,因为它们在执行期间不会改变。