Sei sulla pagina 1di 33

Matemática Computacional II

Interpolação e Aproximação de Funções


Splines

Eliana Costa e Silva1

Licenciatura em Engenharia de Informática

ESTG|P.PORTO, 2019-2020

1
Textos elaborados em colaboração com Aldina Correia (aic@estg.ipp.pt)
(LEI, ESTG|P.PORTO) MCII 2019-2020 1 / 33
1 Introdução

2 Splines
Splines Lineares
Splines Quadráticas
Splines Cúbicas

(LEI, ESTG|P.PORTO) MCII 2019-2020 2 / 33


Introdução

O termo inglês spline pode ser traduzido pelo vocábulo ”virote”. Um


virote é um instrumento usado pelos desenhadores para unir um
conjunto de pontos do plano.
Assim, é desenhada uma curva contı́nua por forma a passar nestes
pontos, podendo ser uma reta (Spline linear), uma parábola (Spline
quadrática) ou o gráfico duma função cúbica.
Esta ideia foi utilizada em análise numérica para ajuste de funções. Neste
caso, utilizamos polinómios de pequeno grau para união dos pontos.
As funções Spline mais populares são as cúbicas.
Nas situações em que o número de pontos de interpolação é grande (por
exemplo, em aplicações CAD - computer-aided design), a inexatidão na
aproximação obtida com um polinómio de grau elevado é dominada
pelos erros de arredondamento.

(LEI, ESTG|P.PORTO) MCII 2019-2020 3 / 33


Efeito de Runge

O uso de polinómios
interpoladores de grau muito
elevado, não é, em geral,
aconselhável, pois:
Podem oscilar muito;
São computacional
ineficientes.

Efeito de Runge
O erro entre a função e o polinómio
interpolador aumenta com o aumento
do grau do polinómio, especialmente, função de Runge – linha vermelha;
na região próxima dos pontos -1 e 1. polinómio interpolador de grau 5 – curva azul;

polinómio interpolador de grau 9 – linha verde.

(LEI, ESTG|P.PORTO) MCII 2019-2020 4 / 33


Introdução

Os polinómios pelas suas propriedades apresentam vantagens em


serem utilizados para aproximar funções.
A utilização de interpolação por polinómios segmentados – “Splines” – é
em geral aconselhável, pois permite obter resultados semelhantes aos
obtidos por interpolação polinomial mas usando polinómios de menor
grau.
Uma “spline” é uma função segmentada e consiste na junção de várias
funções definidas num intervalo, de tal forma que as partes estão ligadas
umas às outras de uma maneira contı́nua e suave.

(LEI, ESTG|P.PORTO) MCII 2019-2020 5 / 33


Devido à sua simplicidade de representação e a facilidade com que podem
ser calculadas, os splines são utilizados frequentemente para representação
de curvas nas áreas de Ciências de Computação e Engenharia Informática,
predominantemente, em computação gráfica.

www.cs.kuleuven.be/ nalag/images/wavelet5.gif www.pling.org.uk/cs/cgvimg/bspline.png

(LEI, ESTG|P.PORTO) MCII 2019-2020 6 / 33


Spline

Definição geral
Seja f uma função de variável real x definida no intervalo [a, b] e conhecida
nos pontos da partição

a = x0 < x1 < · · · < xn−1 < xn = b.

Desta forma pode definir-se a Spline que une os pontos da partição como a
função S : [a, b] → R que satisfaz:
S1 S(xi ) = f (xi ), i = 0, ..., n;

S2 S ∈ C2 ([a, b]);

S3 o princı́pio de Pierre-Louis Moreau de Maupertuis (1698-1759) da energia


mı́nima, isto é,
Zb  2 Zb  2
00 00
S (x) dx ≤ R (x) dx
a a
para toda a função R que satisfaz S1 e S2.

(LEI, ESTG|P.PORTO) MCII 2019-2020 7 / 33


