使用lsqcurvefit中的选项

时间:2013-02-20 09:11:08

标签: matlab levenberg-marquardt

我将选项设置为

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算法!!!

我很感激任何帮助。

2 个答案:

答案 0 :(得分:2)

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

仔细阅读文档,看看是否属实。

答案 1 :(得分:1)

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

是的,你的约束在数学上等同于'no constaints',但我不知道MATLAB函数本身将如何解释它们。我尝试在我的最后重新创建问题,但optimset('LevenbergMarquardt', 'on')已被弃用并生成错误(暗示您的版本相对较旧)。即使使用新语法(optimset('Algorithm', 'levenberg-marquardt')),它在我的结尾也能正常运行(使用2011b)。为了没有约束,正确的方法是使用空矩阵(即[])。

是的,问题是一个月前,但其他人可能会觉得答案有用。