问题标签 [levenberg-marquardt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
654 浏览

algorithm - 用于求解非线性方程的 levenberg-marquardt 方法

我尝试使用 Levenberg-Marquardt 算法演示实现基于数值优化的 levenberg-marquardt 方法来求解 Julia 上的非线性方程。这是我的代码:

但从任何起点开始,这一步都不被接受。我做错了什么?任何帮助,将不胜感激。

0 投票
0 回答
266 浏览

computer-vision - 如何最小化多个图像单应性的全局误差?

我正在将多个图像与平面的任意 3D 视图拼接在一起。我对哪些图像重叠进行了一些估计,并对重叠图像对之间的每个成对单应性进行了粗略估计。但是,我需要通过最小化所有图像的全局误差来改进我的单应性。

我已经阅读了几篇不同的论文,其中有各种方法可以做到这一点,我认为最好的方法是使用非线性优化,例如 Levenberg-Marquardt,理想情况下是采用稀疏和/或并行的快速方式。

理想情况下,我想使用现有的库,例如 sba 或 pba,但我真的很困惑如何将计算限制为仅估计单应性的八个参数,而不是相机姿势和对象位置的完整 3 个维度。我还发现了 Szeliski 的这个方便的解释(参见第 50 页的第 5.1 节),但同样,数学都是针对旋转相机而不是平面的。

如何使用 LM 最小化一组单应性的全局误差?有没有一种快速的方法可以使用现有的捆绑调整库来做到这一点?

注意:我不能使用仅依赖于旋转相机运动的方法(例如在 openCV 中),因为这些方法无法准确估计相机位姿,我也不能使用完整的 3D 重建方法(例如 SfM),因为它们的参数太多会导致在非平面点云中。我绝对需要特定于完整的 8 参数单应性的东西。相机内在函数并不重要,因为我已经在前面的步骤中纠正了这些。

谢谢你的帮助!

0 投票
0 回答
516 浏览

c++ - CvStereoCalibrate (CvLevMarq::updateAlt()) 需要无限的时间

我有一些问题。我尝试校准我的相机。我写了一些函数来做到这一点,但它需要一些奇怪的数据,所以我尝试用 O'Reilly OpenCV 书中的例子来检查它(第 12 章中有一个例子 12-3:投影和 3D 视觉)。我将该示例调整为我的程序,但程序挂起(如果它是好词)。我更深入地检查了 opencv 的函数,发现在 cvStereoCalibrate 中有 cvCalibrateCamera2 包含问题:在优化部分该行:

需要很长时间(无限)。

为什么需要这么长时间(好几个小时)?或者也许我犯了一些错误,但我不知道在哪里(我从书中重写了它,也许是错的)

这是我的代码:

需要很长时间

0 投票
0 回答
221 浏览

matlab - 协方差矩阵系统辨识matlab

我们正在从给定的响应开始进行系统识别,我们希望将其与我们的数学系统相匹配,获得一些未知的参数。我们正在使用 MATLAB 中内置的 PEM 算法,选项设置为 Levenberg-Marquardt。

一切都按计划进行,我们获得了与给定曲线 94% 匹配的所需参数。

问题是当我们拉取与这些参数相关的协方差矩阵时,所有条目都比预期的要大。例如,第一个参数在 order 中,或者1e-3它的方差类似于1e9......这似乎不正确。

有人知道为什么会这样吗?

提前感谢谁会回答,我会发布一段与该问题相关的代码。

0 投票
1 回答
4557 浏览

scipy - SciPy:最小平方与最小平方

SciPy 为非线性最小二乘问题提供了两个函数:

optimize.leastsq()仅使用 Levenberg-Marquardt 算法。

optimize.least_squares()允许我们选择 Levenberg-Marquardt、Trust Region Reflective 或 Trust Region Dogleg 算法。

我们应该总是使用least_squares()而不是leastsq()吗?

如果是这样,后者的目的是什么?

0 投票
1 回答
122 浏览

c++ - 为 Levenberg-Marquardt 算法构建 Mex 时出错 - 说存在的目录不存在

我正在尝试从 Manolis Lourakis 用 C 语言编写的 Levenberg-Marquardt 算法构建一个 mex 文件(在此处可用))。我已经做了很多搜索,但还没有找到类似的问题或解决方案(来自这个论坛的很多!)。

作者包含了一个 C 网关功能,我已经设法解决了我从 makefile 中得到的错误。现在,当我尝试构建 makefile 时,出现以下错误:

这似乎是说 /Applications/MATLAB_R2016b.app/bin/maci64 不是目录“maci64”的路径。这很奇怪,因为当您按照路径时,这个目录肯定在那里。我用来构建文件的代码在 README 文件中用作指令:

其中带有选项 L 的路径只是作者提供的 'levmar' 库中包含的所有文件的路径。

我的操作系统是 mac OS 10.12.1,MATLAB 版本是 MATLAB_R2016b。

我也在 OS X 10.11.6 和 MATLAB_R2015b 上运行的系统上尝试过这个,但得到了等效的错误。