Spline

Definição
Uma função spline de grau m é um polinómio segmentado de grau m
continuamente derivável até à ordem m − 1.
Ou seja, dada uma partição, conforme definida no slide anterior, S é uma
função spline de grau m se:
S é um polinómio Si de grau m em cada intervalo da partição
[xi , xi+1 ], i = 0, ..., n − 1
Si (xi ) = f (xi ), i = 0, ..., n;
dk dk
S (x
i+1 i+1 ) = Si (xi+1 ) , k = 0, ..., m − 1, i = 0, ..., n − 1
dxk dxk

(LEI, ESTG|P.PORTO) MCII 2019-2020 8 / 33


Splines Lineares

O spline mais simples que podemos fazer com dois pontos é uni-los por uma
reta.
Os splines de primeiro grau para um conjunto de pontos podem ser definidos
como um conjunto de funções lineares, tais que:
S0 (x) = f (x0 ) + m0 (x − x0 ), para x0 ≤ x < x1
S1 (x) = f (x1 ) + m1 (x − x1 ), para x1 ≤ x < x2
...
Sn−1 (x) = f (xn−1 ) + mn−1 (x − xn−1 ), para xn−1 ≤ x ≤ xn
onde
mi é o coeficiente angular da reta que liga os pontos, e é dado por:

f (xi+1 ) − f (xi )
mi =
xi+1 − xi

(LEI, ESTG|P.PORTO) MCII 2019-2020 9 / 33


Splines Lineares

Exemplo:
Considere a tabela seguinte:

x 1 10 20 30 40
f (x) 1 30 −10 20 40

a) Determine a spline linear que


aproxima f no intervalo [1, 40].
b) Determine, usando a alı́nea
anterior uma aproximação para
f (5) e f (25).
c) Calcule uma aproximação para f
no intervalo [1, 40], usando o
Scilab.

(LEI, ESTG|P.PORTO) MCII 2019-2020 10 / 33


Splines Lineares

Resolução:
a) Determine a spline linear que aproxima f no intervalo [1, 40].
Temos que a spline linear é dada por:


 S0 (x) = f (x0 ) + m0 (x − x0 ), 1 ≤ x < 10
S1 (x) = f (x1 ) + m1 (x − x1 ), 10 ≤ x < 20

S(x) =
S (x) = f (x2 ) + m2 (x − x2 ), 20 ≤ x < 30
 2


S3 (x) = f (x3 ) + m3 (x − x3 ), 30 ≤ x ≤ 40

f (xi+1 )− f (xi )
onde mi = xi+1 −xi , para i = 0, 1, 2, 4.
Assim,
para 1 ≤ x < 10, temos

30 − 1 29 29 20
S0 (x) = 1 + (x − 1) = 1 + (x − 1) = x −
10 − 1 9 9 9

(LEI, ESTG|P.PORTO) MCII 2019-2020 11 / 33


Splines Lineares

para 10 ≤ x < 20, temos


−10 − 30
S1 (x) = 30 + (x − 10) = 30 − 4(x − 1) = −4x + 31
20 − 10
para 20 ≤ x < 30, temos
20 − (−10)
S2 (x) = −10 + (x − 20) = −10 + 3(x − 20) = 3x − 70
30 − 20
para 30 ≤ x ≤ 40, temos
40 − 20
S3 (x) = 20 + (x − 30) = 20 + 2(x − 30) = 2x − 40
40 − 30
Logo,
 29 20

 S0 (x) = x − , 1 ≤ x < 10

 9 9
S(x) = S1 (x) = −4x + 31, 10 ≤ x < 20
 S (x) = 3x − 70, 20 ≤ x < 30
 2


S3 (x) = 2x − 40, 30 ≤ x ≤ 40
(LEI, ESTG|P.PORTO) MCII 2019-2020 12 / 33
Splines Lineares

