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

Interpolalaçao 1D por partes e splines

Interpolalaçao 1D por partes e splines

Por efetuar.

Paulo Bordoni

December 09, 2014
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. } Os correspondentes foram sorteados.
  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 do ℒ( , ), Mestra. Ah, minha filha, uma delas é uma coleção de chapéus de bruxa!
  9. Sim Loirinha. A base canônica de ℒ( , ) é

    a coleção ℋ = {ℎ0 , ℎ1 , … , ℎ } constituída pelas N+1 “hat functions” que o Filósofo vai te mostrar nas próxima transparências. Chapeus de bruxa, Mestra? Amei!
  10. 3 1 4 3 4 Nesta figura mostro uma combinação

    linear de duas delas: = 3 ℎ3 + 4 ℎ4
  11. A função () = = 0.4ℎ0 () + 0.7ℎ1 ()

    + 1.2ℎ2 () + 1.3ℎ3 () + 0.9ℎ4 () + 0.6ℎ5 ()
  12. 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.
  13. Um elemento finito é uma terna (, , Σ) na

    qual: • K é um subconjunto fechado de Ω; • é um espaço de funções polinomiais para as funções de forma; • Σ é o conjunto de graus de liberdade local.
  14. 0 1 e 1 1 0 1 e 1 0

    Na construção dos elementos finitos lineares usamos as duas funções da base de Lagrange linear definidas no elemento = [0 , 1 ]: 0 = 1 ℎ (1 − ) 1 = 1 ℎ ( − 0 ) No método dos elementos finitos elas recebem o nome de coordenadas baricêntricas, e são usadas as letras gregas 0 , 1 no lugar de 0 , 1 .
  15. 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: • Dλ0 x = −1/h • Dλ1 x = 1/h
  16. ℎ5 ℎ6 5 6 0 1 5 6 A correspondência

    entre as funções básicas: ℎ5 = 0 () ℎ6 () = 1 () para ∈ = [5 , 6 ]. ou ℎ5 | = 0 , ℎ6 | = 1 Base global X Base local
  17. Você sabe porque o chamei aqui, Mr. Charlie Chaplin? Sei

    sim, Mestre. Para mostrar meu chapéu coco!
  18. 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?
  19. 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!
  20. Vou acordar este mexicano que está dormindo. Preciso do chapéu

    dele! Mestra, não faça isto, é o Mestre!
  21. É 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.
  22. Faremos interpolações quadráticas por partes em subintervalos sucessivos (= elementos

    finitos) definidos por ternas de pontos (= nós) de uma partição (malha) [, ] = { = 0 < 1 < ⋯ < = } de , .
  23. , é 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 [, ] – os elementos finitos quadráticos. Anotaremos o espaço de funções quadráticas por partes por ( , ).
  24. Observem a grande melhoria na aproximação por elementos finitos quadráticos

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

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

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

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

    caso a tangência só ocorre no extremo direito de cada subintervalo.
  35. 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
  36. 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ó.
  37. 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 ).
  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. 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.
  39. 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.
  40. 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.
  41. 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?
  42. 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.
  43. () 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.
  44. 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
  45. 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 )
  46. 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.
  47. 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.:
  48. 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
  49. Note que com 3 polinomiais do 2º grau (7 pontos),

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

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

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

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

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

    derivada 1ª ou 2ª da spline interpolante.