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!