| | | |

Matemática numérica I

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

5.4 Spline cúbico

Dado um conjunto de pontos {(xi,yi)}i=1n, um spline cúbico é uma função duas vezes continuamente diferenciável da forma

s⁢(x)={s1⁢(x),x1≤x<x2,s2⁢(x),x2≤x<x3,⁢⋮⁢⋮sn−1⁢(x),xn−1≤x<xn, (5.61)

onde as partes são polinômios cúbicos

si⁢(x)=si⁢,1⁢(x−xi)3+si⁢,2⁢(x−xi)2+si⁢,3⁢(x−xi)+si⁢,4, (5.62)

que satisfazem as seguintes propriedades

  1. a)

    Interpolação

    s⁢(xi)=yi,i=1,2,…,n, (5.63)
  2. b)

    Continuidade

    si⁢(xi)=si+1⁢(xi),i=1,2,…,n−2, (5.64)
  3. c)

    Continuidade da derivada

    si′⁢(xi)=si+1′⁢(xi),i=1,2,…,n−2, (5.65)
  4. d)

    Continuidade da segunda derivada

    si′′⁢(xi)=si+1′′⁢(xi),i=1,2,…,n−2. (5.66)

Observamos que o spline tem 4⁢(n−1) coeficientes a determinar, enquanto que as condições acima nos fornecem 4⁢n−6 equações. Assim sendo, a determinação de um spline requer ainda duas condições de fechamento. Conforme a escolha destas condições, diferentes splines cúbicos são computados.

5.4.1 Spline not-a-knot

A condição not-a-knot exige que o spline cúbico tenha derivada terceira contínua nos pontos x2 e xn−1, i.e.

s1′′′⁢(x2)=s2′′′⁢(x2), (5.67)
sn−2′′′⁢(xn−1)=sn−1′′′⁢(xn−1). (5.68)
Exemplo 5.4.1.

Consideremos o problema de aproximar a função f⁢(x)=sen⁡(x) pelo spline cúbico not-a-knot com pontos x1=0, x2=π/6, x3=π/3 e x4=π/2. Na Figura 5.3 temos os esboços de f e do spline cúbico computado. O spline computado é aproximadamente

s⁢(x)={s1⁢(x),0≤x<π6s2⁢(x),π6≤x<π3,s3⁢(x),π3≤x<π2 (5.69)

sendo suas partes

s1⁢(x)=−0.11⁢x3−0.11⁢x2−0.11⁢x, (5.70)
s2⁢(x)=−0.07⁢(x−π6)3−0.24⁢(x−π6)2−0.42⁢(x−π6)+12, (5.71)
s3⁢(x)=1.02⁢(x−π3)3+0.86⁢(x−π3)2+0.51⁢(x−π3)+32. (5.72)
Refer to caption
Figura 5.3: Gráficos da função f⁢(x)=sen⁡(x) e do spline cúbico computado no Exemplo 5.4.1.
Código 14: splineNotAKnot.py
1import numpy as np
2from scipy.interpolate import CubicSpline
3
4# dados
5f = lambda x: np.sin(x)
6xx = np.array([0.,
7 np.pi/6,
8 np.pi/3,
9 np.pi/2])
10yy = f(xx)
11
12# spline
13cs = CubicSpline(xx, yy)
14
15# coefs
16print(cs.c)

5.4.2 Spline fixado

Os splines cúbicos fixados são obtidos impondo os valores das derivadas na fronteira, i.e.

s′⁢(x1)=y1′, (5.73)
s′⁢(xn)=yn′, (5.74)

onde y1′ e yn′ são escalares dados. Quando usamos splines para aproximarmos uma dada função f, usualmente, escolhemos y1′=f′⁢(x1) e yn′=f′⁢(xn).

Exemplo 5.4.2.

Consideremos o problema de aproximar a função f⁢(x)=sen⁡(x) pelo spline cúbico fixado com pontos x1=0, x2=π/6, x3=π/3 e x4=π/2. Na Figura 5.4 temos os esboços de f e do spline cúbico computado

s⁢(x)={s1⁢(x),0≤x<π6s2⁢(x),π6≤x<π3,s3⁢(x),π3≤x<π2, (5.75)

send suas partes

s1⁢(x)=−0.16⁢x3−0.12⁢x2−0.04⁢x (5.76)
s2⁢(x)=−0.001⁢(x−π6)3−0.26⁢(x−π6)2−0.44⁢(x−π6)+12, (5.77)
s3⁢(x)=0.0⁢(x−π3)3+0.5⁢(x−π3)2+0.87⁢(x−π3)+32. (5.78)
Refer to caption
Figura 5.4: Gráficos da função f⁢(x)=sen⁡(x) e do spline cúbico fixado computado no Exemplo 5.4.2.
1import numpy as np
2from scipy.interpolate import CubicSpline
3
4# dados
5f = lambda x: np.sin(x)
6xx = np.array([0.,
7 np.pi/6,
8 np.pi/3,
9 np.pi/2])
10yy = f(xx)
11
12# spline
13cs = CubicSpline(xx, yy,
14 bc_type=((1, 1.),
15 (1, 0.)))
16
17# coefs
18print(cs.c)

5.4.3 Exercícios

E. 5.4.1.

Dado o conjunto de pontos {(−1,−1),(−0.5,1),(1,2)}, obtenha o spline cúbico associado com condição de controno:

  1. a)

    Not-a-Knot.

  2. b)

    Fixado.

E. 5.4.2.

Dado o conjunto de pontos {(−1,−1),(0,1),(1,1/2),(2,1)}, obtenha o spline cúbico associado com condição de controno:

  1. a)

    Not-a-Knot.

  2. b)

    Fixado.

E. 5.4.3.

Dado o conjunto de pontos {(−1,−1),(0,1),(1,1/2),(2,1),(2.5,1)}, obtenha o spline cúbico associado com condição de controno:

  1. a)

    Not-a-Knot.

  2. b)

    Fixado.

E. 5.4.4.

Aproxime a função f⁢(x)=ex por um spline cúbico que passa pelos pontos x1=0, x2=1, x3=1.5 e x4=2.


Dica: use um spline fixado.

E. 5.4.5.

Considere o problema de aproximar a função f⁢(x)=cos⁡(x) por um spline cúbico s=s⁢(x) no intervalo [0,π]. Escolha os pontos e a condição de fronteira de forma a obter s que aproxime f com boa precisão gráfica.


Dica: use um spline fixado.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |