我需要解决Java程序中的非线性最小化(N个未知数的最小残差平方)问题。解决这些问题的常用方法是Levenberg-Marquardt算法。我有几个问题数值求解非线性方程
有没有人有不同的LM实现可用的经验? LM存在稍微不同的风味,我听说算法的确切实现对其数值稳定性有重大影响。我的功能非常好,所以这可能不会成为问题,但我当然想选择一个更好的替代方案。以下是我找到的一些替代方案:
FPL Statistics Group's Nonlinear Optimization Java Package。这包括经典Fortran MINPACK例程的Java翻译。
JLAPACK,另一个Fortran翻译。
一些Python实现。纯Python会很好,因为它可以通过jythonc编译为Java。
是否有任何常用启发式方法来做LM需要的初始猜测?
在我的应用程序中,我需要对解决方案设置一些限制,但幸运的是它们很简单:我只是要求解决方案(为了成为物理解决方案)是非负的。稍微负面的解决方案是数据测量不准确的结果,显然应该为零。我正在考虑使用“常规”LM,但是迭代,以便如果某些未知变成负数,我将它设置为零,并从中解决其余部分。真正的数学家可能会嘲笑我,但你认为这可能有用吗?
感谢您的意见!这不是火箭科学,需要解决的参数数(N)最多为5,而且数据集勉强够大以至于不能解决问题,所以我相信Java非常高效,足以解决这个问题。这个。我相信这个问题已经被聪明的应用数学家解决了很多次,所以我只是寻找一些现成的解决方案,而不是自己做。例如。 Scipy.optimize.minpack.leastsq可能会很好,如果它是纯Python的话。
你是否认为许多非线性算法只在正确初始化的情况下才起作用?初始化通常来自一个更简单的线性算法(通常优化次优度量)? – Vlad 2015-04-30 06:35:16