1 - Labspot

Propaganda
Técnicas Computacionais em Sistemas de
Energia Elétrica – EEL 6005
Notas de Aula
Junho de 2008
1. Operações em Computadores Digitais
1.1 Introdução
Uma das diferenças da ciência contemporânea comparada à ciência clássica é a
utilização maciça da simulação em computadores digitais.
Observação
Clássica
Teoria
Experimento
Contemporânea
Simulação
Elevada Demanda Computacional
Em diversas áreas do desenvolvimento humano, necessita-se de uma elevada
demanda computacional:
–
–
–
–
Áreas da Engenharia (Exemplos: desenvolvimento de bons produtos num curto
espaço de tempo e ao menor custo – indústria automobilística; planejamento e
operação de sistemas de energia elétrica de grande porte)
Áreas da Química, Mecânica e Física
Astrofísica e Cosmologia
Dinâmica dos fluídos e turbulências
–
–
–
–
Microeletrônica
Supercondutividade
Modelagem de estudos climáticos globais
Microbiologia
Os algoritmos para as simulações dos processos físicos são implementados em
computadores digitais, nos quais as operações individuais de soma, subtração,
multiplicação e divisão são realizadas com precisão aritmética finita, gerando erros ao
longo de suas execuções. Como é impossível monitorar cada operação, é necessário que
sejam feitas avaliações à priori sobre os efeitos dos erros nos resultados dos algoritmos.
Desta forma, é importante que se tenha um conhecimento razoável da aritmética de
precisão finita utilizada pelos computados, delimitando, se possível, os erros gerados.
Também é importante na simulação dos processos físicos fazer uma distinção entre
problemas mal-condicionados e algoritmos numericamente instáveis.
1.2 Erros
Em computação numérica, as quantidades são em geral aproximadas, assim, é
importante que se tenha uma medida de quão próximo uma quantidade está do valor
“exato”, ou seja , uma medida de exatidão de uma quantidade. É comum utilizar-se o erro
para quantizar esta aproximação.
Seja:
xˆ  aproximação para x
A exatidão da quantidade x̂ pode ser medida através do erro absoluto:
e A  x  xˆ
Será o erro absoluto uma boa medida?
Sejam os dois exemplos:
Caso 1
x  1,234
xˆ  1,233
x  xˆ  10 3
Caso 2
x  0,002
xˆ  0,001
x  xˆ  10 3
No caso 1, x̂ é uma boa aproximação para x , entretanto no caso 2, se x é uma
boa medida do tamanho da quantidade, x̂ não é uma boa aproximação para x . Neste caso o
erro absoluto não é uma boa medida para quantizar a exatidão.
Outra medida para a exatidão de uma quantidade é o erro relativo, definido
conforme a expressão:
eR 
x  xˆ
x
O erro relativo é útil, quando x é uma boa medida do tamanho da quantidade.
Para contornar o problema na definição do erro, foi definido uma medida mista
do erro, conforme a expressão:
em 
x  xˆ
1 x
O erro misto se comporta como o erro relativo quando x  1 e como erro
absoluto quando x  1 .
Como foi visto, o erro é uma forma de quantificar a exatidão de uma grandeza
aproximada. Em computação numérica, não devemos confundir exatidão com precisão de
uma grandeza. A exatidão está associado a quantificar a aproximação do valor computado
com o valor real. A precisão está associado ao número de dígitos com os quais uma
grandeza é representada em uma máquina. A precisão está associada à máquina utilizada
para a realização dos cálculos.
Seja o valor
2  1,413213562 considerado como “valor exato”.
Suponha que tenha-se os seguintes valores computados para
a) 1,4142
b) 1,41
2:
Qual o valor mais exato? Qual o valor mais preciso?
Pode-se observar que no caso a) a representação é feita por 5 (cinco) dígitos, portanto é
mais precisa que no caso b) cuja representação é através de 3 (três) dígitos. Para medir a
exatidão deve-se calcular o erro. Considerando o erro absoluto, observa-se também que a
representação do caso a) também é mais exata.
Suponha agora os seguintes valores computados para
a) 1,4149
b) 1,414
2:
Qual o valor mais exato? Qual o valor mais preciso?
Pode-se observar que no caso a) a representação é feita por 5 (cinco) dígitos, portanto é
mais precisa que no caso b) cuja representação é através de 4 (quatro) dígitos. Para medir a
exatidão deve-se calcular o erro. Considerando o erro absoluto, observa-se que neste caso a
letra b), embora menos precisa, ela é mais exata.
Adicionalmente ao erro, define-se o resíduo absoluto e o resíduo relativo. A
expressão do resíduo é muito útil no estudo de aritméticas finitas utilizadas por
computadores digitais.
O resíduo absoluto é definido por:
( x  xˆ )
O resíduo relativo é definido por:
( x  xˆ )
x
A partir do resíduo relativo, chega-se a uma expressão muito útil para o estudo
de aritméticas utilizadas em computadores digitais. Seja o resíduo relativo definido por  :
( x  xˆ )