b) Determine, usando a alı́nea anterior uma aproximação para f (5) e


f (25).

Temos que 1 ≤ 5 < 10, logo

29 20 125
f (5) ' S0 (5) = ×5− =
9 9 9

Por outro lado, temos que 20 ≤ 25 < 30, logo

f (25) ' S2 (25) = 3 × 25 − 70 = 5

(LEI, ESTG|P.PORTO) MCII 2019-2020 13 / 33


Splines Lineares no Scilab

c) Calcule uma aproximação para f no intervalo [1, 40], usando o Scilab.

Calling Sequence: [y]=interpln(xyd,x)


Resolução:
//introduzir os dados
x=[1 10 20 30 40];
y=[1 30 -10 20 40];
//fazer o gráfico dos dados
plot2d(x’,y’,[-3],"011",
,[0,-20,41,50]);
//criar a spline
yi=interpln([x;y],1:40);
//representar a spline
plot2d((1:40)’,yi’,[3],"000");

(LEI, ESTG|P.PORTO) MCII 2019-2020 14 / 33


Splines Lineares – Erro de interpolação

Teorema
Seja f uma função contı́nua com derivadas de segunda ordem no intervalo
[x0 , xn ] e seja S uma spline linear.
Se 00
max f (ξ) ≤ M2

ξ∈[x0 ,xn ]

então o erro cometido por aproximar f por S é majorado por:


 2
1
| f (x) − S (x)| ≤ max (xi+1 − xi ) M2
8 0≤i≤n−1

para x ∈ [x0 , xn ].

Observação:
Caso não se conheça a expressão analı́tica de f , recorre-se a diferenciação
numérica!

(LEI, ESTG|P.PORTO) MCII 2019-2020 15 / 33


Splines Quadráticas

Este método é idêntico à interpolação por splines lineares.


Difere na função que une cada dois pontos que deve ser quadrática.
O objetivo dos splines quadráticos é determinar um polinómio de
segundo grau para cada intervalo entre os pontos dados.
Para n + 1 pontos dados (i = 0, 1, 2, 3, ..., n), existem n intervalos e em
cada intervalo [xi , xi+1 ], com i = 0, 1, 2, 3, ..., n − 1, teremos um polinómio
do tipo:
Si (x) = ai x2 + bi x + ci
donde temos 3n constantes indeterminadas, i.e. 3 por cada intervalo.
Portanto, são necessárias 3n equações para determinar estas incógnitas.
Por exemplo, no caso de termos 5 pontos (n = 4), teremos 3 × 4 = 12
constantes indeterminadas, sendo necessárias 12 equações para
determinar estas incógnitas.

(LEI, ESTG|P.PORTO) MCII 2019-2020 16 / 33


Splines Quadráticas

As primeiras 2(n − 1) = 2n − 2 equações são as que se obtêm dos


pontos interiores do suporte (x1 , x2 , . . . , xn−1 ), que serão comuns a 2
parábolas adjacentes:

Si−1 (xi ) = f (xi ) ⇔ ai−1 xi2 + bi−1 xi + ci−1 = f (xi )


Si (xi ) = f (xi ) ⇔ ai xi2 + bi xi + ci = f (xi )

para i = 1, ..., n − 1
A primeira parábola deve passar por (x0 , y0 ) e a última por (xn , yn ), logo
temos mais 2 equações:

S0 (x0 ) = f (x0 ) ⇔ a0 x02 + b0 x0 + c0 = f (x0 )


Sn (xn ) = f (xn ) ⇔ an xn2 + bn xn + cn = f (xn )

(LEI, ESTG|P.PORTO) MCII 2019-2020 17 / 33


Splines Quadráticas

As derivadas nos pontos interiores devem ser iguais, donde para


i = 1, ..., n − 1 obtemos mais n − 1 equações:
0
Si−1 (xi ) = Si0 (xi ) ⇔ 2ai−1 xi + bi−1 = 2ai xi + bi

