【发布时间】:2017-08-24 12:13:52
【问题描述】:
我试图重现以下链接的脚本: Parameters estimation on Lotka Volterra model with Scilab
结果中的错误与其中描述的错误相似。 您可以指导我正确运行脚本。 格拉西亚斯 爱马仕
【问题讨论】:
标签: optimization parameters scilab estimation
我试图重现以下链接的脚本: Parameters estimation on Lotka Volterra model with Scilab
结果中的错误与其中描述的错误相似。 您可以指导我正确运行脚本。 格拉西亚斯 爱马仕
【问题讨论】:
标签: optimization parameters scilab estimation
问题是求解器以某种方式达到了一个点,它无法解决每个t 上的 ode 并在某个点停止。因此,您的y_calc 的大小小于y_exp。
如果这对您来说不是问题,请将 Differences 函数第 6 行的 diffmat 更改为
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),:)
你仍然会收到来自 ode 的警告。
既然你要求一个正在运行的程序,我已经使用try catch 语句来抛弃错误并让程序继续运行。你不应该。这意味着您的问题定义不明确:参数选择不当或无法通过数值求解。我建议研究程序背后的数学并找出为什么某些参数可能会破坏ode 算法。
你不应该听我的回答还有另一个原因。如您所见,当我发现错误时,我会给y_calc 一些价值。但这在数学上是荒谬的,因为优化问题依赖于解决方案充其量近似于初始问题的事实。我 99% 确信 y_calc = y_exp' 语句会给你带来不可用的结果。
【讨论】: