【问题标题】:Scilab: Parameters estimation on Lotka Volterra model ScilabScilab:Lotka Volterra 模型 Scilab 的参数估计
【发布时间】:2017-08-24 12:13:52
【问题描述】:

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

结果中的错误与其中描述的错误相似。 您可以指导我正确运行脚本。 格拉西亚斯 爱马仕

【问题讨论】:

标签: optimization parameters scilab estimation


【解决方案1】:

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

问题是求解器以某种方式达到了一个点,它无法解决每个t 上的 ode 并在某个点停止。因此,您的y_calc 的大小小于y_exp

如果这对您来说不是问题,请将 Differences 函数第 6 行的 diffmat 更改为

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),:)

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

为什么不好

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多