Scilab:Lotka Volterra模型Scilab的参数估计

时间:2017-08-24 12:13:52

标签: optimization parameters scilab estimation

我试图重现以下链接的脚本: Parameters estimation on Lotka Volterra model with Scilab

我在结果中遇到类似的错误。 您可以指导我运行脚本而不会出错。 格拉西亚斯 Hermes的

1 个答案:

答案 0 :(得分:0)

Scilab 5.5.1或更小版本的解决方案

问题在于求解器以某种方式达到了无法解决每个t上的颂歌并在某一点停止的点。因此,y_calc的尺寸小于y_exp

如果这不是您的问题,请将diffmat功能的第6行上的Differences更改为

diffmat = y_calc' - y_exp(1:size(y_calc',1),:)

Scilab 6.0.0或更高版本的解决方案

ode函数现在在Scilab 6.X.X中无法计算时出现错误。

使用try ... catch ... end语句,我们可以让程序处理它。

这是一个错误(我将解释为什么之后)解决方案正在将Differences函数的第5行更改为

try // test if ode works normally
  [y_calc,odew,odeiw]=ode(y0',t0,t,list(LotkaVolterra,c,n,m,e)) 
catch // if an error is raised
  y_calc = y_exp' // Put a value when the computations fails
end
diffmat = y_calc' - y_exp(1:size(y_calc',1),:)

你仍然会收到来自颂歌的警告。

为什么不好

由于您要求运行程序,我使用try catch语句来抛弃错误并让程序继续运行。你不应该。这意味着您的问题定义不明确:参数选择不当或者数值无法解决。我建议研究程序背后的数学,找出为什么某些参数可能会破坏ode算法。

还有另一个原因你不应该听我的回答。如你所见,当我发现错误时,我会给y_calc一些价值。但这在数学上是荒谬的,因为优化问题依赖于解决方案最接近初始问题的事实。我99%确定y_calc = y_exp'语句会给你带来无法使用的结果。

相关问题