В математике линейная интерполяция - это метод аппроксимации кривой с использованием линейных многочленов для построения новых точек данных в диапазоне дискретного набора известные точки данных.
Если две известные точки задаются координатами и , линейный интерполянт - это прямая линия между этими точками. Для значения x в интервале значение y вдоль прямой линии задается из уравнение уклонов
который может быть получен геометрически из рисунка справа. Это частный случай полиномиальной интерполяции с n = 1.
Решение этого уравнения для y, которое является неизвестным значением в x, дает
, которая является формулой для линейной интерполяции в интервале . За пределами этого интервала формула идентична линейной экстраполяции.
Эту формулу также можно понимать как средневзвешенное значение. Веса обратно пропорциональны расстоянию от конечных точек до неизвестной точки; более близкая точка имеет большее влияние, чем более удаленная. Таким образом, веса равны и , которые являются нормализованными расстояниями. между неизвестной точкой и каждой из конечных точек. Поскольку эти суммы равны 1,
что дает формулу линейной интерполяции, приведенную выше.
Линейная интерполяция набора точек данных (x 0, y 0), (x 1, y 1),..., (x n, y n) определяется как конкатенация линейных интерполянтов между каждой парой точек данных. В результате получается непрерывная кривая с разрывной производной (в общем), таким образом, класс дифференцируемости .
Линейная интерполяция часто используется для аппроксимации значения некоторой функции f с использованием двух известных значений этой функции в других точках. Ошибка этого приближения определяется как
где p обозначает линейную интерполяция многочлен, определенный выше:
Используя теорему Ролля, можно доказать, что если f имеет непрерывную вторую производную, то ошибка ограничена
То есть приближение между двумя точками данной функции ухудшается из-за второй производной аппроксимируемой функции. Это также интуитивно верно: чем «изогнутее» функция, тем хуже становятся аппроксимации, сделанные с помощью простой линейной интерполяции.
Линейная интерполяция использовалась с древних времен для заполнения пробелов в таблицах. Предположим, у вас есть таблица, в которой перечислено население какой-либо страны в 1970, 1980, 1990 и 2000 годах, и вы хотите оценить население в 1994 году. Линейная интерполяция - простой способ сделать это. Считалось, что метод использования линейной интерполяции для составления таблиц использовался вавилонскими астрономами и математиками в Селевкидах Месопотамии (последние три века до нашей эры.), а также греческим астрономом и математиком, Гиппархом (2 век до н.э.). Описание линейной интерполяции можно найти в древнем китайском математическом тексте под названием Девять глав математического искусства (九章 算術), датируемом с 200 г. до н.э. до 100 г. н.э. и Альмагест (2 век нашей эры). Автор Птолемей.
Основная операция линейной интерполяции между двумя значениями обычно используется в компьютерной графике. На жаргоне той области его иногда называют лерп . Термин может использоваться как глагол или существительное для операции. например «Алгоритм Брезенхема постепенно перемещается между двумя конечными точками линии».
Операции Lerp встроены в аппаратное обеспечение всех современных процессоров компьютерной графики. Они часто используются в качестве строительных блоков для более сложных операций: например, билинейная интерполяция может быть выполнена за три лерпа. Поскольку эта операция не требует больших затрат, это также хороший способ реализовать точные таблицы поиска с быстрым поиском сглаженных функций без слишком большого количества записей в таблице.
Если функции C недостаточно, например, если известно, что процесс, создавший точки данных, более плавный, чем C обычно заменяют линейную интерполяцию сплайн-интерполяцией или, в некоторых случаях, полиномиальной интерполяцией.
. Линейная интерполяция, как описано здесь, предназначена для точек данных в одном пространственное измерение. Для двух пространственных измерений расширение линейной интерполяции называется билинейной интерполяцией, а в трех измерениях - трилинейной интерполяцией. Обратите внимание, однако, что эти интерполянты больше не являются линейными функциями пространственных координат, а являются продуктами линейных функций; это иллюстрируется явно нелинейным примером билинейной интерполяции на рисунке ниже. Другие расширения линейной интерполяции могут применяться к другим типам сетки, таким как треугольные и тетраэдрические сетки, включая поверхности Безье. Их можно определить как действительно многомерные кусочно-линейные функции (см. Второй рисунок ниже).
Пример билинейной интерполяции на единичном квадрате с указанными значениями z 0, 1, 1 и 0,5. Интерполированные значения между ними представлены цветом. Кусочно-линейная функция в двух измерениях (вверху) и выпуклые многогранники, на которых она является линейной (внизу)Многие библиотеки и языки затенения имеют вспомогательную функцию "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) {return v0 + t * (v1 - v0); } // Точный метод, который гарантирует v = v1 при t = 1. Этот метод является монотонным только тогда, когда v0 * v1 < 0. Lerping between same values might not produce the same value float lerp(float v0, float v1, float t) { return (1 - t) * v0 + t * v1; }
Эта функция lerp обычно используется для альфа-смешивания (параметр "t" равен «значение альфа»), и формула может быть расширена для параллельного смешивания нескольких компонентов вектора (таких как пространственные оси x, y, z или компоненты цвета r, g, b).