Exemplo em precisão finita
O que acontece quando o escalonamento é realizado em sistemas de ponto flutuante
Vamos lá?
Nas aulas passadas vimos como resolver um sistema linear por escalonamento ou através da decomposição LU. Nesta aula vamos ver o que acontece se as operações são realizadas em um sistema de ponto flutuante e quais cuidados devemos ter nesse caso.
- 1
- 2
- 3
O que representa a notação $\mbox{fl}(a+b)$?
Com base no exemplo do vídeo, você diria que...
O sistema linear do exemplo do vídeo foi $$ \left\{ \begin{array}{rcrcr} 0.0003x & + & 1.566y & = & \hphantom{-}1.569,\\ 0.3454x & - & 2.436y & = & 1.018, \end{array} \right. $$ cuja solução exata é $x=10$ e $y=1.$ Perceba que todos os coeficientes do problema, assim com a solução podem ser representados exatamente no sistema de ponto flutuante que escolhemos para este exemplo, que por motivos didáticos, armazena apenas os 4 dígitos mais significativos.
Mesmo assim, a solução computada numericamente foi muito ruim, $x=3.333$ e $y=1.001.$ Qualitativamente, o que aconteceu foi que trabalhar com um pivô pequeno (multiplicador grande) levou a uma perda da informação expressa pela segunda equação. Veja que a segunda linha do sistema linear deveria ser substituída por $$ \ell_2 \leftarrow -m \ell_1 + \ell_2, $$ mas em precisão finita e com apenas 4 dígitos, temos que $$ \ell_2 \leftarrow \mbox{fl}(-m \ell_1 + \ell_2) \approx -m \ell_1, $$ uma vez que a parcela mais significativa de $-m \ell_1 + \ell_2$ vem de $-m\ell_1,$ dado que $m=1151$ é muito grande. Ou seja, ficamos com um sistema linear onde a informação trazida pela segunda equação foi perdida.
Ao trocar a ordem das equações, ficamos com o sistema $$ \left\{ \begin{array}{rcrcr} 0.3454x & - & 2.436y & = & 1.018,\\ 0.0003x & + & 1.566y & = & \hphantom{-}1.569, \end{array} \right. $$ e portanto $m=8.686\cdot 10^{-4}.$ A operação de eliminação na segunda linha resultou em $$ \ell_2 \leftarrow \mbox{fl}(-m \ell_1 + \ell_2) \approx \ell_2, $$ visto que a parte mais significativa vem de $\ell_2,$ uma vez que $m$ é pequeno. Com isto, o resultado numérico para a solução do sistema foi claramente melhor.
De modo geral, devemos evitar trabalhar com pivôs pequenos. Este exemplo foi construído utilizando o processo de escalonamento, mas resultado semelhante aconteceria se estivéssemos computando a decomposição LU e utilizando-a para resolver o sistema linear.
Na próxima aula, veremos uma estratégia prática para evitar pivôs pequenos, conhecida como pivoteamento parcial, sem a qual podemos ter resultados verdadeiramente desastroso do ponto de vista numérico.
Referência
Lloyd N. Trefethen e David Bau, III. Numerical Linear Algebra. SIAM, 1997.
Nesse exercício, trabalhe com apenas 4 dígitos significativos.
- Escalone o sistema linear abaixo (método de eliminação de Gauss) e resolva-o. $$ \left\{ \begin{array}{ccccl} 10^{-8}x & + &10^{-4}y & = & 10^{-4}\\ 20x&+ & y &=&21 \end{array} \right. $$
- Escalone o sistema linear abaixo (método de eliminação de Gauss) e resolva-o. $$ \left\{ \begin{array}{ccccl} 20x&+ & y &=&21\\ 10^{-8}x & + &10^{-4}y & = & 10^{-4} \end{array} \right. $$
- Observe que os dois sistemas lineares anteriores diferem apenas pela ordem das equações e que a solução exata é $x\approx 1$ e $y\approx 1.$ As soluções obtidas no item (a) e (b) foram as mesmas? Explique o que aconteceu.
No item (a), o pivô é $10^{-8}$ e o multiplicador é $\fl(20/10^{-8}) = 2\cdot 10^9.$ A operação para escalonamento é $\ell_2 \ot \ell_2 - 2 \cdot 10^9\ell_1.$ O primeiro elemento da nova linha 2 é definido diretamente como nulo, por construção, enquanto o segundo elemento é atualizado para $\fl(1 - 2\cdot 10^9 \cdot 10^{-4}) = -2\cdot 10^{5}.$ O segundo elemento do termo independente torna-se $\fl(21 - 2\cdot 10^{5}) = -2\cdot 10^5.$ Sendo assim $y = \fl(-2 \cdot 10^5 / (-2\cdot 10^5)) = 1.$ Por fim, $x = 0.$
No item (b), o pivô é $20$ e o multiplicador é $\fl(10^{-8}/20) = 5\cdot 10^{-10}.$ A operação para escalonamento é $\ell_2 \ot \ell_2 - 5 \cdot 10^{-10}\ell_1.$ O primeiro elemento da nova linha 2 é definido diretamente como nulo, por construção, enquanto o segundo elemento é atualizado para $\fl(10^{-4} - 5\cdot 10^{-10}) = 10^{-4}.$ O segundo elemento do termo independente torna-se $\fl(10^{-4} - 5\cdot 10^{-10}\cdot 21) = 0.9999\cdot 10^{-4}.$ Sendo assim $y = \fl(0.9999\cdot 10^{-4} / 10^{-4})) = 0.9999.$ Por fim, $x = \fl((21 - 0.9999))/20)=1.$
Enquanto que no item (a) a solução foi $x=0$ e $y=1,$ no item (b) a solução encontrada foi $x=1$ e $y=0.9999.$