Научный журнал
Современные наукоемкие технологии
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 0,940

ИССЛЕДОВАНИЕ МЕТОДА ИНТЕРПОЛИРОВАНИЯ СПЛАЙНАМИ И ЕГО РЕАЛИЗАЦИЯ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PYTHON

Курасов Д.А. 1 Волоскова М.М. 1 Сабирова Р.Д. 1 Хомутова Е.И. 1 Кутузов А.С. 2
1 ФГАОУ ВО «Тюменский государственный университет»
2 ФГБОУ ВО «Челябинский государственный университет»
Аннотация. В статье рассматривается метод интерполирования сплайнами. Для данного метода приводятся в обобщенном виде основные формулы и расчетные зависимости, указываются необходимые условия существования сплайнов. В качестве примера построения кубического сплайна рассматривается тригонометрическая функция. Система уравнений, соответствующая кубическому сплайну, решается методом обратной матрицы в числовом редакторе Excel, что позволяет с минимальными трудозатратами найти искомые коэффициенты. Также рассмотрена реализация указанного метода на языке программирования Python для данной тригонометрической функции. Произведен сравнительный анализ полученных результатов. Визуализация расчетов представлена в виде графиков функции для sin(x), интерполяционного многочлена и графика функций, наложенных друг на друга, с целью анализа расхождения точного и приближенного значения функций. Исследование, выполненное в статье, показывает, что различные методы расчета приближенных значений для функций дают разные результаты и в любом методе имеются свои погрешности и расхождения. Но так или иначе реализация метода интерполирования сплайнами с использованием элементов Индустрии 4.0 с помощью языка программирования Python дает более точные данные, которые подтверждаются наименьшим расхождением графиков.
интерполирование
сплайны
интерполяционные многочлены
численные методы
приближения сплайнами
1. Лиманова Н.И., Тренина М.А. Об использовании сплайн-функций в перколяционных исследованиях // Информационные системы и технологии: управление и безопасность. 2012. № 1. С. 192-199.
2. Sun M., Lan L., Zhu C., Lei F. Cubic spline interpolation with optimal end conditions // Journal of Computational and Applied Mathematics. 2023. Vol. 425. P. 115039.
3. Ahmad N., Khan F.D. Study of Cubic B Spline Interpolation // Journal of Ultra Scientist of Physical Sciences. 2019. Vol. 31(2). Р. 4-10.
4. Муратов Е.Р. Алгоритмы предварительной обработки изображений в системах комбинированного видения летательных аппаратов: дис. … канд. техн. наук. Рязань, 2013. 177 с.
5. Петрова Е.В. Вариант реализации сплайн-интерполяции // Системы компьютерной математики и их приложения. 2016. № 17. С. 19-21.
6. Лавренов А.Н. Метод нахождения обратной матрицы порядка N // Журнал вычислительной математики и математической физики. 2012. Т. 52, № 6. С. 979.
7. Хахаев И.А. Практикум по алгоритмизации и программированию на Python. М.: ИНТУИТ, 2016. 179 с.
8. Kurasov D.A. Digital technologies Industry 4.0// CEUR Workshop Proceedings. 2021. Vol. 2843.
9. Kurasov D.A. Computer-aided manufacturing: Industry 4.0 // IOP Conference Series: Materials Science and Engineering. 2021. Vol. 1047. P. 012153.

Интерполяционные формулы Лагранжа, Ньютона, Стирлинга и иных при использовании большого числа узлов интерполяции на всем отрезке [a; b] часто приводят к плохому приближению из-за накопления погрешностей в процессе вычислений. Кроме того, из-за расходимости процесса интерполяции увеличение числа узлов не обязательно приводит к повышению точности. Для снижения погрешностей используется кусочно-полиномиальная интерполяция. В этом случае весь отрезок [a; b] разбивается на частичные отрезки, и на каждом из них функцию f(x) заменяют приближенно полиномом невысокой степени.

