曲线拟合因指数而失败,但zunzun正确

曲线拟合因指数而失败,但zunzun正确,第1张

曲线拟合因指数而失败,但zunzun正确

请注意,

a=0
在zunzun的估算中和您的第一个模型中。因此,他们只是在估计一个常数。因此,
b
在第一种情况下,并
b
c
在第二种情况下是不相关的,而不是鉴定。

我上次查看时,Zunzun还使用微分进化作为全局求解器。Scipy现在已经成为了看起来不错的全局优化器,这在可能出现局部最小值的情况下值得一试。

我的“便宜”方法,因为在您的示例中参数没有很大的范围:请尝试使用随机起始值

np.random.seed(1)err_last = 20best = Nonefor i in range(10):    start = np.random.uniform(-10, 10, size=4)    # Get parameters estimate    try:        popt2, pcov2 = curve_fit(func2, xdata, ydata, p0=start)    except RuntimeError:        continue    err = ((ydata - func2(xdata, *popt2))**2).sum()    if err < err_last:        err_last = err        print err        best = popt2za = 6.2426224704624871E-15zb = 1.5217697532005228E+00zc = 2.0660424037614489E-01zd = 2.1570805929514186E-02zz = np.array([za,zb,zc,zd])print 'zz', zzprint 'cf', bestprint 'zz', ((ydata - func2(xdata, *zz))**2).sum()print 'cf', err_last

最后一部分打印(zz是zunzun,cf是curve_fit)

zz [  6.24262247e-15   1.52176975e+00   2.06604240e-01   2.15708059e-02]cf [  1.24791299e-16   1.52176944e+00   4.11911831e+00   2.15708019e-02]zz 9.52135153898cf 9.52135153904

b
和和相比
c
,参数与Zunzun不同,但残差平方和相同。

加成

a * np.exp(b * x + c) + d = np.exp(b * x + (c + np.log(a))) + d

要么

a * np.exp(b * x + c) + d = (a * np.exp(c)) * np.exp(b * x) + d

第二个功能与第一个功能并没有什么不同。

a
并且
c
未单独标识。因此,使用派生信息的优化器也会遇到问题,因为如果我正确地看到的话,雅可比行列在某些方向上是奇异的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5673314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存