Você está na página 1de 98

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 julho de 2009

Sumrio
Referncias Bibliogrficas

iii

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 Ruffini. . . . . . . . . . . . . . . . . . . . . .
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 Ruffini. . . . . . . . . . . . . . . . . . . . . .
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 flutuante . . . . . . . . . .
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 significativos . . . . . . . . . . . . . . . . . . .
1.5.5 Erros na lgebra de ponto flutuante . . . . . . . . . . . . . . . .
1.5.5.1 Erros de arredondamento . . . . . . . . . . . . . . . . .
1.5.5.2 Erros de truncamento . . . . . . . . . . . . . . . . . . .
1.5.5.3 Anlise de erros de ponto flutuante . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1
1
1
2
3
6
6
6
7
7
7
9
9
9
9
9
10
10
13
13
14
14
14
14
16
16
17
21
24

2 Derivao Numrica
2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Frmulas clssicas de diferena finita . . . . . . . . . . . . . .
2.2.1 Frmula de diferena adiantada (forward difference) .
2.2.2 Frmula de diferena atrasada (backward difference) .
2.2.3 Frmula de diferena centrada (centered difference) . .
2.2.4 Frmula de 5 pontos . . . . . . . . . . . . . . . . . . .
2.3 Frmulas de diferenas finitas para a derivada segunda . . . .
2.3.1 Frmula de trs pontos . . . . . . . . . . . . . . . . .
2.3.2 Frmula de cinco pontos . . . . . . . . . . . . . . . . .
2.4 Frmulas para o clculo de derivadas em pontos fora da rede
2.4.1 Derivada de trs pontos . . . . . . . . . . . . . . . . .
2.4.2 Derivada de quatro pontos . . . . . . . . . . . . . . . .
2.4.3 Derivada de cinco pontos . . . . . . . . . . . . . . . .
2.5 Extrapolao de Richardson e estimativa de erro . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

27
27
27
27
28
28
29
30
30
30
30
30
30
31
31

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

ii

SUMRIO

3 Integrao Numrica
3.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Frmulas de Newton-Cotes . . . . . . . . . . . . . . . . . . .
3.2.1 Frmulas fechadas de Newton-Cotes . . . . . . . . . .
3.2.1.1 Regra trapezoidal (N = 1) . . . . . . . . .
3.2.1.2 Regra de Simpson (N = 2) . . . . . . . . .
3.2.1.3 Regra de Simpson dos 3/8 (N = 3) . . . . .
3.2.1.4 Regra de Bode (N = 4) . . . . . . . . . . .
3.2.1.5 Regras em ordens mais altas (N
5) . . .
3.2.2 Frmulas abertas de Newton-Cotes . . . . . . . . . . .
3.2.3 Frmulas fechadas estendidas . . . . . . . . . . . . . .
3.2.3.1 Regra trapezoidal estendida . . . . . . . . . .
3.2.3.2 Regra de Simpson estendida . . . . . . . . .
3.2.4 Estimativas de erro nas frmulas de Newton-Cotes . .
3.3 Quadratura gaussiana . . . . . . . . . . . . . . . . . . . . . .
3.3.1 Idia bsica na quadratura gaussiana . . . . . . . . . .
3.3.2 Frmulas gaussianas clssicas . . . . . . . . . . . . . .
3.3.2.1 Frmula de Gauss-Legendre . . . . . . . . . .
3.3.2.2 Frmula da Gauss-Chebyshev . . . . . . . .
3.3.2.3 Frmula de Gauss-Laguerre . . . . . . . . . .
3.3.2.4 Frmula de Gauss-Hermite . . . . . . . . . .
3.4 Integrao automtica e adaptativa . . . . . . . . . . . . . . .
3.4.1 Integrao de Romberg . . . . . . . . . . . . . . . . .
3.4.2 Integrao automtica usando quadraturas gaussianas
3.4.3 Integrao adaptativa . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

37
37
38
38
40
40
41
42
42
43
43
43
44
45
46
47
48
49
51
53
53
54
55
60
61

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

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

63
63
63
64
67
70
72
76
76

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

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

83
83
83
85
86
86
87
88
88

. . .
reais
. . .
. . .
. . .
. . .
. . .
. . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

5 Problemas de Valor Inicial [Em Construo]


5.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . .
5.2 Equaes de diferenas finitas 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 . . . . . . . . . . .

Autor: Rudi Gaelzer IFM/UFPel

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

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

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

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

Verso: 22 de julho de 2009

Referncias Bibliogrficas
[1] Intel fortran compiler for linux, http://www.intel.com/software/products/compilers/flin/docs/manuals.htm,
Acesso em: 01 jun. 2005.
[2] M. Abramowitz and I. A. Stegun, Handbook of mathematical functions, Dover, New York, 1970.
[3] S. D. Conte and C de Boor, Elementary numerical analysis. an algorithmic approach, third ed., International series in pure and applied mathematics, McGraw-Hill, New York, 1980, 432 + xii pp.
[4] M. Cristina C. Cunha, Mtodos Numricos, segunda ed., Unicamp, Campinas, 2000, 216 pp.
[5] Rudi Gaelzer, Introduo ao Fortran 90/95, http://www.ufpel.edu.br/ rudi/grad/ModComp/Apostila/Apostila.html, Pelotas, November 2006, 138 + vi pp.
[6] D. Goldberg, What every computer scientist should know about floating point arithmetic, ACM Computing Surveys 23 (1991), 548.
[7] Sebastio Ccero Pinheiro Gomes, Mtodos Numricos: Teoria e Programao, FURG, Rio Grande,
1999, 190 pp.
[8] Joe D. Hoffman, Numerical methods for engineers and scientists, second ed., Marcel Dekker, New York,
2001, 823 + xi pp.
[9] Rubin H. Landau and Manuel Jos Pez Meji, Computational physics. Problem solving with computers,
John Wiley & Sons, New York, 1997, 511 + xviii pp.
[10] D. E. Mller, A method of solving algebraic equations using automatic computer, Mathematical Tables
and Other Aids to Computation 10 (1956), 208215.
[11] Tao Pang, An introduction to computational physics, second ed., Cambridge University Press, New
York, 2006, 385 + xvi pp.
[12] W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery, Numerical recipes in fortran 90,
Fortran Numerical Recipes, vol. 2, Cambridge, New York, 1997, 552 pp.
[13] John R. Rice, Numerical Methods, Software, and Analysis, McGraw-Hill, New York, 1983, 483 + xii
pp.
[14] Germn Ramn Canahualpa Suazo, Apostila de Clculo Numrico, DME - IFM - UFPel, Pelotas,
November 2004, 117 + vii pp.
[15] David M. Young and Robert Todd Gregory, A Survey of Numerical Mathematics, vol. I, Dover, New
York, 1988, 548 + x pp.

iii

iv

Autor: Rudi Gaelzer IFM/UFPel

REFERNCIAS BIBLIOGRFICAS

Verso: 22 de julho de 2009

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 flutuante em cdigo binrio e as fontes de erros que invariavelmente ocorrem
quando se faz necessrio usar uma representao finita para representar um nmero ou uma funo matemtica que, em geral transcendental e/ou necessita de uma soma ou produto infinito 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 finita de nmeros em um computador e/ou da implementao numrica de um
determinado clculo. As incertezas introduzidas contaminam a soluo e importante tentar-se balancear
as incertezas. Se a incerteza no modelo matemtico de 1%, ento no faz sentido a implementao de um
modelo numrico e de um mtodo que atinja 6 dgitos de preciso, por exemplo.
O diagrama da figura 1.1 ilustra o processo usualmente percorrido quando se busca uma soluo para
um problema fsico real a partir de uma modelagem, inicialmente matemtica, seguida por uma modelagem
computacional e, finalmente, passando pela implementao do mtodo numrico a partir da modelagem
computacional, seguida pela obteno dos resultados. As incertezas ocorrem desde a fase de modelagem
matemtica at a soluo numrica. Neste captulo, sero abordadas algumas fontes de incertezas na etapas
de modelagem computacional e implementao do mtodo numrico.

1.2

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

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 fica explicitada na forma polinomial, onde N escrito
como:
N = an bn + an1 bn1 + + a1 b + a0 .
(1.1)
At este momento, N tem sido tratado de uma forma abstrata. Por uma questo evolutiva, N tende a
ser visto como um nmero na base 10 (decimal),
N = (an an1 . . . a1 a0 )10 an an1 . . . a1 a0 .
Caso se passe a representar N sempre na base decimal, ento deve-se abordar as outras representaes do
ponto de vista de converses de ou para a base 10.
Mtodo das divises sucessivas
Considera-se inicialmente a converso de um inteiro da base decimal para a base binria, uma vez que
esta ser a representao mais provvel em um computador. Para realizar-se esta converso de uma maneira
prtica, pode-se usar o mtodo das divises sucessivas, no qual N e os sucessivos quocientes qi so divididos
por 2, sendo coletados os restos ri = 0, 1 at que o ltimo quociente seja qn = 0, 1:

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 julho de 2009

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 = (1100)2
25 = (11001)2
315 = (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 = (qn rn1 . . . r2 r1 r0 )b
= qn bn + rn1 bn1 + + r2 b2 + r1 b1 + r0 b0 .
Assim,
12 = (14)8 = (C)16
25 = (31)8 = (19)16
315 = (473)8 = (13B)16 .
O programa 1.1 implementa o mtodo das divises sucessivas para a converso de qualquer nmero
inteiro da base 10 para a base 2.

1.2.2

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 julho de 2009

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 julho de 2009

Captulo 1. Representao de Nmeros e Erros


Exemplo 1.1.

Seja Xf = 0, 8125, ento


0, 6250
2
1, 2500

0, 8125
2
1, 6250

0, 2500
2
0, 500

0, 500
2 .
1, 0000

Ou seja,
0, 8125 = (0, 1101)2 .
O exemplos a seguir mostram a dificuldade de se obter a representao de um nmero fracionrio em
outra base.
Exemplo 1.2.

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 infinitum. Portanto,


0, 1 = (0, 0001100110011 . . . )2 .
Exemplo 1.3.

Seja Xf = 0, 5225, ento

0, 5225
2
1, 0450

0, 0450
2
0, 0900

0, 0900
2
0, 1800

0, 1800
2
0, 3600

0, 3600
2
0, 7200

0, 7200
2
1, 4400

0, 4400
2
0, 8800

0, 8800
2
1, 7600

0, 7600
2
1, 5200

0, 5200
2
1, 0400

0, 0400
2
0, 0800

0, 0800
2
0, 1600

0, 1600
2
0, 3200

0, 3200
2
0, 6400

0, 6400
2
1, 2800

0, 2800
2
0, 5600

0, 5600
2
1, 1200

0, 1200
2
0, 2400

0, 2400
2
0, 4800

0, 4800
2 .
0, 9600

Ou seja,
0, 5225 = (0, 10000101110000101000 . . . )2 .
Este exemplo mostra que em um computador, onde o espao para representao de um nmero finito, este
nmero ter que ser arredondado.
A forma polinomial de um nmero fracionrio dada por:
Xf = 1 21 + 2 22 + 3 23 + .
Portanto, um nmero real X = Xi + Xf pode ser representado na base 2 por
X = an 2n + an1 2n1 + + a0 20 + 1 21 + 2 22 + 3 23 + .
= (an an1 . . . a0 , 1 2 3 . . . )2 .
Exemplo 1.4.

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 julho de 2009

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 = am ,
bm1 = am1 + 2bm ,
bm2 = am2 + 2bm1 ,
.. .. ..
. . .
b1 = a1 + 2b2 ,
b0 = a0 + 2b1 .
E ento,

1.2.3.2

N = b0 .
Diviso de Ruffini.

Equivalente ao mtodo anterior, diferindo somente na disposio dos coeficientes ai e bi :


2

am

am1
2bm

a2
2b3

a1
2b2

a0
2b1

bm

bm1

b2

b1

b0

e, novamente,

Exemplo 1.5.

N = b0 .
Seja o nmero (11101)2 . Ento, a partir da seqncia de Horner,
b4 = a4 = 1,
b3 = a3 + 2b4 = 1 + 2.1 = 3,
b2 = a2 + 2b3 = 1 + 2.3 = 7,
b1 = a1 + 2b2 = 0 + 2.7 = 14,
b0 = a0 + 2b1 = 1 + 2.14 = 29.

A partir da diviso de Ruffini,


2
Portanto,

1
1

1
2
3

1
6
7

0
14
14

1
28
29

(11101)2 = 29.

Esta metodologia pode ser generalizada para converter qualquer nmero inteiro na base b para a base
decimal. Considere o nmero
N = (am . . . a2 a1 a0 )b .
Usando o Algoritmo de Horner, por exemplo, temos a seqencia
cm = am ,
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 1. Representao de Nmeros e Erros

cm1 = am1 + bcm ,


cm2 = am1 + bcm1 ,
.. .. ..
. . .
c1 = a1 + bc2 ,
c0 = a0 + bc1
e, novamente,

1.2.4

N = c0 .

Converso de nmeros fracionrios da base b para a base decimal

Considere um nmero fracionrio com representao finita na base binria:


Xf = (0, 1 2 . . . n )2 .
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 modificaes.
1.2.4.1

Algoritmo de Horner.

No caso de um nmero fracionrio, o algoritmo fica


bn = n ,

1
bn1 = n1 + bn ,
2
1
bn2 = n2 + bn1 ,
2
.. .. ..
. . .
1
b2 = 2 + b3 ,
2
1
b1 = 1 + b2 ,
2
1
b0 = b1 .
2
Ento,

1.2.4.2

N = b0 .
Diviso de Ruffini.

No case de um nmero fracionrio,


1
2

am

bm
Exemplo 1.6.

am1
1
bm
2
bm1

a2
1
b3
2
b2

a1
1
b2
2
b1

0
1
b1
2
b0

O nmero (0, 10111)2 , pelo Algoritmo de Horner, fica


b5 = 5 = 1,
1
1
3
b4 = 4 + b5 = 1 + .1 = ,
2
2
2
1
1 3
7
b3 = 3 + b4 = 1 + . = ,
2
2 2
4
1
1 7
7
b2 = 2 + b3 = 0 + . = ,
2
2 4
8

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

1.2. Representao de nmeros em diferentes bases


1
1 7
23
b1 = 1 + b2 = 1 + . =
,
2
2 8
16
1
23
b0 = b1 =
.
2
32

Portanto,

23
= 0, 71875.
32
Uma outra situao que pode ocorrer quando o nmero binrio for infinito, por exemplo, atravs de
uma seqncia de dgitos peridicos:
(0, 10111)2 =

Xf = 0, 1 2 . . . n 1 2 . . . m

onde 1 2 . . . m indica que a seqncia de dgitos 1 2 . . . m se repete ad infinitum. Na base decimal, tal
nmero dado por
Xf = 1 21 + 2 22 + + n 2n + 1 2n1 + 2 2n2 + + m 2nm
+ 1 2nm1 + 2 2nm2 + + m 2n2m
+ 1 2n2m1 + 2 2n2m2 + + m 2n3m
+ .
Observa-se que este nmero pode ser escrito como
Xf = 1 21 + 2 22 + + n 2n + 1 21 + 2 22 + + m 2m 2n
+ 1 21 + 2 22 + + m 2m 2nm
+ 1 21 + 2 22 + + m 2m 2n2m
+ 1 21 + 2 22 + + m 2m 2n3m
+ ,
Xf = 1 21 +2 22 + +n 2n + 1 21 + 2 22 + + m 2m 2n 1 + 2m + 22m + 23m + .
Usando agora a identidade,
1
= 1 + x + x2 + x3 + , (para |x| < 1),
1x
temos
1 + 2m + 22m + 23m + =
obtm-se

1
2m
=
,
1 2m
2m 1

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

2mn
.
2m 1

As duas expresses entre parnteses tm a mesma forma e podem ser calculadas diretamente usando
qualquer um dos mtodos descritos anteriormente.
Exemplo 1.7.

O nmero fracionrio
Xf = 0, 11010

= (0, 11010010010 . . . )2

tem o seu valor na base decimal dado por


Xf = 1.21 + 1.22 + 0.21 + 1.22 + 0.23

2
=
23 1

1 1
+
2 4

12
23
=
47
28

= 0, 8214285714285 = 0, 82142857142.
Em geral, se o nmero fracionrio tem representao infinita peridica na base b,
Xf = 0, 1 2 . . . n 1 2 . . . m

ento o seu valor decimal ser dado por


Xf = 1 b1 + 2 b2 + + n bn + 1 b1 + 2 b2 + + m bm

bmn
,
bm 1

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

Verso: 22 de julho de 2009

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

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

0
1

0
0
1

1
1
0

Deve-se ressaltar que a operao 0 - 1 resulta em 1, porm com o transporte de 1 para a coluna esquerda,
que deve ser acumulado ao subtraendo e, por conseqncia, subtrado do minuendo. Por exemplo, se
7 = (111)2 e 4 = (100)2 , ento
7 4 = (111)2 (100)2 = (11)2 = 3.
Outro exemplo, se 10 = (1010)2 e 8 = (1000)2 , ento
10 8 = (1010)2 (1000)2 = (10)2 = 2.

1.3.3

Multiplicao binria

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

0
1

0
0
0

1
0
1

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 suficientes; necessrio distingir-se, por exemplo, o sinal do nmero. Como no existe a
representao de um sinal + ou na memria de um computador, o recurso utilizado acrescentar um bit
adicional, para computadores binrios, ao nmero para representar o sinal. Este bit denominado bit de
sinal.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

10

1.4.1

1.4. Representao de nmeros em computadores digitais

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 significativo.
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
(1.2)

aq1 aq2 . . . a1 a0 ,

sendo {a0 , a1 , . . . , aq1 } {0, 1, . . . , b 1}, com aq1 representando o sinal do nmero. Esta seqncia de
dgitos denominada palavra. Por exemplo, no sistema binrio convenciona-se usar aq1 = 0 para + e
aq1 = 1 para .
A converso do nmero internamente representado por (1.2) para o sistema decimal realizado atravs
de uma frmula semelhante forma polinomial (1.1):
q2

N =s

(1.3)

ak bk ,
k=0

sendo
N o nmero inteiro na base decimal.
s o sinal (ou +1 ou 1).
q 1 o nmero de dgitos disponvel para representar o valor absoluto de N .
b a base, s vezes denominada de radix (um inteiro maior que 1).
ak um dgito vlido na representao (0

ak < b), k = 0, 1, . . . , q 1.

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
, (p = 1, 2, 4, 8) , a partir
nmero inteiro que pode ser representado internamente para cada espcie Nmax
de (1.3),

para p = 1;

127,

8p2
32.767,
para p = 2;
p
Nmax
=
2k = 1 + 2 + 22 + + 28p2 = 28p1 1 =
2.147.483.647,
para p = 4;

k=0

9.223.372.036.854.775.807, para p = 8.
Outras representaes de nmeros inteiros em computadores existem, como por exemplo as representaes complemento de 1 ou complemento de 2 [15]; porm, estas no sero discutidas aqui.
A representao de um nmero inteiro em um computador exata. Operaes aritmticas entre nmeros
inteiros tambm exata, sob as seguintes condies:
1. o resultado no pode se encontrar fora do intervalo de nmeros inteiros que podem ser representados;
2. a diviso somente pode ser realizada entre nmeros exatamente divisveis, isto , a parte fracionria
deve ser nula.

1.4.2

Representao de nmeros reais

A representao de nmeros reais em computadores, tambm denominada representao de ponto flutuante. Em uma representao de ponto flutuante, um nmero representado internamente atravs de uma
notao cientfica, isto , por um bit de sinal s (interpretado como positivo ou negativo), um expoente inteiro
exato e e uma mantissa inteira positiva M , sendo que um nmero limitado de dgitos permitido para e e
M . Tomando todas estas quantidades juntas, estas representam o nmero
x = s (0, d1 d2 . . . dn ) be ,
Autor: Rudi Gaelzer IFM/UFPel

(1.4)
Verso: 22 de julho de 2009

Captulo 1. Representao de Nmeros e Erros


1
=
2
3=
1
=
4
107 =

expoente de 8 bits

mantissa de 23 bits

10000000

10000000000000000000000

10000010

11000000000000000000000

01111111

10000000000000000000000

01101001

11010110101111111001010

11

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

Espcie
n
emin
emax
xmin
xmax
xeps

REAL(4)
24
-125
128
1, 1754944 1038
3, 4028235 1038
1, 1920929 107

REAL(8)
53
-1021
1024
2, 225073858507201 10308
1, 797693134862316 10308
2, 220446049250313 1016

REAL(16)
113
-16381
16384
3, 362103143112093506 104932
1, 189731495357231765 104932
1, 925929944387235853 1034

Tabela 1.2: Valores de n, emin , emax , xmin , xmax e xeps para o compilador Intel Fortran.

o qual est escrito em uma forma legvel para seres humanos. Alm das quantidades j definidas, em (1.4)
os dgitos d1 , d2 , . . . , dn so limitados pela base b e o expoente limitado ao intervalo emin
e
emax .
Adicionalmente, n
1 denominado de nmero de dgitos do sistema e define o tamanho da mantissa
M = 0, d1 d2 . . . dn .
Contudo, um computador somente pode representar os valores de e e E atravs de dgitos na base b. Um
computador digital (b = 2), por exemplo, dispe sempre de um tamanho de palavra finito, isto , o nmero
total de bits que podem ser utilizados para representar s (1 bit), a parte exponencial e a mantissa sempre
fixo, para uma dada espcie de varivel real. Um nmero real de preciso simples, por exemplo, tipicamente
representado por uma palavra de 4 bytes ou 32 bits, sendo que 1 bit utilizado para representar o sinal,
enquanto que 8 bits so utilizados para representar a parte exponencial, restando 23 bits para representar
a mantissa. Desta forma, tal nmero ser representado na memria do computador como
x = se7 e6 e5 e4 e3 e2 e1 e0 d23 d22 . . . d2 d1 ,
onde {s, e0 , . . . , e7 , d1 , . . . , d23 } = {0, 1}. A figura 1.2 ilustra representaes em 4 bytes de alguns nmeros.
Uma descrio mais aprofundada acerca da representao binria de nmeros em computadores digitais
pode ser obtida em [15, seo 2.5].
A converso do nmero x representado em (1.4) para a base decimal pode ser realizada pela frmula
polinomial
n

x = s be

dk bk .
k=1

Como exemplo, a tabela 1.2 mostra os valores de n, emin e emax para o compilador Intel Fortran.
Para uma base b qualquer, denotando este sistema pelo smbolo
x [b, n, emin , emax ] ,
observam-se as seguintes caractersticas:
O menor nmero positivo que pode ser representado neste sistema
xmin = 0, 1 bemin = bemin 1 .
Valores para xmin vlidos para o compilador Intel Fortran so apresentados na tabela 1.2. Isto significa
que qualquer nmero x tal que
xmin < x < xmin
no poder ser representado pelo computador. Esta ocorrncia denominada underflow. Os compiladores podem ser instrudos ou a parar o processamento neste ponto, disparando uma mensagem de
erro, ou a seguir o processamento arredondando x = 0.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

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)

bk

bemax = 1 bn bemax .

k=1

n vezes

Valores para xmax vlidos para o compilador Intel Fortran so apresentados na tabela 1.2. Isto significa
que qualquer nmero x tal que
x < xmax ou x > xmax
no poder ser representado pelo computador. Esta ocorrncia denominada overflow. Os compiladores usualmente tomam duas possveis providncias quando detectam um overflow; ou pram o
processamento do programa emitindo uma mensagem de erro, ou continuam o processamento atribuindo a x o valor simblico x = Infinito ou x = Infinito.
O maior nmero que pode ser somado ou subtrado a 1,0, com o resultado permanecendo indistingvel
de 1,0
xeps = b1n .

(1.5)

