Slide 1

Slide 1 text

LNCC UFRJ Estabilidade de algoritmos Prof. Paulo R. G. Bordoni

Slide 2

Slide 2 text

Números NO COMPUTADOR Estabilidade DE ALGORIMOS Algoritmos e a resolução 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

Slide 3

Slide 3 text

• O mapa da mina • Recordação rápida do que já vimos sobre algoritmos • O mesmo algoritmo, um deles gerando um gráfico “chocante” • Duas lições a apreender Este conjunto de transparências é dedicado . Eis um resumo do que veremos:

Slide 4

Slide 4 text

Recordando: × f = () Não confundam função com uma expressão que permite calculá-la. Podem haver diversas. Por exemplo = ( − 1)2 e = 2 − 2 + 1.

Slide 5

Slide 5 text

Recordando: Nada a ver, ( − 1)2 = 2 − 2 + 1, é uma identidade! Apressadinho! Do lado esquerdo 2 operações elementares, do lado direito 4. O dobro!

Slide 6

Slide 6 text

Recordando: Calma Surfista, você verá que a fala do Filósofo faz sentido. O valor = () de uma função : → pode ser calculado de diversas formas. Cada uma estabelece um algoritmo para calcular y em ∈ .

Slide 7

Slide 7 text

Recordando: f Y f1 X fn Y1 X2 Xn Yn-1 Qualquer função computável : → é computada através de uma sucessão finita de operações elementares. Incluindo as do IEEE 754. Diagramaticamente:

Slide 8

Slide 8 text

Recordando: Então, Loirinha: Um algoritmo é, essencialmente, uma descrição dessa 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.

Slide 9

Slide 9 text

Pois é Surfista, você está cansado de saber que ( − 1)3= 3 − 32 + 3 − 1. Claro, Mestre, a igualdade é pela expansão do binômio de Newton!

Slide 10

Slide 10 text

Portanto você concorda que = ( − 1)5 e = 5 + −54 + 103 − 102 + 5 − 1 representam funções iguais, só os algoritmos são diferentes. Claro, Mestre, pelo do binômio de Newton temos = , ∀ ∈ ℝ.

Slide 11

Slide 11 text

Consequentemente os gráficos de f e g serão absolutamente iguais!

Slide 12

Slide 12 text

Confira cuidadosamente que não há erro nenhum no programa, e depois explique-me o que aconteceu!

Slide 13

Slide 13 text

Matemática não é loteria, Surfista. É, mas com d_t = 0.05 dá certo. Veja!

Slide 14

Slide 14 text

Há duas lições a aprender com este exemplo, Surfista. A 1ª delas é que algoritmos distintos para resolver o mesmo problema podem conduzir a resultados computacionais diferentes.

Slide 15

Slide 15 text

É, o algoritmo que gera o gráfico em vermelho não é estável. Ele envolve muitas operações elementares e alguma delas é mau condicionada.

Slide 16

Slide 16 text

Como 2ª lição de hoje, Surfista: Não exija além das possibilidades do IEEE 754. Volte lá nos dois gráfico e atente para a escala vertical do 1º e a do 2º.

Slide 17

Slide 17 text

“Forcei a barra” com d_t = 0.001. Veja o desastre! A escala vertical está no limite da precisão double.

Slide 18

Slide 18 text

Lembre-se Surfista, os limites para o IEEE 754 são os seguintes:

Slide 19

Slide 19 text

No estudo de algoritmos no computador, o 1º aspecto a considerar é o número de operações elementares utilizadas pelo algoritmo. O 2º envolve a propagação de erros.

Slide 20

Slide 20 text

Perante a matemática finita do IEEE 754 o que distingue 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º

Slide 21

Slide 21 text

O 2º aspecto só aparece porque não vale o axioma de existência do supremo na representação de ponto flutuante do IEEE 754. É alguns algoritmos serão estáveis. Outros não.

Slide 22

Slide 22 text

Sim Loirinha, como vimos no exemplo gráfico da função ↦ ( − 1)5 , compostas = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 e = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 podem responder de forma diferente face à propagação de erros do IEEE 754. Estabilidade?!

Slide 23

Slide 23 text

A f pode ser ser bem ou mau condicionada. Idem 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.

Slide 24

Slide 24 text

f Y X Y1 f1 X2 Uma situação altamente indesejável é a f ser bem condicionada, mas uma das operações elementares (ou ) ser mau condicionada. Então o algoritmo será instável. fn Xn Yn-1

Slide 25

Slide 25 text

É ... Basta uma maçã podre para estragar toda a cesta!

Slide 26

Slide 26 text

Podemos ter problemas no cálculo (algoritmo!) da hipotenusa. Algo tão simples como o teorema de Pitágoras. a b c = 2 + 2

Slide 27

Slide 27 text

Surfista, explique porque o cálculo da norma NÃO funcionou para 16 bits.

Slide 28

Slide 28 text

A cura! Meu remédio foi mudar o algoritmo!

Slide 29

Slide 29 text

Como? Veja no código, no algoritmo novo: • Antes de 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”.

Slide 30

Slide 30 text

Quem quiser mais detalhes sobre este, e outros problemas, leia o artigo abaixo, que está no site do Mestre.

Slide 31

Slide 31 text

Será instrutivo examinar alguns exemplos simples. De erros causados por assumir que algoritmos distintos, que resolvem o mesmo problema, conduzem à mesma solução computacional.

Slide 32

Slide 32 text

Pois é Filósofo, algo simplérrimo. Mas são dois algoritmos distintos. A ordem das parcelas não altera a soma: + + = + ( + ).

Slide 33

Slide 33 text

A lei do cancelamento, na adição, está escondida na sequência de propriedades: 1. Associatividade, 2. Definição de oposto, 3. Existência do neutro. Como diria o Sherlock: “Elementar meu caro Watson, elementar”: + − = + − = + 0 =

Slide 34

Slide 34 text

Neste programa, eu sorteio valores para e y no intervalo (0, 1), testo a lei do cancelamento. No caso de falha, emito uma mensagem e mostro os resultados.

Slide 35

Slide 35 text

Você já ouviu falar que: “De grão em grão, a galinha enche o papo” Veja o exemplo a seguir! Ah, Mestra, não acontece sempre. Quando aparecem são errinhos minúsculos, lá na última casa!

Slide 36

Slide 36 text

Sherlock, mostre ao Surfista o exemplo real, e trágico, ocorrido na guerra do Golfo EUA x Arábia Saudita

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Não é a mesma coisa, mas repeti seu programa para = 100 × 60 × 60 × 10 = 3.600.000

Slide 39

Slide 39 text

A ordem dos fatores não altera o produto: ∗ ∗ = ∗ ( ∗ ). Apesar da igualdade, como na adição, são dois algoritmos distintos, que podem conduzir a resultados diferentes!

Slide 40

Slide 40 text

Mestra, é isso mesmo! Meu programa mostra que pode ocorrer erro na associatividade da multiplicação.

Slide 41

Slide 41 text

Também não vale a lei do cancelamento multiplicativo. Nem sempre teremos ( ∗ )/ = .

Slide 42

Slide 42 text

Testando o inverso multiplicativo: 1 = 1

Slide 43

Slide 43 text

O Sherlock está se referindo a subentendidos do tipo 235.0 = 235 Meu caro Watson Surfista, você poderá ser gravemente punido ao fazer conversões ingênuas, do tipo ⟷

Slide 44

Slide 44 text

Um “ERRINHO” na conversão float64 int16

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

Na próxima transparência, mostro um 3º exemplo de erro, que 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.

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

Os exemplos mostram de forma clara que alguns algoritmos podem produzir catástrofes. O termo matemático para descrever a situação é a estabilidade dos algoritmos. Alguns são estáveis e outros instáveis.

Slide 49

Slide 49 text

Y X Vamos analisar um problema (direto) definido por uma função : → que, para um ∈ dado, associa um único = ∈ , via ↦ = ∈ . f

Slide 50

Slide 50 text

Y X Como sempre, o cálculo de = é efetuado por um algoritmo. Em outras palavras, é uma composta de funções elementares: = ∘ ⋯ ∘ 1 ∘ 0 = ∘ ⋯ ∘ 1 ∘ 0

Slide 51

Slide 51 text

É fundamental entender que usaremos um algoritmo para calcular a solução no computador. Por quê você grifou computador Sherlock?

Slide 52

Slide 52 text

O grifo do Sherlock é de importância capital. No computador as operações elementares são ligeiramente diferentes: • 0 ≅ 0 ∗; • 1 ≅ 1 ∗; • ... • ≅ ∗.

Slide 53

Slide 53 text

• 0 ≅ 0 ∗; • 1 ≅ 1 ∗; • ... • ≅ ∗. Y X ∗ ∗ = ∗ ∘ ⋯ ∘ 1 ∗ ∘ 0 ∗ Como resultado a composta produzirá outra função ∗: ∗ = ∗ ∘ ⋯ ∘ 1 ∗ ∘ 0 ∗. Então, quase com certeza, = ≠ ∗ = ∗().

Slide 54

Slide 54 text

Entretanto, como as operações elementares ∗ da IEEE 754/2008 satisfazem o Teorema Fundamental da Representação de Ponto Flutuante temos a esperança que − ∗ < , com = ∗ () sendo ∈ ℝ um número pequeno. • 0 ≅ 0 ∗; • 1 ≅ 1 ∗; • ... • ≅ ∗.

Slide 55

Slide 55 text

X X Usualmente a 1ª operação da composta, a 0 ∗, é a operação de entrada de dados no computador, 0 ∗ = , isto é: ↦ ∗ = (). 0 = ∗ E, já vimos que ∗ = () com − ∗ < ().

