1

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

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

谢谢,

4

3 回答 3

1

我自己从未使用过它,但查看 的帮助lsqnonlin似乎有一个选项可以设置自定义输出函数,在求解器的每次迭代期间都会调用该函数。查看规范,似乎值optimValues.iterationoptimValues.fval被传递到函数中,这可能是您感兴趣的事情。

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

于 2013-09-25T10:43:24.910 回答
1

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

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

于 2013-09-25T10:20:39.247 回答
0

执行此操作的简单方法是:

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

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

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

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

于 2013-09-25T10:20:28.863 回答