我将我的选项设置为
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算法!
如果能帮上忙我会很感激的。
发布于 2013-02-20 18:00:22
有时,特定的算法不适合优化问题的特定配置。在这些情况下,Matlab会“后退”到其默认的优化算法。
对于您的特定问题/配置,Matlab可能无法使用Levenberg-Marquardt算法。
请仔细阅读文档,看看情况是否如此。
发布于 2013-03-26 05:49:26
我不能肯定,但约束([-inf -inf], [inf inf])可能是您的问题。lsqcurvefit的文档严格说明了LMA不能用于约束问题。如果包含约束,它将回落到信任域。
是的,您的约束在数学上等同于“无约束”,但我不知道MATLAB函数本身将如何解释这些约束。我试图在我这一端重现这个问题,但是optimset('LevenbergMarquardt', 'on')已经被弃用并生成了一个错误(这意味着您有一个相对较旧的版本)。即使在使用新语法(optimset('Algorithm', 'levenberg-marquardt'))时,它在我这一端也能正确运行(使用2011b)。要没有约束,正确的方法是使用空矩阵(即[])。
是的,这个问题已经提了一个月了,但其他人可能会发现答案很有用。
https://stackoverflow.com/questions/14976007
复制相似问题