Один из способов интерполирования на всем отрезке [a; b] является интерполирование сплайнами [1]. Сплайн представляет собой кусочно-полиномиальную функцию, определенную на отрезке [a; b] и имеющую на этом отрезке некоторое количество непрерывных производных. Преимущества интерполяции сплайнами по сравнению с обычными методами интерполяции – сходимость и устойчивость вычислительного процесса.

В качестве примера рассмотрим один из наиболее распространенных случаев – интерполирование функции кубическим сплайном [2].

Пусть на отрезке [a; b] задана непрерывная функция f(x).

Введем разбиение отрезка:

missing image file (1)

и обозначим yi = f(xi), i = 0,1,2,…,n.

Интерполяционный кубический сплайн [3], соответствующий данной функции f(x) и узлам интерполяции (1), будет определяться функцией S(x), удовлетворяющей следующим условиям:

1) на каждом отрезке [xi–1; xi ], i = 0,1,2,…,n. функция S(x) является кубическим многочленом; 2) функция S(x), а также ее первая и вторая производные непрерывны на отрезке [a; b]; 3) S(xi) = f(xi), i = 0,1,2,…,n. соответствует условию интерполирования [4].

Целью статьи является сравнительный анализ результатов приближенного вычисления с точными данными при использовании операции интерполирования методом кубического сплайна. Сравнительный анализ погрешностей и расхождений производится на основе визуализации расчетных зависимостей в виде графиков найденных интерполяционных полиномов.

Материал и методы исследования

Для примера нахождения и построения кубического сплайна [5] рассмотрим функцию f(x) = sinx. Используем два метода получения приближенных значений для указанной функции. В первом случае реализуем построение кубического сплайна вручную, а полученную систему уравнений решим методом обратной матрицы в числовом редакторе Excel. Во втором случае используем реализацию построения кубического сплайна с помощью языка программирования Python.

Первый метод

Определим для указанной функции три узла интерполирования. На каждом узле составим кубический сплайн, используя таблицу значений функции f(x) = sinx, x ∈ [0; π / 2].

Значения функции f(x) = sinx, x ∈ [0; π / 2]

x

0

π / 6

π / 3

π / 2

sin x

0

1/2

missing image file

1

Уравнения сплайнов для трех узлов интерполирования с учетом исходных данных имеют вид:

missing image file (2)

Коэффициенты ai, bi, ci, di с учетом трех условий прохождения через узловые точки и с учетом преобразований имеют вид:

missing image file (3)

Также необходимо выполнение следующих условий.

1. В стыках между сплайнами должна обеспечиваться гладкость. В узлах не должно быть изломов. Отсюда следует, что в узлах интерполирования должны быть одинаковыми первые производные соседних сплайнов, соответствующих системе уравнений:

missing image file (4)

Сплайны S1 и S2 стыкуются в точке x1 = π / 6. После подстановки в систему уравнений (4) значения точки х1, а также данных таблицы равенство missing image file принимает вид:

missing image file (5)

Аналогично со сплайнами S2 и S3, которые стыкуются в точке x2 = π / 3.

missing image file

Рис. 1. Коэффициенты a1, b1, c1, d1, a2, b2, c2, d2 и a3, b3, c3, d3 в числовом редакторе Excel

Равенство missing image file принимает вид:

missing image file (6)

2. В узлах, где стыкуются сплайны, должна быть одинаковой кривизна соседних сплайнов. Это означает равенство вторых производных, соответствующих системе уравнений:

missing image file (7)

Сплайны S1 и S2 стыкуются в точке x1 = π/6, а сплайны S2 и S3 – в точке x2 = π / 3. После подстановки в систему уравнений (7) значения точки x1, а также данных таблицы получаем:

missing image file (8)

3. Необходимо задать поведение сплайнов на левой и правой границах, то есть в точках x0 и x3. Для этого необходимо задать нулевую кривизну (нулевые значения вторых производных). В точке x0 = 0: missing image file, а в точке x2 = π / 2: missing image file После подстановки в систему уравнений (3) с учетом преобразований получаем:

