簡體   English   中英

擬合指數曲線誤差

[英]Fitted Exponential Curve Error

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a, b, c):
    return a * np.exp(-b * x) + c

x =  [333,500,1000,2000,5000,10000]

y = [195.3267, 233.0235, 264.5914,294.8728, 328.3523,345.4688]

popt, pcov = curve_fit(func, x, y)

plt.figure()
plt.plot(x, y, 'ko', label="Original Noised Data")
plt.plot(x, func(x, *popt), 'r-', label="Fitted Curve")
plt.legend()
plt.show()

錯誤:C:\\ Users \\ Aidan \\ Anaconda3 \\ lib \\ site-packages \\ scipy \\ optimize \\ minpack.py:794:OptimizeWarning:無法估計參數的協方差
類別= OptimizeWarning)

-------------------------------------------------- ------------------------- TypeError Traceback(最近的通話最后一次)在()14 plt.figure()15 plt.plot(x,y ,'ko',label =“原始噪聲數據”)---> 16 plt.plot(x,func(x,* popt),'r-',label =“ Fitted Curve”)17 plt.legend() 18點show()

在func(x,a,b,c)中4 5 def func(x,a,b,c):----> 6返回a * np.exp(-b * x)+ c 7 8 x = [ 333,500,1000,2000,5000,10000]

TypeError:“ numpy.float64”對象無法解釋為整數

由於某些原因,我無法根據數據獲得曲線擬合。 我從這里開始關注指數示例: 如何在Python中進行指數和對數曲線擬合? 我發現只有多項式擬合

但是我使用的是兩個數組,而不是隨機數據。 我是python新手!

您的代碼存在一些問題。

  • 您使用列表而不是numpy.ndarraynumpyscipy例程旨在與numpy.ndarray一起使用,並且它們在內部使用它們。 您也應該使用它們。
  • 您的數據和函數可能會出現溢出問題,例如, np.exp(-1000)在Python3中已經近似為零
  • 您正在嘗試擬合不太可能適合您數據的函數。 它看起來更像是指數恢復而不是衰減。

以下代碼暫定解決所有這些問題:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def func(x, a, b, c):
    return a * (1 - np.exp(-b * x)) + c

x =  np.array([333.0,500.0,1000.0,2000.0,5000.0,10000.0]) / 1000
y = np.array([195.3267, 233.0235, 264.5914,294.8728, 328.3523,345.4688]) / 10

popt, pcov = curve_fit(func, x, y)
print(popt)

plt.figure()
plt.plot(x, y, 'ko', label="Original Noised Data")
plt.plot(x, func(x, *popt), 'r-', label="Fitted Curve")
plt.legend()
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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