Как установить верхнюю и нижнюю границу результата B-Spline, чтобы получить разумную интерполяцию - PullRequest
0 голосов
/ 14 мая 2018

У меня есть функция интерполяции:

from scipy import interpolate
def f(x):
  x_points = [38508,38510,38512]
  y_points = [0.249267578125,0.181396484375,0.1912841796875]

  tck = interpolate.splrep(x_points, y_points,k=2,xb=38508,xe=38512)
  return interpolate.splev(x, tck)

когда я оцениваю f(38503) вывод равен 0.75, что совсем не похоже на y_points.

Есть предложения о том, как уменьшить эту ошибку, используя тот или иной метод интерполяции?

1 Ответ

0 голосов
/ 14 мая 2018

Как отметил RishiG в комментариях, вы хотите сделать экстраполяцию.

объектно-ориентированный подход имеет дополнительный параметр для этого: ext.

from scipy import interpolate

def f(x):
    x_points = [38508, 38510, 38512]
    y_points = [0.249267578125, 0.181396484375, 0.1912841796875]

    tck = interpolate.splrep(x_points, y_points,k=2,xb=38508,xe=38512)
    return interpolate.splev(x, tck)

def g(x):
    x_points = [38508, 38510, 38512]
    y_points = [0.249267578125, 0.181396484375, 0.1912841796875]

    spl = interpolate.UnivariateSpline(x_points, y_points, k=2, ext=3)

    return spl(x)

if __name__=='__main__':

    print(f(38503))
    print(g(38503))

Выход:

0.7591400146484374
0.249267578125

Edit:

Этот похожий вопрос также может быть интересным.

...