Você está na página 1de 8

Programa para o Clculo da Interpolao de Lagrange Clarimar Jos Coelho Turma: B011 Resumo Este trabalho apresenta os resultados

obtidos com a interpolao de Lagrange. A interpolao polinomial pode ser expressa de vrias formas tais como srie de potncia, interpolao de Lagrange e interpolao de Newton. Um programa para o clculo da interpolao polinomial empregando a frmula de Lagrange ser implementado. Os resultados obtidos sero apresentados e discutidos. 1. Introduo A interpolao consiste em determinar uma funo, que assume valores conhecidos em certos pontos (ns de interpolao). A classe de funes escolhida para a interpolao a priori arbitrria, e deve ser adequada s caractersticas que pretendidas para essa funo [1]. A interpolao polinomial pode no ser adequada se os ns de interpolao no forem escolhidos convenientemente (o que leva ao uso de ns de Chebyshev...). De um modo geral, o conjunto das funes interpoladoras determinado por um nmero finito de parmetros (no caso dos polinmios, so os seus coeficientes) que dever ser igual ao nmero de condies impostas (ou seja, ao nmero de ns), para que haja apenas uma soluo. A determinao dos parmetros, que definem a funo interpoladora, leva resoluo de um sistema linear [1,2]. O objetivo deste trabalho a produo um exemplo de soluo e documentao de trabalho prtico para ilustrar o modelo proposto para a disciplina de estrutura de dados dos cursos de Engenharia e Cincia da Computao da Universidade Catlica de Gois. 2. Interpolao Linear

A interpolao linear uma linha que se ajusta a dois pontos. A interpolao linear mostrada na Figura 1 dada por:
g ( x) = xa bx f (b ) f (a) + ba ba

onde f (a) e f (b) so conhecidos como valores de respectivamente.

f ( x) em x = a e x = b

Figura 1. Interpolao linear. O erro de uma interpolao linear pode ser expresso da seguinte forma:

e( x ) =

1 ( x a)( x b) f ' ' ( ), a < < b 2

onde dependente de x em algum lugar entre a e b. O mtodo fundamental para encontrar uma funo que passa por vrios pontos de dados (ajustamento de curva) usa um polinmio. O polinmio de n sima ordem que passa por n + 1 pontos nico. Isso significa, sem considerar a frmula de interpolao, que todas as interpolaes ajustadas para os mesmos pontos so matematicamente idnticos [2]. Suponha que n + 1 pontos seja dado como

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

onde x 0 , x1 ... so abscissas de pontos e em ordem decrescente. O espao entre os pontos arbitrrio. O polinmio de ordem n que passa por n + 1 pontos pode ser escrito como uma srie de potncia como

g ( x) = a 0 + a1 x + a 2 x 2 + ... + a n x n onde a i so coeficientes indeterminados. O ajustamento da srie de potncia para os n + 1 pontos gera o sistema de equaes lineares

2 n f 0 = a 0 + a1 x 0 + a 2 x 0 + ... + a n x 0

f 1 = a 0 + a1 x1 + a 2 x12 + ... + a n x1n


. . .
2 n f n = a 0 + a1 x n + a 2 x n + ... + a n x n

(1)

Embora os coeficientes, a i , possam ser determinados pela soluo de equaes simultneas usando um programa de computador, tal tentativa no desejvel por duas razes. Primeira, seria necessrio um programa para resolver um conjunto de equaes lineares, e, segunda, a soluo por computador pode no ser exata. Felizmente, existem muitos mtodos para determinar a interpolao polinomial sem resolver o sistema de equaes lineares. Um destes mtodos a frmula de interpolao de Lagrange [1].

2.1. Frmula da Interpolao 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 funo V0 um polinmio 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 funo
V0 ( x) = ( x x1 )( x x 2 )...( x x n ) ( 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

Vi =

( x x 0 )( x x1 )...( x x n ) ( xi x 0 )( x i x1 )...( x 0 x n )

onde o numerador no pode conter ( x i x i ) e o denominador no pode conter ( x i x i ). A funo Vi ( x) um polinmio de ordem n e unitrio para x = x i e zero para x = x j , j i. Assim multiplicando o polinmio V0 ( x), V1 ( x),..., V n ( x) por f 0 , f 1 ,..., f n , respectivamente, e adicionando-os, a soma deve ser um polinmio de ordem n novamente e igual a f i para cada i = 0 at n.

A frmula de interpolao de Lagrange de ordem n derivada dessa forma pode ser escrita como

g ( x) =

( x x1 )( x x 2 )...( x x n ) f0 ( xi x 0 )( x i x1 )...( xi x n ) ( x x1 )( x x 2 )...( x x n ) f1 ( x1 x 0 )( x1 x 2 )...( x x n ) (2)

+ . . +

( x x 0 )( x x1 )...( x x n 1 ) fn ( x n x 0 )( x n x1 )...( x n x n 1 )

a Equao 2 equivalente a srie de potncia determinada pela soluo do sistema de equaes lineares da Equao 1 [1].
Exemplo

a) Escreva a frmula de interpolao de Lagrange que ajusta os trs pontos para a densidade do sdio para trs temperaturas da Tabela 1

Tabela 1. Densidade de sdio para trs temperaturas. Tenperatura Desidade

i
0 1 2

Ti
0

94 C 929 kg / m 3 205 902 371 860

Soluo: Como o nmero de pontos so trs, a ordem da frmula de Lagrange n = 2. A interpolao de Lagrange pode ser escrita como:

g (T ) =

(T 205)(T 371) (929) 94 205)(94 371) (T 94)(T 371) + (902) (205 94)(205 371) (T 94)(T 205) + (860) (371 94)(371 205)

(3)

b) Encontrar a densidade para T = 2510 C usando a interpolao de Lagrange

Soluo: Fazendo T = 251 na Equao 3, obtm-se


g (251) = 890.5kg / m 3

2.2. Soluo da Interpolao de Lagrange


Para escrever um programa ser necessrio pequeno nmero de linhas. Observe na Equao 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 padro. A Equao 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 interpolao z: produto de fatores xa: x

3. Apresentao 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: Ateno!! (x est fora do intervalo) g(4.5)=0.48375 4. Entrada x? 0.1 Resposta: Ateno!! (x est fora do intervalo) g(4.5)=0.71519

4. Discusso dos Resultados


O programa imprime os dados de entrada da Tabela 2 usados pela frmula de interpolao de Lagrange. A interpolao para x = 1 impresso (0.671). No terceiro caso, o valor da interpolao para x = 4.5 impresso com uma mensagem que x uma extrapolao do intervalo porque x est alm do ponto final dos valores da Tabela 2.

5. Concluso
A frmula de interpolao de Lagrange foi apresentada. Um algoritmo em alto nvel mostrou como a interpolao de Lagrange foi resolvida. Finalmente, os resultados obtidos para as instncias i da Tabela 2 foram apresentados e discutidos.

6. Bibliografia [1] Mathworks, MATLAB Verso do Estudante, Makron Books, So 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 frmula de interpolao de Lagrange

g ( x) = i ( x) f i
i =0

com

i ( x) =
j =0 i j

x xj xi x j

para um valor de x dado como entrada, onde ( x i f i ), i = 0.1.2,..., n so 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: nmero do ltimo ponto (n+1 = nmero de dados de entrada) f(i), x[i]: dados de entrada dados (i comea em 0) yans: resultado final xa: x valor de entrada para o qual a interpolao calculada */ main() { int i, j, kk; float xa, yans, z; static n = 3; /* n+1 o nmero de pontos de entrada */ /*As prximas duas linhas defina os pontos para ser usados na interpoloo */ 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