Você está na página 1de 26

UNIVERSIDADE FEDERAL DA BAHIA

INSTITUTO DE CINCIAS AMBIENTAIS E DESENVOLVIMENTO


SUSTENTVEL
Disciplina: Clculo numrico

Matheus Valentim Csar

Trabalho 3
Interpolao Polinomial:
Mtodo de Lagrange e Splines Cbicos

Professor: Kennedy Morais Fernandes

Barreiras - BA
Julho/2013

SUMRIO

1. Introduo.................................................................................................................3

2. Mtodos....................................................................................................................4

3. Aplicaes................................................................................................................7

4. Algoritmos.................................................................................................................8

5. Resultados Numricos...........................................................................................12

6. Concluso...............................................................................................................20

7. Referncias............................................................................................................21

8. Anexo.....................................................................................................................22

1. Introduo

A interpolao consiste em determinar uma funo, que assume valores


conhecidos em certos pontos. A classe de funes escolhida para a interpolao a
priori arbitrria, e deve ser adequada s caractersticas que pretendemos que a
funo possua.
A interpolao polinomial pode-se revelar desadequada se os ns de
interpolao no forem escolhidos convenientemente. De um modo geral, o conjunto
das funes interpoladoras determinado por um nmero finito de parmetros que
dever ser igual ao nmero de condies impostas, para que haja apenas uma
soluo.
Em engenharia e cincia, dispe-se habitualmente de dados pontuais obtidos
a partir de uma amostragem ou de um experimento. Tal conjunto de dados pontuais
no possui continuidade, mas atravs da interpolao, pode-se construir uma funo
que aproximadamente se "encaixe" nestes dados pontuais, conferindo-lhes, ento, a
continuidade desejada.
Uma funo

pode ser conhecida por um conjunto finito e discreto de

pontos
interpolar os

tabelados. Para se
pontos dados em uma tabela, utilizado um polinmio

de

tal forma que:


Para i=0,1,2,...,n.

Equao 1.1

Existem vrias formas de se obter o polinmio que aproxima (interpola) uma


funo tabelada. Neste trabalho sero vistos dois mtodos: Interpolao na forma de
Lagrange e na forma de Spline cbica interpolante. Estes dois mtodos sero
apresentados e utilizados para fazer a interpolao de dois problemas que sero
apresentados no capitulo 3.

2. Mtodos

2.1 Mtodo de Lagrange

Sejam

pontos distintos, e

Neste mtodo, o polinmio


conjunto de pontos

, que interpola uma funo,

, em um

considerado na forma

pn(xi) = y0.L0 (xi) + y1.L1(xi) +...+ yi .Li (xi) ++ yn .Ln (xi)

Equao 2.1.1

Sabendo que pn um polinmio de grau n que interpola f em x0, ..., xn, onde
os pi(x), com i = 0,1, 2, ..., n; so polinmios de grau n tais que:
Equao 2.1.2
Lk(xi)

Equao 2.1.3

simples verificar que, com estas duas condies, tem-se que:

p(xi) = f (xi) = yi, i = 0, 1, ..., n. Equao 2.1.4


Assim teremos que:

(xi) =

com j k. Equao 2.1.5

para um conjunto de 3 pontos temos o polinmio na forma:


p( x)

x x1 x x2 f x x x0 x x2 f x x x0 x x1 f x
0
2
x0 x1 x0 x2
x1 x0 x1 x2 1 x2 x0 x2 x1
Equao 2.1.6

2.2 Mtodo Spline Cbica

Se a funo

est tabelada em

pontos, se fizermos uma

interpolao para estes pontos por um polinmio de grau n, pode ser que o resultado
dessa aproximao no seja satisfatrio (o erro pode ser grande).
Para evitar este problema, podemos interpolar

em grupos de poucos

