Sto convertendo un programma MatLab in Python e sto avendo problemi a capire perché scipy.interpolate.interp1d sta dando risultati diversi rispetto a MatLab interp1.I risultati dell'interp1d di SciPy sono diversi da MatLab interp1
in MATLAB l'utilizzo è leggermente diverso:
yi = interp1(x,Y,xi,'cubic')
SciPy:
f = interp1d(x,Y,kind='cubic')
yi = f(xi)
Per un esempio banale i risultati sono gli stessi: MatLab:
interp1([0 1 2 3 4], [0 1 2 3 4],[1.5 2.5 3.5],'cubic')
1.5000 2.5000 3.5000
Python:
interp1d([1,2,3,4],[1,2,3,4],kind='cubic')([1.5,2.5,3.5])
array([ 1.5, 2.5, 3.5])
Ma per un esempio reale che non sono la stessa cosa:
x = 0.0000e+000 2.1333e+001 3.2000e+001 1.6000e+004 2.1333e+004 2.3994e+004
Y = -6 -6 20 20 -6 -6
xi = 0.00000 11.72161 23.44322 35.16484... (2048 data points)
Matlab:
-6.0000e+000
-1.2330e+001
-3.7384e+000
...
7.0235e+000
7.0028e+000
6.9821e+000
SciPy:
array([[ -6.00000000e+00],
[ -1.56304101e+01],
[ -2.04908267e+00],
...,
[ 1.64475576e+05],
[ 8.28360759e+04],
[ -5.99999999e+00]])
Tutti i pensieri su come posso ottenere risultati coerenti con MatLab?
Edit: Comprendo che esiste una certa latitudine nell'implementazione degli algoritmi di interpolazione cubica che probabilmente spiega le differenze che sto vedendo. Sembra anche che il programma MatLab originale che sto convertendo avrebbe dovuto utilizzare l'interpolazione lineare, quindi la domanda è probabilmente discutibile.