Vous êtes sur la page 1sur 327

Clculo Numrico

Um Livro Colaborativo
Verso Python

20 de maro de 2017
Organizadores

Dagoberto Adriano Rizzotto Justo - UFRGS

Esequia Sauter - UFRGS

Fabio Souto de Azevedo - UFRGS

Leonardo Fernandes Guidi - UFRGS

Matheus Correia dos Santos - UFRGS

Pedro Henrique de Almeida Konzen - UFRGS

ii
Licena

Este trabalho est licenciado sob a Licena Creative Commons Atribuio-


CompartilhaIgual 3.0 No Adaptada. Para ver uma cpia desta licena, visite
http://creativecommons.org/licenses/by-sa/3.0/ ou envie uma carta para Creative
Commons, PO Box 1866, Mountain View, CA 94042, USA.

iii
Nota dos organizadores

Estamos escrevendo este livro de forma colaborativa desde 2011 e, recente-


mente, decidimos por abrir colaboraes externas. Nosso objetivo produzir um
material didtico no nvel de graduao de excelente qualidade e de acesso livre
pela colaborao entre professores e alunos de universidades, institutos de educa-
o e demais interessados na anlise, estudo e aplicao de mtodos numricos nos
mais diversos ramos da cincia e da tecnologia.
O sucesso do projeto depende da colaborao! Edite voc mesmo o livro, d
sugestes ou nos avise de erros e imprecises. Toda a colaborao bem vinda.
Saiba mais visitando o site oficial do projeto:

http://www.ufrgs.br/numerico

Ns preparamos uma srie de aes para ajud-lo a participar. Em primeiro


lugar, o acesso irrestrito ao livro pode se dar atravs do site oficial do projeto.
Disponibilizamos o livro na verso original em PDF e verses adaptadas em HTML,
EPUB e Slides. Alm disso, o livro est escrito em cdigo LATEX disponvel em
repositrio GitHub pblico.
Nada disso estaria completo sem uma licena apropriada colaborao. Por
isso, escolhemos disponibilizar o material do livro sob licena Creative Commons
Atribuio-CompartilhaIgual 3.0 No Adaptada (CC-BY-SA 3.0). Ou seja, voc
pode copiar, redistribuir, alterar e construir um novo material para qualquer uso,
inclusive comercial. Leia a licena para maiores informaes.

Desejamos-lhe timas colaboraes!

iv
Prefcio

Este livro busca abordar os tpicos de um curso de introduo ao clculo num-


rico moderno oferecido a estudantes de matemtica, fsica, engenharias e outros.
A nfase colocada na formulao de problemas, implementao em computador
da resoluo e interpretao de resultados. Pressupe-se que o estudante domine
conhecimentos e habilidades tpicas desenvolvidas em cursos de graduao de cl-
culo, lgebra linear e equaes diferenciais. Conhecimentos prvios em linguagem
de computadores fortemente recomendvel, embora apenas tcnicas elementares
de programao sejam realmente necessrias.
Nesta verso do livro, fazemos nfase na utilizao da linguagem computacional
Python para a implementao dos mtodos numricos abordados. Recomendamos
ao leitor ter sua disposio um computador com o interpretador Python 2.7
(ou superior) e o conjunto de biblioteca SciPy instalados. No necessrio estar
familiarizado com esta linguagem, mas recomendamos a leitura do Apndice A,
no qual apresentamos uma rpida introduo a esta linguagem com nfase naquilo
que mais excencial para a leitura do livro. Alternativamente, existem algumas
solues em nuvem que fornecem acesso a consoles online Python. Veja, por
exemplo, o SageMathCloud.
Os cdigos computacionais dos mtodos numricos apresentados no livro so
implementados em uma abordagem didtica. Isto , temos o objetivo de que a im-
plementao em linguagem computacional venha a auxiliar o leitor no aprendizado
das tcnicas numricas que so apresentadas no livro. Implementaes computa-
cionais eficientes de tcnicas de clculo numrico podem ser obtidas na srie de
livros Numerical Recipes, veja [10].

v
Sumrio

Capa i

Organizadores ii

Licena iii

Nota dos organizadores iv

Prefcio v

Sumrio x

1 Introduo 1

2 Representao de nmeros e aritmtica de mquina 3


2.1 Sistema de numerao e mudana de base . . . . . . . . . . . . . . 3
2.2 Notao cientfica e notao normalizada . . . . . . . . . . . . . . . 8
2.2.1 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Representao decimal finita . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 Arredondamento de nmeros . . . . . . . . . . . . . . . . . . 10
2.4 Representao de nmeros em mquina . . . . . . . . . . . . . . . . 11
2.4.1 Nmeros inteiros . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.2 Sistema de ponto fixo . . . . . . . . . . . . . . . . . . . . . . 14
2.4.3 Sistema de ponto flutuante . . . . . . . . . . . . . . . . . . . 15
2.4.4 Preciso e psilon de mquina . . . . . . . . . . . . . . . . . 18
2.4.5 Distribuio dos nmeros . . . . . . . . . . . . . . . . . . . . 18
2.5 Tipos de Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6 Erros nas operaes elementares . . . . . . . . . . . . . . . . . . . . 22
2.7 Cancelamento catastrfico . . . . . . . . . . . . . . . . . . . . . . . 22
2.8 Condicionamento de um problema . . . . . . . . . . . . . . . . . . . 25
2.9 Mais exemplos de cancelamento catastrfico . . . . . . . . . . . . . 30

vi
SUMRIO vii

3 Soluo de equaes de uma varivel 38


3.1 Existncia e unicidade . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2 Mtodo da bisseo . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.2.1 Cdigo Python: mtodo da bisseo . . . . . . . . . . . . . . 45
3.3 Iterao de Ponto Fixo . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.1 Teorema do ponto fixo . . . . . . . . . . . . . . . . . . . . . 52
3.3.2 Teste de convergncia . . . . . . . . . . . . . . . . . . . . . . 55
3.3.3 Estabilidade e convergncia . . . . . . . . . . . . . . . . . . 56
3.3.4 Erro absoluto e tolerncia . . . . . . . . . . . . . . . . . . . 57
3.4 Mtodo de Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . 63
3.4.1 Interpretao geomtrica . . . . . . . . . . . . . . . . . . . . 64
3.4.2 Anlise de convergncia . . . . . . . . . . . . . . . . . . . . 65
3.5 Mtodo das secantes . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.5.1 Interpretao geomtrica . . . . . . . . . . . . . . . . . . . . 71
3.5.2 Anlise de convergncia . . . . . . . . . . . . . . . . . . . . 72
3.6 Critrios de parada . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.7 Exerccios finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

4 Soluo de sistemas lineares 82


4.1 Eliminao gaussiana . . . . . . . . . . . . . . . . . . . . . . . . . . 83
4.1.1 Eliminao gaussiana com pivotamento parcial . . . . . . . . 84
4.2 Complexidade de algoritmos em lgebra linear . . . . . . . . . . . . 89
4.3 Sistemas triangulares . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.4 Fatorao LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4.4.1 Cdigo Python: Fatorao LU . . . . . . . . . . . . . . . . . 95
4.4.2 Custo computacional para resolver um sistema linear usando
fatorao LU . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.4.3 Custo para resolver m sistemas lineares . . . . . . . . . . . . 96
4.4.4 Custo para calcular a matriz inversa de A . . . . . . . . . . 96
4.5 Mtodo da matriz tridiagonal . . . . . . . . . . . . . . . . . . . . . 97
4.6 Condicionamento de sistemas lineares . . . . . . . . . . . . . . . . . 104
4.6.1 Norma de vetores . . . . . . . . . . . . . . . . . . . . . . . . 105
4.6.2 Norma de matrizes . . . . . . . . . . . . . . . . . . . . . . . 106
4.6.3 Nmero de condicionamento . . . . . . . . . . . . . . . . . . 107
4.7 Mtodos iterativos para sistemas lineares . . . . . . . . . . . . . . . 110
4.7.1 Mtodo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . . 110
4.7.2 Mtodo de Gauss-Seidel . . . . . . . . . . . . . . . . . . . . 112
4.7.3 Anlise de convergncia . . . . . . . . . . . . . . . . . . . . 114
4.8 Clculo de autovalores e autovetores . . . . . . . . . . . . . . . . . 123
4.8.1 Mtodo da Potncia . . . . . . . . . . . . . . . . . . . . . . 123
4.8.2 Mtodo da iterao Inversa . . . . . . . . . . . . . . . . . . 126

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


viii Clculo Numrico

4.9 Exerccios finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

5 Soluo de sistemas de equaes no lineares 131


5.1 Mtodo de Newton para sistemas . . . . . . . . . . . . . . . . . . . 134
5.1.1 Cdigo Python: Newton para Sistemas . . . . . . . . . . . . 137
5.2 Linearizao de uma funo de vrias variveis . . . . . . . . . . . . 145
5.2.1 Gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
5.2.2 Matriz jacobiana . . . . . . . . . . . . . . . . . . . . . . . . 146

6 Interpolao 149
6.1 Interpolao polinomial . . . . . . . . . . . . . . . . . . . . . . . . . 150
6.2 Diferenas divididas de Newton . . . . . . . . . . . . . . . . . . . . 154
6.3 Polinmios de Lagrange . . . . . . . . . . . . . . . . . . . . . . . . 156
6.4 Aproximao de funes reais por polinmios interpoladores . . . . 157
6.5 Interpolao linear segmentada . . . . . . . . . . . . . . . . . . . . 160
6.6 Interpolao cbica segmentada - spline . . . . . . . . . . . . . . . . 161
6.6.1 Spline natural . . . . . . . . . . . . . . . . . . . . . . . . . . 164
6.6.2 Spline fixado . . . . . . . . . . . . . . . . . . . . . . . . . . 166
6.6.3 Spline not-a-knot . . . . . . . . . . . . . . . . . . . . . . . . 167
6.6.4 Spline peridico . . . . . . . . . . . . . . . . . . . . . . . . . 168

7 Ajuste de curvas 170


7.1 Ajuste de uma reta . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
7.2 Ajuste linear geral . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
7.2.1 Ajuste polinomial . . . . . . . . . . . . . . . . . . . . . . . . 181
7.3 Aproximando problemas no lineares por problemas lineares . . . . 184

8 Derivao Numrica 189


8.1 Diferenas finitas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.1.1 Diferenas finitas via srie de Taylor . . . . . . . . . . . . . 191
8.1.2 Erros de arredondamento . . . . . . . . . . . . . . . . . . . . 195
8.2 Diferena finita para derivada segunda . . . . . . . . . . . . . . . . 199
8.3 Diferenas finitas de ordem mais alta . . . . . . . . . . . . . . . . . 200
8.4 Frmulas de diferenas finitas . . . . . . . . . . . . . . . . . . . . . 203
8.5 Derivada via ajuste ou interpolao . . . . . . . . . . . . . . . . . . 205
8.6 Exerccios finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

9 Integrao Numrica 208


9.1 Regras de Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . 210
9.1.1 Somas de Riemann . . . . . . . . . . . . . . . . . . . . . . . 211
9.1.2 Regra do trapzio . . . . . . . . . . . . . . . . . . . . . . . . 212

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


SUMRIO ix

9.1.3 Regra de Simpson . . . . . . . . . . . . . . . . . . . . . . . . 214


9.2 Obteno das regras de quadratura . . . . . . . . . . . . . . . . . . 218
9.3 Regras compostas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
9.3.1 Mtodo composto dos trapzios . . . . . . . . . . . . . . . . 220
9.3.2 Mtodo composto de Simpson . . . . . . . . . . . . . . . . . 221
9.4 O mtodo de Romberg . . . . . . . . . . . . . . . . . . . . . . . . . 223
9.5 Ordem de preciso . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
9.6 Quadratura de Gauss-Legendre . . . . . . . . . . . . . . . . . . . . 232
9.7 Exerccios finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

10 Problemas de valor inicial 240


10.1 Teoria de equaes diferenciais . . . . . . . . . . . . . . . . . . . . . 241
10.2 Mtodo de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
10.2.1 Ordem de preciso . . . . . . . . . . . . . . . . . . . . . . . 247
10.2.2 Erro de truncamento Local . . . . . . . . . . . . . . . . . . . 248
10.2.3 Erro de truncamento Global . . . . . . . . . . . . . . . . . . 249
10.3 Convergncia, consistncia e estabilidade . . . . . . . . . . . . . . . 249
10.3.1 Convergncia . . . . . . . . . . . . . . . . . . . . . . . . . . 249
10.3.2 Consistncia . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
10.3.3 Estabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
10.4 O mtodo de Euler implcito . . . . . . . . . . . . . . . . . . . . . . 251
10.5 Mtodo Trapezoidal . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
10.6 O mtodo de Heun . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
10.7 O mtodo theta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
10.8 O mtodo de Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . 255
10.9 Estabilidade dos mtodos de Taylor . . . . . . . . . . . . . . . . . . 255
10.10Mtodos de Passo Mltiplo . . . . . . . . . . . . . . . . . . . . . . . 256
10.11O mtodo de Adams-Bashforth . . . . . . . . . . . . . . . . . . . . 257
10.12O mtodo de Adams-Moulton . . . . . . . . . . . . . . . . . . . . . 258
10.13Mtodo BDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.14Ordem e convergncia de mtodos de passo mltiplo . . . . . . . . . 260
10.14.1 Consistncia, Estabilidade e Convergncia . . . . . . . . . . 260
10.14.2 As barreiras de Dahlquist . . . . . . . . . . . . . . . . . . . 261
10.15Estabilidade dos mtodos de passo mltiplo . . . . . . . . . . . . . 261
10.16Mtodos de Runge-Kutta . . . . . . . . . . . . . . . . . . . . . . . . 262
10.16.1 Mtodo de Runge-Kutta Explcito . . . . . . . . . . . . . . . 262
10.16.2 Mtodo de RK = 2 . . . . . . . . . . . . . . . . . . . . . . 263
10.16.3 Mtodo de Runge-Kutta implcito (IRK) . . . . . . . . . . . 264
10.17Estimativa da ordem de convergncia . . . . . . . . . . . . . . . . . 265
10.17.1 Mtodo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
10.17.2 Mtodo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


x Clculo Numrico

10.18Sistemas de equaes diferenciais e equaes de ordem superior . . . 267


10.19Exerccios finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

11 Problemas de Valores de Contorno 273


11.1 Mtodo de Diferenas Finitas . . . . . . . . . . . . . . . . . . . . . 273

A Rpida Introduo ao Python 285


A.1 Sobre a linguagem Python . . . . . . . . . . . . . . . . . . . . . . . 285
A.1.1 Instalao e Execuo . . . . . . . . . . . . . . . . . . . . . 285
A.1.2 Usando Python . . . . . . . . . . . . . . . . . . . . . . . . . 286
A.2 Elementos da linguagem . . . . . . . . . . . . . . . . . . . . . . . . 287
A.2.1 Operaes matemticas elementares . . . . . . . . . . . . . . 288
A.2.2 Funes e constantes elementares . . . . . . . . . . . . . . . 288
A.2.3 Operadores lgicos . . . . . . . . . . . . . . . . . . . . . . . 289
A.3 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
A.3.1 Obtendo dados de uma matriz . . . . . . . . . . . . . . . . . 290
A.3.2 Operaes matriciais e elemento-a-elemento . . . . . . . . . 292
A.4 Estruturas de ramificao e repetio . . . . . . . . . . . . . . . . . 293
A.4.1 A instruo de ramificao if . . . . . . . . . . . . . . . . 293
A.4.2 A instruo de repetio for . . . . . . . . . . . . . . . . . 293
A.4.3 A instruo de repetio while . . . . . . . . . . . . . . . . 294
A.5 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
A.6 Grficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Respostas dos Exerccios 297

Referncias Bibliogrficas 313

Colaboradores 314

ndice Remissivo 315

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 1

Introduo

Clculo numrico a disciplina que estuda as tcnicas para a soluo apro-


ximada de problemas matemticos. Estas tcnicas so de natureza analtica e
computacional. As principais preocupaes normalmente envolvem exatido e de-
sempenho.
Aliado ao aumento contnuo da capacidade de computao disponvel, o desen-
volvimento de mtodos numricos tornou a simulao computacional de modelos
matemticos uma prtica usual nas mais diversas reas cientficas e tecnolgicas.
As ento chamadas simulaes numricas so constitudas de um arranjo de vrios
esquemas numricos dedicados a resolver problemas especficos como, por exemplo:
resolver equaes algbricas, resolver sistemas lineares, interpolar e ajustar pontos,
calcular derivadas e integrais, resolver equaes diferenciais ordinrias etc. Neste
livro, abordamos o desenvolvimento, a implementao, a utilizao e os aspectos
tericos de mtodos numricos para a resoluo desses problemas.
Trabalharemos com problemas que abordam aspectos tericos e de utilizao
dos mtodos estudados, bem como com problemas de interesse na engenharia, na
fsica e na matemtica aplicada.
A necessidade de aplicar aproximaes numricas decorre do fato de que esses
problemas podem se mostrar intratveis se dispomos apenas de meios puramente
analticos, como aqueles estudados nos cursos de clculo e lgebra linear. Por
exemplo, o teorema de Abel-Ruffini nos garante que no existe uma frmula alg-
brica, isto , envolvendo apenas operaes aritmticas e radicais, para calcular as
razes de uma equao polinomial de qualquer grau, mas apenas casos particulares:

Simplesmente isolar a incgnita para encontrar a raiz de uma equao do


primeiro grau;

Frmula de Bhaskara para encontrar razes de uma equao do segundo grau;

Frmula de Cardano para encontrar razes de uma equao do terceiro grau;

1
2 Clculo Numrico

Existe expresso para equaes de quarto grau;

Casos simplificados de equaes de grau maior que 4 onde alguns coeficientes


so nulos tambm podem ser resolvidos.

Equaes no polinomiais podem ser ainda mais complicadas de resolver exata-


mente, por exemplo:
cos(x) = x e xex = 10
Para resolver o problema de valor inicial

y 0 + xy = x,
y(0) = 2,

podemos usar o mtodo de fator integrante e obtemos y = 1 + ex . J o clculo


2 /2

da soluo exata para o problema

y 0 + xy = ey ,
y(0) = 2,

no possvel.
Da mesma forma, resolvemos a integral
Z 2
2
xex dx
1

pelo mtodo da substituio e obtemos 21 (e1 e2 ). Porm a integral


Z 2
2
ex dx
1

no pode ser resolvida analiticamente.


A maioria dos modelos de fenmenos reais chegam em problemas matemticos
onde a soluo analtica difcil (ou impossvel) de ser encontrada, mesmo quando
provamos que ela existe. Nesse curso propomos calcular aproximaes numricas
para esses problemas, que apesar de, em geral, serem diferentes da soluo exata,
mostraremos que elas podem ser bem prximas.
Para entender a construo de aproximaes necessrio estudar um pouco
como funciona a aritmtica de computador e erros de arredondamento. Como
computadores, em geral, usam uma base binria para representar nmeros, come-
aremos falando em mudana de base.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 2

Representao de nmeros e
aritmtica de mquina

Neste captulo, discutiremos sobre formas de representao de nmeros em


computadores. Iniciamos com uma discusso sobre representao posicional e mu-
dana de base. Ento, discutimos sobre representao com nmero de dgitos
finitos e, mais especificamente, as representaes de nmeros inteiros, ponto fixo e
ponto flutuante em computadores.
A representao de nmeros e a aritmtica em computadores levam aos cha-
mados erros de arredondamento e de truncamento. Ao final deste captulo, discu-
tiremos sobre os efeitos do erro de arredondamento na computao cientfica.
Ao longo do captulo, faremos alguns comentrios usando cdigos em Python 2.7.
Nestes, estaremos assumindo que os seguintes mdulos esto carregados:
>>> from __future__ import division
>>> import numpy as np
A primeira instruo garante que divises de nmeros inteiros sejam computadas
em ponto flutuante (double) e a segunda carrega a biblioteca de computao
cientfica numpy.

2.1 Sistema de numerao e mudana de base


Usualmente, utilizamos o sistema de numerao decimal para representar n-
meros. Esse um sistema de numerao posicional onde a posio do dgito indica
a potncia de 10 que o dgito est representando.
Exemplo 2.1.1. O nmero 293 decomposto como
293 = 2 centenas + 9 dezenas + 3 unidades
= 2 102 + 9 101 + 3 100 .

3
4 Clculo Numrico

O sistema de numerao posicional tambm pode ser usado com outras bases.
Vejamos a seguinte definio.
Definio 2.1.1 (Sistema de numerao de base b). Dado um nmero natural
b > 1 e o conjunto de smbolos {,,, , 0, 1, 2, . . . , b 11}1 , a sequncia de smbolos

(dn dn1 d1 d0 ,d1 d2 )b

representa o nmero positivo

dn bn + dn1 bn1 + + d0 b0 + d1 b1 + d2 b2 +

Para representar nmeros negativos usamos o smbolo a esquerda do numeral.


Observao 2.1.1 (b 10). Para sistemas de numerao com base b 10 usual
utilizar as seguintes notaes:
No sistema de numerao decimal (b = 10), costumamos representar o n-
mero sem os parnteses e o subndice, ou seja,

dn dn1 . . . d1 d0 ,d1 d2 . . . := (dn dn1 . . . d1 d0 ,d1 d2 . . .)10

Se b > 10, usamos as letras A, B, C, para completar os smbolos: A = 10,


B = 11, C = 12, D = 13, E = 14, F = 15.
Exemplo 2.1.2 (Sistema binrio). O sistema de numerao em base dois cha-
mado de binrio e os algarismos binrios so conhecidos como bits, do ingls binary
digits. Um bit pode assumir dois valores distintos: 0 ou 1. Por exemplo:
x = (1001,101)2
= 1 23 + 0 22 + 0 21 + 1 20 + 1 21 + 0 22 + 1 23
= 8 + 0 + 0 + 1 + 0,5 + 0 + 0,125 = 9,625
Ou seja, (1001,101)2 igual a 9,625 no sistema decimal.
Exemplo 2.1.3 (Sistema quaternrio). No sistema quaternrio a base b igual a
4. Por exemplo:

(301,2)4 = 3 42 + 0 41 + 1 40 + 2 41 = 49,5

Exemplo 2.1.4 (Sistema octal). No sistema octal a base b = 8 e utilizamos os


smbolos em {0, 1, 2, 3, 4, 5, 6, 7}. Por exemplo:
(1357,24)8 = 1 83 + 3 82 + 5 81 + 7 80 + 2 81 + 4 82
= 512 + 192 + 40 + 7 + 0,25 + 0,0625 = 751,3125
1
Para b > 10, veja a observao 2.1.1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.1. SISTEMA DE NUMERAO E MUDANA DE BASE 5

Exemplo 2.1.5 (Sistema hexadecimal). O sistema de numerao cuja a base b =


16 chamado de sistema hexadecimal. O conjunto de smbolos necessrios S =
{,, , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }. Convertendo o nmero (E2AC)16
para a base 10 temos
(E2AC)16 = 14 163 + 2 162 + 10 161 + 12 160
= 57344 + 512 + 160 + 12 = 58028
Observao 2.1.2. Python tem algumas sintaxes para representar nmeros em
algumas bases. Por exemplo, temos:
>>> print(0b1001) #bin -> dec
9
>>> print(0157) #oct -> dec
111
>>> print(0xbeba) #hex -> dec
48826
A partir da definio 2.1.1, acabamos de mostrar vrios exemplos de converso
de nmeros de uma sistema de numerao de base b para o sistema decimal. Agora,
vamos estudar como fazer o processo inverso. Isto , dado um nmero decimal
(X)10 queremos escrev-lo em uma outra base b, isto , queremos obter a seguinte
representao:
(X)10 = (dn dn1 d0 ,d1 )b
= dn bn + dn1 bn1 + + d0 b0 + d1 b1 + d2 b2 +

Separando as partes inteira e fracionria de X, isto , X = X i + X f , temos:

X i = dn bn + + dn1 bn1 + d1 b1 + d0 b0
e
d1 d2
Xf =
+ 2 +
b1 b
Nosso objetivo determinar os algarismos {dn , dn1 , ...}.
Primeiramente, vejamos como tratar a parte inteira X i . Calculando sua diviso
por b, temos:
Xi d0
= + d1 + d2 b1 + dn1 bn2 + dn bn1 .
b b
Observe que d0 o resto da diviso de X i por b, pois d1 + d2 b1 + dn1 bn2 +
dn bn1 inteiro e db0 uma frao (lembramos que d0 < b). Da mesma forma, o
resto da diviso de d1 + d2 b1 + dn1 bn2 + dn bn1 por b d1 . Repetimos o
processo at encontrar os smbolos d0 , d1 , d2 , . . ..

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6 Clculo Numrico

Exemplo 2.1.6 (Converso da parte inteira). Vamos escrever o nmero 125 na


base 6. Para tanto, fazemos sucessivas divises por 6 como segue:
125 = 20 6 + 5 (125 dividido por 6 igual a 20 e resta 5)
= (3 6 + 2) 6 + 5 = 3 62 + 2 6 + 5,
logo 125 = (325)6 .
Estes clculos podem ser feitos em Python com o auxlio do comando % e da
funo int. Com o primeiro calculamos o resto da diviso entre dois nmeros,
enquanto que a segunda retorna a parte inteira de um nmero dado. No nosso
exemplo, temos:
>>> q = 125; d0 = (q % 6); print(q,d0)
>>> q = int(q/6); d1 = (q % 6); print(q,d1)
>>> q = int(q/6); d2 = (q % 6); print(q,d2)
Verifique!
Observao 2.1.3. Python oferece algumas funes para a converso de nmeros
inteiros em base decimal para uma base dada. Por exemplo, temos:
>>> print(bin(9))
0b1001
>>> print(oct(111))
0157
>>> print(hex(48826))
0xbeba
Vamos converter a parte fracionria de um nmero decimal em uma dada base
b. Usando a notao X = X i + X f para as partes inteira e fracionria, respectiva-
mente, temos:
d2 d3
bX f = d1 + + 2 +
b b
Observe que a parte inteira desse produto d1 e d2
b
+ db3
2 + a parte fracio-

nria. Quando multiplicamos b + b2 + por b novamente, encontramos d2 .


d2 d3

Repetimos o processo at encontrar todos os smbolos.


Exemplo 2.1.7 (Converso da parte fracionria). Escrever o nmero 125,583 na
base 6. Do exemplo anterior temos que 125 = (325)6 . Assim, nos resta converter a
parte fracionria. Para tanto, fazemos sucessivas multiplicaes por 6 como segue:
0,583 = 3,5 61 (0,583 multiplicado por 6 igual a 3,5)
= 3 61 + 0,5 61
= 3 61 + (3 61 ) 61
= 3 61 + 3 62 ,

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.1. SISTEMA DE NUMERAO E MUDANA DE BASE 7

logo 0,583 = (0,33)6 . As contas feitas aqui, tambm podem ser computadas em
Python. Voc sabe como?
Uma maneira de converter um nmero dado em uma base b1 para uma base b2
fazer em duas partes: primeiro converter o nmero dado na base b2 para base
decimal e depois converter para a base b1 .

Exerccios

E 2.1.1. Converta para base decimal cada um dos seguintes nmeros:

a) (100)2 c) (100)b e) (AA)16 g) (3,12)5


b) (100)3 d) (12)5 f) (7,1)8

E 2.1.2. Escreva os nmeros abaixo na base decimal.


a) (25,13)8

b) (101,1)2

c) (12F,4)16

d) (11,2)3

E 2.1.3. Escreva cada nmero decimal na base b.


a) 7,6 na base b = 5

b) 29,16 na base b = 6

E 2.1.4. Escreva cada nmero dado para a base b.


a) (45,1)8 para a base b = 2

b) (21,2)8 para a base b = 16

c) (1001,101)2 para a base b = 8

d) (1001,101)2 para a base b = 16

E 2.1.5. Escreva o nmero x = 5,5 em base binria.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8 Clculo Numrico

E 2.1.6. Escreva o nmero x = 17,109375 em base hexadecimal (16).

E 2.1.7. Quantos algarismos so necessrios para representar o nmero 937163832173947


em base binria? E em base 7? Dica: Qual o menor e o maior inteiro que pode
ser escrito em dada base com N algarismos?

E 2.1.8. Escreva x = (12.4)8 em base decimal e binria.

2.2 Notao cientfica e notao normalizada


Como vimos, no sistema posicional usual um nmero x na base b representado
por
x = (dn dn1 d0 ,d1 d2 d3 )b ,
onde dn 6= 0 e di {0, 1, . . . , b 1} o dgito da i-sima posio. Alternativa-
mente, costumeiro usarmos a chamada notao cientfica. Nesta, o nmero x
representado como
x = (M )b be ,
onde (M )b = (dm dm1 d0 ,d1 d2 d3 )b chamada de mantissa e e Z
chamado de expoente de x.

Exemplo 2.2.1. a) O nmero 602,2141 em notao cientfica pode ser escrito


como
602,2141 100 = 60,22141 101 = 0,6022141 103 .

b) O nmero (1010,10)2 pode ser escrito em notao cientfica como (10,1010)2


22 .

Observamos que um nmero pode ser representado de vrias formas equivalen-


tes em notao cientfica. Para termos uma representao nica introduzimos o
conceito de notao normalizada.

Definio 2.2.1. Um nmero x na base b dito estar representado em notao


(cientfica) normalizada quando est escrito na forma

x = (1)s (M )b bE ,

onde (M )b = (d1 ,d1 d2 d3 )b , com d1 6= 023 , s 0 para positivo e 1 para


negativo, E o expoente.
2
Em algumas referncias usado Mb = (0,d1 d2 d3 )b .
3
No caso de x = 0, Mb = (0,00 )b .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.3. REPRESENTAO DECIMAL FINITA 9

Exemplo 2.2.2. Vejamos os seguintes casos:


a) O nmero 602,2141 em notao (cientfica) normalizada representado por
6,022141 102 .
b) O nmero (1010,10)2 escrito em notao normalizada (1,01010)2 23 .
Observao 2.2.1. Em Python, podemos controlar a impresso de nmeros usando
o comando print. Por exemplo:
>>> print("%1.5f" % -np.pi)
-3.14159
>>> print("%1.5e" % -np.pi)
-3.14159e+00
No primeiro caso, obtemos a representao em ponto flutuante decimal com 6
dgitos do nmero . No segundo caso, obtemos a representao em notao
cientfica normalizada com 6 dgitos.

2.2.1 Exerccios

E 2.2.1. Represente os seguintes nmeros em notao cientfica normalizada:

a) 299792,458 b) 66,2607 1035


c) 0,6674 107 d) 9806,65 101

E 2.2.2. Use o computador para verificar as respostas do Exerccio 2.2.1.

2.3 Representao decimal finita


Em computadores, usual representarmos nmeros usando uma quantidade
de dgitos finita. A quantidade a ser usada normalmente depende da preciso
com que as computaes esto sendo feitas. Ocorre, que quando restringimos
a representao a um nmero finito de dgitos, muitos nmeros no podem ser
representado de forma exata. Por exemplo, dzimas infinitas e nmeros irracionais
no so usualmente representados de forma exata em computadores. Esta questo
nos leva aos conceitos de nmero de dgitos significativos e arredondamento.
Definio 2.3.1 (Nmero de dgitos significativos). Um nmero decimal x =
d1 ,d1 di di1 din din1 10E dito ter n dgitos significativos quando
dj = 0 para j i e j i n 1.
Exemplo 2.3.1. O nmero 0,0602100 103 tem 4 dgitos significativos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10 Clculo Numrico

2.3.1 Arredondamento de nmeros


Quando representamos um nmero x com uma quantidade de dgitos menor
que a de dgitos significativos acabamos com uma aproximao deste. Este pro-
cedimento chamado arredondamento de um nmero. Mais precisamente, seja
dado
x = d0 ,d1 d2 . . . dk1 dk dk+1 . . . dn 10e
em notao normalizada, i.e. d0 6= 0. Podemos representar x com k dgitos
fazendo:
1. Arredondamento por truncamento (ou corte): aproximamos x por

x = d0 ,d1 d2 . . . dk 10e

simplesmente descartando os dgitos dj com j > k.

2. Arredondamento por proximidade: se dk+1 < 5 aproximamos x por

x = d0 ,d1 d2 . . . dk 10e

seno aproximamos x por4

x = (d0 ,d1 d2 . . . dk + 10k ) 10e

Exemplo 2.3.2. Represente os nmeros x1 = 0,567, x2 = 0,233, x3 = 0,675


e x4 = 0,314159265 . . . 101 com dois dgitos significativos por truncamento e
arredondamento.
Soluo. Vejamos cada caso:
Por truncamento:

x1 = 0,56, x2 = 0,23, x3 = 0,67 e x4 = 3,1.

Em Python, podemos obter a representao de x3 = 0,675 fazendo:

>>> int(-0.675*1e2)/1e2

e, em notao normalizada, temos:


4
Note que essas duas opes so equivalentes a somar 5 no dgito a direita do corte e depois
arredondar por corte, ou seja, arredondar por corte

(d0 ,d1 d2 . . . dk dk+1 + 5 10(k+1) ) 10e

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.4. REPRESENTAO DE NMEROS EM MQUINA 11

>>> print("%1.1e" % (int(-0.675*1e2)/1e2))


-6.7e-01

Por arredondamento:

x1 = 0,57; x2 = 0,23; x3 = 0,68 e x4 = 3,1.

Em Python, a representao de nmeros por arredondamento o padro.


Assim, para obtermos a representao desejada de x3 = 0,675 fazemos:

>>> print("%1.2f" % (-0.675))


-0.68

e, em notao normalizada:

>>> print("%1.1e" % (-0.675))


-6.8e-01

Observao 2.3.1. Observe que o arredondamento pode mudar todos os dgitos e


o expoente da representao em ponto flutuante de um nmero dado. Por exemplo,
o arredondamento de 0,9999 101 com 3 dgitos significativos 0,1 100 .

2.4 Representao de nmeros em mquina


Os computadores, em geral, usam a base binria para representar os nmeros,
onde as posies, chamadas de bits, assume as condies verdadeiro ou falso,
ou seja, 0 ou 1. Os computadores representam os nmeros com uma quantidade
fixa de bits, o que se traduz em um conjunto finito de nmeros representveis.
Os demais nmeros so tomados por proximidade queles conhecidos, gerando
erros de arredondamento. Por exemplo, em aritmtica de computador, o nmero
2tem representao exata, logo 22 = 4, mas 3 no tem representao finita, logo
( 3)2 6= 3.
Veja isso em Python:

>>> 2**2 == 4
True
>>> np.sqrt(3)**2 == 3
False

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


12 Clculo Numrico

2.4.1 Nmeros inteiros

Tipicamente, um nmero inteiro armazenado em um computador como uma


sequncia de dgitos binrios de comprimento fixo denominado registro.

Representao sem sinal

Um registro com n bits da forma

dn1 dn2 d1 d0

representa o nmero (dn1 dn2 ...d1 d0 )2 .


Assim, possvel representar nmeros inteiros entre 2n 1 e 0, sendo

(111 . . . 111)2 = 2n1 + 2n2 + + 21 + 20 = 2n 1,


..
.
(000 . . . 011)2 = 3,
(000 . . . 010)2 = 2,
(000 . . . 001)2 = 1,
(000 . . . 000)2 = 0.

Representao com bit de sinal

O bit mais significativo (o primeiro esquerda) representa o sinal: por conven-


o, 0 significa positivo e 1 significa negativo. Um registro com n bits da forma

s dn2 d1 d0

representa o nmero (1)s (dn2 . . . d1 d0 )2 . Assim, possvel representar nmeros


inteiros entre 2n1 e 2n1 , com duas representaes para o zero: (1000 . . . 000)2
e (00000 . . . 000)2 .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.4. REPRESENTAO DE NMEROS EM MQUINA 13

Exemplo 2.4.1. Em um registro com 8 bits, teremos os nmeros

(11111111)2 = (26 + + 2 + 1) = 127,


..
.
(10000001)2 = 1,
(10000000)2 = 0,
(01111111)2 = 26 + + 2 + 1 = 127,
..
.
(00000010)2 = 2,
(00000001)2 = 1,
(00000000)2 = 0.

Representao complemento de dois

O bit mais significativo (o primeiro esquerda) representa o coeficiente de


2 . Um registro com n bits da forma:
n1

dn1 dn2 d1 d0

representa o nmero dn1 2n1 + (dn2 . . . d1 d0 )2 .


Note que todo registro comeando com 1 ser um nmero negativo.

Exemplo 2.4.2. O registro com 8 bits [01000011] representa o nmero:

0(27 ) + (1000011)2 = 64 + 2 + 1 = 67.

O registro com 8 bits [10111101] representa o nmero:

1(27 ) + (0111101)2 = 128 + 32 + 16 + 8 + 4 + 1 = 67.

Note que podemos obter a representao de 67 invertendo os dgitos de 67


em binrio e somando 1.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


14 Clculo Numrico

Exemplo 2.4.3. Em um registro com 8 bits, teremos os nmeros

(11111111)2 = 27 + 26 + + 2 + 1 = 1
..
.
(10000001)2 = 27 + 1 = 127
(10000000)2 = 27 = 128
(01111111)2 = 26 + + 2 + 1 = 127
..
.
(00000010)2 = 2
(00000001)2 = 1
(00000000)2 = 0

2.4.2 Sistema de ponto fixo


O sistema de ponto fixo representa as partes inteira e fracionria do nmero
com uma quantidade fixas de dgitos.

Exemplo 2.4.4. Em um computador de 32 bits que usa o sistema de ponto fixo,


o registro

d31 d30 d29 d1 d0

pode representar o nmero

(1)d31 (d30 d29 d17 d16 , d15 d14 d1 d0 )2 se o sinal for representado por um
dgito. Observe que nesse caso o zero possui duas representaes possveis:

10000000000000000000000000000000

e
00000000000000000000000000000000

(d30 d29 d17 d16 )2 d31 (215 216 ) + (0,d15 d14 d1 d0 )2 se o sinal do n-
mero estiver representado por uma implementao em complemento de um.
Observe que o zero tambm possui duas representaes possveis:

11111111111111111111111111111111

e
00000000000000000000000000000000

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.4. REPRESENTAO DE NMEROS EM MQUINA 15

(d30 d29 d17 d16 )2 d31 215 + (0,d15 d14 d1 d0 )2 se o sinal do nmero estiver
representado por uma implementao em complemento de dois. Nesse caso
o zero unicamente representado por

00000000000000000000000000000000

Observe que 16 dgitos so usados para representar a parte fracionria, 15 so para


representar a parte inteira e um dgito, o d31 , est relacionado ao sinal do nmero.

2.4.3 Sistema de ponto flutuante


O sistema de ponto flutuante no possui quantidade fixa de dgitos para as
partes inteira e fracionria do nmero.
Podemos definir uma mquina F em ponto flutuante de dois modos:

F (,|M |,|E|,BIAS) ou F (,|M |,EM IN ,EM AX )

onde

a base (em geral 2 ou 10),

|M | o nmero de dgitos da mantissa,

|E| o nmero de dgitos do expoente,

BIAS um valor de deslocamento do expoente (veja a seguir),

EM IN o menor expoente,

EM AX o maior expoente.

Considere uma mquina com um registro de 64 bits e base = 2. Pelo padro


IEEE754, 1 bit usado para o sinal, 11 bits para o expoente e 52 bits so usados
para o significando tal que

s c10 c9 c0 m1 m2 m51 m52

represente o nmero (o BIAS = 1023 por definio)

x = (1)s M 2cBIAS ,

onde a caracterstica representada por

c = (c10 c9 c1 c0 )2 = c10 210 + + c1 21 + c0 20

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


16 Clculo Numrico

e o significando por
M = (1.m1 m2 m51 m52 )2 .
Em base 2 no necessrio armazenar o primeiro dgito (por qu?).
Por exemplo, o registro
[0|100 0000 0000|1010 0000 0000 . . . 0000 0000]
representa o nmero
(1)0 (1 + 21 + 23 ) 210241023 = (1 + 0.5 + 0.125)2 = 3.25.

O expoente deslocado
Uma maneira de representar os expoentes inteiros deslocar todos eles uma
mesma quantidade. Desta forma permitimos a representao de nmeros negativos
e a ordem deles continua crescente. O expoente representado por um inteiro sem
sinal do qual deslocado o BIAS.
Tendo |E| dgitos para representar o expoente, geralmente o BIAS predefi-
nido de tal forma a dividir a tabela ao meio de tal forma que o expoente um seja
representado pelo sequncia [100 . . . 000].
Exemplo 2.4.5. Com 64 bits, pelo padro IEEE754, temos que |E| := 11. As-
sim, (100 0000 0000)2 = 210 = 1024. Como queremos que esta sequncia represente
o 1, definimos BIAS := 1023, pois
1024 BIAS = 1.
Com 32 bits, temos |E| := 8 e BIAS := 127. E com 128 bits, temos |E| := 15
e BIAS := 16383.
Com 11 bits temos
[111 1111 1111] = reservado
[111 1111 1110] = 2046 BIAS = 102310 = EM AX
..
.=
[100 0000 0001] = 210 + 1 BIAS = 210
[100 0000 0000] = 210 BIAS = 110
[011 1111 1111] = 1023 BIAS = 010
[011 1111 1110] = 1022 BIAS = 110
..
.=
[000 0000 0001] = 1 BIAS = 1022 = EM IN
[000 0000 0000] = reservado

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.4. REPRESENTAO DE NMEROS EM MQUINA 17

O maior expoente dado por EM AX = 1023 e o menor expoente dado por


EM IN = 1022.
O menor nmero representvel positivo dado pelo registro

[0|000 0000 0001|0000 0000 0000 . . . 0000 0000]

quando s = 0, c = 1 e M = (1.000...000)2 , ou seja,

M IN R = (1 + 0)2 211023 0.2225 10307 .

O maior nmero representvel dado por

[0|111 1111 1110|1111 1111 1111 1111]

quando s = 0, c = 2046 e M = (1.1111 1111 1111)2 = 2 252 , ou seja,

M AXR = (2 252 ) 220461023 21024 0.17977 10309 .

Casos especiais

O zero um caso especial representado pelo registro

[0|000 0000 0000|0000 0000 0000...0000 0000]

Os expoentes reservados so usados para casos especiais:

c = [0000...0000] usado para representar o zero (se m = 0) e os nmeros


subnormais (se m 6= 0).

c = [1111...1111] usado para representar o infinito (se m = 0) e NaN (se


m 6= 0).

Os nmeros subnormais5 tem a forma

x = (1)s (0.m1 m2 m51 m52 )2 21BIAS .

Para mais informaes sobre aritmtica de ponto flutuante em Python, veja a


documentao.
5
Note que poderamos definir nmeros um pouco menores que o M IN R.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


18 Clculo Numrico

2.4.4 Preciso e psilon de mquina


A preciso p de uma mquina o nmero de dgitos significativos usado para
representar um nmero. Note que p = |M | + 1 em binrio e p = |M | para outras
bases.
O psilon de mquina, mach = , definido de forma que 1 +  seja o menor
nmero representvel maior que 1, isto , 1 +  representvel, mas no existem
nmeros representveis em (1, 1 + ).
Exemplo 2.4.6. Com 64 bits, temos que o epsilon ser dado por
1 (1.0000 0000....0000)2 20
 +(0.0000 0000....0001)2 20 = 252
(1.0000 0000....0001)2 20 6= 1

Assim,  = 252 .

2.4.5 Distribuio dos nmeros


Utilizando uma mquina em ponto flutuante, temos um nmero finito de n-
meros que podemos representar.
Um nmero muito pequeno geralmente aproximado por zero (underflow) e
um nmero muito grande (overflow) geralmente faz o clculo parar. Alm disso, os
nmeros no esto uniformemente espaados no eixo real. Nmeros pequenos esto
bem prximos enquanto que nmeros com expoentes grandes esto bem distantes.
Se tentarmos armazenar um nmero que no representvel, devemos utilizar
o nmero mais prximo, gerando os erros de arredondamento.
Por simplicidade, a partir daqui, ns adotaremos b = 10.

Exerccios

E 2.4.1. Explique a diferena entre o sistema de ponto fixo e ponto flutuante.

2.5 Tipos de Erros


Em geral, os nmeros no so representados de forma exata nos computadores.
Isto nos leva ao chamado erro de arredondamento. Quando resolvemos problemas
com tcnicas numricas estamos sujeitos a este e outros tipos de erros. Nesta
seo, veremos quais so estes erros e como control-los, quando possvel.
Quando fazemos aproximaes numricas, os erros so gerados de vrias formas,
sendo as principais delas as seguintes:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.5. TIPOS DE ERROS 19

1. Incerteza dos dados: equipamentos de medio possuem preciso finita,


acarretando erros nas medidas fsicas.

2. Erros de Arredondamento: so aqueles relacionados com as limitaes


que existem na forma representar nmeros de mquina.

3. Erros de Truncamento: surgem quando aproximamos um procedimento


formado por uma sequncia infinita de passos atravs de um procedimento
finito. Por exemplo, a definio de integral dada por uma soma infinita e a
aproximamos por um soma finita. O erro de truncamento deve ser analisado
para cada mtodo empregado.

Uma questo fundamental a quantificao dos erros que estamos sujeitos ao


computar a soluo de um dado problema. Para tanto, precisamos definir medidas
de erros (ou de exatido). As medidas de erro mais utilizadas so o erro absoluto
e o erro relativo.

Definio 2.5.1 (Erro absoluto e relativo). Seja x um nmero real e x sua apro-
ximao. O erro absoluto da aproximao x definido como

|x x|.

O erro relativo da aproximao x definido como

|x x|
, x 6= 0.
|x|

Observao 2.5.1. Observe que o erro relativo adimensional e, muitas vezes,


dado em porcentagem. Mais precisamente, o erro relativo em porcentagem da
aproximao x dado por
|x x|
100%.
|x|
Exemplo 2.5.1. Sejam x = 123456,789 e sua aproximao x = 123000. O erro
absoluto
|x x| = |123456,789 123000| = 456,789
e o erro relativo
|x x| 456,789
= 0,00369999 ou 0,36%
|x| 123456,789

Exemplo 2.5.2. Sejam y = 1,23456789 e y = 1,13. O erro absoluto

|y y| = |1,23456789 1,13| = 0,10456789

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


20 Clculo Numrico

que parece pequeno se compararmos com o exemplo anterior. Entretanto o erro


relativo
|y y| 0,10456789
= 0,08469999 ou 8,4%
|y| 1,23456789
Note que o erro relativo leva em considerao a escala do problema.
Exemplo 2.5.3. Observe os erros absolutos e relativos em cada caso

x x Erro absoluto Erro relativo


0,3 102 0,3 102 0,3 103 10%
0,3 0,3 0,3 102 10%
0,3 102 0,3 102 0,3 101 10%

Outra forma de medir a exatido de uma aproximao numrica contar o


nmero de dgitos significativos corretos em relao ao valor exato.
Definio 2.5.2 (Nmero de dgitos significativos corretos). A aproximao x de
um nmero x tem s dgitos significativos corretos quando6
|x x|
< 5 10s .
|x|
Exemplo 2.5.4. Vejamos os seguintes casos:
a) A aproximao de x = 0,333333 por x = 0,333 tem 3 dgitos significativos
corretos, pois
|x x| 0,000333
= 0,000999 5 1033 .
|x| 0,333333

b) Considere as aproximaes x1 = 0,666 e x2 = 0,667 de x = 0,666888. Os


erros relativos so
|x x1 | |0,666888 0,666|
= 0,00133... < 5 103 .
|x| 0,666888
6
Esta definio apresentada em [3]. No existe uma definio nica na literatura para o
conceito de dgitos significativos corretos, embora no precisamente equivalentes, elas transmitem
o mesmo conceito. Uma maneira de interpretar essa regra : calcula-se o erro relativo na forma
normalizada e a partir da ordem do expoente temos o nmero de dgitos significativos corretos.
Como queremos o expoente, podemos estimar s por

|x x|
DIGSE(x, x) = s int log10
.
|x|

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.5. TIPOS DE ERROS 21

|x x2 | |0,666888 0,667|
= 0,000167... < 5 104 .
|x| 0,666888
Note que x1 possui 3 dgitos significativos corretos e x2 possui 4 dgitos
significativos (o quarto dgito o dgito 0 que no aparece a direita, i.e,
x2 = 0.6670. Isto tambm leva a concluso que x2 aproxima melhor o valor
de x do que x1 pois est mais prximo de x.

c) x = 9,999 aproxima x = 10 com 4 dgitos significativos corretos, pois

|x x| |10 9,999|
= 0,0000999... < 5 104 .
|x| 10

d) Considere as aproximaes x1 = 1,49 e x2 = 1,5 de x = 1. Da definio,


temos que 1,49 aproxima 1 com um dgito significativo correto (verifique),
enquanto 1,5 tem zero dgito significativo correto, pois:
|1 1,5|
= 5 101 < 5 100 .
|1|

Exerccios

E 2.5.1. Calcule os erros absoluto e relativo das aproximaes x para x.


a) x = = 3,14159265358979 . . . e x = 3,141

b) x = 1,00001 e x = 1

c) x = 100001 e x = 100000

E 2.5.2. Arredonde os seguintes nmeros para cinco algarismos significativos


corretos:

a) 1,7888544 c) 0,0017888544 e) 2,1754999 1010

b) 1788,8544 d) 0,004596632 f) 2,1754999 1010

E 2.5.3. Verifique quantos so os dgitos significativos corretos em cada apro-


ximao x para x.
a) x = 2,5834 e x = 2,6

b) x = 100 e x = 99

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


22 Clculo Numrico

E 2.5.4. Represente os nmeros 3276; 42,55 e 0,00003331 com trs dgitos


significativos por truncamento e arredondamento.

E 2.5.5. Resolva a equao 0,1x 0,01 = 12 usando arredondamento com


trs dgitos significativos em cada passo e compare com o resultado analtico

E 2.5.6. Calcule o erro relativo e absoluto envolvido nas seguintes aproxima-


es e expresse as respostas com trs algarismos significativos corretos.

a) x = 3,1415926535898 e x = 3,141593

b) x = 1
7
e x = 1,43 101

2.6 Erros nas operaes elementares


O erro relativo presente nas operaes elementares de adio, subtrao, mul-
tiplicao e diviso da ordem do epsilon de mquina. Se estivermos usando uma
mquina com 64 bits, temos que  = 252 2,22E16.
Este erro bem pequeno! Assumindo que x e y so representados com todos
dgitos corretos, temos aproximadamente 15 dgitos significativos corretos quando
fazemos uma das operaes x + y, x y, x y ou x/y.
Mesmo que fizssemos, por exemplo, 1000 operaes elementares em ponto
flutuante sucessivas, teramos, no pior dos casos, acumulado todos esses erros e
perdido 3 casas decimais (1000 1015 1012 ).
Entretanto, quando subtramos nmeros muito prximos, os problemas aumen-
tam.

2.7 Cancelamento catastrfico


Quando fazemos subtraes com nmeros muito prximos entre si ocorre o
cancelamento catastrfico, onde podemos perder vrios dgitos de preciso em uma
nica subtrao.

Exemplo 2.7.1. Efetue a operao

0,987624687925 0,987624 = 0,687925 106

usando arredondamento com seis dgitos significativos e observe a diferena se


comparado com resultado sem arredondamento.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.7. CANCELAMENTO CATASTRFICO 23

Soluo. Os nmeros arredondados com seis dgitos para a mantissa resultam na


seguinte diferena

0,987625 0,987624 = 0,100000 105

Observe que os erros relativos entre os nmeros exatos e aproximados no lado


esquerdo so bem pequenos,
|0,987624687925 0,987625|
= 0,00003159
|0,987624687925|
e
|0,987624 0,987624|
= 0%,
|0,987624|
enquanto no lado direito o erro relativo enorme:
|0,100000 105 0,687925 106 |
= 45,36%.
0,687925 106

Exemplo 2.7.2. Considere o problema de encontrar as razes da equao de se-
gundo grau
x2 + 300x 0,014 = 0,
usando seis dgitos significativos.
Aplicando a frmula de Bhaskara com a = 0,100000 101 , b = 0,300000 103
e c = 0,140000 101 , temos o discriminante:

= b2 4 a c
= 0,300000 103 0,300000 103
+ 0,400000 101 0,100000 101 0,140000 101
= 0,900000 105 + 0,560000 101
= 0,900001 105

e as razes:

0,300000 103
x1 ,x2 =
0,200000 101

0,300000 103 0,900001 105
=
0,200000 101
0,300000 103 0,300000 103
=
0,200000 101

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


24 Clculo Numrico

Ento, as duas razes obtidas com erros de arredondamento, so:

0,300000 103 0,300000 103


x1 =
0,200000 101
0,600000 103
= = 0,300000 103
0,200000 101

e
0,300000 103 + 0,300000 103
x2 = = 0,000000 100
0,200000 101
No entanto, os valores das razes com seis dgitos significativos livres de erros de
arredondamento, so:

x1 = 0,300000 103 e x2 = 0,466667 104 .

Observe que a primeira raiz apresenta seis dgitos significativos corretos, mas a
segunda no possui nenhum dgito significativo correto.
Observe que isto acontece porque b muito maior que 4ac, ou seja, b
2

b2 4ac, logo a diferena



b + b2 4ac

estar prxima de zero. Uma maneira de evitar o cancelamento catastrfico


aplicar procedimentos analticos na expresso para eliminar essa diferena. Um
tcnica padro consiste usar uma expanso em srie de Taylor em torno da origem,
tal como:
1
1 x = 1 x + O(x2 ).
2
Substituindo esta aproximao na frmula de Bhaskara, temos:

b b2 4ac
x =
2a
q
b b 1 4ac
b2
=
2a
 
b b 1 4ac
2b2

2a

Observe que 4ac


b2
um nmero pequeno e por isso a expanso faz sentido. Voltamos

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.8. CONDICIONAMENTO DE UM PROBLEMA 25

no exemplo anterior e calculamos as duas razes com o nova expresso

b b + 4ac b c
x1 = 2b
= +
2a a b
0,300000 103 0,140000 101
=
0,100000 101 0,300000 103
= 0,300000 10 0,466667 104
3

= 0,300000 103

b + b 4ac
x2 = 2b
2a
4ac
=
4ab
c 0,140000 101
= = = 0,466667 104
b 0,300000 103

Observe que o efeito catastrfico foi eliminado.


Observao 2.7.1. O cancelamento catastrfico tambm poderia ter sido evitado
atravs do seguinte truque analtico:

b + b2 4ac b + b2 4ac b b2 4ac
x2 = =
2a 2a b b2 4ac
b2 (b2 4ac) 4ac
=   =  
2a b b2 4ac 2a b b2 4ac
2c
=  
b + b2 4ac

2.8 Condicionamento de um problema


Nesta seo, utilizaremos a seguinte descrio abstrata para o conceito de re-
solver um problema: dado um conjunto de dados de entrada, encontrar os dados
de sada. Se denotamos pela varivel x os dados de entrada e pela varivel y os
dados de sada, resolver o problema significa encontrar y dado x. Em termos ma-
temticos, a resoluo de um problema realizada pelo mapeamento f : x y,
ou simplesmente y = f (x).
certo que, na maioria das aplicaes, os dados de entrada do problema
isto , x no so conhecidos com total exatido, devido a diversas fontes de
erros, como incertezas na coleta dos dados e erros de arredondamento. O conceito

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


26 Clculo Numrico

de condicionamento est relacionado forma como os erros nos dados de entrada


influenciam os dados de sada.
Para fins de anlise, denotaremos por x, os dados de entrada com preciso
absoluta e por x , os dados com erro. Definiremos tambm a soluo y , do
problema com dados de entrada x , ou seja, y = f (x ).
Estamos interessados em saber se os erros cometidos na entrada x = x x
influenciaram na sada do problema y = y y . No caso mais simples, temos
que x R e y R. Assumindo que f seja diferencivel, a partir da srie de Taylor

f (x + x) f (x) + f 0 (x)x

obtemos (subtraindo f (x) dos dois lados)

y = f (x + x) f (x) f 0 (x)x

Para relacionarmos os erros relativos, dividimos o lado esquerdo por y, o lado


direito por f (x) = y e obtemos
y f 0 (x) xx

y f (x) x
sugerindo a definio de nmero de condicionamento de um problema.
Definio 2.8.1. Seja f uma funo diferencivel. O nmero de condiciona-
mento de um problema definido como
xf 0 (x)

f (x) :=

f (x)


e fornece uma estimativa de quanto os erros relativos na entrada x sero am-

x
plificados na sada y .

y

De modo geral, quando f depende de vrias variveis, podemos obter


n

f

f = |f (x1 ,x2 ,...,xn ) f (
x1 , x2 ,...,
xn )| (x1 , x2 ,...,xn ) xi
X

xi
i=1

Uma matriz de nmeros de condicionamento tambm poderia ser obtida como


em [5].

Exemplo 2.8.1. Considere o problema de calcular x em x = 2. Se usarmos
x = 1,999, quanto ser o erro relativo na sada? O erro relativo na entrada
x 2 1,999

= = 0,0005

2

x

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.8. CONDICIONAMENTO DE UM PROBLEMA 27

O nmero de condicionamento do problema calcular a raiz



xf 0 (x) 1
1
x
2 x
f (x) :=
= =
f (x) 2

x

Ou seja,
os erros na entradasero diminudos pela metade. De fato, usando
y = 2 = 1,4142136... e y = 1,999 = 1,41386..., obtemos

y 2 1,999
= 0,000250031...
y 2
Exemplo 2.8.2. Considere a funo f (x) = 10
1x2
e x = 0,9995 com um erro
absoluto na entrada de 0,0001.
Calculando y = f (x ) temos
10
y = 10002,500625157739705173
1 (0,9995)2
Mas qual a estimativa de erro nessa resposta? Quantos dgitos significativos
temos nessa resposta?
Sabendo que f 0 (x) = 10/(1 x2 )2 , o nmero de condicionamento
xf 0 (x) 2x2

f (x) :=
=
f (x) 1 x2

o que nos fornece para x = 0,9995,


f (0,9995) 1998,5
Como o erro relativo na entrada
x 0,0001

= 0,00010005...

0,9995

x

temos que o erro na sada ser aproximadamente


y x

f (x) 1998,5 0,00010005... 0,1999


y x
ou seja um erro relativo de aproximadamente 19,99%.
Note que se usarmos x1 = 0,9994 e x2 = 0,9996 (ambos no intervalo do erro
absoluto da entrada) encontramos
y1 8335,83
y2 12520,50
confirmando a estimativa de 19,99%.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


28 Clculo Numrico

Exemplo 2.8.3. Seja f (x) = x exp(x). Calcule o erro absoluto ao calcular f (x)
sabendo que x = 2 0,05.

Soluo. Temos que x 2 com erro absoluto de x = 0,05. Neste caso, calculamos
f , isto , o erro absoluto ao calcular f (x), por:

f = |f 0 (x)|x .

Como f 0 (x) = (1 + x)ex , temos:

f = |(1 + x)ex | x
= |3e2 | 0,05 = 1,1084.

Portanto, o erro absoluto ao calcular f (x) quando x = 2 0,05 de 1,084.


2
Exemplo 2.8.4. Calcule o erro relativo ao medir f (x,y) = x x+1
2 e
2y
sabendo que
x 3 conhecido com 10% de erro e y 2 conhecido com 3% de erro.

Soluo. Calculamos as derivadas parciais de f :

f 2x3 (2x3 + 2x) 2y 2e2y


= e = 3
x x4 x
e
f x2 + 1 2y
=2 e
y x2
Calculamos o erro absoluto em termos do erro relativo:
x
= 0,1 x = 3 0,1 = 0,3
|x|

y
= 0,03 y = 2 0,03 = 0,06
|y|
Aplicando a expresso para estimar o erro em f temos

f = f + y y

x x
f

2e4
= 27
0,3 + 2 9+1
9
e4 0,06 = 8,493045557

Portanto, o erro relativo ao calcular f estimado por


f 8,493045557
= 9+1 4 = 14%
|f | 9
e

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.8. CONDICIONAMENTO DE UM PROBLEMA 29

Exemplo 2.8.5. No exemplo anterior, reduza o erro relativo em x pela metade e


calcule o erro relativo em f . Depois, repita o processo reduzindo o erro relativo
em y pela metade.

Soluo. Na primeira situao temos x = 3 com erro relativo de 5% e x =


0,05 3 = 0,15. Calculamos f = 7,886399450 e o erro relativo em f de 13%.
Na segunda situao, temos y = 2 com erro de 1,5% e y = 2 0,015 = 0,03.
Calculamos f = 4,853168892 e o erro relativo em f de 8%. Observe que mesma
o erro relativo em x sendo maior, o erro em y mais significante na funo.

Exemplo 2.8.6. Considere um tringulo retngulo onde a hipotenusa e um dos


catetos so conhecidos a menos de um erro: hipotenusa a = 30,01 metros e cateto
b = 2 0,01 metros. Calcule o erro absoluto ao calcular a rea dessa tringulo.

Soluo. Primeiro vamos encontrar a expresso para a rea em funo da hipo-


tenusa a e um cateto b. A tamanho de segundo cateto c dado pelo teorema de
Pitgoras, a2 = b2 + c2 , ou seja, c = a2 b2 . Portanto a rea

bc b a2 b 2
A= = .
2 2
Agora calculamos as derivadas

A ab
= 2 ,
a 2 a b2

A a2 b 2 b2
= 2 ,
b 2 2 a b2
e substituindo na estimativa para o erro A em termos de a = 0,01 e b = 0,01:

A A
A +

a a b b


3 5 5
0,01 + 0,01 = 0,01565247584
5 10

Em termos do erro relativo temos erro na hipotenusa de 0,01


3
0,333%, erro no
cateto de 0,01
2
= 0,5% e erro na rea de

0,01565247584

2 32 22
= 0,7%
2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


30 Clculo Numrico

Exerccios

E 2.8.1. Considere que a varivel x 2 conhecida com um erro relativo


de 1% e a varivel y 10 com um erro relativo de 10%. Calcule o erro relativo
associado a z quando:
y4 x
z= e .
1 + y4
Suponha que voc precise conhecer o valor de z com um erro de 0,5%. Voc prope
uma melhoria na medio da varivel x ou y? Explique.

E 2.8.2. A corrente I em ampres e a tenso V em volts em uma lmpada se


relacionam conforme a seguinte expresso:

V

I= ,
V0
onde um nmero entre 0 e 1 e V0 tenso nominal em volts. Sabendo que
V0 = 220 3% e = 0,8 4%, calcule a corrente e o erro relativo associado
quando a tenso vale 220 1%.
Obs:. Este problema pode ser resolvido de duas formas distintas: usando a ex-
presso aproximada para a propagao de erro e inspecionando os valores mximos
e mnimos que a expresso pode assumir. Pratique os dois mtodos.

E 2.8.3. A corrente I em ampres e a tenso V em volts em uma lmpada se


relacionam conforme a seguinte expresso:

V

I=
V0
Onde um nmero entre 0 e 1 e V0 a tenso nominal em volts. Sabendo que
V0 = 2203% e = 0,84% Calcule a corrente e o erro relativo associado quando
a tenso vale 220 1%. Dica: lembre que x = e ln(x)

2.9 Mais exemplos de cancelamento catastrfico


Exemplo 2.9.1. Considere o seguinte processo iterativo:
1
x0 =
3
xn+1 = 4xn 1, n N.

Observe que x0 = 13 , x1 = 4 31 1 = 13 , x2 = 13 , ou seja, temos uma sequncia


constante igual a 13 . No entanto, ao calcularmos no computador, usando o sistema

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.9. MAIS EXEMPLOS DE CANCELAMENTO CATASTRFICO 31

de numerao double, a sequencia obtida no constante e, de fato, diverge. Faa


o teste em Python, colocando:
>>> x = 1/3; x
e itere algumas vezes a linha de comando:
>>> x = 4*x-1; x
Para compreender o que acontece, devemos levar em considerao que o nmero
1
3
= 0,3 possui um representao infinita tanto na base decimal quanto na base
binria. Logo, sua representao de mquina inclui um erro de arredondamento.
Seja  a diferena entre o valor exato de 31 e sua representao de mquina, isto ,
x0 = 13 + . A sequncia efetivamente calculada no computador :
1
x0 = +
3
1 1
 
x1 = 4x0 1 = 4 +  1 = + 4
3 3
1 1
 
x2 = 4x1 1 = 4 + 4 1 = + 42 
3 3
..
.
1
xn = + 4n 
3
Portanto o limite da sequncia diverge,

lim |
xn | =
x

Qual o nmero de condicionamento desse problema?


Exemplo 2.9.2. Observe a seguinte identidade
(1 + x) 1
f (x) = =1
x
Calcule o valor da expresso esquerda para x = 1012 , x = 1013 , x = 1014 ,
x = 1015 , x = 1016 e x = 1017 . Observe que quando x se aproxima do  de
mquina a expresso perde o significado. Veja a figura 2.1 com o grfico de f (x)
em escala logartmica.

Exemplo 2.9.3. Neste exemplo, estamos interessados em compreender mais de-


talhadamente o comportamento da expresso
1
 n
1+
n

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


32 Clculo Numrico

Figura 2.1: Grfico na funo do exemplo 2.9.2.

 n
Figura 2.2: Grfico de 1 + n1 em funo de n em escala linear-logartmica vari-
ando de 100 at 1018 . Veja o exemplo 2.9.3.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.9. MAIS EXEMPLOS DE CANCELAMENTO CATASTRFICO 33

quando n um nmero grande ao comput-la em sistemas de numeral de ponto


flutuante com acurcia finita. Um resultado bem conhecido do clculo nos diz que
o limite de (2.9.3) quando n tende a infinito o nmero de Euler:
1
 n
lim 1+ = e = 2,718281828459...
n n
Sabemos tambm que a sequncia produzida por (2.9.3) crescente, isto :
1 1 1 2 1 3
     
1+ < 1+ < 1+ <
1 2 3
No entanto, quando calculamos essa expresso no Python, nos defrontamos
com o seguinte resultado:

 n  n
n 1+ 1
n
n 1+ 1
n

1 2,0000000000000 102 2,7048138294215


2 2,2500000000000 104 2,7181459268249
3 2,3703703703704 106 2,7182804690957
4 2,4414062500000 108 2,7182817983391
5 2,4883200000000 1010 2,7182820532348
6 2,5216263717421 1012 2,7185234960372
7 2,5464996970407 1014 2,7161100340870
8 2,5657845139503 1016 1,0000000000000
9 2,5811747917132 1018 1,0000000000000
10 2,5937424601000 1020 1,0000000000000
 n
Podemos resumir esses dados no grfico de 1 + n1 em funo de n, veja a
figura 2.9.
Observe que quando n se torna grande, da ordem de 1015 , o grfico da fun-
o deixa de se crescente e apresenta oscilaes. Observe tambm que a expres-
so se torna identicamente igual a 1 depois de um certo limiar. Tais fenmenos
no so intrnsecos da funo f (n) = (1 + 1/n)n , mas oriundas de erros de
arredondamento, isto , so resultados numricos esprios. A fim de pr o com-
portamento numrico de tal expresso, apresentamos abaixo o grfico da mesma
funo, porm restrito regio entre 1014 e 1016 .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


34 Clculo Numrico

Para compreendermos melhor por que existe um limiar N que, quando atin-
gido torna a expresso do exemplo acima identicamente igual a 1, observamos a
sequncia de operaes realizadas pelo computador:

n 1/n 1 + 1/n (1 + 1/n)n (2.1)

Devido ao limite de preciso da representao de nmeros em ponto flutuante,


existe um menor nmero representvel que maior do que 1. Este nmero
1+eps, onde eps chamado de psilon de mquina e o menor nmero que
somado a 1 produz um resultado superior a 1 no sistema de numerao usado.
O psilon de mquina no sistema de numerao double vale aproximadamente
2,22 1016 . Em Python podemos obter o epsilon de mquina com o seguinte
comando numpy:
>>> eps = np.finfo(float).eps
>>> print(eps)
2.22044604925e-16
>>> 1+eps == 1
False
>>> 1+eps
1.0000000000000002
Quando somamos a 1 um nmero positivo inferior ao psilon de mquina, obtemos
o nmero 1. Dessa forma, o resultado obtido pela operao de ponto flutuante
1 + n para 0 < n < 2,22 1016 1.
Portanto, quando realizamos a sequncia de operaes dada em (2.1), toda
informao contida no nmero n perdida na soma com 1 quando 1/n menor
que o psilon de mquina, o que ocorre quando n > 5 1015 . Assim, (1 + 1/n)
aproximado para 1 e a ltima operao se resume a 1n , o que igual a 1 mesmo
quando n grande.
Um erro comum acreditar que o perda de significncia se deve ao fato de 1/n
ser muito pequeno para ser representado e aproximando para 0. Isto falso, o
sistema de ponto de flutuante permite representar nmeros de magnitude muito
inferior ao psilon de mquina. O problema surge da limitao no tamanho da
mantissa. Observe como a seguinte sequncia de operaes no perde significncia
para nmeros positivos x muito menores que o psilon de mquina:

n 1/n 1/(1/n) (2.2)

compare o desempenho numrico desta sequncia de operaes para valores pe-


quenos de n com o da seguinte sequncia:

n 1 + n (1 + n) 1. (2.3)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.9. MAIS EXEMPLOS DE CANCELAMENTO CATASTRFICO 35

 n
Finalmente, notamos que quando tentamos calcular 1 + 1
n
para n grande, existe
perda de significncia no clculo de 1 + 1/n.

Exemplo 2.9.4 (Analogia da balana). Observe a seguinte comparao interes-


sante que pode ser feita para ilustrar os sistemas de numerao com ponto fixo e
flutuante: o sistema de ponto fixo como uma balana cujas marcas esto igual-
mente espaadas; o sistema de ponto flutuante como uma balana cuja distncia
entre as marcas proporcional massa medida. Assim, podemos ter uma ba-
lana de ponto fixo cujas marcas esto sempre distanciadas de 100g (100g, 200g,
300g, ..., 1Kg, 1,1Kg,...) e outra balana de ponto flutuante cujas marcas esto
distanciadas sempre de aproximadamente um dcimo do valor lido (100g, 110g,
121g, 133g, ..., 1Kg, 1,1Kg, 1,21Kg, ...) A balana de ponto fixo apresenta uma
resoluo baixa para pequenas medidas, porm uma resoluo alta para grandes
medidas. A balana de ponto flutuante distribui a resoluo de forma proporcional
ao longo da escala.
Seguindo nesta analogia, o fenmeno de perda de significncia pode ser inter-
pretado como a seguir: imagine que voc deseje obter o peso de um gato (apro-
ximadamente 4Kg). Dois processos esto disponveis: colocar o gato diretamente
na balana ou medir seu peso com o gato e, depois, sem o gato. Na balana
de ponto flutuante, a incerteza associada na medida do peso do gato (sozinho)
aproximadamente 10% de 4Kg, isto , 400g. J a incerteza associada medida da
uma pessoa (aproximadamente 70Kg) com o gato de 10% do peso total, isto ,
aproximadamente 7Kg. Esta incerteza da mesma ordem de grandeza da medida
a ser realizada, tornado o processo impossvel de ser realizado, j que teramos
uma incerteza da ordem de 14Kg (devido dupla medio) sobre uma grandeza
de 4Kg.

Exerccios

E 2.9.1. Considere as expresses:

exp(1/)
1 + exp(1/)
e
1
exp(1/) + 1
com > 0. Verifique que elas so idnticas como funes reais. Teste no compu-
tador cada uma delas para = 0,1, = 0,01 e = 0,001. Qual dessas expresses
mais adequada quando um nmero pequeno? Por qu?

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


36 Clculo Numrico

E 2.9.2. Encontre expresses alternativas para calcular o valor das seguintes


funes quando x prximo de zero.
a) f (x) = 1cos(x)
x2

b) g(x) = 1+x1

c) h(x) = x + 106 103

d) i(x) = 1 + ex 2 Dica: Faa y = ex 1

E 2.9.3. Use uma identidade trigonomtrica adequada para mostrar que:


!2
1 cos(x) 1 sen (x/2)
= .
x 2 2 x/2
Analise o desempenho destas duas expresses no computador quando x vale 105 ,
106 , 107 , 108 , 109 , 10200 e 0. Discuta o resultado. Dica: Para |x| < 105 ,
f (x) pode ser aproximada por 1/2 x2 /24 com erro de truncamento inferior a
1022 .
E 2.9.4. Reescreva as expresses:

e2x + 1 ex e e2x + x2 ex
de modo que seja possvel calcular seus valores para x = 100 utilizando a aritmtica
de ponto flutuante ("Double") no computador.

E 2.9.5. Na teoria da relatividade restrita, a energia cintica de uma partcula


e sua velocidade se relacionam pela seguinte frmula:

1
E = mc2 q 1 ,
1 (v/c)2
onde E a energia cintica da partcula, m a massa de repouso, v o mdulo da
velocidade e c a velocidade da luz no vcuo dada por c = 299792458m/s. Considere
que a massa de repouso m = 9,10938291 1031 Kg do eltron seja conhecida com
erro relativo de 109 . Qual o valor da energia e o erro relativo associado a essa
grandeza quando v = 0,1c, v = 0,5c, v = 0,99c e v = 0,999c sendo que a incerteza
relativa na medida da velocidade 105 ?
E 2.9.6. Deseja-se medir a concentrao de dois diferentes oxidantes no ar.
Trs sensores eletroqumicos esto disponveis para a medida e apresentam a se-
guintes respostas:
v1 = 270[A] + 30[B], v2 = 140[A] + 20[B] e v3 = 15[A] + 200[B]
as tenses v1 , v2 e v3 so dadas em mV e as concentraes em milimol/l.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


2.9. MAIS EXEMPLOS DE CANCELAMENTO CATASTRFICO 37

a) Encontre uma expresso para os valores de [A] e [B] em termos de v1 e v2 e,


depois, em termos de v1 e v3 . Dica: Se ad 6= bc, ento a matriz A dada por

a b
A=
c d

inversvel e sua inversa dada por



1 d b
A1 = .
ad bc c a

b) Sabendo que incerteza relativa associada s sensibilidades dos sensores 1 e


2 de 2% e que a incerteza relativa associada s sensibilidades do sensor 3
10%, verifique a incerteza associada medida feita com o par 1 2 e o
par 1 3. Use [A] = [B] = 10milimol/l. Dica: Voc deve diferenciar as
grandezas [A] e [B] em relao aos valores das tenses.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 3

Soluo de equaes de uma


varivel

Neste captulo, buscaremos aproximaes numricas para a soluo de equa-


es de uma varivel real. Observamos que obter uma soluo para uma tal
dada equao equivalente a encontrar um zero de uma funo apropriada.
Com isso, iniciamos este captulo discutindo sobre condies de existncia e unici-
dade de razes de funes de uma varivel real. Ento, apresentamos o mtodo da
bisseo como uma primeira abordagem numrica para a soluo de tais equaes.
Em seguida, exploramos uma outra abordagem via iterao do ponto fixo.
Desta, obtemos o mtodo de Newton1 , para o qual discutimos sua aplicao
e convergncia. Por fim, apresentamos o mtodo das secantes como uma das
possveis variaes do mtodo de Newton.
Ao longo do captulo, apresentamos algumas computaes com Python. Nestas,
estaremos assumindo o que os seguintes mdulos esto carregados:

>>> from __future__ import division


>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> import scipy as sci
>>> from scipy import optimize

A segunda instruo carrega a biblioteca de computao cientfica numpy e a


terceira carrega a biblioteca grfica matplotlib.

1
Sir Isaac Newton, 1642 - 1727, matemtico e fsico ingls.

38
3.1. EXISTNCIA E UNICIDADE 39

f(a)

x b
a x

f(b)

Figura 3.1: Teorema de Bolzano.

3.1 Existncia e unicidade


O teorema de Bolzano2 nos fornece condies suficientes para a existn-
cia do zero de uma funo. Este uma aplicao direta do teorema do valor
intermedirio.
Teorema 3.1.1 (Teorema de Bolzano). Se f : [a, b] R, y = f (x), uma funo
contnua tal que f (a) f (b) < 0, ento existe x (a, b) tal que f (x ) = 0.
Demonstrao. O resultado uma consequncia imediata do teorema do valor
intermedirio que estabelece que dada uma funo contnua f : [a, b] R, y =
f (x), tal que f (a) < f (b) (ou f (b) < f (a)), ento para qualquer d (f (a), f (b))
(ou k (f (b), f (a))) existe x (a, b) tal que f (x ) = k. Ou seja, nestas notaes,
se f (a) f (b) < 0, ento f (a) < 0 < f (b) (ou f (b) < 0 < f (a)). Logo, tomando
k = 0, temos que existe x (a, b) tal que f (x ) = k = 0.
Em outras palavras, se f (x) uma funo contnua em um dado intervalo no
qual ela troca de sinal, ento ela tm pelo menos um zero neste intervalo (veja a
figura 3.1).
Exemplo 3.1.1. Mostre que existe pelo menos uma soluo da equao ex = x+2
no intervalo (2,0).
Soluo. Primeiramente, observamos que resolver a equao ex = x + 2 equi-
valente a resolver f (x) = 0 com f (x) = ex x 2. Agora, como f (2) = e2 > 0
2
Bernhard Placidus Johann Gonzal Nepomuk Bolzano, 1781 - 1848, matemtico do Reino da
Bomia.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


40 Clculo Numrico

e f (0) = 2 < 0, temos do teorema de Bolzano que existe pelo menos um zero de
f (x) no intervalo (2, 0). E, portanto, existe pelo menos uma soluo da equao
dada no intervalo (2, 0).
Podemos usar Python para estudarmos esta funo. Por exemplo, podemos
definir a funo f (x) e comput-la nos extremos do intervalo dado com os seguintes
comandos:
>>> def f(x): return np.exp(x)-x-2
...
>>> f(-2),f(0)
(0.13533528323661281, -1.0)
Alternativamente (e com maior preciso), podemos verificar diretamente o sinal
da funo nos pontos desejados com a funo numpy.sign:
>>> np.sign(f(-2)*f(0))
-1.0

Quando procuramos aproximaes para zeros de funes, aconselhvel isolar
cada raiz em um intervalo. Desta forma, gostaramos de poder garantir a existncia
e a unicidade da raiz dentro de um dado intervalo. A seguinte proposio nos
fornece condies suficientes para tanto.

Proposio 3.1.1. Se f : [a, b] R um funo diferencivel, f (a) f (b) < 0 e


f 0 (x) > 0 (ou f 0 (x) < 0) para todo x (a, b), ento existe um nico x (a, b) tal
que f (x ) = 0.

Em outras palavras, para garantirmos que exista um nico zero de uma dada
funo diferencivel em um intervalo, suficiente que ela troque de sinal e seja
montona neste intervalo.

Exemplo 3.1.2. No exemplo 3.1.1, mostramos que existe pelo menos um zero de
f (x) = ex x 2 no intervalo (2,0), pois f (x) contnua e f (2) f (0) < 0.
Agora, observamos que, alm disso, f 0 (x) = ex 1 e, portanto, f 0 (x) < 0 para
todo x (2,0). Logo, da proposio 3.1.1, temos garantida a existncia de um
nico zero no intervalo dado.
Podemos inspecionar o comportamento da funo f (x) = ex x 2 e de sua
derivada fazendo seus grficos no Python. Para tanto, podemos usar o seguinte
cdigo Python:

>>> def f(x): return np.exp(x)-x-2


...
>>> xx = np.linspace(-2,0)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.1. EXISTNCIA E UNICIDADE 41

>>> plt.plot(xx,f(xx))
>>> plt.grid(); plt.show()

>>> def fl(x): return np.exp(x)-1


...
>>> plt.plot(xx,fl(xx))
>>> plt.grid(); plt.show()

A discusso feita nesta seo, especialmente o teorema de Bolzano, nos fornece


os fundamentos para o mtodo da bisseo, o qual discutimos na prxima seo.

Exerccios

E 3.1.1. Mostre que cos x = x tem soluo no intervalo [0, /2].

E 3.1.2. Mostre que cos x = x tem uma nica soluo no intervalo [0, /2].

E 3.1.3. Interprete a equao cos(x) = kx como o problema de encontrar a


interseco da curva y = cos(x) com y = kx. Encontre o valor positivo k para o
qual essa equao admite exatamente duas razes positivas distintas.

E 3.1.4. Mostre que a equao:

1
ln(x) + x3 = 10
x
possui uma nica soluo positiva.

E 3.1.5. Use o teorema de Bolzano para mostrar que o erro absoluto ao


aproximar o zero da funo f (x) = ex x 2 por x = 1,841 menor que 103 .

E 3.1.6. Mostre que o erro absoluto associado aproximao x = 1,962 para


a soluo exata x de:
ex + sen (x) + x = 10
menor que 104 .

E 3.1.7. Mostre que a equao

1
ln(x) + x =v
x
possui uma soluo para cada v real e que esta soluo nica.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


42 Clculo Numrico

f (b)

a x(0)
x(1) b x
f (x(0) )

f (a)

Figura 3.2: Mtodo da bisseo.

3.2 Mtodo da bisseo


O mtodo da bisseo explora o fato de que uma funo contnua f : [a, b]
R com f (a) f (b) < 0 tem um zero no intervalo (a, b) (veja o teorema de Bol-
zano 3.1.1). Assim, a ideia para aproximar o zero de uma tal funo f (x) tomar,
como primeira aproximao, o ponto mdio do intervalo [a, b], isto :
(a + b)
x(0) = .
2
Pode ocorrer de f (x(0) ) = 0 e, neste caso, o zero de f (x) x = x(0) . Caso
contrrio, se f (a) f (x(0) ) < 0, ento x (a, x(0) ). Neste caso, tomamos como
segunda aproximao do zero de f (x) o ponto mdio do intervalo [a, x(0) ], isto
, x(1) = (a + x(0) )/2. Noutro caso, temos f (x(0) ) f (b) < 0 e, ento, tomamos
x(1) = (x(0) + b)/2. Repetimos este procedimento at obtermos a aproximao
desejada (veja figura 3.2).
De forma mais precisa, suponha que queiramos calcular uma aproximao com
uma certa preciso T OL para um zero x de uma dada funo contnua f : [a, b]
R tal que f (a) f (b) < 0. Iniciamos, tomando n = 0 e:

a(n) + b(n)
a(n) = a, b(n) = b e x(n) = .
2
Verificamos o critrio de parada, isto , se f (x(n) ) = 0 ou:

|b(n) a(n) |
< T OL,
2
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
3.2. MTODO DA BISSEO 43

Tabela 3.1: Iterao do mtodo da bisseo para o exemplo 3.2.1.


|b(n) a(n) |
n a(n) b(n) x(n) f (a(n) )f (x(n) )
2
0 2 0 1 <0 1
1 2 1 1,5 <0 0,5
2 2 1,5 1,75 <0 0,25
3 2 1,75 1,875 >0 0,125
4 1,875 1,75 1,8125 <0 0,0625

ento x(n) a aproximao desejada. Caso contrrio, preparamos a prxima ite-


rao n + 1 da seguinte forma: se f (a(n) ) f (x(n) ) < 0, ento setamos a(n+1) = a(n)
e b(n+1) = x(n) ; noutro caso, se f (x(n) ) f (b(n) ) < 0, ento setamos a(n+1) = x(n) e
b(n+1) = b(n) . Trocando n por n + 1, temos a nova aproximao do zero de f (x)
dada por:
a(n+1) + b(n+1)
x(n+1) = .
2
Voltamos a verificar o critrio de parada acima e, caso no satisfeito, iteramos
novamente. Iteramos at obtermos a aproximao desejada ou o nmero mximo
de iteraes ter sido atingido.

Exemplo 3.2.1. Use o mtodo da bisseo para calcular uma soluo de ex = x+2
no intervalo [2, 0] com preciso T OL = 101 .

Soluo. Primeiramente, observamos que resolver a equao dada equivalente


a calcular o zero de f (x) = ex x 2. Alm disso, temos f (2) f (0) < 0.
Desta forma, podemos iniciar o mtodo da bisseo tomando o intervalo inicial
[a(0) , b(0) ] = [2, 0] e:
a(0) + b(0)
x(0) = = 1.
2
Apresentamos as iteraes na tabela 3.1. Observamos que a preciso T OL = 101
foi obtida na quarta iterao com o zero de f (x) sendo aproximado por x(4) =
1,8125.
Usando Python neste exemplos, temos:
>>> def f(x): return np.exp(x) - x - 2
...
>>> a=-2; b=0; x = (a+b)/2; [a,b,x]
[-2, 0, -1.0]

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


44 Clculo Numrico

>>> [(b-a)/2, np.sign(f(a)*f(x))]


[1.0, -1.0]
>>> b=x; x=(a+b)/2; [a,b,x]
[-2, -1.0, -1.5]
>>> [(b-a)/2, np.sign(f(a)*f(x))]
e, assim, sucessivamente. Veja o cdigo completo na Seo 3.2.1.

Vamos, agora, discutir sobre a convergncia do mtodo da bisseo. O pr-


ximo teorema 3.2.1 nos garante a convergncia do mtodo da bisseo.

Teorema 3.2.1 (Convergncia do mtodo da bisseo). Sejam f : [a, b] R uma


funo contnua tal que f (a)f (b) < 0 e x o nico zero de f (x) no intervalo (a, b).
Ento, a sequncia {x(n) }n>=0 do mtodo da bisseo satisfaz:

ba
|x(n) x | < , n 0,
2n+1

isto , x(n) x quando n .

Demonstrao. Notemos que, a cada iterao, a distncia entre a aproximao x(n)


e o zero x da funo menor que a metade do tamanho do intervalo [a(n) , b(n) ]
(veja figura 3.2), isto :
b(n) a(n)
|x(n) x | < .
2
Por construo do mtodo, temos [a(n) , b(n) ] [a(n1) , b(n1) ] e:

b(n1) a(n1)
b (n)
a (n)
= .
2
Desta forma:

b(n) a(n) b(n1) a(n1) b(0) a(0)


|x(n) x | < = = = , n 1.
2 22 2n+1
Logo, vemos que:
ba
|x(n) x | < , n 0.
2n+1

Observamos que a hiptese de que f (x) tenha um nico zero no intervalo no


necessria. Se a funo tiver mais de um zero no intervalo inicial, as iteraes
iro convergir para um dos zeros. Veja o exerccio 3.2.3.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.2. MTODO DA BISSEO 45

Observao 3.2.1. O teorema 3.2.1 nos fornece uma estimativa para a conver-
gncia do mtodo da bisseo. Aproximadamente, temos:
1
|x(n+1) x | . |x(n) x |.
2
Isto nos leva a concluir que o mtodo da bisseo tem taxa de convergncia
linear.

Exemplo 3.2.2. No exemplo 3.2.1, precisamos de 4 iteraes do mtodo da bis-


seo para computar uma aproximao com preciso de 101 do zero de f (x) =
ex x 2 tomando como intervalo inicial [a, b] = [2, 0]. Poderamos ter estimado
o nmero de iteraes a priori, pois, como vimos acima:
ba
|x(n) x | , n 0.
2n+1
Logo, temos:
ba 2
|x(n) x | < =
2n+1 2n+1
= 2 < 101 n > log2 101 3,32.
n

O que est de acordo com o experimento numrico realizado naquele exemplo.

O mtodo da bisseo tem a boa propriedade de garantia de convergncia, bem


como de fornecer uma simples estimativa da preciso da aproximao calculada.
Entretanto, a taxa de convergncia linear superada por outros mtodos. A
construo de tais mtodos est, normalmente, associada a iterao do ponto fixo,
a qual exploramos na prxima seo.

3.2.1 Cdigo Python: mtodo da bisseo


O seguinte cdigo uma implementao em Python do algoritmo da bisseo.
As variveis de entrada so:

f - funo objetivo

a - extremo esquerdo do intervalo de inspeo [a, b]

b - extremo direito do intervalo de inspeo [a, b]

TOL - tolerncia (critrio de parada)

N - nmero mximo de iteraes

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


46 Clculo Numrico

A varivel de sada :

p - aproximao da raiz de f, isto , f (p) 0.

from __future__ import division

def bissecao(f, a, b, TOL, N):


i = 1
fa = f(a)
while (i <= N):
#iteracao da bissecao
p = a + (b-a)/2
fp = f(p)
#condicao de parada
if ((fp == 0) or ((b-a)/2 < TOL)):
return p
#bissecta o intervalo
i = i+1
if (fa * fp > 0):
a = p
fa = fp
else:
b = p

raise NameError('Num. max. de iter. excedido!');

Exerccios

E 3.2.1. Considere a equao x = cos(x). Use o mtodo da bisseo com
intervalo inicial [a, b] = [0, 1] e x(1) = (a + b)/2 para calcular a aproximao x(4)
da soluo desta equao.

E 3.2.2. Trace o grfico e isole as trs primeiras razes positivas da funo:


x
 
f (x) = 5 sen (x ) exp
2
10
em intervalos de comprimento 0,1. Ento, use o mtodo da bisseo para obter
aproximaes dos zeros desta funo com preciso de 105 .

E 3.2.3. O polinmio p(x) = 4+8x5x2 +x3 tem razes x1 = 1 e x2 = x3 = 2


no intervalo [1/2, 3].

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.2. MTODO DA BISSEO 47

a) Se o mtodo da bisseo for usando com o intervalo inicial [1/2, 3], para qual
raiz as iteraes convergem?

b) possvel usar o mtodo da bisseo para a raiz x = 2? Justifique sua


resposta.

E 3.2.4. Mostre que a equao do problema 3.1.7 possui uma soluo no


intervalo [1, v + 1] para todo v positivo. Dica: defina f (x) = ln(x) + x x1 v e
considere a seguinte estimativa:
Z v+1 Z v+1
f (v + 1) = f (1) + f 0 (x)dx v + dx = 0.
1 1

Use esta estimativa para iniciar o mtodo de bisseo e obtenha o valor da raiz
com pelo menos 6 algarismos significativos para v = 1, 2, 3, 4 e 5.

E 3.2.5. (Esttica) Considere o seguinte problema fsico: uma plataforma est


fixa a uma parede atravs de uma dobradia cujo momento dado por:

= k,

onde angulo da plataforma com a horizontal e k uma constante positiva. A


plataforma feita de material homogneo, seu peso P e sua largura l. Modele
a relao entre o ngulo e o peso P prprio da plataforma. Encontre o valor
de quando l = 1 m, P = 200 N, k = 50 Nm/rad, sabendo que o sistema est
em equilbrio. Use o mtodo da bisseo e expresse o resultado com 4 algarismos
significativos.

E 3.2.6. Considere a equao de Lambert dada por:

xex = t,

onde t um nmero real positivo. Mostre que esta equao possui uma nica
soluo x que pertence ao intervalo [0, t]. Usando esta estimativa como intervalo
inicial, quantos passos so necessrio para obter o valor numrico de x com erro
absoluto inferior a 106 quando t = 1, t = 10 e t = 100 atravs do mtodo da
bisseo? Obtenha esses valores.

E 3.2.7. O polinmio f (x) = x4 4x2 + 4 possui razes duplas em 2 e 2.
O mtodo da bisseo pode ser aplicados a f ? Explique.

E 3.2.8. (Eletrnica) O desenho abaixo mostra um circuito no linear envol-


vendo uma fonte de tenso constante, um diodo retificador e um resistor. Sabendo

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


48 Clculo Numrico

que a relao entre a corrente (Id ) e a tenso (vd ) no diodo dada pela seguinte
expresso:
vd
   
Id = IR exp 1 ,
vt
onde IR a corrente de conduo reversa e vt , a tenso trmica dada por vt = kTq
com k, a constante de Boltzmann, T a temperatura de operao e q, a carga do
eltron. Aqui IR = 1pA = 1012 A, T = 300 K. Escreva o problema como uma
equao na incgnita vd e, usando o mtodo da bisseo, resolva este problema
com 3 algarismos significativos para os seguintes casos:

a) V = 30 V e R = 1 k.

b) V = 3 V e R = 1 k.

c) V = 3 V e R = 10 k.

d) V = 300 mV e R = 1 k.

e) V = 300 mV e R = 1 k.

f) V = 30 V e R = 1 k.

g) V = 30 V e R = 10 k.

Dica: V = RId + vd .

E 3.2.9. (Propagao de erros) Obtenha os valores de Id no problema 3.2.8.


Lembre que existem duas expresses disponveis:
vd
   
Id = IR exp 1
vt
e
v vd
Id =
R
Faa o estudo da propagao do erro e decida qual a melhor expresso em cada
caso.

3.3 Iterao de Ponto Fixo


Nesta seo, discutimos a abordagem da iterao do ponto fixo para a solu-
o numrica de equaes de uma varivel real. Observamos que sempre podemos

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.3. ITERAO DE PONTO FIXO 49

reescrever uma equao da forma f (x) = 0 (problema de encontrar os zeros de uma


funo) em uma equao equivalente na forma g(x) = x (problema de ponto
fixo). Um ponto x = x tal que g(x ) = x chamado de ponto fixo da funo
g(x). Geometricamente, um ponto fixo de uma funo um ponto de interseo
entre a reta y = x com o grfico da funo (veja figura 3.3).

y
y=x

y = g(x)

x x

Figura 3.3: Ponto fixo g(x ) = x .

Exemplo 3.3.1. Resolver a equao ex = x + 2 equivalente a resolver f (x) = 0,


com f (x) = ex x2. Estes so equivalentes a resolver g(x) = x, com g(x) = ex 2.
Ou seja, temos:

ex = x + 2 ex x 2 = 0 ex 2 = x

Dada uma funo g(x), a iterao do ponto fixo consiste em computar a


seguinte sequncia recursiva:

x(n+1) = g(x(n) ), n 1,

onde x(1) uma aproximao inicial do ponto fixo.


Exemplo 3.3.2 (Mtodo babilnico). O mtodo babilnico3 de uma iterao de
ponto fixo para extrair a raiz quadrada de um nmero positivo A, isto , resolver
a equao x2 = A.
Seja r > 0 uma aproximao para A. Temos trs possibilidades:
 
r > A = Ar < A = A Ar , r ;
3
Heron de Alexandria, 10 d.C. - 70 d.C., matemtico grego.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


50 Clculo Numrico


r= A = Ar = A;
 
r < A = Ar > A = A r, Ar .

Ou seja, A sempre est no intervalo entre r e Ar , no qual podemos buscar uma
nova aproximao como, por exemplo, pelo ponto mdio:
r+ A
x= r
.
2
Aplicando esse mtodo repetidas vezes, podemos construir a iterao (de ponto
fixo):
x(1) = r
x(n) A
x(n+1) = + (n) , n = 1,2,3,...
2 2x

Por exemplo, para obter uma aproximao para 5, podemos iniciar com a
aproximao inicial r = 2 e A = 5. Ento, tomamos x(1) = 2 e da seguem as
aproximaes:
2 2,5
x(2) = + = 2,25
2 2
2,25 2,5
x(3) = + = 2,2361111
2 2,25
2,2361111 2,5
x(4) = + = 2,236068
2 2,2361111
2,236068 2,5
x(5) = + = 2,236068
2 2,236068
O mtodo babilnico sugere que a iterao do ponto fixo pode ser uma abor-
dagem eficiente para a soluo de equaes. Ficam, entretanto, as seguintes per-
guntas:
1. Ser que a iterao do ponto fixo convergente?
2. Caso seja convergente, ser que o limite x = limn x(n) um ponto fixo?
3. Caso seja convergente, qual a taxa de convergncia?
A segunda pergunta a mais fcil de ser respondida. No caso de g(x) ser
contnua, se x(n) x Dom (g), ento:
 
x = lim x(n) = lim g(x(n1) ) = g lim x(n1) = g(x ).
n n n

Antes de respondermos as outras perguntas acima, vejamos mais um exemplo.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.3. ITERAO DE PONTO FIXO 51

Tabela 3.2: Iteraes do ponto fixo para o exemplo 3.3.3.


(n) (n)
n x1 x2
1 1,700 1,700
2 2,047 1,735
3 0,8812 1,743
4 4,3013 1,746
5 149,4 1,746

Exemplo 3.3.3. Considere o problema de encontrar o zero da funo f (x) =


xex 10. Uma maneira geral de construir um problema de ponto fixo equivalente
o seguinte:
f (x) = 0 f (x) = 0 x f (x) = x,
para qualquer parmetro 6= 0. Consideremos, ento, as seguintes duas funes:
g1 (x) = x 0,5f (x) e g2 (x) = x 0,05f (x).
Notamos que o ponto fixo destas duas funes coincide com o zero de f (x). Cons-
truindo as iteraes do ponto fixo:
(n+1) (n) (n+1) (n)
x1 = g1 (x1 ) e x2 = g2 (x2 ),
(1) (1)
tomando x1 = x2 = 1,7, obtemos os resultados apresentados na tabela 3.2.
Observamos que, enquanto, a iterao do ponto fixo com a funo g1 (x) ( = 0,5)
parece divergir, a iterao com a funo g2 (x) ( = 0,05) parece convergir.
Em Python, podemos computar as iteraes do ponto fixo x(n+1) = g1 (x(n) )
com o seguinte cdigo:
>>> def f(x): return x*np.exp(x)-10
...
>>> def g1(x): return x-0.5*f(x)
...
>>> x=1.7
>>> x=g1(x);x
2.0471447170318804
>>> x=g1(x);x
-0.88119413893725618
e, assim, sucessivamente. Itere com a funo g2 (x) e verifique a convergncia!
Afim de estudarmos a convergncia da iterao do ponto fixo, apresentamos o
teorema do ponto fixo.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


52 Clculo Numrico

3.3.1 Teorema do ponto fixo


O teorema do ponto fixo nos fornece condies suficientes para a existncia e
unicidade do ponto fixo, bem como para a convergncia das iteraes do mtodo.

Definio 3.3.1. Uma contrao uma funo real g : [a, b] [a, b] tal que:

|g(x) g(y)| |x y|, 0 < 1.

Observao 3.3.1. Seja g : [a, b] [a, b], y=g(x).

Se g(x) uma contrao, ento g(x) funo contnua.

Se |g 0 (x)| < k, 0 < k < 1, para todo x [a, b], ento g(x) uma contrao.

Teorema 3.3.1 (Teorema do ponto fixo). Se g : [a,b] [a,b] uma contrao,


ento existe um nico ponto x [a, b] tal que g(x ) = x , isto , x ponto fixo
de g(x). Alm disso, a sequncia {x(n) }nN dada por:

x(n+1) = g(x(n) )

converge para x para qualquer x(1) [a, b].

Demonstrao. Comeamos demonstrando que existe pelo menos um ponto fixo.


Para tal definimos a funo f (x) = x g(x) e observamos que:

f (a) = a g(a) a a = 0

e
f (b) = b g(b) b b = 0
Se f (a) = a ou f (b) = b, ento o ponto fixo existe. Caso contrrio, as desigualdades
so estritas e a f (x) muda de sinal no intervalo. Como esta funo contnua, pelo
teorema de Bolzano 3.1.1, existe um ponto x no intervalo (a, b) tal que f (x ) = 0,
ou seja, g(x ) = x . Isto mostra a existncia.
Para provar que o ponto fixo nico, observamos que se x e x so pontos
fixos, eles devem ser iguais, pois:

|x x | = |g(x ) g(x )| |x x |.

A desigualdade |x x | |x x | com 0 < 1 implica |x x | = 0.


Para demonstrar a convergncia da sequncia, observamos que:

|x(n+1) x | = |g(x(n) ) x | = |g(x(n) ) g(x )| |x(n) x |.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.3. ITERAO DE PONTO FIXO 53

Da, temos:

|x(n) x | |x(n1) x | 2 |x(n2) x | n |x(0) x |.

Portanto, como 0 < 1, temos:

lim |x(n) x | = 0,
n

ou seja, x(n) x quando n .


Observao 3.3.2. Do teorema do ponto fixo, temos que se g(x) uma contrao
com constante 0 < 1, ento:

|x(n+1) x | |x(n) x |, n 1.

Isto , as iteraes do ponto fixo tm taxa de convergncia linear.


Exemplo 3.3.4. Mostre que o teorema do ponto fixo se aplica a funo g(x) =
cos(x) no intervalo [1/2, 1], isto , a iterao de ponto fixo converge para a soluo
da equao cos x = x. Ento, calcule as iteraes do ponto fixo com aproximao
inicial x(1) = 0,7, estime o erro absoluto da aproximao e verfique a taxa de
convergncia.
Soluo. Basta mostrarmos que:
a) g ([1/2,1]) [1/2,1];
b) |g 0 (x)| < , 0 < < 1, x [1/2,1].
Para provar a), observamos que g(x) decrescente no intervalo, pelo que temos:

0,54 < cos(1) cos(x) cos(1/2) < 0,88

Como [0,54, 0,88] [0,5, 1], temos o item a).


Para provar o item b), observamos que:

g 0 (x) = sen (x).

Da mesma forma, temos a estimativa:

0,85 < sen (1) sen (x) sen (1/2) < 0,47.

Assim, |g 0 (x)| < 0,85 temos a desigualdade com = 0,85 < 1.


A Tabela 3.3 apresenta o comportamento numrico da iterao do ponto fixo:

x(1) = 0,7
x(n+1) = cos(x(n) ), n 1.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


54 Clculo Numrico

n x(n) n := |x(n) x |
1 0,70000 3,9E02
2 0,76484 2,6E02
3 0,72149 1,8E02
4 0,75082 1,2E02
5 0,73113 8,0E03
6 0,74442 5,3E03
7 0,73548 3,6E03

Tabela 3.3: Iterao do ponto fixo para o exemplo 3.3.4.

Figura 3.4: Decaimento do erro n = |x(n) x | da iterao do ponto fixo estudada


no Exemplo 3.3.4.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.3. ITERAO DE PONTO FIXO 55

Para estimar o erro, consideramos x = 0,7390851605. A Figura 3.4 mostrar o


decaimento do erro n = |x(n) x | comparado com a taxa de convergncia linear
com = 0,85.
Em Python, podemos computar estas iteraes, o erro absoluto com o seguinte
cdigo:
#funcao do pto. fixo
def g(x):
return np.cos(x)

#est. da solucao
xe = sci.optimize.fixed_point(g, 0.7)

#aprox. inicial
x0 = 0.7
eps = np.fabs(x0-xe)
print("%1.5f %1.1e\n" % (x0, eps))

for i in np.arange(7):
x = g(x0);
eps = np.fabs(x-xe);
print("%1.5f %1.1e\n" % (x, eps))
x0 = x

3.3.2 Teste de convergncia


Seja g : [a,b] R uma funo C 0 [a,b] e x (a,b) um ponto fixo de g. Ento
x dito estvel se existe uma regio (x ,x + ) chamada bacia de atrao tal
que x(n+1) = g(x(n) ) convergente sempre que x(0) (x ,x + ).

Proposio 3.3.1 (Teste de convergncia). Se g C 1 [a,b] e |g 0 (x )| < 1, ento


x estvel. Se |g 0 (x )| > 1 instvel e o teste inconclusivo quando |g 0 (x )| = 1.

Exemplo 3.3.5. No exemplo 3.3.3, observamos que a funo g1 (x) nos forneceu
uma iterao divergente, enquanto que a funo g2 (x) forneceu uma iterao con-
vergente (veja a figura 3.5. A razo destes comportamentos explicada pelo teste
da convergncia. Com efeito, sabemos que o ponto fixo destas funes est no
intervalo [1,6, 1,8] e temos:

|g10 (x)| = |1 0,5(x + 1)ex | > 4,8, x [1,6, 1,8],

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


56 Clculo Numrico

2.0 1.80
y = g2 (x) y=x
1.9 y = g1 (x)
1.75 x(2)
(1)
1.8 x x(1) x
x
1.7 1.70

1.6
y=x 1.65
1.5 x (2)

1.4 1.60
1.60 1.65 1.70 1.75 1.80 1.60 1.65 1.70 1.75 1.80

Figura 3.5: Ilustrao das iteraes do ponto fixo para: (esquerda) y = g1 (x) e
(direita) y = g2 (x). Veja exemplo 3.3.5.

enquanto:
|g20 (x)| = |1 0,05(x + 1)ex | < 0,962, x [1,6, 1,8].

3.3.3 Estabilidade e convergncia


A fim de compreendermos melhor os conceitos de estabilidade e convergncia,
considere uma funo (x) com um ponto fixo x = g(x ) e analisemos o seguinte
processo iterativo:
 
x(n+1) = g x(n)
x(0) = x
Vamos supor que a funo g(x) pode ser aproximada por seu polinmio de Taylor
em torno do ponto fixo:
 
g(x) = g(x ) + (x x )g 0 (x ) + O (x x )2 , n 0
 
= x + (x x )g 0 (x ) + O (x x )2
x + (x x )g 0 (x )
Substituindo na relao de recorrncia, temos
 
x(n+1) = g x(n) x + (x(n) x )g 0 (x )
Ou seja:  
x(n+1) x (x(n) x )g 0 (x )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.3. ITERAO DE PONTO FIXO 57

Tomando mdulos, temos:



x x(n) x |g 0 (x )| ,
(n+1)
x

| {z } | {z }
n+1 n

onde n = x(n) x .

Observao 3.3.3. A anlise acima, conclumos:


Se |g 0 (x )| < 1, ento, a distncia de x(n) at o ponto fixo x est diminuindo
a cada passo.

Se |g 0 (x )| > 1, ento, a distncia de x(n) at o ponto fixo x est aumentando


a cada passo.

Se |g 0 (x )| = 1, ento, nossa aproximao de primeira ordem no suficiente


para compreender o comportamento da sequncia.

3.3.4 Erro absoluto e tolerncia


Na prtica, quando se aplica uma iterao como esta, no
se conhece de ante-
mo o valor do ponto fixo x . Assim, o erro n = x x precisa ser estimado
(n)

com base nos valores calculados x(n) . Uma abordagem frequente analisar a evo-
luo da diferena entre dois elementos da sequncia:

n = x(n+1) x(n)


A pergunta natural : Ser que o erro n = x(n) x pequeno quando


n = x(n+1) x(n) for pequeno?

Para responder a esta pergunta, observamos que

x = lim x(n)
n

portanto:
     
x x(N ) = x(N +1) x(N ) + x(N +2) x(N +1) + x(N +3) x(N +2) + . . .
 
= x(N +k+1) x(N +k)
X

k=0

Usamos tambm as expresses:

x(n+1) x + (x(n) x )g 0 (x )
x(n) x + (x(n1) x )g 0 (x )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


58 Clculo Numrico

Subtraindo uma da outra, temos:

x(n+1) x(n) (x(n) x(n1) )g 0 (x )

Portanto:
k
x(N +k+1) x(N +k) (x(N +1) x(N ) ) (g 0 (x ))

E temos:
 
x x(N ) = x(N +k+1) x(N +k)
X

k=0

k
(x(N +1) x(N ) ) (g 0 (x ))
X

k=0
1
= (x(N +1) x(N ) ) , |g 0 (x )| < 1
1 g 0 (x )

Tomando mdulo, temos:




1
x x(N ) x(N +1) x(N )
1 g 0 (x )
N
N
1 g 0 (x )

Observao 3.3.4. Tendo em mente a relao x(n+1) x(n) (x(n) x(n1) )g 0 (x ),


conclumos:

Quando g 0 (x ) < 0, o esquema alternante, isto , o sinal do erro se altera a


cada passo. O erro N pode ser estimado diretamente da diferena N , pois
o denominador 1 g 0 (x ) > 1.

Quando 0 < g 0 (x ) < 1, o esquema montono e 1g10 (x ) > 1, pelo que o


erro N maior que a diferena N . A relao ser to mais importante
quando mais prximo da unidade for g 0 (x ), ou seja, quando mais lenta for
a convergncia. Para estimar o erro em funo da diferena N , observamos
(n+1) (n)
(n1) e
que g 0 (x ) xx(n) xx
n
|g 0 (x )|
n1
e portanto
N
N .
1 n1
n

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.3. ITERAO DE PONTO FIXO 59

Exerccios

E 3.3.1. Resolver a equao ex = x + 2 equivalente a calcular os pontos


fixos da funo g(x) = ex + 2 (veja o exemplo 3.3.1). Use a iterao do ponto fixo
x(n+1) = g(xn ) com x(1) = 1,8 para obter uma aproximao de uma das solues
da equao dada com 8 dgitos significativos.

E 3.3.2. Mostre que a equao:


cos(x) = x
possui uma nica soluo no intervalo [0, 1]. Use a iterao do ponto fixo e encontre
uma aproximao para esta soluo com 4 dgitos significativos.

E 3.3.3. Mostre que a equao xex = 10 equivalente s seguintes equaes:


10
 
x = ln e x = 10ex .
x
Destas, considere as seguintes iteraes de ponto fixo:
10
 
a) x (n+1)
= ln (n)
x
(n)
b) x(n+1) = 10ex
Tomando x(1) = 1, verifique se estas sequncias so convergentes.

E 3.3.4. Verifique (analiticamente) que a nica soluo real da equao:


xex = 10
ponto fixo das seguintes funes:
 
a) g(x) = ln 10
x

xex 10
b) g(x) = x 15
xex 10
c) g(x) = x 10+ex

Implemente o processo iterativo x(n+1) = g(x(n) ) para n 0 e compare o compor-


tamento. Discuta os resultados com base na teoria estudada.
E 3.3.5. Verifique (analiticamente) que a nica soluo real da equao:
cos(x) = x
ponto fixo das seguintes funes:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


60 Clculo Numrico

a) g(x) = cos(x)

b) g(x) = 0,4x + 0,6 cos(x)

c) g(x) = x + cos(x)x
1+sen (x)

Implemente o processo iterativo x(n+1) = g(x(n) ) para n 0 e compare o compor-


tamento. Discuta os resultados com base na teoria estudada.
E 3.3.6. Encontre a soluo de cada equao com erro absoluto inferior a
10 .
6

a) ex = x + 2 no intervalo (2,0).

b) x3 + 5x2 12 = 0 no intervalo (1,2).



c) x = cos(x) no intervalo (0,1).

E 3.3.7. Encontre numericamente as trs primeiras razes positivas da equao


dada por:
x
cos(x) =
10 + x2
com erro absoluto inferior a 106 .
E 3.3.8. Considere os seguintes processos iterativos:


x(n+1) = cos(x(n) )
a
x(1) = .5
e


x(n+1) = .4x(n) + .6 cos(x(n) )
b
x(1) = .5

Use o teorema do ponto fixo para verificar que cada um desses processos con-
verge para a soluo da equao x de cos(x) = x. Observe o comportamento
numrico dessas sequncias. Qual estabiliza mais rpido com cinco casas deci-
mais? Discuta.
Dica: Verifique que cos([0.5,1]) [0.5,1] e depois a mesma identidade para a
funo f (x) = 0,4x + 0,6 cos(x).

E 3.3.9. Use o teorema do ponto fixo aplicado a um intervalo adequado para


mostrar que a funo g(x) = ln(100 x) possui um ponto fixo estvel.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.3. ITERAO DE PONTO FIXO 61

E 3.3.10. (Fluidos) Na hidrulica, o fator de atrito de Darcy dado pela


implicitamente pela equao de Colebrook-White:

1 2.51
!

= 2 log10 +
f 14.8Rh Re f

onde f o fator de atrito, a rugosidade do tubo em metros, Rh o raio hidrulico


em metros e Re o nmero de Reynolds. Considere = 2mm, Rh = 5cm e
Re = 10000 e obtenha o valor de f pela iterao:

2.51x(n)
!

x (n+1)
= 2 log10 +
14.8Rh Re

E 3.3.11. Encontre uma soluo aproximada para equao algbrica

180 100x = 0.052 senh 1


(1013 x)

com erro absoluto inferior a 103 usando um mtodo iterativo. Estime o erro
associado ao valor de v = 180 100x = 0.052 senh 1 (1013 x), usando cada uma
dessas expresses. Discuta sucintamente o resultado obtido. Dica: Este caso
semelhante ao problema 3.2.8.

E 3.3.12. Considere que xn satisfaz a seguinte relao de recorrncia:

xn+1 = xn (xn x )

onde e x so constantes. Prove que

xn x = (1 )n1 (x1 x ).

Conclua que xn x quando |1 | < 1.

E 3.3.13. (Convergncia lenta) Considere o seguinte esquema iterativo:

x(n+1) = xn + q n ,
x(0) = 0,

onde q = 1 106 .

a) Calcule o limite
x = n
lim x(n)
analiticamente.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


62 Clculo Numrico

b) Considere que o problema de obter o limite da sequncia numericamente


usando como critrio de parada que |x(n+1) x(n) | < 105 . Qual o valor
produzido pelo esquema numrico? Qual o desvio entre o valor obtido pelo
esquema numrico e o valor do limite obtido no item a? Discuta. (Dica:
Voc no deve implementar o esquema iterativo, obtendo o valor de x(n)
analiticamente)

c) Qual deve ser a tolerncia especificada para obter o resultado com erro rela-
tivo inferior a 102 ?

E 3.3.14. (Convergncia sublinear) Considere o seguinte esquema iterativo:

x(n+1) = x(n) [x(n) ]3 , x(n) 0

com x(0) = 102 . Prove que {x(n) } sequncia de nmero reais positivos conver-
gindo para zero. Verifique que so necessrios mais de mil passos para que x(n) se
torne menor que 0.9x(0) .

E 3.3.15. (Taxa de convergncia)

a) Use o teorema do ponto fixo para mostrar que a funo g(x) = 1 sen (x)
possui um nico ponto fixo estvel o intervalo [ 10
1
,1]. Construa um mtodo
iterativo x(n+1) = g(x(n) ) para encontrar esse ponto fixo. Use o computador
para encontrar o valor numrico do ponto fixo.

b) Verifique que funo (x) = 12 [x + 1 sen (x)] possui um ponto fixo x


que tambm o ponto fixo da funo g do item a. Use o computador para
encontrar o valor numrico do ponto fixo atravs da iterao x(n+1) = (x(n) ).
Qual mtodo mais rpido?

E 3.3.16. (Esquemas oscilantes)(Esquemas oscilantes)

a) Considere a funo g(x) e funo composta (x) = g g = g (g(x)). Verifique


todo ponto fixo de g tambm ponto fixo de .

b) Considere a funo
g(x) = 10 exp(x)
e funo composta (x) = g g = g (g(x)). Mostre que possui dois pontos
fixos que no so pontos fixos de g.

c) No problema anterior, o que acontece quando o processo iterativo x(n+1) =


g(x(n) ) inicializado com um ponto fixo de que no ponto fixo de g?

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.4. MTODO DE NEWTON-RAPHSON 63

E 3.3.17. (Acelerao de convergncia - introduo ao mtodo de Newton)


Mostre que se f (x) possui uma raiz x ento a x um ponto fixo de (x) =
x + (x)f (x). Encontre uma condio em (x) para que o ponto fixo x de seja
estvel. Encontre uma condio em (x) para que 0 (x ) = 0.

E 3.3.18. (Acelerao de convergncia - introduo ao mtodo de Newton)


Considere que x(n) satisfaz a seguinte relao de recorrncia:

x(n+1) = x(n) f (x(n) )

onde uma constante. Suponha que f (x) possui um zero em x . Aproxime a


funo f (x) em torno de x por
 
f (x) = f (x ) + f 0 (x )(x x ) + O (x x )2 .

Em vista do problema anterior, qual valor de voc escolheria para que a sequncia
x(n) convirja rapidamente para x .

E 3.3.19. Considere o problema da questo 3.2.8 e dois seguintes esquemas


iterativos. h  i
(n)
I (n+1) = 1 V vt ln 1 + I

,n > 0
R IR
A
I (0) = 0

e
h   i
V RI (n)

I (n+1) = IR exp vt
1 ,n > 0
B
I (0) = 0

Verifique numericamente que apenas o processo A convergente para a, b e c;


enquanto apenas o processo B convergente para os outros itens.

3.4 Mtodo de Newton-Raphson


Nesta seo, apresentamos o mtodo de Newton-Raphson45 para calcular
o zero de funes reais de uma varivel real.
Assumimos que x um zero de uma dada funo f (x) continuamente diferen-
civel, isto , f (x ) = 0. Afim de usar a iterao do ponto fixo, observamos que,
equivalentemente, x um ponto fixo da funo:

g(x) = x + (x)f (x), (x) 6= 0,


4
Joseph Raphson, 1648 - 1715, matemtico ingls.
5
Tambm chamado apenas de mtodo de Newton.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


64 Clculo Numrico

onde (x) uma funo arbitrria que queremos escolher de forma que a iterao
do ponto fixo tenha tima taxa de convergncia.
Do Teorema do ponto fixo temos que a taxa de convergncia dada em
funo do valor absoluto da derivada de g(x). Calculando a derivada temos:

g 0 (x) = 1 + (x)f 0 (x) + 0 (x)f (x).

No ponto x = x , temos:

g 0 (x ) = 1 + (x )f 0 (x ) + 0 (x )f (x ).

Como f (x ) = 0, temos:

g 0 (x ) = 1 + (x )f 0 (x ).

Sabemos que o processo iterativo converge to mais rpido quanto menor for
|g 0 (x)| nas vizinhanas de x . Isto nos leva a escolher:

g 0 (x ) = 0,

e, ento, temos:
1
(x ) = ,
f 0 (x )
se f 0 (x ) 6= 0.
A discusso acima nos motiva a introduzir o mtodo de Newton, cujas iteraes
so dada por:  
(n)
f x
x(n+1) = x(n) 0 n , n 1,
f (x )
sendo x(1) uma aproximao inicial dada.

3.4.1 Interpretao geomtrica


Seja dada uma funo f (x) conforme na figura 3.6. Para tanto, escolhemos
uma aproximao inicial x(1) e computamos:

f (x(1) )
x(2) = x(1) .
f 0 (x(1) )

Geometricamente, o ponto x(2) a interseo da reta tangente ao grfico da funo


f (x) no ponto x = x(1) com o eixo das abscissas. Com efeito, a equao desta reta
:
y = f 0 (x(1) )(x x(1) ) + f (x(1) ).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.4. MTODO DE NEWTON-RAPHSON 65

f(x(1) )

f(x(2) )
x
x(3) x(2) x(1) x

Figura 3.6: Interpretao do mtodo de Newton.

Assim, a interseo desta reta com o eixo das abscissas ocorre quando (y = 0):

f (x(1) )
f 0 (x(1) )(x x(1) ) + f (x(1) ) = 0 x = x(1) .
f 0 (x(1) )

Ou seja, dado x(n) a prxima aproximao x(n+1) o ponto de interseo entre


o eixo das abscissas e a reta tangente ao grfico da funo no ponto x = x(n) .
Observe a figura 3.6.

3.4.2 Anlise de convergncia


Seja f (x) um funo com derivadas primeira e segunda contnuas tal que
f (x ) = 0 e f 0 (x ) 6= 0. Seja tambm a funo g(x) definida como:
f (x)
g(x) = x .
f 0 (x)
Expandimos em srie de Taylor em torno de x = x , obtemos:
g 00 (x )  
g(x) = g(x ) + g 0 (x )(x x ) + (x x )2 + O (x x )3 .
2
Observamos que:

g(x ) = x
f 0 (x )f 0 (x ) f (x )f 00 (x )
g 0 (x ) = 1 =0
(f 0 (x ))2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


66 Clculo Numrico

Portanto:
g 00 (x )  
g(x) = x + (x x )2 + O (x x )3
2
Com isso, temos:
g 00 (x ) (n)  
x(n+1) = g(x(n) ) = x + (x x )2 + O (x x )3 ,
2
ou seja: 2
x C x(n) x ,
(n+1)
x

com constante C = |g 00 (x )/2|. Isto mostra que o mtodo de Newton tem taxa de
convergncia quadrtica. Mais precisamente, temos o seguinte teorema.
Teorema 3.4.1 (Mtodo de Newton). Sejam f C 2 ([a, b]) com x (a, b) tal
que f (x ) = 0 e:

m := min |f 0 (x)| > 0 e M := max |f 00 (x)|.


x[a,b] x[a,b]

Escolhendo > 0 tal que:


M
q :=
< 1,
2m
definimos a bacia de atrao do mtodo de Newton pelo conjunto:

K (x ) := {x R; |x x | } [a, b].

Ento, para qualquer x(1) K (x ) a iterao do mtodo de Newton:

f (x(n) )
x (n+1)
=x (n)
0 (n) ,
f (x )

fornece uma sequncia x(n) que converge para x , isto , x(n) x quando n .
Alm disso, temos a seguinte estimativa de erro a priori:
2m (2n1 )
|x(n) x | q , n 2,
M
e a seguinte estimativa de erro a posteriori:
M (n)
|x(n) x | |x x(n1) |2 , n 2.
2m
Demonstrao. Para n N, n 2, temos:

f (x(n) ) 1 h i
xn+1 x = x(n) x
= f (x (n)
) + (x
x (n)
)f (x
0 (n)
. (3.1)
f 0 (x(n) ) f (x(n) )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.4. MTODO DE NEWTON-RAPHSON 67

Agora, para estimar o lado direito desta equao, usamos o polinmio de Taylor
de grau 1 da funo f (x) em torno de x = x(n) , isto :
Z x
f (x ) = f (x(n) ) + (x x(n) )f 0 (x(n) ) + f 00 (t)(x t) dt.
x(n)

Pela mudana de varivel t = x(n) + s(x(n) x ), observamos que o resto deste


polinmio de Taylor na forma integral igual a:
Z 1  
R(x ,x(n) ) := (x x(n) )2 f 00 x(n) + s(x x(n) ) (1 s) ds.
0

Assim, da cota da segunda derivada de f (x), temos:


Z 1
M
|R(x ,x(n) )| M |x x(n) |2 (1 s) ds = |x x(n) |2 . (3.2)
0 2
Se x(n) K (x ), ento de (3.1) e (3.2) temos:
M (n) M 2
|x(n+1) x | |x x |2 < . (3.3)
2m 2m
Isto mostra que se x(n) K (x ), ento x(n+1) K (x ), isto , x(n) K (x ) para
todo n R.
Agora, obtemos a estimativa a priori de (3.4.2), pois:
2n1
2m M (n1) 2m M (1)
 2 

|x (n)
x | |x x | |x x | .
M 2m M 2m
Logo:
2m 2n1
|x(n) x |
q ,
M
donde tambm vemos que x(n) x quando n , pois q < 1.
Por fim, para provarmos a estimativa a posteriori tomamos a seguinte expan-
so em polinmio de Taylor:
f (x(n) ) = f (x(n1) ) + (x(n) x(n1) )f 0 (x(n1) ) + R(x(n) ,x(n1) ).
Aqui, temos:
f (x(n1) ) + (x(n) x(n1) )f 0 (x(n1) ) = 0
e, ento, conforme acima:
M (n)
|f (x(n) )| = |R(x(n) ),x(n1) |
|x x(n1) |2 .
2
Com isso e do teorema do valor mdio, conclumos:
1 M (n)
|x(n) x | |f (x(n) ) f (x )| |x x(n1) |2 .
m 2m

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


68 Clculo Numrico

Exemplo 3.4.1. Estime o raio da bacia de atrao K (x ) para a funo f (x) =


cos(x) x restrita ao intervalo [0, /2].

Soluo. O raio da bacia de atrao tal que:

2m
<
M
onde m := min |f 0 (x)| e M := max |f 00 (x)| com o mnimo e o mximo tomados
em um intervalo [a, b] que contenha o zero da funo f (x). Aqui, por exemplo,
podemos tomar [a, b] = [0, /2]. Como, neste caso, f 0 (x) = sen (x) 1, temos
que m = 1. Tambm, como f 00 (x) = cos x, temos M = 1. Assim, conclumos
que < 2 (lembrando que K (x ) [0, /2]). Ou seja, neste caso as iteraes
de Newton convergem para o zero de f (x) para qualquer escolha da aproximao
inicial x(1) [0, /2].

Exerccios

E 3.4.1. Encontre a raiz positiva da funo f (x) = cos(x) x2 pelo mtodo


de Newton inicializando-o com x(0) = 1. Realize a iterao at obter estabilidade
no quinto dgito significativo.

E 3.4.2. Considere o problema de calcular as solues positivas da equao:

tg (x) = 2x2 .

a) Use o mtodo grfico para isolar as duas primeiras razes positivas em peque-
nos intervalos. Use a teoria para argumentar quanto existncia e unicidade
das razes dentro intervalos escolhidos.

b) Calcule cada uma das razes pelo mtodo de Newton com oito dgitos signi-
ficativos e discuta a convergncia comparando com o item b).

E 3.4.3. Considere a equao


2
ex = x

trace o grfico com auxlio do computador e verifique que ela possui uma raiz
positiva. Encontre uma aproximao para esta razo pelo grfico e use este valor
para inicializar o mtodo de Newton e obtenha uma aproximao para a raiz com
8 dgitos significativos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.4. MTODO DE NEWTON-RAPHSON 69

E 3.4.4. Isole e encontre as cinco primeiras razes positivas da equao com 6


dgitos corretos atravs de traado de grfico e do mtodo de Newton.
cos(10x) = ex .
Dica: a primeira raiz positiva est no intervalo (0, 0,02). Fique atento.

E 3.4.5. Encontre as razes do polinmio f (x) = x4 4x2 + 4 atravs do


mtodo de Newton. O que voc observa em relao ao erro obtido? Compare com
a situao do problema 3.2.7.
5
E 3.4.6. Encontre as razes reais do polinmio f (x) = 100
x
+x4 +3x+1 isolando-
as pelo mtodo do grfico e depois usando o mtodo de Newton. Expresse a soluo
com 7 dgitos significativos.

E 3.4.7. Considere o mtodo de Newton aplicado para encontrar a raiz de


f (x) = x3 2x + 2. O que acontece quando x(0) = 0? Escolha um valor adequado
para inicializar o mtodo e obter a nica raiz real desta equao.

E 3.4.8. Justifique a construo do processo iterativo do mtodo de Newton


atravs do conceito de estabilidade de ponto fixo e convergncia do mtodo da
iterao. Dica: Considere os problemas 3.3.17 e 3.3.18.

E 3.4.9. Entenda a interpretao geomtrica ao mtodo de Newton. Encontre


uma valor para iniciar o mtodo de Newton aplicado ao problema f (x) = xex = 0
tal que o esquema iterativo divirja.

E 3.4.10. (Computao) Aplique o mtodo de Newton funo f (x) = x1 A


e construa um esquema computacional para calcular a inversa de A com base em
operaes de multiplicao e soma/subtrao.

E 3.4.11. (Computao) Aplique o mtodo de Newton


funo f (x) = xn A
e construa um esquema computacional para calcular A para A > 0 com base em
n

operaes de multiplicao e soma/subtrao.

E 3.4.12. (Computao) Aplique o mtodo de Newton funo f (x) = x12 A


e construa um esquema computacional para calcular 1A para A > 0 com base em
operaes de multiplicao e soma/subtrao.

E 3.4.13. Considere a funo dada por


(x) = ln (15 ln(x))
definida para x (0,e15 )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


70 Clculo Numrico

a) (1.5) Use o teorema do ponto fixo para provar que se x(0) pertence ao intervalo
[1,3], ento a sequncia dada iterativamente por

x(n+1) = (x(n) ),n 0

converge para o nico ponto fixo, x , de . Construa a iterao x(n+1) =


(x(n) ) e obtenha numericamente o valor do ponto fixo x . Expresse a res-
posta com 5 algarismos significativos corretos.

b) (1.0) Construa a iterao do mtodo de Newton para encontrar x , explici-


tando a relao de recorrncia e iniciando com x0 = 2. Use o computador
para obter a raiz e expresse a resposta com oito dgitos significativos corretos.

3.5 Mtodo das secantes


O mtodo das secantes uma variao do mtodo de Newton, evitando a
necessidade de conhecer-se a derivada analtica de f (x). Dada uma funo f (x),
a ideia aproximar sua derivada pela razo fundamental:

f (x) f (x0 )
f 0 (x) , x x0 .
x x0
Mais precisamente, o mtodo de Newton uma iterao de ponto fixo da forma:

x(n+1) = x(n) (x(n) )f (x(n) ), n 1,

onde x(1) uma aproximao inicial dada e (x(n) ) = 1/f 0 (x(n) ). Usando a apro-
ximao da derivada acima, com x = x(n) e x0 = x(n1) , temos:

1 x(n) x(n1)
(x(n) ) = .
f 0 (x(n) ) f (x(n) ) f (x(n1) )

Isto nos motiva a introduzir a iterao do mtodo das secantes dada por:

x(n) x(n1)
x (n+1)
=x (n)
f (x (n)
) , n 2.
f (x(n) ) f (x(n1) )

Observe que para inicializarmos a iterao acima precisamos de duas aproximaes


iniciais, a saber, x(1) e x(2) . Maneiras apropriadas de escolher estas aproximaes
podem ser inferidas da interpretao geomtrica do mtodo.

Exemplo 3.5.1. Encontre as razes de f (x) = cos(x) x.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.5. MTODO DAS SECANTES 71

Soluo. Da inspeo do grfico das funes y = cos(x) e y = x, sabemos que esta


equao possui uma raiz em torno de x = 0,8. Iniciamos o mtodo com x0 = 0,7
e x1 = 0,8.

x(n1) x(n) m x(n+1)


f (0,8)f (0,7)
0,80,7
= 0,8 f (0,8)
1,6813548
=
0,7 0,8 1,6813548 0,7385654
0,8 0,7385654 1,6955107 0,7390784
0,7385654 0,7390784 1,6734174 0,7390851
0,7390784 0,7390851 1,6736095 0,7390851

3.5.1 Interpretao geomtrica


Enquanto, o mtodo de Newton est relacionado s retas tangentes ao grfico
da funo objetivo f (x), o mtodo das secantes, como o prprio nome indica, est
relacionado s retas secantes.

y
f(x (1) )

f(x (2) )

f(x (3) )
x
x (4)x (3) x (2)x (1) x

Figura 3.7: Mtodo das secantes.

Sejam f (x) e as aproximaes x(1) e x(2) do zero x desta funo (veja fi-
gura 3.7). A iterao do mtodo das secantes fornece:

x(2) x(1)
x(3) = x(2) f (x(2) ) .
f (x(2) ) f (x(1) )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


72 Clculo Numrico

De fato, x(3) o ponto de interseo da reta secante ao grfico de f (x) pelos pontos
x(1) e x(2) com o eixo das abscissas. Com efeito, a equao desta reta secante :

f (x(2) ) f (x(1) )
y= (x x(2) ) + f (x(2) ).
x(2) x(1)
Esta reta intercepta o eixo das abscissas no ponto x tal que y = 0, isto :

f (x(2) ) f (x(1) ) x(2) x(1)


(x x (2)
) + f (x (2)
) x = x (2)
f (x (2)
) .
x(2) x(1) f (x(2) ) f (x(1) )

3.5.2 Anlise de convergncia


Uma anlise assinttica semelhante quela feita para o mtodo de Newton na
subseo 3.4.2 nos indica que, para uma funo f (x) duas vezes diferencivel, as
iteraes do mtodo da secante satisfazem:

|x(n+1) x | C|x(n) x ||x(n1) x |,

para aproximaes iniciais suficientemente prximas de x , onde f (x ) = 0. Alm


disso, veremos que:

5+1
|x (n+1)
x | C|x x | , p =
(n) p
1,618
2
sob certas condies. Ou seja, o mtodo das secantes tem taxa de convergncia
superlinear.

Teorema 3.5.1 (Mtodo das secantes). Seja f C 2 ([a, b]) uma funo com x
(a, b) tal que f (x ) = 0. Sejam, tambm:

m := min |f 0 (x)| > 0 e M := max |f 00 (x)| < .


x[a,b] x[a,b]

Alm disso, seja > 0 tal que:


M
q := < 1, K (x ) := {x R; |x x | } [a, b].
2m
Ento, para aproximaes iniciais x(1) , x(2) K (x ), com x(1) 6= x(2) , temos que
as iteraes do mtodo das secantes x(n) K (x ), n 1, e x(n) x , quando
n . Alm disso, vale a seguinte estimativa de convergncia a priori:
2m n1
|x(n) x | q , n 1,
M
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
3.5. MTODO DAS SECANTES 73

onde {n }nN a sequncia de Fibonacci67 , bem como vale a estimativa a poste-


riori:
M (n)
|x(n) x | |x x(n1) ||x(n1) x(n2) |, n 3.
2m
Demonstrao. Sejam n N com n 2 e x(n) , x(n1) K (x ), tal que x(n) 6=
x(n1) , x(n) 6= x e x(n1) 6= x . Seja, tambm:
x(n) x(n1)
g(x(n) ,x(n1) ) := x(n) f (x(n) ) .
f (x(n) ) f (x(n1) )
Com isso, temos:
x(n) x(n1)
g(x(n) ,x(n1) ) x = x(n) f (x(n) ) x
f (x ) f (x
(n) (n1) )
f (x ) f (x )
( )
(n) (n1) (n) (n1)
x x
= (x x )
(n)
f (x ) + f (x ) .
(n)
f (x(n) ) f (x(n1) ) x(n) x(n1)

Ento, da cota assumida para primeira derivada de f (x) e do teorema do valor


mdio, temos:
|x(n) x | f (x(n) ) f (x(n1) ) f (x(n) ) f (x )

|g(x (n)
,x (n1)
)x |
. (3.4)
x(n) x(n1) x(n) x

m

Agora, iremos estimar este ltimo termo a direita. Para tanto, comeamos obser-
vando que da expanso em polinmio de Taylor de ordem 0 da funo f (x) com
resto na forma integral, temos:
f (x(n) ) f (x(n1) )
= 01 dr f (x(n) + r(x(n1) x(n) )) x(n) x
R d dr
(n1)
x x
(n) (n1)

= 0 f (x + r(x(n1) x(n) )) dr
R 1 0 (n)

De forma anloga, temos:


f (x(n) ) f (x ) Z 1 0 (n)

= f (x + r(x x(n) )) dr
x x
(n) 0

Logo, temos:
f (x(n) ) f (x(n1) ) f (x(n) ) f (x )
=
x(n) x(n1) x(n) x (3.5)
Z 1h i
f (x
0 (n)
+ r(x (n1)
x (n)
)) f (x
0 (n)
+ r(x x
(n)
)) dr.
0
6
Leonardo Fibonacci, c. 1170 - c. 1250, matemtico italiano.
7
A sequncia de Fibonacci {n }nN definida por 0 = 1 = 1 e n+1 = n n1 , n 1.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


74 Clculo Numrico

Agora, novamente temos:

f 0 (x(n) + r(x(n1) x(n) )) f 0 (x(n) + r(x x(n) ))


Z r
d 0 (n)
= f (x + r(x(n1) x(n) ) + s(x x(n1) )) ds
0 ds
Z r
= f 00 (x(n) + r(x(n1) x(n) ) + s(x x(n1) )) ds(x x(n1) ).
0

Retornando equao (3.5) e usando a cota para a segunda derivada, obtemos:


f (x(n) ) f (x(n1) ) f (x(n) ) f (x ) M (n1)


|x x |.
x(n) x(n1) x(n) x 2

Utilizando a equao (3.4), obtemos:


M (n) M 2
|g(x(n) ,x(n1) ) x | |x x ||x(n1) x | < .
2m 2m
Portanto, conclumos que as iteraes do mtodo da secantes x(n) permanecem no
conjunto K (x ), se comearem nele. Alm disso, temos demonstrado que:
M (n)
|x(n+1) x | |x x ||x(n1) x |.
2m
Com isso, temos:
M (n)
n := |x x | n+1 n n1 , n 2.
2m
Como 1 q e 2 q, temos n q n1 , n 1. Isto mostra a estimativa de
convergncia a priori:
2m n1
|xn x | q .
M
Alm disso, como n quando n e q < 1, temos que as iteraes do
mtodo das secantes x(n) x quando n .
Por fim, mostramos a estimativa de convergncia a posteriori. Para tanto,
da cota assumida para a primeira derivada e do teorema do valor mdio, temos,
para n 3:
1
|x(n) x | |f (x(n) f (x )|
m
1 (n1) f (x ) f (x(n1) )

(n)
= f (x (n1)
) + (x x
(n)
)
x(n) x(n1)

m
1 (n) (n1) f (x ) f (x(n1) ) f (x(n1) )

(n)
= x x + (n) .
x(n) x(n1) x x(n1)

m

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.5. MTODO DAS SECANTES 75

Agora, a iterao do mtodo das secantes fornece:


x(n1) x(n2)
x(n) = x(n1) f (x(n1) )
f (x(n1) ) f (x(n2) )
e temos:
f (x(n1) ) f (x(n1) ) f (x(n2) )
= .
x(n) x(n1) x(n1) x(n2)
Portanto:
1 f (x(n1) ) f (x(n) ) f (x(n1) ) f (x(n2) )

(n)
|x x | |x(n) x(n1) | .

m x(n1) x(n) x(n1) x(n2)
Observamos que o ltimo termo pode ser estimado como feito acima para o termo
anlogo na Inequao (3.4). Com isso, obtemos a estimativa desejada:
M (n)
|x(n) x | |x x(n1) ||x(n) x(n2) |.
2m

Proposio 3.5.1 (Sequncia


de Fibonacci). A sequncia de Fibonacci {n }nN
assinttica a n 1 / 5 e:
n+1

n+1
lim
n
= 1 ,
n

onde 1 = (1 + 5)/2 1,618 a poro urea.
Demonstrao. A sequncia de Fibonacci {n }nN definida por 0 = 1 = 1 e
n+1 = n + n1 , n 1. Logo, satisfaz a seguinte equao de diferenas:
n+2 n+1 n = 0, n N.
Tomando n = n , 6= 0 temos:

  1 5
1 = 0 1 = 0 1,2 =
n 2 2
.
2
Portanto, n = c1 n1 + c2 n2 . Como 0 = 1 = 1, as constantes satisfazem:

c1 + c2 = 1 1+ 5 1 5
c1 = , c 2 = .
c1 1 + c2 2 = 1 2 5 2 5

Ou seja, obtemos a seguinte forma explcita para os nmeros de Fibonacci:


!n+1 !n+1
1 1+ 5 1 5
n = .
5 2 2
Da, segue imediatamente o enunciado.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


76 Clculo Numrico

Observao 3.5.1. Sob as hipteses do teorema 3.5.1 e da proposio 3.5.1, te-


mos:
|x(n+1) x | M (n)
lim lim |x x |11 |x(n1) x |
n |x(n) x |1 n 2m

2m 11 (21 )n1 /5
 
lim
n q = 0.
M
Isto mostra que o mtodo das secantes (nestas hipteses) tem taxa de convergncia
superlinear (1 1,6).

3.6 Critrios de parada


Quando usamos mtodos iterativos precisamos determinar um critrio de pa-
rada. A tabela 3.4 indica critrios de parada usuais para os mtodos que estudamos
neste captulo.

Tabela 3.4: Quadro comparativo.


Mtodo Convergncia Erro Critrio de parada
Linear 1 bn an
Bisseo n+1 =  < erro
(p = 1) 2 2

|n |
Iterao Linear < erro
n+1 | (x )|n0 1 n
n1
linear (p = 1) n < n1

Quadrtica 1 f 00 (x )

Newton n+1 0 2n |n | < erro
(p = 2) 2 f (x )


f 00 (x )

5+1 n+1 0 n n1
p = f (x )
Secante 2 |n | < erro
1,618 M n

Observao 3.6.1. O erro na tabela sempre se refere ao erro absoluto esperado.


Nos trs ltimos mtodos, comum que se exija como critrio de parada que a

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.7. EXERCCIOS FINAIS 77

condio seja satisfeita por alguns poucos passos consecutivos. Outros critrios
podem ser usados. No mtodos das secantes, deve-se ter o cuidado de evitar
divises por zero quando xn+1 xn muito pequeno em relao resoluo do
sistema de numerao.

Exerccios

E 3.6.1. Refaa as questes 3.4.3, 3.4.4, 3.4.5 e 3.4.6, usando o mtodo das
secantes.
E 3.6.2. D uma interpretao geomtrica ao mtodo das secantes. Qual a
vantagem do mtodo das secantes sobre o mtodo de Newton?

E 3.6.3. Aplique o mtodo das secantes para resolver a equao


2
ex = 2x

E 3.6.4. Refaa o problema 3.2.8 usando o mtodo de Newton e das secantes.

E 3.6.5. Seja uma funo f (x) dada duas vezes continuamente diferencivel.
Faa uma anlise assinttica para mostrar que as iteraes do mtodo das secantes
satisfazem:
|x(n+1) x | C|x(n) x ||x(n1) x |,
para aproximaes iniciais x(1) e x(2) suficientemente prximas de x , onde f (x ) =
0.

3.7 Exerccios finais

E 3.7.1. Calcule uma equao da reta tangente a curva y = e(x1) que passa
2

pelo ponto (3, 1/2).

E 3.7.2. Resolva numericamente a inequao:


2
ex < 2x

E 3.7.3. A equao
cos(x) = e2x
tem infinitas razes. Usando mtodos numricos encontre as primeiras razes dessa
equao. Verifique a j-sima raiz (zj ) pode ser aproximada por j 1/2 para j

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


78 Clculo Numrico

grande. Use o mtodo de Newton para encontrar uma aproximao melhor para
zj .

E 3.7.4. (Eletricidade) A corrente eltrica, I, em Ampres em uma lmpada


em funo da tenso eltrica, V , dada por
0.8
V

I=
150
Qual a potncia da lmpada quando ligada em srie com uma resistncia de valor
R a uma fonte de 150V quando. (procure erro inferior a 1%)

a) R = 0

b) R = 10

c) R = 50

d) R = 100

E) R = 500

E 3.7.5. (Bioqumica) A concentrao sangunea de um medicamente mo-


delado pela seguinte expresso

c(t) = Atet

onde t > 0 o tempo em minutos decorrido desde a administrao da droga. A


a quantidade administrada em mg/ml e a constante de tempo em min1 .
Responda:

a) Sendo = 1/3, em que instantes de tempo a concentrao metade do valor


mximo. Calcule com preciso de segundos.

b) Sendo = 1/3 e A = 100mg/ml, durante quanto tempo a concentrao


permanece maior que 10mg/ml.

E 3.7.6. Considere o seguinte modelo para crescimento populacional em um


pas:
P (t) = A + Bet .
onde t dado em anos. Use t em anos e t = 0 para 1960. Encontre os parmetros
A, B e com base nos anos de 1960, 1970 e 1991 conforme tabela:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.7. EXERCCIOS FINAIS 79

Ano populao
1960 70992343
1970 94508583
1980 121150573
1991 146917459
Use esses parmetros para calcular a populao em 1980 e compare com o valor
do censo. Dica: considere PP (31)P (0)
(10)P (0)
e reduza o sistema a uma equao apenas na
varivel .

E 3.7.7. (Fluidos) Uma boia esfrica flutua na gua. Sabendo que a boia tem
10` de volume e 2Kg de massa. Calcule a altura da poro molhada da boia.

E 3.7.8. (Fluidos) Uma boia cilndrica tem seco transversal circular de raio
10cm e comprimento 2m e pesa 10Kg. Sabendo que a boia flutua sobre gua com
o eixo do cilindro na posio horizontal, calcule a altura da parte molhada da boia.

E 3.7.9. Encontre com 6 casas decimais o ponto da curva y = ln x mais


prximo da origem.

E 3.7.10. (Matemtica financeira) Um computador vendido pelo valor a


vista de R$2.000,00 ou em 1+15 prestaes de R$200,00. Calcule a taxa de juros
associada venda a prazo.

E 3.7.11. (Matemtica financeira) O valor de R$110.000,00 financiado con-


forme a seguinte programa de pagamentos:
Ms pagamento
1 20.000,00
2 20.000,00
3 20.000,00
4 19.000,00
5 18.000,00
6 17.000,00
7 16.000,00
Calcule a taxa de juros envolvida. A data do emprstimo o ms zero.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


80 Clculo Numrico

E 3.7.12. (Controle de sistemas) Depois de acionado um sistema de aquece-


dores, a temperatura em um forno evolui conforme a seguinte equao

T (t) = 500 800et + 600et/3 .

onde T a temperatura em Kelvin e t tempo em horas.


a) Obtenha analiticamente o valor de limt T (t).

b) Obtenha analiticamente o valor mximo de T (t) e o instante de tempo


quando o mximo acontece

c) Obtenha numericamente com preciso de minutos o tempo decorrido at que


a temperatura passe pela primeira vez pelo valor de equilbrio obtido no item
a.

c) Obtenha numericamente com preciso de minutos a durao do perodo du-


rante o qual a temperatura permanece pelo menos 20% superior ao valor de
equilbrio.

x2
E 3.7.13. Encontre os pontos onde a elipse que satisfaz 3
+ y 2 = 1 intersepta
a parbola y = x2 2.

E 3.7.14. (Otimizao) Encontre a rea do maior retngulo que possvel


inscrever entre a curva ex (1 + cos(x)) e o eixo y = 0.
2

E 3.7.15. (Otimizao)Uma indstria consome energia eltrica de duas usinas


fornecedoras. O custo de fornecimento em reais por hora como funo da potncia
consumida em kW dada pelas seguintes funes

C1 (x) = 500 + .27x + 4.1 105 x2 + 2.1 107 x3 + 4.2 1010 x4


C2 (x) = 1000 + .22x + 6.3 105 x2 + 8.5 107 x3

Onde C1 (x) e C2 (x) so os custos de fornecimento das usinas 1 e 2, respectivamente.


Calcule o custo mnimo da energia eltrica quando a potncia total consumida
1500kW . Obs: Para um problema envolvendo mais de duas usinas, veja 5.1.12.

E 3.7.16. (Termodinmica) A presso de saturao (em bar) de um dado


hidrocarboneto pode ser modelada pela equao de Antoine:
  B
ln P sat = A
T +C
onde T a temperatura e A, B e C so constantes dadas conforme a seguir:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


3.7. EXERCCIOS FINAIS 81

Hidrocarboneto A B C
N-pentano 9.2131 2477.07 -39.94
N-heptano 9.2535 2911.32 -56.51

a) Calcule a temperatura de bolha de uma mistura de N-pentano e N-heptano


presso de 1.2bar quando as fraes molares dos gases so z1 = z2 = 0.5.
Para tal utilize a seguinte equao:

P = zi Pisat
X

b) Calcule a temperatura de orvalho de uma mistura de N-pentano e N-heptano


presso de 1.2bar quando as fraes molares dos gases so z1 = z2 = 0.5.
Para tal utilize a seguinte equao:
1 X zi
= sat
P i Pi

E 3.7.17. Encontre os trs primeiros pontos de mnimo da funo

f (x) = ex/11 + x cos(2x)

para x > 0 com erro inferior a 107 .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 4

Soluo de sistemas lineares

Muitos problemas da engenharia, fsica e matemtica esto associados soluo


de sistemas de equaes lineares. Nesse captulo, tratamos de tcnicas numricas
empregadas para obter a soluo desses sistemas. Iniciamos por uma rpida re-
viso do mtodo de eliminao gaussiana do ponto de vista computacional. No
contexto de anlise da propagao dos erros de arredondamento, introduzimos o
mtodo de eliminao gaussiana com pivotamento parcial, bem como, apresen-
tamos o conceito de condicionamento de um sistema linear. Ento, passamos a
discutir sobre tcnicas iterativos, mais especificamente, sobre os mtodos de Jacobi
e Gauss-Seidel.
Considere o sistema de equaes lineares:

a11 x1 + a12 x2 + + a1n xn = b1


a21 x1 + a22 x2 + + a2n xn = b2
..
.
am1 x1 + am2 x2 + + amn xn = bm

onde m o nmero de equaes e n o nmero de incgnitas. Este sistema pode


ser escrito na forma matricial:
Ax = b

onde:

a11 a12 a1n x1 b1

a21

a22 a2n x2

b

A= ,x = e b = 2

. .. .. ...
.. .

.. . . . ..



am1 am2 amn xn bm

82
4.1. ELIMINAO GAUSSIANA 83

Definimos tambm a matriz completa de uma sistema como Ax = b como [A|b],


isto :
a11 a12 a1n b1


a21 a22 a2n b2
[A|b] =

.. .. ... .. ..

. . . .




am1 am2 amn bm
Salvo especificado ao contrrio, assumiremos ao longo deste captulo que a
matriz dos coeficientes A uma matriz real no singular.
Ao longo do captulo, apresentamos algumas computaes com Python. Nestas,
estaremos assumindo que a biblioteca numpy e seu mdulo numpy.linalg esto
carregados:

>>> from __future__ import division


>>> import numpy as np
>>> from numpy import linalg

4.1 Eliminao gaussiana


A eliminao gaussiana, tambm conhecida como escalonamento, um
mtodo para resolver sistemas lineares. Este mtodo consiste em manipular o
sistema atravs de determinadas operaes elementares, transformando a matriz
estendida do sistema em uma matriz triangular. Uma vez, triangularizado o sis-
tema, a soluo pode ser obtida via substituio regressiva. Naturalmente estas
operaes elementares devem preservar a soluo do sistema e consistem em:

1. multiplicao de um linha por uma constante no nula.

2. substituio de uma linha por ela mesma somada a um mltiplo de outra


linha.

3. permutao de duas linhas.

Exemplo 4.1.1. Resolva o sistema

x+y+z = 1
4x + 4y + 2z = 2
2x + y z = 0

pelo mtodo de eliminao gaussiana.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


84 Clculo Numrico

Soluo. A matriz estendida do sistema escrita como



1 1 1 1

4 4 2 2


2 1 1 0

No primeiro passo, subtramos da segunda linha o qudruplo da primeira e sub-


tramos da terceira linha o dobro da primeira linha:

1 1 1 1

0 0 2 2


0 1 3 1

No segundo passo, permutamos a segunda linha com a terceira:



1 1 1 1

0 1 3 1


0 0

2 2

Neste momento, a matriz j se encontra na forma triangular. Da terceira linha,


encontramos 2z = 21, ou seja, z = 1. Substituindo na segunda equao, temos
y 3z = 2, ou seja, y = 1 e finalmente, da primeira linha, x + y + z = 1,
resultando em x = 1.

4.1.1 Eliminao gaussiana com pivotamento parcial


A eliminao gaussiana com pivotamento parcial consiste em fazer uma
permutao de linhas de forma a escolher o maior piv (em mdulo) a cada passo.

Exemplo 4.1.2. Resolva o sistema

x+y+z = 1
2x + y z = 0
2x + 2y + z = 1

por eliminao gaussiana com pivotamento parcial.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.1. ELIMINAO GAUSSIANA 85

Soluo. A matriz estendida do sistema



1 1 1 1 2 1 1 0

2 1 1 0 1 1 1 1



2 2 1 1 2 2 1 1


2 1 1 0

0 1/2 3/2 1


0 1 2 1


2 1 1 0

0 1 2 1


0 1/2 3/2 1


2 1 1 0

0 1 2 1


0 0 1/2 1/2

Encontramos 1/2z = 1/2, ou seja, z = 1. Substitumos na segunda equao e


temos y + 2z = 1, ou seja, y = 1 e, finalmente 2x + y z = 0, resultando em
x = 1.
Em Python, podemos fazer estas computaes da seguinte forma:
E = np.array([[1,1,1,1],
[2,1,-1,0],
[2,2,1,1]], dtype='double')
print(E)

#L2 <-> L1
aux = np.copy(E[1,:])
E[1,:] = np.copy(E[0,:])
E[0,:] = np.copy(aux)
print(E)

#zera E[1:2,0]
E[1,:] = E[1,:] - (E[1,0]/E[0,0])*E[0,:]
E[2,:] = E[2,:] - (E[2,0]/E[0,0])*E[0,:]
print(E)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


86 Clculo Numrico

#zera E[2,1]
E[2,:] = E[2,:] - (E[2,1]/E[1,1])*E[1,:]
print(E)

#sub. regressiva
x = np.zeros(3)
x[2] = E[2,3]/E[2,2];
x[1] = (E[1,3] - E[1,2]*x[2])/E[1,1];
x[0] = (E[0,3] - E[0,2]*x[2] - E[0,1]*x[1])/E[0,0]
print(x)

A tcnica de eliminao gaussiana com pivotamento parcial ajuda a evitar a


propagao dos erros de arredondamento. Vejamos o prximo exemplo.

Exemplo 4.1.3 (Problema com elementos com grande diferena de escala). Re-
solva o seguinte sistema usando eliminao gaussiana sem e com pivotamento par-
cial. Discuta, em cada caso, o resultado frente a aritmtica de ponto flutuante
quando 0 < ||  1.

2 x 4

1 y 3

Soluo. Vamos, primeiramente, executar a eliminao gaussiana sem pivota-


mento parcial para 6= 0 e ||  1:

2 4 2 4



1 3 0 2

3 4

Temos
3 4/
y=
2/
e
4 2y
x=

Observe que a expresso obtida para y se aproximada de 2 quando pequeno:

3 4/ 3 4 4
y= = 2 = 2, quando 0.
2/ 2 2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.1. ELIMINAO GAUSSIANA 87

J expresso obtida para x depende justamente da diferena 2 y:

4 2y 2
x= = (2 y)

Assim, quando pequeno, a primeira expresso, implementado em um sis-


tema de ponto flutuante de acurcia finita, produz y = 2 e, consequentemente, a
expresso para x produz x = 0. Isto , estamos diante um problema de cancela-
mento catastrfico.
Agora, quando usamos a eliminao gaussiana com pivotamento parcial, faze-
mos uma permutao de linhas de forma a escolher o maior piv a cada passo:


2 4 1 3 1 3



1 3 2 4 0 2 2
4 3

Continuando o procedimento, temos:

4 4
y=
2 2

e
x = 3 y

Observe que tais expresses so analiticamente idnticas s anteriores, no en-


tanto, so mais estveis numericamente. Quando converge a zero, y converge
a 2, como no caso anterior. No entanto, mesmo que y = 2, a segunda expresso
produz x = 3 y, isto , a aproximao x 3 no depende mais de obter 2 y
com preciso.

Exerccios Resolvidos
ER 4.1.1. Resolva o sistema por eliminao gaussiana com pivotamento parcial.

0 2 2 x 8

1 2 1 y = 9



1 1 1 6

z

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


88 Clculo Numrico

Soluo. Construmos a matriz completa:



0 2 2 8 1 2 1 9

1 2 1 9 0 2 2 8




1 1 1 6 1 1 1 6


1 2 1 9

0 2 2 8



0 1 0 3


1 2 1 9

0 2 2 8



0 0 1 1


1 2 0 8

0 2 0 6



0 0 1 1


1 0 0 2

0 2 0 6



0 0 1 1

Portanto x = 2, y = 3 e z = 1.

Exerccios

E 4.1.1. Resolva o seguinte sistema de equaes lineares

x+y+z = 0
x + 10z = 48
10y + z = 25

Usando eliminao gaussiana com pivotamento parcial (no use o computador para
resolver essa questo).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.2. COMPLEXIDADE DE ALGORITMOS EM LGEBRA LINEAR 89

E 4.1.2. Resolva o seguinte sistema de equaes lineares

x+y+z = 0
x + 10z = 48
10y + z = 25

Usando eliminao gaussiana com pivotamento parcial (no use o computador para
resolver essa questo).

E 4.1.3. Calcule a inversa da matriz



1 2 1

A=
1 2 0


2 1 1

usando eliminao gaussiana com pivotamento parcial.

E 4.1.4. Demonstre que se ad 6= bc, ento a matriz A dada por:



a b
A=
c d

inversvel e sua inversa dada por:



1 d b
A1 = .
ad bc c

a

4.2 Complexidade de algoritmos em lgebra li-


near
Nesta seo, discutiremos um importante conceito em teoria de algoritmos, a
complexidade, isto , uma medida do custo ou eficincia do algoritmo.
Dados dois algoritmos diferentes para resolver o mesmo problema, como po-
demos escolher qual desses algoritmos o melhor? Se pensarmos em termos de
eficincia (ou custo computacional), queremos saber qual desses algoritmos con-
some menos recursos para realizar a mesma tarefa.
Em geral podemos responder essa pergunta de duas formas: em termos de
tempo ou de espao.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


90 Clculo Numrico

Quando tratamos de eficincia espacial, queremos saber quanta memria (em


geral RAM) utilizada pelo algoritmo para armazenar os dados, sejam matrizes,
vetores ou escalares.
Quando tratamos de eficincia temporal, queremos saber quanto tempo um
algoritmo leva para realizar determinada tarefa. Vamos nos concentrar nessa se-
gunda opo, que em geral a mais difcil de ser respondida.
Obviamente o tempo vai depender do tipo de computador utilizado. razovel
de se pensar que o tempo vai ser proporcional ao nmero de operaes de ponto
flutuante (flops) feito pelo algoritmo (observe que o tempo total no depende
apenas disso, mas tambm de outros fatores como memria, taxas de transferncias
de dados da memria para o cpu, redes,...). Entretanto vamos nos concentrar na
contagem do nmero de operaes (flops) para realizar determinada tarefa.
No passado (antes dos anos 80), os computadores demoravam mais tempo
para realizar operaes como multiplicao e diviso, se comparados a adio ou
subtrao. Assim, em livros clssicos eram contados apenas o custo das operaes
e /. Nos computadores atuais as quatro operaes bsicas levam o mesmo
tempo. Entretanto, na maioria dos algoritmos de lgebra linear o custo associado
as multiplicaes e divises proporcional ao custo das somas e subtraes (pois
a maioria dessas operaes podem ser escritas como a combinao de produtos
internos). Dessa forma, na maior parte deste material levaremos em conta somente
multiplicaes e divises, a no ser que mencionado o contrrio.
Teremos em mente que a ideia estimar o custo quando lidamos com vetores
e matrizes muito grande, isto , o custo quanto estas dimenses crescem infinita-
mente.
Exemplo 4.2.1 (Produto escalar-vetor). Qual o custo para multiplicar um escalar
por um vetor?
Soluo. Seja a R e x Rn , temos que

x = [a x1 , a x2 , ...,a xn ]
ax (4.1)

usando n multiplicaes, ou seja, um custo computacional, C, de

C = n flops. (4.2)


Exemplo 4.2.2 (Produto vetor-vetor). Qual o custo para calcular o produto in-
terno x y ?
Soluo. Sejam x , y Rn , temos que

x y = x1 y1 + x2 y2 + ... + xn yn (4.3)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.2. COMPLEXIDADE DE ALGORITMOS EM LGEBRA LINEAR 91

So realizadas n multiplicaes (cada produto xi por yi ) e n 1 somas, ou seja,


o custo total de operaes de

C := (n) + (n 1) = 2n 1 flops (4.4)


Exemplo 4.2.3 (Produto matriz-vetor). Qual o custo para calcular o produto de
matriz por vetor Ax
x?
Soluo. Sejam A Rnn e x Rn , temos que

a11 a12 a1n x1 a11 x1 + a12 x2 + ... + a1n xn
.. .. . ..
. .. =

.

.

(4.5)

an1 x1 + an2 x2 + ... + ann xn

an1 ann xn

Para obter o primeiro elemento do vetor do lado direito devemos multiplicar


a primeira linha de A pelo vetor coluna x . Note que esse exatamente o custo
do produto vetor-vetor do exemplo anterior. Como o custo para cada elemento do
vetor do lado direito o mesmo e temos n elementos, teremos que o custo para
multiplicar matriz-vetor 1

C := n (2n 1) = 2n2 n flops. (4.7)

A medida que n , temos

O(2n2 n) = O(2n2 ) = O(n2 ) flops. (4.8)


Exemplo 4.2.4 (Produto matriz-matriz). Qual o custo para calcular o produto
de duas matrizes AB?
Soluo. Sejam A, B Rnn temos que

a11 a12 a1n b11 b12 a1n c11 c12 c1n
.. .. .. .. . ..
= ..

. . . .

.

(4.9)


an1 ann bn1 bnn cn1 cnn
1
Contando apenas multiplicaes/divises obtemos

n O(n) = O(n2 ) flops. (4.6)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


92 Clculo Numrico

onde o elemento dij o produto da linha i de A pela coluna j de B,


dij = ai1 b1j + ai2 b2j + ... + ai2 b2j (4.10)
Note que esse produto tem o custo do produto vetor-vetor, ou seja, 2n 1. Como
temos n n elementos em D, o custo total para multiplicar duas matrizes 2
C = n n (2n 1) = 2n3 n2 flops. (4.12)

4.3 Sistemas triangulares


Considere um sistema linear onde a matriz triangular superior, ou seja,

a11 a12 a1n x1 b1

0 a22 a2n x2 b

= 2
. . . .
. ...

.. .. . . .. ..


0 ... 0 ann xn bn

tal que todos elementos abaixo da diagonal so iguais a zero.


Podemos resolver esse sistema iniciando pela ltima equao e isolando xn
obtemos
xn = bn /ann (4.13)
Substituindo xn na penltima equao
an1,n1 xn1 + an1,n xn = bn1 (4.14)
e isolando xn1 obtemos
xn1 = (bn1 an1,n xn )/an1,n1 (4.15)
e continuando desta forma at a primeira equao obteremos
x1 = (b1 a12 x2 a1n xn )/a11 . (4.16)
De forma geral, temos que
xi = (bi ai,i+1 xi+1 ai,n xn )/ai,i , i = 2, . . . ,n. (4.17)
2
Contando apenas e / obtemos
n n (n) = n3 flops. (4.11)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.4. FATORAO LU 93

4.4 Fatorao LU
Considere um sistema linear Ax = b, onde a matriz A densa3 . A fim de
resolver o sistema, podemos fatorar a matriz A como o produto de uma matriz L
triangular inferior e uma matriz U triangular superior, ou seja, A = LU .
Sendo assim, o sistema pode ser reescrito da seguinte forma:

Ax = b
(LU )x = b
L(U x) = b
Ly = b e Ux = y

Isto significa que, ao invs de resolvermos o sistema original, podemos resolver o


sistema triangular inferior Ly = b e, ento, o sistema triangular superior U x = y,
o qual nos fornece a soluo de Ax = b.
A matriz U da fatorao4 LU a matriz obtida ao final do escalonamento da
matriz A.
A matriz L construda a partir da matriz identidade I, ao longo do escalona-
mento de A. Os elementos da matriz L so os mltiplos do primeiro elemento da
linha de A a ser zerado dividido pelo piv acima na mesma coluna.
Por exemplo, para zerar o primeiro elemento da segunda linha de A, calculamos

L21 = A21 /A11

e fazemos
A2,: A2,: L21 A1,:
Note que denotamos Ai,: para nos referenciarmos a linha i de A. Da mesma
forma, se necessrio usaremos A:,j para nos referenciarmos a linha j de A.
Para zerar o primeiro elemento da terceira linha de A, temos

L31 = A31 /A11

e fazemos
A3,: A3,: L31 A1,:
at chegarmos ao ltimo elemento da primeira coluna de A.
Repetimos o processo para as prximas colunas, escalonando a matriz A e
coletando os elementos Lij abaixo da diagonal5 .
3
Diferentemente de uma matriz esparsa, uma matriz densa possui a maioria dos elementos
diferentes de zero.
4
No vamos usar pivotamento nesse primeiro exemplo.
5
Perceba que a partir da segunda coluna para calcular Lij no usamos os elementos de A,
mas os elementos da matriz A em processo de escalonamento

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


94 Clculo Numrico

Exemplo 4.4.1. Use a fatorao LU para resolver o seguinte sistema linear:

x1 + x2 + x3 = 2
2x1 + x2 x3 = 1
2x1 x2 + x3 = 3

Soluo. Comeamos fatorando a matriz A dos coeficientes deste sistema:



1 1 1 1 0 0 1 1 1

A= 2 1 1 . = 0 1 0
2 1 1



2 1 1 0 0 1 2 1 1

| {z }| {z }
I3,3 A

1 0 0 1 1 1

= 2 1 0
0 1 3



2 0 1 0 3 1


1 0 0 1 1 1

= 2 1 0
0 1 3



2 3 1 0 0 8

| {z }| {z }
L U

Completada a fatorao LU, resolvemos, primeiramente, o sistema Ly = b:

y1 = 2
2y1 + y2 = 1
2y1 + 3y2 + y3 = 3

o qual no fornece y1 = 2, y2 = 5 e y3 = 8. Por fim, obtemos a soluo


resolvendo o sistema U x = y:

x1 + x2 + x3 = 2
x2 3x3 = 5
8x3 = 8

o qual fornece x3 = 1, x2 = 2 e x1 = 1.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.4. FATORAO LU 95

4.4.1 Cdigo Python: Fatorao LU


Em Python, podemos implementar o algoritmo para fatorao LU da seguinte
forma:
def fatoraLU(A):
U = np.copy(A)
n = np.shape(U)[0]
L = np.eye(n)
for j in np.arange(n-1):
for i in np.arange(j+1,n):
L[i,j] = U[i,j]/U[j,j]
for k in np.arange(j+1,n):
U[i,k] = U[i,k] - L[i,j]*U[j,k]
U[i,j] = 0
return L, U
Observao 4.4.1. O custo computacional do algoritmo da fatorao LU
2n3 n2 n
flops.
3 2 6

4.4.2 Custo computacional para resolver um sistema linear


usando fatorao LU
Para calcularmos o custo computacional de um algoritmo completo, uma es-
tratgia separar o algoritmo em partes menores mais fceis de calcular.
Para resolver o sistema, devemos primeiro fatorar a matriz A nas matrizes L e
U . Vimos que o custo
2n3 n2 n
flops.
3 2 6
Depois devemos resolver os sistemas Ly = b e U x = y. O custo de resolver os
dois sistemas (devemos contar duas vezes)

2n2 flops.

Somando esses 3 custos, temos que o custo para resolver um sistema linear
usando fatorao LU
2n3 3n2 n
+ flops.
3 2 6
Quando n cresce, prevalessem os termos de mais alta ordem, ou seja,
2n3 3n2 n 2n3 3n2 2n3
O( + ) = O( + ) = O( )
3 2 6 3 2 3
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
96 Clculo Numrico

4.4.3 Custo para resolver m sistemas lineares


Devemos apenas multiplicar m pelo custo de resolver um sistema linear usando
fatorao LU , ou seja, o custo ser

2n3 3n2 n 2mn3 3mn2 mn


m( + )= +
3 2 6 3 2 6
e com m = n temos
2n4 3n3 n2
+ .
3 2 6
Porm, se estivermos resolvendo n sistemas com a mesma matriz A (e diferente
lado direito b para cada sistema) podemos fazer a fatorao LU uma nica vez e
contar apenas o custo de resolver os sistemas triangulares obtidos.
3 2
Custo para fatorao LU de A: 2n3 n2 n6 .
Custo para resolver m sistemas triangulares inferiores: mn2 .
Custo para resolver m sistemas triangulares superiores: mn2 .
Somando esses custos obtemos
2n3 n2 n
+ 2mn2
3 2 6
que quando m = n obtemos

8n3 n2 n
flops.
3 2 6

4.4.4 Custo para calcular a matriz inversa de A


Como vemos em lgebra Linear, um mtodo para obter a matriz A1 realizar
o escalonamento da matriz [A|I] onde I a matriz identidade. Ao terminar o
escalonamento, o bloco do lado direito conter A1 .
Isto equivalente a resolver n sistemas lineares com a mesma matriz A e os
vetores da base cannica e i = [0,...,0,1,0,....0]T tal que

xi = e i ,
Ax i=1:n

onde x i sero as colunas da matriz A inversa, j que AX = I.


O custo para resolver esses n sistemas lineares foi calculado na seo anterior
como
8n3 n2 n
.
3 2 6
Exemplo 4.4.2. Qual o melhor mtodo para resolver um sistema linear: via
fatorao LU ou calculando a inversa de A e obtendo x = A1 b?

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.5. MTODO DA MATRIZ TRIDIAGONAL 97

4.5 Mtodo da matriz tridiagonal


O mtodo da matriz tridiagonal ou algoritmo de Thomas6 ou ainda TDMA (do
ingls tridiagonal matrix algorithm) o caso particular da eliminao gaussiana
aplicada a matrizes tridiagonais.
Uma matriz tridiagonal uma matrix quadrada cujos nicos elementos no
nulas esto na diagonal principal e nas diagonais imediatamente acima e abaixo
da principal. Um sistema tridiagonal um sistema de equaes lineares cuja matriz
associada tridiagonal, conforme a seguir:

b1 c1 x1 d1

a2 b2 c2 x2 d2

.

b3 . . = (4.18)

a3 x d .
3 3
... ... .. ..

.
.


cn1


an bn xn dn

Observamos que no necessrio armazenar todos os n2 elementos da matriz


em memria, sendo suficiente armazenar os vetores an , bn e cn . Por convenincia,
a partir daqui, definiremos os elementos inexistentes na matriz a1 e cn como zero:

a1 = cn = 0.

O algoritmo para a soluo do sistema tridiagonal (4.18) pelo algoritmo de


Thomas dada pelas seguintes expresses:

ci , i=1
c0i = bi
(4.19)
ci
bi ai c0i1
, i = 2, 3, . . . , n 1
e
i=1

di ,
bi
d0i = di ai d0i1 (4.20)
bi ai c0i1
, i = 2, 3, . . . , n.

Finalmente a soluo final obtida por substituio reversa:

xn = d0n (4.21)
xi = d0i c0i xi+1 , i = n 1, n 2, . . . , 1. (4.22)

Teorema 4.5.1. A aplicao da eliminao gaussiana sem pivotamento ao sistema


(4.18) produz o algoritmo dado em (4.19) e (4.21)
6
Llewellyn Hilleth Thomas (21 de outubro de 1903 20 de april de 1992) foi um matemtico
e fsico britnico.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


98 Clculo Numrico

Demonstrao. O primeiro passo consiste em dividir todos os elementos da pri-


meira linha de (4.18) por b1 :


1 c01 0
x1 d1

a2 b2 c2 x2 d2

.

b3 . . =

a3 x d ,
3 3
... ... .. ..

.
.


cn1


an bn xn dn

onde c01 = cb11 e d01 = db11 .


O segundo passo consiste em substituir a segunda linha por ela mesma subs-
trada da linha 1 multiplicada por a2 (l2 l2 a2 l1 ):

1 c01 x1 d01

0 b2 a2 c01 c2 x2 d2 a2 d01

.

b3 . . =

a3 x d3 .
3
.. .. .. ..

. . . .


cn1




an bn xn dn

Em seguida, dividimos a segunda linha por b2 a2 c01 , a fim de normalizar a diagonal


principal:

1 c01 0
x1 d1

0 1 c02
0
x2 d2

.

b3 . . =

a3 x d .
3 3
.. .. .. ..

. . .
.


cn1


an bn xn dn

d2 a2 d01
onde c02 = c2
b2 a2 c01
e d02 = b2 a2 c01
.
O prximo passo consiste em substituir a terceira linha por ela mesma subs-

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.5. MTODO DA MATRIZ TRIDIAGONAL 99

trada da linha 2 multiplicada por a3 (l3 l3 a3 l2 ):



1 c01 x1 d01

0 1 c02 x2 d02


.

0 b3 a3 c02 . . =

0.


x
3
d
3 a3 d 2
.. .. .. ..

. . . .


cn1




an bn xn dn
A fim de normalizar o elemento da diagonal da terceira linha, dividimos toda a
linha por d3 a3 d02 :

1 c01 0
x1 d1

0 1 c02
0
x2 d2

..

0 1 . =

x d0 .
3 3
.. .. .. ..

. . .
.


cn1


an bn xn dn
Este procedimento realizado at que se atinja a ltima linha e temos o seguinte
sistema:

1 c01 0
x1 d1

0 1 c02
0
x2 d2

..

0 1 . =

x d0 .
3 3
... ... .. ..

.
c0n1 .




0 1 xn d0n
Neste estgio, podemos encontrar os xn atravs de substituio reversa, isto :
a ltima linha diz
xn = d0n .
A penltima linha diz
xn1 + c0n1 xn = d0n1 = xn1 = d0n1 c0n1 xn .
Esse mesmo procedimento aplicada linha i = 1, . . . n 1, nos d
xi = d0i c0i xi+1 .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


100 Clculo Numrico

Exemplo 4.5.1. Considere a resoluo do seguinte sistema tridiagonal pelo algo-


ritmo de Thomas:

2 1 0 0 0 x1 4

1 2 1 0 0 x 4

2
0 1 2 1 0 = 0 . (4.23)

x3



0 0 1 2 1 0

x4



0 0 0 1 2 x5 2

Primeiramente identificamos os vetores a, b, c e d:

a = (0, 1, 1, 1, 1)
b = (2, 2, 2, 2, 2)
c = (1, 1, 1, 1, 0)
d = (4, 4, 0, 0, 2)

Agora, calculamos os vetores c0 e d0 :


c1 1
c01 = =
b1 2
c2 1 2
c02 = = =
b2 a2 c01 21 2
1
3
c3 1 3
c03 = = =
b3 a3 c02 21 3
2
4
c4 1 4
c04 = = 3 =
0
b 4 a4 c 3 21 4 5
d1 4
d01 = = =2
b1 2
d2 a2 d01 412 4
d02 = = 1 =
b2 a2 c1 0
21 2 3
d3 a3 d02 0 1 43
d03 = = = 1
b3 a3 c02 2 1 32
d4 a4 d03 0 1 (1) 4
d04 = = =
b4 a4 c30
21 4 3
5
d5 a5 d04 21 4
d05 = = 5
=1
0
b5 a5 c4 21 4
5

Finalmente, calculamos o vetor x:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.5. MTODO DA MATRIZ TRIDIAGONAL 101

x5 = d05 = 1
4 4
x4 = d04 c04 x5 = 1=0
5 5
3
x3 = d03 c03 x4 = 1 0 = 1
4
4 2
x2 = d02 c02 x3 = (1) = 2
3 3
1
x1 = d01 c01 x2 = 2 2 = 1
2
E assim, obtemos o vetor x = [1, 2, 1, 0, 1].

Cdigo Python: Mtodo da matriz tridiagonal


import numpy as np

def TDMA(a,b,c,d):
#preliminares
a = a.astype('double')
b = b.astype('double')
c = c.astype('double')
d = d.astype('double')

#recupera ordem do sistema


n=np.shape(a)[0]

#inicializa vetores auxiliares


cl=np.zeros(n)
dl=np.zeros(n)
x=np.zeros(n)

#calcula cl e dl
cl[0]=c[0]/b[0]
for i in np.arange(1,n-1,1):
cl[i]=c[i]/(b[i]-a[i]*cl[i-1])

dl[0]=d[0]/b[0]
for i in np.arange(1,n,1):
dl[i]=(d[i]-a[i]*dl[i-1])/(b[i]-a[i]*cl[i-1])

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


102 Clculo Numrico

#faz substituicao reversa para obter a solucao x


x[n-1]=dl[n-1]
for i in np.arange(n-2,-1,-1):
x[i]=dl[i]-cl[i]*x[i+1]

return x

Nesse cdigo, usou-se cl e dl para denotar c0 e d0 . Observe que se for desne-


cessrio preservar os valores originais dos vetores c e d, eles podem, com economia
de memria e simplicidade de cdigo, ser sobrescritos pelos vetores c0 e d0 , respec-
tivamente. Eis uma nova implementao:

import numpy as np

def TDMA(a,b,c,d):
#preliminares
a = a.astype('double')
b = b.astype('double')
c = c.astype('double')
d = d.astype('double')

#recupera ordem do sistema


n=np.shape(a)[0]

#inicializa vetor x
x=np.zeros(n)

#calcula cl e dl sobrescrevendo-os em c e d
c[0]=c[0]/b[0]
for i in np.arange(1,n-1,1):
c[i]=c[i]/(b[i]-a[i]*c[i-1])

d[0]=d[0]/b[0]
for i in np.arange(1,n,1):
d[i]=(d[i]-a[i]*d[i-1])/(b[i]-a[i]*c[i-1])

#faz substituicao reversa para obter a solucao x


x[n-1]=d[n-1]

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.5. MTODO DA MATRIZ TRIDIAGONAL 103

for i in np.arange(n-2,-1,-1):
x[i]=d[i]-c[i]*x[i+1]

return x

A soluo do sistema do exemplo 4.5.1 pode ser obtida atravs do seguintes


comandos:

>>>a=np.array([1,1,1,1,1])
>>>b=np.array([2,2,2,2,2])
>>>c=np.array([1,1,1,1,1])
>>>d=np.array([4,4,0,0,2])
>>>TDMA(a,b,c,d)

E 4.5.1. Considere o problema linear tridiagonal dado por




5 4 0 0 0 0 x1 13

1 3 1 0 0 0 x 10

2

0 2 4 1 0 0 20

x3

= . (4.24)


0 0 1 2 1 0 x 16

4
0 0 0 2 3 2 35

x5



0 0 0 0 1 2 x6 17

Identifique os vetores a, b, c e d relativos ao algoritmo da matriz tridiagonal.


Depois resolva o sistema usando o computador.

E 4.5.2. Considere o seguinte sistema de equaes lineares:

x1 x2 = 0
xj1 + 5xj xj+1 = cos(j/10), 2 j 10
x11 = x10 /2 (4.25)

Identifique os vetores a, b, c e d relativos ao algoritmo da matriz tridiagonal no


sistema linear dado. Depois resolva o sistema usando o computador. Veja tambm
exerccio 4.7.4

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


104 Clculo Numrico

4.6 Condicionamento de sistemas lineares


Quando lidamos com matrizes no corpo do nmeros reais (ou complexos), exis-
tem apenas duas alternativas: i) a matriz inversvel; ii) a matriz no invers-
vel e, neste caso, chamada de matriz singular. Ao lidarmos em aritmtica de
preciso finita, encontramos uma situao mais sutil: alguns problema lineares
so mais difceis de serem resolvidos, pois os erros de arredondamento se propa-
gam de forma mais significativa que em outros problemas. Neste caso falamos de
problemas bem-condicionados e mal-condicionados. Intuitivamente falando, um
problema bem-condicionado um problema em que os erros de arredondamento
se propagam de forma menos importante; enquanto problemas mal-condicionados
so problemas em que os erros se propagam de forma mais relevante.
Um caso tpico de sistema mal-condicionado aquele cujos coeficiente esto
muito prximos ao de um problema singular. Considere o seguinte exemplo:
Exemplo 4.6.1. Observe que o sistema

71 41 x 100
=
(4.26)
30 y 70

impossvel quando = 7130


41
51,95122.
Considere os prximos trs sistemas:

71 41 x 100 10/3
a)
= , com soluo ,
51 30 y 70 10/3

71 41 x 100 65
b) = , com soluo ,
52 30 y 70 115

71 41 x 100,4 85,35
c)
= , com soluo .
52 30 y 69,3 150,25

Pequenas variaes nos coeficientes das matrizes fazem as solues ficarem bem
distintas, isto , pequenas variaes nos dados de entrada acarretaram em grandes
variaes na soluo do sistema. Quando isso acontece, dizemos que o problema
mal-condicionado.
Precisamos uma maneira de medir essas variaes. Como os dados de entrada
e os dados de sada so vetores (ou matrizes), precisamos introduzir as definies
de norma de vetores e matrizes.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.6. CONDICIONAMENTO DE SISTEMAS LINEARES 105

4.6.1 Norma de vetores


Definimos a norma Lp , 1 p , de um vetor em v = (v1 , v2 , . . . , vn ) Rn
por:
n
!1/p
1/p
kvkp := p
= (|v1 |p + |v2 |p + + |vn |p ) , 1 p < .
X
|vi |
i=1

Para p = , definimos a norma L (norma do mximo) por:

kvk = max {|vj |}.


1jn

Proposio 4.6.1 (Propriedades de normas). Sejam dados R um escalar e os


vetores u,v Rn . Ento, para cada 1 p , valem as seguintes propriedades:
a) kukp = 0 u = 0.

b) kukp = || kukp .

c) ku + vkp kukp + kvkp (desigualdade triangular).

d) kukp kuk quando p .


Demonstrao. Demonstramos cada item em separado.
a) Se u = 0, ento segue imediatamente da definio da norma Lp , 1 p ,
que kukp = 0. Reciprocamente, se kuk = 0, ento, para cada i = 1, 2, . . . , n,
temos:
|ui | max {|uj |} = kuk = 0 ui = 0.
1jn

Isto , u = 0. Agora, se kukp = 0, 1 p < , ento:


n
0 = kukpp := |ui |p n kuk kuk = 0.
X

i=1

Logo, pelo resultado para a norma do mximo, conclumos que u = 0.

b) Segue imediatamente da definio da norma Lp , 1 p .

c) Em construo ...

d) Em construo ...

Exemplo 4.6.2. Calcule a norma L1 , L2 e L do vetor coluna v = (1, 2, 3, 0).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


106 Clculo Numrico

Soluo.
kvk1 = 1 + 2 + 3 + 0 = 6

kvk2 = 1 + 22 + 32 + 02 = 14
kvk = max{1,2,3,0} = 3

4.6.2 Norma de matrizes


Definimos a norma induzida Lp de uma matriz A = [ai,j ]n,n
i,j=1 da seguinte forma:

kAkp = sup kAvkp ,


kvkp =1

ou seja, a norma p de uma matriz o mximo valor assumido pela norma de Av


entre todos os vetores de norma unitria.
Temos as seguintes propriedades, se A e B so matrizes, I a matriz identidade,
v um vetor e um real (ou complexo):
kAkp = 0 A = 0
kAkp = || kAkp
kA + Bkp kAkp + kBkp (desigualdade do tringulo)
kAvkp kAkp kvkp
kABkp kAkp kBkp
kIkp = 1
1 = kIkp = kAA1 kp kAkp kA1 kp (se A inversvel)
Casos especiais:
n
n
kAk1 = max
X
|Aij |
j=1
i=1
q
kAk2 = max{|| : (AA )}
n
n
kAk = max
X
|Aij |
i=1
j=1

onde (M ) o conjunto de autovalores da matriz M .


Exemplo 4.6.3. Calcule as normas 1, 2 e da seguinte matriz:

3 5 7

A= 1 2 4



1

8 7

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.6. CONDICIONAMENTO DE SISTEMAS LINEARES 107

Soluo.

kAk1 = max{12, 8, 18} = 18


kAk = max{15, 7, 16} = 16
q
kAk2 = max{0,5865124, 21,789128, 195,62436} = 13,98657

Em Python podemos computar normas Lp s de matrizes usando a funo


numpy.linalg.norm. Neste exemplo, temos:

>>> A = np.array([[3,-5,7],
... [1,-2,4],
... [-8,1,-7]], dtype='double')
>>> np.linalg.norm(A,1)
18
>>> np.linalg.norm(A,np.inf)
16
>>> np.linalg.norm(A,2)
13.986577820518308

4.6.3 Nmero de condicionamento


O condicionamento de um sistema linear um conceito relacionado forma
como os erros se propagam dos dados de entrada para os dados de sada. No
contexto de um sistema linear Ax = y, temos que a soluo x depende dos dados
de entrada y. Consideremos, ento, o problema

A(x + x ) = y + y

Aqui, x representa uma variao (erro) em x e y representa uma variao em y


(erro). Temos:
Ax + Ax = y + y

e, portanto,
Ax = y .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


108 Clculo Numrico

Queremos avaliar a razo entre o erro relativo em x e o erro relativo em y, i.e.


kx k / kxk kx k kyk
=
ky k /kyk kxk ky k
kA1 y k kAxk
=
kxk ky k
kA1 k ky k kAk kxk

kxk ky k
= kAk kA k1

Definio 4.6.1 (Nmero de condicionamento). O nmero de condicionamento


de uma matriz no-singular A
kp (A) := kAkp kA1 kp
Observao 4.6.1. O nmero de condicionamento depende da norma esco-
lhida.
O nmero de condicionamento da matriz identidade 1.
O nmero de condicionamento de qualquer matriz inversvel maior ou igual
a 1.
Exemplo 4.6.4. No Exemplo 4.6.1 estudamos a soluo de sistemas lineares com
as seguintes matrizes de coeficientes:

71 41 71 41
A1 = e A2 = .
51 30 52 30
Calcule os nmeros de condicionamento destes sistemas na norma Lp para p = 1,
2 e .
Soluo. Para a matriz A1 , temos:
k1 (A1 ) := kA1 kkA1
1 k 350,36,
k2 (A1 ) := kA2 kkA1
2 k 262,12,
k (A1 ) := kA kkA1 k 350,36.

Para a matriz A2 , temos:


k1 (A2 ) := kA1 k1 kA1
1 k1 6888,0,
k2 (A2 ) := kA1 k2 kA1
1 k2 5163,0,
k (A2 ) := kA1 k kA11 k 6888,0.

Em Python, podemos computar estes nmeros de condicionamento para a matriz


A1 com o seguinte cdigo:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.6. CONDICIONAMENTO DE SISTEMAS LINEARES 109

A = np.array([[71,41],[51,30]],dtype='double')
print(np.linalg.cond(A,p=1))
print(np.linalg.cond(A,p=2))
print(np.linalg.cond(A,p=np.inf))
e, anlogo para a matriz A2 .

Exerccios

E 4.6.1. Calcule o valor de para o qual o problema




71x + 41y = 10
x + 30y = 4

impossvel, depois calcule os nmeros de condicionamento com norma 1,2 e


quando = 51 e = 52.

E 4.6.2. Calcule o nmero de condicionamento da matriz



3 5 7

A= 1 2 4



1

8 7
nas normas 1, 2 e .

E 4.6.3. Calcule o nmero de condicionamento das matrizes



71 41

52 30
e
1 2 3

2 3 4



4 5 5

usando as normas 1,2 e .

E 4.6.4. Usando a norma 1, calcule o nmero de condicionamento da matriz



1 2
A=


2+ 4

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


110 Clculo Numrico

em funo de quando 0 < < 1. Interprete o limite 0.

E 4.6.5. Considere os sistemas:


100000x 9999.99y = 10
100000x 9999.99y = 9.999
e
9999.99x + 1000.1y = 1 9999.99x + 1000.1y = 1.01

Encontre a soluo de cada um e discuta.

E 4.6.6. Considere os vetores de 10 entradas dados por

(j/10)3
xj = sen (j/10), yj = j/10 zj = j/10 , j = 1, . . . ,10
6
Use o Pythonpara construir os seguintes vetores de erro:

|xj yj | |xj zj |
ej = fj =
|xj | xj

Calcule as normas 1, 2 e de e e f

4.7 Mtodos iterativos para sistemas lineares


Na seo anterior tratamos de mtodos diretos para a resoluo de sistemas
lineares. Em um mtodo direto (por exemplo, soluo via fatorao LU) obtemos
uma aproximao da soluo depois de realizarmos um nmero finito de operaes
(s teremos a soluo ao final do processo).
Veremos nessa seo dois mtodos iterativos bsicos para obter uma aproxi-
mao para a soluo de um sistema linear. Geralmente em um mtodo iterativo
iniciamos com uma aproximao para a soluo (que pode ser ruim) e vamos me-
lhorando essa aproximao atravs de sucessivas iteraes.

4.7.1 Mtodo de Jacobi


O mtodo de Jacobi pode ser obtido a partir do sistema linear

a11 x1 + a12 x2 + + a1n xn = y1


a21 x1 + a22 x2 + + a2n xn = y2
..
.
an1 x1 + an2 x2 + + ann xn = yn

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.7. MTODOS ITERATIVOS PARA SISTEMAS LINEARES 111

Isolando o elemento x1 da primeira equao temos


 
(k)
(k+1)
y1 a12 x2 + + a1n xn(k)
x1 = (4.27)
a11
(k)
Note que utilizaremos os elementos xi da iterao k (a direita da equao) para
estimar o elemento x1 da prxima iterao.
Da mesma forma, isolando o elemento xi de cada equao i, para todo i = 2,...,n
podemos construir a iterao
 
(k)
(k+1)
y1 a12 x2 + + a1n xn(k)
x1 =
a11
 
(k) (k)
(k+1)
y2 a21 x1 + a23 x3 + + a2n xn(k)
x2 =
a22
..
.  
(k) (k) (k)
y2 an1 x1 + + an,n2 xn2 + an,n1 xn1
x(k+1)
n =
ann
Em notao mais compacta, o mtodo de Jacobi consiste na iterao
x(1) = aproximao inicial

n
(k) (k)
=
X
xi yi aij xj /aii
j=1
j6=i

Exemplo 4.7.1. Resolva o sistema


10x + y = 23
x + 8y = 26
usando o mtodo de Jacobi iniciando com x(1) = y (1) = 0.
23 y (k)
x(k+1) =
10
26 x(k)
y (k+1) =
8
23 y (1)
x(2) = = 2,3
10
26 x(1)
y (2) = = 3,25
8
23 y (2)
x(3) = = 1,975
10
26 x(2)
y (3) = = 2,9625
8
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
112 Clculo Numrico

Cdigo Python: Mtodo de Jacobi

from __future__ import division


import numpy as np
from numpy import linalg

def jacobi(A,b,x0,tol,N):
#preliminares
A = A.astype('double')
b = b.astype('double')
x0 = x0.astype('double')

n=np.shape(A)[0]
x = np.zeros(n)
it = 0
#iteracoes
while (it < N):
it = it+1
#iteracao de Jacobi
for i in np.arange(n):
x[i] = b[i]
for j in np.concatenate((np.arange(0,i),np.arange(i+1,n))):
x[i] -= A[i,j]*x0[j]
x[i] /= A[i,i]
#tolerancia
if (np.linalg.norm(x-x0,np.inf) < tol):
return x
#prepara nova iteracao
x0 = np.copy(x)
raise NameError('num. max. de iteracoes excedido.')

4.7.2 Mtodo de Gauss-Seidel


Assim, como no mtodo de Jacobi, no mtodo de Gauss-Seidel tambm isola-
(k+1)
mos o elemento xi da equao i. Porm perceba que a equao para x2 depende
(k) (k+1)
de x1 na iterao k. Intuitivamente podemos pensar em usar x1 que acabou
de ser calculado e temos
 
(k+1) (k)
(k+1)
y2 a21 x1 + a23 x3 + + a2n xn(k)
x2 =
a22

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.7. MTODOS ITERATIVOS PARA SISTEMAS LINEARES 113

Aplicando esse raciocnio podemos construir o mtodo de Gauss-Seidel como


 
(k)
(k+1)
y1 a12 x2 + + a1n x(k)
n
x1 =
a11
 
(k+1) (k)
(k+1)
y2 a21 x1 + a23 x3 + + a2n xn(k)
x2 =
a22
..
.  
(k+1) (k+1)
y2 an1 x1 + + an(n1) xn1
x(k+1)
n =
ann
Em notao mais compacta, o mtodo de Gauss-Seidel consiste na iterao:

x(1) = aproximao inicial


Pi1 (k+1) Pn (k)
(k) yi j=1 aij xj j=i+1 aij xj
xi =
aii
Exemplo 4.7.2. Resolva o sistema

10x + y = 23
x + 8y = 26

usando o mtodo de Guass-Seidel iniciando com x(1) = y (1) = 0.

23 y (k)
x(k+1) =
10
26 x(k+1)
y (k+1) =
8
23 y (1)
x(2) = = 2,3
10
26 x(2)
y (2) = = 2,9625
8
23 y (2)
x(3) = = 2,00375
10
26 x(3)
y (3) = = 2,9995312
8

Cdigo Python: Mtodo de Gauss-Seidel


from __future__ import division
import numpy as np

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


114 Clculo Numrico

from numpy import linalg

def gauss_seidel(A,b,x0,tol,N):
#preliminares
A = A.astype('double')
b = b.astype('double')
x0 = x0.astype('double')

n=np.shape(A)[0]
x = np.copy(x0)
it = 0
#iteracoes
while (it < N):
it = it+1
#iteracao de Jacobi
for i in np.arange(n):
x[i] = b[i]
for j in np.concatenate((np.arange(0,i),np.arange(i+1,n))):
x[i] -= A[i,j]*x[j]
x[i] /= A[i,i]
print(x[i],A[i,i])
#tolerancia
if (np.linalg.norm(x-x0,np.inf) < tol):
return x
#prepara nova iteracao
x0 = np.copy(x)
raise NameError('num. max. de iteracoes excedido.')

4.7.3 Anlise de convergncia


Nesta seo, discutimos sobre a anlise de convergncia de mtodos iterativos
para soluo de sistema lineares. Para tanto, consideramos um sistema linear
Ax = b, onde A = [ai,j ]n,n
i,j=1 a matriz (real) dos coeficientes, b = (aj )j=1
n

um vetor dos termos constantes e x = (xj )j=1 o vetor incgnita. No decorrer,


n

assumimos que A uma matriz no singular.


Geralmente, mtodos iterativos so construdos como uma iterao de ponto
fixo. No caso de um sistema linear, reescreve-se a equao matricial em um pro-
blema de ponto fixo equivalente, isto :
Ax = b x = T x + c,
onde T = [ti,j ]n,n
i,j=1 chamada de matriz da iterao e c = (cj )j=1 de vetor
n

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.7. MTODOS ITERATIVOS PARA SISTEMAS LINEARES 115

da iterao. Construdos a matriz T e o vetor c, o mtodo iterativo consiste em


computar a iterao:
x(k+1) = T x(k) + c, n 1,
onde x(1) uma aproximao inicial dada.
Afim de construirmos as matrizes e os vetores de iterao do mtodo de Jacobi
e de Gauss-Seidel, decompomos a matriz A da seguinte forma:
A = L + D + U,
onde D a matriz diagonal D = diag (a11 , a22 , . . . , ann ), isto :

a11 0 0 0

0 a22 0 0



D := 0 0 0

a33 ,

.. .. .. . . ..

. . . . .




0 0 0 ann
e, respectivamente, L e U so as seguintes matrizes triangular inferior e superior:

0 0 0 0 0 a12 a13 a1n

a21 0 0 0 0 0 a23 a2n


L := 0 0 U := 0 0 0 a3n

, .
a a32
31
.. .. .. ... .. .. .. .. . . ..

.
. . .
.
. . . .

an1 an2 an3 0 0 0 0 0
Exemplo 4.7.3. Considere o seguinte sistema linear:
3x1 + x2 x3 = 2
x1 4x2 + x3 = 10
x1 2x2 5x3 = 10
Escreva o sistema na sua forma matricial Ax = b identificando a matriz dos coefi-
cientes A, o vetor incgnita x e o vetor dos termos constantes b. Em seguida, faa
a decomposio A = L + D + U .
Soluo. A forma matricial deste sistema Ax = b, onde:

3 1 1 x1 2

A= 1 4 1 , x= x2 e b= 10 .


1 10

2 5 x3

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


116 Clculo Numrico

A decomposio da matriz A nas matrizes L triangular inferior, D diagonal e U


triangular superior :

3 1 1 0 0 0 3 0 0 0 1 1

1 = 0 0 + + 0
0 0 0 1
1

4

1

4

.

1 1 2 0 0 0 0 0 0

2 5 5
| {z } | {z } | {z } | {z }
A L D U

Em Python, podemos construir as matrizes L, D e U , da seguinte forma:

>>> A = np.array([[3,1,-1],
... [-1,-4,1],
... [1,-2,5]],
... dtype='double')
>>> D = np.diag(np.diag(A))
>>> L = np.tril(A)-D
>>> U=np.triu(A)-D

Iterao de Jacobi
Vamos, agora, usar a decomposio discutida acima para construir a matriz de
iterao TJ e o vetor de iterao cJ associado ao mtodo de Jacobi. Neste caso,
temos:

Ax = b (L + D + U )x = b
Dx = (L + U )x + b
x = D1 (L + U ) x + D 1
| {z b} .
| {z }
=:cJ
=:TJ

Ou seja, a iterao do mtodo de Jacobi escrita na forma matricial :

x(k+1) = TJ x(k) + cJ , k 1,

com x(1) uma aproximao inicial dada, sendo TJ := D1 (L + U ) a matriz de


iterao e cJ = D1 b o vetor da iterao.

Exemplo 4.7.4. Construa a matriz de iterao TJ e o vetor de iterao cJ do


mtodo de Jacobi para o sistema dado no exemplo 4.7.3.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.7. MTODOS ITERATIVOS PARA SISTEMAS LINEARES 117

Soluo. A matriz de iterao dada por:



1
3 0 0 0 1 1 0 13 1
3

TJ := D (L + U ) =
1
0
41 0 0 1 = 0
1 1
1 .


4 4

0 0 1 2 0 0

15 1
5
2
5
| {z }| {z }
D1 (L+U )

O vetor da iterao de Jacobi :



1
3 0 0 2
2
3

cJ := D1 b = 0

14 0

10 =
5
.
2

0 0 10

51 2
| {z } | {z }
D1 b

Em python, podemos computar TJ e cJ da seguinte forma:


>>> TJ = -np.linalg.inv(D).dot(L+U);
>>> cJ = np.linalg.inv(D).dot(b);

Iterao de Gauss-Seidel
A forma matricial da iterao do mtodo de Gauss-Seidel tambm pode ser
construda com base na decomposio A = L + D + U . Para tando, fazemos:

Ax = b (L + D + U )x = b
(L + D)x = U x + b
x = (L + D)1 U x + (L + D)1 b
| {z } | {z }
=:TG =:cG

Ou seja, a iterao do mtodo de Gauss-Seidel escrita na forma matricial :

x(k+1) = TG x(k) + cG , k 1,

com x(1) uma aproximao inicial dada, sendo TG := (L + D)1 U a matriz de


iterao e cJ = (L + D)1 b o vetor da iterao.

Exemplo 4.7.5. Construa a matriz de iterao TG e o vetor de iterao cG do


mtodo de Gauss-Seidel para o sistema dado no exemplo 4.7.3.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


118 Clculo Numrico

Soluo. A matriz de iterao dada por:


1
3 0 0 0 1 1 0 31 1
3

TG = (L + D)1 U =
1 4 0 0 0 1 = 0 1 1
.


12 6

1 0 0 0 0 10 0

1
2 5
| {z }| {z }
(L+D)1 U

O vetor da iterao de Gauss-Seidel :


1
3 0 0 2
2
3

cG := (L + D) b =
1
0 =
7
1 4 10 .


3
1 10

2 5 28
10
| {z } | {z }
(L+D)1 b

Em Python, podemos computar TG e cG da seguinte forma:


-->TG = -np.linalg.inv(L+D).dot(U);
-->cG = np.linalg.inv(L+D).dot(b);

Condies de convergncia
Aqui, vamos discutir condies necessrias e suficientes para a convergncia de
mtodos iterativos. Isto , dado um sistema Ax = b e uma iterao:

x(k+1) = T x(k) + c, k 1,

x(1) dado, estabelecemos condies nas quais x(k) x , onde x a soluo do


sistema dado, isto , x = T x + c ou, equivalentemente, Ax = b.

Lema 4.7.1. Seja T uma matriz real n n. O limite lim T k = 0, 1 p ,

k p
se, e somente se, (T ) < 1.

Demonstrao. Aqui, fazemos apenas um esboo da demonstrao. Para mais


detalhes, veja [8], Teorema 4, pg. 14.
Primeiramente, suponhamos que kT kp < 1, 1 p . Como (veja [8], lema
2, pg. 12):
(T ) kT kp ,
temos (T ) < 1, o que mostra a implicao.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.7. MTODOS ITERATIVOS PARA SISTEMAS LINEARES 119

Agora, suponhamos que (T ) < 1 e seja 0 <  < 1 (T ). Ento, existe


1 p tal que (veja [8], Teorema 3, pgina 12):

kT kp (T ) +  < 1.

Assim, temos:
lim kT k kp lim kT km
p = 0.
k k

Da equivalncia entre as normas segue a recproca.


Observao 4.7.1. Observamos que:

lim kT k kp = 0, ,1 p , lim tkij = 0, 1 i,j n.


k k

Lema 4.7.2. Se (T ) < 1, ento existe (I T )1 e:



(I T )1 = T k.
X

k=0

Demonstrao. Primeiramente, provamos a existncia de (I T )1 . Seja um


autovalor de T e x um autovetor associado, isto , T x = x. Ento, (I T )x =
(1 )x. Alm disso, temos || < (T ) < 1, logo (1 ) 6= 0, o que garante que
(I T ) no singular. Agora, mostramos que (I T )1 admite a expanso acima.
Do lema 4.7.1 e da observao 4.7.1 temos:
m
(I T ) T k = lim (I T ) T k = lim (I T m+1 ) = I,
X X
m m
k=0 k=0


o que mostra que (I T ) 1
= T k.
X

k=0

Teorema 4.7.1. A sequncia recursiva {x(k) }kN dada por:

x(k+1) = T x(k) + c

converge para soluo de x = T x + c para qualquer escolha de x(1) se, e somente


se, (T ) < 1.
Demonstrao. Primeiramente, assumimos que (T ) < 1. Observamos que:

x(k+1) = T x(k) + c = T (T x(k1) + c) + c


= T 2 x(k1) + (I + T )c
..
.
Pk1 k 
=T x +(k) (1)
k=0 T c.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


120 Clculo Numrico

Da, do lema 4.7.1 e do lema 4.7.2 temos:

lim x(k) = (I T )(1) c.


k

Ora, se x a soluo de x = T x + c, ento (I T )x = c, isto , x = (I T )1 c.


Logo, temos demonstrado que x(k) converge para a soluo de x = T x + c, para
qualquer escolha de x(1) .
Agora, suponhamos que x(k) converge para x soluo de x = T x + c, para
qualquer escolha de x(1) . Seja, ento, y um vetor arbitrrio e x(1) = x y.
Observamos que:

x x(k+1) = (T x + c) (T x(k) + c)
= T (x x(k) )
..
.
= T (k) (x x(1) ) = T (k) y.

Logo, para qualquer 1 p , temos, :

0 = lim x x(k+1) = lim T (k) y.


k k

Como y arbitrrio, da observao 4.7.1 temos lim kT (k) kp = 0, 1 p .


k
Ento, o lema 4.7.1 garante que (T ) < 1.
Observao 4.7.2. Pode-se mostrar que tais mtodos iterativos tem taxa de con-
vergncia super linear com:

kx(k+1) x k (T )k kx(1) x k.

Para mais detalhes, veja [8], pg. 61-64.


Exemplo 4.7.6. Mostre que, para qualquer escolha da aproximao inicial, ambos
os mtodos de Jacobi e Gauss-Seidel so convergentes quando aplicados ao sistema
linear dado no exemplo 4.7.3.
Soluo. Do teorema 4.7.1, vemos que necessrio e suficiente que (TJ ) < 1 e
(TG ) < 1. Computando estes raios espectrais, obtemos (TJ ) 0,32 e (TG )
0,13. Isto mostra que ambos os mtodos sero convergentes.

Condio suficiente
Uma condio suficiente porm no necessria para que os mtodos de Gauss-
Seidel e Jacobi convirjam a que a matriz seja estritamente diagonal domi-
nante.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.7. MTODOS ITERATIVOS PARA SISTEMAS LINEARES 121

Definio 4.7.1. Uma matriz A estritamente diagonal dominante quando:


n
|aij | , i = 1,...,n
X
|aii | >
j=1
j6=i

Definio 4.7.2. Uma matriz A diagonal dominante quando


n
|aij | , i = 1,...,n
X
|aii |
j=1
j6=i

e para ao menos um i, aii estritamente maior que a soma dos elementos fora da
diagonal.

Teorema 4.7.2. Se a matriz A for diagonal dominante7 , ento os mtodos de


Jacobi e Gauss-Seidel sero convergentes independente da escolha inicial x(1) .

Se conhecermos a soluo exata x do problema, podemos calcular o erro relativo


em cada iterao como:
kx x(k) k
.
kxk
Em geral no temos x, entretanto podemos estimar o vetor resduo r(k) =
b Ax(k) . Note que quando o erro tende a zero, o resduo tambm tende a zero.

Teorema 4.7.3. O erro relativo e o resduo esto relacionados como (veja [3])

kx x(k) k krk
(A)
kxk kbk

onde k(A) o nmero de condicionamento.

Exemplo 4.7.7. Ambos os mtodos de Jacobi e Gauss-Seidel so convergentes


para o sistema dado no exemplo 4.7.3, pois a matriz dos coeficientes deste uma
matriz estritamente diagonal dominante.

Exerccios

E 4.7.1. Considere o problema de 5 incgnitas e cinco equaes dado por


7
E consequentemente estritamente diagonal dominante.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


122 Clculo Numrico

x1 x2 = 1
x1 + 2x2 x3 = 1
x2 + (2 + )x3 x4 = 1
x3 + 2x4 x5 = 1
x4 x5 = 1

a) Escreva na forma Ax = b e resolva usando eliminao gaussiana para =


103 no Python.

b) Obtenha o vetor incgnita x com = 103 usando Jacobi com tolerncia


102 . Compare o resultado com o resultado obtido no item d.

c) Obtenha o vetor incgnita x com = 103 usando Gauss-Seidel com tole-


rncia 102 . Compare o resultado com o resultado obtido no item d.

d) Discuta com base na relao esperada entre tolerncia e exatido conforme


estudado na primeira rea para problemas de uma varivel.

E 4.7.2. Resolva o seguinte sistema pelo mtodo de Jacobi e Gauss-Seidel:



5x1 + x2 + x3 = 50






x1 + 3x2 x3 = 10


x1 + 2x2 + 10x3 = 30


Use como critrio de paragem tolerncia inferior a 103 e inicialize com x0 = y 0 =


z 0 = 0.
E 4.7.3. Refaa o Exerccio ?? construindo um algoritmo que implemente os
mtodos de Jacobi e Gauss-Seidel.
E 4.7.4. Considere o seguinte sistema de equaes lineares:

x1 x 2 = 0
xj1 + 5xj xj+1 = cos(j/10), 2 j 10
x11 = x10 /2 (4.28)

Construa a iterao para encontrar a soluo deste problema pelos mtodos de


Gauss-Seidel e Jacobi. Usando esses mtodos, encontre uma soluo aproximada
com erro absoluto inferior a 105 . Veja tambm exerccio 4.5.2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.8. CLCULO DE AUTOVALORES E AUTOVETORES 123

E 4.7.5. Faa uma permutao de linhas no sistema abaixo e resolva pelos


mtodos de Jacobi e Gauss-Seidel:
x1 + 10x2 + 3x3 = 27
4x1 + x3 = 6
2x1 + x2 + 4x3 = 12

4.8 Clculo de autovalores e autovetores


Considere o problema de autovalores Av = v, onde A uma matriz diago-
nalizvel, isto , existe uma matriz diagonal D e uma matriz ortogonal U tal que
A = U DU 1 .

4.8.1 Mtodo da Potncia


O mtodo da potncia para clculo do maior autovalor (em mdulo) consiste
na sequncia
Ax0 A2 x0 A3 x0 A4 x0
x0 , , , , ,
kAx0 k2 kA2 x0 k2 kA3 x0 k2 kA4 x0 k2
para algum chute inicial x0 . Para entender melhor o comportamento assinttico
dessa sequncia, primeiro considere o caso particular onde A uma matriz diago-
nal, isto ,
1 0 0 0

0 2 0 0



A= 0 0 0

3 .


.. ..

. .




0 0 0 n
Suponha que um dos autovalores seja estritamente maior que os demais, isto ,
|1 | > |2 | |3 | |n |. Dado x0 = [1 2 3 n ]T , ento

1
k
1 1 1
 k
2 2
2 i2 2

1 1

 k
Ak x0 = k
= = k

A k 1 1 3 3 ,
3

3 3 1 1
.. .. ..

. . .



 k
n n
n kn n 1 1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


124 Clculo Numrico

 k
desde que 1 6= 0. Como n1 n1
1
31 21 < 1, ento 1j tende a 0 para
cada j, 2 j n. Devido a normalizao a cada passo da sequncia,

Ak x0
xk =
kAk x0 k2

converge para e1 , e1 = [1 0 0 0]T . Tambm, a sequncia

k = xTk Axk

converge para 1 :

lim k = (e1 )T A(e1 ) = 1 eT1 e1 = 1 .


k

Considere agora o caso onde A diagonalizvel, ou seja, A = U DU 1 com U


uma matriz ortogonal contendo os autovetores em cada coluna e D uma matriz
diagonal contendo os autovalores:

1 0 0 0

0 2 0 0



D= 0 0 0

3 .


.. ...

.




0 0 0 n

Considere a mesma hiptese sobre os autovalores: |1 | > |2 | |3 | |n |.


Ento
Ak = (U DU 1 )(U DU 1 )(U DU 1 ) (U DU 1 ) = U Dk U 1
visto que U U 1 = I. Suponha que o chute inicial x0 pode ser escrito da forma

x0 = U U 1 x0 = U [1 2 3 n ]T

com 1 6= 0. Ento

1
k
1 1 1
 k
2 2
2 k2 2

1 1

 k
Ak x0 = (U Dk U 1 )U =U = k1 1 U

k 3 3 .

3

3 3

1 1
.. .. ..

. . .



 k
n n
n kn n 1 1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.8. CLCULO DE AUTOVALORES E AUTOVETORES 125

Como na discusso anterior, o ltimo vetor converge para e1 e

Ak x0
xk =
kAk x0 k2
converge para v1 = U e1 que um mltiplo do autovetor associado a 1 . Tambm,
a sequncia
k = xTk Axk
converge para o autovalor dominante 1 :

lim k = v1T Av1 = 1 v1T v1 = 1 .


k

O mtodo da potncia tem duas restries:

i) O chute x0 no pode ser ortogonal ao autovetor associado ao autovalor do-


minante.

ii) Um autovalor deve ter o mdulo estritamente maior que os demais. Essa
restrio impede o funcionamento do mtodo no caso em que o autovalor
dominante complexo, pois eles aparecem em pares conjugados, possuindo
o mesmo mdulo.

A seguir vamos fazer uma anlise alternativa para a convergncia do mtodo


da potncia: se A Rn,n diagonalizvel, ento existe um conjunto {vj }nj=1 de
autovetores de A tais que qualquer elemento x Rn pode ser escrito como uma
combinao linear dos vj . Sejam {j }nj=1 o conjunto de autovalores associados
aos autovetores tal que um deles seja dominante, ou seja, |1 | > |2 | |3 |
|n | > 0. Como os autovetores so L.I., todo vetor x0 Rn , x0 = (x1 ,x2 ,...,xn ),
pode ser escrito com combinao linear dos autovetores da seguinte forma:
n
x0 = (4.29)
X
j vj .
j=1

Observamos que se x0 est na forma (4.29), ento Ak x0 pode ser escrito como
!k
n n n
j j
Ak x0 = j Ak vj = j kj vj = 1 k1 v1 +
X X X
vj
j=1 j=1 j=2 1 1

Como 1j < 1 para todo j 2, temos

n
!k
j j
vj 0.
X

j=2 1 1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


126 Clculo Numrico

Assim, k
A k x0 1 k1
2 )
= v 1 + O (4.30)
kAk x0 k kAk xk 1

A k x0
Como a norma de igual a um, temos
k A k x0 k

k
1 1
v 1

1
kAk x0 k

e, portanto,
1

k
1 1

kAk x0 k kv1 k

1 k1
Ou seja, se definimos (k) = , ento
k A k x0 k
|(k) | 1
Retornando a (4.30), temos:

Ak x0
(k) v1 0
kAk x0 k
Observe que um mltiplo de autovetor tambm um autovetor e, portanto,
Ak x0
xk =
kAk x0 k
um esquema que oscila entre os autovetores ou converge para o autovetor v1 .

4.8.2 Mtodo da iterao Inversa


Nesta seo, vamos estudar a seguncia
(A I)1 x0 (A I)2 x0 (A I)3 x0
x0 , , , ,
k(A I)1 x0 k2 k(A I)2 x0 k2 k(A I)3 x0 k2
para valores iniciais x0 e . Para o caso onde A diagonalizvel podemos escrever
A = U DU 1 com D diagonal,

1 0 0 0

0 2 0 0



D= 0 0 0

3 .


.. ...

.




0 0 0 n

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.8. CLCULO DE AUTOVALORES E AUTOVETORES 127

Assim, A I = U (D I)U 1 e, portanto, (A I)1 = U (D I)1 U 1 .


Observamos que as matrizes A e (A I)1 possuem os mesmos autovetores
associados aos autovalores j e (j )1 , respectivamente. Agora, supomos que
satisfaa |k | < |j | para algum k e para todo j 6= k. Tambm, Supomos
que o chute inicial x0 possa ser escrito da forma

x0 = U U 1 x0 = U [1 2 3 n ]T

com k 6= 0. Ento

1

2



(A I)k x0 = (U (D I)k U 1 )U


3

..

.




n
 k
1 i
i 1
(1 )k 1






(2 )k 2


1


= U (3 )k 3 = (i )k 1 U

.. .


.

..


.





(n )k n

 k
n i
i n

Como < 1, o ltimo vetor converge para ei e
i

j

(A I)k x0
xk =
k(A I)k x0 k2
converge para U ei = vi que um mltiplo do autovetor associado a i . Tambm,
a sequncia
k = xTk Axk
converge para i :
lim k = viT Avi = i viT vi = i .
k

A mtodo da iterao inversa tem restries semelhantes quelas do mtodo


da potncia:
i) O chute x0 no pode ser ortogonal ao autovetor associado ao autovalor i .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


128 Clculo Numrico

ii) O chute deve estar mais prximo de i do que dos j , j 6= i.


A vantagem que conseguimos calcular qualquer autovalor, no apenas o autovalor
dominante.

Exerccios

E 4.8.1. Calcule o autovalor dominante e o autovetor associado da matriz



4 41 78

48 28 21



26 13 11

Expresse sua resposta com seis dgitos significativos

E 4.8.2. Calcule o autovalor dominante e o autovetor associado da matriz



3 4

2 1
usando o mtodo da potncia inciando com o vetor x = [1 1]T

E 4.8.3. A norma L2 de um matriz A dada pela raiz quadrada do autovalor


dominante da matriz A A, isto :
q
kAk2 = max{|| : (A A)} :
Use o mtodo da potncia para obter a norma L2 da seguinte matriz:

69 84 88

A= 15 40 11



70 41 20

Expresse sua resposta com seis dgitos significativos

E 4.8.4. Os autovalores de uma matriz triangular so os elementos da diagonal


principal. Verifique o mtodo da potncia aplicada seguinte matriz:

2 3 1

0 3 1 .



0 0 1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


4.9. EXERCCIOS FINAIS 129

4.9 Exerccios finais

E 4.9.1. O circuito linear da figura 4.9.1 pode ser modelado pelo sistema dado
a seguir. Escreva esse sistema na forma matricial sendo as tenses V1 , V2 , V3 , V4 e
V5 as cinco incgnitas. Resolva esse problema quando V = 127 e
a) R1 = R2 = R3 = R4 = 2 e R5 = R6 = R7 = 100 e R8 = 50

b) R1 = R2 = R3 = R4 = 2 e R5 = 50 e R6 = R7 = R8 = 100

V1 = V
V1 V2 V3 V2 V2
+ = 0
R1 R2 R5
V2 V3 V4 V3 V3
+ = 0
R2 R3 R6
V3 V4 V5 V4 V4
+ = 0
R3 R4 R7
V4 V5 V5
= 0
R4 R8
V1 V2 V3 V4 V5

R1 R2 R3 R4

V R5 R6 R7 R8

Complete a tabela abaixo representado a soluo com 4 algarismos significati-


vos:

Caso V1 V2 V3 V4 V5
a
b

Ento, refaa este problema reduzindo o sistema para apenas 4 incgnitas (V2 ,
V3 , V4 e V5 ).

E 4.9.2. Resolva o problema 4.9.1 pelos mtodos de Jacobi e Gauss-Seidel.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


130 Clculo Numrico

E 4.9.3. (Interpolao) Resolva os seguintes problemas:

a) Encontre o polinmio P (x) = ax2 + bx + c que passa pelos pontos (1, 3),
(1, 1) e (2,9).

b) Encontre os coeficientes A e B da funo f (x) = A sen (x) + B cos(x) tais


que f (1) = 1.4 e f (2) = 2.8.

c) Encontre a funo g(x) = A1 sen (x) + B1 cos(x) + A2 sen (2x) + B2 cos(2x)


tais que f (1) = 1, f (2) = 2, f (3) = 3 e f (4) = 4.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 5

Soluo de sistemas de equaes


no lineares

Neste captulo, estudaremos o mtodo de Newton aplicado resoluo de sis-


temas no-lineares de equaes.
O mtodo de Newton aplicado a encontrar a raiz x da funo y = f (x) estu-
dado na seo 3.4 consiste em um processo iterativo. Em cada passo deste processo,
dispomos de uma aproximao x(k) para x e construmos uma aproximao x(k+1) .
Cada passo do mtodo de Newton envolve os seguintes procedimentos:

Linearizao da funo f (x) no ponto x(k) :


 
f (x) = f (x(k) ) + (x x(k) )f 0 (x(k) ) + O |x x(k) |2

A aproximao x(k+1) definida como o valor de x em que a linearizao


f (x(k) ) + (x x(k) )f 0 (x(k) ) passa por zero.

Queremos, agora, generalizar o mtodo de Newton a fim de resolver proble-


mas de vrias equaes e vrias incgnitas, ou seja, encontrar x1 ,x2 , . . . xn que
satisfazem as seguinte equaes:

f1 (x1 ,x2 , . . . ,xn ) = 0


f2 (x1 ,x2 , . . . ,xn ) = 0
..
.
fn (x1 ,x2 , . . . ,xn ) = 0

Podemos escrever este problema na forma vetorial definindo o vetor x = [x1 ,x2 , . . . ,xn ]T

131
132 Clculo Numrico

e a funo vetorial
f1 (x1 ,x2 , . . . ,xn )

f2 (x1 ,x2 , . . . ,xn )

F (x) =

..

.




fn (x1 ,x2 , . . . ,xn )

Exemplo 5.0.1. Suponha que queiramos resolver numericamente os seguinte sis-


tema de duas equaes e duas incgnitas:
x21
+ x22 = 1
3
x2
x21 + 2 = 1
4
Ento definimos

x21
3
+ x22 1

F (x) =



x22
x21 + 1

4

Neste momento, dispomos de um problema na forma F (x) = 0 e precisamos


desenvolver uma tcnica para linearizar a funo F (x). Para tal, precisamos de
alguns conceitos do clculo de vrias variveis.
Observe que F (x) F (x(0) ) pode ser escrito como

(0) (0)
f1 (x1 ,x2 , . . . ,xn ) f1 (x1 ,x2 , . . . ,xn )
(0)


(0) (0)
f2 (x1 ,x2 , . . . ,xn ) f2 (x1 ,x2 , . . . ,x(0)
n )

F (x) F (x ) =
(0)

.

..



(0) (0)
n )
fn (x1 ,x2 , . . . ,xn ) fn (x1 ,x2 , . . . ,x(0)
Usamos a regra da cadeia
n
fi fi fi fi
dfi = dx1 + dx2 + + dxn =
X
dxj
x1 x2 xn j=1 xj

e aproximamos as diferenas por derivadas parciais:


n
(0) (0) fi  (0)

fi (x1 ,x2 , . . . ,xn ) fi (x1 ,x2 , . . . ,x(0)
n )
X
xj xj
j=1 xj

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


133

Portanto,

f1 f1 f1
x1 x2
xn

(0)

x1 x 1






f2 f2 f2

x1 x2
xn



(0)



x2 x2

F (x) F (x(0) )
.. .. ... ..

,

(5.1)
. . . ..





.




fn fn fn



x1 x2 xn
xn x(0)

n

Definimos, ento, a matriz jacobiana por



f1 f1 f1
x1 x2
xn





f2 f2 f2

x1 x2
xn



(f1 ,f2 , . . . ,fn )


JF = =
.. .. ... .. .

(x1 ,x2 , . . . ,xn )

. . .







fn fn fn



x1 x2 xn

Isto , a matriz jacobiana de uma funo ou simplesmente, o jacobiano de uma


funo F (x) a matriz formada pelas suas derivadas parciais:
fi
(JF )ij = .
xj
Nestes termos, podemos reescrever (5.1) como
F (x) F (x(0) ) + JF (x(0) )(x x(0) )
Esta expresso chamada de linearizao de F (x) no ponto x(0) e generaliza a
linearizao em uma dimenso dada por f (x) f (x(0) ) + f 0 (x(0) )(x x(0) ).
Ao longo deste captulo, estaremos assumindo que as seguintes bibliotecas e
mdulos Python esto importadas:
import numpy as np
from numpy import linalg

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


134 Clculo Numrico

5.1 Mtodo de Newton para sistemas


Nesta seo, construiremos o mtodo de Newton ou Newton-Raphson genera-
lizado para sistemas. Assumimos, portanto, que a funo F (x) diferencivel e
que existe um ponto x tal que F (x ) = 0. Seja x(k) uma aproximao para x ,
queremos construir uma nova aproximao x(k+1) atravs da linearizao de F (x)
no ponto x(k) .

Linearizao da funo F (x) no ponto x(k) :


    
F (x) = F (x(k) ) + JF x(k) x x(k) + O kx x(k) k2

A aproximao
  x(k) definida como o ponto x em que a linearizao F (x(k) )+
JF x(k) x x(k) nula, ou seja:
  
F (x(k) ) + JF x(k) x(k+1) x(k) = 0

Supondo que a matriz jacobina seja inversvel no ponto x(k) , temos:


  
JF x(k) x(k+1) x(k) = F (x(k) )
 
x(k+1) x(k) = JF1 x(k) F (x(k) )
 
x(k+1) = x(k) JF1 x(k) F (x(k) )

Desta forma, o mtodo iterativo de Newton-Raphson para encontrar as razes


de F (x) = 0 dado por:
 

x(k+1) = x(k) JF1 x(k) F (x(k) ), n 0
x(0) = dado inicial

Observao 5.1.1. Usamos subndices para indicar o elemento de um vetor e


superndices para indicar o passo da iterao. Assim, x(k) se refere iterao k e
(k)
xi se refere componente i no vetor x(k) .
 
Observao 5.1.2. A notao JF1 x(k) enfatiza que a jacobiana deve ser calcu-
lada a cada passo.

Observao 5.1.3. Podemos definir o passo (k) como

(k) = x(k+1) x(k)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


5.1. MTODO DE NEWTON PARA SISTEMAS 135

 
Assim, (k) = JF1 x(k) F (x(k) ), ou seja, (k) resolve o problema linear:
 
JF x(k) (k) = F (x(k) )

Em geral, menos custoso resolver o sistema acima do que calcular o inverso da


jacobiana e multiplicar pelo vetor F (x(k) ).
Exemplo 5.1.1. Retornamos ao nosso exemplo inicial, isto , resolver numerica-
mente os seguinte sistema no-linear:

x21
+ x22 = 1
3
x2
x21 + 2 = 1
4
Para tal, definimos a funo F (x):

x21

+ x22 1
F (x) = 3


x22
x1 +
2
1
4
cuja jacobiana :
2x1

2x 2
3
JF =
2x1 x22
Faremos a implementao numrica em Python. Para tal definimos as funes
que implementaro F (x) e a JF (x)
>>> def F(x):
... y = np.zeros(2)
... y[0] = x[0]**2/3 + x[1]**2 - 1
... y[1] = x[0]**2 + x[1]**2/4 - 1
... return y
...
>>> def JF(x):
... y = np.zeros((2,2))
... y[0,0] = 2*x[0]/3
... y[0,1] = 2*x[1]
... y[1,0] = 2*x[0]
... y[1,1] = x[1]/2
... return y
...

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


136 Clculo Numrico

Desta forma, se x uma aproximao para a raiz, pode-se calcular a prxima


aproximao atravs dos comandos:

>>> delta = -np.linalg.inv(JF(x)).dot(F(x))


>>> x = x + delta

Ou simplesmente

>>> x = x - np.linalg.inv(JF(x)).dot(F(x))
 q q 
Observe que as solues exatas desse sistema so 9
11
, 8
11
.

Exemplo 5.1.2. Encontre uma aproximao para a soluo do sistema

x21 = cos(x1 x2 ) + 1
sen (x2 ) = 2 cos(x1 )

que fica prxima ao ponto x1 = 1,5 e x2 = 0,5.

Soluo. Vamos, aqui, dar as principais ideias para se obter a soluo usando o
mtodo de Newton. Comeamos definindo nossa aproximao inicial por x(1) =
(1,5, 0,5). Ento iteramos:

x(n+1) = x(n) JF1 (x)F (x), n 1.

onde
x1 cos(x1 x2 ) 1
2
F (x) =
sen (x2 ) 2 cos(x1 )
e sua jacobiana

2x1 + x2 sen (x1 x2 ) x1 sen (x1 x2 )
JF (x) =

2 sen (x1 ) cos(x2 )

As iteraes convergem para x = (1,3468109, 0,4603195).


Em Python, podemos implement-las com o seguinte cdigo:
def F(x):
y = np.zeros(2)

y[0] = x[0]**2 - np.cos(x[0]*x[1]) - 1


y[1] = np.sin(x[1]) - 2*np.cos(x[0])

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


5.1. MTODO DE NEWTON PARA SISTEMAS 137

return y

def JF(x):
y = np.zeros((2,2))

y[0,0] = 2*x[0] + x[1]*np.sin(x[0]*x[1])


y[0,1] = x[0]*np.sin(x[0]*x[1])

y[1,0] = 2*np.sin(x[0])
y[1,1] = np.cos(x[1])

return y

E agora, basta iterar:

>>> x = np.array([1.5,0.5])
>>> x=x-np.linalg.inv(JF(x)).dot(F(x))

5.1.1 Cdigo Python: Newton para Sistemas


from __future__ import division
import numpy as np
from numpy import linalg

def newton(F,JF,x0,TOL,N):
#preliminares
x = np.copy(x0).astype('double')
k=0
#iteracoes
while (k < N):
k += 1
#iteracao Newton
delta = -np.linalg.inv(JF(x)).dot(F(x))
x = x + delta
#criterio de parada
if (np.linalg.norm(delta,np.inf) < TOL):
return x

raise NameError('num. max. iter. excedido.')

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


138 Clculo Numrico

Exerccios

E 5.1.1. Faa o que se pede:

a) Encontre o gradiente da funo

f (x,y) = x2 y + cos(xy) 4

b) Encontre a matriz jacobiana associada funo



x cos(x) + y
F (x,y) = .
2x+y
e

c) Encontre a matriz jacobiana associada funo



a11 x1 + a12 x2 + a13 x3 y1

L(x) = a21 x1 + a22 x2 + a23 x3 y2 .



a31 x1 + a32 x2 + a33 x3 y3

E 5.1.2. Encontre uma aproximao numrica para o seguinte problema no-


linear de trs equaes e trs incgnitas:

2x1 x2 = cos(x1 )
x1 + 2x2 x3 = cos(x2 )
x2 + x3 = cos(x3 )

Partindo das seguintes aproximaes iniciais:

a) x(0) = [1, 1, 1]T

b) x(0) = [0,5, 2, 3]T

c) x(0) = [2, 3, 4]T

d) x(0) = [0, 0, 0]T

E 5.1.3. Encontre os pontos de interseco entre a parbola y = x2 + 1 e a


elipse x2 + y 2 /4 = 1 seguindo os seguintes passos:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


5.1. MTODO DE NEWTON PARA SISTEMAS 139

a) Faa um esboo das duas curvas e entenda o problema. Verifique que existem
dois pontos de interseco, um no primeiro quadrante e outro no segundo
quadrante do plano xy.
b) A partir de seu esboo, encontre aproximaes para x e y em cada ponto.

x 0
c) Escreva o problema na forma F =


y 0

d) Encontre a jacobiana JF .
e) Construa a iterao do mtodo de Newton.
f) Implemente no computador.
g) Resolva o sistema analiticamente e compare as respostas.

E 5.1.4. Encontre os pontos de interseco entre a parbola y = x2 e a curva


y = cos(x) seguindo os seguintes passos:
a ) Faa um esboo das duas curvas, entenda o problema. Verifique que existem
dois pontos de interseco, um no primeiro quadrante e outro no segundo
quadrando do plano xy.
b ) A partir de seu esboo, encontre aproximaes para x e y em cada ponto.

x 0
c ) Escreva o problema na forma F
=
y 0

d ) Encontre a jacobiana JF .
e ) Construa a iterao do mtodo de Newton.
f ) Implemente no Python.
g ) Transforme o sistema em um problema de uma nica varivel e compare
com a resposta do problema 3.4.1.

E 5.1.5. Encontre uma aproximao com erro inferior a 105 em cada incg-
nita para a soluo prxima da origem do sistema
6x 2y + ez = 2
sen (x) y + z = 0
sen (x) + 2y + 3z = 1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


140 Clculo Numrico

Figura 5.1: Reta bitangente a uma curva.

E 5.1.6. (Entenda casos particulares)


Considere a funo L(x) = Ax b, onde A uma matriz n n inversvel e
b um vetor coluna em Rn . O que acontece quando aplicamos o mtodo de
Newton para encontrar as razes de L(x)?
Mostre que o mtodo de Newton-Raphson aplicado a uma funo diferenci-
vel do tipo f : R R se reduz ao mtodo de Newton estudado na primeira
rea.

E 5.1.7. Considere a funo f (x) = sen (x)


x+1
, encontre a equao da reta que
tangencia dois pontos da curva y = f (x) prximos ao primeiro e segundo ponto
de mximo no primeiro quadrante, respectivamente. Veja a figura 5.1.

E 5.1.8. (Esttica) Considere o sistema mecnico constitudo de dois seg-


mentos de mesmo comprimento L presos entre si e a uma parede por articulaes
conforme a figura 5.2.
O momento em cada articulao proporcional deflexo com constante de
proporcionalidade k. Os segmentos so feitos de material homogneo de peso P . A
condio de equilbrio pode ser expressa em termos dos ngulos 1 e 2 conforme:
3P L
k1 = cos 1 + k (2 1 )
2
PL
k (2 1 ) = cos 2
2
Considere P = 100N , L = 1m e calcule os ngulos 1 e 2 quando:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


5.1. MTODO DE NEWTON PARA SISTEMAS 141

Figura 5.2: Sistema mecnico com dois segmentos.

a) k = 1000 Nm/rad

b) k = 500 Nm/rad

c) k = 100 Nm/rad

d) k = 10 Nm/rad

Obs:Voc deve escolher valores para iniciar o mtodo. Como voc interpretaria
fisicamente a soluo para produzir palpites iniciais satisfatrios? O que se altera
entre o caso a e o caso d?
E 5.1.9. (esttica - problemas de trs variveis) Considere, agora, o sistema
mecnico semelhante ao do problema 5.1.8, porm constitudo de trs segmentos
de mesmo comprimento L presos entre si e a uma parede por articulaes.
O momento em cada articulao proporcional deflexo com constante de
proporcionalidade k. Os segmentos so feitos de material homogneo de peso P .
A condio de equilbrio pode ser expressa em termos dos ngulos 1 , 2 e 3
conforme:
5P L
k1 = cos 1 + k (2 1 )
2
3P L
k (2 1 ) = cos 2 + k (3 2 )
2
PL
k (3 2 ) = cos 3
2
Considere P = 10N, L = 1m e calcule os ngulos 1 , 2 e 3 quando:

a) k = 1000Nm/rad

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


142 Clculo Numrico

Figura 5.3: interseco entre duas curvas.

b) k = 100Nm/rad
c) k = 10Nm/rad

E 5.1.10. Considere o problema de encontrar os pontos de interseco das


curvas descritas por (ver figura 5.3):
x2 (y 1)2
+ = 1
8 5

tan1 (x) + x = y + y 3
Com base no grfico, encontre solues aproximadas para o problema e use-as para
iniciar o mtodo de Newton-Raphson. Encontre as razes com erro inferior a 105 .

E 5.1.11. Considere o sistema de equaes dado por


(x 3)2 (y 1)2
+ = 1
16 36
tanh(x) + x = 2 sen y 0.01y 3
Usando procedimentos analticos, determine uma regio limitada do plano onde se
encontram necessariamente todas as razes do problema. Encontre as razes desse
sistema com pelo menos quatro dgitos significativos corretos usando o mtodo de
Newton. Voc deve contruir o mtodo de Newton indicando as funes envolvidas
e calculando a matriz jacobiana analiticamente. Use que du d
tanh u = 1 tanh2 u,
se precisar.

E 5.1.12. (Otimizao) Uma indstria consome energia eltrica de trs usinas


fornecedoras. O custo de fornecimento em reais por hora como funo da potncia
consumida em kW dada pelas seguintes funes
C1 (x) = 10 + .3x + 104 x2 + 3.4 109 x4
C2 (x) = 50 + .25x + 2 104 x2 + 4.3 107 x3
C3 (x) = 500 + .19x + 5 104 x2 + 1.1 107 x4

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


5.1. MTODO DE NEWTON PARA SISTEMAS 143

Calcule a distribuio de consumo que produz custo mnimo quando a potncia


total consumida 1500kW . Dica: Denote por x1 , x2 e x3 as potncias consumidas
das usinas 1, 2 e 3, respectivamente. O custo total ser dado por C(x1 ,x2 ,x3 ) =
C1 (x1 ) + C2 (x2 ) + C3 (x3 ) enquanto o consumo total x1 + x2 + x3 = 1500. Isto ,
queremos minimizar a funo custo total dada por:

C(x1 ,x2 ,x3 ) = C1 (x1 ) + C2 (x2 ) + C3 (x3 )

restrita condio

G(x1 ,x2 ,x3 ) = x1 + x2 + x3 1500 = 0.

Pelos multiplicadores de Lagrange, temos que resolver o sistema dado por:

C(x1 ,x2 ,x3 ) = G(x1 ,x2 ,x3 )


G(x1 ,x2 ,x3 ) = 0

E 5.1.13. Encontre a funo do tipo f (x) = Abx que melhor aproxima os


pontos (0, 3,1), (1, 4,4) e (2, 6,7) pelo critrio dos mnimos quadrados. Dica: Voc
deve encontrar os valores de A e b que minimizam o resduo dado por

R = [3,1 f (0)]2 + [4,4 f (1)]2 + [6,7 f (2)]2 .

Dica: Para construir aproximaes para resposta e iniciar o mtodo, considere a


funo f (x) = Abx que passa pelo primeiro e terceiro ponto.

E 5.1.14. Encontre o valor mximo da funo

f (x,y) = x4 y 6 + 3xy 3 x

na regio (x,y) [2,0] [2,0] seguindo os seguintes passos:

a) Defina a funo z = f (x,y) = x4 y 6 + 3xy 3 x e trace o grfico de


contorno na regio.

b) Com base no grfico, encontre valores aproximados para as coordenadas xy


do ponto de mximo.

c) Sabendo que o ponto de mximo acontece quando o gradiente nulo, escreva


o problema como um sistema de duas equaes no lineares e duas incgnitas.

d) Implemente o mtodo de Newton.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


144 Clculo Numrico

E 5.1.15. A funo f (x,y,z) = sen (x) + sen (2y) + sen (3z) possui um mximo
quando x = /2, y = /4 e z = /6. Calcule numericamente este ponto.

E 5.1.16. Encontre as raizes do problema


3x cos(yz + z) 1/2 = 0
4x2 25y 2 + 0.4y + 2 = 0
exy + 2x 5z = 10
no cubo |x| < 2, |y| < 2, |z| < 2. Dica: Reduza a um problema de duas incgnitas
e use recursos grficos para aproximar as razes na regio.

E 5.1.17. Considere o seguinte sistema de equaes no-lineares:


x1 x2 = 0
xj1 + 5(xj + x3j ) xj+1 = 10 exp(j/3), 2 j 10
x11 = 1 (5.2)

x1


x2
a) Escreva este sistema na forma F (x) = 0 onde x = e calcule analitica-

..

.




x11
mente a matriz jacobiana (F1 ,...,F11 )
(x1 ,...x11 )
. Dica: Use a regularidade nas expresses
para abreviar a notao.
b) Construa a iterao para encontrar a nica soluo deste problema pelo
mtodo de Newton e, usando esse mtodo, encontre uma soluo aproximada
com erro absoluto inferior a 104 .

E 5.1.18. Considere a funo


2 2
e(x1) (y2)
f (x,y) =
1 + x2 + y 2
a) Encontre o valor mximo desta funo.
b) Usando multiplicadores de Lagrange, encontre o valor mximo desta funo
restrito condio
(x 1)2 + (y 2)2 = 1.
c) Parametrize a circunferncia para transformar o problema de mximo com
restrio em um problema de uma nica varivel. Resolva usando as tcnicas
de equaes lineares de uma varivel.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


5.2. LINEARIZAO DE UMA FUNO DE VRIAS VARIVEIS 145

5.2 Linearizao de uma funo de vrias vari-


veis
Nesta seo, discutimos de forma distinta e mais rigorosa os conceitos de matriz
jacobiana e linearizao de uma funo de vrias variveis.

5.2.1 Gradiente
Considere primeiramente uma funo f : Rn R, ou seja, uma funo que
mapeia n variveis reais em um nico real, por exemplo:

f (x) = x21 + x22 /4

Para construirmos a linearizao, fixemos uma direo no espao Rn , ou seja,


um vetor v:
v = [v1 , v2 , , vn ]T
Queremos estudar como a funo f (x) varia quando andamos na direo v
a partir do ponto x(0) . Para tal, inserimos um parmetro real pequeno h, dizemos
que
x = x(0) + hv
e definimos a funo auxiliar

g(h) = f (x0 + hv).

Observamos que a funo g(h) uma funo de R em R.


A linearizao de g(h) em torno de h = 0 dada por

g(h) = g(0) + hg 0 (0) + O(h2 )


Observamos que g(h) = f (x(0) + hv) e g(0) = f (x(0) ). Precisamos calcular g 0 (0):

d d
g 0 (h) = g(h) = f (x(0) + hv).
dh dh
Pela regra da cadeia temos:
n
d f dxj
f (x(0) + hv) =
X
.
dh j=1 xj dh

(0)
Observamos que xj = xj + hvj , portanto
dxj
= vj
dh
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
146 Clculo Numrico

Assim:
n
d f
f (x + hv) =
(0)
X
vj .
dh j=1 xj

Observamos que esta expresso pode ser vista como o produto interno entre o
gradiente de f e o vetor v:

f
x1 v1

f
v2

f = v=
x2
. .

.. ..


f
xn
vn

Na notao clculo vetorial escrevemos este produto interno como f v = vf


na notao de produto matricial, escrevemos (f )T v = v T f . Esta quantidade
conhecida como derivada direcional de f no ponto x(0) na direo v, sobretudo
quando kvk = 1.
Podemos escrever a linearizao g(h) = g(0) + hg 0 (0) + O(h2 ) como
f (x(0) + hv) = f (x(0) ) + hTf (x(0) ) v + O(h2 )
Finalmente, escrevemos x = x(0) + hv, ou seja, hv = x x(0)
f (x) = f (x(0) ) + Tf (x(0) ) (x x(0) ) + O(kx x(0) k2 )
Observao 5.2.1. Observe a semelhana com a linearizao no caso em uma
dimenso. A notao Tf (x(0) ) o transposto do vetor gradiente associado
funo f (x) no ponto x(0) :
     
f x(0) f x(0) f x(0)
T f (x(0) ) = , , ,
x1 x2 xn

5.2.2 Matriz jacobiana


Interessamo-nos, agora, pela linearizao da funo F : Rn Rn . Lembramos
que F (x) pode ser escrita como um vetor de funes fj : Rn R:

f1 (x)

f2 (x)

F (x) = .

..


fn (x)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


5.2. LINEARIZAO DE UMA FUNO DE VRIAS VARIVEIS 147

Linearizando cada uma das funes fj , temos:

   
f1 x (0)
+ f1 (x ) x x
T (0) (0)
+ O(kx x k )
(0) 2



   
f2 x(0) + Tf2 (x(0) ) x x(0) + O(kx x(0) k2 )




F (x) =

..



.





   
fn x(0) + Tfn (x(0) ) x x(0) + O(kx x(0) k2 )
| {z }
Vetor coluna

ou, equivalentemente:

 
f1 (x )
(0) T (0)
f1 x



 
Tf2 (x(0) )

(0)

f2 x



 
F (x) = + x x(0) +O(kx x(0) k2 )


.. ..
| {z }


.
. Vetor coluna





 
fn x(0) Tfn (x(0) )
| {z } | {z }
Vetor coluna Matriz jacobiana

Podemos escrever a linearizao de F (x) na seguinte forma mais enxuta:

 
    2
F (x) = F x(0) + JF (x(0) ) x x(0) + O x x(0)

A matriz jacobiana JF matriz cujas linhas so os gradientes transpostos de

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


148 Clculo Numrico

fj , ou seja:
f1 f1 f1
x1 x2
xn





f2 f2 f2

x1 x2
xn



(f1 ,f2 , . . . ,fn )


JF = = .. .. ..

(x1 ,x2 , . . . ,xn )

..

. . . .







fn fn fn



x1 x2 xn

A matriz jacobiana de uma funo ou simplesmente, o jacobiano de uma funo


F (x) a matriz formada pelas suas derivadas parciais:

fi
(JF )ij =
xj

Exemplo 5.2.1. Calcule a matriz jacobiana da funo



x21
3
+ x22 1

F (x) =




x22
x21 + 1

4



f1
x1
f1
x2
2x1
3
2x2

JF = =



2x1

f2 f2 x2
x1 x2 2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 6

Interpolao

Neste captulo, discutimos sobre problemas de interpolao. Mais precisa-


mente, dada uma sequncia de n reais x1 < x2 < . . . < xn , um conjunto de pontos
{(xi , yi ) I R}ni=1 , onde I = [x1 ,xn ] e uma famlia de funes FI = { : I R},
o problema de interpolao consiste em encontrar alguma funo f FI tal que

f (xi ) = yi , i = 1, 2, . . . , n.

Chamamos uma tal f de funo interpoladora dos pontos dados. Ou ainda,


dizemos que f interpola os pontos dados.

Exemplo 6.0.1. Um dos problemas de interpolao mais simples o de entrar


a equao da reta que passa por dois pontos dados. Por exemplo, sejam dados o
conjunto de pontos {(1, 1), (2, 2)} e a famlia de funes F[1,2] :

F[1,2] = {f : [1,2] R | [1,2] 3 x 7 f (x) = a + bx; a,b R} .

Para que uma f na famlia seja a funo interpoladora do conjunto de pontos


dados, precisamos que

a + bx1 = y1 a+b=1
isto
a + bx2 = y2 a + 2b = 2

o que nos fornece a = 0 e b = 1. Ento, a funo interpoladora f tal que f (x) = x


para um x [1,2]. Os pontos e a reta interpolada esto esboados na figura 6.1.

Um problema de interpolao cuja a famlia de funes constitui-se de polin-


mios chamado de problema de interpolao polinomial.

149
150 Clculo Numrico

Figura 6.1: Exemplo de interpolao de dois pontos por uma reta, veja o exem-
plo 6.0.1.

6.1 Interpolao polinomial


Interpolao polinomial um caso particular do problema geral de interpolao,
no qual a famlia de funes constituda de polinmios. A escolha de polinmios
como funes interpolantes natural por diversos motivos: se p um polinmio
de grau n, o valor p(x) para um x real calculado atravs de n + 1 operaes de
multiplicao e n + 1 operaes de soma1 ; derivadas e primitivas de polinmios so
tambm polinmios cuja relao algbrica com o original simples; e finalmente o
teorema da Aproximao de Weierstrass, segundo o qual, qualquer funo contnua
definida em um intervalo fechado pode ser aproximada uniformemente por um
polinmio to bem quanto se queira.

Teorema 6.1.1 (Weierstrass). Seja f uma funo contnua definida no intervalo


fechado [a,b] e seja um nmero positivo. Ento existe um polinmio p, tal que
para todo x [a,b],
|f (x) p(x)| < .
1
Essa forma de calcular o valor de p(x) denominada algoritmo de Horner2 . Dado um
polinmio p de grau n da forma
Xn
p(x) = ak xk ,
k=0

possvel reescrev-lo como a sequncia de operaes dada por

a0 + x (a1 + x (a2 + x (. . . + x (an1 + xan ) . . .))) .

O que requer n + 1 operaes de multiplicao e n + 1 operaes de soma.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.1. INTERPOLAO POLINOMIAL 151

Para o problema ser bem determinado necessrio restringirmos o grau dos


polinmios.
Observe que para o problema ser bem determinado, necessrio restringirmos
o grau dos polinmios. Dado um conjunto de n pontos a serem interpolados
{(xi ,yi )}ni=1 , xi 6= xj para i 6= j, a famlia de polinmios F = Pn1 deve ser
escolhida, onde:
n1
( )
Pn1 := p : x 7 p(x) = ak x ; {a0 ,a1 , . . . ,an1 } R ,
k
X

k=0

isto , a famlia dos polinmios reais de grau menor ou igual a n 1.


O exemplo 6.0.1 discute um dos casos mais simples de interpolao polinomial,
o qual consiste em interpolar uma reta por dois pontos. Neste caso, a famlia de
funes consiste de polinmios de grau 1. Se buscarmos interpolar uma parbola
pelos dois pontos dados, o problema fica subdeterminado, pois existem infinitas
parbolas que passam por dois pontos dados. Alm disso, se buscarmos interpolar
uma reta por trs pontos dados, o problema estaria sobredeterminado e poderia
no ter soluo se os pontos no fossem colineares. Veja o exerccio 6.1.3.
Assim, dado um conjunto com n pontos {(xi ,yi )}ni=1 , chamamos de polinmio
interpolador o polinmio de grau menor ou igual a n 1 que os interpola.

Figura 6.2: Polinmio interpolador do conjunto de pontos {(0, 1), (1, 6), (2, 5),
(3, 8)}. Veja o exemplo 6.1.1.

Exemplo 6.1.1. Encontre o polinmio interpolador do conjunto de pontos {(0, 1),


(1, 6), (2, 5), (3, 8)}.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


152 Clculo Numrico

Soluo. Como o conjunto consiste de 4 pontos, o polinmio interpolador deve


ser da forma:
p(x) = a0 + a1 x + a2 x2 + a3 x3 .
As condies de interpolao so p(xi ) = yi , i = 0, 1, 2, 3, o que nos leva ao sistema
linear:
a0 = 1
a0 + a1 + a2 + a3 = 6
a0 + 2a1 + 4a2 + 8a3 = 5
a0 + 3a1 + 9a2 + 27a3 = 8
cuja soluo a0 = 1, a1 = 6, a2 = 0 e a3 = 1. Portanto, o polinmio interpolador
p(x) = 1 + 6x x3 . Veja figura 6.2.
Em Python, podemos encontrar o polinmio interpolador e esboar seu grfico
com os seguintes comandos:
>>> xi = np.array([0,1,2,3], dtype='double')
>>> yi = np.array([1,6,5,-8], dtype='double')
>>> A = np.array([xi**3,xi**2,xi**1,xi**0]).transpose()
>>> a = np.linalg.inv(A).dot(yi);a
array([ -1, 0., 6, 1. ])
>>> xx = np.linspace(-0.5,3.25);
>>> plt.plot(xi,yi,'ro',xx,np.polyval(a,xx),'b-')
>>> plt.grid();plt.show()

Teorema 6.1.2. Seja {(xi ,yi )}ni=1um conjunto de n pares ordenados de nmeros
reais tais que xi 6= xj se i 6= j, ento existe um nico polinmio p(x) de grau n 1
ou inferior que passa por todos os pontos dados, isto , p(xi ) = yi , i = 1, . . . , n.
Demonstrao. Observe que o problema de encontrar os coeficientes a0 , a1 ,. . . ,
an1 do polinmio
n1
p(x) = a0 + a1 x + a2 x2 + an1 xn1 = ak x k
X

k=0

tal que p(xi ) = yi equivalente a resolver o sistema linear com n equaes e n


incgnitas dado por
a0 + a1 x1 + a1 x21 + + an1 xn1
1 = y1 ,
a0 + a1 x2 + a2 x2 + + an1 x2
2 n1
= y2 ,
..
.
a0 + a1 xn + a2 xn + + an1 xn
2 n1
= yn .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.1. INTERPOLAO POLINOMIAL 153

O qual pode ser escrito na forma matricial como



1 x1 x21 x1n1 a0 y1

1 x2 x22 x2n1 a1 y2



1 =

x3 x23 x3n1

a2
y
3
.. .. .. . . .. .. ..

. . . . . . .




1 xn x2n xnn1 an1 yn

A matriz envolvida uma matriz de Vandermonde3 de ordem n cujo determi-


nante dado pelo produtrio duplo

(xj xi )
Y

1i<jn

fcil ver que se as abscissas so diferentes dois a dois, ento o determinante


no nulo. Disto decorre que a matriz envolvida inversvel e, portanto, o sistema
possui uma soluo que nica.
Esta abordagem direta que usamos no exemplo 6.1.1 e na demonstrao do
teorema 6.1.2 se mostra ineficiente quando o nmero de pontos grande e quando
existe grande variao nas abscissas. Neste caso, a matriz de Vandermonde mal
condicionada (ver [6]), o que acarreta um aumento dos erros de arredondamento
na soluo do sistema.
Uma maneira de resolver este problema escrever o polinmio em uma base
que produza um sistema bem condicionado.

Exerccios

E 6.1.1. Encontre o polinmio interpolador para o conjunto de pontos {(2, 47),


(0, 3), (1, 4), (2, 41)}. Ento, faa um grfico com os pontos e o polinmio inter-
polador encontrado.

E 6.1.2. Encontre o polinmio interpolador para o conjunto de pontos {(1, 1,25),


(0,5, 0,5), (1, 1,25), (1,25, 1,8125)}.

E 6.1.3. Mostre que:


a) Existem infinitas parbolas que interpolam dois pontos dados {(x1 , y1 ), (x2 , y2 )},
com x1 6= x2 .
3
Alexandre-Thophile Vandermonde, 1735 - 1796, matemtico francs.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


154 Clculo Numrico

b) No existe reta que interpola os pontos {(1, 1), (2, 2,1), (3, 3)}.

c) No existe parbola de equao y = a0 +a1 x+a2 x2 que interpola dois pontos


dados {(x1 , y1 ), (x1 , y2 )}, com y1 6= y2 . Mas, existem infinitas parbolas de
equao x = a0 + a1 y + a2 y 2 que interpolam estes pontos.

6.2 Diferenas divididas de Newton


Dado um conjunto com n pontos {(xi , yi )}ni=1 , o mtodo das diferenas
divididas de Newton consiste em construir o polinmio interpolador da forma

p(x) = a1 + a2 (x x1 ) + a3 (x x1 )(x x2 ) +
+ an (x x1 )(x x2 ) (x xn1 ).

Como p(xi ) = yi , i = 1, 2, . . . , n, os coeficientes ai satisfazem o seguinte sistema


triangular inferior:

a1 = y1
a1 + a2 (x2 x1 ) = y2
a1 + a2 (x3 x1 ) + a3 (x3 x1 )(x3 x2 ) = y3
..
.
a1 + a2 (xn x1 ) + + an (xn x1 ) (xn xn1 ) = yn

Resolvendo de cima para baixo, obtemos

a1 = y1
y2 a1 y2 y1
a2 = =
x2 x1 x2 x1
y3 y2 y2 y1
y3 a2 (x3 x1 ) a1 (x3 x2 )
(x2 x1 )
a3 = =
(x3 x1 )(x3 x2 ) (x3 x1 )
...

Note que os coeficientes so obtidos por diferenas das ordenadas divididas


por diferenas das abscissas dos pontos dados. Para vermos isso mais claramente,

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.2. DIFERENAS DIVIDIDAS DE NEWTON 155

Tabela 6.1: Esquema de diferenas divididas para um conjunto com trs pontos
{(xi , yi )}3i=1 .
j xj f [xj ] f [xj1 ,xj ] f [xj2 ,xj1 ,xj ]
1 x1 f [x1 ] = y1
f [x2 ] f [x1 ]
f [x1 ,x2 ] =
x2 x1
f [x2 ,x3 ] f [x1 ,x2 ]
2 x2 f [x2 ] = y2 f [x1 ,x2 ,x3 ] =
x3 x1
f [x3 ] f [x2 ]
f [x2 ,x3 ] =
x3 x2
3 x2 f [x2 ] = y2

introduzimos a seguinte notao:

f [xj ] := yj
f [xj+1 ] f [xj ]
f [xj , xj+1 ] :=
xj+1 xj
f [xj+1 , xj+2 ] f [xj , xj+1 ]
f [xj , xj+1 , xj+2 ] :=
xj+2 xj
..
.
f [xj+1 , xj+2 , . . . , xj+k ] f [xj , xj+1 , . . . , xj+k1 ]
f [xj , xj+1 , . . . , xj+k ] :=
xj+k xj

Chamamos f [xj ] de diferena dividida de ordem zero (ou primeira diferena divi-
dida), f [xi ,xj +1] de diferena dividida de ordem 1 (ou segunda diferena dividida)
e assim por diante.
Uma inspeo cuidadosa dos coeficientes obtidos em (6.2) nos mostra que

ak = f [x1 ,x2 , . . . ,xk ]

Isto nos permite esquematizar o mtodo conforme apresentado na tabela 6.1.

Exemplo 6.2.1. Use o mtodo de diferenas divididas para encontrar o polinmio


que passe pelos pontos (1,3),(0,1),(1,3),(3,43).

Soluo. Usando o esquema apresentado na tabela 6.1, obtemos

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


156 Clculo Numrico

j xj f [xj ] f [xj1 ,xj ] f [xj2 ,xj1 ,xj ] f [xj3 ,xj2 ,xj1 ,xj ]
1 1 3
13
= 2
0 (1)
2 (2)
2 0 1 =2
1 (1)
31 62
=2 =1
10 3 (1)
20 2
3 1 3 =6
30
43 3
= 20
31
4 3 43

Portanto, o polinmio interpolador do conjunto de pontos dados

p(x) = 3 2(x + 1) + 2(x + 1)x + (x + 1)x(x 1)

ou, equivalentemente, p(x) = x3 + 2x2 x + 1.

6.3 Polinmios de Lagrange


Outra maneira clssica de resolver o problema da interpolao polinomial
atravs dos polinmios de Lagrange. Dado um conjunto de pontos {xj }nj=1 distintos
dois a dois, definimos os polinmios de Lagrange como os polinmios de grau n 1
que satisfazem

1, se k = j
Lk (xj ) =
0, se k 6= j

Assim, o polinmio p(x) de grau n 1 que interpola os pontos dados, i.e. p(xj ) =
yj , j = 1, . . . ,n dado por
n
p(x) = y1 L1 (x) + y2 L2 (x) + + yn Ln (x) = yk Lk (x).
X

k=1

Para construir os polinmios de Lagrange, podemos analisar a sua forma fato-


rada, ou seja:
n
Lk (x) = ck (x xj )
Y

j=1
j6=i

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.4. APROXIMAO DE FUNES REAIS POR POLINMIOS
INTERPOLADORES 157
onde o coeficiente ck obtido da condio Lk (xk ) = 1:
n
1
Lk (xk ) = ck (xk xj ) = ck = Y
Y
n
j=1
j6=i
(xk xj )
j=1
j6=i

Portanto,
n
(x xj )
Lk (x) =
Y

j=1 (xk xj )
j6=i

Observao 6.3.1. O problema de interpolao quando escrito usando como base


os polinmios de Lagrange produz um sistema linear diagonal.
Exemplo 6.3.1. Encontre o polinmio da forma p(x) = a1 + a2 x + a3 x2 + a4 x3
que passa pelos pontos (0, 0), (1, 1), (2, 4), (3, 9).
Soluo. Escrevemos:
(x 1)(x 2)(x 3) 1 11
L1 (x) = = x3 + x2 x + 1
(0 1)(0 2)(0 3) 6 6
x(x 2)(x 3) 1 5
L2 (x) = = x3 x2 + 3x
1(1 2)(1 3) 2 2
x(x 1)(x 3) 1 3
L3 (x) = = x3 + 2x2 x
2(2 1)(2 3) 2 2
x(x 1)(x 2) 1 1 1
L4 (x) = = x3 x2 + x
3(3 1)(3 2) 6 2 3
Assim, temos:
P (x) = 0 L1 (x) + 1 L2 (x) + 4 L3 (x) + 9 L4 (x) = x2

2 10
p(x) = 0 L1 (x) + 1 L2 (x) + 0 L3 (x) + 1 L4 (x) = x3 3x2 + x.
3 3

6.4 Aproximao de funes reais por polin-


mios interpoladores
Teorema 6.4.1. Dados n + 1 pontos distintos, x0 , x1 , , xn , dentro de um
intervalo [a,b] e uma funo f com n + 1 derivadas contnuas nesse intervalo

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


158 Clculo Numrico

(f C n+1 [a,b]), ento para cada x em [a,b], existe um nmero (x) em (a,b) tal
que
f (n+1) ((x))
f (x) = P (x) + (x x0 )(x x1 ) (x xn ),
(n + 1)!
onde P (x) o polinmio interpolador. Em especial, pode-se dizer que
M
|f (x) P (x)| |(x x0 )(x x1 ) (x xn )| ,
(n + 1)!
onde
M = max |f (n+1) ((x))|
x[a,b]

Exemplo 6.4.1. Considere a funo f (x) = cos(x) e o polinmio P (x) de grau


2 tal que P (0) = cos(0) = 1, P ( 21 ) = cos( 21 ) e P (1) = cos(1). Use a frmula
de Lagrange para encontrar P (x). Encontre o erro mximo que se assume ao
aproximar o valor de cos(x) pelo de P (x) no intervalo [0,1]. Trace os grficos de
f (x) e P (x) no intervalo [0,1] no mesmo plano cartesiano e, depois, trace o grfico
da diferena cos(x) P (x). Encontre o erro efetivo mximo | cos(x) P (x)|.
Soluo. Usando polinmios de Lagrange, obtemos
(x 12 )(x 1)
P (x) = 1
(0 12 )(0 1)
1 (x 0)(x 1)
 
+ cos
2 ( 12 0)( 12 1)
(x 0)(x 12 )
+ cos(1)
(1 0)(1 12 )
1 0,0299720583066x 0,4297256358252x2
Para encontrar o erro mximo, precisamos estimar |f 000 (x)| = | sen (x)|
sen (1) < 0,85 e
1
 
max x x (x 1)

x[0,1] 2
 
O polinmio de grau trs Q(x) = x x 1
2
(x 1) tem um mnimo (negativo) em

x1 = 3+ 3
6
e um mximo (positivo) em x2 = 3 3
6
. Logo:
1
 
max x x (x 1) max{|Q(x1 )|, |Q(x2 )|} 0,0481125.

x[0,1] 2
Portanto:
0,85
|f (x) P (x)| < 0,0481125 0,0068159 < 7 103
3!
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
6.4. APROXIMAO DE FUNES REAIS POR POLINMIOS
INTERPOLADORES 159
Para encontrar o erro efetivo mximo, basta encontrar o mximo de |P (x)
cos(x)|. O mnimo (negativo) de P (x) cos(x) acontece em x1 = 4,29 103 e o
mximo (positivo) acontece em x2 = 3,29 103 . Portanto, o erro mximo efetivo
4,29 103 .
Exemplo 6.4.2. Considere o problema de aproximar o valor da integral 01 f (x)dx
R

pelo valor da integral do polinmio P (x) que coincide com f (x) nos pontos x0 = 0,
x1 = 12 e x2 = 1. Use a frmula de Lagrange para encontrar P (x). Obtenha o
valor de 01 f (x)dx e encontre uma expresso para o erro de truncamento.
R

O polinmio interpolador de f (x)


(x 12 )(x 1) 1 (x 0)(x 1) (x 0)(x 12 )
 
P (x) = f (0) + f + f (1)
(0 21 )(0 1) 2 ( 12 0)( 12 1) (1 0)(1 12 )
1
 
= f (0)(2x2 3x + 1) + f (4x2 + 4x) + f (1)(2x2 x)
2
e a integral de P (x) :
Z 1
2 3 1
1 4 1
      
P (x)dx = f (0) x3 x2 + x + f x3 + 2x2
0 3 2 0 2 3 0
2 1
  1
+ f (1) x3 x2
3 2 0
2 3 1 4 2 1
      
= f (0) +1 +f + 2 + f (1)
3 2  2 3 3 2
1 2 1 1
= f (0) + f + f (1)
6 3 2 6
Para fazer a estimativa de erro usando o teorema 6.4.1 e temos
Z 1 Z 1 Z 1
(x)dx (x)dx = f (x) P (x)dx


f P

0 0 0
Z 1
|f (x) P (x)|dx
0
M Z 1 1
 
(x 1) dx

x x
6 "0 2
M Z 1/2 
1

= x x (x 1)dx
6 0 2
1
Z 1   #
x x (x 1)dx
1/2 2
M 1 1 M
  
= = .
6 64 64 192
Lembramos que M = maxx[0,1] |f 000 (x)|.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


160 Clculo Numrico

Observao 6.4.1. Existem estimativas melhores para o erro de truncamento


para este esquema de integrao numrica. Veremos com mais detalhes tais esque-
mas na teoria de integrao numrica.
Exemplo 6.4.3. Use o resultado do exemplo anterior para aproximar o valor das
seguintes integrais:
Z 1
a) ln(x + 1)dx
0
Z 1
2
b) ex dx
0

Soluo. Usando a frmula obtida, temos que


Z 1
1
ln(x + 1)dx 0,39
0 96
Z 1
2 3,87
ex dx 0,75
0 192

Exerccios

E 6.4.1. Use as mesmas tcnicas usadas o resultado do exemplo 6.4.2 para


obter uma aproximao do valor de:
Z 1
f (x)dx
0

atravs do polinmio interpolador que coincide com f (x) nos pontos x = 0 e x = 1.

6.5 Interpolao linear segmentada


Considere o conjunto (xi ,yi )nj=1 de n pontos. Assumiremos que xi+1 > xi , ou
seja, as abscissas so distintas e esto em ordem crescente. A funo linear que
interpola os pontos xi e xi+1 no intervalo i dada por
(xi+1 x) (x xi )
Pi (x) = yi + yi+1
(xi+1 xi ) (xi+1 xi )
O resultado da interpolao linear segmentada a seguinte funo contnua
definida por partes no intervalo [x1 ,xn ]:

f (x) = Pi (x), x [xi ,xi+1 ]

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.6. INTERPOLAO CBICA SEGMENTADA - SPLINE 161

Exemplo 6.5.1. Construa uma funo linear por partes que interpola os pontos
(0,0), (1,4), (2,3), (3,0), (4,2), (5,0).
A funo procurada pode ser construda da seguinte forma:

0 x1 + 1 x0 ,0 x < 1


01 10




f (x) = 4 x2
12
+ 3 x1
21
,1 x < 2



3 x3 + 0 x2 ,2 x 3



23 32

Simplificando, obtemos:

x ,0 x < 1






f (x) = x + 5 ,1 x < 2


3x + 9 , 2 x 3


A figura 6.3 um esboo da funo f (x) obtida.

3.5

2.5

1.5

0.5

0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

Figura 6.3: Interpolao linear segmentada.

6.6 Interpolao cbica segmentada - spline


A ideia empregada na interpolao linear segmentada pode ser estendida atra-
vs da utilizao de polinmios de grau superior. A escolha de polinmios de grau

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


162 Clculo Numrico

superior implica uma maior liberdade (h um nmero maior de coeficientes) na


construo da interpolao. Parte dessa liberdade pode ser utilizada na exigncia
de suavidade para a interpolao.
Definio 6.6.1 (spline de ordem m). Dado um conjunto de n pontos I =
{(xj ,yj )}nj=1 tais que xj+1 > xj , ou seja, as abscissas so distintas e esto em
ordem crescente; um spline de ordem m que interpola estes pontos uma funo
s com as seguintes propriedades:
i) Em cada intervalo [xj ,xj+1 ), j = 1,2, . . . n 2 e no segmento [xn1 ,xn ] s
um polinmio de grau menor ou igual a m;
ii) Em algum dos intervalos s um polinmio de grau m;
iii) Em cada xj I, s(xj ) = yj , isto , o spline interpola os pontos dados;
iv) s uma funo de classe C m1 , isto , funo m 1 vezes continuamente
diferencivel.
So n 1 intervalos e em cada um deles h m + 1 coeficientes a se determinar.
As condies iii e iv impostas pela definio correspondem respectivamente a n e
m(n2) equaes. Estas ltimas, se devem exigncia de continuidade nos pontos
internos, ou seja, os pontos de I com ndices j = 2,3, . . . ,n 1. Portanto, h m 1
coeficientes a mais do que o nmero de equaes e, exceo do caso m = 1
(interpolao linear segmentada), o problema subdeterminado. Ou seja, uma
vez fixada a ordem m > 1, existem infinitos splines de ordem m que interpolam os
pontos do conjunto I.
O caso m = 3, denominado spline cbico, de grande interesse pois reproduz
o comportamento fsico de rguas delgadas com estrutura elstica homognea e
perfil uniforme sujeitas aos vnculos representados pelos pontos do conjunto I. A
equao diferencial que rege o comportamento do perfil dessas rguas um caso
particular do equao da viga de Euler-Bernoulli. Neste caso, a equao tem a
forma
d4 y
= 0, (6.1)
dx4
cuja soluo geral um polinmio de grau 3.
Vamos supor que um spline cbico que interpola o conjunto de pontos I co-
nhecido. Como esse spline uma funo de classe C 2 , as suas derivadas nos pontos
do conjunto I so conhecidas tambm. Seja yj0 , o valor dessa derivada em x = xj .
Agora, vamos considerar dois pares de pontos sucessivos de I, (xj ,yj ) e (xj+1 ,yj+1 ).
A forma do spline cbico no intervalo [xj ,xj+1 ) pode ser identificada com a soluo
da equao diferencial (6.1) no intervalo (xj ,xj+1 ) sujeita s condies de contorno
y(xj ) = yj , y 0 (xj ) = yj0 , y(xj+1 ) = yj+1 e y 0 (xj+1 ) = yj+1
0
.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.6. INTERPOLAO CBICA SEGMENTADA - SPLINE 163

A soluo desse problema de contorno escrita de modo conveniente como

sj (x) = aj + bj (x xj ) + cj (x xj )2 + dj (x xj )3 ,

onde as constantes aj , bj , cj e dj se relacionam s do problema de contorno. As


duas primeiras seguem imediatamente das condies de contorno em xj :

aj = yj e bj = yj0 .

As duas ltimas so obtidas pela soluo do sistema de equaes formado pelas


condies de contorno em xj+1 :

yj+1 yj 0
yj+1 + 2yj0 yj+1 yj 0
yj+1 + yj0
cj = 3 e dj = 2 +
(xj+1 xj )2 xj+1 xj (xj+1 xj )3 (xj+1 xj )2
Esta relao entre o conjunto de valores para a derivada de um spline cbico
{yj0 }j = 1n nos pontos de interpolao I e os coeficientes dos polinmios em cada
intervalo de interpolao pode ser resumida na seguinte proposio:
Proposio 6.6.1. Seja s um spline cbico que interpola o conjunto de pontos
I = {(xj ,yj )}nj=1 R2 tais que xj+1 > xj . Se {yj0 }nj=1 o conjunto dos valores da
derivada de s em xj , ento em cada intervalo [xj ,xj+1 ) (fechado tambm direita
quando j = n 1) o spline igual a sj :

sj (x) = aj + bj (x xj ) + cj (x xj )2 + dj (x xj )3 , (6.2)

onde
yj+1 yj 0
yj+1 + 2yj0
aj = yj , cj = 3 ,
h2j hj
0
+ yj0 (6.3)
yj+1 yj yj+1
bj = yj , dj = 2
0
+
h3j h2j
e
hj = xj+1 xj , j = 1,2, . . . ,n 1 (6.4)
a distncia entre as abscissas de dois pontos de interpolao consecutivos.
De acordo com a proposio anterior, toda informao sobre um spline cbico
armazenada no conjunto {(xj ,yj ,yj0 )}nj=1 . Por construo, uma funo s definida a
partir de (6.2), (6.3) e (6.4) com um conjunto {(xj ,yj ,yj0 )}nj=1 R3 , onde xj+1 > xj
de classe C 1 mas no necessariamente um spline cbico. Para ser um spline
cbico, os valores do conjunto {yj0 }nj=1 devem garantir a continuidade da derivada
segunda de s em todo intervalo (x1 ,xn ). Ou seja, devemos ter

lim s00j (x) = s00j+1 (xj+1 )


x%xj+1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


164 Clculo Numrico

em todos os pontos internos j = 1,2, . . . ,n 2. Em termos dos coeficientes dos


polinmios cbicos (6.2), a equao anterior assume a forma

2cj + 6dj hj = 2cj+1 , j = 1,2, . . . ,n 2.

Esta ltima equao e (6.3) permitem construir um sistema de equaes lineares


para as variveis yj0 :

Proposio 6.6.2. Dado o conjunto de pontos I = {(xj ,yj )}nj=1 R2 tais que
xj+1 > xj , as derivadas de um spline cbico que interpola os pontos I, yj0 , j =
1,2, . . . ,n satisfazem o sistema de equaes algbricas lineares
!
yj yj1 yj+1 yj
0
hj yj1 + 2(hj1 + hj )yj0 + 0
hj1 yj+1 = 3 hj + hj1 , (6.5)
hj1 hj

onde j = 2,3, . . . ,n 1 e hj = xj+1 xj .

O sistema de equaes (6.5) subdeterminado. So n variveis e n 2 equa-


es. A incluso de duas equaes adicionais linearmente independentes das n 2
equaes (6.5) possibilita a existncia de uma nica soluo. Tipicamente essas
equaes adicionais envolvem o comportamento do spline na fronteira ou na sua
vizinhana. A seguir, veremos quatro escolhas mais conhecidas.

6.6.1 Spline natural


Uma forma de definir as duas equaes adicionais para completar o sistema
(6.5) impor condies de fronteira livres (ou naturais), ou seja,

s00 (x1 ) = s00 (xn ) = 0. (6.6)

De acordo com (6.2) essas equaes implicam respectivamente

c1 = 0 e 2cn1 + 6dn1 hn1 = 0,

ou seja,
y2 y1


2y10 + y20 = 3
h1





. (6.7)
yn yn1


+ 2yn0 = 3

0
yn1



hn1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.6. INTERPOLAO CBICA SEGMENTADA - SPLINE 165

Essas duas equaes em conjunto com as equaes (6.5) formam um sistema de n


equaes algbricas lineares Ay 0 = z, onde

2 1 0 0 0 0

h2 2(h1 + h2 ) h1 0 0 0

0 h3 2(h2 + h3 ) h2 0 0
A= , (6.8)

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

. . . . . . .


0 0 0 hn1 2(hn1 + hn2 ) hn2
0 0 0 0 1 2


y2 y1
h1

h2 y2hy + h1 y3hy

y10
1
1
2
2


y20 h3 y3hy + h2 y4hy
2 3


y0 = e z= 3 (6.9)
2 3
.. .. .

. .




yn2
hn1 yn1hn2 + hn2 ynhy

yn0
n1
n1


yn yn1
hn1

Observe que a matriz A diagonal dominante estrita e, portanto, o sistema Ay 0 = z


possui soluo nica. Calculado y 0 , os valores dos aj , bj , cj e dj so obtidos
diretamente pelas expresses (6.3).

Exemplo 6.6.1. Construa um spline cbico natural que passe pelos pontos (2, 4,5),
(5, 1,9), (9, 0,5) e (12, 0,5).

Soluo. O spline desejado uma funo definida por partes da forma:



a1 + b1 (x 2) + c1 (x 2)2 + d1 (x 2)3 , 2 x < 5






s(x) = a2 + b2 (x 5) + c2 (x 5)2 + d2 (x 5)3 , 5 x < 9 . (6.10)


a3 + b3 (x 9) + c3 (x 9)2 + d3 (x 9)3 , 9 x 12


As variveis y10 , y20 , y30 e y40 resolvem o sistema Ay 0 = z, onde



2 1 0 0 2 1 0 0

4 2(4 + 3) 3 0 4 14 3 0

A= =

,
0 3 2(3 + 4) 4 0 3 14 4



0 0 1 2 0 0 1 2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


166 Clculo Numrico


0
y1
1
3
(1,9
4,5) 6,4

3 (1,9 4,5) + 4 (0,5 (1,9))
0 4 3
y2 20,2

y= e z= 3 = .
(0,5 (1,9)) + 4 (0.5 (0,5)) 1,4
0 3
y
3 4 3

y40 1
3
(0,5 (0.5)) 1
A soluo y10 = 2,83, y20 = 0,73, y30 = 0,46 e y40 = 0,73. Calculamos os
coeficientes usando as expresses (6.3):

a1 = y1 = 4,5 , b1 = y10 = 2,83,


a2 = y2 = 1,9 , b2 = y20 = 0,73,
a3 = y3 = 0,5 . b3 = y30 = 0,46,

c1 = 0 , d1 = 0,07,
c2 = 0,7 , d2 = 0,0916,
c3 = 0,4 , d3 = 0,04.

Portanto:




4,5 2,8
3(x 2) + 0,07(x 2)3 ,2 x < 5

S(x) =
1,9 0,73(x 5) + 0,7(x 5)2 0,0916(x 5)3 , 5 x < 9 .


0,5 + 0,4

6(x 9) 0,4(x 9)2 + 0,04(x 9)3 , 9 x 12

6.6.2 Spline fixado


O spline fixado s obtido pela escolha dos valores das derivadas nas extremi-
dades do intervalo de interpolao. Isto diminui o nmero de variveis para n 2
pois y10 e yn0 deixam de ser incgnitas.
As equaes (6.5) formam um sistema de n 2 equaes Ay 0 = z, onde

2(h1 + h2 ) h1 0 0 0 0

h3 2(h2 + h3 ) h2 0 0 0

0 h4 2(h3 + h4 ) h3 0 0
A= ,

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

. . . . . . .


0 0 0 hn2 2(hn3 + hn2 ) hn3
0 0 0 0 hn1 2(hn2 + hn1 )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.6. INTERPOLAO CBICA SEGMENTADA - SPLINE 167


h2 y2hy 1
+ h1 y3hy 2
h2 y10
y20 1 2

h3 y3hy h2 y4hy

2 3
+
y30 2 3

..

y0 = e z= 3 .

.. .
.

yn3 yn2
hn2 yn2 + hn3 yn1


0
hn3 hn2
yn1
yn2

hn1 yn1
hn2 + hn2 ynhy
n1
n1
hn2 yn0

Observe que a matriz A diagonal dominante estrita e, portanto, o sistema Ay 0 = z


possui soluo nica.

6.6.3 Spline not-a-knot


O spline not-a-knot definido com um spline cbico que satisfaz as equaes
adicionais

lim s000
1 (x) = s2 (x2 ) e
000
lim s000
n2 (x) = sn1 (xn1 ).
000
x%x2 x%xn1

Em termos dos coeficientes (6.2), as equaes anteriores correspondem a

d1 = d2 e dn2 = dn1 ,

ou seja,

y2 y1 y3 y2
 
h22 y10 + (h22 h21 )y20 h21 y30 =2 h22 h21

h1 h2

!
.

yn1 yn2 yn yn1

0
h2n1 yn2 + (h2n1 h2n2 )yn1
0
h2n2 yn0 = 2 h2n1 h2n2

hn2 hn1

Essas duas equaes agregadas s equaes (6.5) formam um sistema de n equaes


Ay 0 = z, onde

h22 h22 h21 h21 0 0 0

h2 2(h1 + h2 ) h1 0 0 0

0 h3 2(h2 + h3 ) h2 0 0
A= ,

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

. . . . . . .


0 0 0 hn1 2(hn2 + hn1 ) hn2
0 0 0 h2n1 h2n1 h2n2 h2n2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


168 Clculo Numrico

y2 y1 y3 y2
 
2 h22 h21

h1 h2 
y10


y2 y1 y3 y2
3 h2 h1 + h1 h2


y20


..
y0 = z=


e . .
..


.
 
yn1 yn2 yn yn1

3 hn1 hn2 + hn2 hn1


yn0


y n1 y n2 y n y n1


2
2 hn1 2 hn2
hn2 hn1
Se reduzirmos esse sistema pela eliminao das incgnitas e yn0 , o sistema re- y10
sultante possui uma matriz de coeficientes diagonal dominante estrita, portanto,
a soluo nica.
O termo not-a-knot (no n) relaciona-se nomenclatura dos splines. O termo
n utilizado para os pontos interpolados. Neles, a derivada terceira da funo
spline descontnua, portanto, quando impomos a continuidade dessa derivada em
x2 e xn1 como se esses pontos deixassem de ser ns.

6.6.4 Spline peridico


Se o conjunto de n pontos da interpolao I for tal que y1 = yn , ento
possvel construir o spline peridico, definido com um spline cbico que satisfaz as
seguintes condies de periodicidade
s01 (x1 ) = s0n1 (xn ) e s001 (x1 ) = s00n1 (xn ).
Em termos dos coeficientes (6.2)
b1 = bn1 e 2c1 = 2cn1 + 6dn1 hn1 ,
ou seja,




y10 yn0 = 0



! .
y2 y1 yn yn1


2hn1 y10 + hn1 y20 + h1 yn1
0
+ 2h1 yn0 = 3 hn1 + h1





h1 hn1
(6.11)
Essas duas equaes agregadas s equaes (6.5) formam um sistema de n equaes
Ay 0 = z, onde

1 0 0 0 0 1

h2 2(h1 + h2 ) h1 0 0 0

0 h3 2(h2 + h3 ) h2 0 0
A= ,

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

. . . . . . .


0 0 0 hn1 2(hn2 + hn1 ) hn2
2hn1 hn1 0 0 h1 2h1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


6.6. INTERPOLAO CBICA SEGMENTADA - SPLINE 169


0
y10

h2 y2hy + h1 y3hy

1 2
y20 1 2

..

y0 = e z= 3 .

.. .
.

y
y
+ hn2 ynhy

h n1 n2 n1
n1 hn2
yn0 n1

hn1 y2hy
1
1
+ h1 ynhy
n1
n1

Neste caso tambm, se reduzirmos esse sistema pela eliminao das incgnitas y10
e yn0 , o sistema resultante possui uma matriz de coeficientes diagonal dominante
estrita, portanto, a soluo nica.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 7

Ajuste de curvas

Neste captulo, discutimos sobre problemas de ajuste de curvas pelo mtodo


dos mnimos quadrados. Mais precisamente, dado um conjunto de N pontos
N
{(xj , yj ) R2 }j=1 e uma famlia de funes F = {f : R R; y = f (x)}, o
problema de ajuste de curvas consiste em encontrar uma funo da famlia F que
melhor se ajusta aos pontos dados, no necessariamente que os interpola.

Figura 7.1: Exemplo de um problema de ajuste de uma reta entre trs pontos,
veja o exemplo 7.0.1.

Aqui, o termo melhor se ajusta entendido no sentido de mnimos quadrados,


isto , buscamos encontrar uma funo f F tal que f (x) resolve o seguinte
problema de minimizao

N
min (f (xj ) yj )2 ,
X
f F
j=1

170
7.1. AJUSTE DE UMA RETA 171

ou seja, f (x) a funo da famlia F cujo erro quadrtico entre yj e f (xj ), j =


1, 2, . . . , N , mnimo. A expresso
N
R := (f (xj ) yj )2
X

j=1

= (f (x1 ) y1 )2 + (f (x2 ) y2 )2 + + (f (xN ) yN )2

chamada de resduo e consiste na soma dos quadrados das diferenas entre a


ordenadas yj e o valor da funo procurada f (xj ).

Exemplo 7.0.1. Dado o conjunto de pontos {(1, 1,2), (1,5, 1,3), (2, 2,3)} e a fam-
lia de retas f (x) = a + bx, podemos mostrar que f (x) = 0,05 + 1,1x a reta que
melhor aproxima os pontos dados no sentido de mnimos quadrados. Os pontos e
a reta ajustada e so esboados na figura 7.1.

Na sequncia, discutimos o procedimento de ajuste de uma reta, ento, mos-


tramos a generalizao da tcnica para problemas lineares de ajuste e, por fim,
discutimos alguns problemas de ajuste no lineares.
Ao longo deste captulo, estaremos assumindo que as seguintes bibliotecas e
mdulos Python esto carregadas:

>>> from __future__ import division


>>> import numpy as np
>>> from numpy import linalg
>>> import matplotlib.pyplot as plt

7.1 Ajuste de uma reta


Nesta seo, discutiremos o procedimento de ajuste de uma reta a um conjunto
de pontos dados. Em outras palavras, discutiremos o mtodo de soluo para o
problema de encontrar o polinmio do primeiro grau que melhor se aproxima a um
dado conjunto de pontos pelo mtodo dos mnimos quadrados.
Seja, ento, {(x1 ,y1 ), (x2 ,y2 ), . . . , (xN ,yN )} um conjunto de N pontos dados.
Buscamos encontrar a funo f (x) = a1 + a2 x tal que o resduo
N
R= (f (xj ) yj )2
X

j=1

seja mnimo.
Para tal, primeiro observamos que f (xj ) = a1 + a2 xj e, portanto, o resduo
pode ser escrito explicitamente como uma funo de a1 e a2 conforme a seguinte

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


172 Clculo Numrico

expresso:
N
R(a1 ,a2 ) = (a1 + a2 xj yj )2 .
X

j=1

Observamos que R(a1 ,a2 ) uma forma quadrtica e que seu mnimo ocorre
quando suas derivadas parciais primeiras so iguais a zero, isto ,
N
R X
= (a1 + a2 xj yj )2 = 0,
a1 a1 j=1
N
R X
= (a1 + a2 xj yj )2 = 0.
a2 a2 j=1

Ou seja,
N
2 (a1 + a2 xj yj ) 1 = 0,
X

j=1
N
2 (a1 + a2 xj yj ) xj = 0,
X

j=1

e isolando as incgnitas temos


N N N
1 + a2 xj =
X X X
a1 yj ,
j=1 j=1 j=1
N N N
x j + a2 x2j =
X X X
a1 y j xj .
j=1 j=1 j=1

Observando que N j=1 1 = N , o sistema linear acima pode ser escrito na forma
P

matricial M a = w, isto ,

PN PN
N j=1 xj a1 j=1 yj
= P . (7.1)

P
N PN 2 N
j=1 xj j=1 xj a2 j=1 xj yj
| {z } | {z } | {z }
M a w

Este sistema linear de duas equaes e duas incgnitas admite uma nica so-
luo quando o determinante da matriz dos coeficientes for no nulo, isto ,
2
N N
x2j xj 6= 0
X X
N
j=1 j=1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.1. AJUSTE DE UMA RETA 173

Pode-se mostrar usando a desigualdade de CauchySchwarz que isto acon-


tece quando existem pelo menos duas abscissas diferentes envolvidas no ajuste.
Usando a frmula da inversa de uma matriz dois-por-dois, chegamos s seguintes
frmulas para os coeficientes a1 e a2 :
PN PN PN PN
j=1 x2j j=1 yj j=1 xj j=1 xj y j
a1 = PN P 2
N
N j=1 x2j j=1 xj
PN PN PN (7.2)
N j=1 xj y j j=1 xj j=1 yj
a2 = PN P 2
N
N j=1 x2j j=1 xj

Por fim, observamos que o sistema M a = w descrito na equao (7.1) pode ser
reescrito na forma V T V a = V T y, onde V := [1 x] a matriz dos coeficientes do
seguinte sistema linear sobre determinado:
a1 + a2 x 1 = y 1
a1 + a2 x 2 = y 2
.. (7.3)
.
a1 + a2 x N = y N
Se os pontos dados no so colineares, este sistema no tm soluo. Mas, sempre
que pelo menos duas abscissas foram diferentes, M = V T V uma matriz invertvel
e (veja o exerccio 7.1.4), ento
 1
a = V TV V T y, (7.4)

nos fornece a chamada soluo por mnimos quadrados do sistema (7.3). Note que
esta uma forma de se obter os coeficientes a = (a1 , a2 ) equivalente quela dada
em (7.2).
Exemplo 7.1.1. Retornemos ao exemplo 7.0.1. Isto , dado o conjunto de pontos
{(1, 1,2), (1,5, 1,3), (2, 2,3)}, encontrar a funo do tipo f (x) = a1 +a2 x que melhor
se ajusta os pontos dados no sentido de mnimos quadrados.
Soluo. Usando as frmulas em (7.2), obtemos
7,25 4,8 4,5 7,75
a1 = = 0,05,
3 7,25 20,25
3 7,75 4,5 4,8
a2 = = 1,1.
3 7,25 20,25
Ou seja, verificamos que, de fato, a funo f (x) = 0,05 + 1,1x corresponde reta
que melhor ajusta os pontos dados no sentido de mnimos quadrados. Os pontos
e a reta ajustada esto esboados na figura 7.1.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


174 Clculo Numrico

Deixamos ao leitor a verificao de que os coeficientes a1 e a2 tambm podem


ser obtidos pela expresso (7.4).
Em Python, podemos computar os coeficientes a1 e a2 da seguinte forma:
>>> xi = np.array([1, 1.5, 2])
>>> yi = np.array([1.2,1.3,2.3])
>>> V = np.array([xi**1,xi**0]).transpose();V
array([[ 1. , 1. ],
[ 1.5, 1. ],
[ 2. , 1. ]])
>>> a = ((np.linalg.inv((V.transpose()).dot(V))).dot(V.transpose())).dot(yi);a
array([ 1.1 , -0.05])
Ento, o grfico da funo ajustada e dos pontos pode ser obtido com os comandos:
>>> xx = np.linspace(0.5,2.5)
>>> plt.plot(xi,yi,'ro',xx,np.polyval(a,xx),'b-')
>>> plt.grid();plt.show()

O procedimento apresentado de ajuste de uma reta por mnimos quadrados
pode ser generalizado para qualquer famlia de funes que seja um espao ve-
torial de dimenso finita. Problemas de ajuste com tais famlias de funes o
que chamamos de problemas de ajuste linear, os quais exploramos em detalhe na
prxima seo.

Exerccios

E 7.1.1. Sejam dados o conjunto de pontos {(0,23, 0,54), (0,30, 0,54),


(0,04, 0,57)}. Encontre a funo f (x) = a1 + a2 x que melhor se ajusta no sentido
de mnimos quadrados aos pontos dados. Faa, ento, um grfico com os pontos e
o esboo da funo ajustada.

E 7.1.2. Seja dado o conjunto de pontos {(0,35, 0,2), (0,15, 0,5), (0,23, 0,54),
(0,35, 0,7)}. Encontre a funo f (x) = a1 + a2 x que melhor se ajusta no sentido
de mnimos quadrados aos pontos dados. Faa, ento, um grfico com os pontos e
o esboo da funo ajustada.

E 7.1.3. Seja dado o conjunto de pontos {(1,94, 1,02), (1,44, 0,59), (0,93, 0,28),
(1,39, 1,04)}. Encontre a funo f (x) = a1 + a2 x que melhor se ajusta no sentido
de mnimos quadrados aos pontos dados. Ento, responda cada item:
a) Encontre o valor de f (1).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.2. AJUSTE LINEAR GERAL 175

b) Encontre o valor de f (0,93).

c) Encontre o valor de |f (0,93) (0,28)|.

d) Encontre o valor do resduo R = j=1 (f (xj ) yj )2 .


PN

Fornea os valores calculados com 7 dgitos significativo por arredondamento.

E 7.1.4.
a) Mostre que o sistema linear M a = w descrito na equao 7.1 pode ser rees-
crito na forma V T V a = V T y, onde V = [1 x].

b) Mostre que V , como definido no item a), tem posto igual a 2 quando pelo
j=1 so diferentes. E,
menos duas abscissas do conjunto de pontos {(xj , yj )}N
portanto, M = V V uma matriz invertvel.
T

7.2 Ajuste linear geral


O problem geral de ajuste linear consiste em dada uma famlia F gerada
pelo conjunto de m funes {f1 (x), f2 (x), . . . , fm (x)} e um conjunto de n pon-
tos {(x1 , y1 ), (x2 , y2 ), . . ., (xn , yn )}, calcular os coeficientes a1 , a2 , . . ., am tais que
a funo dada por
m
f (x) = aj fj (x) = a1 f1 (x) + a2 f2 (x) + . . . + am fm (x)
X

j=1

minimiza o resduo n
R= [f (xi ) yi ]2 .
X

i=1

Aqui, a minimizao feita por todas as possveis escolhas dos coeficientes a1 , a2 ,


. . ., am .
Com o objetivo de tornar a desenvolvimento mais claro, vamos escrever R como
a soma dos resduos parciais:
n
R= Ri , onde Ri := [f (xi ) yi ]2 .
X

i=1

Do fato que f (xi ) = aj fj (xi ), temos que cada resduo pode ser escrito como
Pm
j=1
2
m
Ri = aj fj (xi ) yi .
X

j=1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


176 Clculo Numrico

A fim de encontrar o ponto de mnimo, resolvemos o sistema oriundo de igualar


a zero cada uma das derivadas parciais de R em relao aos m coeficientes aj , isto
, devemos resolver:


n n m
R Ri
= 2 =2 aj fj (xi ) yi f1 (xi ) = 0,
X X X

a1 i=1 a1 i=1 j=1

n n m
R Ri
= 2 =2 aj fj (xi ) yi f2 (xi ) = 0,
X X X

a2 i=1 a2 i=1 j=1
..
.
n n m
R Ri
= 2 =2 aj fj (xi ) yi fm (xi ) = 0.
X X X

am i=1 a m i=1 j=1

Dividindo cada equao por 2 e escrevendo na forma matricial, obtemos M a =


w, onde a matriz M dada por:

n n n
f1 (xi )2 f2 (xi )f1 (xi ) fm (xi )f1 (xi )
P P P
i=1 i=1 i=1

n n n
f1 (xi )f2 (xi ) f2 (xi )
2
fm (xi )f2 (xi )
P

P P

i=1 i=1 i=1
n n n
M= f1 (xi )f3 (xi ) f2 (xi )f3 (xi ) fm (xi )f3 (xi )
P
.
P P

i=1 i=1 i=1
.. .. .. ..

.


. . .


n n n
f1 (xi )fm (xi ) f2 (xi )fm (xi ) fm (xi )
2
P P P
i=1 i=1 i=1

E os vetores a e w, por:

n
f1 (xi )yi
P
i=1

a1

n
f2 (xi )yi
P


i=1

a2
n

a= e w= f3 (xi )yi

..
P
.

i=1
..



.
am


n
fm (xi )yi
P
i=1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.2. AJUSTE LINEAR GERAL 177

Agora, observamos que M = V T V e w = V T y, onde a matriz V dada por:



f1 (x1 ) f2 (x1 ) fm (x1 )

f1 (x2 ) f2 (x2 ) fm (x2 )


V = f (x ) f2 (x3 ) fm (x3 )

1 3
.. .. .. ..

.
. . .

f1 (xn ) f2 (xn ) fm (xn )

e o vetor coluna y = (y1 , y2 , . . . , yN ),


Ento, o problema de ajuste se reduz a resolver o sistema linear M a = w, ou
V T V a = V T y. Este sistema linear tem soluo nica se a matriz M for inversvel.
O teorema a seguir mostra que isto acontece sempre a matriz V possui posto m,
ou seja, o nmero de linhas linearmente independentes for igual ao nmero de
colunas.1
Teorema 7.2.1. A matriz M = V T V quadrada de ordem m e inversvel
sempre que o posto da matriz V igual a nmero de colunas m.
Demonstrao. Para provar que M inversvel, precisamos mostrar que se v um
vetor de ordem m e M v = 0, ento v = 0. Suponha, ento, que M v = 0, isto ,
V T V v = 0. Tomando o produto interno da expresso V T V v = 0 com v, temos:
D E
0 = V T V v,v = hV v,V vi = kV vk2

Portato M v = 0 implica obrigatoriamente V v = 0. Como o posto de V igual ao


nmero de colunas, v precisar ser o vetor nulo.
Observao 7.2.1. Este problema equivalente a resolver pelo mtodos dos m-
nimos quadrados o seguinte sistema linear:

f1 (x1 ) f2 (x1 ) fm (x1 ) y1

a1
f1 (x2 ) f2 (x2 ) fm (x2 ) y2


a2

f (x ) f2 (x3 ) fm (x3 ) . =

y
..
1 3 3
.. .. .. .. ..

. . . . .


am


f1 (xn ) f2 (xn ) fm (xn ) yn

O caso de ajuste de um reta para um conjunto de pontos um caso particular


de ajuste linear.
1
Nota-se que o posto no pode ultrapassar o nmero de colunas.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


178 Clculo Numrico

Figura 7.2: Grfico da soluo do problema apresentado no exemplo 7.2.1.

Exemplo 7.2.1. Encontre a reta que melhor se ajusta aos pontos dados na se-
guinte tabela:

i 1 2 3 4 5
xi 0,01 1,02 2,04 2,95 3,55
yi 1,99 4,55 7,20 9,51 10,82

Soluo. O problema consiste em ajustar uma funo da forma f (x) = a1 +a2 x no


conjunto de pontos dados. Notamos que f (x) uma funo da famlia gerada pelo
conjunto de funes {f1 (x) = 1, f2 (x) = x}. Ento, aplicando o procedimento
acima, temos que o vetor dos coeficientes a = (a1 , a2 ) soluo por mnimos
quadrados do sistema linear V a = y, onde:

f1 (x1 ) f2 (x1 ) 1 0,01

f1 (x2 ) f2 (x2 ) 1 1,02


V = f (x )
=
f2 (x3 ) 1 2,04

1 3 .

f1 (x4 ) f2 (x4 ) 1 2,95



f1 (x5 ) f2 (x5 ) 1 3,55

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.2. AJUSTE LINEAR GERAL 179

Figura 7.3: Grfico da soluo do problema apresentado no exemplo 7.2.2.

Ou seja, a soluo do sistema V T V a = V T y dado por



5 9,57 a1 34,07
=
9,57 26,5071 a2 85,8144
A soluo desse sistema a1 = 1,9988251 e a2 = 2,5157653. A figura 7.2, apresenta
um grfico dos pontos e da reta ajustada.

Exemplo 7.2.2. Encontre a funo f (x) = a1 sen (x) + a2 cos(x) que melhor se
ajusta pelo critrios dos mnimos quadrados aos seguintes pontos dados
i 1 2 3 4 5
xi 0,00 0,25 0,50 0,75 1,00
yi 153 64 242 284 175
Soluo. Pelo procedimento visto nesta seo, temos que os coeficientes a1 e a2
so dados pela soluo por mnimos quadrados do seguinte sistema linear V a = y
a1 sen (x1 ) + a2 cos(x1 ) = y1
a1 sen (x2 ) + a2 cos(x2 ) = y2
a1 sen (x3 ) + a2 cos(x3 ) = y3
a1 sen (x4 ) + a2 cos(x4 ) = y4
a1 sen (x5 ) + a2 cos(x5 ) = y5

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


180 Clculo Numrico

cuja matriz de coeficientes V :



sen (0) cos(0)

sen (0,25) cos(0,25)


V = sen (0,5) cos(0,5)



sen (0,75) cos(0,75)



sen () cos()

Ento, a soluo por mnimos quadrados



244,03658
a = (V T V )1 V T y = .
161,18783

Ou seja, f (x) = 244,03658 sen (x) 161,18783 cos(x) a funo ajustada ao


conjunto de pontos dados. A figura 7.3 apresenta o grfica de f (x) e dos pontos
dados.
Em Python, podemos computar os coeficientes da funo f (x) da seguinte
forma:
>>> xi = np.array([0,0.25,0.5,0.75,1])
>>> yi = np.array([-153,64,242,284,175])
>>> V = np.array([np.sin(np.pi*xi),np.cos(np.pi*xi)]).transpose()
>>> a = ((np.linalg.inv((V.transpose()).dot(V))).dot(V.transpose())).dot(yi)

Observao 7.2.2. Em Python, quando resolvemos um sistema Ax = b usando

>>> x = np.linalg.inv(A).dot(b)

estamos computando a inversa da matriz A e multiplicando por b. Dde forma mais


eficiente, podemos usar a funo numpy.linalg.solve, digitando:

>>> x = np.linalg.solve(A,b)

Isto requer que a matriz A seja quadrada e de posto completo. Alternativa-


mente, para obtermos a soluo por mnimos quadrados, podemos usar a funo
numpy.linalg.lstsq. Neste caso, digitamos:

>>> np.linalg.lstsq(A,b)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.2. AJUSTE LINEAR GERAL 181

7.2.1 Ajuste polinomial


O ajuste polinomial o caso particular do ajuste linear para funes poli-
nomiais, isto , funes do tipo

p(x) = a1 + a2 x + + am xm1 .

Neste caso, a matriz V associada ao ajuste dos pontos {(x1 , y1 ), (x2 , y2 ), (x3 , y3 ),
. . ., (xn ,yn )} dada por:

1 x1 x1 x1
2 m1

1 x2 x22 xm1

2

V = 1

x3 x23 xm1
3


.. .. ... .
..

. .


1 xn x2n xm1
n

Ento, os coeficientes ai , i = 1, 2, . . . , m, so dados pela soluo do sistema linear


V T V a = v T y:
n n n

xm1
P P P
n xj j

yj
a1

j=1 j=1 j=1
n n n
n
P P
x2j xm
P P
x
a2 xy
j=1 j j j=1 j j

=

j=1 j=1
.

.. .. .. ..

.

. .

. . .



n n n n
P P
m1 2m1 a m1
xm
P P
xj xj xj yj

j p+1
j=1 j=1 j=1 | {z } j=1
| {z } a | {z }
VTV VTy

Exemplo 7.2.3. Entre o polinmio de grau 2 que melhor se ajusta aos pontos
dados na seguinte tabela:

i 1 2 3 4 5
xi 0,00 0,25 0,50 0,75 1,00
yi 153 64 242 284 175

Soluo. Um polinmio de grau 2 pode ser escrito na seguinte forma:

p(x) = a1 + a2 x + a3 x2 .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


182 Clculo Numrico

Figura 7.4: Grfico da soluo do problema apresentado no exemplo 7.2.3.

Assim, o problema se resume em encontrarmos a soluo por mnimos quadrados


do seguinte sistema linear:
a1 + a2 x1 + a3 x21 = y1
a2 + a2 x2 + a3 x22 = y2
a3 + a2 x3 + a3 x23 = y3
a4 + a2 x4 + a3 x24 = y4
a5 + a2 x5 + a3 x25 = y5
Ou, escrita na forma matricial, V a = y, onde:

1 x1 x1
2

1 x2 x22


V = 1

x3 x23


1 x4 x24



1 x5 x25
A soluo por mnimos quadrados , ento:

165,37143

a = (V T V )1 V T y = 1250,9714



900,57143

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.2. AJUSTE LINEAR GERAL 183

Ou seja, o polinmio de grau 2 que melhor ajusta os pontos dados no sentido de


mnimos quadrados p(x) = 165,37143 + 1250,9714x 900,57143x2 . A figura 7.4
mostra o grfico do polinmio ajustado e os pontos dados.
Em Python, podemos computar os coeficientes do polinmio p(x) da seguinte
forma:
>>> xi = np.array([0,0.25,0.5,0.75,1])
>>> yi = np.array([-153,64,242,284,175])
>>> V = np.array([xi**2,xi**1,xi**0]).transpose()
>>> a = ((np.linalg.inv((V.transpose()).dot(V))).dot(V.transpose())).dot(yi)
Para fazermos o grfico do polinmio e dos pontos, digitamos:
>>> xx = np.linspace(-0.25,1.25)
>>> plt.plot(xi,yi,'ro',xx,np.polyval(a,xx),'b-')
>>> plt.grid();plt.show()

Exerccios

E 7.2.1. Encontre o polinmio p(x) = a1 + a2 x + a3 x2 que melhor se ajusta


no sentido de mnimos quadrados aos pontos:

i 1 2 3 4
xi 1,50 0,50 1,25 1,50
yi 1,15 0,37 0,17 0,94

E 7.2.2. Encontrar a parbola y = ax2 +bx+c que melhor aproxima o seguinte


conjunto de dados:

i 1 2 3 4 5
xi 0,01 1,02 2,04 2,95 3,55
yi 1,99 4,55 7,20 9,51 10,82

E 7.2.3. Dado o seguinte conjunto de dados

xi 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1,0
yi 31 35 37 33 28 20 16 15 18 23 31

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


184 Clculo Numrico

a) Encontre a funo do tipo f (x) = a + b sen (2x) + c cos(2x) que melhor


aproxima os valores dados.

b) Encontre a funo do tipo f (x) = a + bx + cx2 + dx3 que melhor aproxima


os valores dados.

7.3 Aproximando problemas no lineares por pro-


blemas lineares
Eventualmente, problemas de ajuste de curvas podem recair em um sistema
no linear. Por exemplo, para ajustar funo y = Aebx ao conjunto de pontos
(x1 ,y1 ), (x2 ,y2 ) e (x3 ,y3 ), temos que minimizar o resduo2

R = (Aex1 b y1 )2 + (Aex2 b y2 )2 + (Aex3 b y3 )2

ou seja, resolver o sistema


R
= 2(Aex1 b y1 )ex1 b + 2(Aex2 b y2 )ex2 b + 2(Aex3 b y3 )ex3 b = 0
A
R
= 2Ax1 (Aex1 b y1 )ex1 b + 2Ax2 (Aex2 b y2 )ex2 b
b
+ 2Ax3 (Aex3 b y3 )ex3 b = 0

que no linear em A e b. Esse sistema pode ser resolvido pelo mtodo de Newton-
Raphson, o que pode se tornar custoso, ou mesmo invivel quando no dispomos
de uma boa aproximao da soluo para inicializar o mtodo.
Felizmente, algumas famlias de curvas admitem uma transformao que nos
leva a um problema linear. No caso da curva y = Aebx , observe que ln y = ln A+bx.
Assim, em vez de ajustar a curva original y = Aebx a tabela de pontos, ajustamos
a curva submetida a transformao logartmica

y := a1 + a2 x = ln A + bx.

Usamos os pontos ( yj ) := (xj , ln yj ), j = 1,2,3 e resolvemos o sistema linear


xj ,


y1
a1
V TV = VT y2 ,


a2

y3

2
A soma do quadrado dos resduos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.3. APROXIMANDO PROBLEMAS NO LINEARES POR
PROBLEMAS LINEARES 185
onde
1 x1

A=
1 x2


1 x3

Exemplo 7.3.1. Encontre uma curva da forma y = Aex que melhor ajusta os
pontos (1, 2), (2, 3) e (3, 5).
Temos
1 1

A= 1 2



1 3

e a soluo do sistema leva em B = 0,217442 e b = 0,458145. Portanto, A =


e0,217442 = 1,24289.
Observao 7.3.1. Os coeficientes obtidos a partir dessa linearizao so apro-
ximados, ou seja, so diferentes daqueles obtidos quando
X aplicamos mnimos qua-
drados no linear. Observe que estamos minimizando [ln yi ln(f (xi ))]2 em vez
i
de [yi f (xi )]2 . No exemplo resolvido, a soluo do sistema no linear original
X

i
seria A = 1,19789 e b = 0,474348
Observao 7.3.2. Mesmo quando se deseja resolver o sistema no linear, a
soluo do problema linearizado pode ser usada para construir condies iniciais.
A prxima tabela apresenta algumas curvas e transformaes que linearizam o
problema de ajuste.

Curva Transformao Problema Linearizado


y = aebx y = ln y y = ln a + bx
y = axb y = ln y y = ln a + b ln x
y = axb ecx y = ln y y = ln a + b ln x + cx
(b+cx)2
y = ae y = ln y y = ln a + b2 + bcx + c2 x2
a 1 b 1
y= y = y = + x
b+x y a a
y = A cos(x + ) y = a cos(x) b sen (x)
conhecido a = A cos(), b = A sen ()

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


186 Clculo Numrico

Exemplo 7.3.2. Encontre a funo f da forma y = f (x) = A cos(2x + ) que


ajusta a tabela de pontos

xi yi
0,0 9,12
0,1 1,42
0,2 - 7,76
0,3 - 11,13
0,4 - 11,6
0,5 - 6,44
0,6 1,41
0,7 11,01
0,8 14,73
0,9 13,22
1,0 9,93

Soluo. Usando o fato que y = A cos(2x + ) = a cos(2x) b sen (2x), onde


a = A cos() e b = A sen (), z = [ a b ]T soluo do problema

B T Bz = B T y,

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


7.3. APROXIMANDO PROBLEMAS NO LINEARES POR
PROBLEMAS LINEARES 187
onde

1. 0.

0,8090170 0,5877853





0,3090170 0,9510565



0,3090170 0,9510565
cos(2x0 ) sen (2x0 )


0,8090170 0,5877853


cos(2x1 ) sen (2x1 )

B = = 0,0000000

1,0000000 .
..
.


0,8090170 0,5877853


cos(2x10 ) sen (2x10 )



0,3090170 0,9510565


0,3090170 0,9510565




0,8090170 0,5877853



1,0000000 0,0000000

Assim, a = 7,9614704 e b = 11,405721 e obtemos o seguinte sistema:




A cos() = 7,9614704
.
A sen () = 11,405721

Observe que
A2 = 7,96147042 + 11,4057212

e, escolhendo A > 0, A = 13,909546 e

11,405721
sen () = = 0,8199923
13,909546

Assim, como cos tambm positivo, um ngulo do primeiro quadrante:

= 0,9613976

Portanto f (x) = 13,909546 cos(2x + 0,9613976). Observe que nesse exemplo a


soluo do problema linear a mesma do problema no linear.

Exemplo 7.3.3. Encontre a funo f da forma y = f (x) = a


b+x
que ajusta a

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


188 Clculo Numrico

tabela de pontos
xi yi
0,0 101
0,2 85
0,4 75
0,6 66
0,8 60
1,0 55
usando uma das transformaes tabeladas.

Soluo. Usando o fato que Y = 1


y
= ab + a1 x, z = [ b
a
1
a
]T soluo do problema

AT Az = AT Y,

onde

1 x1
1 0,0
1 x 1 0,2

2

1 1 0,4

x3
A=


=



1 x4 1 0,6



1 1 0,8


x5






1 x6 1 1,0
e

1/y1
0,0099010
1/y 0,0117647

2

1/y3 0,0133333


Y = =


1/y4 0,0151515



1/y5 0,0166667




1/y6 0,0181818

Assim, a1 = 0,0082755 e ab = 0,0100288 e, ento, a = 120,83924 e b = 1,2118696,


ou seja, f (x) = 1,2118696+x
120,83924
.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 8

Derivao Numrica

Nesta seo, discutiremos sobre estratgias numricas de aproximao de de-


rivadas de funes reais. Com as tcnicas que abordaremos possvel o clculo
aproximado da derivada de uma funo a partir de um conjunto de pontos discretos
{(xi , yi )}ni=1 . Comeamos discutindo sobre as chamadas aproximaes por di-
ferenas finitas e, ento, discutimos sobre aproximaes de derivadas via ajuste
ou interpolao.
Ao longo deste captulo, estaremos assumindo que as seguintes bibliotecas e
mdulos Python esto importados:
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

8.1 Diferenas finitas


Uma diferena finita uma expresso da forma f (x + b) f (x + a), que ao ser
dividida por (ba) chama-se um quociente de diferenas. A tcnica de diferenas
finitas consiste em aproximar a derivada de uma funo via frmulas discretas
que requerem apenas um conjunto finito de pares ordenados {(xi , yi )}ni=1 , onde
geralmente denotamos yi = f (xi ).
Essas frmulas podem ser obtidas de vrias maneiras. Comeamos com a fr-
mula mais simples que pode ser obtida do clculo diferencial. Seja f uma funo
diferencivel, a derivada de f no ponto x0 , por definio,
f (x0 + h) f (x0 )
f 0 (x0 ) = lim .
h0 h
Deste limite, tomando h 6= 0 pequeno (no muito pequeno para evitar o cance-
lamento catastrfico), esperado que possamos obter uma aproximao razovel

189
190 Clculo Numrico

para f 0 (x0 ). Assim, a diferena finita progressiva de ordem 1


f (x0 + h) f (x0 )
D+,h f (x0 ) := f 0 (x0 ) (8.1)
h
uma aproximao para f 0 (x0 ).
Exemplo 8.1.1. Usando a diferena finita progressiva de ordem 1, calcule apro-
ximaes da derivada de f (x) = cos(x) no ponto x = 1 usando h = 101 , 102 ,
103 , 104 , 1012 e 1014 . Calcule o erro |D+,h f (1) f 0 (1)| obtido para cada valor
de h.
Soluo. Usando a diferena progressiva em (8.1), devemos calcular
cos(1 + h) cos(1)
D+,h f (1) =
h
Fazendo isso, obtemos:

h D+,h f (1) |f 0 (1) D+,h f (1)|


101 8,67062E01 2,55909E02
102 8,44158E01 2,68746E03
103 8,41741E01 2,70011E04
104 8,41498E01 2,70137E05
1012 8,41549E01 7,80679E05
1014 8,43769E01 2,29851E03
Em Python, podemos calcular a aproximao da derivada f 0 (1) com h = 0,1
usando as seguintes linhas de cdigo:
>>> def f(x):
... return np.cos(x)
...
>>> x0=1
>>> h=0.1
>>> df = (f(x0+h)-f(x0))/h
E, similarmente, para outros valores de x0 e h.
Exploremos o exemplo 8.1.1 um pouco mais. Observamos que, para valores mo-
derados de h, o erro |f 0 (1)D+,h f (1)| diminui linearmente com h (veja figura 8.1).
Isto consequncia da ordem de truncamento da frmula de diferenas finitas apli-
cada (que de ordem 1). Porm, para valores muito pequenos de h < 108 , o erro
passa a aumentar quando diminumos h. Isto devido ao efeito de cancelamento
catastrfico.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.1. DIFERENAS FINITAS 191

Figura 8.1: Erro absoluto das derivadas numricas no exemplo 8.1.1.

8.1.1 Diferenas finitas via srie de Taylor


Podemos construir frmulas de diferenas finitas para uma funo f (x) (suave1 )
no ponto x = x0 a partir de sua expanso em srie de Taylor. Em alguns casos,
este procedimento acaba por nos fornecer, tambm, a ordem de truncamento da
frmula.

Diferena finita progressiva de ordem 1

Podemos obter uma aproximao para f 0 (x0 ) a partir da srie de Taylor

2f ()
00
f (x0 + h) = f (x0 ) + hf (x0 ) + h
0
, h > 0, (x0 ,x0 + h).
2

Isolando f 0 (x0 ), obtemos

f (x0 + h) f (x0 ) f 00 ()
f 0 (x0 ) = h , (8.2)
| h
{z } | {z } 2
D+,h O(h)

1
Uma funo suave uma funo infinitamente continuamente diferencivel, isto , f

C (R). Uma anlise mais cuidadosa, revela que hipteses mais fracas podem ser assumidas.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


192 Clculo Numrico

o que mostra que o erro de truncamento da diferena finita progressiva2

f (x0 + h) f (x0 )
D+,h f (x0 ) :=
h
de ordem h.

Diferena finita regressiva de ordem 1


Outra aproximao para a derivada primeira pode ser obtida da srie de Taylor
de f em torno de (x0 h) dada por

f 00 ()
f (x0 h) = f (x0 ) hf 0 (x0 ) + h2 , h > 0, (x0 , x0 + h).
2
Isolando f 0 (x0 ), obtemos

f (x0 ) f (x0 h) f 00 ()
f 0 (x0 ) = +h .
| h
{z } | {z2 }
D,h O(h)

que fornece a diferena finita regressiva3

f (x0 ) f (x0 h)
D,h f (x0 ) := ,
h
que possui erro de truncamento de ordem h.

Diferena finita central de ordem 2


Para obter uma aproximao para a derivada primeira com um erro menor,
podemos utilizar as sries de Taylor:
000 ( )
f (x0 + h) = f (x0 ) + hf 0 (x0 ) + h2 f 00 (x0 ) + h3 f 3!
+
,
000
f (x0 h) = f (x0 ) hf 0 (x0 ) + h2 f 00 (x0 ) + h 3 f ( )
3!

Fazendo a primeira equao menos a segunda, obtemos

f 000 (+ ) f 000 ( )
!
f (x0 + h) f (x0 h) = 2hf 0 (x0 ) + h3 .
3!
2
Tambm chamada de diferena finita progressiva de dois pontos ou diferena pra frente.
3
Tambm chamada de diferena regressiva de dois pontos ou diferena pra trs.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.1. DIFERENAS FINITAS 193

Dividindo por 2h e isolando f 0 (x0 ) obtemos

f (x0 + h) f (x0 h) f 000 (+ ) f 000 ( )


!
f (x0 ) =
0
h2 .
| 2h
{z } 2 3!
| {z }
D0,h
O(h2 )

Assim, a diferena finita central4

f (x0 + h) f (x0 h)
D0,h f (x0 ) := ,
2h
uma aproximao para f 0 (x0 ) com erro de truncamento de ordem h2 , ou sim-
plesmente ordem 2.
1
Exemplo 8.1.2. Calcule a derivada numrica da funo f (x) = e 2 x no ponto
x = 2 usando a diferena progressiva, diferena regressiva e diferena central com
h = 101 , h = 102 e h = 104 . Tambm, calcule o erro absoluto da aproximao
obtida em cada caso.

Soluo. Usando a diferena progressiva, devemos calcular


1 1
f (x + h) f (x) e 2 (x+h) e 2 x
D+,h = = .
h h
Com a diferena regressiva, calculamos
1 1
f (x) f (x h) e 2 x e 2 (xh)
D,h = = .
h h
Por fim, usando a diferena central temos
1 1
f (x + h) f (x h) e 2 (h+h) e 2 (xh)
D0,h = = .
2h 2h
As aproximaes e os erros absolutos calculados em cada caso esto apresen-
tados na seguinte tabela:

h D+,h f (2) Erro D,h Erro D0,h Erro


101 1,39369 3,5E02 1,32572 3,3E02 1,35971 5,7E04
102 1,36254 3,4E03 1,35575 3,4E03 1,35915 5,7E06
104 1,35917 3,4E05 1,35911 3,4E05 1,35914 5,7E10

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


194 Clculo Numrico

Figura 8.2: Erro absoluto das derivadas numricas no exemplo 8.1.2.

Observao 8.1.1. O experimento numrico realizado no exemplo 8.1.2, nos mos-


tra que o erro absoluto na derivao numrica no da ordem do erro de trun-
camento. Entretanto, este erro tende a variar com h na mesma ordem do erro de
truncamento. A figura 8.1.2 apresenta o erro absoluto das derivadas numricas
computadas para o exemplo 8.1.2. Note que, devido ao efeito de cancelamento ca-
tastrfico, o erro absoluto deixa de variar na ordem do erro de truncamento para
valores muito pequenos de h.
Exemplo 8.1.3. Estime o erro absoluto no clculo da derivada de f (x) = ex
para x > 0 utilizando a diferena progressiva.
Soluo. Da equao 8.2, temos:
f 00 ()
f (x) = D+,h f (x) h
0
, > 0,
2
ou seja:
f 00 ()

|f (x) D+,h f (x)| =
0
h, > 0.

2

Agora, como |f 00 (x)| = |ex | < 1 para x > 0, conclumos que:


1
|f 0 (x) D+,h f (x)| h, x > 0.
2
4
Tambm chamada de diferena finita central de trs pontos. Note que o ponto f (x0 ) possui
coeficiente 0, por isso 3 pontos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.1. DIFERENAS FINITAS 195

8.1.2 Erros de arredondamento


Para entender como os erros de arredondamento se propagam ao calcular as
derivadas numricas vamos analisar a frmula de diferenas finitas progressiva
f (x + h) f (x)
D+,h f (x) = .
h
Nesse contexto temos o valor exato f 0 (x) para a derivada, a sua aproximao
numrica D+,h f (x) e a representao em nmero de mquina do operador D+,h f (x)
que denotaremos por D+,h f (x). Denotando por (x,h) o erro de arredondamento
ao calcularmos a derivada, vamos assumimos que

f (x + h) f (x)
D+,h f (x) = D+,h f (x)(1 + (x,h)) = (1 + (x,h)). (8.3)
h
Tambm, consideremos

|f (x + h) f (x + h)| = (x,h)

e
|f (x) f (x)| = (x,0) ,
onde f (x + h) e f (x) so as representaes em ponto flutuante dos nmeros f (x+h)
e f (x), respectivamente.
Ento, da equao (8.3), a diferena do valor da derivada e sua aproximao
representada em ponto flutuante pode ser estimada por:

f (x + h) f (x)


f (x) D+,h f (x) = f (x) (1 + (x,h)) .
0 0
h

Podemos reescrever o lado direito desta equao, da seguinte forma

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


f (x) D+,h f (x) = f (x) +
0 0
h h
f (x) f (x)
!

+ (1 + )

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


= f (x) +
0

h h
f (x) f (x)
!

+ (1 + ) .

h

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


196 Clculo Numrico

Ento, separando os termos e estimando, obtemos:


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


f (x) D+,h f (x) f (x) +
0 0



h h
f (x) f (x) f (x + h) f (x)
!
+
|1 + | +



h h
!

M h + + |1 + | + |f 0 (x)|

h h
2
!
Mh + |1 + | + |f 0 (x)|
h
onde
1
M= max |f 00 (y)|
2 xyx+h
est relacionado com o erro de truncamento.
Por fim, obtemos a seguinte estimativa para o erro absoluto na computao da
derivada numrica:
2
!

f (x) D+,h f (x) Mh + |1 + | + |f 0 (x)|. (8.4)
0
h
Esta estimativa mostra que se o valor de h for muito pequeno o erro ao calcular
a aproximao numrica cresce. Isso nos motiva a procurar o valor timo de h que
minimiza o erro.
Exemplo 8.1.4. No exemplo 8.1.2, computamos a derivada numrica da funo
1
f (x) = e 2 x no ponto x = 2 usando as frmulas de diferenas finitas progressivas,
regressivas e central. A figura 8.2, mostra que, para valores h muito pequenos,
os erros de arredondamento passam a dominar os clculos e, por consequncia, o
erro da derivada numrica passa a aumentar. Pela figura, podemos inferir que a
escolha tima de h para as frmulas progressiva e regressivas h 107 . Agora,
para a frmula central, h 105 parece ser a melhor escolha.
Observao 8.1.2. Note que a estimativa (8.4), mostra que o erro na computao
da derivada numrica depende da funo que est sendo derivada. Assim, o h timo
depende no somente da frmula de diferenas finitas, mas tambm da funo a
ser derivada.

Exerccios Resolvidos
ER 8.1.1. Aproxime a derivada de f (x) = sen (2x) x2 no ponto x = 2 usando a
frmula de diferenas finitas progressiva de ordem 1 com: a) h = 0,1 e b) h = 0,01.
Compute, tambm, o erro absoluto de cada aproximao computada.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.1. DIFERENAS FINITAS 197

Soluo. A frmula de diferenas finitas de ordem 1 para uma funo y = f (x)


em um ponto x = x0 dada por:
f (x0 + h) f (x0 )
D+,h f (x0 ) = .
h
Substituindo f (x) = sen (2x) x2 e x0 = 2, obtemos:

(sen (2(x0 + h)) (x0 + h)2 ) (sen (2x0 ) x20 )


D+,h f (x0 ) =
h
sen (2(x0 + h)) x20 + 2x0 h + h2 sen (2x0 ) + x20 )
=
h
sen (4 + 2h) + 4h + h sen (4))
2
= .
h
Ento, tomando h = 0,1, podemos computar a derivada numrica e o erro associ-
ado:
D+,0,1 f (2) = 5,247733, |f 0 (2) D+,0,1 f (2)| = 5,96 102 ,
onde f 0 (x) = 2 sen (2x) 2x a derivada analtica. Tomando h = 0,01 temos:

D+,0,1 f (2) = 5,302065, |f 0 (2) D+,0,1 f (2)| = 5,22 103 .

Em Python, podemos fazer os clculos com o seguinte cdigo:


#funcao
def f(x):
return np.sin(2*x) - x**2

#derivada analitica
def fl(x):
return 2*np.cos(2*x) - 2*x

#d.f. progressiva de ordem 1


def dp1(f,x,h=0.1):
return (f(x+h)-f(x))/h

#h=0.1
dy = dp1(f,2)
print("D.F. Progressiva de ordem 1 com h = %f" % 1e-1)
print("Df = %f" % dy)
print("Erro = %1.2e" % np.abs(fl(2)-dy))

#h=0.01

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


198 Clculo Numrico

dy = dp1(f,2,1e-2)
print("D.F. Progressiva de ordem 1 com h = %f" % 1e-2)
print("Df = %f" % dy)
print("Erro = %1.2e" % np.abs(fl(2)-dy))

Exerccios

E 8.1.1. Use os esquemas numricos do exerccio 8.1.2 para aproximar as


seguintes derivadas:

a) f 0 (x) onde f (x) = sen (x) e x = 2.

b) f 0 (x) onde f (x) = ex e x = 1.

Use h = 102 e h = 103 e compare com os valores obtidos atravs da avaliao


numrica das derivadas exatas.
E 8.1.2. Expanda a funo suave f (x) em um polinmio de Taylor adequado
para obter as seguintes aproximaes:

a) f 0 (x) = f (x+h)f (x)


h
+ O(h)

b) f 0 (x) = f (x)f (xh)


h
+ O(h)

c) f 0 (x) = f (x+h)f (xh)


2h
+ O(h2 )

E 8.1.3. Use a expanso da funo f (x) em torno de x = 0 em polinmios de


Taylor para encontrar os coeficientes a1 , a2 e a3 tais que

a) f 0 (0) = a1 f (0) + a2 f (h) + a3 f (2h) + O(h2 )

b) f 0 (0) = a1 f (0) + a2 f (h) + a3 f (2h) + O(h2 )

c) f 0 (0) = a1 f (h1 ) + a2 f (0) + a3 f (h2 ) + O(h2 ), |h1 |, |h2 | = O(h)

E 8.1.4. As tenses na entrada, vi , e sada, vo , de um amplificador foram


medidas em regime estacionrio conforme tabela abaixo.

0,0 0,50 1,00 1,50 2,00 2,50 3,00 3,50 4,00 4,50 5,00
0,0 1,05 1,83 2,69 3,83 4,56 5,49 6,56 6,11 7,06 8,29

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.2. DIFERENA FINITA PARA DERIVADA SEGUNDA 199

onde a primeira linha a tenso de entrada em volts e a segunda linha tenso


de sada em volts. Sabendo que o ganho definido como

vo
.
vi
Calcule o ganho quando vi = 1 e vi = 4.5 usando as seguintes tcnicas:

a) Derivada primeira numrica de primeira ordem usando o prprio ponto e o


prximo.

b) Derivada primeira numrica de primeira ordem usando o prprio ponto e o


anterior.

c) Derivada primeira numrica de segunda ordem usando o ponto anterior e o


prximo.

d) Derivada primeira analtica da funo do tipo v0 = a1 vi + a3 vi3 que melhor


se ajusta aos pontos pelo critrio dos mnimos quadrados.

Caso a b c d
vi = 1
vi = 4.5

E 8.1.5. Estude o comportamento da derivada de f (x) = ex no ponto


2

x = 1,5 quando h fica pequeno.

8.2 Diferena finita para derivada segunda


Para aproximar a derivada segunda, considere as expanses em srie de Taylor

h2 00 h3
f (x0 + h) = f (x0 ) + hf 0 (x0 ) + f (x0 ) + f 000 (x0 ) + O(h4 )
2 6

h2 00 h3
f (x0 h) = f (x0 ) hf 0 (x0 ) + f (x0 ) f 000 (x0 ) + O(h4 ).
2 6
Somando as duas expresses, temos:

f (x0 + h) + f (x0 h) = 2f (x0 ) + h2 f 00 (x0 ) + O(h4 )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


200 Clculo Numrico

ou seja, uma aproximao de segunda ordem para a derivada segunda em x0

f (x0 + h) 2f (x0 ) + f (x0 h)


f 00 (x0 ) = + O(h2 ) := D0,h
2
f (x0 ) + O(h2 ),
h2
onde
f (x0 + h) 2f (x0 ) + f (x0 h)
2
D0,h f (x0 ) = .
h2

Exemplo 8.2.1. Calcule a derivada segunda numrica de f (x) = ex em x = 1,5


2

para h = 0,1, h = 0,01 e h = 0,001.

Soluo. A tabela mostra os resultados:

h h = 0,1 h = 0,01 h = 0,001


2
D0,h f (1,5) 0,7364712 0,7377814 0,7377944

Observe que f 00 (x) = (4x2 2)ex e f 00 (1,5) = 0,7377946.


2

8.3 Diferenas finitas de ordem mais alta


Para aproximar a derivada de uma funo f (x) em x0 , x1 ou x2 usaremos os
trs pontos vizinhos (x0 ,f (x0 )), (x1 ,f (x1 )) e (x2 ,f (x2 )). Uma interpolao usando
polinmios de Lagrange para esses trs pontos da forma:

(x x1 )(x x2 ) (x x0 )(x x2 )
f (x) = f (x0 ) + f (x1 )
(x0 x1 )(x0 x2 ) (x1 x0 )(x1 x2 )
(x x0 )(x x1 ) f ((x))
000
+ f (x2 ) + (x x0 )(x x1 )(x x2 ).
(x2 x0 )(x2 x1 ) 6

A derivada de f (x)

2x x1 x2 2x x0 x2
f 0 (x) = f (x0 ) + f (x1 )
(x0 x1 )(x0 x2 ) (x1 x0 )(x1 x2 )
2x x0 x1
+ f (x2 )
(x2 x0 )(x2 x1 )
(8.5)
f ((x))
000
+ ((x x1 )(x x2 ) + (x x0 )(2x x1 x2 ))
6
f 000 ((x))
!
+ Dx (x x0 )(x x1 )(x x2 ).
6

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.3. DIFERENAS FINITAS DE ORDEM MAIS ALTA 201

Trocando x por x0 , temos


2x0 x1 x2 2x0 x0 x2
f 0 (x0 ) = f (x0 ) + f (x1 )
(x0 x1 )(x0 x2 ) (x1 x0 )(x1 x2 )
2x0 x0 x1
+ f (x2 )
(x2 x0 )(x2 x1 )
f ((x0 ))
000
+ ((x0 x1 )(x0 x2 ) + (x0 x0 )(2x0 x1 x2 ))
6
f 000 ((x0 ))
!
+ Dx (x0 x0 )(x0 x1 )(x0 x2 ).
6
Considerando uma malha equiespaada onde x1 = x0 + h e x2 = x0 + 2h, temos:
3h 2h
f 0 (x0 ) = f (x0 ) + f (x1 )
(h)(2h) (h)(h)
h f ((x0 ))
000
+ f (x2 ) + ((h)(2h))
(2h)(h) 6
1 3 1 f 000 ((x0 ))
 
= f (x0 ) + 2f (x1 ) f (x2 ) + h2
h 2 2 3
Similarmente, trocando x por x1 ou trocando x por x2 na expresso (8.5), temos
outras duas expresses
1 1 1 f 000 ((x1 ))
 
f (x1 ) =
0
f (x0 ) + f (x2 ) + h2
h 2 2 6
1 1 3 f 000 ((x2 ))
 
f 0 (x2 ) = f (x0 ) 2f (x1 ) + f (x2 ) + h2
h 2 2 3
Podemos reescrever as trs frmulas da seguinte forma:
1 3 1 f 000 ((x0 ))
 
f 0 (x0 ) = f (x0 ) + 2f (x0 + h) f (x0 + 2h) + h2
h 2 2 3
1 1 1 f ((x0 + h))
000
 
f 0 (x0 + h) = f (x0 ) + f (x0 + 2h) + h2
h 2 2 6
1 1 3 f 000 ((x0 + 2h))
 
f 0 (x0 + 2h) = f (x0 ) 2f (x0 + h) + f (x0 + 2h) + h2
h 2 2 3
ou ainda
1 f 000 ((x0 ))
f 0 (x0 ) = [3f (x0 ) + 4f (x0 + h) f (x0 + 2h)] + h2 (8.6)
2h 3
1 f 000
((x 0 ))
f 0 (x0 ) = [f (x0 + h) f (x0 h)] + h2 (8.7)
2h 6
1 2 f ((x0 ))
000
f (x0 ) =
0
[f (x0 2h) 4f (x0 h) + 3f (x0 )] + h (8.8)
2h 3
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
202 Clculo Numrico

Observe que uma das frmulas exatamente as diferenas centrais obtida anteri-
ormente.
Analogamente, para construir as frmulas de cinco pontos tomamos o polinmio
de Lagrange para cinco pontos e chegamos a cinco frmulas, sendo uma delas a
seguinte:

1 h4 (5)
f (x0 ) =
0
[f (x0 2h) 8f (x0 h) + 8f (x0 + h) f (x0 + 2h)]+ f ((x0 ))
12h 30
(8.9)

Exemplo 8.3.1. Calcule a derivada numrica de f (x) = ex em x = 1,5 pelas


2

frmulas de trs e cinco pontos para h = 0,1, h = 0,01 e h = 0,001.

Soluo. Em Python, podemos computar estas derivadas numricas com h = 0.1


da seguinte forma:
>>> def f(x):
>>> ... return np.exp(-x**2)
>>> x=1.5
>>> h=0.1
>>> #progressiva de ordem 1
>>> dp1 = (f(x+h)-f(x))/h
>>> #regressiva de ordem 1
>>> dr1 = (f(x)-f(x-h))/h
>>> #central de ordem 2
>>> dc2 = (f(x+h)-f(x-h))/(2*h)
>>> #progressiva de ordem 2
>>> dp2 = (-3*f(x)+4*f(x+h)-f(x+2*h))/(2*h)
>>> #regressiva de ordem 2
>>> dr2 = (f(x-2*h)-4*f(x-h)+3*f(x))/(2*h)
>>> #central de ordem 4
>>> dc4 = (f(x-2*h)-8*f(x-h)+8*f(x+h)-f(x+2*h))/(12*h)
e, anlogo, para h = 0.01 e h = 0.001. O valor analtico da derivada f 0 (1,5)
0,3161976736856. A tabela 8.1 mostra os resultados computados com as deriva-
das numricas.

Exerccios
Em construo ... Gostaria de colaborar na escrita deste livro? Veja como em:

http://www.ufrgs.br/numerico

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.4. FRMULAS DE DIFERENAS FINITAS 203

Diferenas Finitas h = 0,1 0,01 0,001


Progressiva O(h) 0,2809448 0,3125246 0,3158289
Regressiva O(h) 0,3545920 0,3199024 0,3165667
Progressiva O(h2 ) 0,3127746 0,3161657 0,3161974
Central O(h2 ) 0,3177684 0,3162135 0,3161978
Regressiva O(h2 ) 0,3135824 0,3161665 0,3161974
Central O(h4 ) 0,3162384 0,3161977 0,31619767

Tabela 8.1: Derivadas numricas de f (x) = ex em x = 1,5. Veja o exemplo 8.3.1.


2

8.4 Frmulas de diferenas finitas


Veremos nessa seo uma outra maneira de obter frmulas de diferenas finitas
para derivadas de qualquer ordem de tal forma que elas possuam alta ordem de
preciso.
Dados n + 1 pontos [x1 ,x2 , . . . ,xn ], queremos obter uma aproximao para a
derivada de f (x) calculada em x do tipo

f 0 (x ) c1 f (x1 ) + c2 f (x2 ) + . . . + cn f (xn ) (8.10)

que seja exata para polinmios at ordem n 1.


Seja q(x) = c1 1 (x) + c2 2 (x) + . . . + cn n (x) o polinmio de ordem n que
aproxima f (x). Fixe a base k (x) = xk . Como a regra (8.10) deve ser exata para
qualquer q(x) at ordem n 1, ento tambm deve ser exata para qualquer funo
da base. Substituindo f (x) por 1 (x) = 1 em (8.10) obtemos

01 (x)|x = (1)0 |x = (8.11)


0 = c1 1 (x1 ) + c2 1 (x2 ) + . . . + cn 1 (xn ) (8.12)
0 = c1 + c2 + . . . + cn (8.13)

Da mesma forma para k = 1, . . . ,n 1, obtemos

(x)0x = 1 = c1 x 1 + c2 x 2 + . . . + cn x n (8.14)
(x2 )0x = 2x = c1 x21 + c2 x22 + . . . + cn x2n (8.15)
(x3 )0x = 3(x )2 = c1 x31 + c2 x32 + . . . + cn x3n (8.16)
.. .
. = .. (8.17)
(xn1 )0x = (n 1)(x ) n2
= c1 xn1
1 + c1 x1n1 + . . . + cn xnn1 (8.18)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


204 Clculo Numrico

que pode ser escrito na forma matricial



1 1 ... 1 c1 0

x1 x2 ... xn c2 1



= 2x (8.19)


x21 x22 ... x2n
c3




.. .. .. .. ..

. . . . .




xn1
1 xn1
2 . . . xn1
n cn (n 1)(x )n2

Resolvendo o sistema obtemos os coeficientes ck para a regra de diferenciao.


Exemplo 8.4.1. Sejam [x1 ,x2 ,x3 ] = [h,0,h] e x = x2 = 0, obtenha uma regra
de diferenciao para aproximar f 0 (x ).
Soluo. A regra ter a forma

f 0 (x ) c1 f (x1 ) + c2 f (x2 ) + c3 f (x3 ) (8.20)


c1 f 1 + c2 f 2 + c3 f 3 (8.21)

Considere a base polinomial [1 (x),2 (x),3 (x)] = [1,x,x2 ] e substitua f (x) por
k (x) obtendo

(1)0x=0 = 0 = c1 (1) + c2 (1) + c3 (1) (8.22)


(x)0x=0 = 1 = c1 (h) + c2 (0) + c3 (h) (8.23)
(x2 )0x=0 = 0 = c1 (h)2 + c2 (0)2 + c3 (h)2 (8.24)

que pode ser escrito na forma matricial



1 1 1 c1 0

h 0 h c2 = 1 (8.25)



0 h2 0

h2 c3

Resolvendo o sistema obtemos [c1 ,c2 ,c3 ] = [ 2h


1 1
,0, 2h ] fornecendo a regra

1 1
f 0 |x=x1 f1 + f3 (8.26)
2h 2h
f3 f1
(8.27)
2h

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.5. DERIVADA VIA AJUSTE OU INTERPOLAO 205

E 8.4.1. Seja [x0 ,x1 ,x2 ] = [0,h,2h] e x = x0 = 0, obtenha uma regra unilateral
de diferenciao para aproximar f 0 (x0 ).

E 8.4.2. Seja [x0 ,x1 ,x2 ] = [h,0,h] e x = x1 = 0, obtenha uma regra de


diferenciao para aproximar f 00 (x ).

E 8.4.3. Seja [x0 ,x1 , . . . ,x4 ] = [2h, h,0,h,2h] e x = 0, obtenha uma regra
de diferenciao para aproximar f 0 (x ).

E 8.4.4. Seja [x0 ,x1 , . . . ,x4 ] = [2h, h,0,h,2h] e x = 0, obtenha uma regra
de diferenciao para aproximar f 00 (x ).

E 8.4.5. Seja [x0 ,x1 , . . . ,x4 ] = [0,h,3h,6h,10h] e x = 0, obtenha uma regra de


diferenciao para aproximar f 0 (x ).

Exerccios

E 8.4.6. Use a expanso da funo f (x) em torno de x = 0 em polinmios de


Taylor para encontrar os coeficientes a1 , a2 e a3 tais que
a) f 00 (0) = a1 f (0) + a2 f (h) + a3 f (2h) + O(h)
b) f 00 (0) = a1 f (0) + a2 f (h) + a3 f (2h) + O(h)

8.5 Derivada via ajuste ou interpolao


 
Dado os valores de uma funo em pontos {(xi ,yi )}N i=1 , as derivadas
dy
dx i
podem ser obtidas atravs da derivada de uma curva que melhor ajusta ou interpola
os pontos. Esse tipo de tcnica necessrio quando os pontos so muito espaados
entre si ou quando a funo oscila muito. Por exemplo, dado os pontos (0,1), (1,2),
(2,5), (3,9), a parbola que melhor ajusta os pontos
Q(x) = 0,95 + 0,45x + 0,75x2 .
Usando esse ajuste para calcular as derivadas, temos:
Q0 (x) = 0,45 + 1,5x
e
y 0 (x1 ) Q0 (x1 ) = 0,45, y 0 (x2 ) Q0 (x2 ) = 1,95,
y 0 (x3 ) Q0 (x3 ) = 3,45 e y 0 (x4 ) Q0 (x4 ) = 4,95
Agora olhe o grfico da seguinte tabela de pontos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


206 Clculo Numrico

x y
0 1,95
1 1,67
2 3,71
3 3,37
4 5,12
5 5,79
6 7,50
7 7,55
8 9,33
9 9,41
10 11,48

12

11

10

1
0 1 2 3 4 5 6 7 8 9 10

Observe que as derivadas calculadas por diferenas finitas oscilam entre um


valor pequeno e um grande em cada intervalo e alm disso, a frmula progressiva
difere da regressiva significantemente. Por exemplo, por diferenas regressivas
f 0 (7) (7,557,50)
1
= 0,05 e por diferenas progressivas f 0 (7) (9,337,55)
1
= 1,78. A
melhor forma de calcular a derivada aqui fazer um ajuste de curva. A reta que

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


8.6. EXERCCIOS FINAIS 207

melhor ajusta os dados da tabela y = f (x) = 1,2522727 + 0,9655455x. Usando


esse ajuste, temos f 0 (7) 0,9655455.

Exerccios
Em construo ... Gostaria de colaborar na escrita deste livro? Veja como em:

http://www.ufrgs.br/numerico

8.6 Exerccios finais


Em construo ... Gostaria de colaborar na escrita deste livro? Veja como em:

http://www.ufrgs.br/numerico

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 9

Integrao Numrica

Neste captulo discutiremos tcnicas numricas para aproximar integrais de-


finidas de funes reais.
Considere o problema de calcular (ou estimar) a integral de f (x) no intervalo
[a,b], ou seja,
Z b
I= f (x) dx.
a

Uma maneira de estimar esta integral numericamente consiste em subdividir


o intervalo [a,b] em n 1 intervalos a partir de um conjunto ordenado de pontos
a = x1 < x2 < ... < xn = b. Em cada intervalo i, a integral ser aproximada por
Si e a integral ser aproximada por

n1
IS= Si
X

i=1

O tamanho de cada intervalo dado por hi = xi+1 xi . No caso uniforme, todos


os intervalos possuem o mesmo tamanho h = hi = ba n
.
Nas prximas sees apresentaremos formas diferentes de aproximar Si inici-
ando com o caso mais simples que um retngulo. Cada uma das regras obtidas
tambm chamada de quadratura.

Exemplo 9.0.1. A figura 9.1 mostra um exemplo quando f (x) = x2 + 1, 0


x 2. Temos a aproximao por um retngulo com base h1 = 2, depois com dois
retngulos de base h2 = 1 e, finalmente com quatro retngulo de bases h3 = 0,5.
Os valores aproximados para a integral so dados na seguinte tabela:

208
209

4.5

3.5

2.5

1.5

0.5

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2

Figura 9.1: Aproximao por retngulos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


210 Clculo Numrico

Z 2
(x2 + 1) dx
0
h1 = 2 h1 f (1) = 4
h2 = 1 h2 f (0,5) + h2 f (1,5) = 4,5
h3 = 0,5 4,625
h4 = 0,25 4,65625
Observe que:
#2
8
"
Z 2
x3
(x + 1) dx =
2
+x = + 2 = 4,6666667
0 3 0
3
Nos cdigos Python apresentados ao longo deste captulo, estaremos assumindo:
>>> from __future__ import division
>>> import numpy as np

9.1 Regras de Newton-Cotes


O mtodo bsico para encontrar as regras de integrao consiste em aproximar
a integral de f por uma combinao linear de n valores1 de fi := f (xi ), ou seja,
Z b n
I= f (x) dx
X
Ai fi .
a i=1

Podemos obter os coeficientes Ai aproximando a funo f pelo polinmio de


Lagrange pn que interpola {(xi ,fi )}ni=1 , tal que,

f (x) = pn (x) + ELAG


n
(x) (9.1)
n
= fi Li (x) + ELAG
n
(x) (9.2)
X

i=1

onde o erro na interpolao de Lagrange


f (n) ((x)) Yn
n
ELAG (x) = (x xi ). (9.3)
n! i=1

Substituindo na integral obtemos


n
Z b " Z b # Z b
f (x) dx = Li (x) dx + n
(x) dx. (9.4)
X
fi ELAG
a i=1 a a

1
Utilizaremos neste captulo a notao fi para indicar f (xi ).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.1. REGRAS DE NEWTON-COTES 211

A frmula de quadratura ento


Z b n
f (x) dx (9.5)
X
Ai fi ,
a i=1

onde Z b
Ai = Li (x) dx. (9.6)
a

9.1.1 Somas de Riemann


O mtodo mais simples de aproximar
Z b
I= f (x) dx.
a

com apenas um intervalo, aproximar f (x) por um polinmio constante no in-


tervalo [a,b], ou seja, f (x) = c. Se aproximarmos f (x) pelo ponto a esquerda do
intervalo temos que f (x) f (a) e
Z b
I = a f (x) dx f (a) dx (9.7)
Rb
a
= f (a) dx = f (a)(b a) (9.8)
Rb
a

Esta a regra de quadratura local para 1 intervalo.


Quando subdividimos [a,b] em n intervalos com tamanho h = (b a)/n nos
pontos xi = a + (i 1)h , em cada intervalo i aproximamos a rea por

Si f (xi )h

tal que a rea total ser aproximada pelas somas de Riemann esquerda
n1 n1
S= Si = f (xi )h
X X

i=1 i=1

Podemos obter uma frmula similar se usarmos os pontos a direita do intervalo,


ou seja, as somas de Riemann direita
n1
S= f (xi+1 )h
X

i=1

Uma terceira opo utilizar o ponto mdio do intervalo [xi ,xi+1 ] o qual fornece
a regra do ponto mdio
n1
xi + xi+1
S= f (i )h, i = (9.9)
X
.
i=1 2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


212 Clculo Numrico

9.1.2 Regra do trapzio


A regra do trapzio consiste em aproximar a funo f (x) por um polinmio
de grau 1. Se utilizarmos uma reta ligando extremos do intervalo obtemos um
trapzio que fornece o nome da regra.
Desta forma, utilizando x1 := a, x2 := b, h = x2 x1 e a notao fi = f (xi )
obtemos atravs da interpolao de Lagrange o polinmio

p1 (x) = f1 L1 (x) + f2 L2 (x) (9.10)

Aproximando f (x) por p1 (x) e integrando obtemos


Z b Z b
f (x) dx p1 (x) dx
a a
Z b
= f1 L1 (x) + f2 L2 (x) dx
a
Z b Z b
= f1 L1 (x) dx + f2 L2 (x) dx
a a
= A1 f1 + A2 f2

onde
# x2
(x x1 )2
"
Z b
x x1
A1 = dx =
a x2 x1 2h x1
(x2 x1 ) h 1 2 2
= = = h
2h 2h 2
Da mesma forma,
Z b
(x x2 ) 1
A2 = dx = h
a (x1 x2 ) 2

de onde obtemos a regra do trapzio dada por


Z b
1 1
 
f (x) dx f1 + f2 h (9.11)
a 2 2

Erro na regra do trapzio


O erro na regra do trapzio pode ser obtida integrando o erro da interpolao
de Lagrange,
Z b Z b
f 00 ((x))
ET RAP = 2
ELAG (x) dx = (x x1 )(x x2 ) dx
a a 2!

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.1. REGRAS DE NEWTON-COTES 213

Pelo teorema do valor mdio, existe a b tal que


f 00 () Z b
ET RAP = (x x1 )(x x2 ) dx,
2! a
portanto
# x2
f 00 () x3 x2
"
ET RAP = (x2 + x1 ) + x1 x2 x
2 3 2 x1
f ()
00
!
x32 x22 x3 x2
= (x2 + x1 ) + x1 x2 x2 1 + 1 (x2 + x1 ) x1 x2 x1
2 3 2 3 2
f () 2x2 3x2 (x2 + x1 ) + 6x2 x1 2x1 + 3x21 (x2 + x1 ) 6x2 x21
00 3 2 2 3
=
2 6
f () 3
00   f 00 ()
= x1 3x21 x2 + 3x22 x1 x32 = (x1 x2 )3
12 12
f 00 () 3
= h.
12
Assim, o erro na regra do trapzio
f 00 () 3
ET RAP = h = O(h3 ).
12
Exemplo 9.1.1. Use a regra do trapzio para aproximar a integral
Z 1
2
ex dx.
0

Depois divida a integral em duas


Z 1/2 Z 1
2 2
ex dx + ex dx.
0 1/2

e aplique a regra do trapzio em cada uma delas. Finalmente, repita o processo


dividindo em quatro integrais.
Usando o intervalo [0,1], temos h = 1, x0 = 0 e x1 = 1. A regra do trapzio
resulta em Z 1
2 1
ex dx (e0 + e1 ) = 0,6839397
0 2
Usando dois intervalos, [0,1/2] e [1/2,1] e usando a regra do trapzio em cada um
dos intervalos, temos:
Z 1
2 0,5  0  0,5  1/4 
ex dx e + e1/4 + e + e1
0 2 2
= 0,4447002 + 0,2866701 = 0,7313703.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


214 Clculo Numrico

Agora, usando quatro intervalos, temos


Z 1
2 0,25  0  0,25  1/16 
ex dx e + e1/16 + e + e1/4
0 2 2
0,25  1/4  0,25  9/16 
+ e + e9/16 + e + e1
2 2
= 0,7429841

9.1.3 Regra de Simpson


Na regra de Simpson aproximamos f por um polinmio de grau 2, portanto
precisamos de trs pontos do intervalo [a,b]. Utilizando, por definio,

a+b
x1 := a, x2 := e x3 := b
2

com h = x3 x1 , podemos obter o polinmio de Lagrange

p2 (x) = f1 L1 (x) + f2 L2 (x) + f3 L3 (x)

Aproximando f por p2 e integrando temos


Z b Z b
f (x) dx p2 (x) dx (9.12)
a a
Z b
= f1 L1 (x) + f2 L2 (x) + f3 L3 (x) dx (9.13)
a
= f1 A 1 + f2 A 2 + f3 A 3 (9.14)

onde
Z b
Ai = Li (x) dx (9.15)
a

Calculando essas integrais obtemos a regra de Simpson


Z b
1 4 1
 
f (x) dx = f (x1 ) + f (x2 ) + f (x3 ) h.
a 6 6 6

Exemplo 9.1.2. Obtenha os coeficientes Ai do mtodo de Simpson integrando os


polinmios de Lagrange Li (x).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.1. REGRAS DE NEWTON-COTES 215

Fazendo uma translao para a origem (subtraindo x1 de x2 e x3 )


Z x3
(x x2 )(x x3 )
A1 = dx
x1 (x1 x2 )(x1 x3 )
Z h
(x h/2)(x h) 2 Zh
= dx = 2 (x h/2)(x h) dx
0 (0 h/2)(0 h) h 0
2 Zh 2 3 h2 2 3 3 2 h2 x h
= x hx + dx = (x /3 hx + )
h2 0 2 2 h2 4 2 0
2 3 3 3 h3 2 3
= (h /3 h + ) = ( + 1)h
h2 4 2 3 2
1
= h
6
Apesar de longa, apenas a integral de um polinmio de grau 2. De forma seme-
lhante podemos obter
4 1
A2 = h, A3 = h
6 6

Erro na regra de Simpson


Se usarmos a mesma metodologia da regra dos trapzios, teremos
Z b Z b Z b
(x x1 )(x x2 )(x x3 ) 000
f (x) dx = p2 (x) dx + f ((x)) dx
a a a 6

e obteremos o frmula de Simpson com um erro de quarta ordem. O fato que a


regra de Simpson tem ordem cinco e, para isso, usaremos uma abordagem alter-
nativa.
Considere o polinmio de Taylor em x2 ,

f 00 (x2 ) f 000 (x2 ) f (4) ((x))


f (x) = f (x2 )+f 0 (x2 )(xx2 )+ (xx2 )2 + (xx2 )3 + (xx2 )4 ,
2 6 24

onde x1 (x) x3 e integre no intervalo [a,b] = [x1 ,x3 ]:

(x x2 )2 f 00 (x2 )
Z b "
f (x) dx = f (x2 )(x x2 ) + f 0 (x2 ) + (x x2 )3
a 2 6
#x
f 000 (x2 ) 3

+ (x x2 ) 4
24 x1
1 Z x3 (4)
+ f ((x))(x x2 )4 dx,
24 x1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


216 Clculo Numrico

Pelo teorema do valor mdio, existe x1 x3 tal que


(x x2 )2 f 00 (x2 )
Z b "
f (x) dx = f (x2 )(x x2 ) + f 0 (x2 ) + (x x2 )3
a 2 6
#x3
f 000 (x2 )
+ (x x2 )4
24 x1
f ()
(4) Z x3
+ (x x2 )4 dx
24 x1
(x x2 )2 f 00 (x2 )
"
= f (x2 )(x x2 ) + f 0 (x2 ) + (x x2 )3
2 6
#x3
f (x2 )
000
+ (x x2 )4
24 x1
f (4) () h i x3
+ (x x2 )5
120 x1

Usando o fato que


(x3 x2 )3 (x1 x2 )3 = 2h3 ,
(x3 x2 )4 (x1 x2 )4 = 0
e
(x3 x2 )5 (x1 x2 )5 = 2h5 ,
temos Z b
h3 00 h5 f (4) ()
f (x) dx = hf (x2 ) +
f (x2 ) + .
a 3 60
Usando a frmula de diferenas finitas centrais para a derivada segunda:
f (x1 ) 2f (x2 ) + f (x3 ) h2 (4)
f 00 (x2 ) = + f (2 ),
h2 12
x1 2 x3 , temos
f (x1 ) 2f (x2 ) + f (x3 ) h2 (4)
!
Z b
h3
f (x) dx = 2hf (x2 ) + + f (2 )
a 3 h2 12
h5 f (4) ()
+
60
h h5 1 (4) 1
 
= (f (x1 ) + 4f (x2 ) + f (x3 )) f (2 ) f (4) () .
3 12 3 5
Pode-se mostrar que possvel escolher 3 que substitua e 2 com a seguinte
estimativa
Z b
h h5
f (x) dx = (f (x1 ) + 4f (x2 ) + f (x3 )) f (4) (3 ).
a 3 90

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.1. REGRAS DE NEWTON-COTES 217

Exemplo 9.1.3. Use a regra de Simpson para aproximar a integral


Z 1
2
ex dx.
0

Depois divida a integral em duas


Z 1/2 Z 1
x2 2
e dx + ex dx.
0 1/2

e aplica a regra de Simpson em cada uma delas.


Usando o intervalo [0,1], temos h = 1/2, x0 = 0, x1 = 1/2 e x2 = 1. A regra
de Simpson resulta em
Z 1
2 0,5 0
ex dx (e + 4e1/4 + e1 ) = 0,7471804
0 3
Usando dois intervalos, [0,1/2] e [1/2,1] e usando a regra do trapzio em cada um
dos intervalos, temos:
Z 1
2 0,25 0 0,25 1/4
ex dx (e + 4e1/16 + e1/4 ) + (e + 4e9/16 + e1 ) = 0,7468554
0 3 3

Exerccios

E 9.1.1. Calcule numericamente as seguintes integrais:


Z 1
a) ex dx b)
R1 2
x dx
0
0
Z 1
c) x3 dx d)
R1 2
0 xex dx
0
Z 1
1
e) e)
R1 x
dx dx
0 x2 +1 0 x2 +1

usando os mtodos simples do Ponto mdio, Trapzio e Simpson. Calcule, tambm,


o valor analtico destas integrais e o erro nas aproximaes dadas pelas quadraturas
numrica.
E 9.1.2. D a interpretao geomtrica dos mtodos do ponto mdio, tra-
pzio e Simpson. A partir desta construo geomtrica, deduza as frmulas para
aproximar Z b
f (x) dx.
a
Verifique o mtodo de Simpson pode ser entendido como uma mdia aritmtica
ponderada entre os mtodos de trapzio e ponto mdio. Encontre os pesos envol-
vidos. Explique o que so os mtodos compostos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


218 Clculo Numrico

E 9.1.3. Calcule numericamente o valor de 25 e4x dx usando os mtodos


R 2

compostos do ponto mdio, trapzio e Simpson. Obtenha os resultados utilizando,


em cada quadratura, o nmero de pontos indicado.

n Ponto mdio Trapzios Simpson


3
5
7
9

9.2 Obteno das regras de quadratura


Na seo anterior, obtivemos as regras de quadraturas pela aproximao do
integrando por polinmios interpoladores de Lagrange. Aqui, veremos um outro
mtodo para obter regras de quadratura, que torna-se bastante til para quando
temos muitos pontos ou quando o intervalo entre os pontos no uniforme.
Dados n pontos [t1 ,t2 , . . . ,tn ], queremos obter uma aproximao para

Z b
f (t) dt w1 f (t1 ) + w2 f (t2 ) + . . . + wn f (tn ) (9.16)
a

que seja exata para polinmios2 at ordem n 1.


Aproxime f (t) pelo polinmio p(t) = w1 1 (t) + . . . + wn n (t) de ordem n 1.
Escolha uma base, como por exemplo k (t) = tk1 . Como a regra de quadratura
deve ser exata para qualquer polinmio at ordem n 1, ento tambm deve ser
exata para qualquer funo da base. Substituindo f (t) por 1 (t) = 1 em (9.16)
obtemos
Z b
1 (t) dt = t|ba = w1 1 (t1 ) + w2 1 (t2 ) + . . . + wn 1 (tn ) (9.17)
a
b a = w1 + w2 + . . . + wn (9.18)

2
Por exemplo, se n = 2, ento a regra exata para retas.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.2. OBTENO DAS REGRAS DE QUADRATURA 219

Da mesma forma para k (t), k = 2, . . . ,n, obtemos


b 2 a2
(t2 /2)|ba = = w1 t1 + w2 t2 + . . . + wn tn (9.19)
2
b 3 a3
(t3 /3)|ba = = w1 t21 + w2 t22 + . . . + wn t2n (9.20)
3
.. ..
.=. (9.21)
n n
b a
= w1 tn1
1 + w2 t2n1 + . . . + wn tn1
n (9.22)
n
que pode ser escrito na forma matricial

1 1 ... 1 w1 b a

b2 a2
t1 t2 ... tn w

2
2

= (9.23)
3 3
t21 t22 ... t2n w b a
3 3
.. .. .. .. ..

. . . . .



n n
b a
tn1
1 tn1
2 . . . tn1
n wn n

Resolvendo o sistema obtemos os coeficientes wk para a regra de integrao.


Exemplo 9.2.1. Seja n = 3, [a,b] = [0,h], onde [t1 ,t2 ,t3 ] = [0,h/2,h]. Obtenha
uma regra de integrao para aproximar a f (t) dt.
Rb

Soluo. A regra ter a forma


Z b
f (t) dt w1 f (t1 ) + w2 f (t2 ) + w3 f (t3 ) (9.24)
a
w 1 f1 + w 2 f2 + w 3 f3 (9.25)
Considere a base polinomial [1 (t),2 (t),3 (t)] = [1,t,t2 ] e substitua f (t) por k (t)
obtendo
Z h
1 dt = h = w1 (1) + w2 (1) + w3 (1) (9.26)
0
Z h
t dt = h2 /2 = w1 (0) + w2 (h/2) + w3 (h) (9.27)
0
Z h
t2 dt = h3 /3 = w1 (0)2 + w2 (h/2)2 + w3 (h)2 (9.28)
0
que pode ser escrito na forma matricial

1 1 1 w1 h

0 = (9.29)
2
h/2 w2
h h /2



0 h2 /4 h2

w3 h3 /3

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


220 Clculo Numrico

Note que podemos simplificar h tal que o sistema fique



1 1 1 w1 1

0 1/2 1 = h 1/2 (9.30)
w2



0 1/4 1 1/3

w3

1 4 1
Resolvendo o sistema obtemos [w1 ,w2 ,w3 ] = h[ , , ] fornecendo a regra de
6 6 6
Simpson Z h
h 4h h
f (t) dt f0 + f1 + f2 (9.31)
0 6 6 6

9.3 Regras compostas


Vimos que em todas as estimativas de erro que derivamos, o erro depende do
tamanho do intervalo de integrao. Uma estratgia para reduzir o erro consiste
em particionar o intervalo de integrao em diversos subintervalos menores tal que
Z b n Z xi+1
f (x) dx = f (x) dx
X
a i=1 xi

onde a = x1 < ... < xn+1 = b, sendo n o nmero de subintervalos da partio do


intervalo de integrao. No caso uniforme xi = a + (i 1)h, h = (b a)/n.
Depois, aplica-se um mtodo simples de integrao em cada subintervalo,
Z xi+1
f (x) dx Si
xi

e a integral ser aproximada por


Z b n
f (x) dx S = Si
X
a i=1

9.3.1 Mtodo composto dos trapzios


A regra composta dos trapzios assume a seguinte forma:
Z b n Z xi+1
f (x) dx = f (x) dx
X
a i=1 xi
n
xi+1 xi
[f (xi ) + f (xi+1 )]
X

i=1 2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.3. REGRAS COMPOSTAS 221

Como h = xi+1 xi , temos:

Z b Ni
hX
f (x) dx [f (xk ) + f (xk+1 )]
a 2 k=1
h
= [f (x1 ) + 2f (x2 ) + 2f (x3 ) + + 2f (xNi ) + f (xNi +1 )]
2
Ni
h
= [f (x1 ) + f (xNi +1 )] + h f (xi )
X
2 i=2

9.3.2 Mtodo composto de Simpson


J a regra composta de Simpson assume a seguinte forma:

Z b n Z xk+1
f (x) dx = f (x) dx
X
a k=1 xk
n
xx+1 xk xk+1 + xk
   
f (xk ) + 4f + f (xk+1 )
X

k=1 6 2

onde, como anteriormente, xk = a + (k 1)h, h = (b a)/n e i = 1,2, . . . ,n + 1,


sendo n o nmero de subintervalos da partio do intervalo de integrao. Podemos
simplificar o somatrio acima, escrevendo:

n1 n
Z b " #
h
f (x) dx f (x1 ) + 2 f (x2i+1 ) + 4 f (x2i ) + f (x2n+1 ) + O(h5 )
X X
a 3 i=1 i=1

onde, agora, h = (b a)/(2n), xi = a + (i 1)h, i = 1,2, . . . ,2n + 1.

Exemplo 9.3.1. Calcule numericamente a integral

Z 2
2
x2 ex dx
0

pelas regras compostas do ponto mdio, trapzio e Simpson variando o nmero de


intervalos n = 1, 2, 3, 6, 12, 24, 48 e 96.

Soluo. As aproximaes calculadas so apresentadas na seguinte tabela:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


222 Clculo Numrico

n Ponto Mdio Trapzios Simpson


1 5,4365637 218,3926 76,421909
2 21,668412 111,91458 51,750469
3 31,678746 80,272022 47,876505
6 41,755985 55,975384 46,495785
12 45,137529 48,865685 46,380248
24 46,057757 47,001607 46,372373
48 46,292964 46,529682 46,37187
96 46,352096 46,411323 46,371838

Exerccios

E 9.3.1. Use as rotinas construdas em aula e calcule numericamente o valor


das seguintes integrais usando o mtodo composto dos trapzios para os seguintes
nmeros de pontos:
R 1 21
x (1 x)4 dx
R 1 4x2 R1 1 R1 4
n h 0 e dx 0 1+x2 dx 0 0 ex +1 dx
17 0.4409931
33 0.4410288
65 0.4410377
129 0.4410400
257 0.4410405
513 0.4410406
1025 0.4410407 0.7853981 1.5873015873016 103 4.6191723776309 101

E 9.3.2. O valor exato da integral imprpria x ln(x) dx dado por


R1
0

! 1
Z 1
x2 x2
x ln(x) dx = ln x
= 1/4
2 4

0
0

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.4. O MTODO DE ROMBERG 223

Aproxime o valor desta integral usando a regra de Simpson para n = 3, n = 5 e


n = 7. Como voc avalia a qualidade do resultado obtido? Por que isso acontece.

E 9.3.3. O valor exato da integral imprpria dx dado por .
R x2
0 e 2
Escreva esta integral como
Z 1 Z 1 Z 1 
x2 2 1/u2 2 2
I= e dx + u e du = ex + x2 e1/x dx
0 0 0

e aproxime seu valor usando o esquema de trapzios e Simpson para n = 5, n = 7


e n = 9.
E 9.3.4. Estamos interessados em avaliar numericamente a seguinte integral:
Z 1
ln(x) sen (x) dx
0

cujo valor com 10 casas decimais corretas .2398117420.


a) Aproxime esta integral via Gauss-Legendre com n = 2,n = 3, n = 4, n = 5,
n = 6 e n = 7.

b) Use a identidade
Z 1 Z 1 Z 1
ln(x) sen (x) dx = ln(x)x dx + ln(x) [sen (x) x] dx
0 0 0
! 1
x2 x2
Z 1
= ln x + ln(x) [sen (x) x] dx
2 4

0 0
1 Z1
= + ln(x) [sen (x) x] dx
4 0

e aproxime a integral 01 ln(x) [sen (x) x] dx numericamente via Gauss-


R

Legendre com n = 2, n = 3, n = 4, n = 5, n = 6 e n = 7.

c) Compare os resultados e discuta levando em considerao as respostas s se-


guintes perguntas: 1)Qual funo mais bem-comportada na origem? 2)Na
segunda formulao, qual poro da soluo foi obtida analiticamente e, por-
tanto, sem erro de truncamento?

9.4 O mtodo de Romberg


O mtodo de Romberg um mtodo simplificado para construir quadraturas
de alta ordem.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


224 Clculo Numrico

Considere o mtodo de trapzios composto aplicado integral


Z b
f (x) dx
a

Defina I(h) a aproximao desta integral pelo mtodo dos trapzios composto com
malha de largura constante igual a h. Aqui h = ba
Ni
para algum Ni inteiro, i.e.:

Ni
h ba
I(h) = f (a) + 2 f (xj ) + f (b) , Ni =
X
2 j=2 h

Teorema 9.4.1. Se f (x) uma funo analtica no intervalo (a,b), ento a funo
I(h) admite uma representao na forma

I(h) = I0 + I2 h2 + I4 h4 + I6 h6 + . . .

Para um demonstrao, veja [4]. Em especial observamos que


Z b
f (x) dx = lim I(h) = I0
a h0

Ou seja, o valor exato da integral procurada dado pelo coeficiente I0 .


A ideia central do mtodo de Romberg, agora, consiste em usar a extrapolao
de Richardson para construir mtodos de maior ordem a partir do mtodos dos
trapzios para o intervalo (a,b)
Exemplo 9.4.1. Construo do mtodo de quarta ordem.

I(h) = I0 + I2 h2 + I4 h4 + I6 h6 + . . .
!
h h2 h4 h6
I = I0 + I2 + I4 + I6 + . . .
2 4 16 64

Usamos agora uma eliminao gaussiana para obter o termo I0 :


4I(h/2) I(h) 1 5
= I0 I4 h4 I6 h6 + . . .
3 4 16
Vamos agora aplicar a frmula para h = b a,
h
I(h) = [f (a) + f (b)]
2
h a+b
I(h/2) = [f (a) + 2f (c) + f (b)] , c =
4 2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.4. O MTODO DE ROMBERG 225

4I(h/2) I(h) h h
= [f (a) + 2f (c) + f (b)] [f (a) + f (b)]
3 3 6
h
= [f (a) + 4f (c) + f (b)]
6
Observe que esquema coincide com o mtodo de Simpson.
A partir de agora, usaremos a seguinte notao
R1,1 = I(h)
R2,1 = I(h/2)
R3,1 = I(h/4)
..
.
Rn,1 = I(h/2n1 )
Observamos que os pontos envolvidos na quadratura Rk,1 so os mesmos pontos
envolvidos na quadratura R(k 1,1) acrescidos dos pontos centrais, assim, temos
a seguinte frmula de recorrncia:
k2
1 h 2X
!
h
Rk,1 = Rk1,1 + k1 f a + (2i 1) k1
2 2 i=1 2
Definimos Rk,2 para k 2 como o esquema de ordem quatro obtido da frmula
do exemplo 9.4.1:
4Rk,1 Rk1,1
Rk,2 =
3
Os valores Rk,2 representam ento os valores obtidos pelo mtodo de Simpson
composto aplicado a uma malha composta de 2k1 + 1 pontos.
Similarmente os valores de Rk,j so os valores obtidos pela quadratura de ordem
2j obtida via extrapolao de Richardson. Pode-se mostrar que
Rk,j1 Rk1,j1
Rk,j = Rk,j1 + .
4j1 1
Exemplo 9.4.2. Construa o esquema de Romberg para aproximar o valor de
dx com erro de ordem 8.
R 2 x2
0 e
55,59815 0,000000 0,000000 0,000000
30,517357 22,157092 0,000000 0,000000
O que nos fornece os seguintes resultados:
20,644559 17,353626 17,033395 0,000000
17,565086 16,538595 16,484259 16,475543

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


226 Clculo Numrico

Ou seja, temos: Z 2
2
ex dx 16,475543
0
usando uma aproximao de ordem 8.
Exemplo 9.4.3. Construa o esquema de Romberg para aproximar o valor de
dx com erro de ordem 12.
R 2 2 x2
0 x e

218,3926
111,91458 76,421909
66,791497 51,750469 50,105706
O que nos fornece:
51,892538 46,926218 46,604601 46,549028
47,782846 46,412949 46,378731 46,375146 46,374464
46,72661 46,374531 46,37197 46,371863 46,37185 46,371847
Ou seja, temos: Z 2
2
x2 ex dx 46,371847
0
com uma aproximao de ordem 12.

Exerccios

E 9.4.1. Para cada integrando encontre o funo I(h) = a0 + a1 h + a2 h2 +


a3 h3 + a4 h4 que melhor se ajusta aos dados, onde h = n1
1
. Discuta os resultados
com base no teorema envolvido na construo do mtodo de Romberg.

E 9.4.2. Calcule os valores da quadratura de Romberg de R1,1 at R4,4 para


sen (x) dx. No use rotinas prontas neste problema.
R
0

E 9.4.3. Sem usar rotinas prontas, use o mtodo de integrao de Romberg


para obter a aproximao R3,3 das seguintes integrais:
a)
R 1 x2
0 e dx

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.5. ORDEM DE PRECISO 227

R2q
b) 0 2 cos(x) dx

c)
R2
0
1
dx
2cos(x)

E 9.4.4. Encontre uma expresso para R2,2 em termos de f (x) e verifique o


mtodo de Romberg R2,2 equivalente ao mtodo de Simpson.

E 9.4.5. Considere o problema de aproximar numericamente o valor de


Z 100 
1

e 2 cos(x) 1 dx
0

pelo mtodo de Romberg. Usando rotinas prontas, faa o que se pede.

Calcule R(6,k), k = 1, . . . ,6 e observe os valores obtidos.

Calcule R(7,k), k = 1, . . . ,6 e observe os valores obtidos.

Calcule R(8,k), k = 1, . . . ,6 e observe os valores obtidos.

Discuta os resultados anteriores e proponha uma estratgia mais eficiente


para calcular o valor da integral.

9.5 Ordem de preciso


Todos os mtodos de quadratura que vimos at o momento so da forma
Z b N
f (x) dx wj f (xj )
X
a j=1

Exemplo 9.5.1. (a) Mtodo do trapzio


Z b
ba
f (x) dx [f (a) + f (b)]
a 2
ba ba
= f (a) + f (b)
2 2
2
:= w1 f (x1 ) + w2 f (x2 ) = wj f (xj )
X

j=1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


228 Clculo Numrico

(b) Mtodo do trapzio com dois intervalos

a+b
" ! #
Z b
ba
f (x) dx f (a) + 2f + f (b)
a 2 4
a+b
!
ba ba ba
= f (a) + f + f (b)
4 2 2 4
3
:= w1 f (x1 ) + w2 f (x2 ) + w3 f (x3 ) = wj f (xj )
X

j=1

(c) Mtodo de Simpson

a+b
" ! #
Z b
ba
f (x) dx f (a) + 4f + f (b)
a 2 6
2(b a) a+b
!
ba ba
= f (a) + f + f (b)
6 3 2 6
3
:= wj f (xj )
X

j=1

(d) Mtodo de Simpson com dois intervalos

3a + b a+b
Z b " ! !
f (x) dx f (a) + 4f + 2f
a 4 2
a + 3b
! #
ba
+ 4f + f (b)
4 12
3a + b a+b
! !
ba ba ba
= f (a) + f + f
12 3 4 6 2
a + 3b
!
ba ba
+ f + f (b)
3 4 12
5
:= wj f (xj )
X

j=1

A principal tcnica que temos usado para desenvolver os mtodos numricos


o polinmio de Taylor:

f (x) = a0 + a1 x + a2 x2 + . . . + an xn + Rn (x)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.5. ORDEM DE PRECISO 229

Integrando termo a termo, temos:


Z b Z b Z b Z b
f (x) dx = a0 dx + a1 x dx + a2 x2 dx + . . . +
a a a a
Z b Z b
an xn dx + Rn (x) dx
a a
b a2 2
b 3 a3
= a0 (b a) + a1 + a2 + ... +
2 3
bn+1 an+1 Z b
an + Rn (x) dx
n+1 a

Neste momento, natural investigar o desempenho de um esquema numrico


aplicado a funes do tipo f (x) = xn .

Definio 9.5.1. A ordem de preciso ou ordem de exatido de um esquema


de quadratura numrica como o maior inteiro positivo n para o qual o esquema
exato para todas as funes do tipo xk com 0 k n, ou seja, Um esquema dito
de ordem n se
n Z b
wj f (xj ) = f (x) dx, f (x) = xk , k = 0,1, . . . n
X

j=1 a

ou, equivalentemente:
n Z b
bk+1 ak+1
wj xkj = xk dx = k = 0,1, . . . n
X
,
j=1 a k+1

Observao 9.5.1. Se o mtodo tem ordem 0 ou mais, ento


n
wj = b a
X

j=1

Exemplo 9.5.2. A ordem de preciso do esquema de trapzios 1:


2
Z b
ba X
f (x) dx [f (a) + f (b)] = wj f (xj )
a 2 j=1

onde wj = ba
2
, x1 = a e x2 = b.

(k = 0) : wj = b a
Pn
j=1
b2 a2
(k = 1) : wj xj = (a + b) ba =
Pn
j=1 2 2
b3 a3
(k = 2) : wj x2j = (a2 + b) 2 =
Pn 2 ba
j=1 6 3

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


230 Clculo Numrico

Exemplo 9.5.3. A ordem de preciso do esquema de Simpson 3:


a+b 3
" ! #
Z b
ba X
f (x) dx f (a) + 4f + f (b) = wj f (xj )
a 2 6 j=1

onde w1 = w3 = ba
6
,w2 = 4 ba
6
, x1 = a, x2 = a+b
2
e x3 = b

(k = 0) : wj = (1 + 4 + 1) ba =ba
Pn
j=1 6
b2 a2
(k = 1) : wj xj = (a + 4 a+b + b) ba = (a + b) ba =
Pn
j=1 2 6 2 2
 2
b3 a3
(k = 2) : j=1 wj xj = (a + 4 + b2 ) ba =
Pn 2 2 a+b
2 6 3
 3
b4 a4
(k = 3) : j=1 wj xj = (a + 4 + b3 ) ba =
Pn 3 3 a+b
2 6 4
 4
b5 a5
(k = 4) : j=1 wj xj = (a + 4 + b4 ) ba 6=
Pn 4 4 a+b
2 6 4

Exemplo 9.5.4. Encontre os pesos wj e as abscissas xj tais que o esquema de


dois pontos Z 1
f (x) dx = w1 f (x1 ) + w2 f (x2 )
1
de ordem 3.
Soluo. Temos um sistema de quatro equaes e quatro incgnitas dado por:

w1 + w2 = 2
x1 w1 + x2 w2 = 0
2
x21 w1 + x22 w2 =
3
x31 w1 + x32 w2 = 0

Da segunda e quarta equao, temos:


w1 x2 x3
= = 32
w2 x1 x1
Como x1 6= x2 , temos x1 = x2 e w1 = w2 . Da primeira equao, temos w1 =
w2 = 1. Da terceira equao, temos x1 = x2 = 33 .
Esse esquema de ordem de preciso trs e dois pontos chama-se quadratura de
Gauss-Legendre com dois pontos:
! !
Z 1
3 3
f (x) dx = f +f
1 3 3

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.5. ORDEM DE PRECISO 231

Exemplo 9.5.5. Comparao

f (x) Exato Trapzio Simpson Gauss-Legendre (2)


e1 + 4e0 + e1 3 3
e e1 e1 + e e 3 +e 3
ex 3
2,35040 3,08616 2,36205 2,34270

16 4

2
p
9 9 2
x 3+ x3 3,41421 1,13807 1,15411
1,14924

3
ee1
x2 e x 3 0,78347 3,08616 1,02872 0,67905

Exerccios

E 9.5.1. Encontre os pesos w1 , w2 e w3 tais que o esquema de quadratura


dado por Z 1
f (x) dx w1 f (0) + w2 f (1/2) + w3 f (1)
0
apresente mxima ordem de exatido. Qual a ordem obtida?

E 9.5.2. Encontre a ordem de exatido do seguinte mtodo de integrao:


! !#
2 2 2
Z 1 "
f (x) dx f + f (0) + f
1 3 2 2

E 9.5.3. Encontre a ordem de exatido do seguinte mtodo de integrao:


Z 1
1 0 136 62 136 1 0
f (x) dx = f (1) + f (1/2) f (0) + f (1/2) + f (1)
1 210 105 105 105 210

E 9.5.4. Encontre os pesos w1 , w2 e w3 tal que o mtodo de integrao


Z 1
f (x) dx w1 f (1/3) + w2 f (1/2) + w3 f (2/3)
0

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


232 Clculo Numrico

tenha ordem de exatido mxima. Qual ordem obtida?

E 9.5.5. Quantos pontos so envolvidos no esquema de quadratura R3,2 ? Qual


a ordem do erro deste esquema de quadratura? Qual a ordem de exatido desta
quadratura?

9.6 Quadratura de Gauss-Legendre


Utilizando n pontos para aproximar a integral de f (x) em [1,1] podemos
encontrar a regra de quadratura de Gauss-Legendre
Z 1 n
f (t) dt wj f (tj )
X
1 j=1

cuja ordem de exatido 2n 1.

Note que temos n coeficientes wj e n pontos tj para determinar. O problema


de encontrar os n pesos e n abscissas equivalente a um sistema no linear
com 2n equaes e 2n incgnitas.

Pode-se mostrar que este problema sempre tem soluo e que a soluo
nica se t1 < t2 < . . . < tn

Os ns xj so dados pelos zeros do polinmio de Legendre, Pn (t).

Os pesos so dados por


2
wj =   .
1 t2j [Pn0 (tj )]2

A Tabela 9.1 lista os ns e os pesos da quadratura de Gauss-Legendre para


n = 1, 2, 3, 4 e 5.
Exemplo 9.6.1. Aproxime
Z 1
I= 1 + x2 dx
1

pelo mtodo de Gauss-Legendre com 2, 3, 4 e 5 pontos.


Soluo. A aproximao desta integral usando o mtodo de Gauss-Legendre con-
siste em computar
Z 1 n
I= f (x) dx wi f (ti ),
X
1 i=1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.6. QUADRATURA DE GAUSS-LEGENDRE 233

Tabela 9.1: Nodos e pesos para quadratura de Gauss-Legendre.

n tj wj

1 0 2

3
2 1
3
8
0
3 s
9
3 5

5 9
s
q 
3 2 6/5 /7 18+ 30
36
4 s
q 
3 + 2 6/5 /7 18 30
36

128
0
225
v s
1u 10 322 + 13 70
u
5
t
52
3 7 900
v s
1u 10 322 13 70
u
5+2
t
3 7 900

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


234 Clculo Numrico

onde f (x) = sqrt1 + x2 , wi o i-simo peso, ti o i-simo nodo, i = 1, . . . , n, e


n o nmero de nodos (ou pesos) da quadratura. Usando os nodos e pesos dados
na Tabela 9.1, obtemos os seguintes resultados:

n I
2 2,3094011
3 2,2943456
4 2,2957234
5 2,2955705
Em Python, temos:
def f(x):
return np.sqrt(1+x^2)

#G-L n=2
x2 = sqrt(3)/3
w2 = 1
I2 = w2[1]*f(x2[1]) + w2[1]*f(-x2[1])
print("%1.7f\n" % I2)

#G-L n=3
x3 = [0 -sqrt(3/5) sqrt(3/5)]
w3 = [8/9 5/9 5/9]
I3 = w3[1]*f(x3[1]) + w3[2]*f(x3[2]) + w3[2]*f(-x3[2]);
print("%1.7f\n" % I3)

#G-L n=4
x4 = [sqrt((3-2*sqrt(6/5))/7) sqrt((3+2*sqrt(6/5))/7)]
w4 = [(18+sqrt(30))/36 (18-sqrt(30))/36]
I4 = w4(1)*f(x4(1)) + w4(1)*f(-x4(1)) ...
+ w4(2)*f(x4(2)) + w4(2)*f(-x4(2))
print("%1.7f\n" % I4)

#G-L n=5
x5 = [0 1/3*sqrt(5-2*sqrt(10/7)) 1/3*sqrt(5+2*sqrt(10/7))]
w5 = [128/225 (322+13*sqrt(70))/900 (322-13*sqrt(70))/900]
I5 = w5(1)*f(x5(1)) + w5(2)*f(x5(2)) + w5(2)*f(-x5(2)) ...
+ w5(3)*f(x5(3)) + w5(3)*f(-x5(3))
print("%1.7f\n" % I5)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.6. QUADRATURA DE GAUSS-LEGENDRE 235

Mudana de intervalo
Os coeficientes da quadratura de Gauss-Legendre forma obtidos no intervalo
[1,1]. Para aproximar a integral de f (x) no intervalo [a,b] devemos fazer a mu-
dana de varivel
xi = ti + , = (b a)/2, = (b + a)/2
tal que
Z b n
f (x) dx wi f (
xi )(b a)/2
X
a i=1
Quando subdividimos o intervalo inicial [a,b] em N intervalos com extremos
[xi ,xi+1 ] a transformao torna-se
xi = ti + , = (xi+1 xi )/2, = (xi+1 + xi )/2
e Z xi+1 n
f (x) dx wi f (
xi )(xi+1 xi )/2
X
xi i=1
Exemplo 9.6.2. Aproximar
Z 1
I= 1 + x2 dx
0
pelo mtodo de Gauss-Legendre com 3 pontos.
Soluo. Para tanto, fazemos a mudana de variveis u = 2x 1:
Z 1
I= 1 + x2 dx
0
s
1Z 1 u+1 2
 
= 1+ du.
2 1 2
E, ento aplicamos a quadratura gaussiana nesta ltima integral, o que nos fornece
I 1,1478011. No GNU Octave, podemos computar estas aproximaes com o
seguinte cdigo:
def f(u):
return sqrt(1+(u+1)^2/4)/2

x3 = [0 -sqrt(3/5) sqrt(3/5)]
w3 = [8/9 5/9 5/9]
I3 = f(x3(1))*w3(1) + f(x3(2))*w3(2) + f(-x3(2))*w3(2)
print("%1.7f\n" % I3)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


236 Clculo Numrico

Exerccios

E 9.6.1. Encontre aproximaes para a integral


Z 1
5
x4 ex dx
1

usando a quadratura de Gauss-Legendre com 2, 3, 4 e 5 pontos. Ento, compare


com o seu valor exato.
E 9.6.2. Encontre aproximaes para as seguintes integrais via Gauss-Legendre
com 4 e 5 pontos:

a)
R 1 x4
0 e dx

b) log(x + ex )dx
R4
1

c)
R 1 x2
0 e dx

9.7 Exerccios finais

E 9.7.1. Considere o problema de calcular numericamente a integral I =


1 f (x)dx quando f (x) =
.
cos(x)
R1
|x|

a) O que acontece quando se aplica diretamente a quadratura gaussiana com


um nmero impar de abscissas?

b) Calcule o valor aproximado por quadratura gaussiana com n = 2, n = 4,


n = 6 e n = 8.

c) Calcule o valor aproximado da integral removendo a singularidade


Z 1
cos(x) Z 1
cos(x) 1 Z 1
1
I = q dx = q dx + q dx
1 |x| 1 |x| 1 |x|
Z 1
cos(x) 1 Z 1
1 Z 1
cos(x) 1
= q dx + 2 dx = q dx + 4
1 |x| 0 x 1 |x|

e aplicando quadratura gaussiana com n = 2, n = 4, n = 6 e n = 8.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.7. EXERCCIOS FINAIS 237

d) Calcule o valor aproximado da integral removendo a singularidade, conside-


rando a paridade da funo
 
Z 1
cos(x) 1 Z 1
cos(x) 1 Z 1 cos 1+u 1
I = 4+ dx = 4 + 2 dx = 4 + 2 2 du
1+u
q
1 |x| 0 x 1

e aplicando quadratura gaussiana com n = 2, n = 4, n = 6 e n = 8.


e) Expandindo a funo cos(x) em srie de Taylor, truncando a srie depois do
n-simo termos no nulo e integrando analiticamente.

f) Aproximando a funo cos(x) pelo polinmio de Taylor de grau 4 dado por


x2 x4
P4 (x) = 1 +
2 24
e escrevendo
Z 1
cos(x) Z 1
cos(x) P4 (x) Z 1
P4 (x)
I = q dx = q dx + q dx
1 |x| 1 |x| 1 |x|
cos(x) P4 (x)
!
Z 1 Z 1
x3/2 x7/2
= 2 dx +2 x1/2 + dx
0 x 0 2 24
| {z } | {z }
Resolver numericamente Resolver analiticamente

E 9.7.2. Calcule numericamente o valor das seguintes integrais com um erro


relativo inferior a 104 .
Z 1
sen (x)
a) dx
0 x
Z 1
sen (x)
b) dx
0 x(1 x)
 
Z 1 sen
2
x
c) q dx
0 x(1 x)
Z 1
d) ln(x) cos(x)dx
0

R 1 ex R 1 ex
E 9.7.3. Calcule as integrais 0 |x|1/4 dx e 0 |x|4/5 dx usando procedimentos
analticos e numricos.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


238 Clculo Numrico

E 9.7.4. Use a tcnica de integrao por partes para obter a seguinte identi-
dade envolvendo integrais imprprias:
Z
cos(x) Z
sen (x)
I= dx = dx.
0 1+x 0 (1 + x)2

Aplique as tcnicas estudadas para aproximar o valor de I e explique por que a


integral da direita mais bem comportada.

E 9.7.5. Resolva a equao


Z x
2
x+ ey dy = 5
0

com 5 dgitos significativos.

E 9.7.6. (Cincia dos materiais) O calor especfico (molar) de um slido pode


ser aproximado pela teoria de Debye usando a seguinte expresso
3 Z TD /T
T y 4 ey

CV = 9N kB dy
TD 0 (ey 1)2

onde N a constante de Avogrado dado por N = 6.022 1023 e kB a constante


de Boltzmann dada por kB = 1.38 1023 . TD temperatura de Debye do slido.

a) Calcule o calor especfico do ferro em quando T = 200K, T = 300K e


T = 400K supondo TD = 470K.

b) Calcule a temperatura de Debye de um slido cujo calor especfico a tempe-


ratura de 300K 24J/K/mol. Dica: aproxime a integral por um esquema
numrico com um nmero fixo de pontos.

c) Melhore sua cultura geral: A lei de Dulong-Petit para o calor especfico


dos slidos precede a teoria de Debye. Verifique que a equao de Debye
consistente com Dulong-Petit, ou seja:

lim Cv = 3N kB .
T

Dica: use ey 1 + y quando y 0

E 9.7.7. Explique por qu quando um mtodo simples tem estimativa de


erro de truncamento local de ordem hn , ento o mtodo composto associado tem
estimativa de erro de ordem hn1 .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


9.7. EXERCCIOS FINAIS 239

E 9.7.8. Encontre os pesos w1 e w2 e as abcissas x1 e x2 tais que


Z 1
f (x) = w1 f (x1 ) + w2 f (x2 )
1

quando f (x) = xk , k = 0,1,2,3, isto , o mtodo que apresente mxima ordem de


exatido possvel com dois pontos.
Use esse mtodo para avaliar o valor da integral das seguintes integrais e com-
pare com os valores obtidos para Simpson e trapzio, bom como com o valor exato.

a) (2 + x 5x2 + x3 ) dx
R1
1

b)
R1
1 ex dx

c)
R1
dx
1 x2 +1

E 9.7.9. Encontre os pesos w1 , w2 e w3 tal que o mtodo de integrao


! !
Z 1
3 3
f (x)dx w1 f + w2 f (0) + w3 f
1 3 3

tenha ordem de exatido mxima. Qual ordem obtida?

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 10

Problemas de valor inicial

Neste captulo, vamos desenvolver tcnicas numricas para aproximar a soluo


do problema de valor inicial (PVI) dado pela equao diferencial ordinria (EDO)
de primeira ordem

u0 (t) = f (t, u(t)) (10.1a)


u(t1 ) = a (condio inicial). (10.1b)

A incgnita de um problema de valor inicial uma funo que satisfaz a equao


diferencial (10.1a) e a condio inicial (10.1b).
Considere os prximos trs exemplos:
Exemplo 10.0.1.
du
=t (10.2)
dt
u(0) = a (10.3)

Exemplo 10.0.2.
du
=u (10.4)
dt
u(0) = a (10.5)

Exemplo 10.0.3.
du
= sen (u2 + sen (t)) (10.6)
dt
u(0) = a (10.7)

A soluo do primeiro exemplo u(t) = t2 /2 + a pois satisfaz a equao dife-


rencial e a condio inicial.

240
10.1. TEORIA DE EQUAES DIFERENCIAIS 241

A soluo do segundo exemplo fcil de ser obtida: u(t) = aet . Porm como
podemos resolver o terceiro problema?
Muitos problemas de valor inicial da forma (10.1) no podem ser resolvidos
exatamente, ou seja, sabe-se que a soluo existe e nica, porm no podemos
express-la em termos de funes elementares. Por isso necessrio calcular apro-
ximaes numricas. Diversos mtodos completamente diferentes esto disponveis
para aproximar uma funo real.
Existem vrias maneiras de obter aproximaes para a soluo deste problema.
Nos limitaremos a estudar mtodos que aproximam u(t) em um conjunto finito de
valores de t chamado malha que ser denotado por {ti }N i=1 = {t1 , t2 , t3 , . . . , tN }.
Desta forma, aproximamos a soluo u(ti ) por ui em cada ponto da malha usando
diferentes esquemas numricos.
Nos cdgos em Python apresentados neste captulo, estaremos assumindo que
as seguintes bibliotecas e mdulos esto importados:

from __future__ import division


import numpy as np
from numpy import linalg
import matplotlib.pyplot as plt

10.1 Teoria de equaes diferenciais


Uma questo fundamental analisar se um dado PVI um problema bem
posto. Ou seja,

Existe uma soluo para o P V I?

A soluo nica?

A soluo do PVI pouco sensvel a pequenas perturbaes nas condies


iniciais?

Definio 10.1.1. A funo f (t, u) Lipschitz em u se existe uma constante L,


tal que t [a, b] e u,v R,

|f (t, u) f (t, v)| L|u(t) v(t)|.

Teorema 10.1.1. Seja f (t, u) contnua em t e Lipschitz em u. Ento existe uma


nica soluo para o PVI

u0 (t) = f (t, u(t)) (10.8)


u(t1 ) = a. (10.9)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


242 Clculo Numrico

Definio 10.1.2. Estabilidade dinmica refere-se a propriedade de pequenas


perturbaes sobre o estado inicial de um sistema gerarem pequenas variaes no
estado final deste sistema (haver decaimento nas variaes, ou pelo menos no
crescimento, quanto t cresce).
Teorema 10.1.2 (Dependncia na condio inicial). Se u(t) e v(t) so solues
do PVI com f Lipschitz com u(t1 ) = u1 , v(t1 ) = v1 , ento

|u(t) v(t)| eL(tt1 ) |u1 v1 |.

10.2 Mtodo de Euler


Considere o PVI dado por

u0 (t) = f (t,u(t)) (10.10)


u(t1 ) = a (10.11)

Ao invs de solucionar o problema para qualquer t > t1 , (encontrar u(t)), iremos


aproximar u(t) em t2 = t1 + h.
Integrando (10.10) de t1 at t2 ,
Z t2 Z t2
u0 (t) dt = f (t,u(t)) dt (10.12)
t1 t1
Z t2
u(t2 ) u(t1 ) = f (t,u(t)) dt (10.13)
t1
Z t2
u(t2 ) = u(t1 ) + f (t,u(t)) dt (10.14)
t1

Seja un a aproximao de u(tn ). Para obter o mtodo numrico mais simples


aproximamos f em [t1,t2] pela funo constante f (t,u(t)) f (t1 ,u1 ),
Z t2
u2 = u1 + f (t1 ,u1 ) dt (10.15)
t1
u2 = u1 + f (t1 ,u1 )(t2 t1 ) (10.16)
u2 = u1 + hf (t1 ,u1 ) (10.17)

Este procedimento pode ser estendido para t3 ,t4 , . . ., onde

tn+1 = tn + h = t1 + nh, n = 1,2, . . .

e h o passo do mtodo, ou espaamento, que consideraremos constante.


Obtendo, assim, o mtodo de Euler,

un+1 = un + h f (tn ,un ). (10.18)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.2. MTODO DE EULER 243

Podemos tambm obter o mtodo de Euler a partir da aproximao de u0 (t)


por um esquema de primeira ordem do tipo
u(t + h) u(t)
u0 (t) = + O(h), h > 0.
h
Substituindo na EDO temos
u(t + h) u(t)
= f (t,u(t)) + O(h) (10.19)
h
u(t + h) = u(t) + hf (t,u(t)) + O(h2 ). (10.20)

Sendo un a aproximao de u em tn produzida pelo mtodo de Euler, obtemos

un+1 = un + hf (tn ,un ), (10.21)


u1 = a. (10.22)

Exemplo 10.2.1. Considere o problema de valor inicial

u0 (t) = 2u(t)
u(0) = 1

cuja soluo u(t) = e2t . O mtodo de Euler aplicado a este problema produz o
esquema:

uk+1 = uk + 2huk = (1 + 2h)uk


u1 = 1,

Suponha que queremos calcular o valor aproximado de u(1) com h = 0,2. Ento
os pontos t(1) = 0, t(2) = 0,2, t(3) = 0,4, t(4) = 0,6, t(5) = 0,8 e t(6) = 1,0 formam
os seis pontos da malha. As aproximaes para a soluo nos pontos da malha
usando o mtodo de Euler so:

u(0) u(1) =1
u(0,2) u(2) = (1 + 2h)u(1) = 1,4u(1) = 1,4
u(0,4) u(3) = 1,4u(2) = 1,96
u(0,6) u(4) = 1,4u(3) = 2,744
u(0,8) u(5) = 1,4u(4) = 3,8416
u(1,0) u(6) = 1,4u(5) = 5,37824

Essa aproximao bem grosseira quando comparamos com a soluo do problema


em t = 1: u(1) = e2 7,38906.
Em Python, podemos computar a soluo numrica deste PVI via o mtodo
de Euler com o seguite cdigo:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


244 Clculo Numrico

#define f(t,u)
def f(t,u):
return 2*u

#tamanho e num. de passos


h = 0.2
N = 6

#cria vetor t e u
t = np.empty(N)
u = np.copy(t)

#C.I.
t[0] = 0
u[0] = 1

#iteracoes
for i in np.arange(N-1):
t[i+1] = t[i] + h
u[i+1] = u[i] + h*f(t[i],u[i])

#imprime
for i,tt in enumerate(t):
print("%1.1f %1.4f" % (t[i],u[i]))
Exemplo 10.2.2. Aproxime a soluo do PVI
du
= 0.5u + 2 + t (10.23)
dt
u(0) = 8 (10.24)

Teste para h = 1.6, 0.8, 0.4, 0.2, 0.1.


Note que a soluo exata do problema

u(t) = 2t + 8et/2 (10.25)

Itere a frmula

un+1 = un + h(0.5un + 2 + tn ), u1 = 8 (10.26)

atravs do cdigo abaixo:

%---------------------------

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.2. MTODO DE EULER 245

function [u,t]=euler(h,Tmax)
u(1)= 8;
t(1)= 0;
itmax = Tmax/h;
for n=1:itmax
t(n+1)= t(n) + h;
u(n+1)= u(n) + h*(-0.5*u(n)+2+t(n));
end
plot(t,u,'g*-');
%---------------------------

Vamos agora, analisar o desempenho do mtodo de Euler usando um exemplo


mais complicado, porm ainda simples suficiente para que possamos obter a soluo
exata:
Exemplo 10.2.3. Considere o problema de valor inicial relacionado equao
logstica:

u0 (t) = u(t)(1 u(t))


u(0) = 1/2

Podemos obter a soluo exata desta equao usando o mtodo de separao


de variveis e o mtodo das fraes parciais. Para tal escrevemos:
du(t)
= dt
u(t)(1 u(t))
O termo u(1u)
1
pode ser decomposto em fraes parciais como 1
u
1
1u e chegamos
na seguinte equao diferencial:
1 1
 
+ du = dt.
u 1u
Integrando termo-a-termo, temos a seguinte equao algbrica relacionando u(t) e
t:
ln(u) ln(1 u) = t + C
Onde C a constante de integrao, que definida pela condio inicial, isto ,
u = 1/2 em t = 0. Substituindo, temos C = 0. O que resulta em:
u
 
ln =t
1u
Equivalente a
u
= et
1u

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


246 Clculo Numrico

Tabela 10.1: Tabela comparativa entre mtodo de Euler e soluo exata para
problema 10.2.3.
t Exato Euler h = 0,1 Euler h = 0,01
0 1/2 0,5 0,5
e1/2
1/2 1+e1/2
0,6224593 0,6231476 0,6225316
1 e
1+e
0,7310586 0,7334030 0,7312946
e2
2 1+e2
0,8807971 0,8854273 0,8812533
3
3 e
1+e3
0,9525741 0,9564754 0,9529609

e
u = (1 u)et
Colocando o termo u em evidncia, encontramos:

(1 + et )u = et (10.27)
t
E, finalmente, encontramos a soluo exata dada por u(t) = 1+e
e
t.

Vejamos, agora, o esquema iterativo produzido pelo mtodo de Euler:

uk+1 = uk + huk (1 uk ),
u1 = 1/2.

Para fins de comparao, calculamos a soluo exata e aproximada para alguns


valores de t e de passo h e resumimos na tabela 10.1.
No exemplo a seguir, apresentamos um problema envolvendo uma equao
no-autnoma, isto , quando a funo f (u) depende explicitamente do tempo.

Exemplo 10.2.4. Resolva o problema de valor inicial

u0 (t) = u(t) + t
u(0) = 1,

cuja soluo exata u(t) = 2et + t 1.

O esquema recursivo de Euler fica:

uk+1 = uk + h(uk + tk )
u1 = 1

Comparao

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.2. MTODO DE EULER 247

t Exato Euler h = 0,1 Euler h = 0,01


0 1 1 1
1 2e 1
0,7357589 0,6973569 0,7320647
2 2e2 + 1 1,2706706 1,2431533 1,2679593
3 2e3
+ 2 2,0995741 2,0847823 2,0980818

Exerccios

E 10.2.1. Resolva o problema de valor inicial dado por



u0 = 2u + u
u(0) = 1
com passo h = 0,1 e h = 0,01 para obter aproximaes para u(1). Compare com
a soluo exata dada por u(t) = (1 + 2et + e2t ) /4

E 10.2.2. Resolva o problema de valor inicial dado por



u0 = 2u + z
z 0 = z + u
u(0) = 0
z(0) = 2

com passo h = 0,2, h = 0,02, h = 0,002 e h = 0,0002 para obter aproximaes


para u(2) e z(2).

E 10.2.3. Resolva o problema de valor inicial dado por


u0 = cos(tu(t))
u(0) = 1

com passo h = 0,1, h = 0.01, h = 0,001, h = 0,0001 e 0,00001 para obter


aproximaes para u(2).

10.2.1 Ordem de preciso


A preciso de um mtodo numrico que aproxima a soluo de um PVI dada
pela ordem do erro acumulado ao calcular a aproximao em um ponto tn+1 em
funo do espaamento da malha h.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


248 Clculo Numrico

Se u(tn+1 ) for aproximado por un+1 com erro da ordem O(hp+1 ) dizemos que o
mtodo tem ordem de preciso p.
Queremos obter a ordem de preciso do mtodo de Euler. Para isso, substitu-
mos a EDO u0 = f (t,u) na expanso em srie de Taylor
u(tn+1 ) = u(tn ) + hu0 (tn ) + h2 u00 (tn )/2 + O(h3 ) (10.28)
e obtemos
u(tn+1 ) = u(tn ) + hf (tn ,u(tn )) + h2 u00 (tn )/2 + O(h3 ) (10.29)
Subtraindo (10.29) do mtodo de Euler
un+1 = un + h f (tn ,un ) (10.30)
obtemos
en+1 = un+1 u(tn+1 ) (10.31)
= un u(tn ) + h(f (tn ,u(tn ) + en ) f (tn ,u(tn ))) + (10.32)
h2 00
+ u + O(h3 ) (10.33)
2 n
Defina o erro numrico como en = un u(tn ) onde u(tn ) a soluo exata e un
a soluo aproximada. Assim
h2 00
en+1 = en + h(f (tn ,u(tn ) + en ) f (tn ,u(tn ))) + u
2 n
+ O(h3 ) (10.34)
Usando a condio de Lipschitz em f temos
h2 00
|en+1 | |en | + h|f (tn ,u(tn ) + en ) f (tn ,u(tn ))| + |u | + O(h3 )(10.35)
2 n
h2 00
|en | + hL|u(tn ) + en u(tn )| + |u | + O(h3 ) (10.36)
2 n
h2 00
|en | + hL|en | + |u | + O(h3 ) (10.37)
2 n
h2
(1 + hL)|en | + |u00n | + O(h3 ) (10.38)
2

10.2.2 Erro de truncamento Local


O Erro de Truncamento Local o erro cometido em uma iterao do
mtodo numrico supondo que a soluo exata conhecida no passo anterior.
Assim, supondo que a soluo exata em tn (|en | = 0), obtemos que o ETL

Euler = h /2|u | + O(h ) = O(h )


00
ET Ln+1 2 3 2

Como o ET L = O(h2 ) temos que o mtodo de Euler possui ordem 1.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.3. CONVERGNCIA, CONSISTNCIA E ESTABILIDADE 249

10.2.3 Erro de truncamento Global


O Erro de Truncamento Global o erro cometido durante vrias iteraes
do mtodo numrico.
Supondo que a soluo exata conhecida em t1 (ke1 k = 0), ento realizando
n = Th iteraes obtemos

ET G = nET L (10.39)
= n[h2 /2|u00 | + O(h3 )] (10.40)
= T h/2|u00 | + O(h2 ) (10.41)

ou seja
Euler = O(h)
ET Gn+1

10.3 Convergncia, consistncia e estabilidade


Nesta seo veremos trs conceitos fundamentais em anlise numrica: conver-
gncia, consistncia e estabilidade.

10.3.1 Convergncia
Um mtodo dito convergente se para toda EDO com f Lipschitz e todo
t > 0 temos que
lim |un u(tn )| = 0, n
h0
Convergncia significa que a soluo numrica tende a soluo do PVI.
Teorema 10.3.1. O mtodo de Euler convergente.
De fato, se f Lipschitz e |e0 | = 0, temos que

lim |en+1 | = limh0 O(h) = 0 (10.42)


h0

10.3.2 Consistncia
Definio 10.3.1. Dizemos que um mtodo numrico Rh (un ) = f consistente
com o PVI u0 (t) = f se para qualquer u(t)

lim |u0 (tn ) Rh (un )| = 0, n (10.43)


h0

Isto equivalente a
ET L
lim =0 (10.44)
h0 h
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
250 Clculo Numrico

10.3.3 Estabilidade
Definio 10.3.2. Um mtodo numrico estvel se

|un vn | C1 |u1 v1 |, n

Isto significa que dadas duas condies iniciais u1 e v1 , teremos que as solues
un e vn estaro a uma distncia limitada por uma constante C1 vezes |u1 v1 |. Se
u1 e v1 estiverem prximas ento un e vn esto tambm prximas dependendo da
constante C1 (obviamente C1 depende da funo f ).
Considere o PVI linear bem-posto

u0 (t) = u(t), u(0) = 1, (10.45)

onde C. Note que:

Possui soluo exata u(t) = et .

O PVI assintoticamente estvel, isto , limt u(t) = 0, se e somente


se < < 0.

Definio 10.3.3. O domnio de estabilidade linear D do mtodo numrico


o conjunto de todos h C tal que limn un = 0.

Ou seja, D o conjunto de todos h para o qual o correto comportamento


assinttico de (10.45) seja recuperado.

Exemplo 10.3.1. Utilizando o Mtodo de Euler para solucionar (10.45) obte-


mos (u1 = 1)

un+1 = un + hun , (10.46)


un+1 = (1 + h)un , (10.47)
un+1 = (1 + h)2 un1 , (10.48)
un+1 = (1 + h)n+1 u1 (10.49)
un+1 = (1 + h)n+1 , n = 0,1, . . . (10.50)

Para que o mtodo de Euler seja estvel, necessrio que h seja escolhido tal que
|1 + h| < 1. Ou seja, h deve estar em DEuler onde

DEuler = {z C : |1 + z| < 1} (10.51)

o interior de um disco no plano complexo de raio 1 e centro em z = 1 como na


Fig.??.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.4. O MTODO DE EULER IMPLCITO 251

Tal anlise pode ser facilmente estendida para u0 = u + b (veja exerccios).


Para o caso EDO no-linear, seja
u0 = f (t,u), t t0 , u(t0 ) = u0 (10.52)
comum requerer que hn,k D onde n,k so os autovalores da matriz jacobi-
ana Jn := f |
u (tn ,un )
, baseado na hiptese que o comportamento local da EDO
modelado por
u0 = un + Jn (u un ) (10.53)
Esta prtica no exata e fornece apenas uma ideia local do comportamento da
EDO (podendo levar a concluses errneas).
Um dos teoremas mais importantes em anlise numrica o seguinte:
Teorema 10.3.2. Um mtodo numrico consistente para um PVI bem-posto
convergente se e somente se ele estvel.
Ele tambm usado da seguinte forma:
Teorema 10.3.3. Se um mtodo numrico consistente e estvel em [a,b]
ento ele convergente.

10.4 O mtodo de Euler implcito


Integrando o PVI
u0 (t) = f (t,u(t)) (10.54)
u(t1 ) = a (10.55)
de t1 at t2 obtemos (como feito anteriormente)
Z t2
u(t2 ) = u(t1 ) + f (t,u(t)) dt (10.56)
t1

Entretanto se aproximarmos a funo f por uma funo constante f (t,u(t))


f (t2 ,u2 ), obteremos um novo mtodo
Z t2
u2 = u1 + f (t2 ,u2 ) dt (10.57)
t1
u2 = u1 + hf (t2 ,u2 ) (10.58)
Generalizando este procedimento para tn obtemos o mtodo de Euler im-
plcito
un+1 = un + h f (tn+1 ,un+1 ). (10.59)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


252 Clculo Numrico

Note que este mtodo implcito (a equao implcita) pois depende de un+1
dos dois lados da equao. Se a funo f for simples o suficiente, podemos resolver
a equao isolando o termo un+1 . Se isso no for possvel, devemos usar um dos
mtodos vistos anteriormente para calcular as razes da equao (por exemplo,
mtodo da bisseco e mtodo de Newton).
Pode ser mostrado que o erro de truncamento local

EulImp = O(h ).
ET Ln+1 2

portanto o mtodo de ordem 1. E o erro de truncamento global

EulImp = O(h).
ET Gn+1

Exemplo 10.4.1. Utilizando o mtodo de Euler implcito para solucionar


(10.45) obtemos

un+1 = un + hun+1 , (10.60)


(1 h)un+1 = un , (10.61)
1
 
un+1 = un , (10.62)
1 h
1
 2
un+1 = un1 , (10.63)
1 h
1
 n+1
un+1 = , n = 0,1, . . . (10.64)
1 h
onde u1 = 1. Conclumos ento que
1

DEulImp = {z C : < 1} (10.65)

1 z
ou ainda,

DEulImp = {z C : |1 z| > 1} (10.66)

Para que o mtodo


de Euler implcito seja estvel, necessrio que h seja
escolhido tal que 1h < 1, ou ainda, |1 h| > 1. Ou seja, h deve estar em
1

DEulImp onde

DEulImp = {z C : |1 z| > 1} (10.67)

o exterior de um disco no plano complexo de raio 1 e centro em z = 1.


Note que DEulImp inclui todo o semiplano negativo. Portanto o mtodo de
Euler implcito imita a estabilidade assinttica da EDO linear sem restrio no
passo h.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.5. MTODO TRAPEZOIDAL 253

Definio 10.4.1. Um mtodo numrico chamado A-estvel ou incondicio-


nalmente estvel se incluir todo o semiplano complexo com parte real negativa,

{z C : <z < 0} D

Portanto o mtodo de Euler implcito A-estvel (incondicionalmente estvel).

10.5 Mtodo Trapezoidal


O mtodo de Euler aproxima f como uma constante no intervalo [t1 ,t2 ]. Pode-
mos melhorar isso usando a regra do trapzio,

Z t2
u(t2 ) = u(t1 ) + f (t,u(t)) dt (10.68)
t1
1 1
 
u2 = u1 + (t2 t1 ) f (t1 ,u1 ) + f (t2 ,u2 ) (10.69)
2 2
motivando o mtodo trapezoidal
h
un+1 = un + (f (tn ,un ) + f (tn+1 ,un+1 )) (10.70)
2
O mtodo trapezoidal dito implcito, pois para obter un+1 necessrio calcular
f (tn+1 ,un+1 ).
Entretanto, pode ser mostrado que o erro de truncamento local

T rap = O(h )
ET Ln+1 3

portanto o mtodo de ordem 2. E o erro de truncamento global

T rap = O(h )
ET Gn+1 2

Exemplo 10.5.1. Utilizando o mtodo trapezoidal para solucionar (10.45) ob-


temos
!n+1
1 + h/2
un+1 = , n = 0,1, . . . (10.71)
1 h/2
Conclumos ento que
1 + z/2

DT r = {z C : < 1} (10.72)

1 z/2

Note que DT r = C , o semiplano negativo. Portanto o mtodo do trapzio imita


a estabilidade assinttica da EDO linear sem restrio no passo h.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


254 Clculo Numrico

10.6 O mtodo de Heun


Tambm chamado de mtodo de Euler Modificado. A ideia calcular pri-
meiramente um valor intermedirio u usando o mtodo de Euler explcito e usar
esse valor na equao para o mtodo do Trapzio. Ou seja, o mtodo de Heun

u = un + hf (tn ,un ) (10.73)


h
un+1 = un + (f (tn ,un ) + f (tn+1 ,
u)) (10.74)
2

Este um exemplo de um mtodo preditor-corretor.


Felizmente o erro de truncamento local continua sendo

Heun = O(h )
ET Ln+1 3

e o erro de truncamento global

Heun = O(h )
ET Gn+1 2

Exerccios

E 10.6.1. Use o mtodo de Euler melhorado para obter uma aproximao


numrica do valor de u(1) quando u(t) satisfaz o seguinte problema de valor inicial

u0 (t) = u(t) + eu(t) ,


u(0) = 0,

usando passos h = 0,1 e h = 0,01.

E 10.6.2. Use o mtodo de Euler e o mtodo de Euler melhorado para obter


aproximaes numricas para a soluo do seguinte problema de valor inicial para
t [0,1]:

u0 (t) = u(t) u(t)2 ,


u(0) = 1,

usando passo h = 0,1. Compare os valores da soluo exata dada por u(t) = 2et11
com os numricos nos pontos t = 0, t = 0.1, t = 0.2, t = 0.3, t = 0.4, t = 0.5,
t = 0.6, t = 0.7, t = 0.8, t = 0.9, t = 1.0.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.7. O MTODO THETA 255

10.7 O mtodo theta


Tanto o mtodo de Euler quanto o mtodo trapezoidal se encaixam no mtodo

un+1 = un + h(f (tn ,un ) + (1 )f (tn+1 ,un+1 )) (10.75)

com = 1 e = 12 respectivamente. O mtodo explcito somente para = 1.


Para = 0, obtemos o mtodo implcito de Euler.

10.8 O mtodo de Taylor


Uma maneira simples de aumentar a ordem do mtodo utilizar diretamente
a srie de Taylor. Considere a expanso

h2 00 h3
u(t + h) = u(t) + hu0 (t) + u (t) + u000 (t) + . . . (10.76)
2! 3!
Utilizando dois termos temos o mtodo de Euler. Utilizando os trs primeiros
termos da srie e substituindo u0 (t) = f (t,x) e u00 (t) = f
t
(t,x) temos o mtodo
de Taylor de ordem 2

h2 f
un+1 = un + hf (tn ,un ) + (tn ,un ) (10.77)
2! t
O mtodo de Taylor de ordem 3

h2 f h3 2 f
un+1 = un + hf (tn ,un ) + (tn ,un ) + (tn ,un )
2! t 3! t2

10.9 Estabilidade dos mtodos de Taylor


Exemplo 10.9.1. Prove que para um mtodo de Taylor de ordem p para a EDO
(10.45) temos

z2 z3 zp
p(z) = 1 + z + + + ... + (10.78)
2! 3! p!

onde un = (p(z))n u0 e a regio de estabilidade dada por

DT = {z C : |p(z)| < 1} (10.79)

Plote as regies de estabilidade para o mtodo de Taylor para p = 1, . . . ,6 no


mesmo grfico.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


256 Clculo Numrico

Exemplo 10.9.2. Aproxime a soluo do PVI


du
= sen t (10.80)
dt
u(0) =1 (10.81)

para t [0,10].

a. Plote a soluo para h = 0.16,0.08, 0.04, 0.02, 0.01 para o mtodo de Taylor
de ordem 1, 2 e 3. (Plote todos de ordem 1 no mesmo grfico, ordem 2 em
outro grfico e ordem 3 outro grfico separado.)

b. Utilizando a soluo exata, plote um grfico do erro em escala logartmica.


Comente os resultados (novamente, em cada grfico separado para cada m-
todo repita os valores acima)

c. Fixe agora o valor h = 0.02 e plote no mesmo grfico uma curva para cada
mtodo.

d. Plote em um grfico o erro em t = 10 para cada um dos mtodos (uma curva


para cada ordem) a medida que h diminui. (Use escala loglog)

10.10 Mtodos de Passo Mltiplo


Seja o PVI

u0 (t) = f (t,u(t)) (10.82)


u(t0 ) =a (10.83)

Integrando a EDO em [tn+1 ,tn ] obtemos


R tn+1
un+1 = un + tn f (t,u(t)) dt (10.84)

Denote por fn f (tn ,un ). Um mtodo de passo simples utiliza fn+1 e fn . Um


mtodo de passo mltiplo utiliza tambm s valores anteriores j calculados como
fn1 ,fn2 , . . . ,fns , onde s 1 inteiro.

un+1 = un + h[bs fn+1 + bs1 fn + . . . + b1 fns+2 + b0 fns+1 ] (10.85)

Para conformidade com [9], translade s 1 ndices,

un+s = un+s1 + h[bs fn+s + bs1 fn+s1 + . . . + b1 fn+1 + b0 fn ] (10.86)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.11. O MTODO DE ADAMS-BASHFORTH 257

e teremos

un+s = un+s1 + h (10.87)


Ps
m=0 bm fn+m

De forma geral um mtodo de passo mltiplo ser


s
am un+m = h (10.88)
X Ps
m=0 bm fn+m
m=0

10.11 O mtodo de Adams-Bashforth


Quando as = 1, as1 = 1, am = 0 para m = s 2, . . . ,0, bs = 0 temos um
mtodo de Adams-Bashforth do tipo

un+s = un+s1 + h (10.89)


Ps1
m=0 bm fn+m

Note que os mtodos de Adams-Bashforth so explcitos pois bs = 0.

Exemplo 10.11.1. Vamos obter o mtodo de Adams-Bashforth para s = 4 como


Rt
un+4 = un+3 + tn+3
n+4
f (t,u(t)) dt (10.90)
= un+3 + h m=0 bm fn+m (10.91)
P3
un+4
un+4 = un+3 + h[b3 fn+3 + b2 fn+2 + b1 fn+1 + b0 fn ] (10.92)

Para isso devemos obter [b3 ,b2 ,b1 ,b0 ] tal que o mtodo seja exato para polinmios
at ordem 3. Podemos obter esses coeficientes de maneira anloga a obter os
coeficientes de um mtodo para integrao.
Supondo que os ns tk estejam igualmente espaados, e para facilidade dos
clculos, como o intervalo de integrao [tn+3 ,tn+4 ], translade tn+3 para a origem
tal que [tn ,tn+1 , . . . ,tn+4 ] = [3h, 2h, h,0,h].
Considere a base [0 (t), . . . ,3 (t)] = [1,t,t2 ,t3 ] e substitua f (t) por k (t) obtendo
Z h
1 dt = h = h(b0 (1) + b1 (1) + b2 (1) + b3 (1))
0
Z h h2
t dt = = h(b0 (0) + b1 (h) + b2 (2h) + b3 (3h))
0 2
Z h
h3
t2 dt = = h(b0 (0)2 + b1 (h)2 + b2 (2h)2 + b3 (3h)2 )
0 3
Z h
h4
t3 dt = = h(b0 (0)3 + b1 (h)3 + b2 (2h)3 + b3 (3h)3 )
0 4

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


258 Clculo Numrico

que pode ser escrito na forma matricial




1 1 1 1 b
0
1
0 1 2 3 b 1/2

1 = (10.93)
0 1 4 9 b2 1/3



0 1 8 27 b3 1/4

Resolvendo o sistema obtemos


9 37 59 55
[b0 ,b1 ,b2 ,b3 ] = [ , , , ]
24 24 24 24
fornecendo o mtodo de Adams-Bashforth de 4 estgios

un+4 = un+3 + h
24
[55fn+3 59fn+2 + 37fn+1 9fn ] (10.94)

E 10.11.1. Mostre que o mtodo de Adams-Bashforth para s = 2 dado por

un+2 = un+1 + h2 [3fn+1 fn ] (10.95)

E 10.11.2. Mostre que o mtodo de Adams-Bashforth para s = 3 dado por

un+3 = un+2 + h
12
[23fn+2 16fn+1 + 5fn ] (10.96)

10.12 O mtodo de Adams-Moulton


Quando as = 1, as1 = 1, am = 0 para m = s 2, . . . ,0, bs 6= 0 temos um
mtodo de Adams-Moulton do tipo

un+s = un+s1 + h (10.97)


Ps
m=0 bm fn+m

Note que os mtodos de Adams-Moulton so implcitos pois bs 6= 0.


Exemplo 10.12.1. Vamos obter o mtodo de Adams-Moulton para s = 3 como
Rt
un+3 = un+2 + tn+3
n+4
f (t,u(t)) dt (10.98)
= un+2 + h m=0 bm fn+m (10.99)
P3
un+3
un+3 = un+2 + h[b3 fn+3 + b2 fn+2 + b1 fn+1 + b0 fn ] (10.100)

Para isso devemos obter [b3 ,b2 ,b1 ,b0 ] tal que o mtodo seja exato para polinmios
at ordem 3. Podemos obter esses coeficientes de maneira anloga a obter os
coeficientes de um mtodo para integrao.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.13. MTODO BDF 259

Supondo que os ns tk estejam igualmente espaados, e para facilidade dos


clculos, como o intervalo de integrao [tn+2 ,tn+3 ], translade tn+2 para a origem
tal que [tn ,tn+1 , . . . ,tn+3 ] = [2h, h,0,h].
Considere a base [0 (t), . . . ,3 (t)] = [1,t,t2 ,t3 ] e substitua f (t) por k (t) obtendo
Z h
1 dt = h = h(b0 (1) + b1 (1) + b2 (1) + b3 (1))
0
Z h h2
t dt = = h(b0 (h) + b1 (0) + b2 (h) + b3 (2h))
0 2
Z h
h3
t2 dt = = h(b0 (h)2 + b1 (0)2 + b2 (h)2 + b3 (2h)2 )
0 3
Z h
h4
t3 dt = = h(b0 (h)3 + b1 (0)3 + b2 (h)3 + b3 (2h)3 )
0 4
que pode ser escrito na forma matricial


1 0 1 1 b0 1
1 0 1 2 b1 1/2

= (10.101)
1 0 1 4 b2 1/3


1 0 1 8 b3 1/4

Resolvendo o sistema obtemos


1 5 19 9
[b0 ,b1 ,b2 ,b3 ] = [ , , , ,]
24 24 24 24
fornecendo a regra

un+3 = un+2 + h
24
[9fn+3 + 19fn+2 5fn+1 + fn ] (10.102)

E 10.12.1. Encontre o mtodo de Adams-Moulton para s = 2.

E 10.12.2. Encontre o mtodo de Adams-Moulton para s = 3.

10.13 Mtodo BDF


Um mtodo de ordem s com s estgios chamado de mtodo BDF-Backward
Differentiation Formula se (w) = bs ws , onde bs R, ou seja,

as un+s + ... + a1 un+1 + a0 un = hbs fn+s (10.103)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


260 Clculo Numrico

Exemplo 10.13.1. Mostre que o mtodo BDF com s = 3


18 9 2
un+3 un+2 + un+1 un = 6
hfn+3 (10.104)
11 11 11 11

E 10.13.1. Mostre que o mtodo BDF com s = 1 o mtodo de Euler


implcito.

E 10.13.2. Mostre que o mtodo BDF com s = 2


4 1
un+2 un+1 + un = 23 hfn+2 (10.105)
3 3

10.14 Ordem e convergncia de mtodos de passo


mltiplo
Mais geralmente, um mtodo de passo mltiplo ser da forma

as un+s + ... + a1 un+1 + a0 un = h[bs fn+s + ... + b1 fn+1 + b0 fn ] (10.106)

Por conveno normalizamos a equao acima tomando as = 1. Quando bs = 0


temos um mtodo explcito e quando bs 6= 0 temos um mtodo implcito.
O mtodo ser de ordem p se o ET L = O(hp+1 ).
Dois polinmios so usados para estudar o mtodo (10.106):

(w) = as ws + ... + a1 w + a0 , (w) = bs ws + ... + b1 w + b0 , (10.107)

Exemplo 10.14.1. O mtodo (10.96) de Adams-Bashforth para s = 3 estgios


de ordem 3 de convergncia, ou seja, ET L = O(h4 ). Ele construdo de tal
maneira que seja exato para os polinmios 1,t,t2 ,t3 .

10.14.1 Consistncia, Estabilidade e Convergncia


Teorema 10.14.1. Um mtodo de passo mltiplo consistente se (1) = 0 e
0 (1) = (1).

Teorema 10.14.2. Um mtodo de passo mltiplo estvel se todas as razes de


(z) esto em |z| 1 e as razes com |z| = 1 so simples.

Teorema 10.14.3. Se um mtodo numrico consistente e estvel em [a,b]


ento ele convergente.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.15. ESTABILIDADE DOS MTODOS DE PASSO MLTIPLO 261

Exemplo 10.14.2. Prove que o mtodo de passo 3


27 27
un+3 + un+2 un+1 un = (10.108)
11 11
h
= [3fn+3 + 27fn+2 + 27fn+1 + 3fn ] (10.109)
11
no estvel.
Soluo. O polinmio
27 2 27
(w) = w3 + w w1 (10.110)
11 11 ! !
19 + 4 15 19 4 15
= (w 1) w + w+ (10.111)
11 11
falha na condio da raiz.

E 10.14.1. Prove que todos os mtodos de Adams-Bashforth satisfazem a


condio da raiz.
Teorema 10.14.4. O polinmio (w) em (10.103) satisfaz a condio da raiz e o
mtodo BDF convergente se e somente se 1 s 6.

E 10.14.2. Mostre que os mtodos BDF com s = 2 e s = 3 so convergentes.

10.14.2 As barreiras de Dahlquist


Um mtodo de passo mltiplo possui 2s + 1 coeficientes am ,bm . Poderamos
definir tais coeficientes de tal forma a obter ordem mxima.
Concluso? Poderamos obter mtodos com s estgios e ordem 2s.
Entretanto tal mtodo (implcito de passo s e ordem 2s) no convergente
para s 3 .
possvel provar que a ordem mxima de convergncia para um mtodo de
passo mltiplo s no mximo 2b(s + 2)/2c para mtodos implcitos e s para
mtodos explcitos. Esta a primeira barreira de Dahlquist.

10.15 Estabilidade dos mtodos de passo mlti-


plo
Teorema 10.15.1. O mtodo BDF de 2 estgios A-estvel.
Teorema 10.15.2 (A segunda barreira de Dahlquist). A ordem mxima de um
mtodo de passo mltiplo A-estvel dois.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


262 Clculo Numrico

10.16 Mtodos de Runge-Kutta


10.16.1 Mtodo de Runge-Kutta Explcito
Seja a EDO

u0 (t) = f (t,u(t)) (10.112)


u(t0 ) = a (10.113)

Integrando a EDO em [tn ,tn+1 ] obtemos


Z tn+1
un+1 = un + f (t,u(t)) dt (10.114)
tn

Um mtodo de passo simples utiliza fn e fn+1 . Queremos aumentar a ordem do


mtodo, porm utilizando somente valores de f entre [tn ,tn+1 ].

un un+1
| |
tn tn+1
1 2

Z tn+1
un+1 = un + f (t,u(t)) dt (10.115)
tn
Z 1
= un + h f (tn + h,u(tn + h )) d (10.116)
0

= un + h bj f (tn + cj h,u(tn + cj h)) (10.117)
X

j=1

Por exemplo, se = 3 estgios teremos [0 ,1 ,2 ] = [tn + c0 h,tn + c1 h,tn + c2 h],


Uj u(j ) e Fj f (j ,Uj ), j = 1,2,3. Inicie com U1 = un (c1 = 0) como a soluo
no passo anterior e aproxime U2 ,U3 , com uma combinao linear dos valores de Fj
anteriores, ou seja,

U1 = un (10.118)
U2 = un + ha21 F1 (10.119)
U3 = un + ha31 F1 + ha32 F2 (10.120)
un+1 = un + h[b1 F1 + b2 F2 + b3 F3 ] (10.121)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.16. MTODOS DE RUNGE-KUTTA 263

onde A = (aij ) a matriz de RK (triangular inferior com diagonal zero), bj so os


pesos RK e cj so os ns RK.
Os coeficientes podem ser resumidos em uma tabela na forma
c1 0 0 0
c A c2 a21 0 0
=
bT c3 a31 a22 0
b1 b2 b3

10.16.2 Mtodo de RK = 2
Assumindo suavidade suficiente em f , expanda em srie de Taylor
F2 = f (tn + c2 h,U2 ) (10.122)
= f (tn + c2 h,un + a21 hfn ) (10.123)
fn fn
= fn + h[c2 + a21 fn ] + O(h2 ) (10.124)
t u
fazendo com que (10.121) se torne
un+1 = un + h[b1 F1 + b2 F2 ] (10.125)
fn fn
= un + h(b1 + b2 )fn + h2 b2 [c2 + a21 fn ] + O(h3 ) (10.126)
t u
Usando a EDO e derivando-a obtemos
ut = f (t,u) (10.127)
utt = ft + fu ut = ft + fu f (10.128)
e expandindo em srie de Taylor a soluo exata em tn+1 ,
h2
u(tn+1 ) = un + hut + utt + O(h3 ) (10.129)
2
h2
= un + hfn + [ft + fu f ] + O(h3 ) (10.130)
2
e comparando com (10.126) obtemos as condies para ordem p 2,
1
b1 + b2 = 1, b2 c2 = a21 = c2 (10.131)
2
O sistema possui mais de uma soluo. Algumas escolhas comuns so
0 0 0
1
2
1
2
, 3 3
2 2
e 1 1
0 1 1
4
3
4
1
2
1
2

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


264 Clculo Numrico

onde a ltima tabela fornece o mtodo de Heun (ou Euler modificado):

U1 = un (10.132)
U2 = un + hF1 (10.133)
1 1
un+1 = un + h[ F1 + F2 ] (10.134)
2 2
Note que o mtodo de ordem p = 2 pois os termos que sobraram so de O(h3 ).
Seguindo um procedimento similar, podemos obter as condies para um m-
todo com = 3 e ordem p = 3, que so

b1 + b2 + b3 = 1, b2 c2 + b3 c3 = 1
2
(10.135)
1
b2 c22 + b3 c23 = , b3 a32 c2 = 16 (10.136)
3
Alguns exemplos de mtodos de RK de 3 estgios so o mtodo clssico de
Runge-Kutta
0
1 1
2 2
1 1 2
1 4 1
6 6 6
e o mtodo de Nystrom
0
2 2
3 3
2
3
0 2
3
2 3 3
8 8 8
Com pacincia e a ajuda de um software algbrico (como Maple) possvel
encontrar um mtodo de quarta ordem e = 4 estgios como
0
1 1
2 2
1
2
0 1
2
1 0 0 1
1 2 2 1
6 6 6 6

10.16.3 Mtodo de Runge-Kutta implcito (IRK)


No conjunto de equaes (10.118)-(10.121), Uk depende em valores conhecidos
F1 , . . . ,Fk1 tornando o mtodo explcito.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.17. ESTIMATIVA DA ORDEM DE CONVERGNCIA 265

Entretanto se Uk depender de F1 , . . . ,F temos um mtodo implcito como



Uj = un + h j = 1, . . . , (10.137)
X
aji Fi ,
i=1

un+1 = un + h (10.138)
X
bi Fi
i=1

onde A = (aij ) a matriz de RK. necessrio que



aji = cj , j = 1, . . . , (10.139)
X

i=1

para que o mtodo possua ordem p 1.

Exemplo 10.16.1. Um mtodo de Runge-Kutta Implcito (IRK) de dois estgios


dado por
2
U1 = un + h/4[f (tn ,U1 ) f (tn + h,U2 )] (10.140)
3
2
U2 = un + h/12[3f (tn ,U1 ) + 5f (tn + h,U2 )] (10.141)
3
2
un+1 = un + h/4[f (tn ,U1 ) + 3f (tn + h,U2 )] (10.142)
3
que possui uma tabela como
0 14 14
2 1 5
3 4 12
1 3
4 4

10.17 Estimativa da ordem de convergncia


Raramente temos a soluo exata u(t) para calcular o erro obtido na soluo
numrica. Entretanto, se a soluo suave o suficiente e o espaamento h pequeno
suficientemente, podemos usar o seguinte procedimento para estimar a ordem do
mtodo (ou ainda, o erro na soluo).
Como visto nos exemplo numricos anteriores, em grficos na escala loglog,
se h grande no obtemos a ordem de convergncia utilizada (por exemplo, en-
contramos que o mtodo de Euler possui ordem p 0.7 onde deveria ser 1). A
medida que h decresce se aproximando de 0, a ordem de convergncia tende a se
aproximar de p 1. (Entretanto h no pode ficar muito pequeno a ponto que as
operaes de ponto flutuante atrapalhem na convergncia).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


266 Clculo Numrico

Portanto existe uma faixa hmin < h < hmax onde o mtodo apresenta a ordem
desejada. Essa regio depende do mtodo e do PVI estudado.
Mas se estivermos nessa regio podemos aproximar a ordem do mtodo da se-
guinte forma: Considere a soluo para um determinado t = T fixo, u(T ). Consi-
dere tambm as aproximaes das solues obtidas com espaamento h, denotada
por uh ; a aproximao obtida com espaamento dividido por 2, h/2, denotada por
uh/2 ; a aproximao obtida com espaamento h/4, denotada por uh/4 ,. . . e assim
por diante, todas calculadas em t = T .

10.17.1 Mtodo 1
Podemos utilizar uma soluo bem refinada, por exemplo, uh/16 como sendo
uma boa aproximao da soluo exata e supormos que u = uh/16 . Desta forma
podemos aproximar o erro por eh = ku(h) u k e a ordem do mtodo estimada
como

log(eh )log(eh/2 )
p log(h)log(h/2)
(10.143)
 
eh
log
eh/2
log(h/(h/2))
(10.144)
 
eh
log
eh/2
log(2)
(10.145)
kuh u k
 
log
kuh/2 u k
log(2)
(10.146)
(10.147)

10.17.2 Mtodo 2
Segundo Ferziger/Peric/Roache, podemos tambm estimar p diretamente de
 
kuh/2 uh k
log
kuh/4 uh/2 k
p log(2)
(10.148)
(10.149)

Exerccios

E 10.17.1. Resolva o problema 1 pelos diversos mtodos e verifique heuristi-


camente a estabilidade para diversos valores de h.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.18. SISTEMAS DE EQUAES DIFERENCIAIS E EQUAES DE
ORDEM SUPERIOR 267
10.18 Sistemas de equaes diferenciais e equa-
es de ordem superior
O problema (10.1) pode ser um sistema de equaes de primeira ordem, isto ,
a incgnita y(t) pode ser um vetor de funes, como mostra o exemplo 10.150
Exemplo 10.18.1. O problema de valor inicial
u0 (t) = v(t), (10.150a)
v 0 (t) = u(t), (10.150b)
u(0) = 1. (10.150c)
v(0) = 0. (10.150d)
pode ser escrito na forma (10.1) com y(t)
No exemplo 10.18.2, mostramos como o mtodo de Euler pode ser facilmente
estendido para problemas envolvendo sistemas de equaes diferenciais..
Exemplo 10.18.2. Escreva o processo iterativo de Euler para resolver numerica-
mente o seguinte sistema de equaes diferenciais
x0 = y
y0 = x
x(0) = 1
y(0) = 0,

cuja soluo exata x(t) = cos(t) e y(t) = sen (t).


Para aplicar o mtodo de Euler a um sistema, devemos encarar as diversas
incgnitas do sistema como formando um vetor, neste caso, escrevemos:

x(t)
z(t) = .
y(t)
O sistema igualmente escrito na forma vetorial:

x(k+1) x(k) y (k)
= + h .
y (k+1) y (k) x(k)
Observe que este processo iterativo equivalente a:
x(k+1) = x(k) hy (k)
y (k+1) = y (k) + hx(k) .

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


268 Clculo Numrico

Exemplo 10.18.3. Escreva o problema de valor inicial de segunda ordem dado


por

y 00 + y 0 + y = cos(t),
y(0) = 1,
y 0 (0) = 0,

como um problema envolvendo um sistema de primeira ordem.

A fim de transformar a equao diferencial dada em um sistema de equaes


de primeira ordem, introduzimos a substituio w = y 0 , de forma que obteremos o
sistema:

y0 = w
w0 = w y + cos(t)
y(0) = 1
w(0) = 0

Portanto, o mtodo de Euler produz o seguinte processo iterativo:

y (k+1) = y (k) + hw(k) ,


w(k+1) = w(k) hw(k) hy (k) + h cos(t(k) ),
y (1) = 1,
w(1) = 0.

Exerccios

E 10.18.1. Resolva o problema de valor inicial dado por



y0 = 2y + z
z0 = z + y
y(0) = 0
z(0) = 2

com passo h = 0,2, h = 0,02, h = 0,002 e h = 0,0002 para obter aproximaes


para y(2) e z(2).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.19. EXERCCIOS FINAIS 269

10.19 Exerccios finais

E 10.19.1. Considere o seguinte modelo para o crescimento de uma colnia


de bactrias:
du
= u(A u)
dt
onde u indica a densidade de bactrias em unidades arbitrrias na colnia e e A
so constantes positivas. Pergunta-se:
a) Qual a soluo quando a condio inicial u(0) igual a 0 ou A?

b) O que acontece quando a condio inicial u(0) um nmero entre 0 e A?

c) O que acontece quando a condio inicial u(0) um nmero negativo?

d) O que acontece quando a condio inicial u(0) um nmero positivo maior


que A?

e) Se A = 10 e = 1 e u(0) = 1, use mtodos numricos para obter tempo


necessrio para que a populao dobre?

f) Se A = 10 e = 1 e u(0) = 4, use mtodos numricos para obter tempo


necessrio para que a populao dobre?

E 10.19.2. Considere o seguinte modelo para a evoluo da velocidade de um


objeto em queda (unidades no SI):

v 0 = g v 2

Sabendo que g = 9,8 e = 102 e v(0) = 0. Pede-se a velocidade ao tocar o solo,


sabendo que a altura inicial era 100.

E 10.19.3. Considere o seguinte modelo para o oscilador no-linear de Van


der Pol:
u00 (t) (A u(t)2 )u0 (t) + w02 u(t) = 0
onde A, e w0 so constantes positivas.
Encontre a frequncia e a amplitude de oscilaes quando w0 = 1, = .1 e
A = 10. (Teste diversas condies iniciais)

Estude a dependncia da frequncia e da amplitude com os parmetros A,


e w0 . (Teste diversas condies iniciais)

Que diferenas existem entre esse oscilador no-linear e o oscilador linear?

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


270 Clculo Numrico

E 10.19.4. Considere o seguinte modelo para um oscilador no-linear:

u00 (t) (A z(t))u0 (t) + w02 u(t) = 0


Cz 0 (t) + z(t) = u(t)2

onde A, , w0 e C so constantes positivas.


Encontre a frequncia e a amplitude de oscilaes quando w0 = 1, = .1,
A = 10 e C = 10. (Teste diversas condies iniciais)

Estude a dependncia da frequncia e da amplitude com os parmetros A,


, w0 e C. (Teste diversas condies iniciais)

E 10.19.5. Considere o seguinte modelo para o controle de temperatura em


um processo qumico:

CT 0 (t) + T (t) = P (t) + Text


P 0 (t) = (Tset T (t))

onde C, e so constantes positivas e P (t) indica o potncia do aquecedor. Sa-


bendo que Tset a temperatura desejada, interprete o funcionamento esse sistema
de controle.
Calcule a soluo quando a temperatura externa Text = 0, Tset = 1000,
C = 10, = .1 e = .1. Considere condies iniciais nulas.

Quanto tempo demora o sistema para atingir a temperatura 900K?

Refaa os dois primeiros itens com = 0.2 e = 1

Faa testes para verificar a influncia de Text , e na temperatura final.

E 10.19.6. Considere a equao do pndulo dada por:


d2 (t) g
+ sen ((t)) = 0
dt2 l
onde g o mdulo da acelerao da gravidade e l o comprimento da haste.
Mostre analiticamente que a energia total do sistema dada por
!2
1 d(t) g
cos((t))
2 dt l
mantida constante.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


10.19. EXERCCIOS FINAIS 271

Resolva numericamente esta equao para g = 9,8m/s2 e l = 1m e as se-


guintes condies iniciais:
(0) = 0.5 e 0 (0) = 0.
(0) = 1.0 e 0 (0) = 0.
(0) = 1.5 e 0 (0) = 0.
(0) = 2.0 e 0 (0) = 0.
(0) = 2.5 e 0 (0) = 0.
(0) = 3.0 e 0 (0) = 0.
Em todos os casos, verifique se o mtodo numrico reproduz a lei de conservao
de energia e calcule perodo e amplitude.

E 10.19.7. Considere o modelo simplificado de FitzHugh-Nagumo para o


potencial eltrico sobre a membrana de um neurnio:
dV
= V V 3 /3 W + I
dt
dW
= 0.08(V + 0.7 0.8W )
dt
onde I a corrente de excitao.
Encontre o nico estado estacionrio (V0 ,W0 ) com I = 0.
Resolva numericamente o sistema com condies iniciais dadas por (V0 ,W0 )
e
I=0
I = 0.2
I = 0.4
I = 0.8
I = et/200

E 10.19.8. Considere o problema de valor inicial dado por


du(t)
= u(t) + et
dt
u(0) = 0
Resolva analiticamente este problema usando as tcnicas elementares de equaes
diferenciais ordinrias. A seguir encontre aproximaes numricas usando os m-
todos de Euler, Euler modificado, Runge-Kutta Clssico e Adams-Bashforth de
ordem 4 conforme pedido nos itens.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


272 Clculo Numrico

a) Construa uma tabela apresentando valores com 7 algarismos significativos


para comparar a soluo analtica com as aproximaes numricas produ-
zidas pelos mtodos sugeridos. Construa tambm uma tabela para o erro
absoluto obtido por cada mtodo numrico em relao soluo analtica.
Nesta ltima tabela, expresse o erro com 2 algarismos significativos em for-
mato cientfico. Dica: f ormat(0 e0 ,8) para a segunda tabela.

0.5 1.0 1.5 2.0 2.5


Analtico
Euler
Euler modificado
Runge-Kutta Clssico
Adams-Bashforth ordem 4

0.5 1.0 1.5 2.0 2.5


Euler
Euler modificado
Runge-Kutta Clssico
Adams-Bashforth ordem 4

b) Calcule o valor produzido por cada um desses mtodo para u(1) com passo
h = 0.1, h = 0.05, h = 0.01, h = 0.005 e h = 0.001. Complete a tabela com
os valores para o erro absoluto encontrado.

0.1 0.05 0.01 0.005 0.001


Euler
Euler modificado
Runge-Kutta Clssico
Adams-Bashforth ordem 4

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Captulo 11

Problemas de Valores de
Contorno

Neste captulo, discutimos sobre mtodos numricos para resolver equaes


diferenciais ordinrias com condies de contorno.
Nos cdigos Python apresentados, assumimos que as seguintes bibliotecas e
mdulos esto carregados:
>>> from __future__ import division
>>> import numpy as np
>>> from numpy import linalg
>>> import matplotlib.pyplot as plt

11.1 Mtodo de Diferenas Finitas


Nesta seo, discutimos os fundamentos do mtodo de diferenas finitas
(MDF) para problemas de valores de contorno (PVC). Este mtodo consiste
na reformulao do problema contnuo em um problema discreto usando frmulas
de diferenas finitas tomadas sobre uma malha apropriada.
Para introduzir os conceitos principais, consideramos o seguinte problema de
valor de contorno (PVC)
uxx = f (x, u), a < x < b, (11.1)
u(a) = ua , (11.2)
u(b) = ub , (11.3)
onde ua e ub so dados. Por ter fixados os valores da varivel u nos contornos, este
chamado de PVC com condies de Dirichlet1 .
1
Johann Peter Gustav Lejeune Dirichlet, 1805 - 1859, matemtico alemo.

273
274 Clculo Numrico

Figura 11.1: Malha uniforme de N pontos em um intervalo [a, b].

A resoluo de um tal problema pelo mtodo de elementos finitos consiste em


quatro etapas fundamentais: 1. construo da malha, 2. construo do problema
discreto, 3. resoluo do problema discreto e 4. visualizao e interpretao dos
resultados.
1. Construo da malha. A malha consiste em uma representao discreta
do domnio [a, b]. Como veremos, sua construo tem impacto direto nas prximas
etapas do mtodo. Aqui, vamos construir a malha mais simples possvel, aquela que
consiste de N pontos igualmente espaados, isto , a chamada malha uniforme.
Para tanto, seja N N dado e, ento, tomamos o seguinte conjunto discreto
PN = {x1 , x2 , . . . , xN } (a malha), onde
xi = a + (i 1)h, i = 1, 2, . . . , N,
com
ba
h := ,
N 1
o qual chamado de tamanho (ou passo) da malha (veja a figura 11.1).
2. Construo do problema discreto. A segunda etapa consiste na discre-
tizao das equaes, no nosso caso, das equaes (11.1)-(11.3).
Vamos comear pela equao (11.1). Em um ponto da malha xi , i = 2, 3, . . . , N
1, temos
uxx (xi ) = f (xi , u(xi )).
Usando a frmula de diferenas finitas central de ordem 2 para a segunda derivada,
temos
u(xi h) 2u(xi ) + u(xi + h)
!
+ O(h ) = f (xi , u(xi )).
2
h2
Rearranjando os termos, obtemos
u(xi h) 2u(xi ) + u(xi + h)
= f (xi , u(xi )) + O(h2 ).
h2
Agora, denotando por ui a aproximao numrica de u(xi ), a equao acima
nos fornece
1 2 1
2
ui1 + 2 ui + 2 ui+1 = f (xi , ui ), (11.4)
h h h
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
11.1. MTODO DE DIFERENAS FINITAS 275

para i = 2, 3, . . . , N 1. Observamos que trata-se de um sistema de N incgnitas,


a saber ui , e de N 2 equaes, isto , um sistema subdeterminado.
Para obtermos um sistema determina, aplicamos as condies de contorno. Da
condio de contorno dada na equao (11.2), temos

u(a) = ua u1 = ua . (11.5)

Analogamente, da condio de contorno dada na equao (11.2), temos

u(b) = ub uN = ub . (11.6)

Por fim, as equaes (11.6), (11.4) e (11.5) determinam o problema discreto


associado

u1 = ua , (11.7)
1 2 1
ui1 + 2 ui + 2 ui+1 = f (xi , ui ), i = 2, . . . , N 1, (11.8)
h2 h h
uN = ub . (11.9)

Este um sistema de equaes de N incgnitas e N equaes.


3. Resoluo do sistema discreto. Esta etapa consiste em resolver o
sistema discreto construdo na etapa anterior.
Para o PVC (11.1)-(11.3), construmos o problema discreto (11.7)-(11.9). Este
um problema de N equaes e N incgnitas. Observamos que se f (x, u)
uma funo linear, o sistema ser linear e podemos resolver o sistema usando de
tcnicas numricas para sistema lineares. Agora, se f (x, u) uma funo no
linear, podemos usar, por exemplo, do mtodo de Newton para sistemas.
4. Visualizao e interpretao dos resultados. A soluo do problema
discreto consiste dos valores ui , isto , de aproximaes dos valores de u nos pontos
da malha. Para visualizarmos a soluo podemos, por exemplo, construir o grfico
do conjunto de pontos {(xi , ui )}. Ainda, para obtermos aproximaes da soluo
em outros pontos que no fazem parte da malha, podemos usar de tcnicas de
interpolao e/ou ajuste.
Exemplo 11.1.1. Use o mtodo de diferenas finitas para resolver o seguinte
problema de valor de contorno com condies de Dirichlet homogneas:

uxx = 100(x 1)2 , 0 < x < 1, (11.10)


u(0) = 0, (11.11)
u(1) = 0. (11.12)

Use a frmula de diferenas finitas central de ordem 2 para discretizar a derivada


em uma malha uniforme de 11 pontos. Calcule, tambm, a soluo analtica deste

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


276 Clculo Numrico

problema, faa um esboo das solues numrica e analtica e compute o erro


absoluto mdio definido por

1 XN
E := |u(xi ) ui | ,
N i=1

onde xi o i-simo ponto da malha, i = 1, 2, . . . , N e N o nmero de pontos


na mesma. Por fim, repita seus clculos para uma malha com 101 pontos. O que
ocorre com o erro absoluto mdio?

Soluo. Vamos seguir as etapas conforme acima.


1. Construo da malha. Tomando N = 11, definimos os pontos da malha
no domnio [0, 1] por:

xi = (i 1)h, i = 1, 2, . . . , N,

com h = 1/(N 1).


Em Python, podemos construir a malha da seguinte forma:

a = 0
b = 1
N = 11
h = (b-a)/(N-1)
x = np.linspace(a,b,N)

2. Construo do problema discreto. Usando a frmula de diferenas


finitas central de ordem 2 para aproximar a derivada na equao (11.10), obtemos
o seguinte sistema de equaes:

ui1 2ui + ui+1


= 100(xi 1)2 , i = 2, . . . , N 1.
h2

Completamos este sistema com as condies de contorno dadas nas equaes (11.11)
e (11.12), donde
u1 = uN = 0.
Ou seja, obtemos o seguinte problema discreto:

u1 = 0, (11.13)
1
(ui+1 2ui + ui+1 ) = 100(xi 1)2 , i = 2, . . . , N 1, (11.14)
h2
uN = 0. (11.15)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


11.1. MTODO DE DIFERENAS FINITAS 277

Observamos que este um sistema linear N N , o qual pode ser escrito na forma
matricial Au = b, cujos matriz de coeficientes

1 0 0 0 0 0


1 2 1 0 0 0



A= 0 1 2 1 0 0 ,

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

. . . . . . .


0 0 0 0 0 1

o vetor das incgnitas e o vetor dos termos constantes so

0

u1

100h (x2 1)2
2
u2



u= u3 e b= 100h2 (x3 1)2
.

.. ..

. .



uN 0

Em Python, podemos construir o problema discreto a seguinte forma:


A = np.zeros((N,N))
b = np.zeros(N)

A[0,0] = 1
b[0] = 0
for i in np.arange(1,N-1):
A[i,i-1] = 1
A[i,i] = -2
A[i,i+1] = 1
b[i] = -100 * h**2 * (x[i]-1)**2
A[N-1,N-1] = 1
b[N-1] = 0
3. Resoluo do problema discreto. Neste caso, o problema discreto
consiste no sistema linear Au = b e, portanto, a soluo

u = A1 b. (11.16)

Em Python, podemos computar a soluo do sistema Au = b com:


u = np.linalg.solve(A,b)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


278 Clculo Numrico

Figura 11.2: Esboo dos grficos das solues analtica (linha) e numrica (pontos)
do PVC dado no exemplo 11.1.1.

4. Visualizao e interpretao dos resultados. Tendo resolvido o pro-


blema discreto Au = b, obtemos os valores da soluo numrico de u nos pontos
i=1 . Neste exemplo,
da malha, isto , obtivemos o conjunto de pontos {(xi , ui )}N
queremos comparar a soluo numrica com a soluo analtica.
A soluo analtica pode ser obtida por integrao. Temos:

(x 1)3
uxx = 100(x 1)2 ux + c1 = 100
3
(x 1)4
u + c2 x + c1 = 100 ,
12
(x 1)4
ou seja, u(x) = + c2 x + c1 . As constantes so determinadas pelas
12
condies de contorno dadas pelas equaes (11.11) e (11.12), isto :

100
u(0) = 0 c1 = ,
12
100
u(1) = 0 c2 = .
12
Portanto, a soluo analtica :

(x 1)4 x 100
u(x) = 100 100 + (11.17)
12 12 12
Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com
11.1. MTODO DE DIFERENAS FINITAS 279

Tabela 11.1: Erro absoluto mdio das solues numricas com N = 11 e N = 101
do PVC dado no exemplo 11.1.1.
N h E
11 0,1 1,3 102
101 0,01 1,4 104

A figura 11.2 mostra o esboo dos grficos das solues analtica (11.17) e a da
soluo numrica (11.16).
Em Python, podemos fazer o esboo das solues analtica e numrica da se-
guinte forma:

#def. sol. analitica


def ue(x):
return -100.0*(x-1)**4/12 - 100*x/12 + 100.0/12

#grafico
xx = np.linspace(0,1)
yy = np.zeros(50)
for i,xxi in enumerate(xx):
yy[i] = ue(xxi)

plt.plot(x',u,'ro',xx,yy,'b-')
plt.show()

Por fim, computamos o erro absoluto mdio das solues numricas com N = 11
e N = 101. A tabela 11.1 mostra os resultados obtidos. Observamos, que ao dimi-
nuirmos 10 vezes o tamanho da malha h, o erro absoluto mdio diminui aproxima-
damente 100 vezes. Este resultado esperado, pois o problema discreto (11.13)-
(11.15) aproxima o problema contnuo (11.10)-(11.12) com erro de truncamento
de ordem h2 . Verifique!
Em Python, podemos computar o erro absoluto mdio da seguinte forma:

E = 0
for i,xi in enumerate(x):
E += np.abs(ue(xi) - u[i])
E /= N

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


280 Clculo Numrico

x u x u
0.50 1.000000 1.00 1.643900
0.60 1.143722 1.10 1.745332
0.70 1.280661 1.20 1.834176
0.80 1.410269 1.30 1.908160
0.90 1.531724 1.40 1.964534
1.00 1.643900 1.50 2.000000

Tabela 11.2: Soluo numrica do exerccio ER 11.1.1.

Exerccios Resolvidos
ER 11.1.1. Use o mtodo de diferenas finitas para resolver o seguinte problema
de valor de contorno:
uxx + u = ex , 0 < x < 1, (11.18)
u(0,5) = 1, (11.19)
u(1,5) = 2. (11.20)
Para tanto, use a frmula de diferenas finitas central de ordem 2 para discretizar
a derivada em uma malha uniforme com passo h = 0,1. Faa, ento, um esboo
do grfico da soluo computada.
Soluo. O passo h uma malha uniforme com N pontos no domnio [0,5, 1,5]
satisfaz:
(b a) (b a)
h= N = + 1.
N 1 h
Ou seja, a malha deve conter N = 11 pontos igualmente espaados. Denotamos
os pontos na malha por xi , onde xi = 0,5 + (i 1)h.
Agora, a equao diferencial dada no i-simo ponto da malha :
uxx (xi ) + u(xi ) = exi , i = 2, 3, . . . , N 1.
Denotando ui u(xi ) e usando a frmula de diferenas finitas central de ordem
dois para a derivada uxx , obtemos:
ui1 2ui + ui+1
 
2
+ ui = exi ,
h
para i = 2, 3, . . . , N 1. Rearranjando os termos e aplicando as condies de
contorno, temos o problema discretizado como segue:
u1 = 1
ui1 + (2 + h )ui ui+1 = h2 exi , i = 2, . . . , N 1,
2

uN = 2.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


11.1. MTODO DE DIFERENAS FINITAS 281

Figura 11.3: Esboo do grfico da soluo numrica do exerccio ER 11.1.1.

O problema discreto obtido um sistema linear N N . Resolvendo este


sistema, obtemos a soluo discreta apresentada na tabela 11.2. A figura 11.3
mostra um esboo do grfico da soluo computada.
Em Python, podemos computar a soluo numrica e grafic-la com o seguinte
cdigo:

#malha
a = 0.5
b = 1.5
N = 11
h = (b-a)/(N-1)
x = np.linspace(a,b,N)

#sistema
A = np.zeros((N,N))
b = np.zeros(N)

A[0,0] = 1
b[0] = 1
for i in np.arange(1,N-1):
A[i,i-1] = -1
A[i,i] = 2 + h**2
A[i,i+1] = -1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


282 Clculo Numrico

b[i] = h**2 * np.exp(x[i])


A[N-1,N-1] = 1
b[N-1] = 2

#solucao
u = np.linalg.solve(A,b)

#grafico
plt.plot(x,u,'b-o')
plt.show()

Exerccios

E 11.1.1. Considere o seguinte problema de valor de contorno para a equao


de calor no estado estacionrio:





uxx = 32, 0 < x < 1.

u(0) = 5
u(1) = 10


Defina uj = u(xj ) onde xj = (j 1)h e j = 1, . . . ,5. Aproxime a derivada


segunda por um esquema de segunda ordem e transforme a equao diferencial em
um sistema de equaes lineares. Escreva este sistema linear na forma matricial
e resolva-o. Faa o mesmo com o dobro de subintervalos, isto , com malha de 9
pontos.

E 11.1.2. Considere o seguinte problema de valor de contorno para a equao


de calor no estado estacionrio:

uxx = 200e(x1) , 0 < x < 2.
2





u(0) = 120
u(2) = 100


Defina uj = u(xj ) onde xj = (j 1)h e j = 1, . . . ,21. Aproxime a derivada


segunda por um esquema de segunda ordem e transforme a equao diferencial em
um sistema de equaes lineares. Resolva o sistema linear obtido.

E 11.1.3. Considere o seguinte problema de valor de contorno para a equao

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


11.1. MTODO DE DIFERENAS FINITAS 283

de calor no estado estacionrio:



uxx = 200e(x1) , 0 < x < 2.
2





u0 (0) = 0
u(2) = 100


Defina uj = u(xj ) onde xj = (j 1)h e j = 1, . . . ,21. Aproxime a derivada


segunda por um esquema de segunda ordem, a derivada primeira na fronteira por
um esquema de primeira ordem e transforme a equao diferencial em um sistema
de equaes lineares. Resolva o sistema linear obtido.

E 11.1.4. Considere o seguinte problema de valor de contorno para a equao


de calor no estado estacionrio com um termo no linear de radiao:

u4




uxx = 100 10000
, 0 < x < 2.

u(0) = 0
u(2) = 10


Defina uj = u(xj ) onde xj = (j 1)h e j = 1, . . . ,21. Aproxime a derivada


segunda por um esquema de segunda ordem e transforme a equao diferencial
em um sistema de equaes no lineares. Resolva o sistema obtido. Expresse a
soluo com dois algarismos depois do separador decimal. Dica: Veja problema 38
da lista 2, seo de sistemas no lineares.

E 11.1.5. Considere o seguinte problema de valor de contorno para a equao


de calor no estado estacionrio com um termo no linear de radiao e um termo
de conveco:
u4




uxx + 3ux = 100 10000 , 0 < x < 2.

u0 (0) = 0
u(2) = 10


Defina uj = u(xj ) onde xj = (j 1)h e j = 1, . . . ,21. Aproxime a derivada


segunda por um esquema de segunda ordem, a derivada primeira na fronteira por
um esquema de primeira ordem, a derivada primeira no interior por um esquema
de segunda ordem e transforme a equao diferencial em um sistema de equaes
no lineares. Resolva o sistema obtido.
E 11.1.6. Considere o seguinte problema de valor de contorno:

u2




u00 + 2u0 = ex 100
, 1 < x < 4.

u0 (1) + u(1) = 2
u0 (4) = 1


Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


284 Clculo Numrico

Defina uj = u(xj ) onde xj = 1 + (j 1)h e j = 1, . . . ,101. Aproxime a derivada


segunda por um esquema de segunda ordem, a derivada primeira na fronteira por
um esquema de primeira ordem, a derivada primeira no interior por um esquema
de segunda ordem e transforme a equao diferencial em um sistema de equaes
no lineares. Resolva o sistema obtido.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Apndice A

Rpida Introduo ao Python

Neste apndice, discutiremos os principais aspectos da linguagem computaci-


onal Python que so essenciais para uma boa leitura desta verso do livro. O
material aqui apresentado, uma adaptao livre do Apndice A de [12].

A.1 Sobre a linguagem Python


Python uma linguagem de programao de alto nvel, interpretada e multi-
paradigma. Lanada por Guido van Rossum1 em 1991 , atualmente, mantida de
forma colaborativa e aberta.
Para mais informaes, consulte:
Pgina oficial da linguagem Python: https://www.python.org/
Comunidade Python Brasil: http://wiki.python.org.br/
Para iniciantes, recomendamos o curso EAD gratuto no site Codecademy:
https://www.codecademy.com/learn/python

A.1.1 Instalao e Execuo


Para executar um cdigo Python necessrio ter instalado um interpretador
para a linguagem. No site oficial do Python esto disponveis para download os
interpretadores Python 2.7 e Python 3 para vrios sistemas operacionais, como
Linux, Mac OS e Windows. Muitas distribuies de Linux (Linux Mint, Ubuntu,
etc.) tm o Python no seu sistema de pacotes (incluindo documentao em vrias
lnguas).
Ao longo do texto, assumiremos que o leitor estaja usando um computar ro-
dando Linux. Para outros sistemas, pode ser necessrio fazer algumas adaptaes.
1
Guido van Rossum, nascido em 1956, programador de computadores dos Pases Baixos.

285
286 Clculo Numrico

A.1.2 Usando Python


O uso do Python pode ser feito de trs formas bsicas:

usando um console Python de modo iterativo;

executando um cdigo codigo.py no console Python;

executando um cdigo Python codigo.py diretamente em terminal;

Exemplo A.1.1. Considere o seguinte pseudocdigo:

s = "Ol Mundo!". (Sem imprimir na tela o resultado.)


sada(s). (Imprime na tela.)

Implemente este pseudocdigo em Python: a) usando diretamente um console; b)


digitando seu cdigo em um arquivo separado e executando-o no console Python
com a funo execfile.b) digitando seu cdigo em um arquivo separado e executando-
o em terminal com o comando python.

Soluo. Seguem as solues de cada item:

a) No console temos:

>>> s = "Ol, Mundo!"


>>> print(s)
Ol, Mundo!

Para sair do console, digite:

>>> quit()

b) Abra o editor de texto de sua preferncia e digite o cdigo:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

s = 'Ol'
print(s)

Salve o arquivo como, por exemplo, ola.py. No console Python, digite:

>>> execfile("ola.py")

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


A.2. ELEMENTOS DA LINGUAGEM 287

c) Abra o editor de texto de sua preferncia e digite o cdigo:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

s = 'Ol'
print(s)

Salve o arquivo como, por exemplo, ola.py. Em um terminal, digite:

$ python ola.py

A.2 Elementos da linguagem


Python uma linguagem de alto nvel, interpretada e dinmica. Uma varivel
criada quando um valor atribudo a ela. Por exemplo:

>>> x=1
>>> y = x * 2.0

a varivel x recebe o valor int 1 e, logo aps, na segunda linha de comando,


a varivel y recebe o valor double 2. Observamos que o smbolo = significa o
operador de atribuio no o de igualdade. O operador lgico de igualdade no
Python ==. Veja os seguintes comandos:

>>> print(x,y)
(1, 2.0)
>>> type(x), type(y)
(<type 'int'>, <type 'float'>)

Comentrios e continuao de linha de comando so usados como no seguinte


exemplo:

>>> #isto um comentrio


...
>>> x = 1 \
... + 2
>>> print(x)
3

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


288 Clculo Numrico

A.2.1 Operaes matemticas elementares


Em Python, os operadores matemticos elementares so os seguintes:
+ adio
- subtrao
* multiplicao
/ diviso
** potenciao
Ateno, a operao de diviso se comporta diferente nas verses Python 2.7
e Python 3. Em Python 3, temos:
>>> 1/2
0.5
J, em Python 2.7:
>>> 1/2
0
>>> from __future__ import division
>>> 1/2
0.5

A.2.2 Funes e constantes elementares


Vrias funes e constantes elementares esto disponveis no pacote mdulo
Python math. Por exemplo:
>>> import math as math
>>> math.cos(pi)
-1.0
>>> math.exp(1)
2.718281828459045
>>> math.log(math.exp(1))
1.0
Observamos que math.log a funo logartmo natural, isto , f (x) = ln(x),
enquanto que a implementao Python de f (x) = log(x) :
>>> math.log10(10)
1.0
Veja mais na documentao do mdulo math:
>>> help(math)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


A.3. MATRIZES 289

A.2.3 Operadores lgicos


Em Python, o valor lgico verdadeiro escrito como True e o valor lgico falso
como False. Temos os seguintes operadores lgicos disponveis:

and e lgico
or ou lgico
not negao
== igualdade
!= diferente
< menor que
> maior que
<= menor ou igual que
>= maior ou igual que

Exemplo A.2.1. Se x = 2, ento x maior ou igual a 1 e menor que 3?

Soluo. Em Python, temos:


>>> x=2
>>> (x >= 1) and (x < 3)
True

A.3 Matrizes
Em Python, temos um timo suporte para computao cientfica com o pacote
numpy. Uma matriz A = [ai,j ]m,n
i,j=1 em Python definida usando-se a seguinte
sintaxe:

>>> import numpy as np


>>> A = np.array([[ a11 , a12 , ... , a1n], [...]. [am1 , am2 , ... , amn]])

Exemplo A.3.1. Defina a matriz:



1 2 3
A=
4 5 6

Soluo. Em Python, digitamos:


>>> import numpy as np
>>> A = np.array([[1,2,3],
... [4,5,6]])

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


290 Clculo Numrico

>>> print(A)
[[1 2 3]
[4 5 6]]

A seguinte lista contm uma srie de funes que geram matrizes particulares:

numpy.eye matriz identidade


numpy.linspace vetor de elementos linearmente espaados
numpy.ones matriz cheia de uns
numpy.zeros matriz nula

A.3.1 Obtendo dados de uma matriz


A funo numpy.shape retorna o tamanho de uma matriz, por exemplo:

>>> A = np.ones((3,2))
>>> print(A)
[[ 1. 1.]
[ 1. 1.]
[ 1. 1.]]
>>> nl, nc = np.shape(A)
>>> print(nl,nc)
(3, 2)

informando que a matriz A tem trs linhas e duas colunas.


Existem vrios mtodos para se acessar os elementos de uma matriz dada A:

a matriz inteira acessa-se com a sintaxe:

o elemento da i-sima linha e j-sima coluna acessa-se usando a sintaxe:

A[i,j]

o bloco formado pelas linhas i1 , i2 e pelas colunas j1 , j2 obtm-se usando a


sintaxe:

A[i1:i2, j1:j2]

Exemplo A.3.2. Veja as seguintes linhas de comando:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


A.3. MATRIZES 291

>>> from numpy import random


>>> A = np.random.random((3,4))
>>> A
array([[ 0.39235668, 0.30287204, 0.24379253, 0.98866709],
[ 0.72049734, 0.99300252, 0.14232844, 0.25604346],
[ 0.61553036, 0.80615392, 0.22418474, 0.13685148]])
>>> A[2,3]
0.13685147547025989
>>> A[1:3,1:4]
array([[ 0.99300252, 0.14232844, 0.25604346],
[ 0.80615392, 0.22418474, 0.13685148]])

Definida uma matriz A em Python, as seguintes sintaxes so bastante teis:

A[:,:] toda a matriz


A[i:j,k] os elementos das linhas i at j (exclusive) da k-sima coluna
A[i,j:k] os elementos da i-sina linha das colunas j at k (exclusive)
A[i,:] a i-sima linha da matriz
A[:,j] a j-sima coluna da matriz

Ateno, os ndices em Python iniciam-se em 0. Assim, o comando A[1:3,1:4]


retorna o bloco da matriz A compreendido da segunda terceira linha e da segunda
a quarta coluna desta matriz.

Exemplo A.3.3. Veja as seguintes linhas de comando:

>>> B = np.random.random((4,4))
>>> B
array([[ 0.94313432, 0.72650883, 0.55487089, 0.18753526],
[ 0.02094937, 0.45726099, 0.51925464, 0.8535878 ],
[ 0.75948469, 0.95362926, 0.77942318, 0.06464183],
[ 0.91243198, 0.22775889, 0.04061536, 0.14908227]])
>>> aux = np.copy(B[:,2])
>>> B[:,2] = np.copy(B[:,3])
>>> B[:,3] = np.copy(aux)
>>> B
array([[ 0.94313432, 0.72650883, 0.18753526, 0.55487089],
[ 0.02094937, 0.45726099, 0.8535878 , 0.51925464],
[ 0.75948469, 0.95362926, 0.06464183, 0.77942318],
[ 0.91243198, 0.22775889, 0.14908227, 0.04061536]])

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


292 Clculo Numrico

A.3.2 Operaes matriciais e elemento-a-elemento


Em Python com numpy, o operador * opera elemento a elemento. Por exemplo:
>>> A = np.array([[1,2],[2,1]]); print(A)
[[1 2]
[2 1]]
>>> B = np.array([[2,1],[2,1]]); print(B)
[[2 1]
[2 1]]
>>> print(A*B)
[[2 2]
[4 1]]
A multiplicao matricial obtemos com:
>>> C = A.dot(B)
>>> print(C)
[[6 3]
[6 3]]
Aqui, temos as sintaxes anlogas entre operaes elemento-a-elemento:
+ adio
- subtrao
* multiplicao
/ diviso
** potenciao
Exemplo A.3.4. Veja as seguintes linhas de comando:
>>> A = np.ones((2,2))
>>> A
array([[ 1., 1.],
[ 1., 1.]])
>>> B = 2 * np.ones((2,2))
>>> B
array([[ 2., 2.],
[ 2., 2.]])
>>> A*B
array([[ 2., 2.],
[ 2., 2.]])
>>> A.dot(B)
array([[ 4., 4.],

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


A.4. ESTRUTURAS DE RAMIFICAO E REPETIO 293

[ 4., 4.]])
>>> A/B
array([[ 0.5, 0.5],
[ 0.5, 0.5]])

A.4 Estruturas de ramificao e repetio


A linguagem Python contm estruturas de repetio e ramificao padres de
linguagens estruturadas.

A.4.1 A instruo de ramificao if


A instruo if permite executar um pedao do cdigo somente se uma dada
condio for satisfeita.

Exemplo A.4.1. Veja o seguinte cdigo Python:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

i = 2
if (i == 1):
print("Ol!")
elif (i == 2):
print("Hallo!")
elif (i == 3):
print("Hello!")
else:
print("a Va!")

Qual a sada apresentada pelo cdigo? Por qu?

Observamos que, em Python, a identao obrigatria, pois ela que defini o


escopo da instruo.

A.4.2 A instruo de repetio for


A instruo for permite que um pedao de cdigo seja executado repetida-
mente.

Exemplo A.4.2. Veja o seguinte cdigo:

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


294 Clculo Numrico

for i in range(6):
print(i)

Qual a sada deste cdigo? Por qu?

Exemplo A.4.3. Veja o seguinte cdigo:

import numpy as np
for i in np.arange(1,8,2):
print(i)

Qual a sada deste cdigo? Por qu?

Exemplo A.4.4. Veja o seguinte cdigo:

for k = 10:-3:1
disp(k)
end

O que mostrado no console do Python?

Exemplo A.4.5. Veja o seguinte cdigo:

import numpy as np
for i in np.arange(10,1,-3):
print(i)

O que mostrado no console do Python?

A.4.3 A instruo de repetio while


A instruo while permite que um pedao de cdigo seja executado repetida-
mente at que uma dada condio seja satisfeita.

Exemplo A.4.6. Veja o seguinte cdigo Pyhon:

s = 0
i = 1
while (i <= 10):
s = s + i
i = i + 1

Qual o valor de s ao final da execuo? Por qu?

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


A.5. FUNES 295

A.5 Funes
Alm das muitas funes disponveis em Python (e os tantos muitos pacotes
livers disponveis), podemos definir nossas prprias funes. Para tanto, existe a
instruo def. Veja os seguintes exemplos:

Exemplo A.5.1. O seguinte cdigo:

def f(x):
return x + np.sin(x)

define a funo f (x) = x + sen x.


Observe que f () = . Confirme isso computando:

>>> f(np.pi)

Exemplo A.5.2. O seguinte cdigo em Python:

def h(x,y):
if (x < y):
return y - x
else:
return x - y

define a funo:
y x ,x < y
h(x,y) =
x y ,x y

Exemplo A.5.3. O seguinte cdigo:

def J(x):
y = np.zeros((2,2))
y[0,0] = 2*x[0]
y[0,1] = 2*x[1]

y[1,0] = -x[1]*np.sin(x[0]*x[1])
y[1,1] = -x[0]*np.sin(x[0]*x[1])

return y

define a matriz jacobiana J(x1 ,x2 ) := (f1 ,f2 )


(x1 ,x2 )
da funo:

f (x1 ,x2 ) = (x21 + x22 , cos(x1 x2 )).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


296 Clculo Numrico

A.6 Grficos
Para criar um esboo do grfico de uma funo de uma varivel real y = f (x),
podemos usar a biblioteca Python mathplotlib.A funo matplotlib.pyplot.plot
faz uma representao grfica de um conjunto de pontos {(xi , yi )} fornecidos.
Existe uma srie de opes para esta funo de forma que o usurio pode ajustar
vrias questes de visualizao. Veja a documentao.

Exemplo A.6.1. Veja as seguintes linhas de cdigo:

>>> import numpy as np


>>> import matplotlib.pyplot as plt
>>> def f(x): return x**3 + 1
...
>>> x = np.linspace(-2,2)
>>> plt.plot(x, f(x))
[<matplotlib.lines.Line2D object at 0x7f4f6d153510>]
>>> plt.grid()
>>> plt.show()

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Resposta dos Exerccios

Recomendamos ao leitor o uso criterioso das respostas aqui apresentadas. De-


vido a ainda muito constante atualizao do livro, as respostas podem conter
imprecises e erros.
E 2.1.1.
a) 4; b) 9; c) b2 ; d) 7; e) 170; f) 7,125; g) 3,28

E 2.1.5.
(101,1)2

E 2.1.6.
(11,1C)16

E 2.1.7.
50; 18

E 2.1.8.
10,5; (1010,1)2

E 2.2.1.
a) 2,99792458 105 b) 6,62607 1034
c) 6,674 108 d) 9,80665 104

E 2.2.2. Em Python, temos:

>>> print("%1.7e" % 29979.458)


2.9979458e+04
>>> print("%1.5e" % 66.2607)
6.62607e+01
>>> print("%1.3e" % 0.6674)
6.674e-01
>>> print("%1.5e" % 9806.65e1)
9.80665e+04

E 2.5.2.
a) 1,7889; b) 1788,9; c) 0,0017889; d) 0,0045966; e) 2,1755 1010 ; f) 2,1755 1010

E 2.5.6.
a) abs = 3,46 107 , rel = 1,10 107 ; b) abs = 1,43 104 , rel = 1,00 103

E 2.8.1.
2% , deve-se melhorar a medida na varivel x, pois, por mais que o erro relativo seja maior para esta varivel, a propagao
de erros atravs desta variveis muito menos importante do que para a outra varivel.

297
298 Clculo Numrico

E 2.8.2.
3,2% pela aproximao ou 3,4% pela segundo mtodo (0,96758 I 1,0342).

E 2.9.1.
Quando pequeno, e1/ um nmero grande. A primeira expresso produz um overflow (nmero maior que o mximo
representvel) quando pequeno. A segunda expresso, no entanto, reproduz o limite 1 quando 0+.

E 2.9.2.
2
a) 1
2
+ x4! + O(x4 ); b) x/2 + O(x2 ); c) 5 104 x + O(x2 ); d) 4
2
y + O(y 2 ) = 4
2
x + O(x2 )

E 2.9.5.
4,12451228 1016 J; 0,002%; 0,26654956 1014 J; 0,002%; 4,98497440 1013 J; 0,057%; 1,74927914 1012 J; 0,522%.

E 2.9.6.
Em ambos casos, temos a seguinte estrutura:

    
S11 S12 [A] v1
=
S21 S22 [B] v2

De forma que
   1     
[A] S11 S12 v1 1 S22 S12 v1
= =
[B] S21 S22 v2 S11 S22 S12 S21 S21 S11 v2

Portanto

S22 v1 S12 v2
[A] =
S11 S22 S12 S21
S21 v1 + S11 v2
[B] =
S11 S22 S12 S21

Usando derivao logartmica, temos

1 [A] S22
=
[A] S11 S11 S22 S12 S21
1 [A] v2 S21 [A] S22
= + =
[A] S12 S22 v1 S12 v2 S11 S22 S12 S21 [B] S11 S22 S12 S21
1 [A] S12
=
[A] S21 S11 S22 S12 S21
1 [A] v1 S11 [A] S12
= =
[A] S22 S22 v1 S12 v2 S11 S22 S12 S21 [B] S11 S22 S12 S21

1 [B] v2 S22 [B] S21


= =
[B] S11 S21 v1 + S11 v2 S11 S22 S12 S21 [A] S11 S22 S12 S21
1 [B] S21
=
[B] S12 S11 S22 S12 S21
1 [B] v1 S21 [B] S11
= + =
[B] S21 S21 v1 + S11 v2 S11 S22 S12 S21 [A] S11 S22 S12 S21
1 [B] S11
=
[B] S22 S11 S22 S12 S21

E o erro associado s medidas pode ser aproximado por


1
[A] =
1 [A] + 1 [A] + 1 [A] + 1 [A]
[A]
[A] S11 S11 [A] S12 S12 [A] S21 S21 [A] S22 S22
h i
1 [A] [A]
= S22 S11 + S22 S12 + S12 S21 + S12 S22
|det S| [B] [B]

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


RESPOSTAS DOS EXERCCIOS 299

Analogamente, temos:

h i
1 1 [B] [B]
[B] = S21 S11 + S21 S11 + S11 S21 + S11 S22
[B] |det S| [A] [A]

onde no se indicou |Sij | nem |[.]| pois so todos positivos.


Fazemos agora a aplicao numrica:
Caso do par 1-2:
270 30
det S = = 1200
140 20

1 1
[A] = [20 270 2% + 20 30 2% + 30 140 2% + 30 20 2%]
[A] 1200
216
= = 0.18 = 18%
1200
1 1
[B] = [140 270 2% + 140 30 2% + 270 140 2% + 270 20 2%]
[B] 1200
426
= = 0.355 = 35.5%
1200

Caso do par 1-3:


270 30
det S = = 53550
15 200

1 1
[A] = [200 270 2% + 200 30 2% + 30 15 10% + 30 200 10%]
[A] 53550
1804,6
= 0.0337 = 3.37%
52550
1 1
[B] = [15 270 2% + 15 30 2% + 270 15 10% + 270 200 10%]
[B] 53550
5895
= 0.11 = 11%
53550

Concluso, apesar de o sensor 3 apresentar uma incerteza cinco vezes maior na sensibilidade, a escolha do sensor 3 para fazer
par ao sensor 1 parece mais adequada.

E 3.1.1.
Observamos que a equao equivalente a cos(x) x = 0. Tomando, ento, f (x) = cos(x) x, temos que f (x) contnua
em [0, /2], f (0) = 1 e f (/2) = /2 < 0. Logo, do teorema de Bolzano 3.1.1, conclumos que a equao dada tem pelo menos
uma soluo no intervalo (0, /2).

E 3.1.2.
No exerccio 3.1.1, mostramos que a funo f (x) = cos(x) x tem um zero no intervalo [0, /2]. Agora, observamos que
f 0 (x) = sen (x)1. Como 0 < sen x < 1 para todo x (0, /2), temos que f 0 (x) < 0 em (0, /2), isto , f (x) monotonicamente
decrescente neste intervalo. Logo, da proposio 3.1.1, temos que existe um nico zero da funo neste intervalo.

E 3.1.3.
k 0,161228

E 3.1.5.
Escolhendo o intervalo [a, b] = [1,841 103 , 1,841 + 103 ], temos f (a) 5 104 > 0 e f (b) 1,2 103 < 0, isto
, f (a) f (b) < 0. Ento, o teorema de Bolzano nos garante que o zero exato x de f (x) est no intervalo (a, b). Logo, da escolha
feita, | 1,841 x | < 103 .

E 3.1.6. Basta aplicar as ideias da soluo do exerccio 3.1.5.

E 3.2.2.
A primeira raiz se encontra no intervalo (0,4, 0,5). A segunda raiz no intervalo (1,7, 1,8). A terceira raiz se encontra no
intervalo (2,5, 2,6).

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


300 Clculo Numrico

E 3.2.4.
1,390054; 1,8913954; 2,4895673; 3,1641544; 3,8965468

E 3.2.5.
k = lP
2
cos() com (0, /2); 1,030.

E 3.2.6.
19; 23; 26; 0,567143; 1,745528; 3,385630

E 3.2.8.
a) 0,623; b) 0,559; c) 0,500; d) 0,300; e) 0,3; f) 30; g) 30

E 3.2.9.
a) 0,0294; b) 2.44e 3; c) 2.50e 4; d) 1.09 107 ; e) 1012 ; f) 1012 ; g) 1012

E 3.3.1.
1,8414057

E 3.3.2.
0,7391

E 3.3.3.
Tomemos x(1) = 1 como aproximao inicial para a soluo deste problema, iterando a primeira sequncia a), obtemos:

(1)
x = 1
 
(2) 10
x = ln = 2,3025851
1
 
(3) 10
x = ln = 1,4685526
2,3025851

.
.
.
(21)
x = 1,7455151
(31)
x = 1,745528
(32)
x = 1,745528

Iterando a segunda sequncia b), obtemos:

(1)
x = 1
(2) 1
x = 10e = 3,6787944
(3) 3,6787944
x = 10e = 0,2525340
(4) 0,2525340
x = 10e = 7,7682979
(5) 7,7682979
x = 10e = 0,0042293
(6) 0,0042293
x = 10e = 9,9577961

Este experimento numrico sugere que a iterao a) converge para 1,745528 e a iterao b) no convergente.

E 3.3.10.
0.0431266

cos(x)x2
E 3.4.1. raiz:0,82413, processo iterativo: x(n+1) = x(n) + sen (x)+2x

E 3.4.3. 0,65291864

E 3.4.4. 0,0198679; 0,533890; 0,735412; 1,13237 e 1,38851.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


RESPOSTAS DOS EXERCCIOS 301

E 3.4.6. 99.99970, 0.3376513; 1.314006.

E 3.4.9.
x0 > 1.

E 3.4.10.

(0)
x = C.I.
(n+1) (n) (n)

x = x 2 Ax

E 3.4.11.

x0 = C.I.
 
(n+1) (n) 1 A
x = x 1 +
n nx(n)

E 3.4.12.

x0 = C.I.

(n+1) (n) x(n) Ax(n) (3 A)x(n)


x = x + =
2 2

E 3.6.5.
Seja f (x) C 2 um funo tal que f (x ) = 0 e f 0 (x ) 6= 0. Considere o processo iterativo do mtodo das secantes:

(n+1) (n) f (x(n) ) (n) (n1)


x =x (x x )
f (x(n) ) f (x(n1) )

Esta expresso pode ser escrita como:

(n+1) (n) f (x(n) )(x(n) x(n1) )


x = x
f (x(n) ) f (x(n1) )

x(n) f (x(n) ) f (x(n1) ) f (x(n) )(x(n) x(n1) )
=
f (x(n) ) f (x(n1) )
x(n) f (x(n1) ) x(n1) f (x(n) )
=
f (x(n) ) f (x(n1) )

Subtraindo x de ambos os lados temos:

(n+1) x(n) f (x(n1) ) x(n1) f (x(n) )


x x = x
f (x(n) ) f (x(n1) )

x(n) f (x(n1) ) x(n1) f (x(n) ) x f (x(n) ) f (x(n1) )
=
f (x(n) ) f (x(n1) )
(x(n) x )f (x(n1) ) (x(n1) x )f (x(n) )
=
f (x(n) ) f (x(n1) )

Definimos n = xn x , equivalente a xn = x + n

n f (x + n1 ) n1 f (x + n )
n+1 =
f (x + n ) f (x + n1 )

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


302 Clculo Numrico

Aproximamos a funo f (x) no numerador por

0 2 f 00 (x )
f (x + ) f (x ) + f (x ) + 
2
0 2 f 00 (x )
f (x + ) f (x ) + 
2

f 00 (x ) f 00 (x )
   
n n1 f 0 (x ) + 2
n1 2
n1 n f 0 (x ) + 2
n 2
n+1
f (x + n ) f (x + n1 )
f 00 (x )

2
n 2
n1 n1 2
n
=
f (x + n ) f (x + n1 )

1 00 n n1 n1 n
= f (x )
2 f (x + n ) f (x + n1 )

Observamos, agora, que


 0
  0

f (x + n ) f (x + n1 ) f (x ) + f (x )n f (x ) + f (x )n1
(3.6)
0
= f (x )(n n1 )

Portanto:
1 f 00 (x )
n+1 n n1 (3.7)
2 f 0 (x )

ou, equivalentemente:
(n+1) 1 f 00 (x ) (n)
 (n1)

x x x x x x (3.8)
2 f 0 (x )

E 3.7.2.
x > a com a 0,4193648.

E 3.7.3.
2j+1
z1 0.3252768, z2 1.5153738, z3 2.497846, z4 3.5002901, zj j 1/2 (1)j e , j >4

E 3.7.4.
150 W, 133 W, 87 W, 55 W, 6,5 W

E 3.7.5.
a) 42 s e 8 min2 s, b) 14 min56 s.

E 3.7.6.
118940992

E 3.7.7.
7,7 cm

E 3.7.8.
4,32 cm

E 3.7.9.
(0,652919, 0,426303)

E 3.7.10.
7,19% ao ms

E 3.7.11.
4,54% ao ms.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


RESPOSTAS DOS EXERCCIOS 303

E 3.7.12.
500 K, 700 K em t = 3 ln(2), 26 min, 4 h27 min.

E 3.7.13.
(1,1101388, 0,7675919), (1,5602111, 0,342585)

E 3.7.14.
1,5318075

E 3.7.15.
Aproximadamente 2500 reais por hora.

E 3.7.16.
a) 332,74 K b) 359,33 K

E 3.7.17.
1,2285751, 4,76770758, 7,88704085

E 4.1.1.
Escrevemos o sistema na forma matricial e resolvemos:

" # " # " #


1 1 1 0 1 1 1 0 1 1 1 0
1 0 10 48 0 1 9 48 0 10 1 25
0 10 1 25 0 10 1 25 0 1 9 48
" # " #
1 1 1 0 1 1 1 0
0 10 1 25 0 10 1 25
0 0 9.1 45.5 0 0 1 5
" # " #
1 1 0 5 1 1 0 5
0 10 0 30 0 1 0 3
0 0 1 5 0 0 1 5
" #
1 0 0 2
0 1 0 3
0 0 1 5

Portanto x = 2, y = 3, z = 5

E 4.5.1.

a = (0, 1, 2, 1, 2, 1)
b = (5, 3, 4, 2, 3, 2)
c = (4, 1, 1, 1, 2, 0)
d = (13, 10, 20, 16, 35, 17)
x = (1, 2, 3, 4, 5, 6)

E 4.5.2.

a = (0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1/2)
b = (1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1)
c = (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
d = (0, cos(2/10), cos(3/10), cos(4/10), cos(5/10),
cos(6/10), cos(7/10), cos(8/10), cos(9/10), cos(1),0)
x = (0,324295, 0,324295, 0,317115, 0,305943, 0,291539,
0,274169, 0,253971, 0,230846, 0,20355, 0,165301, 0,082650)

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


304 Clculo Numrico

E 4.6.1.
= 7130
41
51.95122, para = 51: k1 = k = 350.4, k2 = 262.1. Para = 52: k1 = k = 6888, k2 = 5163.

E 4.6.2.
k1 (A) = 36, k2 (A) = 18,26, K (A) = 20,8.

E 4.6.3.

k1 = k = 6888, k2 = 26656567 e k1 = 180, k2 = 128,40972 e k = 210

E 4.6.4.
18 + 3. Quando 0+, a matriz converge para uma matriz singular e o nmero de condicionamento diverge para +.

E 4.6.5.
As solues so [0.0000990 0.0000098]T e [0.0098029 0.0990294]T . A grande variao na soluo em funo de pequena
variao nos dados devido ao mau condicionamento da matriz (k1 1186274.3).
Exemplo de implementao:

A=[1e5 -1e4+1e-2; -1e4+1e-2 1000.1]


b1=[-10 1]'
b2=[-9.999 1.01]'
A\b1
A\b2

E 4.6.6. 0,695; 0,292; 0,188; 0,0237; 0,0123; 0,00967

E 4.7.4.
0,324295, 0,324295, 0,317115, 0,305943, 0,291539, 0,274169, 0,253971, 0,230846, 0,203551, 0,165301, 0,082650

E 4.7.5.
Permute as linhas 1 e 2.

E 4.8.1.
= 86.1785 associado ao autovetor dado por v1 = [0.65968 0.66834 0.34372]T .

E 4.8.3.
158,726

E 4.9.3.
Dica: P (1) = 3, P (1) = 1 e P (2) = 9 produzem trs equaes lineares para os coeficientes a, b e c. Resp: a)
P (x) = 3x2 + x 5, b) A 2.49 e B 1.29 c)A1 1.2872058, A2 4.3033034, B1 2.051533 e B2 0.9046921.

E 5.1.1. f = [2xy y sen (xy), x2 x sen (xy)]T

 
cos(x) x sen (x) 1
JF =
2e2x+y e2x+y

(JL )ij = aij

p 

E 5.1.3. As curvas possuem dois pontos de interseco. A posio exata destes pontos de inteseco dada por 2 3 3,2 3 2
 p 

e 2 3 3,2 3 2 . Use a soluo exata para comparar com a soluo aproximada obtida.

E 5.1.4. (0.8241323, 0.6791941)

E 5.1.5. x 0,259751, y 0,302736, z 0,045896

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


RESPOSTAS DOS EXERCCIOS 305

E 5.1.7. y = mx + b com m 0.0459710 e b 0.479237


Uma metodologia possvel para resolver este problema dada a seguir:
Sejam x1 e x2 as abscissas dos dois pontos em que a reta tangencia a curva. A equao da reta bitangente assume a seguinte
forma:
y = f (x1 ) + m(x x1 )

onde o coeficiente angular m dado por


f (x2 ) f (x1 )
m=
x2 x1

Da condio de tangncia, temos que o coeficiente angular da reta, m, deve igual derivada da funo f (x) nos dois pontos
de tangncia.
0 0
m = f (x1 ) = f (x2 )

E sabemos que:
0 cos(x) sen (x)
f (x) = .
1+x (1 + x)2

Assim, podemos reescrever o problema como

cos(x1 ) sen (x1 ) cos(x2 ) sen (x2 )


+ =0
1 + x1 (1 + x1 )2 1 + x2 (1 + x2 )2
cos(x1 ) sen (x1 ) f (x2 ) f (x1 )
=0
1 + x1 (1 + x1 )2 x2 x1

Este um sistema no-linear de duas incgnitas.


Os valores iniciais para o mtodo podem ser obtidos do grfico buscando valores prximos aos dois primeiros pontos de
(0) (0)
mximos. Por exemplo: x1 = 1 e x2 = 8. Obtemos x1 1,2464783 e x2 8,1782997 e m pode ser obtido atravs desses
valores.

E 5.1.8. (0.1956550; 0.2441719), (0.3694093; 0.4590564), (0.9990712; 1.1865168) e (1.4773606; 1.5552232)

E 5.1.9. (0.0449310; 0.0648872; 0.0698750), (0.3981385; 0.5658310; 0.6069019),

(1.1862966; 1.4348545; 1.480127)

E 5.1.10. (1,2085435, 1,0216674) e (2,7871115, 1,3807962)

E 5.1.11. A primeira curva trata-se de uma elipse de centro (3,1) e semi-eixos 4 e 6, portanto seus pontos esto contidos no
retngulo 1 x 7 e 5 y 7.
A solues so (0,5384844, 1,7978634) e (2,8441544, 6,9954443).

E 5.1.12. (x1 ,x2 ,x3 ) (453,62, 901,94, 144,43)

p 6,7
E 5.1.13. Incializao do mtodo: A(0) = 3,1 e b(0) = 3,1
A 3.0297384 e b 1.4835346.

E 5.1.14. f (1,1579702, 1,2020694) 2.376985

E 5.1.16. x 0,2982646, y 0,2990796, z 1,6620333 e x 0,0691328, y 0,2923039, z 0,8235705.

E 5.1.17.

x1 x2

x1 + 5(x2 + x3

2 ) x3 10 exp(2/3)

x2 + 5(x3 + x3
3 ) x4 10 exp(3/3)



F (x) = x3 + 5(x4 + x3
4 ) x5 10 exp(4/3)


.

.
.
x9 + 5(x10 + x3

10 ) x11 10 exp(10/3)
x11 1

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


306 Clculo Numrico


1 1 0 0 0 ... 0

5(1 + 3x2
1 1 ...

2) 0 0 0

0 1 5(1 + 3x2
3) 1 0 ... 0

JF (x) =
0 0 1 5(1 + 3x2
4) 1 ... 0

. . . . .

.
. . . . .. .
. . . . .
0 0 0 0 0 1

Resposta final: 0,80447, 0,80447, 0,68686, 0,57124, 0,46535, 0,37061, 0,28883, 0,22433, 0,19443, 0,28667, 1

E 5.1.18. f (0,8108792, 1,6217584) 0,1950369 e f (0,5527864, 1,1055728) 0,1455298

E 6.1.1.
p(x) = 3 + 2x + 5x3 .

E 6.1.2.
p(x) = 0,25 + x2 .

E 6.1.3.

a) Uma parbola de equao y = a1 + a2 x + a3 x2 que interpola os pontos deve satisfazer o sistema:

2
a1 + a2 x1 + a3 x1 = y1
2
a1 + a2 x2 + a3 x2 = y2

Sem perda de generalidade, para cada a3 R dado, temos:

2
a1 + a2 x1 = y1 a3 x1
,
2
a1 + a2 x2 = y2 a3 x2

o qual tem soluo nica, pois x1 6= x2 . Ou seja, para cada a3 R dado, existem a1 , a2 R tais que a parbola de
equao y = a1 + a2 x + a3 x2 interpola os pontos dados.

b) Certamente no existem retas de equao x = a que interpolam os pontos dados. Consideremos ento retas de equao
y = a1 + a2 x. Para uma tal reta interpolar os pontos dados necessrio que:

a1 + a2 = 1
a1 + 2a2 = 2,1,
a1 + 3a2 = 3

o qual um sistema impossvel.

c) No existe uma parbola de equao y = a1 + a2 x + a3 x2 que interpole os pontos dados, pois tal equao determina uma
funo de x em y. Agora, para mostrar que existem infinitas parbolas de equao x = a1 + a2 y + a3 y 2 que interpolam
os pontos dados, basta seguir um raciocnio anlogo ao do item a), trocando x por y e y por x.

E 6.4.1.
R1 f (0)+f (1)
P (x)dx = 2
1
, 12 maxx[0,1] |f 00 (x)|
0

E 7.1.1. f (x) = 0,55 0,01x.

E 7.1.2. f (x) = 0,19 0,47x.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


RESPOSTAS DOS EXERCCIOS 307

E 7.1.3.
a) 0,6025387; b) 0,5651848; c) 0,2851848; d) 0,1488041.

E 7.1.4.

a) Basta observar que


1 x1
  x2
 PN 
1
1 1 1
= PNN xj
T

V V = . j=1 =M
. PN 2
x1 x2 xN .. . xj xj
. j=1 j=1

1 xN

e

y1
   PN 
y2
V
T
y=
1 1 1
. = PNj=1 yj = w.
x1 x2 xN .. xj yj
j=1

yN

b) Sejam xi 6= xj duas abscissas diferentes. Ento, a i-sima e j-sima linhas na matriz V so linearmente independentes e,
portanto, o posto de V igual a 2. Por fim, V T V no singular, pois, se u tal que V T V u = 0, ento

T T T
0=u V V u = (V u) (V u) = (V u) (V u) V u = 0.

Agora, V u = 0 uma combinao linear das linhas de V igual a zero, logo u = 0, pois as linhas de V so linearmente
independentes como mostrado antes. Conclumos que se V T V u = 0, ento u = 0, isto , V T V no singular.

E 7.2.1. a1 = 0,1946029, a2 = 0,585986, a3 = 0,0112599.

E 7.2.2. y = 0,0407898x2 + 2,6613293x + 1,9364598.

E 7.2.3.
a) a = 25,638625, b = 9,8591874, c = 4,9751219; b)a = 31,475524, b = 65,691531, c = 272,84382, d = 208,23621.

E 8.1.3.

3f (0)+4f (h)f (2h)


a) f 0 (0) = 2h
+ O(h2 )

3f (0)4f (h)+f (2h)


b) f 0 (0) = 2h
+ O(h2 )

 h h2 h
 h

c) f 0 (0) = h +h
1 l h2 f (h1 ) + h1
h1 f (0) + h1 f (h2 )
1 2 1 2 2

E 8.1.4.

Caso a b c d
vi = 1 1.72 1.56 1.64 1.86
vi = 4.5 2.46 1.90 2.18 1.14

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


308 Clculo Numrico

E 8.1.5.
Segue a tabela com os valores da derivada para vrios valores de h.

h 102 104 106 107 108 109


D+,h f (1,5) 0,3125246 0,3161608 0,3161973 0,3161976 0,3161977 0,3161977

h 1010 1011 1012 1013 1014 1015


D+,h f (1,5) 0,3161976 0,3161971 0,3162332 0,3158585 0,3178013 0,3747003

Observe que o valor exato 0,3161977 e o h timo algo entre 108 e 109 .

E 8.4.6.

f (0)2f (h)+f (2h)


a) f 00 (0) = + O(h)
h2

f (0)2f (h)+f (2h)


b) f 00 (0) = + O(h)
h2

E 9.1.2.

1 2
ISimpson = IT rap + IP M
3 3

E 9.1.3.

n Ponto mdio Trapzios Simpson


3 0.1056606 0.7503919 0.5005225
5 0.1726140 0.3964724 0.2784992
7 0.1973663 0.3062023 0.2393551
9 0.2084204 0.2721145 0.2306618

E 9.3.2.
-0.2310491, -0.2452073, - 0.2478649.

E 9.3.4.
a)-0.2472261, -0.2416451, -0.2404596, -0.2400968, -0.2399563, -0.2398928. b)-0.2393727, -0.2397994, -0.2398104, -0.2398115,
-0.2398117, -0.2398117.

E 9.4.1.

1 12 2 2 7 3 3 4
a)I(h) = 4.41041 10 8.49372 10 h 1.22104 10 h 1.22376 10 h + 8.14294 10 h
1 11 2 2 7 3 6 4
b)I(h) = 7.85398 10 1.46294 10 h 4.16667 10 h 2.16110 10 h + 4.65117 10 h
3 10 7 2 5 3 4 4
c)I(h) = 1.58730 10 9.68958 10 h + 2.03315 10 h 1.38695 10 h + 2.97262 10 h
1 12 2 2 8 3 4 4
d)I(h) = 4.61917 10 + 3.83229 10 h + 2.52721 10 h + 5.48935 10 h + 5.25326 10 h

E 9.4.2.

1.5707963 2.0943951
1.8961189 2.0045598 1.9985707
1.9742316 2.0002692 1.9999831 2.0000055

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


RESPOSTAS DOS EXERCCIOS 309

E 9.4.3.
0.7468337,2.4606311, 1.6595275.

E 9.4.5.
R(6,6) = 10.772065, R(7,7) = 5.2677002, R(8,8) = 6.1884951, R(9,9) = 6.0554327, R(10,10) = 6.0574643. O valor desta
integral com oito dgitos corretos aproximado por 6.0574613.

E 9.5.1.
w1 = 1/6, w2 = 2/3, w3 = 1/6. O esquema construdo o de Simpson e a ordem de exatido 3.

E 9.5.2.
3

E 9.5.3.
5

E 9.5.4.
R1 3 f (1/3) 2f (1/2) + 3 f (2/3) com ordem 3.
f (x) dx 2 2
0

E 9.5.5.
5, 4, 3

E 9.6.1.

n G-L Exato Erro Absoluto


hline 2 0,2227 2,47E01
3 0,4157 5,44E02
0,4701
4 0,4437 2,64E02
5 0,4616 8,47E03

E 9.7.1.

n b c d e f
2 2.205508 3.5733599 3.6191866 3.6185185 3.618146
4 2.5973554 3.6107456 3.6181465 3.6180970 3.6180970
6 2.7732372 3.6153069 3.6181044 3.6180970 3.6180970
8 2.880694 3.6166953 3.6180989 3.6180970 3.6180970

Soluo do item e: Como



x2n
X
n
cos(x) = 1 + (1)
(2n)!
n=1

temos

1 cos(x) x2n1/2
X
n
= (1) , x0
x (2n)!
n=1

Logo, podemos integrar

Z 1 Z 1
cos(x) 1 x2n1/2
X
n
I = 4+2 p dx = 4 2 (1) dx
(2n)!
0 |x| 0
n=1

1
X
n
= 42 (1)
(2n)!(2n + 1/2)
n=1

Soluo do item f)

Z 1
x3/2 x7/2
  
1/2 1 1 977
2 x + dx = 2 2 + =
2 24 5 54 270
0

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


310 Clculo Numrico

Z 1 Z 1 1+u
 1+u

cos(x) P4 (x) cos 2
P4 2
2 dx = 2 du
x 1+u
0 1

E 9.7.5.
4.1138

E 9.7.6.
a)19.2, 22.1, 23.3 b)513.67K

E 9.7.8.
R1  
f (x)dx = f 33 +f 3
3
1

E 9.7.9.
w1 = w3 = 1 e w2 = 0 com ordem 3.

E 10.2.1.
 2
1 2 1+e1
0,4496 com h = 0,1 e 0,4660 com h = 0,01. A soluo exata vale u(1) = 1+2e 4 +e = 2
0,4678

E 10.2.2.
u(2) 0,430202 e z(2) = 0,617294 com h = 0,2, u(2) 0,435506 e z(2) = 0,645776 com h = 0,02, u(2) 0,435805 e
z(2) = 0,648638 com h = 0,002 e u(2) 0,435832 e z(2) = 0,648925 com h = 0,0002.

E 10.2.3.

u(2) 1,161793 com h = 0,1, u(2) 1,139573 com h = 0,01, u(2) 1,137448 com h = 0,001, u(2) 1,137237 com

h = 0,0001, u(2) 1,137216 com h = 0,00001

E 10.6.1.
u(1) 1,317078 quando h = 0,1 e u(1) 1,317045.

E 10.6.2.

t Exato Euler Euler melhorado Erro Euler Erro Euler melhorado


0.0 1. 1. 1. 0. 0.
0.1 0.826213 0.8 0.828 0.026213 0.001787
0.2 0.693094 0.656 0.695597 0.037094 0.002502
0.3 0.588333 0.547366 0.591057 0.040967 0.002724
0.4 0.504121 0.462669 0.506835 0.041453 0.002714
0.5 0.435267 0.394996 0.437861 0.040271 0.002594
0.6 0.378181 0.339894 0.380609 0.038287 0.002428
0.7 0.330305 0.294352 0.332551 0.035953 0.002246
0.8 0.289764 0.256252 0.291828 0.033512 0.002064
0.9 0.255154 0.224061 0.257043 0.031093 0.001889
1.0 0.225400 0.196634 0.227126 0.028766 0.001726

E 10.19.1.
1 ln 9
 1 ln (6)
Os valores exatos para os itens e e f so: 10 4
e 10

E 10.19.2.
q   p 
g
O valor exato
1 e200 em t = 1
g
tanh1 1 e200

E 10.19.8.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


RESPOSTAS DOS EXERCCIOS 311

0.5 1.0 1.5 2.0 2.5


Analtico 0.3032653 0.3678794 0.3346952 0.2706706 0.2052125
Euler 0.3315955 0.3969266 0.3563684 0.2844209 0.2128243
Euler modificado 0.3025634 0.3671929 0.3342207 0.2704083 0.2051058
Runge-Kutta Clssico 0.3032649 0.3678790 0.3346949 0.2706703 0.2052124
Adams-Bashforth ordem 4 0.3032421 0.3678319 0.3346486 0.2706329 0.2051848

0.5 1.0 1.5 2.0 2.5


Euler 2.8D-02 2.9D-02 2.2D-02 1.4D-02 7.6D-03
Euler modificado 7.0D-04 6.9D-04 4.7D-04 2.6D-04 1.1D-04
Runge-Kutta Clssico 4.6D-07 4.7D-07 3.5D-07 2.2D-07 1.2D-07
Adams-Bashforth ordem 4 2.3D-05 4.8D-05 4.7D-05 3.8D-05 2.8D-05

0.1 0.05 0.01 0.005 0.001


Euler 2.9D-02 5.6D-03 2.8D-03 5.5D-04 2.8D-04
Euler modificado 6.9D-04 2.5D-05 6.2D-06 2.5D-07 6.1D-08
Runge-Kutta Clssico 4.7D-07 6.9D-10 4.3D-11 6.8D-14 4.4D-15
Adams-Bashforth ordem 4 4.8D-05 9.0D-08 5.7D-09 9.2D-12 5.8D-13

E 11.1.1.
1 0 0 0 0
u1
5

1 2 1 0 0 u2 2
0 1 2 1 0
u3
= 2


0 0 1 2 1 u4 2
0 0 0 0 1 u5 10

Soluo: [5, 9.25, 11.5, 11.75, 10]



1 0 0 0 0 0 0 0 0 u1 5
1 2 1 0 0 0 0 0 0 u2 0.5

0 1 2 1 0 0 0 0 0 u3 0.5
0 0 1 2 1 0 0 0 0 u4 0.5
0 0 0 1 2 1 0 0 0
u5
= 0.5


0 0 0 0 1 2 1 0 0 u6 0.5
0 0 0 0 0 1 2 1 0
u7
0.5


0 0 0 0 0 0 1 2 1 u8 0.5
0 0 0 0 0 0 0 0 1 u9 10

Soluo: [5, 7.375, 9.25, 10.625, 11.5, 11.875, 11.75, 1.125, 10]

E 11.1.2. 120. 133.56 146.22 157.83 168.22 177.21 184.65 190.38 194.28 196.26 196.26 194.26 190.28 184.38 176.65 167.21

156.22 143.83 130.22 115.56 100.

E 11.1.3. 391.13 391.13 390.24 388.29 385.12 380.56 374.44 366.61 356.95 345.38 331.82 316.27 298.73 279.27 257.99 234.99

210.45 184.5 157.34 129.11 100.

E 11.1.4. 0., 6.57, 12.14, 16.73, 20.4, 23.24, 25.38, 26.93 , 28, 28.7, 29.06, 29.15, 28.95, 28.46, 27.62 , 26.36, 24.59, 22.18,

19.02, 14.98, 10.

E 11.1.5. u(0) = 31.62, u(1) = 31,50, u(1,9) = 18,17.

E 11.1.6. u(1) = 1,900362, u(2,5) = 1.943681, u(4) = 1,456517.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Referncias Bibliogrficas

[1] Cecill and free sofware. http://www.cecill.info. Acessado em 30 de julho


de 2015.

[2] M. Baudin. Introduction to scilab. http://forge.scilab.org/index.php/


p/docintrotoscilab/. Acessado em 30 de julho de 2015.

[3] R.L. Burden and J.D. Faires. Anlise Numrica. Cengage Learning, 8 edition,
2013.

[4] J. P. Demailly. Analyse Numrique et quations Differentielles. EDP Sciences,


Grenoble, nouvelle dition edition, 2006.

[5] W Gautschi. Numerical analysis: An introduction birkhauser. Barton, Mass,


USA, 1997.

[6] Walter Gautschi and Gabriele Inglese. Lower bounds for the condition
number of vandermonde matrices. Numerische Mathematik, 52(3):241250,
1987/1988.

[7] L.F. Guidi. Notas da disciplina clculo numrico. http://www.mat.ufrgs.


br/~guidi/grad/MAT01169/calculo_numerico.pdf. Acessado em julho de
2016.

[8] E. Isaacson and H.B. Keller. Analysis of numerical methods. Dover, Ontrio,
1994.

[9] Arieh Iserles. A first course in the numerical analysis of differential equations.
Cambridge university press, 2009.

[10] W.H. Press. Numerical Recipes 3rd Edition: The Art of Scientific Computing.
Cambridge University Press, 2007.

[11] R. Rannacher. Einfhrung in die numerische mathematik (numerik 0).


http://numerik.uni-hd.de/~lehre/notes/num0/numerik0.pdf. Acessado
em 10.08.2014.

312
REFERNCIAS BIBLIOGRFICAS 313

[12] Todos os Colaboradores. Clculo numrico - um livro colaborativo - verso


com scilab. disponvel em https://www.ufrgs.br/numerico/livro/main.
html, Novembro 2016.

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


Colaboradores

Aqui voc encontra a lista de colaboradores do livro. Esta lista contm so-
mente aqueles que explicitamente se manifestaram a favor de terem seus nomes
registrados aqui. A lista completa de colaboraes pode ser obtida no repositrio
GitHub do livro:

https://github.com/livroscolaborativos/CalculoNumerico

Alm das colaboraes via GitHub, o livro tambm recebe colaboraes via dis-
cusses, sugestese avisos deixados em nossa lista de emails:

livro_colaborativo@googlegroups.com

Estas colaboraes no esto listadas aqui, mas podem ser vistas no site do grupo
de emails.
Caso encontre algum equvoco ou veja seu nome listado aqui por engano, por
favor, entre em contato conosco por email:

livroscolaborativos@gmail.com

ou via o repositrio GitHub.

Tabela A.1: Lista de colaboradores


Nome Afiliao E-Mail 1 Contribuio
Debora Lidia Gisch -x- -x- #63

314
ndice Remissivo

ajuste equao diferencial


de uma reta, 171 no autnoma, 246
derivao, 205 equaes
linear, 175 de uma varivel, 38
polimomial, 181 erro
por mnimos quadrados, 170 absoluto, 19
ajuste de curvas, 170 relativo, 19
algoritmo erros, 18
de Thomas, 97 absoluto, 57
TDMA, 97 arredondamento, 195
aproximao de arredondamento, 11
de funes, 149, 170
frmula de diferenas finitas
por polinmios, 157
central, 199
aproximaes por diferenas finitas, 189
frmulas de diferenas finitas, 273
aritmtica
funo, 39
de mquina, 3
raiz de, 38
arredondamento de nmeros, 10
zero, 39
autovalores, 123
zero de, 38
cancelamento catastrfico, 22
integrao, 208
contrao, 52
integrao numrica
critrio de parada, 42
mtodo composto
derivao, 189 de Simpson, 221
diferenas divididas de Newton, 154 dos trapzios, 220
diferenas finitas, 189 mtodo de Romberg, 223
central, 192 ordem de preciso, 227
ordem mais alta, 200 regra de Simpson, 214, 215
progressiva, 191 regra do trapzio, 212
regressiva, 192 regras compostas, 220
regras de Newton-Cotes, 210
eliminao gaussiana, 83 integral, 208
equao interpolao, 149
logstica, 245 cbica segmentada, 161

315
316 Clculo Numrico

derivao, 205 jacobiana, 133


linear segmentada, 160 matriz
polinomial, 150 condicionamento, 104
iterao do ponto fixo, 38, 48 diagonal dominante, 120
convergncia, 56 jacobiana, 145, 146
estabilidade, 56 matriz de
taxa de convergncia, 53 iterao, 114
matriz de Vandermonde, 153
mtodo medida
da bisseo, 42 de erro, 19
da matrix tridiagonal, 97 de exatido, 19
de Euler, 242 mudana de base, 3
ordem de preciso, 248
de separao de variveis, 245 nmero de condicionamento, 107
trapezoidal, 253 norma
Mtodo da bisseo L , 105
taxa de convergncia, 45 Lp , 105
mtodo da bisseo, 38 norma de
mtodo da potncia, 123 matrizes, 106
mtodo das fraes parciais, 245 vetores, 105
mtodo das secantes, 38, 70
convergncia, 72 passo da malha, 274
mtodo de polinmio interpolador, 151
Gauss-Seidel, 112 polinmios
Jacobi, 110 de Lagrange, 156
Newton, 63 ponto fixo, 49
Newton-Raphson, 63 poro urea, 75
mtodo de diferenas finitas, 273 problema de
Mtodo de Jacobi ponto fixo, 49
matriz de iterao, 116 problema de valor de contorno, 273
vetor de iterao, 116 problema de valor inicial, 240
mtodo de Newton, 38 problema discreto, 274
para sistemas, 134 Problemas de valores de contorno, 273
mtodo de Newton-Raphson, 63 Python, 285
convergncia, 65 elementos da linguagem, 287
mtodo dos mnimos quadrados, 170 for, 293
mtodos iterativos funes, 295
sistemas lineares, 110 funes e constantes (math), 288
convergncia, 114 grficos, 296
malha uniforme, 274 if, 293
matrix instalao e execuo, 285

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com


NDICE REMISSIVO 317

matrizes (numpy), 289 tamanho da malha, 274


operaes matemticas, 288 teorema de
operadores lgicos, 289 Bolzano, 39
ramificao e repetio, 293 Teorema do
sobre, 285 ponto fixo, 52
usando, 286 teorema do
while, 294 ponto fixo, 64
teorema do valor intermedirio, 39
quadratura numrica tolerncia, 57
Gauss-Legendre, 232
vetor de
representao iterao, 115
de nmeros em mquina, 11
nmeros inteiros, 12
representao de nmeros, 3
inteiros
bit de sinal, 12
complemento de dois, 13
sem sinal, 12
resduo, 171

sequncia de
Fibonacci, 75
simulao
computacional, 1
numrica, 1
sistema de equaes
no lineares, 131
sistema de numerao, 3
sistema linear, 82
condicionamento, 104
sistema numrico
de ponto fixo, 14
de ponto flutuante, 15
notao normalizada, 8
sistemas
de equaes diferenciais, 267
spline, 161
fixado, 166
natural, 164
not-a-knot, 167
periodico, 168

Licena CC-BY-SA-3.0. Contato: livro_colaborativo@googlegroups.com

Vous aimerez peut-être aussi