Documente Academic
Documente Profesional
Documente Cultură
SUMÁRIO
RESUMO DO CAPÍTULO
O objetivo deste capítulo é deixar claro para o leitor o papel do Cálculo Numérico, e qual a sua
importância. Para tal, mostra-se um exemplo de problema - o cálculo de alcance no lançamento de
projéteis - cuja solução analítica (isto é, uma solução expressa por uma fórmula explícita, tipo
x = <expressão sem x>) não é possível quando se deseja resolver o modelo matemático mais
completo.
Entretanto, também se alerta para o fato de que existem limitações e cuidados que devem ser
tomados ao se proceder à solução numérica de problemas, particularmente aqueles associados às
limitações do equipamento que se utiliza para se chegar à solução, que é a máquina de cálculo
digital, como o computador.
Para entender os problemas que podem advir no processo da solução numérica, começa-se por
mostrar como os números podem ser representados, recordando-se o conceito de algarismos
significativos, as particularidades da aritmética envolvendo tais algarismos e o que são sistemas de
numeração. Em seguida, é visto como os números são armazenados e tratados numa máquina com
recursos finitos - o computador - e quais as conseqüências disso em termos de erros de cálculo e
instabilidade na obtenção das soluções numéricas.
Por fim, deixa-se a mensagem de que o "analista numérico" deve estar sempre atento a todos os
aspectos abordados neste capítulo quando estiver avaliando os resultados de qualquer processo de
solução utilizando métodos numéricos. Isto é valido para todos os capítulos a serem visto daqui para
frente.
1. O CÁLCULO NUMÉRICO
1.1. Resolução de Problemas: Modelagem Físico-Matemática
Ao longo dos tempos, o Homem tem sistematicamente procurado compreender a natureza,
tentando identificar formas de descrevê-la e, por conseguinte, prevê-la. Essa tentativa leva a
construção de modelos físicos para caracterizar os diversos problemas e os fenômenos associados.
Para solução desses problemas, modelos matemáticos são gerados baseados na essência do
comportamento real capturado por esses modelos físicos, fazendo-se uso, para tanto, de teorias
físicas, químicas, econômicas, etc. Genericamente, pode-se dizer que, quanto melhor a
caracterização do problema real através de um modelo físico-matemático, melhor é qualidade da
solução encontrada, entendo como qualidade a proximidade com a solução real. A Figura 1 resume
esse processo. É possível também se ter diferentes modelagens para um mesmo problema
dependendo do enfoque desejado. Com freqüência isto é conseguido com simplificações
introduzidas nos modelos para tornar sua solução mais fácil ou viável. Neste caso, têm-se modelos
físico-matemáticos simplificados.
% % %
& ! "
# $#!
De posse do modelo matemático, o passo seguinte é resolvê-lo. Entretanto, apenas parte dos
problemas possui as chamadas soluções analíticas (ou "exatas"). Na verdade, a maioria deles são
resolvidos através do uso de métodos numéricos aproximados, sendo que essa aproximação pode
ser controlada conforme a necessidade, de tal forma que o resultado final termina por ser tão bom
ou, pelo menos, tão eficaz quanto a solução exata. A seguir é apresentado um exemplo de solução
de um problema nos moldes do exposto neste item.
1
Entende-se aqui como solução analítica aquela em que se obtém uma fórmula explícita para a solução do problema,
como é o caso da fórmula de Bhaskara para solução de uma equação de segundo grau. A Solução numérica é utilizada
quando a solução analítica não é possível.
2
D de Drag, que é o termo técnico, em inglês, para arrasto - força de resistência do ar.
3
No item 3.2 Precisão e Exatidão - O Épsilon de Máquina define-se o que vêm a ser exatidão e precisão, pois não são a
mesma coisa.
Se for desejada apenas uma estimativa, é possível desconsiderar a resistência do ar, pois a sua
influência para corpos aerodinâmicos é pequena, e a diferença no resultado final para o alcance e
tempo de vôo não será significativa, conforme sugerido pela Figura 3. Se, entretanto, for necessário
montar uma tabela de alcance para vários ângulos e velocidades de lançamento com a melhor
precisão possível (como em uma tabela de tiro para um canhão), a resistência do ar não pode ser
negligenciada no cálculo.
! )* +
(
, ≠-.
, /-.
5 6 '
+0 1
2 3% 4
5 60 1 7 80 9 1 4
A escolha de um enfoque ou outro tem impacto no modelo matemático a ser resolvido, e em como
a solução é obtida. É o que será visto a seguir.
4 2 2
ax = dvx/dt = d x/dt ; isto é, a aceleração é a derivada primeira da velocidade, e derivada segunda do deslocamento,
calculados na direção x. Para a direção y, o raciocínio é análogo.
1 2
y=- gt + v0·sen α0·t (2b)
2
Essas equações já são bem conhecidas da Física, e de sua solução podem ser obtidos os
resultados procurados6, que são:
2 2
R= v0 ·cos α0·sin α0 (3a)
g
2
tR = v0·sinα0 (3b)
g
d2 y dv y
= (6b)
dt 2 dt
vy
sen α = (7a)
2 2
vx + vy
vx
cos α = (7b)
2 2
vx + vy
Substituindo as relações (5), (6) e (7) no sistema de equações (4), obtém-se o seguinte:
5
São equações diferenciais, cuja forma de solução não vem ao caso agora. Considerou-se, para t = 0, x = y = 0,
vx = v0·cosα e vy = v0·sinα.
6
O tempo para o alcance R é uma das soluções da equação em y quando y = 0.
dv x K 2 2
= - ·vx· v x + v y = f1(t, vx, vy) (8a)
dt m
dv y K 2 2
= -g - ·vy· v x + v y = f2(t, vx, vy) (8b)
dt m
Note que as equações finais deixaram de ser "simpáticas", ou seja, não possuem um tratamento
analítico simples e/ou possível. A pergunta natural agora é a seguinte: como resolver isto?
Neste caso, as funções (derivadas) envolvem as duas variáveis dependentes, vx e vy, além da
variável independente t. Não há solução analítica para esse tipo de problema. A única saída é utilizar
métodos numéricos para integração desse sistema de equações diferenciais. Isso será um dos
tópicos deste curso.
∆ / :; " <
9 8
−: + ∆ −: − ∆ A
∆ ? -+ '> = = '; =
; ; 0 % +
: 5B
∆ / -+ '> = '; = − 6
;
B
−: −∆ −: −∆ 1 % 4
∆ @ -+ '> = + = '; = −
; ; ; ;
#$ %
&" !"
0,'.
50 % 8 6
, '4+0,'. / ' C D ' E '; DC.
ξ
A 0 % 0,'. 9
ξ ξ '
1 ξ F 0,ξ./-4
"& *"
$
"& () *"
$
+ ,# ) -. ,/01) 0 % ,# ) ,) 12 3) 0 % &,'.
&,'. 0% 0% 1
>4C ;4I 1 F F 8
&,'.+ 1 )
8 &,'.+ 1 ) 8*'
;4- I4<
8 *' 8 M 1
;4C I4L 8 M 1 1 0%
# 8 0 %
I4- C4- 8% 7 0,'.7 & %
I4C <4G &% 9
9 , M %
<4- H4L , M % 0,'.+ 1 F .4
F .4
<4C L4;
Figura 7: Ajuste de curvas - aproximação de uma função f(x), tabelada ou analítica, por outra função g(x)
escolhida.
>4C ;4I
;4C I4L
;4L 0,;4L./J
I4- C4- 8 %N 8,'.
45 ≈ 6 45 8 8
I4C <4G 8% F 0
B : 4
<4- H4L
<4C L4;
45
#87 # . #90,'. #
'
: '#
≈ > E ; E I E < E C
como o algarismo 6 já é duvidoso (poderia ser 5 ou 7), então o algarismo 2 não teria significado, ou
seja, não seria significativo. Melhor falando, não teria sentido colocar um segundo duvidoso: com a
presença do 2, o 6 teria conotação de algarismo exato, o que, nesse caso, ele não é.
A B
Por outro lado, se fosse utilizada uma régua graduada em mm, como a da Figura 12, o
comprimento poderia ser avaliado em algo como 3.63 cm, pois o instrumento permite isso: 3 e 6
seriam exatos, e o algarismo 3 seria o duvidoso, uma vez que sua obtenção dependeria de uma
apreciação do observador.
Assim sendo, um instrumento com menor divisão poderá medir a mesma grandeza com um
número de algarismos significativos maior. Evidentemente, existem vários métodos para mensurar
uma grandeza e obter uma precisão melhor, o que leva a medição mais próxima do verdadeiro valor
da grandeza. Dessa forma, quando for efetuada uma medição qualquer, deve-se apresentar o valor
da grandeza com todos seus algarismos significativos, incluindo o último, que é duvidoso.
Pode-se apresentar uma grandeza de várias formas, desde que não seja alterado o número de
seus algarismos significativos. Seja o exemplo onde um estudante determinou a massa de um
objeto, obtendo m = 0.02130 kg. Esta grandeza foi obtida com 4 algarismos significativos. Observe
que o zero à direita é significativo (surgiu de uma avaliação), ao passo que os da esquerda não.
Assim, é possível escrever o valor da massa das seguintes formas: 2.130·10-2 Kg, 2.130·10 g,
21.30 g ou 21.30·103 kg (ponto flutuante, mas com os mesmos algarismos significativos).
Observe que em todas as formas apresentadas acima a grandeza continuou com 4 algarismos
significativos. Qualquer representação da mesma que altere o número de algarismos significativos é
incorreta (em termos de medição experimental) como, por exemplo, 2.13·10-2 Kg. Neste caso, o
algarismo duvidoso passou a ser o 3, e a grandeza passou a ter 3 algarismos significativos.
Utilizando esta representação é possível agora compreender que, fisicamente, 5.0 m/s não é
idêntico a 5.00 m/s. Além disso, como uma grandeza não deve apresentar mais do que um algarismo
duvidoso, torna-se desnecessário apresentar algarismos que não possuam qualquer significado
físico, ou não significativos.
Entretanto, nos exemplos discutidos até agora só mencionamos números com ponto decimal. E
no caso de números sem ponto decimal ("inteiros"), como o número 1000: quantos algarismos
significativos ele possui? E 1001? Vejamos, portanto, as regras para determinar os algarismos
significativos de um número.
Algumas Regras
Uma vez entendido o que são os algarismos significativos em um número, e que os números que
forem tratados de agora em diante tem apenas um algarismo significativo duvidoso, as seguintes
regras são úteis para identificar a quantidade de algarismos significativos.
Regra 1 - Números COM ponto decimal. Todos os algarismos, desde o primeiro mais à esquerda
diferente de zero até o último mais à direita (diferente ou não de zero), são considerados
significativos. Exemplos:
• 4687. ou 4.687·103: 4 algarismos significativos
• 34.732 ou 3.4732·101: 5 algarismos significativos
• 3.9800: 5 algarismos significativos
• 0.04 ou 4·10-2: 1 algarismo significativo
• 0.00000875 ou 8.75·10-6: 3 algarismos significativos
• 0.0040 ou 4.0·10-3: 2 algarismos significativos
Regra 2 - Números SEM ponto decimal. Todos os algarismos, desde o primeiro mais à esquerda
diferente de zero até o último mais à direita diferente de zero, são considerados significativos.
Exemplos:
• 1000 ou 1·103: 1 algarismo significativo
• 1001 ou 1.001·103: 4 algarismos significativos
• 2300000 ou 2.3·106: 2 algarismos significativos
• 2300010 ou 2.30001·106: 6 algarismos significativos
Operações Aritméticas
Para saber qual a precisão a ser considerada no resultado do cálculo envolvendo números com
diferentes quantidades de algarismos significativos, é preciso saber como realizar estes cálculos.
Para isto, basta apenas aplicar algumas regras para determinação da quantidade de algarismos
significativos a serem considerados no resultado de cada uma das quatro operações aritméticas
básicas: adição, subtração, multiplicação e divisão - Figura 13.
0 6 8
94 5 :4 <; 8 49 8 8 49
&
9 : 9
&%0 1
0 6
Adição e Subtração
Quando dois ou mais números são somados ou subtraídos, as posições dos últimos algarismos
significativos de cada número devem ser comparadas em relação à posição do ponto decimal.
Aquele que estiver mais a esquerda irá definir a posição do último algarismo significativo do
resultado - Figura 15.
7
Estratégia de arredondamento: sejam ...XY os últimos algarismos de um número que deverá ser escrito até a posição
referente ao algarismo X. Se 0<Y<4, então X permanece (1.32 → 1.3; 342 → 340); se 5≤Y<9, então X é substituído por
(X+1) (1.37 → 1.4; 347 → 350). Existe outra forma de arredondamento que, se 5<Y<9, então X é substituído por (X+1), mas
se Y=5, então X é feito par (1.25 → 1.2; 1.35 → 1.4); não utilizaremos esta forma aqui.
0 6 8 0 6
84 4 9; 4 84 ; 45 8 ; ? 94: 8 : 45 8 ;
84 45 8 ;
? ;
4 9; 4 9: 8
4 458; 8 ;
84 ;
45 8 ;
84 ;
b) (2.3212 + 43.721)·3.146/2.11 =
Observação
A discussão feita neste item vale apenas para números derivados de medições, que tem limitação de
precisão. Fora esta situação, os números podem ser considerados exatos, e neste caso 2010 não
pode ser nem 2000, nem 2020: é 2010 mesmo!
Entretanto, os computadores têm limite de memória e, portanto, limite de precisão. Dessa forma,
conhecer a quantidade de significativos numa representação e, principalmente, a forma como as
operações aritméticas são realizadas (aritmética de ponto-flutuante, a ser vista mais adiante) é
importante para o entendimento da propagação de erros no cálculo numérico, e de como fazer para
evitá-la.
A discussão deste item vale para qualquer base (B ≥ 2): em todas elas é possível a representação
em ponto fixo ou em ponto flutuante.
48 8@ 8 8 8 48@ 8 ?8 4 8 8@ 8
48 8@ 8 8 8 48@ 8 ?8 4 8 8@ 8 84 8
,I . ,Q .
,; . ,< . ,L. ,G .
5 ,>. 8 ,;.
,> . 8 9 ; < ,>- .
=
,C . ,H .
A R
: &%98 &
%0 R 7
:% 95% 68
B %
8 4
95
% 64
8
Talvez porque tenhamos nas mãos dez dedos no total: quem já não os usou para facilitar a contagem de alguma coisa?
Para alguns personagens dos quadrinhos, que aparecem com 4 dedos em cada mão, provavelmente a base 8 (octal) fosse
a mais natural.
a) (1101.011)2 =
b) (57.15)8 =
c) (A2.F1)16 =
d) (10.29)10 =
Como será visto no próximo item, qualquer informação é armazenada no computador na forma
binária. Dessa forma, no caso dos números, sempre há uma conversão de base - da decimal para a
binária - para que esse armazenamento seja possível. Para entender como isso é feito, será visto
como é realizada esta conversão através de um pequeno exemplo.
Conversão da parte inteira: Conversão da parte fracionária: multiplicações sucessivas por dois
múltiplas divisões inteiras por dois (B = 2), tomando como dígito a parte inteira do resultado da
(B = 2) até que o resultado seja multiplicação, e a parte fracionária desse resultado é utilizado para o
zero; em cada divisão, o resto cálculo do próximo dígito da mesma forma, até que a parte fracionária
(Ni mod B) é o dígito di. da multiplicação seja zero.
∴ (175.7265625)10 ↔ (10101111.1011101)2
Tabela 1: Conversão de um número decimal para a representação binária.
Seja a conversão do número 175.7265625 para a base 2. Esse número convertido pode ser
representado genericamente pela expressão dn dn-1 ·· d3 d2 d1 d0 . d-1 d-2 d-3 ·· d-m+1 d-m, onde di,
i = -m,..,n, é um dígito binário, valendo, portanto, 0 ou 1. Na Tabela 1 é mostrado o processo de
conversão. Note que o mesmo processo poderia ser utilizado para obter a representação em outras
bases, como na base octal ou na base hexadecimal: basta dividir/multiplicar por oito ou dezesseis,
9
Conjunto dos números inteiros.
R ← F*B
N 0 ← INT(N10)
N 0 corresponde a N i
N 1 corresponde a N i+1 R>0
N 1 ← N 0 div B F NB
e
| i | ≤ DAV
di ← N 0 mod B V
A função Str converte INT(R) =
di ← INT(R)
um número em texto parte inteira
NB ← Str(di)
numérico. de R Fim
F F V
N1 > 0 i = -1
V NB ← NB + “.”
i ←i+ 1
N 0 ← N1 NB ← NB + Str(d i)
N 1 ← N 0 div B i ←i-1
di ← N 0 mod B F ← FRAC(R)
NB ← Str(di) + NB R ← F*B
Figura 19: Algoritmo de conversão de um número decimal para uma base B qualquer (B≠10, B ≥ 2).
1 =d1 2 =d-2
2 =d2 3 =d-3
3 =d3 4 =d-4
4 =d4 5 =d-5
5 =d5 6 =d-6
6 =d6 7 =d-7
7 =d7 8 =d-8
8 =d8 9 =d-9
9 =d9 10 =d-10
Como um único bit é insuficiente para representar informações mais complexas, eles são
agrupados e combinados. Num primeiro agrupamento, eles são reunidos em conjuntos de oito,
recebendo a denominação de byte (8 bits). Quando nos referimos às informações armazenadas em
um computador utilizamos, portanto, o termo byte. Tendo em vista que a unidade byte é
consideravelmente pequena quando indicamos valores mais extensos, utilizamos múltiplos do byte.
A Figura 20 ilustra o exposto nesse parágrafo.
MÚLTIPLOS DE UM BYTE:
:(
Figura 20: A informação
1 Kilobyte = 1 Kb = 1024 bytes : básica do computador é o
bit, que pode ser agrupado
1 Megabyte = 1 Mb = 1024 Kb
em bytes (= 8 bits).
8 8 8
1 Gigabyte = 1 Gb = 1024 Mb
Portanto, é "natural" para o computador trabalhar com a representação dita binária, ou na base
B = 2, ou em outra qualquer derivada da binária, como a octal (B = 8 = 23) ou a hexadecimal
(B = 16 = 24). Assim sendo, o número binário 1001.101 representa o seguinte número na base
decimal:
1·23 + 0·22 + 0·21 + 1·20 + 1·2-1 + 0·2-2 + 1·2-3 = 9.625
2.3.2. Normalização
Os conceitos de ponto flutuante, algarismos significativos e de sistemas de numeração, vistos
anteriormente, serão úteis agora no entendimento do que significa a representação normalizada dos
números no computador.
Para representar internamente os números, os computadores utilizam a seguinte normalização10:
± 0 . d1 d2 ... dt · Be
onde di ∈ Ζ, d1 ≠ 0, 0 ≤ di < B, i = 1, 2, ...,t e m ≤ e ≤ M.
O termo 0. d1 d2 ... dt é denominado mantissa, B é a base, e o expoente, m o limite inferior do
expoente, M o limite superior do expoente e t o número de algarismos significativos. Essa é a
chamada representação em ponto flutuante na base B com t algarismos significativos. O objetivo da
normalização é aumentar a exatidão dos números armazenados eliminando os zeros à esquerda na
mantissa (não significativos) depois do ponto decimal, considerando, assim, o máximo de algarismos
significativos. Isso é feito para otimizar o uso da memória do computador.
Computador B t m M tdecimal
IBM/360 16 6 -64 63 7
IBM/370 16 14 -64 63 16 Tabela 2: sistemas de
Burroughs B5500 8 13 -51 77 11 representação em
Burroughs B6700 8 13 -63 63 11 ponto flutuante para
Hewlett-Packard 45 10 10 -98 100 10 alguns computadores
mais antigos.
PDP-11 2 24 -128 127 7
Texas SR-5X 10 12 -98 100 12
Quartzil QI 800 2 24 -127 127 7
10
Note que se trata de uma representação em ponto flutuante (ver item 2.2.2).
Na Tabela 2 tem-se exemplos dos sistemas de representação para computadores mais antigos.
Atualmente as linguagens de programação permitem definir vários tipos de números reais, cada tipo
com um número de significativos e expoentes específicos para a sua representação (ver Tabela 5),
sempre relacionados com a quantidade de memória (bytes) reservados para armazená-los.
Como se pode notar na Tabela 2, muitos computadores tem seu sistemas de representação
indicados em bases que não a decimal. Para se avaliar a precisão (ver item 0, página 23) de um
sistema de representação é preciso determinar o número de casas decimais exatas da mantissa, e
isto pode ser estimado através do seguinte cálculo11 (última coluna da Tabela 2):
tdecimal = INT(log10(B-t)) (9)
O valor B-t é uma aproximação para o menor valor representável pela mantissa quando o
expoente da base é zero. Numa máquina com B = 2 e t = 10, a precisão da mantissa é da ordem
2-10 ≈ 10-3. Logo, o número de dígitos significativos decimais representáveis é 3.
1
n = 0.d1d2 ·10 , n ∈ [1.0, 10) 0.10 ·10
1
0.11 ·10
1
··· 0.19 ·10
1
1 1 1
0.20 ·10 0.21 ·10 ··· 0.29 ·10
: : : :
1 1 1
0.90 ·10 0.91 ·10 ··· 0.99 ·10
Ou seja, qualquer que seja o computador, a representação dos números na sua memória limitada
sempre será discreta, conforme ilustrado na Figura 22.
11
A função INT(X) retorna a parte inteira de X. Exemplo: INT(3.12) = 3.
%S
"∞ ∞
-
%S $ 6 &
M
% '
-
Um outro exemplo irá ilustrar que, além da representação ser discreta, a distribuição dos números
representáveis não é uniforme. Seja o caso onde t = 2, B = 2, m = -1 e M = 2. Como os números são
normalizados, os valores diferentes de zero serão da forma ±0.10 2e ou ±0.11 2e, -1 ≤ e ≤ 2. Assim
sendo, o universo de números (não nulos positivos) representáveis neste caso é mostrado na
Tabela 3, colocado graficamente também na Figura 23.
> I > I I
- > ; I
< Q ; < ;
Note que o conceito de existir sempre um número real entre outros dois está longe de ser válido
para os números representados em ponto flutuante com t significativos.
Quando um número é muito grande (como 4 na representação em questão, como o resultado da
operação de multiplicação de 2 por 2), ele não pode ser representado internamente no computador.
Nessa situação tem-se o que se denomina overflow (estouro de capacidade). Quando uma operação
qualquer resulta em um número muito pequeno para ser representado (como 1/8 = 0.125), tem-se o
underflow - Figura 24. O resultado da operação geralmente é um aviso de erro para o overflow; o
underflow pode ser tratado, por exemplo, atribuindo-se como resultado para a operação o valor zero.
Mas tudo isto dependerá do software/computador utilizado.
Mas esta limitação de representação tem algum impacto no cálculo numérico realizado no
computador?
Com certeza! No exemplo do item 3.4.2 Instabilidade dos Algoritmos, mais adiante, será possível
ver o impacto disso num cálculo extremamente simples: a solução de uma equação de 2o grau.
/ A" )C B / A" )C B
/ A" 3$ B
> >
"I "; "> − - > ; I
< <
Figura 24: Valores muito grandes, ou muito pequenos (exceto o zero), em módulo também não podem
ser representados no computador.
Tipo real do C t m M
Tabela 5: Parâmetros da normalização dos
float 7 -38 38 tipos reais da linguagem C na base 10
double 15 -308 308 (B = 10), conforme norma IEEE-754 .
[6]
I; : / < :( , 8 0 !. 0 6 >
%S +I4C
->------->>---------------------
%S +≅ I4<T
>-IQ
% ,;I : . ->>>>>>>->>>>>>>>>>>>>>>>>>>>>>>
'8 % ,Q : .
% %S ,> : . % LC< %& %U :
Figura 25: Representação de números em ponto flutuante com precisão simples, conforme a
norma IEEE-754.
Não é objetivo entrar em maiores detalhes do que significa essa representação, mas o estudante
mais curioso pode consultar a referência indicada na própria Figura 25.
12
Para o arredondamento usaremos aqui a seguinte estratégia: seja ...XY os últimos algarismos de um número que deverá
ser escrito até a posição referente ao algarismo X. Se 0<Y<4, então X permanece (1.32 → 1.3; 342 → 340); se 5≤Y<9,
então X é substituído por (X+1) (1.37 → 1.4; 347 → 350). Na nota de rodapé 7, na página 10, uma outra estratégia é
apresentada, mas a deixaremos de lado.
0.123
e) · 84.9 =
7.97
0.123 ⋅ 84.9
f) =
7.97
g) 15.9 · (4.99 + 0.02) =
8 8 8
%' %' '
Para se ter uma idéia da precisão de uma máquina, calcula-se um parâmetro denominado épsilon
de máquina, ε, que é o menor valor em ponto flutuante tal que:
1+ε>1
O valor de ε pode ser estimado através de pequenos programas, como mostrado na Figura 27,
onde o ε foi calculado para a planilha Excel em um computador pessoal comum. Os tipos reais do
Excel de precisão simples (single) e dupla (double) utilizam espaço de armazenamento diferente no
computador, e por isso os resultados são distintos.
εsingle ≈ 6.0·10-8
εdouble ≈ 1.1·10-16
Function epsilon_s() As Single Function epsilon_d() As Double
Dim eps As Single Dim eps As Double
eps = 1 eps = 1
While (eps + 1 > 1) While (eps + 1 > 1)
eps = eps / 2 eps = eps / 2
Wend Wend
epsilon_s = eps epsilon_d = eps
End Function End Function
Figura 27: cálculo do épsilon de máquina da planilha Excel para precisão simples (single) e dupla
(double), "rodando" em um PC com processador Pentium.
3.3. Erros
3.3.1. Medição do Erro: Erro Absoluto e Erro Relativo
Seja x um valor exato, e ' uma aproximação para esse valor. Definem-se os seguintes erros:
x−x
Erro absoluto: EA = x − x Erro relativo: ER=
x
Os erros relativos são mais utilizados que os erros absolutos. É mais significativo dizer que o erro
relativo é pequeno ou grande de acordo com a comparação com 1.0, pois quando ER = 1.0 tem-se
que o erro absoluto é do mesmo tamanho que o número que está sendo aproximado.
Exemplo 2: Cálculo de erros (1).
Foi realizado o cálculo aproximado, através de um método numérico, do valor de uma grandeza z,
obtendo =1.231. O valor exato é z = 1.118. Qual é o erro absoluto e o erro relativo?
Solução
Solução
Pela magnitude do erro relativo, não se pode dizer que =0.00004 é uma boa aproximação para
z = 0.00005.
Desta constatação percebe-se que algoritmos numéricos que envolvem subtração em algum
momento podem ter resultados completamente enganosos quando os operandos forem muito
próximos entre si. Denominado de cancelamento subtrativo em alguns livros, este tipo de fenômeno
é a maior fonte de erro no cálculo numérico, e pode ocasionar instabilidade nos algoritmos, como
será visto a seguir.
3.4. Instabilidade
3.4.1. O que é?
Problemas de instabilidade estão relacionados com a forma como o resultado da solução de um
problema é afetado quando algum parâmetro é alterado. Este parâmetro pode ser, por exemplo, um
dado de entrada, ou o coeficiente de uma equação. A instabilidade pode estar associada ao
algoritmo da solução do problema ("caminho da solução"), ou ao problema em si. Serão vistos
exemplos desses dois tipos a seguir.
−b− ∆ −b+ ∆
x1 = e x2 =
2a 2a
quando ∆ ≥ 0, onde ∆ = b2 - 4ac; ∆ denomina-se discriminante.
O trecho de um programa de computador que realiza esse cálculo, em FORTRAN13, é:
RAIZDISC = SQRT(B*B-4*A*C)
X1 = (-B-RAIZSDISC)/(2.*A) (A1)
X2 = (-B+RAIZSDISC)/(2.*A)
Vamos supor que tal programa seja executado em uma máquina onde os números são
representados por 5 algarismos significativos e seja utilizada aritmética de ponto-flutuante e
estratégia de arredondamento, com A = 1, C = 2 e B variando conforme mostrado na Tabela 9. Note
que o erro no cálculo de X2 é da ordem de 100% para B ≅ 1000. Ou seja, o algoritmo de Baskara
13
FORmula TRANslator; linguagem criada nos anos 60 e bastante utilizada até hoje em organizações de pesquisa, como a
NASA. Insuperável em cálculos matemáticos complexos.
implementado como acima é instável quando o valor de B é muito próximo do valor da raiz do
discriminante, RAIZDISC (∆1/2).
Essa perda de exatidão na solução da equação pode ser evitada de algumas maneiras. Uma das
mais simples é alterar o método levando em conta a seguinte relação entre as raízes [8]:
c
x1·x2 =
a
Utilizando essa relação, o método de solução pode ser mudado e gerar o seguinte conjunto de
instruções, onde a subtração de números muito próximos entre si (ver item 3.3.2) foi eliminada14:
RAIZDISC = SQRT(B*B-4*A*C)
IF (B.LT.0) THEN
X1 = (-B+RAIZDISC)/(2.*A)
(A2)
ELSE
X1 = (-B-RAIZDISC)/(2.*A)
X2 = (C/A)/X1
O programa para solução da equação de segundo grau utilizando o conjunto de instruções (A2),
aplicado à equação x2 + 1212.3x + 2 = 0 e rodando na mesma máquina, fornece como resultado
X1 = -1212.3 e X2 = -0.0016498. Esses são os valores arredondados da solução exata; ou seja, o
erro da ordem de 100% foi eliminado!
Desse exemplo pode-se tirar duas principais conclusões:
1) erros provenientes de arredondamento (ou truncamento), como o cancelamento subtrativo,
podem arruinar até mesmo um cálculo curto e simples;
2) uma simples alteração no método pode eliminar os efeitos adversos desses erros e a
instabilidade do algoritmo.
14
Em FORTRAN, (B.LT.0) significa (B<0), ou B "Less Than" 0.
r1 = 1.000 000 000 r10, r11 = 10.095 266 145 ± 0.643 500 904i
r2 = 2.000 000 000 r12, r13 = 11.793 633 881 ± 1.652 239 728i
r3 = 3.000 000 000 r14, r15 = 13.992 358 137 ± 2.518 830 070i
r4 = 4.000 000 000 r16, r17 = 16.730 737 466 ± 2.812 624 894i
r5 = 4.999 999 928 r18, r19 = 19.502 439 400 ± 1.940 330 347i
r6 = 6.000 006 944
r7 = 6.999 967 234
r8 = 8.007 267 603
r9 = 8.917 250 249
r20 = 20.846 908 101
O resultado obtido para a solução de p'(x) é completamente inesperado, pois para uma variação
insignificante de apenas um coeficiente do polinômio original p(x), houve grande mudanças nas
raízes. Um problema com este tipo de comportamento na sua solução é dito mal-condicionado.
Outra classe de problemas mal-condicionados está associada à solução de sistemas lineares de
equações onde o determinante da matriz dos coeficientes é próximo de zero. Para um sistema de
ordem dois, que representa duas retas no plano, isto significa duas retas quase paralelas: qualquer
variação na inclinação de uma delas implica num "passeio" muito grande da interseção entre elas,
que representa a solução do sistema.
Entrada de dados
Um fluxograma descreve o fluxo de controle de um
algoritmo através de setas indicando a seqüência de Saída de dados
ações ou tarefas (representadas por retângulos), pontos
Ação
de tomada de decisão (representados por losangos) e
laços de repetição (representados por hexágonos). O Repetição
fluxograma também é a maneira mais prática de
Alternativa
demonstrar o raciocínio empregado no desenvolvimento
de um programa. Na Figura 28 podem ser vistos os
blocos básicos utilizados na construção de um
Figura 28: blocos básicos do fluxograma.
fluxograma.
Para exemplificar o uso de fluxogramas para descrever algoritmos numéricos, a Figura 29 traz
duas versões do fluxograma utilizado para cálculo do número de Neper (e = 2,71828...). Estes
fluxogramas ilustram duas formas da estrutura de controle de repetição, que na maioria das
linguagens de programação correspondem aos comandos while e for.
Na Figura 30 um outro fluxograma exemplifica o uso das estruturas de seleção, ou alternativa, que
nas linguagens de programação corresponde ao comando if..then..else.
início
n início
início
e 0 n
a, b, c
k 0 e 0
F V a>bea>c F
n≥k para k de 0 até n
a V b>c F
V
e e + 1/fatorial(k)
e e + 1/fatorial(k) b c
k k+1 e
fim Fim
e
fim
Figura 29: Duas versões do algoritmo para cálculo do número Figura 30: Algoritmo que determina o
de Neper - e. O que muda são as estruturas de repetição. maior entre três números dados.
5. COMENTÁRIO FINAL
Os métodos numéricos que serão vistos nesse curso certamente foram desenvolvidos tendo em
mente os aspectos abordados nesse capítulo, especialmente no que tange a propagação de erros e
estabilidade dos algoritmos. Dessa forma, ao se resolver numericamente um problema sempre se
deve estar atento às limitações impostas pelo método numérico e pelo equipamento utilizado.
6. REFERÊNCIAS DO CAPÍTULO
[1] Humes, A. F. P. C et al.: "Noções de Cálculo Numérico", Makron Books do Brasil Editora Ltda.,
São Paulo, 1984.
[2] Marins, J. M. e Cláudio, D. M.: Cálculo Numérico Computacional", 3a edição, Editora Atlas S.A.,
São Paulo, 2000.
[3] Campos Fo, F. F.: "Algoritmo Numéricos", Livros Técnicos e Científicos Editora S.A., Rio de
Janeiro, 2001.
[4] Barros, L. C. et all.: "Cálculo Numérico (com aplicações)", 3a edição, Editora Harbra Ltda, São
Paulo, 1987.
[5] Halliday, D. e Resnick, R.: "Física: Mecânica, Acústica e Calor - Parte 1", Ao Livro Técnico S.A.,
Rio de Jameiro, 1966.
[6] IEEE Standard 754 Floating Point Numbers
(http://research.microsoft.com/~hollasch/cgindex/coding/ieeefloat.html)
[7] Rice, J.R.: "Numerical Methods, Software, and Analysis", McGraw-Hill Book Company, 1983.
[8] Bóscolo, A. e Castrucci, B.: "Matemática", Editora FTD S.A., São Paulo, 1972
7. EXERCÍCIOS DO CAPÍTULO
1. Converta os seguintes números binários para 7. Deseja-se calcular o seguinte somatório:
a forma decimal: 10 1
a) x = (101101)2 b) y = (110101011)2 S= k
k =1 2
c) z - (0.1101)2 d) w = (0.111111101)2
a) Represente cada termo da soma através da
2. Dado o número 2.47 na base 10, qual é a sua representação decimal exata e some.
representação exata na base 2 usando b) Represente cada termo da soma em ponto
8 algarismos significativos? Esta representação flutuante com 3 algarismos significativos.
é exata? Some da direita para a esquerda. Some da
esquerda para a direita. Algo estranho no
3. Represente os números que se seguem em resultado?
ponto flutuante com 5 algarismos significativos
usando a base 10. Se a representação não for
exata, dê as duas representações: truncada e
arredondada.
Exemplo:
Representação Representação
Número
truncada arrendondada
1 1
10/6 0.16666x10 0.16667x10
a) 2 b) π c) 100/7
d) 1/9 e) -1/7
4. Converta os números abaixo para as bases
binária, octal e hexadecimal. Use, no máximo,
dez algarismos após a vírgula.
a) 3.129 b) -12.989 c) 3.14159
5. Considere a representação normalizada em
ponto flutuante com 2 algarismos significativos,
na base 2 e com expoente variando entre -2 e 2.
Determine o conjunto de números assim
representáveis.