Anda di halaman 1dari 107

Introduo Fsica Computacional

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.

Incio: Outubro de 2006.

Verso: 22 de junho de 2011

Apostila escrita com: Processador de Documentos LYX http://www.lyx.org/ http://wiki.lyx.org/LyX/LyX

Sumrio
Referncias Bibliogrcas 1 Representao de Nmeros e Erros 1.1 Fontes de erros e incertezas . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Representao de nmeros em diferentes bases . . . . . . . . . . . . . . 1.2.1 Representao de nmeros inteiros e converses de base . . . . . 1.2.2 Representao de nmeros reais e converses de base . . . . . . . 1.2.3 Converso de nmeros inteiros da base b para a base decimal . . 1.2.3.1 Algoritmo de Horner. . . . . . . . . . . . . . . . . . . . 1.2.3.2 Diviso de Runi. . . . . . . . . . . . . . . . . . . . . . 1.2.4 Converso de nmeros fracionrios da base b para a base decimal 1.2.4.1 Algoritmo de Horner. . . . . . . . . . . . . . . . . . . . 1.2.4.2 Diviso de Runi. . . . . . . . . . . . . . . . . . . . . . 1.3 Operaes com nmeros binrios . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Adio binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Subtrao binria . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Multiplicao binria . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Representao de nmeros em computadores digitais . . . . . . . . . . . 1.4.1 Representao de nmeros inteiros . . . . . . . . . . . . . . . . . 1.4.2 Representao de nmeros reais . . . . . . . . . . . . . . . . . . . 1.5 Erros na representao e na lgebra de ponto utuante . . . . . . . . . . 1.5.1 Preciso e acurcia . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2 Erros absoluto e relativo . . . . . . . . . . . . . . . . . . . . . . . 1.5.2.1 Erro absoluto . . . . . . . . . . . . . . . . . . . . . . . . 1.5.2.2 Erro relativo . . . . . . . . . . . . . . . . . . . . . . . . 1.5.3 Erros na representao: arredondamento e truncamento . . . . . 1.5.4 Nmero de dgitos signicativos . . . . . . . . . . . . . . . . . . . 1.5.5 Erros na lgebra de ponto utuante . . . . . . . . . . . . . . . . 1.5.5.1 Erros de arredondamento . . . . . . . . . . . . . . . . . 1.5.5.2 Erros de truncamento . . . . . . . . . . . . . . . . . . . 1.5.5.3 Anlise de erros de ponto utuante . . . . . . . . . . . 2 Derivao Numrica 2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Frmulas clssicas de diferena nita . . . . . . . . . . . . . . 2.2.1 Frmula de diferena adiantada (forward dierence) . 2.2.2 Frmula de diferena atrasada (backward dierence) . 2.2.3 Frmula de diferena centrada (centered dierence) . . 2.2.4 Frmula de 5 pontos . . . . . . . . . . . . . . . . . . . 2.3 Frmulas de diferenas nitas 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 . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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 27 27 27 27 28 28 29 30 30 30 30 30 30 31 31

ii

SUMRIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 38 38 40 40 41 42 42 43 43 43 44 45 45 47 47 49 50 52 53 54 54 55 55 61 69 69 71 71 71 72 75 78 80 84 84 91 91 91 93 94 94 95 96 96

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 Frmulas abertas estendidas . . . . . . . . . . . . . . . 3.2.5 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 de 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.1.1 Integrais denidas de Romberg . . . . . . . . 3.4.1.2 Integrais imprprias de Romberg . . . . . . . 3.4.2 Integrao automtica usando quadraturas gaussianas 3.4.3 Integrao adaptativa . . . . . . . . . . . . . . . . . . 4 Solues de Equaes No Lineares 4.1 Introduo . . . . . . . . . . . . . . . . . . 4.2 Mtodos iterativos para o clculo de razes 4.2.1 Mtodo da biseco . . . . . . . . 4.2.2 Mtodo da falsa posio . . . . . . 4.2.3 Mtodo da secante . . . . . . . . . 4.2.4 Mtodo de Newton-Raphson . . . 4.3 Razes complexas de funes analticas . . 4.3.1 O mtodo de Mller . . . . . . . . . . . reais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 Problemas de Valor Inicial [Em Construo] 5.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Equaes de diferenas nitas lineares . . . . . . . . 5.3 Integrao numrica por srie de Taylor . . . . . . . 5.3.1 O mtodo de Euler . . . . . . . . . . . . . . . 5.4 O Mtodo de Runge-Kutta . . . . . . . . . . . . . . 5.4.1 O Mtodo de Runge-Kutta de segunda ordem 5.4.2 O Mtodo de Runge-Kutta de quarta ordem . 5.5 Sistemas de equaes diferenciais . . . . . . . . . . .

. . . . . . . . . . . . . . . ou o . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mtodo do ponto . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . mdio . . . . . . . .

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Referncias Bibliogrcas
[1] Intel fortran compiler for linux, http://www.intel.com/software/products/compilers/in/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] P. L. DeVries, A rst course in computational physics, John Wiley & Sons, New York, 1994. [6] Rudi Gaelzer, Introduo ao Fortran 90/95, http://www.ufpel.edu.br/ rudi/grad/ModComp/Apostila/Apostila.html, Pelotas, November 2006, 138 + vi pp. [7] D. Goldberg, What every computer scientist should know about oating point arithmetic, ACM Computing Surveys 23 (1991), 548. [8] Sebastio Ccero Pinheiro Gomes, Mtodos Numricos: Teoria e Programao, FURG, Rio Grande, 1999, 190 pp. [9] Joe D. Homan, Numerical methods for engineers and scientists, second ed., Marcel Dekker, New York, 2001, 823 + xi pp. [10] Rubin H. Landau and Manuel Jos Pez Meji, Computational physics. Problem solving with computers, John Wiley & Sons, New York, 1997, 511 + xviii pp. [11] D. E. Mller, A method of solving algebraic equations using automatic computer, Mathematical Tables and Other Aids to Computation 10 (1956), 208215. [12] Tao Pang, An introduction to computational physics, second ed., Cambridge University Press, New York, 2006, 385 + xvi pp. [13] W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery, Numerical recipes in FORTRAN, second ed., Cambridge, New York, 1992, 999 pp. [14] , Numerical recipes in fortran 90, Fortran Numerical Recipes, vol. 2, Cambridge, New York, 1997, 552 pp.

[15] John R. Rice, Numerical Methods, Software, and Analysis, McGraw-Hill, New York, 1983, 483 + xii pp. [16] Germn Ramn Canahualpa Suazo, Apostila de Clculo Numrico, DME - IFM - UFPel, Pelotas, November 2004, 117 + vii pp. [17] 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

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 1

Representao de Nmeros e Erros


Neste captulo sero considerados aspectos bsicos a respeito do clculo numrico: a representao de nmeros inteiros e de ponto utuante em cdigo binrio e as fontes de erros que invariavelmente ocorrem quando se faz necessrio usar uma representao nita para representar um nmero ou uma funo matemtica que, em geral transcendental e/ou necessita de uma soma ou produto innito de nmeros para ser exatamente representado.

1.1

Fontes de erros e incertezas

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 nita 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 gura 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, nalmente, 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

Representao de nmeros em diferentes bases

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

1.2. Representao de nmeros em diferentes bases

d s d d d d d

'
c E

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

Representao de nmeros inteiros e converses de base

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 ca 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:
Tabela 1.1: Intervalos de valores para os dgitos ai da base b.

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 junho de 2011

Captulo 1. Representao de Nmeros e Erros N 2 r0 q1 2 r1 q2 2 r2 q3

..

. qn1 2 r q n1 n

O ltimo quociente (qn ) somente ser 0 se N = 0. Ento, N = (qn rn1 . . . r2 r1 r0 )2 ou N = qn 2n + rn1 2n1 + + r2 22 + r1 21 + r0 20 . Como exemplos, temos 12 25 315 = = = (1100)2 (11001)2 (100111011)2 .

O mesmo mtodo pode ser utilizado para converter N para qualquer base b; divide-se N e os sucessivos quocientes qi por b at que o ltimo quociente seja um inteiro 0 qn b 1: N b r0 q1 b r1 q2 b r2 q3

..

. qn1 b r q n1 n

Desta forma, N = = Assim, 12 25 315 = = = (14)8 = (C)16 (31)8 = (19)16 (473)8 = (13B)16 . (qn rn1 . . . r2 r1 r0 )b qn bn + rn1 bn1 + + r2 b2 + r1 b1 + r0 b0 .

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

Representao de nmeros reais e converses de base

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 Verso: 22 de junho de 2011

1.2. Representao de nmeros em diferentes bases

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

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros Exemplo 1.1. Seja Xf = 0, 8125, ento 0, 8125 2 1, 6250 Ou seja, 0, 8125 = (0, 1101)2 . 0, 6250 2 1, 2500 0, 2500 2 0, 500 0, 500 2 . 1, 0000

O exemplos a seguir mostram a diculdade de se obter a representao de um nmero fracionrio em outra base. Exemplo 1.2. Um exemplo interessante o nmero Xf = 0, 1. Neste caso, 0, 1 2 0, 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

e o processo de multiplicaes sucessivas repete a seqncia de dgitos 0011 ad innitum. Portanto, 0, 1 = (0, 0001100110011 . . . )2 . Exemplo 1.3. 0, 5225 2 1, 0450 0, 0400 2 0, 0800 Ou seja, 0, 5225 = (0, 10000101110000101000 . . . )2 . Este exemplo mostra que em um computador, onde o espao para representao de um nmero nito, 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 + . = Exemplo 1.4. (an an1 . . . a0 , 1 2 3 . . . )2 . Seja Xf = 0, 5225, ento 0, 0900 2 0, 1800 0, 1600 2 0, 3200 0, 1800 2 0, 3600 0, 3200 2 0, 6400 0, 3600 2 0, 7200 0, 6400 2 1, 2800 0, 7200 2 1, 4400 0, 2800 2 0, 5600 0, 4400 2 0, 8800 0, 5600 2 1, 1200 0, 8800 2 1, 7600 0, 1200 2 0, 2400 0, 7600 2 1, 5200 0, 2400 2 0, 4800 0, 5200 2 1, 0400 0, 4800 2 . 0, 9600

0, 0450 2 0, 0900 0, 0800 2 0, 1600

Seja X = 75, 8, temos Xi = 75 = (1001011)2

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 Verso: 22 de junho de 2011

1.2. Representao de nmeros em diferentes bases

1.2.3

Converso de nmeros inteiros da base b para a base decimal

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.

O nmero N pode ser obtido na base decimal atravs do clculo da seqncia bm bm1 = am , = am1 + 2bm ,

bm2 = am2 + 2bm1 , . . . . . . . . . b1 b0 E ento, = a1 + 2b2 , = a0 + 2b1 . N = b0 . Diviso de Runi.

1.2.3.2

Equivalente ao mtodo anterior, diferindo somente na disposio dos coecientes ai e bi : 2 am bm e, novamente, am1 2bm bm1 N = b0 . Seja o nmero (11101)2 . Ento, a partir da seqncia de Horner, b4 b3 b2 b1 b0 A partir da diviso de Runi, 2 Portanto, 1 1 1 2 3 1 6 7 0 14 14 1 28 29 = a4 = 1, = a3 + 2b4 = 1 + 2.1 = 3, = a2 + 2b3 = 1 + 2.3 = 7, = a1 + 2b2 = 0 + 2.7 = 14, = a0 + 2b1 = 1 + 2.14 = 29. a2 2b3 b2 a1 2b2 b1 a0 2b1 b0

Exemplo 1.5.

(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
Autor: Rudi Gaelzer IFM/UFPel

= am ,
Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros cm1 = am1 + bcm , am1 + bcm1 , . . . a1 + bc2 , a0 + bc1 N = c0 . cm2 = . . . . . . c1 c0 e, novamente, = =

1.2.4

Converso de nmeros fracionrios da base b para a base decimal


Xf = (0, 1 2 . . . n )2 .

Considere um nmero fracionrio com representao nita na base binria:

O seu valor na base decimal ser dado por Xf = 1 21 + 2 22 + + n 2n . Esta soma pode ser calculada diretamente ou utilizando qualquer um dos dois mtodos enunciados na seo 1.2.3, com algumas modicaes. 1.2.4.1 Algoritmo de Horner.

No caso de um nmero fracionrio, o algoritmo ca bn bn1 bn2 . . . b2 b1 b0 Ento, = n , = = . . . = = = 1 n1 + bn , 2 1 n2 + bn1 , 2 . . . 1 2 + b3 , 2 1 1 + b2 , 2 1 b1 . 2

N = b0 . Diviso de Runi.

1.2.4.2

No case de um nmero fracionrio, 1 2 am am1 1 bm 2 bm1 a2 1 b3 2 b2 a1 1 b2 2 b1 0 1 b1 2 b0

bm Exemplo 1.6.

O nmero (0, 10111)2 , pelo Algoritmo de Horner, ca b5 b4 b3 b2 = = = = 5 = 1, 1 1 3 4 + b5 = 1 + .1 = , 2 2 2 1 1 3 7 3 + b4 = 1 + . = , 2 2 2 4 1 1 7 7 2 + b3 = 0 + . = , 2 2 4 8


Verso: 22 de junho de 2011

Autor: Rudi Gaelzer IFM/UFPel

1.2. Representao de nmeros em diferentes bases 1 1 7 23 b1 = 1 + b2 = 1 + . = , 2 2 8 16 23 1 b1 = . b0 = 2 32 (0, 10111)2 =

Portanto,

23 = 0, 71875. 32 Uma outra situao que pode ocorrer quando o nmero binrio for innito, por exemplo, atravs de uma seqncia de dgitos peridicos: Xf = 0, 1 2 . . . n 1 2 . . . m
2

onde 1 2 . . . m indica que a seqncia de dgitos 1 2 . . . m se repete ad innitum. Na base decimal, tal nmero dado por Xf = 1 21 + 2 22 + + n 2n + + + + 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 1 2n1 + 2 2n2 + + m 2nm 1 2nm1 + 2 2nm2 + + m 2n2m 1 2n2m1 + 2 2n2m2 + + m 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 2m 1 = , 1 2m 2m 1 2mn . 2m 1

Xf = 1 21 + 2 22 + + n 2n + 1 21 + 2 22 + + m 2m

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 tem o seu valor na base decimal dado por Xf = 1.21 + 1.22 + 0.21 + 1.22 + 0.23 23 2 = 1 1 1 + 2 4 + 12 23 = 47 28
2

= (0, 11010010010 . . . )2

= 0, 8214285714285 = 0, 82142857142. Em geral, se o nmero fracionrio tem representao innita peridica na base b, Xf = 0, 1 2 . . . n 1 2 . . . m ento o seu valor decimal ser dado por Xf = 1 b1 + 2 b2 + + n bn + 1 b1 + 2 b2 + + m bm bmn , bm 1
b

onde as expresses entre parnteses podem ser calculadas diretamente ou utilizando quaisquer um dos mtodos descritos anteriormente.
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros

1.3

Operaes com nmeros binrios

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

A subtrao anloga adio, sendo realizada de acordo com a tabela:

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
0 1 0 0 0 1 0 1

Procede-se como em uma multiplicao no sistema decimal, de acordo com a tabela de multiplicao:

Por exemplo, se 26 = (11010)2 e 2 = (10)2 , ento 26 2 = (11010)2 (10)2 = (110100)2 = 52. A diviso binria um procedimento um tanto mais complicado e no ser abordado aqui.

1.4

Representao de nmeros em computadores digitais

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 sucientes; 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 Verso: 22 de junho de 2011

10

1.4. Representao de nmeros em computadores digitais

1.4.1

Representao de nmeros inteiros

A representao mais direta de nmeros inteiros denominada Sinal-Mdulo. Nesta representao, o valor absoluto do nmero inteiro obtido diretamente a partir dos algoritmos discutidos na seo 1.2, enquanto que o sinal representado por um dgito adicional colocado esquerda do nmero. Quando a representao binria, o bit de sinal dito ocupar a posio do bit mais signicativo. Ento, supondo que a memria do computador disponha de q dgitos para a representao, um nmero inteiro na base b ser representado pelo computador atravs da seqncia de dgitos aq1 aq2 . . . a1 a0 , (1.2)

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):
q 2

N =s
k=0

ak bk ,

(1.3)

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.

Os valores em questo para as quantidades em (1.3) dependem da arquitetura e do compilador em uso. Exemplo 1.8. O compilador Intel Fortran 95 [1] possui 4 modelos de representao de inteiros com 1, 2, 4 e 8 bytes, tambm denominados de espcies. Sendo para todos os casos b = 2, o valor absoluto do maior p nmero inteiro que pode ser representado internamente para cada espcie Nmax , (p = 1, 2, 4, 8) , a partir de (1.3), para p = 1; 127, 8p 2 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 [17]; 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

Representao de nmeros reais

A representao de nmeros reais em computadores, tambm denominada representao de ponto utuante. Em uma representao de ponto utuante, um nmero representado internamente atravs de uma notao cientca, 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 junho de 2011

Captulo 1. Representao de Nmeros e Erros 1 2 3 1 4


s expoente de 8 bits mantissa de 23 bits

11

= = = =

0 0 0 0

10000000 10000010 01111111 01101001

10000000000000000000000 11000000000000000000000 10000000000000000000000 11010110101111111001010

107

Figura 1.2: Representaes de ponto utuante para alguns nmeros em uma palavra tpica de 32 bits (4 bytes).

o qual est escrito em uma forma legvel para seres humanos. Alm das quantidades j denidas, 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 dene 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 nito, isto , o nmero total de bits que podem ser utilizados para representar s (1 bit), a parte exponencial e a mantissa sempre xo, 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 gura 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 [17, 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
k=1

dk bk .

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 signica que qualquer nmero x tal que xmin < x < xmin no poder ser representado pelo computador. Esta ocorrncia denominada underow. 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. 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. Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

12

1.4. Representao de nmeros em computadores digitais

O maior nmero positivo que pode ser representado neste sistema


n

xmax = 0, (b 1) (b 1) . . . (b 1) bemax = (b 1)
n vezes k=1

bk

bemax = 1 bn bemax .

Valores para xmax vlidos para o compilador Intel Fortran so apresentados na tabela 1.2. Isto signica que qualquer nmero x tal que x < xmax ou x > xmax no poder ser representado pelo computador. Esta ocorrncia denominada overow. Os compiladores usualmente tomam duas possveis providncias quando detectam um overow; ou pram o processamento do programa emitindo uma mensagem de erro, ou continuam o processamento atribuindo a x o valor simblico x = Innito ou x = Innito. 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 nito F de nmeros racionais podem ser representados na forma (1.4). Os nmeros neste conjunto so denominados nmeros de ponto utuante. 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 simplicado de representao numrica de ponto utuante dado por x [2, 4, 5, 6]. Para este sistema: o menor nmero positivo possvel : xmin = (0, 1000)2 25 = 251 = ou seja, a regio de underow consiste no intervalo O maior nmero positivo possvel : xmax = (0, 1111)2 26 = 1 24 26 = 60; ou seja, as regies de overow consistem nos intervalos x < 60, x > 60. 1 1 <x< . 64 64 1 ; 64

O maior nmero que pode ser somado ou subtrado de 1,0 e que mantm o resultado inalterado : xeps = 214 = O nmero de elementos em F : 2.1. (6 + 5 + 1) 241 + 1 = 193.
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

1 . 8

Captulo 1. Representao de Nmeros e Erros

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 utuante x [2, 3, 1, 2]. Para este sistema: xmin = 211 = 1 . 4

o menor nmero positivo possvel : ou seja, a regio de underow consiste no intervalo O maior nmero positivo possvel : xmax = 1 23 22 = ou seja, as regies de overow consistem nos intervalos 7 x< , 2 x> 1 1 <x< . 4 4

1 8

4=

7 ; 2

7 . 2

O maior nmero que pode ser somado ou subtrado de 1,0 e que mantm o resultado inalterado : xeps = 213 = 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 gura 1.3. Cada risco vertical posiciona um nmeros representvel neste sistema. 1 . 4

1.5

Erros na representao e na lgebra de ponto utuante

Nesta seo ser feita uma breve descrio dos principais erros envolvidos na representao de pontos utuantes 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.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

14

1.5. Erros na representao e na lgebra de ponto utuante

1.5.2

Erros absoluto e relativo

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 utuante. O erro absoluto (EAX ) denido 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 armar 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 + 1137 1335 < < 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 armar 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 ) denido 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 signicativos corretos na aproximao.

1.5.3

Erros na representao: arredondamento e truncamento

O tamanho nito da palavra utilizada em um computador digital para a representao de nmeros de ponto utuante provoca o surgimento de diversos tipos de erros, tanto na representao destes nmeros quanto na lgebra que os envolve. Uma estratgia que reduz estes erros, empregada na maior parte dos computadores, consiste em empregar nmeros de ponto utuante normalizados, isto , nmeros cuja mantissa M est sempre dentro do intervalo 1 M < 1, b ou seja, 0, 5 M < 1 para computadores de base b = 2. Esta providncia diminui o nmero de zeros direita da vrgula e maximiza o nmero de dgitos no nulos utilizados para representar um dado nmero. Entretanto, mesmo em um sistema com representao normalizada, nem todos os nmeros reais podem ser representados. Utilizando novamente o exemplo do sistema x [2, 4, 5, 6], o nmero racional y = 0, 12345999 . . . no pode ser exatamente representado. A forma de y em base 2 : y = 0, 12345999... = (0, 000111111001101 . . . )2 .
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros

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 identicar 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 ca: 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 denio 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 onde X X.

X = (0, d1 d2 . . . dn ) be + gX ben , 0 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 ERX = = |X f l (X )| = |gX | ben < ben , EAX gX ben b n = < = bn+1 , 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 ) =
1 (0, d1 d2 . . . dn ) be , se |gX | < 2 1 (0, d1 d2 . . . (dn + 1)) be , se |gX | 2 .

(1.6)

Neste caso, o erro absoluto da operao ser EAX = |X f l (X )| =


3 Traduo 4 Traduo

|gX | ben , se |gX | < |gX 1| ben , se |gX |

1 2 1 2

<

1 e n b , 2

livre do termo em ingls chopping. livre do termo ingls rounding.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

16

1.5. Erros na representao e na lgebra de ponto utuante de onde se obtm uma estimativa superior e o erro relativo ser 1 e n 2b , se |gX | < 1 1 en 2 1 (0, d1 d2 . . . dn ) be 2b < = bn+1 , ERX < 1 en e b (0 , 1) b 2 2 b , se |gX | 1 2 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 modicam ligeiramente o arredondamento em relao frmula apresentada em (1.6). Nesta, o ltimo dgito signicativo (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 [7].

1.5.4

Nmero de dgitos signicativos

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 signicativos corretos da representao. Se f l (X ) uma aproximao de X com k dgitos signicativos 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 vericada. Exemplo 1.11. Sejam b = 10, X = 1/6 e f l (X ) = 0, 16667; ento |
X|

1/6 0, 16667 = 2 105 1/6

1 5+1 10 . 2

Ou seja, o nmero de dgitos signicativos em f l (X ) k = 5.

1.5.5

Erros na lgebra de ponto utuante

Adicionalmente aos erros resultantes do truncamento ou do arredondamento na representao de nmeros de ponto utuante 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 utuante 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 signicado 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-o 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.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros 1.5.5.1 Erros de arredondamento

17

A origem deste tipo de erro est tambm relacionada com a representao nita das palavras em um computador e surge com a realizao de operaes de ponto utuante 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) cos(0, 007) A primeira expresso para f (x) fornece: f ( x) = 0, 2 104 1 cos x 1 0, 99998 = = 0, 28572 102 , = sen x 0, 69999 102 0, 69999 102 = = 0, 69999 102 0, 99998.

enquanto que a segunda expresso fornece: f (x) = 0, 69999 102 sen x = = 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 signicativo na mantissa; porm, o ponto a ser frisado aqui que muito facilmente este tipo de erro de arredondamento ocorre, devido ao tamanho nito 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 signicativos reduzido na subtrao de dois nmeros prximos entre si. Isto mostra que no possvel conar 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
X

o erro associado com a representao de X . De forma equivalente, pode-se escrever f l (X ) = X + X ,

sendo X = X

X.

Ento, |X | = EAX . Pode-se ver que


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 ) 1+
2 X X + + ... f l (X ) f l (X )2 1

f l (X ) X f l (X )

f l (X ) X f l (X )

1+

X f l (X )
2

f l (X ) X f l (X )

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 )

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

termo em ingls unit in the last place, ou ulp.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

18

1.5. Erros na representao e na lgebra de ponto utuante

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) X

correspondentes:

e f l (Y ) = Y (1 +

).

Os resultados destas operaes de ponto utuante so escritos: f l (X + Y ) , f l (X Y ) , f l (X Y ) , f l (X/Y ) . Assumindo que no ocorra overow nem underow, supe-se que seja possvel escrever f l (X op Y ) = (X op Y ) (1 + sendo
op op ) ,

f l (X op Y ) (X op Y ) , (X op Y )

com | op | = ERop , o erro relativo da operao. Grande parte dos computadores atualmente empregados utilizam o padro IEEE para operaes aritmticas de ponto utuante no sistema binrio. Entre outros recursos, este padro especica que todas as operaes aritmticas devem ser idealmente realizadas como se o computador dispusesse de preciso innita e somente aps obtido o resultado este deve ser transformado para o sistema de ponto utuante em uso atravs de um processo de arredondamento [7]. Este procedimento pode ser implementado fazendo-se uso de dgitos de guarda (guard digits ) [7] e ele permite estimar o erro em cada operao de ponto utuante como | op | max (| X | , | Y |) . Desta forma, obtm-se o menor erro relativo possvel na operao algbrica e este ir se propagar lentamente com o aumento do nmero de operaes. Grande parte dos computadores em uso atualmente seguem o padro IEEE, o qual exige o emprego dos dgitos de guarda. Caso este padro no seja empregado, os erros decorrentes de operaes de ponto utuante aumentam de forma extremamente rpida com o nmero de operaes. Neste ltimo caso, para cada operao algbrica, obtm-se: Adio. Resulta: a qual pode ser escrita: f l (X + Y ) = (X + Y ) 1 + sendo
+

f l (X + Y ) = f l (X ) + f l (Y ) = (X + Y ) + (X + Y ) ,

X + Y X +Y

= (X + Y ) 1 +

X +Y X +Y

(X + Y ) (1 +

+) ,

X + Y . f l (X ) + f l (Y )

Ou seja, os erros absoluto e relativo do processo de soma de ponto utuante so: EA+ ER+ = |X + Y | |f l (X ) X + f l (Y ) Y | , X + Y Y X = | +| = = + . f l (X ) + f l (Y ) 1 + f l (Y ) /f l (X ) 1 + f l (X ) /f l (Y )

H trs situaes possveis na ltima expresso acima: 1. f l(X ) f l (Y ). Neste caso, obtm-se ER+ | 2. f l (X ) f l (Y ). Neste caso, ER+ |
Autor: Rudi Gaelzer IFM/UFPel
Y X| .

|.
Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros 3. O [f l (X )] = O [f l (Y )]. Agora,


8

19

ER+ Conclui-se, portanto, que ER+ O [max (


X, Y

1 | 2

|.

)].

Subtrao. De forma similar ao caso anterior, resulta: f l (X Y ) = f l (X ) f l (Y ) = (X Y ) + (X Y ) , a qual pode ser escrita: f l (X Y ) = (X Y ) 1 + sendo

X Y X Y

= (X Y ) 1 +

X Y X Y

(X Y ) (1 +

) ,

X Y . f l (X ) f l (Y )

Ou seja, os erros absoluto e relativo do processo de soma de ponto utuante so: EA ER = |X Y | = |f l (X ) X f l (Y ) Y | , X Y X Y = | | = = . + f l (X ) f l (Y ) 1 f l (Y ) /f l (X ) 1 f l (X ) /f l (Y )

Considerando os mesmos casos anteriores, 1. f l (X ) 2. f l (X ) f l (Y ). Neste caso, ER | f l (Y ). Neste caso, ER | 3. O [f l (X )] = O [f l (Y )]. Agora, 1 f l (Y ) /f l (X ) ER |
X Y X| .

|. 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 | , |f l (Y ) X |), obtm-se f l (X Y ) (X Y ) + (f l (X ) Y + f l (Y ) X ) . Por outro lado, f l (X Y ) = Assim, EA ER Portanto, ER O [max (
8A

f l (X ) Y + f l (Y ) X f l (X ) f l (Y ) Y X + (X Y ) (1 + (X Y ) 1 + f l (X ) f l (Y ) (X Y ) 1 +

) .

= =

|f l (X ) Y + f l (Y ) X | , X Y | | = + | f l (X ) f l (Y )

|.

X, Y

)], da mesma forma que a adio.

notao O(x) indica a ordem de grandeza de x. Uma denio rigorosa apresentada na pgina 22.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

20 Diviso. Neste caso,

1.5. Erros na representao e na lgebra de ponto utuante 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 ) XY + X Y X X f l (X ) X + X + Y , 2 Y Y f l (Y ) f l (Y )2 f l (Y ) (X Y ) + f l (Y ) X f l (X ) Y f l (Y )


2

f l (X Y )

f l (X Y ) Ao passo que f l (X Y ) =

(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 )

(X Y ) (1 + Ento, EA ER =

f l (Y ) X f l (X ) Y f l (Y )
| 2

, |.

= |

X Y | f l (X ) f l (Y )

Ou seja, ER da mesma ordem de grandeza que ER . Para exemplicar o efeito deletrio que os erros de arredondamento podem apresentar em um clculos, em princpio, completamente exatos, Rice [15, Captulo 3] mostra o grco do polinmio de sexto grau P (x) = (x 1)6 , calculado na sua forma expandida P (x) = x6 6x5 + 15x4 20x3 + 15x2 6x + 1. A gura mostra P (x) traado em torno de x = 1, em cujo ponto P (1) = 0, teoricamente. Entretanto, o clculo realizado sem o emprego de dgitos de guarda (gura 1.4 esquerda) evidencia um efeito muito mais signicativo dos erros de arredondamento nas operaes bsicas realizadas em nmeros de ponto utuante que o efeito observado quando se faz uso de um computador e um compilador [1] que seguem as normas IEEE 754, as quais prevem o uso dos dgitos de guarda (gura 1.4 direita). O programa em Fortran 95 que gerou gura 1.4 direita pode ser visto no programa 1.2.
Programa 1.2: Programa em Fortran 95 que gerou a gura 1.4 direita.

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

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros

21

Figura 1.4: Esquerda: Clculo do polinmio P (x) sem o uso de dgitos de guarda [15]. 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 innito. 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 innita, 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 innita, 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 signicativos, ento pode-se decidir que o erro de truncamento (juntamente com os demais tipos de erros) so pequenos o suciente 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 signica que a convergncia nunca pode ser testada de forma totalmente convel; 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 eccia 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 Verso: 22 de junho de 2011

22

1.5. Erros na representao e na lgebra de ponto utuante

O mtodo converge exponencialmente, como eN , por exemplo. O erro de truncamento da ordem 1/N 5 . A ordem do erro h4 . A taxa de convergncia log N/N . O termo ordem de convergncia, s vezes tambm denominado taxa de convergncia, pode ter distintos signicados. Em mtodos iterativos, a ordem de convergncia calculada atravs de uma frmula especca. Se o resultado 2, por exemplo, ento se diz que o mtodo de segunda ordem. J um mtodo de segunda ordem para resolver equaes diferenciais possui outro signicado. O termo convergncia linear implica que o erro reduzido (aproximadamente) por um fator constante em cada passo. A notao matemtica para ordem de convergncia, se um dado mtodo converge tal como 1/N 2 , por exemplo, : O 1/N 2 . A notao O denida com segue: Uma funo f (x) dita ser O (g (x)) medida que x tende a L se
x L

lim

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 nita sero calculadas: 1. Diferena adiantada (forward dierence ): f (x) 2. Diferena centrada (centered dierence ): f (x) f (x + h) f (x h) . 2h f (x + h) f (x) . h

Em ambos os mtodos, para um parmetro h sucientemente 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: 1 f (x + h) f (x) = 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: 1 f (x + h) f (x h) = 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 gura 1.5, enquanto que o programa em Fortran 95 que calculou os dados est no programa 1.3. Os grcos foram traados em escala log-log para se vericar 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 Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros

23

Figura 1.5: Grco log-log do erro absoluto nos clculos de derivadas usando mtodos de diferenas nitas. 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 nitas da gura 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 _dp x c o s ( x x ) ! 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 _dp h ! 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 ( x x ) return end function f end program d e r i v a d a s

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

24

1.5. Erros na representao e na lgebra de ponto utuante

Figura 1.6: Grco 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
N

O erro, calculado para os pontos x = 1 e x = 12, em funo do parmetro N apresentado na gura 1.6, enquanto que o correspondente programa em Fortran 95 est no programa 1.4. Observa-se claramente como o erro absoluto inicia diminuindo rapidamente com o aumento de N (para x = 12 isto ocorre para N > 11), de uma forma no linear na escala log-log. Porm, eventualmente os erros de arredondamento que surgem na representao nita de termos cada vez menores na srie impe um limite inferior ao erro absoluto. Isto ocorre para x = 1 antes que para x = 12. 1.5.5.3 Anlise de erros de ponto utuante

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 utuante 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 gura 1.5 um exemplo deste tipo de situao. A mesma tendncia de erro sistemtico ocorre quando o processo de representao nita realizado por truncamento (ver seo 1.5.3). Em um caso mais geral, os tipos de operaes de ponto utuante 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 utuaro 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 Verso: 22 de junho de 2011

Captulo 1. Representao de Nmeros e Erros


Programa 1.4: Programa em Fortran 95 que calculou os pontos na gura 1.6.

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 e 6_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 utuante 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).

Ou seja, teoricamente, limN trunc = 0. Ento, o erro total ser total + 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 .

Este comportamento pode ser claramente visto na gura 1.5.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

26

1.5. Erros na representao e na lgebra de ponto utuante

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

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, denida 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 nita 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, nalmente, a um processo de cancelamento catastrco, como se pode observar no exemplo da gura 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

Frmulas clssicas de diferena nita

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 denio (27) e substitu-la por uma frmula de diferena nita, resultando na frmula de diferena adiantada (forward dierence).

2.2.1

Frmula de diferena adiantada (forward dierence)


f (x + h) f (x) . h

Esta frmula consiste em tomar (27) e ignorar o processo de limite: f ( x) (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 (2.3) f (x h) = f (x) f (x)h + f (x)h2 f (x)h3 + f iv (x)h4 + , 2 6 24 resultando f (x + h) f (x) 1 = f (x) + f (x)h + O h2 . h 2 27

28

2.2. Frmulas clssicas de diferena nita


t

Ou seja, o erro de truncamento da ordem |f h| . Para diminuir este erro (para valores nitos 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 gura 1.5. O erro de arredondamento possui duas origens. A primeira seria o erro no processo de arredondamento realizado na representao nita 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 gura 23. Assim, o erro total no clculo de (27) pode ser estimado como
total

|f h| +

f ( x) . h
total ,

(2.4) resultando

O valor de h que minimiza este erro pode ser estimado pelo clculo do mnimo de hmin f f
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 , ou seja, 4 dgitos de preciso. J para preciso dupla, preciso simples, m 107 , portanto, m 10 8 16 , ou 8 dgitos signicativos. , resultando m 10 m 10

2.2.2

Frmula de diferena atrasada (backward dierence)

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

Frmula de diferena centrada (centered dierence)


f (x + h) f (x h) . 2h

Uma estimativa bem melhor para a derivao obtida a partir da frmula f ( x) Utilizando (2.3), observa-se que f (x + h) f (x h) 1 = f (x) + f (x)h2 + O h4 . 2h 6
Autor: Rudi Gaelzer IFM/UFPel

(2.6)

(2.7)

Verso: 22 de junho de 2011

Captulo 2. Derivao Numrica Ou seja, o erro de truncamento deste mtodo da ordem


t

29

|f (x)| h2 ,

resultando na seguinte estimativa de valor de h que minimiza o erro total: hmin e com um erro relativo igual a
total
3

f f

f xc

|f |
2/ 3

f2

f f

( f)

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 signicativos, aumentando sensivelmente a preciso na estimativa da derivada. A vantagem desta frmula comparada com a frmula (2.2) claramente visvel na gura 1.5.

2.2.4

Frmula de 5 pontos
1 1 1 v 1 f (x)h5 + . . . , f (x h) = f (x) f (x)h + f (x)h2 f (x)h3 + f iv (x)h4 2 6 24 120 1 1 f (x + h) f (x h) = 2f (x)h + f (x)h3 + f v (x)h5 + O h7 3 60

Uma aproximao ainda melhor pode ser obtida partindo-se de (2.6),

e calculando

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 f (x) (2.8)

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
t

|f v | h4 ,

o que implica na seguinte estimativa de hmin que minimiza o erro total: hmin com um erro relativo da ordem
total
5

f |f | , |f v |

|f |
4/ 5

|f v | |f | |f |
5

4 4/ 5 f .

(2.9)

Para preciso simples, m 106 , ou seja, 6 dgitos signicativos corretos, enquanto que em preciso dupla, 4/ 5 13 , ou seja, 13 dgitos signicativos 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 Verso: 22 de junho de 2011

30

2.3. Frmulas de diferenas nitas para a derivada segunda

2.3

Frmulas de diferenas nitas para a derivada segunda

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

Frmula de trs pontos


f (x + h) 2f (x) + f (x h) = f (x)h2 + 1 iv f (x)h4 + O h6 + , 12

Realizando-se a seguinte combinao linear:

ou seja,

1 f (x + h) 2f (x) + f (x h) 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

Frmula de cinco pontos


f (x 2h) + 16f (x h) 30f (x) + 16f (x + h) f (x + 2h) 12f (x)h2 2 vi f (x)h6 , 15

Uma aproximao ainda melhor obtida a partir da combinao:

resultando na frmula de cinco pontos para a derivada segunda: 1 f (x 2h) 16f (x h) + 30f (x) 16f (x + h) + f (x + 2h) + f vi (x)h4 . (2.11) 2 12h 90 Expresses para derivadas de ordens ainda mais altas tambm pode ser obtidas a partir de combinaes lineares de f (x) calculada em diferentes pontos. Entretanto, estas expresses no sero abordadas neste texto. f (x)

2.4

Frmulas para o clculo de derivadas em pontos fora da rede

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 denida 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

Derivada de trs pontos


f (xi + ph) 1 h p 1 2 f1 2pfi + p + 1 2 f1 + 0, 13f ( )h2 , (x1 < < xn )

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

Derivada de quatro pontos


1 3p2 6p + 2 3p2 1 f1 3p2 4p 1 fi + 3p2 2p 2 f1 f2 2h 3 3 + 0, 096f iv ( )h3 , (0 < p < 1) 0, 168f iv ( )h3 , (1 < p < 0)

f (xi + ph)

onde f2 = f (xi + 2h).


Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 2. Derivao Numrica

31

2.4.3

Derivada de cinco pontos


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

f (xi + ph)

onde agora f2 = f (xi 2h) e, para p = 0, a frmula acima reduz-se derivada de cinco pontos (2.8).

2.5

Extrapolao de Richardson e estimativa de erro

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 xa, 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 fexato = f l(f, h) + A[f ]hn + B [f ]hn+m + . . . = f l f, h R + A[f ] h R
n

(2.12a)
n+m

+ B [f ]

h R

+ ...

(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) = h = EA R fexato f l(f, h) A[f ]hn h fexato f l f, A[f ] R
n

h R

Subtraindo (2.12b) de (2.12a), obtm-se, at a ordem n + m: 0 0 h R h = f l(f, h) f l f, R = f l(f, h) f l f, + A[f ]hn A[f ] + h R
n

+ 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 A[f ] h R
n

= =

EA(h) EA h R

f l f,

h R

f l(f, h) h R

f l f,

Rn Rn 1 1 f l(f, h) . Rn 1

(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 Verso: 22 de junho de 2011

32

2.5. Extrapolao de Richardson e estimativa de erro

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 renamento no resultado; isto , uma vez que fexato = f l f, h R + A[f ] h R
n

+ B [f ]

h R

n+m

+ C [f ]

h R

n+m+

+ ...,

substituindo (2.13b) obtm-se o valor extrapolado fexato = f l f, ou fexato = h 1 Rn f l f, Rn 1 R f l(f, h) + B [f ] h R


n+m

h R

+ f l f,

h R

f l(f, h)

1 + B [f ] n R 1

h R

n+m

+ C [f ]

h R

n+m+

+ ...,

+ C [f ]

h R

n+m+

+ ...,

(2.14)

o qual possui um erro da ordem hn+m . Observa-se que com o emprego da tcnica da extrapolao de Richardson obteve-se um estimativa bastante acurada do erro resultante da aplicao do mtodo numrico para um valor de parmetro h2 = h/R, sem haver a necessidade de se desenvolver a forma operatorial de A[f ]. Alm disso, o valor extrapolado (2.14) resulta ser de mais alta ordem (n + m) que a aproximao original f l (f, h2 ). Parece, assim, que um nico processo de clculo fornece dois renamentos: uma estimativa de erro ao mesmo e um valor extrapolado de ordem mais alta. Contudo, Press et al. (1992) [14] constantemente enfatizam que ordem mais alta no signica necessariamente maior acurcia. O valor extrapolado pode ser de ordem mais alta, mas no existe nenhuma estimativa do erro associado ao mesmo; o erro calculado est associado ao valor no extrapolado f l (f, h2 ). Para que se obtenha uma estimativa do erro de (2.14) necessrio aplicar-se uma vez mais o processo de extrapolao. Escrevendo-se as aproximaes no extrapoladas realizadas inicialmente como f l0 (h) f l (f, h) , f l0 h R f l f, h R ,

pode-se escrever a aproximao extrapolada uma vez (2.14) como f l1 (h) f l f, 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

podendo-se ento escrever (2.14) como fexato = f l1 (h) + B [f ] h R


n+m

+ C [f ]

h R

n+m+

+ ....

Escrevendo agora esta ltima expresso para h/R, fexato = f l1 h R + B [f ] h R2


n+m

+ C [f ]

h R2

n+m+

+ . . . .,

e subtraindo ambas as expresses, obtm-se as seguintes expresses para os erros: EA1 (h) EA1 h R B [f ] B [f ] h R h R2
n+m

= f l1
n+m

h R h R

f l1 (h) f l1 (h)

Rn+m Rn+m 1 1 , Rn+m 1

(2.15a) (2.15b)

= f l1

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 l2 (h) f l1 + f l1 f l1 (h) = , (2.16a) n + m R R R 1 Rn+m 1
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 2. Derivao Numrica e fexato = f l2 (h) + C [f ] h R2


n+m+

33

+ .

(2.16b)

Esta nova aproximao possui um erro de ordem hn+m+ . Pode-se induzir assim que prximo termo extrapolado ser f l3 (h) = e fexato = f l3 (h) + D [f ] com uma estimativa de erros igual a EA3 (h) EA3 h R C [f ] C [f ] h R2 h R3
n+m+

Rn+m+ f l2 (h/R) f l2 (h) , Rn+m+ 1 h R3


n+m+ +p

(2.17a)

+ ,

(2.17b)

= f l3
n+m

h R h R

f l3 (h) f l3 (h)

Rn+m+

Rn+m+ 1

(2.18a) (2.18b)

= f l3

1 . Rn+m+ 1

E assim sucessivamente para ordens mais altas. Deve-se ressaltar por m 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 nal 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 identica-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) f (x) 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 = = f (x + h) f (x h) 1 f 2h 6 f (x + h/2) f (x h/2) h (x)h2 + O h4 , 1 h2 f (x) + O 6 4 h4 16 .

a estimativa de erro obtida para f l (f , h2 ) dada por (2.13b), EA (h2 ) 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)

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

34

2.5. Extrapolao de Richardson e estimativa de erro

Figura 2.1: Grco 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 gura 2.1. Nesta, a exemplo do que se fez na gura 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 rena o resultado em mais de 2 ordens de grandeza. O programa em Fortran 95 que gerou os dados apresentados na gura 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 _dp x c o s ( x x ) ! 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 _dp h ) 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 _dp h ! 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 ( x x )
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 2. Derivao Numrica return end function f

35

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 denida 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 xos 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.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

36

2.5. Extrapolao de Richardson e estimativa de erro

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 _dp h ) 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 _dp h 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

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

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 diculdade 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 denio 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 innito:
b (ba)/h

f (x)dx = lim h
a h0 i=1

f (xi ) .

Uma maneira tradicional de medir numericamente a rea sob f (x) consiste em traar o seu grco 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:
b N

f (x)dx =
a i=1

f (xi )wi +

N.

(3.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 nito. 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 nal. Uma vez que o melhor mtodo depende do comportamento especco 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 sucientemente importantes. Nestes esquemas, denominados de Newton-Cotes, o intervalo total dividido em subintervalos iguais, conforme ilustrado na gura 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

3.2. Frmulas de Newton-Cotes

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.

Esquemas mais acurados de integrao so possveis se os pontos no necessariamente forem regularmente espaados. Mtodos de quadratura Gaussiana possuem a habilidade de integrar exatamente (exceto pelo erro de arredondamento) o produto de uma funo por um polinmio de grau (2N 1), utilizando somente N valores de f (x). Em geral, resultados obtidos pela quadratura Gaussiana so superiores aos obtidos pelos mtodos de Newton-Cotes, desde que no haja singularidades no integrando ou em sua derivada.

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 gura 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 gura 3.1.

3.2.1

Frmulas fechadas de Newton-Cotes

As frmulas fechadas de Newton-Cotes que sero aqui introduzidas so ilustradas pela gura 3.2. Sero utilizados N +1 pontos igualmente espaados, identicados pelo ndice i (i = 0, 1, . . . , N ), com o espaamento entre os pontos dado por xN x0 ba h= = . N N

Figura 3.2: Nas frmulas fechadas, so utilizados N + 1 pontos, que variam de x0 = a a xN = b.

Os pontos de integrao das frmulas de Newton-Cotes sero denidos por: xi = a + ih,


Autor: Rudi Gaelzer IFM/UFPel

(i = 0, . . . , N ),
Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica enquanto que os valores da funo nos pontos xi sero representados por fi f (xi ). Polinmio de Lagrange.

39

A funo f (x) ser agora aproximada por um polinmio interpolador, isto , no lugar de f (x) considera-se um polinmio de grau N , pN (x), o qual possui os mesmos valores da funo nos pontos xi , isto , pN (xi ) = fi , Sem demonstrao,1 estes polinmio so dados por pN (x) = =
n=0 N onde ln (x) so os polinmios de Lagrange, denidos por N N f (x0 )l0 (x) + f (x1 )l1 (x) + + f (xN )pN N (x) N N fn ln (x),

(i = 0, . . . , N ).

(3.2a)

N ln (x)

(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 vericao de que pN (x) o polinmio interpolador segue diretamente da substituio dos pontos xi :
N N n {0, 1, . . . , N } , ln (xn ) = 1 e ln (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 Desta forma, pode-se escrever, para x [a, b]. Uso dos polinmios de Lagrange na integrao numrica Fazendo uso ento do polinmio de Lagrange de grau N para aproximar f (x) pelos N +1 pontos ilustrados na gura 3.2, obtm-se:
b b

[a, b] . f (x) = pN (x) +


N (x),

(3.2d)

f (x)dx
a

=
a N

[pN (x) +
b

N (x)] dx

=
i=0

fi
a

N li (x)dx +

f (N +1) () (N + 1)!

[(x x0 ) (x x1 ) . . . (x xN )] dx.
a

(3.3a)

Pode-se ento escrever a integral na forma (3.1), onde os pesos da frmula de integrao so obtidos por:
b b N li (x)dx = a a

wi =

(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)

ao passo que os erros de truncamento sero dados por


N

f (N +1) () (N + 1)!

[(x x0 ) (x x1 ) . . . (x xN )] dx.
a

(3.3c) N.

Deve-se enfatizar aqui que a frmula (3.3a) exata para um polinmio de grau
1A

qual ser apresentada em um captulo posterior desta Apostila.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

40

3.2. Frmulas de Newton-Cotes

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.

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: wo = =
x1 x0 x1 x0

1 ( x b) (x x1 ) dx = ( xo x1 ) 2 (b a) 1 (x a) ( x x0 ) dx = ( x1 x0 ) 2 (b a)
x1 x0

2 b

=
a

1 h, 2

2 b

w1 e o erro
1

=
a

1 h 2

f ( ) 2

(x x0 ) (x x1 ) dx =

1 f ()h3 . 12

Portanto, a regra trapezoidal para integrao no intervalo (x0 , x1 ) ca


b

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 gura 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. Tomando N = 2, x0 = a, x1 = (a + b)/2, x2 = b e h = (b a)/2 em (3.3a-c), obtm-se para os pesos w0
Autor: Rudi Gaelzer IFM/UFPel

x2 x0

(x x1 ) (x x2 ) 1 dx = h (x0 x1 ) (x0 x2 ) 3
Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica

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).
x2 x0 x2 x0

w1 w2

= =

(x x0 ) (x x2 ) dx = (x1 x0 ) (x1 x2 ) (x x0 ) (x x1 ) dx = (x2 x0 ) (x2 x1 )

4 h 3 1 h, 3

ao passo que o erro de truncamento ca dado por


2

f ( ) 3!

x2 x0

(x x0 ) (x x1 ) (x x2 ) dx.

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 x0 h h

(x x0 ) (x x1 ) (x x2 ) dx =
h

(t + h) t (t h) dt =
h

t2 h2 tdt = 0.

Isto no signica 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 ca:
S

f (iv) () 4!

x2 x0

(x x0 ) (x x1 ) (x x2 ) dx =

1 (iv) f ( ) 4!

(t + h) t2 (t h) dt =
h

1 (iv) f ()h5 . 90

Portanto, a regra de Simpson para integrao no intervalo (x0 , x2 ) ca


b

f (x) =
a

h 1 (f0 + 4f1 + f2 ) f (iv) ()h5 . 3 90

(3.5)

A gura 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 Regra de Simpson dos 3/8 (N = 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)

Pode-se ver que o erro da mesma ordem de grandeza que (3.5).


Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

42 3.2.1.4

3.2. Frmulas de Newton-Cotes Regra de Bode (N = 4)

Esta regra usa 5 valores de f (x) regularmente espaados. Tomando N = 3, x0 = a, x4 = b e h = (b a)/4, obtm-se b 2 8 (vi) f (x)dx = (3.7) h (7f0 + 32f1 + 12f2 + 32f3 + 7f4 ) f ()h7 . 45 945 a Pode-se observar que agora o erro de truncamento ( Simpson. 3.2.1.5 Regras em ordens mais altas (N 5)
B

h7 ) bem menor que o erro obtido pela regra de

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 utuante 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:
b N

f (x)dx = dh
a i=0

fi wi +

N,

(3.8)
N.

a tabela 3.1 apresenta os valores dos parmetros d e h, dos pesos wi e dos erros de truncamento Exemplo 3.1. Sabe-se que
2

ln 2 =
1

dx = 0, 6931471805599453094172322145818 . . . x

Usando as frmulas de Newton-Cotes (3.4 3.7), obtm-se os seguintes resultados para ln 2. Regra trapezoidal. Com h = 1:
2 1

dx 1 x 2

1+

1 2

= 0, 75; erro relativo: 8, 2%.

Regra de Simpson. Com h = 1/2:


2 1

1 dx x 6

1+

8 1 + 3 2

= 0, 69444 . . . ; erro relativo: 0, 19%.

Regra de Simpson dos 3/8. Com h = 1/3:


2 1

3 dx x 24

1+

9 9 1 + + 4 5 2

= 0, 69375; erro relativo: 0, 09%.

Regra de Bode. Com h = 1/4:


2 1

dx 1 x 90

4 2 4 7 7 + 32 + 12 + 32 + 5 3 7 2

= 0, 69317460 . . . ; erro relativo: 0, 004%.

Tabela 3.1: Frmulas fechadas de Newton-Cotes, dadas por (3.8).

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

w4

w5

w6

w7

N 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

1 32 50 272 2989

7 75 27 2989

19 216 1323

41 3577

751

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica

43

3.2.2

Frmulas abertas de Newton-Cotes

Uma frmula aberta no utiliza os pontos extremos no intervalo de integrao. Na gura 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 dedignamente a forma de f (x) prxima aos pontos singulares, o que reduz signicativamente 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,
b N 1

f (x)dx = dh
a i=1

fi w i +

N,

(3.9)

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. Dentre as frmulas apresentadas na tabela, a mais til a regra do ponto mdio (midpoint rule), correspondente a M = 0, 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 0 1 2 3 4 5 6

d 2 3/2 4/3 5/24 6/20 7/1440 8/945

w1 1 1 2 11 11 611 460

w2 1 -1 1 -14 -453 -954

w3 2 1 26 562 2196

w4

w5

w6

w7

11 -14 562 -2459

11 -453 2196

611 -954

460

N 1 f ( )h3 3 1 3 4 f ()h 28 (iv ) ()h5 90 f 95 (iv ) ()h5 144 f 41 (vi) ()h7 140 f 5257 (vi) ()h7 8640 f 3956 (viii) ()h9 14175 f

3.2.3

Frmulas fechadas estendidas

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 Regra trapezoidal estendida

Divide-se o intervalo de integrao [a, b] em N subintervalos de igual comprimento h = (b a)/N . Aplicando-se ento a frmula (3.4) N vezes para se realizar as integraes nos intervalos [x0 , x1 ], [x1 , x2 ], . . . , [xN 1 , xN ] e adicionando estas integraes parciais, obtm-se a frmula trapezoidal estendida:
b

f (x)dx
a

= =

x1 x0

f (x)dx +

x2 x1

f (x)dx + +

xN xN 1

f (x)dx

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


N

f (i ) h3 .
i=1

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

44

3.2. Frmulas de Newton-Cotes

Algoritmo 3.1 Implementao da regra trapezoidal estendida. Dados: h, fi = f (xi ) para i = 0, 1, . . . , N . 1. soma=0 2. Para i = 1 : N 1, faa 3. soma= soma + fi
h 2

4. IT E =

[2 soma + f0 + fN ]

Pode-se mostrar, usando o Teorema da Mdia, que


N

f (i ) = N f ( ), onde [a, b] .
i=1

Portanto, obtm-se a regra trapezoidal estendida:


b

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. Um exemplo pode ser visto na rotina trapez.f90, a qual pode ser acessada em www.ufpel. edu.br/~rudi/grad/ModComp/Progs/trapez.f90. 3.2.3.2 Regra de Simpson estendida

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

= =

x2 x0

f (x)dx +

x4 x2

f (x)dx + +

xN xN 2

f (x)dx

h h h (f0 + 4f1 + f2 ) + (f2 + 4f3 + f4 ) + + (fN 2 + 4fN 1 + fN ) 3 3 3 1 (iv) 1 (iv) 1 (iv) 5 5 f (1 ) h f (2 ) h f N/2 h5 , 90 90 90
N/2

b a

h h5 f (x)dx = (f0 + 4f1 + 2f2 + 4f3 + 2f4 + + 2fN 2 + 4fN 1 + fN ) 3 90

f (iv) (i ) .
i=1

A aplicao do Teorema da Mdia neste caso tambm fornece a seguinte expresso:


N/2

f (iv) (i ) =
i=1

N (iv) f ( ), 2

b.

Assim,
b

f (x)dx =
a

b a (iv) h (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. Um exemplo de rotina que implementa esta algoritmo pode ser visto na funo simpson.f90, a qual pode ser acessada em www.ufpel.edu.br/ ~rudi/grad/ModComp/Progs/simpson.f90.
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica Algoritmo 3.2 Implementao da regra de Simpson estendida. Dados: N par, h, fi = f (xi ) para i = 0, 1, . . . , N . 1. soma = 0 2. Para i = 1, 3, 5, . . . , N 1, faa 3. soma = soma + 2fi + fi+1
h 3

45

4. ISE =

(2 soma + f0 fN ).

Exemplo 3.2.

Ainda calculando aproximaes para ln 2, pode-se agora aplicar as frmulas compostas.

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

= 0, 6970238 . . . ; erro relativo: 0, 56%.

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

= 0, 693253968 . . . ; erro relativo: 0, 015%.

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

Frmulas abertas estendidas

Somente ser apresentada aqui a frmula estendida da regra do ponto mdio (equao 3.9 com M = 0). Esta uma das poucas frmulas que pode ser estendida com relativa facilidade e que permanece til para a integrao automtica, discutida na seo 3.4. A frmula do ponto mdio estendida ser apresentada na forma de um teorema, o qual ser apresentado sem demonstrao. Teorema. Seja f (x) uma funo diferencivel at a ordem 2 em [a, b], n N par, h = (b a)/(n + 2) e xj = a + (j + 1)h para j = 1, 0, . . . , n + 1. Existe um (a, b) para o qual a regra do ponto mdio estendida para n/2 + 1 sub-intervalos pode ser escrita como
b n/2

f (x) dx = 2h
a j =0

f ( x 2j ) +

ba f ()h2 . 6

(3.12)

3.2.5

Estimativas de erro nas frmulas de Newton-Cotes

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)

tm o seu clculo impedido pelo desconhecimento do valor exato de e . Entretanto, h maneiras de se realizar estimativas dos valores mximos que estes erros podem assumir e a partir destas estimativas pode-se calcular o valor ideal para h, o espaamento entre os pontos, que permite satisfazer um requisito inicial de valor mximo para os erros. Ou seja, se o intervalo de integrao for fechado e f (x) tiver derivadas contnuas neste intervalo at uma ordem k N , onde N o grau da regra de Newton-Cotes empregada, sempre possvel escrever |
TE|

1 (b a) |f ( )| h2 12

1 (b a)h2 max |f (x)| a x b 12

(3.13a)

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

46 |
SE |

3.2. Frmulas de Newton-Cotes ba 4 b a (iv) f ( ) h4 h max f (iv) (x) , a x b 180 180

(3.13b)

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. Quantos subintervalos e qual o espaamento que devem ser empregados no clculo de
1 0

ex dx para que a aproximao tenha erro menor que 104 nos casos (a) Regra dos Trapzios Estendida e (b) Regra de Simpson Estendida? Respostas: o integrando no possui primitiva, mas as suas derivadas podem ser calculadas em qualquer ordem. Assim, f (x) = 2xex
2

f (x) = 2 2x2 1 ex
2 2

f (x) = 4x 3 2x2 ex

f (iv) (x) = 4 3 12x2 + 4x4 ex

f (v) (x) = 8x 15 20x2 + 4x4 ex . (a) Para a frmula dos trapzios, de acordo com (3.13a) necessrio ento encontrar o mximo de f (x) no intervalo [0, 1]. Isto possvel uma vez que se conhece a nica raiz de f (x) neste intervalo, r = 0. Portanto, max |f (x)| = |f (r)| = 2
0 x 1

e assim, |
TE|

1 2 h 6 TE

104 = hT E

6 104

0, 0245,

o que corresponde a um nmero de subintervalos NT E Int 1 hT E = 41.

(b) Para a frmula de Simpson, de acordo com (3.13b) 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 = Como f (iv) (r1 ) = 12 e f (iv) (r2 ) = 16 obtm-se
0 x 1

1 5 10 2

0, 9586.

5 10 2 exp + 2

5 2

7, 4195,

max f (iv) (x) = f (iv) (r1 ) = 12

e, portanto, |
SE |

h4 SE 15

104 = hSE

15 104

0, 197,

o que corresponde a um nmero de subintervalos NSE Int 1 hSe = 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.
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica

47

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 polinmios ortogonais. O tratamento sistemtico de funes-peso arbitrrias W (x) usando os polinmios ortogonais, da forma como hoje so usualmente empregadas as frmulas gaussianas, devido em grande parte a Christoel, em 1877. O conceito de polinmios ortogonais frente a uma funo-peso W (x) no intervalo (a, b) se deve denio de ortogonalidade de duas funes reais f (x) e g (x), pertencentes ao espao vetorial das funes contnuas por partes em (a, b) frente a uma funo peso W (x). Uma condio suciente para que f e g sejam ortogonais que o seu produto interno seja nulo,
b

f |g
a

W (x)f (x)g (x)dx = 0.

f |f , denido como a norma de f (x), for unitrio, ento f (x) Adicionalmente, se o produto interno dita normalizada. Um conjunto de vetores {fi (x)}, i = 0, 1, 2, . . . , simultaneamente ortogonais entre si e individualmente normalizados denominado de conjunto ortonormal. O emprego de polinmios ortogonais para a obteno das frmulas gaussianas ser apresentado nas sees a seguir.

3.3.1

Idia bsica na quadratura gaussiana


b b N

A idia bsica consiste em escrever a frmula geral de quadratura (3.1) da seguinte maneira: F (x)dx
a a

W (x)f (x)dx
i=1

wi f (xi ) ,

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

A escolha natural para a funo-peso seria W (x) =

Esta escolha em particular dene 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
b N

pk (x)dx =
a i=1

wi pk (xi ) ,

(3.14)
Verso: 22 de junho de 2011

Autor: Rudi Gaelzer IFM/UFPel

48

3.3. Quadratura gaussiana

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.14) 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 =
a

i (x)j (x)dx = 0, para j = i.

2. {xi }, i = 0, 1, . . . , N as razes de k+1 (x). Se a frmula de quadratura


b N

f (x)dx
a i=1

wi pk (xi )

exata para polinmios de grau 2N + 1. Demonstrao. como:

N , ento ela tambm ser exata para polinmios de grau

Se p2N +1 (x) um polinmio qualquer de grau

2N + 1, ento este pode ser escrito

p2N +1 (x) = N +1 (x)qN (x) + rN (x), onde qN (x) e rN (x) so polinmios de grau N e N +1 (x) um polinmio de grau ortogonal. Integrando esta expresso no intervalo (a, b):
b b b

N + 1 da famlia

p2N +1 (x)dx =
a a

N +1 (x)qN (x)dx +
a

rN (x)dx,

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.14), resulta
b b N

