Documente Academic
Documente Profesional
Documente Cultură
I.
Scopul lucrrii
II.
1. 2. 3. 4. 5.
Coninutul lucrrii
Polinom de interpolare. Definiie. Eroarea de interpolare. Polinomul Lagrange de interpolare. Polinomul Newton de interpolare de spea I (ascendent). Polinomul Newton de interpolare de spea a II-a (descendent). Polinomul Newton cu diferene divizate.
III.
Fie f : [a, b] R o funcie. Se pune problema determinrii unei funcii F care s aproximeze funcia f. O asfel de aproximaie este necesar n urmtoarele situaii: 1) Cnd nu se cunoate expresia analitic a lui f, ci doar valorile sale ntr-un numr finit de puncte x0, x1, , xn din intervalul [a, b]. 2) Cnd expresia analitic a lui f este prea complicat i calculele efectuate cu ajutorul acesteia ar fi prea dificile. F trebuie s fie o funcie simpl, uor de evaluat, de difereniat i de integrat. n cele ce urmeaz F va fi un polinom. Fie x0, x1, , xn n+1 puncte distincte din intervalul [a, b], i yi = f(xi) pentru orice i = 0,1,n. Pentru ca polinomul de grad mai mic sau egal cu n, Pn, s fie un polinom de interpolare pentru f trebuie satisfcute relaiile: (1) Pn(xi) = yi, i = 0, 1, , n . Polinomul determinat de condiiile anterioare este unic. ntr-adevr fie Pn(x) = anXn + an-1Xn-1 + + a1X + a0 129
(2)
n a0 + a1xn + a2 x 2 n + + an x n = yn
2 n 1 x1 x 1 x1
0 j<i n n 1 xn x 2 n xn
(x
xj
(fiind un determinant Vandermonde). Deci 0, i n consecin sistemul (2) este compatibil determinat, adic polinomul de interpolare Pn este unic determinat. Coeficienii polinomului de interpolare pot fi determinai rezolvnd sistemul (2), dar dac n este mare, atunci volumul de calcul este mare. De aceea se utilizeaz diferite forme comode ale polinoamelor care conduc la polinoame de interpolare Lagrange, Newton, etc. Teorema urmtoare stabilete eroarea maxim cu care polinomul Pn aproximeaz funcia f: Teorem. Fie f : [a, b] R o funcie de clas Cn+1. Fie x0, x1, , xn n+1 puncte distincte din intervalul [a, b], i yi = f(xi) pentru orice i = 0,1,n. Fie Pn polinomul de interpolare, adic polinomul de gradul n ce satisface relaiile Pn(xi) = yi pentru orice i = 0, 1, , n . Atunci oricare ar fi x [a, b], avem: | f(x) Pn(x) |
t[a ,b ]
sup f (n +1) (t )
(n + 1) !
Metode Numerice
Ln(x) = y0b0(x) + y1b1(x) + + ynbn(x) unde bi sunt polinoame de grad n. Punnd condiiile Ln(xi) = yi pentru orice i = 0, 1, , n , se obine (x x 0 )(x x 1 )....(x x i 1 )(x x i +1 )...(x x n ) bi(x) = (x i x 0 )(x i x 1 )....(x i x i 1 )(x i x i +1 )...(x i x n ) i deci Ln(x) =
y
i =0
Algoritm pentru determinarea polinomului Lagrange Date de intrare: n numrul de puncte distincte din [a, b] este n +1 xy tablou ce conine pe prima linie cele n+1 puncte distincte din intervalul [a, b], iar pe a doua linie valorile corespunztoare ale funciei. x0 y0 x1 y1 xn yn
x punctul n care se evaluaez polinomul. Date de ieire: lx - valoarea polonimului n x lx : =0; pentru i = 0,n,1 executa t : =yi; pentru j = 0,i - 1,1 executa t: = t * (x xj)/ (xi xj) pentru j = i + 1,n,1 executa t: = t * (x xj)/ (xi xj) lx : = lx + t; Procedur MAPLE pentru calculul valorii polinomului Lagrange >Lagrange := proc(n, xy, x) local lx, i, j, t; lx := 0; 131
for i from 0 to n do t := xy[2, i]; for j from 0 to i - 1 do t := t*(x - xy[1, j])/(xy[1, i] - xy[1, j]) od; for j from i + 1 to n do t := t*(x - xy[1, j])/(xy[1, i] - xy[1, j]) od; lx := lx + t od; RETURN(lx) end; Procedura de mai jos are drept parametri o funcie f un numr n i un tablou x ce conine n+1 puncte distincte din domeniul de definiie al lui f . Procedura ntoarce un tablou xy ce conine pe prima linie cele n+1 puncte distincte, iar pe a doua linie valorile corespunztoare ale funciei. >tabvalori := proc(f, n, x) local xy, i; xy := array(1 .. 2, 0 .. n); for i from 0 to n do xy[1, i] := evalf(x[i]); xy[2, i] := evalf(f(x[i])) od; RETURN(xy) end; Exemple > f: =(x->ln(x)*sin(x^5+2)/x+x^7/(1+x^(1/2))); ln (x ) sin x 5 + 2 x7 + x 1+ x > x1:=array(0..4,[0.4,0.6,0.8,1,1.2]); x - > x1 := array(0 .. 4, [ 0) = .4 1) = .6 (2) = .8 (3) = 1 (4) = 1.2 132
Metode Numerice
]) > xy1:=tabvalori(f,4,x1); xy1 := xy > Lagrange(4,xy1,0.8); -.09207484030 > evalf(f(0.8)); -.0920748403 > Lagrange(4,xy1,0.9); .1738917140 > evalf(f(0.9)); .1841466329 >with(plots); > plot([f(x),Lagrange(4,xy1,x)],x=0.2..1.4);
> plot([f(x),Lagrange(4,xy1,x)],x=0.2..0.4);
133
>plot([f(x),Lagrange(4,xy1,x)],x=0.4..0.6);
12.91425926
134
Metode Numerice
> x2:=array(0..4,[1,2,3,4,5]); x2 := array(0 .. 4, [ (0) = 1 (1) = 2 (2) = 3 (3) = 4 (4) = 5 ]) > xy2:=tabvalori(f,4,x2); xy2 := xy > Lagrange(4,xy2,2); 53.20270210 > evalf(f(2)); 53.20270208 > Lagrange(4,xy2,1.9); 10.1492169 > evalf(f(1.9)); 37.92008534 > Lagrange(4,xy2,19); .2380404278 108 > evalf(f(19)); .1668013797 109
Fie f : [a, b] R o funcie, i fie reeaua cu nodurile echidistante x0, x1, , xn, avnd pasul h > 0. Produsul x[n] = x(x-h)(x-(n-1)h) se numete putere generalizat a lui x. Dac h ar fi 0, atunci puterea generalizat ar coincide cu puterea obinuit. Expresia f(x) = f(x+h) - f(x) se numete diferen finit (la dreapta) de ordinul nti. Diferenele finite de ordin superior se definesc cu ajutorul relaiei: nf(x) = (n-1f(x)) Se verific cu uurin relaiile (f+g) = (f) +(g) (cf) = c(f) (m+n)(f) = m(nf). Pentru aplicaii, calculul diferenelor finite este comod dac se construiete tabelul diagonal urmtor: f(x0) f(x1) f(x2) f(x3) f(x0) f(x1) f(x2) 2f(x0) 2f(x1) 3f(x0) f(xn-3) f(xn-2) f(xn-1) f(xn) f(xn-3) f(xn-2) f(xn-1) 2f(xn-3) 2f(xn-2) 3f(xn-3) nf(x0) Astfel f ( x 0 ) = f ( x1 ) f ( x 0 ) 2 f ( x 0 ) = f ( x 1 ) f ( x 0 ) = f ( x 2 ) f ( x 1 ) (f ( x 1 ) f ( x 0 )) = f ( x 2 ) 2f ( x 1 ) + f ( x 0 ) f ( x 0 ) = 2 f ( x 1 ) 2 f ( x 0 ) = f ( x 3 ) 3f ( x 2 ) + 3f ( x 1 ) + f ( x 0 ) Se poate demonstra prin inducie c n f (x ) =
3
( 1) C
i i =0
i nf
(x + (n i )h )
Metode Numerice
Pentru determinarea coeficientului Ci al polinomului de interpolare Pn se utilizeaz diferena finit de ordinul i a lui Pn n x0. Se obine: 3 f ( x 0 ) 2 f ( x 0 ) [2] f ( x 0 ) ( (x x 0 )[1] + ( ) Pn ( x ) = f ( x 0 ) + x x + x x 0 )[3] + 0 1! h 2! h 2 3! h 3
(x x 0 )[n ] n! h n Expresia polinomului de interpolare de mai sus poart denumirea de polinom Newton de spea I (sau ascendent ). Expresia polinomului Newton se poate pune sub o form mai comod pentru aplicaii, dac se face schimbarea de variabil x x0 t= h i se ine seama c (x x 0 )[i ] (x x 0 ) (x x 0 h ) (x x 0 2h ) (x x 0 (i 1)h ) .... = h h h h hi = t (t 1)(t 2 )....(t i + 1) pentru orice i = 1,2,,n. Se obine Pn ( x ) = Pn ( x 0 + t * h )
+ .... + f ( x 0 ) 2 f ( x 0 ) 3 f ( x 0 ) t+ * t ( t 1) + * t ( t 1)( t 2) + 3! 1! 2! n f ( x 0 ) * t ( t 1)...(t n + 1) + .... + n! Aproximarea funciei f prin polinomul Newton ascendent este avantajos pentru valorile x din vecintatea lui x0, eroarea fiind mic pentru t n modul mic. = f (x 0 ) + Algoritm pentru determinarea polinomului Newton ascendent Date de intrare: n numrul de puncte echidistante din [a, b] este n +1 x0- primul punct din reea h pasul reelei y tablou ce conine valorile funciei n punctele reelei. y0 y1 yn yi = f(xi) =f(x0 + ih), i = 0,1,, n 137
n f ( x 0 )
x punctul n care se evalueaz polinomul. Date de ieire: px - valoarea polinomului n x px : =y0; t : = (x-x0)/h; u: = 1; pentru i = 0,n-1,1 executa pentru j =n-1,i,0,-1 executa yj+1 := yj+1 yi; pentru i = 1,n,1 executa u :=u*(t-i+1)/i; px:=px+u*yi ;
Procedur MAPLE pentru calculul valorii polinomului Newton de spea I (ascendent) >pnewton1 := proc(n, x0, h, y, x) local t, u, yl, i, j, px; yl := array(0 .. n); for i from 0 to n do yl[i] := y[i] od; px := yl[0]; t := (x - x0)/h; u := 1; for i from 0 to n - 1 do for j from n - 1 by -1 to i do yl[j + 1] := yl[j + 1] - yl[j] od od; for i to n do u := u*(t - i + 1)/i; px := px + u*yl[i] od; RETURN(evalf(px)) end; Procedura tabval de mai jos are drept parametri o funcie f, primul punct din reeaua de n+1 puncte, x0, i pasul reelei, h. Procedura ntoarce un tablou unidimensional ce conine valorile funciei n punctele reelei. 138
Metode Numerice
>tabval := proc(f, n, x0, h) local y, i; y := array(0 .. n); for i from 0 to n do y[i] := f(x0 + i*h) od; RETURN(evalm(y)) end; Exemple > f: =(x->ln(x)*sin(x^5+2)/x+x^7/(1+x^(1/2))); x - >
ln (x ) sin x 5 + 2 x7 + x 1+ x
> y1:=tabval(f,4,0.4,0.2); y1 := y > pnewton1(4,0.4,0.2,y1,0.8); -.0920748400 > evalf(f(0.8)); -.0920748403 > pnewton1(4,0.4,0.2,y1,0.9); .1738917144 > evalf(f(0.9)); .1841466329 > with(plots); > plot([f(x),pnewton1(4,0.4,0.2,y1,x)],x=0.2..1.4);
>plot([f(x),pnewton1(4,0.4,0.2,y1,x)],x=0.2..0.4); 139
> >plot([f(x),pnewton1(4,0.4,0.2,y1,x)],x=0.4..0.6);
> y2:=tabval(f,4,1,1);
y2 := y > pnewton1(4,1,1,y2,2); 53.20270208 > evalf(f(2)); 53.20270208 > pnewton1(4,1,1,y2,1.9); 10.1492169 > evalf(f(1.9)); 37.92008534 140
Metode Numerice
141
Pentru determinarea coeficientului Ci al polinomului de interpolare Pn se utilizeaz diferena finit de ordinul i a lui Pn n x0. Se obine: 3 f ( x 0 ) 2 f (x 0 ) [2 ] f ( x 0 ) ( (x x n )[1] + ( ) Pn ( x ) = f ( x 0 ) + x x + x x n 2 )[3] + n 1 1! h 2! h 2 3! h 3
(x x 1 )[n ] n! h n Expresia polinomului de interpolare de mai sus poart denumirea de polinom Newton de spea II (sau descendent ). Expresia polinomului Newton descendent se poate pune sub o form mai comod pentru aplicaii, dac se face schimbarea de variabil x xn t= h Se obine Pn ( x ) = Pn ( x n + t * h )
+ .... + f ( x n ) 2 f (x n ) 3 f (x n ) t+ * t ( t + 1) + * t ( t + 1)( t + 2) + 1! 2! 3! n f (x n ) * t ( t + 1)...(t + n 1) + .... + n! Aproximarea funciei f prin polinomul Newton descendent este avantajos pentru valorile x din vecintatea lui xn, eroarea fiind mic pentru t n modul mic. = f (x n ) + Algoritm pentru determinarea polinomului Newton descendent Date de intrare: n numrul de puncte echidistante din [a, b] este n +1 x0- primul punct din reea h pasul reelei y tablou ce conine valorile funciei n punctele reelei. y0 y1 yn yi = f(xi) =f(x0 + ih), i = 0,1,, n
n f (x 0 )
x punctul n care se evalueaz polinomul. Date de ieire: px - valoarea polinomului n x px : =yn; t : = (x-x0-nh)/h; u: = 1; 142
Metode Numerice
pentru i = 1,n,1 executa pentru j =0,n-i executa yj := yj+1 yj; pentru i = 1,n,1 executa u :=u*(t+i-1)/i; px:=px+u*yn-i ;
Procedur MAPLE pentru calculul valorii polinomului Newton de spea II (descendent) >pnewton2 := proc(n, x0, h, y, x) local t, u, yl, i, j, px; yl := array(0 .. n); for i from 0 to n do yl[i] := y[i] od; px := yl[n]; t := (x - x0 - n*h)/h; u := 1; for i to n do for j from 0 to n - i do yl[j] := yl[j + 1] - yl[j] od od; for i to n do u := u*(t + i - 1)/i; px := px + u*yl[n - i] od; RETURN(evalf(px)) end; Exemple. n exemplele urmtoarea procedura tabval este aceeai din seciunea precedent. > f: =(x->ln(x)*sin(x^5+2)/x+x^7/(1+x^(1/2))); x - > ln (x ) sin x 5 + 2 x7 + x 1+ x
y1 := y > pnewton2(4,0.4,0.2,y1,0.8); -.0920748403 > evalf(f(0.8)); -.0920748403 > pnewton2(4,0.4,0.2,y1,0.9); .1738917139 > evalf(f(0.9)); .1841466329 > with(plots); > plot([f(x),pnewton2(4,0.4,0.2,y1,x)],x=0.2..1.4);
>plot([f(x),pnewton2(4,0.4,0.2,y1,x)],x=0.2..0.6);
> plot([f(x),pnewton2(4,0.4,0.2,y1,x)],x=0.8..1.3);
Metode Numerice
> evalf(f(1.3));
2.388973575
> y2:=tabval(f,4,1,1); y2 := y > pnewton2(4,1,1,y2,2); 53.20270208 > evalf(f(2)); 53.20270208 > pnewton2(4,1,1,y2,5.5); 43779.27126 > evalf(f(5.5)); 45511.21075 > pnewton1(4,1,1,y2,55); .2258417985 1010 > evalf(f(55)); .1808934564 1012
145
Pn ( x ) = C 0 + C1 ( x x 0 ) + C 2 ( x x 0 )( x x 1 ) + ... + + C n ( x x 0 )( x x 1 )...(x x n 1 ) Pentru exprimarea coeficienilor C0, C1, , Cn se utilizeaz diferenele divizate ale lui. Expresia f (x j ) f (x i ) f (x i , x j ) = , i j x j xi se numete diferen divizat de ordinul nti. Diferenele divizate de ordin 2 se definesc cu ajutorul diferenelor divizate de ordinul nti: f (x j , x k ) f (x i , x j ) f (x i , x j , x k ) = x k xi Cunoscnd diferenele divizate de ordinul m, diferenele divizate de ordinul m+1 se definesc prin: f ( x i , x i +1 ,..., x i + m ) f ( x i 1 , x i ,..., x i + m 1 ) f ( x i 1 , x i , x i +1 ,..., x i + m ) = x i + m x i 1 Polinomul Pn are forma Pn = f ( x 0 ) + f ( x 0 , x 1 )( x x 0 ) + f ( x 0 , x 2 )( x x 0 )( x x 1 ) + .... + f ( x 0 , x 1 ,..., x n )( x x 0 )( x x 1 )...( x x n 1 ) Algoritm pentru determinarea polinomului Newton descendent Date de intrare: n numrul de puncte din [a, b] este n +1 xy tablou ce conine pe prima linie cele n+1 puncte distincte din intervalul [a, b], iar pe a doua linie valorile corespunztoare ale funciei. x0 y0 x1 y1 yi = f(xi), i = 0,1,, n xn yn
x punctul n care se evalueaz polinomul. Date de ieire: px - valoarea polinomului n x px : =y0; u: = 1; pentru i = 0,n-1,1 executa pentru j =n-1,i,0,-1 executa 146
Metode Numerice
Procedur MAPLE pentru calculul valorii polinomului Newton cu diferene divizate >pnewtond := proc(n, xy, x) local u, y, i, j, px; y := array(0 .. n); for i from 0 to n do y[i] := xy[2, i] od; px := y[0]; u := 1; for i from 0 to n - 1 do for j from n - 1 by -1 to i do y[j + 1] := evalf( (y[j+1]- y[j]) / (xy[1, j + 1] - xy[1, j - i])) od od; for i to n do u := u*(x - xy[1, i - 1]); px := px + u*y[i] od; RETURN(evalf(px)) end; Exemple. Procedura tabvalori din exemplele urmtoare a fost definit anterior n seciunea referitoare la polinomul Lagrange. > f: =(x->ln(x)*sin(x^5+2)/x+x^7/(1+x^(1/2))); ln (x ) sin x 5 + 2 x7 + x 1+ x > x1:=array(0..4,[0.4,0.6,0.8,1,1.2]); x - > 147
x1 := array(0 .. 4, [ (0) = .4 (1) = .6 (2) = .8 (3) = 1 (4) = 1.2 ]) > xy1:=tabvalori(f,4,x1); xy1 := xy > pnewtond(4,xy1,0.8); -.0920748400 > evalf(f(0.8)); -.0920748403 > pnewtond(4,xy1,0.9); .1738917145 > evalf(f(0.9)); .1841466329 > plot([f(x),pnewtond(4,xy1,x)],x=0.2..1.4);
> plot([f(x),pnewtond(4,xy1,x)],x=0.2..0.4);
148
Metode Numerice
>plot([f(x),pnewtond(4,xy1,x)],x=0.4..0.6);
> x2:=array(0..4,[1,2,3,4,5]); x2 := array(0 .. 4, [ (0) = 1 (1) = 2 (2) = 3 (3) = 4 (4) = 5 ]) > xy2:=tabvalori(f,4,x2); xy2 := xy > pnewtond(4,xy2,2); 53.20270208 149
> evalf(f(2));
53.20270208 > pnewtond(4,xy2,1.9); 10.14921692 > evalf(f(1.9)); 37.92008534 > pnewtond(4,xy2,19); .2380404277 108 > evalf(f(19)); .1668013797 109 Probleme propuse Fie funcia f: (0,) R, definit prin f(x) = lg(x). Se presupune c se cunosc valorile funciei n punctele echidistante x0 = 1000, x1 = 1010,, x5 = 1050. S se gseasc, folosind un polinom Newton de gradul trei, valoarea funciei n x=1044 i n x = 1006. S se compare rezultatele obinute folosind diversele polinoame Newton. Se d tabelul de valori x 1000 1010 1020 1030 1040 1050 f(x) 3.0000000 3.0043214 3.0086002 3.0128372 3.0170333 3.30211893
150
Metode Numerice
151