I have a large number of equations (n) with a large number of unknowns (m) where m is larger than n. I am trying to find the values of m using the n equations and a large set of observed values.
I have looked at some implementations of Levenberg-Marquardt in C# but I couldn't find any that solve more than 1 equation. For instance, I looked at http://kniaz.net/software/LMA.aspx and it seems to be what I want except that it only takes a single equation as a parameter, I want to solve for a number of equations at the same time. Similarly this package: http://www.alglib.net/ contains a good implementation of LM but only for a single equation.
I was wondering if there are any good implementations in C# or that I can use with my C# code that can do this? It will be costly to attempt to work out the first order differentials of my equations as well so I am hoping to be able to use small finite differences to approximate them.
Furthermore is there any good and easy to understand explanation of how LM works and how to implement it? I have tried reading through some maths textbooks in order to implement it myself but I am pretty clueless at maths so most of the explanation is lost on me.
edit:
More details of my problem:
1) The equations are formed dynamically and can change with each running of my problem
2) I have no good guess for the starting parameters. I am planning to run it multiple times with randomised starting parameters in order to find the global minimum.
Edit 2:
One more question, I am reading this paper: http://ananth.in/docs/lmtut.pdf and I saw the following under section 2:
x = (x1; x2 ... xn) is a vector, and each rj is a function from ℜn to ℜ. The rj are referred to as a residuals and it is assumed that m >= n.
Does that mean that LM does not work if I have more parameters than functions? For instance, if I want to solve A and B for the function:
Y = AX + B
It won't be possible due to the fact that my parameter vector is of size 2 (A and B) and my function count is 1?