Python кубический сплайн странно интерполируется
Я пытаюсь интерполировать, используя кубический сплайн, но интерполяция сильно колеблется вокруг точек данных. Я не знаю, как это исправить. Любой совет будет принята с благодарностью.
TY = [90.3601709789,40.5189212844,20.3763456417,10.8899070251,6.19675122846,5.23402053792,6.05144428822,9.64276229024,24.1886072903,41.5725945652,171.923304843]
TX = [0.93984962406,0.90225563910,0.84586466165,0.75187969925,0.56390977444,0.37593984962,0.18796992481,0.07518796992,0.01879699248,0.00939849624,0.00187969925]
ipos = TX[0:6]
jpos = TY[0:6]
minpos = min(jpos)
maxpos = max(jpos)
ineg = TX[5:11]
jneg = TY[5:11]
minneg = min(jneg)
maxneg = max(jneg)
ypos1 = interp1d(jpos,ipos)
ypos2 = interp1d(jpos,ipos, kind='cubic')
xpos = np.linspace(minpos,maxpos,10000,endpoint=True)
yneg1 = interp1d(jneg,ineg)
yneg2 = interp1d(jneg,ineg, kind='cubic')
xneg = np.linspace(minneg,maxneg,10000,endpoint=True)
plt.figure('T')
plt.xscale('log')
plt.plot(TX,TY)
plt.plot(xpos,ypos2(xpos))
plt.plot(xneg,yneg2(xneg))
Положительная и отрицательная части связаны с тем, что данные изменяют направление в средней точке.
1 ответ
Известно, что кубические сплайны подвержены колебаниям из-за требования непрерывной второй производной. Чтобы избежать этого, можно использовать вместо этого непрерывные сплайны C1. В земле скучной, посмотрите на PchpIntetpolator и / или Akima1DInterpolator