C´
alculo Num´erico
Computacional
Dalcidio Moraes Claudio Jussara Maria Marins
Sum´
ario
1 Introdu¸c˜ao a Matem´atica Num´erica 5
1.1 Natureza e Objetivos da Matem´atica Num´erica . . . 5
1.2 Algoritmos . . . 6
1.3 Algoritmos Num´ericos . . . 6
2 Introdu¸c˜ao `a Aritm´etica de M´aquina 13 2.1 Sistema de Ponto Flutuante . . . 13
2.2 Arredondamentos . . . 19
2.3 Erros . . . 22
2.4 Digitos Significativos Exatos . . . 24
2.5 Precis˜ao e Exatid˜ao de M´aquinas Digital . . . 27
2.6 Instabilidade . . . 30
2.6.1 Instabilidade dos Algaritmos . . . 30
2.6.2 Instabilidade de problemas . . . 38
3 Resolu¸c˜ao de Sistemas de Equa¸c˜oes Lineares 41 3.1 Revis˜ao . . . 41
3.1.1 Coloca¸c˜ao do problema . . . 41
3.1.2 Defini¸c˜oes . . . 41
3.1.3 Aritm´etica Matricial . . . 46
3.2 Erros Computacionais no C´alculo Num´erico de SELAs . . . 47
3.2.1 Tipos de algoritmos usados no C´alculo Num´erico de SELAs . . . 47
3.2.2 Tipos de erros computacionais nos algoritmos . . . 48
3.3 Etapas de resolu¸c˜ao dos SELAs . . . 49
3.3.1 Etapa: Descomplexifica¸c˜ao dos SELAs . . . 49
3.3.2 Etapa: Os algoritmos calculadores de SELAs e suas estruturas . . . 51
3.4 M´etodo de Elimina¸c˜ao de Gauss . . . 52
3.4.1 Algoritmo b´asico de Gauss . . . 52
3.4.2 Etapa: Triangulariza¸c˜ao . . . 53
3.4.3 Etapa: Retrossubstitui¸c˜ao . . . 54
3.4.4 Instabilidade num´erica . . . 58
3.4.5 Algoritmo de Gauss com pivotamento . . . 60
3.4.6 Condicionamento de uma matriz . . . 63
3.4.7 Refinamento da solu¸c˜ao . . . 69
3.4.8 Equacionamento matricial . . . 76
3.4.9 M´etodos de Gauss-Jordam . . . 78
3.4.10 O refinador para Gauss-Jordam . . . 79
3.5 M´etodos Iterativos . . . 81
3.5.1 M´etodo de Jacobi . . . 81 3
3.5.2 M´etodos de Gauss-Seidel . . . 84
3.5.3 Os algoritmos preparados para o Gauss-Seidel/Jacobi . . . 86
3.5.4 Condi¸c˜oes de convergˆencia do m´etodo . . . 87
4 Equa¸c˜oes e Sistemas n˜ao Lineares 99 4.1 Introdu¸c˜ao . . . 99
4.2 Revis˜ao sobre Polinˆomios . . . 101
4.3 Enumera¸c˜ao das Ra´ızes . . . 104
4.3.1 Enumera¸c˜ao das ra´ızes de uma equa¸c˜ao polinomial . . . 104
4.3.2 Enumera¸c˜ao das ra´ızes complexas de uma equa¸c˜ao polinomial . . . 105
4.4 Localiza¸c˜ao das Ra´ızes . . . 107
4.4.1 Localiza¸c˜ao das ra´ızes reais de uma equa¸c˜ao polinomial . . . 107
4.4.2 Localiza¸c˜ao das ra´ızes complexas de uma equa¸c˜ao polinomial . . . 109
4.5 Separa¸c˜ao das ra´ızes de uma equa¸c˜ao polinomial ou transcendente . . . 111
4.6 Ordem de Covergˆencia . . . 114
4.7 M´etodos Iterativos para resolu¸c˜ao de equa¸c˜oes polinomiais ou transcendentes . . . 115
4.7.1 M´etodos de quebra . . . 117
4.7.2 M´etodos de Ponto Ffixo . . . 126
4.7.3 M´etodos de m´ultiplos passos . . . 137
4.8 Acelera¸c˜ao de Aitken . . . 143
4.9 Compara¸c˜ao dos m´etodos do ponto de vista computacional . . . 144
4.10 Resolu¸c˜ao de sistemas de equa¸c˜oes alg´ebricas ou transcedentes . . . 146
4.10.1 M´etodos de Newton . . . 147
4.10.2 M´etodos de Newton modificado . . . 150
4.11 Software para resolu¸c˜ao de equa¸c˜oes e sistemas de equa¸c˜oes n˜ao lineares . . . 150
.1 Introdu¸c˜ao . . . 157
.2 Formatos . . . 158
.3 Exemplos . . . 161
.4 Exemplos . . . 163
Cap´ıtulo 1
Introdu¸
c˜
ao a Matem´
atica Num´
erica
1.1 Natureza e Objetivos da Matem´atica Num´erica
O estudo da Matem´atica do ponto de vista computacional constitui a Matem´atica Computacional.
A Matem´atica Num´erica insere-se no contexto da Matem´atica Computa-cional, que pode ser visualizada pela figura 1.1.
Vir´a figura
Figura 1.1: A Matem´atica Computacional
N˜ao formalizaremos aqui a descri¸c˜ao de cada item da figura.
Por m´etodos construtivos entendemos todo o m´etodo que envolve ape-nas um sistema de opera¸c˜oes elementares dadas a priori, utilizadas em um n´umero finito de vezes e que “construir˜ao” todo o processo de c´alculo envolvido.
O sistema de opera¸c˜oes escolhido para a Matem´atica Num´erica ´e eviden-temente o conjunto b´asico de opera¸c˜oes aritm´eticas {+, −, ·, /}, e atrav´es delas ser˜ao definidas as demais opera¸c˜oes necess´arias. Tal escolha ´e devida `
a facilidade de implementa¸c˜ao, compreen¸c˜ao universal e possibilidade de expans˜oes que formam opera¸c˜oes mais complexas.
A Matem´atica Num´erica tem por objetivo estudar processos num´ericos (algoritmos) para a solu¸c˜ao de problemas, visando `a m´axima economia e confiabilidade em termos dos fatores envolvidos. Como estes algoritmos
ser˜ao implementados em computadores, os fatores envolvidos podem ser: tempo de execu¸c˜ao, mem´oria utilizada e erros de arredondamento.
1.2 Algoritmos
Para que possamos resolver um problema atrav´es de um computador ´e necess´ario ter toda a sequˆencia de passos e opera¸c˜oes estabelecida de modo formal para a resolu¸c˜ao do problema ou seja um algoritmo.
• Um conceito (e n˜ao defini¸c˜ao) de um algoritmo pode ser uma sequˆencia de instru¸c˜oes ordenadas de maneira a dar em seu decurso a solu¸c˜ao para um problema espec´ıfico.
• Tais instru¸c˜oes devem aparecer em um n´umero finito e serem exe-cut´aveis mecanicamente com uma quantidade limitada de esfor¸co. • Um algoritmo poder´a depender ou n˜ao de dados iniciais (entradas),
mas ter´a obrigat´oriamente de produzir pelo menos um resultado final (sa´ıda).
• Deve ter apenas um ponto de in´ıcio e pelo menos um ponto de parada.
1.3 Algoritmos Num´ericos
S˜ao os algoritmos voltados ao processamento num´erico, isto ´e, as ope-ra¸c˜oes aritm´eticas formam o cerne do algoritmo e seu objetivo ´e obter um ou mais resultados num´ericos. Um algoritmo num´erico de boa qualidade tem as seguintes caracter´ısticas:
1. Inexistˆencia do Erro L´ogico ou Matem´atico
Exemplo 1.3.1. Procura-se uma solu¸c˜ao x∗ da equa¸c˜ao ax = b.
1.3. ALGORITMOS NUM ´ERICOS 7 Algoritmo 1.3.1. 1. In´ıcio 2. Ler a, b; 3. x = b/a; 4. Imprimir x; O algoritmo correto ´e:
Algoritmo 1.3.2. 1. In´ıcio 2. Ler a, b;
3. Se a = 0 ent˜ao se b = 0 ent˜ao imprimir “Identidade”
4. sen˜ao imprimir “Contradi¸c˜ao”
5. sen˜ao x = b/a;
6. imprimir x;
Os erros l´ogicos ocorrem quando n˜ao s˜ao verificadas as diversas possibi-lidades entre as op¸c˜oes dos testes, principalmente quando s˜ao encadeados ou mesmo quando se faz mais testes do que o necess´ario. No ´ultimo algoritmo, por exemplo, n˜ao ´e mais necess´ario testar se b ´e nulo ou n˜ao, pois n˜ao importa este resultado e teremos a solu¸c˜ao correta. De fato isto faz parte da pr´opria defini¸c˜ao da equa¸c˜ao e n˜ao da L´ogica.
2. Inexistˆencia do Erro Operacional
Mesmo que n˜ao haja erro l´ogico ou de defini¸c˜ao, o algoritmo pode falhar por violar restri¸c˜oes f´ısicas da m´aquina e teremos erros que s˜ao detectados em tempo de execu¸c˜ao. O pr´oximo exemplo deixa isto mais claro.
Seja T o conjunto de n´umeros poss´ıveis de serem representados por uma m´aquina e que valha:
1. ∀x ∈ T, −x ∈ T
2. t1 = inf {x | x ∈ T ∧ x > 0} t2 = sup{x |∈ T ∧ x > 0}
Se temos valores y, tais que |y| < t1 (underflow) ou |y| > t2 (overflow),1
ocorrer´a um erro operacional. Algumas vezes tais erros n˜ao s˜ao indicados pelo sistemas operacional ou compilador em muitos computadores. Ocorre, ent˜ao que se obt´em um resultado mas que n˜ao possui confiabilidade.
Exemplo 1.3.2. Seja z = x + iy ∈ C, x, y ∈ R. Procuramos |z| = mz = px2 + y2.
Se num algoritmo implementamos diretamente a f´ormula acima, con-forme forem os valores de x ou y podemos ter overflow em x2 ou y2, embora valha
p
x2 + y2 < t 2
Este problema n˜ao ocorre se o algoritmo for o seguinte: Algoritmo 1.3.3.
1. In´ıcio 2. Ler x, y
3. Se x = y = 0 ent˜ao mz = 0
3.1 sen˜ao se |x| >= |y| ent˜ao mz = |x| ∗ q 1 + xy2 3.2 sen˜ao mz = |x| ∗ r 1 + x y 2 4. sa´ıda mz;
3. Quantidade finita de c´alculos
Exemplo 1.3.3. Determinar pelo m´etodo de Newton uma raiz da equa¸c˜ao: f (x) = signl(x) · p|x| = 0
onde signl(x) ´e a fun¸c˜ao sinal que ´e definida por:
sign(x) = 1 se x > 0 0 se x = 0 −1 caso contr´ario Um algoritmo problem´atico ´e dado por:
1.3. ALGORITMOS NUM ´ERICOS 9 Algoritmo 1.3.4. 1. entrada {x0, γ} 2. enquanto |f (xi)| > γ fa¸ca: 2.1 se f0(xi) 6= 0 ent˜ao xi+1 = xi − f (xi) f0(xi) 3. sa´ıda {i, xi} 4. p´are.
Na realidade, tal algoritmo n˜ao ir´a parar, al´em de estar incompleto, pois para diferentes valores de x0 6= 0 e de γ o m´etodo de Newton alterna
seus valores entre x0 e x1 = −x0, embora tenhamos f0(x) 6= 0 para cada
x ∈ (0, ∞).
Para corrigir tal problema precisamos estabelecer um n´umero m´aximo de itera¸c˜oes a serem executadas pelo algoritmo. Por exemplo, o comando 1 e 2 pode mudar para:
1. entrada {x0, γ, M AX}
2. enquanto |f (xi)| > γ e i < M AX fa¸ca.
Com esta fun¸c˜ao e a corre¸c˜ao proposta n˜ao atingiremos a solu¸c˜ao correta embora tenhamos evitado um loop no comando 2. Outro modo de resolver o problema ´e utilizar o m´etodo de Newton Intervalar que ser´a visto no cap´ıtulo 10.
4. Existˆencia de um crit´erio de exatid˜ao
Na Matem´atica Intervalar todos os m´etodos apresentam tal caracter´ıs-tica, uma vez que os resultados s˜ao sempre um intervalo que cont´em a solu¸c˜ao exata e da´ı temos implicitamente o limite para o erro.
Normalmente os limites de rros s˜ao emp´ıricos e pouco confi´aveis. 5. Independˆencia da M´aquina
Nos algoritmos num´ericos n˜ao deve haver dados dependentes da m´aquina. 6. Com precis˜ao infinita, os limites de erro devem convergir a zero
Exemplo 1.3.4. Dado a ∈ R, queremos determinar x = sin(a). Um algoritmo ingˆenuo, que explora o fato de que sin(x) varia sempre entre −1 e +1, onde o sinal ± pode ser determinado aleat´oriamente, ´e dado por: Algoritmo 1.3.5.
1. Entrada:{a} 2. x = 0 ± 1; 3. Sa´ıda:{a, x}
Este algoritmo errado satisfaz as exigˆencias de 1 a 5: n˜ao h´a erro l´ogico nem operacional, o algoritmo ´e finito, os dados n˜ao dependem de m´aquina, temos que o resultado dentro dos limites de erro; contudo para preencher o crit´erio 6 deve haver um crit´erio de truncamento apropriado. Se ele ´e satisfeito, temos o que se chama de “convergˆencia num´erica”. Para calcular a fun¸c˜ao seno ou mesmo outras fun¸c˜oes trigonom´etricas ou transcendentes devemos usar a S´erie de Taylor que ser´a exemplificada para a fun¸c˜ao expo-nencial na se¸c˜ao de Instabilidade.
7. Eficiˆencia
Quando se deseja encontrar a solu¸c˜ao para um problema, sempre visamos obter economia de recursos envolvidos.
Sobre ele formulamos condi¸c˜oes de rapidez, alta exatid˜ao, trabalhar com poucos dados de referˆencias, ocupar menor espa¸co de mem´oria, ser facil-mente represent´avel etc.
A eficiˆencia como caracter´ıstica de um bom algoritmo ´e bem diferente das caracter´ısitcas 1 e 2 que dizem respeito a efic´acia. Explicando melhor, efic´acia ´e a qualidade de produzir um resposta de forma correta para o problema dado, enquanto a eficiˆencia, al´em de intuir a id´eia anterior, exige que o processo seja econˆomico nos termos citados.
Exemplo 1.3.5. Fazer contas com os dedos da m˜ao. • ´E ineficaz para c´alculos n˜ao aritm´eticos.
1.3. ALGORITMOS NUM ´ERICOS 11
• ´E eficiente para certos c´alculos aritm´eticos triviais.
Exemplo 1.3.6. Algoritmo de Cramer para solu¸c˜ao de sistemas de Equa¸c˜oes Lineares.
De forma geral, dado o sistema n × n: a11 a12 a13 . . . a1n a21 a22 a23 . . . a2n a31 a32 a33 . . . a3n ... ... ... ... ... an1 an2 . . . an3 ann · x1 x2 x3 ... xn = y1 y2 y3 ... yn (1.1)
Calcula-se o determinante ∆ da matriz dos coeficientes e mais os n de-terminantes ∆xi resultantes da substitui¸c˜ao da coluna i da matriz dos
coeficientes pelo vetor dos termos independentes. Assim, pelo teorema de Cramer a solu¸c˜ao (x1, x2, ..., xn) ´e dada por:
xi =
∆xi ∆
Tal algoritmo envolve no m´ınimo (n + 1)!(n − 1) opera¸c˜oes aritm´eticas. Levando em conta. o tempo para cada opera¸c˜ao (Adi¸c˜oes e Subtra¸c˜oes: 40µs e Multiplica¸c˜oes: 400µs), temos o seguinte quadro:
n = 5 n = 10 n = 20
Cramer (∆ pela defini¸c˜ao) 2,5 s 3,4 dias 20 bilh˜oes de anos Cramer (∆ por Laplace) 0,4 s 6 min 5 meses
Cap´ıtulo 2
Introdu¸
c˜
ao `
a Aritm´
etica de M´
aquina
2.1 Sistema de Ponto Flutuante
• Introdu¸c˜ao
Os n´umeros inteiros possuem representa¸c˜ao computacional exata, den-tro da regi˜ao de representabilidade.
– Existem v´arios c´odigos mas o mais comum ´e o complemento de dois – Dentro da regi˜ao de representabilidade, a aritm´etica ´e exata.
• Os n´umeros reais, em geral, n˜ao tem representa¸c˜ao exata e s˜ao aproxi-mados. Exemplo 2.1.1. H = 1/2 X = 2/3 − H Y = 3/5 − H E = (X + X + X) − H F = (Y + Y + Y + Y + Y ) − H G = F/E Alguns resultados: 13
HP 48G SR 50 PC 1 H = 0.5 H = 0.5 H = 0.5 X = 0.166666666667 X = 0.1666666667 X = 0.166667 Y = 0.1 Y = 0.1 Y = 0.1 E = 0.000000000001 E = 2.0E(−13) E = 0 F = 0 F = 0 F = 0 G = FE → 0 G = FE →?! G = 0.5
A express˜ao ?! indica uma opera¸c˜ao inv´alida.
Resultados de G em float ´e 0.5 e para double fica em 1.0.
Defini¸c˜ao 2.1.1. Um n´umero real x ∈ R ´e dito um n´umero de ponto flutuante normalizado se valerem:
1. x = mbe
2. m = ± · d1d2d3...dn, n ∈ N
3. 1 ≤ d1 ≤ b − 1, 0 ≤ di ≤ b − 1, i = 2(1)n 4. e1 ≤ e ≤ e2 sendo e1 ≤ 0, e2 ≥ 1, e1, e2 ∈ Z
onde:
b ´e chamado base, b ≥ 2.
e ´e chamado expoente, e1 ´e o menor e e2 ´e o maior expoente.
m ´e chamado mantissa.
n ´e o n´umero m´aximo de d´ıgitos usados na representa¸c˜ao do n´umero. di, i = 1(1)n, s˜ao os d´ıgitos da mantissa.
4
Defini¸c˜ao 2.1.2. A uni˜ao de todos os n´umeros de ponto flutuante com o zero, que ´e representado na seguinte forma:
0 = 0.000...0 | {z }
n vezes
·be1
2.1. SISTEMA DE PONTO FLUTUANTE 15
Usualmente, procuramos representar um sistema de ponto flutuante por F = F (b, n, e1, e2)
onde e1 e e2 s˜ao respectivamente o menor e o maior expoente, b ´e a base e
n ´e a precis˜ao.
4
Exemplo 2.1.2. Sistema de Ponto flutuante da: a) HP 25 : F (10, 9, −98, 100)
b) Texas SR50 : F (10, 10, −98, 100) c) Texas SR52 : F (10, 12, −98, 100) d) HP 48G : F (10, 12, −500, 499)
Vamos indicar por L e M, respectivamente, o menor e o maior n´umero positivo de F . L = 0.1 · be1 ou ainda L = (0. 1000 . . . 0 | {z } n casas )b = b−1 M = 0.[b − 1][b − 1][b − 1] . . . [b − 1] · be2 = (1 − b−n)
Vejamos algumas propriedades dos n´umeros de ponto flutuante. Seja F um sistema de um ponto flutuante da por F = F (b, n, e1, e2), ent˜ao:
#F = 2 · (b − 1) · bn−1 · (e2 − e1 + 1) + 1 (2.1)
Para qualquer mantissa m vale:
b−1 ≤ |m| < 1 (2.2)
|m| < 1, pois toda mantissa tem como primeiro d´ıgito (antes do ponto) o zero.
|m| ≥ b−1, pois se |m| < b−1, n˜ao ter´ıamos um n´umero normalizado, pois o primeiro d´ıgito ap´os o ponto ´e n˜ao nulo.
Vir´a figura
Figura 2.1: O Sistema F = F (2, 3, −1, 2).
(∀x ∈ F )[−x ∈ F ] (2.3)
Exemplo 2.1.3. Seja F = F (2, 3, −1, 2).
Como a base ´e 2, os d´ıgitos s˜ao 0 e 1, logo, todas as mantissas s˜ao: 0.100 0.101 0.110 0.111
e os expoentes poss´ıveis s˜ao -1, 0, 1 e 2.
Assim temos os seguintes n´umeros positivos:
(0.100x2−1) = (0.01)2 = 0.20 + 0.2−1 + 1.2−2 = 1/4 (0.100x20) = (0.1)2 = 0.20 + 0.2−1 = 1/2 (0.100x21) = (1.0)2 = 1.20 + 0.2−1 = 1 (0.100x22) = (10.0)2 = 1.21 + 0.20 + 0.2−1 = 2 (0.101x2−1) = (0.0101)2 = 0.20 + 0.2−1 + 1.2−2 + 0.2−3 + 1.2−4 = 5/16 (0.101x20) = (0.101)2 = 0.20 + 1.2−1 + 0.2−2 + 1.2−3 = 5/8
E assim, sucessivamente, teremos a seguinte tabela:
e bem 0.100 0.101 0.110 0.111
-1 1/2 1/4 5/16 3/8 7/16
0 1 1/2 5/8 3/4 7/8
1 2 1 5/4 3/2 7/4
2 4 2 5/2 3 7/2
2.1. SISTEMA DE PONTO FLUTUANTE 17
• Os n´umeros do ponto flutuante de F n˜ao est˜ao uniformemente dis-tribu´ıdos no intervalo [−7/2, 7/2];
• Mas 1/4, 5/16, 3/8, 7/16 est˜ao igualmente espa¸cados.
• Logo, entre potˆencias sucessivas da base existe uma quantidade cons-tante de n´umeros de ponto flutuante, dada por:
c = bn−1.(b − 1) (2.4)
• A Regi˜ao de Underflow est´a em torno do zero
• A regi˜ao de Overflow est´a acima e abaixo da regi˜ao de representa¸c˜ao. Exemplo 2.1.4. Seja F = F (3, 2, −1, 2).
1. #F = 2.(3 − 1).32−1.(2 − (−1) + 1) + 1 = 49
2. As mantissas e os n´umeros de ponto flutuante positivos est˜ao na seguinte tabela: e bem 0.10 0.11 0.12 0.20 0.21 0.22 -1 1/3 1/9 4/27 5/27 2/9 7/27 8/27 0 1 1/3 4/9 5/9 2/3 7/9 8/9 1 3 1 4/3 5/3 2 7/3 8/3 2 9 3 4 5 6 7 8 3. Regi˜ao de Underflow : (−1/9, 0) ∪ (0, 1/9) Regi˜ao de Overflow : (−∞, −8) ∪ (8, ∞) Caracter´ısticas b´asicas das opera¸c˜oes em F
As leis que valem para a aritm´etica em R n˜ao valem para F.
Exemplo 2.1.5. Seja F o mesmo sistema do exemplo 2.1.3: F = F (2, 3, −1, 2). Tomemos em F :
x = 5
4 e y = 3 8
x + y = 5 4 + 3 8 = 13 8
No entanto, 138 ∈ F , pois/ 138 = (1.625)10 = (0.1101 · 21)2 que possui
um d´ıgito a mais na mantissa do que o permitido. Na realidade, podemos escolher entre
3/2 = (1.5)10 = (0.110)2 ou
7/4 = (1.75)10 = (0.111)2
para um resultado aproximado.
x ⊕ y 6= x + y
x y 6= x · y
Tais fenˆomenos n˜ao ocorrem apenas em alguns sistemas de ponto flu-tuante restritos, conforme os vistos nos exemplos. Consideremos F = F (2, 5, −98, 100). Neste caso, temos:
(0.1)10 = (0.0001100110011...)2
ou arredondando em F para:
(0.1)10 = (0.11001 · 2−3)2
Somando (0.11001 · 2−3) sucessivamente dez vezes, teremos: (0.11111)2 = (0.96875)10 6= (1.0)10 Exemplo 2.1.6. Seja F = F (2, 3, −1, 2). Se x = 58, y = 38 e z = 34, ent˜ao: (x ⊕ y) ⊕ z = (0.101 · 20 ⊕ 0.110 · 2−1) ⊕ 0.110 · 20 = (0.101 ⊕ 0.011) ⊕ 0.110 = 1.000 ⊕ 0.110 = 1.11 x ⊕ (y ⊕ z) = 0.101 ⊕ (0.011 ⊕ 0.110) = 0.101 ⊕ 1.001 = 0.101 ⊕ 1.00 6 1 = 1.00 0.101 ⊕ 1.00 = 1.10 6 1 = 1.10
2.2. ARREDONDAMENTOS 19
Logo:
(x ⊕ y) ⊕ z 6= x ⊕ (y ⊕ z) Se x = 78, y = 54 e z = 38
Tamb´em temos que:
x (y ⊕ z) = 0.111 (1.01 ⊕ 0.011) = 0.111 1.001 = 1.0101 = 1.01 x y ⊕ x z = (0.111 1.01) ⊕ (0.111 0.011) = 1.00011 ⊕ 0.10101 = 1.101 = 1.10 Logo: x (y ⊕ z) 6= (x y) ⊕ (x z) 2.2 Arredondamentos
Defini¸c˜ao 2.2.1. Seja F = F (b, n, e1, e2) um sistema de ponto flutuante. Uma fun¸c˜ao : R → F ´e considerada um arredondamento se valer:
(∀x ∈ F )[x = x] (2.5)
4 Como arredondar?
Tipos de arredondamentos Os mais conhecidos s˜ao:
• Arredondamento para cima ou por excesso (4x) • Arredondamento para baixo ou por falta (∇x)
• Arredondamento para o n´umero de m´aquina mais pr´oximo ( x) Exemplo 2.2.1. Seja F = F (2, 3, −1, 2).
9
8 = (1.125)10 = (0.1001 · 2 1)
2 .
Podemos arredondar de duas maneiras: 9 8 → (0.100 · 2 1) = (1.0) 10 9 8 → (0.101 · 2 1) = 5 4
No primeiro caso temos: ∇(9 8) = (0.100 · 2 1) 4(9 8) = (0.101 · 2 1)
Exemplo 2.2.2. Na base 10 podemos citar casos mais ilustrativos. Seja F = F (10, 4, −98, 10) e sejam:
x = 0.333333
y = 0.348436
z = 0.666666... Temos ent˜ao:
∇x = 0.3333 , ∇y = 0.3484 e ∇z = 0.6666 4x = 0.3334 , 4y = 0.3485 4z = 0.6667 x = 0.3333 , y = 0.3484 z = 0.6667 se w = 0.12345, ent˜ao:
2.2. ARREDONDAMENTOS 21 Vir´a figura Figura 2.2: Arredondamentos ∇w = 0.1234 4w = 0.1235 w = 0.1235
Podemos representar os trˆes tipos de arredondamento na Figura 2.2 Vamos deixar mais claros os conceitos anteriores.
Defini¸c˜ao 2.2.2. Um arredondamento : R → F ´e dito por falta, ou por excesso se valerem, repectivamente:
(∀x ∈ R)[x ≤ x] (2.6)
(∀x ∈ R)[x ≤ x] (2.7)
Se, al´em disso, valer:
(∀x, y ∈ R)[x ≤ y → x ≤ y] (2.8)
que ´e tamb´em chamada propriedade monotˆonica, ent˜ao definimos: ∇x = arredondamento monotˆonico por falta.
4x = arredondamento monotˆonico por excesso. 4
Se F = F (b, n, e1, e2) tem para a base b um n´umero par, ent˜ao o arredondamento para o n´umero de m´aquina (ou ponto flutuante) mais pr´oximo ´e notado por x e definido como:
∀x ∈ [0, be1−1), x = 0 ∀x ∈ [be1, M], x = ∇x, para x ∈ h∇x, ∇x+4x2 x = 4x, para x ∈ h∇x+4x2 , 4xi (2.9) Se x < 0, x = − (−x)
A regi˜ao (−be1−1, 0)∪(0, be1−1) ´e chamada de Regi˜ao de Underflow pois
nestes intervalos n˜ao h´a representa¸c˜ao adequada em F , e o erro relativo ´e grande.
A regi˜ao [−M, −be1] ∪ [be1, M] ´e chamada Regi˜ao de
Representabili-dade de F pois nesta regi˜ao o erro relativo ´e limitado.
A regi˜ao de (−∞, −M) cup(M, ∞) ´e chamada de Regi˜ao de Overflow e novamente nesta zona o erro relativo n˜ao ´e limitado.
Toda vez que executamos o arredondamento de um n´umero que n˜ao admite uma representa¸c˜ao exata em F fazemos um erro.
Mais detalhes podem ser vistos na Norma IEEE 754 - Standart for Binary Floating-Point Arithmetic, que foi adotado como padr˜ao a partir da d´ecada de 1980.
2.3 Erros
Existem v´arios tipos de erros e v´arias s˜ao as suas causas. Vamos es-tudar trˆes tipos de erros: os inerentes, os de discretiza¸c˜ao e os de arredondamento.
• Erros Inerentes
Aparecem na cria¸c˜ao ou simplifica¸c˜ao de um modelo matem´atico de determinado sistema, ou ainda nas medidas, em geral. Os valores de medidas como tempo, temperatura, distˆancia, intensidade luminosa etc. s˜ao obtidos de instrumentos que tˆem precis˜ao limitada.
2.3. ERROS 23
• Os erros de Discretiza¸c˜ao
Ou de Aproxima¸c˜ao, ou Truncamento s˜ao os erros cometidos quando se substitui qualquer processo infinito por um processo finito ou dis-creto. Seja, por exemplo, o c´alculo da constante de Euler e que ´e dada por: e = ∞ X i=0 1 i!
• Os erros de Arredondamento surgem quando trabalhamos com m´aquinas digitais para representar os n´umeros reais.
Em geral, trabalhamos com arredondamento para o n´umero de ponto flutuante mais pr´oximo ou com o arredondamento por falta.
A diferen¸ca entre o valor arredondado e o valor exato pode ser medida pelo erro absoluto ou pelo erro relativo.
Defini¸c˜ao 2.3.1. O erro absoluto, que ´e indicado por EA, ´e dado por:
EA = |x − x| (2.10)
4
Defini¸c˜ao 2.3.2. O erro relativo, que ´e indicado por ER, ´e dado por:
ER = |x − x| |x| ou ER = |x − x| |x| (2.11) 4 Exemplo 2.3.1. Se x = 0.00006 e se x = 0.00005 EA = 0.00001 ER = 0.00001 0.00005 = 0.2 ou 20%
Neste caso podemos at´e dizer que EA ´e pequeno; no entanto, n˜ao h´a
Vir´a figura
Figura 2.3: Erro Relativo = |x−x||x| em F = F (2, 3, −1, 2)
Teorema 2.3.1. Seja F = F (b, n, e1, e2) um sistema de ponto flutuante e um arredondamento, ent˜ao vale:
(∀x ∈ R) be1−1 ≤ |x| ≤ M → |x − x| |x| ≤ µ onde: µ = 1 2b 1−n no caso de x = x bn−1 no caso de x = ∇x (2.12) ◦
Exemplo 2.3.2. Nas calculadoras Hewllet Packard 48G, temos: = e para b = 10 e n = 12
µ = 1 210
−12
= 0.000 000 000 005
Observa-se que na regi˜ao de underflow o erro ´e sempre igual a 1. Para diminuir este erro ´e preciso que aumentemos o n´umero de casas na mantissa. Isto cusar´a maior densidade de n´umeros represent´aveis em F .
2.4 Digitos Significativos Exatos • Na pr´atica, n˜ao sabemos o valor exato.
2.4. DIGITOS SIGNIFICATIVOS EXATOS 25
• Precisamos, no entanto, avaliar o resultado, ou seja, saber qu˜ao exato ´e o resultado. revisemos o conceito de d´ıgito significante ou significativo. Defini¸c˜ao 2.4.1. Num sistema decimal, um d´ıgito ´e significante se qual-quer dos d´ıgitos for 1, 2, 3, 4, 5, 6, 7, 8 ou 9. O d´ıgito 0 (zero) ´e significante, exceto quando for usado para fixar a v´ırgula ou ponto decimal ou preencher o lugar de d´ıgitos descartados.
4
Exemplo 2.4.1. Em 0.008735 temos quatro d´ıgitos significantes ou sig-nificativos, a saber, o 8, o 7, o 3 e o 5. Em 30.457 temos cinco d´ıgitos significantes, ou seja, todos eles. Em 23.000 temos s´o dois d´ıgitos significa-tivos. 2
Defini¸c˜ao 2.4.2. Um d´ıgito significativo ´e exato se, aredondando-se o n´umero aproximado para uma posi¸c˜ao imediatamente ap´os aquela posi¸c˜ao do d´ıgito, isso fizer com que o erro absoluto n˜ao seja maior do que a meia unidade naquela posi¸c˜ao do d´ıgito. Abraviaremos D´ıgito Signifcativo Exato por Digse.
4
Exemplo 2.4.2. Os n´umeros 0.66667 e 0.666998 s˜ao aproxima¸c˜oes para 2/3; no entanto, todos os d´ıgitos significativos do primeiro s˜ao exatos, en-quanto no segundo, s´o os trˆes primeiros.
Vejamos com mais detalhes:
1. 0.66667 No primeiro d´ıgito 6 ficamos com o n´umero 0.66 e o erro ab-soluto em rela¸c˜ao a 2/3 ´e:
|0.66 − 0.666 . . . | = 0.006 66 . . . < 0.05
No segundo d´ıgito 6, temos:
|0.666 − 0.666 . . . | = 0.000 666 . . . < 0.005
No terceiro d´ıgito 6, temos:
|0.666 6 − 0.666 . . . | = 0.000 066 6 . . . < 0.000 5
No quarto d´ıgito 6, temos:
|0.666 67 − 0.666 . . . | = 0.000 003 333 . . . < 0.000 05
No d´ıgito 7, temos:
|0.666 670 − 0.666 . . . | = 0.000 003 333 . . . < 0.000 005
Logo todos os d´ıgito significativos s˜ao exatos 2. 0.666 998 Para o primeiro d´ıgito 6, temos:
|0.66 − 0.666 . . . | = 0.006 666 . . . < 0.05
No segundo d´ıgito 6, temos:
|0.666 − 0.666 . . . | = 0.000 6 . . . < 0.005
No terceiro d´ıgito 6, temos:
|0.6669 − 0.666 . . . | = 0.000 233 . . . < 0.000 5
Para o primeiro d´ıgito 9, temos:
|0.66699 − 0.666 . . . | = 0.000 323 . . . ≮ 0.000 05
Logo o d´ıgito 9 j´a n˜ao ´e exato.
Teorema 2.4.1. Se ER ≤ 12b−m, ent˜ao o n´umero ´e correto em m d´ıgitos significativos exatos. A demonstra¸c˜ao pode ser vista em [3].
Utilizando este teorema, vejamos a maneira mais pr´atica que a defini¸c˜ao para calcular o n´umero de d´ıgitos significativos corretos. Tomemos o loga-r´ıtmo decimal da desigualdade: ER ≤ 12b−m e b = 10.
|x−x| |x| ≤ 1 210 −m → log|x−x| |x| ≤ log 12 − m → m ≤ log 12 − log|x−x||x| (2.13)
2.5. PRECIS ˜AO E EXATID ˜AO DE M ´AQUINAS DIGITAL 27
◦
Logo, para achar o maior n´umero de d´ıgitos significativos exatos temos:
m = − − log 1 2 + log |x − x| |x| (2.14) Se ocorrer que x = x, ent˜ao podemos aplicar a f´ormula anterior do seguinte modo: m = − − log 1 2 + log µ + |x − x| |x| (2.15) Logo, se ER ≤ 12b−m para b = 10, podemos dizer que:
m = − 0.3 + log µ + |x − x| |x| (2.16) onde µ ´e a unidade de erro de arredondamento.
Genericamente podemos calcular o n´umero de d´ıgitos significativos exa-tos pelo logaritmo decimal do ER.
Quando n˜ao temos o valor exato para fazermos as compara¸c˜oes, o que ocorre em geral, temos que: se x = limi→∞xi, ent˜ao podemos modificar a f´ormula anterior para:
Digse(xi, xi+1) = − 0.3 + log µ + |xi+1 − xi| |xi| (2.17) O que nos d´a o n´umero de d´ıgitos significativos exatos de xi+1 em rela¸c˜ao
xi
2.5 Precis˜ao e Exatid˜ao de M´aquinas Digital
Conforme vimos para cada m´aquina, calculadora ou computador h´a um sistema de ponto flutuante associado. Este sistema automaticamente define a precis˜ao da m´aquina.
Defini¸c˜ao 2.5.1. A precis˜ao de uma m´aquina digital ´e definida como o n´umero de d´ıgitos da mantissa dessa m´aquina.
Vir´a figura
Figura 2.4: Aproxima¸c˜oes para π
Portanto, a precis˜ao ´e algo claro, n˜ao vari´avel para uma m´aquina. J´a a defini¸c˜ao seguinte n˜ao nos d´a as mesmas caracter´ısticas.
4
Defini¸c˜ao 2.5.2. Exatid˜ao ´e uma medida de perfei¸c˜ao do resultado. A exatid˜ao da um resultado depende da precis˜ao da m´aquina e do m´etodo utilizado para obten¸c˜ao desse resultado.
4
Exemplo 2.5.1. Vejamos v´arias aproxima¸c˜oes para o n´umero π, na figura 2.4 e a seguir o c´alculo dos d´ıgitos significativos exatos das aproxima¸c˜oes, na pr´oxima tabela.
Aproxima¸c˜ao xi Digse (xi, π) Aproxima¸c˜ao xi Digse (xi, π)
3.410 3.4 3.415 4.2
3.411 3.5 3.416 5.3
3.412 3.6 3.417 4.2
3.413 3.7 3.418 3.7
3.414 3.9 3.419 3.6
Embora todas as aproxima¸c˜oes possuam um precis˜ao de cinco casas decimais, somente uma delas possui os cinco d´ıgitos significantes exatos, levando em conta o valor de π = 3.14159265359 o que confere com o valor arredondado para o n´umero de m´aquina mais pr´oximo, com 5 casas deci-mais.
Logo, a exatid˜ao de um processo depende, al´em da m´aquina, tamb´em do algortimo. Para termos uma id´eia da capacidade num´erica de uma
2.5. PRECIS ˜AO E EXATID ˜AO DE M ´AQUINAS DIGITAL 29
m´aquina, devemos conhecer, al´em da sua precis˜ao que, em geral, ´e dada em termos de d´ıgitos bin´arios, octais ou hexadecimais, conforme for a base de funcionamento de F , qual ´e a sua precis˜ao decimal. No caso de termos F = F (16, 6, −64, 63) a precis˜ao hexadecimal ´e 6, mas a precis˜ao p10 decimal correspondete ´e:
166 = 10p10 → 6 log
1016 = p1log1010 → p1 = 6 ∗ 1.204 = 7.224 (2.18)
Da´ı, a precis˜ao decimal de F ´e de 7.224,e 22.4% das vezes temos 8 casas decimais. Contudo, nem todo n´umero que tenha uma representa¸c˜ao exata com sete casas ou menos ser´a exatamente representado internamente. Por exemplo, 0.1 n˜ao admite representa¸c˜ao exata na base 2.
Al´em da precis˜ao decimal, o c´alculo do chamado ´Epsilon da M´aquina nos d´a uma id´eia da exatid˜ao da m´aquina.
O ε da m´aquina ´e o n´umero de ponto flutuante, tal que: 1 + ε > 1
Alguns m´etodos para o c´alculo de ε n˜ao d˜ao seu valor exato, mas isto nem sempre ´e necess´ario, pois o que importa ´e a sua oredem de grandeza.
O programa Pascal seguinte calcula uma aproxima¸c˜ao de ε da m´aquina: PROGRAM EPSMAQ (OUT PUT);
VAR EPSILON, EPS : REAL; BEGIN
EPS: = 1;
REPEAT EPSILON: = EPS; EPS: = 0.5 * EPS UNTIL EPS + 1 = 1;
WRITELN(’EPSILON DA M´AQUINA = ’:30, EPSILON : 30); END.
O resultado ´e ε ∼= 0.7105427357601 · 10−14
1. 1.4142 ´e mais preciso e mais exato que 1.41, pois o primeiro tem maior n´umero de casas e aproxima melhor √2.
2. 1.4149 ´e mais preciso que 1.414, pois tem mais casas decimais, por´em ´e menos exato do que 1.414, pois o d´ıgito 9 do primeiro n˜ao ´e exato.
2.6 Instabilidade
Veremos agora uma s´erie de problemas cujos diferentes modos de solu¸c˜ao podem acarretar diferentes resultados. ´E claro que para muitos problemas n˜ao importa qual a solu¸c˜ao utilizada que teremos sempre o mesmo e bom resultado. Quando n˜ao temos um bom resultado, os erros podem ser cau-sados pelos modelos ou entrada de dados (inerentes), pelo truncamento e pelo arredondamento conforme j´a citamos anteriormente. N˜ao trataremos aqui dos erros inerentes. Na realidade, podemos ver os problemas do ponto de vista da instabilidade. Esta instabilidade pode ser entendida como uma “sensibilidade a perturba¸c˜oes” e pode ocorrer tanto no problema em si como
no algoritmo, isto ´e, na maneira de resolvˆe-lo.
2.6.1 Instabilidade dos Algaritmos
Comecemos com dois exemplos que s˜ao citados em [2].
Exemplo 2.6.1. Calcular e e e−5.5 pela expans˜ao na s´erie de Taylor. Dado que: ex = 1 + x + x 2 2 + x3 3! + x4 4! + . . . Ent˜ao para x = 1 temos:
e ∼= 1 + 1 + 0.5 + 0.16667 + 4.1667E − 2 + 8.3333E − 3+ +1.3889E − 3 + 19841E − 4 + 2.4801E − 5+
+2.7557E − 6 = 2.7183
(2.19)
Comparando a soma anterior com a valor 2.718281828, temos um erro relativo de 6.6E − 6, que ´e bem pequeno.
2.6. INSTABILIDADE 31 Para x = −5.5 temos: e−5.5 ∼= 1 − 5.5 + 15.125 − 27.730 − 27.730 + 38.129− 41.942 + 38.446 − 30.208 + 20.768 − 12.692+ 6.9803 − 3.4902 + 1.5997 − . . . = 0.0026363 (2.20)
Comparando agora com e−5.5 dado por uma calculadora, temos que: e5.5 = 0.004 086 771 439
E o erro relativo ´e de 0.35 que ´e bem maior que o erro anterior. Qual a causa da diferen¸ca?
Observando os termos da soma do segundo caso, vemos que h´a uma combina¸c˜ao de dois fatores:
• somas de grandezas de diferentes ordens; • subtra¸c˜ao e grandezas quase iguais.
Este fenˆomeno ´e chamado de cancelamento subtrativo ou con-celamento catastr´ofico, que ´e bastante comum em c´alculos. se n˜ao houv´essemos arredondado cada parcela, o erro seria sensivelmente menor.
• Temos s´o esta causa?
O cancelamento subtrativo n˜ao ´e a real causa do erro final da soma; • Como melhorar?
Se mudamos o c´alculo de e−5.5 para 1/e−5.5 e utilizarmos as mesmas parcelas, teremos 0.0040865 e o erro relativo ´e 6.6E − 5.
• Logo, podemos utilizar a s´erie de taylor para argumentos positivos. Exemplo 2.6.2. Calcular In = R01xnex−1dx para n = 1, 2 . . .
Solu¸c˜ao: integrando por partes:
Z 1 0 xn |{z} u ex−1dx | {z } dv = xnex−110− Z 1 0 n xn−1ex−1dx = 1−nIn−1, n = 2, 3, . . . (2.21)
Ou seja: In = Z 1 0 xnex−1dx = 1 − n In−1 onde: I1 = Z 1 0 xex−1dx = 1 e
Usando F = F (10, 6, −98, 99), temos os seguintes valores: I1 ∼= 0.367879 I6 ∼= 0.127120
I2 ∼= 0.264242 I7 ∼= 0.110160
I3 ∼= 0.207274 I8 ∼= 0.118720
I4 ∼= 0.170904 I9 ∼= -0.068480
I5 ∼= 0.145480
Olhando o integrando I9 = R x9ex−1, verificamos que ´e sempre positivo
em [0, 1] e, no entanto, o valor computado foi Negativo. O que causou tal erro?
Notemos que s´o foi feito um erro de arredondamento em I1quando 1/e foi tomado por 0.367879 em vez de 0.3678794412. Como a f´ormula est´a correta, o erro final ´e devido apenas a este erro feito em I1. Observemos como tal
ocorreu: em I2 o erro foi multiplicado por −2, depois em I3 foi multiplicado
por −3,1 etc. Ent˜ao, o erro de I9 ´e exatamente (−2)(−3) . . . (−9) = 9!
Sendo:
E1 = [1/e − 0.367879] = 4.412 · 10−7 (2.22) Temos no final:
4.412 · 10−7 · 9! ∼= 0.1601 Na realidade, o valor correto de I9 ´e:
I9 = −0.06848 + 0.1601 = 0.00916
que ´e uma valor razo´avel para I9. Logo, embora a f´ormula 2.21 esteja
2.6. INSTABILIDADE 33
gerado ´e de m´a exatid˜ao. Um algoritmo est´avel ´e dado pela f´ormula equiv-alente:
In−1 = 1 − 1n
n n = . . . , 4, 3, 2 (2.23) Nesta f´ormula, a cada passo, o valor do erro em In ´e decrescido por n1, (em vez de multiplicado por n). Se n´os come¸camos por n 1, voltaremos e ent˜ao o erro inicial ou erros de arredondamento diminuir˜ao a cada passo. Resta-nos saber qual ser´a o valor final para In. Observemos que:
In = Z xnex−1dx ≤ Z 1 o xndx = x n+1 n + 1 1 0 = 1 n + 1 (2.24)
Portanto, In tende a zero quando n tende ao infinito. se aproximadamamos I20 para zero e o usamos como valor inicial, temos:
I20 ∼= 0 I14 ∼= 0.0627322 I19 ∼= 0.0500000 I13 ∼= 0.0669477 I18 ∼= 0.0500000 I12 ∼= 0.0717733 I17 ∼= 0.0527778 I11 ∼= 0.0773523 I16 ∼= 0.0557190 I10 ∼= 0.0838771 I15 ∼= 0.0590176 I9 ∼= 0.0916123
Majorando o erro em I20 por 211 , temos: para E19 = 1 20 · 1 21 ∼ = 0.0024 para E18 = 1 19 · 1 20 · 1 21
Em E15 temos 4 · 10−8, o que mostra que o erro inicial est´a praticamente
dilu´ıdo. Continuando o algoritmo dado por 2.23, temos: I8 = 0.1009320 I4 = 0.1708934
I7 = 0.1123835 I3 = 0.2072767
I6 = 0.1268024 I2 = 0.2642411
Exemplo 2.6.3. Calcular a m´edia aritm´etica de dois n´umeros a e b. Algoritmo 1: 1. entrada {a, b} 2. s ← a + b 3. m ← s/2 4. sa´ıda {m} Algoritmo 2: 1. entrada {a, b} 2. s1 ← a/2 3. s2 ← b/2 4. m ← s1 + s2 5. sa´ıda {m} Algoritmo 3: 1. entrada {a, b} 2. d1 ← a − b 3. d1 ← d1/2 4. m ← b + d1 5. sa´ıda {m}
Para um dado F = F (b, n, e1, e2) podemos ter, conforme a, b ∈ F os
seguintes problemas:
• Algoritmo 1: overflow em 2. • underflow em 2 e 3.
2.6. INSTABILIDADE 35
No algoritmo 3 n˜ao teremos provavelmente nenhum erro operacional, mas poderemos ter um erro no comando 2 se houver cancelamento subtrativo.
Vejamos agora um algoritmo cl´assico para calcular as ra´ızes de equa¸c˜ao do 2o grau cujas as f´ormulas s˜ao dadas pelas equa¸c˜oes seguintes:
x1 = −b + √b2 − 4ac 2a (2.25) x2 = −b −√b2 − 4ac 2a (2.26)
Vamos analisar alguns cassos a serem resolvidos em F = F (10, 8, −50, 50)
Exemplo 2.6.4. Caso a:
a = 1 , b = −105 , c = 1
As ra´ızes exatas corretamente arredondadas para 11 d´ıgitos s˜ao: x1 = 99999.999990
x2 = 0.000010000000001
Se as ra´ızes forem calculadas por (22), teremos: x1 = 100000.0 (muito boa)
x2 = 0 (ruin)
Na realidade, no c´alculo de x2 fomo v´ıtimas do chamado “cancelamento catastr´ofico”. Fa¸camos um parˆentese para explicar tal fenˆomeno.
Considerando x = 12345678.0 e y = 12345677.0, temos uma diferen¸ca x − y = 1.00000000, por´em, com uma pequena mudan¸ca de x para ¯x = 12345678.1 e de y para ¯y = 12345676.9, obtemos uma diferen¸ca de:
˜
Portanto, uma mudan¸ca no nono d´ıgito de um dado causou uma mu-dan¸ca no segundo d´ıgito da resposta. Neste caso, quando estamos sub-traindo grandezas aproximadamente iguais e h´a um erro muito grande, dizemos que houve um cancelamento subtrativo (o mesmo vale para somar grandezas iguais, mas de sinais diferentes).
Voltando para o exemplo inicial, para calcular x2 por 2.25 ocorre:
x2 =
+105 − √1010
2 =
0
2 = 0 (2.27)
Que ´e identificado cancelamento subtrativo.
Uma forma de evitar tal problema, ´e usar o seguinte algoritmo:
x1 =
−b − sign(b)√b2 − 4ac
2a (2.28)
Como ax2+bx+c = a(x−x1)(x−x2) implica que ax1 x2 = c, podemos
calcular a raiz por:
x2 =
c ax1
(2.29) Aplicando este algoritmo, n˜ao t˜ao ingˆenuo como 2.25, temos:
• x1 = 10000.00
• x2 = 1.0000000/100000.00 = 0.000010000000 Caso b:
a = 6 , b = 5 , c = −4
Aqui n˜ao h´a dificuldades em calcular para x1 e x2 os valores: • x1 = 0.50000000
• x2 = −1.3333333
Seja qual for a f´ormula utilizada. Caso c:
2.6. INSTABILIDADE 37
a = 6x1030 , b = 5x1030 , c = −4x1030
Desde que os coeficientes foram multiplicados por 1030 n˜ao h´a mudan¸ca nas ra´ızes. Contudo, a aplica¸c˜ao das f´ormulas pode levar a um problema de overflow, desde b2 > 1050 (considerando o F dado).
Caso d:
a = 10−30 , b = −1030 , c = 1030
Aqui, x1 est´a muito perto de 1, enquanto x2 est´a perto de 106. Portanto, nosso algoritmo deve determinar x1 muito aproximadamente, mas ir´a falhar para x2.
Caso e:
a = 1.0000000 , b = −4.0000000 , c = 3.9999999 As ra´ızes verdadeiras s˜ao:
• x1 = 1.999683772 • x2 = 2.000316228
Mas aplicando a f´ormula 2.28, obtemos x1 = x2 = 2.0000000, com
quatro d´ıgitos corretos.
Exemplo 2.6.5. Seja o sistema:
0.117 · 10−2 x + 0.648 y = 0.649
0.512 x − 0.920 · 10−3 y = 0.511 (2.30) Que, resolvidos em F = F (10, 3, −3, 3) com arredondamento para o n´umero de m´aquina mais pr´oximo, temos:
0.117 · 10−2 x + 0.648 y = 0.649
0x + 0.284 · 103 y = 0.511 (2.31) E da´ı y = 0.996 e x = 3.42.
Trocando a ordem das equa¸c˜oes e resolvendo no mesmo sistema de ponto flutuante, temos x = 1 e y = 1, a qual se acha bem mais pr´oxima da solu¸c˜ao exata que ´e:
x = 0.999843279 . . . e y = 0.999737937 . . .
Voltaremos a apresentar este exemplo no Cap´ıtulo 3 quando veremos o M´etodo de Elimina¸c˜ao de gauss com Pivotamento Parcial.
Com os exemplos anteriores vemos que os algoritmos podem gerar, sob certos dados, erros consider´aveis de modo a tornar in´util o resulstado.
Vejamos agora outro tipo de instabilidade.
2.6.2 Instabilidade de problemas
Consideremos a tarefa de colocar um l´apis comum, de base plana, em p´e. Se a base for colocada para baixo, a terefa ser´a f´acil; contudo, se a parte cˆonica da ponta ficar para baixo, a tarefa ´e quase imposs´ıvel (sem truques). A primeira tarefa constitui um problema est´avel, enquanto a segunda ´e dita inst´avel, pois, efetivamente, se o l´apis ficar em p´e, ser´a apenas por algumas fra¸c˜oes de segundo e depois cair´a. Algo semelhante ocorre com problemas num´ericos.
Veremos agora um problema cl´assico em metem´atica Num´erica que ´e citado em |26| Wilkinson.
Exemplo 2.6.6.
p(x) = x20− 210x19+ . . . = (x − 1)(x − 2)(x − 3) . . . (x − 19)(x − 20) = 0 ´
E claro que as ra´ızes s˜ao 1, 2, 3, . . . , 19 e 20 e est˜ao bem separadas. Computando as ra´ızes de p(x) + 2−23 · 210x19 = 0, num computador com
2.6. INSTABILIDADE 39 R1 = 1.000 000 000 R2 = 2.000 000 000 R3 = 3.000 000 000 R4 = 4.000 000 000 R5 = 4.999 999 928 R6 = 6.000 006 944 R7 = 6.999 697 234 R8 = 8.007 267 603 R9 = 8.917 250 249 R10, R11 = 10.095 266 145 ± 0.643 500 904i R12, R13 = 11.793 633 881 ± 1.652 329 728i R14, R15 = 13.992 358 137 ± 2.518 830 070i R16, R17 = 16.730 737 466 ± 2.812 624 894i R18, R19 = 19.502 439 400 ± 1.940 330 347i R20 = 20.846 908 101
Notemos que um termo da equa¸c˜ao mudou de −21019 para −210 + 2−23x19, ou seja, uma mudan¸ca no trig´esimo d´ıgito da base 2 em apenas um dos coeficientes. O resultado ´e completamente inesperado e as mu-dan¸cas nas ra´ızes s˜ao grandes. A raz˜ao dessa mudan¸ca dr´astica n˜ao ´e arredondamento nem o algoritmo e sem problema de condicionamento.
H´a certos problemas que, quando sofrem pequena altera¸c˜ao nos dados de entrada, tˆem na sua resposta pequena diferen¸ca proporcional, enquanto outros mostram grande varia¸c˜ao no resultado do mesmo com uma pequen´ıs-sima altera¸c˜ao nos dados de entrada. Os primeiros problemas s˜ao ditos bem condicionados e os segundos s˜ao ditos mal condicionados.
No caso de polinˆomio podemos analisar o seguinte: Seja p(x, α) = x20 − αx19 + . . .
Deferanciando p(x, α) = 0 em rela¸c˜ao a α, temos: ∂p(x, α) ∂x ∂x ∂α + ∂p(x, α) ∂α = 0
∂x ∂α = − ∂p/∂α ∂p∂α ∂x ∂α = x19 P20 i=1 Q20 j=1, j6=i(x − j)
Calculando em cada raiz, temos:
∂x ∂α x=i = i19 Q20 j=1, j6=i(i − j) , i = 1, 2, . . . , 20. (2.32)
Vejamos a seguinte tabela:
Raiz ∂α∂x|x = i Raiz ∂α∂x|x = i 1 −8.2x10−18 11 −4.6x107 2 8.2x10−11 12 2.0x108 3 −1.6x10−6 13 −6.1x108 4 2.2x10−3 14 1.3x109 5 6.1x10−1 15 −2.1x109 6 5.8x101 16 2.4x109 7 −2.5x103 17 −1.9x109 8 6.0x104 18 1.0x109 9 −8.3x105 19 −3.1x108 10 7.6x106 20 4.3x107
Estes n´umeros d˜ao uma medida direta da sensibilidade ou condiciona-mentodas ra´ızes para o coeficiente α. Logo, as ra´ızes maiores s˜ao as mais sens´ıveis. Na unidade quatro voltaremos a falar do condicionamento das ra´ızes de equa¸c˜oes n˜ao lineares.
Exemplo 2.6.7. Dada uma curva y = f (x), determinar a tangente a essa curva em x = x0, assim como a ´area limitada por esta curva e as retas
2.6. INSTABILIDADE 41
Vir´a figura
Figura 2.5: Estabiladade da integra¸c˜ao e instabildade da diferencia¸c˜ao
Se pequenas varia¸c˜oes ocorrerem em f (x) em virtude, por exemplo, de arredondamento ou truncamento, podemos ter grandes varia¸c˜oes no c´alculo da tangente `a curva no ponto (x0, f (x0)), como pode ser visto na Figura
2.5, onde a curva g constitui uma perturba¸c˜ao na curva f .
No entanto, a ´area sob a curva f ou g mant´em-se praticamente a mesma.
Exemplo 2.6.8. Consideremos a equa¸c˜ao diferencial:
y0(x) = y 0 ≤ x ≤ 1.0
y(0) = 1 (2.33)
Aproximando y0()x por:
(h/2)[−3y(x) + 4y(x + h) − y(x + 2h)]
Obtido pela aproxima¸c˜ao de y(x) por um polinˆomio do 2ograu e asso-ciando y(x) com yi, y(x + y) com y(x + 2y) com yi+2, temos:
yi+2 = 4yi+1 − 3yi − 2hyi i = 0, 1, 2, . . .
Onde y0 = 1 e y1 = eh.
y2 = 1.220 683 672 y3 = 1.346 187 75 y4 = 1.478 563 25 y5 = 1.606 452 2 y6 = 1.694 406 4 y7 = 1.636 978 56 y8 = 1.225 813 76 y9 = -0.735 076 352 y10 = -6.542 909 44
E da´ı dever´ıamos ter em uma aproxima¸c˜ao para y(1) = e. Contudo, y10 nada tem a ver com y(1).
Os dois ´ultimos exemplos mostram que a diferencia¸c˜ao pode ser um problema num´ericamente mais inst´avel do que a integra¸c˜ao. Contudo, do ponto de vista anal´ıtico o processo da diferencia¸c˜ao de fun¸c˜oes que surgem na pr´atica ´e mais simples do que a integra¸c˜ao.
Com isso, concluimos esta unidade mostrando alguns problemas que a Matem´atica Num´erica lida em fun¸c˜ao da aritm´etica feita numa m´aquina como um computador digital. Felizmente, os problemas causados pelo arredondamento ou pelo condicionamento dos problemas n˜ao s˜ao maiores que as vantagens do uso do computador. Estes exemplos devem levar-nos a pensar que n˜ao devemos em qualquer hip´otese confiar cegamente nos resultados produzidos pela m´aquina.
.1. INTRODU ¸C ˜AO 157
T´opicos sobre a Norma IEEE 754
.1 Introdu¸c˜ao
Hist´oricamente existem alguns marcos na representa¸c˜ao dos n´umeros tanto dos naturais ou inteiros como dos racionais como reais. Na nota¸c˜ao decimal o uso do zero e o sistema posicional foi um deles. Isto facilitou n˜ao s´o a representa¸c˜ao em si, como tamb´em os algoritmos de opera¸c˜oes aritm´eticas tornaram-se mais simples. Neste sistema a representa¸c˜ao de n´umeros de forma finita ou de fra¸c˜oes peri´odicas ou n˜ao, est´a bem estabelecido e usado de modo mundial.
Com o advento dos computadores e sua mem´oria com palavras de tamanho finito tornaram-se necess´arios criar novas representa¸c˜oes. Os n´umeros in-teiros s˜ao representados com sistemas de ponto fixo. Para estes, usualmente temos a representa¸c˜ao usando o c´odigo de complemento de dois, para re-presentar adequadamente o zero, os positivos e negativos. Para os n´umeros racionais s˜ao usados os sistemas de ponto flutuante. Os n´umeros reais, s˜ao aproximados por racionais. De fato em qualquer sistema de ponto flutuante s´o temos representa¸c˜oes para racionais. Isto traz v´arios problemas com os arredondamentos.
At´e a d´ecada de 80 cada fabricante de computador escolhia um sistema de representa¸c˜ao e o implementava e todos os demais aplicativos de software que usariam estas m´aquinas usavam necessariamente este sistema. Por exemplo, no software b´asico de mainframes com IBM usava-se um tipo de representa¸c˜ao, com base interna de 16, onde o n´umero de ponto flutuante era representado com mantisa, sinal da mantissa e caracter´ıstica que re-presentava o exponte sem sinal, fazendo um deslocamento. J´a nos antigos computadores Burroughs ou CDC, usava-se base 8 e o n´umero de ponto flutuante possui, sinal da mantissa, mantissa, expoente e sinal do expoente. Com a difus˜ao de computadores de pequeno porte onde a flexibilidade de aplicativos tornou-se maior, foi necess´ario desenvolver um padr˜ao para viabilizar o uso, reuso e intercˆambio de informa¸c˜oes sobre a aritm´etica de
ponto flutuante de modo mais uniforme. Estes problemas foram estudados por um comite do Instituto de Engenharia El´etrica e Eletrˆonica do Estados Unidos da Am´erica do Norte. 3
O objetivo da Norma IEEE 754 ´e estabelecer as diretivas para a imple-menta¸c˜ao da aritm´etica bin´aria de ponto flutuante. Ela especifica formatos, opera¸c˜oes b´asicas: adi¸c˜ao subtra¸c˜ao, multiplica¸c˜ao, divis˜ao, raiz quadrada, compara¸c˜oes, convers˜oes, e quais s˜ao as situa¸c˜oes de excess˜ao. A norma IEEE 854-1987 generaliza a 754 e abrange a aritm´etica de ponto flutuante na base decimal, que ´e usada principalmente nas calculadoras.
Embora a Norma propicie suporte para para diagnosticar certas situa¸c˜oes de risco, isto nem sempre ´e implementado pelo fabricante em sua totalidade.
O link da IEEE onde pode-se comprar a norma ´e www.ieee.org. ou http://standards.ieee.org/
O link para mais informa¸c˜oes e onde existem artigos como o do David Goldberg e outros ´e http://grouper.ieee.org/groups/754/
Um link muito interessante, criada por Quanfei Wen ´e: http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html
.2 Formatos
Toda a m´aquina ou qualquer instrumento material tem implicitamente uma limita¸c˜ao f´ısica. Por exemplo, uma fita m´etrica comum n˜ao serve para medir corretamente com mil´ımetros e sim apenas com cent´ımetros; se usarmos um paqu´ımetro, podemos medir corretamente com mil´ımetros. Uma m´aquina como um carro tem um limite m´aximo de velocidade. Para atingir veloci-dades maiores temos que usar outro tipo de carro ou at´e mesmo outro tipo de ve´ıculo, como um avi˜ao. Estas limita¸c˜oes est˜ao associadas `a precis˜ao. No caso de c´alculos feitos em m´aquinas digitais temos a chamada precis˜ao simples, dupla ou precis˜ao extendida que dependem de v´arios parˆametros estabelecidos pelo hardware, como tamanho em bits da palavra de mem´oria,
3Institute of Electrical and Electronics Engineers: IEEE ou ”EYE triple E.”O IEEE ´e uma sociedade cujos membros
s˜ao t´ecnicos profissionais da ´area de engenharia eletrˆonica, el´etrica e atualmente de computa¸c˜ao e outras tecnologias emergentes.
.2. FORMATOS 159
tamanho de registradores especiais, n´umero de bits extras da palavra de mem´oria, como os “tags” bits ou “flags” que indicam a paridade, qual o tipo de conte´udo, underflow, overflow, divis˜ao por zero, opera¸c˜ao inv´alida ou outros indicadores para o sistema operacional.
Na Norma s˜ao assumidos as seguintes defini¸c˜oes: • N´umero de Ponto Flutuante Bin´ario
´
E uma seq¨uˆencia de d´ıgitos bin´arios armazenados em bits, composto de 3 campos, O bit mais significativo ´e o sinal da mantissa, 0 para positivo e 1 para negativo; um expoente deslocado (biased em inglˆes) e uma mantissa que cont´em a parte fracion´aria.
• N´umero Normalizado ´
E o n´umero de ponto flutuante cujo expoente esta dentro dos limites e a mantissa representa qualquer fra¸c˜ao bin´aria.
• Expoente ´
E o mesmo expoente da defini¸c˜ao usual de n´umero de ponto flutuante, ou seja, ´e o expoente da base 2 n˜ao deslocado, ou seja, “not-biased”. • Expoente “biased” ou Caracter´ıstica
´
E a soma de uma constante“bias”com o expoente gerando um expoente deslocado, para evitar que tenhamos que armazenar um sinal para o expoente, o que dificulta os algoritmos aritm´eticos. Nas m´aquinas IBM era chamado de Caracter´ıstica para n˜ao confundir com o expoente normal.
• N´umero Desnormalizado ´
E um n´umero n˜ao nulo cujo expoente tem um valor reservado, usual-mente o valor m´ınimo e cujo primeiro bit da mantissa ´e 0. ´E ´util para representar os n´umeros que ficam na regi˜ao de underflow.
´
E uma seq¨uˆencia de bits que representa a mantissa da defini¸c˜ao usual e que de fato possui como primeiro bit o valor 1 que se torna impl´ıcito, antes do ponto separador que tamb´em ´e impl´ıcito.
• Infinitos e Zeros
Com as possibilidades de bits temos duas configura¸c˜oes para o zero: +0 e −0, o que ´e comum em certos c´odigos, e dois infinitos: +∞, −∞.
• NaN: N˜ao ´e um n´umero de ponto flutuante ´
E uma seq¨uˆencia de bits que possui valores indefinidos e representam opera¸c˜oes inv´alidas.
Para cada formato temos a seguinte express˜ao:
(−1)S2e(b0.b1b2b3. . . bn−1)
onde S=0 se a mantissa for positiva ou S=1, se for negativa, Emin ≤ e ≤
Emax, o valor b0 tem o valor 1, na base bin´aria e assume-se que este ‘10 e´constante e fica subentendido e n˜ao ocupa um espa¸co ou bit; os demais d´ıgitos bin´arios s˜ao nulos ou 1.
No formato simples temos 32 bits dispostos na seguinte fˆorma:
Quantidade de bits 1 8 23
Conte´udo Sinal Expoente fra¸c˜ao Bits 31 30, 29, . . . 23 22,21 . . . 1, 0
.3. EXEMPLOS 161
Classe Sinal Exp Fra¸c˜ao
Zeros 1 0 0
0 0 0
N´umero Normalizado 0 1-254 qualquer 1 1-254 qualquer N´umero Desnormalizado 0 0 n˜ao nulo 1 0 n˜ao nulo
Infinitos 0 255 0
1 255 0
NaN( Not a Number) 255 n˜ao nulo
No formato duplo temos 64 bits dispostos na seguinte fˆorma:
Quantidade de bits 1 11 52
Conte´udo Sinal Expoente fra¸c˜ao Bits 63 62, 61, . . . 50 51,50 . . . 1, 0 Para outros formatos temos o seguinte resumo:
Parˆametro Formato
B´asico B´asico Duplo Duplo “single” Estendido “double” Estendido
n (precis˜ao) 24 ≥ 32 53 ≥ 64 Emax +127 ≥ 1023 +1023 ≥ 16383 Emin -126 −1022 ≤ −16382 Bias +127 N˜ao +1023 N˜ao especificado especificado Bits do expoente 8 ≥ 11 11 ≥ 15 Total em bits 32 ≥ 43 64 ≥ 79 .3 Exemplos
Estes exemplos se referem ao formato simples, que correspondem ao tipo float na linguagem C ou Real em Pascal nos atuais PC com palavra
b´asica de 32 bits ou 4 bytes. Na linguagem C, atrav´es das bibliotecas de I/O a especifica¸c˜ao de formato % converte o conte´udo apontado para a sa´ıda desejada.
especificador o argumento ´e convertido para a d ou i int nota¸c˜ao decimal de
inteiro com sinal
o int valor octal sem sinal
sem os zeros finais
x ou X int nota¸c˜ao hexadecimal, sem os zeros n˜ao significativos
u int nota¸c˜ao decimal sem sinal e ou E float or nota¸c˜ao decimal cient´ıfica
double com [−]m.mmm . . . mE[±]nnn f float or nota¸c˜ao decimal
double com [−]mmmm.nn . . . n
g ou G float or usa a forma mais curta dentre e ou f double e sem os zeros n˜ao significativos u int nota¸c˜ao hexadecimal, sem sinal p pointer endere¸co armazenado num ponteiro
O formato %p.qf indica que ser˜ao usadas p espa¸cos para o n´umero, con-tando o sinal e o ponto, e q indica o n´umero de casas decimais ap´os o ponto.
Observa¸c˜oes:
Muito cuidado ´e necess´ario ao usar os formatos adequados ao tipo de vari´avel.
1. No caso de inteiros a linguagem C, como normalmente ´e implementada n˜ao avisa sobre o overflow ou underflow.
2. A divis˜ao por zero n˜ao causa uma interrup¸c˜ao em si, embora quando o valor ´e impresso temos: (1/0) = 1.#IN F 00. e seu conte´udo fica: 7f 800000x = (0|111 1111 1|00000 . . . 0)2 que sinaliza +∞. Se este
.4. EXEMPLOS 163
valor for reusado o processo de indertermina¸c˜ao continua.
3. Se por exemplo, o valor (1.0/0.0) ´e somado a 10.0 temos: (1/0 ∗ 1 + 10)f = 1.40445e + 306
4. No caso de float ....
.4 Exemplos
Exemplo .4.1. Indicar a configura¸c˜ao de bits que assumem os seguintes valores:
1. float num=357.8125;
(a) Convertendo para bin´ario:
(357.8125)10 = (1 0110 0101.1101)2
(b) Deslocar o ponto fracion´ario:
(357.8125)10 = (1.0110 0101 1101)2 · 2+8
(c) Completar a mantissa at´e completar os 23 bits ou preencher com zeros o que faltar
m = 011 0010 1110 1000 0000 0000
Lembrar que o primeiro 1 fica subentendido e foi cortado, e come¸camos a preecher do bit mais significativo, da esquerda para direita.
(d) Deslocando o expoente: Somar a constante do “bias=127´´ 127 + 8 = 135 = (1000 0111)2
(e) Preencher o expoente com o resultado do item anterior. Se n˜ao houver 8 bits preencher com zeros.
(f) Determinar o sinal da mantissa. S = 0
(g) Juntando as partes:
(357.8125)10 = 0|100 0011 1|011 0010 1110 1000 0000 0000 ou ainda em hexa:
(357.8125)10 = 43b2e800x
Se o n´umero fosse negativo, ficar´ıamos com: (357.8125)10 = c3b2e800x
Aten¸c˜ao, isto n˜ao ´e converter o n´umero para a base 16.
Exemplo .4.2. Seja agora o caso de n´umeros inteiros: int i=-357; int j=357;
Usa-se o complemeto de 2.
1. Convertendo para bin´ario e completando com zeros:
357 = (1 0110 0101)2 357 = (0 . . . 0 0001 0110 0101)2 2. Fazendo o complemento de 2: 1 . . . 1 0 1001 1010 + 1 1 . . . 1 1110 1001 1011
3. para o valor positivo, n˜ao ´e necess´ario nenhuma outra conta, al´em da convers˜ao inicial.
Logo:
(357)10 = 00000165x
.4. EXEMPLOS 165
Exemplo .4.3. Outro n´umero real f loat num = −951.339 843 75; 1. Convertendo para bin´ario:
(−951.33984375)10 = (11 1011 0111.0101 0111)2
2. Deslocar o ponto fracion´ario:
(−951.33984375)10 = (1.11011011101010111)2) · 29
3. Completar a mantissa at´e completar os 23 bits ou preencher com zeros o que faltar
m = 1.11011011101010111000000
4. Deslocando o expoente: Somar a constante do “bias=127´´ 127 + 9 = 136 = (1000 1000)2
5. Preencher o expoente com o resultado do item anterior. Se n˜ao houver 8 bits preencher com zeros.
6. Determinar o sinal da mantissa.
S = 1 7. Juntando as partes:
(−951.33984375)10 = 1|100 0100 0|110 1101 1101 0101 1100 0000
ou ainda em hexa:
(−951.33984375)10 = c46dd5c0x
Se o n´umero fosse positivo, ficar´ıamos com:
Exemplo .4.4. Consideremos um n´umero real com precis˜ao dupla: 1. double x=245.;
2. Convertendo para bin´ario:
(245.)10 = (1111 0101)2 3. Deslocar o ponto fracion´ario:
(245.)10 = (1.111 0101)2 · 2+7
4. Completar a mantissa at´e completar os 52 bits ou preencher com zeros o que faltar
m = 111 0101 0000 000 . . . 0000
Lembrar que o primeiro 1 fica subentendido e foi cortado, como na precis˜ao simples e come¸camos a preecher do bit mais significativo, da esquerda para direita.
5. Deslocando o expoente: Somar a constante do “bias=1023 = 210− 1´´ 1023 + 7 = 1030 = (100 0000 0110)2
6. Preencher o expoente com o resultado do item anterior. 7. Determinar o sinal da mantissa.
S = 0 8. Juntando as partes:
(245.)10 = 0|100 0000 0110 1110 1010 0000 . . . 0000 ou ainda em hexa:
.5. ARREDONDAMENTOS 167
.5 arredondamentos
O arredondamento ´e um ponto cr´ıtico da aritm´etica de ponto flutuante. Para fazer o arredondamento de modo correto ´e necess´ario evitemente con-hecer os demais d´ıgitos do resultado. De fato nas unidades de aritm´etica existem mais informa¸c˜oes do que ´e mostrado na palavra de mem´oria. ´E a aprtir destas informa¸c˜oes que ´e calculado o arredondamento.
Existem 4 tipos de arredondamento definidos na norma. • “Unbiased:” arredonda para o mais pr´oximo
• Direcionado ao Zero
• Direcionado ao infinito positivo • Direcionado ao infinito negativo
Ser´a continuado. Revis˜ao de C´alculo
O seguintes resultados s˜ao vistos nos cursos b´asicos e as referˆencias est˜ao na Bibliografia.
Referˆ
encias Bibliogr´
aficas
[1] Lamport, L., LaTeX : A Documentation Preparation System User’s Guide and Reference Manual, Addison-Wesley Pub Co., 2nd edition, August 1994.
[2] Forsythe, G.E.;Malcom, M.A. & Moler
” C.B. Computer Methods for mathematical computations Englewood Clifs, Prentice Hall, 1977. [3] Pennington, R.H. Introductory computer methods and numerical
analysis. New York, MacMilan, 1965.