x
Rearranjando a expressão acima, chega-se a:
xˆ  x(1   )
Pela interpretação desta expressão, pode-se observar que uma grandeza
computada é igual ao seu valor exato multiplicado por uma tolerância.
A definição do erro é em geral subjetiva, e um dos aspectos mais complexos da
computação numérica. Entretanto, devemos ter em mente que na engenharia o aspecto
crucial não é o valor exato, mas a ordem de grandeza.
Assim, pode-se dizer que x é de uma ordem de grandeza  , onde  é uma
potência de 10, se:
x   para
1    10
Exemplo: 0,0005  5 10 4 , portanto 0,0005 é de ordem 10 4 .
1.3 Fontes de Erros
A utilização da computação numérica em engenharia está associada a resolver
um problema físico. Em todo o processo para a solução desse problema físico teremos
fontes de erros.
Problema
Físico
Modelo
Matemático
Computação
Numérica
As possíveis fontes de erros podem ser divididas em:
Dados: medições e armazenamento
Modelagem
Construção do Modelo: simplificações
Computação Numérica
Arredondamentos
Truncamentos
A incerteza de dados é sempre uma possibilidade, quando se está trabalhando
com dados relativos a um problema real. Ela pode advir de erros de medição de quantidades
físicas, erros de armazenamento de dados no computador ou se os dados são originados
pela solução numérica de outro problema que já carregam erros.
Os erros de truncamento advém dos métodos numéricos originados a partir de
considerações de um número finito de termos de uma série, isto é, pelo truncamento de
uma série.
Os erros de arredondamento são conseqüências de se trabalhar com uma
aritmética de precisão finita.
Como a ênfase do curso é a computação numérica, será visto com maiores
detalhes os erros de arredondamento.
1.4 Representação de Números
No nosso cotidiano estamos acostumados a lidar com números na base 10,
entretanto, em computação numérica esta base pode ser diferente de 10. É o caso de
microcomputadores e estações de trabalho que utilizam a base 2, ou computadores de
grande porte da linha IBM que utilizam a base 16. Assim, é importante conhecer a
representação de números em bases diferentes da base decimal. A própria representação do
número em uma determinada base pode ser já uma fonte de erros. Uma representação exata
em uma base, não significa que tenha representação exata em uma outra base.
1.4.1 Fórmula Geral
Um número N qualquer pode ser descrito numa base  de acordo com a
seguinte expressão polinomial:
Parte Inteira
Parte Fracionária
N  a m  m  a m 1  m 1  ...  a1  1  a o  a 1  1  a  2  2  ...  a  n   n (1.1)
Onde: 0  a k  
Exemplos:
(0,347) 10  3 10 2  4 101  7 10 0
(1101) 2  1 2 3  1 2 2  0  21  1 2 0
Observe que os algarismos que representam o número na base  são os
coeficientes da expressão polinomial. É importante também observar que o deslocamento
da vírgula no número é realizado pela multiplicação do número pela correspondente
potência da base do número.
Exemplos:
(0,2345) 10  (23,45 10 2 ) 10
(0,1101) 2  (11,01 2 2 ) 2
1.4.2 Conversão de Bases
a) Base 
Base Decimal
Levar os coeficientes á expressão polinomial geral e calcular o valor. Observe
que a solução numérica da expressão polinomial sempre resulta num número N na base
decimal.
Exemplo:
(0,111) 2  1 2 1  1 2 2  1 2 3  (0,875) 10
b) Decimal
Base 
A conversão da base decimal para uma base  qualquer se dá em duas etapas,
numa primeira etapa se converte a parte inteira do número e numa segunda etapa a parte
fracionária do número.
b.1) Parte Inteira
Dividir o número sucessivamente pela base  até que o último quociente seja
maior que zero e menor que  . O número é representado pelo último quociente e os restos
na ordem inversa.
Exemplo:
(13)10  (1101) 2
13
2
1
6
2
0
3
2
1
1
b.2) Parte Fracionária
Multiplicar sucessivamente a parte fracionária por  até que a mesma seja zero
se a representação for exata. No caso da representação não ser exata, haverá uma sequência
infinita na parte fracionária. O número é representado pelas partes inteiras resultantes.
Exemplo:
(0,875)10  (0,111) 2
0,875
0,750
0,500
2
1,750
2
1,500
2
1,000
A representação de (0,1) 10 não possui representação exata na base 2.
(0,10)10  (0,00011001100...) 2
Em virtude da representação não ser exata, a operação seguinte não terá resultado exato na
utilização de microcomputadores.
100
 0,1  9,9999999........
