2017-08-24 28 views
0

我试图复制下面链接的脚本: Parameters estimation on Lotka Volterra model with Scilab的Scilab:对洛特卡沃尔泰拉模型的参数估计的Scilab

而我得到的结果与在它描述的类似的错误.. 你可以指导我无误地运行脚本。 格拉西亚斯 爱马仕

+0

[使用Scilab的Lotka Volterra模型的参数估计]的可能重复(https://stackoverflow.com/questions/22614164/parameters-estimation-on-lotka-volterra-model-with-scilab) – bummi

回答

0

解决方案的Scilab 5.5.1或更小

的问题是,不知何故求解达到一个地步,它不能解决每个t的颂歌,并在某一点停止。因此您的y_calc的尺寸小于y_exp

如果这不是你的问题,在Differences功能的6号线更改diffmat

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

解决方案的Scilab 6.0.0或更高

ode函数现在抬高时出错它无法在Scilab 6.XX中计算

使用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语句来扔掉的错误,让程序继续进行。你不应该。这意味着你的问题是不明确的:参数选择不当或者它不是数字可解的。我建议研究程序背后的数学,并找出为什么某些参数可能会破坏算法。

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