Sei sulla pagina 1di 8

Um resumo sobre

"Erros na Computao Numrica"

Material obtido na internet em 2005


Autor no foi encontrado: ltima busca em
maro de 2007

20/DEZ/2004

Aula 3: [Cap. 1]
Ateno: O CAMPOS usa uma nomenclatura diferente!

1 Etapas da resoluo de problemas


1. Denio do problema: O que se quer resolver? Qual a natureza do problema?
Terico ou Prtico? Quais as informaes disponveis? Quais reas do conhecimento
so aplicveis?
2. Modelagem matemtica: Como representar o problema matematicamente? Desenho,
esquemas, equaes, frmulas?
3. Resoluo do problema matemtico: Existe soluo? nica? Como determinar a
soluo? Usar mtodos analticos ou numricos?
No caso de se optar por uma resoluo numrica:
1. Determinao do mtodo: Existe algum mtodo (algoritmo) disponvel? Qual mtodo
mais indicado? Alguma adaptao ou elaborao necessria?
2. Codicao e implementao: Qual a linguagem a ser utilizada? Em que mquina
ou sistema o programa vai rodar? O programa est funcionando corretamente?
3. Processamento: Resolver o problema.
4. Anlise de resultados: O resultado o esperado? soluo para o problema?

Exemplo:
1. Denio do problema: Deve-se construir jardim quadrado com 5 m2 de rea. Qual
deve ser o lado?

2. Modelagem matemtica: Da geometria plana tem-se A = l2 , logo l2 = 5.


3. Resoluo do problema matemtico:
soluo analtica: l =

5.

soluo numrica (calculadora): l 2.23606797749979. Como?

4. Determinao do mtodo numrico: Algoritmo para raiz quadrada (Babilnia, 2400


a.C.)
5. Processamento: Veja a tabela.

Algoritmo 1: RaizQuadrada
Entrada: n
Sada: x ( n)

1:
2:
3:
4:

xn

enquanto x2 > n faa


x

m

1
2

x+

n
x

1
2
3
4
5
6
7
No

xk

5
3
2.33333333333333
2.23809523809524
2.23606889564336
2.23606797749998
2.23606797749979

(xk )2

25
9
5.44444444444445
5.00907029478458
5.00000410606373
5.00000000000084
5.00000000000000

Matlab:

>> format long


>> x = 5, q = x^2
>> x = (x + 5/x)/2, q = x^2 (repetir este comando)

2 Erro nos processos numricos


O computador uma mquina nita em memria e tempo de processamento, logo as
solues numricas esto impregnadas de erro.
Tipos de Erro:

1. Arredondamento: devido a representao numrica nita.


2. Truncamento: devido a interrupo de processos innitos.

Exemplo:
>> pi
ans = 3.14159265358979

Exemplo:
(0.5)10 = (0.1)2 (representao binria nita)
(0.6)10 = (0.10011)2 (representao binria innita)

Exemplo:
>> 0.5 + 0.5 == 1.0
ans = 1
>> 0.4 + 0.3 + 0.2 + 0.1 == 1
ans = 0

>> 0.1 + 0.2 + 0.3 + 0.4 == 1


ans = 1

Exemplo:
sin(x) = x

x3 x5 x7 x9
+

+
(srie innita)
3!
5!
7!
9!

3 Denies
1. Valor exato, x.
Valor de uma varivel. Em geral, a soluo de algum problema.
x = .

y = 2.
2. Valor aproximado, x.
Aproximao para o valor exato, impregnada de algum erro. Em geral, a resposta de
algum processo numrico. Valor estimado.
22
.
7
y = 1.4142.
x=

3. Erro, .
Diferena entre valor exato e aproximado. x = x +   = x x.
22
3.14159265358979 3.14285714285714 = 0.00126448926735.
=
7

 = 2 1.4142 1.41421356237310 1.4142 = 0.0000135623731.

4. Erro absoluto, abs .


abs = |x x|.
5. Erro (absoluto) relativo, rel .
rel



x x
.
=
x

x,rel = 4.024994347707008 104 .


y,rel = 9.590045984628936 106 .

6. Dgitos signicativos exatos, DSE.


Dgitos de x iguais a x na representao decimal.
22
x = 3.14159265358979, x =
3.14285714285714. (3 DSE)
7

y = 2 1.41421356237310, y = 1.4142. (5 DSE)

Importante: rel < 0.5 10m DSE m.


x,rel 4 104 = 0.4 103 < 0.5 103 DSE 3.
y,rel 9 106 = 0.9 105 = 0.09 104 < 0.5 104 DSE 4.

