Prévia do material em texto
CÁLCULO NUMÉRICO Erros em Processos Numéricos. Operações em Sistemas de Ponto Flutuante. Prof. Dr. Thadeu Alves Senne ICT - UNIFESP senne@unifesp.br Thadeu Alves Senne CÁLCULO NUMÉRICO 1 / 20 Erros em Processos Numéricos Principais tipos de erros cometidos em cálculos: Erros de aquisição de dados ou de medidas. Erros de representação numérica. Erros associados a cálculos realizados com precisão finita. Erros associados a algoritmos que fornecem soluções aproximadas. Thadeu Alves Senne CÁLCULO NUMÉRICO 2 / 20 Como medir erros de aproximação numérica? Se x∗ ∈ R é uma aproximação para o número x ∈ R , definimos: Erro absoluto: EA(x ∗) = |x − x∗| Erro relativo: ER(x ∗) = ∣∣∣∣x − x∗ xref ∣∣∣∣ , em que xref = x ou xref = x∗ , com xref ̸= 0 . Na prática, não conhecemos o valor exato da grandeza que está sendo calculada. Neste caso, devemos obter estimativas para o erro cometido. Thadeu Alves Senne CÁLCULO NUMÉRICO 3 / 20 Como medir erros de aproximação numérica? Exemplo 1 Em cada um dos casos, calcule os erros absoluto e relativo entre o valor exato x e seu respectivo valor aproximado x∗ : (a) x = 2735.864 e x∗ = 2735 . (b) x = 6.864 e x∗ = 6 . Solução: (a) Temos que EA(x ∗) = |x − x∗| = |2735.864− 2735| = 0.864 e ER(x ∗) = ∣∣∣∣x − x∗ x ∣∣∣∣ = ∣∣∣∣2735.864− 2735 2735.864 ∣∣∣∣ = 3.16× 10−4 = 0.0316% . Thadeu Alves Senne CÁLCULO NUMÉRICO 4 / 20 Como medir erros de aproximação numérica? Exemplo 1 Em cada um dos casos, calcule os erros absoluto e relativo entre o valor exato x e seu respectivo valor aproximado x∗ : (a) x = 2735.864 e x∗ = 2735 . (b) x = 6.864 e x∗ = 6 . Solução: (b) Note que EA(x ∗) = |x − x∗| = |6.864− 6| = 0.864 e ER(x ∗) = ∣∣∣∣x − x∗ x ∣∣∣∣ = ∣∣∣∣6.864− 6 6.864 ∣∣∣∣ = 0.125 = 12.5% . Thadeu Alves Senne CÁLCULO NUMÉRICO 5 / 20 Como medir erros de aproximação numérica? Exemplo 1 Em cada um dos casos, calcule os erros absoluto e relativo entre o valor exato x e seu respectivo valor aproximado x∗ : (a) x = 2735.864 e x∗ = 2735 . (b) x = 6.864 e x∗ = 6 . Apesar de os valores aproximados dos itens (a) e (b) produzirem o mesmo erro absoluto, vemos, por meio do erro relativo, que o erro de aproximação cometido no item (b) é bem maior do que aquele encontrado no item (a). Isso ocorre devido à ordem de grandeza das quantidades envolvidas. Desta forma, o erro relativo é extremamente útil, pois ele elimina a dependência dessa ordem de grandeza. Thadeu Alves Senne CÁLCULO NUMÉRICO 6 / 20 Operações em Sistemas de Ponto Flutuante Exemplo 2 Considere o sistema de ponto flutuante F (10, 4, −10, 10) , e sejam os números p = 9370 e q = 12.72 . Calcule fl(p + q) e fl(pq) , utilizando arredondamento, e calcule os respectivos erros relativos em relação aos valores exatos. Solução: Primeiramente, vamos calcular fl(p + q) . Na adição, todos os números deverão ser escritos com o maior expoente posśıvel dentre as parcelas. Neste caso, temos: p = 9370 = 0.9370× 104 =⇒ fl(p) = 0.9370× 104 e q = 12.72 = 0.1272× 102 = 0.001272× 104 . Uma vez que a mantissa deverá ter apenas 4 d́ıgitos, teremos de arrendondar o valor de q , de modo que fl(q) = 0.0013× 104 . Logo, fl(p + q) = (0.9370 + 0.0013)× 104 = 0.9383× 104 . Thadeu Alves Senne CÁLCULO NUMÉRICO 7 / 20 Operações em Sistemas de Ponto Flutuante Exemplo 2 Considere o sistema de ponto flutuante F (10, 4, −10, 10) , e sejam os números p = 9370 e q = 12.72 . Calcule fl(p + q) e fl(pq) , utilizando arredondamento, e calcule os respectivos erros relativos em relação aos valores exatos. Solução: Agora, vamos calcular fl(pq) . Na multiplicação, devemos calcular o produto das mantissas e somar os expoentes, ou seja: pq = (0.9370× 104)× (0.1272× 102) = (0.9370× 0.1272)× 106 = 0.1191864× 106 . Arredondando, obtemos fl(pq) = 0.1192× 106 . Thadeu Alves Senne CÁLCULO NUMÉRICO 8 / 20 Operações em Sistemas de Ponto Flutuante Exemplo 2 Considere o sistema de ponto flutuante F (10, 4, −10, 10) , e sejam os números p = 9370 e q = 12.72 . Calcule fl(p + q) e fl(pq) , utilizando arredondamento, e calcule os respectivos erros relativos em relação aos valores exatos. Solução: Vejamos os erros relativos cometidos em cada operação. Como p + q = 9382.72 e fl(p + q) = 9383 , temos que ER(p + q) = ∣∣∣∣(p + q)− fl(p + q) (p + q) ∣∣∣∣ = ∣∣∣∣9382.72− 9383 9382.72 ∣∣∣∣ = 2.98× 10−5 . Analogamente, uma vez que pq = 119186.4 e fl(pq) = 119200 , obtemos ER(pq) = ∣∣∣∣pq − fl(pq) pq ∣∣∣∣ = ∣∣∣∣119186.4− 119200 119186.4 ∣∣∣∣ = 1.14× 10−4 . ■ Thadeu Alves Senne CÁLCULO NUMÉRICO 9 / 20 Operações em Sistemas de Ponto Flutuante Exemplo 3 Sejam os números p = 11.4 , q = 3.18 e r = 5.05 . Calcule fl((p + q) + r) e fl(p + (q + r)) , considerando um sistema de ponto flutuante com 3 d́ıgitos na mantissa e utilizando arredondamento. ATENÇÃO: Em um sistema de ponto flutuante, todas as operações deverão ser feitas na ordem em que elas aparecem!!! Thadeu Alves Senne CÁLCULO NUMÉRICO 10 / 20 Operações em Sistemas de Ponto Flutuante Exemplo 3 Sejam os números p = 11.4 , q = 3.18 e r = 5.05 . Calcule fl((p + q) + r) e fl(p + (q + r)) , considerando um sistema de ponto flutuante com 3 d́ıgitos na mantissa e utilizando arredondamento. Solução: Primeiramente, vamos calcular fl((p + q) + r) . Observe que: p = 11.4 = 0.114× 102 =⇒ fl(p) = 0.114× 102 , q = 3.18 = 0.318× 101 = 0.0318× 102 e r = 5.05 = 0.505× 101 = 0.0505× 102 . Como o sistema de ponto flutuante em questão permite apenas 3 d́ıgitos na mantissa, temos que fl(q) = 0.032× 102 e fl(r) = 0.051× 102 . Assim, fl(p + q) = (0.114 + 0.032)× 102 = 0.146× 102 e fl((p + q) + r) = (0.146 + 0.051)× 102 = 0.197× 102 . Thadeu Alves Senne CÁLCULO NUMÉRICO 11 / 20 Operações em Sistemas de Ponto Flutuante Exemplo 3 Sejam os números p = 11.4 , q = 3.18 e r = 5.05 . Calcule fl((p + q) + r) e fl(p + (q + r)) , considerando um sistema de ponto flutuante com 3 d́ıgitos na mantissa e utilizando arredondamento. Solução: Agora, vamos calcular fl(p + (q + r)) . Temos q = 3.18 = 0.318× 101 =⇒ fl(q) = 0.318× 101 e r = 5.05 = 0.505× 101 =⇒ fl(q) = 0.505× 101 , de modo que fl(q + r) = (0.318 + 0.505)× 101 = 0.823× 101 = 0.0823× 102 . Uma vez que o sistema de ponto flutuante em questão permite apenas 3 d́ıgitos na mantissa, temos que fl(q + r) = 0.082× 102 . Logo, fl(p + (q + r)) = (0.114 + 0.082)× 102 = 0.196× 102 . Thadeu Alves Senne CÁLCULO NUMÉRICO 12 / 20 Operações em Sistemas de Ponto Flutuante Exemplo 3 Sejam os números p = 11.4 , q = 3.18 e r = 5.05 . Calcule fl((p + q) + r) e fl(p + (q + r)) , considerando um sistema de ponto flutuante com 3 d́ıgitos na mantissa e utilizando arredondamento. ATENÇÃO: Observe que fl((p + q) + r) = 19.7 ̸= 19.6 = fl(p + (q + r)) !!! Desta forma, as operações com números reais em um sistema de ponto flutuante poderão violar as propriedades usuais das operações básicas. É por este motivo que as operações deverão ser feitas exatamente na ordem em que aparecem. Thadeu Alves Senne CÁLCULO NUMÉRICO 13 / 20 Como o zero é representado em um sistema de ponto flutuante? O zero deverá ser representado com todos os d́ıgitos da mantissa iguais a zero e com o menor expoente posśıvel, para evitar perda de precisão em cálculos. Para ilustrar este fato, considere, por exemplo, o sistema de ponto flutuante F (10, 4, −4, 4) . Neste caso, o zero deverá ser representado por 0.0000× 10−4 . Se tomarmos, por exemplo, p = 0.0000× 104 e q = 0.3134× 102 , teremos p + q = (0.0000 + 0.0031)× 104 = 0.0031× 104 = 0.3100× 102 , de modo que perdemos 2 d́ıgitos do valor exato desta soma!!! Thadeu Alves Senne CÁLCULO NUMÉRICO 14 / 20 Problema: cancelamento de d́ıgitos Exemplo 4 Considere a função f (x) = √ x2 + 1− 1 e o sistema de ponto flutuante F (10, 4, −12, 12) . Calcule o valor de f (0.001) neste sistema. Solução: Seja x = 0.001 . Observe a sequência de cálculos: fl(x)= 0.1000× 10−2 , fl(x2) = (0.1000× 10−2)2 = 0.0100× 10−4 = 0.1000× 10−5 , Thadeu Alves Senne CÁLCULO NUMÉRICO 15 / 20 Problema: cancelamento de d́ıgitos Exemplo 4 Considere a função f (x) = √ x2 + 1− 1 e o sistema de ponto flutuante F (10, 4, −12, 12) . Calcule o valor de f (0.001) neste sistema. fl(x2 + 1) = (0.1000× 10−5) + (0.1000× 101) = (0.1000000 + 0.0000001)× 101 = 0.1000001× 101 Arredondando, obtemos fl(x2 + 1) = 0.1000× 101 . Thadeu Alves Senne CÁLCULO NUMÉRICO 16 / 20 Problema: cancelamento de d́ıgitos Exemplo 4 Considere a função f (x) = √ x2 + 1− 1 e o sistema de ponto flutuante F (10, 4, −12, 12) . Calcule o valor de f (0.001) neste sistema. fl( √ x2 + 1) = √ 0.1000× 101 = √ 0.0100× 102 = 0.1000× 101 e fl( √ x2 + 1− 1) = (0.1000− 0.1000)× 101 = 0.0000× 101 = 0.0000× 10−12 . Thadeu Alves Senne CÁLCULO NUMÉRICO 17 / 20 Problema: cancelamento de d́ıgitos Exemplo 4 Considere a função f (x) = √ x2 + 1− 1 e o sistema de ponto flutuante F (10, 4, −12, 12) . Calcule o valor de f (0.001) neste sistema. Logo, no sistema de ponto flutuante em questão, encontramos f (0.001) = 0 . Entretanto, o valor com 16 casas decimais corretas é f (0.001) = 0.4999998750587764× 10−6 . Tal diferença ocorreu devido ao fato de que √ x2 + 1 ≈ 1 para x ≈ 0 , o que produziu o cancelamento de d́ıgitos significativos ao aplicar o arredondamento ao termo x2 + 1 . Thadeu Alves Senne CÁLCULO NUMÉRICO 18 / 20 Problema: cancelamento de d́ıgitos Exemplo 4 Considere a função f (x) = √ x2 + 1− 1 e o sistema de ponto flutuante F (10, 4, −12, 12) . Calcule o valor de f (0.001) neste sistema. Para evitar o cancelamento de d́ıgitos significativos, podemos reescrever a função f em questão como f (x) = √ x2 + 1−1 = ( √ x2 + 1−1) (√ x2 + 1 + 1√ x2 + 1 + 1 ) = x2√ x2 + 1 + 1 . Desta forma, evitaremos o cancelamento devido à subtração entre os dois valores próximos √ x2 + 1 e 1 no caso em que x ≈ 0 . Thadeu Alves Senne CÁLCULO NUMÉRICO 19 / 20 Problema: cancelamento de d́ıgitos Exemplo 4 Considere a função f (x) = √ x2 + 1− 1 e o sistema de ponto flutuante F (10, 4, −12, 12) . Calcule o valor de f (0.001) neste sistema. Neste caso, utilizando esta expressão equivalente para f e considerando o sistema de ponto flutuante em questão, pode-se mostrar que f (0.001) = 0.5× 10−6 , cujo erro relativo em relação ao valor com 16 casas decimais corretas é de 2.5× 10−7 . ■ Thadeu Alves Senne CÁLCULO NUMÉRICO 20 / 20