Spline Cúbica Interpolante
Teoria
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 .
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 tem derivadas de ordem e 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 tabelada em pontos, nossa Spline Cúbica Interpolante é definida assim:
Onde nós podemos supor que a nossa é tabelada em pontos de Supondo que f(x) esteja tabelada nos pontos , i = 0, 1, 2, ..., n a função é chamada spline cúbica interpolante de nos nós , i = 0, ..., n. Entãaaao:
1.
2.
3.
4.
5.
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 interpole nos nós .
2. Nessa a gente simplesmente define que as funções que interpolam cada intervalo são cúbicas.
3. A função é contínua, ou seja, as funções 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 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 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 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 temos incógnitas . Ou seja, nossa função tem 4 incógnitas por equação e equações, o que nos leva a incógnitas.
O problema é que todas aquelas condições que a gente definiu só nos dão 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:
Juntando essas duas condições com as outras e definindo , chegamos no sistema :
E isso só nos dá os coeficientes . Lembrando que só vamos usar o até o na nossa função spline. O 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 por spline cúbica natural da tabela abaixo:
Lembrando que e definindo:
Temos nossa matriz . Normalmente eu preencho ela da seguinte forma. Eu monto uma matriz . Nesse caso e completo a primeira e última linha:
Agora logo embaixo do primeiro , botamos e vamos aumentando o índice na diagonal:
Do lado do eu completo com e também vamos aumentando o índice na diagonal:
Agora do lado do completamos com e novamente aumentamos o índice na diagonal:
Por fim, completamos tudo com :
Agora é a vez do nosso vetor . Ele é um vetor . Nesse caso, . Eu costumo gravar só que a primeira e última linhas são , que tem um multiplicando por fora e que a segunda linha é sempre . Aí para as outras linhas é só ir aumentando o índice.
Beleza, agora vamos encontrar nossos . Como os pontos são igualmente espaçados:
E resolvendo os termos de :
Ficamos então com o sistema:
Resolvendo por eliminação de Gauss obtemos:
Agora repare que ele pede . O ponto se encontra entre e , então só precisamos da função :
Finalmente substituímos na fórmula do :
Spline Cúbica Apertada
Essa é a forma mais geral onde nós definimos as derivadas nos extremos do intervalo:
Nesse caso a única coisa que muda são as primeiras linhas de e de do sistema . Aqui teremos:
Os outros coeficientes são obtidos da mesma forma:
Algoritmo
Spline Cúbica Natural
Passo 1. Dados iniciais (o que seu programa vai receber de você):
a. Vetor de valores
b. Vetor de valores
Passo 2. Para de a repita o passo 3.
Passo 3.
Passo 4. Para de a repita o passo 5.
Passo 5.
Passo 6. Definimos como uma matriz cheia de zeros.
Passo 7. ;
Passo 8. Para de a repita os passos 9, 10 e 11.
Passo 9.
Passo 10.
Passo 11.
Passo 12. Jogamos nossa matriz e nosso vetor no algoritmo da eliminação de Gauss retornando .
Passo 13. Para de a repita os passos 14, 15 e 16.
Passo 14.
Passo 15.
Passo 16.
Passo 17. Retorne os conjuntos para de a .
Com isso, chegamos à nossa :
Spline Cúbica Apertada
Passo 1. Dados iniciais (o que seu programa vai receber de você):
a. Vetor de valores
b. Vetor de valores
c. O valor das derivadas nos extremos e
Passo 2. Para de a repita o passo 3.
Passo 3.
Passo 4. Para de a repita o passo 5.
Passo 5.
Passo 6.
Passo 7.
Passo 8. Definimos como uma matriz cheia de zeros.
Passo 9. ; ; ;
Passo 10. Para de a repita os passos 11, 12 e 13.
Passo 11.
Passo 12.
Passo 13.
Passo 14. Jogamos nossa matriz e nosso vetor no algoritmo da eliminação de Gauss retornando .
Passo 15. Para de a repita os paços 16, 17 e 18.
Passo 16.
Passo 17.
Passo 18.
Passo 19. Retorne os conjuntos para de a .
Com isso, chegamos à nossa :
Spline Cúbica Natural
Spline Cúbica Apertada
Algoritmo
Exercícios Resolvidos
Exercício Resolvido #1
Márcia A. Gomes Ruggiero e Vera Lúcia da Rocha Lopes, Cálculo Numérico – Aspectos Teóricos e Computacionais, 2ª ed. São Paulo: MAKRON Books, 1996, pag 253, exemplo 14
Encontrar uma aproximação para por spline cúbica natural na tabela:
Passo 1
Primeiro definimos:
E como o espaçamento entre os pontos é o mesmo, temos . Substituindo no sistema :
Passo 2
Resolvemos então o sistema linear:
E obtemos que:
Passo 3
Agora repare que ele pede o valor em que está entre e , logo precisamos do valor de .
Aplicando as fórmulas:
Passo 4
Juntando tudo temos:
Resposta
Exercício Resolvido #2
Richard L. Burden e J. Douglas Faires, Numerical Analysis, 9ª ed. Brooks/Cole, Cengage Learning, pag 161, exercício 4
Construa a spline cúbica natural para as seguintes tabelas:
Passo 1
Primeiro definimos:
Substituindo no nosso sistema :
Repare que como a primeira e última linha de e de devem ser zeradas a gente acaba não tendo que fazer conta nenhuma haha.
Resolvendo isso aí temos:
Jogando na fórmula:
Passo 2
Como só temos um intervalo então nossa função será:
Passo 3
Definimos:
Substituindo no nosso sistema :
Resolvendo isso aí temos:
Jogando na fórmula:
Passo 4
Como só temos um intervalo então nossa função será:
Passo 5
Definimos:
Substituindo no nosso sistema :
Resolvendo isso aí temos:
Passo 6
Aqui temos dois intervalos. Jogando na fórmula do primeiro:
E para o segundo intervalo:
Passo 7
Juntando tudo:
Passo 8
Força agora que estamos na última letra! Nessa temos:
E todos os são iguais de novo (para nossa alegria):
Agora fazemos o de sempre. Substituímos no sistema :p
Resolvendo o sistema chegamos a:
Passo 9
Esse vai ser mais chatinho porque tem intervalos. Pro primeiro intervalo temos:
Para o segundo:
E por fim para o terceiro:
Passo 10
Juntando tudo numa função só:
Resposta
Exercício Resolvido #3
Richard L. Burden e J. Douglas Faires, Numerical Analysis, 9ª ed. Brooks/Cole, Cengage Learning, pag 161, exercício 6
As tabelas do exercício foram geradas usando as funções abaixo. Use as splines cúbicas construídas no exercício para aproximar e no dado. Calcule o erro absoluto.
; aproxime e .
; aproxime e .
; aproxime e .
; aproxime e
Passo 1
Do exercício anterior temos que:
Aproximando no ponto desejado temos:
O valor exato da função é:
Calculando o erro:
Deu um erro bastante grande né? Provavelmente porque nós aproximamos por uma reta haha. Isso sempre vai acontecer quando tivermos apenas dois pontos, a spline cúbica nos dará uma reta perdendo grande parte da sua acurácia.
Passo 2
Do exercício anterior temos que:
Aproximando no ponto desejado temos:
O valor exato da função é:
Calculando o erro:
Passo 3
Pegando nosso resultado do exercício anterior novamente:
Repare que o ponto desejado aqui é o , então usaremos :
O valor exato da função é:
Calculando o erro:
Passo 4
Última gente! Do último exercício temos que:
Lembra desse monstro? Haha. Como ele quer uma estimativa para a função em temos que usar !
E o valor exato da função é:
Calculando o erro (finalmente!):
Resposta