Você está na página 1de 8

Programa para o Cálculo da Interpolação de Lagrange

Clarimar José Coelho


Turma: B011

Resumo

Este trabalho apresenta os resultados obtidos com a interpolação de Lagrange. A interpolação


polinomial pode ser expressa de várias formas tais como série de potência, interpolação de
Lagrange e interpolação de Newton. Um programa para o cálculo da interpolação polinomial
empregando a fórmula de Lagrange será implementado. Os resultados obtidos serão
apresentados e discutidos.

1. Introdução

A interpolação consiste em determinar uma função, que assume valores conhecidos em


certos pontos (nós de interpolação). A classe de funções escolhida para a interpolação é a priori
arbitrária, e deve ser adequada às características que pretendidas para essa função [1].
A interpolação polinomial pode não ser adequada se os nós de interpolação não forem
escolhidos convenientemente (o que leva ao uso de nós de Chebyshev...). De um modo geral, o
conjunto das funções interpoladoras é determinado por um número finito de parâmetros (no
caso dos polinómios, são os seus coeficientes) que deverá ser igual ao número de condições
impostas (ou seja, ao número de nós), para que haja apenas uma solução. A determinação dos
parâmetros, que definem a função interpoladora, leva à resolução de um sistema linear [1,2]. O
objetivo deste trabalho é a produção um exemplo de solução e documentação de trabalho
prático para ilustrar o modelo proposto para a disciplina de estrutura de dados dos cursos de
Engenharia e Ciência da Computação da Universidade Católica de Goiás.

2. Interpolação Linear

A interpolação linear é uma linha que se ajusta a dois pontos. A interpolação linear
mostrada na Figura 1 é dada por:

b−x x−a
g ( x) = f (a) + f (b )
b−a b−a

onde f (a) e f (b) são conhecidos como valores de f (x) em x = a e x = b


respectivamente.
Figura 1. Interpolação linear.

O erro de uma interpolação linear pode ser expresso da seguinte forma:

1
e( x ) = ( x − a)( x − b) f ' ' (ξ ), a < ξ < b
2

onde ξ é dependente de x em algum lugar entre a e b.

O método fundamental para encontrar uma função que passa por vários pontos de
dados (ajustamento de curva) usa um polinômio. O polinômio de n − ésima ordem que
passa por n + 1 pontos é único. Isso significa, sem considerar a fórmula de interpolação,
que todas as interpolações ajustadas para os mesmos pontos são matematicamente idênticos
[2].

Suponha que n + 1 pontos seja dado como

x 0 x1 ... x n
f0 f 1 ... f n

onde x 0 , x1 ... são abscissas de pontos e em ordem decrescente. O espaço entre os pontos é
arbitrário. O polinômio de ordem n que passa por n + 1 pontos pode ser escrito como uma
série de potência como

g ( x) = a 0 + a1 x + a 2 x 2 + ... + a n x n

onde a i são coeficientes indeterminados. O ajustamento da série de potência para os n + 1


pontos gera o sistema de equações lineares
f 0 = a 0 + a1 x 0 + a 2 x 02 + ... + a n x 0n
f 1 = a 0 + a1 x1 + a 2 x12 + ... + a n x1n (1)
.
.
.
f n = a 0 + a1 x n + a 2 x n2 + ... + a n x nn

Embora os coeficientes, a i , possam ser determinados pela solução de equações


simultâneas usando um programa de computador, tal tentativa não é desejável por duas
razões. Primeira, seria necessário um programa para resolver um conjunto de equações
lineares, e, segunda, a solução por computador pode não ser exata. Felizmente, existem
muitos métodos para determinar a interpolação polinomial sem resolver o sistema de
equações lineares. Um destes métodos é a fórmula de interpolação de Lagrange [1].

2.1. Fórmula da Interpolação de Lagrange

Considere o produto de fatores dado por

V0 ( x) = ( x − x1 )( x − x 2 )...( x − x n )

relacionado com n + 1 pontos. A função V0 é um polinômio de n − ésima ordem de x, e


torna-se zero em x = x1 , x 2 ,..., x n . Dividindo V0 ( x) por V0 ( x 0 ) , resulta na função

( x − x1 )( x − x 2 )...( x − x n )
V0 ( x) =
( x 0 − x1 )( x 0 − x 2 )...( x 0 − x n )

que será igual a unidade para x = x 0 e zero para x = x1 , x = x 2 ,..., x = x n . De modo similar
pode ser escrito Vi

( x − x 0 )( x − x1 )...( x − x n )
Vi =
( xi − x 0 )( x i − x1 )...( x 0 − x n )

onde o numerador não pode conter ( x i − x i ) e o denominador não pode conter ( x i − x i ). A


função Vi ( x) é um polinômio de ordem n e unitário para x = x i e zero para x = x j , j ≠ i.
Assim multiplicando o polinômio V0 ( x), V1 ( x),..., V n ( x) por f 0 , f 1 ,..., f n , respectivamente,
e adicionando-os, a soma deve ser um polinômio de ordem n novamente e igual a f i para
cada i = 0 até n.
A fórmula de interpolação de Lagrange de ordem n derivada dessa forma pode ser
escrita como

( x − x1 )( x − x 2 )...( x − x n )
g ( x) = f0
( xi − x 0 )( x i − x1 )...( xi − x n )
( x − x1 )( x − x 2 )...( x − x n )
+ f1 (2)
( x1 − x 0 )( x1 − x 2 )...( x − x n )
.
.
( x − x 0 )( x − x1 )...( x − x n −1 )
+ fn
( x n − x 0 )( x n − x1 )...( x n − x n −1 )