p2N +1 (x)dx =
a a

rN (x)dx =
i=1

wi rN (xi ) .

Lembrando agora que rN (x) = p2N +1 (x) N +1 (x)qN (x), obtm-se


b N

p2N +1 (x)dx =
a i=1

wi [p2N +1 (xi ) N +1 (xi ) qN (xi )] .

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 nalmente
b N

p2N +1 (x)dx =
a i=1

wi p2N +1 (xi ) . 2N + 1 .
Verso: 22 de junho de 2011

O que demonstra ser a quadratura (3.14) exata para um polinmio de grau


Autor: Rudi Gaelzer IFM/UFPel

Captulo 3. Integrao Numrica

49

3.3.2

Frmulas gaussianas clssicas

Deseja-se ento um conjunto de polinmios {pj (x)} (j = 0, 1, 2, . . . ), mutuamente ortogonais frente a uma funo peso W (x) no intervalo (a, b),
b

pi |pj =
a

W (x)pi (x)pj (x)dx = 0, i = j.

Um procedimento garantido para gerar este conjunto fornecido pela relao de recorrncia p1 (x) 0 p0 (x) 1 pj +1 (x) onde aj bj = = xpj |pj pj |pj pj |pj . pj 1 |pj 1 (3.16a) (3.16b) = (x aj ) pj (x) bj pj 1 (x), (j = 0, 1, 2, . . . ), (3.15a) (3.15b) (3.15c)

A frmula de quadratura gaussiana com N pontos, ento, :


b N

W (x)f (x)dx =
a j =1

wj f (xj ) + RN ,

(3.17)

onde o conjunto de abcissas {xj } (j = 1, . . . , N ) consiste nas razes de pN (x), pN (xj ) = 0, j = 1, . . . , N, tais que a < x1 < x2 < < xN < b, o conjunto de pesos {wj } dado por wj = pN 1 |pN 1 pN 1 (xj ) pN (xj ) (3.19) (3.18)

e RN o erro de truncamento da quadratura. O clculo das regras de quadratura gaussiana clssicas envolvem, ento, duas fases: 1. a gerao dos polinmios ortogonais p0 (x), p1 (x), . . . , pN (x) (3.15a-c) atravs da obteno dos seus coecientes {aj , bj } (3.16a,b); 2. a determinao das razes de pN (x) e o clculos dos pesos associados {wj } (3.19). Para o caso dos polinmios ortogonais clssicos, os coecientes {aj , bj } so explicitamente conhecidos e a primeira fase pode ser omitida. Contudo, caso se queira utilizar uma funo peso W (x) no clssica, os respectivos polinmios devem ser deduzidos a partir das relaes de recorrncia (3.15a-c). Caso se deseje calcular a quadratura de F (x) = W (x)f (x) em um intervalo (x1 , x2 ), distinto do intervalo (a, b) onde os polinmios pj (x) so mutuamente ortogonais, basta realizar-se uma mudana na varivel de integrao, ax2 bx1 x2 x1 bx1 ax2 ba y+ y = x+ , x= x2 x1 x2 x1 ba ba de forma que
x2 x1

x2 x1 W (y )f (y )dy = ba

b a

x2 x1 W (x)f (x)dx = ba

wj f (yj ) + RN ,
j =1

(3.20)

onde yj =

x2 x1 bx1 ax2 xj + , j = 1, . . . , N, ba ba

sendo {xj } as razes de pN (x) (3.18). A seguir, sero vistas algumas das regras de quadratura gaussiana clssicas.
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

50

3.3. Quadratura gaussiana

Tabela 3.3: Abcissas {xj } (razes dos polinmios de Legendre) e pesos {wj } para integrao de Gauss-Legendre.

xj 1/ 3 0 3/5 0.3399810435848562648 0.8611363115940525752 0.00000000000000000000 0.53846931010568309104 0.90617984593866399280 0.23861918608319690863 0.66120938646626451366 0.93246951420315202781 0.00000000000000000000 0.40584515137739716691 0.74153118559939443986 0.94910791234275852453 3.3.2.1 Frmula de Gauss-Legendre

N =2 N =3 N =4 N =5

wj 1 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

N =6

N =7

Esta frmula pode ser utilizada quando W (x) = 1, juntamente com os polinmios de Legendre Pn (x): P0 ( x ) = 1 P1 ( x ) = x 1 1 3x2 1 P3 (x) = 5 x3 3 x , 2 2 (j + 1)Pj +1 (x) = (2j + 1)xPj (x) jPj 1 (x), P2 (x) =

os quais so ortogonais no intervalo (1, 1). Neste caso, a frmula de Gauss-Legendre ca, a partir de (3.17),
1 N

f (x)dx =
1 j =1

wj f (xj ) + RN ,

(3.21)

onde {xj } (j = 1, . . . , N ) so as razes de PN (x), PN (xj ) = 0, e os pesos so wj = e o erro de truncamento RN = 22N +1 (N !)


4 3f (2N )

j = 1, . . . , N, tais que 1 < x1 < x2 < < xN < 1 2 1 x2 j j = 1, . . . , N

(3.22)

[PN (xj )]

2,

(2N + 1) [(2N )!]

( ),

(1 < < 1) .

A tabela 3.3 mostra as abcissas e os pesos para as frmulas de Gauss-Legendre at N = 7. Valores de {xj } e {wj } para N > 7 podem ser encontrados em Abramowitz & Stegun [2, captulo 25]. Valores exatos para as razes e os pesos somente podem ser encontrados para um nmero nito de polinmios. Para os restantes, necessrio obter-se estas quantidades numericamente. Caso seja necessrio calcular a quadratura no intervalo (x1 , x2 ) qualquer, a frmula de Gauss-Legendre ca, a partir de (3.20),
x2 x1

f (y )dy =

x2 x1 2

f (x)dx =
1

x2 x1 2

wj f (yj ) + RN ,
j =1

(3.23)

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica sendo yj = x2 x1 x1 + x2 xj + , j = 1, . . . , N. 2 2


2

51

Exemplo 3.4. Calcula-se novamente a quadratura 1 dx x , porm agora utilizando-se as frmulas de GaussLegendre para um intervalo geral (3.23), com x1 = 1 e x2 = 2. Frmula de dois pontos. Usando apenas 2 pontos, j = 1, 2, N = 2, obtm-se
2 1

dy 1 y 2

w1

1 1 + w2 y1 y2 y2 =

onde y1 = x1 e x2 so as razes de P2 (xj ) = e wj = Portanto, y1 =


2 1

1 3 x1 + , 2 2

1 3 x2 + , 2 2 x1 x2
1 = 3

1 3x2 j 1 =0= 2 2
2,

1 3

x2 j

[P2 (xj )]

j = 1, 2 = w1 = w2 = 1. 3 1 + 2 2 3

1 3 , 2 2 3 1 1 + y1 y2

y2 =

dy 1 y 2

= 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

1 dy y 2

w1

1 1 1 + w2 + w3 y1 y2 y3 1 3 x2 + , 2 2 y3 =

onde y1 =

1 3 x1 + , 2 2

y2 =

1 3 x3 + , 2 2

sendo x1 , x2 e x3 as razes de P3 (x): 1 5 x3 j 3 xj 2 x 1 = 0 = x2 x = =0 =


3 5 3 5

P3 (xj ) =

e wj = Portanto, 1 x2 j

[P3 (xj )] 3 1 2 2

2,

j = 1, 2, 3 = w1 = w3 =

5 8 , w2 = . 9 9 3 5

y1 = e
1 2

3 , 5

y2 =

3 , 2

y3 =

3 1 + 2 2

dy 1 y 2

5 1 8 1 5 1 + + 9 y1 9 y2 9 y3

= 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.
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

52 3.3.2.2

3.3. Quadratura gaussiana Frmula de Gauss-Chebyshev Nesta frmula so empregados os polinmios de Chebyshev: T0 (x) = 1, T1 (x) = x, T2 (x) = 2x2 1, T3 (x) = 4x3 3x, Tj +1 (x) = 2xTj (x) Tj 1 (x),

os quais so ortogonais no intervalo 1 < x < 1 frente funo peso W ( x) = 1 . 1 x2

Neste caso, a frmula de Gauss-Chebyshev ca, a partir de (3.17),


1 1

f (x) dx = 1 x2

wj f (xj ) + RN ,
j =1

(3.24)

onde {xj }, (j = 1, 2, . . . , N ) so as razes de TN (x) = 0, xj = cos e {wj } so os pesos, dados simplesmente por wj = O erro de truncamento RN no uso da frmula (3.24) RN = f (2n) ( ), (2n)!22n1 (1 < < 1). . N
1 j2 N

Caso seja necessrio calcular a quadratura no intervalo (x1 , x2 ) qualquer, a frmula de Gauss-Chebyshev ca, a partir de (3.20),
x2 x1

f (y ) dy (y x1 ) (x2 y )

=
1

f (x) dx = 1 x2

wj f (yj ) + RN ,
j =1

(3.25)

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 =
Programa 3.1: Implementao da frmula de Gauss-Chebyshev em Fortran 95.

sendo

! 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
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica 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

53

3.3.2.3

Frmula de Gauss-Laguerre

Nesta frmula so empregados os polinmios de Laguerre : L0 (x) = 1, L1 (x) = 1 x, 1 1 2 4x + x2 , L3 (x) = 6 18x + 9x2 x3 , 2 6 (j + 1) Lj +1 (x) = (2j + 1 x) Lj (x) jLj 1 (x), L2 (x) = x < frente funo peso W (x) = ex . Neste caso, a frmula de Gauss-Laguerre ca, a partir de (3.17),
N

os quais so ortogonais no intervalo 0

ex f (x)dx =
0 j =1

wj f (xj ) + RN ,

(3.26)

onde {xj } (j = 1, . . . , N ) so as razes de LN (x), xj tais que LN (xj ) = 0, onde j = 1, . . . , N e 0 < x1 < x2 < < xN e {wj } so os pesos, dados por wj = xj N 2 [LN 1 (xj )]
2.

O erro de truncamento RN no uso da frmula (3.27) RN = (N !) (2n) f ( ), (2N )!


2

(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].
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

54

3.4. Integrao automtica e adaptativa

Tabela 3.4: Abcissas {xj } (razes dos polinmios de Laguerre) e pesos {wj } para integrao de Gauss-Laguerre.

xj 2 2+ 2 2

N =2

wj
2 2 2 4(1+ 2) 2+ 2 2 4(1+ 2)

