2014-09-13 7 views
1

Я использую следующий код:scipy.interpolate.splrep давая неверную интерполяции для би-сплайн

x = [80, 85, 90, 95, 100, 105, 110, 115] 
y = [0.31976258043267208, 0.31718670335264199, 0.30116311412953689, 0.29687766899837931, 0.29802720516866577, 0.30707962224836099, 0.32328422706655086, 0.34467623793716823] 

bSpline = scipy.interpolate.splrep(x, y, k=3) 
yInterp = scipy.interpolate.splev(np.linspace(0,1,num=8), bSpline) 

Но BSPLINE имеет странные узлы (некоторые из них 0), а затем yInterp это все перепутались:

bSpline: (array([ 80, 80, 80, 80, 90, 95, 100, 105, 115, 115, 115, 115 ]), array([ 0.31976258, 0.33015199, 0.29797999, 0.29680536, 0.29635823, 
    0.30911387, 0.32907255, 0.34467624, 0, 0, 0, 0 ]), 3) 
yInterp: [-29.46356522 -29.3160613 -29.16904367 -29.02251153 -28.87646408, -28.73090053 -28.58582008 -28.44122191] 

yInterp должны иметь несколько значений вокруг положительной 0,30 не -28 и -29

+0

Значения 'x', которые вы передавали в' splrep', варьируются от 80 до 115. Вы оцениваете сплайн при значениях от 0 до 1. Если вы оцениваете значения во входном диапазоне, выход будет составлять около 0,3 , –

+0

Ах да, это было довольно глупо! Если вы хотите добавить ответ, я могу принять его – user1387717

+0

Комментарий теперь является ответом. –

ответ

2

Рентгеновское значения, которые передаются в splrep диапазоне от 80 до 115. вы оцениваете сплайн при значениях от 0 до 1. Если вы оцениваете значения во входном диапазоне, выход будет около 0,3.

Смежные вопросы