i 1
1.5 Aritmética de Ponto Flutuante
A representação em aritmética de ponto flutuante é muito utilizada na
computação digital. Um exemplo é a caso das calculadoras científicas.
Exemplo: 2,597 –03.
Este número representa: 2,597 10 3 .
A principal vantagem da representação em ponto flutuante é que ela pode
representar uma grande faixa de números se comparada a representação de ponto fixo.
Seja uma representação com 6 (seis) dígitos:
a) utilizando representação de ponto fixo.
O maior número representável = 9,99999  10
O menor número representável = 0,00001  10 5
b) utilizando representação com ponto flutuante, aloca-se dois dos seis dígitos para
representar a potência de 10.
O maior número representável = 9,999 10 99 .
O menor número representável = 0,00110 99 .
A representação em ponto flutuante permite representar uma faixa muito maior
de números. O preço a ser pago é que esta representação tem quatro dígitos de precisão, em
oposição à representação por ponto fixo que possui 6 dígitos de precisão.
Definição:
Um sistema de ponto flutuante F   é um subconjunto dos números reais
cujos elementos tem a forma:
y   m   e t
onde:
  - base (binária, decimal, hexadecimal e etc..);
 t - precisão (número de algarismos da mantissa - m);
 e - expoente com limites ( emin  e  emax ).
Pode-se observar que uma aritmética de ponto flutuante F é caracterizada por
quatro números inteiros: F(  , t , emin , emax ).
A mantissa (m) possui representação inteira nesta formulação e assume os
valores: 0  m   t  1 .
A fim de assegurar representação única para cada y  F , faz-se uma
normalização no sistema de forma que m   t 1 quando y  0 .
O intervalo de números diferentes de zero e normalizados em um sistema de
ponto flutuante é dado por:
 emin 1  y   emax (1   t )
Uma outra maneira de apresentar-se uma aritmética de ponto flutuante é dada
por:
y  (
d1

1

d2

2

d3

2
 ... 
dt

t
)  e  (.d1d 2 d 3 ...d t )  e
Onde 0  d i   , i  1,..., t e para y ser normalizado, d1  0 para y  0 . Nesta
representação a mantissa é fracionária, na primeira, a mantissa é inteira.
Exemplo de uma aritmética de ponto flutuante com   2, t  3, emin  1 e emax  3 .
Mantissa Inteira
1
0
0
1
0
1
Expoentes
2 ( e  3)
1
1
0
1
1
1
para
e  1, 0, 2 e 3
Considerando apenas a parte positiva, tem-se os seguintes números: 0; 0,25;
0,3125; 0,4375; 0,5; 0,625; 0,750; 0,875; 1,0; 1,25; 1,5; 1,75; 2,0; 2,5; 3,0; 3,5; 4,0; 5,0;
6,0; 7,0, que podem ser representados na reta numerada:
0
0,5
1,0
2,0
3,0
4,0
5,0
6,0
7,0
Observe que os números em uma aritmética de ponto flutuante não são
igualmente espaçados. Cada número na aritmética representa um intervalo de números
reais.
O número total de elementos de uma aritmética de ponto flutuante é dado por:
numero de elementos  2(   1)  t 1 (e max  e min  1)  1
(1.2)
A Tabela 1.1 mostra os parâmetros de aritméticas de ponto flutuante utilizadas em alguns
computadores digitais.
Tabela 1.1 – Parâmetros de Aritméticas de Ponto Flutuante
t
Máquina e Aritmética

e max
emin
u
Cray-1 Precisão Simples
Cray-1 Precisão Dupla
DEC VAX formato G Dupla
DEC VAX formato D Dupla
Calculadoras HP 28 e 48G
IBM 3090 Precisão Simples
IBM 3090 Precisão Dupla
4  10 15
110 29
110 16
110 17
5  10 12
5  10 07
110 16
2
2
2
2
10
16
16
48
96
53
56
12
6
14
-8192
-8192
-1023
-127
-499
-64
-64
8191
8191
1023
127
499
63
63
IBM 3090 Precisão Extendida
IEEE Precisão Simples
IEEE Precisão Dupla
IEEE Precisão Simples
PDP 11
16
2
2
2
2
28
24
53
64
24
-64
-125
-1021
-16381
-128
63
127
1023
16384
127
2  10 33
4  10 15
6  10 8
5  10 20
1,19 10 7
Control Data 6600
2
48
-976
1070
7,11  10 15
1.5.1 Overflow e Underflow
O conjunto de números de números reais é infinito, entretanto, a sua
representação em um sistema de ponto flutuante é limitada, pois é um sistema finito, o que
não a representação exata da totalidade dos números reais.
Essa limitação tem duas origens:
 a faixa dos expoentes é limitada ( emin  e  emax );
 a mantissa pode representar um número finito de números (  t 1  m   t 1 )
