Интерполяция и аппроксимация функций: многочлены Лагранжа и сплайны
Задача восстановления функции по точкам
В вычислительной математике и инженерии постоянно возникает ситуация, когда функция задана не аналитической формулой, а таблицей дискретных значений. Эта таблица может быть получена в результате дорогостоящего физического эксперимента, астрономических наблюдений, социологического опроса или как результат работы другой сложной компьютерной программы. Возникает необходимость «заполнить пробелы» — узнать значения функции в тех точках, которые не вошли в исходную таблицу, или получить удобную аналитическую формулу для дальнейшего интегрирования и дифференцирования. Эта проблема решается методами интерполяции и аппроксимации.
Важно понимать разницу между этими двумя понятиями. При интерполяции мы требуем, чтобы построенная кривая (интерполирующая функция) проходила строго через все заданные узловые точки. При аппроксимации же мы ищем кривую, которая проходит не строго через точки, но «максимально близко» к ним, сглаживая возможные погрешности измерений. Сейчас мы подробнее рассмотрим именно интерполяцию.
Глобальная интерполяция: многочлен Лагранжа
Классическим подходом является алгебраическая интерполяция, при которой мы ищем интерполирующую функцию в виде полинома (многочлена). Согласно теореме Вейерштрасса, любую непрерывную функцию можно приблизить полиномом с любой заданной точностью. А фундаментальная теорема алгебры гласит, что через N+1 уникальную точку можно провести ровно один полином степени N.
Самым известным способом записи такого полинома является интерполяционный многочлен Лагранжа. Его формула строится элегантно и интуитивно понятно: это линейная комбинация базисных полиномов. Каждый базисный полином устроен так, что в одном конкретном узле сетки он равен единице, а во всех остальных узлах обращается в ноль. Многочлен Лагранжа прекрасен в теории, но имеет серьезный изъян на практике при большом количестве точек. Этот изъян известен как «феномен Рунге». Если мы попытаемся интерполировать функцию по большому количеству узлов, мы получим полином очень высокой степени (например, 20-й степени). Между узлами на краях интервала этот полином начнет демонстрировать дикие, высокоамплитудные осцилляции (раскачку), которые не имеют ничего общего с реальным поведением исходной физической величины.
Кубические сплайны: гибкость и гладкость
Чтобы избежать феномена Рунге и не использовать полиномы гигантских степеней, вычислительная математика перешла к кусочно-полиномиальной интерполяции, жемчужиной которой являются сплайны. Само слово «сплайн» пришло из инженерного черчения — так называли гибкую металлическую линейку, которую прижимали грузиками к узловым точкам чертежа, чтобы провести плавную кривую.
В математике сплайн — это функция, которая на каждом отдельном интервале между двумя соседними точками задается своим собственным полиномом (обычно третьей степени — кубический сплайн). Однако, в отличие от простого набора кривых, эти полиномы сшиваются в узлах особым образом. Накладываются жесткие условия не только на непрерывность самой функции (кривая не должна разрываться), но и на непрерывность ее первой производной (отсутствие изломов, гладкость) и второй производной (непрерывность кривизны). В результате получается идеально гладкая, визуально эстетичная и математически устойчивая кривая. Сплайны не подвержены осцилляциям Рунге и сегодня лежат в основе всей компьютерной графики (векторные шрифты, CAD-системы, 3D-моделирование).