В математике линейная интерполяция — это метод подгонки кривой с использованием линейных полиномов для построения новых точек данных в пределах дискретного набора известных точек данных.
Если две известные точки заданы координатами и , линейный интерполянт — это прямая линия между этими точками. Для значения в интервале значение вдоль прямой линии задается уравнением наклонов , которое может быть получено геометрически из рисунка справа. Это особый случай полиномиальной интерполяции с .
Решая это уравнение относительно , которое является неизвестным значением при , получаем , что является формулой линейной интерполяции в интервале . За пределами этого интервала формула идентична линейной экстраполяции .
Эту формулу можно также понимать как взвешенное среднее. Веса обратно пропорциональны расстоянию от конечных точек до неизвестной точки; более близкая точка оказывает большее влияние, чем более дальняя. Таким образом, веса равны и , которые являются нормализованными расстояниями между неизвестной точкой и каждой из конечных точек. Поскольку их сумма равна 1, то получается формула для линейной интерполяции, приведенная выше.
Линейная интерполяция на наборе точек данных ( x 0 , y 0 ), ( x 1 , y 1 ), ..., ( x n , y n ) определяется как кусочно-линейная , полученная в результате конкатенации линейных сегментных интерполянтов между каждой парой точек данных. Это приводит к непрерывной кривой с разрывной производной (в общем случае), таким образом, класса дифференцируемости .
Линейная интерполяция часто используется для аппроксимации значения некоторой функции f с использованием двух известных значений этой функции в других точках. Погрешность этой аппроксимации определяется как, где p обозначает линейный интерполяционный полином, определенный выше:
С помощью теоремы Ролля можно доказать , что если f имеет непрерывную вторую производную, то ошибка ограничена величиной
То есть, аппроксимация между двумя точками заданной функции ухудшается со второй производной аппроксимируемой функции. Это также интуитивно верно: чем «кривее» функция, тем хуже становятся аппроксимации, сделанные с помощью простой линейной интерполяции.
Линейная интерполяция использовалась с древности для заполнения пробелов в таблицах. Предположим, что у вас есть таблица, в которой указано население какой-то страны в 1970, 1980, 1990 и 2000 годах, и вы хотите оценить численность населения в 1994 году. Линейная интерполяция — простой способ сделать это. Считается, что она использовалась в империи Селевкидов (последние три столетия до нашей эры) и греческим астрономом и математиком Гиппархом (второй век до нашей эры). Описание линейной интерполяции можно найти в древнекитайском математическом тексте под названием «Девять глав о математическом искусстве» (九章算術), [1] датируемом периодом с 200 г. до н. э. по 100 г. н. э. и « Альмагесте» (II век н. э.) Птолемея .
Основная операция линейной интерполяции между двумя значениями обычно используется в компьютерной графике . На жаргоне этой области ее иногда называют lerp (от linear int erp olation). Термин может использоваться как глагол или существительное для операции. например, « Алгоритм Брезенхэма lerp инкрементально между двумя конечными точками линии».
Операции lerp встроены в аппаратное обеспечение всех современных графических процессоров. Они часто используются в качестве строительных блоков для более сложных операций: например, билинейная интерполяция может быть выполнена за три lerp. Поскольку эта операция дешева, она также является хорошим способом реализации точных таблиц поиска с быстрым поиском для гладких функций без слишком большого количества записей в таблице.
Если функции C 0 недостаточно, например, если известно, что процесс, создавший точки данных, более гладкий, чем C 0 , то обычно линейную интерполяцию заменяют сплайн-интерполяцией или, в некоторых случаях, полиномиальной интерполяцией .
Линейная интерполяция, описанная здесь, предназначена для точек данных в одном пространственном измерении. Для двух пространственных измерений расширение линейной интерполяции называется билинейной интерполяцией , а в трех измерениях — трилинейной интерполяцией . Обратите внимание, однако, что эти интерполянты больше не являются линейными функциями пространственных координат, а скорее произведениями линейных функций; это иллюстрируется явно нелинейным примером билинейной интерполяции на рисунке ниже. Другие расширения линейной интерполяции могут применяться к другим видам сеток , таким как треугольные и тетраэдральные сетки, включая поверхности Безье . Они могут быть определены как действительно более многомерные кусочно-линейные функции (см. второй рисунок ниже).
Во многих библиотеках и языках шейдеров есть вспомогательная функция "lerp" (в GLSL известная как mix ), возвращающая интерполяцию между двумя входами (v0, v1)
для параметра t
в замкнутом единичном интервале [0, 1]. Сигнатуры между функциями lerp по-разному реализованы в формах (v0, v1, t)
и (t, v0, v1)
.
// Неточный метод, который не гарантирует v = v1 при t = 1 из-за арифметической ошибки с плавающей точкой.// Этот метод является монотонным. Эта форма может использоваться, когда оборудование имеет собственную объединенную инструкцию умножения-сложения.float lerp ( float v0 , float v1 , float t ) { вернуть v0 + t * ( v1 - v0 ); }// Точный метод, гарантирующий v = v1 при t = 1. Этот метод монотонен только когда v0 * v1 < 0.// Lerping между одинаковыми значениями может не дать одинаковое значениеfloat lerp ( float v0 , float v1 , float t ) { возврат ( 1 - t ) * v0 + t * v1 ; }
Эта функция lerp обычно используется для альфа-смешивания (параметр « t » — это «альфа-значение»), и формула может быть расширена для параллельного смешивания нескольких компонентов вектора (например, пространственных осей x , y , z или цветовых компонентов r , g , b ).