A primeira limitação leva aos fenômenos chamados de “overflow” e
“underflow”. A Segunda leva aos erros de arredondamentos, que será visto na próxima
seção.
Sempre que uma operação aritmética produz um número com expoente superior
ao expoente máximo, tem-se o fenômeno de “overflow”. De forma similar, operações que
resultem em expoente inferior ao expoente mínimo tem-se o fenômeno de “underflow”.
No caso do exemplo dado, pode-se observar qual as regiões que ocorrem o
overflow e o underflow. Neste caso, considera-se a parte positiva e negativa da aritmética
do exemplo.
-7,0
Overflow
-0,25
0
0,25
Underflow
7,0
Oveflow
Observe que, se o expoente for maior que 3 ou menor que -3, não tem-se
representação no conjunto formado pela aritmética de ponto flutuante. No primeiro caso,
tem-se o overflow, no segundo caso, tem-se o underflow.
Quando da ocorrência de overflow ou underflow, a máquina realiza alguma
ação. Cada máquina responde de alguma forma. As principais ações são:
a) Pára o cálculo
Overflow
b) Retorna um número que representa o infinito da máquina (IEEE)
a) Pára o cálculo
Underflow
b) Arredonda para zero
c) Arredonda para um número subnormal
As duas maneiras que a máquina trata o overflow possuem aspectos
indesejáveis. No primeiro caso não possui resposta. No segundo caso também não é muito
útil, exceto para interpretações físicas ou aplicações específicas, pois não apresenta uma
resposta numérica.
No caso do underflow, o primeiro caso é indesejado. Os segundo e terceiro
casos resultam em uma resposta útil, mas existe o perigo de em uma operação seguinte
surgir um overflow.
Deve-se procurar evitar overflow e underflow em implementação
computacionais. Uma maneira prática de evitar o overflow é o escalonamento, que pode
também evitar o underflow.
Exemplo:
c  a2  b2
Suponha uma máquina com 10 dígitos decimais com expoentes [-99,99]
a  b  10 60
a 2 e b 2 ambos estão em overflow e a computação pode ser parada, mesmo que o
resultado seja 2 10 60 e seja representável na aritmética de ponto flutuante.
Similarmente:
a  b  10 60
Se for arredondado para zero a resposta será c=0, o que é um resultado pobre considerando
que a resposta é 2  10 60 .
Pode-se evitar o overflow, utilizando um escalonamento:
s a  b
2
a
b
cs    
s
s
2
Esta formulação também evita o underflow.
Números Subnormais
Aritméticas de ponto flutuantes mais modernas, como é o caso do IEEE,
adotam os chamados números subnormais para melhorar as aproximações nos casos de
underflow. Neste caso fazem parte da aritmética de ponto flutuante os números formados
com a mantissa não normalizada e o mínimo expoente. No caso do exemplo dado tem-se
um acréscimo de números na aritmética.
0
1
1
 2 1  0,1875
0
1
0
 2 1  0,125
0
0
1
 2 1  0,0625
Aritmética IEEE – Exceções e Resultados Padrões
Tipo
Operação Inválida
Exemplo
0 / 0, 0  ,
1
Overflow
Divisão por Zero
Underflow
Inexatidão
fl( x o y )  ( x o y )
Resultado
NAN


Arredondamento
números subnormais
Arredondamento
resultado
par
do
1.5.2 Erros de Arredondamentos
O comprimento de uma palavra é fixo, o que impõe que a maioria dos números
não possui representação exata em um sistema de ponto flutuante.
Como exemplo, seja a raiz quadrada de 7:
7  2,6457513.......
Seja um computador com base decimal de 5 dígitos. Dígitos além do quarto
decimal devem ser descartados. Tem-se dois modos de aproximação:
a) arredondamento
2,6458
b) chopping (truncamento)
2,6457
Como pode-se observar, em qualquer das duas aproximações, tem-se um erro
na representação. É importante que se conheça os limites do erro nestas representações.
Seja o número a=X.XXXXY
Supondo que seja arredondado para o número b=X.XXXZ,
arredondamento para cima se Y  5 e para baxo se Y  5 . Fica fácil observar-se que:
b  a  5  10 5
com
Supondo que o dígito guia seja diferente de zero, ou seja, a  1 , resulta:
ba
1
 5 10 5  10  4
a
2
Supondo genericamente t dígitos decimais:
ba
a
ba
a
1
 10 t 1
2
Similarmente , quando o número a é truncado (“chopped”), tem-se:
 10 t 1
Para uma base genérica  , tem-se:
a) Para arredondamento
fl( x)  x
x
1
   t 1  u
2
b) Para chopping
fl( x)  x
x
  t 1  u
Estes limites podem ser apresentados de forma diferente, facilitando a análise
de erros de arredondamentos.
 fl( x)  x   
