[英]Scipy curve_fit does a doesn't fit a simple exponential
我正在尝试使用 scipy curve_fit 对某些数据进行简单的指数拟合,结果是指数太大了许多数量级
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import math
import numpy as np
cases_DE = [16,18,26,48,74,79,130,165,203,262,545,670,800,1040,1224,1565,1966,2745,3675,4599,5813, 7272, 9367, 12327]
def simple_DE(A,c,t):
return A*math.e**(c*t)
range_thing = np.array(range(len(cases_DE)))
popt, pcov = curve_fit(simple_DE, range_thing, cases_DE, bounds=((-np.inf, 0), (np.inf, 1)))
print(popt)
plt.scatter(range_thing, simple_DE(*popt, range_thing))
plt.scatter(range_thing, cases_DE)
print(simple_DE(*popt, 20))
plt.xlabel('x')
plt.ylabel('y')
plt.show()
谁能告诉我我哪里出错了?
看来您混淆了参数的顺序。 提供给curve_fit
的函数应具有以下签名:
它必须将自变量作为第一个参数,并将要拟合的参数作为单独的剩余参数:
ydata = f(xdata, *params) + eps
。
因此,您需要更改simple_DE
函数的参数顺序:
def simple_DE(t, A, c):
...
同样在绘制拟合时:
plt.scatter(range_thing, simple_DE(range_thing, *popt))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.