将指数曲线拟合到数据点以计算衰减率
Fit exponential curve to data points to calculate decay rate
我有一组数据点,如下所示:
x = [0, 2, 4, 7]
y = [100, 62, 60, 56]
我需要拟合遵循以下等式的指数曲线:
C = C0 * e^(-kdecay*t)
其中C为y,C0为y在时间点0的值,t为x。
目前我有绘制时间点的代码,但我需要添加指数曲线。
plt.plot(x,y,color='indianred', ls='none', linewidth=2)
plt.errorbar(x,y,yerr,marker='o', color='indianred', ls='none', ecolor='k')
#set y axis limits
plt.ylim((0,120))
plt.xlabel("ActD (h)", fontsize=14)
plt.ylabel("mRNA (%)", fontsize=14)
非常感谢您的帮助。
编辑:
我正在尝试这个
from scipy.optimize import curve_fit
def func(C, kdecay, x):
y= C*np.exp(-kdecay*x)
return y
popt, _ = curve_fit(func, x, y)
C, kdecay = pop
我可能错过了这部分,因为它与我的功能不一样:
print('y=%.5f*x+%.5f'%(C,kdecay))
我真的是 Python 的新手,如果你能给我一个明确的答案而不是仅仅建议一个库,那将非常有帮助。
如果您熟悉最小二乘法,可以通过取对数将方程式转换为 LS 的有效形式:
y(t) = a * e^(-b*t)
变成
ln(y(t)) = ln(a) - b*t
在对数方面,这是 t
的简单线性方程。
幸运的是,scipy
可以为您做到这一点:
from scipy.optimize import curve_fit
import numpy as np
def your_function(t, a, b):
return a * np.exp(-b*t)
x = [0, 2, 4, 7]
y = [100, 62, 60, 56]
best_params = curve_fit(your_function, x, y)
print(best_params)
我有一组数据点,如下所示:
x = [0, 2, 4, 7]
y = [100, 62, 60, 56]
我需要拟合遵循以下等式的指数曲线:
C = C0 * e^(-kdecay*t)
其中C为y,C0为y在时间点0的值,t为x。
目前我有绘制时间点的代码,但我需要添加指数曲线。
plt.plot(x,y,color='indianred', ls='none', linewidth=2)
plt.errorbar(x,y,yerr,marker='o', color='indianred', ls='none', ecolor='k')
#set y axis limits
plt.ylim((0,120))
plt.xlabel("ActD (h)", fontsize=14)
plt.ylabel("mRNA (%)", fontsize=14)
非常感谢您的帮助。
编辑: 我正在尝试这个
from scipy.optimize import curve_fit
def func(C, kdecay, x):
y= C*np.exp(-kdecay*x)
return y
popt, _ = curve_fit(func, x, y)
C, kdecay = pop
我可能错过了这部分,因为它与我的功能不一样:
print('y=%.5f*x+%.5f'%(C,kdecay))
我真的是 Python 的新手,如果你能给我一个明确的答案而不是仅仅建议一个库,那将非常有帮助。
如果您熟悉最小二乘法,可以通过取对数将方程式转换为 LS 的有效形式:
y(t) = a * e^(-b*t)
变成
ln(y(t)) = ln(a) - b*t
在对数方面,这是 t
的简单线性方程。
幸运的是,scipy
可以为您做到这一点:
from scipy.optimize import curve_fit
import numpy as np
def your_function(t, a, b):
return a * np.exp(-b*t)
x = [0, 2, 4, 7]
y = [100, 62, 60, 56]
best_params = curve_fit(your_function, x, y)
print(best_params)