Как понять возвращаемые значения scipy.interpolate.splrep

Вопрос или проблема

Фон

Продолжение Интерполяция сплайнами – почему куб с производной второго порядка,
следуя Кубическая интерполяция сплайнами на YouTube. Пример из YouTube приведен ниже.

Реализовано с использованием scipy.interpolate.splrep и попыткой понять, что представляют собой возвращаемые значения функции splrep.

Учитывая набор точек данных (x[i], y[i]), определить гладкое приближение сплайна степени k на интервале xb <= x <= xe.

Возвращает
tck : кортеж
Кортеж
(t, c, k), содержащий вектор узлов, коэффициенты B-сплайна и степень сплайна.

import numpy as np
from pylab import plt, mpl

plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline

def create_plot(x, y, styles, labels, axlabels):
    plt.figure(figsize=(10, 6))
    for i in range(len(x)):
        plt.plot(x[i], y[i], styles[i], label=labels[i])
        plt.xlabel(axlabels[0])
        plt.ylabel(axlabels[1])
    plt.legend(loc=0)

x = np.array([3.0, 4.5, 7.0, 9.0])
y = np.array([2.5, 1.0, 2.5, 0.5])
create_plot([x], [y], ['b'], ['y'], ['x', 'y'])

import scipy.interpolate as spi  
interpolation = spi.splrep(x, y, k=3)

IX = np.linspace(3, 9, 100)
IY = spi.splev(IX, interpolation)

create_plot(
    [x, IX], 
    [y, IY], 
    ['b', 'ro'],
    ['x', 'IY:интерполяция'], 
    ['x', 'y']
)

Вопросы

Как интерпретировать и понять возвращаемые значения и какие ресурсы использовать для понимания?

Кортеж (t, c, k), содержащий вектор узлов, коэффициенты B-сплайна и степень сплайна.

Возвращаемое значение о узлах

interpolation[0]

array([3., 3., 3., 3., 9., 9., 9., 9.])

Я думал, что первый элемент кортежа будет узлами, которые должны быть x, но нет. Что это за значения 3., 3. … ?

Возвращаемые значения о коэффициентах B-сплайна

interpolation[1]

array([ 2.5 , -2.21111111, 6.18888889, 0.5 , 0. , 0. , 0. , 0. ])

Пожалуйста, помогите или предложите, куда мне обратиться и что нужно понять о “коэффициентах B-сплайна”, чтобы интерпретировать эти значения?

Решение для первого интервала (0.186566, 1.6667, 0.24689), поэтому я думал, что эти значения будут во втором элементе, но нет. Как решение связано с возвращаемыми значениями?

введите описание изображения здесь

t (узлы) — это точки, в которых соединяются разные части B-сплайна.

c — это веса базисных функций B-сплайна, поскольку интерполированная кривая является взвешенной суммой базисных функций.

B-сплайн, который интерполирует между данными (x, y), имеет это уравнение:
сплайн

с базисными функциями, определяемыми рекурсией на разных интервалах:
базис

Источник

Ответ или решение

Точки сопряжения и веса: понимание выходных данных scipy.interpolate.splrep

Теория (Theory)

Уравновешенное и гибкое средство для аппроксимации и интерполяции множества данных можно найти в сплайнах, а именно в B-сплайнах, которые обеспечивают гладкое и последовательное соединение в зависимости от указанной степени. Функция splrep из библиотеки SciPy предназначена для обеспечения такой функциональности. Она возвращает кортеж (t, c, k), где:

  • t — вектор узлов: Определяет точки, в которых кусочные полиномы, составляющие B-сплайн, соединяются.
  • c — коэффициенты B-сплайна: Это веса базисных функций сплайна, которые определяют форму каждого кусочного полинома.
  • k — степень сплайна: Это степень полиномов, составляющих B-сплайн. По умолчанию равна 3, что соответствует кубическим сплайнам.

Пример (Example)

Рассмотрим выполнение функции splrep на заданных данных:

import numpy as np
import scipy.interpolate as spi

x = np.array([3.0, 4.5, 7.0, 9.0])
y = np.array([2.5, 1.0, 2.5, 0.5])
interpolation = spi.splrep(x, y, k=3)

Узлы (t)

Вы можете ожидать, что узлы будут совпадать с входными точками x, но это не так. Узлы (t) включают дополнительные точки для обеспечения необходимых краевых условий кубического сплайна:

interpolation[0]
# array([3., 3., 3., 3., 9., 9., 9., 9.])

Эта избыточность в узлах обеспечивает гладкость сплайна в начале и в конце интервала аппроксимации. Например, для кубических сплайнов минимальное количество повторений узлов равно трем для начальных и конечных узлов, чтобы обеспечить непрерывность и гладкость второй производной в этих точках.

Коэффициенты (c)

Коэффициенты B-сплайна (c) – это веса базисных функций, которые определяют форму полинома сплайна:

interpolation[1]
# array([ 2.5 , -2.21111111, 6.18888889, 0.5 , 0. , 0. , 0. , 0. ])

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

Применение (Application)

Использование splrep и splev предоставляет мощный механизм для интерполяции и аппроксимации данных. Преимущества применения данных функций в задачах интерполяции включают в себя:

  1. Гладкость и непрерывность: Сплайны обеспечивают гладкость через производные до k-1 порядка, что делает их идеальными для нужд, требующих гладкой аппроксимации, таких как графика, моделирование кривых и траекторий.

  2. Гибкость: B-сплайны, формируемые с помощью splrep, очень гибки. Они достаточны для точной аппроксимации данных, но при этом избегают избыточной волатильности и осцилляций, присущих полиномам высокого порядка.

  3. Практическое приложение: Ex.: в значениях IX и IY, полученных следующим образом:

    IX = np.linspace(3, 9, 100)
    IY = spi.splev(IX, interpolation)

    Мы видим, как сплайн применяет узлы и веса для интерполяции сглаженной кривой. Попрактиковаться в работе со сплайнами можно через сравнение полученных аппроксимированных значений с реальными, что всегда полезно для визуализации результатов в процессе обучения.

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

Оцените материал
Добавить комментарий

Капча загружается...