Exponential Decay Curve fit on Python. Error: Optimizewarning

Exponential Decay Curve fit on Python. Error: Optimizewarning

我正在尝试对我的数据进行曲线拟合。我正在使用指数函数,因为我需要 tau(时间常数)进行进一步分析。我是 Python 的新手,第一次尝试 scipy 曲线拟合函数。但是,我只是获得了一条直线,代码给出了 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 的输出对于所有行都是相同的,因为它给出了一条直线。

问题:如何估计参数以对我的数据进行曲线拟合?

This is the output I get

为您的拟合参数设置一些好的起始值。所有参数(ainvtauc)的默认值为 1,但尤其是 ainvtau 将远离 1。然后,优化器算法将无法找到合适的最小值。

我试过

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

产生了不错的拟合,ainvtauc 的值分别为 4335942530.5601090.08655841285513264.238729282912057,分别。

(请注意,我将 a 的起始值设置为 1,这仍然与其实际值相差甚远。但是让 invtau 更接近其实际值,让然后该算法也找到了 a 的良好拟合。总体而言,为 所有 参数提供更准确的起始值仍然更好,并且由于您正在对数据建模,您可能知道对这些值的期望是什么,并将其作为起点。)