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
为您的拟合参数设置一些好的起始值。所有参数(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
的良好拟合。总体而言,为 所有 参数提供更准确的起始值仍然更好,并且由于您正在对数据建模,您可能知道对这些值的期望是什么,并将其作为起点。)
我正在尝试对我的数据进行曲线拟合。我正在使用指数函数,因为我需要 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
为您的拟合参数设置一些好的起始值。所有参数(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
的良好拟合。总体而言,为 所有 参数提供更准确的起始值仍然更好,并且由于您正在对数据建模,您可能知道对这些值的期望是什么,并将其作为起点。)