A última equação obriga a que a segunda derivada é nula no primeiro


ponto, isto é:
S000 (x0 ) ⇔ 2a0 = 0 ⇔ a0 = 0

(LEI, ESTG|P.PORTO) MCII 2019-2020 18 / 33


Splines Quadráticas

Exemplo:
Considere a tabela seguinte:

x 1 10 20 30 40
f (x) 1 30 −10 20 40

Determine as equações que permitem determinar a spline quadrática


que aproxima f no intervalo [1 ,40].
Resolução:
Neste caso temos n = 4, e portanto a spline quadrática será:

S0 (x) = a0 x2 + b0 x + c0 ,


 1 ≤ x < 10
S1 (x) = a1 x2 + b1 x + c1 , 10 ≤ x < 20

S(x) =
S (x) = a2 x2 + b2 x + c2 , 20 ≤ x < 30
 2


S3 (x) = a3 x2 + b3 x + c3 , 30 ≤ x ≤ 40

(LEI, ESTG|P.PORTO) MCII 2019-2020 19 / 33


Splines Quadráticas

para os pontos interiores do suporte (i.e. para x1 , x2 , x3 ) temos:

a0 x12 + b0 x1 + c0 = f (x1 )
a1 x12 + b1 x1 + c1 = f (x1 )
a1 x22 + b1 x2 + c1 = f (x2 )
a2 x22 + b2 x2 + c2 = f (x2 )
a2 x32 + b2 x3 + c2 = f (x3 )
a3 x32 + b3 x3 + c3 = f (x3 )

para os pontos fronteira x0 e x4 temos:

a0 x02 + b0 x0 + c0 = f (x0 )
a3 x42 + b3 x4 + c3 = f (x4 )

(LEI, ESTG|P.PORTO) MCII 2019-2020 20 / 33


Splines Quadráticas

para as derivadas dos pontos interiores temos:

2a0 x1 + b0 = 2a1 x1 + b1
2a1 x2 + b1 = 2a2 x2 + b2
2a2 x3 + b2 = 2a3 x3 + b3

a derivada no primeiro ponto:

S000 (x0 ) ⇔ 2a0 = 0 ⇔ a0 = 0

Temos assim (2 × 4 − 2) + 2 + (4 − 1) + 1 = 12 equações e 12 incógnitas,


sendo as incógnitas:

a0 , b0 , c0 , a1 , b1 , c1 , a2 , b2 , c2 , a3 , b3 , c3

(LEI, ESTG|P.PORTO) MCII 2019-2020 21 / 33


Splines Quadráticas

a0 x12 + b0 x1 + c0 = f (x1 )


a1 x12 + b1 x1 + c1



 = f (x1 )
a1 x22 + b1 x2 + c1



 = f (x2 )
a2 x22 + b2 x2 + c2



 = f (x2 )
a2 x32 + b2 x3 + c2

= f (x3 )




a3 x32 + b3 x3 + c3 = f (x3 )


 a0 x02 + b0 x0 + c0 = f (x0 )
a3 x42 + b3 x4 + c3



 = f (x4 )




 2a0 x1 + b0 −2a1 x1 − b1 = 0



 2a1 x2 + b1 −2a2 x2 − b2 = 0



 2a2 x3 + b2 −2a3 x3 − b3 = 0
a0 = 0

(LEI, ESTG|P.PORTO) MCII 2019-2020 22 / 33


Splines Quadráticas

Ver o ficheiro Scilab slides spline quadratica.sce


a0 = 0,
b0 = 3.2222222,
c0 = −2.2222222
a1 = −0.7222222,
b1 = 17.666667,
c1 = −74.444444
a2 = 1.4222222,
b2 = −68.111111,
c2 = 783.33333
a3 = −1.5222222,
b3 = 108.55556,
c3 = −1866.6667

(LEI, ESTG|P.PORTO) MCII 2019-2020 23 / 33


