Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão Python

2.7 Cancelamento catastrófico


Quando fazemos subtrações com números muito próximos entre si, ocorre o que chamamos de “cancelamento catastrófico”, onde podemos perder vários dígitos de precisão em uma única subtração.

Exemplo 2.7.1. Efetue a operação

0,987624687925 - 0,987624 = 0,687925 × 10-6 (2.86)

usando arredondamento com seis dígitos significativos e observe a diferença se comparado com resultado sem arredondamento.

Solução. Os números arredondados com seis dígitos para a mantissa resultam na seguinte diferença

0,987625 - 0,987624 = 0,100000 × 10-5 (2.87)

Observe que os erros relativos entre os números exatos e aproximados no lado esquerdo são bem pequenos,

|0,987624687925 - 0,987625| |0,987624687925| = 0,00003159 (2.88)

e

|0,987624 - 0,987624| |0,987624| = 0%, (2.89)

enquanto no lado direito o erro relativo é enorme:

|0,100000 × 10-5 - 0,687925 × 10-6| 0,687925 × 10-6 = 45,36%. (2.90)

Exemplo 2.7.2. Considere o problema de encontrar as raízes da equação de segundo grau

x2 + 300x - 0,014 = 0, (2.91)

usando seis dígitos significativos.

Aplicando a fórmula de Bhaskara com a = 0,100000 × 101, b = 0,300000 × 103 e c = 0,140000 × 10-1, temos o discriminante: Δ = b2 - 4 a c (2.92) = 0,300000 × 103 × 0,300000 × 103 (2.93) + 0,400000 × 101 × 0,100000 × 101 × 0,140000 × 10-1 (2.94) = 0,900000 × 105 + 0,560000 × 10-1 (2.95) = 0,900001 × 105 (2.96)

e as raízes: x1,x2 = - 0,300000 × 103 ±Δ 0,200000 × 101 (2.97) = - 0,300000 × 103 ±0,900001 × 105 0,200000 × 101 (2.98) = - 0,300000 × 103 ± 0,300000 × 103 0,200000 × 101 (2.99) (2.100)

Então, as duas raízes obtidas com erros de arredondamento, são:

x̃1 = - 0,300000 × 103 - 0,300000 × 103 0,200000 × 101 = -0,600000 × 103 0,200000 × 101 = -0,300000 × 103 (2.101)

e

x̃2 = - 0,300000 × 103 + 0,300000 × 103 0,200000 × 101 = 0,000000 × 100 (2.102)

No entanto, os valores das raízes com seis dígitos significativos livres de erros de arredondamento, são:

x1 = -0,300000 × 103ex 2 = 0,466667 × 10-4. (2.103)

Observe que a primeira raiz apresenta seis dígitos significativos corretos, mas a segunda não possui nenhum dígito significativo correto.

Observe que isto acontece porque b2 é muito maior que 4ac, ou seja, b b2 - 4ac, logo a diferença

-b + b2 - 4ac (2.104)

estará próxima de zero. Uma maneira de evitar o cancelamento catastrófico é aplicar procedimentos analíticos na expressão para eliminar essa diferença. Um técnica padrão consiste usar uma expansão em série de Taylor em torno da origem, tal como:

1 - x = 1 - 1 2x + O(x2). (2.105)

Substituindo esta aproximação na fórmula de Bhaskara, temos: x = - b ±b2 - 4ac 2a (2.106) = - b ± b1 - 4ac b2 2a (2.107) - b ± b 1 - 4ac 2b2 2a (2.108) (2.109)

Observe que 4ac b2 é um número pequeno e por isso a expansão faz sentido. Voltamos no exemplo anterior e calculamos as duas raízes com o nova expressão x̃1 = - b - b + 4ac 2b 2a = -b a + c b (2.110) = -0,300000 × 103 0,100000 × 101 - 0,140000 × 10-1 0,300000 × 103 (2.111) = -0,300000 × 103 - 0,466667 × 10-4 (2.112) = -0,300000 × 103 (2.113)

x̃2 = - b + b - 4ac 2b 2a (2.114) = -4ac 4ab (2.115) = -c b = -- 0,140000 × 10-1 0,300000 × 103 = 0,466667 × 10-4 (2.116) (2.117)

Observe que o efeito catastrófico foi eliminado.

Observação 2.7.1. O cancelamento catastrófico também poderia ter sido evitado através do seguinte truque analítico: x2 = - b + b2 - 4ac 2a = - b + b2 - 4ac 2a - b -b2 - 4ac - b -b2 - 4ac (2.118) = b2 - b2 - 4ac 2a -b -b2 - 4ac = 4ac 2a -b -b2 - 4ac (2.119) = - 2c b + b2 - 4ac (2.120)

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 15/5/2019 às 15:24:50.

Informe erros ou edite você mesmo!