簡體   English   中英

指數衰減曲線適合 Python。 錯誤:優化警告

[英]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的輸出對於所有行都是相同的,因此它給出了一條直線。

問題:如何估計參數以對我的數據進行曲線擬合?

這是我得到的輸出

為您的擬合參數設置一些好的起始值。 所有參數( ainvtauc )的默認值都是 1,但特別是ainvtau將遠離 1。然后,優化器算法將無法找到一個好的最小值。

我試過

popt, pcov = curve_fit( curvefit, x, y, p0=[1, 1/250, 4])   #Curvefit

這產生了合適的擬合, ainvtauc的值分別為4335942530.5601090.08655841285513264.238729282912057

(請注意,我有起始值a1 ,這仍然是遠離它的實際價值。但有invtau接近其實際價值,讓那么算法也找到了非常適合於a ,這是總體還是比較好為所有參數提供更准確的起始值,並且由於您正在對數據進行建模,因此您可能知道這些值的期望值,並將其用作起點。)

暫無
暫無

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

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