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

时间:2015-06-27 21:06:26

标签: python numpy scipy curve-fitting

我想在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 个答案:

答案 0 :(得分:2)

curve_fit适合一组数据ydata,每个点都以自变量x的值给出一些模型函数。在示例中,模型函数为a * exp(-b * x) + c,其中abc是一些常量,需要确定以最好地表示此模型的数据。

y计算的func是每个数据点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