Python Scipy curve_fit没有一个';t拟合一个简单的指数

Python Scipy curve_fit没有一个';t拟合一个简单的指数,python,scipy,Python,Scipy,我试图用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,

我试图用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()

谁能告诉我哪里出了问题

您似乎混淆了参数的顺序。提供给的函数应具有以下签名:

它必须将自变量作为第一个参数,并将要拟合的参数作为单独的剩余参数:
ydata=f(扩展数据,*params)+eps

因此,您需要更改
simple\u DE
函数的参数顺序:

def simple_DE(t, A, c):
    ...
同样,在绘制拟合曲线时:

plt.scatter(range_thing, simple_DE(range_thing, *popt))

非常感谢。看起来棒极了now@user45757如果答案帮助你解决你的问题,请考虑接受它,所以问题被标记为回答。