首页 文章

使用scipy在Python中进行曲线拟合

提问于
浏览
2

我想在scipy中使用curve_fit为曲线拟合曲线 . 我搜索了语法后发现了这个,

import numpy as np
from scipy.optimize import curve_fit

def func(x, a, b, c):
     return a * np.exp(-b * x) + c

xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
ydata = y + 0.2 * np.random.normal(size=len(xdata))

popt, pcov = curve_fit(func, xdata, ydata)

但是文档并不是很清楚,特别是关于函数func的参数,我知道x是自变量值的numpy数组,但是a,b和c是什么?此外,这条线是什么意思,

a * np.exp(-b * x) + c

计算y我们用自变量和其他参数调用func,但是什么是ydata?为什么我们这样计算,

ydata = y + 0.2 * np.random.normal(size=len(xdata))

最后一件事,如果我通过scipy在某个函数中得到拟合模型(等式),我怎么能在另一个函数中使用它?

任何帮助表示赞赏 . 谢谢 .

1 回答

  • 2

    curve_fit 拟合一组数据 ydata ,每个点以自变量 x 的值给出,用于某个模型函数 . 在该示例中,模型函数是 a * exp(-b * x) + c ,其中 abc 是要确定以最佳地表示具有此模型的数据的一些常量 .

    func 计算的 y 是每个数据点 x 处的模型函数的值 .

    在该示例中, ydata 由拟合函数模拟,并添加了一些随机高斯(正态分布)噪声:

    ydata = y + 0.2 * np.random.normal(size=len(xdata))
    

    您可以通过将 y (绿线)和 ydata (蓝点)与 xdata 绘图来查看:

    enter image description here

    要使用拟合参数 popt ,请将它们传递给 func

    yfit = func(xdata, *popt)
    

    绘图将显示“精确”(绿线)和拟合(蓝线)的比较:

    enter image description here

相关问题