import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 自定义的拟合函数
def func2(x, p, q,m):
return m*(1-np.exp(-x*(p+q)))/(1+q/p*np.exp(-(p+q)*x))
# 要拟合的数据点
x2 = np.array([1,2,3,4,5,6,7,8,9,10])
y2 = np.array([0.16,0.63,1.60,3.00,8.00,33.0,73.0,125.0,211.0,310.0])
# 开始拟合
popt, pcov = curve_fit(func2, x2, y2)
# 提取拟合结果
p = popt[0]
q = popt[1]
m = popt[2]
# 测试
yvals2 = func2(x2,p,q,m) #拟合y值
print('popt:', popt)
print('系数p:', p)
print('系数q:', q)
print('系数m:', m)
print('系数pcov:', pcov)
print('系数yvals2:', yvals2)
xx2 = np.arange(1,21)
yy2 = func2(xx2,p,q,m)
#绘图
plot1 = plt.plot(x2, y2, 's',label='original values')
plot2 = plt.plot(xx2, yy2, 'r',label='polyfit values')
plt.xlabel('x2')
plt.ylabel('y2')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('curve_fit')
plt.show()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
————————————————
版权声明:本文为CSDN博主**「BkbK-」**的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BlacKingZ/article/details/119985295