我有200k个数据点,我试图得到拟合多项式的导数。我每隔0.5K将数据集分成更小的数据集,数据是电压与温度的关系。我的代码大致如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
testset=pd.read_csv('150615H0.csv',sep='\t')
x=np.linspace(1,220,219)
ub=min(testset['T(K)'])
lb=min(testset['T(K)'])-1
q={i:testset[(testset['T(K)'] < ub+i) & (testset['T(K)'] > lb+i)] for i in x}
f={j:np.polyfit(q[j]['T(K)'],q[j]['Vol(V)'],4) for j in q}
fs={k:np.poly1d(f[k]) for k in f}
fsd={l:np.polyder(fs[l],1) for l in fs}
for kk in q:
plt.plot(q[kk]['T(K)'],fsd[kk](q[kk]['T(K)']),color='blue',linewidth=2,label='fit')
毫不奇怪,导数是不连续的,我不喜欢它。有没有其他方法可以在局部拟合多项式的同时得到连续导数?
最佳答案
查看Savitzky-Gollay filter以获得有效的局部多项式拟合。
例如,它在scipy.signal.savgol_filter
中实现拟合多项式的导数可以用deriv=1
参数求得。