Splines Cúbicas

Uma Spline Cúbica é uma função S definida num intervalo definido pelos
pontos I = [x0 , xn ] com as seguintes propriedades:
1 S, S0 e S00 são funções contı́nuas no intervalo I .
2 em cada subintervalo [xi , xi+1 ], S é um polinómio cúbico
Si = ai x3 + bi x2 + ci x + di tal que S(xi ) = f (xi ), para i = 0, 1, ..., n − 1.

Portanto, S é composta por n polinómios cúbicos, cada polinómio é


determinado se se calcularem 4 coeficientes ai , bi , ci e di .

Assim, temos um total de 4n coeficientes a determinar e portanto precisamos


de 4n equações.

(LEI, ESTG|P.PORTO) MCII 2019-2020 24 / 33


Splines Cúbicas

Estas equações obtêm-se de:


i. Continuidade nos pontos de interpolação, isto é, ambas os ramos
anteriores e posteriores a xi devem conter (xi , f (xi ))
ii. Continuidade de S’
iii. Continuidade de S”
iv. Condições Fronteira da Spline - existindo várias opções

(LEI, ESTG|P.PORTO) MCII 2019-2020 25 / 33


Condições Fronteira de Splines Cúbicas

1 Spline natural – se considerarmos as condições de fronteira:

S00 (x0 ) = 0
S00 (xn ) = 0

2 Spline completa – se considerarmos as mesmas condições de f na


extremidade do intervalo de interpolação:

S0 (x0 ) = f 0 (x0 )
S0 (xn ) = f 0 (xn )

Esta aproximação possui maior precisão do que a spline natural.

(LEI, ESTG|P.PORTO) MCII 2019-2020 26 / 33


Coeficientes em Splines Cúbicas

Determinação dos 4n coeficientes, com Si = ai x3 + bi x2 + ci x + di :


i. Da continuidade de S têm-se 2n equações:
S(xi ) = f (xi ) e S(xi+1 ) = f (xi+1 ), i = 0, ..., n − 1.
ii. Da continuidade de S’ têm-se n − 1 equações:
Si0 (xi+1 ) = Si+1
0 (x
i+1 ), i = 0, ..., n − 1.
iii. e da Continuidade de S” outras n − 1:
Si00 (xi+1 ) = Si+1
00 (x
i+1 ), i = 0, ..., n − 1.
iv. As Condições Fronteira da Spline permitem determinar a spline de forma
única:
Spline cúbica natural:
S00 (x0 ) = 0 e S00 (xn ) = 0.
Spline cúbica completa:
S0 (x0 ) = S00 (x0 ) = f 0 (x0 ) e S0 (xn ) = Sn0 (xn ) = f 0 (xn )

(LEI, ESTG|P.PORTO) MCII 2019-2020 27 / 33


Splines Cúbicas – Erro de interpolação

Teorema
Seja f uma função contı́nua com derivadas de segunda ordem no intervalo
[x0 , xn ] e seja S uma spline cúbica para f nesse intervalo. Se

max f (4) (ξ) ≤ M4

ξ∈[x0 ,xn ]

então o erro de interpolação cometido por aproximar f por S é majorado por:


 4
5
| f (x) − S (x)| ≤ max (xi+1 − xi ) M4
384 0≤i≤n−1

para x ∈ [x0 , xn ].
Considerem-se nesse intervalo pontos igualmente espaçados xi , i = 0, ..., n,
em que xi = xi−1 + h, i = 1, ..., n. Assim, h = xn −x
n
0
e o limite superior é:

5 4
| f (x) − S (x)| ≤ h M4
384
(LEI, ESTG|P.PORTO) MCII 2019-2020 28 / 33
Splines Cúbicas

Exemplo:
Um braço de um robô deve passar nos
instantes ti por posições pré-definidas
θ(ti ), onde θ é o ângulo (em radianos) que
o braço do robô faz com o plano XOY.

