3.1.3 Aproximação de Funções — Interpolação — Interpolação de Lagrange
1. Interpolação Lagrangiana
Seja a função que desejamos aproximar
tal que mantemos as restrições que mantém o erro dos pontos tabulares nulos e que seja independente de . Tomamos
onde é o Delta de Kronecker. Como é um polinômio, isto implica que terá o fator
e como , podemos escrever para os termos gerais:
Note que há outras possíveis representações para o polinômio , mas apenas a equação acima será um polinômio de grau . Isto torna conveniente escrever como
onde e .
Para fazermos uma análise do erro de aproximação associado, devemos obter expressão , considerando a função
com sendo a função ajustada da original. A função como uma função de com raízes nos pontos e assumindo sempre diferente dos pontos tabulares. Assim, ao aplicarmos o teorema de Rolle vezes, teremos que
terá ao menos um zero no intervalo determinado por . Chamando este zero de e notando que , teremos
que pode ser utilizado no cálculo do erro como
Utilizando a equação
e agora de posse das funções e , podemos obter a formula para a interpolação de Lagrange:
onde
Da expressão acima, podemos notar que diferentes graus de polinômios podem ser gerados. Por exemplo:
-
Polinômios de primeiro grau (interpolação linear):
$$y(x) = f_1(x) = \frac{x-x_1}{x_0 – x_1}f(x_0) + \frac{x-x_0}{x_1-x_0}f(x_1) $$ -
Polinômios de segundo grau (interpolação quadrática):
$$y(x) = f_2(x) = \frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}f(x_0) + \frac{(x-x0)(x-x2)}{(x_1-x_0)(x_1-x_2)}f(x_1) + \frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}f(x_2) $$
2. Implementação
def interpolation_lagrange(x, x_j, f_j, n=0):
"""
Return x evaluated in Lagrangian interpolation function.
interpolation_lagrange(x, x_j, f_j)
INPUT:
* x: evalue at this point
* x_j: LIST, tabular points
* f_j: LIST, tabular points (must be same size of x_j)
* n: polynom degree (optional)
return:
* y(x): interpolated and evaluated x value
Author: Pedro Garcia [sawp@sawp.com.br]
see: http://www.sawp.com.br
License: Creative Commons
http://creativecommons.org/licenses/by-nc-nd/2.5/br/
Oct 2010
"""
if type(x_j) != type(f_j) or type(x_j) != type([]):
print "Error: wrong type parameters"
return float("NaN")
if len(x_j) != len(f_j):
print "Error: the tabular points must have same size"
return float("NaN")
if n < = 0:
n = len(x_j)
else:
n = n + 1
p = 0.0
for i in xrange(n):
li = f_j[i]
xi = x_j[i]
for j in xrange(n):
xj = x_j[j]
if i != j:
li = li * (x - xj) / (xi - xj)
p += li
return p
Esta função está disponível em http://www.sawp.com.br/code/interpolation/interpolation_lagrange.py assim como um exemplo de como utilizá-la.
3. Copyright
Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.