首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Levenberg-Marquardt算法是如何以一种可以理解的方式详细工作的?

Levenberg-Marquardt算法是如何以一种可以理解的方式详细工作的?
EN

Stack Overflow用户
提问于 2009-07-16 09:25:09
回答 4查看 24.8K关注 0票数 15

我是一名程序员,想要了解Levenberg-Marquardt曲线拟合算法是如何工作的,这样我就可以自己实现它。在读者是程序员而不是数学家的情况下,有没有好的教程可以详细解释它是如何工作的?

我的目标是在opencl中实现这个算法,这样我就可以让它运行硬件加速。

EN

回答 4

Stack Overflow用户

发布于 2009-10-31 03:27:03

最小化函数就像试图找到曲面上的最低点。想象一下,你走在一个丘陵的表面上,你正试图到达最低点。你会找到下坡的方向,然后一直走到它不再下坡。然后,你会选择一个新的方向,这个方向是下坡的,沿着这个方向走,直到它不再下坡,依此类推。最终(希望)你会到达一个没有方向走下坡路的地步。然后,您将处于(本地)最小值。

LM算法和许多其他最小化算法都使用此方案。

假设被最小化的函数是F,并且我们在迭代中处于x(n)点。我们希望找到下一个迭代x(n+1)使得F(x(n+1)) < F(x(n)),即函数值较小。为了选择x(n+1),我们需要两件事,从x(n)开始的方向和步长(在该方向上走多远)。LM算法按如下方式确定这些值:

首先,计算F在点x(n)处的线性近似。线性函数的下坡方向很容易找到,因此我们使用线性逼近函数来确定下坡方向。接下来,我们需要知道我们可以在这个选择的方向上走多远。如果我们的近似线性函数在x(n)附近的大范围内是F的一个很好的近似,那么我们可以采取相当大的步骤。如果它只是一个非常接近x(n)的良好近似值,那么我们只能迈出非常小的一步。

这就是LM所做的-计算F在x(n)处的线性近似,从而给出下坡方向,然后它根据线性函数在x(n)处对F的逼近程度来计算要走多大的一步。LM通过在这样确定的方向上基本上走一步,并将对F的线性近似减少到实际函数F的减少程度来计算近似函数的好坏。如果它们很接近,则近似函数很好,我们可以采取更大的步长。如果它们不接近,那么近似函数就不好,我们应该后退一步,采取更小的步骤。

票数 28
EN

Stack Overflow用户

发布于 2013-08-01 17:31:33

LM算法的基本思想可以在几页内解释-但对于快速和健壮的生产级实现,许多微妙的优化是必要的。最先进的技术仍然是由Moré等人实现的Minpack,由MORé1978 (http://link.springer.com/content/pdf/10.1007/BFb0067700.pdf)和Minpack用户指南(http://www.mcs.anl.gov/~more/ANL8074b.pdf)详细记录。为了研究代码,我的C翻译(https://jugit.fz-juelich.de/mlz/lmfit)可能比原始的Fortran代码更容易访问。

票数 5
EN

Stack Overflow用户

发布于 2009-07-16 09:38:57

试试Numerical Recipes (Levenberg-Marquardt在15.5节中)。它可以在网上找到,我发现他们以一种详细的方式解释了算法(他们有完整的源代码,你可以得到更详细的……),但却是可以访问的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1136416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档