x
Considerando a desigualdade:
fl( x)  x(1   )
para   u
1.5.3 Epsílon da Máquina (  )
O  da máquina é definido como o menor número de ponto flutuante, tal que
1    1. O valor de  é muito próximo do valor de u . O programa a seguir permite obter
uma aproximação para o  da máquina.
10
EPS=1
EPS+0,5*EPS
EPSP1=EPS+1
IF(EPSP1.GT.1)GO TO 10
PRINT EPS
Linguagens mais recentes já possue comandos para determinar-se o valor de 
MatLab
Fortran90
eps
EPSILON
1.5.4 Modelos de Aritmética
Para as análises de erros de arredondamentos em algoritmos executados em
computadores digitais, necessita-se ter informações do modelo utilizado em suas operações
básicas. Assim, todo computador digital adota um modelo para estas operações.
Modelo Básico
fl( x op y)  ( x op y)(1   )
 u
(1.3)
onde: op  ,,*, / .
Este modelo é válido para a maioria dos computadores digitais, particularmente os que
utilizam a aritmética IEEE. Entretanto existem computadores que não seguem este modelo
aritmético. Uma razão que pode levar o computador a não seguir este modelo é a não
existência de um dígito de guarda em operações de subtração. Os efeitos da não
consideração do dígito de guarda podem ser observados pelo exemplo:
Seja uma APF com   2 e t  3 . Suponha a subtração ( (0,100  21  0,111 2 0 ) sem
dígito de guarda e com dígito de guarda:
1
1
1
Para esta aritmética u   t 1   2  2  .
2
2
8
a) Sem dígito de guarda
fl (0,100  21  0,111 2 0 )  fl (0,100  21  0,011 21 )  0,001 21  0,100  2 1
Considerando que ( x  y )  0,100  2 2 e fl( x  y )  0,100  2 1 , tem-se:
0,100  2 1  0,100  2 2 (1   )

0,100  2 1  0,100  2  2
0,100  2  2
1   u
a) Com dígito de guarda
fl (0,100  21  0,111 2 0 )  fl (0,100  21  0,0111 21 )  0,0001 21  0,100  2 2
Considerando que ( x  y )  0,100  2 2 e fl ( x  y )  0,100  2 2 , tem-se:
0,100  2 2  0,100  2 2 (1   )

0,100  2  2  0,100  2  2
0,100  2  2
0  u
O modelo aritmético mostrado na expressão (1.3) não é válido para máquinas
que não possuem o dígito de guarda. Neste caso, tem-se o modelo:
fl( x op y)  ( x op y)(1   )
 u
(1.4)
onde: op  *, / e
fl( x op y)  x(1   )  y(1   )  ,   u
(1.5)
onde: op  , .
1.6
Análise de Erros
Suponha que uma aproximação ŷ para o processo y  f (x) é computada em
uma aritmética com unidade de arredondamento u. Como se poderia medir a qualidade de
yˆ  fˆ ( x) . Em muitas implementações ficaria-se satisfeito com erro relativo pequeno para
ŷ , E rel ( yˆ )  u , chamado erro no contradomínio (“forward errors”). Este tipo de análise
nem sempre é possível. Em muitas situações pode ser mais favorável analisar-se o erro no
domínio do problema, ou seja, para que x tem-se yˆ  f ( x  x) . Observe que a
expressão mostra a solução exata para dados perturbados. Este tipo de erro é chamado de
erro no domínio (‘backward error”).
O objetivo de se estudar o erro é verificar se um algoritmo é numericamente
estável.
Definição: Seja f : X  Y . Um algoritmo aproximado fˆ para o problema f é dito ser
numericamente estávels se para cada x  X :
fˆ ( x)  f ( xˆ )
f ( xˆ )
 (u ) para algum x̂ , onde
xˆ  x
x
 (u )
Erro no Contradomínio
Freqüentemente é possível determinar-se valores 
f
e  f na expressão:
yˆ  y   f   f y
onde: yˆ  fˆ ( x) e y  f (x) .
y  f (x)
x
Erro no Contradomínio
yˆ  fˆ ( x)
Se os valores  f e  f são pequenos, da ordem de u, o método para computar y
é dito contradomínio estável. Será que os algoritmos contradomínio estável são
considerados numericamente estáveis?
Pela definição de estabilidade numérica, verifica-se que na análise do erro pelo
contradomínio não tem-se informação do domínio, neste caso não se pode afirmar que um
algoritmo contradomínio estável é numericamente estável.
Erro no Domínio
A idéia da análise do erro no domínio está na resposta da pergunta: Posso levar
a inexatidão do algoritmo para os dados? Na maioria dos caso é possível.
y  f (x)
x
fˆ
x  x
Erro no Contradomínio
ff
yˆ  f ( x  x)
Tem-se portanto:
yˆ  f ( x  x)
O resultado perturbado é determinado pelo algoritmo exato com os dados perturbados. As
aproximações ao longo de todo o algoritmo são transferidas para os dados.
O valor de x freqüentemente pode ser limitado, como por exemplo:
x   b   b x
O método para computar y  f (x) é chamado domínio estável, se para qualquer x ele
resulta num valor para ŷ , computado pelo algoritmo exato com dados perturbados,
f ( x  x ) , com x pequeno, da ordem de u.
Será que os algoritmos domínio estável são considerados numericamente
estáveis?
Pela análise da definição de estabilidade numérica, verifica-se que para este caso,
fˆ ( x)  f ( x  x)  f ( xˆ ) o que resulta em:
fˆ ( x)  f ( xˆ )
f ( xˆ )
xˆ  x
0 e
x
 (u )
