首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++非线性最小二乘优化库

C++非线性最小二乘优化库
EN

Stack Overflow用户
提问于 2011-06-19 23:24:29
回答 4查看 17.1K关注 0票数 17

我正在寻找一个用C语言编写的库,它可以对目标函数进行优化(最好是Levenberg-Marquardt算法),并支持盒子约束、线性不等式约束和非线性不等式约束。

我已经尝试了几个库,但它们都没有为我的应用程序使用必要的约束类型:

  • GNU GSL (不支持all)
  • cMPFIT上的约束)(仅支持box constraints)
  • levmar (根本不支持非线性约束)

我目前正在探索NLopt,但我不确定是否可以使用所提供的任何算法实现最小二乘方法。

我发现很难相信没有一个库支持这个问题中的所有约束,所以我猜我在谷歌搜索的时候犯了一个错误。

我最近发现我可以从C中调用Matlab函数,虽然这可以很容易地解决问题,但我不想从C中调用Matlab函数,这在我的经验中并不快。

任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-22 19:01:31

我最终遵循的方法如下:

  • I使用NLopt进行优化,并构造目标函数来计算问题的平方误差
  • 最有希望的算法是(局部导数自由优化)。它支持框约束和非线性约束。线性不平等约束被引入为非线性约束,这通常是可行的。

简单的基准测试表明,它的收敛速度确实比Lev-Mar方法慢一点,但由于需要约束,速度被牺牲了。

票数 5
EN

Stack Overflow用户

发布于 2011-06-20 06:57:33

前段时间,我在研究C/C++最小二乘拟合库的状态。我记下了一些链接,包括你给出的链接,还有:

  • ALGLIB/optimization --带有边界constraints.
  • WNLIB/wnnlp的Lev-Mar -- C语言的一个约束非线性优化包(一般优化,而不是最小二乘)。约束是通过添加惩罚函数来处理的。

我还没有使用过任何一个库,但是NLopt对我来说似乎是最有前途的。如果它有专门的接口和(加权)最小二乘拟合算法,那就太好了。

顺便说一句,你关于Matlab的注释是否意味着它具有带有非线性约束的Lev-Mar?

票数 7
EN

Stack Overflow用户

发布于 2012-03-29 20:00:19

MPFIT:一个C语言的MINPACK-1最小二乘拟合库

MPFIT使用Levenberg-Marquardt技术来解决最小二乘问题。在其典型应用中,MPFIT将用于通过调整一组参数将用户提供的函数(“模型”)拟合到用户提供的数据点(“数据”)。MPFIT基于More‘和合作者的MINPACK-1 (LMDIF.F)。

http://cow.physics.wisc.edu/~craigm/idl/cmpfit.html

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

https://stackoverflow.com/questions/6403282

复制
相关文章

相似问题

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