Splines
Renato Assunção
Departamento de Ciência da Computação
UFMG
Polinômio interpolador




O polinômio interpolador pode ser
encontrado usando-se o polinômio de
Lagrange ou a forma do polinômio de
Newton.
O polinômio e único e os dois
algoritmos (Lagrange e Newton) levam
ao MESMO polinômio.
Eles são apenas duas formas diferentes
de fazer o mesmo cálculo.
Os algoritmos que encontramos são
estáveis numericamente.
Polinômio interpolador: problemas





Tudo parece muito bem e nossos
problemas se acabaram-se...
Não é bem assim.
Os polinômios interpolantes tendem
a apresentar overshoots
Isto é, oscilações muito extremas,
máximos e mínimos locais muito
extremos entre os pontos.
Isto ocorre principalmente nos
limites do intervalo de interpolação
Overshoots com Lagrange
Mais overshoots com Lagrange
Limitações do polinômio interpolante



É difícil acreditar que a função subjacente
que queremos aproximar tenha tantas
subidas e descidas entre os pontos que
estão sendo interpolados.
Um único polinômio de grau n-1 passa
pelos pontos e este polinomio único e’
este com as subidas e descidas extremas.
Existe um outro polinômio que tenha um
aspecto menos variável?
Polinômios com outros graus






Quais as soluções para isto?
Talvez um polinômio de grau MENOR que n-1?
Ele terá um numero menor de máximos e
mínimos locais
Por exemplo, um polinômio de grau 2 tem
apenas um máximo ou mínimo.
Mas...polinômio de grau MENOR que n-1 NAO
VAI passar pelos n pontos
(a não ser que os pontos estejam numa
disposição muito especial)
Aumentando o grau?



Vai tornar a situação mais
complicada.
Existem infinitos polinômios de grau
n-1+k passando pelos n pontos
Além disso, ele vai ter MAIS
máximos e mínimos locais que o
polinômio de grau n-1.
O que fazer entao?




Vamos lembrar da primeira técnica que
estudamos: a interpolação linear.
Ela não tinha o problema de overshoots mas
não era suave.
A interpolação linear era simplesmente um
polinômio DIFERENTE ajustado em cada
segmento [xi, xi+1].
A não-suavidade ocorria nas junções:
• os polinômios eram retas
• As derivadas eram constantes dentro do segmento
[xi, xi+1]
• Precisavam mudar abruptamente ao passar de um
segmento para outro.
Solução




Entao...que tal ajustar um polinomio
mais maleavel que uma reta em cada
segmento [xi, xi+1]?
Queremos ajustar um polinômio "por
partes".
Um polinômio de 2º ou 3º grau em
cada segmento de forma que eles
“colem” suavemente num no outro.
Como fazer isto? Splines e' a solução...
Ajustando parábolas por partes
Precisam colar suavemente umas as outras.
Grau do polinômio



Podemos tentar usar parábolas que
se ajustem suavemente umas as
outras.
Ou talvez polinômios cúbicos (3º.
grau).
O polinômio que usamos e’ o de 3º
grau, splines cúbicos: e’ bastante
suave, da’ bons resultados.
Exemplo de spline cúbico
Comparação com Lagrange
Overshoots muito menos pronunciados, menos íngremes
Problema mais simples





Antes de definir os splines, vamos
resolver um problema mais simples.
Achar um polinômio p(x) tal que p(1)=1 e p(3)=0.
Isto e, o polinômio passa pelos
pontos (-1, 1) e (3, 0)
Alem disso, queremos fixar o valor
das derivadas neste pontos.
Queremos que p’(-1) = 0 e também
que p’(3) = 0.
Primeiro grau?

Claramente, não existe um reta
(polinômio de grau 1) satisfazendo
estas condições:
• Uma reta tem derivada constante
• A derivada e’ zero em dois pontos
• A derivada deve ser igual a zero para
todos os pontos  reta horizontal
• Mas uma reta horizontal não pode
passar por (-1, 1) e (3,0)
Segundo grau resolve?


Também não e’ possível achar um
polinômio de segundo grau
satisfazendo estas condições.
Suponha que p(x) e’ polinômio de
segundo grau e que
•1
•0
•0
•0
=
=
=
=
p(-1) = a0 + a1(-1) + a2(-1)2
p(3) = a0 + a1(3) + a2(3)2
p’(-1) = a1 + 2 a2(-1)
p’(3) = a1 + 2 a2(3)
Sistema linear correspondente



Sistema com
mais equações
que incógnitas
Em geral, este
tipo de sistema
linear não possui
solução.
Este e’ o caso
aqui: não há
solução
1

1

0

0
1
3
1
1
1 
1 
 a0   
9  
0
 a   
1

0 
 2
  a 2   
6 
0 
Segundo grau: sem solução
1

1

0

0


1
3
1
1
1 
1 
 a0   
9  
0
 a   
1


0 
2
  a 2   
6 
0 
1

0

0

0
1
4
0
0
1 
 1 
 a0  

8  
1
 a  

1
 4    1 / 4 
  a 2  

0 
1 / 2 
Eliminação gaussiana gera o sistema
equivalente da direita, que não
possui solução.
(veja a ultima equação: 0=1/2)
Terceiro grau?