Os valores de xeps para o compilador Intel Fortran so tambm apresentados na tabela 1.2. A quantidade xeps tambm denominada de epsilon da mquina ( m ) ou de preciso da mquina.
Somente um conjunto finito F de nmeros racionais podem ser representados na forma (1.4). Os
nmeros neste conjunto so denominados nmeros de ponto flutuante. Para uma representao
normalizada (d1 = 0), este conjunto contm precisamente
2 (b 1) (emax emin + 1) bn1 + 1
nmeros racionais.
Exemplo 1.9. Considere um modelo simplificado de representao numrica de ponto flutuante dado por
x [2, 4, 5, 6]. Para este sistema:
o menor nmero positivo possvel :
xmin = (0, 1000)2 25 = 251 =

1
;
64

ou seja, a regio de underflow consiste no intervalo

1
1
<x<
.
64
64

O maior nmero positivo possvel :


xmax = (0, 1111)2 26 = 1 24 26 = 60;
ou seja, as regies de overflow consistem nos intervalos
x < 60,

x > 60.

O maior nmero que pode ser somado ou subtrado de 1,0 e que mantm o resultado inalterado :
xeps = 214 =

1
.
8

O nmero de elementos em F :
2.1. (6 + 5 + 1) 241 + 1 = 193.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

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 flutuante x [2, 3, 1, 2]. Para este sistema:

o menor nmero positivo possvel :


xmin = 211 =
ou seja, a regio de underflow consiste no intervalo
1
1
<x< .
4
4

1
.
4

O maior nmero positivo possvel :


xmax = 1 23 22 =

1
8

4=

7
;
2

ou seja, as regies de overflow consistem nos intervalos


7
x< ,
2

x>

7
.
2

O maior nmero que pode ser somado ou subtrado de 1,0 e que mantm o resultado inalterado :
1
xeps = 213 = .
4
O nmero de elementos em F :
2.1. (2 + 1 + 1) 231 + 1 = 33.
A frao positiva dos nmeros possveis em x [2, 3, 1, 2] est indicada na figura 1.3. Cada risco vertical
posiciona um nmeros representvel neste sistema.

1.5

Erros na representao e na lgebra de ponto flutuante

Nesta seo ser feita uma breve descrio dos principais erros envolvidos na representao de pontos
flutuantes e nas operaes algbricas entre os mesmos.

1.5.1

Preciso e acurcia

Os conceitos de preciso e acurcia so amide confundidos entre si. A diferena entre ambos oriunda
da diferena entre o hardware e o software disposio do programador.
Preciso1 refere-se ao quo prximo um nmero representado pelo computador representa o nmero que
ele ambiciona representar. A preciso de um nmero governada pelo nmero de dgitos empregados
na representao e na lgebra. Assim, a constante ser representada com maior preciso utilizando
8 bytes do que utilizando 4 bytes para armazenar o nmero (ver tabela 1.2).
Acurcia2 refere-se a quo prximo um nmero representado pelo computador (como resultado de uma
srie de operaes, por exemplo) est do valor correto do nmero que ele almeja representar. A acurcia
governada pelos erros (de truncamento e arredondamento) no mtodo numrico empregado. Assim,
se os nmeros 1 = 3, 1416304958 e 2 = 3, 1415809485 almejam ambos a representar o nmero
= 3, 141592654 . . . , o nmero 2 possui maior acurcia que 1 , embora ambos possuam a mesma
preciso.
Com freqncia, em linguagem coloquial refere-se preciso quando na verdade o correto seria referir-se
acurcia de um resultado. As sees a seguir indicam como se pode medir a acurcia de um nmero atravs
do clculo dos erros absoluto e relativo do mesmo.
1 Do
2 Do

ingls precision.
ingls accuracy.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

1.5. Erros na representao e na lgebra de ponto flutuante

14

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 flutuante. O erro absoluto (EAX ) definido como o valor absoluto da diferena
entre o valor exato e o valor aproximado:
EAx = |X f l (X)| .
Ou seja, conhecendo-se f l (X) e EAX , pode-se afirmar que
X = f l (X) EAx .
Em geral, somente possvel estimar-se o valor do erro absoluto.
Por exemplo, Arquimedes estimou o valor de atravs da mdia do permetro de polgonos que estavam
contidos em uma circunferncia de raio unitrio e de polgonos que continham a circunferncia. Fazendo
uso deste mtodo, Arquimedes foi capaz de estimar
min = 3, 1409 = 3 +

1335
1137
< < max = 3 +
= 3, 1428 . . . .
8069
9347

Desta forma, Arquimedes obteve erros absolutos iguais a EA = 6, 830 104 para min , EA = 1, 2339
104 para max e EA = 2, 7546 104 para a mdia entre min e max . Portanto, Arquimedes poderia
afirmar que
1
1
= (min + max ) (max min ) = 3, 14187 0, 00096.
2
2
1.5.2.2

Erro relativo

Seja X o valor exato de um nmero e f l (X) o seu valor aproximado, o erro relativo (ERX ) definido
como o erro absoluto dividido por |f l (X)|:
ERX =

EAX
X f l (X)
=
.
|f l (X)|
f l (X)

Voltando ao exemplo anterior, os erros relativos das estimativas de Arquimedes foram: ER = 2, 1741
104 para min , ER = 3, 9262 104 para max e ER = 8, 7674 105 para a mdia.
Em geral, a melhor medida para se estimar a preciso de uma aproximao o erro relativo, pois este
indica diretamente o nmero de dgitos significativos corretos na aproximao.

1.5.3

Erros na representao: arredondamento e truncamento

O tamanho finito da palavra utilizada em um computador digital para a representao de nmeros de


ponto flutuante 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 flutuante 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 julho de 2009

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 identificar ento
M = 0, 111111001101 . . . ,

e = 3.

Contudo, para o sistema x [2, 4, 5, 6] pode-se usar somente 4 dgitos na mantissa. Desta forma, uma
aproximao possvel para (y)2 fica:
f l ((y)2 ) = (0, 1111) 23 ,
o qual corresponde ao seguinte nmero na base 10: f l (y) = 0, 1171875 . . . , resultando em erros absoluto e
relativo:
EAy = 6, 272 103 ,
ERy = 5, 3525 102 = 5, 35%.
Este procedimento de aproximao denominado truncamento.3 Uma definio mais rigorosa do mtodo
de truncamento ser apresentada a seguir.
Dado um nmero X j na forma normalizada que no possua representao exata no sistema x [b, n, emin , emax ].
Sejam agora X o maior nmero representvel no sistema e que seja menor que X e X o menor nmero representvel no sistema e que seja maior que X. Ento,
X
Pode-se escrever X como

X.

X = (0, d1 d2 . . . dn ) be + gX ben ,

onde

gx < 1

a parcela de X que no pode ser includa na sua representao. Existem ento 2 maneiras de se realizar
a aproximao:
Truncamento. O truncamento consiste em simplesmente ignorar gX . Assim,
f l (X) = (0, d1 d2 . . . dn ) be ,
o qual representvel no sistema. Neste caso, os erros absoluto e relativo so
EAX = |X f l (X)| = |gX | ben < ben ,
EAX
gX ben
bn
=
<
= bn+1 ,
ERX =
f l (X)
(0, d1 d2 . . . dn ) be
(0, 1)b
pois (0, d1 d2 . . . dn )
(0, 1)b = b1 . Desta forma, obtm-se limites superiores para ambos os erros.
No exemplo acima, pode-se escrever:
(y)2 = (0, 1111) 23 + gy 234 , sendo gy = 0, 11001101 . . . .
Realizando ento o truncamento, obtm-se f l ((y)2 ).
Arredondamento. No arredondamento,4 executa-se a seguinte operao:
f l (X) =

(0, d1 d2 . . . dn ) be ,
se |gX | < 21
(0, d1 d2 . . . (dn + 1)) be , se |gX | 21 .

(1.6)

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 en
b
,
2

livre do termo em ingls chopping.


livre do termo ingls rounding.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

1.5. Erros na representao e na lgebra de ponto flutuante

16

de onde se obtm uma estimativa superior e o erro relativo ser

1 en

2b

,
se |gX | < 12

1 en
1
(0, d1 d2 . . . dn ) be
2b
<
= bn+1 ,
ERX <
1 en
e
b

(0,
1)

b
2
2

, se |gX | 12
e
(0, d1 d2 . . . (dn + 1)) b
o qual fornece uma estimativa superior para o erro relativo. No exemplo acima, como gy > 1/2, deve-se
somar 1 ao dgito d4 resultando, com o auxlio da tabela de adio de binrios apresentada na seo
1.3.1,
f l ((y)2 ) = (0, 1111) 23 + (0, 0001) 23 = (1, 0000) 23 = (0, 1000) 22 .
Neste caso, obtm-se

f l (y) = 0, 125,

o qual possui um erro relativo de 1,2% de y, bem menor que o erro obtido com o truncamento, que
foi de 5,35%.
Computadores mais recentes modificam ligeiramente o arredondamento em relao frmula apresentada em (1.6). Nesta, o ltimo dgito significativo (dn ) no ser alterado se |gX | < 1/2 e este ser
alterado se |gX | 1/2. H, portanto, uma ligeira preferncia para a alterao de dn no processo de
arredondamento, o que insere um erro sistemtico no processo. Atualmente, se |gX | = 1/2, o valor de
dn ser alterado somente em metade das situaes, com base em algum critrio. Este critrio pode
ser a paridade de dn , por exemplo. Assim, para b = 10 o nmero 12,5 seria arredondado para 12,
enquanto que 13,5 seria arredondado para 14. Este critrio tambm denominado arredondamento
par [6].

1.5.4

Nmero de dgitos significativos

Quando se conta o nmero de dgitos em um valor numrico, no se deve incluir os zeros no incio do
nmero, uma vez que estes zeros somente auxiliam a localizar a posio ideal do ponto decimal. Caso se
queira contar o nmero de decimais, ento os zeros direita do ponto decimal devem ser includos. Por
exemplo, o nmero 0, 00147 dado com trs dgitos mas possui cinco decimais. O nmero 12, 34 dado com
quatro dgitos, mas possui apenas dois decimais.
Quando se trabalha com uma representao de um nmero obtida por meio de um processo de arredondamento ou truncamento, uma maneira alternativa para se estimar a qualidade da aproximao, ou seja a
acurcia do nmero, consiste em computar o nmero de dgitos significativos corretos da representao. Se
f l (X) uma aproximao de X com k dgitos significativos corretos em uma representao de base b, ento
X f l (X)
=|
X

X|

1 k+1
b
,
2

onde k o maior nmero inteiro positivo para o qual a inegualdade acima verificada.
Exemplo 1.11.

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 significativos em f l (X) k = 5.

1.5.5

Erros na lgebra de ponto flutuante

Adicionalmente aos erros resultantes do truncamento ou do arredondamento na representao de nmeros de ponto flutuante por computadores, as operaes algbricas que necessariamente so realizadas
pelo computador introduzem dois outros tipos de erros no resultado destas operaes e que tendem a se
acumular medida que o nmero de operaes de ponto flutuante so realizadas pelo computador. Estes
erros so os erros de arredondamento5 e os erros de truncamento.6 Estes tipos de erros adicionais
sero brevemente discutidos nesta seo.
5 Neste caso, o termo erros de arredondamento possui um significado distinto do processo de arredondamento utilizado na
representao de nmeros reais, discutida na seo 1.5.3. O termo, neste contexto, consiste na traduo usualmente empregada
para o termo em ingls round-off errors.
6 Aqui tambm, o termo erros de truncamento no se refere ao processo de truncamento discutido na seo 1.5.3, mas sim
ao tipo de erro que em ingls denominado truncation errors.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 1. Representao de Nmeros e Erros


1.5.5.1

17

Erros de arredondamento

A origem deste tipo de erro est tambm relacionada com a representao finita das palavras em um
computador e surge com a realizao de operaes de ponto flutuante pelo mesmo.
Um exemplo simples ilustra o surgimento deste tipo de erro. Suponha-se que se esteja usando um sistema
numrico de base 10 com 5 dgitos na mantissa, semelhante representao (1.4). Deseja-se agora calcular
o valor da funo
sen x
1 cos x
=
f (x) =
sen x
1 + cos x
para x = 0, 007. Rotinas intrnsecas fornecidas pelo fabricante do compilador utilizado encarregam-se de
calcular o valor das funes trigonomtricas dentro da preciso disponvel, por meio de um processo de
arredondamento. Assim,
sen(0, 007) = 0, 69999 102
cos(0, 007) = 0, 99998.
A primeira expresso para f (x) fornece:
f (x) =

0, 2 104
1 0, 99998
1 cos x
=
= 0, 28572 102 ,
=
sen x
0, 69999 102
0, 69999 102

enquanto que a segunda expresso fornece:


f (x) =

sen x
0, 69999 102
=
= 0, 35000 102 ,
1 + cos x
1 + 0, 99998

sendo que este ltimo resultado o correto, dentro da preciso de 5 dgitos disponvel. O erro relativo
entre o primeiro valor (errado) e o segundo (correto) de 22,5%. Na primeira expresso, devido escolha
feita na preciso, restou somente um dgito relevante no numerador aps a subtrao. Isto levou a uma
perda de preciso e a um resultado errneo devido ao cancelamento de dois nmeros muito prximos entre
si. Este problema seria evitado caso o sistema de representao dispusesse de, pelo menos, mais um dgito
significativo na mantissa; porm, o ponto a ser frisado aqui que muito facilmente este tipo de erro de
arredondamento ocorre, devido ao tamanho finito da palavra no computador. Por outro lado, caso fosse
solicitado o valor de f (x) para x , seria a segunda expresso que forneceria um valor incorreto, enquanto
que a primeira forneceria um valor correto.
Este exemplo simples demonstra a perda de preciso numrica devida a erros de arredondamento, onde o
nmero de dgitos significativos reduzido na subtrao de dois nmeros prximos entre si. Isto mostra que
no possvel confiar cegamente no clculo realizado; deve-se sempre analisar cuidadosamente o algoritmo
empregado na procura de possveis fontes de erros.
Considera-se ento um nmero real X, o qual possui uma representao de mquina f l (X), que pode
ser escrita como
f l (X) = X (1 + X ) ,
onde

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)

f l (X) X
f l (X)

f l (X) X
f l (X)

1+

2
X
X
+
+ ...
f l (X) f l (X)2

f l (X) X X
f l (X) f l (X)

f l (X) X
f l (X)

f l (X) X
+
f l (X)

1+

X
f l (X)

f l (X) X
f l (X)

X
,
f l (X)

7
ou seja, | X | ERX
max , onde max denominado de unidade na ltima posio , ou uup. Isto ,
com k dgitos na mantissa e com a base b,
uup bk .
7 Do

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

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

1.5. Erros na representao e na lgebra de ponto flutuante

18

Dados agora dois nmeros reais positivos X e Y , deseja-se estimar os erros relativos das operaes
algbricas entre ambos:
X op Y,
sendo op um das operaes: +, , ou , conhecendo-se os erros relativos
f l (X) = X (1 +

X)

e f l (Y ) = Y (1 +

correspondentes:

).

Os resultados destas operaes de ponto flutuante so escritos:


f l (X + Y ) , f l (X Y ) , f l (X Y ) , f l (X/Y ) .
Assumindo que no ocorra overflow nem underflow, 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 flutuante no sistema binrio. Entre outros recursos, este padro especifica que todas as
operaes aritmticas devem ser idealmente realizadas como se o computador dispusesse de preciso infinita
e somente aps obtido o resultado este deve ser transformado para o sistema de ponto flutuante em uso
atravs de um processo de arredondamento [6]. Este procedimento pode ser implementado fazendo-se uso
de dgitos de guarda (guard digits) [6] e ele permite estimar o erro em cada operao de ponto flutuante
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 flutuante aumentam de forma extremamente rpida com o nmero de
operaes. Neste ltimo caso, para cada operao algbrica, obtm-se:
Adio. 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 +

X + Y
X +Y

= (X + Y ) 1 +

sendo
+

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 flutuante so:


EA+ = |X + Y | |f l (X) X + f l (Y ) Y | ,
X + Y
X
Y
ER+ = | + | =
=
+
.
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)

2. f l (X)

f l (Y ). Neste caso, obtm-se


ER+ |

X| .

ER+ |

f l (Y ). Neste caso,

Autor: Rudi Gaelzer IFM/UFPel

|.
Verso: 22 de julho de 2009

Captulo 1. Representao de Nmeros e Erros


3. O [f l (X)] = O [f l (Y )]. Agora,

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 +

X Y
X Y

= (X Y ) 1 +

sendo

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 flutuante so:


EA = |X Y | = |f l (X) X f l (Y ) Y | ,
X Y
X
Y
=
.
ER = | | =
+
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 |

X| .

ER |

f l (Y ). Neste caso,

3. O [f l (X)] = O [f l (Y )]. Agora, 1 f l (Y ) /f l (X)


ER

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

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

) .

Assim,
EA = |f l (X) Y + f l (Y ) X | ,
X
Y
ER = | | =
+
|
f l (X) f l (Y )
Portanto, ER O [max (
8A

X, Y

|.

)], da mesma forma que a adio.

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

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

1.5. Erros na representao e na lgebra de ponto flutuante

20
Diviso. Neste caso,

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

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

Y ,

2
Y
Y
f l (Y ) f l (Y )2
f l (Y )

f l (X Y ) =

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

f l (X Y ) (X Y ) +

f l (Y )

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

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

(X Y ) 1 +

X
Y

f l (X) f l (Y )

) .

Ento,
EA =
ER = |

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

X
Y

|
f l (X) f l (Y )

|.

Ou seja, ER da mesma ordem de grandeza que ER .


Para exemplificar o efeito deletrio que os erros de arredondamento podem apresentar em um clculos,
em princpio, completamente exatos, Rice [13, Captulo 3] mostra o grfico 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 figura 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 (figura 1.4 esquerda) evidencia um efeito muito mais
significativo dos erros de arredondamento nas operaes bsicas realizadas em nmeros de ponto flutuante
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 (figura 1.4 direita). O programa em Fortran 95 que
gerou figura 1.4 direita pode ser visto no programa 1.2.
Programa 1.2: Programa em Fortran 95 que gerou a figura 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 julho de 2009

Captulo 1. Representao de Nmeros e Erros

21

P(x)*10

-13

-1
0,99

1,01

x
Figura 1.4: Esquerda: Clculo do polinmio P (x) sem o uso de dgitos de guarda [13]. Direita: Clculo de P (x)
usando um compilador que segue as normas IEEE 754.

1.5.5.2

Erros de truncamento

Este erro ocorre quando se realiza um truncamento em um processo infinito. Um exemplo usualmente
empregado consiste no clculo do valor de uma funo transcendental usando sries de McLaurin. Suponhase que se deseja calcular o valor da funo f (x) = ex em x = 1, por exemplo. Neste caso,

e=

1
.
n!
n=0

Como no possvel ao computador a realizao da soma infinita, a srie dever ser truncada para algum
n > N . Neste caso, o resultado obtido ir diferir de e = 2, 71828182845904523536028747135 . . . por um certo
valor que depender do valor de N , isto , do nmero de termos considerados na soma. Este tipo de erro
soma-se ao erro de arredondamento considerado na seo 1.5.5.1. Em muitos casos, o erro de truncamento
exatamente a diferena entre o modelo matemtico e o modelo numrico empregados. Uma das principais
tarefas da anlise numrica (e uma das mais difceis) a determinao de uma valor mximo para o erro de
truncamento.
Em muitos modelos numricos existe um parmetro que governa o erro de truncamento. Por exemplo,
o nmero N de termos usados vindos de uma srie infinita, ou o tamanho x usado numa frmula de
derivao numrica. Uma maneira comum e prtica de estimar o erro de truncamento consiste em variar
este parmetro (tornando N maior ou x menor) e observar os resultados numricos. Se os resultados
computados convergirem a um certo nmero de dgitos significativos, ento pode-se decidir que o erro
de truncamento (juntamente com os demais tipos de erros) so pequenos o suficiente para produzir um
resultado aceitvel. Assim, muitas rotinas numricas incluem um teste de convergncia para decidir
quando os resultados so aceitveis. Infelizmente, no existe um teste de convergncia padro para qualquer
problema numrico, uma vez que se trata de um problema matematicamente insolvel. Em um nvel
intuitivo, isto significa que a convergncia nunca pode ser testada de forma totalmente confivel; do ponto
de vista matemtico, para um dado teste de convergncia que funciona em diversas situaes, sempre ocorre
um problema para o qual o teste ir falhar.
Ordem de convergncia. Trata-se de uma maneira de medir o quanto o erro de truncamento vai a zero
medida que o parmetro do mtodo varia. Desta maneira, pode-se comparar a eficcia de distintos mtodos.
Em funo do clculo da ordem de convergncia para diferentes mtodos, pode-se obter diversos resultados,
para distintos parmetros, tais como:
O mtodo converge tal como 1/N .
O mtodo converge tal como 1/k 3,5 .
O mtodo converge como h2 .
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

22

1.5. Erros na representao e na lgebra de ponto flutuante

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
significados. Em mtodos iterativos, a ordem de convergncia calculada atravs de uma frmula especfica.
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 significado. 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 definida com segue:
Uma funo f (x) dita ser O (g(x)) medida que x tende a L se
lim

xL

f (x)
< .
g(x)

A ordem de convergncia pode ser complicada (por exemplo, h1,5 / log h) mas em alguns casos simples
denominaes especiais so empregadas. Se a ordem de convergncia uma potncia inteira (por exemplo,
h2 , N 3 , x5 ), ento diz-se que a ordem de convergncia esta potncia (2, 3 ou 5), ou que a convergncia
de segunda, terceira ou quinta ordens. Por outro lado, diz-se convergncia logartmica ou exponencial se
a ordem envolve uma funo exponencial (como eN ) ou logartmica (como 1/ log N ).
Exemplo 1.12. As ordens de convergncia de dois mtodos de derivao numrica por diferena finita
sero calculadas:
1. Diferena adiantada (forward difference):
f (x)

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

2. Diferena centrada (centered difference):


f (x)

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

Em ambos os mtodos, para um parmetro h suficientemente pequeno e para um funo f (x) bem comportada em torno de x, pode-se desenvolver a mesma em srie de McLaurin:
1
1
f (x h) = f (x) f (x)h + f (x)h2 f (x)h3 + .
2
6
Neste caso, para o mtodo 1:
f (x + h) f (x)
1
= f (x) + f (x)h + .
h
2
Ou seja, como o termo predominante proporcional a h, a ordem de convergncia deste mtodo O(h).
Para o mtodo 2:
f (x + h) f (x h)
1
= f (x) + f (x)h2 + ,
2h
6
ou seja, este mtodo da ordem O h2 .
Como exemplo prtico da aplicao destes mtodos, deseja-se comparar os clculos da derivada da funo
f (x) = sen x2 no ponto x = 0, 5 pelos mtodos 1. e 2., comparando-os com o valor correto da derivada:
f (x) = 2x cos x2 , para x = 0, 5. O erro absoluto versus o parmetro h est traado na figura 1.5, enquanto
que o programa em Fortran 95 que calculou os dados est no programa 1.3.
Os grficos foram traados em escala log-log para se verificar diretamente o expoente da taxa de convergncia. Isto , se erro = k , ento a inclinao da reta k. Pode-se ver claramente que no incio do
processo iterativo, as taxas de convergncia dos mtodos 1. e 2. concordam com o valor previsto (h1 e h2 ,
respectivamente). Contudo, a partir de um determinado ponto os erros de arredondamento comeam a se
tornar mais importantes e o erro absoluto passa a variar a uma taxa proporcional a h1 .
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 1. Representao de Nmeros e Erros

23

10

-2

10

Erro Absoluto

-4

10

-6

10

Mtodo 1.
Mtodo 2.
+1
~h
+2
~h
-1
~h

-8

10

-10

10

-12

10

10

10

10

10

10

10

10

12

10

14

10

-1

