Cálculo Numérico
Cálculo Numérico
Cálculo Numérico
Numericos
Joao Paulo Gois
Universidade Federal do ABC
Adaptac
ao
Prof. Harlen C. Batagelo (UFABC), do livro C
alculo Num
erico (N.B. Franco, 2006) e dos Slides da Marina Andretta/Franklina Toledo (ICMC-USP)
x = 0;
for i = 1:1000000
x = x + exp (1) / pi ;
end
format long ;
display ( x ) ;
y = 1000000* exp (1) / pi ;
display ( y ) ;
dif = abs ( x - y ) ;
display ( dif ) ;
Sada
x =
8.652559794435985e+05
y =
8.652559794322652e+05
dif =
1.133338082581758e-05
x = 0;
for i = 1:1000000
x = x + 1/( sqrt (88139) - sqrt (88137) ) ;
end
format long ;
display ( x ) ;
y = 1000000*(1/( sqrt (88139) - sqrt (88137) ) ) ;
display ( y ) ;
dif = abs ( x - y ) ;
display ( dif ) ;
Sada
x =
2.968804473078792e+08
y =
2.968804473130453e+08
dif =
0.005166113376617
Representacao de n
umeros inteiros
Representacao de n
umeros inteiros
Representacao de n
umeros inteiros
Exemplo 1
Na base = 10, o n
umero 1997 e representado por
1997 = 7 100 + 9 101 + 9 102 + 1 103 ,
e e armazenado como n3 n2 n1 n0 .
Exerccio 1.1
Represente os seguintes n
umeros inteiros nas bases dadas:
(a) 28 em = 10.
(b) 306 em = 10.
(c) 9 em = 3.
(d) 1 em = 2.
(e) 2 em = 2.
(f) 3 em = 2.
Representacao de n
umeros reais
Representacao de n
umeros reais
Representacao de n
umeros reais
Representacao de n
umeros reais
Representacao de n
umeros reais
Representacao de n
umeros reais
Representacao de n
umeros reais
, Bastante flexvel.
/ Calculos mais lentos; requer circuitos especializados.
n
X
xi i ,
i=k
Exemplo 2
Na base = 10, o n
umero 1997,16 e representado por:
1997,16 =
2
X
xi i
i=3
Exerccio 2.1
Represente os seguintes n
umeros em notacao de ponto fixo:
(a) 1,5 em = 10 e n = 1.
(b) 32 em = 10 e n = 2.
(c) 32,32 em = 10 e n = 2.
(d) 300,123 em = 10 e n = 1.
t
X
di i ,
i=1
Exemplo 3
Na base = 10, o n
umero 0,35 e representado por:
0,35 = (3 101 + 5 102 ) 100
= 0,35 100 .
x = d ,
d=
t
X
i=1
di i
Exemplo 4
Na base = 10, o n
umero 5,172 e representado por:
5,172 = (5 101 + 1 102 + 7 103
+2 104 ) 101
= 0,5712 101 .
x = d e ,
d=
t
X
i=1
di i
Exemplo 5
Na base = 10, o n
umero 0,0123 e representado por:
0,0123 = (1 101 + 2 102 + 3 103 ) 101
= 0,123 101 .
x = d ,
d=
t
X
i=1
di i
Exemplo 6
Na base = 10, o n
umero 5391,3 e representado por:
5391,3 = (5 101 + 3 102 + 9 103
+1 104 + 3 105 ) 104
= 0,53913 104 .
x = d e ,
d=
t
X
i=1
di i
Exemplo 7
Na base = 10, o n
umero 0,0003 e representado por:
0,0003 = (3 101 ) 103
= 0,3 103 .
x = d ,
d=
t
X
i=1
di i
Definicao [Sistema F (, t, m, M )]
Para representarmos um sistema de n
umeros em ponto flutuante
na base , com t dgitos significativos e com limites do expoentes
m e M , usaremos a notacao F (, t, m, M ).
Assim, um n
umero em F (, t, m, M ) sera representado por
0,d1 d2 . . . dt e ,
onde d1 6= 0 e m e M .
Exemplo 8
No sistema F (10, 3, 2, 2), os n
umeros sao representados por
0,d1 d2 d3 10e ,
onde 2 e 2.
Os n
umeros dos exemplos anteriores sao representados como
0,35 = 0,350 100 ,
Exerccio 3.1
Represente no sistema F (10, 4, 4, 4) os seguintes n
umeros:
(a) 43,21.
(b) 5, 748.
(c) 0,001352.
(d) 125,64.
(e) 0,000034.
(f) 1.
Exerccio 3.1
Represente no sistema F (10, 4, 4, 4) os seguintes n
umeros:
(a) 43,21.
(b) 5, 748.
(c) 0,001352.
(d) 125,64.
(e) 0,000034.
(f) 1.
Exerccio 3.2
Represente no sistema F (10, 3, 1, 2) os n
umeros do exerccio
anterior. Neste caso, alguns n
umeros resultarao em erro de
underflow ou overflow. Se isso acontecer, explique o motivo.
Exemplo 9
Converter 1101 que esta na base 2, para a base 10.
Neste caso, o procedimento e multiplicar cada algarismo do
n
umero na base 2 por potencias crescentes de 2, da direita para a
esquerda, e somar todas as parcelas. Desse modo,
1101 = 1 20 + 0 21 + 1 22 + 1 23 = 1 + 0 + 4 + 8 = 13.
Logo, (1101)2 = (13)10 .
Exemplo 10
Converter 0,110 que esta na base 2, para a base 10.
Neste caso, o procedimento e multiplicar cada algarismo do
n
umero na base 2, apos a vrgula, por potencias decrescentes de 2,
da esquerda para a direita, e somar todas as parcelas. Desse modo,
0,110 = 1 21 + 1 22 + 0 23 =
Logo, (0,110)2 = (0,75)10 .
1 1
+ + 0 = 0,75.
2 4
Exemplo 11
Converter 13 que esta na base 10, para a base 2.
Neste caso, o procedimento e dividir o n
umero por 2. A seguir,
continuamos dividindo o quociente por 2, ate que o u
ltimo
quociente seja igual a 1. O n
umero na base 2 sera entao obtido
tomando-se o u
ltimo quociente e todos os restos das divisoes
anteriores. Assim,
13
1
2
6
0
2
3
1
2
1
Exemplo 12
Converter 0,75 que esta na base 10, para a base 2.
Neste caso, o procedimento e multiplicar a parte decimal por 2. A
seguir, continuamos multiplicando por 2 a parte decimal do
resultado obtido. O n
umero na base 2 sera entao obtido
tomando-se a parte inteira do resultado de cada multiplicacao.
Desse modo,
0,75 2 = 1,50
0,50 2 = 1,00
0,00 2 = 0,00
Logo, (0,75)10 = (0,110)2 .
Exemplo 13
Converter 3,8 que esta na base 10, para a base 2.
Exemplo 13
Converter 3,8 que esta na base 10, para a base 2.
Neste caso, o procedimento e transformar a parte inteira, o que
nos fornece (3)10 = (11)2 , e a parte decimal. Assim, obtemos
0,8 2 = 1,6
0,6 2 = 1,2
0,2 2 = 0,4
0,4 2 = 0,8
0,8 2 = . . .
Primeiro representamos o n
umero que esta na base 1 , na
base 10 e, a seguir, representamos esse n
umero na base
2 .
Exemplo 14
Converter 12,20 que esta na base 4, para a base 3.
12 = 2 40 + 1 41 = 6,
0,20 = 2 41 + 0 42 =
Portanto, (12,20)4 = (6,5)10 .
(continua...)
2
= 0,5.
4
Exemplo 14 (continuacao)
Agora, convertemos 6,5 que esta na base 10, para a base 3.
6
0
3
2
0,5 3 = 1,5
0,5 3 = 1,5
..
.
Assim, (6,5)10 = (20,111 . . .)3 . Logo, (12,20)4 = (20,111 . . .)3 .
Observe que o n
umero dado na base 4 tem representacao exata na
base 10, mas nao na base 3.
Exerccio 4.1
Os n
umeros x1 = 34, x2 = 0,125 e x3 = 33,023 estao em = 10.
Escreva-os em = 2 com ate 7 dgitos na parte fracionaria.
Exerccio 4.1
Os n
umeros x1 = 34, x2 = 0,125 e x3 = 33,023 estao em = 10.
Escreva-os em = 2 com ate 7 dgitos na parte fracionaria.
Exerccio 4.2
Os n
umeros x1 = 110111, x2 = 0,01011 e x3 = 11,0101 estao em
= 2. Escreva-os em = 10.
Exerccio 4.1
Os n
umeros x1 = 34, x2 = 0,125 e x3 = 33,023 estao em = 10.
Escreva-os em = 2 com ate 7 dgitos na parte fracionaria.
Exerccio 4.2
Os n
umeros x1 = 110111, x2 = 0,01011 e x3 = 11,0101 estao em
= 2. Escreva-os em = 10.
Exerccio 4.3
Os n
umeros: x1 = 34, x2 = 0,132 e x3 = 32,013 estao em = 4.
Escreva-os em = 5, com ate 5 dgitos na parte fracionaria.
N
umeros em F (, t, m, M )
N
umeros em F (, t, m, M )
N
umeros em F (, t, m, M )
Exemplo 15
Quantos n
umeros podem ser representados no sistema
F (2, 3, 1, 2)?
Temos que = 2, entao os dgitos podem ser 0 ou 1; m = 1 e
M = 2, entao 1 e 2 e t = 3. Assim, os n
umeros sao da
forma:
0,d1 d2 d3 e .
Logo, temos duas possibilidades para o sinal, uma possibilidade
para d1 , duas para d2 , duas para d3 e quatro para as formas de e .
Fazendo o produto 2 1 2 2 4, obtemos 32. Assim, neste
sistema podemos representar 33 n
umeros, visto que o zero faz
parte de qualquer sistema.
Exemplo 16
Quais n
umeros podem ser representados em F (2, 3, 1, 2)?
Note que as formas da mantissa sao: 0,100; 0,101; 0,110 e 0,111;
e as formas de e sao: 21 , 20 , 21 , 22 . Assim, para 0,100 temos:
1
2
= (0,25)10
0
2
= (0,5)10
0,100
21
= (1,0)10
2
2
= (2,0)10 ,
(continua...)
Exemplo 16 (continuacao)
Para 0,101 temos:
1
2
0
2
0,101
21
2
2
=
=
=
=
(0,3125)10
(0,625)10
(1,25)10
(2,5)10 ,
=
=
=
=
(0,375)10
(0,75)10
(1,5)10
(3,0)10 ,
(continua...)
1
2
0
2
0,110
21
2
2
Exemplo 16 (continuacao)
Para 0,111 temos:
1
2
0
2
0,111
21
2
2
=
=
=
=
(0,4375)10
(0,875)10
(1,75)10
(3,5)10 ,
Isso totaliza 16 n
umeros. Considerando os 16 n
umeros negativos
correspondentes, e mais o zero, temos 33 n
umeros, como calculado
no exemplo anterior.
Exerccio 5.1
Considere o sistema F (3, 3, 2, 1).
Exerccio 5.1
Considere o sistema F (3, 3, 2, 1).
(a) Quantos n
umeros podemos representar neste sistema?
Exerccio 5.1
Considere o sistema F (3, 3, 2, 1).
(a) Quantos n
umeros podemos representar neste sistema?
(b) Represente no sistema os n
umeros x1 = (0,40)10 e
x2 = (2,8)10 .
Padrao IEEE
Padrao IEEE
Padrao IEEE
Padrao IEEE
Padrao IEEE
Padrao IEEE
Padrao IEEE
Padrao IEEE-754
Representacao em ponto flutuante
Por exemplo, em um sistema de 64 bits para representar um real longo, os
64 bits sao distribudos da seguinte maneira:
O primeiro bit, denotado por s, e um indicador de sinal (0 para
positivo e 1 para negativo).
Em seguida, ha 11 bits para um expoente, chamados de caracterstica
(denotada por c). Base do sistema e 2.
Os 52 bits restantes representam a mantissa (denotada por f ), que e
uma fracao binaria.
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
11 / 37
Padrao IEEE-754
Representacao em ponto flutuante
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
12 / 37
Padrao IEEE-754
Representacao em ponto flutuante
( 1)s 2c
1023 (1
+f)
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
13 / 37
Padrao IEEE-754
Padrao IEEE-754
Valor
Zero
+ Infinito
- Infinito
NaN
Sinal
0
0
1
0
Expoente
0s
1s
1s
1s
Mantissa
0s
1s
1s
Diferente de 0s
Tabela: N
umeros especiais no Padrao IEEE-754
Padrao IEEE-754
Representacao em ponto flutuante - exemplo
Considere o seguinte n
umero, representado no sistema mencionado:
0 10000000011 1011100100010000000000000000000000000000000000000000
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
14 / 37
Padrao IEEE-754
Representacao em ponto flutuante - exemplo
c = 1 210 + 1 21 + 1 20 = 1027.
Portanto, a parte exponencial do n
umero e dada por
21027
1023
= 24 .
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
15 / 37
Padrao IEEE-754
Representacao em ponto flutuante - exemplo
Os u
ltimos 52 bits representam a mantissa
f =12
+12
+12
+12
+12
+12
12
Assim, o n
umero representado e
( 1)s 2c
( 1)0 21027
1023
1+
1023
(1 + f ) =
1 1
1
1
1
1
+ +
+
+
+
2 8 16 32 256 4096
sme0100 - C
alculo Num
erico I
= 27, 56640625.
03 de Agosto de 2012
16 / 37
Padrao IEEE-754
Note que o n
umero de maquina anterior a este e dado por
0 10000000011 1011100100001111111111111111111111111111111111111111
E o n
umero de maquina posterior e dado por
0 10000000011 1011100100010000000000000000000000000000000000000001
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
17 / 37
Padrao IEEE-754
Representacao em ponto flutuante - exemplo
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
18 / 37
Padrao IEEE-754
Representacao em ponto flutuante
O menor n
umero em modulo que pode ser representado neste sistema e
dado por s = 0, c = 1 e f = 0.
Ou seja,
( 1)0 21
1023
(1 + 0) 0, 2225 10
307
N
umeros que ocorrem em calculos com modulos menores do que este valor
resultam em underflow, e sao, geralmente, arredondados para 0.
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
19 / 37
Padrao IEEE-754
Representacao em ponto flutuante
O maior n
umero em modulo que pode ser representado neste sistema e
dado por s = 0, c = 2046 e f = 1 2 52 .
Ou seja,
( 1)0 22046
1023
(1 + 1
52
) 0, 17977 10309 .
N
umeros que ocorrem em calculos com modulos maiores do que este valor
resultam em overflow. Isso geralmente acarreta em parada do calculo, a
menos que o programa tenha sido projetado para detectar este tipo de erro.
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
20 / 37
Padrao IEEE-754
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
21 / 37
Padrao IEEE-754
Representacao em ponto flutuante
Para facilitar os calculo daqui em diante, usaremos a forma normalizada de
ponto flutuante decimal
0, d1 d2 ...dk 10n ,
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
22 / 37
Padrao IEEE-754
Representacao em ponto flutuante
Qualquer n
umero real positivo dentro do intervalo numerico da maquina
pode ser normalizado na forma
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
23 / 37
Padrao IEEE-754
Truncamento
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
24 / 37
Padrao IEEE-754
Arredondamento
(k+1)
a y e, entao, truncar
fl(y ) = 0,
1 2 ... k
10n .
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
25 / 37
Padrao IEEE-754
Arredondamento
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
26 / 37
Padrao IEEE-754
Erros absoluto e relativo
Existem duas maneiras muito usadas para medir erros de aproximacao.
Sao elas: erro absoluto e erro relativo.
|
p p|
|p| ,
p|.
contanto que p 6= 0.
Como medida de precisao, o erro absoluto pode ser enganoso, ja que nao
leva em consideracao o tamanho do n
umero que esta sendo usado. Neste
caso, o erro relativo pode ser mais significativo.
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
27 / 37
Padrao IEEE-754
Algarismos significativos
Diz-se que o n
umero p aproxima p ate t algarismos significativos se t for o
maior inteiro nao-negativo para o qual
|
p p|
|p|
5 10 t .
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
28 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante
Ja vimos que, somente a representacao de n
umeros reais no computador ja
introduz erros de arredondamento.
Alem disso, as contas feitas pelo computador introduzem mais alguns
erros.
A aritmetica feita pelo computador pode ser aproximada com as 4
operac
oes basicas definidas da seguinte maneira:
x
y = fl(fl(x) + fl(y ))
y = fl(fl(x)
fl(y ))
x y = fl(fl(x) fl(y ))
x y = fl(fl(x)/fl(y ))
Marina Andretta/Franklina Toledo (ICMC-USP)
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
29 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
30 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante - exemplo
Resultado
0, 10476x101
Valor real
0, 38095x100
8
21
0, 238x10
0, 625x10
x y
0, 23809x100
5
21
0, 524x10
0, 220x10
x y
0, 214286x101
15
7
0, 571x10
0, 267x10
22
21
Erro absoluto
0, 190x10 4
sme0100 - C
alculo Num
erico I
Erro relativo
0, 182x10 4
03 de Agosto de 2012
31 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante - exemplo
Operacao
(a b) c
Resultado
0, 156x102
0, 157x102
(b
c)
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
32 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante - exemplo
A f
ormula quadratica afirma que as razes de ax 2 + bx + c = 0, quando
a 6= 0, sao
x1 =
b+
b2
2a
4ac
e x2 =
b2
2a
4ac
x1 =
0, 01610723 e x2 =
sme0100 - C
alculo Num
erico I
62, 0839.
03 de Agosto de 2012
33 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante - exemplo
Nesta equacao, b 2 e muito maior do que 4ac. Entao, o numerador no
calculo de x1 envolve a subtracao de dois n
umeros quase iguais.
Como
b2
4ac =
q
(62, 1)2
411=
3856
4=
temos
fl(x1 ) =
62, 10 + 62, 06
=
2
0, 04
=
2
sme0100 - C
alculo Num
erico I
0, 02.
03 de Agosto de 2012
34 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante - exemplo
0, 02 + 0, 01611|
2, 4 10
| 0, 01611|
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
35 / 37
Padrao IEEE-754
Aritmetica de ponto flutuante - exemplo
No entanto, se racionalizarmos o numerador da formula para calculo de x1 ,
obtemos
x1 =
b+
2c
.
b 2 4ac
fl(x1 ) =
2
2
=
=
62, 10 + 62, 06
124, 2
0, 01610,
pequeno.
sme0100 - C
alculo Num
erico I
03 de Agosto de 2012
36 / 37