Java プログラムで非線形最小化 (N 個の未知数の最小残差二乗) 問題を解決する必要があります。これらを解決する通常の方法は、Levenberg-Marquardtアルゴリズムです。いくつか質問があります
利用可能なさまざまな LM 実装の経験がある人はいますか? LM には少し異なる種類があり、アルゴリズムの正確な実装がその数値安定性に大きな影響を与えると聞いています。私の関数はかなりうまく機能しているので、これはおそらく問題にはなりませんが、もちろん、より良い代替手段の 1 つを選択したいと思います。ここに私が見つけたいくつかの選択肢があります:
FPL 統計グループの非線形最適化 Java パッケージ。これには、従来の Fortran MINPACK ルーチンの Java 翻訳が含まれています。
JLAPACK、別の Fortran 翻訳。
一部の Python 実装。純粋な Python は、jythonc を使用して Java にコンパイルできるため、問題ありません。
LM が必要とする最初の推測を行うために一般的に使用されるヒューリスティックはありますか?
私のアプリケーションでは、ソリューションにいくつかの制約を設定する必要がありますが、幸いなことにそれらは単純です: ソリューションが (物理的なソリューションであるために) 非負であることを要求するだけです。わずかにマイナスの解は、データの測定の不正確さの結果であり、明らかにゼロである必要があります。「通常の」LMを使用することを考えていましたが、未知数の一部が負になる場合はゼロに設定し、それから残りを解決するように繰り返します。本物の数学者はおそらく私を笑うでしょうが、これでうまくいくと思いますか?
ご意見ありがとうございます。
更新: これはロケット科学ではありません。解決するパラメーターの数 (N) は最大で 5 であり、データセットは解決を可能にするのに十分な大きさではないため、Java はこれを解決するのに十分効率的であると思います。そして、この問題は賢い応用数学者によって何度も解決されていると信じているので、自分で料理するのではなく、すぐに使える解決策を探しているだけです. たとえば、Scipy.optimize.minpack.leastsq は、純粋な Python であれば問題ないでしょう。