首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lsqcurvefit中的选项

使用lsqcurvefit中的选项
EN

Stack Overflow用户
提问于 2013-02-20 17:11:08
回答 2查看 1.5K关注 0票数 2

我将我的选项设置为

代码语言:javascript
复制
options=optimset('LevenbergMarquardt', 'on')

然后使用lsqcurvefit,如下所示:

代码语言:javascript
复制
[x,resnorm,residual,exitflag,output] = lsqcurvefit(@myfun, [0.01 0.3], xdata, ydata, [-inf -inf], [inf inf], options)

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

输出=

代码语言:javascript
复制
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算法!

如果能帮上忙我会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-20 18:00:22

有时,特定的算法不适合优化问题的特定配置。在这些情况下,Matlab会“后退”到其默认的优化算法。

对于您的特定问题/配置,Matlab可能无法使用Levenberg-Marquardt算法。

请仔细阅读文档,看看情况是否如此。

票数 2
EN

Stack Overflow用户

发布于 2013-03-26 05:49:26

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14976007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档