pontos, obtendo-se polinmio de grau menor, e impor condies para que a funo
de aproximao seja contnua e tenha derivadas contnuas at certa ordem.
Uma spline cbica, S3(x), uma funo polinomial por partes, contnua, onde
cada parte, sk(x), um polinmio de grau 3 no intervalo [xk1, xk], k = 1, 2, ..., n.
S3(x) tem a primeira e segunda derivadas contnuas, o que faz com que a
curva S3(x) no tenha picos e nem troque abruptamente de curvatura nos ns.
Supondo que f(x) esteja tabelada nos pontos xi, i = 0, 1, 2, ..., n a funo S3(x)
chamada spline cbica interpolante de f(x) nos ns xi, i = 0, ..., n se existem n
polinmios de grau 3, sk(x), k = 1, ..., n tais que:

i) S3(x) = sk(x) para x

[xk1, xk], k = 1, ..., n

Equao 2.2.1

ii) S3(xi) = f(xi), i = 0, 1, ..., n

Equao 2.2.2

iii) sk(xk) = sk+1(xk), k = 1, 2, ..., (n 1)

Equao 2.2.3

iv) sk(xk) = sk+1(xk), k = 1, 2, ..., (n 1)

Equao 2.2.4

v) sk(xk) = sk+1(xk), k = 1, 2, ..., (n 1)

Equao 2.2.5

Para simplicidade de notao, escreveremos:


sk(x) = ak(x xk)3 + bk(x xk)2 + ck(x xk) + dk,

k = 1, 2, ..., n.

Equao 2.2.6

Sendo assim, o clculo de S3(x) exige a determinao de 4 coeficientes para


cada k, num total de 4n coeficientes: a1, b1, c1, d1, a2, b2, ..., an, bn, cn, dn.
De acordo com as imposies feitas acima, e colocando as variveis a, b, c, d
em funo de uma nova varivel, que chamaremos de g, chegaremos equao:

Onde a notao hk = xk xk1, com k = 1.


5

Equao 2.2.7

Este um sistema de equaes lineares com (n 1) equaes (k = 1, ..., (n


1)) e (n + 1) incgnitas: g0, g1, ..., gn1, gn e portanto, indeterminado, Ax = b. onde x
uma matriz contendo os valores de g0, g1, ..., gn. Para podermos resolver esse
sistema, de forma nica, teremos de impor mais duas condies, que so:
S3(x0) = g0=0 e S3(xn) = gn=0

Equao 2.2.8

Esta escolha equivalente a supor que os polinmios cbicos nos intervalos


extremos ou so lineares ou prximos de funes lineares.

Os coeficientes ak, bk, ck, dk so dados pelas frmulas:

Equao 2.2.9

Equao 2.2.10
Equao 2.2.11

Equao 2.2.12

3. Aplicaes

3.1 Problema 1:
Na tabela seguinte indicam-se os valores da densidade da gua do mar r (em Kg/m3)
correspondentes a diferentes valores da temperatura T (em graus Celsius):
T

40

80

120

160

200

1000,7794

1000,6427

1000,2805

999,7165

998,9700

Tabela 3.1.1
Em seguida, comparar os resultados obtidos com os mtodos numricos com os
valores (que correspondem a valores adicionais de T):
60

100

140

180

1000,74088

1000,4882

1000,0224

999,3650

Tabela 3.1.2

3.2 Problema 2:
Foram dados os valores de x e y, referentes a uma determinada experincia
realizada em laboratrio de fsica, onde y = f(x), na tabela abaixo:

0,0

3,0

0,5

1,8616

1,0

-0,5571

1,5

-4,1987

2,0

-9,0536

Tabela 3.2.1
Deve-se interpolar os valores desta funo pelos dois mtodos discutidos neste
trabalho (Lagrange e Spline cbica).

4. Algoritmos

4.1 Algoritmo do mtodo de Lagrange:

Algoritmo 1: Funo Principal:


1. Inteiro pontos, resultados, entrada, sada
2. Abra entrada
3. Abra sada
4. Leia (entrada,*) pontos.
5. Chamar lagrange (pontos, resultados, entrada, sada).
6. Feche entrada
7. Feche sada
8. Fim

Algoritmo 2: Sub-Rotina Lagrange


