未知数(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であるため、これは不可能ですか?