栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在python中使用scipy的curvefit拟合Boxcar函数的问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在python中使用scipy的curvefit拟合Boxcar函数的问题

我怀疑此函数形式不适合Curve_fit使用的levenberg-marquardt算法

你是对的。通常,基于梯度的优化不适用于具有尖锐边缘的函数。通过稍微干扰功能参数并查看装配质量的变化来估算梯度。但是,如果边缘不与数据点交叉,则稍微移动边缘将导致零梯度:

  • 答:很容易拟合振幅,因为高度的微小变化会立即导致残差的变化。
  • B:很难拟合边缘,因为位置的微小变化不会影响残差(除非变化大到足以使边缘越过数据点)。

使用随机方法应该更好。Scipy具有differential_evolution函数,该函数使用遗传算法,因此与蒙特卡洛方法有关。但是,使用起来不那么简单

curve_fit
。您需要为参数指定成本函数和范围:

res = differential_evolution(lambda p: np.sum((box(x, *p) - y)**2),  # quadratic cost function       [[0, 2], [-5, 5], [0.1, 10]])  # parameter bounds

它仍然是单线:)

coeff, var_matrix = curve_fit(box, x, y, p0=[1,0,2])res = differential_evolution(lambda p: np.sum((box(x, *p) - y)**2), [[0, 2], [-5, 5], [0.1, 10]])plt.step(x, box(x, *coeff), where='mid', label='curve_fit')plt.step(x, box(x, *res.x), where='mid', label='diff-ev')plt.plot(x, y, '.')plt.legend()



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667986.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号