如何获取lsqnonlin的迭代次数

时间:2013-09-25 10:00:18

标签: matlab estimation

我正在使用lsqnonlin函数在matlab中进行参数估计。

在我的工作中,我需要绘制一个图表来显示lsqnonlin迭代的错误。所以,我需要知道在lsqnonlin中每个时间点运行的迭代。在lsqnonlin运行的时候,有人能帮助我如何提取迭代次数吗?

谢谢,

3 个答案:

答案 0 :(得分:1)

您希望将选项参数设置'display'传递给'iter''iter-detailed'

http://www.mathworks.com/help/optim/ug/lsqnonlin.html#f265106

答案 1 :(得分:1)

我从未使用它,但查看lsqnonlin的{​​{3}},似乎可以选择设置自定义help,在解算器的每次迭代中都会调用它。查看output function,似乎值optimValues.iterationoptimValues.fval会传递到函数中,这可能是您感兴趣的内容。

因此,您应该使用正确的签名定义自己的函数,并根据您的意愿,此函数在命令行上打印它,绘制图,将中间结果保存在矢量中等。最后,您需要通过此函数作为求解器的函数句柄:lsqnonlin(..., 'OutputFcn', @your_outputfun)

答案 2 :(得分:0)

这样做的简单方法是:

  1. 从少量(最大)迭代开始
  2. 获取结果
  3. 增加迭代次数
  4. 获取结果
  5. 如果使用最大迭代次数,请转到步骤3
  6. 在大多数情况下,当性能不是一个大问题时,我会建议这样做。

    但是,如果您无法承担这样的费用,请尝试edit lsqnonlin并继续挖掘,直到找到迭代次数的点。然后更改功能以确保在此时存储所需的结果。 (不要忘记事后改回来。)

    好消息是所有相关文件似乎都是可编辑的,坏消息是,在哪里可以找到当前的迭代次数并不是很清楚。快速搜索引导我fminbnd,但我无法确认这是lsqnonlin实际使用的。