【问题标题】:How to get the iteration number of lsqnonlin如何获取 lsqnonlin 的迭代次数
【发布时间】:2013-09-25 10:00:17
【问题描述】:

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

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

谢谢,

【问题讨论】:

    标签: matlab estimation


    【解决方案1】:

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

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

    【讨论】:

    • 2012b 中尚未记录此选项。希望该功能已经存在,但如果不是,我的答案可能仍然有用。
    • @DennisJaheruddin 您一直能够设置显示以在每次迭代时向您显示信息。看起来他们可能稍微改变了它,我曾经使用 optimset 来做到这一点:mathworks.com/help/optim/ug/optimset.html
    【解决方案2】:

    我自己从未使用过它,但查看lsqnonlinhelp,似乎有一个设置自定义output function 的选项,在求解器的每次迭代期间都会调用它。查看specification,似乎optimValues.iterationoptimValues.fval 的值被传递到函数中,这可能是您感兴趣的内容。

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

    【讨论】:

    • +1 经常需要输出 fcn,但在我的经验中很少见。
    【解决方案3】:

    简单的方法是:

    1. 从少量(最大)迭代开始
    2. 得到结果
    3. 增加迭代次数
    4. 得到结果
    5. 如果使用了最大迭代次数,则转到第 3 步

    在性能不是大问题的大多数情况下,我会建议这样做。

    但是,如果您不能这样做,请尝试 edit lsqnonlin 并继续挖掘,直到找到迭代次数的点。然后更改函数以确保存储此时所需的结果。 (以后别忘了改回来)。

    好消息是所有相关文件似乎都是可编辑的,坏消息是目前尚不清楚在哪里可以找到当前的迭代次数。通过快速搜索,我找到了fminbnd,但我没能确认这实际上是由lsqnonlin 使用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-04
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2017-01-18
      • 2017-07-03
      相关资源
      最近更新 更多