7. Tolerncia, tol.
Valor mximo admitido para o erro. Em geral, usado como critrio de parada em algoritmos iterativos. Ex.: Repetir procedimento at que rel < |0.5 {z106}
tol

Erro exato

erro estimado

Como no possvel conhecer o erro exatamente sem conhecer o valor exato x. Em geral
assumimos uma aproximao para o erro ou uma tolerncia para o erro.

Exemplo:

Determinar
x
= 53.

Como 49 < 53 < 64 7 < x < 8.


Assumindo x = 7.5 tem-se abs < 0.5.
0.5
= 0.06 100 DSE 0. De fato, 1 DSE.
Assim rel
7.5

4 Representao de ponto utuante


Observao: Os seguintes argumentos so expostos de forma simplicada. Detalhes sobre
codicao devem ser referidos ao padro IEEE 754.
Na maioria dos computadores, os valores numricos so representados por uma seqncia
de dgitos binrios (bits ):
s

f1

f2

... ft

e1

e2

... ep

onde,
s representa os sinais + e .
f1 , f2 , ..., ft so os dgitos da parte fracionria f [0, 1) da forma (f )10 = (0.f1 f2 ...ft )2 .
e1 , e2 , ..., ep so os dgitos do expoente e [emin , emax ] da forma e = (e1 e2 ...ep )2 .
Assim os valores so representados na forma x = 1.f 2e .

Matlab, os valores de preciso dupla (padro) tm 64 dgitos com t = 52, p = 11,

No
portanto,

1. A distncia entre (1.00...00)2 e (1.00...01)2 dada por  = 2t = 252 2.2204 1016 ,


que representa a preciso da representao numrica ( 16 dgitos decimais).
>> eps
ans = 2.2204e-016

2. Com p = 11 dgitos so possveis 211 = 2048 combinaes que representam 2046 expoentes,
desde emin = 1022 ate emax = 1023, e valores especiais:
expoente

frao

representa

e = emin 1
e = emin 1
emin e emax
e = emax + 1
e = emax + 1

f =0
f 6= 0

0
0.f 2emin
1.f 2e

N aN

f =0
f 6= 0

zero com sinal


valor no-normalizado
valor normalizado
innito
Not a Number

>> 1/0
ans = Inf
>> 0/0
ans = NaN

3. O maior nmero representvel


(1.11...11)2 21023 1.7977 10308 .

>> realmax
ans = 1.7977e+308
>> 2 * realmax
ans = Inf (overflow)

4. O menor nmero representvel (normalizado)


(1.00...00)2 21022 2.2251 10308 .

>> realmin
ans = 2.2251e-308

5. O menor nmero representvel (no-normalizado)


(0.00...01)2 21022 4.9407 10324 .

>> x = eps * 2^-1022


x = 4.9407e-324
>> x/2
ans = 0 (underflow)

5 Dicas e truques.
Exemplo:
Evitar overow. Como determinar o valor de x =

200!
?
75200

>> prod(1:200)
ans = Inf
>> 75^200
ans = Inf
>> prod(1:200) / 75^200
ans = NaN
1 2 3 200

200

Observe que x =
=


75 75 75 75
75 75 75
75
Escrever o script-le:

r = 1;
for i = 1 : 200
r = r * i/75;
end
r

Ao execut-lo, obtemos:
r = 0.7667

Exemplo:
Evitar soma de valores com grandezas muito diferentes.
Determinar y =

1
1
1
1
4
.
+
+
+
+

=
14 24 34 44
90

>> s = 0; for i = 1 : 10^6, s = s + 1/i^4; end, s


s = 1.08232323371086
>> s = 0; for i = 10^6 : -1: 1, s = s + 1/i^4; end, s
s = 1.08232323371114
>> pi^4/90
ans = 1.08232323371114

Exemplo:
Analisar a propagao
R 1 20dex erros (avanado!)
Determinar I20 = 0 x e dx.
Observe que
Z
In =

xn ex dx

[xn ex ]10

Z
n
0

= e nIn1 .

Como I1 = 1 podemos escrever o script le


e = exp(1);
I(1) = 1;
for n = 2 : 20
I(n) = e - n * I(n-1);
end
I'

e obter
1.000000000000000
0.718281828459046
0.563436343081909
0.464536456131410
0.395599547801996
0.344684541647067
0.305490036929578

xn1 ex dx

0.274361533022419
0.249028031257275
0.228001515886295
0.210265153709797
0.195099983941486
0.181982037219722
0.170533307382937
0.160282217714995
0.153766345019126
0.104253963133900
0.841710492048851
-13.274217520469100
268.202632237842000

<- absurdo!

A anlise de propagao de erro mostra que se I1 = 1 + 1 ento In = In + (1)n1 n!1 .

Potrebbero piacerti anche