de problemas Números No mapa da mina, assinalei em cores o que já vimos. Em branco o que veremos agora. DIFERENCIABILI//. E CONDICIONAMENTO O mapa da mina OPERAÇÕES ELEMENTARES E CONTINUIDADE Revisão de vetores e matrizes Vetores, matrizes e a numpy
cadeia finita de funções elementares (incluindo aí comparações, e decisões lógicas) para computar uma outra função. Esta ideia independe do IEEE 754. Um algoritmo nada mais é que uma composição de operações elementares ∘ ⋅⋅⋅ ∘ 2 ∘ 1 = que computam uma função f associada ao problema.
dois algoritmos para resolver um problema associado a uma função f são composições diferentes: = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 e = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 Obviamente: Cada algoritmo poderá envolver uma quantidade diferente de operações elementares! 1º Cada operação elementar possui a sua sensibilidade – seu número de condicionamento! 2º
para cada uma das operações elementares e . Cada uma pode ser bem ou mau condicionada. Pois é Loirinha, lembre-se que: tanto a f como cada operação elementar e cada possui seu número de condicionamento.
elevar ao quadrado cada componente do vetor X calculei = max(). • Depois montei o vetor = /. Os elementos de Y satisfazem | | ≤ 1. Logo, elevá-los ao quadrado e somá-los não causará “overflow”.
de propriedades: 1. Associatividade, 2. Definição de oposto, 3. Existência do neutro. Como diria o Sherlock: “Elementar meu caro Watson, elementar”: + − = + − = + 0 =
causou um prejuízo enorme. Apesar de que, nesse caso, o erro foi na utilização do Método dos Elementos Finitos. De qualquer forma, um erro de Cálculo Numérico.
o Teorema Fundamental da Representação de Ponto Flutuante temos a esperança que − ∗ < , com = ∗ () sendo ∈ ℝ um número pequeno. • 0 ≅ 0 ∗; • 1 ≅ 1 ∗; • ... • ≅ ∗.
∗ ∆ ∆ Assumir que ∗ é uma perturbação qualquer de com ∆ = − ∗ . Então ∗ = ∗(∗) será o valor calculado pelo algoritmo ∗ = ∘ ⋯ ∘ 1 em ∗ e queremos estimar ∆ = − ∗ . Antes de continuar, podemos pensar (como os matemáticos) num problema mais geral!
Mas, voltando à situação inicial, o erro direto (forward error), é o erro ao calcular a solução para o dado (input) pelo algoritmo: ∆ = − ∗ = − ∗(∗) Solução do problema Solução calculada pelo algoritmo
2, por um determinado algoritmo, o erro direto (forward) é |∆| = ∗ − | = |1.41 − 1.41421… ≅ 0.00421… O problema em avaliar o erro forward é que a solução exata (no caso = 2) usualmente é desconhecida.
onde o algoritmo foi implementado. E fornece uma aproximação com ~7 casas decimais no caso de float32. Portanto, calcular o erro forward é algo apenas teórico. Como faremos na prática?
de contornar o problema: Descobrir qual aproximação de fornece o valor ∗ = ∗(∗) calculado pelo algoritmo e medir ∆ = − . Aproximação a descobrir f ( ) é a solução exata na aproximação . A solução exata do problema = () A solução calculada pelo algoritmo ∗ = ∗()
calcule 1.4142 = 1.999396. Então o erro backward será ∆ = 2 − 1.999396 = 0.000604 1.999396 2 Mestre usei um algoritmo para calcular 2 e obtive 2 ≅ 1.414. Como calculo o erro backward?
que permite calcular ∆ = − , o erro reverso (backward error) do algoritmo ∗ em . ∗ f A solução exata do problema Aproximação a descobrir −1 Solução exata na aproximação . A solução calculada pelo algoritmo ∆ Backward error
com o algoritmo, ሚ (), é uma boa aproximação (∆ é pequeno) para a solução ( ) de um problema aproximado (∆ é pequeno). ∆ f ሚ ∆ = ሚ () = ( ) Solução calculada com o algoritmo Solução do problema aproximado
f é bem condicionado e um algoritmo ሚ para calcular a solução é estável poderemos garantir que a solução computada ሚ () e a solução real () estarão próximas. Algoritmo estável ሚ () Resultado confiável () f ሚ Problema bem condicionado
Garantir que o problema é bem condicionado; 2. Usar um algoritmo estável para calcular a solução. Exatamente, Surfista. Então você terá certeza que a solução computada estará próxima da solução real. Veremos isto na prática ao longo do curso.