gpt4 book ai didi

python - 使用具有向后依赖性的 scipy 进行曲线拟合

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:51 26 4
gpt4 key购买 nike

我正在尝试对 transient 热数据进行曲线拟合。我有方程可以计算每个时间点的温度变化。必须将该增量添加到前一个时间点的温度中才能获得任何给定时间点的温度。

即; Tn = Tn-1 + delta。

如果我使用 example 来表达来自 scipy 的 curve_fit 文档。应该是类似的东西。

def func(x, a, b, c):
return a * np.exp(-b * x) + c #+ func(x[n-1], a, b, c) <<< need help here

xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
np.random.seed(1729)
y_noise = 0.2 * np.random.normal(size=xdata.size)
ydata = y + y_noise
popt, pcov = curve_fit(func, xdata, ydata)
print(popt)
plt.plot(xdata, ydata, 'b-', label='data')
plt.plot(xdata, func(xdata, *popt), 'r-',
label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))

非常感谢任何有关如何实现这一目标的线索。谢谢!

最佳答案

如果您有一个微分方程,您需要在将其拟合到数据之前找到积分。除非数据也有差异,在这种情况下您可以直接拟合。

这个问题似乎暗示在你的情况下deltaa * np.exp(-b * x) + c给出,这使得结果y值易于计算,因为 curve_fit所有 x 值传递给 func 并期望它返回所有 y 值.

def delta_func(x, a, b, c):
return a * np.exp(-b * x) + c

def func(x, a, b, c):
y = np.empty(x.shape)
y[0] = delta_func(0, a, b, c)
for i in range(1, len(x)):
y[i] = y[i-1] + delta_func(x[i], a, b, c)
return y

这是为了说明。您可以使用 np.cumsum 获得相同的结果:

def func(x, a, b, c):
return np.cumsum(a * np.exp(-b * x) + c)

关于python - 使用具有向后依赖性的 scipy 进行曲线拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com