我试图重现以下链接的脚本: Parameters estimation on Lotka Volterra model with Scilab
我在结果中遇到类似的错误。 您可以指导我运行脚本而不会出错。 格拉西亚斯 Hermes的
答案 0 :(得分:0)
问题在于求解器以某种方式达到了无法解决每个t
上的颂歌并在某一点停止的点。因此,y_calc
的尺寸小于y_exp
。
如果这不是您的问题,请将diffmat
功能的第6行上的Differences
更改为
diffmat = y_calc' - y_exp(1:size(y_calc',1),:)
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'
语句会给你带来无法使用的结果。