1. Inteiro i, j, n, resultados, entrada, sada.
2. Real soma, p, y(n), x(n), xvalor, intervalo
3. Leia (entrada,*) intervalo
4. Faa i=1,n,1
5. Leia (entrada,*) x(i), y(i)
6. Fim faa
7. Escreva (sada,*) interpolao de lagrange arquivo de sada
8. Escreva (sada,*) numero de pontos na tabela:, n
9. Escreva (sada,*) valor do intervalo entre pontos:, intervalo
10. Escreva (sada,*) valores da tabela lida: x(n) e y(n)
11. Faa i=1,n,1
12. Escreva (sada,*) x(i), y(i)
13. Fim faa
14. Xvalor = x(1)
15. Faa enquanto (xvalor < = x(n))
16. Soma = 0
17. Faa i=1,n,1
18. P=1
8

19. Faa j=1,n,1


20. Se (ji) ento
21. P=p*(xvalor-x(j)) / (x(i)-x(j))
22. Fim se
23. Fim faa
24. Soma=soma+ p*y(i)
25. Fim faa
26. Xvalor=xvalor+intervalo
27. Fim enquanto
28. Fim

4.2 Algoritmo do mtodo de Spline Cubica:

Algoritmo: Funo Principal:


1. real X(0:100), Y(0:100), A(100,100), B(100), G(0:100),h,t,z
2. real ak, bk, ck, dk, s
3. integer n, i, j, k, entrada, saida
4. abrir entrada
5. abrir saida
6. leia (entrada,*) n
7. leia (entrada,*) h
8. faa i=0,n-1,1
9. Leia (entrada,*) X(i), Y(i)
10. Fim Faa
11. Faa i=1,n-2,1
12. Faa j=1,n-2,1
13. A(i,j)=0
14. Fim Faa
15. Fim Faa
16. Faa i=1,n-2,1
17. A(i,i)=4*h
18. Fim do Faa
19. Faa i=1,n-3,1
20. A(i,i+1)=h
21. A(i+1,i)=h
22. Fim Faa
23. Faa i=1,n-2,1
24. B(i)=(6/h)*(Y(i+1)-2*Y(i)+Y(i-1))
25. Fim Faa
26. Faa i=0,n-1,1
27. G(i)=0
28. Fim Faa
29. Faa k=1,100,1
30. Faa i=1,n-2,1
10

31. G(i)=B(i)
32. Faa j=1,i-1,1
33. G(i)=G(i)-A(i,j)*G(j)
34. Fim Faa
35. Faa j=i+1,n,1
36. G(i)=G(i)-A(i,j)*G(j)
37. Fim Faa
38. G(i)=G(i)/A(i,i)
39. Fim Faa
40. Fim Faa
41. z=x(0)
42. t=0.1
43. Faa k=1,n-1,1
44. ak=(G(k)-G(k-1))/(6*h)
45. bk=G(k)/2
46. ck=(Y(k)-Y(k-1))/h+ (2*h*G(k)+G(k-1)*h)/6
47. dk=Y(k)
48. Faa Enquanto (z<=x(k))
49. s=ak*(z-x(k))**3 + bk*(z-x(k))**2+ck*(z-x(k))+dk
50. imprima (saida,*)z,s
51. z=z+t
52. Fim do faa
53. Fim

11

5. Resultados Numricos

5.1 Problema1
5.1.1 Lagrange
A tabela e o grafico abaixo expe os valores achados a partir da implementao do
mtodo de Lagrange com um intervalo de 2 entre os pontos.

T
4

1000,7794000000000

1000,7408906250000

1000,6427000000000

10

1000,4882031250000

12

1000,2805000000000

14

1000,0224156249999

16

999,71650000000000

18

999,36502812499998

20

998,97000000000003

Tabela 5.1.1

Grafico 5.1.1

Lagrange
1001
1000.5
1000
999.5

Lagrange

999
998.5
998
4

10

12

14

12

16

18

20

5.1.2 Spline Cubica


A tabela e o grfico abaixo expe os valores achados a partir da implementao do
mtodo de Spline Cubica.

Grafico 5.1.2

Spline
1001
1000.5
1000
999.5

Spline

999
998.5
998

13

Tabela 5.1.2
T

1000,7794

7,199997

1000,6842

4,1

1000,7772

7,299997

1000,6796

4,2

1000,775

7,3999968

1000,6748

4,2999997

1000,7728

7,4999967

1000,66986

4,3999996

1000,7706

7,5999966

1000,6648

4,4999995

1000,7684

7,6999965

1000,65955

4,5999994

1000,7661

7,7999964

1000,6541

4,6999993

1000,76385

7,8999963

1000,6485

4,799999

1000,76154

7,999996

1000,6427

4,899999

1000,75916

8,099997

1000,6367

4,999999

1000,7568

8,199997

1000,63055

5,099999

1000,75433

8,299997

1000,62427

5,199999

1000,75183

8,399998

1000,61774

5,2999988

1000,74927

8,499998

1000,611

5,3999987

1000,7467

8,599998

1000,6042

5,4999986

1000,744

8,699999

1000,5971

5,5999985

1000,7413

8,799999

1000,5899

5,6999984

1000,73846

8,9

1000,5825

5,7999983

1000,73553

9,

1000,575

5,899998

1000,7326

9,1

1000,56726

5,999998

1000,7295

9,200001

1000,5594

6,099998

1000,7264

9,300001

1000,5514

6,199998

1000,7231

9,400002

1000,54315

6,299998

1000,7197

9,500002

1000,53485

6,3999977

1000,7163

9,600002

1000,5263

6,4999976

1000,7127

9,700003

1000,51764

6,5999975

1000,70905

9,800003

1000,50885

6,6999974

1000,7052

9,900003

1000,4999

6,7999973

1000,7013

10,000004

1000,4908

6,899997

1000,6972

10,100004

1000,4815

6,999997

1000,69305

10,200005

1000,4721

7,099997

1000,6887

10,300005

1000,4626

14

10,400005

1000,4529

13,600018

1000,0788

16,80003

999,57825

10,500006

1000,44305

13,700018

1000,0652

16,90003

999,5604

10,600006

1000,4331

13,800018

1000,05145

17,00003

999,5425

10,7000065

1000,42303

13,900019

1000,0376

17,10003

999,5244

10,800007

1000,4128

14,000019

1000,0236

17,200031

999,5063

10,900007

1000,40247

14,100019

1000,0095

17,300032

999,48804

11,000008

1000,39197

14,20002

999,9953

17,400032

999,46967

11,100008

1000,38135

14,30002

999,98096

17,500032

999,4512

11,200008

1000,3706

14,400021

999,9665

17,600033

999,4327

11,300009

1000,35974

14,500021

999,95184

17,700033

999,414

11,400009

1000,3488

14,600021

999,93713

17,800034

999,3953

11,50001

1000,3377

14,700022

999,92224

17,900034

999,3765

11,60001

1000,3265

14,800022

999,9072

18,000034

999,35767

11,70001

1000,3152

14,9000225

999,8921

18,100035

999,33875

11,800011

1000,3037

15,000023

999,87683

18,200035

999,3197

11,900011

1000,2922

15,100023

999,8614

18,300035

999,30066

12,000011

1000,2805

15,200024

999,8459

18,400036

999,2815

12,100012

1000,26874

15,300024

999,8302

18,500036

999,2623

12,200012

1000,2569

15,400024

999,81433

18,600037

999,24304

12,300013

1000,2449

15,500025

999,7984

18,700037

999,22375

12,400013

1000,2328

15,600025

999,7823

18,800037

999,2044

12,500013

1000,2206

15,700026

999,76605

18,900038

999,18506

12,600014

1000,2083

15,800026

999,7497

19,000038

999,1656

12,700014

1000,19586

15,900026

999,73315

19,100039

999,1462

12,8000145

1000,1833

16,000027

999,7165

19,200039

999,12665

12,900015

1000,17065

16,100027

999,6997

19,30004

999,1071

13,000015

1000,1579

16,200027

999,68274

19,40004

999,0876

13,100016

1000,145

16,300028

999,66565

19,50004

999,068

13,200016

1000,132

16,400028

999,64844

19,60004

999,0484

13,300016

1000,1189

16,500029

999,63104

19,70004

999,0288

13,400017

1000,10565

16,600029

999,6136

19,800041

999,0092

13,500017

1000,0923

16,70003

999,596

19,900042

998,98956

15

Analisando os valores encontrados pelo mtodo de lagrange e spline cbica com a


tabela 3.1.2, percebe-se que os valores encontrados a partir do mtodo de lagrange
so iguais aos valores dados pela tabela. Isso demonstra a eficcia do mtodo.
60

100

140

180

1000,74088

1000,4882

1000,0224

999,3650

Tabela 3.1.2
Lagrange Problema 2

Com o mtodo de Lagrange foi feita a interpolao para os valores do problema 2,


tambm com um intervalo de 0,1 entre os pontos da interpolao.

0,0000000000000000

3,0000000000000000

0,1000000000000000

2,8791052800000000

0,2000000000000000

2,7039380799999900

0,3000000000000000

2,4754164800000000

0,4000000000000000

2,1943820800000000

0,5000000000000000

1,8615999999999900

0,5999999999999990

1,4777588800000000

0,6999999999999990

1,0434708800000000

0,7999999999999990

0,5592716800000000

0,8999999999999990

0,0256204800000004

0,9999999999999990

-0,5570999999999990

1,0999999999999900

-1,1885835199999900

1,2000000000000000

-1,8686003199999900

1,3000000000000000

-2,5969971200000000

1,4000000000000000

-3,3736971200000000

1,5000000000000000

-4,1987000000000000

1,6000000000000000

-5,0720819200000000

1,7000000000000000

-5,9939955200000000

1,8000000000000000

-6,9646699200000000

1,9000000000000000

-7,9844107200000000
16

Tabela 5.2.1 Lagrange - Problema 2

Grfico 5.2.1- Lagrange - Problema 2

17

Splines Problema 2

Utilizando Splines Cubicos foi feita a interpolao para os valores do problema 2,


tambm com um intervalo de 0,1 entre os pontos da interpolao. Os resultados
esto expostos na tabela 07 e no grfico 04.

0,00000000

3,00000000

0,10000000

2,82555270

0,20000000

2,63779740

0,30000001

2,42342540

0,40000001

2,16912910

0,50000000

1,86160000

0,60000002

1,49059570

0,70000005

1,05813720

0,80000007

0,56931055

0,90000010

0,02920241,65

1,00000010

-0,55710089

1,10000010

-1,18607400

1,20000020

-1,86043830

1,30000020

-2,58447600

1,40000020

-3,36246990

1,50000020

-4,19870190

1,60000030

-5,09465740

1,70000030

-6,04062940

1,80000030

-7,02411410

1,90000030

-8,03260710

Tabela 5.2.2. Splines - Problema 2

18

Grfico 5.2.2 - Splines Cbicos - Problema 2

10.00
5.00
0.00
Spline

-5.00

Lagrange

-10.00
-15.00
-20.00

Grafico 5.2.3

Observa-se pelos grficos que as curvas se cruzam e mostram uma mesma


tendncia, porem a curva de lagrange melhor se aproxima da curva linear.

19

6. Concluso

Ao aplicar os mtodos de Lagrange e Splines cbicos nos problemas


estudados, pode-se perceber que os dois mtodos so excelentes ferramentas para
resolver problemas onde seja preciso realizar interpolao entre pontos.
Observa-se pelos exemplos dados e pelos resultados numricos obtidos, a
eficcia de cada mtodo, onde o mtodo de lagrange demonstra ser mais preciso
em seus resultados.

20

7. Referncias
RUGGIERO, M. A. G.; LOPES, V. L. da R. Clculo numrico - aspectos tericos e
computacionais - 2a edio. Pearson Education do Brasil, 1996.
QUADROS, R. S.; BOTOLI, lvaro L. Fundamentos de Clculo Numrico para
Engenheiros.
ASANO C.I.; COLLI E. Clculo Numrico Fundamentos e Aplicaes IME USP