0.41577455678347908331 2.29428036027904171982 6.28994508293747919866 0.32254768961939231180 1.74576110115834657569 4.53662029692112798328 9.39507091230113312923 0.26356031971814091020 1.41340305910651679222 3.59642577104072208122 7.08581000585883755692 12.6408008442757826594 3.3.2.4 Frmula de Gauss-Hermite

N =3

N =4

0.71109300992917301545 0.27851773356924084880 0.01038925650158613575 0.60315410434163360164 0.35741869243779968664 0.03888790851500538427 0.00053929470556132745 0.52175561058280865281 0.39866681108317592745 0.07594244968170759539 0.00361175867992204845 0.00002336997238577623

N =5

Nesta frmula so empregados os polinmios de Hermite: H0 (x) = 1, H1 (x) = 2x, H2 (x) = 4x2 2, H3 (x) = 8x3 12x, Hj +1 (x) = 2xHj (x) 2jHj 1 (x), os quais so ortogonais no intervalo < x < frente funo peso W (x) = ex . Neste caso, a frmula de Gauss-Hermite ca, a partir de (3.17),
N
2

ex f (x)dx =
j =1

wj f (xj ) + RN ,

(3.27)

onde {xj } (j = 1, . . . , N ) so as razes de HN (x), xj tais que HN (xj ) = 0, onde j = 1, . . . , N e 0 < x1 < x2 < < xN e {wj } so os pesos, dados por wj = 2N 1 N !

N 2 [HN 1 (xj )]

2.

O erro de truncamento RN no uso da frmula (3.27) N ! (2n) RN = N f ( ), 2 (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

Integrao automtica e adaptativa

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
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica

55

Tabela 3.5: Abcissas {xj } (razes dos polinmios de Hermite) e pesos {wj } para integrao de Gauss-Hermite.

x j 1/ 2 0.0 3/2 0.52464762327529031788 1.65068012388578455588 0, 00000000000000000000 0.95857246461381850711 2.02018287045608563293 0.43607741192761650868 1.33584907401369694971 2.35060497367449222283

N =2 N =3 N =4 N =5

wj /2

2 /3 /6 0.80491409000551283651 0.08131283544724517714 8 /15 0.39361932315224115983 0.01995324205904591321 0.72462959522439252409 0.15706732032285664392 0.00453000990550884564

N =6

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.

3.4.1

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 especca 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) I h R I (h) Rn e EA Rn 1 h R = I h R I (h) Rn 1 , 1 (3.28a)

onde n a ordem do erro da frmula de quadratura. A frmula de extrapolao ento dada por (2.14): Iextrapolado = I h R + EA h R = 1 [Rn I (h/R) I (h)] . Rn 1 (3.28b)

3.4.1.1

Integrais denidas de Romberg

Ser apresentada inicialmente a regra de Romberg para integrais denidas, para as quais pode-se fazer uso das frmulas fechadas estendidas discutidas na seo 3.2.3. Para implementar uma integrao automtica neste caso, utiliza-se a regra trapezoidal estendida (3.10),
b

f (x)dx
a

1 h (f0 + 2f1 + 2f2 + + 2fN 1 + fN ) IT E (h) . 2

(3.29)

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

56

3.4. Integrao automtica e adaptativa 1 1 B 2k (2k1) (2k1) f fN h2k + , (f0 fN ) h2 + (f0 fN ) h4 + + 12 720 (2k )! 0

Pode-se mostrar [14, Eq. 4.2.1] que o erro total dado por uma srie de potncias pares de h:2 EAT E =

sendo {Bk } o conjunto dos nmeros de Bernoulli. 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.29). Estes valores iniciais so identicados por IR (h) e (0) IR (h/2), respectivamente, com suas respectivas estimativas de erro obtidas para R = 2: IR (h) IT E (h) EA0 (h) = 22 (0) I 22 1 R h 2 IR (h)
(0) (0)

IR

(0)

EA0

h 2 h 2

IT E = 22

h 2 h 2 IR (h) .
(0)

1 (0) I 1 R

De acordo com (3.28), o valor extrapolado da quadratura passa a ser IR (h/2)+ EA0 (h/2). Esta quantidade (1) passa a ser identicada por IR (h): IR (h) =
(1)

(0)

1 (0) 22 IR 22 1

h 2

IR (h) ,

(0)

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 IR (h)
(1) (1)

e EA1

h 2

24

1 (1) I 1 R

h 2

IR (h) .
(2)

(1)

O valor extrapolado agora passa a ser IR (h/2) + EA1 (h/2), o qual identicado por IR (h): IR (h) =
(2)

1 (1) 24 IR 24 1

h 2

IR (h) ,
(1)

(1)

cujo erro da ordem O h6 ; 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 o ciclo. Para sistematizar, pode-se armar 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.29) as integrais de Romberg IR (h), k = 0, 1, 2, . . . , e as melhores estimativas de erro, fornecidas por EAk1 (h/2), onde IR (h) IT E (h) 1 (0) 22 IR 1 1 (2) (1) 24 IR IR (h) = 4 2 1 1 (3) (2) IR (h) = 6 26 IR 2 1 . . . IR (h) =
(1) (0)

22

h 2 h 2 h 2

IR (h) , IR (h) , IR (h) ,


(2) (1)

(0)

EA0 EA1 EA2

h 2 h 2 h 2

1 (0) I 1 R 1 (1) = 4 I 2 1 R 1 (2) = 6 I 2 1 R . . . = 22

h 2 h 2 h 2

IR (h) IR (h) IR (h)


(2) (1)

(0)

Pode-se induzir o k -simo (k > 1) valor extrapolado e o seu erro: IR (h) = EAk1 h 2
(k )

1 h (k1) (k1) 4k IR IR (h) , 4k 1 2 1 h (k1) (k1) = k I IR (h) . 4 1 R 2

(3.30)

2 Esta a Frmula de Euler-MacLaurin. Uma derivao simplicada da mesma pode ser encontrada em DeVries (1994) [5, Cap. 4].

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica


(0) IR

57

(h) IR (h)
(1)

IR

(0)

h 2 IR
(1)

IR (h) h 2 IR IR
(1) (2)

(2)

IR (h) h 2 IR IR
(2) (3)

(3)

IR

(0)

h 22 h 23 IR
(1)

IR (h) h 2 IR IR
(3) (4)

(4)

h 22 h 23 IR
(2)

IR

(0)

h 22 h 23

IR

(0)

h 24 IR
(1)

h 22

h 2

IR

(0)

h 25
(k)

h 24

Figura 3.5: Integrais de Romberg IR necessrias para o clculo de IR (h) e EA4 (h), de acordo com (3.30). Nota-se que cada par de termos em uma dada coluna gera o termo centrado na coluna direita.

(4)

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 renamento da grade. A linha nal mostra o nmero total de clculos do integrando aps as quarta chamada da rotina.

Supondo ento que se queira aplicar a regra de extrapolao (3.30) 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, nalmente, IR (h), IR (h/2), (0) (0) (0) IR h/22 , IR h/23 e 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 gura 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.29) 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 xos 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, na primeira chamada (N = 1), h = b a, f0 = f (a) e f1 = f (b), calculando-se ento h (0) IR (h) = (f0 + f1 ) . 2 O primeiro estgio de renamento consiste ento em realizar a segunda chamada (N = 2), na qual basta
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

(4)

58

3.4. Integrao automtica e adaptativa

Algoritmo 3.3 Calcula o n-simo renamento da regra trapezoidal estendida (3.29), 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 gura 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 renado 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+ nal lao IRom = (1/2) [IRom + (b a) soma/npts] nal teste adicionar o valor da funo no ponto central e realizar as transformaes (N = 2) : resultando IR
(0)

h , 2

x0 = a, h 2

x1 = a +

ba , 2

x2 = b,

f1 f2

e f1 = f (x1 ) ,

1 (0) h h (f0 + 2f1 + f2 ) = IR (h) + f1 ; 22 2 2

o segundo estgio (chamada N = 3) consiste na adio dos pontos em h/4 e 3h/4 , atravs das transformaes (N = 3) : h h , 2 x0 = a, f2 f4 , resultando IR
(0)

x1 = a +

1ba ba 3ba , x2 = a + , x3 = a + , 2 2 2 2 2 f1 f2 , f1 = f (x1 ) , e f3 = f (x3 ) , h 2 h (f1 + f3 ) 22

x4 = b,

h 22

1 (0) h (f0 + 2f1 + 2f2 + 2f3 + f4 ) = IR 23 2

e assim consecutivamente. A gura 3.6 ilustra a aplicao prtica desta idia. 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 gura 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.30). 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 .
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica ! 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 + h soma/ 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

59

Tendo sido estabelecido um algoritmo eciente para o cmputo de IR (h), . . . , IR h/2k , outro se faz agora necessrio para implementar a integrao de Romberg, juntamente com um controle de erro que interrompe o processamento quando o erro absoluto ou relativo ca abaixo de um limite de tolerncia fornecido pelo programador. A subrotina 3.3 apresentado a seguir implementa o clculo da quadratura pelo mtodo de Romberg. A abordagem adotada consiste em percorrer as diagonais do diagrama apresentado na gura 3.5 duas (0) vezes consecutivas a cada teste no valor do erro relativo obtido. Ou seja, partindo de IR (h), calcula-se (0) (1) em seqncia a diagonal composta por IR (h/2) e IR (h), seguido do clculo da diagonal composta por (0) (1) (2) IR h/22 , IR (h/2) e IR (h), o que permite o clculo de EA1 (h/2) e do erro relativo. Se a estimativa de (2) erro desejada foi alcanada, o resultado IR (h); caso contrrio, as prximas duas diagonais so calculadas, (3) sendo testados EA2 (h/2) e IR (h) e assim consecutivamente.
Programa 3.3: Programa que calcula a quadratura numrica pelo Mtodo de Romberg.

(0)

(0)

! 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 ) .
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

60

3.4. Integrao automtica e adaptativa

! 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 ) . ! ! Rotina a u x i l i a r : trapez_rom . ! ! 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 _ I r e a l ( kind= dp ) , dimension ( : ) , a l l o c a t a b l e : : Ikm1 , Ik , te1 , t e 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 ! 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 ! Tamanho i n i c i a l dos v e t o r e s . 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 ) e r r a _ I= ( Ikm1 ( 0 ) I k ( 0 ) ) / 3 . 0 _dp ! Primeira e s t . de e r r o . Ikm1 (1)= Ikm1 ( 0 ) + e r r a _ I ! Primeira e x t r a p o l a c a o . k= 2 do i f ( k > np ) then ! Dobrar a alocao a t u a l dos v e t o r e s a l l o c a t e ( t e 1 ( 0 : 2 np ) , t e 2 ( 0 : 2 np ) ) t e 1 ( 0 : np)= Ikm1 ; t e 2 ( 0 : np)= I k c a l l move_alloc ( te1 , Ikm1 ) c a l l move_alloc ( te2 , I k ) np= 2 np end i f ! 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 e r r a _ I= ( I k ( i 1) Ikm1 ( i 1))/ quatroim1 I k ( i )= I k ( i 1) + e r r a _ I end do ! C a l c u l a e compara e r r o e r r e s t= abs ( e r r a _ I / 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
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica else k= k + 1 Ikm1= I k end i f end do return end subroutine quad_rom

61

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 gura 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 da subrotina move_alloc, a qual ir duplicar o espao disponvel para os vetores usados na subrotina quad_rom, empregando dois vetores temporrios temp1 e temp2, os quais so automaticamente dealocados aps a execuo do move_alloc. Esta subrotina no existe no Fortran 95, mas foi criada como rotina intrnseca no Fortran 2003. 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.1.2 Integrais imprprias de Romberg

O termo integral imprpria normalmente se aplica quando ocorre no mnimo um dos problemas a seguir: 1. O integrando possui uma singularidade removvel; isto , existe no mnimo um ponto no qual a funo no est denida, mas possui um limite nito. Por exemplo, f (x) = sen x/x em x = 0. 2. O integrando possui uma singularidade integrvel em um ponto conhecido, o qual pode ser um dos limites de integrao. Por exemplo,
1 0

dx , para 0 < < 1. x

3. O limite superior de integrao tende a e/ou o limite inferior tende a . Neste caso, a integral somente possuir um valor se o integrando possuir o limite limx f (x) 0 e o limite a seguir tambm existir,
R R

lim

|f (x)| dx .
R

Nesta seo ser discutida a implementao de um integrador automtico que possibilita o clculo de integrais imprprias que satisfazem as condies acima, juntamente com o controle de erro no clculo numrico da integral. Para implementar o clculo de integrais imprprias, uma regra de quadratura aberta se faz necessria para evitar o clculo do integrando em um ponto singular nito ou no innito. Ser ento empregada a regra do ponto mdio estendida (3.12), pois esta possibilita uma implementao relativamente fcil e eciente do mtodo de extrapolao de Richardson. De fato, esta regra possui a mesma vantagem que a regra trapezoidal estendida possui para a integral de Romberg, qual seja, o fato de que os termos de erro de truncamento na frmula de quadratura so sempre proprocionais a potncias pares de h, conforme est expresso pela Segunda Frmula de Euler-MacLaurin [13, Eq. 4.4.1]: EAP M E = B2 B 2k [f (b) f (a)] h2 + + 1 22k+1 4 (2k )! f (2k1) (b) f (2k1) (a) h2k + , (3.31)

sendo EAP M E o erro absoluto resultando do uso desta regra. Por outro lado, diferente do que ocorre com a regra trapezoidal estendida, para a qual os pontos utilizados no clculo anterior podem ser aproveitados posteriormente, bastando para isso dobrar o nmero de subintervalos a cada iterao, na regra do ponto mdio estendida isto somente ocorrer se o nmero de subintervalos for triplicado entre dois clculos subsequentes. Por exemplo, se a primeira aproximao para o valor de IP M E , isto , o valor da quadratura usando a regra, for obtida utilizando somente 1 ponto, em
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

62

3.4. Integrao automtica e adaptativa

x0 = a + h/2, sendo h = b a (o que corresponde a tomar-se n = 0 em 3.12), este somente ser utilizado na prxima iterao para n = 4 (onde sero utilizados os 3 pontos em x0 = a + h/6, x1 = a + h/2 e x2 = a + 5h/6). Estes 3 pontos somente sero utilizados novamente se a prxima iterao ocorrer para n = 16, para a qual so utilizados os 9 pontos em x0 = a + h/18, x1 = a + h/6, x2 = a + 5h/18, x3 = a + 7h/18, x4 = a + h/2, x5 = a + 11h/18, x6 = a + 13h/18, x7 = a + 5h/6 e x8 = a + 17h/18. Nesta ltima iterao, torna-se necessrio calcular 6 pontos adicionais. De uma forma geral, para a i-sima iterao (i 2), torna-se necessrio calcular (2/3) 3i1 pontos adicionais, sendo a relao entre o nmero total de pontos (npts ) para um dado valor de n dada por n = 2 (npts 1), para npts = 1, 3, 9, 27, . . . , 3i , . . . . Quanto ao valor de IP M E , se para n = 0 obtm-se (de acordo com 3.12) IP M E = hf0 , sendo f0 = f
(0)

a+

h 2

este valor pode ser aproveitado no clculo para n = 4 da seguinte maneira, IP M E = Ento IP M E = Por sua vez, para n = 16 resulta IP M E =
(16) (4) (4)

h 1 1 5 (f0 + f1 + f2 ) , sendo x0 = a + h, x1 = a + h e x2 = a + h. 3 6 2 6 1 (0) h (f0 + f2 ) + IP M E . 3

1 h (4) (f0 + f2 + f3 + f5 + f6 + f8 ) + IP M E . 3 3

Observa-se aqui um claro padro que pode ser utilizado para a elaborao de um algoritmo. O algoritmo 3.4 sugere uma implementao para o clculo de IP M E fazendo uso do resultado da iterao anterior. Este algoritmo baseia-se na subrotina midpnt apresentada por Press et al. (1992) [13, seo 4.4], mas bastante semelhante ao algoritmo 3.3. Este algoritmo est implementado na forma de uma funo em Fortran 95 no programa 3.4. Esta funo faz uso do construto forall para torn-la apta paralelizao do cdigo. Para tanto, necessrio que a funo a ser integrada seja pura. Algoritmo 3.4 Calcula o n-simo renamento da regra do ponto mdio estendida (3.12), sendo dados f (x), os limites de integrao (a, b) e o resultado da quadratura no estgio anterior (IP M E ). Os pontos includos em cada estgio so sempre distintos de todos os outros pontos anteriores. Quando chamado com n = 1, o algoritmo calcula a quadratura usando h = (b a)/2; quando chamado com n = 2, 3, . . . , o resultado ser renado pela adio de (2/3) 3n1 pontos interiores adicionais. Dados: f (x), a, b, n e IP M E : Se n = 1 ento: b IP M E = (b a) f a+ 2 seno: npts = 3n2 = (b a) / (3npts) 2 = 2 x = a + /2 soma = 0 Para j = 1 : npts, faa: soma = soma + f (x) x = x + 2 soma = soma + f (x) x=x+ nal lao IP M E = (1/3) [IP M E + (b a) soma/npts] nal teste Torna-se necessria agora uma subrotina, nos moldes da quad_rom (programa 3.3), para acionar a funo pntmed_rom e realizar a integrao imprpria utilizando o mtodo da extrapolao de Richardson. O valor extrapolado e a estimativa de erro sero novamente dadas por (3.28a,b). Agora, porm, a cada ordem de renamento o sub-intervalo anterior ser divido pelo fator R = 3. Como o erro absoluto na regra do ponto
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica

63

Programa 3.4: Implementao do algoritmo 3.4 em Fortran 95 como uma funo.

! FUNCAO PNTMED_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 p o n t o s ! medios e s t e n d i d a . ! 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 : Junho / 2 0 1 0 . ! function pntmed_rom ( f , a , b , n_ordem ) r e a l ( kind= dp ) : : pntmed_rom integer , intent ( in ) : : n_ordem r e a l ( kind= dp ) , intent ( in ) : : a , b integer : : i , n p t s r e a l ( kind= dp ) : : h , d e l r e a l ( kind= dp ) , s a v e : : I_pme r e a l ( kind= dp ) , dimension ( 2 ( 3 ( n_ordem 1))) : : x , f _ e v a l INTERFACE pure 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 s e l e c t case ( n_ordem ) ! Testa p r i m e i r a rodada . case ( 0 ) ! Primeira rodada . I_pme= h f ( 0 . 5 _dp ( a+b ) ) case default ! Rodadas s u b s e q u e n t e s . n p t s= 3 ( n_ordem 1 ) d e l= h / ( 6 . 0 _dp n p t s ) f o r a l l ( i= 1 : n p t s ) x ( 2 i 1)= a + ( 6 i 5) d e l x ( 2 i )= a + ( 6 i 1) d e l end f o r a l l f o r a l l ( i= 1 : 2 n p t s ) f _ e v a l ( i )= f ( x ( i ) ) end f o r a l l I_pme= 2 . 0 _dp d e l sum ( f _ e v a l ) + I_pme / 3 . 0 _dp end s e l e c t pntmed_rom= I_pme ! PRINT , N_ORDEM= , N_ORDEM ! DO I= 1 , 2 NPTS ! PRINT , I = , I , X( I ) , F_EVAL( I ) ! END DO ! PRINT , I = , PNTMED_ROM return end function pntmed_rom

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

64

3.4. Integrao automtica e adaptativa

mdio estendida dado por uma srie de potncias pares de h, da mesma forma que para a regra trapezoidal estendida, pode-se usar a implementao desta ltima como guia para a integral de Romberg de integrais imprprias. (0) Portanto, chamando IR (h) IP M E (h) o valor da quadratura na ordem mais baixa da regra do ponto mdio, os valores extrapolados e as estimativas de erro nas ordens subsequentes sero dados por: IR (h) = 1 (0) 32 IR 1 1 (2) (1) IR (h) = 4 34 IR 3 1 1 (3) (2) IR (h) = 6 36 IR 3 1 . . .
(1)

32

h 3 h 3 h 3

IR (h) , IR (h) , IR (h) ,


(2) (1)

(0)

EA0 EA1 EA2

h 3 h 3 h 3

1 (0) I 1 R 1 (1) = 4 I 3 1 R 1 (2) = 6 I 3 1 R . . . = 32

h 3 h 3 h 3

IR (h) IR (h) IR (h)


(2) (1)

(0)

Pode-se induzir ento o k -simo (k


(k )

1) valor extrapolado e a estimativa de erro como 1 h (k1) (k1) 9k IR IR (h) , 9k 1 3 h 1 (k1) (k1) = k I IR (h) . 9 1 R 3

IR (h) = EAk1 h 3

A dependncia de cada quadratura extrapolada nos valores da ordem anterior pode ser visualizada por um diagrama semelhante ao apresentado na gura 3.5, bastando para tanto substituir R = 2 por R = 3. Devido s semelhanas entre os dois mtodos, a implementao do clculo da integral de Romberg pela regra do ponto mdio ser realizada por uma rotina baseada no programa 3.3. Esta implementao pode ser vista no programa 3.5. Esta subrotina pode servir como uma alternativa ao programa 3.3 para o clculo de uma integral denida, usando, porm, o mtodo do ponto mdio estendido.
Programa 3.5: Subrotina para o clculo da integral de Romberg usando a regra do ponto mdio estendida.

! SUBROTINA QPMS_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 . ! A f u n c a o pode c o n t e r s i n g u l a r i d a d e s i n t e g r a v e i s nos l i m i t e s de i n t e g r a c a o . ! ! 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 ) . ! ! R o t i n a s u s a d a s : pntmed_rom . ! ! Autor : Rudi G a e l z e r , IFM UFPel . ! Data : Junho / 2 0 1 0 . ! subroutine qpms_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 ) : : novei , noveim1 , e r r a b s r e a l ( kind= dp ) , dimension ( : ) , a l l o c a t a b l e : : Ikm1 , Ik , temp1 , temp2 INTERFACE pure function f ( x ) use Modelos_Computacionais_Dados r e a l ( kind= dp ) : : f r e a l ( kind= dp ) , intent ( in ) : : x
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica 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= 200 a l l o c a t e ( Ikm1 ( 0 : np ) , I k ( 0 : np ) ) I k (0)= pntmed_rom ( f , a , b , 0 ) Ikm1 (0)= pntmed_rom ( f , a , b , 1 ) Ikm1 (1)= ( 9 . 0 _dp Ikm1 ( 0 ) I k ( 0 ) ) / 8 . 0 _dp k= 2 do i f ( k > np ) then ! Dobrar a alocao a t u a l dos v e t o r e s a l l o c a t e ( temp1 ( 0 : 2 np ) , temp2 ( 0 : 2 np ) ) temp1 ( 0 : np)= Ikm1 temp2 ( 0 : np)= I k c a l l move_alloc ( temp1 , Ikm1 ) c a l l move_alloc ( temp2 , I k ) np= 2 np end i f ! 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)= pntmed_rom ( f , a , b , k ) n o v e i= 1 . 0 _dp do i= 1 , k n o v e i= 9 . 0 _dp n o v e i noveim1= n o v e i 1 . 0 _dp I k ( i )= ( n o v e i I k ( i 1) Ikm1 ( i 1))/ noveim1 end do ! C a l c u l a e compara e r r o e r r a b s= ( I k ( k 1) Ikm1 ( k 1))/ noveim1 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 qpms_rom