Figura 1.5: Grfico log-log do erro absoluto nos clculos de derivadas usando mtodos de diferenas finitas. As
ordens de convergncia so h e h2 para os mtodos 1. e 2., respectivamente. Nota-se que erros de arredondamento
acabam por arruinar totalmente a computao antes de a preciso de 15 dgitos ser atingida.

Programa 1.3: Programa em Fortran 95 que calculou as diferenas finitas da figura 1.5.

program d e r i v a d a s
i m p l i c i t none
integer , parameter : : dp= 8
integer : : i
r e a l ( kind= dp ) : : h= 0 . 0 2 _dp
! h i n i c i a l i z a d o a 1/50.
r e a l ( kind= dp ) , parameter : : x= 0 . 5 _dp ! Valor de x f i x o .
r e a l ( kind= dp ) : : df1 , df2 , f l
!
f l = 2 . 0 _dpx c o s ( xx ) ! Valor c o r r e t o da d e r i v a d a em x .
open ( unit =10 , f i l e = d e r i v s . dat )
do i= 1 , 45
d f 1= ( f ( x+h ) f ( x ) ) / h
! C l c u l o mtodo 1 .
d f 2= 0 . 5 _dp ( f ( x+h ) f ( xh ) ) / h ! C l c u l o mtodo 2 .
write ( 1 0 , ) 1 . 0 _dp/h , abs ( df1 f l ) , abs ( df2 f l )
h= 0 . 5 _dph
! h d i v i d i d o por 2 .
end do
CONTAINS
function f ( x )
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
f= s i n ( xx )
return
end function f
end program d e r i v a d a s

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

1.5. Erros na representao e na lgebra de ponto flutuante

24
4

10

10

10

-2

Erro Absoluto

10

-4

10

-6

10

-8

10

-10

e
-12
e

10

-12

10

-14

10

-16

10

10

10
N

10

Figura 1.6: Grfico log-log do erro absoluto no clculo da srie de McLaurin para ex quando a srie truncada na
potncia N . Erros de arredondamento limitam a preciso do resultado para x = 1 antes que para x = 12.

Exemplo 1.13. Deseja-se calcular o erro absoluto decorrente do truncamento no clculo da srie de
McLaurin para a funo ex :

ex =

xn
xn

.
n!
n!
n=0
n=0

O erro, calculado para os pontos x = 1 e x = 12, em funo do parmetro N apresentado na figura


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 finita 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 flutuante

Os exemplos da seo 1.5.5.2 mostraram como um clculo relativamente simples pode ser completamente
arruinado por erros de arredondamento. Isto mostra que um determinado mtodo numrico sempre ter a
sua utilidade limitada a um determinado valor do parmetro de controle, de tal forma que uma posterior
alterao no valor deste parmetro ter sempre um efeito deletrio na computao desejada. Caso o programador deseje uma preciso maior que o mtodo pode oferecer, resta a ele buscar um mtodo alternativo
para atingir este objetivo.
Os erros de arredondamento tendem sempre a crescer com o nmero de operaes de ponto flutuante
realizadas. Como ser este crescimento no se pode prever de antemo. Existem processos particularmente
desafortunados, nos quais o erro de arredondamento cresce de forma linear ou atravs de uma lei de potncia
do tipo N k (k > 1), principalmente quando as operaes realizadas so sempre do mesmo tipo, resultando
em erros que sempre se somam. O resultado apresentado na figura 1.5 um exemplo deste tipo de situao.
A mesma tendncia de erro sistemtico ocorre quando o processo de representao finita realizado por
truncamento (ver seo 1.5.3).
Em um caso mais geral, os tipos de operaes de ponto flutuante envolvidas so distintos, de forma
a sempre haver a possibilidade que um erro ser parcialmente compensado por outro, resultando em um
aumento mais lento no erro total. Alm disso, se for utilizado o processo de arredondamento par descrito na
seo 1.5.3, os erros resultantes flutuaro de forma aleatria em valores positivos ou negativos, resultando
num crescimento mais lento. Desta forma, a teoria de probabilidades indica que o erro deve variar:

arr N xeps ,
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 1. Representao de Nmeros e Erros

25

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

program expo
i m p l i c i t none
integer , parameter : : dp= 8
integer : : j , n
r e a l ( kind= dp ) , dimension ( 2 ) , parameter : : x= ( / 1 . 0 _dp, 12.0_dp / ) , &
ex= ( / 2 . 7 1 8 2 8 1 8 2 8 4 5 9 0 4 5 2 3 5 3 6 0 2 8 7 4 7 1 3 5 2 7_dp ,
&
6 . 1 4 4 2 1 2 3 5 3 3 2 8 2 0 9 7 5 8 6 8 2 3 0 8 1 7 8 8 0 5 5 e6_dp/ )
r e a l ( kind= dp ) , dimension ( 2 ) : : soma , f a t o r
!
open ( unit =10 , f i l e = expo . dat )
do n= 1 , 100
soma= 1 . 0 _dp
f a t o r= soma
do j= 1 , n
f a t o r= f a t o r x/ r e a l ( j , dp )
soma= soma + f a t o r
end do
write ( 1 0 , ) n , abs ( somaex )
end do
end program expo

onde xeps dado por (1.5) e N um parmetro que mede o nmero de termos considerados no mtodo ou
o nmero de operaes de ponto flutuante realizadas.
O erro total ser ento a soma do erro de arredondamento e do erro de truncamento, decorrente da
aproximao feita no algoritmo. De acordo com os exemplos e argumentos apresentados, um forma comum
de se encontrar os erros de truncamento :
trunc

,
N

( > 0).

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 figura 1.5.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

26

1.5. Erros na representao e na lgebra de ponto flutuante

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 2

Derivao Numrica
2.1

Introduo

Derivao e integrao numricas so alguns dos mtodos que mais se utiliza em fsica computacional.
Com freqncia necessrio calcular ou f (x) ou f (x)dx para uma determinada funo f (x) para a qual
pode existir ou no uma expresso analtica. O objetivo deste captulo introduzir alguns dos mtodos mais
empregados na derivao numrica, mantendo-se como objetivo a preciso numrica dos mtodos.
Ao contrrio da integrao numrica, que ser apresentada no prximo captulo, a derivao possui alta
suscetibilidade a erros, tanto de truncamento quanto de arredondamento. Isto se deve prpria natureza
da derivao, definida por
f (x + h) f (x)
df
= lim
.
(2.1)
dx h0
h
Como sempre h erros associados com o clculo de f (x), estes sero ampliados medida que se executa
numericamente o processo de limite h 0. Como a representao finita de nmeros reais em computadores
impe um limite inferior no valor de f (x + h) f (x), erros de arredondamento rapidamente comeam a
se acumular durante o processo de limite, levando o clculo, finalmente, a um processo de cancelamento
catastrfico, como se pode observar no exemplo da figura 1.5. Portanto, derivao numrica somente deve
ser realizada quando no houver outro mtodo para a soluo do problema em estudo.
Nas prximas sees, sero apresentados mtodos que possibilitaro o clculo numrico de derivadas
primeiras e segundas de funes que possuem ou no uma expresso analtica conhecida. Alguns destes
mtodos sero posteriormente empregados no clculos de equaes diferenciais ordinrias ou parciais.

2.2

Frmulas clssicas de diferena finita

Como j foi adiantado no exemplo da pgina 22, a maneira mais bvia (e mais ingnua) de se calcular
numericamente uma derivada consiste em tomar literalmente a definio (27) e substitu-la por uma frmula
de diferena finita, resultando na frmula de diferena adiantada (forward difference).

2.2.1

Frmula de diferena adiantada (forward difference)

Esta frmula consiste em tomar (27) e ignorar o processo de limite:


f (x)

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

(2.2)

Aplicado desta forma, este procedimento est fadado ao quase certo fracasso, o que no impede de ser
largamente utilizado no clculo numrico de equaes diferenciais parciais. Portanto a frmula (27) somente
deve ser empregada quando consideraes de tempo computacionais forem importantes.
H duas fontes importantes de erros em (27): erro de truncamento e erro de arredondamento. O erro
de truncamento pode ser estimado a partir do desenvolvimento de f (x + h) em uma srie de McLaurin em
torno de x:
1
1
1
f (x h) = f (x) f (x)h + f (x)h2 f (x)h3 + f iv (x)h4 + ,
(2.3)
2
6
24
resultando
f (x + h) f (x)
1
= f (x) + f (x)h + O h2 .
h
2
27

2.2. Frmulas clssicas de diferena finita

28

Ou seja, o erro de truncamento da ordem


t

|f h| .

Para diminuir este erro (para valores finitos de f ), poderia-se tentar diminuir o valor de h, o que acabaria
levando ao aumento do valor do erro de arredondamento, como se pode observar na figura 1.5.
O erro de arredondamento possui duas origens. A primeira seria o erro no processo de arredondamento
realizado na representao finita dos pontos x e x + h, conforme discutido na seo 14. Estes erros podem
ser substancialmente diminudos se o computador e o compilador empregarem dgitos de guarda. Assim,
supondo-se as representaes de x e x + h exatas, ainda resta o erro de arredondamento no processo de
clculo da derivada [f (x + h) f (x)] /h. Este erro da ordem
a

f (x)
,
h

onde f a preciso fracional no clculo de f (x). Para uma funo bem comportada, f m , sendo m a
preciso da mquina (12). O fato de a h1 pode ser inferido a partir da figura 23. Assim, o erro total
no clculo de (27) pode ser estimado como
total

|f h| +

f (x)
.
h

(2.4)

O valor de h que minimiza este erro pode ser estimado pelo clculo do mnimo de
hmin

f
f

total ,

resultando

f xc ,

onde xc = f /f denominado escala de curvatura de f (x) ou de escala caracterstica sobre a qual f (x)
varia. Na ausncia de uma melhor informao, usualmente usa-se xc x.
Portanto, o erro relativo na melhor estimativa da derivada, conforme dada por (27) :
total

|f |

|f f |
f2

1/2

f,

onde se sups que f , f e f sejam todos da mesma ordem de grandeza. Pode-se ver que a frmula de
diferena adiantada fornece como melhor estimativa somente a raiz quadrada do epsilon de mquina. Para

4
preciso simples, m 107 , portanto,
, ou seja, 4 dgitos de preciso. J para preciso dupla,
m 10

16
8
, resultando
, ou 8 dgitos significativos.
m 10
m 10

2.2.2

Frmula de diferena atrasada (backward difference)

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

Uma estimativa bem melhor para a derivao obtida a partir da frmula


f (x)

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

(2.6)

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

Verso: 22 de julho de 2009

Captulo 2. Derivao Numrica

29

Ou seja, o erro de truncamento deste mtodo da ordem


t

|f (x)| h2 ,

resultando na seguinte estimativa de valor de h que minimiza o erro total:


3

hmin

f
f

f xc

e com um erro relativo igual a


total

|f |

f
f

f2

( f)

2/3

2/3

( f)

2/3

2/3

Assim, para preciso simples, m 105 , ou seja, 5 dgitos de preciso, e para preciso dupla, m 1011 ,
ou 11 dgitos significativos, aumentando sensivelmente a preciso na estimativa da derivada. A vantagem
desta frmula comparada com a frmula (2.2) claramente visvel na figura 1.5.

2.2.4

Frmula de 5 pontos

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


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

Portanto,

f (x 2h) 8f (x h) + 8f (x + h) f (x + 2h)
1
+ f v (x)h4 ,
12h
30
a qual conhecida como derivada de 5 pontos.
O erro de truncamento agora da ordem
f (x)

(2.8)

|f v | h4 ,

o que implica na seguinte estimativa de hmin que minimiza o erro total:


hmin

f |f |
,
|f v |

com um erro relativo da ordem


4

total

|f |

|f v | |f |
5

|f |

4/5
f .

(2.9)

4/5

Para preciso simples, m 106 , ou seja, 6 dgitos significativos corretos, enquanto que em preciso dupla,
4/5
13
, ou seja, 13 dgitos significativos corretos.
m 10
Combinaes ainda mais elaboradas levam a aproximaes ainda mais precisas para a derivada. Entretanto, o nmero de clculos da funo f (x) em diferentes pontos aumenta com a preciso do mtodo
empregado. Por conseguinte, no usualmente vantajoso usar um mtodo ainda mais preciso que a frmula
da derivada de 5 pontos (2.8).
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

30

2.3. Frmulas de diferenas finitas para a derivada segunda

2.3

Frmulas de diferenas finitas 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

Realizando-se a seguinte combinao linear:


f (x + h) 2f (x) + f (x h) = f (x)h2 +

1 iv
f (x)h4 + O h6 + ,
12

ou seja,

f (x + h) 2f (x) + f (x h)
1
f iv (x)h2 ,
(2.10)
2
h
12
a qual j parte de uma preciso equivalente ao mtodo de diferena centrada (2.6) para a derivada de
primeira ordem.
f (x)

2.3.2

Frmula de cinco pontos

Uma aproximao ainda melhor obtida a partir da combinao:


f (x 2h) + 16f (x h) 30f (x) + 16f (x + h) f (x + 2h) 12f (x)h2

2 vi
f (x)h6 ,
15

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
definida somente em pontos regularmente espaados em uma rede.
O problema consiste agora em determinar o valor da derivada de f (x) em pontos sobre ou fora da rede.
Agora, o parmetro h ir representar o espaamento da rede, ou seja, f (x) conhecida nos pontos x = xi ,
i = 1, 2, . . . , n, tais que x1 < x2 < x3 < < xn e xi+1 xi = h. Nestes pontos, f (xi ) fi . Deseja-se ento
calcular a derivada em um ponto x = xi + ph, sendo que a quantidade p no necessariamente inteira. Ou
seja, quer-se obter fp = f (xi + ph).
Abramowitz & Stegun [2] oferecem as seguintes frmulas para as derivaes.

2.4.1

Derivada de trs pontos


f (xi + ph)

1
h

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

f (xi + ph)

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)

onde f2 = f (xi + 2h).


Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 2. Derivao Numrica

2.4.3

31

Derivada de cinco pontos

f (xi + ph)

4p3 3p2 8p + 4
1 2p3 3p2 p + 1
f2
f1 + 2p2 5 pfi
2h
6
3
2p3 + 3p2 p 1
4p3 + 3p2 8p 4
f1 +
f2 + 0, 06f v ()h4 ,

3
6

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

2.5

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 fixa, como no caso de valores experimentais. Para estes casos, o programador est restrito s
frmulas e s estimativas de erro apresentadas na seo 2.4. Contudo, quando a forma funcional de f (x)
for conhecida, o mtodo da extrapolao de Richardson possibilita um resultado extremamente acurado,
juntamente com uma excelente estimativa de erro.
Considera-se, ento, um algoritmo numrico destinado a executar uma determinada operao. Sendo
fexato o valor exato do resultado desta operao e f l(f, h) a aproximao a fexato obtida com o uso do
algoritmo numrico, o qual de ordem n, regulado pelo parmetro de controle h. Pode-se ento escrever
fexato = f l(f, h) + A[f ]hn + B[f ]hn+m + ,
onde A e B so funcionais aplicados a f . Sendo o algoritmo de ordem n, o erro predominante dado
pelo termo A[f ]hn , ao passo que o termo posterior na correo dado pelo termo B[f ]hn+m , para m 1.
Aplicando-se ento o algoritmo para valores do parmetro h1 = h e h2 = h/R, sendo R > 1, resulta
fexato = f l(f, h) + A[f ]hn + B[f ]hn+m + . . .
fexato = f l f,

h
R

+ A[f ]

h
R

(2.12a)

h
R

+ B[f ]

n+m

+ ...

(2.12b)

Os erros absolutos nas aproximaes f l(f, h) e f l(f, h/R) so dados, em mais baixa ordem, respectivamente
por
EA(h) = fexato f l(f, h) A[f ]hn
h
h
EA
= fexato f l f,
A[f ]
R
R

h
R

Subtraindo (2.12b) de (2.12a), obtm-se, at a ordem n + m:


h
R
h
0 = f l(f, h) f l f,
R
0 = f l(f, h) f l f,

+ A[f ]hn A[f ]


+

h
R

+ O hn+m ,

(Rn 1)
A[f ]hn + O hn+m .
Rn

Resolvendo a equao acima para h1 e h2 , obtm-se ento as estimativas de erro, exatas at a ordem n + m:
A[f ]hn = EA(h)
A[f ]

h
R

= EA

h
R

f l f,

h
R

f l f,

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

f l(f, h)
h
R

(2.13a)
(2.13b)

Expresso (2.13a) consiste em uma estimativa do valor do erro do algoritmo empregando o parmetro h1 ,
ao passo que (2.13b) a estimativa do erro do mesmo algoritmo usando o parmetro h2 .
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

2.5. Extrapolao de Richardson e estimativa de erro

32

Uma vez obtida a estimativa de erro para a melhor aproximao (usando h2 ), pode-se adicionar esta
estimativa ao valor aproximado f l (f, h2 ) para se realizar um refinamento no resultado; isto , uma vez que
fexato = f l f,

h
R

+ A[f ]

h
R

n+m

h
R

+ B[f ]

n+m+

h
R

+ C [f ]

+ ...,

substituindo (2.13b) obtm-se o valor extrapolado


fexato = f l f,

h
R

h
R

+ f l f,

1
+ B[f ]
n
R 1

f l(f, h)

n+m

h
R

+ C [f ]

h
R

n+m+

+ ...,

ou
fexato =

1
h
Rn f l f,
Rn 1
R

h
R

f l(f, h) + B[f ]

n+m

n+m+

h
R

+ C [f ]

+ ...,

(2.14)

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 refinamentos: uma estimativa de erro ao
mesmo e um valor extrapolado de ordem mais alta. Contudo, Press et al. (1992) [12] constantemente
enfatizam que ordem mais alta no significa 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) ,

h
R

f l0

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 ]

n+m

h
R

h
R

+ C [f ]

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 ]

h
R

B[f ]

h
R2

n+m

= f l1
n+m

= f l1

h
R
h
R

f l1 (h)
f l1 (h)

Rn+m
Rn+m 1
1
Rn+m

(2.15a)
,

(2.15b)

sendo que EA1 (h) a estimativa de erro para f l1 (h), a qual no havia sido obtida na iterao anterior, e
EA1 (h/R) a estimativa de erro para f l1 (h/R). Agora, o novo valor extrapolado passa a ser f l2 (h), dado
por
h
h
1
Rn+m f l1 (h/R) f l1 (h)
+ f l1
f l1 (h)
=
,
(2.16a)
f l2 (h) f l1
n+m
R
R
R
1
Rn+m 1
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 2. Derivao Numrica

33

e
fexato = f l2 (h) + C [f ]

h
R2

n+m+

+ .

(2.16b)

Esta nova aproximao possui um erro de ordem hn+m+ .


Pode-se induzir assim que prximo termo extrapolado ser
f l3 (h) =

Rn+m+ f l2 (h/R) f l2 (h)


,
Rn+m+ 1

(2.17a)

e
fexato = f l3 (h) + D [f ]

h
R3

n+m+ +p

+ ,

(2.17b)

com uma estimativa de erros igual a


EA3 (h)
h
R

EA3

h
R2

n+m+

C[f ]

h
R3

n+m

C[f ]

h
R

= f l3
= f l3

h
R

f l3 (h)
f l3 (h)

Rn+m+
1

Rn+m+

1
.
Rn+m+ 1

(2.18a)
(2.18b)

E assim sucessivamente para ordens mais altas. Deve-se ressaltar por fim que o algoritmo f l (f, h) somente
foi utilizado no clculo dos termos no extrapolados f l0 (h). Os termos restantes so obtidos apenas com
o uso da regra de extrapolao. Contudo, para obter-se f lk (h) para k > 0, necessrio conhecer-se os
termos extrapolados anteriores, o que implica, ao final das contas, que necessrio aplicar-se o algoritmo
f l0 k vezes, para valores de incrementos consecutivamente menores: f l0 (h), f l0 (h/R), f l0 h/R2 , . . . ,
f l0 h/Rk .
Exemplo 2.1. Como exemplo de uso da extrapolao de Richardson para o clculo de derivao numrica,
emprega-se a expresso para derivao centrada, juntamente com a sua estimativa de erro (2.7),
f (x) =

f (x + h) f (x h) 1
f (x)h2 + O h4 ,
2h
6

a qual mostra que o mtodo de ordem n = 2, enquanto que o prximo termo de ordem n + m = 4.
Tambm identifica-se A[f ] = f (x)/6. Tomando-se o valor R = 2 e empregando-se a frmula acima para
h1 = h e h2 = h/2, obtm-se as seguintes expresses:
f (x + h) f (x h) 1
f
2h
6
f (x + h/2) f (x h/2)

f (x) =
h
f (x) =

(x)h2 + O h4 ,
1
h2
f (x) + O
6
4

h4
16

Chamando ento
f l (f , h1 ) =

f (x + h) f (x h)
f (x + h/2) f (x h/2)
e f l (f , h2 ) =
,
2h
h

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

Autor: Rudi Gaelzer IFM/UFPel

1
[f l (f , h2 ) f l (f , h1 )] + O h4 .
3

(2.19b)

Verso: 22 de julho de 2009

2.5. Extrapolao de Richardson e estimativa de erro

34
-2

10

Erro aproximado
Erro exato
Derivada extrapolada

-4

10

Erro Absoluto

-6

10

-8

10

-10

10

-12

10

-14

10

10

10

10

10
-1
h

10

10

10

12

10

Figura 2.1: Grfico log-log da estimativa de erro absoluto no clculo da derivada centrada da funo f (x) = sen x2 ,
em x = 0, 5, juntamente com o valor exato do erro e o valor extrapolado da derivada.

O resultado obtido com o emprego das expresses (2.19a,b) pode ser visto na figura 2.1. Nesta, a exemplo
do que se fez na figura 1.5, calculou-se numericamente a derivada numrica da funo f (x) = sen x2 no ponto
x = 0, 5 a partir da frmula de diferena centrada. Neste caso, porm, pode-se calcular tambm a estimativa
de erro (2.19a) e o valor extrapolado (2.19b). Observa-se que a estimativa de erro to boa que se torna
indistingvel do valor exato do erro durante todo o intervalo de valores de h para os quais o erro de
truncamento mais importante que o erro de arredondamento. Alm disso, observa-se tambm que o valor
extrapolado refina o resultado em mais de 2 ordens de grandeza. O programa em Fortran 95 que gerou os
dados apresentados na figura 2.1 est no Programa 2.1.
Programa 2.1: Programa em Fortran 95 que calculou o erro e o valor extrapolado apresentados na Figura 2.1.

program d e r i v a d a s _ e x t r a p o l a
i m p l i c i t none
integer , parameter : : dp= 8
integer : : i
r e a l ( kind= dp ) : : h= 0 . 1 _dp
! h i n i c i a l i z a d o a 1/50.
r e a l ( kind= dp ) , parameter : : x= 0 . 5 _dp ! Valor de x f i x o .
r e a l ( kind= dp ) : : df1 , df2 , df , e r r o _ e s t , f l
!
f l = 2 . 0 _dpx c o s ( xx ) ! Valor c o r r e t o da d e r i v a d a em x .
open ( unit =10 , f i l e = d e r i v s _ e x t . dat )
do i= 1 , 45
d f 1= f p 3 ( x , h ) ! Derivada d i f e r e n c a c e n t r a d a
d f 2= f p 3 ( x , 0 . 5 _dph )
e r r o _ e s t= ( d f 2 d f 1 ) / 3 . 0 _dp
d f= d f 2 + e r r o _ e s t
write ( 1 0 , ( 4 ( e10 . 4 , 1 x ) ) ) 1 . 0 _dp/h , abs ( e r r o _ e s t ) , &
abs ( d f 2 f l ) , abs ( d f f l )
h= 0 . 5 _dph
! h e d i v i d i d o por 2 .
end do
CONTAINS
function f ( x )
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
f= s i n ( xx )
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 2. Derivao Numrica

