[英]Exponential Decay Curve fit on Python. Error: Optimizewarning
我正在嘗試對我的數據進行曲線擬合。 我正在使用指數函數,因為我需要 tau(時間常數)進行進一步分析。 我是 Python 新手,第一次嘗試使用 scipy curvefit 函數。 但是,我只是獲得了一條直線,並且代碼給出了OptimizeWarning: Covariance of the parameters could not be estimated warnings.warn
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
x = np. array( [ 246, 248, 250, 252, 254,256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282,284])
y = np.array( [ 6.38954156, 6.32462716 ,6.21843495,5.96263661, 5.66970206, 5.37948873, 5.06358679 ,4.83386528 ,4.64262524, 4.5091623, 4.38658648, 4.46124359, 4.52878251, 4.56084217 ,4.47660524,4.5323503, 4.46626654, 4.58289275, 4.42962004, 4.29622583])
def curvefit( x, a, invtau,c):
return a * np.exp(-x*invtau)+c
popt, pcov = curve_fit( curvefit, x, y) #Curvefit
a, invtau, c = popt #summarize the parameter values
x_new = np.arange(min(x), max(x),1)
y_new = curvefit (x_new, a, invtau, c)
plt.figure()
plt.plot(x, y, label='data')
plt.plot (x_new, y_new, '--', label='fit')
plt.legend (loc='upper right')
我看到y_new
的輸出對於所有行都是相同的,因此它給出了一條直線。
問題:如何估計參數以對我的數據進行曲線擬合?
為您的擬合參數設置一些好的起始值。 所有參數( a
、 invtau
和c
)的默認值都是 1,但特別是a
和invtau
將遠離 1。然后,優化器算法將無法找到一個好的最小值。
我試過
popt, pcov = curve_fit( curvefit, x, y, p0=[1, 1/250, 4]) #Curvefit
這產生了合適的擬合, a
、 invtau
和c
的值分別為4335942530.560109
、 0.0865584128551326
和4.238729282912057
。
(請注意,我有起始值a
為1
,這仍然是遠離它的實際價值。但有invtau
接近其實際價值,讓那么算法也找到了非常適合於a
,這是總體還是比較好為所有參數提供更准確的起始值,並且由於您正在對數據進行建模,因此您可能知道這些值的期望值,並將其用作起點。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.