65

Contudo, como h mais de uma forma para uma integral imprpria, as implementaes iro diferenciarse ligeiramente umas das outras, com graus de diculdades distintos. A discusso abaixo mostra qual o tipo de integral imprpria que pode ser facilmente implementado com o mtodo abordado nesta seo.

Tipo 1. Integrando com singularidades integrveis e limites de integrao nitos Neste caso, ser suposto que os limites de integrao sejam escolhidos de tal forma que as singularidades se encontrem exatamente nos limites de integrao. Isto pode ser alcanado mediante uma diviso apropriada dos limites originais de integrao. A integral abaixo ilustra o tipo de integral imprpria considerado aqui.
1

dx = . 1 x2
Verso: 22 de junho de 2011

Autor: Rudi Gaelzer IFM/UFPel

66

3.4. Integrao automtica e adaptativa

O mtodo no ir funcionar quando a singularidade no for diretamente integrvel, como ocorre no clculo do valor principal de Cauchy da integral:
2

dx = lim 0+ 1x

1 0

dx + 1x

2 1+

dx = 0. 1x

Neste ltimo caso, uma implementao do clculo da parte principal necessria. Mesmo no caso de uma integral do primeiro tipo acima, o mtodo abordado nesta seo em geral no ir fornecer um resultado acurado. Como o integrando pode variar muito rapidamente em uma vizinhana estreita dos limites de integrao e lentamente nas vizinhanas do ponto mdio, normalmente a contribuio das primeiras vizinhanas para a integral, em comparao com a contribuio em torno do ponto mdio, pode ser grande e o mtodo fornece um resultado totalmente incorreto com uma estimativa de erro muito menor que o valor correto. Matematicamente, pode-se entender a razo deste comportamento pela frmula de erro do mtodo do ponto mdio (3.31). Se f (x) possui uma singularidade em um ou ambos os pontos extremos, ento neste limite, |f (x)| , assim como as suas derivadas de ordem mais alta, resultando em um erro absoluto gigantesco para a frmula do ponto mdio. A melhor maneira de resolver este tipo de integral imprpria consiste em utilizar uma frmula gaussiana (ver seo 3.4.2 abaixo), a qual no padece desta limitao das frmulas newtonianas. Pacotes prossionais de quadratura numrica usam uma estratgia adicional que consiste em sub-dividir o intervalo de integrao e analisar a convergncia do mtodo em cada sub-intervalo separadamente. Uma rotina que utiliza este tipo de estratgia denominada adaptativa. Mtodos adaptativos so rapidamente abordados na seo 3.4.3. Tipo 2. Integrando sem singularidades e intervalos innitos de integrao As integrais consideradas aqui so dos seguintes tipos:
a

f (x) dx ou

f (x) dx ou
a

f (x) dx,

(a = cte.)
|x|

onde est suposto que f (x) no possui pontos singulares no intervalo de integrao e que |f (x)| 0 de forma rpida o suciente para que a integral exista. Nesta situao, normalmente ocorre tambm que 0, ou seja, as derivadas em todas as ordens de f (x) tambm vo a zero neste limite. f (n) (x) Neste caso, o erro da frmula de ponto mdio (3.31) torna-se pequeno e pode-se esperar resultados bastante acurados. H mais de uma maneira de implementar o algoritmo 3.4 para uma integral imprpria deste tipo, dependendo da forma predominante de f (x) para |x| . Para simplicar a anlise, ser considerado somente um caso particular para uma integral imprpria deste tipo: a > 0. f (x) 0 mais rapidamente que x2 , ou seja, para x , x2 |f (x)| < 1/x , sendo > 1. Caso estas condies sejam satisfeitas, pode-se realizar uma transformao de variveis do tipo x 1/u, a qual ir transformar o intervalo innito em um intervalo nito, no qual pode-se usar o algoritmo 3.4. A integral a ser calculada neste caso, portanto, obtida a partir da mudana de varivel de integrao u = 1/(1 + x), ou seja, 1/(1+a) f (1/u 1) du. I= f (x) dx = u2 a 0 O programa 3.6 apresenta a funo pntmed_int_rom, a qual consiste em uma variao de pntmed_rom para o intervalo de integrao considerado. J a subrotina qpmi_rom, apresentada na listagem de programa 3.7 implementa a integral de Romberg para uma integral imprpria do tipo considerado.
Programa 3.6: Funo que implementa a regra estendida dos pontos mdios para um intervalo innito.
|x|

! FUNCAO PNTMED_INF_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 p o n t o s ! medios e s t e n d i d a . ! Criada como p a r t e i n t e g r a n t e do Metodo de Romberg para a i n t e g r a c a o ! a u t o m a t i c a de uma f u n c a o no i n t e v a l o [ a , I n f i n i t o ) . ! ! Argumentos :
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica ! 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 ) . ! 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 : Junho / 2 0 1 0 . ! function pntmed_inf_rom ( f , a , n_ordem ) r e a l ( kind= dp ) : : pntmed_inf_rom integer , intent ( in ) : : n_ordem r e a l ( kind= dp ) , intent ( in ) : : a integer : : i , n p t s r e a l ( kind= dp ) : : h , d e l r e a l ( kind= dp ) , s a v e : : I_pme r e a l ( kind= dp ) , dimension ( 2 ( 3 ( n_ordem 1))) : : x , f _ e v a l INTERFACE pure 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= 1 . 0 _dp / ( 1 . 0 _dp + a ) s e l e c t case ( n_ordem ) ! Testa p r i m e i r a rodada . case ( 0 ) ! Primeira rodada . I_pme= h f u n c ( 0 . 5 _dp h ) case default ! Rodadas s u b s e q u e n t e s . n p t s= 3 ( n_ordem 1 ) d e l= h / ( 6 . 0 _dp n p t s ) f o r a l l ( i= 1 : n p t s ) x ( 2 i 1)= ( 6 i 5) d e l x ( 2 i )= ( 6 i 1) d e l end f o r a l l f o r a l l ( i= 1 : 2 n p t s ) f _ e v a l ( i )= f u n c ( x ( i ) ) end f o r a l l I_pme= 2 . 0 _dp d e l sum ( f _ e v a l ) + I_pme / 3 . 0 _dp end s e l e c t pntmed_inf_rom= I_pme return CONTAINS pure function f u n c ( x ) r e a l ( dp ) : : f u n c r e a l ( dp ) , intent ( in ) : : x f u n c= f ( 1 . 0 _dp/x 1 . 0 _dp ) / ( x x ) return end function f u n c end function pntmed_inf_rom
Programa 3.7: Subrotina para o clculo da integral de Romberg de uma integral imprpria.

67

! SUBROTINA QPMI_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 ! no i n t e r v a l o de i n t e g r a c a o [ a , I n f i n i t o ) . ! O i n t e g r a n d o nao p o s s u i p o n t o s s i n g u l a r e s no i n t e r v a l o de i n t e g r a c a o . ! ! 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 ) . ! 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 ) .
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

68

3.4. Integrao automtica e adaptativa

! 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 ) . ! ! R o t i n a s u s a d a s : pntmed_inf_rom . ! ! Autor : Rudi G a e l z e r , IFM UFPel . ! Data : Junho / 2 0 1 0 . ! subroutine qpmi_rom ( f , a , e r r r e l , result , e r r e s t ) r e a l ( kind= dp ) , intent ( in ) : : a , 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 ) : : novei , noveim1 , e r r a b s r e a l ( kind= dp ) , dimension ( : ) , a l l o c a t a b l e : : Ikm1 , Ik , temp1 , temp2 INTERFACE pure 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 ! np= 200 a l l o c a t e ( Ikm1 ( 0 : np ) , I k ( 0 : np ) ) I k (0)= pntmed_inf_rom ( f , a , 0 ) Ikm1 (0)= pntmed_inf_rom ( f , a , 1 ) Ikm1 (1)= ( 9 . 0 _dp Ikm1 ( 0 ) I k ( 0 ) ) / 8 . 0 _dp k= 2 do i f ( k > np ) then ! Dobrar a alocao a t u a l dos v e t o r e s a l l o c a t e ( temp1 ( 0 : 2 np ) , temp2 ( 0 : 2 np ) ) temp1 ( 0 : np)= Ikm1 temp2 ( 0 : np)= I k c a l l move_alloc ( temp1 , Ikm1 ) c a l l move_alloc ( temp2 , I k ) np= 2 np end i f ! 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)= pntmed_inf_rom ( f , a , k ) n o v e i= 1 . 0 _dp do i= 1 , k n o v e i= 9 . 0 _dp n o v e i noveim1= n o v e i 1 . 0 _dp I k ( i )= ( n o v e i I k ( i 1) Ikm1 ( i 1))/ noveim1 end do ! C a l c u l a e compara e r r o e r r a b s= ( I k ( k 1) Ikm1 ( k 1))/ noveim1 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 qpmi_rom
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 3. Integrao Numrica

69

3.4.2

Integrao automtica usando quadraturas gaussianas

A implementao de uma integrao automtica utilizando quadraturas gaussianas no to simples quanto com as regras newtonianas, principalmente porque para as frmulas da seo 3.3, diferentes valores de N resultam em distintos valores das abcissas {xi }, o que no permite o uso de clculos prvios da quadratura, como acontece com o mtodo de Romberg. Isto implica em um maior tempo de computao para o clculo da quadratura. Para tentar remediar este problema, diferentes tcnicas de extenso da quadratura gaussiana foram elaboradas, baseadas na denio de nodos pr-denidos, ou seja, um conjunto de xo de valores de abcissas que so sempre utilizados para distintos valores de N . O problema envolve ento a escolha adequada de pesos e dos pontos {xi } restantes que maximizam a exatido do resultado no menor tempo de computao possvel. Um destes mtodos denomina-se Quadratura de Gauss-Radau, onde um dos nodos xos um dos limites da integrao. Outro mtodo a Quadratura de Gauss-Lobatto, onde ambos os extremos a e b so nodos xos. Uma outra classe de mtodos importantes so as frmulas de Gauss-Kronrod, onde todas as abcissas utilizadas em um clculo prvio da quadratura so aproveitadas para valores subseqentes de N . Se o clculo inicial utilizou N = m pontos, ento o prximo clculo utilizar N = 2n + m pontos: os n novos pesos e abcissas mais os m pesos e abcissas anteriores. Kronrod mostrou que se n e m so escolhidos tais que n = m + 1, uma frmula de quadratura automtica pode ser estabelecida para a regra de Gauss-Legendre. Neste caso, a seqncia de pontos novo utilizados N = 10, 21, 43, 87, . . . . Bibliotecas de software numrico, tanto comerciais quanto gratuitas, sempre disponibilizam rotinas do tipo Gauss-Kronrod.

3.4.3

Integrao adaptativa

Retornando frmula geral para quadratura numrica (3.1),


b N

f (x) dx =
a i=0

wi f (xi ) ,

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 diculta o clculo da sua quadratura (f (x) oscila rapidamente, por exemplo), a regra em uso, aplicada a todo intervalo de integrao, pode encontrar diculdades 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 sucientes; ao passo que nas regies onde f (x) varia rapidamente, um nmero maior de pontos requerido. Considera-se, por exemplo, o integrando ilustrado na gura 3.7. Na regio de, f (x) essencialmente constante, e o incremento h pode ser grande. Contudo, na regio ad, f (x) varia rapidamente, signicando 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 identicar as regies onde h deve ser pequeno ou grande. Porm, construir o grco 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 identicar as regies
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011 Figura 3.7: Funo f (x) que apresenta distintos comportamentos ao longo do intervalo de integrao.

70

3.4. Integrao automtica e adaptativa

onde h necessita ser maior ou menor e automaticamente dividir o intervalo de integrao de acordo com essa identicao. Boas rotinas automticas variam no somente os valores de h e dos pesos, 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.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 4

Solues de Equaes No Lineares


4.1 Introduo

Um problema que surge com muita freqncia em computao cientca 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 signicar 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 innitas 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 gura 6 1.4 esquerda. Esta gura mostra o grco do polinmio p6 (x) = (x 1) , escrito na forma expandida, para valores prximos a x = 1. O grco foi gerado a partir de um programa de computador e, embora as 6 razes de p6 (x) so nicas e iguais a 1, o grco 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 diculdades envolvidas no clculo de razes.

4.2

Mtodos iterativos para o clculo de razes reais

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 exemplicados com o clculo da raiz real da equao de 3 grau p3 (x) = x3 x 1 = 0. (4.2a)

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 71

1/ 3

1.3247179572447460260

(4.2b)

72 x2

x3

4.2. Mtodos iterativos para o clculo de razes reais 1/ 3 1i 3 1 69 27 3 69 1 2 9+ 1+i 3 = 2 / 3 6 2 2 23 0.66235897862237301298 + 0.56227951206230124390i 1/ 3 1+i 3 1 69 1 27 3 69 2 9+ = 1i 3 2 / 3 6 2 2 23 0.66235897862237301298 0.56227951206230124390i.

1/ 3

(4.2c)
1/ 3

