微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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,yerr,marker='o',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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。