0

我正在尝试在 C 中重建一些使用 fsolve 函数的 Matlab 代码。从文档来看,它使用了“信任区域反射”算法(我已经使用 Levenberg-marquardt 算法构建了它,它的收敛方式完全不同)。任何人都可以推荐一个在 C/C++ 中进行这种优化的库吗?

4

3 回答 3

4

不确定在“信任区域”定义中添加了什么“反射”。然而,Knitro是一个强大的信任域内点优化器,具有 C/C++ 接口。不幸的是,Knitro仅面向学生免费提供限量版。完整版需要商业许可证。

还有Ipopt,它不是信任区域,但仍然是一个强大的基于 C/C++ 的大规模非线性约束优化引擎,具有开源许可证。

于 2012-10-25T13:42:38.337 回答
3

您是否尝试过检查您的函数是否是凸函数,如果 LM 和其他一些凸优化算法收敛不同,则基函数很可能不是凸函数。您还检查了成本函数是否至少为 2 阶。如果是这种情况,则最小化成本函数的平方可能比单独最小化成本函数更好。

于 2012-11-26T11:32:54.870 回答
2

有两种通用算法可以保证全局收敛(在标准假设下,不要问:))。这些方法是线搜索和信任区域方法。如果您愿意,您可以在Nocedal-Wright:数值优化一书中阅读更多关于此主题的信息。

我最近没有尝试过 Knitro。

Ipopt是我尝试过的最强大的求解器,我强烈推荐它。它实现了线搜索方法,并用 C++ 编写。

于 2012-10-25T17:43:04.123 回答