3

未知数(m)が多数ある方程式(n)が多数あります。ここで、mはnよりも大きくなります。n個の方程式と多数の観測値を使用してmの値を見つけようとしています。

C#でのLevenberg-Marquardtの実装をいくつか見てきましたが、複数の方程式を解くものは見つかりませんでした。たとえば、http://kniaz.net/software/LMA.aspxを調べたところ、パラメータとして1つの方程式しか受け取らないことを除けば、私が望むもののようです。同時。同様に、このパッケージ:http ://www.alglib.net/には、LMの優れた実装が含まれていますが、単一の方程式のみが含まれています。

C#に優れた実装があるのか​​、それともこれを実行できるC#コードで使用できるのか疑問に思いました。方程式の1次差分も計算するのはコストがかかるため、小さな有限差分を使用してそれらを近似できるようにしたいと考えています。

さらに、LMがどのように機能し、どのように実装するかについて、わかりやすくわかりやすい説明はありますか?私は自分でそれを実装するためにいくつかの数学の教科書を読んでみましたが、私は数学がかなり無知なので、説明のほとんどが私に失われています。

編集:

私の問題の詳細:

1)方程式は動的に形成され、問題が実行されるたびに変化する可能性があります

2)開始パラメータについてはよくわかりません。グローバルな最小値を見つけるために、ランダム化された開始パラメーターを使用して複数回実行することを計画しています。

編集2:

もう1つの質問、私はこの論文を読んでいます:http: //ananth.in/docs/lmtut.pdfそして私はセクション2の下で次を見ました:

x =(x1; x2 ... xn)はベクトルであり、各rjはℜnからℜまでの関数です。rjは残差と呼ばれ、m>=nであると想定されます。

関数よりも多くのパラメーターがある場合、LMが機能しないということですか?たとえば、関数のAとBを解きたい場合は、次のようにします。

Y = AX + B

パラメータベクトルのサイズが2(AとB)で、関数数が1であるため、これは不可能ですか?

4

1 に答える 1

1

Levenberg-Marquardtアルゴリズムは、問題を処理できます。ただし、その場合を実装するC#の実装は見つかりません[更新:alglib.netに必要な処理を実行させる方法の詳細については、以下の編集を参照してください]。MINPACKには、その場合のエントリポイントがあります(前述のように、差分を使用して導関数を近似する場合は、LMDIF1またはLMDIF)。StackOverflowの前の質問にリストされているツールを使用して、MINPACKのC /C++バージョンを自動的に翻訳してみてください。

「編集2」の質問については、「関数よりもパラメータが多いとLMが機能しないということですか?」という答えは、「いいえ、間違っています」です。その時点での論文の「m」は、実際には、方程式の数にデータポイントの数を掛けたものに等しくなります(「観測値」の意味が差の値であると仮定します)。すべての方程式の右辺と左辺の間)。言い換えれば、彼がそこで話しているr-sub-i関数は、まさにそれらの方程式の不一致(RHS-LHS)です。

重要な編集:今、あなたが見つけた2番目のパッケージalglib.netがあなたが望むことをすることがわかりました(しかし、それはGPLの下で無料でのみ利用可能であることに注意してください)。導関数を提供したくないので、「V」スキームを使用する必要があります。ここで、パラメーターにn個の方程式とk個の観測値があるとすると、fベクトルにはn*k個の要素があります。

f[i + j*n] = (RHS_of_equation[i](data_point[j]) - LHS_of_equation[i](data_point[j]))

(もちろん、iとjは0から始まります)。

于 2012-02-11T21:36:04.500 に答える