由于我的答案之一已被引用,我将尝试澄清为什么我建议使用 IPOPT 而不是 MINPACK。
我对使用MINPACK 的反对与MINPACK 使用的算法无关,也与它们的实现有关。我的主要反对意见是该软件可以追溯到 1980 年,最后一次更新是在 1999 年。我怀疑他或该软件的任何其他作者是否会再密切关注它,并且没有团队积极支持它。我能在该软件上找到的唯一文档是 Jorge Moré 和其他 MINPACK 作者撰写的 1980 Argonne 技术报告。(第 1-3 章可以在这里找到,第 4 章可以在这里找到.) 在搜索MINPACK 源代码并仔细阅读文档(PDF 是扫描图像,无法搜索)后,我看不到任何适应约束的选项。由于非线性最小二乘问题的原始发布者想要解决受约束的非线性最小二乘问题,MINPACK 甚至不会解决该问题。
如果您查看 IPOPT 邮件列表,一些用户表示该软件包在非线性最小二乘 (NLS) 问题上的性能相对于 Levenberg-Marquardt 算法和更专业的 NLS 算法(参见此处、此处和此处)是混合的。IPOPT 相对于 NLS 算法的性能当然取决于问题。鉴于用户反馈,IPOPT 似乎是相对于 NLS 算法的合理推荐。
但是,您提出了一个很好的观点,即应该研究 NLS 算法。我同意。我只是认为应该使用比 MINPACK 更现代的包,因为我相信它会表现更好,更实用,并得到支持。Ceres似乎是一个有趣的候选包,但它现在无法处理受限问题。陶将适用于框约束最小二乘问题,尽管它没有实现经典的 Levenberg-Marquardt,而是实现了无导数算法。无导数算法可能适用于大规模问题,但我不会将其用于小规模问题。我找不到任何其他软件包可以激发他们对软件工程的极大信心。例如,乍一看,GALAHAD 似乎没有使用版本控制或任何自动化测试。MINPACK 似乎也不做这些事情。如果您有使用 MINPACK 的经验或有关更好软件的建议,我会全力以赴。
考虑到所有这些,回到我评论的引用:
任何方程组都相当于一个优化问题,这就是为什么基于牛顿的优化方法看起来很像求解非线性方程组的基于牛顿的方法。
更好的评论可能是这样的:
当我们想解决一个系统n方程与n未知数g(x)=0,我们可以将其表述为最小二乘优化问题。( Dmitri Bertsekas的《非线性规划》第 2 版第 102 页最后一段的释义。)
这个陈述甚至适用于求解约束下的方程组。对于变量有约束的情况,我不知道有任何算法被认为是“方程求解器”。我所知道的常见方法(可能会受到优化实验室中几个学期的优化课程和研究的影响)是将方程组的约束合并到优化公式中。如果您要尝试在类似 Newton-Raphson 的方案中使用约束来求解方程,您可能最终会得到投影梯度或投影信任区域方法,这与约束优化中使用的方法非常相似。