Интерполяция точек данных в конечных точках набора данных - PullRequest
1 голос
/ 26 августа 2009

Из scipy я использую функции interpolate.splrep и interpolate.splev для интерполяции моего набора данных. Неудивительно, что это не очень хорошо работает, если я пытаюсь получить интерполированное значение вблизи границ набора данных.

Я нашел обходной путь (расширение набора данных двумя дополнительными записями, которые имеют то же значение, что и последняя «обычная» запись набора данных; что, похоже, работает), но мне интересно, стоит ли мне использовать другая функция интерполяции, или если есть общий способ справиться с этим.

Заранее спасибо!

1 Ответ

0 голосов
/ 13 ноября 2009

К сожалению, я не знаком со Сципионом, но, возможно, это поможет:

Полагаю, это полиномиальные сплайн-функции, поэтому вы можете фактически интерполировать ваш набор данных вблизи краев с фактическими полиномами. Это легко.

Предположим, у нас есть набор данных точек, таких как (xi, yi), i = 1..n. С помощью функции splerp мы можем найти первую производную (на самом деле будет существовать конечная разница) в точках '2' (df_second ') и' n-1 '(df_before_last). Тогда нам понадобятся две системы линейных уравнений:

a1*x1^2 + b1*x1 + c1 = y1
a1*x2^2 + b1*x2 + c1 = y2
2*a1*x2 + b1 = df_second

и

a2*xn^2 + b2*xn + c2 = yn
a2*x(n-1)^2 + b2*x(n-1) + c2 = y(n-1)
2*a2*x(n-1) + b2 = df_before_last

Решая это уравнение, вы получите два многоугольника: a1 * x ^ 2 + b1 * x + c1 и a2 * x ^ 2 + b2 * x + c2, которые будут интерполироваться и легко получать доступ к функции сплайна.

На самом деле, вы можете повысить степень полиномов и установить кривизну и угол интерполированной графики в первой и последней точке, просто поместив дополнительные уравнения в систему.

...