2

我将选项设置为

options=optimset('LevenbergMarquardt', 'on')

然后lsqcurvefit像下面这样使用,

[x,resnorm,residual,exitflag,output] = lsqcurvefit(@myfun, [0.01 0.3], xdata, ydata, [-inf -inf], [inf inf], options)

但问题是我现在不知道为什么我会得到输出:

输出 =

firstorderopt: 3.4390e-07
   iterations: 4
    funcCount: 15
 cgiterations: 0
    algorithm: 'large-scale: trust-region reflective Newton'
      message: [1x425 char]

这是否意味着 Matlab 没有使用 Levenberg Marquardt 算法?

但我确实将我的选项设置为 levenberg Marquardt 算法!!!

我会很感激任何帮助。

4

2 回答 2

2

有时,特定算法不适合优化问题的特定配置。在这些情况下,Matlab “回退”到其默认优化算法。
对于您的特定问题/配置,Matlab 可能无法使用 Levenberg-Marquardt 算法。

仔细阅读文档,看看是否是这种情况。

于 2013-02-20T10:00:21.737 回答
1

我不能肯定地说,但约束 ( [-inf -inf], [inf inf]) 可能是你的问题。lsqcurvefit 的文档严格说 LMA 不能用于受约束的问题。如果包含约束,它将回退到信任区域。

是的,您的约束在数学上等同于“无约束”,但我不知道 MATLAB 函数本身将如何解释这些。我试图重新创建我的问题,但optimset('LevenbergMarquardt', 'on')已被弃用并产生错误(暗示你有一个相对较旧的版本)。即使使用新语法optimset('Algorithm', 'levenberg-marquardt')(为了没有约束,正确的方法是使用空矩阵(即[])。

是的,这个问题已经存在一个月了,但其他人可能会发现这个答案很有用。

于 2013-03-25T21:49:26.433 回答