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

Interpolação por partes e Splines

Interpolação por partes e Splines

Veja a apresentação no site do Professor!

Paulo Bordoni

July 15, 2016
Tweet

More Decks by Paulo Bordoni

Other Decks in Education

Transcript

  1. Iniciamos revendo o exemplo do fenômeno de Runge, no qual

    o erro cresceu assustadoramente com o grau. O erro disparou nos extremos!
  2. DIVIDIR PARA CONQUISTAR! Troquem um gigante por muitos anões! E

    aí Mestres, como faremos para matar esse leão?
  3. A ideia é muito simples: 1. Dividimos o intervalo [,

    ] em vários subintervalos – o total de anões; 2. Em cada sub-intervalo usamos uma polinomial de grau baixo – os anões. Dividir para conquistar é um mantra da computação.
  4. • Recebe: 1. Um intervalo [, ], 2. A expressão

    () de uma função, 3. Um número de pontos para criar uma partição uniforme de , . • Constrói a interpoladora de Lagrange da função usando a rotina interp1d() da SciPy. • E devolve: 1. Uma tabela dos pares dos pares , ( ) , 2. Os gráficos de e da interpoladora linear por partes de Lagrange da função sobre a partição , . Fiz um programa que:
  5. Um desses espaços é o ℒ( , ). Ele é

    constituído pelas funções que são contínuas num intervalo [, ] e lineares em cada sub-intervalo de uma partição [, ] = { = 0 < 1 < ⋯ < = } de [, ].
  6. A rotina interp1d( ) do pacote scipy.interpolate permite construirmos facilmente

    funções (vetores) desse subespaço. ℒ , é um subespaço de , .
  7. Todo espaco vetorial tem uma base, ao menos uma. Mostre-nos

    uma base do ℒ( , ), Mestra. Ah, minha filha, uma delas é a minha coleção de chapéus de bruxa!
  8. Chapeus de bruxa, Mestra? Amei! Sim Loirinha. A base canônica

    de ℒ( , ) é a coleção ℋ = {ℎ0 , ℎ1 , … , ℎ } constituída pelas N+1 “hat functions” que o Galileu vai te mostrar nas próximas transparências.
  9. No meu tempo a Igreja não queimou apenas bruxas! As

    funções chapéu, “hat functions”, formam uma base para esse espaço. Esta é a ℎ3 . A definição ponto-a-ponto dela é: ℎ3 = 0 ∈ [0,2) − 2 ∈ [2,3) 4 − ∈ [3,4) 0 ∈ [4,5]
  10. Aspecto fundamental e importantíssimo: ℒ( , ) é um subespaço

    de , de dimensão finita + 1. É essa característica que permite computarmos aproximações para equações diferenciais ordinárias e parciais através do método dos elementos finitos.
  11. 3 1 4 3 4 Nesta figura desenhei em azul

    uma combinação linear de duas delas: 3 ℎ3 + 4 ℎ4
  12. A função abaixo é uma combinação linear de cinco funções-chapéu

    ℎ0 , ℎ1 , … , ℎ5 : = 0.3ℎ0 + 0.9ℎ1 + 0.5ℎ2 + 1.1ℎ3 + 1.3ℎ4 + 1.0ℎ5
  13. Veremos adiante que essa característica é fundamental para o método

    dos elementos finitos. Um aspecto fundamental da “hat function” ℎ3 é que ela é nula fora dos dois subintervalos que possuem o ponto 3 . Os matemáticos dizem: uma função a suporte compacto. O suporte da ℎ3 é o intervalo fechado [2.0, 4.0]. O suporte da função ℎ3 .
  14. Um elemento finito é uma terna (, , Σ) na

    qual: • K é um subconjunto fechado de ഥ Ω = [a, b]; • é um espaço de funções polinomiais para as funções de forma; • Σ é o conjunto de graus de liberdade local.
  15. a b el 1 a el 1 = − −

    = − − No método dos elementos finitos elas recebem o nome de coordenadas baricêntricas, e são usadas as letras gregas , no lugar de , . Na construção dos elementos finitos lineares usamos as duas funções da base de Lagrange linear definidas no elemento = [, ]:
  16. São propriedades básicas das coordenadas baricêntricas: • ∈ 1 (),

    = 1,2, = [0 , 1 ] • = = ቊ 1, = 0, ≠ , , = 1,2 • 1 + 2 = 1, ∀ ∈ As derivadas das coordenadas baricêntricas são: ቊ 0 () = − Τ 1 ℎ 1 () = Τ 1 ℎ , ∈ .
  17. A correspondência global x local ℎ5 ℎ6 5 6 Base

    global 0 1 5 6 Base local A correspondência entre as funções básicas no intervalo [5 , 6 ] : ൜ ℎ5 = 0 () ℎ6 () = 1 () para ∈ [5 , 6 ]. ou ℎ5 | 5,6 = 0 , ℎ6 | 5,6 = 1
  18. , é o subespaço de , constituído pelas funções que

    são quadráticas em cada par consecutivo de sub-intervalo de uma partição [, ] = { = 0 < 1 < ⋯ < = } do intervalo [, ] – os elementos finitos quadráticos. Anotaremos o espaço de funções quadráticas por partes por ( , ).
  19. Atenção Surfista: Como necessitamos de pares de subintervalos consecutivos, o

    número N da partição , obrigatoriamente será ímpar.
  20. Para enfatizar o uso de polinomiais de grau ≤ 2

    usarei um ℎ −1 , , +1 , −1 , , +1 em cada três pontos sucessivos −1 , , +1 , = 1, … , − 1 (pares de subintervalos) da partição [, ] = { = 0 < 1 < ⋯ < = } de , .
  21. Pintarei cada polinomial de grau ≤ 2 com uma cor

    diferente, para ficar clara a ideia de “por partes”.
  22. Usei o mesmo programa que chama a rotina interp1d( )

    da scipy.interpolate para desenhar uma função quadrática por partes em cada subintervalo da partição. A única diferença foi no parâmetro kind.
  23. Observem a grande melhoria na aproximação funções quadráticos com relação

    à brincadeira de trocar um gigante por vários anões. Incrível, é a mesma função do leão!
  24. O programa da interpolação quadrática por partes. Ele é uma

    pequena modificação do anterior (o colorido).
  25. Você sabe porque o chamei aqui, Mr. Charlie Chaplin? Sei

    sim, Mestre. Para mostrar meu chapéu coco!
  26. Eu explico, Surfista. Chapéus de bruxa são pontudos e retos,

    mas chapéus coco são arredondados – como parábolas, polinomiais de grau 2. E dá para explicar porque, Mr. Chaplin?
  27. Saquei Mestre! As funções básicas agora serão parábolas com abas,

    como chapéus coco. 2 2 1 1 Ótimo, mas tirou só meio-certo, Surfista!
  28. Vou acordar este mexicano que está dormindo. Preciso do chapéu

    dele! Mestra, não faça isto, é o Mestre descansando!
  29. É que além dos chapéu-côco, vamos precisar também de “sombreros”

    mexicanos pontudos! Porque uma base do espaço das funções quadráticas por partes é constituída por chapéus-côco e “sombreros” mexicanos. Vejam nas próximas transparências.
  30. Agora vou mostrar uma base global para , . Usarei

    4 pares de subintervalos. Portanto = 2 × 4 + 1 = 9, a dimensão de , . Admirem as funções básicas Loirinhas e Surfistas!
  31. Na construção dos elementos finitos quadráticos usamos as três funções

    da base de Lagrange quadrática (as funções de forma) definidas localmente no elemento = [, , ]. = − − ∙ − − = − − ∙ − − = − − ∙ − −
  32. As funções de forma são portanto definidas no elemento =

    , , através do produto das coordenadas baricêntricas: = () ∙ () = () ∙ () = () ∙ ()
  33. Na base exibida, a partição , foi uniforme (pontos =

    0 + ∙ ℎ, igualmente espaçados) e as funções da base de Lagrange de , são: 0 = 1 2ℎ2 ( − 1 )( − 2 ) 1 = −1 ℎ2 ( − 0 )( − 2 ) 2 = 1 2ℎ2 ( − 0 )( − 1 )
  34. 0 = 1 ℎ2 − Τ 1 + 2 2

    1 = −1 ℎ2 − Τ 0 + 2 2 2 = 1 ℎ2 [ − Τ 0 + 1 2] As derivadas das coordenadas baricêntricas são:
  35. São propriedades básicas das coordenadas baricêntricas: • ∈ 2 (),

    = 0,1,2, = [0 , 1 , 2 ] • = = ቊ 1, = 0, ≠ , , = 0,1,2 • 0 + 1 + 2 = 1, ∀ ∈
  36. p() q() 2 2 3 1 Na interpolação polinomial por

    partes, de Lagrange, a única exigência é a continuidade da interpolação. No gráfico: 2 = 2 = (2 ).
  37. p() q() 2 2 3 1 Observem que, no extremo

    comum, (2 , 2 ), a “colagem” entre p e q não é suave. Matematicamente (2 ) ≠ (2 ). Ondas abruptas, mas surfistas com curvas suaves...
  38. p() q() 2 2 3 1 A imposição da condição

    2 = 2 suaviza a colagem, pois obriga a coincidência das retas tangentes. A interpolação polinomial por partes, de Hermite, exige, em cada ponto, a igualdade tanto do valor da função, como do valor da derivada da função. O dobro de condições.
  39. Para efetuar a interpolação de com o método ( )

    o parâmetro é um array unidimensional com tamanho n, o número de pontos da partição do − . Já o parâmetro é um array bidimensional, com tamanho n x k, com ≥ 2. Para interpolar uma função f, o parâmetro será constituído por n pares , . Entretanto poderiam ser dois valores quaisquer.
  40. A interpolação de Hermite. O programa a seguir sorteia 7

    pontos e 7 direções tangentes e constrói a interpoladora.
  41. O parâmetro “orders” é mandatário com relação à condição de

    tangência. Sim, basta conferir os graus e os gráficos das polinomiais em cada sub-intervalo.
  42. = = 3 O default = é uma polinomial de

    grau 3 em cada sub-intervalo.
  43. Repetindo, quando não especificamos o parâmetro orders, ele assume o

    valor 3. Em outras palavras, as polinomiais são de grau 3 em cada sub-intervalo.
  44. É só usar = 0. A interpoladora constante por partes

    usando a função ( ) do pacote interpolate da SciPy.
  45. Com = 2 temos interpolação quadrática em cada sub-intervalo. Neste

    caso a tangência só ocorre no extremo direito de cada subintervalo.
  46. p() q() 2 2 3 1 A imposição da condição

    ′′ 2 = ′′ 2 obriga a mesma curvatura local para as duas curvas p e q que possuem o ponto (2 , 2 ) em comum. A curvatura local é o inverso do raio da circunferência osculadora – procure um livro de computação gráfica para mais detalhes. Observação
  47. Para usar = 4 precisamos fornecer também as derivadas 2ªs.

    A polinomial, sua derivada e sua derivada 2ª são iguais em cada nó.
  48. p() q() 2 2 3 1 Observem que, no extremo

    comum, (2 , 2 ), a “colagem” entre p e q não é suave. Matematicamente temos ′(2 ) ≠ ′(2 ). Na interpolação polinomial por partes, de Lagrange, a única exigência é a continuidade na "colagem” das interpoladoras p e q. No gráfico: 2 = 2 = (2 ).
  49. p() q() 2 2 3 1 A imposição da condição

    ′ 2 = ′ 2 suaviza a colagem, pois obriga a coincidência das retas tangentes. Já vimos que a interpolação por partes, de Hermite, exige, em cada ponto, a igualdade tanto do valor da função, como do valor da derivada da função. O dobro de condições.
  50. p() q() 2 2 3 1 A imposição da condição

    ′′ 2 = ′′ 2 obriga a mesma curvatura local para as duas curvas. Nessa interpolação por partes de Hermite, são necessárias 3n informações para interpolar n pontos.
  51. A interpolação polinomial spline, é obtida “forçando a barra”. Uma

    régua “spline”, muito usada antigamente (antes da computação gráfica) por desenhistas, projetistas e arquitetos para traçar curvas suaves.
  52. Já explico. Suponha que pretendemos interpolar uma função ∶ ,

    → ℝ usando uma spline () constituída por polinomiais quadráticas em cada subintervalo em cada um dos 4 subintervalos definidos pela partição = 0 < 1 < 2 < 3 < 4 = () 1 2 0 3 4 Como assim?
  53. 1 2 0 3 4 2 1 3 4 Assim,

    nossa spline () será constituída por 4 polinomiais de grau 2: 1 = 0 + 1 + 2 2, 2 = 0 + 1 + 2 2, 3 = 0 + 1 + 2 2, 4 = 0 + 1 + 2 2. Ao todo 4 × 3 = 12 coeficientes a determinar.
  54. () 1 2 0 3 4 1 2 0 3

    4 Para aliviar a notação, vou escrever (0 ) = 0 , (1 ) = 1 , (2 ) = 2 , (3 ) = 3 , (4 ) = 4 , como mostro na figura.
  55. Como queremos que spline () interpole a função f, teremos

    8 condições (8 equações lineares) para as 12 incógnitas. Nelas já estão embutidas 3 condições de continuidade da spline () nos nós internos 1 2 0 3 4 1 2 3 4 1 2 0 3 4 1 0 = 0 1 1 = 1 2 1 = 1 2 2 = 2 , 3 2 = 2 , 3 3 = 3 , 4 3 = 3 , 4 4 = 4 . 8 equações
  56. 1 2 3 4 E a continuidade para as derivadas

    da interpoladora nos nós internos fornece outras três. 1 2 0 3 4 ൞ 1 ′ (1 ) = 2 ′ (1 ) 2 ′ (2 ) = 3 ′ (2 ) 3 ′ (3 ) = 4 ′ (3 )
  57. Ao todo temos 11 condições para determinar as 12 incógnitas

    0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 , 0 , 1 , 2 . Falta uma condição, que pode ser escolhida impondo uma condição sobre o valor da derivada da última polinomial 4 () no ponto 4 = . Por exemplo, 4 ′′ 4 = ou 4 ′ 4 = , onde e são valores escolhidos.
  58. Seja () uma função definida num intervalo [, ]. Uma

    função () é um spline de grau p, com nós nos pontos = 0 , < 1 , < ⋯ < = , quando satisfaz as condições: • Em cada subintervalo , +1 é uma polinomial de grau p, • () é de classe −1 , . () é um spline interpolante quando, além dessas duas condições, satisfaz também: • = , = 0,1, ⋯ , . A definição geral de “spline”. Acabamos de detalhar a construção de um spline quadrático.:
  59. Uma “spline” cúbica interpolante: É uma função : [, ]

    → ℝ, de classe 2[, ] que, restrita a cada subintervalo , +1 , = 1,2, ⋯ , é uma polinomial de grau 3. De forma mais explícita, ela satisfaz: 1) = () para ∈ . +1 , k = 1,2, ⋯ , 2) = , = 1,2, ⋯ , 3) = +1 , = 1,2, ⋯ , − 1 4) ′ = ′+1 , = 1,2, ⋯ , − 1 5) ′′ = ′′+1 , = 1,2, ⋯ , − 1
  60. Note que com 3 polinomiais do 2º grau (7 pontos),

    já temos uma aproximação razoável.
  61. Esse é o código do programa. Marquei em vermelho as

    linhas de código envolvidas na definição da polinomial quadrática por partes.
  62. Usando 2 polinomiais cúbicas, verificamos que o erro já é

    muito pequeno. O código é muito parecido.
  63. Os gráficos da função = 2 e da spline cúbica

    passando por pontos escolhidos.
  64. O programa. Marquei em vermelho as linhas de código envolvidas

    na definição e na avaliação da spline.
  65. O parâmetro der da função splev( ) permite mostrar a

    derivada 1ª ou 2ª da spline interpolante.
  66. Uma curva () no plano é dada por um par

    de equações paramétricas: = ( , ) onde ቊ : , → ℝ, ↦ = () : , → ℝ, ↦ = () () () ()
  67. O conjunto = , ∈ ℝ2| = = , ∈

    [, ] é denominado traço da curva e = () e = () são os pontos inicial e o final da curva.
  68. Saquei Mestres! O autódromo de Interlagos é o traço. As

    curvas ℱ () e ℳ () dependem da dobradinha carro + piloto: • Ferrari + Sebastian Vettel, • Mercedes + Lewis Hamilton.