Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Problemas e condicionamento

Problemas e condicionamento

Começo detalhando as operações aritméticas básicas nos reais e que é perdido ao passar para o IEEE 754. Depois, norteado pela definição de Trefethen de Cálculo Numérico, analisamos em detalhe que coisa é um problema e sua associação com funções. Definimos número de condicionamento (absoluto e relativo) de um problema e examinamos diversos exemplos.

Paulo Bordoni

April 08, 2014
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Os sistemas IEEE 754 de ponto flutuante NÃO foram criados

    para aproximar números reais no computador.
  2. Nossa análise até agora mostrou que: Mais de 99,99% dos

    números ∗ = () do padrão IEEE, Single ou Double apresentam: • Erro absoluto limitado pela (). • Erro relativo limitado pelo “épsilon da máquina”, Eps.
  3. = − ∗ < = − ∗ < Insistindo no

    aspecto fundamental: ∈ ℝ mas ∗ = ∈ ℚ, com: Mas você está focando apenas no aspecto estático das coisas. E a dinâmica dos processos?
  4. De fato Professora, a principal razão de existência dos números

    reside na possibilidade de computar com eles. “C’est la raison d’etre” dos computadores. Como se comportarão as operações algébricas perante tais erros?
  5. Mestres, Existem conhecimentos subjacentes ao entrelaçamento operações algébricas ↔ IEEE

    754 que precisam ser aprofundados. Sim Filósofo, precisaremos entender o comportamento das operações algébricas no seio do IEEE 754.
  6. As operações algébricas são funções definidas para números reais. A

    adição recebe um par de números reais e devolve um número real. Isto também vale para os racionais e os complexos. + Adição z = x + y ℝ (x,y) y x ℝ ℝ
  7. ∗ Multiplicação (x,y) y x ℝ ℝ z = x

    ∗ y ℝ O mesmo vale para a multiplicação em ℚ, ℝ e ℂ.
  8. Já vimos que ℚ, ℝ e ℂ com as operações

    de adição + e multiplicação ∙ constituem estruturas algébricas com propriedades que caracterizam um corpo. Em outras palavras, são grupos abelianos para a adição e a multiplicação (tirando o 0) e satisfazem também a distributividade da multiplicação sobre a adição.
  9. Além disso ℚ e ℝ, é são corpos ordenados. Isto

    é, para quaisquer , , ∈ ℚ, ℝ valem as afirmações: • > ⟹ + > + • > 0 > 0 ⟹ > 0 Sabemos também que, o que distingue ℝ de ℚ é a propriedade “de existência do supremo”.
  10. A existência do supremo”: “Todo subconjunto (≠ ∅) limitado superiormente

    de ℝ possui um supremo”. É ela que permite falarmos em limites, continuidade, derivadas, integrais, ... Todo o Cálculo Diferencial e Integral - a matemática do contínuo.
  11. Mestres, os sistemas IEEE de ponto flutuante são constituídos apenas

    por números racionais. Então perdemos essa propriedade! Exatamente, Surfista. Esta é a maior perda. Ela é terrível!
  12. Mas, então como faremos as coisas de Cálculo no computador?

    A palavra chave é engenhosidade Loirinha, criatividade e conhecimento.
  13. Este é o ponto central de nossos estudos. Vejam definição

    de Trefethen para Cálculo Numérico:
  14. Aliás, Surfistas e Loirinhas, se vocês não lerem o Apêndice

    abaixo, onde Trefethen discorre maravilhosamente sobre a definição de Análise numérica, estarão reprovados!
  15. A definição de Trefethen para Cálculo Numérico será nosso roteiro.

    Continuaremos analisando o sistema IEEE 754 de ponto flutuante para descobrir os problemas e a forma de lidar com eles.
  16. Observem que para obter o oposto, −, e o inverso,

    1/, de ∈ ℝ temos que resolver os problemas: • Qual ∈ ℝ satisfaz a equação + = 0. • Qual ∈ ℝ satisfaz a equação ∗ = 1 São as operações de subtração e divisão, − e / que fornecem a solução para esses problemas.
  17. Assim, operacionalmente, não basta falar em adição e multiplicação. Precisaremos

    das quatro operações elementares +, −, ∗ e /. E, também da igualdade =, ≠ , das operações lógicas ( ∧,∨, →, ↔ ) e da relação de ordem >, ≥ .
  18. É por esse motivo operacional que os computadores possuem uma

    unidade de aritmética e lógica na qual essas operações foram implementadas de acordo com os padrões do IEEE 754. Eu nunca tinha me detido em pensar nessas questões, Filósofo!
  19. As linguagens C e Fortran padrão usam a unidade de

    aritmética e lógica. Linguagens como Python, Java e as .net trabalham com máquinas virtuais que obedecem o padrão IEEE 754 em suas implementações. Assim, todas as operações lógicas, comparações e as operações elementares +, −, ∗ , / e já satisfazem o padrão IEEE 754.
  20. Mas será que, operacionalmente, a aritmética do IEEE 754 manterá

    as propriedades de corpo? Não será possível! Mas essa tua pergunta, desencadeará uma série de outras perguntas.
  21. Além da perda do contínuo, Loirinha, como os números do

    IEEE 754 estão limitados à faixa (−, +), perdemos também a propriedade do fechamento. Isto não será tão problemático pois os sistemas IEEE 754 nos informarão com mensagens de erro adequadas.
  22. Este exemplo simples, com o Toy System, que obedece o

    IEEE 754, confirma que a adição não é fechada. Vejam, a soma de = 0.125 e = 1.0, ambos números do Toy, é + = 1.125, que não está no Toy System. +
  23. Bem Loirinha, o passo seguinte é obrigar “a ovelha desgarrada”

    retornar ao lar. Mas e aí, o que eu faço com o resultado? +
  24. Em outras palavras, precisamos transformar o resultado num número do

    tipo IEEE 754. Sim, e esse “modus operandi” se aplica a todos os tipos float do IEEE 754.
  25. Não Loirinha, quando somamos dois números, o computador (o IEEE

    754) já dá o resultado diretamente! Mas, depois de calcular + , eu sempre vou ter que aproximar o resultado, isto é calcular ( + ) ?
  26. IEEE 754 Operações com IEEE 754 ℚ IEEE 754 IEEE

    754 A imagem a gravar é esta, para todas as operações elementares e a . ∘ = +,∗, −,/, ∗ = ( ∘ ) = ∘ ∘ (, ) ° *
  27. Uma nova operação, ? ° * Na realidade é uma

    das operações ∘ seguida de fl( ). ° *
  28. Inclusive, o IEEE 754 já devolve informações do tipo +Inf,

    -Inf ou NaN nos casos excepcionais. Portanto, para nossos programas não travarem, temos que incluir rotinas para tratamento desses tipos de erro.
  29. As operações aritméticas elementares e a foram construídas na IEEE

    754 de forma a satisfazer o teorema fundamental da representação de ponto flutuante:
  30. Se , ∈ ℝ e , e ∘ estão na

    faixa normal de um dos sistemas IEEE 754, então ∘ = ( ∘ )(1 + ) para algum satisfazendo < . Substitua ∘ por +, −, ∗, / ou .
  31. • Erro relativo: ∘ − ∘ | ∘ | <

    , ∘ ≠ 0 • Erro absoluto: ∘ − ∘ < ( ∘ ) Em outras palavras, são observadas as limitações:
  32. Mestre, o que é um problema? Loirinha, esta é uma

    pergunta com resposta difícil. Vá perguntar ao Polya
  33. Ele nos ensinou que os ingredientes essenciais de um problema

    são os dados, a condição e a incógnita. Dados Incógnita Problema Condição
  34. Penso em descobrir algum elemento (a incógnita) de algum conjunto

    (de dados), que satisfaz alguma condição dada. Dados Incógnita Problema Condição Mestra, descreva seu imaginário, sua imagem mental, para um problema!
  35. Sim Mestra, conjuntos! Eles constituem a entidade matemática apropriada para

    formalizar o conceito de problema. Mais precisamente, relações, que são subconjuntos do produto cartesiano de dois conjuntos X e Y: ⊆ ×
  36. × R O visual geométrico de uma relação R: um

    subconjunto de × : E quando , ∈ escrevemos . ,
  37. 1,3 × [1,2] 2 1 3 1 2 Vejam a

    relação ≥ em [1,3] × [1,2]: Escrevemos ≥ quando , ∈ ≥ . ,
  38. × R A incógnita de um problema pode ser um

    elemento de qualquer dos três conjuntos X, Y ou R. Então os dados serão elementos dos outros dois conjuntos!
  39. × R Os três tipos clássicos de problema. Incógnita Tipo

    de problema Dados ∈ direto ∈ ∈ inverso ∈ identificação ∈ ∈
  40. Pense numa tabela, na qual: “para cada segundo , marcamos

    a distância de um paraquedista ao solo”. Não entendi os problemas de identificação, Mestres.
  41. Assuma que T é o tempo total transcorrido até êle

    tocar o solo. Obtenha a função : [0, ] → ℝ que descreve a associação ↦ (), para qualquer instante de tempo t durante a queda. Sim, mas qual é o problema?
  42. Trivial. É só usar que a aceleração da gravidade é

    = 9.8 /2. Que interesse há nisso? Descobrir a velocidade final do paraquedista.
  43. −1,1 × [−1,1] 1 1 −1 −1 2 + 2

    = 1 Vejam a relação 2 + 2 = 1 em [−1,1] × [−1,1]:
  44. Funções constituem casos particulares de relações satisfazendo a exigência ∧

    ⟹ = . Nesse caso R descreve uma relação de causa e efeito: não existe a possibilidade de efeitos distintos y e z para a mesma causa . × R Situação proibida para funções. y z
  45. × f = () Face à ideia de descreverem relações

    de causa e efeito, as funções são anotadas previlegiando a direção: : → com = (). Também por isto, a exigência serem definidas para todo elemento ∈ .
  46. Y X −1 Existem também os problemas de controle... Lembro

    que um problema inverso pode ser transformado num direto através da relação inversa. A inversa nem sempre é função. Pensem em () = 2
  47. × 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.
  48. Realmente Filósofo, valor = () de uma função : →

    pode ser calculado de diversas formas. Cada uma estabelece um algoritmo para calcular y em ∈ .
  49. Nada a ver, ( − 1)2 = 2 − 2

    + 1, é uma identidade! Apressadinho! Do lado esquerdo 2 operações, do lado direito 4. O dobro!
  50. Problemas funções e algoritmos estão assim associados. Para cada problema,

    uma função. Eventualmente mais de um algoritmo para calcular a solução do problema. Uma questão fundamental na Análise Numérica é a sensibilidade da solução aos dados do problema.
  51. Claramente, a 1ª exigência é a continuidade da função. Se

    uma função : → é descontínua num ponto 0 ∈ , basta uma variação mínima em para um salto em . = (0 ) f
  52. Um problema, associado a uma função : → onde ,

    são espaços métricos, é bem condicionado num ponto ∈ quando: f f y () () Para pontos ∈ , nas vizinhanças de , o quociente ( , ) (, ) é pequeno. Ambas as distâncias da mesma ordem de grandeza
  53. f f y () () A ideia de mal condicionamento:

    O quociente ( , ) (, ) é muito grande, maior que dezenas.
  54. Quando , são espaços métricos a definição técnica é: O

    número de condicionamento de um problema associado a uma função : → num ponto ∈ é definido por , = lim →0 sup{ , , , ∈ }
  55. Bem Mestre você definiu condicionamento absoluto de um problema. Existe

    também o condicionamento relativo. Claro, mas para isso precisarei de calcular os quocientes entre: • ( , ) e • (, ) e . Entretanto e podem não ser números.
  56. É o quociente de − |() | por − |

    |, quando possível. Isto é, o número − |() | − | | Quando = = ℝ não há problema, é só calcular o quociente das medidas relativas:
  57. O número de condicionamento relativo de um problema associado a

    uma função : → num ponto ∈ é definido por , = lim →0 sup{ − /| | − /|| , ∈ } A definição técnica fica:
  58. , = lim →0 sup{ ∙ − () ∙ −

    , ∈ } Simplificando, teremos: Muito simples Mestre. Verdadeiramente trivial !
  59. Para um problema associado a uma função : ⊂ ℝ

    → ℝ a medida do condicionamento absoluto (, ) em pontos ∈ é descrita pelo lim dos quocientes − ( + ∆) /∆ para pontos = + ∆ em , com Δ pequeno. Em outras palavras, Mestres, pela derivada da f no ponto , já que ′ = lim ∆→0 + ∆ − () ∆
  60. Absolutamente correto, Surfista , = |′ |, desde que :

    ⊂ ℝ → ℝ seja derivável em . E também, para () ≠ 0, , = || ∙ |′ | | | .
  61. Quando a : ⊂ → é derivável em ∈ e

    tanto U como V são espaços vetoriais normados temos: , = () , = ∙ () ()
  62. Atenção Surfista, nessas fórmulas, () é a matriz jacobiana da

    f em . E, além disso: • é a norma em U, • () é a norma em V, • () é a norma induzida da matriz jacobiana. Mas isto fica para depois.
  63. É muita teoria, como eu uso (, ), na prática?

    Lembre-se, (, ) foi definido através do limite → do quociente − /| | − /|| .
  64. Portanto, para > 0, pequeno e = ± teremos −

    () ≅ , − Ora, quando = ∗, ∗ = (), ∗ − = . Portanto: ∗ − () () ≅ , ∗
  65. Dito de outra forma, o erro relativo ao calcular a

    solução ∗ , no computador (i.é, com o IEEE 754), é ( , ∗ ). ( ) é uma abreviação para “é da ordem de y”.
  66. Mestre qual é o condicionamento da adição/subtração? Então Loirinha, a

    adição/subtração, em que a > 0, é dada pelo par de funções = ± , Portanto = ±1. Assim temos = = 1, e o condicionamento absoluto é ótimo.
  67. Pensando computacionalmente: O erro absoluto nos dados (inputs) é ()

    e o o erro no resultado (outputs) também é .
  68. Já o condicionamento relativo é dado por = | |

    = = ± ∙ 1 Em particular, na subtração, para = + , com > 0, teremos = + = + 1
  69. Esta situação conduz a um problema clássico, conhecido como cancelamento

    catastrófico. Não entendi o porque do nome cancelamento catastrófico! Obviamente lim →0 = +∞.
  70. f Quando os números são aproximadamente iguais, todos os bits

    mais significativos da fração são iguais e, na subtração, eles se cancelam, restanto os últimos. Como, com 99 ,99% de certeza, os floats32 apresentam erro na 24ª casa binária da fração, após a normalização, esse erro é então promovido para as primeiras casas. 0 0 0 0 X X
  71. Mestres, um programinha, pelo amor de deus! Ok Surfista, faremos

    um programa que mostra o cancelamento catastrófico.
  72. Eis o código do programa, todo comentado! Recebendo x e

    y, via teclado, com 64 bits. Convertendo para 32 e 16 bits. Calculando a diferença deles. Calculando o nº de condicionamento.
  73. Calculamos os erros relativos, com 64, 32 e 16 bits,

    assumindo a representação 64 bits como exata. Estimativa do erro relativo. Estimativas dos dígitos perdidos e os dígitos confiáveis.
  74. O cancelamento catastrófico salta à vista, agora em single! A

    diferença também deu 0. Temos novamente 100% de erro.
  75. Entendeu agora, Loirinha, o motivo do nome cancelamento catastrófico. Realmente

    uma catástrofe. Nunca imaginei que pudessem ocorrer erros absurdos assim no computador!
  76. Então Loirinha, a multiplicação por a, é dada por =

    ∗ , Portanto = . Assim temos = = . Mestre qual é o condicionamento da multiplicação?
  77. Portanto multiplicar por valores grandes propaga o erro. Maior o

    multiplicador, maior é o erro absoluto no produto Observem que lim →∞ () = + ∞
  78. Já o condicionamento relativo é dado por = | |

    = = ∗ = 1 ∙ Assim, o condicionamento relativo da multiplicação é ótimo.
  79. Mestre e no caso da divisão? Então Loirinha, a divisão

    de a por é dada por = /, Portanto = −/2. Assim temos = = /2.
  80. Observem que lim →0 () = + ∞ Assim, dividir

    por valores pequenos propaga muito o erro absoluto.
  81. Já o condicionamento relativo da divisão é dado por =

    | | = = / /2 = 1 ∙ Assim, o condicionamento relativo da divisão também é ótimo.
  82. Mestre, a raiz quadrada, também é uma operação implementada como

    elementar no IEEE 754. Como é o condicionamento de ? Então Loirinha, seja r a função radiciação, = , para ≥ 0. Sabemos que = 1 2 , ≠ 0 . Assim temos, para > 0: = = 1 2 .
  83. Já o condicionamento relativo da radiciação é dado, para >

    0, por = || | | = = 1/2 = 1/2 ∙ Assim, o condicionamento relativo da radiciação também é ótimo.
  84. Observem que lim →0 , = + ∞ Assim, extrair

    a raiz quadrada de valores pequenos de propaga muito o erro absoluto.
  85. Mestres, nos três últimos exemplos (, ) é ótimo. Portanto,

    nos três, o erro relativo no resultado dessas operações elementares é da mesma ordem do “épsilon da máquina” É (). Sim Surfista. Tua afirmação é verdadeira quando os dados forem inseridos via teclado.
  86. Mas o Sherlock apontou, nesses três exemplos, que (, )

    → ∞ em alguma situação. Sim, nessas situações devemos estar atentos ao erro absoluto.
  87. Mestres, lá trás, vocês mostraram como estimar o erro relativo.

    Como faço para estimar o erro absoluto na saída? Lembre-se, no IEEE 754, o erro absoluto ao aproximar por ∗ = () é limitado pela : | − ∗ | ≤ ().
  88. Sim Mestre, pois como lá , = ≅ ∗ −

    ∗ − . Além disso, temos ∗ − ≅ , ∗ − .
  89. Portanto a conclusão é parecida: ∗ − ≅ , ∗

    (). Exatamente Loirinha, podemos afirmar que o erro absoluto ∗ − na saída é ( , ∗ ), quando os dados são inseridos via teclado, nos três últimos exemplos.
  90. Agora façam programas semelhantes àquele do cancelamento catastrófico para os

    três últimos exemplos. Para o erro absoluto, é claro!
  91. Abaixo, marquei uma rotina da Numpy necessária para calcular ()

    : Mestra, como eu faço para buscar informações na Numpy?
  92. Instanciando o parâmetro dtype dessa classe com objetos apropriados (tipos

    float) do NumPy, obteremos informação sobre seus limites.