2013-02-20 44 views
2

使用选项设置我的选项在lsqcurvefit

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

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

仔细阅读文档以查看是否属于这种情况。

1

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

是的,你的约束在数学上等同于'没有约束',但我不知道MATLAB函数本身如何解释这些约束。我试图在我的结尾重新创建问题,但optimset('LevenbergMarquardt', 'on')已被弃用,并生成一个错误(意味着您有一个相对较旧的版本)。即使在使用新的语法(optimset('Algorithm', 'levenberg-marquardt'))时,它在我的最后(使用2011b)也表现正确。为了不存在约束,正确的方法是使用空矩阵(即[])。

是的,问题是一个月大,但别人可能会找到有用的答案。

相关问题