ti 1 2 3 4 5 6
θ(ti ) 0.9782 1.3028 1.6656 2.2568 2.837 2.8092

1 Supondo que
θ(ti ) = 0.0006ti5 − 0.0269ti4 + 0.2617ti3 − 0.9326ti2 + 1.6754ti :
1 Aproxime a trajetória do robô por uma spline cúbica completa.
2 Determine uma aproximação da posição do robô no instante t = 1.5.
3 Calcule o limite superior para o erro cometido na aproximação da alı́nea
anterior.
(LEI, ESTG|P.PORTO) MCII 2019-2020 29 / 33
Splines Cúbicas no Scilab

Resolução:
//introduzir os dados
x=[1 2 3 4 5 6];
y=[0.9782 1.3028 1.6656
2.2568 2.837 2.8092];
//representar graficamente
os pontos
plot2d(x’,y’,[-3],"011",
,[0,0,7,5]);

(LEI, ESTG|P.PORTO) MCII 2019-2020 30 / 33


Splines Cúbicas no Scilab

Calling Sequence: d = splin(x, y [,spline type [, der]])


[ yp [,y1 [,y2 [,y3]]]] = interp(xp, x, y, d [, out mode]) onde:
x é um vetor de valores por ordem crescente (deve ter pelo menos 2
elementos)
y é o vetor de valores da função nos pontos definidos em x
d é o vetor das derivadas da spline no suporte Neste exemplo temos que

θ0 (ti ) = 0.003ti4 − 0.0269 × 4ti3 + 0.2617 × 3ti2 − 0.9326 × 2ti + 1.6754,


donde θ0 (1) = 0.4907 e θ0 (6) = −0.6058

out mode define a regra de extrapolação, caso o valor a estimar esteja


fora do intervalo definido pelo suporte
xp é o vetor onde queremos estimar f através da spline
yp é o vetor das estimativas yp(i) = s(xp(i)) pela spline
y1, y2, y3 são os vetores (ou matrizes) das derivadas s0 , s00 e s000 em xp.
(LEI, ESTG|P.PORTO) MCII 2019-2020 31 / 33
Splines Cúbicas no Scilab

Resolução:
//estimar as derivadas no suporte
d = splin(x,y,"clamped",[0.4907;-0.6058]);
//definir o intervalo onde se vai estimar
xp=1:0.1:6
//definir a spline
[yp, yp1, yp2]= interp(xp, x, y, d);

//fazer o gráfico dos pontos a estimar e dos


valores estimados
plot2d(xp, yp)
//calcular a aproximação para 1.5
[yp, yp1, yp2]= interp(1.5, x,
y, d);
yp
1.1678257

(LEI, ESTG|P.PORTO) MCII 2019-2020 32 / 33


Splines Cúbicas no Scilab

O limite superior do erro é dado por:


5 4
| f (x) − S (x)| ≤
h M4
384
Temos que θ(4) (t) = 0.0006 × 5!t − 0.0269 × 4!
Assim,
max θ(4) (t) ≤ |θ(4) (1)| ' 0.5736

t∈[1,6]
Donde, M4 ' 0.5736. Logo, limite superior do erro é

5
|θ (t) − S (t)| ≤ × 14 × M4 ' 0.0074688
384

Neste caso conhecemos o valor exato de θ(1.5) que é dado por


θ(1.5) = 0.0006 × 1.55 − 0.0269 × 1.54 + 0.2617 × 1.53
−0.9326 × 1.52 + 1.6754 × 1.5 ' 1.1663625
Assim o erro absoluto é |θ(1.5) − S(1.5)| ' 0.0014632 ≤ 0.0074688.

Ver o ficheiro Scilab SlideSpline Robot.sce


(LEI, ESTG|P.PORTO) MCII 2019-2020 33 / 33

Potrebbero piacerti anche