C的非线性最小二乘优化库

alk*_*kar 16 c optimization least-squares levenberg-marquardt

我正在寻找一个C语言库,它将对目标函数进行优化(最好是Levenberg-Marquardt算法),并且将支持框约束,线性不等式约束和非线性不等式约束.

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

  • GNU GSL(根本不支持约束)
  • cMPFIT(仅支持框约束)
  • levmar(根本不支持非线性约束)

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

我发现很难相信没有一个库可以支持这个问题的全部限制,所以我猜我在google搜索时出错了.

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

任何帮助将不胜感激.

mar*_*cin 6

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

  • ALGLIB /优化 - 具有边界约束的Lev-Mar.

  • WNLIB/wnnlp - C中的约束非线性优化包(一般优化,非最小二乘).通过添加惩罚函数来处理约束.

我还没有使用任何库,但NLopt对我来说似乎最有希望.如果它具有(加权)最小二乘拟合的专用接口和算法,那将是很好的.

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


alk*_*kar 5

我最终遵循的方法如下:

  • 我使用NLopt进行优化,构造目标函数来计算问题的平方误差.

  • 显示最有希望的结果的算法是COBYLA(无局部导数优化).它支持框约束和非线性约束.线性不等式约束作为非线性约束引入,这通常是可行的.

简单的基准测试表明,它的收敛速度比Lev-Mar方法稍慢,但由于需要约束,因此牺牲了速度.


小智 5

MPFIT:C中的MINPACK-1最小二乘拟合库

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

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