Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila
Apostila
Apostila preparada para a disciplina de Modelos Computacionais da Fsica I, ministrada para o Curso de Licenciatura em Fsica do Departamento de Fsica, Instituto de Fsica e Matemtica, Fundao Universidade
Federal de Pelotas, Pelotas - RS.
Sumrio
Referncias Bibliogrficas
iii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
1
2
3
6
6
6
7
7
7
9
9
9
9
9
10
10
13
13
14
14
14
14
16
16
17
21
24
2 Derivao Numrica
2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Frmulas clssicas de diferena finita . . . . . . . . . . . . . .
2.2.1 Frmula de diferena adiantada (forward difference) .
2.2.2 Frmula de diferena atrasada (backward difference) .
2.2.3 Frmula de diferena centrada (centered difference) . .
2.2.4 Frmula de 5 pontos . . . . . . . . . . . . . . . . . . .
2.3 Frmulas de diferenas finitas para a derivada segunda . . . .
2.3.1 Frmula de trs pontos . . . . . . . . . . . . . . . . .
2.3.2 Frmula de cinco pontos . . . . . . . . . . . . . . . . .
2.4 Frmulas para o clculo de derivadas em pontos fora da rede
2.4.1 Derivada de trs pontos . . . . . . . . . . . . . . . . .
2.4.2 Derivada de quatro pontos . . . . . . . . . . . . . . . .
2.4.3 Derivada de cinco pontos . . . . . . . . . . . . . . . .
2.5 Extrapolao de Richardson e estimativa de erro . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
27
27
27
28
28
29
30
30
30
30
30
30
31
31
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ii
SUMRIO
3 Integrao Numrica
3.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Frmulas de Newton-Cotes . . . . . . . . . . . . . . . . . . .
3.2.1 Frmulas fechadas de Newton-Cotes . . . . . . . . . .
3.2.1.1 Regra trapezoidal (N = 1) . . . . . . . . .
3.2.1.2 Regra de Simpson (N = 2) . . . . . . . . .
3.2.1.3 Regra de Simpson dos 3/8 (N = 3) . . . . .
3.2.1.4 Regra de Bode (N = 4) . . . . . . . . . . .
3.2.1.5 Regras em ordens mais altas (N
5) . . .
3.2.2 Frmulas abertas de Newton-Cotes . . . . . . . . . . .
3.2.3 Frmulas fechadas estendidas . . . . . . . . . . . . . .
3.2.3.1 Regra trapezoidal estendida . . . . . . . . . .
3.2.3.2 Regra de Simpson estendida . . . . . . . . .
3.2.4 Estimativas de erro nas frmulas de Newton-Cotes . .
3.3 Quadratura gaussiana . . . . . . . . . . . . . . . . . . . . . .
3.3.1 Idia bsica na quadratura gaussiana . . . . . . . . . .
3.3.2 Frmulas gaussianas clssicas . . . . . . . . . . . . . .
3.3.2.1 Frmula de Gauss-Legendre . . . . . . . . . .
3.3.2.2 Frmula da Gauss-Chebyshev . . . . . . . .
3.3.2.3 Frmula de Gauss-Laguerre . . . . . . . . . .
3.3.2.4 Frmula de Gauss-Hermite . . . . . . . . . .
3.4 Integrao automtica e adaptativa . . . . . . . . . . . . . . .
3.4.1 Integrao de Romberg . . . . . . . . . . . . . . . . .
3.4.2 Integrao automtica usando quadraturas gaussianas
3.4.3 Integrao adaptativa . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
37
37
38
38
40
40
41
42
42
43
43
43
44
45
46
47
48
49
51
53
53
54
55
60
61
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
63
63
63
64
67
70
72
76
76
. . . .
. . . .
. . . .
. . . .
. . . .
mdio
. . . .
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
83
83
83
85
86
86
87
88
88
. . .
reais
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
ou o
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
Mtodo do ponto
. . . . . . . . . .
. . . . . . . . . .
Referncias Bibliogrficas
[1] Intel fortran compiler for linux, http://www.intel.com/software/products/compilers/flin/docs/manuals.htm,
Acesso em: 01 jun. 2005.
[2] M. Abramowitz and I. A. Stegun, Handbook of mathematical functions, Dover, New York, 1970.
[3] S. D. Conte and C de Boor, Elementary numerical analysis. an algorithmic approach, third ed., International series in pure and applied mathematics, McGraw-Hill, New York, 1980, 432 + xii pp.
[4] M. Cristina C. Cunha, Mtodos Numricos, segunda ed., Unicamp, Campinas, 2000, 216 pp.
[5] Rudi Gaelzer, Introduo ao Fortran 90/95, http://www.ufpel.edu.br/ rudi/grad/ModComp/Apostila/Apostila.html, Pelotas, November 2006, 138 + vi pp.
[6] D. Goldberg, What every computer scientist should know about floating point arithmetic, ACM Computing Surveys 23 (1991), 548.
[7] Sebastio Ccero Pinheiro Gomes, Mtodos Numricos: Teoria e Programao, FURG, Rio Grande,
1999, 190 pp.
[8] Joe D. Hoffman, Numerical methods for engineers and scientists, second ed., Marcel Dekker, New York,
2001, 823 + xi pp.
[9] Rubin H. Landau and Manuel Jos Pez Meji, Computational physics. Problem solving with computers,
John Wiley & Sons, New York, 1997, 511 + xviii pp.
[10] D. E. Mller, A method of solving algebraic equations using automatic computer, Mathematical Tables
and Other Aids to Computation 10 (1956), 208215.
[11] Tao Pang, An introduction to computational physics, second ed., Cambridge University Press, New
York, 2006, 385 + xvi pp.
[12] W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery, Numerical recipes in fortran 90,
Fortran Numerical Recipes, vol. 2, Cambridge, New York, 1997, 552 pp.
[13] John R. Rice, Numerical Methods, Software, and Analysis, McGraw-Hill, New York, 1983, 483 + xii
pp.
[14] Germn Ramn Canahualpa Suazo, Apostila de Clculo Numrico, DME - IFM - UFPel, Pelotas,
November 2004, 117 + vii pp.
[15] David M. Young and Robert Todd Gregory, A Survey of Numerical Mathematics, vol. I, Dover, New
York, 1988, 548 + x pp.
iii
iv
REFERNCIAS BIBLIOGRFICAS
Captulo 1
1.1
Embora sempre se busque solues exatas aos problemas que enfrentamos, raramente atingimos o nosso
objetivo. Erros e incertezas podem ser introduzidos em cada etapa da formulao e soluo de problemas.
A natureza das incertezas que surgem quando se busca a soluo de um problema ser abordada neste
captulo. Simultaneamente, os erros introduzidos pela computao numrica, destinada a buscar a soluo
desejada, sero examinados com um certo grau de detalhe.
O processo de soluo de um problema dividido em trs fases:
1. Formulao precisa de um modelo matemtico e o seu modelo numrico relacionado.
2. Construo de um mtodo destinado a resolver o problema numrico.
3. Implementao de um mtodo para calcular a soluo.
Na discusso que ser feita a respeito das fontes de erro em clculo numrico, no sero considerados erros
triviais que podem ser evitados, tais como copiar uma frmula erroneamente ou realizar um erro de sintaxe
na programao, muito embora tais erros ocorram e perfaam uma frao considervel do esforo e do tempo
dispendidos ao se trilhar as trs fases mencionadas acima.
Neste captulo estaremos somente interessados nos erros que resultam ser inevitveis, dada a prpria
natureza da representao finita de nmeros em um computador e/ou da implementao numrica de um
determinado clculo. As incertezas introduzidas contaminam a soluo e importante tentar-se balancear
as incertezas. Se a incerteza no modelo matemtico de 1%, ento no faz sentido a implementao de um
modelo numrico e de um mtodo que atinja 6 dgitos de preciso, por exemplo.
O diagrama da figura 1.1 ilustra o processo usualmente percorrido quando se busca uma soluo para
um problema fsico real a partir de uma modelagem, inicialmente matemtica, seguida por uma modelagem
computacional e, finalmente, passando pela implementao do mtodo numrico a partir da modelagem
computacional, seguida pela obteno dos resultados. As incertezas ocorrem desde a fase de modelagem
matemtica at a soluo numrica. Neste captulo, sero abordadas algumas fontes de incertezas na etapas
de modelagem computacional e implementao do mtodo numrico.
1.2
Nesta seo sero discutidos alguns mtodos para a mudana de base na representao de nmeros,
tanto inteiros quanto reais. fato comum para grande parte dos computadores atualmente empregados
na modelagem computacional o emprego de uma base numrica distinta da base decimal, qual o seres
humanos tendem a se apegar. Em geral, os nmeros so armazenados na base 2 (binria), existindo ainda
plataformas que os armazenam na base 8 (octal) ou na base 16 (hexadecimal). A representao de nmeros
inteiros ligeiramente distinta da representao de nmeros reais.
1
Figura 1.1: Diagrama que representa o processo de soluo numrica de um problema fsico real, indicando em que
etapas entram as incertezas.
1.2.1
De uma forma geral, um nmero inteiro N representado, na base b, por um conjunto de dgitos ai ,
(i = 0, 1, 2, . . . ), sendo que ai assume um intervalo de valores determinado pela base em uso. A tabela 1.1
indica estes valores para as bases mais utilizadas, inclusive para a base decimal.
H no mnimo duas maneiras de se representar o nmero N . O sistema posicional agrupa os dgitos
na forma de uma seqncia, na qual a magnitude da contribuio de cada dgito ao nmero depende da
posio relativa que este ocupa. Neste sistema, o nmero N escrito como:
N = (an an1 . . . a1 a0 )b .
A contribuio de cada dgito para o valor de N fica explicitada na forma polinomial, onde N escrito
como:
N = an bn + an1 bn1 + + a1 b + a0 .
(1.1)
At este momento, N tem sido tratado de uma forma abstrata. Por uma questo evolutiva, N tende a
ser visto como um nmero na base 10 (decimal),
N = (an an1 . . . a1 a0 )10 an an1 . . . a1 a0 .
Caso se passe a representar N sempre na base decimal, ento deve-se abordar as outras representaes do
ponto de vista de converses de ou para a base 10.
Mtodo das divises sucessivas
Considera-se inicialmente a converso de um inteiro da base decimal para a base binria, uma vez que
esta ser a representao mais provvel em um computador. Para realizar-se esta converso de uma maneira
prtica, pode-se usar o mtodo das divises sucessivas, no qual N e os sucessivos quocientes qi so divididos
por 2, sendo coletados os restos ri = 0, 1 at que o ltimo quociente seja qn = 0, 1:
b
2
8
10
16
Autor: Rudi Gaelzer IFM/UFPel
ai
0, 1
0, 1, 2, 3, 4, 5, 6, 7
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Verso: 22 de julho de 2009
..
.
qn1 2
r
q
n1 n
..
.
qn1 b
r
q
n1 n
Desta forma,
N = (qn rn1 . . . r2 r1 r0 )b
= qn bn + rn1 bn1 + + r2 b2 + r1 b1 + r0 b0 .
Assim,
12 = (14)8 = (C)16
25 = (31)8 = (19)16
315 = (473)8 = (13B)16 .
O programa 1.1 implementa o mtodo das divises sucessivas para a converso de qualquer nmero
inteiro da base 10 para a base 2.
1.2.2
Dado agora um nmero real X, o qual possui uma parte inteira Xi e uma parte fracionria Xf = X Xi ,
utiliza-se novamente o mtodo das divises sucessivas para Xi , enquanto que para Xf usa-se o Mtodo das
Multiplicaes Sucessivas: multiplica-se Xf por 2, extraindo-se a parte inteira do resultado (a qual pode
ser 0); o restante novamente multiplicado por 2, repetindo-se o processo at que o resto fracionrio seja
0 ou que se obtenha um padro repetitivo, em cujo caso o nmero fracionrio ser peridico. Este mtodo
ser ilustrado com dois exemplos.
Autor: Rudi Gaelzer IFM/UFPel
Programa 1.1: Converte um nmero da base 10 para a base 2. Caso o nmero seja negativo, o bit de sinal utilizado.
program c o n v e r s o r
i m p l i c i t none
integer , parameter : : b a s e= 2
integer : : i , j , qn , rn , num , num_abs
real , parameter : : l o g 2= 0 . 6 9 3 1 4 7 1 8 0 5 5 9 9 4 5 3 0 9 4 2
integer , DIMENSION( : ) , ALLOCATABLE : : b
!
write ( , fmt= ( a ) , advance= no ) Numero na b a s e 1 0 :
read , num
s e l e c t case (num)
case ( 0 )
allocate (b ( 1 ) )
b= 0
case (: 1)
!
! Nes te caso , o v e t o r i r a a l o c a r um d i g i t o a mais e a t r i b u i r o v a l o r 1
! ao u l t i m o d i g i t o , como convencao para s i n a l n e g a t i v o .
!
num_abs= abs (num)
j= l o g ( r e a l ( num_abs ) ) / l o g 2
allocate (b ( 0 : j + 1))
qn= num_abs
do i= 0 , j
rn= mod( qn , b a s e )
qn= qn/ b a s e
b ( j i + 1)= rn
end do
b(0)= 1
case ( 1 : )
j= l o g ( r e a l (num) ) / l o g 2
allocate (b ( 0 : j ))
qn= num
do i= 0 , j
rn= mod( qn , b a s e )
qn= qn/ b a s e
b ( j i )= rn
end do
end s e l e c t
j= s i z e ( b )
write ( , fmt= ( "A forma b i n a r i a e : " ) , advance= no )
do i= 1 , j 1
write ( , fmt= ( i 1 ) , advance= no ) b ( i 1 )
end do
write ( , fmt= ( i 1 ) ) b ( j 1 )
!
end program c o n v e r s o r
0, 8125
2
1, 6250
0, 2500
2
0, 500
0, 500
2 .
1, 0000
Ou seja,
0, 8125 = (0, 1101)2 .
O exemplos a seguir mostram a dificuldade de se obter a representao de um nmero fracionrio em
outra base.
Exemplo 1.2.
0, 2
2
0, 4
0, 4
2
0, 8
0, 8
2
1, 6
0, 6
2
1, 2
0, 2
2
0, 4
0, 5225
2
1, 0450
0, 0450
2
0, 0900
0, 0900
2
0, 1800
0, 1800
2
0, 3600
0, 3600
2
0, 7200
0, 7200
2
1, 4400
0, 4400
2
0, 8800
0, 8800
2
1, 7600
0, 7600
2
1, 5200
0, 5200
2
1, 0400
0, 0400
2
0, 0800
0, 0800
2
0, 1600
0, 1600
2
0, 3200
0, 3200
2
0, 6400
0, 6400
2
1, 2800
0, 2800
2
0, 5600
0, 5600
2
1, 1200
0, 1200
2
0, 2400
0, 2400
2
0, 4800
0, 4800
2 .
0, 9600
Ou seja,
0, 5225 = (0, 10000101110000101000 . . . )2 .
Este exemplo mostra que em um computador, onde o espao para representao de um nmero finito, este
nmero ter que ser arredondado.
A forma polinomial de um nmero fracionrio dada por:
Xf = 1 21 + 2 22 + 3 23 + .
Portanto, um nmero real X = Xi + Xf pode ser representado na base 2 por
X = an 2n + an1 2n1 + + a0 20 + 1 21 + 2 22 + 3 23 + .
= (an an1 . . . a0 , 1 2 3 . . . )2 .
Exemplo 1.4.
e
Xf = 0, 8 = (0, 110011001100 . . . )2 .
Portanto,
75, 8 = (1001011, 110011001100 . . . )2 .
Para converter um nmero fracionrio da base decimal para uma base b, tambm aplica-se o mtodo das
multiplicaes sucessivas, que, neste caso, consiste em multiplicar o nmero por b e extrair a parte inteira
(podendo ser 0). O resto fracionrio multiplicado novamente por b e a parte inteira extrada. Este
processo deve ser repetido at sobrar o resto igual a 0 ou at se observar um padro repetitivo.
Autor: Rudi Gaelzer IFM/UFPel
1.2.3
Para introduzir a converso para a base decimal, ser usada novamente a base binria como um primeiro
exemplo. Seja o nmero N , representado por
N = (am a2 a1 a0 )2 ,
a sua representao na base decimal pode ser obtida simplesmente pela soma do polinmio
N = am 2m + + a2 22 + a1 21 + a0 .
A operacionalizao desta soma pode ser obtida pelos seguintes algoritmos:
1.2.3.1
Algoritmo de Horner.
1.2.3.2
N = b0 .
Diviso de Ruffini.
am
am1
2bm
a2
2b3
a1
2b2
a0
2b1
bm
bm1
b2
b1
b0
e, novamente,
Exemplo 1.5.
N = b0 .
Seja o nmero (11101)2 . Ento, a partir da seqncia de Horner,
b4 = a4 = 1,
b3 = a3 + 2b4 = 1 + 2.1 = 3,
b2 = a2 + 2b3 = 1 + 2.3 = 7,
b1 = a1 + 2b2 = 0 + 2.7 = 14,
b0 = a0 + 2b1 = 1 + 2.14 = 29.
1
1
1
2
3
1
6
7
0
14
14
1
28
29
(11101)2 = 29.
Esta metodologia pode ser generalizada para converter qualquer nmero inteiro na base b para a base
decimal. Considere o nmero
N = (am . . . a2 a1 a0 )b .
Usando o Algoritmo de Horner, por exemplo, temos a seqencia
cm = am ,
Autor: Rudi Gaelzer IFM/UFPel
1.2.4
N = c0 .
Algoritmo de Horner.
1
bn1 = n1 + bn ,
2
1
bn2 = n2 + bn1 ,
2
.. .. ..
. . .
1
b2 = 2 + b3 ,
2
1
b1 = 1 + b2 ,
2
1
b0 = b1 .
2
Ento,
1.2.4.2
N = b0 .
Diviso de Ruffini.
am
bm
Exemplo 1.6.
am1
1
bm
2
bm1
a2
1
b3
2
b2
a1
1
b2
2
b1
0
1
b1
2
b0
Portanto,
23
= 0, 71875.
32
Uma outra situao que pode ocorrer quando o nmero binrio for infinito, por exemplo, atravs de
uma seqncia de dgitos peridicos:
(0, 10111)2 =
Xf = 0, 1 2 . . . n 1 2 . . . m
onde 1 2 . . . m indica que a seqncia de dgitos 1 2 . . . m se repete ad infinitum. Na base decimal, tal
nmero dado por
Xf = 1 21 + 2 22 + + n 2n + 1 2n1 + 2 2n2 + + m 2nm
+ 1 2nm1 + 2 2nm2 + + m 2n2m
+ 1 2n2m1 + 2 2n2m2 + + m 2n3m
+ .
Observa-se que este nmero pode ser escrito como
Xf = 1 21 + 2 22 + + n 2n + 1 21 + 2 22 + + m 2m 2n
+ 1 21 + 2 22 + + m 2m 2nm
+ 1 21 + 2 22 + + m 2m 2n2m
+ 1 21 + 2 22 + + m 2m 2n3m
+ ,
Xf = 1 21 +2 22 + +n 2n + 1 21 + 2 22 + + m 2m 2n 1 + 2m + 22m + 23m + .
Usando agora a identidade,
1
= 1 + x + x2 + x3 + , (para |x| < 1),
1x
temos
1 + 2m + 22m + 23m + =
obtm-se
1
2m
=
,
1 2m
2m 1
Xf = 1 21 + 2 22 + + n 2n + 1 21 + 2 22 + + m 2m
2mn
.
2m 1
As duas expresses entre parnteses tm a mesma forma e podem ser calculadas diretamente usando
qualquer um dos mtodos descritos anteriormente.
Exemplo 1.7.
O nmero fracionrio
Xf = 0, 11010
= (0, 11010010010 . . . )2
2
=
23 1
1 1
+
2 4
12
23
=
47
28
= 0, 8214285714285 = 0, 82142857142.
Em geral, se o nmero fracionrio tem representao infinita peridica na base b,
Xf = 0, 1 2 . . . n 1 2 . . . m
bmn
,
bm 1
onde as expresses entre parnteses podem ser calculadas diretamente ou utilizando quaisquer um dos
mtodos descritos anteriormente.
Autor: Rudi Gaelzer IFM/UFPel
1.3
Como a maioria dos computadores usa a base b = 2, estes executam operaes aritmticas em nmeros
que esto na representao binria. Para tanto, as seguintes tabelas de operaes so automaticamente
satisfeitas.
1.3.1
Adio binria
Uma adio no sistema binrio realizada da mesma forma que a adio no sistema decimal, lembrando
que, no sistema binrio, h apenas 2 dgitos. Esta operao realizada de acordo com a seguinte tabela de
adio:
+
0
1
0
0
1
1
1
10
Para somar nmeros com mais de 2 algarismos, o mesmo processo de transporte para a coluna posterior,
utilizado na adio decimal, empregado. Por exemplo, se 1 = (01)2 e 3 = (11)2 , ento
1 + 3 = (01)2 + (11)2 = (100)2 = 4.
Outro exemplo, se 10 = (1010)2 e 15 = (1111)2 , ento
10 + 15 = (1010)2 + (1111)2 = (11001)2 = 25.
1.3.2
Subtrao binria
0
1
0
0
1
1
1
0
Deve-se ressaltar que a operao 0 - 1 resulta em 1, porm com o transporte de 1 para a coluna esquerda,
que deve ser acumulado ao subtraendo e, por conseqncia, subtrado do minuendo. Por exemplo, se
7 = (111)2 e 4 = (100)2 , ento
7 4 = (111)2 (100)2 = (11)2 = 3.
Outro exemplo, se 10 = (1010)2 e 8 = (1000)2 , ento
10 8 = (1010)2 (1000)2 = (10)2 = 2.
1.3.3
Multiplicao binria
Procede-se como em uma multiplicao no sistema decimal, de acordo com a tabela de multiplicao:
0
1
0
0
0
1
0
1
1.4
Nesta seo sero apresentadas algumas das representaes usadas para armazenar nmeros inteiros ou
reais na memria de um computador. As representaes de nmeros inteiros ou reais apresentadas na seo
1.2 no so suficientes; necessrio distingir-se, por exemplo, o sinal do nmero. Como no existe a
representao de um sinal + ou na memria de um computador, o recurso utilizado acrescentar um bit
adicional, para computadores binrios, ao nmero para representar o sinal. Este bit denominado bit de
sinal.
Autor: Rudi Gaelzer IFM/UFPel
10
1.4.1
aq1 aq2 . . . a1 a0 ,
sendo {a0 , a1 , . . . , aq1 } {0, 1, . . . , b 1}, com aq1 representando o sinal do nmero. Esta seqncia de
dgitos denominada palavra. Por exemplo, no sistema binrio convenciona-se usar aq1 = 0 para + e
aq1 = 1 para .
A converso do nmero internamente representado por (1.2) para o sistema decimal realizado atravs
de uma frmula semelhante forma polinomial (1.1):
q2
N =s
(1.3)
ak bk ,
k=0
sendo
N o nmero inteiro na base decimal.
s o sinal (ou +1 ou 1).
q 1 o nmero de dgitos disponvel para representar o valor absoluto de N .
b a base, s vezes denominada de radix (um inteiro maior que 1).
ak um dgito vlido na representao (0
ak < b), k = 0, 1, . . . , q 1.
para p = 1;
127,
8p2
32.767,
para p = 2;
p
Nmax
=
2k = 1 + 2 + 22 + + 28p2 = 28p1 1 =
2.147.483.647,
para p = 4;
k=0
9.223.372.036.854.775.807, para p = 8.
Outras representaes de nmeros inteiros em computadores existem, como por exemplo as representaes complemento de 1 ou complemento de 2 [15]; porm, estas no sero discutidas aqui.
A representao de um nmero inteiro em um computador exata. Operaes aritmticas entre nmeros
inteiros tambm exata, sob as seguintes condies:
1. o resultado no pode se encontrar fora do intervalo de nmeros inteiros que podem ser representados;
2. a diviso somente pode ser realizada entre nmeros exatamente divisveis, isto , a parte fracionria
deve ser nula.
1.4.2
A representao de nmeros reais em computadores, tambm denominada representao de ponto flutuante. Em uma representao de ponto flutuante, um nmero representado internamente atravs de uma
notao cientfica, isto , por um bit de sinal s (interpretado como positivo ou negativo), um expoente inteiro
exato e e uma mantissa inteira positiva M , sendo que um nmero limitado de dgitos permitido para e e
M . Tomando todas estas quantidades juntas, estas representam o nmero
x = s (0, d1 d2 . . . dn ) be ,
Autor: Rudi Gaelzer IFM/UFPel
(1.4)
Verso: 22 de julho de 2009
expoente de 8 bits
mantissa de 23 bits
10000000
10000000000000000000000
10000010
11000000000000000000000
01111111
10000000000000000000000
01101001
11010110101111111001010
11
Figura 1.2: Representaes de ponto flutuante para alguns nmeros em uma palavra tpica de 32 bits (4 bytes).
Espcie
n
emin
emax
xmin
xmax
xeps
REAL(4)
24
-125
128
1, 1754944 1038
3, 4028235 1038
1, 1920929 107
REAL(8)
53
-1021
1024
2, 225073858507201 10308
1, 797693134862316 10308
2, 220446049250313 1016
REAL(16)
113
-16381
16384
3, 362103143112093506 104932
1, 189731495357231765 104932
1, 925929944387235853 1034
Tabela 1.2: Valores de n, emin , emax , xmin , xmax e xeps para o compilador Intel Fortran.
o qual est escrito em uma forma legvel para seres humanos. Alm das quantidades j definidas, em (1.4)
os dgitos d1 , d2 , . . . , dn so limitados pela base b e o expoente limitado ao intervalo emin
e
emax .
Adicionalmente, n
1 denominado de nmero de dgitos do sistema e define o tamanho da mantissa
M = 0, d1 d2 . . . dn .
Contudo, um computador somente pode representar os valores de e e E atravs de dgitos na base b. Um
computador digital (b = 2), por exemplo, dispe sempre de um tamanho de palavra finito, isto , o nmero
total de bits que podem ser utilizados para representar s (1 bit), a parte exponencial e a mantissa sempre
fixo, para uma dada espcie de varivel real. Um nmero real de preciso simples, por exemplo, tipicamente
representado por uma palavra de 4 bytes ou 32 bits, sendo que 1 bit utilizado para representar o sinal,
enquanto que 8 bits so utilizados para representar a parte exponencial, restando 23 bits para representar
a mantissa. Desta forma, tal nmero ser representado na memria do computador como
x = se7 e6 e5 e4 e3 e2 e1 e0 d23 d22 . . . d2 d1 ,
onde {s, e0 , . . . , e7 , d1 , . . . , d23 } = {0, 1}. A figura 1.2 ilustra representaes em 4 bytes de alguns nmeros.
Uma descrio mais aprofundada acerca da representao binria de nmeros em computadores digitais
pode ser obtida em [15, seo 2.5].
A converso do nmero x representado em (1.4) para a base decimal pode ser realizada pela frmula
polinomial
n
x = s be
dk bk .
k=1
Como exemplo, a tabela 1.2 mostra os valores de n, emin e emax para o compilador Intel Fortran.
Para uma base b qualquer, denotando este sistema pelo smbolo
x [b, n, emin , emax ] ,
observam-se as seguintes caractersticas:
O menor nmero positivo que pode ser representado neste sistema
xmin = 0, 1 bemin = bemin 1 .
Valores para xmin vlidos para o compilador Intel Fortran so apresentados na tabela 1.2. Isto significa
que qualquer nmero x tal que
xmin < x < xmin
no poder ser representado pelo computador. Esta ocorrncia denominada underflow. Os compiladores podem ser instrudos ou a parar o processamento neste ponto, disparando uma mensagem de
erro, ou a seguir o processamento arredondando x = 0.
Autor: Rudi Gaelzer IFM/UFPel
12
xmax = 0, (b 1) (b 1) . . . (b 1) bemax = (b 1)
bk
bemax = 1 bn bemax .
k=1
n vezes
Valores para xmax vlidos para o compilador Intel Fortran so apresentados na tabela 1.2. Isto significa
que qualquer nmero x tal que
x < xmax ou x > xmax
no poder ser representado pelo computador. Esta ocorrncia denominada overflow. Os compiladores usualmente tomam duas possveis providncias quando detectam um overflow; ou pram o
processamento do programa emitindo uma mensagem de erro, ou continuam o processamento atribuindo a x o valor simblico x = Infinito ou x = Infinito.
O maior nmero que pode ser somado ou subtrado a 1,0, com o resultado permanecendo indistingvel
de 1,0
xeps = b1n .
(1.5)
Os valores de xeps para o compilador Intel Fortran so tambm apresentados na tabela 1.2. A quantidade xeps tambm denominada de epsilon da mquina ( m ) ou de preciso da mquina.
Somente um conjunto finito F de nmeros racionais podem ser representados na forma (1.4). Os
nmeros neste conjunto so denominados nmeros de ponto flutuante. Para uma representao
normalizada (d1 = 0), este conjunto contm precisamente
2 (b 1) (emax emin + 1) bn1 + 1
nmeros racionais.
Exemplo 1.9. Considere um modelo simplificado de representao numrica de ponto flutuante dado por
x [2, 4, 5, 6]. Para este sistema:
o menor nmero positivo possvel :
xmin = (0, 1000)2 25 = 251 =
1
;
64
1
1
<x<
.
64
64
x > 60.
O maior nmero que pode ser somado ou subtrado de 1,0 e que mantm o resultado inalterado :
xeps = 214 =
1
.
8
O nmero de elementos em F :
2.1. (6 + 5 + 1) 241 + 1 = 193.
Autor: Rudi Gaelzer IFM/UFPel
13
Figura 1.3: Nmeros normalizados positivos representveis em x [2, 3, 1, 2]. Os riscos verticais posicionam os
nmeros. Para cada nmero positivo, existe um correspondente nmero negativo.
Exemplo 1.10.
Considere o sistema de nmeros de ponto flutuante x [2, 3, 1, 2]. Para este sistema:
1
.
4
1
8
4=
7
;
2
x>
7
.
2
O maior nmero que pode ser somado ou subtrado de 1,0 e que mantm o resultado inalterado :
1
xeps = 213 = .
4
O nmero de elementos em F :
2.1. (2 + 1 + 1) 231 + 1 = 33.
A frao positiva dos nmeros possveis em x [2, 3, 1, 2] est indicada na figura 1.3. Cada risco vertical
posiciona um nmeros representvel neste sistema.
1.5
Nesta seo ser feita uma breve descrio dos principais erros envolvidos na representao de pontos
flutuantes e nas operaes algbricas entre os mesmos.
1.5.1
Preciso e acurcia
Os conceitos de preciso e acurcia so amide confundidos entre si. A diferena entre ambos oriunda
da diferena entre o hardware e o software disposio do programador.
Preciso1 refere-se ao quo prximo um nmero representado pelo computador representa o nmero que
ele ambiciona representar. A preciso de um nmero governada pelo nmero de dgitos empregados
na representao e na lgebra. Assim, a constante ser representada com maior preciso utilizando
8 bytes do que utilizando 4 bytes para armazenar o nmero (ver tabela 1.2).
Acurcia2 refere-se a quo prximo um nmero representado pelo computador (como resultado de uma
srie de operaes, por exemplo) est do valor correto do nmero que ele almeja representar. A acurcia
governada pelos erros (de truncamento e arredondamento) no mtodo numrico empregado. Assim,
se os nmeros 1 = 3, 1416304958 e 2 = 3, 1415809485 almejam ambos a representar o nmero
= 3, 141592654 . . . , o nmero 2 possui maior acurcia que 1 , embora ambos possuam a mesma
preciso.
Com freqncia, em linguagem coloquial refere-se preciso quando na verdade o correto seria referir-se
acurcia de um resultado. As sees a seguir indicam como se pode medir a acurcia de um nmero atravs
do clculo dos erros absoluto e relativo do mesmo.
1 Do
2 Do
ingls precision.
ingls accuracy.
14
1.5.2
So duas medidas relacionadas entre si, largamente empregadas na anlise de erro numrico.
1.5.2.1
Erro absoluto
Seja X o valor exato (no conhecido) de um nmero e f l (X) o seu valor aproximado (conhecido) por
uma representao de ponto flutuante. O erro absoluto (EAX ) definido como o valor absoluto da diferena
entre o valor exato e o valor aproximado:
EAx = |X f l (X)| .
Ou seja, conhecendo-se f l (X) e EAX , pode-se afirmar que
X = f l (X) EAx .
Em geral, somente possvel estimar-se o valor do erro absoluto.
Por exemplo, Arquimedes estimou o valor de atravs da mdia do permetro de polgonos que estavam
contidos em uma circunferncia de raio unitrio e de polgonos que continham a circunferncia. Fazendo
uso deste mtodo, Arquimedes foi capaz de estimar
min = 3, 1409 = 3 +
1335
1137
< < max = 3 +
= 3, 1428 . . . .
8069
9347
Desta forma, Arquimedes obteve erros absolutos iguais a EA = 6, 830 104 para min , EA = 1, 2339
104 para max e EA = 2, 7546 104 para a mdia entre min e max . Portanto, Arquimedes poderia
afirmar que
1
1
= (min + max ) (max min ) = 3, 14187 0, 00096.
2
2
1.5.2.2
Erro relativo
Seja X o valor exato de um nmero e f l (X) o seu valor aproximado, o erro relativo (ERX ) definido
como o erro absoluto dividido por |f l (X)|:
ERX =
EAX
X f l (X)
=
.
|f l (X)|
f l (X)
Voltando ao exemplo anterior, os erros relativos das estimativas de Arquimedes foram: ER = 2, 1741
104 para min , ER = 3, 9262 104 para max e ER = 8, 7674 105 para a mdia.
Em geral, a melhor medida para se estimar a preciso de uma aproximao o erro relativo, pois este
indica diretamente o nmero de dgitos significativos corretos na aproximao.
1.5.3
15
Para escrever y de acordo com o sistema x [2, 4, 5, 6], deve-se primeiro normalizar de acordo com as operaes:
(y)2 = 24 + 25 + 26 + 27 + 28 + 29 + 212 + 213 + 215 + . . .
= 23 21 + 22 + 23 + 24 + 25 + 26 + 29 + 210 + 212 + . . .
= (0, 111111001101 . . . ) 23 ,
o qual est agora na forma normalizada. De acordo com (1.4), podemos identificar ento
M = 0, 111111001101 . . . ,
e = 3.
Contudo, para o sistema x [2, 4, 5, 6] pode-se usar somente 4 dgitos na mantissa. Desta forma, uma
aproximao possvel para (y)2 fica:
f l ((y)2 ) = (0, 1111) 23 ,
o qual corresponde ao seguinte nmero na base 10: f l (y) = 0, 1171875 . . . , resultando em erros absoluto e
relativo:
EAy = 6, 272 103 ,
ERy = 5, 3525 102 = 5, 35%.
Este procedimento de aproximao denominado truncamento.3 Uma definio mais rigorosa do mtodo
de truncamento ser apresentada a seguir.
Dado um nmero X j na forma normalizada que no possua representao exata no sistema x [b, n, emin , emax ].
Sejam agora X o maior nmero representvel no sistema e que seja menor que X e X o menor nmero representvel no sistema e que seja maior que X. Ento,
X
Pode-se escrever X como
X.
X = (0, d1 d2 . . . dn ) be + gX ben ,
onde
gx < 1
a parcela de X que no pode ser includa na sua representao. Existem ento 2 maneiras de se realizar
a aproximao:
Truncamento. O truncamento consiste em simplesmente ignorar gX . Assim,
f l (X) = (0, d1 d2 . . . dn ) be ,
o qual representvel no sistema. Neste caso, os erros absoluto e relativo so
EAX = |X f l (X)| = |gX | ben < ben ,
EAX
gX ben
bn
=
<
= bn+1 ,
ERX =
f l (X)
(0, d1 d2 . . . dn ) be
(0, 1)b
pois (0, d1 d2 . . . dn )
(0, 1)b = b1 . Desta forma, obtm-se limites superiores para ambos os erros.
No exemplo acima, pode-se escrever:
(y)2 = (0, 1111) 23 + gy 234 , sendo gy = 0, 11001101 . . . .
Realizando ento o truncamento, obtm-se f l ((y)2 ).
Arredondamento. No arredondamento,4 executa-se a seguinte operao:
f l (X) =
(0, d1 d2 . . . dn ) be ,
se |gX | < 21
(0, d1 d2 . . . (dn + 1)) be , se |gX | 21 .
(1.6)
|gX | ben ,
se |gX | <
|gX 1| ben , se |gX |
1
2
1
2
<
1 en
b
,
2
16
1 en
2b
,
se |gX | < 12
1 en
1
(0, d1 d2 . . . dn ) be
2b
<
= bn+1 ,
ERX <
1 en
e
b
(0,
1)
b
2
2
, se |gX | 12
e
(0, d1 d2 . . . (dn + 1)) b
o qual fornece uma estimativa superior para o erro relativo. No exemplo acima, como gy > 1/2, deve-se
somar 1 ao dgito d4 resultando, com o auxlio da tabela de adio de binrios apresentada na seo
1.3.1,
f l ((y)2 ) = (0, 1111) 23 + (0, 0001) 23 = (1, 0000) 23 = (0, 1000) 22 .
Neste caso, obtm-se
f l (y) = 0, 125,
o qual possui um erro relativo de 1,2% de y, bem menor que o erro obtido com o truncamento, que
foi de 5,35%.
Computadores mais recentes modificam ligeiramente o arredondamento em relao frmula apresentada em (1.6). Nesta, o ltimo dgito significativo (dn ) no ser alterado se |gX | < 1/2 e este ser
alterado se |gX | 1/2. H, portanto, uma ligeira preferncia para a alterao de dn no processo de
arredondamento, o que insere um erro sistemtico no processo. Atualmente, se |gX | = 1/2, o valor de
dn ser alterado somente em metade das situaes, com base em algum critrio. Este critrio pode
ser a paridade de dn , por exemplo. Assim, para b = 10 o nmero 12,5 seria arredondado para 12,
enquanto que 13,5 seria arredondado para 14. Este critrio tambm denominado arredondamento
par [6].
1.5.4
Quando se conta o nmero de dgitos em um valor numrico, no se deve incluir os zeros no incio do
nmero, uma vez que estes zeros somente auxiliam a localizar a posio ideal do ponto decimal. Caso se
queira contar o nmero de decimais, ento os zeros direita do ponto decimal devem ser includos. Por
exemplo, o nmero 0, 00147 dado com trs dgitos mas possui cinco decimais. O nmero 12, 34 dado com
quatro dgitos, mas possui apenas dois decimais.
Quando se trabalha com uma representao de um nmero obtida por meio de um processo de arredondamento ou truncamento, uma maneira alternativa para se estimar a qualidade da aproximao, ou seja a
acurcia do nmero, consiste em computar o nmero de dgitos significativos corretos da representao. Se
f l (X) uma aproximao de X com k dgitos significativos corretos em uma representao de base b, ento
X f l (X)
=|
X
X|
1 k+1
b
,
2
onde k o maior nmero inteiro positivo para o qual a inegualdade acima verificada.
Exemplo 1.11.
X|
1/6 0, 16667
= 2 105
1/6
1 5+1
10
.
2
1.5.5
Adicionalmente aos erros resultantes do truncamento ou do arredondamento na representao de nmeros de ponto flutuante por computadores, as operaes algbricas que necessariamente so realizadas
pelo computador introduzem dois outros tipos de erros no resultado destas operaes e que tendem a se
acumular medida que o nmero de operaes de ponto flutuante so realizadas pelo computador. Estes
erros so os erros de arredondamento5 e os erros de truncamento.6 Estes tipos de erros adicionais
sero brevemente discutidos nesta seo.
5 Neste caso, o termo erros de arredondamento possui um significado distinto do processo de arredondamento utilizado na
representao de nmeros reais, discutida na seo 1.5.3. O termo, neste contexto, consiste na traduo usualmente empregada
para o termo em ingls round-off errors.
6 Aqui tambm, o termo erros de truncamento no se refere ao processo de truncamento discutido na seo 1.5.3, mas sim
ao tipo de erro que em ingls denominado truncation errors.
17
Erros de arredondamento
A origem deste tipo de erro est tambm relacionada com a representao finita das palavras em um
computador e surge com a realizao de operaes de ponto flutuante pelo mesmo.
Um exemplo simples ilustra o surgimento deste tipo de erro. Suponha-se que se esteja usando um sistema
numrico de base 10 com 5 dgitos na mantissa, semelhante representao (1.4). Deseja-se agora calcular
o valor da funo
sen x
1 cos x
=
f (x) =
sen x
1 + cos x
para x = 0, 007. Rotinas intrnsecas fornecidas pelo fabricante do compilador utilizado encarregam-se de
calcular o valor das funes trigonomtricas dentro da preciso disponvel, por meio de um processo de
arredondamento. Assim,
sen(0, 007) = 0, 69999 102
cos(0, 007) = 0, 99998.
A primeira expresso para f (x) fornece:
f (x) =
0, 2 104
1 0, 99998
1 cos x
=
= 0, 28572 102 ,
=
sen x
0, 69999 102
0, 69999 102
sen x
0, 69999 102
=
= 0, 35000 102 ,
1 + cos x
1 + 0, 99998
sendo que este ltimo resultado o correto, dentro da preciso de 5 dgitos disponvel. O erro relativo
entre o primeiro valor (errado) e o segundo (correto) de 22,5%. Na primeira expresso, devido escolha
feita na preciso, restou somente um dgito relevante no numerador aps a subtrao. Isto levou a uma
perda de preciso e a um resultado errneo devido ao cancelamento de dois nmeros muito prximos entre
si. Este problema seria evitado caso o sistema de representao dispusesse de, pelo menos, mais um dgito
significativo na mantissa; porm, o ponto a ser frisado aqui que muito facilmente este tipo de erro de
arredondamento ocorre, devido ao tamanho finito da palavra no computador. Por outro lado, caso fosse
solicitado o valor de f (x) para x , seria a segunda expresso que forneceria um valor incorreto, enquanto
que a primeira forneceria um valor correto.
Este exemplo simples demonstra a perda de preciso numrica devida a erros de arredondamento, onde o
nmero de dgitos significativos reduzido na subtrao de dois nmeros prximos entre si. Isto mostra que
no possvel confiar cegamente no clculo realizado; deve-se sempre analisar cuidadosamente o algoritmo
empregado na procura de possveis fontes de erros.
Considera-se ento um nmero real X, o qual possui uma representao de mquina f l (X), que pode
ser escrita como
f l (X) = X (1 + X ) ,
onde
sendo X = X
X.
f l (X) X
f l (X) X
f l (X) X
1
=
=
,
X
f l (X) X
f l (X) 1 X /f l (X)
f l (X) X
f l (X)
f l (X) X
f l (X)
1+
2
X
X
+
+ ...
f l (X) f l (X)2
f l (X) X X
f l (X) f l (X)
f l (X) X
f l (X)
f l (X) X
+
f l (X)
1+
X
f l (X)
f l (X) X
f l (X)
X
,
f l (X)
7
ou seja, | X | ERX
max , onde max denominado de unidade na ltima posio , ou uup. Isto ,
com k dgitos na mantissa e com a base b,
uup bk .
7 Do
18
Dados agora dois nmeros reais positivos X e Y , deseja-se estimar os erros relativos das operaes
algbricas entre ambos:
X op Y,
sendo op um das operaes: +, , ou , conhecendo-se os erros relativos
f l (X) = X (1 +
X)
e f l (Y ) = Y (1 +
correspondentes:
).
op ) ,
f l (X op Y ) (X op Y )
,
(X op Y )
f l (X + Y ) = f l (X) + f l (Y ) = (X + Y ) + (X + Y ) ,
X + Y
X +Y
= (X + Y ) 1 +
sendo
+
X +Y
X +Y
(X + Y ) (1 +
+) ,
X + Y
.
f l (X) + f l (Y )
2. f l (X)
X| .
ER+ |
f l (Y ). Neste caso,
|.
Verso: 22 de julho de 2009
19
ER+
Conclui-se, portanto, que ER+ O [max (
X, Y
1
|
2
|.
)].
X Y
X Y
= (X Y ) 1 +
sendo
X Y
X Y
(X Y ) (1 +
) ,
X Y
.
f l (X) f l (Y )
f l (Y ). Neste caso,
ER |
X| .
ER |
f l (Y ). Neste caso,
|.
1 e 1 f l (X) /f l (Y )
1, resultando
|.
Este resultado mostra claramente como o erro relativo pode se tornar muito grande quando X Y .
Isto ocorre porque a subtrao de dois nmeros muito prximos entre si resulta em um nmero cuja
representao ocorre nos ltimos dgitos da mantissa, resultando em um grande erro de arredondamento.
Multiplicao. Neste caso,
f l (X Y ) = f l (X) f l (Y ) = (X + X ) (Y + Y ) = X Y + X Y + Y X + X Y .
Supondo que |X Y |
f l (X Y ) (X Y ) 1 +
) .
Assim,
EA = |f l (X) Y + f l (Y ) X | ,
X
Y
ER = | | =
+
|
f l (X) f l (Y )
Portanto, ER O [max (
8A
X, Y
|.
notao O(x) indica a ordem de grandeza de x. Uma definio rigorosa apresentada na pgina 22.
20
Diviso. Neste caso,
f l (X) = X + X ,
f l (X)
X + X
X + X
1
X + X
Y
1
=
=
f l (Y )
Y + Y
Y
1 + Y /Y
Y
f l (Y )
X
X + X
XY + X Y
X
f l (X)
Y ,
2
Y
Y
f l (Y ) f l (Y )2
f l (Y )
f l (X Y ) =
f l (Y ) X f l (X) Y
f l (X Y ) (X Y ) +
f l (Y )
Ao passo que
f l (X Y ) = (X Y ) 1 +
(X Y ) (1 +
Y f l (Y ) X f l (X) Y
2
X
f l (Y )
(X Y ) 1 +
X
Y
f l (X) f l (Y )
) .
Ento,
EA =
ER = |
f l (Y ) X f l (X) Y
f l (Y )
|
X
Y
|
f l (X) f l (Y )
|.
program p o l y n o m i a l
i m p l i c i t none
integer : : i
integer , parameter : : dp= 8
r e a l ( kind=dp ) : : x , dx , px
!
open ( unit =10 , f i l e = p o l . dat )
dx= 0 . 0 1 6 _dp/ r e a l (500 1 , dp )
x= 0 . 9 9 2 _dp
do i= 1 , 500
px= x 6 6 x 5 + 15 x 4 20 x 3 + 15 x 2 6 x + 1 . 0 _dp
write ( 1 0 , ) x , px , px 1 . 0 e13_dp
x= x + dx
end do
end program p o l y n o m i a l
21
P(x)*10
-13
-1
0,99
1,01
x
Figura 1.4: Esquerda: Clculo do polinmio P (x) sem o uso de dgitos de guarda [13]. Direita: Clculo de P (x)
usando um compilador que segue as normas IEEE 754.
1.5.5.2
Erros de truncamento
Este erro ocorre quando se realiza um truncamento em um processo infinito. Um exemplo usualmente
empregado consiste no clculo do valor de uma funo transcendental usando sries de McLaurin. Suponhase que se deseja calcular o valor da funo f (x) = ex em x = 1, por exemplo. Neste caso,
e=
1
.
n!
n=0
Como no possvel ao computador a realizao da soma infinita, a srie dever ser truncada para algum
n > N . Neste caso, o resultado obtido ir diferir de e = 2, 71828182845904523536028747135 . . . por um certo
valor que depender do valor de N , isto , do nmero de termos considerados na soma. Este tipo de erro
soma-se ao erro de arredondamento considerado na seo 1.5.5.1. Em muitos casos, o erro de truncamento
exatamente a diferena entre o modelo matemtico e o modelo numrico empregados. Uma das principais
tarefas da anlise numrica (e uma das mais difceis) a determinao de uma valor mximo para o erro de
truncamento.
Em muitos modelos numricos existe um parmetro que governa o erro de truncamento. Por exemplo,
o nmero N de termos usados vindos de uma srie infinita, ou o tamanho x usado numa frmula de
derivao numrica. Uma maneira comum e prtica de estimar o erro de truncamento consiste em variar
este parmetro (tornando N maior ou x menor) e observar os resultados numricos. Se os resultados
computados convergirem a um certo nmero de dgitos significativos, ento pode-se decidir que o erro
de truncamento (juntamente com os demais tipos de erros) so pequenos o suficiente para produzir um
resultado aceitvel. Assim, muitas rotinas numricas incluem um teste de convergncia para decidir
quando os resultados so aceitveis. Infelizmente, no existe um teste de convergncia padro para qualquer
problema numrico, uma vez que se trata de um problema matematicamente insolvel. Em um nvel
intuitivo, isto significa que a convergncia nunca pode ser testada de forma totalmente confivel; do ponto
de vista matemtico, para um dado teste de convergncia que funciona em diversas situaes, sempre ocorre
um problema para o qual o teste ir falhar.
Ordem de convergncia. Trata-se de uma maneira de medir o quanto o erro de truncamento vai a zero
medida que o parmetro do mtodo varia. Desta maneira, pode-se comparar a eficcia de distintos mtodos.
Em funo do clculo da ordem de convergncia para diferentes mtodos, pode-se obter diversos resultados,
para distintos parmetros, tais como:
O mtodo converge tal como 1/N .
O mtodo converge tal como 1/k 3,5 .
O mtodo converge como h2 .
Autor: Rudi Gaelzer IFM/UFPel
22
xL
f (x)
< .
g(x)
A ordem de convergncia pode ser complicada (por exemplo, h1,5 / log h) mas em alguns casos simples
denominaes especiais so empregadas. Se a ordem de convergncia uma potncia inteira (por exemplo,
h2 , N 3 , x5 ), ento diz-se que a ordem de convergncia esta potncia (2, 3 ou 5), ou que a convergncia
de segunda, terceira ou quinta ordens. Por outro lado, diz-se convergncia logartmica ou exponencial se
a ordem envolve uma funo exponencial (como eN ) ou logartmica (como 1/ log N ).
Exemplo 1.12. As ordens de convergncia de dois mtodos de derivao numrica por diferena finita
sero calculadas:
1. Diferena adiantada (forward difference):
f (x)
f (x + h) f (x)
.
h
f (x + h) f (x h)
.
2h
Em ambos os mtodos, para um parmetro h suficientemente pequeno e para um funo f (x) bem comportada em torno de x, pode-se desenvolver a mesma em srie de McLaurin:
1
1
f (x h) = f (x) f (x)h + f (x)h2 f (x)h3 + .
2
6
Neste caso, para o mtodo 1:
f (x + h) f (x)
1
= f (x) + f (x)h + .
h
2
Ou seja, como o termo predominante proporcional a h, a ordem de convergncia deste mtodo O(h).
Para o mtodo 2:
f (x + h) f (x h)
1
= f (x) + f (x)h2 + ,
2h
6
ou seja, este mtodo da ordem O h2 .
Como exemplo prtico da aplicao destes mtodos, deseja-se comparar os clculos da derivada da funo
f (x) = sen x2 no ponto x = 0, 5 pelos mtodos 1. e 2., comparando-os com o valor correto da derivada:
f (x) = 2x cos x2 , para x = 0, 5. O erro absoluto versus o parmetro h est traado na figura 1.5, enquanto
que o programa em Fortran 95 que calculou os dados est no programa 1.3.
Os grficos foram traados em escala log-log para se verificar diretamente o expoente da taxa de convergncia. Isto , se erro = k , ento a inclinao da reta k. Pode-se ver claramente que no incio do
processo iterativo, as taxas de convergncia dos mtodos 1. e 2. concordam com o valor previsto (h1 e h2 ,
respectivamente). Contudo, a partir de um determinado ponto os erros de arredondamento comeam a se
tornar mais importantes e o erro absoluto passa a variar a uma taxa proporcional a h1 .
Autor: Rudi Gaelzer IFM/UFPel
23
10
-2
10
Erro Absoluto
-4
10
-6
10
Mtodo 1.
Mtodo 2.
+1
~h
+2
~h
-1
~h
-8
10
-10
10
-12
10
10
10
10
10
10
10
10
12
10
14
10
-1
Figura 1.5: Grfico log-log do erro absoluto nos clculos de derivadas usando mtodos de diferenas finitas. As
ordens de convergncia so h e h2 para os mtodos 1. e 2., respectivamente. Nota-se que erros de arredondamento
acabam por arruinar totalmente a computao antes de a preciso de 15 dgitos ser atingida.
Programa 1.3: Programa em Fortran 95 que calculou as diferenas finitas da figura 1.5.
program d e r i v a d a s
i m p l i c i t none
integer , parameter : : dp= 8
integer : : i
r e a l ( kind= dp ) : : h= 0 . 0 2 _dp
! h i n i c i a l i z a d o a 1/50.
r e a l ( kind= dp ) , parameter : : x= 0 . 5 _dp ! Valor de x f i x o .
r e a l ( kind= dp ) : : df1 , df2 , f l
!
f l = 2 . 0 _dpx c o s ( xx ) ! Valor c o r r e t o da d e r i v a d a em x .
open ( unit =10 , f i l e = d e r i v s . dat )
do i= 1 , 45
d f 1= ( f ( x+h ) f ( x ) ) / h
! C l c u l o mtodo 1 .
d f 2= 0 . 5 _dp ( f ( x+h ) f ( xh ) ) / h ! C l c u l o mtodo 2 .
write ( 1 0 , ) 1 . 0 _dp/h , abs ( df1 f l ) , abs ( df2 f l )
h= 0 . 5 _dph
! h d i v i d i d o por 2 .
end do
CONTAINS
function f ( x )
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
f= s i n ( xx )
return
end function f
end program d e r i v a d a s
24
4
10
10
10
-2
Erro Absoluto
10
-4
10
-6
10
-8
10
-10
e
-12
e
10
-12
10
-14
10
-16
10
10
10
N
10
Figura 1.6: Grfico log-log do erro absoluto no clculo da srie de McLaurin para ex quando a srie truncada na
potncia N . Erros de arredondamento limitam a preciso do resultado para x = 1 antes que para x = 12.
Exemplo 1.13. Deseja-se calcular o erro absoluto decorrente do truncamento no clculo da srie de
McLaurin para a funo ex :
ex =
xn
xn
.
n!
n!
n=0
n=0
Os exemplos da seo 1.5.5.2 mostraram como um clculo relativamente simples pode ser completamente
arruinado por erros de arredondamento. Isto mostra que um determinado mtodo numrico sempre ter a
sua utilidade limitada a um determinado valor do parmetro de controle, de tal forma que uma posterior
alterao no valor deste parmetro ter sempre um efeito deletrio na computao desejada. Caso o programador deseje uma preciso maior que o mtodo pode oferecer, resta a ele buscar um mtodo alternativo
para atingir este objetivo.
Os erros de arredondamento tendem sempre a crescer com o nmero de operaes de ponto flutuante
realizadas. Como ser este crescimento no se pode prever de antemo. Existem processos particularmente
desafortunados, nos quais o erro de arredondamento cresce de forma linear ou atravs de uma lei de potncia
do tipo N k (k > 1), principalmente quando as operaes realizadas so sempre do mesmo tipo, resultando
em erros que sempre se somam. O resultado apresentado na figura 1.5 um exemplo deste tipo de situao.
A mesma tendncia de erro sistemtico ocorre quando o processo de representao finita realizado por
truncamento (ver seo 1.5.3).
Em um caso mais geral, os tipos de operaes de ponto flutuante envolvidas so distintos, de forma
a sempre haver a possibilidade que um erro ser parcialmente compensado por outro, resultando em um
aumento mais lento no erro total. Alm disso, se for utilizado o processo de arredondamento par descrito na
seo 1.5.3, os erros resultantes flutuaro de forma aleatria em valores positivos ou negativos, resultando
num crescimento mais lento. Desta forma, a teoria de probabilidades indica que o erro deve variar:
arr N xeps ,
Autor: Rudi Gaelzer IFM/UFPel
25
program expo
i m p l i c i t none
integer , parameter : : dp= 8
integer : : j , n
r e a l ( kind= dp ) , dimension ( 2 ) , parameter : : x= ( / 1 . 0 _dp, 12.0_dp / ) , &
ex= ( / 2 . 7 1 8 2 8 1 8 2 8 4 5 9 0 4 5 2 3 5 3 6 0 2 8 7 4 7 1 3 5 2 7_dp ,
&
6 . 1 4 4 2 1 2 3 5 3 3 2 8 2 0 9 7 5 8 6 8 2 3 0 8 1 7 8 8 0 5 5 e6_dp/ )
r e a l ( kind= dp ) , dimension ( 2 ) : : soma , f a t o r
!
open ( unit =10 , f i l e = expo . dat )
do n= 1 , 100
soma= 1 . 0 _dp
f a t o r= soma
do j= 1 , n
f a t o r= f a t o r x/ r e a l ( j , dp )
soma= soma + f a t o r
end do
write ( 1 0 , ) n , abs ( somaex )
end do
end program expo
onde xeps dado por (1.5) e N um parmetro que mede o nmero de termos considerados no mtodo ou
o nmero de operaes de ponto flutuante realizadas.
O erro total ser ento a soma do erro de arredondamento e do erro de truncamento, decorrente da
aproximao feita no algoritmo. De acordo com os exemplos e argumentos apresentados, um forma comum
de se encontrar os erros de truncamento :
trunc
,
N
( > 0).
+
N xeps .
N
De acordo com este modelo, total deve comear diminuindo para N relativamente pequeno, porm, medida
que N aumenta, os erros de arredondamento tornam-se mais importantes e total comea a aumentar. O
ponto onde este aumento se inicia pode ser estimado como
ln N
1
ln
+ 1/2
xeps
2
26
Captulo 2
Derivao Numrica
2.1
Introduo
Derivao e integrao numricas so alguns dos mtodos que mais se utiliza em fsica computacional.
Com freqncia necessrio calcular ou f (x) ou f (x)dx para uma determinada funo f (x) para a qual
pode existir ou no uma expresso analtica. O objetivo deste captulo introduzir alguns dos mtodos mais
empregados na derivao numrica, mantendo-se como objetivo a preciso numrica dos mtodos.
Ao contrrio da integrao numrica, que ser apresentada no prximo captulo, a derivao possui alta
suscetibilidade a erros, tanto de truncamento quanto de arredondamento. Isto se deve prpria natureza
da derivao, definida por
f (x + h) f (x)
df
= lim
.
(2.1)
dx h0
h
Como sempre h erros associados com o clculo de f (x), estes sero ampliados medida que se executa
numericamente o processo de limite h 0. Como a representao finita de nmeros reais em computadores
impe um limite inferior no valor de f (x + h) f (x), erros de arredondamento rapidamente comeam a
se acumular durante o processo de limite, levando o clculo, finalmente, a um processo de cancelamento
catastrfico, como se pode observar no exemplo da figura 1.5. Portanto, derivao numrica somente deve
ser realizada quando no houver outro mtodo para a soluo do problema em estudo.
Nas prximas sees, sero apresentados mtodos que possibilitaro o clculo numrico de derivadas
primeiras e segundas de funes que possuem ou no uma expresso analtica conhecida. Alguns destes
mtodos sero posteriormente empregados no clculos de equaes diferenciais ordinrias ou parciais.
2.2
Como j foi adiantado no exemplo da pgina 22, a maneira mais bvia (e mais ingnua) de se calcular
numericamente uma derivada consiste em tomar literalmente a definio (27) e substitu-la por uma frmula
de diferena finita, resultando na frmula de diferena adiantada (forward difference).
2.2.1
f (x + h) f (x)
.
h
(2.2)
Aplicado desta forma, este procedimento est fadado ao quase certo fracasso, o que no impede de ser
largamente utilizado no clculo numrico de equaes diferenciais parciais. Portanto a frmula (27) somente
deve ser empregada quando consideraes de tempo computacionais forem importantes.
H duas fontes importantes de erros em (27): erro de truncamento e erro de arredondamento. O erro
de truncamento pode ser estimado a partir do desenvolvimento de f (x + h) em uma srie de McLaurin em
torno de x:
1
1
1
f (x h) = f (x) f (x)h + f (x)h2 f (x)h3 + f iv (x)h4 + ,
(2.3)
2
6
24
resultando
f (x + h) f (x)
1
= f (x) + f (x)h + O h2 .
h
2
27
28
|f h| .
Para diminuir este erro (para valores finitos de f ), poderia-se tentar diminuir o valor de h, o que acabaria
levando ao aumento do valor do erro de arredondamento, como se pode observar na figura 1.5.
O erro de arredondamento possui duas origens. A primeira seria o erro no processo de arredondamento
realizado na representao finita dos pontos x e x + h, conforme discutido na seo 14. Estes erros podem
ser substancialmente diminudos se o computador e o compilador empregarem dgitos de guarda. Assim,
supondo-se as representaes de x e x + h exatas, ainda resta o erro de arredondamento no processo de
clculo da derivada [f (x + h) f (x)] /h. Este erro da ordem
a
f (x)
,
h
onde f a preciso fracional no clculo de f (x). Para uma funo bem comportada, f m , sendo m a
preciso da mquina (12). O fato de a h1 pode ser inferido a partir da figura 23. Assim, o erro total
no clculo de (27) pode ser estimado como
total
|f h| +
f (x)
.
h
(2.4)
O valor de h que minimiza este erro pode ser estimado pelo clculo do mnimo de
hmin
f
f
total ,
resultando
f xc ,
onde xc = f /f denominado escala de curvatura de f (x) ou de escala caracterstica sobre a qual f (x)
varia. Na ausncia de uma melhor informao, usualmente usa-se xc x.
Portanto, o erro relativo na melhor estimativa da derivada, conforme dada por (27) :
total
|f |
|f f |
f2
1/2
f,
onde se sups que f , f e f sejam todos da mesma ordem de grandeza. Pode-se ver que a frmula de
diferena adiantada fornece como melhor estimativa somente a raiz quadrada do epsilon de mquina. Para
4
preciso simples, m 107 , portanto,
, ou seja, 4 dgitos de preciso. J para preciso dupla,
m 10
16
8
, resultando
, ou 8 dgitos significativos.
m 10
m 10
2.2.2
Quando as condies de contorno do sistema em estudo assim o exigirem, pode ser necessrio usar uma
frmula de diferena atrasada para estimar a derivada de uma funo. Esta frmula consiste simplesmente
em tomar:
f (x) f (x h)
f (x)
.
(2.5)
h
Neste caso,
f (x) f (x h)
1
= f (x) f (x)h + O h2 ,
h
2
e, portanto, o erro total igual a (2.4).
2.2.3
f (x + h) f (x h)
.
2h
(2.6)
(2.7)
29
|f (x)| h2 ,
hmin
f
f
f xc
|f |
f
f
f2
( f)
2/3
2/3
( f)
2/3
2/3
Assim, para preciso simples, m 105 , ou seja, 5 dgitos de preciso, e para preciso dupla, m 1011 ,
ou 11 dgitos significativos, aumentando sensivelmente a preciso na estimativa da derivada. A vantagem
desta frmula comparada com a frmula (2.2) claramente visvel na figura 1.5.
2.2.4
Frmula de 5 pontos
8
8
f (x + 2h) f (x 2h) = 4f (x)h + f (x)h3 + f v (x)h5 + O h7 .
3
15
Combinando-se adequadamente ambas as frmulas, obtm-se
2
f (x 2h) 8f (x h) + 8f (x + h) f (x + 2h) = 12f (x)h f v (x)h5 + O h7 ,
5
ou seja,
1
f (x 2h) 8f (x h) + 8f (x + h) f (x + 2h)
= f (x) f v (x)h4 + O h6 .
12h
30
Portanto,
f (x 2h) 8f (x h) + 8f (x + h) f (x + 2h)
1
+ f v (x)h4 ,
12h
30
a qual conhecida como derivada de 5 pontos.
O erro de truncamento agora da ordem
f (x)
(2.8)
|f v | h4 ,
f |f |
,
|f v |
total
|f |
|f v | |f |
5
|f |
4/5
f .
(2.9)
4/5
Para preciso simples, m 106 , ou seja, 6 dgitos significativos corretos, enquanto que em preciso dupla,
4/5
13
, ou seja, 13 dgitos significativos corretos.
m 10
Combinaes ainda mais elaboradas levam a aproximaes ainda mais precisas para a derivada. Entretanto, o nmero de clculos da funo f (x) em diferentes pontos aumenta com a preciso do mtodo
empregado. Por conseguinte, no usualmente vantajoso usar um mtodo ainda mais preciso que a frmula
da derivada de 5 pontos (2.8).
Autor: Rudi Gaelzer IFM/UFPel
30
2.3
As frmulas introduzidas na seo 2.2 pode sem estendidas para o clculo da derivada de segunda ordem
de f (x), com diferentes ordens de convergncia.
2.3.1
1 iv
f (x)h4 + O h6 + ,
12
ou seja,
f (x + h) 2f (x) + f (x h)
1
f iv (x)h2 ,
(2.10)
2
h
12
a qual j parte de uma preciso equivalente ao mtodo de diferena centrada (2.6) para a derivada de
primeira ordem.
f (x)
2.3.2
2 vi
f (x)h6 ,
15
2.4
As frmulas apresentadas nas sees 2.2 e 2.3 so teis quando a funo f (x) possui uma expresso
analtica conhecida. Neste caso, para um determinado valor de h, sempre possvel calcular-se f (x h).
Entretanto, em muitas aplicaes prticas, a forma analtica de f (x) no conhecida, sendo esta apresentada
definida somente em pontos regularmente espaados em uma rede.
O problema consiste agora em determinar o valor da derivada de f (x) em pontos sobre ou fora da rede.
Agora, o parmetro h ir representar o espaamento da rede, ou seja, f (x) conhecida nos pontos x = xi ,
i = 1, 2, . . . , n, tais que x1 < x2 < x3 < < xn e xi+1 xi = h. Nestes pontos, f (xi ) fi . Deseja-se ento
calcular a derivada em um ponto x = xi + ph, sendo que a quantidade p no necessariamente inteira. Ou
seja, quer-se obter fp = f (xi + ph).
Abramowitz & Stegun [2] oferecem as seguintes frmulas para as derivaes.
2.4.1
1
h
1
2
f1 2pfi + p +
1
2
f1 + 0, 13f ()h2 ,
onde f1 = f (xi h) e f1 = f (xi + h). Assim, se p = 0, esta frmula se reduz derivada centrada (2.6).
2.4.2
f (xi + ph)
1 3p2 6p + 2
3p2 1
f1 3p2 4p 1 fi + 3p2 2p 2 f1
f2
2h
3
3
+
2.4.3
31
f (xi + ph)
4p3 3p2 8p + 4
1 2p3 3p2 p + 1
f2
f1 + 2p2 5 pfi
2h
6
3
2p3 + 3p2 p 1
4p3 + 3p2 8p 4
f1 +
f2 + 0, 06f v ()h4 ,
3
6
onde agora f2 = f (xi 2h) e, para p = 0, a frmula acima reduz-se derivada de cinco pontos (2.8).
2.5
Nesta seo ser introduzida uma idia til em diversos ramos da anlise numrica, conhecida como
Extrapolao de Richardson. Ser mostrado como se pode obter uma aproximao muito boa do erro
absoluto de qualquer das frmulas apresentadas para derivao numrica e como esta estimativa pode ser
usada para incrementar substancialmente a acurcia do resultado.
Este tratamento depende da possibilidade de variao livre do espaamento de grade h ou de qualquer
outro parmetro de controle no mtodo e, portanto, no til quando a funo for conhecida somente em
uma grade fixa, como no caso de valores experimentais. Para estes casos, o programador est restrito s
frmulas e s estimativas de erro apresentadas na seo 2.4. Contudo, quando a forma funcional de f (x)
for conhecida, o mtodo da extrapolao de Richardson possibilita um resultado extremamente acurado,
juntamente com uma excelente estimativa de erro.
Considera-se, ento, um algoritmo numrico destinado a executar uma determinada operao. Sendo
fexato o valor exato do resultado desta operao e f l(f, h) a aproximao a fexato obtida com o uso do
algoritmo numrico, o qual de ordem n, regulado pelo parmetro de controle h. Pode-se ento escrever
fexato = f l(f, h) + A[f ]hn + B[f ]hn+m + ,
onde A e B so funcionais aplicados a f . Sendo o algoritmo de ordem n, o erro predominante dado
pelo termo A[f ]hn , ao passo que o termo posterior na correo dado pelo termo B[f ]hn+m , para m 1.
Aplicando-se ento o algoritmo para valores do parmetro h1 = h e h2 = h/R, sendo R > 1, resulta
fexato = f l(f, h) + A[f ]hn + B[f ]hn+m + . . .
fexato = f l f,
h
R
+ A[f ]
h
R
(2.12a)
h
R
+ B[f ]
n+m
+ ...
(2.12b)
Os erros absolutos nas aproximaes f l(f, h) e f l(f, h/R) so dados, em mais baixa ordem, respectivamente
por
EA(h) = fexato f l(f, h) A[f ]hn
h
h
EA
= fexato f l f,
A[f ]
R
R
h
R
h
R
+ O hn+m ,
(Rn 1)
A[f ]hn + O hn+m .
Rn
Resolvendo a equao acima para h1 e h2 , obtm-se ento as estimativas de erro, exatas at a ordem n + m:
A[f ]hn = EA(h)
A[f ]
h
R
= EA
h
R
f l f,
h
R
f l f,
Rn
Rn 1
1
f l(f, h)
.
Rn 1
f l(f, h)
h
R
(2.13a)
(2.13b)
Expresso (2.13a) consiste em uma estimativa do valor do erro do algoritmo empregando o parmetro h1 ,
ao passo que (2.13b) a estimativa do erro do mesmo algoritmo usando o parmetro h2 .
Autor: Rudi Gaelzer IFM/UFPel
32
Uma vez obtida a estimativa de erro para a melhor aproximao (usando h2 ), pode-se adicionar esta
estimativa ao valor aproximado f l (f, h2 ) para se realizar um refinamento no resultado; isto , uma vez que
fexato = f l f,
h
R
+ A[f ]
h
R
n+m
h
R
+ B[f ]
n+m+
h
R
+ C [f ]
+ ...,
h
R
h
R
+ f l f,
1
+ B[f ]
n
R 1
f l(f, h)
n+m
h
R
+ C [f ]
h
R
n+m+
+ ...,
ou
fexato =
1
h
Rn f l f,
Rn 1
R
h
R
f l(f, h) + B[f ]
n+m
n+m+
h
R
+ C [f ]
+ ...,
(2.14)
h
R
f l0
f l f,
h
R
h
R
+ f l f,
h
R
f l(f, h)
1
Rn f l (f, h/R) f l(f, h)
=
Rn 1
Rn 1
Rn f l0 (h/R) f l0 (h)
,
Rn 1
n+m
h
R
h
R
+ C [f ]
n+m+
+ ....
h
R
+ B[f ]
h
R2
n+m
+ C [f ]
h
R2
n+m+
+ . . . .,
h
R
B[f ]
h
R
B[f ]
h
R2
n+m
= f l1
n+m
= f l1
h
R
h
R
f l1 (h)
f l1 (h)
Rn+m
Rn+m 1
1
Rn+m
(2.15a)
,
(2.15b)
sendo que EA1 (h) a estimativa de erro para f l1 (h), a qual no havia sido obtida na iterao anterior, e
EA1 (h/R) a estimativa de erro para f l1 (h/R). Agora, o novo valor extrapolado passa a ser f l2 (h), dado
por
h
h
1
Rn+m f l1 (h/R) f l1 (h)
+ f l1
f l1 (h)
=
,
(2.16a)
f l2 (h) f l1
n+m
R
R
R
1
Rn+m 1
Autor: Rudi Gaelzer IFM/UFPel
33
e
fexato = f l2 (h) + C [f ]
h
R2
n+m+
+ .
(2.16b)
(2.17a)
e
fexato = f l3 (h) + D [f ]
h
R3
n+m+ +p
+ ,
(2.17b)
EA3
h
R2
n+m+
C[f ]
h
R3
n+m
C[f ]
h
R
= f l3
= f l3
h
R
f l3 (h)
f l3 (h)
Rn+m+
1
Rn+m+
1
.
Rn+m+ 1
(2.18a)
(2.18b)
E assim sucessivamente para ordens mais altas. Deve-se ressaltar por fim que o algoritmo f l (f, h) somente
foi utilizado no clculo dos termos no extrapolados f l0 (h). Os termos restantes so obtidos apenas com
o uso da regra de extrapolao. Contudo, para obter-se f lk (h) para k > 0, necessrio conhecer-se os
termos extrapolados anteriores, o que implica, ao final das contas, que necessrio aplicar-se o algoritmo
f l0 k vezes, para valores de incrementos consecutivamente menores: f l0 (h), f l0 (h/R), f l0 h/R2 , . . . ,
f l0 h/Rk .
Exemplo 2.1. Como exemplo de uso da extrapolao de Richardson para o clculo de derivao numrica,
emprega-se a expresso para derivao centrada, juntamente com a sua estimativa de erro (2.7),
f (x) =
f (x + h) f (x h) 1
f (x)h2 + O h4 ,
2h
6
a qual mostra que o mtodo de ordem n = 2, enquanto que o prximo termo de ordem n + m = 4.
Tambm identifica-se A[f ] = f (x)/6. Tomando-se o valor R = 2 e empregando-se a frmula acima para
h1 = h e h2 = h/2, obtm-se as seguintes expresses:
f (x + h) f (x h) 1
f
2h
6
f (x + h/2) f (x h/2)
f (x) =
h
f (x) =
(x)h2 + O h4 ,
1
h2
f (x) + O
6
4
h4
16
Chamando ento
f l (f , h1 ) =
f (x + h) f (x h)
f (x + h/2) f (x h/2)
e f l (f , h2 ) =
,
2h
h
1
1
[f l (f , h2 ) f l (f , h1 )] = [f l (f , h2 ) f l (f , h1 )] ,
22 1
3
(2.19a)
ao passo que o valor extrapolado para o clculo da derivada dado por (2.14),
f (x) = f l (f , h2 ) +
1
[f l (f , h2 ) f l (f , h1 )] + O h4 .
3
(2.19b)
34
-2
10
Erro aproximado
Erro exato
Derivada extrapolada
-4
10
Erro Absoluto
-6
10
-8
10
-10
10
-12
10
-14
10
10
10
10
10
-1
h
10
10
10
12
10
Figura 2.1: Grfico log-log da estimativa de erro absoluto no clculo da derivada centrada da funo f (x) = sen x2 ,
em x = 0, 5, juntamente com o valor exato do erro e o valor extrapolado da derivada.
O resultado obtido com o emprego das expresses (2.19a,b) pode ser visto na figura 2.1. Nesta, a exemplo
do que se fez na figura 1.5, calculou-se numericamente a derivada numrica da funo f (x) = sen x2 no ponto
x = 0, 5 a partir da frmula de diferena centrada. Neste caso, porm, pode-se calcular tambm a estimativa
de erro (2.19a) e o valor extrapolado (2.19b). Observa-se que a estimativa de erro to boa que se torna
indistingvel do valor exato do erro durante todo o intervalo de valores de h para os quais o erro de
truncamento mais importante que o erro de arredondamento. Alm disso, observa-se tambm que o valor
extrapolado refina o resultado em mais de 2 ordens de grandeza. O programa em Fortran 95 que gerou os
dados apresentados na figura 2.1 est no Programa 2.1.
Programa 2.1: Programa em Fortran 95 que calculou o erro e o valor extrapolado apresentados na Figura 2.1.
program d e r i v a d a s _ e x t r a p o l a
i m p l i c i t none
integer , parameter : : dp= 8
integer : : i
r e a l ( kind= dp ) : : h= 0 . 1 _dp
! h i n i c i a l i z a d o a 1/50.
r e a l ( kind= dp ) , parameter : : x= 0 . 5 _dp ! Valor de x f i x o .
r e a l ( kind= dp ) : : df1 , df2 , df , e r r o _ e s t , f l
!
f l = 2 . 0 _dpx c o s ( xx ) ! Valor c o r r e t o da d e r i v a d a em x .
open ( unit =10 , f i l e = d e r i v s _ e x t . dat )
do i= 1 , 45
d f 1= f p 3 ( x , h ) ! Derivada d i f e r e n c a c e n t r a d a
d f 2= f p 3 ( x , 0 . 5 _dph )
e r r o _ e s t= ( d f 2 d f 1 ) / 3 . 0 _dp
d f= d f 2 + e r r o _ e s t
write ( 1 0 , ( 4 ( e10 . 4 , 1 x ) ) ) 1 . 0 _dp/h , abs ( e r r o _ e s t ) , &
abs ( d f 2 f l ) , abs ( d f f l )
h= 0 . 5 _dph
! h e d i v i d i d o por 2 .
end do
CONTAINS
function f ( x )
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
f= s i n ( xx )
Autor: Rudi Gaelzer IFM/UFPel
35
return
end function f
function f p 3 ( x , h )
r e a l ( kind= dp ) : : f p 3
r e a l ( kind= dp ) , intent ( in ) : : x , h
f p 3= 0 . 5 _dp ( f ( x+h ) f ( xh ) ) / h
return
end function f p 3
end program d e r i v a d a s _ e x t r a p o l a
Caso se queira empregar este mtodo para uma funo definida somente em pontos de rede, os incrementos h1 e h2 devem necessariamente ser pontos desta rede. Neste caso, colocando h1 = 2h e h2 = h em
(2.1b), resulta
f (x) = f l (f , h) +
1
[f l (f , h) f l (f , 2h)] + O h4
3
f (x 2h) 8f (x h) + 8f (x + h) f (x + 2h)
=
+ O h4 ,
12h
a qual justamente a frmula de 5 pontos (2.8). Portanto, o uso do valor extrapolado no til para pontos
fixos de rede, uma vez que o valor de h no pode ser variado.
A subrotina DFDX_RICH, listada no Programa 2.2 implementa o clculo da derivada numrica usando o
Mtodo de Richardson. A rotina tem como parmetros de entrada o nome da funo f (x) analtica a ser
derivada, a qual deve ser fornecida por meio de uma funo externa, o ponto onde calcular a derivada, o
tamanho inicial do parmetro h e o limite superior solicitado para o erro relativo do resultado. Como sadas,
a rotina fornece o valor numrico de f (x) e uma estimativa do valor do erro relativo. Como o resultado da
Mtodo de Richardson equivalente ao resultado do mtodo de 5 pontos (seo 2.2.4), o menor erro relativo
possvel estimado igual ao fornecido pela frmula (2.9). Portanto, se o valor solicitado para o erro relativo
mximo for menor que este valor, a rotina automaticamente ir interromper o processamento, pois os erros
de arredondamento iro impedir a obteno de um resultado com a preciso solicitada.
36
Programa 2.2: Subrotina que calcula numericamente a derivada pelo Mtodo da Extrapolao de Richardson.
! C a l c u l a a d e r i v a d a numerica de uma f u n c a o a n a l i t i c a p e l o
! Metodo da E x t r a p o l a c a o de Richardson .
! Argumentos :
! f : Funcao e x t e r n a a s e r d e r i v a d a
( entrada ) .
! x : Ponto onde c a l c u l a r a d e r i v a d a
( entrada ) .
! h_ini : Valor i n i c i a l para o i n t e r v a l o de d i f e r e n c a f i n i t a ( e n t r a d a ) .
! e r r e s t : Valor maximo s o l i c i t a d o para o e r r o r e l a t i v o
( entrada ) .
! dfdx :
Valor da d e r i v a d a numerica
( saida ).
! e r r _ s a i : Valor e s t i m a d o do e r r o r e l a t i v o da d e r i v a d a
( saida ).
!
! Obs . : Caso parametro e r r e s t s e j a menor que a e s t i m a t i v a de
!
e r r o r e l a t i v o minimo para o metodo , a r o t i n a i n t e r r o m p e
!
automaticamente o p r o c e s s a m e n t o .
subroutine d f d x _ r i c h ( f , x , h_ini , e r r e s t , dfdx , e r r _ s a i )
i m p l i c i t none
integer , parameter : : dp= s e l e c t e d _ r e a l _ k i n d ( 1 0 , 2 0 0 )
r e a l ( kind= dp ) , intent ( in )
: : x , h_ini , e r r e s t
r e a l ( kind= dp ) , intent ( out ) : : dfdx , e r r _ s a i
interface
function f ( x )
integer , parameter : : dp= s e l e c t e d _ r e a l _ k i n d ( 1 0 , 2 0 0 )
r e a l ( kind= dp ) , intent ( in ) : : x
r e a l ( kind= dp )
:: f
end function f
end i n t e r f a c e
! Variaveis locais .
integer
:: i
r e a l ( kind= dp ) : : h , df1 , df2 , err_abs
r e a l ( kind= dp ) , parameter : : e r r r e l _ m i n= 3 . 0 e 13_dp
!
i f ( e r r e s t <= e r r r e l _ m i n ) then
print ( "O e r r o r e l a t i v o s o l i c i t a d o e muito pequeno . "
,/ , &
" E r r o s de arredondamento i r a o i m p e d i r que a r o t i n a " , / , &
" atinja a precisao solicitada . " )
STOP
end i f
h= h_ini
d f 1= df_cent ( x , h )
do
d f 2= df_cent ( x , 0 . 5 _dph )
err_abs= ( d f 2 d f 1 ) / 3 . 0 _dp
dfdx= d f 2 + err_abs
e r r _ s a i= abs ( err_abs / dfdx )
i f ( e r r _ s a i <= e r r e s t ) e x it
d f 1= d f 2
h= 0 . 5 _dph
end do
return
CONTAINS
function df_cent ( x , h )
r e a l ( kind= dp )
: : df_cent
r e a l ( kind= dp ) , intent ( in ) : : x , h
df_cent= 0 . 5 _dp ( f ( x+h ) f ( xh ) ) / h
return
end function df_cent
end subroutine d f d x _ r i c h
Captulo 3
Integrao Numrica
3.1
Introduo
Integrao numrica, tambm denominada quadratura, possui uma histria que se estende desde antes
da inveno do clculo. O fato de integrais de funes elementares no poderem, em geral, ser calculadas
analiticamente, ao passo que suas derivadas so facilmente obtidas, serviu de razo para enfatizar esta rea
da anlise numrica j nos sculos XVIII e XIX.
Em contraste com a dificuldade de se calcular analiticamente uma integral, o clculo numrico pode
ser realizado de forma relativamente simples, exatamente ao contrrio do que acontece com a derivao. A
definio de uma integral de Riemann consiste no limite da soma da rea delimitada por regies retangulares
medida que a largura h dos retngulos vai a zero e o seu nmero total vai a infinito:
(ba)/h
f (xi ) .
f (x)dx = lim h
h0
i=1
Uma maneira tradicional de medir numericamente a rea sob f (x) consiste em traar o seu grfico sobre
um papel milimetrado e contar o nmero de quadrados sob a curva. Por esta razo a integrao numrica
tambm foi denominada inicialmente de quadratura numrica.
A integral da funo f (x) aproximada numericamente de uma forma equivalente soma dos quadrados
ou retngulos. A maior parte das frmulas abordadas neste captulo podem ser colocadas na forma:
N
f (x)dx =
a
f (xi )wi +
N.
(3.1)
i=1
Aqui, f (x) calculada em N pontos situados no intervalo [a, b] (para frmulas fechadas, isto , que envolvem
os limites) ou no intervalo (a, b) (para frmulas abertas, que no envolvem os limites). Os valores das funes
calculados em cada ponto do intervalo, fi = f (xi ) so ento somados com o intermdio de um peso wi . A
quantidade N consiste na estimativa do erro de truncamento do mtodo empregado. Embora os mtodos,
em geral, somente forneam o resultado exato para N , alguns deles fornecem o resultado exato para
certas classes especiais de funes (como polinmios, por exemplo) para N finito.
Os diferentes algoritmos de integrao utilizam distintos conjuntos de pontos {xi } e de pesos {wi }.
Geralmente, a preciso aumenta com N , mas erros de arredondamento eventualmente acabam por limitar
a preciso final. Uma vez que o melhor mtodo depende do comportamento especfico de f (x), no existe
um mtodo que possa ser universalmente considerado o melhor. De fato, alguns dos esquemas automticos
de integrao numrica, que podem ser encontrados em bibliotecas tais como a IMSL, iro testar diferentes
mtodos at encontrar aquele que fornea o melhor resultado.
Nos esquemas mais simples de integrao, o integrando aproximado por uns poucos termos no desenvolvimento em srie de McLaurin de f (x), sendo estes os termos a ser integrados. Exceto no caso do
integrando apresentar um comportamento no usual em algum intervalo de valores de x, termos sucessivos,
obtidos com o aumento de N , iro fornecer preciso cada vez maior, at que os erros de arredondamento
se tornem suficientemente importantes. Nestes esquemas, denominados de Newton-Cotes, o intervalo total
dividido em subintervalos iguais, conforme ilustrado na figura 3.1, com o integrando calculado em pontos igualmente espaados xi . Estes algoritmos incluem a regra trapezoidal (primeira ordem) e a regra de
Simpson (segunda ordem).
37
38
Figura 3.1: Frmulas de quadratura com abcissas igualmente espaadas calculam a integral de uma funo entre
x0 e xN +1 . Frmulas fechadas calculam o valor da funo nos pontos extremos do intervalo, enquanto que frmulas
abertas no usam estes pontos.
3.2
Frmulas de Newton-Cotes
As frmulas de Newton-Cotes (1711) para a integrao numrica so caracterizadas por pontos de integrao igualmente espaados no intervalo de integrao (a, b). Seja N um nmero inteiro que determina o
nmero total de pontos onde a funo f (x) deve ser calculada e a quantidade h o espaamento dos pontos,
conforme pode ser observado na figura 3.1. Os pontos do conjunto {xi } que sero realmente empregados no
clculo da integrao numrica dependem se a quadratura ser aberta ou fechada, conforme tambm est
representado na figura 3.1.
3.2.1
As frmulas fechadas de Newton-Cotes que sero aqui introduzidas so ilustradas pela figura 3.2. Sero
utilizados N +1 pontos igualmente espaados, identificados pelo ndice i (i = 0, 1, . . . , N ), com o espaamento
entre os pontos dado por
xN x0
ba
h=
=
.
N
N
39
(i = 0, . . . , N ),
(i = 0, . . . , N ).
fn lnN (x),
(3.2a)
n=0
(x x0 ) (x x1 ) . . . (x xn1 ) (x xn+1 ) . . . (x xN )
=
(xn x0 ) (xn x1 ) . . . (xn xn1 ) (xn xn+1 ) . . . (xn xN )
i=0
(i=n)
(x xi )
.
(xn xi )
(3.2b)
A verificao de que pN (x) o polinmio interpolador segue diretamente da substituio dos pontos xi :
n {0, 1, . . . , N } , lnN (xn ) = 1 e lnN (xk ) = 0, para k = n = pN (xn ) = fn .
O erro associado aproximao fornecida pelos polinmios de Lagrange, N (x) f (x) pN (x), dado
por:
f (N +1) ()
[(x x0 ) (x x1 ) . . . (x xN )] ,
(3.2c)
N (x) =
(N + 1)!
onde
[a, b] .
f (x) = pN (x) +
N (x),
(3.2d)
f (x)dx =
a
[pN (x) +
a
N
N (x)] dx
liN (x)dx +
fi
a
i=0
f (N +1) ()
(N + 1)!
[(x x0 ) (x x1 ) . . . (x xN )] dx.
(3.3a)
Pode-se ento escrever a integral na forma (3.1), onde os pesos da frmula de integrao so obtidos por:
b
wi =
liN (x)dx =
a
(x x0 ) (x x1 ) . . . (x xi1 ) (x xi+1 ) . . . (x xN )
dx,
(xi x0 ) (xi x1 ) . . . (xi xi1 ) (xi xi+1 ) . . . (xi xN )
(3.3b)
f (N +1) ()
(N + 1)!
[(x x0 ) (x x1 ) . . . (x xN )] dx.
(3.3c)
40
Figura 3.3: Integrao numrica pela regra trapezoidal. A rea sob a curva f (x) entre x0 e x1 aproximada pela
rea do trapzio amarelo.
Deve-se enfatizar aqui que a frmula (3.3a) exata para um polinmio de grau N .
Desta forma, pode-se obter frmulas do tipo Newton-Cotes para polinmios de qualquer grau. Historicamente, as primeiras frmulas foram estabelecidas para polinmios de graus baixos. Algumas destas frmulas
sero apresentadas a seguir.
Frmulas fechadas so aquelas que utilizam os pontos extremos do intervalo [a, b], isto ,
x0 = a e xN = b.
Estas frmulas so adequadas quando o integrando for bem comportado nos limites de integrao; no
apresentando singularidades, por exemplo.
3.2.1.1
Regra trapezoidal (N = 1)
A regra trapezoidal, ou frmula do trapzios, corresponde interpolao de f (x) a ser integrada por um
polinmio de grau 1. Como a interpolao linear necessita de somente 2 pontos, estes sero os extremos do
intervalo de integrao, isto , x0 = a e x1 = b, com N = 1 e h = b a.
As frmulas (3.3a-c) nos permitem encontrar os pesos:
x1
wo =
x0
x1
w1 =
x0
e o erro
1
2 b
(x x1 )
1 (x b)
dx =
(xo x1 )
2 (b a)
2 b
(x x0 )
1 (x a)
dx =
(x1 x0 )
2 (b a)
f ()
2
x1
x0
=
a
(x x0 ) (x x1 ) dx =
1
h,
2
1
h
2
1
f ()h3 .
12
f (x) =
a
h
1
(f0 + f1 ) f ()h3 .
2
12
(3.4)
O nome frmula dos trapzios vem do fato de se aproximar a funo f (x) por um trapzio de lados f0 e f1
e de base h = b a, conforme est representado na figura 3.3. Pode-se observar que este mtodo, bastante
simples, j fornece um erro de ordem T h3 .
3.2.1.2
Regra de Simpson (N = 2)
Esta uma das regras de integrao mais conhecidas e utilizadas. A funo f (x) aproximada por um
polinmio de grau 2 que coincide com esta em trs pontos: x0 , x1 e x2 . Portanto, necessrio conhecer 3
valores de f (x), igualmente espaados, para aplicar esta regra.
Autor: Rudi Gaelzer IFM/UFPel
41
Figura 3.4: Integrao numrica pela regra de Simpson. A rea sob a curva f (x) entre x0 e x2 aproximada pela
rea sob a parbola P (x).
w0 =
w1 =
w2 =
x0
x2
x0
x2
x0
(x x1 ) (x x2 )
dx =
(x0 x1 ) (x0 x2 )
(x x0 ) (x x2 )
dx =
(x1 x0 ) (x1 x2 )
(x x0 ) (x x1 )
dx =
(x2 x0 ) (x2 x1 )
1
h
3
4
h
3
1
h,
3
f ()
3!
x2
(x x0 ) (x x1 ) (x x2 ) dx.
x0
Contudo, surpreendentemente obtm-se que 2 = 0! Isto pode ser facilmente visto realizando-se a mudana
de variveis t = x x1 na integrao acima, resultando
x2
(x x0 ) (x x1 ) (x x2 ) dx =
(t + h) t (t h) dt =
h
x0
t2 h2 tdt = 0.
h
Isto no significa que o erro na regra de Simpson sempre nulo. Neste caso necessrio tomar o prximo
termo no clculo do erro N de um polinmio interpolador de grau N , dado inicialmente por (3.2c), porm
agora acrescentando o prximo termo no desenvolvimento em srie de McLaurin de f (x) em torno de x = x1 :
f (iv) ()
(x x1 ) .
4!
Desta forma, o erro fica:
S
f (iv) ()
4!
x2
(x x0 ) (x x1 ) (x x2 ) dx =
x0
1 (iv)
f ()
4!
(t + h) t2 (t h) dt =
h
1 (iv)
f ()h5 .
90
f (x) =
a
h
1
(f0 + 4f1 + f2 ) f (iv) ()h5 .
3
90
(3.5)
A figura 3.4 ilustra a aplicao da regra de Simpson para o clculo da quadratura. Das expresses obtidas
para os erros das duas frmulas polinomiais, (3.4) e (3.5), pode-se observar que a formula dos trapzios
exata se f (x) for um polinmio de grau 1 (pois f (x) = 0, x), ao passo que a frmula de Simpson exata
se f (x) for um polinmio de grau igual ou menor que 3 (pois f (iv) (x) = 0, x).
3.2.1.3
Existe uma regra de quatro pontos cujo erro da mesma ordem de grandeza da regra de Simpson (3.5).
Tomando N = 3, x0 = a, x3 = b e h = (b a)/3, pode-se mostrar:
b
f (x)dx =
a
3
3
h (f0 + 3f1 + 3f2 + fx ) f (iv) ()h5 .
8
80
(3.6)
42
Regra de Bode (N = 4)
5)
Outras expresses, com erros de truncamento sucessivamente menores, podem ser obtidas aumentandose o grau dos polinmios interpoladores. Em contrapartida, necessrio calcular f (x) em um nmero cada
vez maior de pontos e a quantidade total de operaes de ponto flutuante tambm aumenta. A relao
de compromisso entre a preciso obtida, o esforo computacional necessrio e o erro de arredondamento
resultante vai depender ento da aplicao em estudo. Essas outras frmulas fechadas de quadratura podem
ser obtidas, por exemplo, em Abramowitz & Stegun [2, seo 25.4].
Escrevendo-se uma forma geral para as frmulas fechadas de Newton-Cotes:
N
fi wi +
f (x)dx = dh
a
(3.8)
N,
i=0
a tabela 3.1 apresenta os valores dos parmetros d e h, dos pesos wi e dos erros de truncamento
N.
Sabe-se que
Exemplo 3.1.
ln 2 =
1
dx
= 0, 6931471805599453094172322145818 . . .
x
1
dx
x
2
1+
1
2
dx
1
x
6
1+
8 1
+
3 2
dx
3
x
24
1+
9 9 1
+ +
4 5 2
dx
1
x
90
4
2
4 7
7 + 32 + 12 + 32 +
5
3
7 2
N
1
2
3
4
5
6
7
d
1/2
1/3
3/8
2/45
5/288
1/140
7/17280
w0
1
1
1
7
19
41
751
w1
1
4
3
32
75
216
3577
w2
1
3
12
50
27
1323
w3
1
32
50
272
2989
w4
7
75
27
2989
w5
19
216
1323
w6
41
3577
w7
751
1
12
f ()h3
1 (iv)
90 f ()h5
3 (iv)
80
f ()h5
8
945 f (vi) ()h7
275
12096
f (vi) ()h7
9
1400 f (viii) ()h9
8183
f (viii) ()h9
518400
3.2.2
43
Uma frmula aberta no utiliza os pontos extremos no intervalo de integrao. Na figura 3.2 estes
mtodos utilizariam os pontos x1 , x2 , . . . , xN 1 , ou seja, fariam uso de N 1 pontos. A principal motivao
para o emprego de uma frmula aberta ocorre quando o integrando apresenta um comportamento no usual
prximo ao(s) limite(s) de integrao, como uma singularidade, por exemplo.
Contudo, as frmulas abertas raramente so empregadas, pelas seguintes razes:
1. Frmulas abertas no podem ser facilmente compostas juntas para formar uma regra estendida, como
as frmulas fechadas, que sero discutidas na seo 3.2.3.
2. H outras classes de frmulas de quadratura abertas largamente superiores s frmulas de NewtonCotes. Um exemplo consiste nas frmulas de quadratura gaussianas.
3. O polinmio interpolador raramente reproduz fidedignamente a forma de f (x) prxima aos pontos
singulares, o que reduz significativamente a utilidade de uma frmula aberta.
Devido a estas razes, as frmulas abertas no sero detalhadamente discutidas aqui. Somente ser apresentada a frmula geral para uma quadratura aberta,
N 1
f (x)dx = dh
a
fi w i +
(3.9)
N,
i=1
sendo que os parmetros d e h e os pesos wi podem ser obtidos em [2, seo 25.4] e so dados na tabela 3.2.
Tabela 3.2: Frmulas abertas de Newton-Cotes, dadas por (3.9). Na tabela, h = (b a)/N e N = M + 2.
M
1
2
3
4
5
6
3.2.3
d
3/2
4/3
5/24
6/20
7/1440
8/945
w1
1
2
11
11
611
460
w2
1
-1
1
-14
-453
-954
w3
w4
w5
w6
w7
2
1
26
562
2196
11
-14
562
-2459
11
-453
2196
611
-954
460
Quando o intervalo de integrao grande, pode no ser conveniente aumentar o grau do polinmio
interpolador para estabelecer frmulas de integrao mais precisas, uma vez que estas frmulas tornam-se
gradativamente mais complicadas com o aumento do grau do polinmio.
A alternativa mais empregada neste caso subdividir o intervalo de integrao e aplicar as frmulas
introduzidas na seo 3.2.1 repetidas vezes. Assim, so obtidas as frmulas estendidas ou compostas.
3.2.3.1
x1
f (x)dx =
a
x0
f (x)dx +
x2
x1
f (x)dx + +
xN
f (x)dx
xN 1
h
h
h
(f0 + f1 ) + (f1 + f2 ) + + (fN 1 + fN )
2
2
2
1
[f (1 ) + f (2 ) + + f (N )] h3
12
h
1
(f0 + 2f1 + 2f2 + + 2fN 1 + fN )
2
12
f (i ) h3 .
i=1
44
soma= soma + fi
4. IT E =
h
2
[2 soma + f0 + fN ]
f (x)dx =
a
1
1
h (f0 + 2f1 + 2f2 + + 2fN 1 + fN ) (b a)f ()h2 .
2
12
(3.10)
Pode-se notar que agora o erro de truncamento proporcional a T h2 ao passo que o erro para a frmula
(3.4) proporcional a h3 . Portanto, em princpio o erro aumentou na frmula estendida. Contudo, deve-se
salientar que os espaamentos nas frmulas (3.4) e (3.10) tm valores distintos, o que no possibilita uma
comparao direta entre ambos.
A regra trapezoidal estendida pode ser implementada por um programa de computador com base no
algoritmo 3.1.
3.2.3.2
Para implementar a regra de Simpson estendida, necessrio dividir o intervalo [a, b] em um nmero par
de subintervalos, o que corresponde a um nmero total mpar de pontos no conjunto {xi }, isto , a N par,
uma vez que cada integrao parcial ser realizada com o uso de 3 pontos para a interpolao parablica.
Assim, se N um nmero par,
b
f (x)dx =
a
f (x)dx +
x0
f (x)dx =
a
x2
x4
f (x)dx + +
x2
xN
f (x)dx
xN 2
h
h
h
(f0 + 4f1 + f2 ) + (f2 + 4f3 + f4 ) + + (fN 2 + 4fN 1 + fN )
3
3
3
1 (iv)
1
1
f
(1 ) h5 f (iv) (2 ) h5 f (iv) N/2 h5 ,
90
90
90
h
h5
(f0 + 4f1 + 2f2 + 4f3 + 2f4 + + 2fN 2 + 4fN 1 + fN )
3
90
N/2
f (iv) (i ) .
i=1
f (iv) (i ) =
i=1
N (iv)
f (),
2
b.
Assim,
b
f (x)dx =
a
h
b a (iv)
(f0 + 4f1 + 2f2 + 4f3 + 2f4 + + 2fN 2 + 4fN 1 + fN )
f ()h4 .
3
180
(3.11)
Aqui tambm, embora o erro da regra de Simpson estendida seja aparentemente maior que na regra (3.5), os
valores de h em ambos os casos em geral so bastante diferentes. O algoritmo 3.2 mostra a implementao
da regra de Simpson estendida por um programa de computador.
Autor: Rudi Gaelzer IFM/UFPel
45
4. ISE =
h
3
(2 soma + f0 fN ).
Exemplo 3.2.
Regra trapezoidal estendida. Tomando quatro trapzios no intervalo [1, 2], resulta N = 4, h = 0, 25 e
2
1
dx
0, 25
x
2
1+
8 4 8 1
+ + +
5 3 7 2
Regra de Simpson estendida. Tomando duas parbolas na frmula estendida de de Simpson, resulta
N = 4, h = 0, 25 e
2
1
dx
0, 25
x
3
1+
16 4 16 1
+ +
+
5
3
7
2
Comparando os resultados deste exemplo com o anterior, percebe-se que para cada regra individual, o erro
obtido foi menor, contudo, o erro maior quando se comparam mtodos que utilizam o mesmo nmero de
pontos. Por exemplo, o mtodo trapezoidal estendido obteve um erro maior que a regra de Simpson dos
3/8, a qual tambm utiliza 4 pontos para calcular a quadratura.
3.2.4
Embora as frmulas de Newton-Cotes estudadas nas sees anteriores apresentem todas uma expresso
para o erro de truncamento, na prtica, a aplicao das expresses no factvel. Isto porque expresses
como as obtidas nas frmulas (3.10) e (3.11),
TE
1
(b a)f ()h2 , (a
12
b) e
SE
b a (iv)
f ()h4 , (a
180
b)
TE| =
(3.12a)
(3.12b)
sendo que agora necessrio realizar estimativas para os valores mximos das derivadas de f (x) dentro do
intervalo considerado. Estas estimativas podem ser realizadas de diversas maneiras, tanto numericamente
quanto analiticamente. O exemplo abaixo ilustra a aplicao destas estimativas.
Exemplo 3.3.
ex dx
0
para que a aproximao tenha erro menor que 104 nos casos (a) Regra dos Trapzios Estendida e (b) Regra
de Simpson Estendida?
Autor: Rudi Gaelzer IFM/UFPel
46
Respostas: o integrando no possui primitiva, mas as suas derivadas podem ser calculadas em qualquer
ordem. Assim,
f (x) = 2xex
f (x) = 2 2x2 1 ex
2
f (x) = 4x 3 2x2 ex
e assim,
1 2
h
104 = hT E
6 TE
o que corresponde a um nmero de subintervalos
|
6 104
TE|
NT E
1
hT E
Int
0, 0245,
= 41.
(b) Para a frmula de Simpson, de acordo com (3.12b) necessrio encontrar o mximo de f (iv) (x) no
intervalo [0, 1]. Isto possvel uma vez que se conhecem as razes de f (v) (x) neste intervalo:
r1 = 0, r2 =
1
5 10
2
Como
f (iv) (r1 ) = 12 e f (iv) (r2 ) = 16
obtm-se
0, 9586.
5
10 2 exp +
2
5
2
7, 4195,
0 x 1
e, portanto,
h4SE
104 = hSE
15
o que corresponde a um nmero de subintervalos
|
SE |
NSE
Int
1
hSe
15 104
0, 197,
= 6.
Pode-se ver, portanto, que o nmero de subintervalos necessrios para a regra de Simpson atingir um
determinado limiar de erro substancialmente menor que o nmero requerido pela regra trapezoidal.
3.3
Quadratura gaussiana
Nas frmulas da seo 3.2, a quadratura de uma funo foi aproximada pela soma de seus valores
funcionais em um conjunto de pontos regularmente espaados {f (xi )}, multiplicados pelos pesos {wi }.
Observou-se que escolhas adequadas nos pesos wi permitem a obteno de frmulas de quadratura de
ordens cada vez mais altas.
Nesta seo, sero introduzidas frmulas de quadratura nas quais no somente os pesos {wi } na frmula
genrica (3.1) podero ser escolhidos, mas tambm as abcissas {xi } sero determinadas de tal forma que a
quadratura resultante ser superacurada. Uma vez que as abcissas no sero mais regularmente espaadas, as
frmulas obtidas tero o dobro de graus de liberdade que as frmulas de Newton-Cotes possuem, resultando
em frmulas de quadratura de ordem essencialmente duas vezes maior que as frmulas de Newton-Cotes,
com o mesmo nmero de clculos do integrando.
Esta idia foi inicialmente introduzida por Wilhelm Gauss (1814), portanto cerca de um sculo aps a
introduo das frmulas de Newton-Cotes. Por esta razo, estas frmulas so conhecidas como Frmulas
gaussianas ou Quadratura gaussiana. Na sua formulao original, Gauss utilizou fraes continuadas
na obteno de suas frmulas. Em 1826, Jacobi derivou novamente as frmulas gaussianas, agora utilizando
Autor: Rudi Gaelzer IFM/UFPel
47
W (x)f (x)g(x)dx = 0.
f |g
a
3.3.1
A idia bsica consiste em escrever a frmula geral de quadratura (3.1) da seguinte maneira:
b
F (x)dx
W (x)f (x)dx
wi f (xi ) ,
i=1
onde o integrando escrito F (x) W (x)f (x), sendo que W (x) passa a desempenhar o papel de funo-peso
na frmula gaussiana. A escolha da forma de W (x) pode ser feita de tal modo que o integrando restante,
f (x), resulte ser o mais suave possvel, ou de forma a salientar possveis singularidades em F (x). Isto
necessrio para que f (x) possa ser satisfatoriamente aproximada por um polinmio. Um exemplo seria a
quadratura adequada para aproximar a integral
1
1
exp cos2 x
dx.
1 x2
1
.
1 x2
Esta escolha em particular define o uso da frmula de Gauss-Chebyshev, conforme visto na seo 3.3.2.
H um conjunto particular de formas para W (x) que constitui as frmulas gaussianas tradicionais e que
possuem valores tabelados para os pesos {wi } e as abcissas {xi }. Algumas destas formas tradicionais sero
estudadas na seo 3.3.2.
Ento, se para um polinmio de grau k qualquer, pk (x), vale a igualdade
N
pk (x)dx =
a
wi pk (xi ) ,
(3.13)
i=1
determina-se o conjunto {xi , wi } de tal forma que a igualdade acima vale para qualquer polinmio de grau
k. Em princpio, esta escolha no introduz vantagem nenhuma em relao ao uso dos polinmios de
Legendre, usados nas frmulas de Newton-Cotes, pois estes tambm so exatamente representados por esta
frmula de quadratura, como se pode notar nas equaes (3.3a-c). A vantagem consiste na escolha de um
conjunto de polinmios ortogonais e nas suas razes para as abcissas. Neste caso, conforme se demonstra no
teorema abaixo, a frmula (3.13) ser exata para polinmios de grau 2k + 1! Neste sentido que se referiu
s frmulas gaussianas como superacuradas.
Teorema 3.1
Sejam
1. k (x), k = 0, 1, . . . , N , polinmios de grau k, ortogonais relativamente ao produto interno
b
i |j =
48
f (x)dx
a
wi pk (xi )
i=1
p2N +1 (x)dx =
N +1 (x)qN (x)dx +
N + 1 da famlia
rN (x)dx,
a
observa-se que qN (x) sempre pode ser escrito na forma de uma combinao linear dos polinmios 1 (x), . . . , N (x),
pois estes so ortogonais. Portanto,
b
N +1 (x)qN (x)dx = 0.
a
Assim, se for usada a quadratura exata para rN (x), dada por (3.13), resulta
b
p2N +1 (x)dx =
a
wi rN (xi ) .
rN (x)dx =
a
i=1
p2N +1 (x)dx =
a
Agora, se as abcissas {xi }, i = 0, 1, . . . , N , forem escolhidas como as razes do polinmio N +1 (x), isto ,
N +1 (xi ) = 0, i = 0, 1, . . . , N , resulta finalmente
N
p2N +1 (x)dx =
a
wi p2N +1 (xi ) .
i=1
3.3.2
2N + 1.
pi |pj =
Um procedimento garantido para gerar este conjunto fornecido pela relao de recorrncia
p1 (x) 0
(3.14a)
p0 (x) 1
(3.14b)
(3.14c)
xpj |pj
pj |pj
pj |pj
bj =
.
pj1 |pj1
(3.15a)
onde
aj =
(3.15b)
Verso: 22 de julho de 2009
49
W (x)f (x)dx =
a
wj f (xj ) + RN ,
(3.16)
j=1
(3.17)
wj =
(3.18)
W (y)f (y)dy =
x1
x2 x1
ba
onde
yj =
W (x)f (x)dx =
a
x2 x1
ba
wj f (yj ) + RN ,
(3.19)
j=1
bx1 ax2
x2 x1
xj +
, j = 1, . . . , N,
ba
ba
Frmula de Gauss-Legendre
Esta frmula pode ser utilizada quando W (x) = 1, juntamente com os polinmios de Legendre Pn (x):
1
1
3x2 1
P3 (x) =
5x3 3x ,
2
2
(j + 1)Pj+1 (x) = (2j + 1)xPj (x) jPj1 (x),
P0 (x) = 1 P1 (x) = x
P2 (x) =
os quais so ortogonais no intervalo (1, 1). Neste caso, a frmula de Gauss-Legendre fica, a partir de (3.16),
N
f (x)dx =
1
wj f (xj ) + RN ,
(3.20)
j=1
e os pesos so
wj =
Autor: Rudi Gaelzer IFM/UFPel
2
1
x2j
2,
[PN (xj )]
(3.21)
j = 1, . . . , N
Verso: 22 de julho de 2009
50
Tabela 3.3: Abcissas {xj } (razes dos polinmios de Legendre) e pesos {wj } para integrao de Gauss-Legendre.
xj
wj
N =2
1/ 3
N =3
0
3/5
N =4
0.3399810435848562648
0.8611363115940525752
N =5
0.00000000000000000000
0.53846931010568309104
0.90617984593866399280
N =6
0.23861918608319690863
0.66120938646626451366
0.93246951420315202781
N =7
0.00000000000000000000
0.40584515137739716691
0.74153118559939443986
0.94910791234275852453
8/9
5/9
0.65214515486254614263
0.34785484513745385737
128/225
0.47862867049936646804
0.23692688505618908751
0.46791393457269104739
0.36076157304813860757
0.17132449237917034504
512/1225
0.38183005050511894495
0.27970539148927666790
0.129484966168869693271
e o erro de truncamento
4
RN =
22N +1 (N !)
3f
(2N )
(),
(1 < < 1) .
f (y)dy =
x1
x2 x1
2
sendo
yj =
f (x)dx =
1
x2 x1
2
wj f (yj ) + RN ,
(3.22)
j=1
x2 x1
x1 + x2
xj +
, j = 1, . . . , N.
2
2
2
2
1
onde
y1 =
dy
1
y
2
w1
1
3
x1 + ,
2
2
1
1
+ w2
y1
y2
y2 =
1
3
x2 + ,
2
2
x1 e x2 so as razes de
P2 (xj ) =
Autor: Rudi Gaelzer IFM/UFPel
1
3x2j 1 = 0 =
2
x1
= 13
x2
1
3
wj =
x2j
3
1
,
2 2 3
y1 =
2
1
j = 1, 2 = w1 = w2 = 1.
2,
[P2 (xj )]
Portanto,
dy
1
y
2
51
3
1
+
2 2 3
y2 =
1
1
+
y1
y2
= 0, 692307692,
cujo erro relativo de apenas 0,12%, o qual um pouco melhor que o resultado obtido com a regra de
Simpson (seo 3.2.1.2), para a qual foram necessrios 3 pontos.
Frmula de 3 pontos.
Usando-se 3 pontos, N = 3 e
2
1
dy
1
y
2
w1
onde
3
1
x1 + ,
2
2
sendo x1 , x2 e x3 as razes de P3 (x):
y2 =
y1 =
1
1
1
+ w2 + w3
y1
y2
y3
1
3
x2 + ,
2
2
1
P3 (xj ) =
5x3j 3xj
2
y3 =
x 1
= 0 = x2
wj =
2
1
x2j
[P3 (xj )]
Portanto,
y1 =
e
2
1
2,
3 1
2 2
dy
1
y
2
3
,
5
1
3
x3 + ,
2
2
=
=
j = 1, 2, 3 = w1 = w3 =
3
,
2
y2 =
y3 =
5 1
8 1
5 1
+
+
9 y1
9 y2
9 y3
3
5
=0
3 1
+
2 2
3
5
5
8
, w2 = .
9
9
3
5
= 0, 693121693,
o qual tem um erro relativo de 0,0037%, um pouco melhor que o resultado obtido com a regra de Bode
(seo 3.2.1.4), a qual necessitou de 5 pontos.
3.3.2.2
Frmula da Gauss-Chebyshev
T1 (x) = x,
T2 (x) = 2x2 1,
1
.
1 x2
f (x)
dx =
1 x2
wj f (xj ) + RN ,
(3.23)
j=1
j 21
N
Verso: 22 de julho de 2009
52
.
N
RN =
f (2n) (),
(2n)!22n1
Caso seja necessrio calcular a quadratura no intervalo (x1 , x2 ) qualquer, a frmula de Gauss-Chebyshev
fica, a partir de (3.19),
x2
x1
f (y) dy
(y x1 ) (x2 y)
=
1
f (x)
dx =
1 x2
wj f (yj ) + RN ,
(3.24)
j=1
sendo
x2 x1
x1 + x2
xj +
, j = 1, . . . , N.
2
2
A regra de Gauss-Chebyshev possui uma implementao numrica bastante simples. A rotina apresentada abaixo, funo gauss_chebyshev (programa 3.1), ilustra como esta implementao pode ser realizada
com o Fortran 95.
yj =
! FUNCAO Gauss_Chebyshev
! Implementa a f o r m u l a de GaussChebyshev para uma i n t e g r a l d e f i n i d a de
!
limites arbitrarios .
!
! Argumentos :
!
f : Funcao a s e r i n t e g r a d a ( i n t e g r a n d o menos f u n c a o p e s o ) .
!
x1 : L i m i t e i n f e r i o r de i n t e g r a c a o .
!
x2 : L i m i t e s u p e r i o r de i n t e g r a c a o .
!
n : Numero de p o n t o s u s a d o s na q u a d r a t u r a g a u s s i a n a ( n > 1 ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Maio / 2 0 0 8 .
!
function gauss_chebyshev ( f , x1 , x2 , n )
r e a l ( kind= dp )
: : gauss_chebyshev
r e a l ( kind= dp ) , intent ( in )
: : x1 , x2
integer , intent ( in )
:: n
r e a l ( kind= dp ) : : x_menos , x_mais , y , xj , wj
integer : : j
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp )
:: f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
!
x_menos= 0 . 5 ( x2 x1 )
x_mais= 0 . 5 ( x1 + x2 )
wj= p i / r e a l ( n , dp )
gauss_chebyshev= 0 . 0 _dp
do j= 1 , n
x j= c o s ( ( j 0.5) p i / r e a l ( n , dp ) )
y= x_menos x j + x_mais
gauss_chebyshev= gauss_chebyshev + wj f ( y )
end do
return
end function gauss_chebyshev
Autor: Rudi Gaelzer IFM/UFPel
53
Tabela 3.4: Abcissas {xj } (razes dos polinmios de Laguerre) e pesos {wj } para integrao de Gauss-Laguerre.
xj
2
2+
2 2
2
4(1+ 2)
2+ 2
2
4(1+ 2)
2
2
N =3
0.41577455678347908331
2.29428036027904171982
6.28994508293747919866
0.71109300992917301545
0.27851773356924084880
0.01038925650158613575
N =4
0.32254768961939231180
1.74576110115834657569
4.53662029692112798328
9.39507091230113312923
0.60315410434163360164
0.35741869243779968664
0.03888790851500538427
0.00053929470556132745
N =5
0.26356031971814091020
1.41340305910651679222
3.59642577104072208122
7.08581000585883755692
12.6408008442757826594
3.3.2.3
wj
N =2
0.52175561058280865281
0.39866681108317592745
0.07594244968170759539
0.00361175867992204845
0.00002336997238577623
Frmula de Gauss-Laguerre
1
1
2 4x + x2 , L3 (x) =
6 18x + 9x2 x3 ,
2
6
(j + 1) Lj+1 (x) = (2j + 1 x) Lj (x) jLj1 (x),
L1 (x) = 1 x,
L2 (x) =
f (x)dx =
wj f (xj ) + RN ,
(3.25)
j=1
xj
N2
2.
[LN 1 (xj )]
RN =
(N !) (2n)
f
(),
(2N )!
(0 < < ) .
A tabela 3.4 mostra as abcissas e os pesos para as frmulas de Gauss-Laguerre at N = 5. Uma listagem
mais completa pode ser encontrada em [2, captulo 25].
3.3.2.4
Frmula de Gauss-Hermite
H1 (x) = 2x,
H2 (x) = 4x2 2,
54
Tabela 3.5: Abcissas {xj } (razes dos polinmios de Hermite) e pesos {wj } para integrao de Gauss-Hermite.
xj
wj
N =2
1/ 2
N =3
0.0
3/2
2 /3
/6
N =4
0.52464762327529031788
1.65068012388578455588
0.80491409000551283651
0.08131283544724517714
N =5
0, 00000000000000000000
0.95857246461381850711
2.02018287045608563293
8 /15
0.39361932315224115983
0.01995324205904591321
N =6
0.43607741192761650868
1.33584907401369694971
2.35060497367449222283
/2
0.72462959522439252409
0.15706732032285664392
0.00453000990550884564
W (x) = ex .
Neste caso, a frmula de Gauss-Hermite fica, a partir de (3.16),
N
ex f (x)dx =
(3.26)
wj f (xj ) + RN ,
j=1
2N 1 N !
2.
N 2 [HN 1 (xj )]
N ! (2n)
f
(),
2N (2N )!
( < < ) .
A tabela 3.5 mostra as abcissas e os pesos para as frmulas de Gauss-Hermite at N = 6. Uma listagem
mais completa pode ser encontrada em [2, captulo 25].
3.4
Nesta seo sero abordadas, em menor grau de detalhe, tcnicas mais avanadas para a quadratura numrica, tanto via frmulas de Newton-Cotes quanto via frmulas gaussianas. As tcnicas aqui mencionadas
fornecem, alm do clculo da quadratura, tambm a obteno de uma estimativa de erro, o que possibilita
o desenvolvimento de algoritmos que implementam o clculo de uma quadratura com a imposio de um
valor superior no seu erro, para qualquer integrando, de uma forma automtica ou adaptativa.
As tcnicas aqui mencionadas formam as bases tericas de rotinas modernas para o clculo de quadraturas, oferecidas por diversos pacotes comerciais de computao numrica.
Autor: Rudi Gaelzer IFM/UFPel
3.4.1
55
Integrao de Romberg
Uma rotina de integrao automtica aquela que, aplicando uma determinada regra de quadratura
para valores consecutivamente menores de espaamento entre os pontos da abcissa, calcula tambm uma
estimativa de erro independente da forma especfica de f (x), interrompendo a sua execuo quando o
resultado estiver dentro de uma tolerncia exigida pelo programador, a qual pode ser as estimativas de erro
absoluto ou relativo.
Este tipo de algoritmo relativamente simples de ser implementado usando as regras de Newton-Cotes;
quando se utiliza a regra trapezoidal estendida (seo 3.2.3.1) para implementar uma rotina integradora automtica baseada no mtodo de extrapolao de Richardson (seo 2.5), esta rotina denomina-se Integrao
de Romberg.
De acordo com o mtodo de extrapolao de Richardson, deve-se aplicar o algoritmo de integrao para
dois valores distintos do parmetro h. A estimativa de erro ento obtida pode ser utilizada tanto para
realizar controle de erro quanto para a extrapolao. Relembrando os principais resultados desta regra, se
a frmula de quadratura aplicada com o parmetro h, obtendo o resultado I (h) e posteriormente para o
espaamento h/R, resultando I (h/R), as frmulas (2.13a, b) fornecem como estimativas de erro absoluto:
EA(h)
h
R
Rn
e EA
Rn 1
I (h)
h
R
h
R
= I
I (h)
Rn
1
,
1
onde n a ordem do erro da frmula de quadratura. A frmula de extrapolao ento dada por (2.14):
1
[Rn I (h/R) I (h)] .
1
(3.27)
1
h (f0 + 2f1 + 2f2 + + 2fN 1 + fN ) IT E (h) ,
2
(3.28)
h
R
Iextrapolado = I
+ EA
h
R
Rn
f (x)dx
a
pode-se mostrar [12, Eq. 4.2.1] que o erro total dado por uma srie de potncias pares de h:
EAT E = C1 h2 + C2 h4 + C3 h6 + .
Portanto, n = m = = = 2 nas frmulas extrapoladas (2.14 2.17) e nas estimativas de erros (2.13,
2.15, 2.18). Desta forma, o resultado Iextrapolado possui um erro agora da ordem O h4 .
Inicia-se o procedimento escolhendo um valor inicial para o parmetro h, calculam-se as quadraturas
(0)
numricas IT E (h) e IT E (h/2) a partir de (3.28). Estes valores iniciais so identificados por IR (h) e
(0)
IR (h/2), respectivamente, com suas respectivas estimativas de erro obtidas para R = 2:
(0)
(0)
IR (h) IT E (h)
EA0 (h) =
IR
22
(0)
I
22 1 R
h
2
(0)
IR (h)
EA0
h
2
h
2
IT E
=
22
h
2
1
(0)
I
1 R
h
2
(0)
IR (h) .
(0)
De acordo com (3.27), o valor extrapolado da quadratura passa a ser IR (h/2)+EA0 (h/2). Esta quantidade
(1)
passa a ser identificada por IR (h):
(1)
IR (h) =
1
(0)
22 IR
22 1
h
2
(0)
IR (h) ,
o qual possui um erro da ordem O h4 . Contudo, no se conhece o valor deste erro; tudo o que se obteve
(0)
at este momento foi o erro EA0 (h/2), correspondente aproximao IR (h/2).
(1)
Para se calcular o erro de IR (h), necessrio agora aplicar a frmula (2.15), o que implica na necessidade
(1)
do clculo de IR (h/2). Desta forma, obtm-se EA1 (h) e EA1 (h/2), dados por:
EA1 (h) =
24
(1)
I
24 1 R
h
2
(1)
IR (h)
e EA1
h
2
1
(1)
I
24 1 R
(1)
h
2
(1)
IR (h) .
(2)
O valor extrapolado agora passa a ser IR (h/2) + EA1 (h/2), o qual identificado por IR (h):
(2)
IR (h) =
Autor: Rudi Gaelzer IFM/UFPel
1
(1)
24 IR
24 1
h
2
(1)
IR (h) ,
Verso: 22 de julho de 2009
56
(1)
cujo erro da ordem O h ; porm, a melhor estimativa de erro EA1 (h/2), correspondente a IR (h/2).
(2)
(2)
Para se calcular o erro de IR (h) necessrio calcular IR (h/2), o que reinicia novamente o ciclo.
Para sistematizar, pode-se afirmar que, aplicando-se a regra trapezoidal estendida para uma sucesso
de incrementos h cada vez menores, sendo que cada valor consecutivo de h a metade do valor anterior
(k)
(R = 2), obtm-se de (3.28) as integrais de Romberg IR (h), k = 0, 1, 2, . . . , e as melhores estimativas de
erro, fornecidas por EAk1 (h/2), onde
6
(0)
IR (h) IT E (h)
1
(0)
22 IR
22 1
1
(2)
(1)
IR (h) = 4
24 IR
2 1
1
(3)
(2)
IR (h) = 6
26 IR
2 1
..
.
h
2
h
2
h
2
(1)
IR (h) =
(0)
EA0
(1)
EA1
(2)
EA2
IR (h) ,
IR (h) ,
IR (h) ,
1
(0)
I
22 1 R
1
(1)
= 4
I
2 1 R
1
(2)
= 6
I
2 1 R
..
.
h
2
h
2
h
2
h
2
h
2
h
2
(0)
IR (h)
(1)
IR (h)
(2)
IR (h)
(k)
IR (h) =
h
2
EAk1
(3.29)
(4)
Supondo ento que se queira aplicar a regra de extrapolao (3.29) at k = 4. Para se obter IR (h)
(3)
(3)
(2)
(2)
(2)
necessrio calcular IR (h), IR (h/2), o que implica em calcular antes IR (h), IR (h/2) e IR h/22 ,
(1)
(1)
(1)
(1)
(0)
(0)
para as quais so necessrias IR (h), IR (h/2), IR h/22 e IR h/23 e, finalmente, IR (h), IR (h/2),
(0)
(0)
(0)
IR h/22 , IR h/23 , IR h/24 . Ou seja, para uma extrapolao at o k-simo termo, necessria a
aplicao da quadratura trapezoidal para os intervalos h, h/2, . . . , h/2k , o que vai implicar em at N = 2k
subintervalos.
(0)
Para o clculo da estimativa de erro EAk1 (h/2), necessrio que se conhea tambm IR (h), . . . ,
(0)
IR h/2k . O diagrama da figura 3.5 ilustra a interdependncia entre os consecutivos estgios de extrapolao para k = 4. Generalizaes para valores maiores de k so facilmente realizadas.
Antes de qualquer preocupao a respeito da implementao do controle de erro e critrio de parada da
rotina integradora, pode surgir agora a convico de que o nmero de clculos da quadratura (3.28) para as
extrapolaes se torna rapidamente to grande que uma aplicao prtica deste mtodo se torna invivel.
Felizmente, isto no verdade. Para a regra trapezoidal entre limites fixos a e b, pode-se dobrar o nmero
de subintervalos sem que se perca o trabalho realizado previamente. A implementao mais grosseira da
regra trapezoidal seria tomar h = b a (N = 1), f0 = f (a) e f1 = f (b), calculando-se ento
h
(f0 + f1 ) .
2
(0)
IR (h) =
O primeiro estgio de refinamento consiste ento em adicionar o valor da funo no ponto central atravs
das transformaes
N = 2,
h
,
2
x0 = a,
resultando
(0)
IR
h
2
x1 =
ba
,
2
x2 = b,
f1 f2
1 (0)
h
I (h) + f1 ;
2 R
2
IR
h
22
1 (0)
I
2 R
h
2
h
(f1 + f3 )
22
57
(0)
IR (h)
(1)
IR (h)
(0)
IR
h
2
(2)
IR (h)
(1)
IR
(0)
IR
h
22
(2)
(1)
(0)
h
23
h
24
(0)
IR
h
23
h
25
(k)
h
24
h
22
h
2
(4)
IR
(3)
IR
(2)
(1)
(4)
IR (h)
(3)
IR
IR
h
2
IR
(2)
(1)
(0)
h
22
IR
IR
IR
(3)
IR (h)
IR
IR
IR
h
2
h
23
h
22
h
2
(4)
Figura 3.5: Integrais de Romberg IR necessrias para o clculo de IR (h) e EA4 (h), de acordo com (3.29). Nota-se
que cada par de termos em uma dada coluna gera o termo centrado na coluna direita.
Figura 3.6: Chamadas consecutivas da rotina que calcula a quadratura trapezoidal estendida incorporando a informao de chamadas anteriores e calculando o integrando somente nos novos pontos necessrios para o refinamento
da grade. A linha final mostra o nmero total de clculos do integrando aps as quarta chamada da rotina.
Algoritmo 3.3 Calcula o n-simo refinamento da regra trapezoidal estendida (3.28), sendo dados f (x), os
limites de integrao (a, b) e o resultado da quadratura no estgio anterior (IRom ). Os pontos includos em
cada estgio so sempre distintos de todos os outros pontos anteriores, conforme ilustrado na figura 3.6.
Quando chamado com n = 1, o algoritmo calcula a quadratura usando h = b a; quando chamado com
n = 2, 3, . . . , o resultado ser refinado pela adio de 2n2 pontos interiores adicionais.
Dados: f (x), a, b, n e IRom :
Se n = 1 ento:
IRom = (1/2) (b a) [f (a) + f (b)]
seno:
npts = 2n2
= (b a) /npts
x = a + /2
soma = 0
Para j = 1 : npts, faa:
soma = soma + f (x)
x=x+
final lao
IRom = (1/2) [IRom + (b a) soma/npts]
final teste
Autor: Rudi Gaelzer IFM/UFPel
58
A implementao desta idia apresentada no algoritmo 3.3. Este algoritmo deve ser chamado pela rotina
integradora para calcular os termos da primeira coluna do diagrama na figura 3.5. A primeira chamada
deve ser realizada com n = 1, incrementando-se o valor de n por 1 a cada chamada subseqente, totalizando
k + 1 chamadas, sendo k o grau de extrapolao desejado na rotina de Romberg (3.29).
O algoritmo 3.3 est implementado em Fortran 95 na forma de uma funo no programa 3.2.
Programa 3.2: Implementao do algoritmo 3.3 em Fortran 95 na forma de funo.
! FUNCAO TRAPEZ_ROM
! C a l c u l a a q u a d r a t u r a numerica de uma f u n c a o f ( x ) p e l a r e g r a dos t r a p e z i o s
!
estendida .
! Criada como p a r t e i n t e g r a n t e do Metodo de Romberg para i n t e g r a c a o
!
automatica .
!
! Argumentos :
! f:
Funcao na forma f ( x ) a s e r i n t e g r a d a ( Entrada ) .
! a:
L i m i t e i n f e r i o r de i n t e g r a c a o
( Entrada ) .
! b:
L i m i t e s u p e r i o r de i n t e g r a c a o
( Entrada ) .
! n_ordem : Ordem de chamada da f u n c a o
( Entrada ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Maio / 2 0 0 8 .
!
function trapez_rom ( f , a , b , n_ordem )
r e a l ( kind= dp ) : : trapez_rom
integer , intent ( in ) : : n_ordem
r e a l ( kind= dp ) , intent ( in ) : : a , b
integer : : i
integer , s a v e : : n p t s
r e a l ( kind= dp ) : : h , d e l t a , x , soma
r e a l ( kind= dp ) , s a v e : : I_te , f a t 2
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
h= b a
! Testa p r i m e i r a rodada .
s e l e c t case ( n_ordem )
case ( 0 )
! Primeira rodada .
I_te= 0 . 5 h ( f ( a ) + f ( b ) )
f a t 2= 1 . 0 _dp
n p t s= 1
case default ! Rodadas s u b s e q u e n t e s .
d e l t a= h/ f a t 2
x= a + 0 . 5 d e l t a
soma= 0 . 0 _dp
do i= 1 , n p t s
soma= soma + f ( x )
x= x + d e l t a
end do
I_te= 0 . 5 ( I_te + hsoma/ f a t 2 )
f a t 2= 2 . 0 _dp f a t 2
n p t s= 2 n p t s
end s e l e c t
trapez_rom= I_te
return
end function trapez_rom
Autor: Rudi Gaelzer IFM/UFPel
59
(0)
IR
(0)
IR
Programa 3.3: Programa que calcula a quadratura numrica pelo Mtodo de Romberg.
! SUBROTINA QUAD_ROM
! C a l c u l a a q u a d r a t u r a numerica de uma f u n c a o f ( x ) usando o Metodo de Romberg .
!
! Argumentos :
!
f : Funcao na forma f ( x ) a s e r i n t e g r a d a
( Entrada ) .
!
a : L i m i t e i n f e r i o r de i n t e g r a c a o
( Entrada ) .
!
b : L i m i t e s u p e r i o r de i n t e g r a c a o
( Entrada ) .
!
e r r r e l : Valor maximo a d m i t i d o para o e r r o r e l a t i v o ( Entrada ) .
!
r e s u l t : Valor o b t i d o para a q u a d r a t u r a numerica
( S a id a ) .
!
e r r e s t : Valor e s t i m a d o para o e r r o r e l a t i v o
( S ai d a ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Maio / 2 0 0 8 .
!
subroutine quad_rom ( f , a , b , e r r r e l , result , e r r e s t )
r e a l ( kind= dp ) , intent ( in ) : : a , b , e r r r e l
r e a l ( kind= dp ) , intent ( out ) : : result , e r r e s t
! Variaveis locais
integer : : k , i , np
r e a l ( kind= dp ) : : q u a t r o i , quatroim1 , e r r a b s
r e a l ( kind= dp ) , dimension ( : ) , pointer : : Ikm1 , I k
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
!
i f ( b == a ) then
r e s u l t= 0 . 0 _dp
e r r e s t= 0 . 0 _dp
return
end i f
np= 100
a l l o c a t e ( Ikm1 ( 0 : np ) , I k ( 0 : np ) )
I k (0)= trapez_rom ( f , a , b , 0 )
Ikm1 (0)= trapez_rom ( f , a , b , 1 )
Ikm1 (1)= ( 4 Ikm1 ( 0 ) I k ( 0 ) ) / 3 . 0 _dp
k= 2
do
i f ( k > np ) then
np= 2np
Ikm1 => r e a l o c a r ( Ikm1 , np )
Ik
=> r e a l o c a r ( Ik , np )
end i f
Autor: Rudi Gaelzer IFM/UFPel
60
! R e a l i z a l a c o s ao l o n g o das d i a g o n a i s .
I k (0)= trapez_rom ( f , a , b , k )
q u a t r o i= 1 . 0 _dp
do i= 1 , k
q u a t r o i= 4 . 0 _dp q u a t r o i
quatroim1= q u a t r o i 1 . 0 _dp
I k ( i )= ( q u a t r o i I k ( i 1) Ikm1 ( i 1))/ quatroim1
end do
! C a l c u l a e compara e r r o
e r r a b s= ( I k ( k1) Ikm1 ( k 1))/ quatroim1
e r r e s t= abs ( e r r a b s / I k ( k ) )
i f ( e r r e s t <= e r r r e l ) then
r e s u l t= I k ( k )
e x it
else
k= k + 1
Ikm1= I k
end i f
end do
return
end subroutine quad_rom
Cabe aqui mencionar que tanto a funo trapez_rom quanto a subrotina quad_rom necessitam de informaes adicionais para que todas as interfaces e espcies de variveis sejam explicitadas. A melhor estratgia
consiste em inserir estas rotinas em um mdulo, o qual pode usar outros mdulos que contenham declaraes
globais de variveis ou rotinas auxiliares. Outro ponto que merece destaque que a subrotina quad_rom
faz uso de vetores alocveis para acumular os resultados das diagonais da figura 3.5. Embora raramente
possa acontecer, possvel que o tamanho declarado para os vetores seja excedido devido s exigncias na
acuracidade do resultado. Para evitar a ocorrncia de um erro do tipo out-of-bounds, a subrotina faz uso de
vetores de ponteiros e invoca, sempre que necessrio, a funo auxiliar realocar, ela prpria uma funo
de ponteiro, a qual se encarregar de realocar os vetores auxilires. A funo realocar baseada na rotina
reallocate_dv apresentada no Numerical Recipes [12].
Todas as rotinas desenvolvidas neste captulo, em conjunto com os mdulos necessrios para implementlas, podem ser obtidos em http://minerva.ufpel.edu.br/~rudi/grad/ModComp/Progs/.
3.4.2
3.4.3
61
Integrao adaptativa
f (x) dx =
a
wi f (xi ) ,
i=0
todos os mtodos apresentados neste captulo restringem-se a uma nica regra utilizada para a determinao
das abcissas {xi } e os pesos {wi }. Um algoritmo de quadratura adaptiva, por outro lado, escolhe os valores
de {wi } e {xi } dinamicamente durante a computao, de forma a adaptar-se ao comportamente particular
de f (x).
Quando o integrando apresenta um comportamento que dificulta o clculo da sua quadratura (f (x)
oscila rapidamente, por exemplo), a regra em uso, aplicada a todo intervalo de integrao, pode encontrar
dificuldades para obter um resultado com a preciso solicitada. Nesta situao torna-se necessrio o uso
de uma rotina adaptativa. Contudo, bons algoritmos de quadratura adaptiva so bastante complexos do
ponto de vista de clculo numrico e custosos para ser desenvolvidos. Nesta situao, recomendvel que
o programador busque uma rotina pronta em alguma biblioteca de software numrico, ao invs de tentar
desenvolv-la por si mesmo.
No mtodo de Romberg, o valor de h reduzido pela metade a cada iterao consecutiva do mtodo,
at que a preciso solicitada seja alcanada. Por se basear em uma regra Newtoniana, o mtodo exige que
o valor de h seja o mesmo ao longo de todo o intervalo de integrao. Contudo, o comportamento de f (x)
pode no requerer que h seja o mesmo ao longo de todo o intervalo para que a preciso solicitada seja
atingida. Em regies onde o integrando varia lentamente apenas uns poucos pontos podem ser suficientes;
ao passo que nas regies onde f (x) varia rapidamente, um nmero maior de pontos requerido.
Considera-se, por exemplo, o integrando ilustrado na figura 3.7. Na regio de, f (x) essencialmente constante, e o incremento h pode ser grande.
Contudo, na regio ad, f (x) varia rapidamente,
significando que o incremento h deve ser pequeno.
De fato, a regio ad pode ser dividida em trs regies distintas, como ilustrado. Inspeo visual do
comportamento de f (x) pode identificar as regies
onde h deve ser pequeno ou grande. Porm, construir o grfico de f (x) um processo custoso e demorado, principalmente quando necessrio o clculo de um nmero grande de integrais. Uma rotina
adaptativa deve ser capaz de identificar as regies
onde h necessita ser maior ou menor e automaticamente dividir o intervalo de integrao de acordo
com essa identificao. Boas rotinas automticas Figura 3.7: Funo f (x) que apresenta distintos comporvariam no somente os valores de h e dos pesos, tamentos ao longo do intervalo de integrao.
mas tentam tambm diferentes regras de quadratura, sempre visando a otimizao no clculo numrico. Em determinados intervalos, uma rotina automtica do tipo Romberg pode atingir a preciso solicitada rapidamente, enquanto que em outro intervalo o
algoritmo pode optar por uma regra de quadratura gaussiana, por exemplo.
62
Captulo 4
Introduo
Um problema que surge com muita freqncia em computao cientfica consiste no clculo das razes
de uma equao na forma
f (x) = 0.
(4.1)
Ou seja, necessrio calcular o conjunto de valores de {x} onde f (x) nula. Em muitas situaes, a funo
f (x) pode ser conhecida explicitamente, como o caso de um polinmio ou de uma funo transcendental.
s vezes, contudo, f (x) pode vir a ser conhecida somente de forma implcita, como ocorre quando f (x)
soluo de uma equao diferencial ou integral.
Em raras circunstncias possvel calcular-se analiticamente as razes de f (x). Situaes onde isso
ocorre restringem-se, por exemplo, a equaes polinomiais do 1 ao 4 grau ou de um polinmio qualquer
fatorvel. Porm em geral somente solues aproximadas para as razes so possveis, dependendo-se de
alguma tcnica computacional para calcular a aproximao. Dependendo do contexto, soluo aproximada
pode significar um ponto x para o qual (4.1) aproximadamente satisfeita, isto , para o qual |f (x )|
pequeno, ou um ponto x que est prximo de uma soluo de (4.1). Infelizmente o conceito de soluo
aproximada um tanto vago. Uma soluo aproximada obtida por um computador conter sempre um erro
devido ao arredondamento, ou devido a uma instabilidade numrica ou devido ao truncamento gerado pelo
mtodo empregado. De fato, h sempre infinitas solues aproximadas, todas igualmente vlidas, embora a
soluo de (4.1) possa ser nica.
Uma situao onde o efeito dos erros de arredondamento produzem falsas razes pode ser vista na figura
6
1.4 esquerda. Esta figura mostra o grfico do polinmio p6 (x) = (x 1) , escrito na forma expandida,
para valores prximos a x = 1. O grfico foi gerado a partir de um programa de computador e, embora
as 6 razes de p6 (x) so nicas e iguais a 1, o grfico mostra um nmero grande de pontos onde a curva
cruza o eixo das abcissas. Estas falsas razes foram produzidas pelos erros de arredondamento resultantes
principalmente do cancelamento de quantidades prximas entre si. Este exemplo isolado j mostra algumas
das dificuldades envolvidas no clculo de razes.
4.2
Nesta seo sero apresentados os mtodos iterativos elementares utilizados com maior freqncia para
o clculo das razes reais da funo
f (x) = 0,
isto , para uma funo transcedental unidimensional. Estes mtodos sero sempre exemplificados com o
clculo da raiz real da equao de 3 grau
p3 (x) = x3 x 1 = 0.
(4.2)
As razes de p3 (x) podem ser obtidas analiticamente; elas consistem em uma raiz real e duas complexas
conjugadas:
x1 =
1
3
27 3 69
2
2
1/3
1
2
9 + 69
32/3
63
1/3
1.3247179572447460260
1/3
1 i 3 12 9 + 69
27 3 69
1
1+i 3
x2 =
6
2
2
232/3
0.66235897862237301298 + 0.56227951206230124390i
1/3
1 + i 3 12 9 + 69
1
27 3 69
x3 =
1i 3
6
2
2
232/3
0.66235897862237301298 0.56227951206230124390i.
64
1/3
1/3
Os mtodos iterativos mais conhecidos sero agora apresentados e estes tero a sua capacidade de calcular
a raiz x1 analisada.
4.2.1
Mtodo da biseco
Boa parte dos mtodos de clculo de razes necessita do conhecimento prvio de alguma informao a
respeito da soluo ou de f (x) para que possa convergir para a soluo correta. Para que o mtodo da
biseco funcione, necessrio inicialmente cercar a raiz (ou razes) entre dois valores de x. Assim, sabendose que p3 (1) = 1 < 0 e que p3 (2) = 5 > 0, conclui-se que h um nmero mpar de razes dentro do intervalo
[1, 2]. Assim, a informao inicial que necessria fornecer ao mtodo da bisseco um par de pontos
x = a0 e x = b0 distintos tais que
f (a0 ) f (b0 ) < 0,
(4.3)
em cuja situao sempre haver um nmero mpar de razes no intervalo [a0 , b0 ].
Se f (a0 ) f (b0 ) > 0, significa que h um nmero par de razes no intervalo (zero inclusive), o que torna
necessria a procura de um outro intervalo. Se a condio (4.3) for satisfeita, h um nmero mpar de razes
em [a0 , b0 ]. Contudo, se f (x) for contnua em [a0 , b0 ] o seguinte teorema deve valer:
Teorema 4.1. Teorema de Rolle.
Seja f (x) um funo contnua no intervalo finito [a, b] e diferencivel no intervalo (a, b). Se
f (a) = f (b) = 0, ento
f () = 0
para algum (a, b).
Este teorema implica em que se houver 3 ou mais razes em [a0 , b0 ], a derivada de f (x) deve possuir uma ou
mais razes neste intervalo. Caso seja possvel calcular analiticamente as razes de f (x), este teorema pode
ser til. Assim,
1
p3 (x) = 3x2 1 = 0 = x = .
3
Como no h razes de p3 (x) em [1, 2], isto implica que p3 (x) possui somente uma raiz no intervalo.
O mtodo consiste ento em tomar como primeira aproximao para a raiz o valor mdio:
1 =
a0 + b0
,
2
sendo o erro absoluto igual ao valor do intervalo entre 1 e um dos pontos extremos:
EA1 = |b0 1 | =
b0 a0
.
2
No caso, x1 = 1 EA1 = 1, 5 0, 5.
Comparando agora f (1 ) com os pontos extremos, necessariamente deve ocorrer
f (1 ) f (a0 ) < 0 ou f (1 ) f (b0 ) < 0,
o que ir definir um novo intervalo, [a0 , 1 ] ou [1 , b0 ] que contm a raiz de f (x), reiniciando o ciclo.
No exemplo,
p3 (1, 5) p3 (1) = 0, 875 < 0 ao passo que p3 (1, 5)p3 (2) = 4, 375 > 0.
Portanto, a raiz encontra-se no intervalo [1; 1, 5]. Tomando a nova aproximao e o seu erro:
2 =
Autor: Rudi Gaelzer IFM/UFPel
1 + 1, 5
= 1, 25
2
Verso: 22 de julho de 2009
65
EA2 = 0, 25.
Verificando 2 :
p3 (1, 25) p3 (1) > 0 ao passo que p3 (1, 25)p3 (1, 5) < 0.
Portanto x1 [1, 25; 1, 5]. A proxima iterao:
1, 25 + 1, 5
= 1, 375
2
EA3 = 0, 125.
3 =
Verificando 3 :
p3 (1, 25) p3 (1, 375) < 0 ao passo que p3 (1, 375)p3 (1, 5) > 0.
Portanto,
1, 25 + 1, 375
= 1, 3125
2
EA4 = 0, 0625.
4 =
Verificando 4 :
p3 (1, 25) p3 (1, 3125) > 0 ao passo que p3 (1, 3125)p3 (1, 375) < 0.
Portanto, x1 [1, 3125; 1, 375]. Iterando novamente,
1, 3125 + 1, 375
= 1, 34375
2
EA5 = 0, 03125.
5 =
Verificando 5 :
p3 (1, 3125) p3 (1, 34375) < 0 ao passo que p3 (1, 34375)p3 (1, 375) > 0.
Portanto, 5 [1, 3125; 1, 34375].
As prximas 2 iteraes produzem
x1 = 1, 328125 0, 015625
x1 = 1, 3203125 0, 0078125.
Portanto, pode-se observar que os resultados das iteraes esto monotonicamente convergindo para a raiz
x1 1.3247179572447460260, mas aps 7 iteraes somente 2 casas decimais corretas foram obtidas. Esta
uma caracterstica do mtodo da biseco: uma vez que a raiz de uma funo contnua foi cercada, ele
certamente retornar o resultado correto, porm sua convergncia extremamente lenta. De uma forma
mais rigorosa, como o comprimento do intervalo que sabidamente contm a raiz dividido pelo fator 2 a
cada iterao, o mtodo da biseco produz uma dgito binrio correto a cada passo.
Um algoritmo que implementa o mtodo da biseco deve iniciar com os dois valores a0 e b0 (b0 > a0 )
para x, verificar se a raiz realmente est no intervalo fornecido e retornar os valores da raiz aproximada
=
a+b
(sendo a = a0 e b = b0 na primeira iterao)
2
|b a|
.
2
O erro absoluto deve ento ser comparado com o valor mximo de erro tolerado, parmetro que tambm
deve ser fornecido ao algoritmo. Se EA maior que a tolerncia, o novo intervalo [a, b] que contm a raiz
determinado e o procedimento repetido novamente. Se EA menor ou igual que a tolerncia, o algoritmo
retorna a ltima aproximao para a raiz. O algoritmo 4.1 implementa este processo.
A subrotina 4.1 implementa o algoritmo 4.1 em Fortran 95. Deve-se notar que, alm de implementar os
passos contidos no algoritmo, a rotina controla tambm se realmente h pelo menos uma raiz no intervalo
fornecido e tambm se a tolerncia solicitada for exageradamente pequena, como seria o caso se fosse
fornecido o valor erro= 1020 ou menor para um resultado em preciso dupla, que contm somente cerca
de 15 casas decimais de preciso. Este controle realizado pela varivel inteira de sada iflag.
Autor: Rudi Gaelzer IFM/UFPel
66
! SUBROTINA BISEC
! Busca uma r a i z da f u n c a o F(X) p e l o Metodo da B i s e c c a o .
! Argumentos :
!
F : Nome da f u n c a o c u j a r a i z e d e s e j a d a
( Entrada ) .
!
A,B: Pontos e x t r e m o s do i n t e r v a l o onde a r a i z e p r o c u r a d a ( Entrada ) .
!
XTOL: T o l e r a n c i a maxima para a aproximacao da r a i z
( Entrada ) .
!
XM: Melhor r e s u l t a d o o b t i d o para a r a i z de F(X)
( S ai da ) .
!
IFLAG : Um i n t e i r o :
( S a id a ) .
!
= 1, Metodo f a l h o u , uma v e z que F tem o mesmo s i n a l em A e B.
!
= 0 , Encerrou , uma v e z que ABS(AB)/2 <= XTOL.
!
= 1 , Encerrou , uma v e z que ABS(AB)/2 e t a o pequeno que
!
novos v a l o r e s para a r a i z nao sao p o s s i v e i s .
!
! Autor : Rudi G a e l z e r , IFM UFPel
! Data : Maio / 2 0 0 8 .
!
subroutine b i s e c ( f , a , b , x t o l , xm, i f l a g )
r e a l ( kind= dp ) , intent ( inout ) : : a
r e a l ( kind= dp ) , intent ( inout ) : : b
r e a l ( kind= dp ) , intent ( in )
: : xtol
r e a l ( kind= dp ) , intent ( out )
: : xm
integer , intent ( out )
:: iflag
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
r e a l ( kind= dp ) : : e r r o , fa , fm
!
i f l a g= 0
fa = f (a)
i f ( f a f ( b ) > 0 . 0 _dp) then
i f l a g = 1
print ( " f ( x ) tem o mesmo s i n a l nos d o i s p o n t o s extremos : " , 2 e15 . 7 ) , a , b
return
end i f
e r r o = abs ( b a )
do ! E x e c u t e enquanto e r r o > x t o l .
erro = 0.5 erro
i f ( e r r o <= x t o l ) e x it
Autor: Rudi Gaelzer IFM/UFPel
67
xm = 0 . 5 ( a + b )
i f (xm + e r r o == xm) then ! T e s t e para t o l e r a n c i a muito pequena .
iflag = 1
return
end i f
fm = f (xm)
i f ( f a fm > 0 . 0 _dp) then ! Determine novo i n t e r v a l o .
a = xm
f a = fm
else
b = xm
end i f
end do
end subroutine b i s e c
4.2.2
Uma modificao do mtodo da biseco que permite acelerar a taxa de convergncia no clculo da raiz
consiste em utilizar uma informao adicional de f (x), qual seja, o quo prximos da raiz esto os pontos
extremos do intervalo. No exemplo adotado: o clculo da raiz real de p3 (x), o intervalo inicialmente definido
foi [1, 2]; porm, p3 (1) = 1, ao passo que p3 (2) = 5. Isto significa que a raiz provavelmente est mais
prxima de x = 1 que x = 2. Portanto, ao invs de calcular 1 como o ponto mdio entre 1 e 2, ser
calculada a mdia ponderada:
p3 (2).1 p3 (1).2
= 1, 1666 . . . ,
w1 =
p3 (2) p3 (1)
o qual est ligeiramente mais prximo de x1 que o ponto mdio 1 = 1, 5.
Verificando agora em qual intervalo se encontra a raiz, descobre-se que ela est em [w1 , 2], ao passo que
p3 (w1 ) = 0, 578703704 . . . . Repetindo o clculo da mdia ponderada,
w2 =
p3 (2).w1 p3 (w1 ) .2
= 1, 253112033 . . . ,
p3 (2) p3 (w1 )
f (bn ) an f (an ) bn
.
f (bn ) f (an )
(4.4)
O ponto wn a raiz da reta secante que passa pelos pontos (an , f (an )) e (bn , f (bn )). Se f (x) for cncava
na raiz, ou seja, se f (x) > 0 na raiz, os pontos wn estaro sempre esquerda da raiz. Se f (x) for convexa
(f (x) < 0 na raiz), os pontos wn estaro sempre direita da raiz. No caso de p3 (x), este cncavo em
x = x1 e por conseqncia os valores de wn iro se aproximar de x1 sempre pela esquerda, como se pode
ver na figura 4.1.
Um aperfeioamento do mtodo da falsa posio que permite acelerar a taxa de convergncia raiz o
chamado Mtodo da falsa posio modificado. Neste mtodo, as secantes so substitudas por retas
de inclinaes cada vez menores at que a raiz para uma determinada reta se encontre do lado oposto
aproximao wn anteriormente obtida. Desta forma, as aproximaes convergem raiz pelo dois lados, ao
invs de um lado somente, como no mtodo da falsa posio. Este mtodo ilustrado na figura 4.2, o valor
da ordenada em b0 reduzido pela metade at que a raiz da reta se encontra do lado direito da raiz de f (x).
O algoritmo 4.2 mostra como o mtodo da falsa posio modificado pode ser implementado. Ao contrrio
da biseco, o presente mtodo no pode determinar inequivocamente um valor mnimo para o intervalo
onde a raiz se encontra. Na falta de uma melhor estimativa, o algoritmo toma como primeiro critrio de
parada um valor mnimo admissvel para o intervalo que contm a raiz (xtol). Como o valor de f (x)
continuamente reduzido metade em um dos extremos do intervalo, um valor absurdamente pequeno para
xtol pode inadvertidamente resultar em um valor numrico nulo para F ou G, devido representao de
ponto flutuante. Para evitar esta ocorrncia, o algoritmo utiliza um segundo critrio de parada (ftol) que
estabelece o menor valor admissvel para |f (x)| em qualquer um dos pontos extremos do intervalo.
Autor: Rudi Gaelzer IFM/UFPel
68
! SUBROTINA FAL_POS_MOD
! Busca uma r a i z da f u n c a o F(X) p e l o Metodo da F a l s a P o s i c a o M o d i f i c a d o .
! Argumentos de e n t r a d a
! F : Nome da f u n c a o c u j a r a i z e d e s e j a d a
! A,B: Pontos e x t r e m o s do i n t e r v a l o onde a r a i z e p r o c u r a d a .
! XTOL: T o l e r a n c i a maxima para o i n t e r v a l o que contem a r a i z .
! FTOL: T o l e r a n c i a maxima para o v a l o r a b s o l u t o de F(W) .
! NTOL: Numero maximo de i t e r a c o e s a d m i t i d a s ( o p c i o n a l ) .
!
Se NTOL e s t a a u s e n t e , p e r m i t e i n f i n i t a s i t e r a c o e s .
! Argumentos de s a i d a
! A,B: Pontos e x t r e m o s do i n t e r v a l o que contem a m a t r i z .
! W: Melhor e s t i m a t i v a para a r a i z .
! IFLAG : Um i n t e i r o ,
!
=1, Metodo f a l h o u , uma v e z que F( x ) tem o mesmo s i n a l em A e B.
!
= 0 , Encerrou , p o r qu e ABS(AB) <= XTOL.
!
= 1 , Encerrou , p o r qu e ABS(F(W) ) <= FTOL.
!
= 2 , Encerrou , p o r qu e NTOL i t e r a c o e s foram r e a l i z a d a s .
Autor: Rudi Gaelzer IFM/UFPel
69
! Metodo
! O metodo da f a l s a p o s i c a o m o d i f i c a d o e empregado . I s t o s i g n i f i c a que
!
a cada passo , i n t e r p o l a c a o l i n e a r e n t r e os p o n t o s (A,FA) e
!
(B ,FB) e empregada , com FAFB < 0 , para um novo ponto (W, F(W) )
!
que s u b s t i t u i um dos p o n t o s A ou B de t a l forma que novamente FAFB < 0 .
!
A d i c i o n a l m e n t e , a ordenada de um ponto que e r e p e t i d o em mais de uma
!
i t e r a c a o e d i v i d i d o por 2 a cada p a s s o s u b s e q u e n t e .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 8 .
!
subroutine fal_pos_mod ( f , a , b , x t o l , f t o l , w, i f l a g , n t o l )
r e a l ( kind= dp ) , intent ( in out ) : : a , b
r e a l ( kind= dp ) , intent ( in )
: : xtol , f t o l
integer , intent ( in ) , optional : : n t o l
r e a l ( kind= dp ) , intent ( out )
:: w
integer , intent ( out )
:: iflag
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
integer : : n
r e a l ( kind= dp ) : : fa , fb , fw , s i g n f a , p r v s f w
!
f a= f ( a )
s i g n f a= s i g n ( 1 . 0 _dp , f a )
f b= f ( b )
i f ( s i g n f a f b > 0 . 0 _dp) then
print ( " f ( x ) tem o mesmo s i n a l nos d o i s p o n t o s extremos : " , 2 e15 . 7 ) , a , b
i f l a g = 1
return
end i f
w= a
fw= f a
n= 1
do
i f ( abs ( ab ) <= x t o l ) then
! V e r i f i c a s e i n t e r v a l o e menor que x t o l .
i f l a g= 0
return
end i f
i f ( abs ( fw ) <= f t o l ) then
! V e r i f i c a s e ABS( f (w) ) e menor que f t o l .
i f l a g= 1
return
end i f
w= ( f a b f b a ) / ( f a f b ) ! C a l c u l a novo w por i n t e r p o l a c a o .
p r v s f w= s i g n ( 1 . 0 _dp , fw )
fw= f (w)
i f ( s i g n f a fw > 0 . 0 _dp) then ! A l t e r a o i n t e r v a l o .
a= w
f a= fw
i f ( fw p r v s f w > 0 . 0 _dp) f b = 0 . 5 f b
else
b= w
f b= fw
i f ( fw p r v s f w > 0 . 0 _dp) f a = 0 . 5 f a
end i f
Autor: Rudi Gaelzer IFM/UFPel
70
4.2.3
Mtodo da secante
O mtodo da secante um outro variante do mtodo da falsa posio no qual, ao contrrio da verso
modificada, no se procura cercar a raiz entre dois
pontos. Ao contrrio, a frmula (4.4) empregada
continuamente. O mtodo da secante, por outro
lado, no mais pressupe que a raiz esteja dentro
de um intervalo [a0 , b0 ]. O mtodo requer somente
que sejam fornecidos dois valores iniciais para a raiz,
x1 e x0 , a partir dos quais novas aproximaes para
a raiz so obtidas a partir de
xn+1 =
(4.5)
xn xn1
= xn f (xn )
.
f (xn ) f (xn1 )
(4.6)
fcil ver que (4.5) e (4.6) so idnticas. O comportamento das aproximaes raiz de f (x) no mtodo da
secante ilustrado pela figura 4.3.
Como a raiz no mais permanece necessariamente cercada por dois valores extremos, no possvel
garantir que o mtodo da secante venha a convergir sempre. Caso o mtodo convirja, os critrios usuais
de parada so os seguintes. Para uma determinada iterao, identificada pelo ndice n, o mtodo ser
considerado bem sucedido se
|f (xn )| ftol ou |xn xn1 | xtol.
(4.7a)
Ou seja, o valor absoluto da funo ou a diferena absoluta entre duas aproximaes consecutivas so
considerados menores que um valor de tolerncia. Quando no se conhece a ordem de grandeza do valor de
Autor: Rudi Gaelzer IFM/UFPel
71
f (x) em uma vizinhana em torno da raiz ou a ordem de grandeza da prpria raiz, pode-se usar os seguintes
valores relativos como critrios de parada:
|f (xn )|
fmax
ftol ou
xn xn1
xn
(4.7b)
xtol.
A subrotina 4.3 implementa o mtodo da secante. Como critrios de parada foram escolhidos o erro
absoluto no valor da funo e o erro relativo entre dois resultados consecutivos. Para evitar um nmero
excessivo de clculos de f (x), o parmetro ntol obrigatrio para a rotina secante.
Programa 4.3: Subrotina em Fortran 95 que implementa o mtodo da secante.
! SUBROTINA SECANTE
! Busca uma r a i z da f u n c a o F(X) p e l o Metodo da S e c a n t e .
! Argumentos de e n t r a d a
! FUNC: Nome da f u n c a o c u j a r a i z e d e s e j a d a
! x1 , x2 : Dois v a l o r e s i n i c i a i s para o i n i c i o da i t e r a c a o .
! ERRABS: Primeiro c r i t e r i o de parada . Se ABS(F(Xn) ) <= FTOL,
!
e n t a o Xn e a c e i t o como r a i z
! ERRREL: Segundo c r i t e r i o de parada : e r r o r e l a t i v o .
!
Se ABS(Xn Xn1) <= XTOLABS(Xn) , e n t a o Xn e a c e i t o como r a i z .
! NTOL: Numero maximo de i t e r a c o e s a d m i t i d a s .
! Argumentos de s a i d a
! X: Melhor e s t i m a t i v a para a r a i z .
! IFLAG : Um i n t e i r o ,
!
= 1, Metodo f a l h o u . Nenhuma r a i z f o i e n c o n t r a d a em NTOL
!
i t e r a c o e s . O u l t i m o v a l o r e n c o n t r a d o para X e r e t o r n a d o .
!
= 0 , Encerrou d e v i d o ao p r i m e i r o c r i t e r i o de parada .
!
= 1 , Encerrou d e v i d o ao segundo c r i t e r i o de parada .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 8 .
!
subroutine s e c a n t e ( func , x1 , x2 , e r r a b s , e r r r e l , n t o l , x , i f l a g )
use Modelos_Computacionais_Extras , only : t r o c a
integer , intent ( in )
: : ntol
r e a l ( kind=dp ) , intent ( in )
: : x1 , x2 , e r r a b s , e r r r e l
integer , intent ( out )
:: iflag
r e a l ( kind=dp ) , intent ( out ) : : x
INTERFACE
function f u n c ( x )
use Modelos_Computacionais_Dados
r e a l ( kind=dp ) , intent ( in ) : : x
r e a l ( kind=dp ) : : f u n c
end function f u n c
END INTERFACE
integer : : j
r e a l ( kind=dp ) : : dx , f , f l , x l
f l = f u n c ( x1 )
f= f u n c ( x2 )
i f ( abs ( f l ) < abs ( f ) ) then ! Tome o v a l o r i n i c i a l com o menor v a l o r de
x= x1
! f u n c ( x ) como aproximacao i n i c i a l .
x l= x2
call troca ( fl , f )
else
x l= x1
x= x2
end i f
do j= 1 , n t o l
dx= ( xl x ) f / ( f f l )
x l= x
Autor: Rudi Gaelzer IFM/UFPel
72
f l= f
x= x + dx
f= f u n c ( x )
i f ( abs ( f ) <= e r r a b s ) then
i f l a g= 0
return
end i f
i f ( abs ( dx ) <= e r r r e l abs ( x ) ) then
i f l a g= 1
return
end i f
end do
i f l a g = 1
return
end subroutine s e c a n t e
Ao contrrio dos mtodos anteriores, o mtodo da secante no exige que os dois pontos iniciais cerquem
a raiz. na tabela abaixo, mostra-se um estudo das aproximaes realizadas para a obteno da raiz x1 de
p3 (x). Em todos os casos, foram tomados os seguintes valores: errabs = 0, errrel = 107 e ntol = 50.
Cada coluna corresponde a pares distintos de valores para x1 e x2. Com exceo da primeira coluna, as
demais partiram de valores que no cercam a raiz. Observa-se que o mtodo da secante convergiu em todos
os casos, embora no ltimo a convergncia tenha sido bastante lenta.
x1= 1, x2= 2
1.00000000000000
1.16666666666667
1.39560439560440
1.31365666090990
1.32401611532221
1.32472525004811
1.32471795247273
1.32471795724471
4.2.4
x1= 2, x2= 3
2.00000000000000
1.72222222222222
1.46867825516563
1.36356158529402
1.32934949633224
1.32488078110669
1.32471865771829
1.32471795735102
1.32471795724475
-1.00000000000000
-0.833333333333333
-0.345454545454545
6.49850961972721
-0.327662162639576
-0.309617266171994
-1.34519594172679
0.235096865426605
2.46288916284303
0.449496710807014
0.662624843273948
-21.8117328908561
1.32471374864206
1.32471795532635
1.32471795724475
Mtodo de Newton-Raphson
f (xn )
.
f (xn )
(4.8)
Este resultado pode ser determinado de uma maneira um pouco mais rigorosa realizando o desenvolvimento
da funo f (x) em srie de Taylor em torno do ponto a, supondo que |x a|
1:
f (x) f (a) + f (a) (x a) .
Se o ponto x a raiz de f (x), resulta
x=a
f (a)
.
f (a)
Escrevendo a como o valor prvio da iterao (a = xn ) e x como o valor seguinte (x = xn+1 ), obtm-se a
frmula (4.8). De fato, esta frmula fornece simplesmente o ponto onde a reta tangente a f (xn ) nula.
Autor: Rudi Gaelzer IFM/UFPel
73
O mtodo de Newton-Raphson um dos mtodos mais utilizados para o clculo de razes porque fornece
uma convergncia rpida quando as formas analticas de f (x) e f (x) so conhecidas e no so custosas
do ponto de vista computacional. Alm disso, o mtodo de Newton utiliza somente um ponto anterior, ao
contrrio do mtodo da secante que necessita de dois pontos. Quando o clculo de f (x) se torna proibitivo,
costuma-se utilizar o mtodo da secante em seu lugar. Cabe aqui ressaltar que a frmula (4.8) pode ser
escritas na forma genrica
xn+1 = g (xn ) , n = 0, 1, 2, . . . ,
(4.9)
onde g (xn ) uma determinada funo de xn . Frmulas do tipo (4.9) so conhecidas como frmulas de
ponto fixo, porque quando a seqncia x0 , x1 , x2 , . . . converge a um determinado ponto , resulta que
lim xn = lim xn+1 = ,
0 ou f (x)
0, x [a, b];
f (b)
f (a)
> (b a) e 0 <
< b a.
f (a)
f (b)
Ento o mtodo de Newton-Raphson converge para uma soluo nica de f (x) = 0 em [a, b]
para qualquer escolha de x0 [a, b].
Alguns comentrios a respeito destas condies
so apropriados. Condies (1) e (2) garantem que
h somente uma nica soluo em [a, b]. Condio
(3) garante que o grfico de f (x) possui somente
uma nica concavidade em [a, b] (cncava ou convexa) e que f (x) montono neste intervalo. Finalmente, a condio (4) garante que a reta tangente a
f (x) em cada ponto extremo do intervalo intercepta
o eixo x dentro de [a, b]. Sucintamente, a condio
(4) exige que f (x) seja suficientemente inclinada em
[a, b] para que a raiz da reta tangente no ponto xn
esteja sempre dentro do intervalo considerado. A rpida convergncia do mtodo de Newton-Raphson,
uma vez que as condies acima so satisfeitas,
ilustrada na figura 4.4.
As condies deste teorema so tambm suficientes para garantir a convergncia do mtodo da
secante, desde que os dois valores iniciais x0 e x1 Figura 4.4: Convergncia do mtodo de Newton-Raphson.
estejam ambos dentro de [a, b]. Neste caso, contudo Dado x0 [a, b], o mtodo rapidamente converge para
a convergncia raiz pode se processar de duas for- limn xn = .
mas distintas, dependendo da escolha feita para a
ordem dos valores de x0 e x1 .
Um algoritmo que implemente o mtodo de Newton-Raphson deve ter como parmetros de entrada o(s)
nome(s) da(s) rotina(s) que calcula(m) f (x) e f (x), o valor de x0 que garantidamente satisfaa as condies
Autor: Rudi Gaelzer IFM/UFPel
74
acima e o(s) parmetro(s) de tolerncia do erro de truncamento do mtodo. Como critrio de convergncia,
pode-se adotar novamente um ou mais dos critrios (4.7a) ou (4.7b).
Para que se possa escrever uma rotina robusta, portanto, seria necessrio garantir as condies (1)
(4). Contudo, no h como verificar numericamente que as condies (2) e (3) esto sendo cumpridas para
qualquer funo f (x) apresentada rotina. Para compensar esta deficincia, uma estratgia consiste em
utilizar um algoritmo que mistura os mtodos de Newton-Raphson e da biseco. Sempre que a n + 1-sima
iterao esteja dentro do intervalo [a, b], realiza-se nova iterao usando o mtodo de Newton. Porm, se
xn+1 estiver fora de [a, b] ou se |f (xn+1 )| no estiver diminuindo rpido o suficiente, calcula-se a prxima
iterao usando o mtodo da biseco. O programa 4.5 implementa justamente este tipo de algoritmo em
Fortran 95.
Programa 4.4: Utiliza uma combinao dos mtodos de Newton-Raphson e da biseco para encontrar uma raiz
dentro do intervalo fornecido.
! SUBROTINA NEWTON_BISEC
! Busca uma r a i z da f u n c a o F(X) a t r a v e s de uma combinacao dos metodos de
!
NewtonRaphson e da b i s e c c a o .
! Argumentos de e n t r a d a
! F_DFDX: Nome da s u b r o t i n a que r e t o r n a os v a l o r e s de F(X) e F (X) .
! x1 , x2 : Dois v a l o r e s i n i c i a i s para o i n i c i o da i t e r a c a o .
! ERRABS: Primeiro c r i t e r i o de parada . Se ABS(F(Xn) ) <= FTOL,
!
e n t a o Xn e a c e i t o como r a i z
! ERRREL: Segundo c r i t e r i o de parada : e r r o r e l a t i v o .
!
Se ABS(Xn Xn1) <= XTOLABS(Xn) , e n t a o Xn e a c e i t o como r a i z .
! NTOL: Numero maximo de i t e r a c o e s a d m i t i d a s .
! Argumentos de s a i d a
! RAIZ : Melhor e s t i m a t i v a para a r a i z .
! IFLAG : Um i n t e i r o ,
!
= 2, Metodo f a l h o u . Nao e x i s t e r a i z em [ x1 , x2 ] .
!
= 1, Metodo f a l h o u . Nenhuma r a i z f o i e n c o n t r a d a em NTOL
!
i t e r a c o e s . O u l t i m o v a l o r e n c o n t r a d o para X e r e t o r n a d o .
!
= 0 , Encerrou d e v i d o ao p r i m e i r o c r i t e r i o de parada ou por novas
!
i t e r a c o e s nao a l t e r a r e m o r e s u l t a d o .
!
= 1 , Encerrou d e v i d o ao segundo c r i t e r i o de parada .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 8 .
! ( Baseado na f u n c a o r t s a f e do Numerical R e c i p e s ) .
!
subroutine newton_bisec ( f_dfdx , x1 , x2 , e r r a b s , e r r r e l , n t o l , r a i z , i f l a g )
integer , intent ( in )
: : ntol
r e a l ( kind=dp ) , intent ( in )
: : x1 , x2 , e r r a b s , e r r r e l
integer , intent ( out )
:: iflag
r e a l ( kind=dp ) , intent ( out ) : : r a i z
INTERFACE
subroutine f_dfdx ( x , fx , dfdx )
use Modelos_Computacionais_Dados
r e a l ( kind=dp ) , intent ( in )
:: x
r e a l ( kind=dp ) , intent ( out ) : : fx , dfdx
end subroutine f_dfdx
END INTERFACE
integer
:: j
r e a l ( kind=dp ) : : df , dx , dxold , f , fh , f l , temp , xh , x l
c a l l f_dfdx ( x1 , f l , d f )
c a l l f_dfdx ( x2 , fh , d f )
i f ( f l f h > 0 . 0 _dp) then
i f l a g = 2
return
end i f
i f ( f l == 0 . 0 _dp) then
r a i z= x1
Autor: Rudi Gaelzer IFM/UFPel
75
i f l a g= 0
return
e l s e i f ( f h == 0 . 0 _dp) then
r a i z= x2
i f l a g= 0
return
e l s e i f ( f l < 0 . 0 _dp) then ! O r i e n t e o i n t e r v a l o t a l que f ( x1 ) < 0 .
x l= x1
xh= x2
else
xh= x1
x l= x2
end i f
r a i z= 0 . 5 ( x1 + x2 )
dxold= abs ( x2 x1 )
dx= dxold
c a l l f_dfdx ( r a i z , f , d f )
do j= 1 , n t o l
! Laco s o b r e o numero p e r m i t i d o de i t e r a c o e s .
i f ( ( ( r a i z xh ) dff ) ( ( r a i z x l ) dff ) >= 0 . 0 _dp & ! Se a i t e r a c a o e s t i v e r
. o r . abs ( 2 . 0 f ) > abs ( dxold d f ) ) then
! f o r a de [ x1 , x2 ] ,
dxold= dx
! ou s e nao e s t i v e r
dx= 0 . 5 ( xh x l )
! c o n v e r g i n d o rapidamente ,
r a i z= x l + dx
! use b i s e c c a o .
i f ( x l == r a i z ) then
i f l a g= 0
return
end i f
e l s e ! I t e r a c a o e s t a d e n t r o de [ x1 , x2 ] .
dxold= dx
dx= f / d f
temp= r a i z
r a i z= r a i z dx
i f ( temp == r a i z ) then
i f l a g= 0
return
end i f
end i f
i f ( abs ( f ) <= e r r a b s ) then
! Primeiro c r i t e r i o de parada .
i f l a g= 0
return
end i f
i f ( abs ( dx ) <= e r r r e l abs ( r a i z ) ) then ! Segundo c r i t e r i o de parada .
i f l a g= 1
return
end i f
c a l l f_dfdx ( r a i z , f , d f )
i f ( f < 0 . 0 _dp) then
x l=r a i z
else
xh=r a i z
end i f
end do
i f l a g = 1
return
end subroutine newton_bisec
Utilizando a rotina newton_bisec para encontrar a raiz x1 de p3 (x) dentro do intervalo [1, 2], com
errabs= 0, errrel= 1010 e ntol= 50, obteve-se as seguintes iteraes:
w0 = 1.50000000000000
Autor: Rudi Gaelzer IFM/UFPel
76
Pode-se notar que com somente 5 iteraes, todas as casas decimais disponveis para uma varivel de dupla
preciso foram obtidas.
4.3
Os mtodos discutidos at este momento permitem a obteno de uma raiz real isolada uma vez que uma
aproximao prvia da raiz ou outra informao so conhecidas. A informao prvia pode ser, por exemplo,
o intervalo onde se sabe que um nmero mpar de razes reside, como no caso do mtodo da biseco.
Estes mtodos no so muito satisfatrios quando todos os zeros de uma funo so requeridos ou
quando boas aproximaes iniciais no esto disponveis. Outra evidente limitao dos mtodos at agora
apresentados consiste na obteno unicamente de razes reais da funo. Muitos problemas em fsica,
engenharia, matemtica ou outro campo de cincias naturais e exatas exigem o conhecimento tambm de
razes complexas de funes analticas. Uma classe muito til de funes onde todas estas limitaes so
evidentes a dos polinmios, da qual a funo p3 (x), apresentada em (4.2) faz parte. Das trs razes de
p3 (x), somente uma (x1 ) real, enquanto as outras duas (x2 e x3 ) so complexas. Contudo, os mtodos
apresentados possibilitaram somente a obteno de x1 .
Nesta seo, alguns mtodos desenvolvidos para o clculo numrico de razes complexas de funes
analticas sero abordados. Particular nfase ser concedida ao Mtodo de Mller e uma descrio sucinta
ser realizada acerca de mtodos modernos que utilizam propriedades matemticas oriundas da teoria de
funes analticas.
4.3.1
O mtodo de Mller
Este mtodo relativamente recente, desenvolvido inicialmente por D. E. Mller [10], tem sido empregado
em diversas aplicaes distintas com bastante sucesso. Este mtodo pode ser usado para descobrir qualquer
nmero pr-fixado de razes, reais ou complexas, de uma funo analtica arbitrria. O mtodo iterativo,
converge quase quadraticamente na vizinhana de uma raiz, no requer a forma analtica da derivada da
funo e obtm tanto razes reais quanto complexas, mesmo quando estas so mltiplas.
Este mtodo global, no sentido de que o usurio no necessita fornecer uma aproximao inicial. Nesta
seo o mtodo ser apresentado, omitindo qualquer discusso a respeito da sua convergncia, e uma rotina
que possibilita a obteno de razes tanto reais quanto complexas ser tambm includa. O problema de
encontrar as todas as razes de um polinmio ter uma ateno especial, uma vez que este problema surge
com freqncia em todos os ramos das cincias naturais e exatas.
O mtodo de Mller uma extenso do mtodo da secante (seo 4.2.3). Para relembrar, no mtodo
da secante so fornecidas duas aproximaes iniciais (xi e xi1 ) para a soluo da equao f (x) = 0, sendo
obtida uma terceira aproximao (xi+1 ) (Eq. 4.6). Esta aproximao consiste simplesmente na raiz da reta
secante que passa pelos pontos {xi , f (xi )} e {xi1 , f (xi1 )}. No mtodo de Mller, so fornecidos 3 pontos:
{xi2 , f (xi2 )}, {xi1 , f (xi1 )} e {xi , f (xi )}, sendo a prxima aproximao raiz, xi+1 , obtida como uma
raiz da parbola que cruza os 3 pontos anteriores. Este mtodo est ilustrado na figura 4.5.
Para interpolar a parbola p(x):
p(x) = ax2 + bx + c
com a funo f (x) nos trs pontos apresentados, basta determinar o valor das constantes a, b e c de tal
forma que p(x) corta f (x) nestes pontos, como apresentado na figura 4.5. Uma maneira equivalente de
escrever p(x) a seguinte:
p(x) = f (xi ) + f [xi , xi1 ] (x xi ) + f [xi , xi1 , xi2 ] (x xi ) (x xi1 ) ,
(4.10a)
sendo
f (x1 ) f (x0 )
x1 x0
f [x1 , x2 ] f [x0 , x1 ]
f [x0 , x1 , x2 ] =
,
x2 x0
f [x0 , x1 ] =
77
expresses particulares de
f [x0 ] = f (x0 )
f [x1 , . . . , xk ] f [x0 , . . . , xk1 ]
f [x0 , . . . , xk ] =
,
xk x0
onde f [x0 , . . . , xk ] a k-sima diferena dividida de f (x) nos pontos x0 , . . . , xk . Pode-se verificar
facilmente que (4.10a) realmente interpola f (x) nos trs pontos escolhidos. Uma vez que
2
(4.10b)
ci
(4.11)
2f (xi )
ci
c2i
Se o sinal de (4.11) for escolhido de tal forma que o denominador seja o maior possvel1 e o valor de
resultante for tomado como a aproximao xi+1 da raiz de f (x), ento a frmula do mtodo de Mller fica:
xi+1 = xi
1 Isto
2f (xi )
ci
(4.12)
, de tal forma que no possa ocorrer cancelamento, o que facilmente poderia gerar erros de arredondamento.
78
hi+1 = 2f (xi ) / ci
xi+1 = xi + hi+1 .
6. Calcule
f (xi+1 ) .
(Erro absoluto).
2
onde, conforme mencionado, o sinal do denominador de (4.12) deve ser escolhido de forma adequada.
Uma vez obtido xi+1 , o processo ento repetido utilizando-se xi1 , xi e xi+1 em (4.12) para se obter
xi+2 e assim consecutivamente. Se os zeros obtidos a partir de (4.12) forem reais, ento a situao ilustrada
graficamente pela figura 4.5. Contudo, as razes podem ser complexas mesmo que as aproximaes iniciais
sejam reais, bastando para isso que c2i 4f (xi ) f [xi , xi1 , xi2 ] < 0. Isto significa que mesmo que a raiz
procurada seja real, aproximaes intermedirias podem ser complexas. Porm, medida que as iteraes
se aproximam da raiz real, a parte imaginria de xi+1 tende a zero. O algoritmo 4.3 apresenta a seqncia
de passos necessria para implementar o mtodo de Mller.
O programa 4.5 implementa o mtodo de Mller, conforme delineado no algoritmo 4.3, em uma subrotina
em Fortran 95. O mtodo de Mller encontra uma raiz de cada vez. Para encontrar mais de uma raiz e
evitar que as iteraes venham a convergir para valores previamente encontrados, o programa 4.5 possui
uma subrotina interna que implementa a tcnica conhecida como deflao. Se, por exemplo, uma raiz 1
foi previamente obtida, a rotina calcula o prximo zero no a partir da funo f (x) original, mas a partir
da funo deflacionada ou reduzida
f (x)
.
f1 (x) =
x 1
Desta forma, se a raiz 1 for nica, limx1 f1 (x) = 1 e o mtodo dever convergir para uma raiz 2 distinta.
Pode acontecer de 2 = 1 se esta raiz for dupla. contudo, a funo ser novamente reduzida para cada nova
raiz encontrada. Assim, se os zeros 1 , 2 , . . . , r foram previamente obtidos, o prximo zero ser obtido a
Autor: Rudi Gaelzer IFM/UFPel
79
f (x)
.
(x 1 ) (x 2 ) (x r )
! SUBROTINA MULLER
! Encontra as r a i z e s de uma f u n c a o a n a l i t i c a u n i v o c a p e l o Metodo de M u l l e r .
!
! Argumentos :
!
f n : Funcao a n a l i t i c a u n i v o c a f ( z ) c u j a s r a i z e s sao p r o c u r a d a s ( Entrada )
!
n : Numero t o t a l de r a i z e s a serem e n c o n t r a d a s .
( Entrada )
!
nprev : Numero de r a i z e s p r e v i a m e n t e c o n h e c i d a s .
( Entrada )
!
maxit : Numero maximo de chamadas da f u n c a o f n ( z ) por r a i z .
( Entrada )
!
e r r a b s : Primeiro c r i t e r i o de parada .
( Entrada )
!
I t e r a c o e s sao i n t e r r o m p i d a s s e a b s ( f n ( z ) ) . l t . e r r a b s .
!
e r r r e l : Segundo c r i t e r i o de parada .
( Entrada )
!
I t e r a c o e s sao i n t e r r o m p i d a s s e a b s ( h ) . l t e r r r e l a b s ( z ) .
!
z e r o s : Vetor que contem as r a i z e s de f n ( z ) .
( Entrada / Sa i da )
!
z e r o s ( 1 ) , . . . , z e r o s ( nprev ) contem as r a i z e s p r e v i a m e n t e c o n h e c i d a s .
!
z e r o s ( nprev +1) , . . . , z e r o s ( n ) contem as r a i z e s e n c o n t r a d a s .
!
f a t o r : (OPCIONAL) Fator m u l t i p l i c a t i v o para v a l o r e s i n i c i a i s . ( Entrada )
!
Para z= z e r o s ( i ) , os 3 p r i m e i r o s p o n t o s para a j u s t a r a p a r a b o l a sao
!
z , z + f a t o r h e z f a t o r h , sendo h um v a l o r f i x o .
!
f n r e a l : (OPCIONAL) V a r i a v e l l o g i c a para r a i z e s r e a i s .
( Entrada )
!
f n r e a l = . t r u e . s e t o d a s as r a i z e s sao r e a i s .
!
f n r e a l= . f a l s e . s e ha r a i z e s c o m p l e x a s ( v a l o r padrao ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 9 .
!
subroutine m u l l e r ( fn , n , nprev , maxit , e r r a b s , e r r r e l , z e r o s , f a t o r , f n r e a l )
!
l o g i c a l , optional , intent ( in )
: : fnreal
integer , intent ( in )
: : n , nprev , maxit
r e a l ( kind= dp ) , intent ( in )
: : errabs , e r r r e l
r e a l ( kind= dp ) , optional , intent ( in )
: : fator
complex ( kind= dp ) , dimension ( n+nprev ) , intent ( inout ) : : z e r o s
integer
: : i , n_it
r e a l ( kind= dp )
: : eps1 , eps2 , t e s t e , h_ini= 0 . 5 _dp
complex ( kind= dp ) : : c , den , d i v d f 1 , d i v d f 2 , dvdf1p , f z r
complex ( kind= dp ) : : f z r d f l , f z r p r v , h , hprev , z e r o , s q r
INTERFACE
function f n ( z )
use Modelos_Computacionais_Dados
complex ( kind= dp ) , intent ( in ) : : z
complex ( kind= dp )
: : fn
end function f n
END INTERFACE
!
Inicializao .
e p s 1 = max( e r r r e l , 1 0 . 0 _dp e p s i l o n ( 1 . 0 _dp ) )
e p s 2 = max( e r r a b s , 1 0 . 0 _dp t i n y ( 1 . 0 _dp ) )
i f ( p r e s e n t ( f a t o r ) ) h_ini= f a t o r h_ini
!
l _ r a i z e s : do i = nprev + 1 , n
n_it = 0
!
C a l c u l e os t r e s p r i m e i r o s v a l o r e s da i esima r a i z como
!
z e r o s ( i ) + h , z e r o s ( i ) h , z e r o s ( i )
zero = zeros ( i )
h = h_ini z1
Autor: Rudi Gaelzer IFM/UFPel
80
c a l l d f l a c ( z e r o + h , i , n_it , f z r , dvdf1p , z e r o s )
c a l l d f l a c ( z e r o h , i , n_it , f z r , f z r p r v , z e r o s )
hprev = 2.0_dph
dvdf1p = ( f z r p r v dvdf1p ) / hprev
c a l l d f l a c ( z e r o , i , n_it , f z r , f z r d f l , z e r o s )
l _ i t e r : do
divdf1 = ( f z r d f l f z r p r v )/h
d i v d f 2 = ( d i v d f 1 dvdf1p ) / ( h + hprev )
hprev = h
dvdf1p = d i v d f 1
c = d i v d f 1 + h d i v d f 2
s q r = c c 4 . 0 _dp f z r d f l d i v d f 2
i f ( p r e s e n t ( f n r e a l ) . and . ( r e a l ( s q r ) < 0 . 0 _dp ) ) s q r = ( 0 . 0 _dp , 0 . 0 _dp)
sqr = sqrt ( sqr )
i f ( r e a l ( c ) r e a l ( s q r )+aimag ( c ) aimag ( s q r ) < 0 . 0 _dp) then
den = c s q r
else
den = c + s q r
end i f
h = 2.0_dp f z r d f l / den
fzrprv = f z r d f l
zero = zero + h
i f ( n_it > maxit ) e x it l _ i t e r
l _ d i v : do
c a l l d f l a c ( z e r o , i , n_it , f z r , f z r d f l , z e r o s )
!
Verifique a convergencia .
t e s t e= abs ( h ) e p s 1 abs ( z e r o )
i f ( t e s t e < 0 . 0 _dp) e x i t l _ i t e r
i f (max( abs ( f z r ) , abs ( f z r d f l ) ) < e p s 2 ) e x it l _ i t e r
!
V e r i f i q u e s e v a l o r i t e r a d o d i v e r g e da r a i z .
i f ( abs ( f z r d f l ) < 1 0 . 0 _dp abs ( f z r p r v ) ) e x i t l _ d i v
h = 0 . 5 _dph
zero = zero h
end do l _ d i v
end do l _ i t e r
zeros ( i ) = zero
end do l _ r a i z e s
return
CONTAINS
subroutine d f l a c ( z e r o , i , n_it , f z e r o , f z r d f l , z e r o s )
integer , intent ( in )
:: i
integer , intent ( inout )
: : n_it
complex ( kind= dp ) , intent ( in )
: : zero
complex ( kind= dp ) , intent ( out )
: : fzero , f z r d f l
complex ( kind= dp ) , dimension ( i ) , intent ( inout ) : : z e r o s
integer
:: j
complex ( kind= dp ) : : den
!
n_it = n_it + 1
f z e r o = fn ( zero )
fzrdfl = fzero
do j = 2 , i
den = z e r o z e r o s ( j 1)
i f ( abs ( den ) == 0 . 0 _dp) then
z e r o s ( i ) = z e r o 1 . 0 0 1 _dp
return
else
f z r d f l = f z r d f l / den
end i f
Autor: Rudi Gaelzer IFM/UFPel
81
end do
return
end subroutine d f l a c
end subroutine m u l l e r
Usando a rotina muller para encontrar as trs razes de p3 (x) obteve-se os seguintes resultados.
Com errabs= 0 e errrel= 0.1d0, os resultados so:
x1 = (0.665243809187657, 0.556608124056967)
x2 = (0.662340508718597, 0.562310707038522)
x3 = (1.32447378321995, 1.727695801886954E 004)
com erros relativos iguais a
7.323503893991807E 003, 4.172563925890038E 005, 2.257958628007346E 004
respectivamente.
Com errabs= 0 e errrel= 1.0d-5, os resultados so:
x1 = (0.662358978622373, 0.562279512062300)
x2 = (0.662358978622373, 0.562279512062301)
x3 = (1.32471795724475, 2.958228394578794E 031)
com erros relativos iguais a
1.152237512587846E 015, 0.000000000000000E + 000, 2.233100546724340E 031
respectivamente.
Com errabs= 0 e errrel= 1.0d-9, os resultados so:
x1 = (0.662358978622373, 0.562279512062301)
x2 = (0.662358978622373, 0.562279512062301)
x3 = (1.32471795724475, 0.000000000000000E + 000)
com erros relativos iguais a
0.000000000000000E + 000, 0.000000000000000E + 000, 0.000000000000000E + 000
respectivamente.
Ou seja, observa-se que o mtodo rapidamente converge para os valores exatos das razes.
82
Captulo 5
Introduo
Neste captulo sero discutidos alguns mtodos de soluo numrica de Equaes Diferenciais Ordinrias
(ODE) que fazem parte de Problemas de Valor Inicial (PVI).
Em cincias exatas ou naturais, grande parte dos problemas existentes so descritos por equaes diferenciais, cujas solues gerais devem ser particularizadas por condies iniciais e/ou condies de contorno.
Quando ocorrem somente as primeiras, diz-se que o problema de valor inicial.
Um problema de valor inicial pode ser definido da seguinte forma. Sendo x
x0 um parmetro que
varia de forma independente no problema e y(x) uma funo da varivel x, a funo y(x) ser determinada,
em um problema de valor inicial, a partir da soluo da equao diferencial ordinria de ordem n
F y (n) (x), y (n1) (x), . . . , y (x), y(x), x = f (x),
(5.1a)
(5.1b)
(5.1c)
..
.
..
.
(5.1d)
(5.1e)
sendo F ( ) um funcional qualquer de y(x) e suas derivadas at a ordem n, f (x) uma funo de x,
g0 ( ) , . . . , gn ( ) funcionais das condies iniciais y (x0 ) , . . . , y (n1) (x0 ) e a0 , . . . , an constantes. Em
problemas realsticos na fsica, geralmente os funcionais g0 , . . . , gn so lineares em y (x0 ) , . . . , y (n1) (x0 )
mas o funcional F no linear em y(x), . . . , y (n) (x) .
5.2
(5.2a)
(5.2b)
cuja soluo y(x) = a0 exx0 . Para discretizar este PVI de uma forma trivial, considera-se a definio de
uma derivada e omite-se o smbolo de limite:
y (x)
y (x + h) y(x)
,
h
83
84
sendo h um pequeno incremento em x. Desta forma, possvel afirmar que a soluo no ponto x + h
obtida a partir do conhecimento da soluo em x atravs de
y (x + h) = (1 + h) y(x).
Partindo-se ento do valor inicial y0 = a0 , obtem-se y1 = y (x + h)=(1 + h) y0 =(1 + h) a0 , y2 = y (x + 2h) =
2
n
(1 + h) y1 = (1 + h) a0 , etc. Por induo, pode-se deduzir que yn = (1 + h) a0 . Escrevendo agora o nsimo valor de x como xn = x0 + nh e chamando xn x e yn y, temos
h=
x x0
. Portanto, y =
n
1+
x x0
n
a0 .
z n
= ez ,
n
n
resulta que a soluo discretizada do PVI (5.2), quando n , reduz-se a y = a0 exx0 , a qual justamente
a sua soluo. Contudo, neste limite o resultado dever estar bastante contaminado pela propagao de
erros de arredondamento; alm disso, deseja-se buscar mtodos que forneam resultados mais acurados j
para as primeiras iteraes.
Alguns exemplos de equaes de diferenas finitas e suas solues so
lim
1+
yn+1 yn = 1
yn+1 yn = n
yn+1 (n + 1) yn = 0
yn = n + c
yn =
n (n 1)
+c
2
yn = cn!
Vamos considerar com algum detalhe uma equao de diferenas finitas linear de ordem N com coeficientes constantes
yn+N + aN 1 yn+N 1 + + a1 yn+1 + a0 yn = 0.
(5.3)
Esta equao deve possuir N solues linearmente independentes, as quais so da forma yn = n , n, sendo
uma constante. Substituindo esta soluo em (5.3) resulta
n+N + aN 1 n+N 1 + + a1 n+1 + a0 n = 0.
Dividindo-se por n , resulta a equao caracterstica
N + aN 1 N 1 + + a1 + a0 = 0,
(5.4)
3 2 2 + 2 = 0,
yn = c1 1n + c2 (1) + c3 2n .
Sendo agora dados y0 = 0, y1 = 1 e y2 = 1, ento
y0 = c1 + c2 + c3 = 0
y1 = c1 c2 + 2c3 = 1
y2 = c1 + c2 + 4c3 = 1
Autor: Rudi Gaelzer IFM/UFPel
85
5.3
1/3.
(5.5a)
y (x0 ) = y0 .
(5.5b)
A funo f (x, y) pode ser linear ou no linear em y, mas assumido que esta diferencivel em qualquer
ordem em x e y. Se f /y for contnua no domnio de interesse, ento a soluo de (5.5) nica.
Sendo ento y(x) a soluo exata de (5.5), pode-se desenvolver y(x) em uma srie de Taylor em torno
do ponto x = x0 :
1
2
(5.6)
y(x) = y0 + (x x0 ) y (x0 ) + (x x0 ) y (x0 ) + .
2!
O valor de y0 suposto dado, mas as derivadas na srie acima no so conhecidas uma vez que y(x)
desconhecido. Contudo, dada a hiptese de f (x, y) ser diferencivel, as derivadas de (5.6) podem ser
obtidas tomando-se a derivada total de (5.5a) em relao a x, lembrando sempre que y funo de x.
Assim, obtem-se para as primeiras derivadas:
y =f
df
y =
= fx + fy y
dx
= fx + fy f
y
d2 f
= fxx + fxy f + fyx f + fyy f 2 + fy fx + fy2 f
dx2
= fxx + 2fxy f + fyy f 2 + fy fx + fy2 f.
Continuando desta maneira, pode-se expressar qualquer derivada de y em termos de f (x, y) e suas derivadas
parciais. Contudo, para derivadas de mais alta ordem a expresso resultante torna-se cada vez mais extensa.
Por razes prticas, portanto, deve-se limitar o nmero de termos em (5.6) a um valor pequeno e
esta limitao restringe o valor de x para o qual a srie (5.6) truncada resulta em um valor para y(x)
razoavelmente acurado. Assumindo que a srie (5.6) truncada fornece uma boa aproximao para um passo
de comprimento h, isto , x x0 = h, pode-se calcular y em x0 + h, recalcular suas derivadas y , y , etc, em
x = x0 + h e ento usar (5.6) novamente para calcular y em x0 + 2h; e assim sucessivamente. Prosseguindo
desta maneira, obtem-se uma conjunto discreto de valores {yn } que so aproximaes da soluo correta
nos pontos xn = x0 + nh (n = 0, 1, 2, . . . ). No restante deste captulo, a soluo exata de (5.5) no ponto xn
ser denotada por y (xn ), enquanto que a soluo aproximada ser denotada por yn .
Para formalizar este procedimento, introduz-se o operador
Tk (x, y) = f (x, y) +
h2
hk1 (k1)
h
f (x, y) + f (x, y) + +
f
(x, y) , k = 1, 2, . . . ,
2!
3!
k!
(5.7)
onde f (j) (x, y) denota a j-sima derivada total de f (x, y) com relao a x. Assim, truncando-se a srie
(5.6) at o k-simo termo, pode-se escrever:
y(x0 + h) y0 + h Tk x0 , y (x0 )
(5.8a)
O erro local cometido ao se tormar o passo de xn para xn+1 utilizando o mtodo de Taylor na ordem k,
fornecido pelo prximo termo da srie de Taylor truncada:
E=
hk+1 (k+1)
hk
y
() =
f (k) , y () , xn < < xn + h.
(k + 1)!
(k + 1)!
(5.8b)
86
Neste caso, diz-se que o algoritmo de Taylor de ordem k. O algoritmo 5.1 implementa o mtodo de
Taylor.
5.3.1
O mtodo de Euler
Arbitrando k = 1 em (5.8a,b), obtem-se o mtodo de Euler e o seu erro local. Seguindo a representao
apresentada no algoritmo 5.1, a frmula para o mtodo de Euler fica:
yn+1 = yn + f (xn , yn ) ,
1
E = f (xn , yn ) h2 , xn < < xn+1 .
2
(5.9a)
(5.9b)
Para este mtodo, existe uma outra estimativa de erro que pode ser denominada de erro global ou erro
de convergncia. Trata-se de um limite superior no erro cometido ao se utilizar repetidas vezes este mtodo
com um passo fixo h, variando x entre x0 e algum limite superior x = b. Sendo xn = x0 + nh, este erro
mensurado como
en = y (xn ) yn ,
isto , o erro realizado no processo de discretizao empregado pelo mtodo de Euler. Nesta definio, yn
o valor aproximado dado pelo mtodo de Euler (Eq. 5.9a), enquanto que y (xn ) a soluo exata do PVI
no ponto xn . Uma estimativa mxima para en dada pelo Teorema (5.3.1) abaixo.
Teorema 5.1
Seja yn a soluo aproximada de (5.5) obtida pelo Mtodo de Euler (5.9). Se a soluo exata de (5.5),
y = y(x), possui sua derivada segunda contnua no intervalo [x0 , b] e se neste intervalo as inegualdades
|fy (x, y)|
L,
|y (x)| < Y
hY (xn x0 )L
e
1 .
2L
5.4
O Mtodo de Runge-Kutta
O Mtodo de Euler no muito til para a soluo de problemas que demandam uma maior acurcia;
a sua utilidade surge quando o programador necessita ter somente uma idia da ordem de grandeza e da
Autor: Rudi Gaelzer IFM/UFPel
87
tendncia da soluo de (5.5). Por outro lado, o algoritmo de Taylor (5.1) para uma ordem k alta tambm
impraticvel, pois necessita do conhecimento das derivadas de ordem k 1 de f (x, y).
O Mtodo de Runge-Kutta foi desenvolvido com o intuito de obter maior acurcia que o Mtodo de Euler
e, ao mesmo tempo, evitar a necessidade de se conhecer derivadas de ordens altas. Para tanto, o mtodo faz
uso da estratgia de calcular os valores de f (x, y) em pontos intermedirios para cada passo da integrao
de (5.5).
A deficincia no Mtodo de Euler se deve ao fato de que a frmula (5.9a) avana a soluo por um
intervalo h usando somente informaes somente no incio do intervalo, isto , no ponto x = xn . O mtodo
no utiliza nenhuma outra informao sobre a variao de f (x, y) no intervalo [xn , xn+1 ]. O mesmo pode
ser dito do algoritmo de Taylor em qualquer ordem.
5.4.1
Numa tentativa de remediar esta deficincia, pode-se realizar primeiramente um passo tentativo at o
ponto mdio no intervalo [xn , xn+1 ] e ento utilizar os valores de x e y neste ponto mdio para computar o
passo real ao longo de todo o intervalo de comprimento h. Esta sequncia de 2 passos intermedirios para
um passo completo quantitativamente descrito pelo sistema de equaes
k1 = hf (xn , yn )
k2 = hf (xn + h/2, yn + k1/2)
yn+1 = yn + k2 + O h3 .
Como indicado no termo de erro, o uso do ponto mdio torna o mtodo acurado em segunda ordem. A figura
5.1 ilustra a aplicao deste mtodo. J o algoritmo 5.2 mostra como este mtodo pode ser implementado
em um programa de computador.
Algoritmo 5.2 O Mtodo de Runge-Kutta de ordem 2.
Dado o PVI
y = f (x, y) , y(x0 ) = y0 ,
aproximaes yn para y (xn ), sendo xn = x0 + nh para um passo h fixo e n = 0, 1, . . . , so obtidas usando-se
a seguinte sequncia de passos:
1. Calcule k1 dado por
k1 = hf (xn , yn ) .
1
1
xn + h, yn + k1 .
2
2
88
O erro local do Mtodo de Runge-Kutta de ordem 2 O h3 , ao passo que o erro local do Mtodo
de Euler O h2 . Isto significa que possvel usar um passo h com o primeiro mtodo para se obter a
mesma acurcia do segundo. O preo que se paga que para cada passo h o funcional f (x, y) calculado
2 vezes, no incio e no ponto mdio do intervalo. Expresses com erros ainda menores podem ser obtidos
utilizando-se informaes de derivadas de ordens mais altas no ponto mdio. Contudo, em vez de se utilizar
esta complicao adicional, o uso prtico recomenda o emprego do Mtodo de Runge-Kutta de ordem 4
(seo 5.4.2).
5.4.2
Talvez o mtodo mais empregado para a soluo de PVIs, o Mtodo de Runge-Kutta de quarta ordem
faz uso das informaes fornecidas por f (x, y) em 3 pontos (ou frmulas) intermedirios antes de calcular
a aproximao para yn+1 .
Sem demonstrao, as frmulas envolvidas neste mtodo so:
k1 = hf (xn , yn )
(5.10a)
(5.10b)
(5.10c)
k4 = hf (xn + h, yn + k3 )
1
yn+1 = yn + (k1 + 2k2 + 2k3 + k4 ) + O h5 .
6
(5.10d)
(5.10e)
O mtodo de ordem 4 requer 4 clculos de f (x, y) por passo h. Isto significa que este mtodo deve ser
superior que o mtodo de ordem 2 se o valor de h neste caso puder ser, pelo menos, 2 vezes maior que o
valor para o mtodo de ordem 2, para se obter a mesma acurcia. Caso contrrio, melhor usar o algoritmo
5.2 ou algum outro mtodo de soluo de um PVI. A figura 5.2 ilustra a aplicao do mtodo e o algoritmo
5.3 mostra a sua implementao.
5.5
As frmulas (5.10a-e) para a aplicao do Mtodo de Runge-Kutta de quarta ordem supe a existncia
de um PVI simples do tipo (5.5) o qual consiste em uma equao diferencial de primeira ordem (linear ou
no linear) com uma condio inicial simples. Contudo, grande parte dos problemas que surgem em cincias
exatas e naturais envolvem PVIs compostos por uma ou mais equaes diferenciais de segunda ordem ou
ordens mais altas, com um correspondente nmero de condies iniciais. Desejamos ento estender o mtodo
apresentado na seo 5.4.2 (ou qualquer outro) para esta situao mais geral.
Para exemplificar a generalizao do mtodo, vamos considerar o caso de uma ODE de ordem N com N
condies iniciais. A extenso para o caso onde h mais de uma equao diferencial, inclusive de diferentes
ordens, segue diretamente do exemplo apresentado. O PVI a ser considerado pode ser escrito a partir de
(5.1) como
y (N ) = f x, y(x), y (x), , y (N 1) (x) ,
(5.11a)
(5.11b)
Verso: 22 de julho de 2009
89
k1 = hf (xn , yn ) .
1
1
xn + h, yn + k1 .
2
2
1
1
xn + h, yn + k2 .
2
2
1
(k1 + 2k2 + 2k3 + k4 ) .
6
..
.
(5.11c)
(5.11d)
(5.11e)
(5.12a)
y2 (x) = y3 (x)
(5.12b)
y3 (x) = y4 (x)
....
..
(5.12c)
yN 1 (x) = yN (x),
(5.12d)
(5.12e)
(5.12f)
(5.12g)
(5.12h)
Ou seja, ao invs procurarmos uma forma do mtodo de Runge-Kutta para resolver 1 ODE de ordem N , o
que iremos fazer resolver N equaes de ordem 1.
Autor: Rudi Gaelzer IFM/UFPel
90
C
k
y y 2
m
m
y(0) = y0
y(0)
= v0 .
Definindo y1 (t) = y(t) e y 1 (t) = y2 (t), o PVI pode ser escrito a partir de (5.12) como:
y 1 = y2
y 2 = g
C
k
y1 y22
m
m
y1 (0) = y0
y2 (0) = v0 ,
ou seja, em vez de resolvermos 1 equao de 2 ordem, vamos resolver 2 equaes de 1 ordem.
Quando o PVI for composto por mais de uma ODE de diferentes ordens, busca-se reduzir este sistema
sempre a um sistema de primeira ordem. Neste caso, ao invs de somente uma equao de primeira ordem
do tipo (5.12e), teremos um sistema de N equaes do tipo:
y1 = f1 (x, y1 , y2 , , yn )
(5.13a)
y2 = f2 (x, y1 , y2 , , yn )
.. ..
. .
(5.13b)
yN = fN (x, y1 , y2 , , yn ) ,
(5.13c)
onde neste sistema j esto includas as equaes auxiliares (5.12ad). muitas vezes conveniente pensar
este sistema na forma vetorial,
y = f (x, y) ,
(5.13d)
onde y e f so vetores com N componentes cada.
A subrotina 5.1 implementa o Mtodo de Runge-Kutta de quarta ordem dado pelo algoritmo 5.3 em
Fortran 95. Nota-se que a subrotina resolve um sistema de EDOs de primeira ordem do tipo (5.13ac) ou
(5.13d).
Programa 5.1: Resolve um Problema de Valor Inicial usando o Mtodo de Runge-Kutta de quarta ordem.
! SUBROTINA RK4
! R e s o l v e um Problema de Valor I n i c i a l p e l o Metodo de RungeKutta
!
de q u a r t a ordem com p a s s o f i x o .
! Dados o v e t o r y ( : ) que contem as v a r i a v e i s e o v e t o r das d e r i v a d a s
!
dydx ( : ) no ponto x , a r o t i n a i n v o c a a s u b r o t i n a d e r i v s ( y , x , dydx )
!
que s e r a usada para avancar o v e t o r das s o l u c o e s y s a i ( : ) a t e o
!
ponto x + h .
!
! Argumentos de e n t r a d a :
!
y:
Vetor de forma assumida contendo as s o l u c o e s do PVI no ponto x .
!
dydx :
Vetor de forma assumida contendo as d e r i v a d a s de y no ponto x .
!
x:
Ponto i n i c i a l do i n t e r v a l o .
!
h:
Tamanho do p a s s o .
!
d e r i v s : S u b r o t i n a que c a l c u l a as d e r i v a d a s dydx no ponto x .
! Argumento de s a i d a :
!
y s a i : Vetor de forma assumida contendo as s o l u c o e s do PVI no ponto x + h .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : J u l h o / 2 0 0 9 .
! Obs : Baseada na s u b r o t i n a RK4 do Numerical R e c i p e s .
!
Autor: Rudi Gaelzer IFM/UFPel
91
ndice Remissivo
Erros
Fontes, 1
Nmeros, 1
Representao inteiros, 2
Representao reais, 3
92