Você está na página 1de 12

1

Interpolao


Interpolao polinomial

Seja f(x) uma funo, ento existe um polinmio p(x
i
), tal que

p(x
i
) = f (x
i
), para i = 0, 1, 2, ..., n


Forma de Lagrange

( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )

=
= + + + =
n
k
n
k
k n
n
n n
n n
x L x f x L x f x L x f x L x f x p
0
1 1 0 0
) ( K

no qual ) (x L
n
k
so os polinmios de Lagrange:

=
+
+

=


=
n
k i
i
i k
i
n k k k k k k k
n k k n
k
x x
x x
x x x x x x x x x x
x x x x x x x x x x
x L
0
1 1 1 0
1 1 1 0
) (
) (
) ( ) ( ) ( ) ( ) (
) ( ) ( ) ( ) ( ) (
) (
K K
K K


Observe que 0 ) ( =
i
n
k
x L e 1 ) ( =
k
n
k
x L para i k.


Exemplo

Encontrar o polinmio que interpola a funo f(x) = 1/x
2
nos pontos x
0
= 2, x
1
= 2,5 e x
2
= 4.
Como sero usados trs pontos, o polinmio interpolador tem grau 2:

( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
10 5 6
4 2 5 2 2
4 5 2
2
2 0 1 0
2 1 2
0
+ =


=


= x , x
,
x , x
x x x x
x x x x
x L

( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( ) 3 32 24 4
4 5 2 2 5 2
4 2
2
2 1 0 1
2 0 2
1
/ x x
, ,
x x
x x x x
x x x x
x L + =


=


=

( )
( ) ( )
( ) ( )
( ) ( )
( ) ( )
( ) 3 5 5 4
5 2 4 2 4
5 2 2
2
1 2 0 2
1 0 2
2
/ x , x
,
, x x
x x x x
x x x x
x L + =


=


=

Calculando os valores: f(x
0
) = 1/2
2
= 0,25, f(x
1
) = 1/2,5
2
= 0,16 e f(x
3
) =
2
= 0,0625 e
substituindo na equao (2), vem que
2

p
2
(x) = 0,25 (x
2
6,5 x + 10) + 0,16/3 (-4 x
2
+ 24 x 32) + 0,0625/3 (x
2
4,5 x + 5)

Rearranjando, vem que:

p
2
(x) =0,0575 x
2
0,43875 x + 0,8975


Roteiro para o clculo de valor interpolado pelo polinmio de Lagrange:

% LAGRANGE.M Interpolacao com polinomios de Lagrange de grau arbitrario
%
% Dados de entrada: x,y = dados tabulados
% xint = ponto no qual a funcao sera interpolada
%
% Saida: yint = valor de y em x = xint obtido por interpolacao com
% polinomio de grau n-1

dxi = xi - x; % vetor com os valores de xi - x(1), xi - x(2), ...
n = length(x); % grau do polinomio: n-1
L = zeros(size(y)); % pre-alocacao de L

% Funcoes base do polinomio de Lagrange, L(j)
L(1) = prod(dxi(2:n))/prod(x(1)-x(2:n)); % j = 1
L(n) = prod(dxi(1:n-1))/prod(x(n)-x(1:n-1)); % j = n
for j = 2:n-1
num = prod(dxi(1:j-1))*prod(dxi(j+1:n));
den = prod(x(j)-x(1:j-1))*prod(x(j)-x(j+1:n));
L(j) = num/den;
end
yint = sum(y.*L); % Calculo do valor interpolado


Equivalncia entre o ajuste e a interpolao polinomial

Se n for o nmero de graus de liberdade e m o grau do polinmio, a interpolao
polinomial corresponde ao ajuste polinomial quando n = m 1. Podemos verificar isso aplicando
o ajuste polinomial aos dados numricos do exemplo acima.

Prtica no Matlab

>> x = [2; 2.5; 4];
>> y = 1./x.^2;
>> p2 = polyfit(x,y,2)

p2 =

0.0575 -0.43875 0.8975

Os coeficientes do polinmio de ajuste de grau 2 mostrados no exemplo numrico acima
so os mesmos coeficientes calculados no exemplo do polinmio de Lagrange, de modo que o
ajuste polinomial de grau mximo que pode ser aplicado aos valores (x,y) equivalente ao
polinmio interpolador de Lagrange.
3

Forma de Newton

O polinmio interpolador de grau n pode ser definido na forma de Newton como:

( ) ( ) ( )( ) ( )( ) ( )
n n
x x x x x x c x x x x c x x c c x p + + + + = L K
1 0 1 0 2 0 1 0


Os coeficientes do polinmio interpolador so determinados a partir das frmulas de
diferenas divididas:

[ ]
k k
x ,..., x , x f c
1 0
= , k = 0, 1, 2, ..., n

Definio de diferena dividida:

A definio de diferena de ordem k usada no clculo do coeficiente do polinmio
interpolador de Newton descrita pela equao:

[ ]
[ ] [ ]
0
1 1 0 1 1
1 1 0
x x
x , , x , x f x , x , , x f
x , x , , x , x f
k
k k k
k k

K K
K

Diferena de ordem zero: [ ] ( )
0 0
x f x f =

Diferena de 1 ordem: [ ]
( ) ( )
0 1
0 1
1 0
x x
x f x f
x , x f

=

Diferena de 2 ordem: [ ]
[ ] [ ]
0 2
1 0 2 1
2 1 0
x x
x , x f x , x f
x , x , x f

=

Diferena de 3 ordem: [ ]
[ ] [ ]
0 3
2 1 0 3 2 1
3 2 1 0
x x
x , x , x f x , x , x f
x , x , x , x f

=

E assim por diante. Para simplificar, a notao de diferenas divididas com todos os argumentos
ser substituda pelo primeiro e ltimo coeficientes, na forma:

[ ] [ ]
k k
x , x f x ,..., x , x f
0 1 0
=

A tabela seguinte apresenta o esquema para o clculo de diferenas divididas de ordem 2.


Tabela 1. Esquema para o clculo dos coeficientes da interpolao polinomial pelo mtodo das
diferenas divididas.

x f(x) f[x
k-1
, x
k
] f[x
k-2
, x
k-1
, x
k
]
x
0
f(x
0
)
4
( ) ( )
0 1
0 1
x x
x f x f



x
1
f(x
1
)
( ) ( ) ( ) ( )
0 2
0 1
0 1
1 2
1 2
x x
x x
x f x f
x x
x f x f


( ) ( )
1 2
1 2
x x
x f x f



x
2
f(x
2
)


Clculo dos coeficientes do polinmio interpolador na forma de Newton

k = 0: ( )
0 0
x f c =

k = 1: [ ]
( ) ( )
0 1
0 1
1 0 1
x x
x f x f
x , x f c

= =

k = 2: [ ]
[ ] [ ]
( ) ( ) ( ) ( )
0 2
0 1
0 1
1 2
1 2
0 2
0 1 1 2
2 1 0 2
x x
x x
x f x f
x x
x f x f
x x
x , x f x , x f
x , x , x f c

= =


Exemplo
Encontrar o polinmio na forma de Newton que interpola os dados abaixo a partir da tabela de
diferenas divididas.

x y = f(x) f/x = f[x
k-1
, x
k
]
2
f/x
2
= f[x
k-2
, x
k
]
3
f/x
3
= f[x
k-3
, x
k
]
4
f/x
4
= f[x
k-4
, x
k
]
0,2 0,04


7 0
2 0 5 0
04 0 25 0
,
, ,
, ,
=



0,5 0,25

0 2
2 0 0 1
7 0 3 2
,
, ,
, ,
=




3 2
5 0 0 1
25 0 40 1
,
, ,
, ,
=



0 2
2 0 5 1
0 2 6 0
,
, ,
, ,
=




1,0 1,40

6 0
5 0 5 1
3 2 7 1
,
, ,
, ,
=


( )
0 1
2 0 0 3
0 2 8 0
,
, ,
, ,
=




7 1
0 1 5 1
40 1 25 2
,
, ,
, ,
=


( )
8 0
5 0 0 3
6 0 4 1
,
, ,
, ,
=




1,5 2,25

4 1
0 1 0 3
7 1 5 4
,
, ,
, ,
=




5 4
5 1 0 3
25 2 00 9
,
, ,
, ,
=



3,0 9,00

5

Os coeficientes do polinmio interpolador so:

( ) [ ] [ ]
[ ] [ ] 0 1 0 2
0 2 7 0 04 0
4 3 2 1 0 4 3 2 1 0 3
2 1 0 2 1 0 1 0 0
, x , x , x , x , x f c ; , x , x , x , x f c
, x , x , x f c ; , x , x f c ; , x f c
= = = =
= = = = = =


O polinmio interpolador de ordem 4 descrito por:

p(x) = 0,04 + 0,7 (x 0,2) 2,0 (x 0,2)(x 0,5) 2,0 (x 0,2)(x 0,5) (x 1,0) +
1,0 (x 0,2)(x 0,5)(x 1,0)(x 1,5)

O grfico na figura 1 mostra os pontos (x, y) juntamente com a curva do polinmio
interpolador de ordem 4. Este polinmio possui os mesmos coeficientes da funo de ajuste
polinomial de grau 4.


Fig. 1. Interpolao polinomial de grau 4.


Matlab
Funo para o clculo de valor interpolado pelo polinmio de Newton:

function [yint,c] = intnewton(x,y,xint)
% INTNEWTON.M Interpolacao com polinomios de Newton de grau arbitrario
% Sintaxe: yint = intnewton(x,y,xint)
% Entrada: x,y = vetores contendo os valores tabulados de y = f(x)
% xint = vetor de x para o qual a funcao sera interpolada
% Saida: yint = vetor de y com os valores interpolados
% c = coeficientes do polinmio interpolador

n = length(x);
% Calculo do coeficientes do polinomio a partir das diferencas divididas
c = y(:); % Coluna de diferencas de ordem zero, f[x_i] = y_i
for j = 2:n
for i = n:-1:j
6
c(i) = (c(i)-c(i-1))/(x(i)-x(i-j+1));
end
end
% Avaliacao do polinomio
yint = c(n);
for i = n-1:-1:1
yint = yint.*(xint - x(i)) + c(i);
end


Interpolao por splines

Geralmente, poderia se esperar que ao se usar um polinmio interpolador de maior
ordem, a qualidade da interpolao fosse aumentando. Infelizmente, isto nem sempre
verdadeiro e para algumas funes, o aumento da ordem do polinmio interpolador tende a
aumentar a tendncia oscilatria dos valores calculados pelo polinmio. Este um problema
conhecido por instabilidade numrica. A Fig. 2 mostra um famoso exemplo pelo qual Carl
Runge provou que para pontos extremos eqidistantes o erro mximo se aproxima do infinito
medida que o grau do polinmio interpolador n .

-5 -4 -3 -2 -1 0 1 2 3 4 5
-0.5
0
0.5
1
1.5
2
x
y
f(x) = 1/(1 + x
2
)
Polinomio de grau 10

Fig. 2 Curva de ajuste polinomial exibindo instabilidade numrica.


A figura 3 mostra outro problema de instabilidade numrica no caso de uma funo de
distribuio gaussiana. Observa-se que mesmo o polinmio de ordem 20 apresenta oscilao nos
valores em torno do pico da funo gaussiana, ao passo que o polinmio interpolador spline
reproduz corretamente o comportamento dessa funo.

7

Fig. 3 Comparao entre diferentes polinmios de ordem superior e a curva de distribuio
gaussiana, exibindo instabilidade numrica.


Para resolver o problema da instabilidade numrica da interpolao polinomial, utiliza-se
a interpolao por splines que consiste em uma funo que seja:

1. Um polinmio cbico em cada intervalo [x
k-1
, x
k
] (k = 1, 2, ..., n);
2. Igual aos valores especificados nos pontos f (x
k
);
3. Duas vezes diferencivel e que a derivada segunda seja contnua nos extremos de cada
intervalo;
4. A derivada seja zero nos extremos de cada intervalo.

O polinmio cbico para o i-simo intervalo situado entre os pontos (x
i
, y
i
) e (x
i+1
, y
i+1
)
possui a forma:

3 2
) ( ) ( ) ( ) (
i i i
x x d x x c x x b a x p + + + = (1)

Nos dois pontos na extremidade final, respectivamente os valores (x
i
, y
i
) e (x
i+1
, y
i+1
), os
valores do polinmio so:

i i i i i i i i i i i i
a x x d x x c x x b a y = + + + =
3 2
) ( ) ( ) ( (2a)
e
3
1
2
1 1 1
) ( ) ( ) (
i i i i i i i i i i i
x x d x x c x x b a y + + + =
+ + + +
(2b)

Definindo a largura do isimo intervalo como:

i i i
x x h =
+1
(3)
8

e substituindo na equao acima, obtm-se:

3 2
1 i i i i i i i i
h d h c h b a y + + + =
+
(4)

As derivadas primeira e segunda de p(x) relacionam-se com a inclinao e a curvatura do
polinmio interpolador cbico nos pontos de juno dos intervalos, de modo que:

2
) ( 3 ) ( 2 ) (
i i i i i
x x d x x c b x ' p + + = (5)

) ( 6 2 ) (
i i i
x x d c x " p + = (6)

Para simplificar o procedimento matemtico, vamos escrever as equaes seguintes em
funo das derivadas segundas do polinmio interpolador cbico, S
i
= p(x
i
) e S
i+1
= p(x
i+1
),
que substituindo na equao (6) vem que:

i i i i i i
c x x d c S 2 ) ( 6 2 = + =

i i i i i i i i
h d c x x d c S 6 2 ) ( 6 2
1 1
+ = + =
+ +


Das equaes acima, podemos escrever os coeficientes:

2 / S c
i i
= , (7)

( )
i i i i
h / S S d 6
1
=
+
(8)

Substituindo as equaes (2a), (7) e (8) na equao (4), obtemos a expresso para o
coeficiente b
i
:

6
2
1 1 + +
+

=
i i i i
i
i i
i
S h S h
h
y y
b (9)

Considerando a condio de derivada primeira contnua no ponto comum a dois
intervalos contguos em (x
i
, y
i
), obtm-se a partir de (5) no intervalo [x
i
, x
i+1
]:

i i i i i i i i i
b x x d x x c b x ' y = + + =
2
) ( 3 ) ( 2 ) (

No intervalo anterior [x
i-1
, x
i
] a inclinao no ponto direita do intervalo ser:

2
1 1 1 1 1
2
1 1 1 1 1
3 2
) ( 3 ) ( 2 ) (


+ + =
+ + =
i i i i i
i i i i i i i i
h d h c b
x x d x x c b x ' y


9
Igualando estas duas equaes e substituindo nos coeficientes b, c e d as suas relaes
com S e y, resulta:

2
1
1
1
1
1 1 1 1
1
1
1 1
6
3
2
2
6
2
6
2

+ +
|
|

\
|
+ |

\
|
+
+

=
+

=
i
i
i i
i
i i i i i
i
i i
i i i i
i
i i
i
h
h
S S
h
S S h S h
h
y y
S h S h
h
y y
' y


Simplificando a expresso acima, resulta:

( )
[ ] [ ] ( )
i i i i
i
i i
i
i i
i i i i i i i
x , x f x , x f
h
y y
h
y y
S h S h h S h
1 1
1
1 1
1 1 1 1
6
6 2 2
+

+
+
=
|
|

\
|

= + + +
(10)

Observar que a derivada primeira foi substituda pela diferena dividida de primeira
ordem. A equao (10) aplica-se cada ponto interno (i = 1, 2, ..., n-1), de um total de n + 1
pontos. Assim, n 1 equaes so fornecidas por (10) relacionando n + 1 valores de S
i
. As duas
equaes adicionais para o clculo dos valores S
0
e S
n
nos extremos so especificadas de quatro
formas distintas:

1. S
0
= 0 e S
n
= 0. Esta condio equivalente a admitir que o polinmio cbico se aproxima
de uma funo linear nos extremos. Esta condio denominada spline natural.
2. S
0
= S
1
e S
n
= S
n-1
. Nesta condio, considera-se que o polinmio cbico se aproxima de
uma parbola nos extremos.
3. Calcula-se S
0
como extrapolao linear de S
1
e S
2
e o valor de S
n
como extrapolao
linear de S
n-1
e S
n-2
. As relaes para as condies nos extremos so:

1
2 0 1 1 0
0
1
1 2
0
0 1
) (
h
S h S h h
S
h
S S
h
S S +
=



2
2 1 1 1 2
2
2 1
1
1
) (

+
=

n
n n n n n
n
n
n n
n
n n
h
S h S h h
S
h
S S
h
S S


4. Forar que os valores da derivada segunda nos extremos assumam valores arbitrrios, de
modo a se estabelecer estimativas da inclinao do polinmio interpolador nos extremos:

A x ' f = ) (
0
e B x ' f
n
= ) (

No extremo esquerdo: ) ] [ ( 6 2
1 0 1 1 0 0
A x , x f S h S h = +

No extremo direito: ]) [ ( 6 2
1 1 1 n n n n n n
x , x f B S h S h

= +


Forma matricial
10

A equao (10) pode ser escrita na forma matricial como sendo:

( )
( )
( )
( )
[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]
(
(
(
(
(
(
(
(
(

=
(
(
(
(
(
(
(
(
(

(
(
(
(
(
(
(
(
(

+
+
+
+



1 2 1
2 3 1 2
2 3 3 4
3 2 4 3
2 1 3 2
1 0 2 1
1
3
2
1
0
1 1 2 2
3 3 2 2
2 1 0 1
1 1 0 0
6
2
2
2
2
n n n n
n n n n
n
n n n n n
x , x f x , x f
x , x f x , x f
x , x f x , x f
x , x f x , x f
x , x f x , x f
x , x f x , x f
S
S
S
S
S
S
h h h h
h h h h
h h h h
h h h h
M
M O
(11)

Equaes para o clculo dos coeficientes do polinmio interpolador cbico:

i
i i
i
i
i
i i i i
i
i i
i
i i
h
S S
d
,
S
c
,
S h S h
h
y y
b
, y a
6
2
6
2
1
1 1

=
=
+

=
=
+
+ +
(12)

Condio 1: S
0
= 0, S
n
= 0

( )
( )
( )
( )
(
(
(
(
(
(

=
(
(
(
(
(
(

(
(
(
(
(
(

+
+
+
+

] [ - ] [
] [ - ] [
] [ - ] [
] [ - ] [
2
2
2
2
2 3 1 2
4 3 5 4
1 2 4 3
2 1 3 2
1
3
2
1
1 2 2
3 3 2 2
2 1 0 1
1 1 0
n n n n n n n n
x , x f x , x f
x , x f x , x f
x , x f x , x f
x , x f x , x f
S
S
S
S
h h h
h h h h
h h h h
h h h
M M O


Exemplo
11
Escrever as matrizes para o clculo do polinmio interpolador spline para os valores (x
0
, y
0
),
(x
1
, y
1
), (x
2
, y
2
), (x
3
, y
3
) e (x
4
, y
4
) e a partir delas calcular os coeficientes do polinmio cbico.

( )
( )
( )
[ ] [ ]
[ ] [ ]
[ ] [ ](
(
(

=
(
(
(

(
(
(

+
+
+
4 3 5 4
3 2 4 3
2 1 3 2
3
2
1
3 2 2
2 2 1 1
1 1 0
6
2 0
2
0 2
x , x f x , x f
x , x f x , x f
x , x f x , x f
S
S
S
h h h
h h h h
h h h


i a
i
b
i
c
i
d
i

0 y
0
6
2
1 0 0 0
0
0 1
S h S h
h
y y +


2
0
S

0
0 1
6h
S S

1 y
1

6
2
2 1 1 1
1
1 2
S h S h
h
y y +


2
1
S

1
1 2
6h
S S

2 y
2

6
2
3 2 2 2
2
2 3
S h S h
h
y y +


2
2
S

2
2 3
6h
S S

3 y
3

6
2
4 3 3 3
3
3 4
S h S h
h
y y +


2
3
S

3
3 4
6h
S S



Exemplo
Clculo do polinmio interpolador por splines aplicado aos seguintes dados numricos:

x 0,2 0,5 1,0 1,5 3,0
y 0,04 0,25 1,40 2,25 9,00

Tabela contendo os dados para o clculo dos coeficientes das matrizes:

i x y h f[x
i
, x
i+1
]
0 0,2 0,04 0,3 0,7
1 0,5 0,25 0,5 2,3
2 1,0 1,40 0,5 1,7
3 1,5 2,25 1,5 4,5
4 3,0 9,00

Matrizes de coeficientes para o clculo das derivadas segundas:

(
(
(

=
(
(
(

=
(
(
(

(
(
(

8 16
6 3
6 9
7 1 5 4
3 2 7 1
7 0 3 2
6
0 4 5 0 0
5 0 0 2 5 0
0 5 0 6 1
3
2
1
,
,
,
, ,
, ,
, ,
S
S
S
, ,
, , ,
, ,


De onde vem a soluo do sistema: S
1
= 7,5263; S
2
= -4,8842; S
3
= 4,8105. Considerando spline
natural, S
0
= 0 e S
4
= 0. Substituindo na tabela de coeficientes do polinmio interpolador em cada
intervalo:


12
i a
i
b
i
c
i
d
i

0 0,04 0,323685 0 4,18128
1 0,25 1,45263 3,76315 -4,13683
2 1,40 2,11316 - 2,4412 3,23157
3 2,25 2,09475 2,40525 - 0,5345


Funes de interpolao no Matlab

INTERP1: Interpolao 1D
Sintaxe: YI = INTERP1(X,Y,XI)
A funo INTERP1 fornece os valores interpolados em YI dos valores da funo Y nos pontos do
vetor XI. O vetor X especifica os pontos nos quais os valores de Y so fornecidos.

YI = INTERP1(X,Y,XI,'metodo') especifica mtodos alternativos de interpolao. O mtodo
default a interpolao linear. Os mtodos disponveis so:
'nearest' - interpolao pelos vizinhos mais prximos
'linear' - interpolao linear
'spline' - interpolao spline cbica (SPLINE)
'pchip' - interpolao por polinmio de Hermite cbico (piecewise cubic Hermite
interpolation - PCHIP)
'cubic' - o mesmo que 'pchip'


Exemplo no Matlab

>> x = 0:10; y = sin(x); xi = 0:.25:10;
>> yi = interp1(x,y,xi); plot(x,y,'o',xi,yi)


Alternativamente para o polinmio spline pode ser usada a funo SPLINE:
SPLINE: Interpolao por spline cbica.
Sintaxe: YS = SPLINE(X,Y,XS)
A funo SPLINE utiliza a interpolao por spline cbica para calcular os valores interpolados YS
da funo Y nos pontos contidos no vetor XS. O vetor X especifica os pontos nos quais os valores
de Y so dados.

Exemplo
Neste exemplo, gerada a funo seno e ela amostrada para uma malha mais fina atravs de
spline:

>> x = 0:10; y = sin(x);
>> xx = 0:.25:10;
>> yy = spline(x,y,xx);
>> plot(x,y,'o',xx,yy)

Você também pode gostar