![](/img/trans.png)
[英]Using scipy curve_fit to fit exponential curve (fitted curve does match real curve)
[英]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.ndarray
: numpy
和scipy
例程旨在與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.