我试图复制下面链接的脚本: Parameters estimation on Lotka Volterra model with Scilab的Scilab:对洛特卡沃尔泰拉模型的参数估计的Scilab
而我得到的结果与在它描述的类似的错误.. 你可以指导我无误地运行脚本。 格拉西亚斯 爱马仕
我试图复制下面链接的脚本: Parameters estimation on Lotka Volterra model with Scilab的Scilab:对洛特卡沃尔泰拉模型的参数估计的Scilab
而我得到的结果与在它描述的类似的错误.. 你可以指导我无误地运行脚本。 格拉西亚斯 爱马仕
的问题是,不知何故求解达到一个地步,它不能解决每个t
的颂歌,并在某一点停止。因此您的y_calc
的尺寸小于y_exp
。
如果这不是你的问题,在Differences
功能的6号线更改diffmat
到
diffmat = y_calc' - y_exp(1:size(y_calc',1),:)
的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'
声明会给你无法用的结果。
[使用Scilab的Lotka Volterra模型的参数估计]的可能重复(https://stackoverflow.com/questions/22614164/parameters-estimation-on-lotka-volterra-model-with-scilab) – bummi