Scipy curve_fit做一个不适合一个简单的指数

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

任何人都可以告诉我我哪里错了吗?


长风秋雁
浏览 80回答 1
1回答

犯罪嫌疑人X

看来你混淆了参数的顺序。提供给curve_fit函数应具有以下签名:它必须将自变量作为第一个参数,并将参数作为单独的剩余参数进行拟合:。ydata = f(xdata, *params) + eps所以你需要改变函数的参数顺序:simple_DEdef simple_DE(t, A, c):     ...同样,在绘制拟合度时:plt.scatter(range_thing, simple_DE(range_thing, *popt))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python