首页 > 解决方案 > scipy.optimize 曲线拟合在使用数据集的一部分时给出奇怪的结果

问题描述

我正在尝试使用 scipy.optimize curve_fit 来拟合指数函数:

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

我从 tdms 文件导入数据,在原始数据上一切正常:

data = td[gps[0].name][chns[10].name][:]
time = td[gps[0].name][chns[10].name].time_track()

popt, pcov = curve_fit(func, time, data)
resulting = func(time,popt[0],popt[1],popt[2])
plt.plot(time,data)
plt.plot(time,resulting)
plt.legend(['Actual Temp','Calculated Temp'])

原始数据

但是,在这些数据集中,通常有一小部分数据我不想在开头和结尾包含。所以我试图抓取一部分数据,但是当我这样做时,我不再得到有意义的值:

data = td[gps[0].name][chns[10].name][:]
time = td[gps[0].name][chns[10].name].time_track()

start=30
end=len(data)-10

tt = np.array(time[start:end])
dt = np.array(data[start:end])

popt, pcov = curve_fit(func, tt, dt)
resulting = func(time,popt[0],popt[1],popt[2])
plt.plot(time,data)
plt.plot(time,resulting)
plt.legend(['Actual Temp','Calculated Temp'])

我想也许数据类型不正确,所以我将它强制转换为一个 numpy 数组,但它没有改变任何东西。

使用部分数据生成数据集

任何帮助,将不胜感激。

标签: pythonpython-3.xscipy

解决方案


推荐阅读