a Equação 2 é equivalente a série de potência determinada pela solução do sistema de


equações lineares da Equação 1 [1].

Exemplo

a) Escreva a fórmula de interpolação de Lagrange que ajusta os três pontos para a


densidade do sódio para três temperaturas da Tabela 1

Tabela 1. Densidade de sódio para três temperaturas.

Tenperatura Desidade

i Ti ρi
0 0
94 C 929 kg / m 3
1 205 902
2 371 860

Solução: Como o número de pontos são três, a ordem da fórmula de Lagrange é


n = 2. A interpolação de Lagrange pode ser escrita como:
(T − 205)(T − 371)
g (T ) = (929)
94 − 205)(94 − 371)
(T − 94)(T − 371)
+ (902) (3)
(205 − 94)(205 − 371)
(T − 94)(T − 205)
+ (860)
(371 − 94)(371 − 205)

b) Encontrar a densidade para T = 2510 C usando a interpolação de Lagrange

Solução: Fazendo T = 251 na Equação 3, obtém-se

g (251) = 890.5kg / m 3

2.2. Solução da Interpolação de Lagrange

Para escrever um programa será necessário pequeno número de linhas. Observe


na Equação 2, que o primeiro termo é f 0 vezes o produto de

( x − xi )
(x0 − xi )
para todo i exceto para i = 0. O segundo termo é f 1 vezes o produto de

( x − xi )
(x1 − xi )
para todo i = 1. Todos os outros termos tem o mesmo padrão. A Equação 2, pode ser
programada como a seguir:

g=0;

for (i=0;i<=n;i++)

z=1.0;

for (j=0;j<=n;j++)

{
if (i!=j)

z=z*(xa-x[j]/(x[i]-x[j]);

g=g+z*f[i];

f[i],x[i], i=0, 1, …, n

g: resultado da interpolação

z: produto de fatores

xa: x

3. Apresentação dos Resultados

Tabela 2. Dados utilizados.


i x(i ) f (i )
0 1 0.671
1 2 0.62
2 3 0.567
3 4 0.512
1. Entrada x? 1
Resposta: g(1) = 0.671
2. Entrada x? 3.66
Resposta: g(3.66)=0.53092
3. Entrada x? 4.5
Resposta: Atenção!! (x está fora do intervalo)
g(4.5)=0.48375
4. Entrada x? 0.1
Resposta: Atenção!! (x está fora do intervalo)
g(4.5)=0.71519

4. Discussão dos Resultados

O programa imprime os dados de entrada da Tabela 2 usados pela fórmula de


interpolação de Lagrange. A interpolação para x = 1 é impresso (0.671). No terceiro
caso, o valor da interpolação para x = 4.5 é impresso com uma mensagem que x é uma
extrapolação do intervalo porque x está além do ponto final dos valores da Tabela 2.
5. Conclusão

A fórmula de interpolação de Lagrange foi apresentada. Um algoritmo em alto nível


mostrou como a interpolação de Lagrange foi resolvida. Finalmente, os resultados obtidos
para as instâncias i da Tabela 2 foram apresentados e discutidos.

6. Bibliografia
[1] Mathworks, MATLAB Versão do Estudante, Makron Books, São Paulo, 1997.
[2] Nakamura, S. Applied Numerical Methods in C, PTR Prentice Hall, New Jersey, 1992.

7. Anexo A - Programa INTERP.C

O programa a seguir avalia a fórmula de interpolação de Lagrange


n
g ( x) = ∑ η i ( x) f i
i =0
com
n x − xj
η i ( x) = ∏
j =0 xi − x j
i≠ j

para um valor de x dado como entrada, onde ( x i f i ), i = 0.1.2,..., n são os pontos dados na
tabela de entrada, n + 1 é o total de pontos de entrada.

#include <stdio.h>
#include <math.h>
#define TRUE 1
/* n: número do último ponto (n+1 = número de dados de entrada)
f(i), x[i]: dados de entrada dados (i começa em 0)
yans: resultado final
xa: x valor de entrada para o qual a interpolação é calculada */
main()
{
int i, j, kk;
float xa, yans, z;
static n = 3; /* n+1 é o número de pontos de entrada */
/*As próximas duas linhas defina os pontos para ser usados na interpoloção */
static float x[11]={1., 2. , 3., 4.};
static float f[11]={.671, .620, .567, .512};
printf ("Interpolacao de Lagrange\n");
printf("Dados utilizados\n");
printf("i x(i) f(i) \n" );
for (i=0; i<=n; i++)
printf("%d %g %g \n", i, x[i], f[i] );
while (TRUE)
{
printf( "\nEntrada x ? ");
scanf("%f", &xa );
if (!(x[0]<= xa && xa <= x[n]) )
printf("(Atencao: x é uma extrapolacao do intervalo.)\n" );
for (i =0; i<=n; i++)
{
z=1.0;
for (j=0;j<=n;j++)
{
if (i != j)
z=z*(xa - x[j]) / (x[i] - x[j]);
}
yans= yans + z*f[i];
}
printf("Resposta: g( %g) = %g \n", xa, yans );
printf("\nDigite 1 para continuar, 0 para parar: ");
scanf("%d", &kk);
if (kk !=1)
exit(0);
}
}

Você também pode gostar