Sunteți pe pagina 1din 10

CURSUL 2

APROXIMAREA FUNCłIILOR SI A DATELOR


EXPERIMENTALE

In domeniul ştiinŃelor inginereşti a aproxima o funcŃie, f , înseamnă a o


~
înlocui cu o alta funcŃie, f , a cărei formă este mai simplă şi pe care o putem utiliza
in locul funcŃiei f . De multe ori nu cunoaştem funcŃia, avem la dispoziŃie doar
~
date experimentale; in acest caz vom construi o funcŃie continua f , reprezentând
un mijloc empiric, care să aproximeze cât mai bine datele experimentale.
Exemplu: (problema de climatologie)
Temperatura medie a aerului la nivelul solului depinde de concentraŃia, K, in
acid carbonic (H2CO3). In tabelul de mai jos se consideră variaŃia, δ K = θ K − θ K ,
corespunzătoare temperaturii medii in raport cu o temperatură de referinŃă, K ,
pentru diferite latitudini si pentru patru valori ale lui K . Valoarea lui K este
valoarea corespunzătoare lui K măsurată in 1896 si normalizata. Pentru aceste
date obŃinute experimental se poate construi o funcŃie care poate sa aproximeze
temperatura medie la orice latitudine si pentru alte valori ale lui K .
Tabel 1. VariaŃia mediei anuale de temperatura pe Terra pentru diferite valori ale concentraŃiei ,
K , la diferite latitudini conform jurnalului Philosophical Magazine1
VariaŃie δK
Latitudine K = 0.67 K = 1.5 K =2 K =3
65 -3.1 3.52 6.05 9.3
55 -3.22 3.62 6.02 9.3
45 -3.3 3.65 5.92 9.17
35 -3.32 3.52 5.7 8.82
25 -3.17 3.47 5.3 8.1
15 -3.07 3.25 5.02 7.52
5 -3.02 3.15 4.95 7.3
-5 -3.02 3.15 4.97 7.35
-15 -3.12 3.2 5.07 7.62
1
Philosophical Magazine 41, 237 (1996)
-25 -3.2 3.27 5.35 8.22
-35 -3.35 3.52 5.62 8.8
-45 -3.37 3.7 5.95 9.25
-55 -3.25 3.7 6.1 9.5
Observatie: problema de mai sus se va rezolva la seminar

I. APROXIMAREA FUNCłIILOR PRIN INTERPOLARE

1. Polinomul de interpolare Lagrange

Una dintre cele mai vechi şi mai generale formule de interpolare este cea
datorată lui Lagrange.
Să presupunem ca în intervalul [a, b] sunt specificate n+1 valori ale argumentului,
x0, x2, …, xn, şi valorile corespunzătoare ale unei funcŃii f(x)
f(xi) = yi , i = 0, 1, 2, …,n
Se cere construirea unui polinom P de gradul n care ia în punctele specificate, xi,
aceleaşi valori ca şi funcŃia f(x)
Pn(xi) = yi , i = 0, 1, 2, …,n
În anumite situaŃii valorile yi se determină experimental şi se caută o formulă
pentru f care în punctele xi să coincidă cu valorile date, iar în rest să aproximeze
valorile experimentale. O variantă de formulă este aceea a unui polinom de gradul
n dată de următoarea teoremă:
Teorema: Polinomul de interpolare, Pn , asociat unei tabele de valori este unic
n n
x − xk
Pn ( x ) = ∑ f ( xi ) ⋅ ∏ (1)
i =0 x − xk
k =0 i
k≠i

Presupunem ca f este o funcŃie de n+1 ori derivabilă.. Dacă notăm cu


M = sup f ( n++1) ( x ) ,

atunci are loc inegalitatea:


M ( x − x0 ) ⋅ ... ⋅ ( x − xn )
f ( x ) − Pn ( x ) ≤
( n + 1)!
Sub această formă polinomul de interpolare se numeşte polinomul Lagrange.
Pe baza formulei de interpolare a lui Lagrange se poate rezolva şi problema
interpolarii inverse, adica găsirea argumentului pentru care polinomul Lagrange
are o anumita valoare. Pentru aceasta este suficient să se considere y ca variabilă
indepenenta şi să se scrie o formulă exprimând x ca funcŃie de y
n n
y − yk
x= ∑ xi ∏ y − yk
(2)
i =0 k =0 i
k≠i

