Spline cúbico

De Física Computacional
Revisão de 17h36min de 19 de setembro de 2011 por Tekkito (discussão | contribs) (Criou página com 'Como discutido em Fórmula de Lagrange, um inconveniente do uso desta aproximação polinomial é que não temos controle sobre a continuidade das derivadas nas junções das...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Como discutido em Fórmula de Lagrange, um inconveniente do uso desta aproximação polinomial é que não temos controle sobre a continuidade das derivadas nas junções das regiões interpoladas, ou seja, nas interfaces. Entretanto, na grande maioria dos problemas de fisica, basta garantir o bom comportamento das derivadas 1a e 2a. Por este motivo, os splines cúbicos são bastante populares.


Inicialmente, vamos considerar uma interpolação linear Pi(x), válida entre os pontos Xi e Xi+1, obtida a partir da Fórmula de Lagrange:

Pi(x)=YiAi(x)+Yi+1Bi(x),

onde

Ai(x)=Xi+1xXi+1Xi e Bi(x)=xXiXi+1Xi

foram introduzidos por conveniência. Em aplicações nas quais as propriedades das derivadas são importantes, sérias dificuldades são encontradas com esta fórmula pois a derivada 2a é infinita nas fronteiras entre Xi e Xi+1, devido à descontinuidade da derivada 1a. Além disso, embora o coeficiente angular da reta secante entre os pontos (Xi,Yi) e (Xi+1,Yi+1) possa fornecer uma aproximação razoável para a derivada 1a no intervalo (Xi,Xi+1), a derivada segunda é nula nesta região.

Podemos resolver estas dificuldades acrescentando dois termos à expressão acima:

Si(x)=YiAi(x)+Yi+1Bi(x)+Y'iCi(x)+Y'i+1Di(x).

Como, por hipótese, dispomos apenas de uma tabela com os valores {(Xi,Yi)}, a derivada segunda em cada ponto Y'i aparece aqui como um parâmetro. Por enquanto, vamos continuar como se fosse um dado do problema. Mais à frente, veremos como proceder. As funções Ci(x) e Di(x) precisam ser escolhidas convenientemente para se garantir que Si(Xi)=Yi. Como estamos interessados em uma expressão cúbica, a forma funcional de Ci(x) e Di(x) já fica bastante limitada. Veremos, a seguir que:

Ci(x)=16A(x)[A2(x)1][Xi+1Xi]2 e Di(x)=16B(x)[B2(x)1][Xi+1Xi]2

asseguram que Si(Xi)=Yi, uma vez que

Ci(Xi)=Di(Xi)=Ci(Xi+1)=Di(Xi+1)=0

pois

Ai(Xi)=Bi(Xi+1)=1 e Ai(Xi+1)=Bi(Xi)=0.


Com a introdução destes termos, a derivada de Si(x) torna-se:

dSi(x)dx=Yi+1YiXi+1XiY'i6[3Ai2(x)1](Xi+1Xi)+Y'i+16[3Bi2(x)1](Xi+1Xi)

trazendo, claramente, contribuições lineares e quadráticas em x, além do termo associado à reta secante. A derivada segunda, assume uma forma bastante simples:

d2Si(x)dx2=Y'iAi(x)+Y'i+1Bi(x)=Y'iXi+1xXi+1Xi+Y'i+1xXiXi+1Xi,

com uma dependência linear em x. Esta expressão mostra que as derivadas segundas possuem exatamente os valores desejados nas fronteiras, Y'i, resolvendo os problemas mencionados acima.

Para obtermos os valores de {Y'i}, impomos a continuidade da derivada 1a nas fronteiras entre Xi1 e Xi:

dSi1(Xi)dx=dSi(Xi)dx.

Usando as propriedades Ai1(Xi)=Bi(Xi)=0 e Ai(Xi)=Bi1(Xi)=1, obtemos

Yi+Yi1XiXi1+Y'i16(XiXi1)+Y'i3(XiXi1)=Yi+1YiXi+1XiY'i3(Xi+1Xi)Y'i+16(Xi+1Xi)

que, apos agrupar os termos convenientemente, nos leva a

Y'i16(XiXi1)+Y'i3(Xi+1Xi1)+Y'i+16(Xi+1Xi)=Yi+1YiXi+1XiYiYi1XiXi1.

Uma vez que em um conjunto de N pontos temos N2 fronteiras internas, os valores de Y'1 e Y'N permanecem indeterminados. Eles devem ser obtidos a partir da física do problema tratado. Em geral, os programas gráficos encontrados nas diferentes plataformas usam Y'1=Y'N=0. Porém, esta não é a única possibilidade. De fato, quaisquer combinações das condições


Y'1=λ1 ou Y'1=ζ1

e

Y'N=λ2 ou Y'N=ζ2


são perfeitamente possíveis, desde que sejam consistentes com a física do problema. Se os vínculos sobre as derivadas forem escolhidos, a expressão para dS1(X1)dx=ζ1 ou dSN1(XN)dx=ζ2 leva, respectivamente, a relações entre Y'1 e Y'2 ou Y'N1 e Y'N. A obtenção destas relações é deixada como exercício.


Deve ser observado que a solução do problema envolve a resolução de um sistema de N2 equações lineares acopladas. Este sistema de equações pode ser escrito na forma matricial da seguinte forma:


(b11b12b1Nb21b22b2NbN1bN2bNN)(Y'1Y'2Y'N)=(f1f2fN)


onde

fi=Yi+1YiXi+1XiYiYi1XiXi1,i>1 e i<N.


b1i=0i>2 e bNi=0i<N1


e os demais elementos são apresentados logo abaixo.


Deste modo, a obtenção de {Y'i} requer a inversão de uma matriz, o que é uma tarefa custosa e delicada numericamente (veja, por exemplo, Numerical Recipes). Uma vez que a equação para a i-ésima fronteira envolve apenas Yi1,Yi e Yi+1, somente as três diagonais principais da matriz acima são não nulas, isto é, 𝐛 é uma matriz tri-diagonal. Assim, os elementos de 𝐛, excluindo-se aqueles associados às fronteiras, são dados por:

bi,i1bi=16(XiXi1),

bi,ibi0=13(Xi+1Xi1)

bi,i+1bi+=16(Xi+1Xi).

Caso os vínculos nas fronteiras sejam impostos sobre Y'1 e Y'N, temos

b1j={1,se j=10,se j>1

e

bNj={1,se j=N0,se j<N

com f1=λ1 e fN=λ2 sendo os valores impostos sobre a derivada segunda nos pontos X1 e XN, respectivamente. Mais uma vez, o caso em que as condições são impostas sobre a derivada 1a é deixado como exercício.

Sendo 𝐛 uma matriz tri-diagonal, a solução do problema é bastante simples e é discutida na seção Eliminação gaussiana e retro-substituição.



Voltar para o índice de Métodos computacionais.