【问题标题】:Scipy curve_fit does a doesn't fit a simple exponentialScipy curve_fit 不适合简单的指数
【发布时间】:2020-03-19 13:46:30
【问题描述】:

我正在尝试使用 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()

谁能告诉我哪里出错了?

【问题讨论】:

    标签: python scipy


    【解决方案1】:

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

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

    因此您需要更改simple_DE 函数的参数顺序:

    def simple_DE(t, A, c):
        ...
    

    在绘制拟合时类似:

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

    【讨论】:

    • 谢谢!现在看起来棒极了
    • @user45757 如果答案帮助您解决了问题,请考虑接受它,这样问题就会被标记为已回答。
    猜你喜欢
    • 2021-09-25
    • 2012-11-02
    • 2020-06-27
    • 2016-02-25
    • 2021-09-14
    • 2017-07-13
    • 2021-03-19
    • 2019-02-26
    • 2016-01-16
    相关资源
    最近更新 更多