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

Interpolação unidimensional por partes e splines

Paulo Bordoni
December 04, 2013

Interpolação unidimensional por partes e splines

Iniciamos com o espaço das funções contínuas e lineares por partes e a base de funções chapéu (de bruxa). Depois analisamos as funções contínuas e quadráticas por partes, com sua base de funções chapéu coco (de Charlie Chaplin). Em seguida olhamos para interpolação de Hermite e usamos os métodos interp1d( ) e a classe PiecewisePolynomial da scipy.interpolate. Encerramos com splines interpoladores para funções reais a valores reais e curvas no plano.

Paulo Bordoni

December 04, 2013
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. 2. Em cada sub-intervalo usamos uma polinomial de grau baixo. Dividir para conquistar é um mantra da computação.
  4. Troquei o gigante por 5 anões. Melhorou muito nos extremos,

    mas piorou um pouco no centro. Poucos anões!
  5. Um desses espaços é o ℒ( , ). ℒ ,

    é o subespaço de , constituído pelas funções que são lineares em cada sub-intervalo de uma partição [, ] = { = 0 < 1 < ⋯ < = } do intervalo [, ].
  6. Veja a cara de uma função do espaço ℒ(9 0,2

    ) no qual 9 0,2 = {0. , 0.25, 0.5, 0.75, 1. , 1.25, 1.5, 1.75, 2. }
  7. O programa que produziu esse gráfico. Em vermelho a função

    da scipy.interpolate que gera a interpoladora. Já, já vamos estudá-la.
  8. Todo espaco vetorial tem, ao menos, uma base. Mostre-nos uma

    base desse espaco, Mestra. Ah, minha filha, é uma coleção de chapéus de bruxa!.
  9. Chapeus de bruxa, Mestra? Amei! Sim Loirinha. A base canônica

    de ℒ( , ) e’ a colecao ℋ = {ℎ0 , ℎ1 , … , ℎ } constituída pelas N+1 “hat functions” que vou te mostrar na próxima transparência.
  10. 3 1 4 3 4 Nesta figura mostro uma combinação

    linear de duas delas: = 3 ℎ3 + 4 ℎ4
  11. Você sabe porque o chamei aqui, Mr. Charlie Chaplin? Sei

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

    coco são arredondados – como parábolas. E dá para explicar porque, Mr. Chaplin?
  13. Faremos interpolações quadráticas por partes em subintervalos sucessivos definidos por

    ternas de pontos de uma partição [, ] = { = 0 < 1 < ⋯ < = } de , .
  14. Anotaremos o espaço de funções quadráticas por partes por (

    , ). , e’ o subespaço de , constituído pelas funções que são quadráticas em cada sub-intervalo de uma partição [, ] = { = 0 < 1 < ⋯ < = } do intervalo [, ].
  15. Observem a grande melhoria na aproximação por polinomiais quadráticas por

    partes com relação à brincadeira de trocar um gigante por vários anões. Incrível, é a mesma função do leão!
  16. 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 ).
  17. 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...
  18. 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.
  19. 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.
  20. A interpolação de Hermite. O programa a seguir sorteia 7

    pontos e 7 direções tangentes e constrói a interpoladora.
  21. 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.
  22. = = 3 O default = é uma polinomial de

    grau 3 em cada sub-intervalo.
  23. 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.
  24. É só usar = 0. A interpoladora constante por partes

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

    caso a tangência só ocorre no extremo direito de cada subintervalo.
  26. 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
  27. 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ó.
  28. 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 ).
  29. 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.
  30. 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.
  31. 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.
  32. 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?
  33. 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.
  34. () 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.
  35. 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 incluídas 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 = 2 2 2 = 2 , 3 2 = 2 , 3 3 = 3 , 4 3 = 3 , 4 4 = 4 . 8 equações
  36. 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 )
  37. 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 = 0.
  38. 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.:
  39. 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
  40. Note que com 3 polinomiais do 2º grau (7 pontos),

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

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

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

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

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

    derivada 1ª ou 2ª da spline interpolante.