我将选项设置为
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算法!!!
我很感激任何帮助。
答案 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)。为了没有约束,正确的方法是使用空矩阵(即[]
)。
是的,问题是一个月前,但其他人可能会觉得答案有用。