如何在python中进行curve_fit

时间:2014-04-16 15:08:03

标签: python numpy matplotlib scipy

我需要使用y = x /(a + x)曲线拟合一组数据,其中a是我需要从此练习中获得的参数。

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.optimize import curve_fit

x = [1, 2, 7, 10, 20, 70, 200, 1000]
y = [0, 0, 15.3, 34.6, 49.3, 82.6, 100]
def fit(x, a):
    return x/(a+x)
par, con = curve_fit(fit, x, y)
plt.plot(x, fit(x, par[0]))
plt.show()

使用这个我得到一些适合的憎恶。甚至不适合。

如果我这样试试:

def fit(x, a, b):
    return b*x/(a+x)

我很健康,但没有圆角。它只是直线。我做错了什么?

1 个答案:

答案 0 :(得分:3)

请注意,您的xlist intPython除以默认的整数除法,这不是您想要的。

因此,一些更改将使其工作,使用第二个函数作为示例,您的第一个函数不适合,因为当x-> inf时它将具有1的限制:

def fit(x, a, b):
    return b*x*1./(a+x)
A, B=curve_fit(fit, x, y)[0]
plt.plot(x, fit(x, A, B))
plt.plot(x, y, 'r+')
plt.savefig('temp.png')

enter image description here

这是一组直线,因为您只计算y个值x,以获得曲线:将绘图调用更改为plt.plot(np.linspace(0,200,100), fit(np.linspace(0,200,100), A, B)) enter image description here