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

Métodos iterativos para problemas inversos

Paulo Bordoni
November 23, 2016

Métodos iterativos para problemas inversos

Veja esta apresentação em www.bordoni.info.

Paulo Bordoni

November 23, 2016
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Determinação de raízes de equações Prof. Paulo R. G. Bordoni

    UFRJ Métodos iterativos para problemas inversos Prof. Paulo R. G. Bordoni
  2. Aulas atrás estudamos métodos diretos para resolver problemas inversos. O

    nome se justifica porque eles fornecem a solução através de um número finito de operações, para construir diretamente a solução, usualmente através de fórmulas.
  3. Antes aprender a resolver equações, Mestres, respondam-me: O que é

    uma equação? Ah Loirinha, equações são expressões igualadas a zero, como as do 1º e 2º graus da aula passada!
  4. São apenas exemplos de equações! Sempre fiquei intrigada em saber

    o que é, de fato, uma equação. Tua pergunta faz tanto sentido Loirinha que ao final deste conjunto de transparências os Mestres colocaram uma resposta detalhada para ela. Não deixe de ler!
  5. Sendo prático Loirinha. Assuma, por enquanto, que equações são expressões

    do tipo = 0. Sim, e que desejamos obter valores de para os quais () = 0.
  6. Concordo plenamente. Como 1º passo vamos restringir o escopo das

    equações que pretendemos resolver! Devagar com o andor, que o santo é de barro! Vamos formalizar melhor nosso problema: mais MATEMÁTICA – menos PRESSA!
  7. Mais precisamente ainda: consideraremos equações já na forma padrão =

    0, onde : , → ℝ é uma função contínua em , , calculável através da expressão = (). Comecemos examinando equações descritas através de expressões do tipo = () onde f é uma função real.
  8. Uma classe muito ampla de algoritmos para resolver essas equações

    são os métodos iterativos. Iterar é sinônimo de repetir. Os mais conhecidos são o da bisseção, o de Newton-Raphson, o do ponto-fixo e algumas variantes deles.
  9. Um método iterativo para achar r envolve a criação de

    uma sequência 0 , 1 , 2 , ⋯ , , ⋯ que converge para r, isto é lim →∞ = . Surfista, assuma que r é uma raiz da equação = 0, isto é a expressão = 0 é verdadeira.
  10. Minha filha, uma sequência de números reais é apenas uma

    função : ℕ → ℝ. Por tradição escrevemos , ao invés de (), para o valor de em k. Entendi! É por isso que as sequências são escritas como listas infinitas tipo 0 , 1 , 2 , 3 , … , , ...
  11. 7 6 5 4 2 = 3 1 1 2

    3 4 5 6 7 Claro Surfista! Note que o gráfico de uma sequência de números reais é, simplesmente, um conjunto de pares ordenados no plano cartesiano: 1, 1 , 2, 2 , … , , , … Os pontos em vermelho na figura. É, mas não dá para desenhar todos!
  12. Por exemplo, o gráfico dos 16 primeiros valores da sequência

    = Τ 1 (1 + ) é o seguinte: Percebemos pelo gráfico que ela converge para zero.
  13. O meu colega fez um programa que que recebe a

    expressão da sequência e o número de termos e fornece os valores da sequência e seu gráfico!
  14. Uma outra sequência interessante é = (1 + 1 ).

    Pela tabela mais o gráfico percebemos que ela converge para algum valor entre 2.65 e 3.0.
  15. Loirinha, considere uma sequência ( ) de números reais e

    seja r um número real. Dizemos que lim →∞ = quando: ∀ > 0, ∃ ∈ ℕ tal que: > ⇒ − <
  16. Complicada essa notação, Mestres. Leia da seguinte forma, Surfista: Se

    lim →∞ = então, para cada precisão > 0 escolhida você consegue resolver o problema inverso: Obter um número natural > 0 com a propriedade − < sempre que > .
  17. Confira pelas figura + tabela, Surfista: Para = 0.1, todos

    os valores “entram” na faixa amarela de largura entorno de = 0, a partir de = 9. Para esse , = 9 é a resposta ao problema inverso: Obter um número natural > 0 com a propriedade − < sempre que > .
  18. Para esta outra sequência, os valores estão dentro da faixa

    amarela de largura = 0.2 entorno de = a partir de = 7. Assim > 6 ⇒ − < 0.2
  19. Repetindo, para provar que lim →∞ = é necessário garantir

    que, para cada > 0 escolhido, há um ∈ ℕ que torna a implicação > ⇒ − < . verdadeira. Portanto para provar que a sequência = (1 + 1/) converge para o número não basta garantir a implicação acima apenas para dois valores de ( = 0.2 e = 0.1). É a matemática ...
  20. Sim, na realidade é toda uma coleção contínua de problemas

    inversos: um para cada > 0. Não basta, Mestra?
  21. r ( ) 0 1 2 A forma que eu

    tenho para visualizar que → é: Para cada precisão escolhida > 0, a sequência toda, exceto um pedacinho (os anteriores a N) fica dentro de uma “bola de raio entorno de r”.
  22. r ( ) 0 1 2 Repetindo a fala do

    Sherlock: A sequência todinha, exceto alguns termos está ali, a menos de de r.
  23. Seu enfoque é incrível Sherlock! Para cada precisão > 0

    escolhida, você quebra a sequência em dois grupos, um com infinitos termos e outro finito. E, a garantia de convergência, consiste em: enfiar o grupo infinito, todinho, na caixinha minúscula, de largura envolta de r.
  24. Augustin-Louis Cauchy 21/08/1789 23/05/1857 Bem, eu aprendi tudo isto lendo

    o “Cours d’analyse”, de Cauchy, publicado em 1821...
  25. Na realidade, nos métodos iterativos, vamos achar aproximações r* para

    a raiz r. Em outras palavras acharemos números ∗ tais que − ∗ < para ε bem pequeno. A bem da verdade épsilons minúsculos, por exemplo = 10−7, 10−10, 10−15, etc.
  26. Nesse caso, 2 − 1.4142135623730951 < 0.5 × 10−16. É

    o aspecto prático, Mestra, é difícil precisarmos conhecer 2 com mais que umas 5 ou 6 casas decimais após a vírgula. Contei 16 casas na resposta de Python: 2 = 1.4142135623730951…
  27. A aproximação r* para a raiz r será obtida a

    partir da sequência , , , ⋯ , , ⋯ quando ela converge para r. Quando ela converge, para algum k suficientemente grande, teremos − < . Então escolhemos ∗ = .
  28. Assumiremos que : [, ] → ℝ é uma função

    calculável através da expressão () e que é contínua em [a, b]. é o valor de f em . ()
  29. () () () Pelo Teorema do Valor Intermediário, se f

    possui sinais contrários nos extremos a e b então existe pelo menos um ponto (, ) tal que = 0. Dito de outra forma, a equação = 0 possui pelo menos uma raiz em (a, b). Num ponto , () poderá ser positiva, negativa ou nula:
  30. = = Como 1º passo do processo, definimos o extremo

    esquerdo fazendo ↤ (leia: receber a) e o extremo direito fazendo ↤ . Descoberto um intervalo (, ) no qual f possui sinais contrários, podemos começar o processo iterativo. • Em programação: ↤ • Em matemática: =
  31. O 2º passo é calcular o ponto médio do intervalo,

    ↤ ( + )/2. O 3º passo é calcular calcular ( ) e compará-lo com ( ). ( ) ( )
  32. São três as possibilidades: i. Se × = 0, a

    raiz já é . é, = . () ii iii ii. Senão, se × ( ) < 0, a raiz r está na metade da esquerda. Nesse caso o novo será (i. é, ↤ ). iii. Caso contrário, a raiz r está na metade da direita. Nesse caso ↤ ( passa a ser ).
  33. No caso i, encerramos o processo, informando: A raiz é

    = . Nos outros dois casos, precisamos testar a precisão para decidir: A. Se | − | < e < , então colocamos ∗ ↤ e encerramos; B. Senão, retornamos ao 2º passo para mais uma iteração.
  34. São duas condições de parada para anunciar ∗: • Proximidade

    da raiz: | − | < • Anulação aproximada do valor da função: < Um lembrete: não adianta exigir maior precisão que a “máquina” pode fornecer.
  35. Escrevemos esta é a função para implementar o método da

    bisseção. Assinalei em vermelho as condições de parada.
  36. O programa é para uma equação genérica () = 0.

    Os dados são: • Domínio de f • Expressão de f • Máximo de iterações • O limite para o erro Dados Chamada do método. Resultados Gráfico
  37. • Começamos com 0 = 1.4 e 1 = 1.5,

    sabendo que 2 está entre os dois • Portanto para = 1 − 0 , tanto | 0 − 2 | < como | 1 − 2 | < • Em seguida dividimos o intervalo à metade com 2 e garantimos que 2 está numa das metades • Portanto | 2 − 2 | < /2 • Continuando o processo, garantimos (prove!) que | +1 − 2 | < /2 Mas e a precisão na aproximação para 2 ? Então Loirinho (...), nosso procedimento foi o seguinte:
  38. Além de dar uma estimativa para o erro, essa última

    desigualdade garante, também, que a sequência 0 , 1 , 2 , ⋯ , , ⋯ converge para 2, isto é lim →∞ = 2. Sim Mestra, pois de | +1 − 2 | < 1/2 garantimos que lim →∞ | +1 − 2 | < lim →∞ 1/2 = 0
  39. Mestra, sabemos que 210 = 1024. Assim, | 10+1 −

    2 | < 1 210 = 1 1024 < 0.001, Isto garante que 11 aproxima 2 com erro menor que um milésimo. Sim. E qual será o valor de k para o qual garantimos uma aproximação com a precisão do Single, de 6~7 casas decimais corretas?
  40. Bem jovens, para uma precisão de 7 casas decimais, precisamos

    garantir que | +1 − 2 | < 0.5 × 10−7. Sim Mestra, e como | +1 − 2 | < 1/2, basta garantirmos que 1/2 < 0.5 × 10−7. Resolvendo essa inequação obtemos k = 25.
  41. Como? Ora, de 1/2 < 0.5 × 10−7, segue 107

    < 2−1 e portanto 7 log 10 < log(2−1). Então − 1 0.301030 > 7 e assim k = 25.
  42. Agora vamos obter as raízes (se houver alguma) da equação

    33 − 52 + 2 = 0 E como começamos Mestre? Não tenho a mínima ideia do lugar onde estão as raízes dessa equação!
  43. Esse é um bom primeiro passo, meu Surfista! Bem Loirinha,

    uma ideia é subdividir um intervalo grande em pedacinhos e verificar se há variação de sinal nos pedacinhos. a b
  44. Aqui estou chamando a troca_sinal( ) para a função =

    33 − 52 + 2. Primeiro chamei com 50 sub-intervalos e depois repetí com 100. Minha conclusão é que ela só tem uma raiz real.
  45. É, você só localizou uma raiz real. Entretanto, pela teoria,

    toda polinomial de grau 3 tem 3 raízes reais ou complexas. Pode ser que as outras duas sejam complexas conjugadas. Será que sua busca está certa?
  46. Os resultados do método da bisseção, feito pelo Mestre, para

    a equação 33 − 52 + 2 = 0 e 4 casas após a vírgula, no intervalo [−1.6, −0.5].
  47. Bem jovens, uma outra possibilidade é examinar o gráfico da

    função. O Professor fez um programa com o MatPlotLib que gera o gráfico de uma função num intervalo. Surfista, fiquei intrigada com a possibilidade de existirem mais raízes reais para aquela equação polinomial de grau 3. Como poderemos decidir?
  48. Observem o detalhe da utilização da função eval( ), uma

    função de Python, que transforma uma string num código executável.
  49. Agora vamos utilizar a função construída pelo Professor para localizar

    as raízes da equação 33 – 52 + 2 = 0 e tirar a dúvida da Loirinha!
  50. Vou mostrar apenas uma vez como chamar a função graf_func(

    ) para desenhar o gráfico da função () = 33 – 52 + 2. Depois é igual.
  51. Obtivemos este gráfico. Dele não concluo nada! Comece observando a

    diferença enorme entre as escalas horizontal e vertical.
  52. Olhando para o gráfico, concluímos que não existem raízes fora

    do intervalo [-10. , 10.] É verdade Mestre. Vou traçar o gráfico nesse intervalo [-10. , 10.]
  53. A diferença entre as escalas ainda é muito grande. Vejam!

    Reduza para o intervalo [-5. , 5.], pois não existem raízes fora dele, Loirinha
  54. Ok Mestre. Agora podemos afirmar que as raízes estão no

    intervalo [-1. , 1.5]. Vou conferir!
  55. Puxa! O Surfista localizou a raiz negativa, mas perdeu as

    duas positivas! Vou examinar o intervalo [0.5 , 1.5] .
  56. 3 ∗ (1 ∗∗ 3) – 5 ∗ (1 ∗∗

    2) + 2 = 3 – 5 + 2 = 0 Substituindo e fazendo as contas, conferimos que 1.0 é, de fato, raiz da equação 33 – 52 + 2 = 0. Veja só:
  57. Pois é, só quando usei meu programa para 150 subintervalos

    é que localizei todas as trocas de sinal...
  58. É o método da bisseção que eu já ensinei. A

    partir de agora, passem a usar esta implementação.