Portanto, os algoritmos domínio estável são numericamente estáveis.
Erro Misto Domínio/Contradomínio
Existem algoritmos que não é possível chegar-se ao valor computado a partir da
solução exata, com o domínio levemente perturbado. Só é possível se for dada uma leve
perturbação também no contradomínio.
y  f (x)
x
fˆ
x  x
yˆ  fˆ ( x)
f
yˆ  y  f ( x  x)
Tem-se portanto:
yˆ  y  f ( x  x)
Se y   y e x   x para  e  pequenos, da ordem de u, o algoritmo é dito estável
para erro misto domínio/contradomínio. Se o algoritmo for estável para o erro misto
domínio/contradomínio o algoritmo é numericamente estavel, pois:
fˆ ( x)  f ( xˆ )
xˆ  x
 (u )
 y  (u ) e
f ( xˆ )
x
Em aplicações práticas é muito difícil verificar se um algoritmo é
numericamente estável através dessas análises. O que se faz é verificar se no algoritmo
desenvolvido ocorrem casos patológicos já conhecidos de instabilidades numéricas.
1.7
Instabilidades Numéricas em Algoritmos
Desde o desenvolvimento dos primeiros computadores, era comum achar-se
que , como os computadores desenvolvem milhões de operações de ponto flutuante para
desenvolver um determinado problema, e essas operações carregam aproximações, os erros
de arredondamento podem se acumular de forma desastrosa. Este sentimento parece ser
verdadeiro, mas é enganoso. Na grande maioria dos casos, as instabilidades numéricas não
são causadas pela acumulação de erros de milhões de operações, mas o crescimento
traiçoeiro de poucas operações.
Seja o exemplo:
e  exp(1)  2,71828......
Aproxima-se o valor de e pela expressão:
1
e : lim (1  ) n
n 
n
O problema será resolvido utilizando Fortran90 com precisão simples: u  6  10 8 , ou seja:
1 

fˆn : fl (1  ) n 
n 

n
fˆn
e  fˆn
101
2,593743
1,25 10 1
10 2
2,704811
1,35 10 2
10 3
2,717051
1,23 10 3
10 4
2,718597
3,15 10 4
10 5
2,721962
3,68 10 3
10 6
2,595227
1,23 10 1
10 7
3,293968
5,76 10 1
A aproximação é pobre e degrada a medida que n se aproxima do inverso da
1
unidade de arredondamento. Quando (1  ) é formado para n grande, poucos dígitos
n
1
significativos de
são retidos, e mesmo que a potencialização é realizada de forma exata,
n
o resultado é pobre.
Nesta seção será apresentado alguns casos muito conhecidos de ocorrência de
instabilidades numéricas, para erros advindos de arredondamento.
Cancelamento Catastrófico
Acontece quando dois números e que apresentam erros são subtraídos.
Seja a equação:
f ( x) 
(1  cos x)
x2
Considerando x  1,2 10 5 e uma máquina com 10 dígitos significativos, temse:
c  cos x  0,9999999999
1  c  0,0000000001
Portanto:
(1  c)
10 10

 0,6944
x2
1,44 10 10
Entretanto, para x  0 , tem-se: 0  0  0,5. Como pode ser visto pelo gráfico da
função.
f (x )
0.5
0.45
0.4
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
-20
-15
-10
-5
0
5
10
15
20
x
Os 10 dígitos significativos são insuficientes para aproximar o valor de f (x ) .
A subtração (1  c ) possui um dígito significativo. A subtração é exata, mas produz
resultado da ordem do erro de c. A subtração supervalorizou a importância do erro anterior.
Na realidade o problema não está na subtração, mas no arredondamento
anterior. Uma modificação ma equação pode tornar o cálculo numericamente estável.
x 

 sin ( ) 
1
2 
f ( x)  

2 x
2 



2
Considerando x  1,2 10 5 e a nova expressão, chega-se a f ( x)  0,5.
|O Problema do cancelamento catastrófico pode genericamente ser mostrado
por:
Seja x  (a  b) e xˆ  (aˆ  bˆ) , sendo aˆ  a (1  a ) e bˆ  b(1  b) . Os
valores a e b são incertezas ou erros de arredondamentos por armazenamento ou
computações anteriores. A partir dos dados, pode-se chegar a seguinte expressão:
ab
x  xˆ
 aa  bb

 max( a , b )