missing image file (9)

В результате получили систему уравнений (3), (5), (6), (8), (9) с 12 неизвестными.

Такую систему удобно решить в числовом редакторе Excel методом обратной матрицы [6]. Найденные искомые коэффициенты представлены на рисунке 1.

Второй метод.

Используем для построения кубического сплайна высокоуровневый язык программирования Python [7]. Программный код должен быть написан таким образом, чтобы можно было выбрать любую функцию для построения кубического сплайна. Для нашего случая будем рассматривать также функцию f(x) = sinx на тех же узлах интерполирования. Программный код представлен на рисунках 2, 3. В структуру кода добавлены комментарии, поясняющие алгоритм построения кубического сплайна.

Результаты исследования и их обсуждение

После запуска программы в интегрированной среде IDLE пользователь должен ответить на вопрос, что именно он хочет сделать. При этом пользователю доступны варианты с вводом любого набора точек функции и вводом любой функции. В примере на рисунке 4 выбрана функция f(x) = sinx. Далее вводятся значения аргументов по порядку, которые будут соответствовать каждому из трех узлов интерполирования. Следующим шагом программа строит три интерполяционных многочлена третьей степени и подставит в них посчитанные коэффициенты.

Сравнительный анализ коэффициентов, полученных в результате реализации программного кода на языке Python, и коэффициентов, полученных в результате решения системы уравнений методом обратной матрицы в числовом редакторе Excel, показывает наличие расхождений при вычислениях.

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

a1 = 0, missing image file,

c1 = 0, missing image file

a2 = 0,5, missing image file,

missing image file, missing image file,

missing image file, missing image file,

missing image file, missing image file.

missing image file

Рис. 2. Листинг реализации программного кода на языке программирования Python

missing image file

Рис. 3. Листинг реализации программного кода на языке программирования Python

missing image file

Рис. 4. Демонстрация работы программы с построенными многочленами третьей степени

missing image file

Рис. 5. Графики интерполяционных многочленов, функции f(x) = sinx и их наложения друг на друга

При вычислении коэффициентов с помощью реализации метода интерполирования на языке программирования Python получились следующие значения:

a1 = 0, missing image file,

c1 = 0, missing image file,

missing image file,

missing image file,

missing image file,

missing image file,

missing image file,

missing image file,

missing image file,

missing image file.

По полученным данным можно построить график найденных интерполяционных полиномов в виде кубического сплайна и график функции. На рисунке 5 показаны график функции f(x) = sinx, график интерполяционных многочленов и график наложения функций друг на друга.

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

Вывод

В результате работы, выполненной в статье, можно сделать вывод о том, что различные методы расчета приближенных значений для функций дают разные результаты и в любом методе имеются свои погрешности и расхождения. Но так или иначе реализация метода интерполирования сплайнами с использованием элементов Индустрии 4.0 [8, 9] с помощью языка программирования Python дает более точные данные, которые подтверждаются наименьшим расхождением графиков. Также к плюсам второго метода исследования можно отнести меньшую трудозатратность за счет полностью автоматических расчетов программой.


Библиографическая ссылка

Курасов Д.А., Волоскова М.М., Сабирова Р.Д., Хомутова Е.И., Кутузов А.С. ИССЛЕДОВАНИЕ МЕТОДА ИНТЕРПОЛИРОВАНИЯ СПЛАЙНАМИ И ЕГО РЕАЛИЗАЦИЯ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ PYTHON // Современные наукоемкие технологии. – 2024. – № 4. – С. 46-53;
URL: https://top-technologies.ru/ru/article/view?id=39972 (дата обращения: 19.05.2024).

Предлагаем вашему вниманию журналы, издающиеся в издательстве «Академия Естествознания»
(Высокий импакт-фактор РИНЦ, тематика журналов охватывает все научные направления)

«Фундаментальные исследования» список ВАК ИФ РИНЦ = 1,674