问题标签 [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 投票
2 回答
487 浏览

matlab - matlab中的函数参数在曲线拟合后漂移

首先是一点背景。我是一名心理学专业的学生,​​所以我的编码背景与你们不相上下:-)

我的问题如下,最重要的观察是用 2 个不同的程序拟合曲线会为我的参数提供完全不同的结果,尽管我的图表保持不变。我们用来拟合纵向数据的主要程序是 kaleidagraph,这应该被视为有点“黄金标准”,我要修改的程序是 matlab。

我试图变得聪明并编写了一些代码(至少对我来说很多),该代码的目标如下: 1. 获取单个纵向数据文件 2. 使用 lsqcurvefit 将这些数据曲线拟合到非参数模型上 3 . 获得数字和 f' 和 f'' 为零的点

这一切都很好(哇哦:-))但是当我开始比较两个程序生成的函数参数时,它们之间存在巨大差异。kaleidagraph 程序保持接近其原始起始值。Matlab 徘徊,有时会变大 1000 倍。但图表在两种情况下或多或少保持相同,并且都很好地拟合数据。但是,如果我知道如何使 matlab 曲线拟合更“保守”并且更靠近它的原始起始值,那就太好了。

以上是我为将数据文件适合特定模型而编写的代码的一部分。下面是我使用的非参数模型及其函数参数的示例。

我试图尽可能好地模仿 kaleidagraph 中的曲线拟合过程。在那里我发现他们使用了我选择的 levenberg-marquardt 算法。但是结果仍然不同,我没有更多关于如何改变这一点的线索。


一些额外的调整:

这段代码的想法如下:

我正在尝试比较不同的拟合模型(它们是为此目的而设计的)。所以我要做的是我有 5 个具有不同参数和不同起始值的模型(我的代码的第二部分),接下来我有通用曲线拟合文件。由于有不同的模型,如果我可以限制我的起始值可以偏离多远,那将会很有趣。

任何人都知道如何做到这一点?


有人愿意帮助心理学学生吗?

干杯

0 投票
1 回答
1130 浏览

numpy - scipy.optimize.leastsq 无法拟合简单模型

我一直在尝试使用 python 的scipy.optimize库来估计模型的参数,但到目前为止没有成功。我尝试使用scipy.optimize.leastsq其中使用 levenberg-marquardt 算法。不幸的是,即使我将初始参数猜测设置为非常接近最佳拟合,它也总是无法找到我的模型函数的最小值。实际上,它总是返回初始猜测的参数。所以,我认为我做错了什么。我的模型是一个简单的圆,但为了使事情变得更简单,只有半径是实际参数,数据中圆的中心是已知的并且是硬编码的。数据是一个 10x10 像素的浮点图像,圆心为 5,5,半径为 4。实际上,数据是使用我试图拟合的模型生成的。所以,完美契合是存在的。这是我的代码:

scipy我对数据进行了硬编码,以消除任何数据依赖关系,并允许代码在任何已安装的机器上开箱即用。我不太明白该model01函数应该返回什么。根据文档,它应该返回一个数组。什么数组?在我的代码中,我假设我必须为每个数据点返回一个残差数组。那是对的吗?我的数据是一个二维数组,因为它是一个图像,但我的残差是一个展平的二维残差数组。那样行吗?有人能告诉我我到底做错了什么吗?有人可以修改和修复代码吗?scipy正如我上面提到的,代码应该在任何安装并numpy安装的机器上开箱即用。如果我想实现的目标是不可能的scipy.optimize.leastsq,您能否推荐一些其他适合使用 levenberg-marquardt 算法的模型的库?

0 投票
1 回答
4085 浏览

python-2.7 - 带有约束的python中的Levenberg-Marquardt

有没有什么好方法可以在 python 中将约束添加到 levenberg-marquadt 例程中?到目前为止我发现的主要是将错误函数更改为类似

但即便如此,也有可能得到错误的结果,例如。params[0] 是否定的!有什么建议吗?

0 投票
1 回答
301 浏览

curve-fitting - MPFIT 和用户定义导数的问题

我正在尝试使用优化库 MPFIT 将高斯函数拟合到我的数据中。实际上,此代码是 MPFIT 库附带的示例代码的一部分。原始代码自动在内部以数字方式计算函数的导数,并且运行良好。MPFIT 库还允许用户提供函数衍生物。这就是问题开始的地方。这是用于计算残差和函数的一阶偏导数的函数。

'if (derivs)' 行上方的代码是原始代码,但经过重构,下面的代码是我用于计算导数的代码。我相信我的数学是正确的,它们已通过https://math.stackexchange.com/questions/716545/calculating-the-first-order-partial-derivatives-of-the-gaussian-function/716553验证

有没有人在将 MPFIT 与用户定义的导数一起使用时遇到同样的问题?

谢谢你。

0 投票
0 回答
203 浏览

matlab - 未知值保持起始值 - 曲线拟合工具箱 MATLAB

我正在尝试使用 MATLAB 的曲线拟合工具箱将赫兹模型(抛物线)拟合到一些数据中。

在此处输入图像描述