x
a b
a b
O erro relativo é grande quando:
a  b  a  b
e ocorre quando tem-se o cancelamento catastrófico. Observe por esta análise que só existe
um cancelamento catastrófico quando existirem erros nos dados.
Resolvendo Equações do Segundo Grau
Seja a equação do segundo grau:
ax 2  bx  c  0
Utilizando a conhecida fórmula de Báskara:
x
 b  b 2  4ac
2a
Se
b 2  4ac , então

b 2  4ac  b . Para uma escolha de sinal, tem-se

cancelamento catastrófico, pois fl b 2  4ac não é exato e a subtração leva a uma
supervalorização do erro.
Para evitar este problema, pode-se utilizar as seguintes expressões alternativas:
x1 
 (b  sign (b) b 2  4ac
2a
x1 x 2 
c
a
Outra fonte de erro é quando b 2  4ac , neste caso nenhum rearranjo algébrico
pode evitar o problema. Uma tentativa para melhorar a resposta é aumentar a precisão da
solução.
Fatoração LU sem Pivoteamento
  1  1 0 u11 u12 
A



1 1  l 21 1  0 u 22 
Supõe-se
que 0    1,
1
u11   , u12  1, l 21   , u 22  1  l 21u12  1   1
o
Como  é muito pequena, fl(u 22 )   1 , portanto:
  1  1
A  Lˆ Uˆ  
   1
1 1  
0   1  0 0

1 0  1  0 1
que
resulta:
Pode-se observar que a matriz fatorada Lˆ Uˆ não é igual a original. Neste caso
não tem-se o cancelamento catastrófico, mas operações com números com ordem de
grandeza muito diferentes. A fonte de erro é apenas a utilização de um pivô muito pequeno,
sendo, portanto, um problema do algoritmo e não da matriz. A matriz A é bem comportada.
Para gerar um algoritmo de fatoração LU numericamente estável, deve-se evitar a
utilização de pivôs com pequeno valor absoluto.
Benefícios do Erro de Arredondamento
Nem sempre o erro de arredondamento trás transtornos em algoritmos, tem-se
uma aplicação que o erro de arredondamento em vez de provocar a instabilidade numérica
do algoritmo, viabiliza sua solução.
Seja o Método das Potências para o cálculo de autovalores:
x  A x  potencialização
x
x
x
 normalizaç ão

O vetor x converge para o autovetor de maior valor absoluto.
Uma modificação do algoritmo das potências é o chamado algoritmo de
Iteração Inversa, no qual a matriz A é substituída por ( A  I ) 1 . Com esta modificação o
algoritmo converge para o autovetor correspondente ao autovalor mais próximo de  .
Uma aplicação do Método da Iteração Inversa é quando se conhece o autovalor,
mas não se conhece o autovetor:
  autovalor
( A  I )  Matriz Singular
Entretanto os erros de arredondamento provocados pelo uso de uma aritmética
de precisão finita tornam a matriz não-singular, possibilitando a realização da operação e
chega-se em uma ou duas iterações ao autovetor correspondente.
1.8
Condicionamento Numérico
Como viu-se, erros nas respostas computadas podem ser originados
por problemas de instabilidades numéricas nos algoritmos utilizados,
entretanto muitas vezes utiliza-se algoritmos numericamente estáveis e mesmo
assim, pode-se chegar a respostas bem diferentes da esperada. A fonte desses
erros está no próprio problema.
Supõe-se que ŷ satisfaça yˆ  f ( x  x) e f seja duas vezes
continuamente diferenciável. A partir da Série de Taylor, chega-se a
expressão:
yˆ  y  f ( x  x)  f ( x)  f ' ( x)x 
f '' ( x   x) 2
x
2
onde   (0,1)
Rearranjando a expressão:
yˆ  y  xf ' ( x)  x

 
 (x 2 )
y
f
(
x
)
x


Definindo:
 xf ' ( x) 

C ( x)  
f
(
x
)


Para um x pequeno, C(x) mede a perturbação relativa na saída, para uma
perturbação relativa na entrada. Este valor é chamado de número de condição ou número de
condicionamento. Para um problema mal condicionado, mesmo uma pequena perturbação
na entrada, produz uma grande perturbação na saída.
5
4
Exemplo:
f ( x)  ln( x)
3
2
1
0
-1
-2
-3
Para a função dada:
1
C ( x) 
ln( x )
-4
-5
0
10
20
30
40
50
60
70
80
90
100
Para um problema em que x  1 , verifica-se que C (x ) é muito grande. Para
pequenas perturbações em x. produz-se grandes alterações em f(x). Significa que o
problema é muito mal-condicionado para x próximo a 1. Esta conclusão também pode ser
verificada no gráfico da função f(x) acima. A questão de condicionamento de matrizes será
vista quando da solução de sistemas lineares.
1.9
Efeitos de Erros de Arredondamento em Operações Matriciais
1.9.1 Produto Interno
O produto interno ( x T  y ) computado em máquinas com precisão finita possui
um erro dado pela expressão:
Er 
fl ( x T  y )  ( x T  y )
( x  y)
T
 nu
xT  y
x  y 
T
 (u 2 )
onde:
u – é a unidade de arredondamento da aritmética de ponto flutuante utilizada;
n – dimensão dos vetores x e y .
Observe que, se ( x T  y)  x T  y , o erro é considerável. Assim, na
computação de produtos internos, é aconselhável realizá-los em dupla precisão ( u na
ordem de  2t ) e arredondar o resultado para a precisão t.
1.9.2 Operações com Matrizes
Seja
E   mn e
 
E  eij , i  1,.., m,
j  1,..., n . Assume-se que se
E  F  eij  f ij ,  ij . A partir dessas considerações, tem-se as seguintes expressões:
a)
fl(A)  A  E,
E  u A
b)
fl( A  B)  ( A  B)  E,
E  u A B
c)
Para A   mn e B   n p ,
1.10
Desenvolvendo Algoritmos Estáveis
fl( A  B)  ( A  B)  E ,
E  nu A  B  (u 2 )
Não existe receita simples para desenvolver algoritmos estáveis. Um
procedimento importante é saber da necessidade da estabilidade numérica, quando do
desenvolvimento de um algorítmo e não se concentrar somente em outros itens, tais como
custo computacional e rapidez de solução.
Alguns itens podem ser seguidos para o desenvolvimento de algoritmos
estáveis:
 Tentar evitar subtrações com quantidades contaminadas por erros.
 Minimizar o tamanho de quantidades intermediárias, relativo à solução