任何帮助将非常感激。

非常感谢。

0 投票
1 回答
6585 浏览

scipy - SciPy.optimize.least_squares() 目标函数问题

我试图通过优化三个未知参数 a、b 和 c0 来最小化高度非线性函数。我正在尝试在 Python 3 中复制赌场轮盘赌球的一些控制方程。

这是研究论文的链接:http: //www.dewtronics.com/tutorials/roulette/documents/Roulette_Physik.pdf

我将在论文中引用方程(35)和(40)。基本上,我对轮盘上旋转的轮盘球进行秒表圈数测量。对于连续的每一圈,由于非保守摩擦力的动量损失,单圈时间会增加。然后我进行这些时间测量并使用等式 (40) 中的 Levenberg-Marquardt 最小二乘法拟合等式 (35)。

我的问题是双重的:(1)我正在使用 scipy.optimize.least_squares() 方法='lm',我不确定如何编写目标函数!现在我写的函数和论文中的完全一样:

现在,在文档示例中,我从未见过以我的方式编写的目标函数。在文档中,目标函数总是返回残差,而不是残差的平方。此外,在文档中,他们从不使用总和!所以我想知道总和和平方是否在引擎盖下自动处理least_squares()

(2) 也许我的第二个问题是由于我没有理解如何编写目标函数。但无论如何,我无法让算法收敛到最小值。我知道这是因为 levenberg 算法是“贪婪的”并且在最接近的最小值附近停止,但我认为考虑到不同的初始猜测,我至少能够收敛到大致相同的结果。随着最初猜测的轻微变化,我得到了不同符号的参数结果。此外,我还没有找到允许算法收敛的初始猜测组合!它总是在找到解决方案之前超时。我什至将函数评估的数量增加到 10,000 次,看看是否可以。无济于事!

也许有人可以在这里阐明我的错误!我对 python 和 scipy 库还比较陌生!

tk这是我从此处的视频中测量的一些示例数据: https ://www.youtube.com/watch?v=0Zj_9ypBnzg

谢谢

0 投票
1 回答
416 浏览

c++ - 如何设置 Eigen DesnseFunctor 输入和值大小以用于 Eigen Levenberg Marquardt

问题:我并不总是知道要使用 Levenberg Marquardt 的雅可比或函数向量的确切大小。因此,我需要在编译时设置它们的尺寸。

预期:在我声明 MyFunctorDense 的一个实例之后。我可以将“InputsAtCompileTime”设置为我的输入大小,并将“ValuesAtCompileTime”设置为我的值大小。然后我的雅可比矩阵 aFjac 应该有维度 tValues x tInputs,而我的函数向量 aH 应该有维度 tValues x 1。

观察到在此处输入图像描述

.h 文件

.cpp 文件 #pragma once #include "stdafx.h" #include "Main.h"

0 投票
1 回答
647 浏览

c++ - 我可以将 Eigen Levenberg Marquardt 与线性方程和常数 Jacobian 一起使用吗?

问题:我正在尝试使用 eigen unsupported levenberg marquardt 来找到两个线性方程的最佳参数。当我运行我的代码时,算法会很快收敛到错误的答案。

预期:我使用参数 tFx =13.7、tFy = 13.5、tCx = 0.0、tCy = 0.0 生成了一堆术语 tU、tX、tZ、tY 和 tV。我希望 LM 返回用于生成 tU、tX、tZ、tY 和 tV 的相同值。

观察到:当我在方程上运行 LM 时,它产生 tFx = 13.0,tFy = 13.0,tCx = 0.0,tCy =0.0。

方法:我试图找到以下两个方程的最佳参数集:

我的参数向量是:

aH 是我的函数向量。上面的方程产生了一个不依赖于 aP 的常数雅可比行列式。

我主要按照此处显示的示例使用。在示例中,我使用了以下运算符和 df:

我检查最小值的方式如下:

我省略了所有初始化的废话,这样问题就很清楚了。我非常感谢任何帮助,因为此代码不受支持。对这个问题的任何回答只会帮助其他人更好地理解 eigen 不受支持的函数。

0 投票
1 回答
792 浏览

c++ - 了解 Levenberg Marquardt 枚举返回。

问题:我最近的任务是设计一个非线性求解器,但我的求解器没有收敛到正确的解决方案。

**预期**:'minimize(x)' 方法应该将我的参数向量 x 减少到最小值。

观察到:在我调用“minimize(x)”后,我得到一个状态返回,上面写着 RelativeErrorTooSmall。

问题:有人可以解释一下这个枚举值是什么意思吗?

文档:关于 Eigen Levenberg Marquardt 类的唯一可用文档基本上是它的 .h 文件。以下是枚举列表:

这是头文件的链接: https ://eigen.tuxfamily.org/dox/unsupported/NonLinearOptimization_2LevenbergMarquardt_8h_source.html

这是之前的堆栈溢出问题,其中包含测试程序: 如何使用 Eigen 不受支持的 levenberg marquardt 实现?