我遇到的问题是它似乎并没有真正使模型适合数据。未知数(杨氏模量 E)始终保持与我给出的起始值相同的数字。对于这种特殊情况,我知道 E 应该在 3.8E6 左右,但从结果中可以看出,E 保持在起始值 1.2E6。Althoug,我不太确定括号中的值代表什么。是不是像 E 值的错误?

我已经玩了很多迭代次数和终止容差,但问题仍然存在。

任何人都遇到过同样的问题或知道我的错误在哪里?

提前非常感谢!

0 投票
0 回答
715 浏览

c++ - Levenberg-Marquardt 不收敛

我尝试根据数值配方使用 Levenberg-marquardt 的方法来拟合模型。问题是:它不会收敛,或者当它收敛时,它并不精确......或者至少协变矩阵很奇怪。

(x,y) 是 3 个点(双精度),可以很好地与 . 形式配合使用y=a(x-x0)^2
像这样使用 sumchisk 是使用此功能的数值配方的建议。
alamda 在这里被封顶,否则可能会溢出。

其他定义和数据点:

我将 nr-sourcecode 更改为使用 double 而不是 float。没有使用第一个数组元素,因为它来自 fortran 代码,我不想更改这么小的细节。

该模型还包含一个 3. 参数,该参数未在此拟合中使用,因此保持为 a[3]=-1,因为 ia[3]=0。ia[]=1 表示参数即将拟合...

但是,现在我遇到的问题是有时这不会收敛。它以alamda=1e8和结束i=3e4。尤其是当我将门槛设置为chisk更低时。
参数集似乎很好,虽然...... chisk 大约是 1e-6 并且参数看起来很好,但是查看协变矩阵的对角线(应该给出每个参数的平方标准偏差),对于参数 0.0001,有一些像 ~800000 这样的垃圾。

有谁知道我在使用这个算法时做错了什么?开始时我需要写入 covar/alpha 的任何具体内容吗?sig可以这样设置吗?

0 投票
1 回答
407 浏览

python - 为什么这些曲线拟合结果不匹配?

我正在尝试使用指数拟合来估计衰减率,但我对为什么这两种方法没有给出相同的结果感到困惑。

在第一种情况下,获取数据的对数以线性化问题与 Excel 的指数趋势线拟合相匹配。我曾期望直接拟合指数会是相同的。

结果:

0 投票
0 回答
430 浏览

java - Eigen - Levenberg Marquardt 算法:置换定义的无效模板参数

我正在尝试在 Android 应用程序上使用 Levenberg Marquardt 算法的 Eigen 实现。为了使用 Eigen,我使用的是 Android NDK 和 jni。我已经用简单的计算(如矩阵创建和向量和)测试了 Eigen,它工作得很好。但是,当我尝试使用 Levenberg Marquardt 算法时,我在 Eigen 库中的 LevenbergMarquardt.h 文件中遇到了一些错误。

首先,这是我的代码。我基于这段代码

这些是我得到的错误。前两个错误在 Eigen 的库中,最后一个错误在 LevenbergMarquardt 对象创建中。在消息之后,我还包含了相应的错误代码行:

无效的模板参数 LevenbergMarquardt.h /jnimath/jni/unsupported/Eigen/src/LevenbergMarquardt line 121 语义错误


无效的模板参数 LevenbergMarquardt.h /jnimath/jni/unsupported/Eigen/src/NonLinearOptimization 第 103 行语义错误


无效的模板参数 test.cpp /jnimath/jni 第 47 行语义错误

特征::LevenbergMarquardt,double> lm(numDiff);

前两个错误真的很奇怪,因为还有一些其他类型定义使用 Dynamic 并且它们没有抛出错误。

另外,我注意到我在编译时遇到了一些符号错误,它们是:

符号 'YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY' 无法解析 Matrix.h /jnimath/jni/Eigen/src/Core 第 277 行语义错误


符号 'YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX' 无法解析 Matrix.h /jnimath/jni/Eigen/src/Core line 224 语义错误

所以,我有两个问题:

为什么我在这些行上出现错误?

有谁知道如何解决这个问题?

谢谢

0 投票
1 回答
4327 浏览

android - 使用 iBeacons 在 Android 中进行三边测量

我们想使用 iBeacons 实现某种室内位置确定。 这篇文章看起来很有趣,作者使用 Eigen C++ 库和 Levenberg Marquardt 算法实现了非线性最小二乘三角剖分。由于 Eigen 是用 C++ 编写的,因此我尝试使用 JNI 和 Android NDK 来使用它,但它会引发很多错误,我不知道如何解决,而且我在网上找不到任何东西。我也尝试使用 Jeigen,但它没有我们需要的所有功能。

所以,我的问题是:

  1. 有人曾经在 Android 中使用信标实现过某种三边测量吗?

  2. 您认为使用 Eigen+JNI+NDK 是一个很好的解决方案吗?如果是,您是否曾经使用该组合实现过 Levenberg Marquardt?

  3. 有没有比 Levenberg Marquardt 算法更好的选择来计算 Android 应用程序中的三边测量?

0 投票
0 回答
191 浏览

clojure - Clojure 中的阻尼最小二乘法

Clojure 中是否有针对 Marquardt 最小二乘法(也称为 Levenberg-Marquardt 算法或阻尼最小二乘法)的任何好的帖子和实现?