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,00110 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 110 29 110 16 110 17 5 10 12 5 10 07 110 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 cs 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: ba 1 5 10 5 10 4 a 2 Supondo genericamente t dígitos decimais: ba a ba 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: ab x xˆ aa bb 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 mn 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 mn 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.