Interpolação linear

Origem: Wikipédia, a enciclopédia livre.
Dados os pontos em vermelho, a linha azul representa a interpolante, e os valores de x e y podem ser encontrados com interpolação linear.

Na matemática, Interpolação linear é um método no qual instanciamos um novo conjunto de dados utilizando interpolação polinomial em vista de construir novos pontos de dados no alcance de pontos já conhecidos.

Interpolação linear entre dois pontos[editar | editar código-fonte]

Nessa visualização geométrica, o valor no círculo verde multiplicado pela distância entre os círculos vermelhos e azul é igual a soma do valor dos círculo vermelho multiplicado pela distancia entre os círculos verde e azul e o valor no círculo azul, multiplicado pela distância entre os círculos verde e vermelho.

Dados os pontos e , a interpolante linear é a linha entre os dois pontos. Para um valor x no intervalo , o valor y é a linha entre os pontos. Estabelecendo a seguinte relação:

que pode ser derivado geometricamente da figura ao lado. Se trata de um caso especial de interpolação polinomial com n = 1.

Tal que resolvendo para y com x temos a relação geométrica:

cuja formula é a interpolação linear entre o intervalo . Fora do intervalo denominamos de extrapolação linear.

Podemos visualizar a formula como uma média ponderada. Os pesos são inversamente proporcionais à distância entre o ponto de chegada e o ponto desconhecido. O ponto mais perto pondera mais que o ponto distante. Portanto, os pesos são e , que são distâncias normalizadas entre o ponto desconhecido e o ponto de chegada. Dado que a soma é 1:

Interpolação linear como forma de aproximação[editar | editar código-fonte]

Interpolação linear é utilizada como método de aproximação para uma função f utilizando dois pontos dados pela mesma. O erro (ou "resto" ou "resíduo") desta aproximação pode ser dado pela expressão:

onde p denota a interpolação polinomial definida abaixo:

Sabe-se pelo teorema de Taylor que:

Pode ser provada utilizando o teorema de Rolle, que cita que se f tem uma segunda derivada o erro está definido por:

Extensões[editar | editar código-fonte]

Precisão[editar | editar código-fonte]

Se a função C0 é insuficiente, por exemplo, se o processo produziu os pontos de dados é provado ser mais 'liso' que C0, é comum substituir interpolação linear por interpolação de spline[1], ou até mesmo interpolação polinomial em alguns casos.

Multivariável[editar | editar código-fonte]

Para duas dimensões espaciais, a extensão da interpolação linear é chamada de interpolação bilinear, e em três dimensões, interpolação trilinear.

Note, que esses interpolantes não são mais funções lineares, porem produtos de funções lineares; como ilustrado claramente pelo exemplo de interpolação bilinear nessa figura abaixo. Outros tipos de interpolação podem ser aplicados a malhas triangulares e tetraédricas, incluindo superfícies Bézier.

História[editar | editar código-fonte]

Exemplo de uma interpolação bilinear no quadrado de unidade com valores de z 0, 1, 1 e 0.5 como indicados. valores interpolados entre tais valores estão representado pelas cores.

Interpolação linear é utilizada desde a antiguidade para completar "buracos" nas tabelas, geralmente contendo dados astronômicos. Acredita-se que era utilizado por astrônomos Babilônios e matemáticos da Mesopotâmia (300 anos a.C.), e pelos astrônomos da Grécia. Uma descrição da interpolação linear pode ser encontrada no Almagesto (200 anos d.C.) por Ptolomeu.

Programação e Suporte em Linguagens de Código[editar | editar código-fonte]

Muitas bibliotecas e linguagens de shaders tem uma função denominada de "lerp", que retorna a interpolação entre dois valores (v0,v1) e um parâmetro (t) em um intervalo fechado de [0,1]:

Algoritmo basico em C++:

// método impreciso para calcular v = v1 quando t = 1 "floating-point arithimetic error" 
// Essa forma pode ser utilizada em hardware que possui intruções "Multiply-Add"
float lerp(float v0, float v1, float t) {
  return v0 + t*(v1-v0);
}

// Método preciso que garante que v = v1 quando t = 1.
float lerp(float v0, float v1, float t) {
  return (1-t)*v0 + t*v1;
}

Essa função lerp é usualmente utilizada para mesclar o canal alpha (onde o parâmetro 't' é o alpha), e a formula pode ser estendida para mesclar múltiplos componentes de vetores (como espaciais x,y,z ou cores com componentes r,g,b) em paralelo.

Referências

  1. termo utilizado na lingua inglesa para se referir a uma linha curva.
  • Meijering, Erik (2002), «A chronology of interpolation: from ancient astronomy to modern signal and image processing», Proceedings of the IEEE, 90 (3): 319–342, doi:10.1109/5.993400 .

Ligações externas[editar | editar código-fonte]