- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Levenberg-Marquardt algorithm最小化 6 个参数的非线性函数。每次最小化我有大约 50 个数据点,但我没有得到足够准确的结果。我的参数彼此相差几个数量级这一事实会如此重要吗?如果是,我应该在哪里寻找解决方案?如果没有,您在工作中遇到了 LMA 的哪些局限性(这可能有助于发现我的应用程序的其他问题)?非常感谢您的帮助。
编辑:我要解决的问题是确定最佳转换 T:
typedef struct
{
double x_translation, y_translation, z_translation;
double x_rotation, y_rotation, z_rotation;
} transform_3D;
将一组 3D 点拟合到一组 3D 线。详细地说,我有一组 3D 点的坐标和相应的 3D 线的方程,它们应该通过这些点(在理想情况下)。 LMA 正在最小化转换后的 3D 点到相应 3D 线的距离总和。转换函数如下:
cv::Point3d Geometry::transformation_3D(cv::Point3d point, transform_3D transformation)
{
cv::Point3d p_odd,p_even;
//rotation x
p_odd.x=point.x;
p_odd.y=point.y*cos(transformation.x_rotation)-point.z*sin(transformation.x_rotation);
p_odd.z=point.y*sin(transformation.x_rotation)+point.z*cos(transformation.x_rotation);
//rotation y
p_even.x=p_odd.z*sin(transformation.y_rotation)+p_odd.x*cos(transformation.y_rotation);
p_even.y=p_odd.y;
p_even.z=p_odd.z*cos(transformation.y_rotation)-p_odd.x*sin(transformation.y_rotation);
//rotation z
p_odd.x=p_even.x*cos(transformation.z_rotation)-p_even.y*sin(transformation.z_rotation);
p_odd.y=p_even.x*sin(transformation.z_rotation)+p_even.y*cos(transformation.z_rotation);
p_odd.z=p_even.z;
//translation
p_even.x=p_odd.x+transformation.x_translation;
p_even.y=p_odd.y+transformation.y_translation;
p_even.z=p_odd.z+transformation.z_translation;
return p_even;
}
希望这个解释能有点帮助...
编辑2:
下面粘贴了一些示例数据。 3D 线由中心点和方向矢量描述。所有线的中心点为 (0,0,0),每个向量的“uz”坐标等于 1。方向向量的“ux”坐标集:
-1.0986, -1.0986, -1.0986,
-1.0986, -1.0990, -1.0986,
-1.0986, -1.0986, -0.9995,
-0.9996, -0.9996, -0.9995,
-0.9995, -0.9995, -0.9996,
-0.9003, -0.9003, -0.9004,
-0.9003, -0.9003, -0.9003,
-0.9003, -0.9003, -0.8011,
-0.7020, -0.7019, -0.6028,
-0.5035, -0.5037, -0.4045,
-0.3052, -0.3053, -0.2062,
-0.1069, -0.1069, -0.1075,
-0.1070, -0.1070, -0.1069,
-0.1069, -0.1070, -0.0079,
-0.0079, -0.0079, -0.0078,
-0.0078, -0.0079, -0.0079,
0.0914, 0.0914, 0.0913,
0.0913, 0.0914, 0.0915,
0.0914, 0.0914
方向向量的“uy”坐标集:
-0.2032, -0.0047, 0.1936,
0.3919, 0.5901, 0.7885,
0.9869, 1.1852, -0.1040,
0.0944, 0.2927, 0.4911,
0.6894, 0.8877, 1.0860,
-0.2032, -0.0047, 0.1936,
0.3919, 0.5902, 0.7885,
0.9869, 1.1852, 1.0860,
0.9869, 1.1852, 1.0861,
0.9865, 1.1853, 1.0860,
0.9870, 1.1852, 1.0861,
-0.2032, -0.0047, 0.1937,
0.3919, 0.5902, 0.7885,
0.9869, 1.1852, -0.1039,
0.0944, 0.2927, 0.4911,
0.6894, 0.8877, 1.0860,
-0.2032, -0.0047, 0.1935,
0.3919, 0.5902, 0.7885,
0.9869, 1.1852
和 (x. y. z. x. y. z. x. y. z. ...) 形式的一组 3D 点:
{{0, 0, 0}, {0, 16, 0}, {0, 32, 0},
{0, 48, 0}, {0, 64, 0}, {0, 80, 0},
{0, 96, 0}, {0, 112,0}, {8, 8, 0},
{8, 24, 0}, {8, 40, 0}, {8, 56, 0},
{8, 72, 0}, {8, 88, 0}, {8, 104, 0},
{16, 0, 0}, {16, 16,0}, {16, 32, 0},
{16, 48, 0}, {16, 64, 0}, {16, 80, 0},
{16, 96, 0}, {16, 112, 0}, {24, 104, 0},
{32, 96, 0}, {32, 112, 0}, {40, 104, 0},
{48, 96, 0}, {48, 112, 0}, {56, 104, 0},
{64, 96, 0}, {64, 112, 0}, {72, 104, 0},
{80, 0, 0}, {80, 16, 0}, {80, 32, 0},
{80,48, 0}, {80, 64, 0}, {80, 80, 0},
{80, 96, 0}, {80, 112, 0}, {88, 8, 0},
{88, 24, 0}, {88, 40, 0}, {88, 56, 0},
{88, 72, 0}, {88, 88, 0}, {88, 104, 0},
{96, 0, 0}, {96, 16, 0}, {96, 32, 0},
{96, 48,0}, {96, 64, 0}, {96, 80, 0},
{96, 96, 0}, {96, 112, 0}}
这是一种旋转非常小的“简单”建模数据。
最佳答案
好吧,使用 Levenberg-Marquardt 的正确方法是您需要对参数进行良好的初始估计(“种子”)。回想一下,LM 是 Newton-Raphson 的变体;与此类迭代算法一样,起点的质量将决定迭代的成败;要么收敛到你想要的东西,要么收敛到完全不同的东西(不是不太可能发生,尤其是当你有很多参数时),要么射向远处的狂野蓝色(发散)。
无论如何,如果您能提及您正在拟合的模型函数,并且可能还有您的数据的散点图,那将会更有帮助;这可能会大大有助于为此找到可行的解决方案。
关于optimization - Levenberg-Marquardt 算法的局限性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4437318/
我正在使用 Levenberg-Marquardt algorithm最小化 6 个参数的非线性函数。每次最小化我有大约 50 个数据点,但我没有得到足够准确的结果。我的参数彼此相差几个数量级这一事实
我有一些代码可以使理论预测与实验数据相吻合,我想运行 LMA(Levenberg-Marquardt 算法)以使理论与实验相吻合。然而,计算是非常重要的,每个模型在单个处理器上需要大约 10-30 分
我是一名程序员,想了解 Levenberg–Marquardt 曲线拟合算法的工作原理,以便自己实现。是否有任何好的教程可以详细解释它是如何与作为程序员而不是数学家的读者一起工作的。 我的目标是在 o
问题:我最近的任务是设计一个非线性求解器,但我的求解器没有收敛到正确的解。 **预期**:“最小化(x)”方法应该将我的参数 vector x 减少到最小值。 观察到:在我调用“最小化(x)”之后,我
我尝试基于 Numerical Optimization using the Levenberg-Marquardt Algorithm 在 Julia 上实现用于求解非线性方程的 levenberg
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我通常使用 MATLAB 编写代码,但出于某些原因我决定改用 JAVA 方法。 问题很简单:我想了解如何将以下 MATLAB 代码转换为有效的 JAVA 代码。 在 MATLAB 中,我有一个名为 f
我能够使用 peak-o-mat 将曲线拟合到 x/y 数据集, 如下所示。那是线性背景和 10 条洛伦兹曲线。 因为我需要拟合许多相似的曲线,所以我使用 mpfit.py 编写了一个脚本化的拟合例程
我正在将 Matlab 中使用 Levenberg-Marquardt 训练算法的神经网络代码移植到 Python。我正在使用 Neurolab,我相信 Levenberg-Marquardt 训练算
我正在尝试使用 Matlab 中的 levenberg-Marquardt 最小二乘法将具有四个未知参数的巨大函数拟合到我的数据中。我使用了这个命令: [x, resnorm]=lsqcurvefit
我有一个关于如何在 Python 中使用 Levenberg-Marquardt 优化方法的问题。 SCIPY库里有很多optimization methods . 我尝试了两种方法(Nelder-M
我正在尝试将 Levenberg-Marquardt 算法实现为 Keras 优化器,如所述 here但我有几个问题,最大的一个是这个错误 TypeError: Tensor objects are
我正在尝试用 Java 编写 levenberg marquardt,这是我的代码: while (iter <= 10 || mse < 0.0001) { call.cal
我成功地使用了 Eigen 的 Levenberg-Marquart 类,示例来自:http://techblog.rga.com/determining-indoor-position-using-
我正在尝试最小化以下示例函数: F(x) = f[0]^2(x[0],...,x[n-1]) + ... + f[m-1]^2(x[0],...,x[n-1]) 最小化这种函数的一般方法是 Leven
在相机校准中,我使用 calibrateCamera() 从校准图案的多个 View 中查找相机参数。它恰恰做了两件事: 1) 假设镜头畸变为零,估计封闭形式的初始相机参数。 2) 运行全局 Leve
我正在尝试根据 Manolis Lourakis ( Available here) ) 用 C 语言编写的 Levenberg-Marquardt 算法构建 mex 文件。我已经做了很多搜索,但还没
我在最小化 python 中的复杂非线性函数时遇到了麻烦。该函数实际上是用于拟合实验数据的拟合模型的卡方。为了获得全局最小值,我使用 scipy 中的 basshopping 函数。该函数是 mini
我正在使用 Matlab 中的 lsqcurvefit 函数对一些实验数据进行建模。数据采用特定形状,因此算法只是调整该形状的系数以改变其振幅等。 该模型运行良好并且拟合良好(我计算了卡方)。 Lev
我是一名优秀的程序员,十分优秀!