Slide 56

Slide 56 text

Y X f ∗ = ∘ ⋯ ∘ 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!

Slide 57

Slide 57 text

Mas por que, Mestre? Por que, em muitas situações, o valor ∗ proveio de outros cálculos já realizados por algum outro algoritmo.

Slide 58

Slide 58 text

∆ ∗ ∗ = ∗() = () f Forward error 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

Slide 59

Slide 59 text

Para a aproximação ∗ = 1.41 obtida ao calcular = 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.

Slide 60

Slide 60 text

Claro Mestre! E é para isto que usamos o computador, 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?

Slide 61

Slide 61 text

Wilkinson, no final dos anos 1950, bolou uma forma ingênua 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 ∗ = ∗()

Slide 62

Slide 62 text

2 1.414 Como a inversa de ↦ é ↦ 2, 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?

Slide 63

Slide 63 text

Sim, é o conhecimento de ෤ (solução do problema inverso) 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

Slide 64

Slide 64 text

E quando o erro reverso é pequeno, o algoritmo é backward estável. Quando o erro direto é pequeno, o algoritmo é forward estável.

Slide 65

Slide 65 text

Um algoritmo ∗ para calcular a solução de um problema f num ponto ∈ é estável quando existe ෤ ∈ tal que os erros backward, ∆, e forward, ∆, são pequenos. ∆ f ∗ ෤ ∆ ∗() (෤ ) Backward error Forward error

Slide 66

Slide 66 text

Em outras palavras quando, para cada ∈ a solução calculada 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

Slide 67

Slide 67 text

f Y X ሚ ෤ (෤ ) () f ∆x ሚ () Se um problema 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. Problema bem condicionado Algoritmo estável

Slide 68

Slide 68 text

Mestres, se entendi bem, na prática são dois passos: 1. 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.

Slide 69

Slide 69 text

Como garantir a estabilidade? Não tenho a mínima ideia, Mestra! A 1ª parte é fácil. Achar o número de condicionamento envolve apenas uns cálculos de derivada.

Slide 70

Slide 70 text

Como vimos, são três as possibilidades, Loirinha: • forward • backward • total. Mostrarei um exemplo de análise do erro forward.

Slide 71

Slide 71 text

Considere o problema de calcular o valor de = 1 + − 1 para próximo de 0. Vamos considerar o algoritmo natural, descrito pela composição = 3 ∘ 2 ∘ 1 na qual: • 1 = 1 + , para próximo de 0, • 2 = , para próximo de 1, • 3 = 1 − , para próximo de 1.

Slide 72

Slide 72 text

De cara precisamos saber se o problema é bem ou mal condicionado em = 0. Temos = Τ 1 2 1 + de forma que: • , = 1/2 1 + , • , = Τ ( 1 + + 1) 2 1 + . Logo o problema é bem condicionado em = 0: • , 0 = 1/2, • , 0 = 1.

Slide 73

Slide 73 text

∆ ሚ ෤ = ሚ () = () f 0 Forward error Solução do problema Solução calculada pelo algoritmo ሚ = 3 ∘ 2 ∘ 1 Para estimar o erro forward, precisamos saber do condicionamento relativo das 1 , 2 , 3 .

Slide 74

Slide 74 text

E os números de condicionamento relativo são calculados a partir de: • 1 , = Τ (1 + ), em = 0, • 2 , = 1/2, em = 1, • 3 , = Τ (1 − ), em = 1. As derivadas são: • 1 = 1, para = 0, • 2 = 1/2 , para = 1, • 3 = −1, para = 1.

Slide 75

Slide 75 text

A conclusão é que o algoritmo é forward instável, pois: • 1 é bem condicionada em = 0, • 2 é bem condicionada em = 1, • Entretanto 3 é mau condicionada em = 1 pois lim →1 3 , = +∞.

Slide 76

Slide 76 text

Como o problema é bem condicionado existem algoritmos estáveis para calcular a solução. Um outro algoritmo (estável) para calcular f é obtido da identidade = 1 + − 1 = ( 1 + − 1)( 1 + + 1) 1 + + 1 = /( 1 + + 1).

Slide 77

Slide 77 text

Lembrem-se: um algoritmo ሚ para calcular a solução de um problema f é “backward “ estável quando “calcula de forma exata a solução de um problema aproximado” Ah Mestre, como eu faço uma análise do erro backward?

Slide 78

Slide 78 text

Surfista, a ideia a perseguir é: ”A solução calculada (com o algoritmo) é a solução exata de um problema aproximado”. A análise backward objetiva explicar o erro do algoritmo quantificando o erro nos dados.

Slide 79

Slide 79 text

O erro backward é mais fácil de estimar que o erro forward. Mais adiante, no curso, veremos alguns exemplos. A solução obtida com o algoritmo é boa quando é a solução exata de um problema aproximado!

Slide 80

Slide 80 text

Tchau, até a próxima aula!