Я намагаюся перенести програму, яка використовує рулонний інтерполятор (розроблений математичним колегіумом), щоб використовувати інтерполятори, надані scipy. Я хотів би використати або обернути інтерполятор scipy так, щоб він мав якомога ближчу поведінку до старого інтерполятора.
Ключова різниця між двома функціями полягає в тому, що в нашому оригінальному інтерполяторі - якщо вхідне значення вище або нижче вхідного діапазону, наш оригінальний інтерполятор екстраполює результат. Якщо ви спробуєте це за допомогою інтерфейсного інтерполятора, це піднімає a ValueError
. Розглянемо цю програму як приклад:
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) # Causes ValueError, because it's greater than max(x)
Чи є розумний спосіб зробити це так, що замість збою остаточний рядок просто зробить лінійний екстраполят, продовжуючи градієнти, визначені першою та останніми двома точками, до нескінченності.
Зауважте, що в реальному програмному забезпеченні я фактично не використовую функцію exp - це тут лише для ілюстрації!
scipy.interpolate.UnivariateSpline
здається, екстраполює без проблем.