(4.2d)

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, signica 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 nito [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 denir 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 junho de 2011

Captulo 4. Solues de Equaes No Lineares EA2 Vericando 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: 3 EA3 Vericando 3 : p3 (1, 25) p3 (1, 375) < 0 ao passo que p3 (1, 375)p3 (1, 5) > 0. Portanto, 4 EA4 Vericando 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, 5 EA5 Vericando 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 x1 = = 1, 328125 0, 015625 1, 3203125 0, 0078125. = = 1, 3125 + 1, 375 = 1, 34375 2 0, 03125. = = 1, 25 + 1, 375 = 1, 3125 2 0, 0625. = = 1, 25 + 1, 5 = 1, 375 2 0, 125. = 0, 25.

73

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, vericar 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 EA = |b a| . 2

e o erro absoluto da aproximao

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 Verso: 22 de junho de 2011

74

4.2. Mtodos iterativos para o clculo de razes reais

Algoritmo 4.1 Implementao do mtodo da biseco. Dados: a0 , b0 (b0 > a0 ), f (x): funo contnua em [a0 , b0 ] e tol (tolerncia mxima para o erro). an = a0 ; bn = b0 Para n = 0, 1, 2, . . . , faa: m = (an + bn ) /2 Se f (an ) f (m) 0: an+1 = an ; bn+1 = m erro= |m an | /2 Seno: an+1 = m; bn+1 = bn erro= |bn m| /2 Fim Se Se erro tol: sai lao Fim lao.

Programa 4.1: Subrotina em Fortran 95 que implementa o mtodo da biseco.

! 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 Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares 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

75

4.2.2

Mtodo da falsa posio

Uma modicao 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 denido foi [1, 2]; porm, p3 (1) = 1, ao passo que p3 (2) = 5. Isto signica 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. Vericando 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 )

a qual tambm ligeiramente mais prxima de x1 que 2 . O mtodo da falsa posio pode ser sistematizado da seguinte maneira. Partindo de um intervalo inicial que contenha pelo menos uma raiz de f (x), a n + 1-sima aproximao para a raiz, obtida dos valores da n-sima aproximao, an , f (an ), bn e f (bn ) dada por: wn = 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 gura 4.1. Um aperfeioamento do mtodo da falsa posio que permite acelerar a taxa de convergncia raiz o chamado Mtodo da falsa posio modicado. 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 gura 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 modicado 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 utuante. 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 Verso: 22 de junho de 2011

76

4.2. Mtodos iterativos para o clculo de razes reais

Figura 4.1: Mtodo da falsa posio.

Figura 4.2: Mtodo da falsa posio modicado.

Algoritmo 4.2 Implementao do mtodo da falsa posio modicado. Dados: a0 , b0 (b0 > a0 ), f (x): funo contnua em [a0 , b0 ], xtol: tolerncia mxima no tamanho de [a, b] e ftol: tolerncia mxima no valor de |f (x)|. F = f (a0 ); G = f (b0 ); w0 = a0 Para n = 0, 1, 2, . . . , faa: Se |bn an | xtol ou |wn | ftol: sai lao wn+1 = (Gan F bn ) / (G F ) Se f (an ) f (wn+1 ) 0: an+1 = an ; bn+1 = wn+1 ; G = f (wn+1 ) Se f (wn ) f (wn+1 ) > 0: F = F/2 Seno: an+1 = wn+1 ; F = f (wn+1 ); bn+1 = bn Se f (wn ) f (wn+1 ) > 0: G = G/2 Fim Se Fim lao A subrotina 4.2 implementa o algoritmo 4.2. Alm dos parmetros de controle xtol e ftol j discutidos, introduz-se um parmetro opcional ntol que controla o nmero total de iteraes admitidas, quando presente. Este parmetro pode ser importante quando o clculo de f (x) muito custoso do ponto de vista computacional. Ele pode servir tambm para indicar se o clculo de f (x) est sendo feito corretamente ou se a obteno da raiz particularmente difcil.
Programa 4.2: Subrotina em Fortran 95 que implementa o mtodo da falsa posio modicado.

! 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 Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares

77

! 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 Verso: 22 de junho de 2011

78

4.2. Mtodos iterativos para o clculo de razes reais

i f ( ( p r e s e n t ( n t o l ) ) . and . ( n >= n t o l ) ) then print ( " Nao houve c o n v e r g e n c i a em " , i 5 , " i t e r a c o e s . " ) , n t o l i f l a g= 2 return end i f n= n + 1 end do return end subroutine fal_pos_mod Utilizando a rotina fal_pos_mod para o clculo da raiz de p3 (x), obteve-se os seguintes resultados: w0 w1 w2 w3 w4 w5 = = = = = = 1.00000000000000 1.16666666666667 1.32330827067669 1.32654296624656 1.32471556046769 1.32471795317359.

Ou seja, em 5 iteraes, o resultado j concorda com x1 em 5 casas decimais, enquanto que com o mtodo da biseco o resultado somente possua 2 casas decimais corretas aps o mesmo nmero de iteraes.

4.2.3

Mtodo da secante

O mtodo da secante um outro variante do mtodo da falsa posio no qual, ao contrrio da verso modicada, 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 = f (xn ) xn1 f (xn1 ) xn , f (xn ) f (xn1 ) (4.5)

para n = 0, 1, 2, . . . . Como agora f (xn1 ) e f (xn ) no mais necessitam ter sinais opostos, a frmula (4.5) est sujeita a erros de arredondamento quando ambos os valores forem prximos entre si. No caso mais extremo, pode at ocorrer que f (xn ) = f (xn1 ), em cuja situao o mtodo falha completamente. Uma maneira de escrever (4.5) que pode mitigar a ocorrncia dos erros de arredondamento xn+1 xn xn1 = xn f ( xn ) . f (xn ) f (xn1 ) (4.6)

Figura 4.3: Mtodo da secante.

fcil ver que (4.5) e (4.6) so idnticas. O comportamento das aproximaes raiz de f (x) no mtodo da secante ilustrado pela gura 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, identicada 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 Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares

79

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 x n x n1 xn xtol. (4.7b)

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 Verso: 22 de junho de 2011

80

4.2. Mtodos iterativos para o clculo de razes reais

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 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 x1= -1, x2= -2 0.665601992393366 0.668577447291536 4.75696684459274 0.722810860257192 0.775378136138015 2.68909924536253 0.922191365232718 1.04120189173659 1.52276684371980 1.26997209752081 1.31554258824252 1.32520726281671 1.32471374864206 1.32471795532635 1.32471795724475

4.2.4

Mtodo de Newton-Raphson
x n x n1 f (xn ) f (xn1 )

Tomando novamente a frmula do mtodo da secante (4.6), o termo

se aproxima de 1/f (xn ) quando a diferena entre xn e xn1 tende a zero. Portanto, razovel que se realize esta substituio em (4.6), resultando a frmula do Mtodo de Newton-Raphson, xn+1 = xn 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 Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares

81

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 xo, porque quando a seqncia x0 , x1 , x2 , . . . converge a um determinado ponto , resulta que
n

lim xn = lim xn+1 = ,


n

em cuja situao (4.9) se torna = g ( ); ou seja, um ponto xo de g (x). O mtodo de Newton-Raphson nem sempre ir convergir. De fato, freqentemente ele ir divergir ou, quando converge, tende para uma outra raiz, caso exista, distinta daquela em considerao. Esta ltima situao pode ocorrer porque o mtodo no permite um controle no sentido de convergncia das iteraes, ao contrrio do que acontece com mtodos como da biseco e da falsa posio. Busca-se, portanto, estabelecer condies que garantam a convergncia do mtodo para qualquer escolha de valor inicial x0 dentro de um dado intervalo. Estas condies so fornecidas pelo seguinte teorema [3]. Teorema 4.2. Seja f (x) diferencivel duas vezes no intervalo fechado [a, b]. Sendo as seguintes condies satisfeitas: 1. f (a)f (b) < 0; 2. f (x) = 0, para x [a, b]; 3. f (x) 0 ou f (x) 0, x [a, b]; f (b) f (a) > (b a) e 0 < < b a. f (a) f ( b) 4. nos pontos extremos a e b: 0>

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 grco 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 sucientemente 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 gura 4.4. As condies deste teorema so tambm sucientes para garantir a convergncia do mtodo da Figura 4.4: Convergncia do mtodo de Newtonsecante, desde que os dois valores iniciais x0 e x1 Raphson. Dado x0 [a, b], o mtodo rapidamente conestejam ambos dentro de [a, b]. Neste caso, contudo verge para lim n xn = . a convergncia raiz pode se processar de duas formas 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 Verso: 22 de junho de 2011

82

4.2. Mtodos iterativos para o clculo de razes reais

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 vericar numericamente que as condies (2) e (3) esto sendo cumpridas para qualquer funo f (x) apresentada rotina. Para compensar esta decincia, 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 suciente, 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 Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares

83

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 _dp ( 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 ) df f ) ( ( r a i z x l ) df f ) >= 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 _dp ( 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 c a l l f_dfdx ( r a i z , f , d 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 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
Autor: Rudi Gaelzer IFM/UFPel

1.50000000000000
Verso: 22 de junho de 2011

84

4.3. Razes complexas de funes analticas w1 w2 w3 w4 w5 = = = = = 1.34782608695652 1.32520039895091 1.32471817399905 1.32471795724479 1.32471795724475.

Pode-se notar que com somente 5 iteraes, todas as casas decimais disponveis para uma varivel de dupla preciso foram obtidas.

4.3

Razes complexas de funes analticas

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.2a) 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 [11], tem sido empregado em diversas aplicaes distintas com bastante sucesso. Este mtodo pode ser usado para descobrir qualquer nmero pr-xado 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 gura 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 gura 4.5. Uma maneira equivalente de escrever p(x) a seguinte: p(x) = f (xi ) + f [xi1 , xi ] (x xi ) + f [xi2 , xi1 , xi ] (x xi1 ) (x xi ) , sendo f [x0 , x1 ] f [x0 , x1 , x2 ]
Autor: Rudi Gaelzer IFM/UFPel

(4.10a)

= =

f (x1 ) f (x0 ) x1 x0 f [x1 , x2 ] f [x0 , x1 ] , x2 x0


Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares

85

Figura 4.5: O mtodo de Mller. Partindo de 3 pontos iniciais da funo f (x): {xi2 , f (xi2 )}, {xi1 , f (xi1 )} e {xi , f (xi )}, a parbola p(x) contruda, sendo a prxima aproximao para a raiz de f (x) tomada como a raiz xi+1 da parbola que mais se aproxima da raiz da funo.

expresses particulares de f [ x0 ] f [ x0 , . . . , x k ] = = f ( x0 ) f [ x 1 , . . . , x k ] f [ x 0 , . . . , x k 1 ] , xk x0

onde f [x0 , . . . , xk ] a k-sima diferena dividida de f (x) nos pontos x0 , . . . , xk . Pode-se vericar facilmente que (4.10a) realmente interpola f (x) nos trs pontos escolhidos. Uma vez que (x xi1 ) (x xi ) = (x xi ) + (xi xi1 ) (x xi ) , pode-se escrever p(x) tambm como p(x) = f (xi ) + ci (x xi ) + f [xi2 , xi1 , xi ] (x xi ) , onde ci = f [xi1 , xi ] + f [xi2 , xi1 , xi ] (xi xi1 ) .
2 2

(4.10b)

A funo p(x) apresentada em (4.10b) est escrita na forma de um polinmio do 2 grau de (x xi ). Buscando-se ento uma raiz de p(x), tal que p ( ) = 0, resulta p( ) = f (xi )+ ci ( xi )+ f [xi2 , xi1 , xi ] ( xi ) = 0 = xi = a qual pode tambm ser escrita como xi = 2f (xi ) ci c2 i 4f (xi ) f [xi2 , xi1 , xi ] . (4.11)
2

ci

c2 i 4f (xi ) f [xi2 , xi1 , xi ] , 2f [xi2 , xi1 , xi ]

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 ca: xi+1 = xi
1 Isto

2f (xi ) ci c2 i 4f (xi ) f [xi2 , xi1 , xi ]

(4.12)

, de tal forma que no possa ocorrer cancelamento, o que facilmente poderia gerar erros de arredondamento.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

86

4.3. Razes complexas de funes analticas

Algoritmo 4.3 Implementao numrica do mtodo de Mller. 1. Dadas x0 , x1 e x2 , trs aproximaes iniciais para a raiz de f (x). Calcule f (x0 ), f (x1 ) e f (x2 ). 2. Partindo de i = 2, calcule hi f [xi1 , xi ] f [xi2 , xi1 ] 3. Calcule f [xi2 , xi1 , xi ] ci 4. Calcule hi+1 = 2f (xi ) / ci c2 i 4f (xi ) f [xi , xi1 , xi2 ] , = = (f [xi1 , xi ] f [xi2 , xi1 ]) / (hi + hi1 ) f [xi1 , xi ] + hi f [xi2 , xi1 , xi ] , = = = xi xi1 ; hi1 = xi1 xi2 (f (xi ) f (xi1 )) /hi (f (xi1 ) f (xi2 )) /hi1 .

escolhendo o sinal de modo a maximizar a magnitude do denominador. 5. Calcule 6. Calcule xi+1 = xi + hi+1 . f (xi+1 ) .

7. Teste se um dos seguintes critrios for satisfeito: (a) |f (xi+1 )| (b) |xi+1 xi |
1

(Erro absoluto).
2

|xi+1 | (Erro relativo).

(c) O nmero mximo de iteraes excedido. 8. Se o teste for verdadeiro, retorna a ltima aproximao obtida (xi+1 ). Se o teste for falso, calcule f [xi , xi+1 ] = (f (xi+1 ) f (xi )) /hi+1 , faa i = i + 1 e recomece a partir do passo 3.

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 gracamente pela gura 4.5. Contudo, as razes podem ser complexas mesmo que as aproximaes iniciais sejam reais, bastando para isso que c2 i 4f (xi ) f [xi2 , xi1 , xi ] < 0. Isto signica 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 deao. 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 deacionada 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 Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares partir da funo reduzida fr (x) = f ( x) . (x 1 ) (x 2 ) (x r )

87

Programa 4.5: Implementao do mtodo de Mller em Fortran 95.

! 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 ) ! nnov : Numero t o t a l de r a i z e s novas 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 ) : 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 ) : ( e n t . ) a p r o x i m a c o e s i n i c i a i s ! para r a i z e s . ! ( sai . ) r a i z e s encontradas . ! 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 ) . ! i t e r a c : (OPCIONAL) Vetor com o numero de i t e r a c o e s r e a l i z a d a s ! para cada r a i z . ( saida ) ! ! Autor : Rudi G a e l z e r , IFM UFPel . ! Data : A b r i l /2011 ( v e r s a o 2 ) . ! subroutine m u l l e r ( fn , nnov , nprev , maxit , e r r a b s , & e r r r e l , zeros , fator , fnreal , i t e r a c ) ! i m p l i c i t none ! V a r i a v e i s mudas . l o g i c a l , optional , intent ( in ) : : fnreal integer , intent ( in ) : : nnov , nprev , maxit integer , dimension ( nnov ) , optional , intent ( out ) : : iterac 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 ( nnov+nprev ) , intent ( inout ) : : z e r o s ! Variaveis locais . logical : : tes_maxit , tes_g_mxit , t e s _ r e a l , t e s _ i t e r integer : : ntot , i , n_it r e a l ( kind= dp ) : : eps1 , eps2 , t e s t e , h_ini= 0 . 1 _dp , t i n y 1= t i n y ( 1 . 0 _dp) r e a l ( kind= dp ) , parameter : : b i g 1= huge ( 1 . 0 _dp) complex ( kind= dp ) , parameter : : z0= ( 0 . 0 _dp , 0 . 0 _dp ) , z1o10= ( 0 . 1 _dp , 0 . 0 _dp) complex ( kind= dp ) , parameter : : z2= ( 2 . 0 _dp , 0 . 0 _dp ) , z4= ( 4 . 0 _dp , 0 . 0 _dp) complex ( kind= dp ) : : c , den , d i v d f 1 , d i v d f 2 , dvdf1p , f z r , z_inc , z r p r e v complex ( kind= dp ) : : f z r d f l , f z r p r v , h , hprev , z e r o , sqr , him2 , him1 INTERFACE function f n ( z ) use Modelos_Computacionais_Dados complex ( kind= dp ) , intent ( in ) : : z complex ( kind= dp ) : : fn
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

88

4.3. Razes complexas de funes analticas

end function f n END INTERFACE ! i f ( nnov < 1 ) then print , O argumento nnov deve s e r >= 1 . stop end i f ! Inicializacoes . t e s _ r e a l= . f a l s e . ; t e s _ i t e r= . f a l s e . ; tes_g_mxit= . f a l s e . i f ( p r e s e n t ( f n r e a l ) ) t e s _ r e a l= f n r e a l i f ( p r e s e n t ( f a t o r ) ) h_ini= f a t o r h_ini i f ( p r e s e n t ( i t e r a c ) ) t e s _ i t e r= . t r u e . i f ( b i g 1 t i n y 1 < 1 . 0 _dp) t i n y 1= 1 . 0 _dp/ b i g 1 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 ) ) ! Erro de p r i m e i r a e s p e c i e . e p s 2 = max( e r r a b s , 1 0 . 0 _dp t i n y 1 ) ! Erro de segunda e s p e c i e . n t o t= nnov + nprev ! l _ r a i z e s : do i = nprev + 1 , n t o t n_it = 0 tes_maxit= . f a l s e . ! 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 = z1o10 cmplx ( h_ini , kind= dp ) i f ( abs ( z e r o ) > h_ini ) h= z1o10 z e r o him2= h c a l l d f l a c ( z e r o , him2 , i , f z r , dvdf1p ) ! f ( z e r o + h ) him1= h c a l l d f l a c ( z e r o , him1 , i , f z r , f z r p r v ) ! f ( z e r o h ) hprev = him1 him2 z r p r e v= z e r o + him1 dvdf1p = ( f z r p r v dvdf1p ) / hprev l _ i t e r : do l _ d i v : do z_inc= z0 c a l l d f l a c ( z e r o , z_inc , i , f z r , f z r d f l ) z e r o= z e r o + z_inc h= z e r o z r p r e v i f ( tes_maxit ) then tes_g_mxit= . t r u e . e x it l _ i t e r end i f ! Testa c o n v e r g e n c i a da segunda e s p e c i e . 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 ! Testa c o n v e r g e n c i a da p r i m e i r a e s p e c i e . 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 ! 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 = cmplx ( 0 . 5 _dp , kind= dp ) h zero = zero h end do l _ d i v ! Inicia algoritmo principal . 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 ; z r p r e v = z e r o 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 z4 f z r d f l d i v d f 2
Autor: Rudi Gaelzer IFM/UFPel Verso: 22 de junho de 2011