Cu ajutorul acestei formule se poate găsi o rădăcină a ecuaŃiei f(x) = 0. În acest


scop se calculează un tablou de valori yi , i = 0, 1, 2, …,n pentru argumentele xi
apropiate de rădăcina. Considerând apoi y = 0 în formula (2), se găseste rădăcina
respectivă. Daca f ( x ) ≡ Pn ( x ) este un polinom de gradul n, rădăcina determinată
prin această metodă este exactă.

Exemplu: Să se realizeze un program care determină 130 folosind polinomul de


interpolareare Lagrange; să se evalueze şi eroarea de interpolare.
Rezolvare:
Să consideram funcŃia f ( x) = x . Vom lua ca puncte de diviziune:
x0 = 121, x1 = 144, x2 = 169 .

x 121 144 169


f(x) 11 12 13
Polinomul de interpolare este:

P2 ( x) = 11 ⋅
( x − 144)( x − 169) − 12 ⋅ ( x − 121)( x − 169) + 13 ⋅ ( x − 144)( x − 121)
1104 565 1200
Pentru o valoare în intervalul [121,169], de exemplu x=130
5
3 −
găsim: P2 (130) = 11.400379 , iar 130 ≅ 11.401754 . Deoarece f ' ' ' ( x ) = x 2 =>
8
f ''' este monoton descrescatoare pe I = [121 ,169 ], deci maximul pentru f ''' va fi

3
atins în punctul x = 121 . Deci M = ⋅ 11− 5 . Conform formulei (1)
8

3 − 5 (130 − 169 )(130 − 144 )(130 − 121)


0.001375 = E n (130) = 130 − P2 (130) < 11 ⋅ = 0.00172
8 3!
Rezolvarea în Scilab:
Se defineşte un fişier de tip funcŃie:
function s=lagrange(vx,vy,x);
s=0;
n=length(vx);
for i=1:n
p=1;
for k=1:n
if k~=i
p=p*(x-vx(k))/(vx(i)-vx(k));
end
end
s=s+p*vy(i);
end
endfunction
În fereastra de comandă se definesc mai întâi vectorii ce conŃin valorile
corespunzătoare pentru x şi y, apoi se apelează funcŃia definită mai sus:
» x=[121 144 169];
» y=[11 12 13];
» lagrange(x,y,130)
ans = 11.40043478260870
ObservaŃie:
1. Dacă se consideră mai multe puncte de interpolare, de exemplu:
-->x=[81 100 121 144 169];
-->y=[9 10 11 12 13];
se va obŃine:
-->lagrange(x,y,130)
ans = 11.401672
un rezultat mai apropiat de
-->sqrt(130)
ans = 11.401754
2. Rezolvarea exemplului cu functia Scilab-ului comparativ cu functia lagrange
x=[121 144 169]
y=[11 12 13]
yi=interpln([x;y],100:170)
plot(x',y','*')
plot2d((100:170)',yi')
valx=linspace(100,170,10)
n=length(valx)
for i=1:n
ylagr(i)=lagrange(x,y,valx(i))
end
plot(valx',ylagr','r')
ExerciŃii:
1. Să se determine valoarea polinomul de interpolare Lagrange pentru funcŃia
1 1 1 1
f ( x ) = sin( π x ) + cos( πx ) , nodurile x 0 = 0; x 1 = ; x 2 = ; x 3 = şi x = .
6 4 2 5
2. Să se determine 115 considerând o reŃea de trei puncte care conŃine valoarea
115.
3. Să se determine funcŃia de interpolare pentru f ( x ) = sin( π x ) , nodurile
1 1 1
x 0 = 0; x 1 = ; x 2 = ; x 3 = . Să se reprezinte grafic şi să se compare graficele cu
6 4 2
cele obŃinute prin formula lui Lagrange.
4. EstimaŃi valorile temperaturii la momentele de timp 2.5 sec şi 4.9 sec, cu datele
din tabelul de mai jos.
Temperatura [0C]
Timp [s]
0.0 0.0
1.0 20.0
2.0 60.0
3.0 68.0
4.0 77.0
5.0 110.0
2. Polinomul de interpolare Newton

DefiniŃie: Fie f : [a , b] → R şi x0, x1,…, xn n+1 puncte distincte din [a, b]. Se
numesc diferenŃe divizate de ordinul întâi ale lui f următoarele expresii:
f ( x1 ) − f ( x0 ) f ( x2 ) − f ( x1 ) f ( x n ) − f ( x n −1 )
f [ x0 , x1 ] = , f [ x1 , x2 ] = , ..., f [ xn −1 , xn ] =
x1 − x0 x2 − x1 x n − x n −1

DiferenŃele divizate de ordinul k+1 se definesc cu ajutorul diferenŃelor divizate de


ordinul k:
f [ xi +1 , xi + 2 ,..., xi + k +1 ] − f [ xi , xi +1 ,..., xi + k ]
f [ xi , xi +1 ,..., xi + k +1 ] =
xi + k +1 − xi

Polinomul Pn(x)=f(x0)+f[x0,x1](x-x0)+…+f[x0,x1,…,xn](x-x0)…(x- xn-1) se numeşte


polinomul lui Newton cu diferenŃe divizate.

DefiniŃie: Fie f : [a , b] → R şi h>0 o constantă. Se numesc diferenŃe finite (la


dreapta) de ordinul întâi, respectiv diferenŃe finite (la stânga) de ordinul doi
următoarele expresii:
∆f ( x ) = f ( x + h) − f ( x )

∇f ( x ) = f ( x ) − f ( x + h)

Teoremă: Se consideră o reŃea de punce echidistante x 0 , x1 ,..., x n , de pas h,


xi=x0+ih, i = 1, n şi valorile corespunzătoare f(xi)=yi , i = 1, n . Atunci polinoamele
x − x0 ( x − x0 )( x − x1 ) ( x − x0 )...( x − xn −1 )
Pn1 ( x ) = y0 + ∆y0 + ∆2 y0 ... + ∆n y0
1! h 2! h 2
n! hn
şi
x − xn ( x − xn )( x − xn −1 ) ( x − xn )( x − xn −1 )...( x − x1 )
Pn 2 ( x ) = yn + ∇yn + ∇ 2 yn ... + ∇ n yn
1! h 2! h2 n! hn
sunt polinoame Lagrange şi se numesc polinoame Newton cu diferenŃe finite de
prima şi a doua speŃă.

ObservaŃia 1: Polinomul lui Newton de speŃa întâi se utilizează când x, punctul în


care se aproximează f(x), este mai aproape de x0, iar Polinomul lui Newton de
speŃa a doua se utilizează când x este mai aproape de xn.
x − x0
ObservaŃia 2: Dacă notăm t = atunci polinomul de interpolare Newton cu
h
diferenŃe finite (la dreapta) de primă speŃă are următoarea formă:
t t ( t − 1) t ( t − 1)...( t − n + 1)
Pn1 ( t ) = y0 + ∆y0 + ∆2 y0 ... + ∆n y0 .
1! 2! n!

xn − x
ObservaŃia 3: Daca notăm t = atunci polinomul de interpolare Newton cu
h
diferenŃe finite (la stânga) de speŃa a doua are următoarea formă:
t t ( t + 1) t ( t + 1)...( t + n − 1)
Pn 2 ( t ) = yn + ∇yn + ∇ 2 yn ... + ∇ n yn .
1! 2! n!

Exemplu:
Se consideră următoarele date experimentale:
xi 0 0.5 1 1.5
yi 1 1.1276 1.5431 2.3534
Se cere să se calculeze valoarea lui y pentru x=0.25 folosind polinomul de
interpolare Newton cu diferenŃe finite la dreapta şi valoarea lui y pentru x=1.25
folosind polinomul de interpolare Newton cu diferenŃe finite la stânga.

Rezolvare

xi f(xi)=yi ∆yi ∆ 2 yi ∆ 3 yi
0 1
0.5 1.1276 ∆y0 = 0.1276 ∆2y0 = 0.2879
1 1.5431 ∆y1 = 0.4755 ∆2y1 = 0.1069
1.5 2.3534 ∆y2 = 0.8103 ∆2y1 = 0.3948
∇ y3 ∇ 2 y3 ∇ 3 y3

Calculul lui y pentru x=0.25:


0.1276 0.2879
P31 (0.25) = 1 + (0.25 − 0) + (0.25 − 0)(0.25 − 0.5) +
1!⋅0.5 2!⋅0.52
0.1069
+ (0.25 − 0)(0.25 − 0.5)(0.25 − 1) = 1.03449
3!⋅0.53

Calculul lui y pentru x=1.25:

0.8103 0.3948
P32 (1.25) = 2.3534 + (1.25 − 1.5) + (1.25 − 1.5)(1.25 − 1) +
1!⋅0.5 2!⋅0.52
0.1069
+ (1.25 − 1.5)(1.25 − 1)(1.25 − 0.5) = 1.89222
3!⋅0.53

Rezolvarea în Scilab/ (pentru diferenŃe divizate):


Se defineşte un functia:
function pol=newtonDivizate(x,y,v)
n=length(x);
for i=1:n-1
for k=n:-1:i+1
y(k)=(y(k)-y(k-1))/(x(k)-x(k-i))
end
end
pol=y(n);
for i=n:-1:2
pol=pol*(v-x(i-1))+y(i-1);
end
endfunction

În fereastra de comandă se definesc mai întâi vectorii ce conŃin valorile


corespunzătoare pentru x şi y, apoi se apelează funcŃia definită mai sus:
» x=[121 144 169];
» y=[11 12 13];
» newtonDivizate(x,y,130)
ans = 11.40043478260870

ObservaŃie: Rezultatul trebuie să fie acelaşi cu cel obŃinut prin interpolarea


Lagrange.
» lagrange(x,y,130)
ans = 11.40043478260870
Exercitiu: Să se calculeze valoarea polinomului de interpolare Newton cu
π⋅i π ⋅ 12
diferenŃe divizate pentru xi = , n = 0,5 şi f(x)=sin(x) în x = .
5 25
Rezolvare: (în Scilab cu diferenŃe divizate)
function pol=newtonDivizate(x,y,v)
n=length(x);
for i=1:n-1
for k=n:-1:i+1
y(k)=(y(k)-y(k-1))/(x(k)-x(k-i))
end
end
pol=y(n);
for i=n:-1:2
pol=pol*(v-x(i-1))+y(i-1);
end
endfunction
x=[0 %pi/5 %pi*2/5 %pi*3/5 %pi*4/5 %pi];
y=sin(x);
newtonDivizate(x,y,%pi*12/25)
sin(%pi*12/25)
ans = 0.9977572
ans = 0.9980267

Rezolvare: (cu diferenŃe finite la dreapta)


function pol=newtonDifFinDr(a,h,n,y,v)
for i=1:n
x(i)=a+(i-1)*h;
end
for i=1:n-1
for k=n:-1:i+1
y(k)=y(k)-y(k-1)
end
end
pol=y(1);p=1;
for i=2:n
p=p*(v-x(i-1))/((i-1)*h)
pol=pol+y(i)*p;
end
endfunction

x=[0 %pi/5 %pi*2/5 %pi*3/5 %pi*4/5 %pi];


y=sin(x);
newtonDifFinDr(0,%pi/5,6,y,%pi*12/25)
sin(%pi*12/25)
ans = 0.9977572
ans = 0.9980267

Exercitii
1. Să se calculeze valoarea aproximativă a funcŃiei f(x)=sin(πx)+cos(πx) în
punctul 1/6, folosind polinomul Newton cu diferenŃe divizate pe reŃeaua
xj=j*0.25, j= 0,3 .
2. Să se scrie polinomul lui Newton cu diferenŃe finite la stânga pentru funcŃia
f(x)=sin(πx) pe reŃeaua xj=j*0.25, j= 0,3 în punctul 0.65.
3. Să se calculeze valoarea aproximativă a funcŃiei f(x)=cos(πx)+1 în punctul
1/5, folosind polinomul lui Newton cu diferenŃe divizate pe reŃeaua
xI=i*0.25, i= 0,3 .
4. Să se scrie polinomul lui Newton cu diferenŃe finite la dreapta pentru funcŃia
f(x)=sin2πx pe reŃeaua xi=i*0.5, i= 0,3 în punctul 1.25.
5. Să se calculeze valoarea aproximativă a funcŃiei f(x)=cos(πx) în punctul 1/6,
folosind polinomul Newton cu diferenŃe divizate pe reŃeaua xj=j*0.25, j= 0,3 .
6. Să se scrie polinomul lui Newton cu diferenŃe finite la stânga pentru funcŃia
f(x)=sin(πx/2) pe reŃeaua xj=j/2, j= 0,3 în punctul 0.333.

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