Metode Numerice - Lucrarea de laborator 0 Lucrarea de laborator nr. 0 I. Scopul lucrării Aproximarea funcţiilor. Polinoame de interpolare. II. Conţinutul lucrării. Polinom de interpolare. Definiţie. Eroarea de interpolare. 2. Polinomul Lagrange de interpolare. 3. Eroarea de interpolare în cazul nodurilor echidistante 4. Eroarea de interpolare în cazul nodurilor Cebîşev III. Prezentarea lucrării III.. Polinom de interpolare. Definiţie. Eroarea de interpolare. Fie f : [a, b] R o funcţie. Se pune problema determinării unei funcţii F care să aproximeze funcţia f. O asfel de aproximaţie este necesară în următoarele situaţii: ) Când nu se cunoaşte expresia analitică a lui f, ci doar valorile sale într-un număr finit de puncte x 0, x,, x n din intervalul [a, b]. 2) Când expresia analitică a lui f este prea complicată şi calculele efectuate cu ajutorul acesteia ar fi prea dificile. F trebuie să fie o funcţie simplă, uşor de evaluat, de diferenţiat şi de integrat. În cele ce urmează F va fi un polinom. Definiţie. Fie x 0, x,, x n n+ puncte distincte două câte două din intervalul [a, b] (numite noduri), şi fie y i = f(x i ) pentru orice i = 0,, n. Se numeşte polinom de interpolare asociat nodurilor x 0, x,, x n şi valorilor y 0 =f(x 0 ), y = f(x ),, y n =f(x n ) un polinom P n care îndeplineşte următoarele condiţii
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 grad(p n ) n P n (x i ) = y i, i = 0,,, n. Polinomul determinat de condiţiile anterioare există şi este unic. Teorema următoare stabileşte eroarea maximă cu care polinomul P n aproximează funcţia f: Teoremă. Fie f : [a, b] R o funcţie de clasă C n+. Fie x 0, x,, x n n+ puncte distincte din intervalul [a, b], şi y i = f(x i ) pentru orice i = 0,, n. Fie P n polinomul de asociat nodurilor x 0, x,, x n şi valorilor y 0 =f(x 0 ), y = f(x ),, y n =f(x n ). Atunci oricare ar fi x [a, b], avem: ( n+ sup f ) ( t) t f(x) P n (x) [ a,b ] ( n + )! (x x 0 ) (x x ) (x x n ). III.2. Polinomul Lagrange de interpolare. Fie f : [a, b] R o funcţie, fie x 0, x,, x n n+ puncte distincte din intervalul [a, b], şi y i = f(x i ) pentru orice i = 0,, n. Se numesc polinoame Lagrange cele n+ polinoame l i, i =0,,...n cu proprietăţile grad (l i ) = n l i (x j ) = δ ij =, dacă i = j 0, dacă i j Pentru orice i =0,,...n, deoarece l i are gradul n şi admite drept rădăcini pe x 0, x,..., x i-, x i+,..., x n, rezultă că l i (X) = A i (X x 0 ) (X x ) (X x i- ) (X x i+ )... (X x n ). Cum l i (x i ) =, rezultă şi ca urmare A i = ( x x )( x x )... ( x x )( x x )... ( x x ) i 0 i i i i i+ i n, 2
Metode Numerice - Lucrarea de laborator 0 l i (x) = ( x x0 )( x x )...( x xi )( x x i+ )...( x xn ) ( x x )( x x )...( x x )( x x )...( x x ) i 0 i i i i i+ i n Forma Lagrange a polinomului de interpolare este: L n (x) = y 0 l 0 (x) + y l (x) + + y n l n (x) Se observă uşor că L n (x i ) = y 0 l 0 (x i ) + y l (x i ) + + y n l n (x i ) = y i l i (x i ) = y i pentru orice i = 0,,, n şi că grad(l n ) n. Aşadar L n este polinomul de interpolare asociat nodurilor x 0, x,, x n şi valorilor y 0, y,, y n. În consecinţă, polinomul de interpolare asociat nodurilor x 0, x,, x n şi valorilor y 0, y,, y n poate fi scris sub forma L n (x) = numită formă Lagrange. ( x x0 )( x x )...( x xi )( x x i+ )...( x xn ) ( )( ) ( )( ) ( ) n yi i= 0 x i x 0 x i x... x i x i x i x i+... x i x n Algoritm pentru determinarea polinomului Lagrange Date de intrare: n numărul de puncte distincte din [a, b] este n + x listă ce conţine cele n+ puncte distincte din intervalul [a, b], y listă ce conţine valorile corespunzătoare ale funcţiei. x 0 x x n y 0 y y n a punctul în care se evaluaeză polinomul. Date de ieşire: v - valoarea polinomului în x 3
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 v : =0; pentru i = 0,n, executa t : =y i ; pentru j = 0,i -, executa t: = t * (a x j )/ (x i x j ) pentru j = i +,n, executa t: = t * (a x j )/ (x i x j ) v : = v + t; Procedură MAPLE pentru calculul valorii polinomului Lagrange PLagrange:=proc(x,y,a) local n,v,t,i,j; n:=nops(x);v:=0; for i from 0 to n- do t:=y[i+]; for j from 0 to i- do t:=t*(a-x[j+])/(x[i+]-x[j+]) od; for j from i+ to n- do t:=t*(a-x[j+])/(x[i+]-x[j+]) od; v:=v+t; od; RETURN(v) end; Exemple PLagrange([,-,3],[2,-5,-],2); 4
Metode Numerice - Lucrarea de laborator 0 PLagrange([,-,3],[2,-5,-],-); expand(plagrange([,-,3],[2,-5,-],x)); 7 4-5 5 7 + 4 X2 2 X 4 Considerăm funcţia f : R R definită prin f (x) = xcos(x) şi nodurile x 0 =0, x = 2 π, x2 = 4 π şi x3 = 2π. Vom aplica procedura PLagrange pentru a determina 3 3 polinomul de interpolare P 3 asociat nodurilor x 0 =0, x = 2 π, x2 = 4 π şi x3 = 2π şi 3 3 valorilor y 0 = f (x 0 ), y = f (x ), y 2 = f (x 2 ), y 3 = f (x 3 ). De asemenea vom reprezenta grafic funcţia f şi polinomul asociat pe intervalul [0, 2π], şi apoi pe intervalul [-π,3π]. f:=x-x*cos(x); x:=[seq(2*pi/3*i,i=0..3)]; f := x x cos( x ) x := 0, 2 π 4 π,, 2 π 3 3 y:=[seq(f(2*pi/3*i),i=0..3)]; expand(plagrange(x,y,x)); with(plots): y := 0, π,, 3 2 π 2 π 3 27 X 3 27 X 2 + X 6 π 2 8 π plot([f(a),plagrange(x,y,a)],a=0..2*pi); 5
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 plot([f(a),plagrange(x,y,a)],a=-pi..3*pi); III.3. Eroarea de interpolare în cazul nodurilor echidistante Fie f : [a, b] R o funcţie şi fie x 0, x,, x n n+ noduri echidistante din intervalul [a, b]: x i = a + ih, i = 0,,...n, h = b a n Fie P n polinomul de asociat nodurilor x 0, x,, x n şi valorilor y 0 =f(x 0 ), y = f(x ),, y n =f(x n ). Atunci oricare ar fi x [a, b], avem: ( n+ sup f ) ( t) t f(x) P n (x) [ a,b ] ( n + )! (x x 0 ) (x x ) (x x n ). 6
Metode Numerice - Lucrarea de laborator 0 Pentru orice x [a, b] există i astfel încât x [x i, x i+ ] şi ca urmare (x x i ) (x x i+ ) h 2 h 2 2 = h 4.. De asemenea se poate arăta că (x x i ) (j i + ) h pentru i < j (x x i ) (i j ) h pentru j+ < i şi ţinând seama că (j+)!(n-j)! n! se obţine (x x 0 ) (x x ) (x x n ) şi deci eroarea de interpolare satisface: n+ h 4 n!, f(x) P n (x) n+ h sup f 4(n + ) t [ a,b] ( n+ ) ( t). Considerăm funcţia f 2 : R R definită prin f 2 (x) = cos(x) + sin(x). Se poate observa uşor că f (k) (x) 2 pentru orice x R şi orice k N. Vom considera intervalul [0,2π] şi nodurile echidistante corespunzătoare lui n = 3. Eroarea de interpolare este dominată de 4 h 6 2, unde h = 2 π 3 f2:=x-sin(x)+cos(x); x2:=[seq(2*pi/3*i,i=0..3)]; f2 := x sin( x ) + cos( x ) x2 := 0, 2 π 4 π,, 2 π 3 3 y2:=[seq(f2(2*pi/3*i),i=0..3)]; expand(plagrange(x2,y2,x)); 3 y2 :=,,, 2 2 3 2 2 27 X 2 27 X 27 X 3 3 8 X 2 3 27 X 3 + + + 6 π 2 8 π 6 π 3 6 π 2 8 π plot({f2(a),plagrange(x2,y2,a)},a=0..2*pi); 7
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 III.4. Eroarea de interpolare în cazul nodurilor Cebîşev Pentru n N dat, se numesc noduri Cebîşev (rădăcini ale polinomului Cebîşev de grad n+) numerele reale: x i = Nodurile Cebîşev au proprietatea că 2i + cos π 2n + 2, 0 i n. (x x 0 ) (x x ) (x x n ) pentru orice x [-, ]. Se poate arăta că pentru oricare alte noduri c i, i=0,...,n. n 2 sup (x c 0 ) (x c ) (x c n ) n x [,] 2. Nodurile Cebîşev pot fi scalate şi translatate pentru a putea fi folosite pe un interval oarecare [a, b]: x i = b a 2i + cos π 2 2n + 2 + b + a, 0 i n. 2 Astfel în cazul nodurilor Cebîşev eroarea de interpolare este 8
Metode Numerice - Lucrarea de laborator 0 f(x) P n (x) n+ (b a) sup f 2n+ 2 (n + )! t [ a,b] ( n+ ) ( t). Considerăm funcţia f 3 : R R definită prin f 3 (x) = + x 2. Vom reprezenta grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor echidistante, respectiv nodurilor Cebîşev pentru n = 3 pe intervalul [-, ]: f3:=x-/(+x^2); f3 := x x4:=[seq(-+2*i/3,i=0..3)]; + x 2 x4 := -, -,, 3 3 y4:=[seq(evalf(f3(-+2*i/3)),i=0..3)]; y4 := [ 0.5000000000, 0.9000000000, 0.9000000000, 0.5000000000 ] plot([f3(a),plagrange(x4,y4,a)],a=-..); x5:=[seq(evalf(cos((2*i+)/(2*3+2)*pi)),i=0..3)]; x5 := [ 0.9238795325, 0.3826834325, -0.3826834325, -0.9238795325 ] y5:=[seq(evalf(f3(cos((2*i+)/(2*3+2)*pi))),i=0..3)]; 9
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 y5 := [ 0.5395042867, 0.872260487, 0.872260487, 0.5395042867 ] plot([f3(a),plagrange(x5,y5,a)],a=-..); plot([f3(a),plagrange(x4,y4,a),plagrange(x5,y5,a)],a=-..); Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor echidistante, pentru n = 3, 6, 9 pe intervalul [-5, 5]: x_3:=[seq([seq(-5+0*i/(3*j),i=0..3*j)],j=..3)]; x_3 := -5, -5 5,,,, 3 3 5-5, -0-5,,,,, 3 3 0 5 0 3 3 5-5, -35-25 -5-5 5 5 25 35,,,,,,,, 9 9 3 9 9 3 9 9 5 0
Metode Numerice - Lucrarea de laborator 0 y_3:=[seq([seq(evalf(f3(- 5+0*i/(3*j))),i=0..3*j)],j=..3)]; y_3 := [ [ 0.0384653846, 0.2647058824, 0.2647058824, 0.0384653846 ], [ 0.0384653846, 0.08256880734, 0.2647058824,., 0.2647058824, 0.08256880734, 0.0384653846 ], [ 0.0384653846, 0.062024395, 0.47308782, 0.2647058824, 0.764509434, 0.764509434, 0.2647058824, 0.47308782, 0.062024395, 0.0384653846 ] ] plot([f3(a),seq(plagrange(x_3[j],y_3[j],a), j=..3)],a=- 5..5); Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor Cebîşev pentru n = 3, 6, 9 pe intervalul [-5, 5]: x_c3:=[seq([seq(evalf(5*cos((2*i+)/(6*j+2)*pi)),i=0..3*j )],j=..3)]; x_c3 := [ [ 4.69397662,.934762, -.934762, -4.69397662 ], [ 4.87463956, 3.9095742, 2.6948697, 0., -2.6948697, -3.9095742, -4.87463956 ], [ 4.93844703, 4.45503262, 3.535533905, 2.269952498, 0.782723260, -0.782723260, -2.269952498, -3.535533905, -4.45503262, -4.93844703 ] ]
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 y_c3:=[seq([seq(evalf(f3(5*cos((2*i+)/(6*j+2)*pi))),i=0..3*j)],j=..3)]; y_c3 := [ [ 0.04476509230, 0.24538629, 0.24538629, 0.04476509230 ], [ 0.04038427927, 0.064935837, 0.752425253,., 0.752425253, 0.064935837, 0.04038427927 ], [ 0.03938836726, 0.04796780633, 0.07407407407, 0.625306849, 0.6204268538, 0.6204268538, 0.625306849, 0.07407407407, 0.04796780633, 0.03938836726 ] ] plot([f3(a),seq(plagrange(x_c3[j],y_c3[j],a), j=..3)],a=-5..5); Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor echidistante, respectiv nodurilor Cebîşev pentru n = 9 pe intervalul [-5, 5]: plot([f3(a),plagrange(x_3[3],y_3[3],a),plagrange(x_c3[3], y_c3[3],a)],a=-5..5); 2
Metode Numerice - Lucrarea de laborator 0 Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor echidistante, pentru n = 5, 0, 5 pe intervalul [-5, 5]: x_5:=[seq([seq(-5+0*i/(5*j),i=0..5*j)],j=..3)]; x_5 := [ -5, -3, -,, 3, 5 ], [ -5, -4, -3, -2, -, 0,, 2, 3, 4, 5 ], -5, -3 -,,,,,,,,,,,,,, 3 3-3 -7-5 3 3 - - 3 3 5 7 3 3 3 3 3 3 5 y_5:=[seq([seq(evalf(f3(- 5+0*i/(5*j))),i=0..5*j)],j=..3)]; y_5 := [ [ 0.0384653846, 0.000000000, 0.5000000000, 0.5000000000, 0.000000000, 0.0384653846 ], [ 0.0384653846, 0.0588235294, 0.000000000, 0.2000000000, 0.5000000000,., 0.5000000000, 0.2000000000, 0.000000000, 0.0588235294, 0.0384653846 ], [ 0.0384653846, 0.0505679775, 0.06923076923, 0.000000000, 0.5572438, 0.2647058824, 0.5000000000, 0.9000000000, 0.9000000000, 0.5000000000, 0.2647058824, 0.5572438, 0.000000000, 0.06923076923, 0.0505679775, 0.0384653846 ] ] plot([f3(a),seq(plagrange(x_5[j],y_5[j],a), j=..3)],a=- 5..5); 3
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor Cebîşev pentru n = 5, 0, 5 pe intervalul [-5, 5]: x_c5:=[seq([seq(evalf(5*cos((2*i+)/(0*j+2)*pi)),i=0..5* j)],j=..3)]; x_c5 := [ [ 4.82962932, 3.535533905,.294095226, -.294095226, -3.535533905, -4.82962932 ], [ 4.9490720, 4.54859976, 3.778747872, 2.703204086,.408662782, 0., -.408662782, -2.703204086, -3.778747872, -4.54859976, -4.9490720 ], [ 4.975923634, 4.78470678, 4.409606322, 3.865052266, 3.7966420, 2.356983682,.45423384, 0.4900856985, -0.4900856985, -.45423384, -2.356983682, -3.7966420, -3.865052266, -4.409606322, -4.78470678, -4.975923634 ] ] y_c5:=[seq([seq(evalf(f3(5*cos((2*i+)/(0*j+2)*pi))),i=0..5*j)],j=..3)]; 4
Metode Numerice - Lucrarea de laborator 0 y_c5 := [ [ 0.04094325, 0.07407407407, 0.373876582, 0.373876582, 0.07407407407, 0.04094325 ], [ 0.03922543546, 0.0463254, 0.06544958589, 0.20375876, 0.3350834928,., 0.3350834928, 0.20375876, 0.06544958589, 0.0463254, 0.03922543546 ], [ 0.0388205305, 0.048526408, 0.0489260454, 0.06274065346, 0.09040470686, 0.525466423, 0.328922278, 0.806339688, 0.806339688, 0.328922278, 0.525466423, 0.09040470686, 0.06274065346, 0.0489260454, 0.048526408, 0.0388205305 ] ] plot([f3(a),seq(plagrange(x_c5[j],y_c5[j],a), j=..3)],a=-5..5); Reprezentăm grafic funcţia şi polinoamele de interpolare corespunzătoare nodurilor echidistante, respectiv nodurilor Cebîşev pentru n = 5 pe intervalul [-5, 5]: plot([f3(a),plagrange(x_5[3],y_5[3],a),plagrange(x_c5[3], y_c5[3],a)],a=-5..5); 5
Mădălina Roxana Buneci Metode Numerice Laborator - 2007 6