我正在使用lsqnonlin函数在matlab中进行参数估计。
在我的工作中,我需要绘制一个图表来显示lsqnonlin迭代的错误。所以,我需要知道在lsqnonlin中每个时间点运行的迭代。在lsqnonlin运行的时候,有人能帮助我如何提取迭代次数吗?
谢谢,
答案 0 :(得分:1)
您希望将选项参数设置'display'
传递给'iter'
或'iter-detailed'
http://www.mathworks.com/help/optim/ug/lsqnonlin.html#f265106
答案 1 :(得分:1)
我从未使用它,但查看lsqnonlin
的{{3}},似乎可以选择设置自定义help,在解算器的每次迭代中都会调用它。查看output function,似乎值optimValues.iteration
和optimValues.fval
会传递到函数中,这可能是您感兴趣的内容。
因此,您应该使用正确的签名定义自己的函数,并根据您的意愿,此函数在命令行上打印它,绘制图,将中间结果保存在矢量中等。最后,您需要通过此函数作为求解器的函数句柄:lsqnonlin(..., 'OutputFcn', @your_outputfun)
。
答案 2 :(得分:0)
这样做的简单方法是:
在大多数情况下,当性能不是一个大问题时,我会建议这样做。
但是,如果您无法承担这样的费用,请尝试edit lsqnonlin
并继续挖掘,直到找到迭代次数的点。然后更改功能以确保在此时存储所需的结果。 (不要忘记事后改回来。)
好消息是所有相关文件似乎都是可编辑的,坏消息是,在哪里可以找到当前的迭代次数并不是很清楚。快速搜索引导我fminbnd
,但我无法确认这是lsqnonlin
实际使用的。