问题标签 [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 回答
1434 浏览

nls - nlsLM 给出错误:尝试使用零长度变量名称 - Black Scholes 模型拟合

我正在研究我的建模技巧,并且正在 Black Scholes 尝试一下。这个想法是使用当前期权价格 (x) 来估计波动率 (b)。

当我运行 nlsLM 时,我收到此错误:

我看不出错误在哪里,我已经从公式中删除了所有变量,并用它们在这个特定情况下的数值替换了它们。x 和 b 保留为变量。我在没有 d1 和 d2 的情况下运行了这个,换句话说,将每个长公式放在各自的 pnorm() 中,但也没有运气。

x 是执行价格,y 是截至 2014 年 12 月 12 日的 12/20/14 到期的 GOOG 看涨期权的价格。

这是重现错误的代码。

谢谢你。

0 投票
1 回答
798 浏览

r - R Programming nls(): 带有误差奇异梯度的 confint()

以下指示代码和输出:

library(minpack.lm) #Levenberg-Marquardt 非线性最小二乘算法(支持参数上下界)

0 投票
1 回答
295 浏览

optimization - A_ldiv_B!具有稀疏矩阵

以下代码行出现在优化包“Optim”中的 levenberg-marquardt 算法中:

但是,我的问题与算法或包的任何特定内容无关。我想这更多地与基础 julia 中的线性代数和因式分解有关。

如果我有一个完整的矩阵 J,则以下工作:

但是,如果 J 是稀疏的,我会收到一个错误:

据我所知(作为初学者,我对 julia 的了解有限),发生此错误是因为 julia 尝试先计算( J'*J + sqrt(100)*DtD ) \ -J'我的第一个问题是我如何知道 julia 在实现上述代码时所采用的路径?我知道@which但我不知道如何使用它来到达 A_ldiv_B!因为这应该从\(A,B)A_ldiv_B 开始,然后以某种方式结束!:

另请注意:

这使得这更加令人困惑,因为上面没有 Cholesky 类型。我的第二个问题是:Cholesky 类型是如何出现的?错误消息说:A_ldiv_B!没有方法匹配 A_ldiv_B!(:: Cholesky{Float64} , ::SparseMatrixCSC{Float64,Int64})

我偶然发现的另一个有趣的点是,如果稀疏矩阵的大小为 (2,2),则不会发生上述错误:

最后,我可以通过插入括号来解决这个问题-J'*fcur,这似乎是作者的意图。但我很困惑。任何想法都非常感谢。谢谢!

0 投票
0 回答
189 浏览

matlab - 如何在 MatLab 中使用 lsqcurvefit 求解整数约束非线性反演?

我试图在 MatLab 中使用 lsqcurvefit 来解决这样的问题: x=lsqcurvefit(@myfun,x0,xdata,ydata) 其中 x 只能是整数。似乎默认设置使 x 以一种超过任何值的方式发生变化。有人能帮上忙吗?

0 投票
1 回答
585 浏览

python - 使用 Levenberg-Marquardt 算法最小平方查找模型参数

我正在尝试使用模型查找参数 A、B、C 到数据 x、yy= Ax^2 sin(x)/cos(x)^C + B 我想使用 scipy.optimize 中的 minimumsq 但我有错误。这是我的尝试:

init 是我对参数 A、B、C 的“第一次猜测”

错误:

0 投票
1 回答
1275 浏览

python - 基于 scipy.optimize.basinhopping 中的 Levenberg-Marquardt 的自定义最小化器

我在最小化python中复杂的非线性函数时遇到了麻烦。该函数实际上是用于拟合实验数据的拟合模型的卡方。为了获得全局最小值,我在 scipy 中使用了盆地跳跃函数。这个函数是最小化()函数的包装,它增加了一些扰动来寻找不同的局部最小值。现在我的问题是很难找到局部最小值。

有一堆求解器可以在最小化()中使用,因为我使用的是边界,所以我在“L-BFGS-B”、“SLSQP”和“TNC”之间进行了选择。他们都没有真正找到局部最小值。有没有一种基于流行的 Levenberg-Marquardt 算法的方法可以用来最小化?也许这没有意义,否则它已经实现了,但我不明白为什么。

我最初的想法实际上是使用我知道的最简单的函数(https://pypi.python.org/pypi/leastsqbound),它非常擅长提供准确的协方差矩阵,尽管有界限,并将其包含在一个看起来更大的算法中对于全局最小值(如盆地跳跃函数)。你知道这样的东西是否已经存在?

非常感谢您的建议!

0 投票
1 回答
1813 浏览

algorithm - 在 MATLAB 中使用 Levenberg-Marquardt (lsqcurvefit) 时获取协方差矩阵

我正在使用 Matlab 中的 lsqcurvefit 函数对一些实验数据进行建模。数据具有特定的形状,因此算法只是调整该形状的系数以改变其幅度等。

该模型工作正常并且非常适合(我已经计算了 chi-sq)。Levenberg-Marquardt 算法的其他实现将协方差作为输出,但在 Matlab 中它不是输出的选项(只有一阶最优性,没有迭代,Lambda 和 Jaccobian 以及边界)。

有人知道如何通过 lsqcurvefit 或独立地从给定的输出(我不是 100% 了解 lambda 和 jaccobian 的用途或一阶最优性)计算协方差矩阵吗?

任何帮助将不胜感激,谢谢!

0 投票
1 回答
286 浏览

c# - Python scipy.optimize.leastsq

在 C# 中是否有函数 Levenberg-Marquardtoptimize.leastsq 的简单实现?我正在尝试使用 MinPack,但由于输入参数不同,我得到了不同的结果。在内部,python 调用文件minpack.py中的函数 minimumsq ,它在下面调用另一个函数,但这次有更多的输入参数 _minpack._lmdif。我在文件_minpack.h中找到了一个函数,经过一些神奇的步骤(对我而言),它调用了一个带有更多参数的 fortran 函数 lmdif。有没有简单的方法?

0 投票
1 回答
1368 浏览

c++ - 带有 GNU 科学库 (GSL) 的 C/C++ 代码为 GNUPlot 提供了不同的结果——可能的浮点不稳定性?

短:

GNUPlot 比我的 GSL 代码更适合我的数据。为什么?

短的:

我现在有点困惑,所以我的问题可能措辞不是特别好......随着我的理解提高,我会编辑这个。

这个问题的原标题是:“g++ Compiling code with either -o1 -o2 or -o3 flags and floating point precision”

我相信我的代码正遭受数值不稳定的困扰。

GNUPlot 比我的 GSL 代码更适合我的数据,这令人惊讶,因为我相信 GNUPlot 也使用 GSL 库?

长:

我编写了一些使用 GNU 科学库 (GSL) 的 C/C++ 代码。我的代码使非线性函数适合非线性数据集。执行此操作的算法可能对浮点运算发生的顺序高度敏感,这是由于数值不准确性的性质导致数值舍入误差的累积。

问题:“这些可能是由使用优化标志之一运行的效果引起的-o1-o2还是-o3?”

部分答案:我关闭了所有-oN标志并重新编译了我的代码,我的结果可能会发生少量变化,即:delta_x / x ~= 1.0e-3. 与 GNUPlot 相比,拟合度仍然很差。

我适合的功能:

我提供这些是为了向您展示正在发生的数字工作。我怀疑其中一些容易出现数值错误。

的典型值Yi将在 至 的范围0.01.0t通常在 到 的范围0.0200.0。(但在该范围的前半部分拟合度很差。)

这是一个图表,不是很好吗?

好吧,这里有一张图表,它比我用语言更好地解释了这个问题。您可以忽略绿线,它仅显示在运行拟合算法之前给出的初始参数,该算法会更改这些参数。

GNUPlot 拟合结果:

C++ GSL 拟合结果:

仔细检查后,您会发现粉红色和蓝色线条并没有以相当大的余量相互重叠。粉红线是许多人所说的“合身”。相比之下,蓝线并不是特别好。

我已经尝试使误差条(尽管它们对于所有点的大小都相同——它们不是“真正的”误差条,只是人造的)更小——这没有帮助,只会改变每个点的卡方值和相关错误拟合后的参数。

图 1

进一步的随机想法:

  • 我建的 GSL 错了吗?
  • Gnuplot 将数据集拆分为小块,以使加在一起的数字保持大致相同的数量级?(有点像 FFT 的工作原理。)

GSL 拟合输出:

0 投票
0 回答
1098 浏览

r - 使用短时间序列使用 nls.lm 参数拟合 ODE 模型

我目前正在尝试在实验室实验中使用 minpack 中的 Levenberg-Marquardt 例程 (nls.lm) 来拟合功能响应,以解决消耗问题。作为一个例子,我一直在按照这里的教程(http://www.r-bloggers.com/learning-r-parameter-fitting-for-models-involving- )在 minpack 中使用 levenberg-marquardt 例程(nls.lm)微分方程/)。

在示例中,他首先设置了一个我修改过的函数 rxnrate 来拟合数据,如下所示:

我的问题是,我没有使用很长的时间序列,而是有许多具有多个起点的短时间序列(n=6)。用 nls.lm 函数单独拟合这些将导致相当无用的估计。我的低技术解决方案与罗杰斯分析方法产生了可比的结果,它是将它们全部排列并同时拟合它们,如下例所示。

这样做的问题是我很快就用完了字母,而且硬编码所有这些时间序列(总共超过 100 个)效率极低。

我的问题是因为配对方程都是相同的,是否有一个解决方案可以让我编写一次并让函数将其应用于所有后续配对时间序列。我也不确定这个解决方案是否会导致参数估计的任何数学问题,即使它似乎给出了与其他方法相当的结果。

这是一个小的工作示例