Spline Cúbica Interpolante

Teoria Completa

Introdução

Faaaaaaaaala meu consagrado, nós vimos até agora algumas técnicas pra encontrar a solução de uma função e até mesmo uma função alternativa e aproximada que chegue bem perto da função real em um dado intervalo. E principalmente vimos o que é uma Spline interpolante de grau 1, mas em alguns casos a spline de grau não é tão usada, então vamos seguir em frente para a Spline Cúbica.

Veja bem, quando montamos e olhamos as funções em gráfico (junto com a função real), percebemos que forma um graaaaande “zigue-zague”, isso acontece porque para resolver a função fazemos vários subintervalos s p x .

O grande problema é que essas splines lineares formam essas “quinas” entre os nós. Se tu relembrar um pouquinho lá do cálculo 1, a derivada primeira é descontínua nesses nós, e pode causar uns probleminhas dependendo do que vamos fazer com o polinômio interpolador.

Mas relaxa que pra tudo tem-se um jeitinho.

E é por esse motivo que as splines cúbicas são muito mais usadas! Hmmm ... você deve estar pensando, e não tem splines quadráticas?

Veja bem, é uma perguntinha importante porque usando spline quadrática teremos derivadas contínuas de primeira ordem, mas não de segunda ordem! E isso pode acabar sendo um problema já que a concavidade da função pode ficar trocando a cada nó (lembre-se que o sinal da derivada segunda define a concavidade da nossa função).

Pensando nisso a nossa S 3 x tem derivadas de ordem 1 e 2 contínuas fazendo dela uma função bonitinha sem quinas nem mudanças de concavidade nos nós. Bora ver como definimos essas Splines?

Spline Cúbica Interpolante

Relembrando aqui: temos uma função f x tabelada em n + 1 pontos, nossa Spline Cúbica Interpolante S 3 x é definida assim:

S 3 x = s 1 x ,       x ∈ x 0 , x 1 s 2 x ,       x ∈ x 1 , x 2 ⋮ s n x ,       x ∈ x n - 1 , x n

Onde nós podemos supor que a nossa f x é tabelada em pontos de Supondo que f(x) esteja tabelada nos pontos x i , i = 0, 1, 2, ..., n a função S 3 x é chamada spline cúbica interpolante de f x nos nós x i , i = 0, ..., n. Entãaaao:

1. S 3 x i = f x i ,   p a r a   i = 0,1 , … , n

2. s k x = a k x - x k 3 + b k x - x k 2 + c k x - x k + d k ,   p a r a   k = 1,2 , … , n

3. s k x k = s k + 1 x k ,   p a r a   k = 1,2 , … , n - 1

4. s k ' x k = s k + 1 ' x k ,   p a r a   k = 1,2 , … , n - 1

5. s k ' ' x k = s k + 1 ' ' x k ,   p a r a   k = 1,2 , … , n - 1

Ahhhh claro, mas, pra que raios vou usar isso? Retomando um pouquinho, a spline cúbica é bem parecida com a linear, dividida em intervalos e tal, maaaas, as condições mudam assim:

1. Devemos ter n+1 condições pra que S 3 x interpole f x nos nós x 0 , x 1 , … , x n .

2. Nessa a gente simplesmente define que as funções que interpolam cada intervalo s k x são cúbicas.

3. A função é contínua, ou seja, as funções s k x sempre se encontram nos extremos de seus intervalos de interpolação.

4. A derivada primeira da função é contínua, ou seja, a derivada primeira das funções s k x sempre são iguais nos extremos de seus intervalos de interpolação. Isso garante que não haverá quinas nos nós de interpolação.

5. A derivada segunda da função é contínua, ou seja, a derivada segunda das funções s k x sempre são iguais nos extremos de seus intervalos de interpolação. Isso garante que o gráfico não trocará de concavidade abruptamente nos nós de interpolação.

Ficou mais claro agora? Basicamente o que você tem que fazer é pegar a nossa s k x e fazer ela valer pra todas as condições em cada subintervalo. O que no caso dá um trabalho desgraçado para não dizer outra coisa, então eu vou te dar a fórmula direto! ;)

O que você precisa saber é o seguinte. Para cada s k x temos 4 incógnitas a k , b k , c k , d k . Ou seja, nossa função S 3 x tem 4 incógnitas por equação e n equações, o que nos leva a 4 n incógnitas.

O problema é que todas aquelas condições que a gente definiu só nos dão 4 n - 2 condições, deixando duas em aberto! É aí que a nossa Spline cúbica se divide (sim, ainda tem mais)! Vamos ver quais são as condições mais comuns de se usar:

Spline Cúbica Natural

Nesse caso, nós aproximamos que os polinômios cúbicos são aproximadamente lineares nos extremos dos intervalos, de forma que:

S ' ' x 0 = S ' ' x n = 0