35

return
end function f

function f p 3 ( x , h )
r e a l ( kind= dp ) : : f p 3
r e a l ( kind= dp ) , intent ( in ) : : x , h
f p 3= 0 . 5 _dp ( f ( x+h ) f ( xh ) ) / h
return
end function f p 3
end program d e r i v a d a s _ e x t r a p o l a
Caso se queira empregar este mtodo para uma funo definida somente em pontos de rede, os incrementos h1 e h2 devem necessariamente ser pontos desta rede. Neste caso, colocando h1 = 2h e h2 = h em
(2.1b), resulta
f (x) = f l (f , h) +

1
[f l (f , h) f l (f , 2h)] + O h4
3
f (x 2h) 8f (x h) + 8f (x + h) f (x + 2h)
=
+ O h4 ,
12h

a qual justamente a frmula de 5 pontos (2.8). Portanto, o uso do valor extrapolado no til para pontos
fixos de rede, uma vez que o valor de h no pode ser variado.
A subrotina DFDX_RICH, listada no Programa 2.2 implementa o clculo da derivada numrica usando o
Mtodo de Richardson. A rotina tem como parmetros de entrada o nome da funo f (x) analtica a ser
derivada, a qual deve ser fornecida por meio de uma funo externa, o ponto onde calcular a derivada, o
tamanho inicial do parmetro h e o limite superior solicitado para o erro relativo do resultado. Como sadas,
a rotina fornece o valor numrico de f (x) e uma estimativa do valor do erro relativo. Como o resultado da
Mtodo de Richardson equivalente ao resultado do mtodo de 5 pontos (seo 2.2.4), o menor erro relativo
possvel estimado igual ao fornecido pela frmula (2.9). Portanto, se o valor solicitado para o erro relativo
mximo for menor que este valor, a rotina automaticamente ir interromper o processamento, pois os erros
de arredondamento iro impedir a obteno de um resultado com a preciso solicitada.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

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 _dph )
err_abs= ( d f 2 d f 1 ) / 3 . 0 _dp
dfdx= d f 2 + err_abs
e r r _ s a i= abs ( err_abs / dfdx )
i f ( e r r _ s a i <= e r r e s t ) e x it
d f 1= d f 2
h= 0 . 5 _dph
end do
return
CONTAINS
function df_cent ( x , h )
r e a l ( kind= dp )
: : df_cent
r e a l ( kind= dp ) , intent ( in ) : : x , h
df_cent= 0 . 5 _dp ( f ( x+h ) f ( xh ) ) / h
return
end function df_cent
end subroutine d f d x _ r i c h

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3

Integrao Numrica
3.1

Introduo

Integrao numrica, tambm denominada quadratura, possui uma histria que se estende desde antes
da inveno do clculo. O fato de integrais de funes elementares no poderem, em geral, ser calculadas
analiticamente, ao passo que suas derivadas so facilmente obtidas, serviu de razo para enfatizar esta rea
da anlise numrica j nos sculos XVIII e XIX.
Em contraste com a dificuldade de se calcular analiticamente uma integral, o clculo numrico pode
ser realizado de forma relativamente simples, exatamente ao contrrio do que acontece com a derivao. A
definio de uma integral de Riemann consiste no limite da soma da rea delimitada por regies retangulares
medida que a largura h dos retngulos vai a zero e o seu nmero total vai a infinito:

(ba)/h

f (xi ) .

f (x)dx = lim h
h0

i=1

Uma maneira tradicional de medir numericamente a rea sob f (x) consiste em traar o seu grfico sobre
um papel milimetrado e contar o nmero de quadrados sob a curva. Por esta razo a integrao numrica
tambm foi denominada inicialmente de quadratura numrica.
A integral da funo f (x) aproximada numericamente de uma forma equivalente soma dos quadrados
ou retngulos. A maior parte das frmulas abordadas neste captulo podem ser colocadas na forma:
N

f (x)dx =
a

f (xi )wi +

N.

(3.1)

i=1

Aqui, f (x) calculada em N pontos situados no intervalo [a, b] (para frmulas fechadas, isto , que envolvem
os limites) ou no intervalo (a, b) (para frmulas abertas, que no envolvem os limites). Os valores das funes
calculados em cada ponto do intervalo, fi = f (xi ) so ento somados com o intermdio de um peso wi . A
quantidade N consiste na estimativa do erro de truncamento do mtodo empregado. Embora os mtodos,
em geral, somente forneam o resultado exato para N , alguns deles fornecem o resultado exato para
certas classes especiais de funes (como polinmios, por exemplo) para N finito.
Os diferentes algoritmos de integrao utilizam distintos conjuntos de pontos {xi } e de pesos {wi }.
Geralmente, a preciso aumenta com N , mas erros de arredondamento eventualmente acabam por limitar
a preciso final. Uma vez que o melhor mtodo depende do comportamento especfico de f (x), no existe
um mtodo que possa ser universalmente considerado o melhor. De fato, alguns dos esquemas automticos
de integrao numrica, que podem ser encontrados em bibliotecas tais como a IMSL, iro testar diferentes
mtodos at encontrar aquele que fornea o melhor resultado.
Nos esquemas mais simples de integrao, o integrando aproximado por uns poucos termos no desenvolvimento em srie de McLaurin de f (x), sendo estes os termos a ser integrados. Exceto no caso do
integrando apresentar um comportamento no usual em algum intervalo de valores de x, termos sucessivos,
obtidos com o aumento de N , iro fornecer preciso cada vez maior, at que os erros de arredondamento
se tornem suficientemente importantes. Nestes esquemas, denominados de Newton-Cotes, o intervalo total
dividido em subintervalos iguais, conforme ilustrado na figura 3.1, com o integrando calculado em pontos igualmente espaados xi . Estes algoritmos incluem a regra trapezoidal (primeira ordem) e a regra de
Simpson (segunda ordem).
37

3.2. Frmulas de Newton-Cotes

38

Figura 3.1: Frmulas de quadratura com abcissas igualmente espaadas calculam a integral de uma funo entre
x0 e xN +1 . Frmulas fechadas calculam o valor da funo nos pontos extremos do intervalo, enquanto que frmulas
abertas no usam estes pontos.

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 figura 3.1. Os pontos do conjunto {xi } que sero realmente empregados no
clculo da integrao numrica dependem se a quadratura ser aberta ou fechada, conforme tambm est
representado na figura 3.1.

3.2.1

Frmulas fechadas de Newton-Cotes

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

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


Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

39

Os pontos de integrao das frmulas de Newton-Cotes sero definidos por:


xi = a + ih,

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

enquanto que os valores da funo nos pontos xi sero representados por


fi f (xi ).
Polinmio de Lagrange.
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 ,

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

Sem demonstrao,1 estes polinmio so dados por


pN (x) = f (x0 )l0N (x) + f (x1 )l1N (x) + + f (xN )pN
N (x)
N

fn lnN (x),

(3.2a)

n=0

onde lnN (x) so os polinmios de Lagrange, definidos por


lnN (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 verificao de que pN (x) o polinmio interpolador segue diretamente da substituio dos pontos xi :
n {0, 1, . . . , N } , lnN (xn ) = 1 e lnN (xk ) = 0, para k = n = pN (xn ) = fn .
O erro associado aproximao fornecida pelos polinmios de Lagrange, N (x) f (x) pN (x), dado
por:
f (N +1) ()
[(x x0 ) (x x1 ) . . . (x xN )] ,
(3.2c)
N (x) =
(N + 1)!
onde

[a, b] .

Desta forma, pode-se escrever,

f (x) = pN (x) +

N (x),

(3.2d)

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 figura 3.2, obtm-se:
b

f (x)dx =
a

[pN (x) +
a
N

N (x)] dx

liN (x)dx +

fi
a

i=0

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

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

(3.3a)

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

wi =

liN (x)dx =
a

(x x0 ) (x x1 ) . . . (x xi1 ) (x xi+1 ) . . . (x xN )
dx,
(xi x0 ) (xi x1 ) . . . (xi xi1 ) (xi xi+1 ) . . . (xi xN )

(3.3b)

ao passo que os erros de truncamento sero dados por


N
1A

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

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

(3.3c)

qual ser apresentada em um captulo posterior desta Apostila.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

3.2. Frmulas de Newton-Cotes

40

Figura 3.3: Integrao numrica pela regra trapezoidal. A rea sob a curva f (x) entre x0 e x1 aproximada pela
rea do trapzio amarelo.

Deve-se enfatizar aqui que a frmula (3.3a) exata para um polinmio de grau N .
Desta forma, pode-se obter frmulas do tipo Newton-Cotes para polinmios de qualquer grau. Historicamente, as primeiras frmulas foram estabelecidas para polinmios de graus baixos. Algumas destas frmulas
sero apresentadas a seguir.
Frmulas fechadas so aquelas que utilizam os pontos extremos do intervalo [a, b], isto ,
x0 = a e xN = b.
Estas frmulas so adequadas quando o integrando for bem comportado nos limites de integrao; no
apresentando singularidades, por exemplo.
3.2.1.1

Regra trapezoidal (N = 1)

A regra trapezoidal, ou frmula do trapzios, corresponde interpolao de f (x) a ser integrada por um
polinmio de grau 1. Como a interpolao linear necessita de somente 2 pontos, estes sero os extremos do
intervalo de integrao, isto , x0 = a e x1 = b, com N = 1 e h = b a.
As frmulas (3.3a-c) nos permitem encontrar os pesos:
x1

wo =

x0
x1

w1 =

x0

e o erro
1

2 b

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

2 b

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

f ()
2

x1
x0

=
a

(x x0 ) (x x1 ) dx =

1
h,
2

1
h
2
1
f ()h3 .
12

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


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 figura 3.3. Pode-se observar que este mtodo, bastante
simples, j fornece um erro de ordem T h3 .
3.2.1.2

Regra de Simpson (N = 2)

Esta uma das regras de integrao mais conhecidas e utilizadas. A funo f (x) aproximada por um
polinmio de grau 2 que coincide com esta em trs pontos: x0 , x1 e x2 . Portanto, necessrio conhecer 3
valores de f (x), igualmente espaados, para aplicar esta regra.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

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

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


x2

w0 =
w1 =
w2 =

x0
x2
x0
x2
x0

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

1
h
3
4
h
3
1
h,
3

ao passo que o erro de truncamento fica dado por


=

f ()
3!

x2

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

x0

Contudo, surpreendentemente obtm-se que 2 = 0! Isto pode ser facilmente visto realizando-se a mudana
de variveis t = x x1 na integrao acima, resultando
x2

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

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

x0

t2 h2 tdt = 0.
h

Isto no significa que o erro na regra de Simpson sempre nulo. Neste caso necessrio tomar o prximo
termo no clculo do erro N de um polinmio interpolador de grau N , dado inicialmente por (3.2c), porm
agora acrescentando o prximo termo no desenvolvimento em srie de McLaurin de f (x) em torno de x = x1 :
f (iv) ()
(x x1 ) .
4!
Desta forma, o erro fica:
S

f (iv) ()
4!

x2

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

x0

1 (iv)
f ()
4!

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

1 (iv)
f ()h5 .
90

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


b

f (x) =
a

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

(3.5)

A figura 3.4 ilustra a aplicao da regra de Simpson para o clculo da quadratura. Das expresses obtidas
para os erros das duas frmulas polinomiais, (3.4) e (3.5), pode-se observar que a formula dos trapzios
exata se f (x) for um polinmio de grau 1 (pois f (x) = 0, x), ao passo que a frmula de Simpson exata
se f (x) for um polinmio de grau igual ou menor que 3 (pois f (iv) (x) = 0, x).
3.2.1.3

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

Autor: Rudi Gaelzer IFM/UFPel

3
3
h (f0 + 3f1 + 3f2 + fx ) f (iv) ()h5 .
8
80

(3.6)

Verso: 22 de julho de 2009

3.2. Frmulas de Newton-Cotes

42

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


3.2.1.4

Regra de Bode (N = 4)

Esta regra usa 5 valores de f (x) regularmente espaados. Tomando N = 3, x0 = a, x4 = b e h = (ba)/4,


obtm-se
b
2
8 (vi)
f (x)dx =
h (7f0 + 32f1 + 12f2 + 32f3 + 7f4 )
f ()h7 .
(3.7)
45
945
a
Pode-se observar que agora o erro de truncamento (
Simpson.
3.2.1.5

Regras em ordens mais altas (N

h7 ) bem menor que o erro obtido pela regra de

5)

Outras expresses, com erros de truncamento sucessivamente menores, podem ser obtidas aumentandose o grau dos polinmios interpoladores. Em contrapartida, necessrio calcular f (x) em um nmero cada
vez maior de pontos e a quantidade total de operaes de ponto flutuante tambm aumenta. A relao
de compromisso entre a preciso obtida, o esforo computacional necessrio e o erro de arredondamento
resultante vai depender ento da aplicao em estudo. Essas outras frmulas fechadas de quadratura podem
ser obtidas, por exemplo, em Abramowitz & Stegun [2, seo 25.4].
Escrevendo-se uma forma geral para as frmulas fechadas de Newton-Cotes:
N

fi wi +

f (x)dx = dh
a

(3.8)

N,

i=0

a tabela 3.1 apresenta os valores dos parmetros d e h, dos pesos wi e dos erros de truncamento

N.

Sabe-se que

Exemplo 3.1.

ln 2 =
1

dx
= 0, 6931471805599453094172322145818 . . .
x

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

1
dx

x
2

1+

1
2

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

Regra de Simpson. Com h = 1/2:


2
1

dx
1

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

dx
3

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

Autor: Rudi Gaelzer IFM/UFPel

w2
1
3
12
50
27
1323

w3

1
32
50
272
2989

w4

7
75
27
2989

w5

19
216
1323

w6

41
3577

w7

751

1
12
f ()h3
1 (iv)
90 f ()h5
3 (iv)
80
f ()h5
8
945 f (vi) ()h7
275
12096
f (vi) ()h7
9
1400 f (viii) ()h9
8183
f (viii) ()h9
518400

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

3.2.2

43

Frmulas abertas de Newton-Cotes

Uma frmula aberta no utiliza os pontos extremos no intervalo de integrao. Na figura 3.2 estes
mtodos utilizariam os pontos x1 , x2 , . . . , xN 1 , ou seja, fariam uso de N 1 pontos. A principal motivao
para o emprego de uma frmula aberta ocorre quando o integrando apresenta um comportamento no usual
prximo ao(s) limite(s) de integrao, como uma singularidade, por exemplo.
Contudo, as frmulas abertas raramente so empregadas, pelas seguintes razes:
1. Frmulas abertas no podem ser facilmente compostas juntas para formar uma regra estendida, como
as frmulas fechadas, que sero discutidas na seo 3.2.3.
2. H outras classes de frmulas de quadratura abertas largamente superiores s frmulas de NewtonCotes. Um exemplo consiste nas frmulas de quadratura gaussianas.
3. O polinmio interpolador raramente reproduz fidedignamente a forma de f (x) prxima aos pontos
singulares, o que reduz significativamente a utilidade de uma frmula aberta.
Devido a estas razes, as frmulas abertas no sero detalhadamente discutidas aqui. Somente ser apresentada a frmula geral para uma quadratura aberta,
N 1

f (x)dx = dh
a

fi w i +

(3.9)

N,

i=1

sendo que os parmetros d e h e os pesos wi podem ser obtidos em [2, seo 25.4] e so dados na tabela 3.2.
Tabela 3.2: Frmulas abertas de Newton-Cotes, dadas por (3.9). Na tabela, h = (b a)/N e N = M + 2.

M
1
2
3
4
5
6

3.2.3

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

w1
1
2
11
11
611
460

w2
1
-1
1
-14
-453
-954

w3

w4

w5

w6

w7

2
1
26
562
2196

11
-14
562
-2459

11
-453
2196

611
-954

460

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

x1

f (x)dx =
a

x0

f (x)dx +

x2
x1

f (x)dx + +

xN

f (x)dx

xN 1

h
h
h
(f0 + f1 ) + (f1 + f2 ) + + (fN 1 + fN )
2
2
2
1
[f (1 ) + f (2 ) + + f (N )] h3
12
h
1
(f0 + 2f1 + 2f2 + + 2fN 1 + fN )
2
12

Autor: Rudi Gaelzer IFM/UFPel

f (i ) h3 .
i=1

Verso: 22 de julho de 2009

3.2. Frmulas de Newton-Cotes

44

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

4. IT E =

h
2

[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.
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

f (x)dx +

x0

f (x)dx =
a

x2

x4

f (x)dx + +

x2

xN

f (x)dx

xN 2

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

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

N/2

f (iv) (i ) .
i=1

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

h
b a (iv)
(f0 + 4f1 + 2f2 + 4f3 + 2f4 + + 2fN 2 + 4fN 1 + fN )
f ()h4 .
3
180

(3.11)

Aqui tambm, embora o erro da regra de Simpson estendida seja aparentemente maior que na regra (3.5), os
valores de h em ambos os casos em geral so bastante diferentes. O algoritmo 3.2 mostra a implementao
da regra de Simpson estendida por um programa de computador.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

45

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

4. ISE =

h
3

(2 soma + f0 fN ).

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

Exemplo 3.2.

Regra trapezoidal estendida. Tomando quatro trapzios no intervalo [1, 2], resulta N = 4, h = 0, 25 e
2
1

dx
0, 25

x
2

1+

8 4 8 1
+ + +
5 3 7 2

= 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

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
1
1
(b a) |f ()| h2
(b a)h2 max |f (x)|
a x b
12
12
b a (iv)
ba 4
| SE | =
f () h4
h max f (iv) (x) ,
a x b
180
180

TE| =

(3.12a)
(3.12b)

sendo que agora necessrio realizar estimativas para os valores mximos das derivadas de f (x) dentro do
intervalo considerado. Estas estimativas podem ser realizadas de diversas maneiras, tanto numericamente
quanto analiticamente. O exemplo abaixo ilustra a aplicao destas estimativas.
Exemplo 3.3.

Quantos subintervalos e qual o espaamento que devem ser empregados no clculo de


1

ex dx
0

para que a aproximao tenha erro menor que 104 nos casos (a) Regra dos Trapzios Estendida e (b) Regra
de Simpson Estendida?
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

3.3. Quadratura gaussiana

46

Respostas: o integrando no possui primitiva, mas as suas derivadas podem ser calculadas em qualquer
ordem. Assim,
f (x) = 2xex

f (x) = 2 2x2 1 ex
2

f (x) = 4x 3 2x2 ex

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.12a) 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,

1 2
h
104 = hT E
6 TE
o que corresponde a um nmero de subintervalos
|

6 104

TE|

NT E

1
hT E

Int

0, 0245,

= 41.

(b) Para a frmula de Simpson, de acordo com (3.12b) necessrio encontrar o mximo de f (iv) (x) no
intervalo [0, 1]. Isto possvel uma vez que se conhecem as razes de f (v) (x) neste intervalo:
r1 = 0, r2 =

1
5 10
2

Como
f (iv) (r1 ) = 12 e f (iv) (r2 ) = 16
obtm-se

0, 9586.

5
10 2 exp +
2

5
2

7, 4195,

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

0 x 1

e, portanto,

h4SE
104 = hSE
15
o que corresponde a um nmero de subintervalos
|

SE |

NSE

Int

1
hSe

15 104

0, 197,

= 6.

Pode-se ver, portanto, que o nmero de subintervalos necessrios para a regra de Simpson atingir um
determinado limiar de erro substancialmente menor que o nmero requerido pela regra trapezoidal.

3.3

Quadratura gaussiana

Nas frmulas da seo 3.2, a quadratura de uma funo foi aproximada pela soma de seus valores
funcionais em um conjunto de pontos regularmente espaados {f (xi )}, multiplicados pelos pesos {wi }.
Observou-se que escolhas adequadas nos pesos wi permitem a obteno de frmulas de quadratura de
ordens cada vez mais altas.
Nesta seo, sero introduzidas frmulas de quadratura nas quais no somente os pesos {wi } na frmula
genrica (3.1) podero ser escolhidos, mas tambm as abcissas {xi } sero determinadas de tal forma que a
quadratura resultante ser superacurada. Uma vez que as abcissas no sero mais regularmente espaadas, as
frmulas obtidas tero o dobro de graus de liberdade que as frmulas de Newton-Cotes possuem, resultando
em frmulas de quadratura de ordem essencialmente duas vezes maior que as frmulas de Newton-Cotes,
com o mesmo nmero de clculos do integrando.
Esta idia foi inicialmente introduzida por Wilhelm Gauss (1814), portanto cerca de um sculo aps a
introduo das frmulas de Newton-Cotes. Por esta razo, estas frmulas so conhecidas como Frmulas
gaussianas ou Quadratura gaussiana. Na sua formulao original, Gauss utilizou fraes continuadas
na obteno de suas frmulas. Em 1826, Jacobi derivou novamente as frmulas gaussianas, agora utilizando
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

47

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 Christoffel, em 1877.
O conceito de polinmios ortogonais frente a uma funo-peso W (x) no intervalo (a, b) se deve definio
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 suficiente para que f e g sejam ortogonais
que o seu produto interno seja nulo,
b

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

f |g
a

f |f , definido 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

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

F (x)dx

W (x)f (x)dx

wi f (xi ) ,
i=1

onde o integrando escrito F (x) W (x)f (x), sendo que W (x) passa a desempenhar o papel de funo-peso
na frmula gaussiana. A escolha da forma de W (x) pode ser feita de tal modo que o integrando restante,
f (x), resulte ser o mais suave possvel, ou de forma a salientar possveis singularidades em F (x). Isto
necessrio para que f (x) possa ser satisfatoriamente aproximada por um polinmio. Um exemplo seria a
quadratura adequada para aproximar a integral
1
1

exp cos2 x

dx.
1 x2

A escolha natural para a funo-peso seria


W (x) =

1
.
1 x2

Esta escolha em particular define o uso da frmula de Gauss-Chebyshev, conforme visto na seo 3.3.2.
H um conjunto particular de formas para W (x) que constitui as frmulas gaussianas tradicionais e que
possuem valores tabelados para os pesos {wi } e as abcissas {xi }. Algumas destas formas tradicionais sero
estudadas na seo 3.3.2.
Ento, se para um polinmio de grau k qualquer, pk (x), vale a igualdade
N

pk (x)dx =
a

wi pk (xi ) ,

(3.13)

i=1

determina-se o conjunto {xi , wi } de tal forma que a igualdade acima vale para qualquer polinmio de grau
k. Em princpio, esta escolha no introduz vantagem nenhuma em relao ao uso dos polinmios de
Legendre, usados nas frmulas de Newton-Cotes, pois estes tambm so exatamente representados por esta
frmula de quadratura, como se pode notar nas equaes (3.3a-c). A vantagem consiste na escolha de um
conjunto de polinmios ortogonais e nas suas razes para as abcissas. Neste caso, conforme se demonstra no
teorema abaixo, a frmula (3.13) ser exata para polinmios de grau 2k + 1! Neste sentido que se referiu
s frmulas gaussianas como superacuradas.
Teorema 3.1
Sejam
1. k (x), k = 0, 1, . . . , N , polinmios de grau k, ortogonais relativamente ao produto interno
b

i |j =

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


a

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

3.3. Quadratura gaussiana

48

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


Se a frmula de quadratura
N

f (x)dx
a

N , ento ela tambm ser exata para polinmios de grau

exata para polinmios de grau


2N + 1.
Demonstrao.
como:

wi pk (xi )
i=1

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

p2N +1 (x)dx =

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

N + 1 da famlia

rN (x)dx,
a

observa-se que qN (x) sempre pode ser escrito na forma de uma combinao linear dos polinmios 1 (x), . . . , N (x),
pois estes so ortogonais. Portanto,
b

N +1 (x)qN (x)dx = 0.
a

Assim, se for usada a quadratura exata para rN (x), dada por (3.13), resulta
b

p2N +1 (x)dx =
a

wi rN (xi ) .

rN (x)dx =
a

i=1

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


N

p2N +1 (x)dx =
a

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


i=1

Agora, se as abcissas {xi }, i = 0, 1, . . . , N , forem escolhidas como as razes do polinmio N +1 (x), isto ,
N +1 (xi ) = 0, i = 0, 1, . . . , N , resulta finalmente
N

p2N +1 (x)dx =
a

wi p2N +1 (xi ) .
i=1

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

3.3.2

2N + 1.

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 =

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


a

Um procedimento garantido para gerar este conjunto fornecido pela relao de recorrncia
p1 (x) 0

(3.14a)

p0 (x) 1

(3.14b)

pj+1 (x) = (x aj ) pj (x) bj pj1 (x), (j = 0, 1, 2, . . . ),

(3.14c)

xpj |pj
pj |pj
pj |pj
bj =
.
pj1 |pj1

(3.15a)

onde
aj =

Autor: Rudi Gaelzer IFM/UFPel

(3.15b)
Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

49

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


N

W (x)f (x)dx =
a

wj f (xj ) + RN ,

(3.16)

j=1

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,

(3.17)

o conjunto de pesos {wj } dado por


pN 1 |pN 1
pN 1 (xj ) pN (xj )

wj =

(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.14a-c) atravs da obteno dos seus
coeficientes {aj , bj } (3.15a,b);
2. a determinao das razes de pN (x) e o clculos dos pesos associados {wj } (3.18).
Para o caso dos polinmios ortogonais clssicos, os coeficientes {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.14a-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,
bx1 ax2
ax2 bx1
x2 x1
ba
x+
,
y+
y =
x=
x2 x1
x2 x1
ba
ba
de forma que
x2

W (y)f (y)dy =

x1

x2 x1
ba

onde
yj =

W (x)f (x)dx =
a

x2 x1
ba

wj f (yj ) + RN ,

(3.19)

j=1

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

sendo {xj } as razes de pN (x) (3.17).


A seguir, sero vistas algumas das regras de quadratura gaussiana clssicas.
3.3.2.1

Frmula de Gauss-Legendre

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

P0 (x) = 1 P1 (x) = x

P2 (x) =

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

f (x)dx =
1

wj f (xj ) + RN ,

(3.20)

j=1

onde {xj } (j = 1, . . . , N ) so as razes de PN (x),


PN (xj ) = 0,

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

e os pesos so
wj =
Autor: Rudi Gaelzer IFM/UFPel

2
1

x2j

2,

[PN (xj )]

(3.21)

j = 1, . . . , N
Verso: 22 de julho de 2009

3.3. Quadratura gaussiana

50

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

xj

wj

N =2

1/ 3

N =3

0
3/5

N =4

0.3399810435848562648
0.8611363115940525752

N =5

0.00000000000000000000
0.53846931010568309104
0.90617984593866399280

N =6

0.23861918608319690863
0.66120938646626451366
0.93246951420315202781

N =7

0.00000000000000000000
0.40584515137739716691
0.74153118559939443986
0.94910791234275852453

8/9
5/9
0.65214515486254614263
0.34785484513745385737
128/225
0.47862867049936646804
0.23692688505618908751
0.46791393457269104739
0.36076157304813860757
0.17132449237917034504
512/1225
0.38183005050511894495
0.27970539148927666790
0.129484966168869693271

e o erro de truncamento
4

RN =

22N +1 (N !)

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

3f

(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 finito 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
fica, a partir de (3.19),
x2

f (y)dy =

x1

x2 x1
2

sendo
yj =

f (x)dx =
1

x2 x1
2

wj f (yj ) + RN ,

(3.22)

j=1

x2 x1
x1 + x2
xj +
, j = 1, . . . , N.
2
2
2

Exemplo 3.4. Calcula-se novamente a quadratura 1 dx


x , porm agora utilizando-se as frmulas de GaussLegendre para um intervalo geral (3.22), com x1 = 1 e x2 = 2.
Usando apenas 2 pontos, j = 1, 2, N = 2, obtm-se

Frmula de dois pontos.

2
1

onde
y1 =

dy
1

y
2

w1

1
3
x1 + ,
2
2

1
1
+ w2
y1
y2
y2 =

1
3
x2 + ,
2
2

x1 e x2 so as razes de
P2 (xj ) =
Autor: Rudi Gaelzer IFM/UFPel

1
3x2j 1 = 0 =
2

x1

= 13

x2

1
3

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica


e

wj =

x2j

3
1
,
2 2 3

y1 =
2
1

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

2,

[P2 (xj )]

Portanto,

dy
1

y
2

51

3
1
+
2 2 3

y2 =

1
1
+
y1
y2

= 0, 692307692,

cujo erro relativo de apenas 0,12%, o qual um pouco melhor que o resultado obtido com a regra de
Simpson (seo 3.2.1.2), para a qual foram necessrios 3 pontos.
Frmula de 3 pontos.

Usando-se 3 pontos, N = 3 e
2
1

dy
1

y
2

w1

onde

3
1
x1 + ,
2
2
sendo x1 , x2 e x3 as razes de P3 (x):

y2 =

y1 =

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

1
P3 (xj ) =
5x3j 3xj
2

y3 =

x 1

= 0 = x2

wj =

2
1

x2j

[P3 (xj )]

Portanto,
y1 =
e

2
1

2,

3 1

2 2

dy
1

y
2

3
,
5

1
3
x3 + ,
2
2

=
=

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

3
,
2

y2 =

y3 =

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

3
5

=0

3 1
+
2 2

3
5

5
8
, w2 = .
9
9
3
5

= 0, 693121693,

o qual tem um erro relativo de 0,0037%, um pouco melhor que o resultado obtido com a regra de Bode
(seo 3.2.1.4), a qual necessitou de 5 pontos.
3.3.2.2

Frmula da Gauss-Chebyshev

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) Tj1 (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 fica, a partir de (3.16),


1
1

f (x)

dx =
1 x2

wj f (xj ) + RN ,

(3.23)

j=1

onde {xj }, (j = 1, 2, . . . , N ) so as razes de TN (x) = 0,


xj = cos
Autor: Rudi Gaelzer IFM/UFPel

j 21
N
Verso: 22 de julho de 2009

3.3. Quadratura gaussiana

52

e {wj } so os pesos, dados simplesmente por


wj =

.
N

O erro de truncamento RN no uso da frmula (3.23)

RN =
f (2n) (),
(2n)!22n1

(1 < < 1).

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

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

=
1

f (x)

dx =
1 x2

wj f (yj ) + RN ,

(3.24)

j=1

sendo

x2 x1
x1 + x2
xj +
, j = 1, . . . , N.
2
2
A regra de Gauss-Chebyshev possui uma implementao numrica bastante simples. A rotina apresentada abaixo, funo gauss_chebyshev (programa 3.1), ilustra como esta implementao pode ser realizada
com o Fortran 95.
yj =

Programa 3.1: Implementao da frmula de Gauss-Chebyshev em Fortran 95.

! FUNCAO Gauss_Chebyshev
! Implementa a f o r m u l a de GaussChebyshev para uma i n t e g r a l d e f i n i d a de
!
limites arbitrarios .
!
! Argumentos :
!
f : Funcao a s e r i n t e g r a d a ( i n t e g r a n d o menos f u n c a o p e s o ) .
!
x1 : L i m i t e i n f e r i o r de i n t e g r a c a o .
!
x2 : L i m i t e s u p e r i o r de i n t e g r a c a o .
!
n : Numero de p o n t o s u s a d o s na q u a d r a t u r a g a u s s i a n a ( n > 1 ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Maio / 2 0 0 8 .
!
function gauss_chebyshev ( f , x1 , x2 , n )
r e a l ( kind= dp )
: : gauss_chebyshev
r e a l ( kind= dp ) , intent ( in )
: : x1 , x2
integer , intent ( in )
:: n
r e a l ( kind= dp ) : : x_menos , x_mais , y , xj , wj
integer : : j
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp )
:: f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
!
x_menos= 0 . 5 ( x2 x1 )
x_mais= 0 . 5 ( x1 + x2 )
wj= p i / r e a l ( n , dp )
gauss_chebyshev= 0 . 0 _dp
do j= 1 , n
x j= c o s ( ( j 0.5) p i / r e a l ( n , dp ) )
y= x_menos x j + x_mais
gauss_chebyshev= gauss_chebyshev + wj f ( y )
end do
return
end function gauss_chebyshev
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

53

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

xj
2
2+

2 2
2
4(1+ 2)

2+ 2
2
4(1+ 2)

2
2
N =3

0.41577455678347908331
2.29428036027904171982
6.28994508293747919866

0.71109300992917301545
0.27851773356924084880
0.01038925650158613575

N =4

0.32254768961939231180
1.74576110115834657569
4.53662029692112798328
9.39507091230113312923

0.60315410434163360164
0.35741869243779968664
0.03888790851500538427
0.00053929470556132745

N =5

0.26356031971814091020
1.41340305910651679222
3.59642577104072208122
7.08581000585883755692
12.6408008442757826594
3.3.2.3

wj

N =2

0.52175561058280865281
0.39866681108317592745
0.07594244968170759539
0.00361175867992204845
0.00002336997238577623

Frmula de Gauss-Laguerre

Nesta frmula so empregados os polinmios de Laguerre :


L0 (x) = 1,

1
1
2 4x + x2 , L3 (x) =
6 18x + 9x2 x3 ,
2
6
(j + 1) Lj+1 (x) = (2j + 1 x) Lj (x) jLj1 (x),

L1 (x) = 1 x,

L2 (x) =

os quais so ortogonais no intervalo 0

x < frente funo peso


W (x) = ex .

Neste caso, a frmula de Gauss-Laguerre fica, a partir de (3.16),


N

f (x)dx =

wj f (xj ) + RN ,

(3.25)

j=1

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
N2

2.

[LN 1 (xj )]

O erro de truncamento RN no uso da frmula (3.26)


2

RN =

(N !) (2n)
f
(),
(2N )!

(0 < < ) .

A tabela 3.4 mostra as abcissas e os pesos para as frmulas de Gauss-Laguerre at N = 5. Uma listagem
mais completa pode ser encontrada em [2, captulo 25].
3.3.2.4

Frmula de Gauss-Hermite

Nesta frmula so empregados os polinmios de Hermite:


H0 (x) = 1,

H1 (x) = 2x,

Autor: Rudi Gaelzer IFM/UFPel

H2 (x) = 4x2 2,

H3 (x) = 8x3 12x,


Verso: 22 de julho de 2009

3.4. Integrao automtica e adaptativa

54

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

xj

wj

N =2

1/ 2

N =3

0.0
3/2

2 /3

/6

N =4

0.52464762327529031788
1.65068012388578455588

0.80491409000551283651
0.08131283544724517714

N =5

0, 00000000000000000000
0.95857246461381850711
2.02018287045608563293

8 /15
0.39361932315224115983
0.01995324205904591321

N =6

0.43607741192761650868
1.33584907401369694971
2.35060497367449222283

/2

0.72462959522439252409
0.15706732032285664392
0.00453000990550884564

Hj+1 (x) = 2xHj (x) 2jHj1 (x),


os quais so ortogonais no intervalo < x < frente funo peso
2

W (x) = ex .
Neste caso, a frmula de Gauss-Hermite fica, a partir de (3.16),
N

ex f (x)dx =

(3.26)

wj f (xj ) + RN ,
j=1

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 !

2.

N 2 [HN 1 (xj )]

O erro de truncamento RN no uso da frmula (3.26)


RN =

N ! (2n)
f
(),
2N (2N )!

( < < ) .

A tabela 3.5 mostra as abcissas e os pesos para as frmulas de Gauss-Hermite at N = 6. Uma listagem
mais completa pode ser encontrada em [2, captulo 25].

3.4

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
fornecem, alm do clculo da quadratura, tambm a obteno de uma estimativa de erro, o que possibilita
o desenvolvimento de algoritmos que implementam o clculo de uma quadratura com a imposio de um
valor superior no seu erro, para qualquer integrando, de uma forma automtica ou adaptativa.
As tcnicas aqui mencionadas formam as bases tericas de rotinas modernas para o clculo de quadraturas, oferecidas por diversos pacotes comerciais de computao numrica.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

3.4.1

55

Integrao de Romberg

Uma rotina de integrao automtica aquela que, aplicando uma determinada regra de quadratura
para valores consecutivamente menores de espaamento entre os pontos da abcissa, calcula tambm uma
estimativa de erro independente da forma especfica de f (x), interrompendo a sua execuo quando o
resultado estiver dentro de uma tolerncia exigida pelo programador, a qual pode ser as estimativas de erro
absoluto ou relativo.
Este tipo de algoritmo relativamente simples de ser implementado usando as regras de Newton-Cotes;
quando se utiliza a regra trapezoidal estendida (seo 3.2.3.1) para implementar uma rotina integradora automtica baseada no mtodo de extrapolao de Richardson (seo 2.5), esta rotina denomina-se Integrao
de Romberg.
De acordo com o mtodo de extrapolao de Richardson, deve-se aplicar o algoritmo de integrao para
dois valores distintos do parmetro h. A estimativa de erro ento obtida pode ser utilizada tanto para
realizar controle de erro quanto para a extrapolao. Relembrando os principais resultados desta regra, se
a frmula de quadratura aplicada com o parmetro h, obtendo o resultado I (h) e posteriormente para o
espaamento h/R, resultando I (h/R), as frmulas (2.13a, b) fornecem como estimativas de erro absoluto:
EA(h)

h
R

Rn
e EA
Rn 1

I (h)

h
R

h
R

= I

I (h)

Rn

1
,
1

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

(3.27)

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

(3.28)

h
R

Iextrapolado = I

+ EA

h
R

Rn

Tomando agora a regra trapezoidal estendida (3.10),


b

f (x)dx
a

pode-se mostrar [12, Eq. 4.2.1] que o erro total dado por uma srie de potncias pares de h:
EAT E = C1 h2 + C2 h4 + C3 h6 + .
Portanto, n = m = = = 2 nas frmulas extrapoladas (2.14 2.17) e nas estimativas de erros (2.13,
2.15, 2.18). Desta forma, o resultado Iextrapolado possui um erro agora da ordem O h4 .
Inicia-se o procedimento escolhendo um valor inicial para o parmetro h, calculam-se as quadraturas
(0)
numricas IT E (h) e IT E (h/2) a partir de (3.28). Estes valores iniciais so identificados por IR (h) e
(0)
IR (h/2), respectivamente, com suas respectivas estimativas de erro obtidas para R = 2:
(0)

(0)

IR (h) IT E (h)
EA0 (h) =

IR

22
(0)
I
22 1 R

h
2

(0)

IR (h)

EA0

h
2
h
2

IT E
=

22

h
2

1
(0)
I
1 R

h
2

(0)

IR (h) .

(0)

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

IR (h) =

1
(0)
22 IR
22 1

h
2

(0)

IR (h) ,

o qual possui um erro da ordem O h4 . Contudo, no se conhece o valor deste erro; tudo o que se obteve
(0)
at este momento foi o erro EA0 (h/2), correspondente aproximao IR (h/2).
(1)
Para se calcular o erro de IR (h), necessrio agora aplicar a frmula (2.15), o que implica na necessidade
(1)
do clculo de IR (h/2). Desta forma, obtm-se EA1 (h) e EA1 (h/2), dados por:
EA1 (h) =

24
(1)
I
24 1 R

h
2

(1)

IR (h)

e EA1

h
2

1
(1)
I
24 1 R

(1)

h
2

(1)

IR (h) .
(2)

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

IR (h) =
Autor: Rudi Gaelzer IFM/UFPel

1
(1)
24 IR
24 1

h
2

(1)

IR (h) ,
Verso: 22 de julho de 2009

3.4. Integrao automtica e adaptativa

56

(1)

cujo erro da ordem O h ; porm, a melhor estimativa de erro EA1 (h/2), correspondente a IR (h/2).
(2)
(2)
Para se calcular o erro de IR (h) necessrio calcular IR (h/2), o que reinicia novamente o ciclo.
Para sistematizar, pode-se afirmar que, aplicando-se a regra trapezoidal estendida para uma sucesso
de incrementos h cada vez menores, sendo que cada valor consecutivo de h a metade do valor anterior
(k)
(R = 2), obtm-se de (3.28) as integrais de Romberg IR (h), k = 0, 1, 2, . . . , e as melhores estimativas de
erro, fornecidas por EAk1 (h/2), onde
6

(0)

IR (h) IT E (h)
1
(0)
22 IR
22 1
1
(2)
(1)
IR (h) = 4
24 IR
2 1
1
(3)
(2)
IR (h) = 6
26 IR
2 1
..
.

h
2
h
2
h
2

(1)

IR (h) =

(0)

EA0

(1)

EA1

(2)

EA2

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

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

h
2
h
2
h
2

h
2
h
2
h
2

(0)

IR (h)
(1)

IR (h)
(2)

IR (h)

Pode-se induzir o k-simo (k > 1) valor extrapolado e o seu erro:


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

(k)

IR (h) =
h
2

EAk1

(3.29)

(4)

Supondo ento que se queira aplicar a regra de extrapolao (3.29) at k = 4. Para se obter IR (h)
(3)
(3)
(2)
(2)
(2)
necessrio calcular IR (h), IR (h/2), o que implica em calcular antes IR (h), IR (h/2) e IR h/22 ,
(1)
(1)
(1)
(1)
(0)
(0)
para as quais so necessrias IR (h), IR (h/2), IR h/22 e IR h/23 e, finalmente, IR (h), IR (h/2),
(0)
(0)
(0)
IR h/22 , IR h/23 , IR h/24 . Ou seja, para uma extrapolao at o k-simo termo, necessria a
aplicao da quadratura trapezoidal para os intervalos h, h/2, . . . , h/2k , o que vai implicar em at N = 2k
subintervalos.
(0)
Para o clculo da estimativa de erro EAk1 (h/2), necessrio que se conhea tambm IR (h), . . . ,
(0)
IR h/2k . O diagrama da figura 3.5 ilustra a interdependncia entre os consecutivos estgios de extrapolao para k = 4. Generalizaes para valores maiores de k so facilmente realizadas.
Antes de qualquer preocupao a respeito da implementao do controle de erro e critrio de parada da
rotina integradora, pode surgir agora a convico de que o nmero de clculos da quadratura (3.28) para as
extrapolaes se torna rapidamente to grande que uma aplicao prtica deste mtodo se torna invivel.
Felizmente, isto no verdade. Para a regra trapezoidal entre limites fixos a e b, pode-se dobrar o nmero
de subintervalos sem que se perca o trabalho realizado previamente. A implementao mais grosseira da
regra trapezoidal seria tomar h = b a (N = 1), f0 = f (a) e f1 = f (b), calculando-se ento
h
(f0 + f1 ) .
2

(0)

IR (h) =

O primeiro estgio de refinamento consiste ento em adicionar o valor da funo no ponto central atravs
das transformaes
N = 2,

h
,
2

x0 = a,

resultando
(0)

IR

h
2

x1 =

ba
,
2

x2 = b,

f1 f2

1 (0)
h
I (h) + f1 ;
2 R
2

o segundo estgio consiste na adio dos pontos em 1/4 e 3/4 de h, resultando


(0)

IR

h
22

1 (0)
I
2 R

h
2

h
(f1 + f3 )
22

e assim consecutivamente. A figura 3.6 ilustra a aplicao prtica desta idia.


Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

57

(0)

IR (h)

(1)

IR (h)
(0)

IR

h
2

(2)

IR (h)
(1)

IR
(0)

IR

h
22

(2)

(1)

(0)

h
23
h
24

(0)

IR

h
23

h
25
(k)

h
24

h
22

h
2
(4)

IR
(3)

IR
(2)

(1)

(4)

IR (h)
(3)

IR
IR

h
2
IR

(2)

(1)

(0)

h
22
IR

IR
IR

(3)

IR (h)
IR

IR
IR

h
2

h
23

h
22

h
2

(4)

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

Figura 3.6: Chamadas consecutivas da rotina que calcula a quadratura trapezoidal estendida incorporando a informao de chamadas anteriores e calculando o integrando somente nos novos pontos necessrios para o refinamento
da grade. A linha final mostra o nmero total de clculos do integrando aps as quarta chamada da rotina.

Algoritmo 3.3 Calcula o n-simo refinamento da regra trapezoidal estendida (3.28), sendo dados f (x), os
limites de integrao (a, b) e o resultado da quadratura no estgio anterior (IRom ). Os pontos includos em
cada estgio so sempre distintos de todos os outros pontos anteriores, conforme ilustrado na figura 3.6.
Quando chamado com n = 1, o algoritmo calcula a quadratura usando h = b a; quando chamado com
n = 2, 3, . . . , o resultado ser refinado pela adio de 2n2 pontos interiores adicionais.
Dados: f (x), a, b, n e IRom :
Se n = 1 ento:
IRom = (1/2) (b a) [f (a) + f (b)]
seno:
npts = 2n2
= (b a) /npts
x = a + /2
soma = 0
Para j = 1 : npts, faa:
soma = soma + f (x)
x=x+
final lao
IRom = (1/2) [IRom + (b a) soma/npts]
final teste
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

58

3.4. Integrao automtica e adaptativa

A implementao desta idia apresentada no algoritmo 3.3. Este algoritmo deve ser chamado pela rotina
integradora para calcular os termos da primeira coluna do diagrama na figura 3.5. A primeira chamada
deve ser realizada com n = 1, incrementando-se o valor de n por 1 a cada chamada subseqente, totalizando
k + 1 chamadas, sendo k o grau de extrapolao desejado na rotina de Romberg (3.29).
O algoritmo 3.3 est implementado em Fortran 95 na forma de uma funo no programa 3.2.
Programa 3.2: Implementao do algoritmo 3.3 em Fortran 95 na forma de funo.

! FUNCAO TRAPEZ_ROM
! C a l c u l a a q u a d r a t u r a numerica de uma f u n c a o f ( x ) p e l a r e g r a dos t r a p e z i o s
!
estendida .
! Criada como p a r t e i n t e g r a n t e do Metodo de Romberg para i n t e g r a c a o
!
automatica .
!
! Argumentos :
! f:
Funcao na forma f ( x ) a s e r i n t e g r a d a ( Entrada ) .
! a:
L i m i t e i n f e r i o r de i n t e g r a c a o
( Entrada ) .
! b:
L i m i t e s u p e r i o r de i n t e g r a c a o
( Entrada ) .
! n_ordem : Ordem de chamada da f u n c a o
( Entrada ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Maio / 2 0 0 8 .
!
function trapez_rom ( f , a , b , n_ordem )
r e a l ( kind= dp ) : : trapez_rom
integer , intent ( in ) : : n_ordem
r e a l ( kind= dp ) , intent ( in ) : : a , b
integer : : i
integer , s a v e : : n p t s
r e a l ( kind= dp ) : : h , d e l t a , x , soma
r e a l ( kind= dp ) , s a v e : : I_te , f a t 2
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
h= b a
! Testa p r i m e i r a rodada .
s e l e c t case ( n_ordem )
case ( 0 )
! Primeira rodada .
I_te= 0 . 5 h ( f ( a ) + f ( b ) )
f a t 2= 1 . 0 _dp
n p t s= 1
case default ! Rodadas s u b s e q u e n t e s .
d e l t a= h/ f a t 2
x= a + 0 . 5 d e l t a
soma= 0 . 0 _dp
do i= 1 , n p t s
soma= soma + f ( x )
x= x + d e l t a
end do
I_te= 0 . 5 ( I_te + hsoma/ f a t 2 )
f a t 2= 2 . 0 _dp f a t 2
n p t s= 2 n p t s
end s e l e c t
trapez_rom= I_te
return
end function trapez_rom
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

59
(0)
IR

(0)
IR

Tendo sido estabelecido um algoritmo eficiente para o cmputo de


(h), . . . ,
h/2 , 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 fica 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 figura 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.
k

Programa 3.3: Programa que calcula a quadratura numrica pelo Mtodo de Romberg.

! SUBROTINA QUAD_ROM
! C a l c u l a a q u a d r a t u r a numerica de uma f u n c a o f ( x ) usando o Metodo de Romberg .
!
! Argumentos :
!
f : Funcao na forma f ( x ) a s e r i n t e g r a d a
( Entrada ) .
!
a : L i m i t e i n f e r i o r de i n t e g r a c a o
( Entrada ) .
!
b : L i m i t e s u p e r i o r de i n t e g r a c a o
( Entrada ) .
!
e r r r e l : Valor maximo a d m i t i d o para o e r r o r e l a t i v o ( Entrada ) .
!
r e s u l t : Valor o b t i d o para a q u a d r a t u r a numerica
( S a id a ) .
!
e r r e s t : Valor e s t i m a d o para o e r r o r e l a t i v o
( S ai d a ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Maio / 2 0 0 8 .
!
subroutine quad_rom ( f , a , b , e r r r e l , result , e r r e s t )
r e a l ( kind= dp ) , intent ( in ) : : a , b , e r r r e l
r e a l ( kind= dp ) , intent ( out ) : : result , e r r e s t
! Variaveis locais
integer : : k , i , np
r e a l ( kind= dp ) : : q u a t r o i , quatroim1 , e r r a b s
r e a l ( kind= dp ) , dimension ( : ) , pointer : : Ikm1 , I k
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
!
i f ( b == a ) then
r e s u l t= 0 . 0 _dp
e r r e s t= 0 . 0 _dp
return
end i f
np= 100
a l l o c a t e ( Ikm1 ( 0 : np ) , I k ( 0 : np ) )
I k (0)= trapez_rom ( f , a , b , 0 )
Ikm1 (0)= trapez_rom ( f , a , b , 1 )
Ikm1 (1)= ( 4 Ikm1 ( 0 ) I k ( 0 ) ) / 3 . 0 _dp
k= 2
do
i f ( k > np ) then
np= 2np
Ikm1 => r e a l o c a r ( Ikm1 , np )
Ik
=> r e a l o c a r ( Ik , np )
end i f
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

60

3.4. Integrao automtica e adaptativa

! R e a l i z a l a c o s ao l o n g o das d i a g o n a i s .
I k (0)= trapez_rom ( f , a , b , k )
q u a t r o i= 1 . 0 _dp
do i= 1 , k
q u a t r o i= 4 . 0 _dp q u a t r o i
quatroim1= q u a t r o i 1 . 0 _dp
I k ( i )= ( q u a t r o i I k ( i 1) Ikm1 ( i 1))/ quatroim1
end do
! C a l c u l a e compara e r r o
e r r a b s= ( I k ( k1) Ikm1 ( k 1))/ quatroim1
e r r e s t= abs ( e r r a b s / I k ( k ) )
i f ( e r r e s t <= e r r r e l ) then
r e s u l t= I k ( k )
e x it
else
k= k + 1
Ikm1= I k
end i f
end do
return
end subroutine quad_rom
Cabe aqui mencionar que tanto a funo trapez_rom quanto a subrotina quad_rom necessitam de informaes adicionais para que todas as interfaces e espcies de variveis sejam explicitadas. A melhor estratgia
consiste em inserir estas rotinas em um mdulo, o qual pode usar outros mdulos que contenham declaraes
globais de variveis ou rotinas auxiliares. Outro ponto que merece destaque que a subrotina quad_rom
faz uso de vetores alocveis para acumular os resultados das diagonais da figura 3.5. Embora raramente
possa acontecer, possvel que o tamanho declarado para os vetores seja excedido devido s exigncias na
acuracidade do resultado. Para evitar a ocorrncia de um erro do tipo out-of-bounds, a subrotina faz uso de
vetores de ponteiros e invoca, sempre que necessrio, a funo auxiliar realocar, ela prpria uma funo
de ponteiro, a qual se encarregar de realocar os vetores auxilires. A funo realocar baseada na rotina
reallocate_dv apresentada no Numerical Recipes [12].
Todas as rotinas desenvolvidas neste captulo, em conjunto com os mdulos necessrios para implementlas, podem ser obtidos em http://minerva.ufpel.edu.br/~rudi/grad/ModComp/Progs/.

3.4.2

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 definio de nodos pr-definidos, ou seja, um conjunto de fixo 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 fixos um dos limites
da integrao. Outro mtodo a Quadratura de Gauss-Lobatto, onde ambos os extremos a e b so nodos
fixos. 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 GaussLegendre. 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.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 3. Integrao Numrica

3.4.3

61

Integrao adaptativa

Retornando frmula geral para quadratura numrica (3.1),


N

f (x) dx =
a

wi f (xi ) ,
i=0

todos os mtodos apresentados neste captulo restringem-se a uma nica regra utilizada para a determinao
das abcissas {xi } e os pesos {wi }. Um algoritmo de quadratura adaptiva, por outro lado, escolhe os valores
de {wi } e {xi } dinamicamente durante a computao, de forma a adaptar-se ao comportamente particular
de f (x).
Quando o integrando apresenta um comportamento que dificulta o clculo da sua quadratura (f (x)
oscila rapidamente, por exemplo), a regra em uso, aplicada a todo intervalo de integrao, pode encontrar
dificuldades para obter um resultado com a preciso solicitada. Nesta situao torna-se necessrio o uso
de uma rotina adaptativa. Contudo, bons algoritmos de quadratura adaptiva so bastante complexos do
ponto de vista de clculo numrico e custosos para ser desenvolvidos. Nesta situao, recomendvel que
o programador busque uma rotina pronta em alguma biblioteca de software numrico, ao invs de tentar
desenvolv-la por si mesmo.
No mtodo de Romberg, o valor de h reduzido pela metade a cada iterao consecutiva do mtodo,
at que a preciso solicitada seja alcanada. Por se basear em uma regra Newtoniana, o mtodo exige que
o valor de h seja o mesmo ao longo de todo o intervalo de integrao. Contudo, o comportamento de f (x)
pode no requerer que h seja o mesmo ao longo de todo o intervalo para que a preciso solicitada seja
atingida. Em regies onde o integrando varia lentamente apenas uns poucos pontos podem ser suficientes;
ao passo que nas regies onde f (x) varia rapidamente, um nmero maior de pontos requerido.
Considera-se, por exemplo, o integrando ilustrado na figura 3.7. Na regio de, f (x) essencialmente constante, e o incremento h pode ser grande.
Contudo, na regio ad, f (x) varia rapidamente,
significando que o incremento h deve ser pequeno.
De fato, a regio ad pode ser dividida em trs regies distintas, como ilustrado. Inspeo visual do
comportamento de f (x) pode identificar as regies
onde h deve ser pequeno ou grande. Porm, construir o grfico de f (x) um processo custoso e demorado, principalmente quando necessrio o clculo de um nmero grande de integrais. Uma rotina
adaptativa deve ser capaz de identificar as regies
onde h necessita ser maior ou menor e automaticamente dividir o intervalo de integrao de acordo
com essa identificao. Boas rotinas automticas Figura 3.7: Funo f (x) que apresenta distintos comporvariam no somente os valores de h e dos pesos, tamentos ao longo do intervalo de integrao.
mas tentam tambm diferentes regras de quadratura, sempre visando a otimizao no clculo numrico. Em determinados intervalos, uma rotina automtica do tipo Romberg pode atingir a preciso solicitada rapidamente, enquanto que em outro intervalo o
algoritmo pode optar por uma regra de quadratura gaussiana, por exemplo.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

62

3.4. Integrao automtica e adaptativa

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 4

Solues de Equaes No Lineares


4.1

Introduo

Um problema que surge com muita freqncia em computao cientfica consiste no clculo das razes
de uma equao na forma
f (x) = 0.
(4.1)
Ou seja, necessrio calcular o conjunto de valores de {x} onde f (x) nula. Em muitas situaes, a funo
f (x) pode ser conhecida explicitamente, como o caso de um polinmio ou de uma funo transcendental.
s vezes, contudo, f (x) pode vir a ser conhecida somente de forma implcita, como ocorre quando f (x)
soluo de uma equao diferencial ou integral.
Em raras circunstncias possvel calcular-se analiticamente as razes de f (x). Situaes onde isso
ocorre restringem-se, por exemplo, a equaes polinomiais do 1 ao 4 grau ou de um polinmio qualquer
fatorvel. Porm em geral somente solues aproximadas para as razes so possveis, dependendo-se de
alguma tcnica computacional para calcular a aproximao. Dependendo do contexto, soluo aproximada
pode significar um ponto x para o qual (4.1) aproximadamente satisfeita, isto , para o qual |f (x )|
pequeno, ou um ponto x que est prximo de uma soluo de (4.1). Infelizmente o conceito de soluo
aproximada um tanto vago. Uma soluo aproximada obtida por um computador conter sempre um erro
devido ao arredondamento, ou devido a uma instabilidade numrica ou devido ao truncamento gerado pelo
mtodo empregado. De fato, h sempre infinitas solues aproximadas, todas igualmente vlidas, embora a
soluo de (4.1) possa ser nica.
Uma situao onde o efeito dos erros de arredondamento produzem falsas razes pode ser vista na figura
6
1.4 esquerda. Esta figura mostra o grfico do polinmio p6 (x) = (x 1) , escrito na forma expandida,
para valores prximos a x = 1. O grfico foi gerado a partir de um programa de computador e, embora
as 6 razes de p6 (x) so nicas e iguais a 1, o grfico mostra um nmero grande de pontos onde a curva
cruza o eixo das abcissas. Estas falsas razes foram produzidas pelos erros de arredondamento resultantes
principalmente do cancelamento de quantidades prximas entre si. Este exemplo isolado j mostra algumas
das dificuldades envolvidas no clculo de razes.

4.2

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

(4.2)

As razes de p3 (x) podem ser obtidas analiticamente; elas consistem em uma raiz real e duas complexas
conjugadas:
x1 =

1
3

27 3 69

2
2

1/3

1
2

9 + 69
32/3
63

1/3

1.3247179572447460260

4.2. Mtodos iterativos para o clculo de razes reais

1/3

1 i 3 12 9 + 69
27 3 69
1
1+i 3

x2 =

6
2
2
232/3
0.66235897862237301298 + 0.56227951206230124390i

1/3

1 + i 3 12 9 + 69
1
27 3 69
x3 =
1i 3

6
2
2
232/3
0.66235897862237301298 0.56227951206230124390i.

64

1/3

1/3

Os mtodos iterativos mais conhecidos sero agora apresentados e estes tero a sua capacidade de calcular
a raiz x1 analisada.

4.2.1

Mtodo da biseco

Boa parte dos mtodos de clculo de razes necessita do conhecimento prvio de alguma informao a
respeito da soluo ou de f (x) para que possa convergir para a soluo correta. Para que o mtodo da
biseco funcione, necessrio inicialmente cercar a raiz (ou razes) entre dois valores de x. Assim, sabendose que p3 (1) = 1 < 0 e que p3 (2) = 5 > 0, conclui-se que h um nmero mpar de razes dentro do intervalo
[1, 2]. Assim, a informao inicial que necessria fornecer ao mtodo da bisseco um par de pontos
x = a0 e x = b0 distintos tais que
f (a0 ) f (b0 ) < 0,
(4.3)
em cuja situao sempre haver um nmero mpar de razes no intervalo [a0 , b0 ].
Se f (a0 ) f (b0 ) > 0, significa que h um nmero par de razes no intervalo (zero inclusive), o que torna
necessria a procura de um outro intervalo. Se a condio (4.3) for satisfeita, h um nmero mpar de razes
em [a0 , b0 ]. Contudo, se f (x) for contnua em [a0 , b0 ] o seguinte teorema deve valer:
Teorema 4.1. Teorema de Rolle.
Seja f (x) um funo contnua no intervalo finito [a, b] e diferencivel no intervalo (a, b). Se
f (a) = f (b) = 0, ento
f () = 0
para algum (a, b).
Este teorema implica em que se houver 3 ou mais razes em [a0 , b0 ], a derivada de f (x) deve possuir uma ou
mais razes neste intervalo. Caso seja possvel calcular analiticamente as razes de f (x), este teorema pode
ser til. Assim,
1
p3 (x) = 3x2 1 = 0 = x = .
3
Como no h razes de p3 (x) em [1, 2], isto implica que p3 (x) possui somente uma raiz no intervalo.
O mtodo consiste ento em tomar como primeira aproximao para a raiz o valor mdio:
1 =

a0 + b0
,
2

sendo o erro absoluto igual ao valor do intervalo entre 1 e um dos pontos extremos:
EA1 = |b0 1 | =

b0 a0
.
2

No caso, x1 = 1 EA1 = 1, 5 0, 5.
Comparando agora f (1 ) com os pontos extremos, necessariamente deve ocorrer
f (1 ) f (a0 ) < 0 ou f (1 ) f (b0 ) < 0,
o que ir definir um novo intervalo, [a0 , 1 ] ou [1 , b0 ] que contm a raiz de f (x), reiniciando o ciclo.
No exemplo,
p3 (1, 5) p3 (1) = 0, 875 < 0 ao passo que p3 (1, 5)p3 (2) = 4, 375 > 0.
Portanto, a raiz encontra-se no intervalo [1; 1, 5]. Tomando a nova aproximao e o seu erro:
2 =
Autor: Rudi Gaelzer IFM/UFPel

1 + 1, 5
= 1, 25
2
Verso: 22 de julho de 2009

Captulo 4. Solues de Equaes No Lineares

65

EA2 = 0, 25.
Verificando 2 :
p3 (1, 25) p3 (1) > 0 ao passo que p3 (1, 25)p3 (1, 5) < 0.
Portanto x1 [1, 25; 1, 5]. A proxima iterao:
1, 25 + 1, 5
= 1, 375
2
EA3 = 0, 125.
3 =

Verificando 3 :
p3 (1, 25) p3 (1, 375) < 0 ao passo que p3 (1, 375)p3 (1, 5) > 0.
Portanto,
1, 25 + 1, 375
= 1, 3125
2
EA4 = 0, 0625.
4 =

Verificando 4 :
p3 (1, 25) p3 (1, 3125) > 0 ao passo que p3 (1, 3125)p3 (1, 375) < 0.
Portanto, x1 [1, 3125; 1, 375]. Iterando novamente,
1, 3125 + 1, 375
= 1, 34375
2
EA5 = 0, 03125.
5 =

Verificando 5 :
p3 (1, 3125) p3 (1, 34375) < 0 ao passo que p3 (1, 34375)p3 (1, 375) > 0.
Portanto, 5 [1, 3125; 1, 34375].
As prximas 2 iteraes produzem
x1 = 1, 328125 0, 015625
x1 = 1, 3203125 0, 0078125.
Portanto, pode-se observar que os resultados das iteraes esto monotonicamente convergindo para a raiz
x1 1.3247179572447460260, mas aps 7 iteraes somente 2 casas decimais corretas foram obtidas. Esta
uma caracterstica do mtodo da biseco: uma vez que a raiz de uma funo contnua foi cercada, ele
certamente retornar o resultado correto, porm sua convergncia extremamente lenta. De uma forma
mais rigorosa, como o comprimento do intervalo que sabidamente contm a raiz dividido pelo fator 2 a
cada iterao, o mtodo da biseco produz uma dgito binrio correto a cada passo.
Um algoritmo que implementa o mtodo da biseco deve iniciar com os dois valores a0 e b0 (b0 > a0 )
para x, verificar se a raiz realmente est no intervalo fornecido e retornar os valores da raiz aproximada
=

a+b
(sendo a = a0 e b = b0 na primeira iterao)
2

e o erro absoluto da aproximao


EA =

|b a|
.
2

O erro absoluto deve ento ser comparado com o valor mximo de erro tolerado, parmetro que tambm
deve ser fornecido ao algoritmo. Se EA maior que a tolerncia, o novo intervalo [a, b] que contm a raiz
determinado e o procedimento repetido novamente. Se EA menor ou igual que a tolerncia, o algoritmo
retorna a ltima aproximao para a raiz. O algoritmo 4.1 implementa este processo.
A subrotina 4.1 implementa o algoritmo 4.1 em Fortran 95. Deve-se notar que, alm de implementar os
passos contidos no algoritmo, a rotina controla tambm se realmente h pelo menos uma raiz no intervalo
fornecido e tambm se a tolerncia solicitada for exageradamente pequena, como seria o caso se fosse
fornecido o valor erro= 1020 ou menor para um resultado em preciso dupla, que contm somente cerca
de 15 casas decimais de preciso. Este controle realizado pela varivel inteira de sada iflag.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

66

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 julho de 2009

Captulo 4. Solues de Equaes No Lineares

67

xm = 0 . 5 ( a + b )
i f (xm + e r r o == xm) then ! T e s t e para t o l e r a n c i a muito pequena .
iflag = 1
return
end i f
fm = f (xm)
i f ( f a fm > 0 . 0 _dp) then ! Determine novo i n t e r v a l o .
a = xm
f a = fm
else
b = xm
end i f
end do
end subroutine b i s e c

4.2.2

Mtodo da falsa posio

Uma modificao do mtodo da biseco que permite acelerar a taxa de convergncia no clculo da raiz
consiste em utilizar uma informao adicional de f (x), qual seja, o quo prximos da raiz esto os pontos
extremos do intervalo. No exemplo adotado: o clculo da raiz real de p3 (x), o intervalo inicialmente definido
foi [1, 2]; porm, p3 (1) = 1, ao passo que p3 (2) = 5. Isto significa que a raiz provavelmente est mais
prxima de x = 1 que x = 2. Portanto, ao invs de calcular 1 como o ponto mdio entre 1 e 2, ser
calculada a mdia ponderada:
p3 (2).1 p3 (1).2
= 1, 1666 . . . ,
w1 =
p3 (2) p3 (1)
o qual est ligeiramente mais prximo de x1 que o ponto mdio 1 = 1, 5.
Verificando agora em qual intervalo se encontra a raiz, descobre-se que ela est em [w1 , 2], ao passo que
p3 (w1 ) = 0, 578703704 . . . . Repetindo o clculo da mdia ponderada,
w2 =

p3 (2).w1 p3 (w1 ) .2
= 1, 253112033 . . . ,
p3 (2) p3 (w1 )

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 figura 4.1.
Um aperfeioamento do mtodo da falsa posio que permite acelerar a taxa de convergncia raiz o
chamado Mtodo da falsa posio modificado. Neste mtodo, as secantes so substitudas por retas
de inclinaes cada vez menores at que a raiz para uma determinada reta se encontre do lado oposto
aproximao wn anteriormente obtida. Desta forma, as aproximaes convergem raiz pelo dois lados, ao
invs de um lado somente, como no mtodo da falsa posio. Este mtodo ilustrado na figura 4.2, o valor
da ordenada em b0 reduzido pela metade at que a raiz da reta se encontra do lado direito da raiz de f (x).
O algoritmo 4.2 mostra como o mtodo da falsa posio modificado pode ser implementado. Ao contrrio
da biseco, o presente mtodo no pode determinar inequivocamente um valor mnimo para o intervalo
onde a raiz se encontra. Na falta de uma melhor estimativa, o algoritmo toma como primeiro critrio de
parada um valor mnimo admissvel para o intervalo que contm a raiz (xtol). Como o valor de f (x)
continuamente reduzido metade em um dos extremos do intervalo, um valor absurdamente pequeno para
xtol pode inadvertidamente resultar em um valor numrico nulo para F ou G, devido representao de
ponto flutuante. Para evitar esta ocorrncia, o algoritmo utiliza um segundo critrio de parada (ftol) que
estabelece o menor valor admissvel para |f (x)| em qualquer um dos pontos extremos do intervalo.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

68

4.2. Mtodos iterativos para o clculo de razes reais

Figura 4.1: Mtodo da falsa posio.

Figura 4.2: Mtodo da falsa posio modificado.

Algoritmo 4.2 Implementao do mtodo da falsa posio modificado.


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 modificado.

! 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 julho de 2009

Captulo 4. Solues de Equaes No Lineares

69

! Metodo
! O metodo da f a l s a p o s i c a o m o d i f i c a d o e empregado . I s t o s i g n i f i c a que
!
a cada passo , i n t e r p o l a c a o l i n e a r e n t r e os p o n t o s (A,FA) e
!
(B ,FB) e empregada , com FAFB < 0 , para um novo ponto (W, F(W) )
!
que s u b s t i t u i um dos p o n t o s A ou B de t a l forma que novamente FAFB < 0 .
!
A d i c i o n a l m e n t e , a ordenada de um ponto que e r e p e t i d o em mais de uma
!
i t e r a c a o e d i v i d i d o por 2 a cada p a s s o s u b s e q u e n t e .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 8 .
!
subroutine fal_pos_mod ( f , a , b , x t o l , f t o l , w, i f l a g , n t o l )
r e a l ( kind= dp ) , intent ( in out ) : : a , b
r e a l ( kind= dp ) , intent ( in )
: : xtol , f t o l
integer , intent ( in ) , optional : : n t o l
r e a l ( kind= dp ) , intent ( out )
:: w
integer , intent ( out )
:: iflag
INTERFACE
function f ( x )
use Modelos_Computacionais_Dados
r e a l ( kind= dp ) : : f
r e a l ( kind= dp ) , intent ( in ) : : x
end function f
END INTERFACE
integer : : n
r e a l ( kind= dp ) : : fa , fb , fw , s i g n f a , p r v s f w
!
f a= f ( a )
s i g n f a= s i g n ( 1 . 0 _dp , f a )
f b= f ( b )
i f ( s i g n f a f b > 0 . 0 _dp) then
print ( " f ( x ) tem o mesmo s i n a l nos d o i s p o n t o s extremos : " , 2 e15 . 7 ) , a , b
i f l a g = 1
return
end i f
w= a
fw= f a
n= 1
do
i f ( abs ( ab ) <= x t o l ) then
! V e r i f i c a s e i n t e r v a l o e menor que x t o l .
i f l a g= 0
return
end i f
i f ( abs ( fw ) <= f t o l ) then
! V e r i f i c a s e ABS( f (w) ) e menor que f t o l .
i f l a g= 1
return
end i f
w= ( f a b f b a ) / ( f a f b ) ! C a l c u l a novo w por i n t e r p o l a c a o .
p r v s f w= s i g n ( 1 . 0 _dp , fw )
fw= f (w)
i f ( s i g n f a fw > 0 . 0 _dp) then ! A l t e r a o i n t e r v a l o .
a= w
f a= fw
i f ( fw p r v s f w > 0 . 0 _dp) f b = 0 . 5 f b
else
b= w
f b= fw
i f ( fw p r v s f w > 0 . 0 _dp) f a = 0 . 5 f a
end i f
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

4.2. Mtodos iterativos para o clculo de razes reais

70

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 = 1.00000000000000
w1 = 1.16666666666667
w2 = 1.32330827067669
w3 = 1.32654296624656
w4 = 1.32471556046769
w5 = 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
modificada, no se procura cercar a raiz entre dois
pontos. Ao contrrio, a frmula (4.4) empregada
continuamente. O mtodo da secante, por outro
lado, no mais pressupe que a raiz esteja dentro
de um intervalo [a0 , b0 ]. O mtodo requer somente
que sejam fornecidos dois valores iniciais para a raiz,
x1 e x0 , a partir dos quais novas aproximaes para
a raiz so obtidas a partir de
xn+1 =

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 )

Figura 4.3: Mtodo da secante.

(4.6)

fcil ver que (4.5) e (4.6) so idnticas. O comportamento das aproximaes raiz de f (x) no mtodo da
secante ilustrado pela figura 4.3.
Como a raiz no mais permanece necessariamente cercada por dois valores extremos, no possvel
garantir que o mtodo da secante venha a convergir sempre. Caso o mtodo convirja, os critrios usuais
de parada so os seguintes. Para uma determinada iterao, identificada pelo ndice n, o mtodo ser
considerado bem sucedido se
|f (xn )| ftol ou |xn xn1 | xtol.
(4.7a)
Ou seja, o valor absoluto da funo ou a diferena absoluta entre duas aproximaes consecutivas so
considerados menores que um valor de tolerncia. Quando no se conhece a ordem de grandeza do valor de
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 4. Solues de Equaes No Lineares

71

f (x) em uma vizinhana em torno da raiz ou a ordem de grandeza da prpria raiz, pode-se usar os seguintes
valores relativos como critrios de parada:
|f (xn )|
fmax

ftol ou

xn xn1
xn

(4.7b)

xtol.

A subrotina 4.3 implementa o mtodo da secante. Como critrios de parada foram escolhidos o erro
absoluto no valor da funo e o erro relativo entre dois resultados consecutivos. Para evitar um nmero
excessivo de clculos de f (x), o parmetro ntol obrigatrio para a rotina secante.
Programa 4.3: Subrotina em Fortran 95 que implementa o mtodo da secante.

! SUBROTINA SECANTE
! Busca uma r a i z da f u n c a o F(X) p e l o Metodo da S e c a n t e .
! Argumentos de e n t r a d a
! FUNC: Nome da f u n c a o c u j a r a i z e d e s e j a d a
! x1 , x2 : Dois v a l o r e s i n i c i a i s para o i n i c i o da i t e r a c a o .
! ERRABS: Primeiro c r i t e r i o de parada . Se ABS(F(Xn) ) <= FTOL,
!
e n t a o Xn e a c e i t o como r a i z
! ERRREL: Segundo c r i t e r i o de parada : e r r o r e l a t i v o .
!
Se ABS(Xn Xn1) <= XTOLABS(Xn) , e n t a o Xn e a c e i t o como r a i z .
! NTOL: Numero maximo de i t e r a c o e s a d m i t i d a s .
! Argumentos de s a i d a
! X: Melhor e s t i m a t i v a para a r a i z .
! IFLAG : Um i n t e i r o ,
!
= 1, Metodo f a l h o u . Nenhuma r a i z f o i e n c o n t r a d a em NTOL
!
i t e r a c o e s . O u l t i m o v a l o r e n c o n t r a d o para X e r e t o r n a d o .
!
= 0 , Encerrou d e v i d o ao p r i m e i r o c r i t e r i o de parada .
!
= 1 , Encerrou d e v i d o ao segundo c r i t e r i o de parada .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 8 .
!
subroutine s e c a n t e ( func , x1 , x2 , e r r a b s , e r r r e l , n t o l , x , i f l a g )
use Modelos_Computacionais_Extras , only : t r o c a
integer , intent ( in )
: : ntol
r e a l ( kind=dp ) , intent ( in )
: : x1 , x2 , e r r a b s , e r r r e l
integer , intent ( out )
:: iflag
r e a l ( kind=dp ) , intent ( out ) : : x
INTERFACE
function f u n c ( x )
use Modelos_Computacionais_Dados
r e a l ( kind=dp ) , intent ( in ) : : x
r e a l ( kind=dp ) : : f u n c
end function f u n c
END INTERFACE
integer : : j
r e a l ( kind=dp ) : : dx , f , f l , x l
f l = f u n c ( x1 )
f= f u n c ( x2 )
i f ( abs ( f l ) < abs ( f ) ) then ! Tome o v a l o r i n i c i a l com o menor v a l o r de
x= x1
! f u n c ( x ) como aproximacao i n i c i a l .
x l= x2
call troca ( fl , f )
else
x l= x1
x= x2
end i f
do j= 1 , n t o l
dx= ( xl x ) f / ( f f l )
x l= x
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

4.2. Mtodos iterativos para o clculo de razes reais

72

f l= f
x= x + dx
f= f u n c ( x )
i f ( abs ( f ) <= e r r a b s ) then
i f l a g= 0
return
end i f
i f ( abs ( dx ) <= e r r r e l abs ( x ) ) then
i f l a g= 1
return
end i f
end do
i f l a g = 1
return
end subroutine s e c a n t e
Ao contrrio dos mtodos anteriores, o mtodo da secante no exige que os dois pontos iniciais cerquem
a raiz. na tabela abaixo, mostra-se um estudo das aproximaes realizadas para a obteno da raiz x1 de
p3 (x). Em todos os casos, foram tomados os seguintes valores: errabs = 0, errrel = 107 e ntol = 50.
Cada coluna corresponde a pares distintos de valores para x1 e x2. Com exceo da primeira coluna, as
demais partiram de valores que no cercam a raiz. Observa-se que o mtodo da secante convergiu em todos
os casos, embora no ltimo a convergncia tenha sido bastante lenta.
x1= 1, x2= 2
1.00000000000000
1.16666666666667
1.39560439560440
1.31365666090990
1.32401611532221
1.32472525004811
1.32471795247273
1.32471795724471

4.2.4

x1= 2, x2= 3
2.00000000000000
1.72222222222222
1.46867825516563
1.36356158529402
1.32934949633224
1.32488078110669
1.32471865771829
1.32471795735102
1.32471795724475

-1.00000000000000
-0.833333333333333
-0.345454545454545
6.49850961972721
-0.327662162639576
-0.309617266171994
-1.34519594172679
0.235096865426605
2.46288916284303
0.449496710807014
0.662624843273948
-21.8117328908561

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

Mtodo de Newton-Raphson

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


xn xn1
f (xn ) f (xn1 )
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 julho de 2009

Captulo 4. Solues de Equaes No Lineares

73

O mtodo de Newton-Raphson um dos mtodos mais utilizados para o clculo de razes porque fornece
uma convergncia rpida quando as formas analticas de f (x) e f (x) so conhecidas e no so custosas
do ponto de vista computacional. Alm disso, o mtodo de Newton utiliza somente um ponto anterior, ao
contrrio do mtodo da secante que necessita de dois pontos. Quando o clculo de f (x) se torna proibitivo,
costuma-se utilizar o mtodo da secante em seu lugar. Cabe aqui ressaltar que a frmula (4.8) pode ser
escritas na forma genrica
xn+1 = g (xn ) , n = 0, 1, 2, . . . ,
(4.9)
onde g (xn ) uma determinada funo de xn . Frmulas do tipo (4.9) so conhecidas como frmulas de
ponto fixo, porque quando a seqncia x0 , x1 , x2 , . . . converge a um determinado ponto , resulta que
lim xn = lim xn+1 = ,

em cuja situao (4.9) se torna = g(); ou seja, um ponto fixo 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];

4. nos pontos extremos a e b:


0>

f (b)
f (a)
> (b a) e 0 <
< b a.
f (a)
f (b)

Ento o mtodo de Newton-Raphson converge para uma soluo nica de f (x) = 0 em [a, b]
para qualquer escolha de x0 [a, b].
Alguns comentrios a respeito destas condies
so apropriados. Condies (1) e (2) garantem que
h somente uma nica soluo em [a, b]. Condio
(3) garante que o grfico de f (x) possui somente
uma nica concavidade em [a, b] (cncava ou convexa) e que f (x) montono neste intervalo. Finalmente, a condio (4) garante que a reta tangente a
f (x) em cada ponto extremo do intervalo intercepta
o eixo x dentro de [a, b]. Sucintamente, a condio
(4) exige que f (x) seja suficientemente inclinada em
[a, b] para que a raiz da reta tangente no ponto xn
esteja sempre dentro do intervalo considerado. A rpida convergncia do mtodo de Newton-Raphson,
uma vez que as condies acima so satisfeitas,
ilustrada na figura 4.4.
As condies deste teorema so tambm suficientes para garantir a convergncia do mtodo da
secante, desde que os dois valores iniciais x0 e x1 Figura 4.4: Convergncia do mtodo de Newton-Raphson.
estejam ambos dentro de [a, b]. Neste caso, contudo Dado x0 [a, b], o mtodo rapidamente converge para
a convergncia raiz pode se processar de duas for- limn xn = .
mas distintas, dependendo da escolha feita para a
ordem dos valores de x0 e x1 .
Um algoritmo que implemente o mtodo de Newton-Raphson deve ter como parmetros de entrada o(s)
nome(s) da(s) rotina(s) que calcula(m) f (x) e f (x), o valor de x0 que garantidamente satisfaa as condies
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

74

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 verificar numericamente que as condies (2) e (3) esto sendo cumpridas para
qualquer funo f (x) apresentada rotina. Para compensar esta deficincia, uma estratgia consiste em
utilizar um algoritmo que mistura os mtodos de Newton-Raphson e da biseco. Sempre que a n + 1-sima
iterao esteja dentro do intervalo [a, b], realiza-se nova iterao usando o mtodo de Newton. Porm, se
xn+1 estiver fora de [a, b] ou se |f (xn+1 )| no estiver diminuindo rpido o suficiente, calcula-se a prxima
iterao usando o mtodo da biseco. O programa 4.5 implementa justamente este tipo de algoritmo em
Fortran 95.
Programa 4.4: Utiliza uma combinao dos mtodos de Newton-Raphson e da biseco para encontrar uma raiz
dentro do intervalo fornecido.

! SUBROTINA NEWTON_BISEC
! Busca uma r a i z da f u n c a o F(X) a t r a v e s de uma combinacao dos metodos de
!
NewtonRaphson e da b i s e c c a o .
! Argumentos de e n t r a d a
! F_DFDX: Nome da s u b r o t i n a que r e t o r n a os v a l o r e s de F(X) e F (X) .
! x1 , x2 : Dois v a l o r e s i n i c i a i s para o i n i c i o da i t e r a c a o .
! ERRABS: Primeiro c r i t e r i o de parada . Se ABS(F(Xn) ) <= FTOL,
!
e n t a o Xn e a c e i t o como r a i z
! ERRREL: Segundo c r i t e r i o de parada : e r r o r e l a t i v o .
!
Se ABS(Xn Xn1) <= XTOLABS(Xn) , e n t a o Xn e a c e i t o como r a i z .
! NTOL: Numero maximo de i t e r a c o e s a d m i t i d a s .
! Argumentos de s a i d a
! RAIZ : Melhor e s t i m a t i v a para a r a i z .
! IFLAG : Um i n t e i r o ,
!
= 2, Metodo f a l h o u . Nao e x i s t e r a i z em [ x1 , x2 ] .
!
= 1, Metodo f a l h o u . Nenhuma r a i z f o i e n c o n t r a d a em NTOL
!
i t e r a c o e s . O u l t i m o v a l o r e n c o n t r a d o para X e r e t o r n a d o .
!
= 0 , Encerrou d e v i d o ao p r i m e i r o c r i t e r i o de parada ou por novas
!
i t e r a c o e s nao a l t e r a r e m o r e s u l t a d o .
!
= 1 , Encerrou d e v i d o ao segundo c r i t e r i o de parada .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 8 .
! ( Baseado na f u n c a o r t s a f e do Numerical R e c i p e s ) .
!
subroutine newton_bisec ( f_dfdx , x1 , x2 , e r r a b s , e r r r e l , n t o l , r a i z , i f l a g )
integer , intent ( in )
: : ntol
r e a l ( kind=dp ) , intent ( in )
: : x1 , x2 , e r r a b s , e r r r e l
integer , intent ( out )
:: iflag
r e a l ( kind=dp ) , intent ( out ) : : r a i z
INTERFACE
subroutine f_dfdx ( x , fx , dfdx )
use Modelos_Computacionais_Dados
r e a l ( kind=dp ) , intent ( in )
:: x
r e a l ( kind=dp ) , intent ( out ) : : fx , dfdx
end subroutine f_dfdx
END INTERFACE
integer
:: j
r e a l ( kind=dp ) : : df , dx , dxold , f , fh , f l , temp , xh , x l
c a l l f_dfdx ( x1 , f l , d f )
c a l l f_dfdx ( x2 , fh , d f )
i f ( f l f h > 0 . 0 _dp) then
i f l a g = 2
return
end i f
i f ( f l == 0 . 0 _dp) then
r a i z= x1
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 4. Solues de Equaes No Lineares

75

i f l a g= 0
return
e l s e i f ( f h == 0 . 0 _dp) then
r a i z= x2
i f l a g= 0
return
e l s e i f ( f l < 0 . 0 _dp) then ! O r i e n t e o i n t e r v a l o t a l que f ( x1 ) < 0 .
x l= x1
xh= x2
else
xh= x1
x l= x2
end i f
r a i z= 0 . 5 ( x1 + x2 )
dxold= abs ( x2 x1 )
dx= dxold
c a l l f_dfdx ( r a i z , f , d f )
do j= 1 , n t o l
! Laco s o b r e o numero p e r m i t i d o de i t e r a c o e s .
i f ( ( ( r a i z xh ) dff ) ( ( r a i z x l ) dff ) >= 0 . 0 _dp & ! Se a i t e r a c a o e s t i v e r
. o r . abs ( 2 . 0 f ) > abs ( dxold d f ) ) then
! f o r a de [ x1 , x2 ] ,
dxold= dx
! ou s e nao e s t i v e r
dx= 0 . 5 ( xh x l )
! c o n v e r g i n d o rapidamente ,
r a i z= x l + dx
! use b i s e c c a o .
i f ( x l == r a i z ) then
i f l a g= 0
return
end i f
e l s e ! I t e r a c a o e s t a d e n t r o de [ x1 , x2 ] .
dxold= dx
dx= f / d f
temp= r a i z
r a i z= r a i z dx
i f ( temp == r a i z ) then
i f l a g= 0
return
end i f
end i f
i f ( abs ( f ) <= e r r a b s ) then
! Primeiro c r i t e r i o de parada .
i f l a g= 0
return
end i f
i f ( abs ( dx ) <= e r r r e l abs ( r a i z ) ) then ! Segundo c r i t e r i o de parada .
i f l a g= 1
return
end i f
c a l l f_dfdx ( r a i z , f , d f )
i f ( f < 0 . 0 _dp) then
x l=r a i z
else
xh=r a i z
end i f
end do
i f l a g = 1
return
end subroutine newton_bisec
Utilizando a rotina newton_bisec para encontrar a raiz x1 de p3 (x) dentro do intervalo [1, 2], com
errabs= 0, errrel= 1010 e ntol= 50, obteve-se as seguintes iteraes:
w0 = 1.50000000000000
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

76

4.3. Razes complexas de funes analticas


w1 = 1.34782608695652
w2 = 1.32520039895091
w3 = 1.32471817399905
w4 = 1.32471795724479
w5 = 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.2) faz parte. Das trs razes de
p3 (x), somente uma (x1 ) real, enquanto as outras duas (x2 e x3 ) so complexas. Contudo, os mtodos
apresentados possibilitaram somente a obteno de x1 .
Nesta seo, alguns mtodos desenvolvidos para o clculo numrico de razes complexas de funes
analticas sero abordados. Particular nfase ser concedida ao Mtodo de Mller e uma descrio sucinta
ser realizada acerca de mtodos modernos que utilizam propriedades matemticas oriundas da teoria de
funes analticas.

4.3.1

O mtodo de Mller

Este mtodo relativamente recente, desenvolvido inicialmente por D. E. Mller [10], tem sido empregado
em diversas aplicaes distintas com bastante sucesso. Este mtodo pode ser usado para descobrir qualquer
nmero pr-fixado de razes, reais ou complexas, de uma funo analtica arbitrria. O mtodo iterativo,
converge quase quadraticamente na vizinhana de uma raiz, no requer a forma analtica da derivada da
funo e obtm tanto razes reais quanto complexas, mesmo quando estas so mltiplas.
Este mtodo global, no sentido de que o usurio no necessita fornecer uma aproximao inicial. Nesta
seo o mtodo ser apresentado, omitindo qualquer discusso a respeito da sua convergncia, e uma rotina
que possibilita a obteno de razes tanto reais quanto complexas ser tambm includa. O problema de
encontrar as todas as razes de um polinmio ter uma ateno especial, uma vez que este problema surge
com freqncia em todos os ramos das cincias naturais e exatas.
O mtodo de Mller uma extenso do mtodo da secante (seo 4.2.3). Para relembrar, no mtodo
da secante so fornecidas duas aproximaes iniciais (xi e xi1 ) para a soluo da equao f (x) = 0, sendo
obtida uma terceira aproximao (xi+1 ) (Eq. 4.6). Esta aproximao consiste simplesmente na raiz da reta
secante que passa pelos pontos {xi , f (xi )} e {xi1 , f (xi1 )}. No mtodo de Mller, so fornecidos 3 pontos:
{xi2 , f (xi2 )}, {xi1 , f (xi1 )} e {xi , f (xi )}, sendo a prxima aproximao raiz, xi+1 , obtida como uma
raiz da parbola que cruza os 3 pontos anteriores. Este mtodo est ilustrado na figura 4.5.
Para interpolar a parbola p(x):
p(x) = ax2 + bx + c
com a funo f (x) nos trs pontos apresentados, basta determinar o valor das constantes a, b e c de tal
forma que p(x) corta f (x) nestes pontos, como apresentado na figura 4.5. Uma maneira equivalente de
escrever p(x) a seguinte:
p(x) = f (xi ) + f [xi , xi1 ] (x xi ) + f [xi , xi1 , xi2 ] (x xi ) (x xi1 ) ,

(4.10a)

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

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 4. Solues de Equaes No Lineares

77

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 )
f [x1 , . . . , xk ] f [x0 , . . . , xk1 ]
f [x0 , . . . , xk ] =
,
xk x0
onde f [x0 , . . . , xk ] a k-sima diferena dividida de f (x) nos pontos x0 , . . . , xk . Pode-se verificar
facilmente que (4.10a) realmente interpola f (x) nos trs pontos escolhidos. Uma vez que
2

(x xi ) (x xi1 ) = (x xi ) + (xi xi1 ) (x xi ) ,


pode-se escrever p(x) tambm como
2

p(x) = f (xi ) + ci (x xi ) + f [xi , xi1 , xi2 ] (x xi ) ,


onde

(4.10b)

ci = f [xi , xi1 ] + f [xi , xi1 , xi2 ] (xi xi1 ) .

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
2

p() = f (xi )+ci ( xi )+f [xi , xi1 , xi2 ] ( xi ) = 0 = xi =

ci

c2i 4f (xi ) f [xi , xi1 , xi2 ]


,
2f [xi , xi1 , xi2 ]

(4.11)

a qual pode tambm ser escrita como


xi =

2f (xi )
ci

c2i

4f (xi ) f [xi , xi1 , xi2 ]

Se o sinal de (4.11) for escolhido de tal forma que o denominador seja o maior possvel1 e o valor de
resultante for tomado como a aproximao xi+1 da raiz de f (x), ento a frmula do mtodo de Mller fica:
xi+1 = xi
1 Isto

2f (xi )
ci

c2i 4f (xi ) f [xi , xi1 , xi2 ]

(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 julho de 2009

4.3. Razes complexas de funes analticas

78

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. Coloque i = 2 e calcule
hi = xi xi1 ; hi1 = xi1 xi2
f [xi1 , xi ] = (f (xi ) f (xi1 )) /hi
f [xi2 , xi1 ] = (f (xi1 ) f (xi2 )) /hi1 .
3. Calcule
f [xi2 , xi1 , xi ] = (f [xi1 , xi ] f [xi2 , xi ]) / (hi + hi1 )
ci = f [xi1 , xi ] + hi f [xi2 , xi1 , xi ] ,
4. Calcule
c2i 4f (xi ) f [xi , xi1 , xi2 ] ,

hi+1 = 2f (xi ) / ci

escolhendo o sinal de modo a maximizar a magnitude do denominador.


5. Calcule

xi+1 = xi + hi+1 .

6. Calcule

f (xi+1 ) .

7. Teste se um dos seguintes critrios for satisfeito:


(a) |f (xi+1 )|
(b) |xi+1 xi |

(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
graficamente pela figura 4.5. Contudo, as razes podem ser complexas mesmo que as aproximaes iniciais
sejam reais, bastando para isso que c2i 4f (xi ) f [xi , xi1 , xi2 ] < 0. Isto significa que mesmo que a raiz
procurada seja real, aproximaes intermedirias podem ser complexas. Porm, medida que as iteraes
se aproximam da raiz real, a parte imaginria de xi+1 tende a zero. O algoritmo 4.3 apresenta a seqncia
de passos necessria para implementar o mtodo de Mller.
O programa 4.5 implementa o mtodo de Mller, conforme delineado no algoritmo 4.3, em uma subrotina
em Fortran 95. O mtodo de Mller encontra uma raiz de cada vez. Para encontrar mais de uma raiz e
evitar que as iteraes venham a convergir para valores previamente encontrados, o programa 4.5 possui
uma subrotina interna que implementa a tcnica conhecida como deflao. Se, por exemplo, uma raiz 1
foi previamente obtida, a rotina calcula o prximo zero no a partir da funo f (x) original, mas a partir
da funo deflacionada ou reduzida
f (x)
.
f1 (x) =
x 1
Desta forma, se a raiz 1 for nica, limx1 f1 (x) = 1 e o mtodo dever convergir para uma raiz 2 distinta.
Pode acontecer de 2 = 1 se esta raiz for dupla. contudo, a funo ser novamente reduzida para cada nova
raiz encontrada. Assim, se os zeros 1 , 2 , . . . , r foram previamente obtidos, o prximo zero ser obtido a
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 4. Solues de Equaes No Lineares


partir da funo reduzida
fr (x) =

79

f (x)
.
(x 1 ) (x 2 ) (x r )

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 )
!
n : Numero t o t a l de r a i z e s a serem e n c o n t r a d a s .
( Entrada )
!
nprev : Numero de r a i z e s p r e v i a m e n t e c o n h e c i d a s .
( Entrada )
!
maxit : Numero maximo de chamadas da f u n c a o f n ( z ) por r a i z .
( Entrada )
!
e r r a b s : Primeiro c r i t e r i o de parada .
( Entrada )
!
I t e r a c o e s sao i n t e r r o m p i d a s s e a b s ( f n ( z ) ) . l t . e r r a b s .
!
e r r r e l : Segundo c r i t e r i o de parada .
( Entrada )
!
I t e r a c o e s sao i n t e r r o m p i d a s s e a b s ( h ) . l t e r r r e l a b s ( z ) .
!
z e r o s : Vetor que contem as r a i z e s de f n ( z ) .
( Entrada / Sa i da )
!
z e r o s ( 1 ) , . . . , z e r o s ( nprev ) contem as r a i z e s p r e v i a m e n t e c o n h e c i d a s .
!
z e r o s ( nprev +1) , . . . , z e r o s ( n ) contem as r a i z e s e n c o n t r a d a s .
!
f a t o r : (OPCIONAL) Fator m u l t i p l i c a t i v o para v a l o r e s i n i c i a i s . ( Entrada )
!
Para z= z e r o s ( i ) , os 3 p r i m e i r o s p o n t o s para a j u s t a r a p a r a b o l a sao
!
z , z + f a t o r h e z f a t o r h , sendo h um v a l o r f i x o .
!
f n r e a l : (OPCIONAL) V a r i a v e l l o g i c a para r a i z e s r e a i s .
( Entrada )
!
f n r e a l = . t r u e . s e t o d a s as r a i z e s sao r e a i s .
!
f n r e a l= . f a l s e . s e ha r a i z e s c o m p l e x a s ( v a l o r padrao ) .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : Junho / 2 0 0 9 .
!
subroutine m u l l e r ( fn , n , nprev , maxit , e r r a b s , e r r r e l , z e r o s , f a t o r , f n r e a l )
!
l o g i c a l , optional , intent ( in )
: : fnreal
integer , intent ( in )
: : n , nprev , maxit
r e a l ( kind= dp ) , intent ( in )
: : errabs , e r r r e l
r e a l ( kind= dp ) , optional , intent ( in )
: : fator
complex ( kind= dp ) , dimension ( n+nprev ) , intent ( inout ) : : z e r o s
integer
: : i , n_it
r e a l ( kind= dp )
: : eps1 , eps2 , t e s t e , h_ini= 0 . 5 _dp
complex ( kind= dp ) : : c , den , d i v d f 1 , d i v d f 2 , dvdf1p , f z r
complex ( kind= dp ) : : f z r d f l , f z r p r v , h , hprev , z e r o , s q r
INTERFACE
function f n ( z )
use Modelos_Computacionais_Dados
complex ( kind= dp ) , intent ( in ) : : z
complex ( kind= dp )
: : fn
end function f n
END INTERFACE
!
Inicializao .
e p s 1 = max( e r r r e l , 1 0 . 0 _dp e p s i l o n ( 1 . 0 _dp ) )
e p s 2 = max( e r r a b s , 1 0 . 0 _dp t i n y ( 1 . 0 _dp ) )
i f ( p r e s e n t ( f a t o r ) ) h_ini= f a t o r h_ini
!
l _ r a i z e s : do i = nprev + 1 , n
n_it = 0
!
C a l c u l e os t r e s p r i m e i r o s v a l o r e s da i esima r a i z como
!
z e r o s ( i ) + h , z e r o s ( i ) h , z e r o s ( i )
zero = zeros ( i )
h = h_ini z1
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

80

4.3. Razes complexas de funes analticas

c a l l d f l a c ( z e r o + h , i , n_it , f z r , dvdf1p , z e r o s )
c a l l d f l a c ( z e r o h , i , n_it , f z r , f z r p r v , z e r o s )
hprev = 2.0_dph
dvdf1p = ( f z r p r v dvdf1p ) / hprev
c a l l d f l a c ( z e r o , i , n_it , f z r , f z r d f l , z e r o s )
l _ i t e r : do
divdf1 = ( f z r d f l f z r p r v )/h
d i v d f 2 = ( d i v d f 1 dvdf1p ) / ( h + hprev )
hprev = h
dvdf1p = d i v d f 1
c = d i v d f 1 + h d i v d f 2
s q r = c c 4 . 0 _dp f z r d f l d i v d f 2
i f ( p r e s e n t ( f n r e a l ) . and . ( r e a l ( s q r ) < 0 . 0 _dp ) ) s q r = ( 0 . 0 _dp , 0 . 0 _dp)
sqr = sqrt ( sqr )
i f ( r e a l ( c ) r e a l ( s q r )+aimag ( c ) aimag ( s q r ) < 0 . 0 _dp) then
den = c s q r
else
den = c + s q r
end i f
h = 2.0_dp f z r d f l / den
fzrprv = f z r d f l
zero = zero + h
i f ( n_it > maxit ) e x it l _ i t e r
l _ d i v : do
c a l l d f l a c ( z e r o , i , n_it , f z r , f z r d f l , z e r o s )
!
Verifique a convergencia .
t e s t e= abs ( h ) e p s 1 abs ( z e r o )
i f ( t e s t e < 0 . 0 _dp) e x i t l _ i t e r
i f (max( abs ( f z r ) , abs ( f z r d f l ) ) < e p s 2 ) e x it l _ i t e r
!
V e r i f i q u e s e v a l o r i t e r a d o d i v e r g e da r a i z .
i f ( abs ( f z r d f l ) < 1 0 . 0 _dp abs ( f z r p r v ) ) e x i t l _ d i v
h = 0 . 5 _dph
zero = zero h
end do l _ d i v
end do l _ i t e r
zeros ( i ) = zero
end do l _ r a i z e s
return
CONTAINS
subroutine d f l a c ( z e r o , i , n_it , f z e r o , f z r d f l , z e r o s )
integer , intent ( in )
:: i
integer , intent ( inout )
: : n_it
complex ( kind= dp ) , intent ( in )
: : zero
complex ( kind= dp ) , intent ( out )
: : fzero , f z r d f l
complex ( kind= dp ) , dimension ( i ) , intent ( inout ) : : z e r o s
integer
:: j
complex ( kind= dp ) : : den
!
n_it = n_it + 1
f z e r o = fn ( zero )
fzrdfl = fzero
do j = 2 , i
den = z e r o z e r o s ( j 1)
i f ( abs ( den ) == 0 . 0 _dp) then
z e r o s ( i ) = z e r o 1 . 0 0 1 _dp
return
else
f z r d f l = f z r d f l / den
end i f
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 4. Solues de Equaes No Lineares

81

end do
return
end subroutine d f l a c
end subroutine m u l l e r
Usando a rotina muller para encontrar as trs razes de p3 (x) obteve-se os seguintes resultados.
Com errabs= 0 e errrel= 0.1d0, os resultados so:
x1 = (0.665243809187657, 0.556608124056967)
x2 = (0.662340508718597, 0.562310707038522)
x3 = (1.32447378321995, 1.727695801886954E 004)
com erros relativos iguais a
7.323503893991807E 003, 4.172563925890038E 005, 2.257958628007346E 004
respectivamente.
Com errabs= 0 e errrel= 1.0d-5, os resultados so:
x1 = (0.662358978622373, 0.562279512062300)
x2 = (0.662358978622373, 0.562279512062301)
x3 = (1.32471795724475, 2.958228394578794E 031)
com erros relativos iguais a
1.152237512587846E 015, 0.000000000000000E + 000, 2.233100546724340E 031
respectivamente.
Com errabs= 0 e errrel= 1.0d-9, os resultados so:
x1 = (0.662358978622373, 0.562279512062301)
x2 = (0.662358978622373, 0.562279512062301)
x3 = (1.32471795724475, 0.000000000000000E + 000)
com erros relativos iguais a
0.000000000000000E + 000, 0.000000000000000E + 000, 0.000000000000000E + 000
respectivamente.
Ou seja, observa-se que o mtodo rapidamente converge para os valores exatos das razes.

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

82

4.3. Razes complexas de funes analticas

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

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 definido da seguinte forma. Sendo x
x0 um parmetro que
varia de forma independente no problema e y(x) uma funo da varivel x, a funo y(x) ser determinada,
em um problema de valor inicial, a partir da soluo da equao diferencial ordinria de ordem n
F y (n) (x), y (n1) (x), . . . , y (x), y(x), x = f (x),

(5.1a)

juntamente com as condies iniciais


g0 y (x0 ) , y (x0 ) , . . . , y (n1) (x0 ) = a0

(5.1b)

g1 y (x0 ) , y (x0 ) , . . . , y (n1) (x0 ) = a1

(5.1c)

..
.

..
.

gn y (x0 ) , y (x0 ) , . . . , y (n1) (x0 ) = an ,

(5.1d)
(5.1e)

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

5.2

Equaes de diferenas finitas 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 finitas. Para exemplificar, pode-se considerar o PVI
linear
y = y,
y (x0 ) = a0 ,

(5.2a)
(5.2b)

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

y (x + h) y(x)
,
h
83

5.2. Equaes de diferenas finitas lineares

84

sendo h um pequeno incremento em x. Desta forma, possvel afirmar que a soluo no ponto x + h
obtida a partir do conhecimento da soluo em x atravs de
y (x + h) = (1 + h) y(x).
Partindo-se ento do valor inicial y0 = a0 , obtem-se y1 = y (x + h)=(1 + h) y0 =(1 + h) a0 , y2 = y (x + 2h) =
2
n
(1 + h) y1 = (1 + h) a0 , etc. Por induo, pode-se deduzir que yn = (1 + h) a0 . Escrevendo agora o nsimo valor de x como xn = x0 + nh e chamando xn x e yn y, temos
h=

x x0
. Portanto, y =
n

1+

x x0
n

a0 .

Empregando agora a identidade

z n
= ez ,
n
n
resulta que a soluo discretizada do PVI (5.2), quando n , reduz-se a y = a0 exx0 , a qual justamente
a sua soluo. Contudo, neste limite o resultado dever estar bastante contaminado pela propagao de
erros de arredondamento; alm disso, deseja-se buscar mtodos que forneam resultados mais acurados j
para as primeiras iteraes.
Alguns exemplos de equaes de diferenas finitas e suas solues so
lim

1+

yn+1 yn = 1

yn+1 yn = n

yn+1 (n + 1) yn = 0

yn = n + c
yn =

n (n 1)
+c
2
yn = cn!

Vamos considerar com algum detalhe uma equao de diferenas finitas linear de ordem N com coeficientes constantes
yn+N + aN 1 yn+N 1 + + a1 yn+1 + a0 yn = 0.
(5.3)
Esta equao deve possuir N solues linearmente independentes, as quais so da forma yn = n , n, sendo
uma constante. Substituindo esta soluo em (5.3) resulta
n+N + aN 1 n+N 1 + + a1 n+1 + a0 n = 0.
Dividindo-se por n , resulta a equao caracterstica
N + aN 1 N 1 + + a1 + a0 = 0,

(5.4)

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 finalmente escrita como
n
yn = c1 1n + c2 22 + + 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 finitas, 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


n

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 julho de 2009

Captulo 5. Problemas de Valor Inicial [Em Construo]

85

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
soluo da mesma n1n . 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 finitas consideradas nesta seo sero teis para os mtodos
desenvolvidos no restante deste captulo.
1/3

5.3

1/3.

Integrao numrica por srie de Taylor

Considerando-se inicialmente um PVI de primeira ordem na forma


y = f (x, y)

(5.5a)

y (x0 ) = y0 .

(5.5b)

A funo f (x, y) pode ser linear ou no linear em y, mas assumido que esta diferencivel em qualquer
ordem em x e y. Se f /y for contnua no domnio de interesse, ento a soluo de (5.5) nica.
Sendo ento y(x) a soluo exata de (5.5), pode-se desenvolver y(x) em uma srie de Taylor em torno
do ponto x = x0 :
1
2
(5.6)
y(x) = y0 + (x x0 ) y (x0 ) + (x x0 ) y (x0 ) + .
2!
O valor de y0 suposto dado, mas as derivadas na srie acima no so conhecidas uma vez que y(x)
desconhecido. Contudo, dada a hiptese de f (x, y) ser diferencivel, as derivadas de (5.6) podem ser
obtidas tomando-se a derivada total de (5.5a) em relao a x, lembrando sempre que y funo de x.
Assim, obtem-se para as primeiras derivadas:
y =f
df
y =
= fx + fy y
dx
= fx + fy f
y

d2 f
= fxx + fxy f + fyx f + fyy f 2 + fy fx + fy2 f
dx2
= fxx + 2fxy f + fyy f 2 + fy fx + fy2 f.

Continuando desta maneira, pode-se expressar qualquer derivada de y em termos de f (x, y) e suas derivadas
parciais. Contudo, para derivadas de mais alta ordem a expresso resultante torna-se cada vez mais extensa.
Por razes prticas, portanto, deve-se limitar o nmero de termos em (5.6) a um valor pequeno e
esta limitao restringe o valor de x para o qual a srie (5.6) truncada resulta em um valor para y(x)
razoavelmente acurado. Assumindo que a srie (5.6) truncada fornece uma boa aproximao para um passo
de comprimento h, isto , x x0 = h, pode-se calcular y em x0 + h, recalcular suas derivadas y , y , etc, em
x = x0 + h e ento usar (5.6) novamente para calcular y em x0 + 2h; e assim sucessivamente. Prosseguindo
desta maneira, obtem-se uma conjunto discreto de valores {yn } que so aproximaes da soluo correta
nos pontos xn = x0 + nh (n = 0, 1, 2, . . . ). No restante deste captulo, a soluo exata de (5.5) no ponto xn
ser denotada por y (xn ), enquanto que a soluo aproximada ser denotada por yn .
Para formalizar este procedimento, introduz-se o operador
Tk (x, y) = f (x, y) +

h2
hk1 (k1)
h
f (x, y) + f (x, y) + +
f
(x, y) , k = 1, 2, . . . ,
2!
3!
k!

(5.7)

onde f (j) (x, y) denota a j-sima derivada total de f (x, y) com relao a x. Assim, truncando-se a srie
(5.6) at o k-simo termo, pode-se escrever:
y(x0 + h) y0 + h Tk x0 , y (x0 )

(5.8a)

O erro local cometido ao se tormar o passo de xn para xn+1 utilizando o mtodo de Taylor na ordem k,
fornecido pelo prximo termo da srie de Taylor truncada:
E=

hk+1 (k+1)
hk
y
() =
f (k) , y () , xn < < xn + h.
(k + 1)!
(k + 1)!

Autor: Rudi Gaelzer IFM/UFPel

(5.8b)

Verso: 22 de julho de 2009

5.4. O Mtodo de Runge-Kutta

86

Algoritmo 5.1 Algoritmo de Taylor de ordem k.


Para encontrar uma soluo aproximada do PVI
y = f (x, y)
y(a) = y0
sobre o intervalo [a, b]:
1. Escolha um passo h = (b a) /N . Defina
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 definido em (5.7).

Neste caso, diz-se que o algoritmo de Taylor de ordem k. O algoritmo 5.1 implementa o mtodo de
Taylor.

5.3.1

O mtodo de Euler

Arbitrando k = 1 em (5.8a,b), obtem-se o mtodo de Euler e o seu erro local. Seguindo a representao
apresentada no algoritmo 5.1, a frmula para o mtodo de Euler fica:
yn+1 = yn + f (xn , yn ) ,
1
E = f (xn , yn ) h2 , xn < < xn+1 .
2

(5.9a)
(5.9b)

Para este mtodo, existe uma outra estimativa de erro que pode ser denominada de erro global ou erro
de convergncia. Trata-se de um limite superior no erro cometido ao se utilizar repetidas vezes este mtodo
com um passo fixo h, variando x entre x0 e algum limite superior x = b. Sendo xn = x0 + nh, este erro
mensurado como
en = y (xn ) yn ,
isto , o erro realizado no processo de discretizao empregado pelo mtodo de Euler. Nesta definio, yn
o valor aproximado dado pelo mtodo de Euler (Eq. 5.9a), enquanto que y (xn ) a soluo exata do PVI
no ponto xn . Uma estimativa mxima para en dada pelo Teorema (5.3.1) abaixo.
Teorema 5.1
Seja yn a soluo aproximada de (5.5) obtida pelo Mtodo de Euler (5.9). Se a soluo exata de (5.5),
y = y(x), possui sua derivada segunda contnua no intervalo [x0 , b] e se neste intervalo as inegualdades
|fy (x, y)|

L,

|y (x)| < Y

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.3.1) mostra que o erro O(h), isto , en 0 proporcionalmente a h se x = xn mantido


fixo. Por outro lado, para um h fixo, 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 julho de 2009

Captulo 5. Problemas de Valor Inicial [Em Construo]

87

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 deficincia no Mtodo de Euler se deve ao fato de que a frmula (5.9a) avana a soluo por um
intervalo h usando somente informaes somente no incio do intervalo, isto , no ponto x = xn . O mtodo
no utiliza nenhuma outra informao sobre a variao de f (x, y) no intervalo [xn , xn+1 ]. O mesmo pode
ser dito do algoritmo de Taylor em qualquer ordem.

5.4.1

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


mdio

Numa tentativa de remediar esta deficincia, pode-se realizar primeiramente um passo tentativo at o
ponto mdio no intervalo [xn , xn+1 ] e ento utilizar os valores de x e y neste ponto mdio para computar o
passo real ao longo de todo o intervalo de comprimento h. Esta sequncia de 2 passos intermedirios para
um passo completo quantitativamente descrito pelo sistema de equaes
k1 = hf (xn , yn )
k2 = hf (xn + h/2, yn + k1/2)
yn+1 = yn + k2 + O h3 .
Como indicado no termo de erro, o uso do ponto mdio torna o mtodo acurado em segunda ordem. A figura
5.1 ilustra a aplicao deste mtodo. J o algoritmo 5.2 mostra como este mtodo pode ser implementado
em um programa de computador.
Algoritmo 5.2 O Mtodo de Runge-Kutta de ordem 2.
Dado o PVI
y = f (x, y) , y(x0 ) = y0 ,
aproximaes yn para y (xn ), sendo xn = x0 + nh para um passo h fixo e n = 0, 1, . . . , so obtidas usando-se
a seguinte sequncia de passos:
1. Calcule k1 dado por

k1 = hf (xn , yn ) .

2. A partir de k1 , calcule k2 dado por


k2 = hf

1
1
xn + h, yn + k1 .
2
2

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


yn+1 = yn + k2 .

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

5.5. Sistemas de equaes diferenciais

88

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
final. Destas derivadas o valor final 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 significa que possvel usar um passo h com o primeiro mtodo para se obter a
mesma acurcia do segundo. O preo que se paga que para cada passo h o funcional f (x, y) calculado
2 vezes, no incio e no ponto mdio do intervalo. Expresses com erros ainda menores podem ser obtidos
utilizando-se informaes de derivadas de ordens mais altas no ponto mdio. Contudo, em vez de se utilizar
esta complicao adicional, o uso prtico recomenda o emprego do Mtodo de Runge-Kutta de ordem 4
(seo 5.4.2).

5.4.2

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 = hf (xn , yn )

(5.10a)

k2 = hf (xn + h/2, yn + k1/2)

(5.10b)

k3 = hf (xn + h/2, yn + k2/2)

(5.10c)

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

(5.10d)
(5.10e)

O mtodo de ordem 4 requer 4 clculos de f (x, y) por passo h. Isto significa que este mtodo deve ser
superior que o mtodo de ordem 2 se o valor de h neste caso puder ser, pelo menos, 2 vezes maior que o
valor para o mtodo de ordem 2, para se obter a mesma acurcia. Caso contrrio, melhor usar o algoritmo
5.2 ou algum outro mtodo de soluo de um PVI. A figura 5.2 ilustra a aplicao do mtodo e o algoritmo
5.3 mostra a sua implementao.

5.5

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 exemplificar a generalizao do mtodo, vamos considerar o caso de uma ODE de ordem N com N
condies iniciais. A extenso para o caso onde h mais de uma equao diferencial, inclusive de diferentes
ordens, segue diretamente do exemplo apresentado. O PVI a ser considerado pode ser escrito a partir de
(5.1) como
y (N ) = f x, y(x), y (x), , y (N 1) (x) ,

(5.11a)

juntamente com as condies iniciais


g0 y (x0 ) , y (x0 ) , . . . , y (N 1) (x0 ) = a0
Autor: Rudi Gaelzer IFM/UFPel

(5.11b)
Verso: 22 de julho de 2009

Captulo 5. Problemas de Valor Inicial [Em Construo]

89

Algoritmo 5.3 O Mtodo de Runge-Kutta de ordem 4.


Dado o PVI
y = f (x, y) , y(x0 ) = y0 ,
aproximaes yn para y (xn ), sendo xn = x0 + nh para um passo h fixo e n = 0, 1, . . . , so obtidas usando-se
a seguinte sequncia de passos:
1. Calcule k1 dado por

k1 = hf (xn , yn ) .

2. A partir de k1 , calcule k2 dado por


k2 = hf

1
1
xn + h, yn + k1 .
2
2

3. A partir de k2 , calcule k3 dado por


k3 = hf

1
1
xn + h, yn + k2 .
2
2

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

g1 y (x0 ) , y (x0 ) , . . . , y (N 1) (x0 ) = a1


..
.

..
.

gN y (x0 ) , y (x0 ) , . . . , y (N 1) (x0 ) = aN .

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

Definindo inicialmente y1 (x) = y(x), podemos escrever:


y1 (x) = y2 (x)

(5.12a)

y2 (x) = y3 (x)

(5.12b)

y3 (x) = y4 (x)
....
..

(5.12c)

yN 1 (x) = yN (x),

(5.12d)

finalmente, fazendo uso de (5.11a),


yN (x) = f (x, y1 (x), y2 (x), , yN (x)) ,

(5.12e)

com as condies iniciais (5.11be) escritas


g0 (y1 (x0 ) , y2 (x0 ) , . . . , yN (x0 )) = a0

(5.12f)

g1 (y1 (x0 ) , y2 (x0 ) , . . . , yN (x0 )) = a1


.. ..
. .

(5.12g)

gN (y1 (x0 ) , y2 (x0 ) , . . . , yN (x0 )) = aN .

(5.12h)

Ou seja, ao invs procurarmos uma forma do mtodo de Runge-Kutta para resolver 1 ODE de ordem N , o
que iremos fazer resolver N equaes de ordem 1.
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

5.5. Sistemas de equaes diferenciais

90

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 fluido 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 2
m
m

y(0) = y0
y(0)

= v0 .
Definindo y1 (t) = y(t) e y 1 (t) = y2 (t), o PVI pode ser escrito a partir de (5.12) como:
y 1 = y2
y 2 = g

C
k
y1 y22
m
m

y1 (0) = y0
y2 (0) = v0 ,
ou seja, em vez de resolvermos 1 equao de 2 ordem, vamos resolver 2 equaes de 1 ordem.
Quando o PVI for composto por mais de uma ODE de diferentes ordens, busca-se reduzir este sistema
sempre a um sistema de primeira ordem. Neste caso, ao invs de somente uma equao de primeira ordem
do tipo (5.12e), teremos um sistema de N equaes do tipo:
y1 = f1 (x, y1 , y2 , , yn )

(5.13a)

y2 = f2 (x, y1 , y2 , , yn )
.. ..
. .

(5.13b)

yN = fN (x, y1 , y2 , , yn ) ,

(5.13c)

onde neste sistema j esto includas as equaes auxiliares (5.12ad). muitas vezes conveniente pensar
este sistema na forma vetorial,
y = f (x, y) ,
(5.13d)
onde y e f so vetores com N componentes cada.
A subrotina 5.1 implementa o Mtodo de Runge-Kutta de quarta ordem dado pelo algoritmo 5.3 em
Fortran 95. Nota-se que a subrotina resolve um sistema de EDOs de primeira ordem do tipo (5.13ac) ou
(5.13d).
Programa 5.1: Resolve um Problema de Valor Inicial usando o Mtodo de Runge-Kutta de quarta ordem.

! SUBROTINA RK4
! R e s o l v e um Problema de Valor I n i c i a l p e l o Metodo de RungeKutta
!
de q u a r t a ordem com p a s s o f i x o .
! Dados o v e t o r y ( : ) que contem as v a r i a v e i s e o v e t o r das d e r i v a d a s
!
dydx ( : ) no ponto x , a r o t i n a i n v o c a a s u b r o t i n a d e r i v s ( y , x , dydx )
!
que s e r a usada para avancar o v e t o r das s o l u c o e s y s a i ( : ) a t e o
!
ponto x + h .
!
! Argumentos de e n t r a d a :
!
y:
Vetor de forma assumida contendo as s o l u c o e s do PVI no ponto x .
!
dydx :
Vetor de forma assumida contendo as d e r i v a d a s de y no ponto x .
!
x:
Ponto i n i c i a l do i n t e r v a l o .
!
h:
Tamanho do p a s s o .
!
d e r i v s : S u b r o t i n a que c a l c u l a as d e r i v a d a s dydx no ponto x .
! Argumento de s a i d a :
!
y s a i : Vetor de forma assumida contendo as s o l u c o e s do PVI no ponto x + h .
!
! Autor : Rudi G a e l z e r , IFM UFPel .
! Data : J u l h o / 2 0 0 9 .
! Obs : Baseada na s u b r o t i n a RK4 do Numerical R e c i p e s .
!
Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

Captulo 5. Problemas de Valor Inicial [Em Construo]

91

subroutine rk4 ( y , dydx , x , h , y s a i , d e r i v s )


r e a l ( kind= dp ) , dimension ( : ) , intent ( in ) : : y , dydx
r e a l ( kind= dp ) , intent ( in ) : : x , h
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 ) ) : : 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 ( dydx ) , s i z e ( y s a i ) , rk4 )
hh= h 0 . 5 _dp
h6= h / 6 . 0 _dp
xh= x + hh
yt= y + hhdydx
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 + hdym
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 _dpdym)
return
end subroutine rk4

Autor: Rudi Gaelzer IFM/UFPel

Verso: 22 de julho de 2009

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

92

Você também pode gostar