【问题标题】:Nonlinear function minimization C++非线性函数最小化 C++
【发布时间】:2014-02-03 13:55:53
【问题描述】:

我一直在尝试将代码从 MATLAB 移植到 C++,但偶然发现了一个非常意想不到的困难。我似乎找不到与 MATLAB 的 fminunc 等效的 C++。

简单地说,问题定义是最小化 f(x),对于向量 x,标量函数 f(x),以及初始猜测 x_0。

到目前为止,我的搜索努力只发现了一个名为 MinPack 的库,它无法解决 f(x) 是标量而 x 是向量的情况。

肯定有一种古老的编程语言可以免费实现非线性优化的经典数值方法吗?还是我在这里过于乐观?即使是诸如梯度下降之类的基本方法也将是一个巨大的改进......

【问题讨论】:

  • 人们可能会认为 Matlab 及其同类产品仍然蓬勃发展的市场证明您确实对自己的期望过于乐观,证明编写程序可以赚到钱广受好评的开源免费程序普遍可用。而且,更轻松一点,C++ 与时间一样古老 是一个非常有趣的说法。
  • @HighPerformanceMark 神说:photon_t letThereBeLight() { return light; }
  • 在我的辩护中,我 讽刺地称 C++ 与时间一样古老,但它只是比我老一点点,这一定很重要。
  • time_t letThereBeCode = 0 更多的是对 C 年龄的估计,而不是 C++。
  • 为了完整起见,我会说我最终使用了 Purple,事实证明它非常有用:cimne.com/purple

标签: c++ matlab mathematical-optimization numerical minimization


【解决方案1】:

检查NLopt。这是我在将东西从 MATLAB 移植到 C/C++ 时首先使用的,并且效果很好。

【讨论】:

    【解决方案2】:

    我个人的选择是IPOPT,一个通用的非线性求解器。它知道的远比你要求的多。

    其他选项包括:

    不幸的是后者会涉及interfacing with FORTRAN;这既痛苦又无聊,但真的不是一门火箭科学。

    【讨论】:

      【解决方案3】:

      这是另一个不错的选择:GSL,尤其是http://www.gnu.org/software/gsl/manual/gsl-ref_36.html#SEC498

      【讨论】:

        猜你喜欢
        • 2018-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多