簡體   English   中英

Scipy curve_fit 不適合簡單的指數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM