Sunteți pe pagina 1din 6

CURS 7: DETERMINAREA FUNCTIILOR PRIN INTERPOLARE

Interpolarea funciilor

Dup cum s-a vzut, funcia de regresie permite estimarea valorii variabilei dependente
n orice punct din domeniul de variaie al variabilei independente operaie ce se numete
generic interpolare aa cum ea poate fi folosit i la calculul de valori dinafara acestui
domeniu ceea ce se numete extrapolare.
Rmnnd n cadrul funciilor de o singur variabil real, interpolarea pornete de la
aceleai date (tabelate) de intrare, (xi, yi), i=1,2,...n, ca i metoda celor mai mici ptrate i are
acelai scop: determinarea unei funcii analitice care aproximeaz dependena exprimat prin
tabelul de intrare. Deosebirea fa de regresie este c, de aceast dat, funcia de interpolare
este constrns s treac prin punctele (xi, yi) i nu printre ele, aa cum rezulta n cazul
regresiei. Aceste puncte se numesc noduri (de interpolare).
n general se folosete interpolarea cu funcii polinomiale. Acest paragraf este dedicat
implementrii n Matlab a celor mai uzuale metode de interpolare unidimensional, prin
funcii utilizator sau folosind funciile disponibile n biblioteca mediului.

1.1

Formula de interpolare a lui Newton

Dndu-se n noduri de interpolare, (xi, yi), i=1,2,...n, atunci valoarea variabilei y ntr-un
punct intermediar x este dat de polinomul de interpolare al lui Newton, de gradul n-1, notat
cu N(x):
(1)

y = y1 + ( x x1 ) y1 + ( x x1 )( x x2 ) 2 y1 + ... + ( x x1 ) ... ( x xn 1 ) n 1 y1 ,

unde:
y y
y y1
n 2 y2 n 2 y1
y1 = 2 1 , 2 y1 = 2
, n 1 y1 =
x2 x1
x3 x1
xn x1

sunt diferenele finite succesive calculate pentru variabila y, a cror formul recursiv
general este:
(2)

j 1 yi +1 j 1 yi
yi =
, j = 1, n 1, i = j , n 1 ,
xi + j xi
j

unde s-a notat 0 yi yi . Relaia (2) conduce la ideea de a calcula aceste diferene ca
elementele triunghiului inferior al unei matrice de n-1 linii i n-1 coloane, dup cum urmeaz:

y1

y2

y3
D = .

yn 1

2 y1
2 y2
.

3 y1
...

j yi ... j y1

...

2 yn 2 ...

...
...
j yn j

...

... n 1 y1

Conform relaiei (1), din matricea D intereseaz doar elementele de pe diagonala


principal (ncercuite cu linie punctat).
Elementele primei coloane a matricei D se calculeaz exclusiv pe baza nodurilor de
interpolare (xi, yi), i=1,2,...n, pentru restul elementelor se folosete formula recursiv (2), care
se rescrie n spiritul observaiilor de mai jos.
Elementul generic j yi se afl pe coloana l=j i linia k=i+j-1 ale matricei D:
(3)

Dkl = j yi , l = 1, n 1, k = l , n 1

Se exprim perechea de indici (i, j) n funcie de perechea de indici (k, l):


j = l , i = k j +1 = k l +1
ceea ce conduce la deducerea urmtoarelor relaii:

(4)

j yi = Dkl

j 1

y
=
D

i +1
k ,l 1 , l = 2, n 1, k = l , n 1
j 1

yi = Dk 1,l 1

Corespondenele din relaia (4) se nlocuiesc n relaia (2) i rezult astfel relaia de
calcul al elementelor triunghiului inferior al matricei D, innd cont c elementele primei
coloane (l=1) se calculeaz separat:

(5)

yk +1 yk

, k = 1, n 1
Dk1 = x

k +1 xk
,

D = Dk ,l 1 Dk 1,l 1 , l = 2, n 1, k = l , n 1
kl
xk +1 xk l +1

n cazul particular n care punctele xi sunt echidistante, adic xi +1 xi = h, i = 1, n 1 ,


atunci formula (1) a polinomului de interpolare Newton devine:
(2.15) y = y1 + ( x x1 )

y1
2 y1
n 1 y1
+ ( x x1 )( x x2 )
+ ... + ( x x1 ) ... ( x xn 1 )
1!h
2!h 2
(n 1)!h n 1

Pentru n=1 se obine interpolarea liniar, pentru n=2 interpolarea ptratic, iar pentru
n=3 interpolarea cubic.
Mai jos se prezint programul script int_newt care calculeaz polinomul de interpolare
al lui Newton i exemplific trasarea graficului acestuia prin nodurile de interpolare.
2

%INTERPOLARE CU POLINOM NEWTON


%exemplu de iniializare
x=[1 5 8 9 10];
y=[2 30 11 4 8];
n=length(x);
%calculul primei coloane din matricea de diferene finite, D
for k=1:(n-1),
D(k,1)=(y(k+1)-y(k))/(x(k+1)-x(k));
end;
%calculul restului elementelor din triunghiul inferior al matricei D
for l=2:n-1,
for k=l:n-1,
D(k,l)=(D(k,l-1)-D(k-1,l-1))/(x(k+1)-x(k-l+1));
end;
end;
tt=fliplr(diag(D)');%extragerea diagonalei principale a matricei D
%ntr-un vector linie i reaezarea lui n ordinea invers a rangurilor
%calculul coeficienilor polinomului de interpolare al lui Newton
coef=[zeros(1,n-1) y(1)];
for i=1:(n-1),
coef=coef+[zeros(1,i-1) poly(x(1:n-i))*tt(i)];
end;
%construirea vectorilor pentru reprezentrile grafice
pas=(max(x)-min(x))/250;
xx=min(x):pas:max(x);
for i=1:length(xx),
yy(i)=polyval(coef,xx(i));
end;
plot(x,y,'mo',xx,yy,'r-');grid;
title('INTERPOLARE PRIN POLINOM NEWTON');

Programul calculeaz elementele matricei D a diferenelor finite folosind relaiile (5) i


construiete vectorul tt al acelor diferene care intervin n calculul coeficienilor polinomului
lui Newton, i anume n 1 y1 , n 2 y1 , ... y1 (n aceast ordine, corespunztoare ordinii
descresctoare a rangurilor coeficienilor n vectorul coef). n calculul vectorului coef s-a
utilizat funcia poly din biblioteca Matlab. Aceasta primete un vector de dimensiune n i
returneaz ntr-un alt vector, de dimensiune n+1, coeficienii polinomului care are drept
rdcini elementele vectorului de intrare.
Pentru iniializrile considerate, polinomul de interpolare Newton are gradul 4 i este:
N ( x) = 0.1018 x 4 2.1238 x3 + 13.2732 x 2 22.6798 x + 13.4286
3

1.2

Formula de interpolare a lui Lagrange

n cazul general, un polinom de gradul n-1, constrns s ia pentru x=xi valorile yi,
i=1,2,...n, este dat de formula de interpolare a lui Lagrange:
(6)

L( x) = yi
i =1

( x x1 ) ( x x2 ) ... ( x xi 1 ) ( x xi +1 ) ... ( x xn )
( xi x1 ) ( xi x2 ) ... ( xi xi 1 ) ( xi xi +1 ) ... ( xi xn )

Observaie:

Formula (6) i formula (1), de interpolare a lui Newton, conduc la acelai polinom de
interpolare; acesta poate fi referit ca polinom Newton sau ca polinom Lagrange, dup
cum este obinut cu una sau cu cealalt din formule.
Dac se noteaz:
(7)

si ( x) = ( x x1 ) ( x x2 ) ... ( x xi 1 ) ( x xi +1 ) ... ( x xn ) , i = 1, n ,

atunci relaia (2.20) se scrie:


(8)

n
n
s ( x)
yi
L( x) = yi i
=
si ( x)
si ( xi ) i =1 si ( xi )
i =1

pi ( x )

Toate polinoamele si au gradul n-1, deci i polinoamele notate cu pi n relaia (8) au


gradul n-1. Prin urmare, coeficienii acestor polinoame se pot reprezenta prin vectori de
dimensiune n. Vectorul coeficienilor polinomului Lagrange se obine prin sumarea vectorilor
coeficienilor celor n polinoame pi; algoritmul de calcul este schiat mai jos.
Date de intrare: {xi}, {yi}, i=1,2,...n (cu {xi} strict monoton)
#0. Se iniializeaz vectorul L al coeficienilor polinomului Lagrange la vectorul nul de
dimensiune n-1.
Pentru i de la 1 la n
#1. Se calculeaz vectorul cs al coeficienilor polinomului si.
#2. Se calculeaz valoarea polinomului si n xi: v si(xi).
#3. Se calculeaz vectorul cp al coeficienilor polinomului pi: cp csyi/v.
#4. L L+cp
Repet
Mai jos este listat un program Matlab care realizeaz calculul polinomului Lagrange i
evalueaz polinomul ntr-o valoare intermediar dat de utilizator. S-a introdus o secven de
comenzi prin care se ndeplinete condiia ca valorile xi s fie ordonate monoton (folosirea
funciei sort).
%Interpolarea funciilor prin POLINOMUL DE INTERPOLARE LAGRANGE
%exemplu de iniializare
x=[1 5 8 9 10];
y=[2 30 11 4 8];
[m n]=size(x);
%sortarea datelor: ordonarea cresctoare a valorilor lui x
4

%
i ordonarea corespunztoare a valorilor lui y
[xsort,ind]=sort(x);
l=1;
for i=1:n,
ysort(l)=y(ind(i));
l=l+1;
end;
x=xsort;
y=ysort;
%calculul coeficienilor polinomului de interpolare
L=zeros(1,n);
for i=1:n,
cs=poly([x(1:i-1) x(i+1:n)]);
cp=cs*y(i)/polyval(cs,x(i));
L=L+cp;
end;
pas=(max(x)-min(x))/250;
xx=min(x):pas:max(x);
for i=1:length(xx),
yy(i)=polyval(L,xx(i));
end;
val=input('Introduceti valoarea in care doriti interpolarea:');
yval=polyval(L,val);
%grafic
plot(xx,yy,'r-',x,y,'g*',xv,yv,'m--');grid;
s1=sprintf('INTERPOLARE PRIN POLINOM LAGRANGE');
title(s1);
xlabel('x');
ylabel('y');
S-a utilizat acelai exemplu de iniializare ca i n programul int_newt, de calcul al

polinomului de interpolare Newton; se obine urmtorul polinom Lagrange:


L( x) = 0.1018 x 4 2.1238 x3 +13.2732 x 2 22.6798 x + 13.4286
Se observ identitatea polinoamelor Newton i Lagrange.

1.3

Funcii de interpolare din biblioteca Matlab

Interpolarea unidimensional se realizeaz n Matlab cu ajutorul funciei interp1; o alt


funcie, interpft, este dedicat interpolrii funciilor periodice, cu ajutorul transformatei
Fourier rapide. Funcia Matlab spline implementeaz interpolarea unidimensional cu
funcii spline cubice. Funciile interp2, griddata i meshgrid realizeaz interpolare
bidimensional.
Funcia interp1 primete trei argumente de intrare: doi vectori de aceeai dimensiune,
5

reprezentnd respectiv abscisele i ordonatele nodurilor de interpolare, i un al treilea vector,


coninnd abscisele n care se dorete interpolarea. Funcia returneaz un vector de aceeai
dimensiune cu al treilea argument de intrare, care conine valorile interpolate. Abscisele
nodurilor trebuie s fie monotone (ordonate cresctor sau descresctor).
n mod implicit, interp1 realizeaz interpolare liniar ntre oricare dou noduri cu
abscise succesive. O a doua form de apel a acestei funcii prevede furnizarea unui al patrulea
argument de intrare, de tip ir de caractere, prin care se specific metoda de interpolare:
linear (implicit), spline (folosind funcii spline cubice) i cubic (interpolare
cubic).
10
8
interpolare cu
funcii spline

6
4
2

interpolare liniar

0
-2
interpolare cubic

-4
-6
-8
-2

Fig. 1

10

12

Trei metode de interpolare aplicate acelorai date de intrare

O aplicaie tipic a interpolrii este creterea preciziei de trasare a graficelor; blocul de


comenzi de mai jos exemplific aceasta cu folosirea funciei interp1.
x=[-2 0 5 7 7.5 9 12];
y=[-3 2.5 -5 4.8 7.3 6 2.1];
xx=min(x):0.05:max(x);
yy1=interp1(x,y,xx);%metoda implicit este cea liniar
yy2=interp1(x,y,xx,spline);
yy3=interp1(x,y,xx,cubic);
plot(x,y,ko,xx,yy1,k-,xx,yy2,k-xx,yy3,k:);grid
Figura 1 (rezultat n urma apelului funciei plot) arat deosebirile ntre diferitele
metode de interpolare folosite de interp1.

S-ar putea să vă placă și