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

2024-10-02 18:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组数据点,如下所示:

x = [0, 2, 4, 7] 
y = [100, 62, 60, 56]

我需要拟合一条指数曲线,它遵循以下方程:

C = C0 * e^(-kdecay*t)

其中C是y,C0是时间点0处y的值,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非常陌生,如果你能给我一个清晰的答案,而不仅仅是建议一个库,那将非常有帮助


Tags: 数据none时间plt指数ls曲线fit
1条回答
网友
1楼 · 发布于 2024-10-02 18:24:41

如果您熟悉最小二乘法,可以通过取对数将方程转换为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)

相关问题 更多 >