Juntando essas duas condições com as outras e definindo h j = x j - x j - 1 , chegamos no sistema n + 1 × n + 1 :

A x = b ,

E isso só nos dá os coeficientes b k . Lembrando que só vamos usar o b 1 até o b n na nossa função spline. O b 0 serve para encontrarmos os outros coeficientes:

Fórmulas bem chatinhas né? Bom, mas a menos que esteja a fim de deduzir tudo na hora da prova (acredite, você não vai estar afim haha) vai ter que gravar mesmo. Vamos ver um exemplo. Encontre uma aproximação para f 0.75 por spline cúbica natural da tabela abaixo:

Lembrando que h j = x j - x j - 1 e definindo:

x 0 = 0 ; x 1 = 0.5 ; x 2 = 1.0 ; x 3 = 1.5 ; x 4 = 2.0

Temos nossa matriz A . Normalmente eu preencho ela da seguinte forma. Eu monto uma matriz n + 1 × n + 1 . Nesse caso 5 × 5 e completo a primeira e última linha:

  A = 1 0 0 0 0 0 0 0 0 1

Agora logo embaixo do primeiro 1 , botamos h 1 e vamos aumentando o índice na diagonal:

A = 1 0 0 0 0 h 1 h 2 h 3 0 0 0 0 1

Do lado do h 1 eu completo com 2 h 1 + h 2 e também vamos aumentando o índice na diagonal:

A = 1 0 0 0 0 h 1 2 h 1 + h 2 h 2 2 h 2 + h 3 h 3 2 h 3 + h 4 0 0 0 0 1

Agora do lado do 2 h 1 + h 2 completamos com h 2 e novamente aumentamos o índice na diagonal:

A = 1 0 0 0 0 h 1 2 h 1 + h 2 h 2 h 2 2 h 2 + h 3 h 3 h 3 2 h 3 + h 4 h 4 0 0 0 0 1

Por fim, completamos tudo com 0 :

A = 1 0 0 0 0 h 1 2 h 1 + h 2 h 2 0 0 0 h 2 2 h 2 + h 3 h 3 0 0 0 h 3 2 h 3 + h 4 h 4 0 0 0 0 1

Agora é a vez do nosso vetor b . Ele é um vetor n + 1 × 1 . Nesse caso, 5 × 1 . Eu costumo gravar só que a primeira e última linhas são 0 , que tem um 3 multiplicando por fora e que a segunda linha é sempre f x 2 - f x 1 h 2 - f x 1 - f x 0 h 1 . Aí para as outras linhas é só ir aumentando o índice.

b = g 0 g 1 g 2 g 3 g 4 = 3 0 f x 2 - f x 1 h 2 - f x 1 - f x 0 h 1 f x 3 - f x 2 h 3 - f x 2 - f x 1 h 2 f x 4 - f x 3 h 4 - f x 3 - f x 2 h 3 0

Beleza, agora vamos encontrar nossos h j . Como os pontos são igualmente espaçados:

h 1 = h 2 = h 3 = h 4 = 0.5

E resolvendo os termos de b :

3 f x 2 - f x 1 h 2 - f x 1 - f x 0 h 1 = - 11.046

3 f x 3 - f x 2 h 3 - f x 2 - f x 1 h 2 = - 4.425

3 f x 4 - f x 3 h 4 - f x 3 - f x 2 h 3 = - 4.0818

Ficamos então com o sistema:

1 0 0 0 0 0.5 2 0.5 0 0 0 0.5 2 0.5 0 0 0 0.5 2 0.5 0 0 0 0 1 b 0 b 1 b 2 b 3 b 4 = 0 - 11.046 - 4.425 - 4.0818 0

Resolvendo por eliminação de Gauss obtemos:

b 0 = 0

b 1 = - 5.4311

b 2 = - 0.3675

b 3 = - 1.949

b 4 = 0

Agora repare que ele pede S 3 0.75 . O ponto x = 0.75 se encontra entre x 1 e x 2 , então só precisamos da função s 2 x :

a 2 = b 2 - b 1 3 h 2 = 3.3758

c 2 = f x 2 - f x 1 h 2 + h 2 2 b 2 + b 1 3 = - 7.1337

d 2 = f x 2 = - 0.8228

Finalmente substituímos na fórmula do s 2 x :

s 2 x = a 2 x - x 2 3 + b 2 x - x 2 2 + c 2 x - x 2 + d 2

s 2 0.75 = 3.3758 - 0.25 3 - 0.3675 - 0.25 2 - 7.1337 - 0.25 - 0.8228

s 2 0.75 = 0.8849

Spline Cúbica Apertada

Essa é a forma mais geral onde nós definimos as derivadas nos extremos do intervalo:

f ' x 0 = m 0

f ' x n = m n

Nesse caso a única coisa que muda são as primeiras linhas de A e de b do sistema A x = b . Aqui teremos: