Je tente de porter un programme qui utilise un interpolateur fait maison (développé par un collègue mathématicien) pour utiliser les interpolateurs fournis par scipy. Je voudrais utiliser ou envelopper l'interpolateur scipy pour qu'il ait un comportement aussi proche que possible de l'ancien interpolateur.
Une différence clé entre les deux fonctions est que dans notre interpolateur original - si la valeur d'entrée est au-dessus ou en dessous de la plage d'entrée, notre interpolateur original extrapolera le résultat. Si vous essayez cela avec l'interpolateur scipy, une ValueError
est lancée. Considérez ce programme comme exemple:
import numpy as np
from scipy import interpolate
x = np.arange(0,10)
y = np.exp(-x/3.0)
f = interpolate.interp1d(x, y)
print f(9)
print f(11) # Cause une ValueError, car c'est plus grand que max(x)
Y a-t-il un moyen sensé de faire en sorte que, au lieu de planter, la dernière ligne fasse simplement une extrapolation linéaire, prolongeant les gradients définis par les deux premiers et les deux derniers points jusqu'à l'infini.
Notez que dans le logiciel réel, je n'utilise pas réellement la fonction exp - elle est là pour illustration seulement!