final.
 Procurar diferentes formulações para a computação que são
matematicamente, mas não numericamente equivalentes.
 É vantajoso expressar atualizações do tipo: valor novo= valor velho +
pequena correção, se pequenas correções podem ser computadas com
muitos dígitos significativos.
 Utilize transformações bem condicionadas no problema (por exemplo
transformações ortogonais);
 Tome precauções para evitar underflow e overflow.
1.11
Aumentando a precisão
Quando a única fonte de erro e o arredondamento, pode-se melhorar a exatidão
da resposta com a realização dos cálculos com uma precisão aumentada. Este certamente é
o caso para algoritmos que processam erros próximos à precisão da máquina. Entretanto se
os limites dos erros não são alcançados, poucas melhorias devem ser esperadas. Também
não se deve esperar melhorias em problemas mal-condicionados.
1.12
Referências Bibliográficas
1 - EINARSSON, Bo, Accuracy and Reliability in Scientific Computing, SIAM, 2005
2 – Higham , D. J, Higham , N. J., Matlab Guide, Society Industrial and Applied
Mathematics (SIAM) – Philadelphia – 2000.
3 – Stewart, G. W. Matrix Algorithms – Vol. I Basic Decompositions, Society Industrial
and Applied Mathematics (SIAM) – Philadelphia – 1998.
4- Greenbaum , Anne. Iterative Methods for Solving Linear Systems, Society Industrial and
Applied Mathematics (SIAM) – Philadelphia – 1998.
5 – Dongarra, J. J., Duff, I.S. , Sorensem, D.C., Van der Vorst, H.A., Numerical Linear
Algebra for Hight-Performance Computers, Society Industrial and Applied Mathematics
(SIAM) – Philadelphia – 1998.
6 – Demmel, J. M. Applied Numerical Linear Algebra, Society Industrial and Applied
Mathematics (SIAM) – Philadelphia – 1997.
7 – Trefethen, L.N., Bau, D., Numerical Linear Algebra, Society Industrial and Applied
Mathematics (SIAM) – Philadelphia – 1997.
8 – Higham , N. J., Acuracy and Stability of Numerical Algorithms, Society Industrial and
Applied Mathematics (SIAM) – Philadelphia – 1996.
9 – Stewart, G. W. Afternotes on Numerical Analysis, Society Industrial and Applied
Mathematics (SIAM) – Philadelphia – 1998.
10 – Gill, E.G., Murray, W., Wright, M., Numerical Linear Algebra and Otimization,
Addison Wesley Publishing Company, 1991.
11 – Golub, G.H., Voa Loan, C.F., Matrix Computations, Johns Hopkins Universitu Press,
1989.
12 – Kahaner, D., Moler, C., Nash, S., Numerical Methods and Software, Prentice –Hall,
Inc., 1989.
13 – Forsythe, G.E., Malcolm, M.A., Moler, C.B., Computer Methods for Mathematical
Computations, Prentice –Hall, Inc., 1977.
14 - Stewart, G. W. Introduction to Matrix Computations, Academic Press, 1973.
Download