我有大量方程(n)和大量未知数(m),其中 m 大于 n。我正在尝试使用 n 个方程和大量观察值来找到 m 的值。
我已经查看了 C# 中 Levenberg-Marquardt 的一些实现,但我找不到任何可以解决超过 1 个方程的方法。例如,我查看了http://kniaz.net/software/LMA.aspx,这似乎是我想要的,除了它只需要一个方程作为参数,我想在同时。同样,这个包:http ://www.alglib.net/包含一个很好的 LM 实现,但仅适用于单个方程。
我想知道 C# 中是否有任何好的实现,或者我可以与我的 C# 代码一起使用可以做到这一点?尝试计算我的方程的一阶微分也将是昂贵的,所以我希望能够使用小的有限差分来近似它们。
此外,是否有任何关于 LM 如何工作以及如何实现它的好且易于理解的解释?我曾尝试阅读一些数学教科书以自己实现它,但我对数学一无所知,所以大部分解释都在我身上丢失了。
编辑:
我的问题的更多细节:
1)方程是动态形成的,可以随着我的问题的每次运行而变化
2)我对起始参数没有很好的猜测。我计划使用随机启动参数多次运行它,以找到全局最小值。
编辑2:
还有一个问题,我正在阅读这篇论文: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,因此这是不可能的?