【问题标题】:Fit exponential curve to data points to calculate decay rate将指数曲线拟合到数据点以计算衰减率
【发布时间】:2021-09-27 19:34:20
【问题描述】:

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

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 新手,如果你能给我一个明确的答案而不是仅仅建议一个库,那将是非常有帮助的。

【问题讨论】:

标签: python python-3.x scipy curve-fitting data-fitting


【解决方案1】:

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

【讨论】:

  • 谢谢,但我不熟悉。我缺少的是,一旦我有了这个功能,我怎么能把它应用到我的数据中?我知道你可以用 scipy 的 curve_fit 来做到这一点,但他们使用的功能总是不同的,我无法让它在我的数据上工作
  • 试试我刚刚发布的代码@CarmenGrandi。
  • 感谢您的帮助。我得到这个: (array([96.18651421, 0.12779204]), array([[5.21250709e+01, 1.44493710e-01], [1.44493710e-01, 8.33950032e-04]])) 我怎样才能得到这个功能?
  • 我设法获得了该功能,但值与我在 excel 上获得的值完全不同:Python -> y=93.20158*e^(-0.09921*x)Excel -> y = 111.55*e^(-0.1997*x)
  • @CarmenGrandi 我建议绘制两条曲线并观察哪条曲线最适合您的数据。我不知道 excel 如何处理曲线拟合。
猜你喜欢
  • 2012-12-30
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
相关资源
最近更新 更多