Cálculo Numérico Noções básicas sobre erros Profa. Vanessa Rolnik 1º semestre 2015 Fases da resolução de problemas através de métodos numéricos Problema real Levantamento de Dados Construção do modelo matemático Escolha do método numérico adequado Implementação computacional desse método Análise dos resultados obtidos Se necessário, reformular o modelo matemático e/ou escolher novo método numérico Origem dos erros 1. Simplificação no modelo matemático Ex: para calcular o período de um pêndulo, desprezamos sua massa. 2. Erros de truncamento Ex. no cálculo de uma série infinita, tomamos apenas os primeiros termos 3. Erros de arredondamento Causados pela própria estrutura da máquina que trabalha com um número finito de números e de casas decimais 4. Erros nos dados de entrada Dados imprecisos obtidos de experimentos ou arredondamentos na entrada Objetivo da aula O interesse dessa e da próxima aula está em estudar os erros de arredondamento. Os erros de arredondamento englobam a forma como os dados são representados no computador Base usada pela máquina (binária) Quantidade de dígitos usados para armazenamento dos números as operações aritméticas efetuadas efeitos numéricos Representação em ponto flutuante Os computadores utilizam a seguinte normalização para representação dos números sinal e é o expoente m ≤ e ≤ M m = limite inferior do expoente M = limite superior do expoente ± .d1d2…dt x βe d1d2…dt é a mantissa d1 ≠ 0, 0 ≤ di < β , i = 1,2,..., t β é a base t = número de algarismos significativos Notação F(β, t, m, M) Notação para a representação em ponto flutuante na base β com t algarismos significativos e com limites do expoente m e M. ± .d1d2…dt x βe Exemplo 1 Considere uma máquina que opere no sistema F(10, 3, 2, 2). Os números representáveis nesse sistema são do tipo ± 0.d1d2d3 x 10e, Assim, 0.35 = + 0.350 x 100 0.0123 = + 0.123 x 10-1 -5.172 = - 0.517 x 101 -5.177 = - 0.518 x 101 -2≤e≤2 regra de arredondamento: dt+1>=5, dt+1, dt+1<5, dígitos inalterados 5391 = + 0.539 x 104 e > 2 erro de overflow 0.0003 = + 0.300 x 10-3 e < -2 erro de underflow Conversão de base: binário ↔ decimal Dados de saída Computador base binária (onde os cálculos são efetuados) Usuário base decimal Dados de entrada Todo esse processo de conversão é fonte de erros Além disso, um número pode ter representação finita em uma base e infinita em outra. Números inteiros binário → decimal (10111)2 = 1 x 24 + 0 x 23 + 1 x 22 + 1 x 21 + 1 x 20 = (23)10 decimal → binário (23)10 = 11 x 2 + 1 11 = 5 x 2 + 1 5= 2x2+1 2= 1x2+0 1= 2x0+1 (23)10 = (10111)2 Números fracionários entre 0 e 1 decimal → binário (0.125)10 → (0.d1d2...dj...)2 0.125 x 2 = 0.25 d1 = 0 e r1 = 0.25 0.25 x 2 = 0.5 d2 = 0 e r2 = 0.5 0.5 d3 = 1 e r3 = 0 x 2 = 1.0 (0.125)10 → (0.001)2 Mais um exemplo (0.1)10 → (0.d1d2...dj...)2 0.1 0.2 0.4 0.8 0.6 x2 x2 x2 x2 x2 = = = = = 0.2 0.4 0.8 1.6 1.2 d1 = 0 d2 = 0 d3 = 0 d4 = 1 d5 = 1 e e e e e r1 = 0.2 r2 = 0.4 r3 = 0.8 r4 = 0.6 r5 = 0.2 = r1 Os resultados se repetirão infinitamente, e nunca rj = 0 Portanto, (0.1)10 → (0.00011001100110011...)2 ou (0.00011)2 Conclusão Um número real entre 0 e 1 pode ter representação finita na base decimal e infinita na binária. Esse fato pode acarretar a ocorrência de erros aparentemente inexplicáveis em cálculos efetuados pelo computador. Exemplo S 30000 0.11 i 1 Exato S = 3300 No computador S = 3299.99691 Exercício: fazer a conversão do número decimal 0.11 para sua representação binária Números fracionários entre 0 e 1 binário → decimal (0.000110)2 → (0.d1d2...dj...)10 (0.000110)2 x (1010)2 = (0.1111)2 d1 = (0)2= (0)10 e r1 = (0.1111)2 (0.1111)2 x (1010)2 = (1001.011)2 d2 = (1001)2= (9)10 e r2 = (0.011)2 (0.011)2 x (1010)2 = (11.11)2 d3 = (11)2= (3)10 e r3 = (0.11)2 (0.11)2 x (1010)2 = (111.1)2 d4 = (111)2= (7)10 e r4 = (0.1)2 (0.1)2 x (1010)2 = (101)2 d5 = (101)2= (5)5 e r6 = (0)2 fim. (0.000110)2 → (0.09375)10 Resumindo... (0.1)10 → (0.00011001100110011...)2 ou (0.00011)2 (0.1)10 → (0.000110)2 com 6 casas decimais (0.000110)2 → (0.09375)10 Conclusão: a forma como o computador armazena os números é fonte de erro Esquema de armazenamento de um número Obs: o bit de sinal apresenta zero para o número positivo e um para o negativo. sinal do expoente expoente sinal do número mantissa Exemplo 2 (23)10 = (10111)2 Representação em aritmética de ponto flutuante F(2,10,15,15) 0.1011100000 x 2101 Representação em uma “palavra” do computador sinal do número sinal do expoente 0 0 1 0 expoente 1 0 0 1 0 1 1 1 0 mantissa Exercício: F(2,10,15,15), represente (-7,125) 0 0 0 0 Exemplo 4 Sabemos que os números podem ser representados por uma reta contínua. Entretanto, em pontos flutuantes podemos representar apenas pontos discretos na reta real. Questão: quantos e quais números podem ser representados no sistema F(2, 3, 1, 2) ? ± 0.d1d2d3 x 2e 2 possibilidades para o sinal ( + ou -) 1 possibilidade para d1 (1) 2 possibilidades para d2 (0 ou 1) 2 possibilidades para d3 (0 ou 1) 4 possibilidades para o expoente (-1, 0 1 ou 2) Total = 2 x 1 x 2 x 2 x 4 = 32 números Operações em aritméticas de pontos flutuantes Dada uma seqüência de operações, como por exemplo, u = [(x + y) – z)] /w , é importante a noção de como o erro em uma operação propaga-se ao longo das operações subseqüentes. O erro total em uma operação é composto pelo erro das parcelas ou fatores e pelo erro no resultado da operação. Erro nas parcelas ou fatores Exemplo: Supor um sistema de aritmética de ponto flutuante de 4 dígitos, na base 10 e com acumulador de precisão dupla. Dados x = 0.937 x 104 y = 0.1272 x 102 Obter x+y x–y x*y x/y Adição em aritmética de ponto flutuante Requer o alinhamento dos pontos decimais dos dois números: a mantissa do número de menor expoente é deslocada para a direita O número de casas decimais deslocado corresponde à diferença entre os dois expoentes x = 0.937 x 104 y = 0.001272 x 104 x + y = (0.937 + 0.001272) x 104 = 0.938272 x 104 Ex: Alinhamento Resultado: = 0.9383 x 104 (arredondamento para 4 dígitos significativos) Subtração em aritmética de ponto flutuante segue a mesma regra da adição Alinhando os pontos decimais, x = 0.937 x 104 y = 0.001272 x 104. x – y = (0.937 - 0.001272) x 104 = 0.935828 x 104. Resultado: = 0.9358 x 104 Multiplicação em aritmética de ponto flutuante Multiplica as mantissas Preserva a base e soma os expoentes xy = (0.937 x 104) x (0.1272 x 102) = (0.937 x 0.1272) x 104 x 102 = 0.1191864 x 106. Resultado: = 0.1192 x 106 Divisão Divide as mantissas Preserva a base e subtrai os expoentes y = (0.937 x 104) / (0.1272 x 102) = (0.937 / 0.1272) x 104 / 102 = 7.36635 x 102 =0.736635 x 103 Resultado: = 0.7366 x 103 Exemplo 1 Considere o sistema com base = 10, e 3 dígitos significativos e efetue as operações indicadas: 1) (11.4 + 3.18) + 5.05 e 11.4 + (3.18 + 5.05) 2) (3.18 × 11.4)/5.05 e 3.18/5.05 × 11.4 3) 3.18 × (5.05 + 11.4) e 3.18 × 5.05 + 3.18 × 11.4 Conclusão Como o arredondamento é feito após cada operação as operações aritméticas (adição, subtração, divisão e multiplicação) não são associativas distributivas Exemplos 2 e 3 Considere o sistema com base = 10, e 3 dígitos significativos, somar 1/3 dez vezes consecutivas usando arredondamento. Considere o sistema com base = 10, e 3 dígitos significativos, avaliar o polinômio P(x) = x3 − 6x2 + 4x − 0.1 no ponto 5.24 e comparar com o resultado exato. Conclusão Erros consideráveis podem ocorrer durante e execução de um algoritmo. Isso se deve ao fato de que existem limitações da máquina e também que os erros de arredondamento são introduzidos a cada operação efetuada. Em conseqüência, podemos obter resultados diferentes mesmo utilizando métodos numéricos matematicamente equivalentes. Assim, devemos ser capazes de conseguir desenvolver um algoritmo tal que os efeitos da aritmética discreta do computador permaneça inofensivo quando um grande número de operações são executadas. Efeitos Numéricos Além dos problemas dos erros causados pelas operações aritméticas, das fontes de erros, existem certos efeitos numéricos que contribuem para que o resultado obtido não tenha crédito. Cancelamento Propagação do Erro Instabilidade Numérica Mal Condicionamento Obs: livro prof. Neide Franco pag. 42 – 54. Cancelamento Ocorre na subtração de dois números quase iguais. Veremos este fato através de exemplos, onde iremos considerar que estamos trabalhando com o sistema 9876 9875 F(10, 10, 10, 10). 9876 0.9937806599 x10 2 Exemplo 1) Calcular Solução em PF Normalizando 0.503142x10-2 9875 0.9937303457 x10 0.0000503142x102 2 - Podemos obter resultado mais preciso? Sim. Considerando a identidade: x y 9876 9875 0.5031418679 x10 2 Resultado com todos os dígitos corretos! xy x y Exemplo 2 Resolver a equação: x2 – 1634 x + 2 = 0. Solução em PF 1634 1634 2 8 x1 0,1633998776 x10 4 2 1634 1634 2 8 x2 0,1223990000 x10 2 2 Podemos obter resultado mais preciso? Sim. Basta lembrar que o produto das raízes é igual ao termo independente da equação: x1. x2 = 2 2 0.2000000000 x101 2 x2 0 , 1223991125 x 10 x1 0.1633998776 x10 4 Resultado com todos os dígitos corretos! Obs: Nem sempre existe uma maneira trivial de resolver problemas causados pelo cancelamento. Exemplo 3 O cancelamento também ocorre no cálculo de uma soma quando uma soma parcial é muito grande quando comparada com as demais somas. Exemplo: Calcular e-5.25, utilizando 5 dígitos significativos em todas as operações. x k x ( 1) k! k 0 k Sabemos que: e Se e-x é calculado usando essa fórmula, a série deve ser truncada. Assim, já introduziu-se erro de truncamento. Exemplo 3 – cont. Considere os 25 primeiros termos: e−5.25 = 0.10000 x 101 − 0.24117 x 102 + 0.29082 x 102 − 0.83497 x 101 + 0.91532 x 100 − 0.48516 x 10-1 + 0.14339 x 10-2 − 0.26003 x 10-4 + 0.30982 x 10-6 . 0.52500 x 101 0.31654 x 102 0.21811 x 102 0.43836 x 101 0.36965 x 100 0.15919 x 10-1 0.39620 x 10-3 0.62050 x 10-5 + − + − + − + − 0.13781 x 102 − 0.33236 x 102 + 0.14314 x 102 – 0.20922 x 101 + 0.13862 x 100 – 0.49164 x 10-2 + 0.10401 x 10-3 – 0.14163 x 10-5 + Exemplo 3 – cont. Resultado somando os 25 termos: e-5.25 = 0.65974 x 10-2 Resultado obtido na calculadora: e-5.25 = 0.52475 x 10-2 Esta diferença entre os valores ocorreu porque na soma as parcelas de ordem 102 fazem com que as parcelas de ordem inferior a 10-3 sejam desprezadas. Podemos obter resultado mais preciso? e Sim. Basta lembrar x 1 x e k x ex k 0 k! Somando as parcelas de e5.25 até ordem 10-3, obtém-se 0.19057 x 103 e5.25 0.10000 x101 2 0 . 52475 x 10 0.19057 x103 Instabilidade Numérica Cada novo resultado intermediário introduz um novo erro de arredondamento. É de se esperar que todos esses erros influenciem o resultado final. Algumas vezes, os erros intermediários cancelam-se uns com os outros no mínimo parcialmente, tendo um efeito desprezível no resultado final – Algoritmo Estável Quando os erros intermediários tem uma influência muito grande no resultado final – Algoritmo Instável Exemplo 4 Resolver a integral 1 1 In e x ne x dx , para n = 7. 0 Fórmula de recorrência para In In = 1 – n.In-1 n = 1,2,... Valor inicial: I0 = 0,6321 I1 = 0.3679, I2 = 0.2642, I3 = 0.2074, I4 = 0.1704, I5 = 0.1480, I6 = 0.1120, I7 = 0.2160 O resultado para I7 está errado pois 1 8 x I7 e . max e . x dx 8 0 x 1 0 1 x 1 I7 0.125 7 0 Exemplo 4 – Como encontrar o valor exato de In? Para esse caso em particular, observe que uma relação de recorrência ser instável na direção crescente não impede de ser estável na direção decrescente de n. 1 In In1 n Qual o valor inicial? Não é fácil encontrar esse valor pois todo In onde n > 0 é desconhecido. Mas sabemos que In → 0 quando n → ∞ Fazendo I20 = 0 e usando a fórmula acima para n = 20, 19, 18,... I7 = 0.1123865 (todos os dígitos corretos!) Mau condicionamento Vamos analisar como perturbações nos dados de entrada podem ou não influenciar os resultados Exemplo: Resolver o sistema x + y = 2 x + 1.01y = 2.01 solução x = 1, y = 1 Se 2.01 na segunda equação for mudado para 2.02 solução x = 0, y = 2. Ou seja, uma pequena mudança nos dados produz uma grande mudança no resultado! Quando grandes mudanças nos dados produzem somente pequenas mudanças no resultado: Problema bem condicionado Quando pequenas mudanças nos dados produzem grandes mudanças no resultado: Problema mal condicionado Exercícios 1. Considere o sistema F(10, 3, 5, 5). Represente neste sistema os números: x1 = 1234.56 x2 = −0.00054962 x3 = 0.9995 x4 = 123456.7 x5 = −0.0000001 2. Agora, considere o sistema F(10, 4, 4, 4) e represente neste sistema os mesmos números do exercício 1. 3. Supondo que um computador trabalhe com apenas 6 casas decimais, o número (0.11)10 seria armazenado como (0.000111)2 . Qual número decimal que este número representa? Exercícios 4. Dado o número 2.47 na base 10, qual a sua representação na base 2 usando 8 casas decimais? Essa representação é exata? O número binário encontrado representa qual decimal? 5. No exemplo 4, vimos que existem o sistema F(2, 3, 1, 2) só consegue representar 32 números. Encontre esses números na base 10 e represente-os na reta real. Qual o maior número e o menor número em módulo que podemos representar nesse sistema? Exercícios 6. Considere o sistema F(10, 3, 5, 5). Efetue as operações indicadas: a) (1.386 − 0.987) + 7.6485 e 1.386 − (0.987 − 7.6485) , b) (1.338 − 2.038)/4.577 e 1.338/4.577− 2.038/4.577 , 7. Seja x = 17.678/ 3.471+ (9.617)2/(3.716 × 1.85) a) Calcule x com todos os algarismos da sua calculadora, sem efetuar arredondamento. b) Calcule x considerando o sistema F(10, 3, 4, 3). Faça arredondamento a cada operação efetuada. Exercícios n x 8. Considere a integral , com a = 10. yn dx 0xa 1 a) Calcule y0 usando a integral b) Mostre que uma relação de recorrência para yn é dada por yn 1 a.y n1 n c) Calcule yn , n = 1,2,..., 10 usando a relação de recorrência. Os valores obtidos são confiáveis? 9. Considere a relação de recorrência do ex. 8 escrita na forma: yn1 1 1 y n1 a n Considere ainda que y10 = 0. Usando este dado e a relação de recorrência obtenha os valores de y10, y9,...y1. Os resultados agora são melhores? Como você explica isso?