Carlos J. S. Alves, Anlise Numrica 1996/97. Seco de Matemtica Aplicada e


Anlise Numrica ( Dep. Matemtica - Instituto Superior Tcnico )
Antonio R. Balbo, Clculo Numrico Computacional: teoria, mtodos numricos,
implementao computacional e programao orientada a objetos.

21

8. Anexos
8.1 Lagrange
program metodo_lagrange
implicit none
integer n,resultados,entrada,saida

!faz a leitura de linhas "texto" no arquivo de entrada


character auxiliar

resultados=11
entrada=12
saida=13

open (unit=entrada,file='parabola.txt',status='old')
open(unit=saida,file='parabola.out')
open(unit=resultados,file='parabola.res')

read(entrada,*) auxiliar
read(entrada,*) auxiliar
!leitura de numero de pontos da tabela
read(entrada,*)n

call lagrange(n,resultados,entrada,saida)

close(resultados)
close(saida)
close(entrada)
end
subroutine lagrange(n,resultados,entrada,saida)
implicit none
integer i,j,n,resultados,entrada,saida
real*8 soma,p,y(n),x(n),xvalor,intervalo
character auxiliar
22

read(entrada,*)auxiliar
read(entrada,*)intervalo
read(entrada,*)auxiliar
!leitura dos valores de x:
do i=1,n,1
read(entrada,*)x(i),y(i)
end do

!arquivo com os dados de entrada


write(saida,*)'interpolacao de lagrange - ARQUIVO DE SAIDA'
write(saida,*)'numero de pontos da tabela:',n
write(saida,*)'valor do intervalo entre pontos:',intervalo
write(saida,*)'valores da tabela lida: x(n) e y(n)'
do i=1,n,1
write(saida,*)x(i),y(i)
end do
!primeiro valor da tabela:
xvalor=x(1)

do while(xvalor<=x(n))
soma=0.0d+00
do i=1,n,1
p=1
do j=1,n,1
if(j.ne.i)then
p=p*(xvalor-x(j))/(x(i)-x(j))
end if
end do
soma=soma+p*y(i)
end do
write(resultados,*)xvalor,soma
xvalor=xvalor+intervalo
23

end do

end
!----------------------------------------------------------------

8.2 Spline Cubico

program splinecubico
implicit none

real X(0:100), Y(0:100), A(100,100), B(100), G(0:100),h,t,z


real ak, bk, ck, dk, s
integer n, i, j, k, entrada, saida

entrada=12
saida=13

open(unit=entrada, file='splineentrada.txt')
open(unit=saida,file='splinesaida.txt')

read(entrada,*) n
read(entrada,*) h

do i=0,n-1,1
read(entrada,*) X(i), Y(i)
end do

close (entrada)

do i=1,n-2,1
do j=1,n-2,1
A(i,j)=0
end do
24

end do

do i=1,n-2,1
A(i,i)=4*h
end do

do i=1,n-3,1
A(i,i+1)=h
A(i+1,i)=h
end do

do i=1,n-2,1
B(i)=(6/h)*(Y(i+1)-2*Y(i)+Y(i-1))
end do

do i=0,n-1,1
G(i)=0
end do

do k=1,100,1
do i=1,n-2,1
G(i)=B(i)

do j=1,i-1,1
G(i)=G(i)-A(i,j)*G(j)
end do
do j=i+1,n,1
G(i)=G(i)-A(i,j)*G(j)
end do
G(i)=G(i)/A(i,i)
end do
end do
z=x(0)
25

t=0.1

do k=1,n-1,1

ak=(G(k)-G(k-1))/(6*h)
bk=G(k)/2
ck=(Y(k)-Y(k-1))/h+ (2*h*G(k)+G(k-1)*h)/6
dk=Y(k)

do while (z<=x(k))
s=ak*(z-x(k))**3 + bk*(z-x(k))**2+ck*(z-x(k))+dk
write (saida,*)z,s

z=z+t
end do
end do
close (saida)
end

26