我需要解決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