将指数曲线拟合到数据点以计算衰减率

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)