p(x) e’ polinômio de 3º. grau e:
•1
•0
•0
•0

=
=
=
=
p(-1) = a0 + a1(-1) + a2(-1)2 + a3(-1)3
p(3) = a0 + a1(3) + a2(3)2 + a3(3)3
p’(-1) = a1 + 2 a2(-1) + 3 a3 (-1)2
p’(3) = a1 + 2 a2(3) + 3 a3 (3)2
Ou seja
• a0 - a1 + a2 a3
• a0 + 3a1 + 9 a2 + 27 a3
•
a1 - 2 a2 + 3 a3
•
a1 + 6 a2 + 27 a3
=1
=0
=0
=0
Polinômio cúbico: ok

O sistema linear pode ser escrito
como:
1

1

0

0

1
1
3
9
1
2
1
6
 1  a 0   1 
   
27 a 1
0
    
3  a 2  0 
   
27   a 3   0 
Que possui solução única e igual a
(0.84, - 0.28, -0.09, 0.03)
Solução
Splines


n+1 pontos: (x0,y0),...,(xn,yn)
Achar função f(x) que seja:
• Um polinômio cúbico em cada intervalo
[xi-1,xi] com i=1,..,n
• Passe pelos pontos (xi,yi)
• Seja bastante suave nos pontos de
junções dos intervalos:



f’(x) seja continua em todos os pontos
f’’(x) também seja continua em todos os
pontos
f’’(x) = 0 nos dois pontos extremos
Splines



As condições anteriores são
suficientes para garantir que o
sistema linear resultante será
sempre invisível.
Vamos ver um caso simples, com
apenas 3 pontos.
Considere os pontos
• (-1, 1),
(1, 3) (2, 0)
Splines


Queremos dois
polinômios cúbicos.
Um polinômio
entre (-1,1) e (1,3)
e outro polinômio
entre (1,3) e (2,0)

Vamos denotar este
polinômios por p1(x) e
p2(x) sendo que

p1(x)=a01+a11x+a21x2+a31x3

p2(x)=a02+a12x+a22x2+a32x3



p1(x) passa por (-1,1) e (1,3)
p2(x) passa por (1,3) e (2,0)
Note o ponto (1,3) comum aos
dois polinômios.
Construindo o sistema linear







A restrição de passar pelos 3 pontos cria 4
equações lineares que devem ser
satisfeitas.
1=a01 -a11+a21 -a31
3=a01+a11+a21+a31
3=
a02+ a12+ a22+ a32
0=
a02+2a12+4a22+8a32
Temos 4 equações e 8 incógnitas: infinitas
soluções.
Precisamos acrescentar mais restrições.
Que restrições adicionais são estas?



Não queremos apenas que os polinomios
encontrem-se no ponto (1,3)
Queremos que eles se encontrem
suavemente no ponto de junção (1,3).
Por exemplo, queremos que a derivada
pela esquerda no ponto x=1, que e’ a
derivada do polinômio p1(x), coincida
com a derivada pela direita no mesmo
ponto x=1 (que e’ a derivada do
polinômio p2(x))
Restrições nas 1as. derivadas









Assim, vamos impor o seguinte:
p1’(1) = p2’(1)
Temos p’(x)=a1+2a2x+3a3x2 para um
polinômio genérico de 3º. grau
No nosso caso, teremos a equação
a11+ 2a21 + 3a31 = a12 + 2a22 + 3a32
Ou seja,
a11+ 2a21 + 3a31 - a12 - 2a22 - 3a32 = 0
O único ponto de junção gerou uma equação
adicional.
Temos agora 4 + 1 equações e 8 incógnitas.
Restrições nas 2as. derivadas




Vamos adicionar uma restrição na 2ª
derivada, também no ponto de junção.
Vamos pedir que p1’’(1) = p2’’(1)
Temos p’’(x)=2a2+6a3x para um polinômio
genérico do 3º. Grau. Assim, teremos
2a21 + 6a31 = 2a22 + 6a32
• Ou seja, 2a21 + 6a31 - 2a22 - 6a32 = 0


Temos agora 4 + 1 +1 equações e 8
incógnitas.
Precisamos de mais 2 restrições (ou
equações).
Restrições finais




Os diversos tipos de splines diferem com
respeito a estas duas restrições finais.
O chamado spline natural impõe uma
restrição sobre a derivada 2ª. nos dois
pontos extremos: ela deve ser igual a
zero.
Isto e’, queremos p1’’(x0)=0 e p2’’(x2)=0
Se a função for aproximadamente linear
nos extremos, sua derivada segunda
deveria ser aproximadamente zero.
Restrições finais



Com nossos pontos específicos, isto
implica
p1’’(-1)=0 e p2’’(2)=0
Ou seja, temos duas equações
adicionais:
• 2a2 - 6 a3 = 0
• 2a2 + 6*2 a3 = 0

Agora temos 8 equações e 8
incógnitas
Caso geral

Alem disso, nos pontos internos
temos
Deveria ser derivada SEGUNDA aqui
Splines = sistema linear



Assim, interpolar os pontos com
splines cúbicos leva a um sistema
linear.
Pode-se mostrar que este sistema
sempre tem solução única.
A função em scilab para interpolar
com splines cúbicos naturais e’
splin(x, y,"natural");
Erro de aproximação
Download

Bootstrap