Captulo 4. Solues de Equaes No Lineares i f ( t e s _ r e a l . and . ( r e a l ( s q r ) < 0 . 0 _dp ) ) s q r = z0 sqr = sqrt ( sqr ) t e s t e= s i g n ( 1 . 0 _dp , r e a l ( c ) r e a l ( s q r )+aimag ( c ) aimag ( s q r ) ) den = c + cmplx ( t e s t e , kind= dp ) s q r h = z2 f z r d f l / den fzrprv = f z r d f l zero = zero + h end do l _ i t e r zeros ( i ) = zero i f ( t e s _ i t e r ) i t e r a c ( i nprev)= n_it end do l _ r a i z e s i f ( tes_g_mxit ) print , Metodo nao c o n v e r g i u em , maxit , & p a s s o s para 1 ou mais r a i z e s . return CONTAINS subroutine d f l a c ( z e r o , z_inc , i , f z e r o , f z r d f l ) integer , intent ( in ) :: i complex ( kind= dp ) , intent ( in ) : : zero complex ( kind= dp ) , intent ( out ) : : fzero , f z r d f l complex ( kind= dp ) , intent ( inout ) : : z_inc logical : : t_den= . t r u e . integer :: j r e a l ( kind= dp ) : : v _ s f t complex ( kind= dp ) : : r o o t , den ! l_den : do n_it = n_it + 1 i f ( n_it > maxit ) tes_maxit= . t r u e . r o o t= z e r o + z_inc f z e r o = fn ( root ) fzrdfl = fzero l _ d e f l a c : do j = 2 , i den = r o o t z e r o s ( j 1) ! T e s t e para e v i t a r s i n g u l a r i d a d e ou o v e r f l o w . i f ( ( abs ( den ) < t i n y 1 ) . o r . & ( b i g 1 min ( abs ( den ) , 1 . 0 _dp) <= abs ( f z r d f l ) ) ) then ! D e s l o c a o ponto a l e a t o r i a m e n t e . c a l l random_number ( v _ s f t ) v _ s f t= 1 0 . 0 _dp ( v _ s f t 0 . 5 _dp) e p s 1 z_inc= z_inc + cmplx ( v_sft , kind= dp ) t_den= . f a l s e . e x it l _ d e f l a c else f z r d f l = f z r d f l / den t_den= . t r u e . end i f end do l _ d e f l a c i f ( t_den ) e x i t l_den end do l_den return end subroutine d f l a c end subroutine m u l l e r

89

Usando a rotina muller para encontrar as trs razes de p3 (x), dadas em (4.2b-d), obteve-se os seguintes resultados. Com errabs= 0 e errrel= 0.1d0, os resultados so: x1 x2 = = (0.662461653676260, 0.562201573489122) (0.662358990777978, 0.562279503661044)
Verso: 22 de junho de 2011

Autor: Rudi Gaelzer IFM/UFPel

90 x3

4.3. Razes complexas de funes analticas = (1.32471793173699, 6.241718792293410E 008)

com erros relativos respectivamente iguais a 1.483654014681657E 004, 1.700701981827868E 008, 5.089998023306140E 008 Com errabs= 0 e errrel= 1.0d-5, os resultados so: x1 x2 x3 = = = (0.662358978622395, 0.562279512062290) (0.662358978622373, 0.562279512062301) (1.32471795724475, 9.491574411619214E 027)

com erros relativos iguais a 2.878544463935637E 014, 0.000000000000000E + 000, 7.164977540849939E 027 Com errabs= 0 e errrel= 1.0d-8, os resultados so: x1 x2 x3 = = = (0.662358978622373, 0.562279512062301) (0.662358978622373, 0.562279512062301) (1.32471795724475, 8.128422767397306E 027)

com erros relativos iguais a 0.000000000000000E + 000, 0.000000000000000E + 000, 6.135964808919362E 027 Ou seja, observa-se que o mtodo rapidamente converge para os valores exatos das razes.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 5

Problemas de Valor Inicial [Em Construo]


5.1 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 denido 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), juntamente com as condies iniciais g0 y (x0 ) , y (x0 ) , . . . , y (n1) (x0 ) g1 y (x0 ) , y (x0 ) , . . . , y (n1) (x0 ) . . . gn1 y (x0 ) , y (x0 ) , . . . , y (n1) (x0 ) = = = a0 a1 . . . an1 , (5.1d) (5.1b) (5.1c) (5.1a)

sendo F ( ) um funcional qualquer de y (x) e suas derivadas at a ordem n, f (x) uma funo de x, g0 ( ) , . . . , gn1 ( ) funcionais das condies iniciais y (x0 ) , . . . , y (n1) (x0 ) e a0 , . . . , an1 constantes. Em problemas realsticos na fsica, geralmente os funcionais g0 , . . . , gn1 so lineares em y (x0 ) , . . . , y (n1) (x0 ) mas o funcional F pode ser no linear em y (x), . . . , y (n) (x) .

5.2

Equaes de diferenas nitas lineares

A soluo numrica do problema (5.1) envolve a discretizao da ODE, ou seja, a transformao da equao diferencial em uma equao de diferenas nitas. Para exemplicar, pode-se considerar o PVI linear y y ( x0 ) = = y, a0 , (5.2a) (5.2b)

cuja soluo y (x) = a0 exx0 . Para discretizar este PVI de uma forma trivial, considera-se a denio de uma derivada e omite-se o smbolo de limite: y (x) y (x + h) y (x) , h 91

92

5.2. Equaes de diferenas nitas lineares

sendo h um pequeno incremento em x. Desta forma, possvel armar 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= Empregando agora a identidade x x0 . Portanto, y = n lim 1+ 1+ x x0 n
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 nitas e suas solues so yn+1 yn = 1 yn+1 yn = n yn+1 (n + 1) yn = 0 = = = yn = yn = n + c n (n 1) +c 2 yn = cn!

Vamos considerar com algum detalhe uma equao de diferenas nitas linear de ordem N com coecientes 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)

a qual fornece as razes de um polinmio de grau N . Assumindo que todas as razes 1 , 2 , . . . , N so distintas, a soluo geral de (5.3) pode ser nalmente escrita como
n 2 n yn = c1 1 + c2 2 + + cN N , n = 0, 1, 2, . . . .

Se os valores de yn n = 0, . . . , N 1 forem dados, estes, juntamente com (5.3), formam um problema de valor inicial de diferenas nitas, o qual pode ser resolvido explicitamente resultando na soluo particular para yn . Como um exemplo, a equao de diferenas yn+3 2yn+2 yn+1 + 2yn = 0 possui a equao caracterstica 3 2 2 + 2 = 0,

cujas razes so 1 = 1, 2 = 1 e 3 = 2. Portanto, a soluo geral 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 Verso: 22 de junho de 2011
n

Captulo 5. Problemas de Valor Inicial [Em Construo] 1/3


1/3.

93

o qual forma um sistema linear nas constantes, cuja soluo c1 = 0, c2 = e c3 = Portanto, a soluo particular 1 2n n yn = (1) + . 3 3 Se alguma das razes da equao caracterstica (5.4) for dupla (1 , por exemplo), ento uma segunda n soluo da mesma n1 . No mesmo esprito, se algum par de razes de (5.4) forem complexo conjugadas (1 = 2 , por exemplo), ento estas podem ser escritas na sua forma polar e c1 1 + c2 2 pode ser reescrita na forma rn (C1 cos n + C2 senn), onde r = |1 | e = arg 1 . As propriedades das equaes de diferenas nitas consideradas nesta seo sero teis para os mtodos desenvolvidos no restante deste captulo.

5.3

Integrao numrica por srie de Taylor


y y ( x0 ) = f (x, y ) = y0 . (5.5a) (5.5b)

Considerando-se inicialmente um PVI de primeira ordem na forma

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 = fx + fy y y = dx = fx + fy f y = d2 f 2 = fxx + fxy f + fyx f + fyy f 2 + fy fx + fy f dx2 2 = fxx + 2fxy f + fyy f 2 + fy fx + fy 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 ) + h h2 hk1 (k1) 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)

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

94

5.4. O Mtodo de Runge-Kutta

Algoritmo 5.1 Algoritmo de Taylor de ordem k. Para encontrar uma soluo aproximada do PVI y y (a) sobre o intervalo [a, b]: 1. Escolha um passo h = (b a) /N . Dena xn = a + nh, n = 0, 1, . . . , N. 2. Obtenha as aproximaes yn de y (xn ) a partir da frmula de recorrncia yn+1 = yn + hTk (xn , yn ) , n = 0, 1, . . . , N 1, onde Tk (xn , yn ) est denido em (5.7). = = f (x, y ) y0

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 ca: yn+1 E = = yn + f (xn , yn ) , 1 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 xo 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 denio, 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.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 so satisfeitas para certas constantes positivas L e Y , o erro de convergncia en = y (xn ) yn do Mtodo de Euler no ponto xn = x0 + nh tem seu valor mximo dado por |en | hY (xn x0 )L e 1 . 2L

O teorema 5.1 mostra que o erro O(h), isto , en 0 proporcionalmente a h se x = xn mantido xo. Por outro lado, para um h xo, o erro aumenta na ordem exL quando x = xn se afasta de x0 .

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 Verso: 22 de junho de 2011

Captulo 5. Problemas de Valor Inicial [Em Construo]

95

Figura 5.1: Mtodo do ponto mdio ou Mtodo de Runge-Kutta de segunda ordem. Acurcia em segunda ordem obtida usando a derivada no incio do intervalo para encontrar uma soluo intermediria no ponto mdio do intervalo e, ento, usando a derivada no ponto mdio ao longo de todo o intervalo.

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 decincia 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

O Mtodo de Runge-Kutta de segunda ordem ou o Mtodo do ponto mdio

Numa tentativa de remediar esta decincia, 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 k2 yn+1 = hf (xn , yn ) = hf (xn + h/2, yn + k1/2) = yn + k2 + O h3 .

Como indicado no termo de erro, o uso do ponto mdio torna o mtodo acurado em segunda ordem. A gura 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 xo e n = 0, 1, . . . , so obtidas usando-se a seguinte sequncia de passos: 1. Calcule k1 dado por 2. A partir de k1 , calcule k2 dado por k2 = hf 1 1 xn + h, yn + k1 . 2 2 k1 = hf (xn , yn ) .

3. A partir de k2 , calcule a soluo yn+1 dada por yn+1 = yn + k2 .

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

96

5.5. Sistemas de equaes diferenciais

Figura 5.2: Mtodo de Runge-Kutta de quarta ordem. Em cada passo a derivada calculada 4 vezes: uma vez no ponto inicial, duas vezes no ponto mdio e uma vez no ponto nal. Destas derivadas o valor nal da soluo do PVI calculado.

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 signica 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

O Mtodo de Runge-Kutta de quarta ordem

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 k2 k3 k4 yn+1 = = hf (xn , yn ) hf (xn + h/2, yn + k1/2) (5.10a) (5.10b) (5.10c) (5.10d) (5.10e)

= hf (xn + h/2, yn + k2/2) = hf (xn + h, yn + k3 ) 1 = yn + (k1 + 2k2 + 2k3 + k4 ) + O h5 . 6

O mtodo de ordem 4 requer 4 clculos de f (x, y ) por passo h. Isto signica 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 gura 5.2 ilustra a aplicao do mtodo e o algoritmo 5.3 mostra a sua implementao.

5.5

Sistemas de equaes diferenciais

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 exemplicar 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) , juntamente com as condies iniciais g0 y (x0 ) , y (x0 ) , . . . , y (N 1) (x0 )
Autor: Rudi Gaelzer IFM/UFPel

(5.11a)

a0

(5.11b)
Verso: 22 de junho de 2011

Captulo 5. Problemas de Valor Inicial [Em Construo] Algoritmo 5.3 O Mtodo de Runge-Kutta de ordem 4. Dado o PVI y = f (x, y ) , y (x0 ) = y0 ,

97

aproximaes yn para y (xn ), sendo xn = x0 + nh para um passo h xo e n = 0, 1, . . . , so obtidas usando-se a seguinte sequncia de passos: 1. Calcule k1 dado por 2. A partir de k1 , calcule k2 dado por k2 = hf 3. A partir de k2 , calcule k3 dado por k3 = hf 4. A partir de k3 , calcule k4 dado por k4 = hf (xn + h, yn + k3 ) . 5. A partir de k1 , k2 , k3 e k4 , calcule a aproximao yn+1 dada por yn+1 = yn + 1 (k1 + 2k2 + 2k3 + k4 ) . 6 1 1 xn + h, yn + k2 . 2 2 1 1 xn + h, yn + k1 . 2 2 k1 = hf (xn , yn ) .

g1 y (x0 ) , y (x0 ) , . . . , y (N 1) (x0 ) . . . gN 1 y (x0 ) , y (x0 ) , . . . , y (N 1) (x0 ) Denindo inicialmente y1 (x) = y (x), podemos escrever: y1 (x) = y2 (x) y2 (x) = y3 (x) y3 (x) = y4 (x) . . . .. . yN 1 (x) = yN (x), nalmente, fazendo uso de (5.11a),

= a1 . . . = aN 1 .

(5.11c) (5.11d) (5.11e)

(5.12a) (5.12b) (5.12c) (5.12d)

yN (x) = f (x, y1 (x), y2 (x), , yN (x)) , com as condies iniciais (5.11be) escritas g0 (y1 (x0 ) , y2 (x0 ) , . . . , yN (x0 )) = a0

(5.12e)

(5.12f) (5.12g) (5.12h)

g1 (y1 (x0 ) , y2 (x0 ) , . . . , yN (x0 )) = a1 . . . . . . gN 1 (y1 (x0 ) , y2 (x0 ) , . . . , yN (x0 )) = aN 1 .

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 Verso: 22 de junho de 2011

98

5.5. Sistemas de equaes diferenciais

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 ) f2 (x, y1 , y2 , , yn ) . . . fN (x, y1 , y2 , , yn ) , (5.13a) (5.13b) (5.13c) y2 = . . . yN =

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 rk4 (programa 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.13a-c) ou (5.13d). O programador deve fornecer subrotina o valor da varivel independente x, o valor do passo h e, no vetor y, os valores das solues no ponto x. A rotina retorna com a soluo numrica do sistema de EDOs no vetor ysai, o qual pode ser o prprio vetor y, no ponto x + h posterior. A subrotina no atualiza o valor da varivel independente. Exemplo 5.1. Movimento harmnico amortecido. Suponhamos um corpo de massa m pendurado do teto por uma mola que exerce uma fora restauradora fR = ky , oscilando sob a ao da gravidade, mas imerso em um uido viscoso tal que a fora de resistncia passagem do corpo seja proporcional ao quadrado da velocidade do mesmo, fv = Cv 2 . Este problema pode ser escrito na forma de um PVI como: y = g C k y y |y | , m m y (0) = y0 , y (0) = v0 .

Denindo 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 k C y1 y2 |y2 | , 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. Resultados deste PVI so mostrados em ambos os painis da gura 5.3, os quais mostram a evoluo temporal da posio (y (t)) e da velocidade (v (t)) do oscilador harmnico. Quando C = 0 pode-se observar claramente o amortecimento na oscilao. O programa que gerou os dados para os grcos da gura 5.3 pode ser obtido em www.ufpel.edu.br/~rudi/grad/ModComp/Progs/Mov_Har_Amor.f90.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

Captulo 5. Problemas de Valor Inicial [Em Construo]

99

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 : ! x: Ponto i n i c i a l do i n t e r v a l o . ! y: Vetor de forma assumida contendo as s o l u c o e s do PVI no ponto x . ! 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 . ! O v e t o r y s a i pode s e r o p r o p r i o v e t o r y . ! ! Autor : Rudi G a e l z e r , IFM UFPel . ! Data : J u l h o / 2 0 1 0 . ! Obs : Baseada na s u b r o t i n a RK4 do Numerical R e c i p e s . ! subroutine rk4 ( x , y , h , y s a i , d e r i v s ) r e a l ( kind= dp ) , intent ( in ) : : x , h r e a l ( kind= dp ) , dimension ( : ) , intent ( in ) : : y r e a l ( kind= dp ) , dimension ( : ) , intent ( out ) : : y s a i INTERFACE subroutine d e r i v s ( x , y , dydx ) use Modelos_Computacionais_Dados r e a l ( kind= dp ) , intent ( in ) : : x r e a l ( kind= dp ) , dimension ( : ) , intent ( in ) : : y r e a l ( kind= dp ) , dimension ( : ) , intent ( out ) : : dydx end subroutine d e r i v s END INTERFACE r e a l ( kind= dp ) : : h6 , hh , xh r e a l ( kind= dp ) , dimension ( s i z e ( y ) ) : : dydx , dym , dyt , yt ! c a l l v e r i f i c a _ t a m a n h o ( s i z e ( y ) , s i z e ( y s a i ) , rk4 ) hh= h 0 . 5 _dp h6= h / 6 . 0 _dp c a l l d e r i v s ( x , y , dydx ) xh= x + hh yt= y + hh dydx c a l l d e r i v s ( xh , yt , dyt ) yt= y + hh dyt c a l l d e r i v s ( xh , yt , dym) yt= y + h dym dym= dyt + dym c a l l d e r i v s ( x+h , yt , dyt ) y s a i= y + h6 ( dydx + dyt + 2 . 0 _dp dym) return end subroutine rk4

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

100

5.5. Sistemas de equaes diferenciais

Figura 5.3: Solues numricas do PVI do exemplo 5.1 utilizando a rotina rk4. Esquerda: y (t) t. Direita: v (t) t.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de junho de 2011

ndice Remissivo
Erros Fontes, 1 Nmeros, 1 Representao inteiros, 2 Representao reais, 3

101