Sunteți pe pagina 1din 83

Mitic TEMNEANU

METODE NUMERICE - Indrumar de laborator -

Iai, 2009

Metode Numerice Indrumar de laborator

PREFA

Prezenta lucrare se adreseaz studenilor i i propune s exemplifice modul n care pot fi puse n practic diversele metode de calcul numeric prezentate n cadrul cursului de Metode Numerice. Este evident c, atunci cnd o anumit tem nu se poate finaliza prin utilizarea metodelor clasice, este necesar gsirea unei modaliti de calcul care s permit totui obinerea rezultatelor problemei n cauz. n aceast situaie intervine calculul numeric, adic implementarea unei metode numerice pe un sistem de calcul, utiliznd un anumit limbaj de programare. Pentru fixarea mai clar a metodei de calcul abordate, au fost readuse n atenia studenilor elementele de baz specifice fiecrei metode de calcul, cu evidenierea pailor teoretici ce trebuie parcuri pentru rezolvarea unei probleme printr-o anumit metod. Programele au fost elaborate n MATLAB, avnd n vedere faptul c acest mediu de programare este cunoscut studenilor, el fiind utilizat i n cadrul lucrrilor practice aferente altor discipline. Fiind destinate nelegerii metodelor de calcul i a modului efectiv de realizare a modulelor soft, fiecare dintre aceste programe este conceput a se desfura pas cu pas, studentul avnd posibilitatea de a analiza modul n care a fost efectuat calculul n cadrul unui anumit pas i de a analiza i chiar de a anticipa ce presupune parcurgerea pasului urmtor. Acest lucru este deosebit de util, deoarece impune studentului aprofundarea teoretic a metodei respective de calcul. Avnd n vedere modul n care au fost concepute aceste programe, studentul are posibilitatea de a aplica metodele de calcul prezentate fie pe unele exemple predefinite, fie pe probleme concrete pe care le are de rezolvat. Programele prezentate sunt utile nu numai studenilor ci i tuturor celor care au de rezolvat o anumit problem iar metodele clasice de lucru nu le sunt de folos. Autorul

Metode Numerice

CUPRINS

L 1. L 2. L 3. L 4. L 5. L 6. L 7. L 8.

Rezolvarea ecuaiilor prin metoda biseciei (njumtirii intervalului) Rezolvarea ecuaiilor prin metoda lui Newton (tangentei) Rezolvarea ecuatiilor prin metoda aproximaiilor succesive Rezolvarea ecuatiilor prin metoda secantei Rezolvarea sistemelor de ecuaii liniare prin metoda lui Gauss Rezolvarea sistemelor de ecuaii liniare prin metoda Gauss-Jordan Descompunerea unei matrice n produs TS Rezolvarea sistemelor de ecuaii liniare prin metoda iterativ Jacobi

3 7 11 15 19 27 35 40

2 L 9. Rezolvarea sistemelor de ecuaii liniare prin metoda iterativ Gauss-Seidel

Indrumar de laborator 44 48 51 55 63 67 71 74

L 10. Polinomul de interpolare Lagrange L 11. Polinomul de interpolare Newton cu diferene divizate L 12. Polinoame de interpolare Newton cu pas constant L 13. Aproximarea funciilor prin metoda celor mai mici ptrate. Dreapta de regresie L 14. Integrare numeric. Formulele trapezelor L 15. Integrare numeric. Formula lui Simpson L 16. Integrare numeric. Formulele lui Gauss

Metode Numerice

LUCRAREA 1 Rezolvarea ecuaiilor prin metoda biseciei (njumtirii intervalului)


Considerm c ecuaia f ( x ) = 0 are o singur rdcin n intervalul (a 0 , b 0 ) i c funcia f este continu pe acest interval. Aceast presupunere este valabil, n condiiile parcurgerii primei etape, aceea de separare a unei singure rdcini ntr-un anumit interval. Fie eroarea admis pentru soluia ecuaiei. Din punct de vedere grafic, rezolvarea ecuaiei prin aceast metod, este ilustrat n Fig.1.1. Intervalul iniial (a 0 , b 0 ) se mparte n dou pri egale prin punctul:

c0 =
f(x) A0 c0 a0 a1 xR b1

a 0 + b0 2

(1.1)

b0 B0

Fig.1.1. Se efectueaz apoi produsul f (a 0 )f (c 0 ) . Intervalul care conine n continuare soluia se noteaz (a1 , b1 ) . Situaiile care pot aprea sunt urmtoarele:

< 0, x R (a 0 , c 0 ), se noteaza a 1 = a 0 , b1 = c 0 f (a 0 )f (c 0 ) : = 0, x R = c 0 (1.2) > 0, x (c , b ), se noteaza a = c , b = b . R 0 0 1 0 1 0

Indrumar de laborator

n situaia prezentat n grafic avem f (a 0 )f (c 0 ) < 0. Cu intervalul

i {b n } descresctor (sau constant pe poriuni) soluia x R aflndu-se n permanen n intervalul (a n , b n ) . Lungimea acestui interval este:

(a 1 , b1 ) se procedeaz n mod asemntor. Rezult dou iruri, {a n }nN cresctor (sau constant pe poriuni)

bn a n =

1 2n

b0 a 0 .

(1.3)

Numrul minim de iteraii nmin se determin funcie de precizia impus calculelor:

bn a n < .
Rezult pentru nmin o expresie de forma:
b0 a 0 n min = log 2 + 1,

(1.4)

(1.5)

unde [] reprezint funcia parte ntreag. Valoarea nmin nu depinde de complexitatea ecuaiei care se rezolv ci numai de lungimea intervalului iniial i de precizia impus. Orice valoare cuprins n intervalul final (a n , b n ) poate fi considerat ca fiind soluie aproximativ pentru ecuaia dat. De obicei se consider
xR 1 (a n + b n ), 2

(1.6)

mijlocul ultimului interval determinat.

Metode Numerice Programul n MATLAB: L1_bisectie.m


function rad_ec = bisectie_ec(a0,b0,max_er,max_it,index_f) % Rezolvarea ecuatiei f(x)=0 prin metoda bisectiei % ( metoda injumatatirii intervalului ); % a0, b0 = intervalul initial ce contine o radacina a ecuatiei; % max_er = valoarea maxima admisa a erorii de aproximare; % max_it = numarul maxim de iteratii admis; % index_f = selectorul de functii; ecuatia este f(x)=0. if a0 >= b0 disp('a0 si b0 sunt incorect date; STOP!') return end format long a = a0; b = b0; fa = f(a,index_f); fb = f(b,index_f); if sign(fa*fb) > 0 disp('f(a0) si f(b0) nu au semne contrare; STOP!') return end c = (a+b)/2; contor = 0; while b-c > max_er & contor < max_it Pasul = contor + 1; contor = contor + 1; fc = f(c,index_f); Pasul disp('Cele trei puncte a, c, b sunt:'), [a c b] disp('Valorile functiei in aceste puncte sunt:'), [fa fc fb] disp('Apreciati pozitia radacinii ecuatiei si eroarea ') pause

if fc == 0 disp(' ') disp('Radacina este exact in mijlocul intervalului, STOP! ')

6
format short Pasul_final = Pasul format long Radacina_aprox = c format short e Eroarea = 0 return end if sign(fa*fc) < 0 b = c; fb = fc; else a = c; fa = fc; end c = (a+b)/2; eroarea = b-c pause end format short Pasul_final = Pasul format long Radacina_aprox = c format short e Eroarea = b-c %%%%%%%%%%%%%%%%%%%%%%%%%%%% function fct = f(x,index)

Indrumar de laborator

% functia f, ce defineste ecuatia f(x)=0 : switch index case 1 fct = x.^6 - x - 1; case 2 fct = x - exp(-x); case 3 fct = x.^3-x-2; case 4 fct = x.^3-2; end

Metode Numerice

LUCRAREA 2 Rezolvarea ecuaiilor prin metoda lui Newton (tangentei)


Considerm c ecuaia f ( x ) = 0 conine n intervalul (a 0 , b 0 ) o singur soluie x R . Grafic, rezolvarea ecuaiei prin aceast metod este ilustrat n Fig.2.1. De asemenea, considerm c pe acest interval derivatele f' i f" pstreaz semn constant, deci f este strict monoton i
f(x) A0 A1 xR x0 =a0 x1 x2 B0 b0 x

Fig.2.1. nu are punte de inflexiune. Ea presupune aproximarea soluiei exacte x R printr-un ir de valori x 1 , x 2 ... obinute prin intersecia tangentelor duse la graficul funciei f n punctele A0, A1,... cu axa absciselor. Punctul iniial x 0 se alege ca fiind una din extremitile intervalului (a 0 , b 0 ) i anume aceea care ndeplinete condiia: f ( x 0 )f " ( x 0 ) > 0 (2.1)

Aceast condiie ne asigur c intersecia tangentei la grafic cu axa Ox se va afla n interiorul intervalului iniial. Considerm punctul generic A k ( x k , f ( x k )) situat pe graficul funciei f. Ecuaia tangentei n acest punct la graficul lui f este:

y f ( x k ) = f ' ( x k )(x x k ) .

(2.2)

Indrumar de laborator

Intersecia cu axa Ox este punctul x k +1 obinut pentru y = 0:

x k +1 = x k

f (x k ) ; k = 0,1,2,.... f ' (x k )

(2.3)

Aceast expresie este formula iterativ a lui Newton. Se noteaz: ( x ) = x f (x) . f ' (x) (2.4)

Funcia se numete funcia de iterare a lui Newton. Cu noua notaie, relaia de recuren dat de (2.3) se poate pune sub forma:

x k +1 = ( x k ), k = 0,1,2,...
obine:

(2.5)

Notnd k = x k x R , eroarea de aproximare la pasul k, se

k +1 = 2 k

" ( x R ) . 2!

(2.6)

Aceast relaie arat c eroarea de aproximare evolueaz dup o lege ptratic. Metoda lui Newton are deci o vitez mare de convergen. Dezavantajul metodei const n faptul c n cadrul fiecrui pas este necesar calculul derivatei funciei n punctul respectiv. Programul n MATLAB: L2_newton.m
function rad_ec = newton_ec(x0,max_er,max_it,index_f) % Rezolvarea ecuatiei f(x)=0 prin metoda lui Newton (tangentei) % x0 = aproximarea initiala pentru radacina ecuatiei; % max_er = valoarea maxima admisa a erorii de aproximare; % max_it = numarul maxim de iteratii admis; % index_f = selectorul de functii; ecuatia este f(x)=0. eroare = 1; contor = 1;

Metode Numerice
while abs(eroare) > max_er & contor <= max_it fx = f(x0, index_f); dfx = deriv_f(x0, index_f); if dfx == 0 disp('Valoarea derivatei este zero. STOP !') return end format short Pasul = contor disp('Valoarea aproximativa a radacinii este :') format long x1 = x0 - fx/dfx; x=x1 format short e eroare = x1 - x0 pause x0 = x1; contor = contor + 1; end if contor > max_it disp('Numarul de iteratii stabilit initial a fost atins.') disp('Acesta este prea mic pentru a se gasi o radacina') disp('cu precizia impusa pentru ecuatia data !') disp(' ') else disp('Nivelul de precizie impus a fost atins :') format short Pasul format long Radacina_aprox = x1 format short e Eroarea = eroare end %%%%%%%%%%%%%%%%%%%%%%%%%%%% function fct = f(x, index) % Definirea functiei f ce a generat ecuatia : switch index

10
case 1 fct = x.^6 - x - 1; case 2 fct = x - exp(-x); case 3 fct = x.^3-x.^2-x-1; end %%%%%%%%%%%%%%%%%%%%%%%%%%%% function d_fct = deriv_f(x, index) % Derivata functiei f este: switch index case 1 d_fct = 6*x.^5 - 1; case 2 d_fct = 1 + exp(-x); case 3 d_fct = 3*x.^2-2*x-1; end

Indrumar de laborator

Metode Numerice

11

LUCRAREA 3 Rezolvarea ecuatiilor prin metoda aproximaiilor succesive


Pentru rezolvarea ecuaiei f ( x ) = 0 prin aceast metod, printrun artificiu de calcul se aduce aceast ecuaie la forma echivalent:
x = ( x ) .

(3.1)

Dac x R este soluie pentru ecuaia f ( x ) = 0 , ea este soluie i pentru ecuaia (3.1), deci vom avea:

x R = ( x R ) .
Fie x 0 (a 0 , b 0 ) o aproximaie iniial pentru soluia ecuaiei.

(3.2)

Metoda const n aproximarea soluiei exacte x R printr-un ir de valori x 1 , x 2 ..., construit pe relaia iterativ

x k +1 = ( x k ), k = 0,1,2,...

(3.3)

Considerm c funcia , derivabil pe intervalul (a 0 , b 0 ) satisface condiia:

' ( x ) < 1 () x (a 0 , b0 ) .

(3.4)

n aceste condiii, irul de iterare definit de relaia (3.3) este convergent ctre soluia x R a ecuaiei. Funcia este continu iar prin trecere la limit n relaia de recuren (3.3) se obine:
k

lim x k +1 = ( lim x k )
k

(3.5)

adic:

x R = ( x R ).

(3.6)

Rezult c limita irului de puncte x 0 , x 1 , x 2 ,... reprezint soluia ecuaiei.

12

Indrumar de laborator

Din punct de vedere grafic, rezolvarea ecuaiei (3.1) prin aceast metod se desfoar aa cum este prezentat n Fig.3.1 i n Fig.3.2.
y y=x y=(x) y y=(x) y=x

xR x2 x1
(a)

x0

x1 xR x2
(b)

x0 x

0<<1, (Convergen) Fig.3.1.


y y=(x) y=x y y=(x) y=x

x1 xR x0
(a)

x2

x1 x0 xR
(b)

>1 (Divergen) Fig.3.2.

Notnd eroarea k = x k x R obinem:

k +1 = k ' ( x R ).

(3.7)

Se obine un grad de convergen liniar; eroarea de la pasul (k+1) este proporional cu eroarea de la pasul k.

Metode Numerice Programul n MATLAB: L3_aprox_succ.m

13

function rad_ec = aprox_succ_ec(x0,max_er,max_it,index_fi) % Rezolvarea ecuatiei f(x)=0 prin metoda aproximatiilor succesive % x0 = aproximarea initiala pentru radacina ecuatiei; % max_er = valoarea maxima admisa a erorii de aproximare; % max_it = numarul maxim de iteratii admis; % index_fi = selectorul de functii; ecuatia este x=fi(x). neconv = 0; eroare = 1; eroare_0 = 10; contor = 0; while abs(eroare) > max_er & contor < max_it contor = contor + 1; Pasul = contor format long x1 = fi(x0,index_fi); disp('Valoarea aproximativa a radacinii este :') x = x1 format short e eroare = x1-x0 if abs(eroare)>abs(eroare_0) neconv = neconv + 1; disp('Metoda este neconvergenta') neconv if neconv == 3 disp(' ') disp(' Va rugam sa abandonati ! ') disp(' Nu luati in considerare rezultatele ! ') disp(' ') return end end eroare_0=eroare; x0=x1; pause end if contor >= max_it disp('Numarul de iteratii stabilit initial, atins.') disp('Acesta este prea mic pentru a se gasi o radacina')

14

Indrumar de laborator

disp('cu precizia impusa pentru ecuatia data !') disp(' ') else disp('Nivelul de precizie impus a fost atins :') format short Pasul format long Radacina_aprox = x1 format short e Eroarea = eroare end %%%%%%%%%%%%%%%%%%%%%%%%%%%% function fct = fi(x,index) % Definirea functiei fi: switch index case 1 fct = x.^3-2; case 2 fct = (x+2)^(1/3); end

Metode Numerice

15

LUCRAREA 4 Rezolvarea ecuatiilor prin metoda secantei


Considerm ecuaia f ( x ) = 0 pentru care am separat n intervalul (a 0 , b 0 ) o singur soluie. Din punct de vedere grafic, rezolvarea ecuaei prin aceast metod este ilustrat n Fig.4.1.
f(x) A0

a0

x0

x1

xR b0

B0

Fig.4.1. Se unesc punctele A 0 i B 0 printr-o dreapt de ecuaie: f ( b 0 ) f (a 0 ) y f (a 0 ) = (x a 0 ) . (4.1) b0 a 0 Intersecia dreptei cu axa Ox (y = 0) ne d punctul x 0 : a f ( b ) b 0 f (a 0 ) x0 = 0 0 (4.2) f ( b 0 ) f (a 0 ) Punctul x 0 mparte intervalul (a 0 , b 0 ) n dou subintervale din care numai unul va conine n continuare soluia x R . Pentru a determina care subinterval conine soluia x R se efectueaz produsul:

16

Indrumar de laborator (4.3)

< 0, x R (a 0 , x 0 ), se not. a 1 = a 0 , b1 = x 0 f (a 0 )f ( x 0 ) : . > 0, x R ( x 0 , b 0 ), se not. a 1 = x 0 , b1 = b 0


Rezult un ir de puncte x 1 , x 2 ,, x n , unde:

Cu intervalul (a 1 , b1 ) se reia procedeul descris pentru (a 0 , b 0 ) .

xn =

a n f ( b n ) b n f (a n ) . f ( b n ) f (a n )

(4.4)

Aceste dou iruri, {a n }nN i {b n }nN au o limit comun, soluia x R a ecuaiei. La toate metodele iterative prezentate procedeul de calcul se oprete atunci cnd exist un indice n pentru care:

x n x n 1 < ,

(4.5)

fiind eroarea admis. Acest test nu ne asigur c am determinat o valoare aproximativ pentru soluia situat fa de valoarea exact la o distan mai mic dect . Pentru a fi mai siguri, n aceast situaie se consider o condiie de oprire a calculelor de forma:
x n x n 1 < . 10

(4.6)

Programul n MATLAB: L4_secanta.m


function rad_ec = secanta_ec(a0,b0,max_er,max_it,index_f) % Rezolvarea ecuatiilor prin metoda secantei % a0, b0 = intervalul initial ce contine o radacina a ecuatiei; % max_er = valoarea maxima admisa a erorii de aproximare; % max_it = numarul maxim de iteratii admis; % index_f = selectorul de functii; ecuatia este f(x)=0. eroare = 1; fa0 = f(a0,index_f); fb0 = f(b0,index_f);

Metode Numerice
contor = 0;

17

while abs(eroare) > max_er & contor <= max_it contor = contor + 1; Pasul = contor disp(' Punctul de intersectie cu abscisa este :') format long x0=(a0*fb0-b0*fa0)/(fb0-fa0); x = x0 fx0 = f(x0,index_f); if fa0*fx0 < 0 b0 = x0; else a0 = x0; end fa0 = f(a0,index_f); fb0 = f(b0,index_f); % Eroarea se calculeaza incepand de la pasul 2. if contor > 1 format short e eroare = x0 - x1 end pause x1 = x0; end if contor > max_it disp('Numarul de iteratii stabilit initial, atins.') disp('Acesta este prea mic pentru a se gasi o radacina') disp('cu precizia impusa pentru ecuatia data !') disp(' ') else disp('Nivelul de precizie impus a fost atins :') format short Pasul format long Radacina_aprox = x0 format short e Eroarea = eroare end

18
%%%%%%%%%%%%%%%%%%%%%%%%%%%% function fct = f(x,index) % Definirea functiei f : switch index case 1 fct = x.^6 - x - 1; case 2 fct = x - exp(-x); end

Indrumar de laborator

Metode Numerice

19

LUCRAREA 5 Rezolvarea sistemelor de ecuaii liniare prin metoda lui Gauss


Se consider un sistem de n ecuaii cu n necunoscute de forma:

a 11x1 + a 12 x 2 + ... + a 1n x n = b1 a x + a x + ... + a x = b 21 1 22 2 2n n 2 . .......... .......... .......... .......... .......... a n1x1 + a n 2 x 2 + ... + a nn x n = b n Dac se fac notaiile:
a11 a12 a 22 a A = 21 ... ... a n1 a n 2 ... a1n x1 b1 ... a 2n x2 b ; x = ; b = 2 ... ... ... .... x b ... a nn n n

(5.1.)

(5.2)

sistemul poate fi scris n form matriceal:

Ax = b.

(5.3)

Aceast metod permite rezolvarea sistemului (5.1) prin transformarea, n cadrul unui anumit numr de pai, a matricei ptratice A a sistemului ntr-o matrice superior triunghiular. Se consider a 11 0 . n caz contrar, se reordoneaz i renumeroteaz ecuaiile sistemului astfel nct aceast condiie s fie ndeplinit. Numrul de pai pentru un sistem de n ecuaii cu n necunoscute este (n-1). Pentru a putea urmri modul n care se efectueaz triunghiularizarea sistemului este necesar descrierea operaiilor care se efectueaz n cadrul fiecrui pas n parte. Pasul 1: Elementul a 11 0 se numete pivot n cadrul acestui pas, iar ecuaia "1" care rmne nemodificat se numete ecuaie de pivotare. Necunoscuta x 1 este eliminat din ultimele (n-1) ecuaii prin

20 nmulirea ecuaiei 1 a sistemului cu rapoartele din ecuaia "i", cu i = 2, n .

Indrumar de laborator
a i1 i scderea acesteia a 11

Pasul k, k = 2, n 1 : Primele k ecuaii ale sistemului obinut la pasul anterior rmn nemodificate. Ecuaia "k" este ecuaia de pivotare iar elementul situat pe diagonala principal n aceast ecuaie este pivotul. Dac acest element este nul, este necesar reordonarea i renumerotarea ultimelor n-(k-1) ecuaii ale sistemului de la pasul precedent astfel nct s avem un pivot nenul, dup care se procedeaz la transcrierea primelor k ecuaii. n cadrul acestui pas, necunoscuta x k este eliminat din ultimele (n-k) ecuaii ntr-o manier asemntoare cu cea de la pasul 1. De aceast dat, ecuaia de pivotare se nmulete cu un raport care are la numrtor coeficientul lui x k din ecuaia curent iar la numitor pivotul din cadrul acestui pas i se scade din ecuaia curent. n acest fel necunoscuta x k este eliminat din ultimele (n k) ecuaii. La ultimul pas, (n-1), necunoscuta x n 1 este eliminat numai din ultima ecuaie a sistemului obinut la pasul anterior, primele (n-1) ecuaii rmnnd nemodificate. Pentru a putea scrie relaiile de recuren care leag matricele sistemului la trecerea de la un pas la cellalt, convenim s atam matricei iniiale A indicele superior "1", ea devenind:
(1) A (1) = a ij

( )

i, j=1, n

(5.4)

Numai elementele care se modific n cadrul unui pas i indexeaz indicele superior cu o unitate. Notm: A (k ) x = b (k ) (5.5)

forma sistemului nainte de eliminarea necunoscutei x k din ultimele (nk) ecuaii. Astfel, pentru k=1 avem:

A (1) = A ; b (1) = b .

(5.6)

Metode Numerice

21

Pentru k = 2, n , elementele matricei A(k) i a vectorului b(k) se vor calcula n funcie de elementele matricelor de la pasul precedent astfel:
( k 1) a ij , pentru i k 1 = 0 , pentru i k , j k 1 ( k 1) ( k 1) ( k 1) a i,k 1 a k 1, j , pentru i k, j k a ij ( k 1) a k 1,k 1

(k ) a ij

(5.7)

bi( k )

b ( k 1) , pentru i k 1 i 1) = ( k 1) . a i(,k k 1 ( k 1) b b , pentru i k i k 1 k 1) a( k 1, k 1

(5.8)

Relaiile (5.7) i (5.8) reprezint de fapt rezultatul nmulirii n cadrul pasului (k-1) a ecuaiei (k-1) a sistemului: A ( k 1) x = b ( k 1) (5.9)

( k 1) ( k 1) cu raportul a i , k 1 a k 1, k 1 , i scznd rezultatul din ecuaia i, pentru

i k. Este eliminat astfel necunoscuta xk-1 din ultimele n-(k-1) ecuaii. La sfritul acestui pas, matricea A(k) i vectorul termenilor liberi b(k) arat astfel:

22
a (1) 11 0 ... = 0 0 ... 0
(1) a12 2) a( 22 ...

Indrumar de laborator
... ... ... ... ... ...
(1) a1 , k 1 2) a( 2, k 1 ... (1) a1 k 2) a( 2k ... k) a( kk

... ... ... ... ... ... ...

A (k )

0 0 ... 0

k 1) ( k 1) ... a ( k 1, k 1 a k 1, k

0 ... 0

...
k) a( nk

(1) a1 n ( 2) a 2n ... k 1) ; a( k 1, n k) a( kn ... k) a( nn

b (k )

b (1) 1 2) b( 2 ... k 1) = b( 1 k( k) bk ... (k ) b n

. (5.10)

k 1) n tot acest proces am presupus a ( k 1,k 1 0, k = 2, n .

n cadrul ultimului pas avem k = n-1, necunoscuta x n 1 este eliminat din ultima ecuaie, obinndu-se sistemul echivalent sub form triunghiular: a (1) x1 + a (1) x 2 + ... + a (1) x k + ... + a (1) x n = b (1) 1n 1 12 1k 11 ( 2 ) ( 2 ) ( 2 ) 2) a 22 x 2 + ... + a 2k x k + ... + a 2 n x n = b ( 2 .............................................................. (k ) (k ) k) a( kk x k + ... + a kn x n = b k .......................................... n) (n ) a( nn x n = b n

(5.11)

Gsirea efectiv a soluiei sistemului se face printr-un procedeu de eliminare invers aplicat sistemului triunghiular (5.11):

Metode Numerice
n) b( n x n = ( n ) a nn n 1) ( n 1) b( n 1 a n 1, n x n x n 1) n 1 = a( n 1, n 1 . ............................................ n k) k) b( xj a (kj k j= k +1 x k = , k = n 2, n 3,...2,1 (k ) a kk

23

(5.12)

n acest fel se obine soluia sistemului. Programul n MATLAB: L5_gauss_1.m


function sol_sist = gauss_1(A,b) % Rezolvarea sistemelor de ecuatii liniare prin metoda % Gauss de eliminare, fara schimbarea pivotului [m,p]=size(A); if m~=p disp('Matricea sistemului nu este patratica !'); return end n=length(b); if m~=n disp('Vectorul b are dimensiune gresita !'); return end format disp('Matricea sistemului este :') A disp('Vectorul termenilor liberi este :') b pause

24

Indrumar de laborator

for k=1:n-1, for i=k+1:n, if A(k,k)==0 disp('Pivotul este 0: EROARE') return else P(i)=A(i,k)/A(k,k); A(i,k)=0; end for j=k+1:n, A(i,j)=A(i,j)-P(i)*A(k,j); end b(i)=b(i)-P(i)*b(k); end Pasul=k; Pasul disp('Matricea sistemului este acum :') A disp('Vectorul termenilor liberi este :') b pause end x(n)=b(n)/A(n,n); for i=n-1:-1:1, T=0; for j=i+1:n, T=T+A(i,j)*x(j); end x(i)=(b(i)-T)/A(i,i); end disp('Solutia sistemului este :') sol_sist=x;

Pentru creterea preciziei calculelor numerice este necesar reordonarea ecuaiilor n sistem n cadrul fiecrui pas, astfel nct, de fiecare dat, pivotul s aib o valoare maxim, n modul. Reordonarea ecuaiilor se face prin nlocuirea de tip pereche a ecuaiei de pivotare ce rezult n mod normal la finele unui anumit pas cu o ecuaie situat sub aceasta i care are, n modul, cea mai mare valoare a primului coeficient nenul din ecuaie. Acest coeficient devine noul pivot iar ntreaga ecuaie va nlocui ecuaia de pivotare obinut n mod natural.

Metode Numerice Programul n MATLAB: L5_gauss_2.m


function sol_sist = gauss_2(A,b) % Rezolvarea sistemelor de ecuatii liniare prin metoda % Gauss de eliminare, cu schimbarea pivotului [m,p]=size(A); if m~=p disp('Matricea sistemului nu este patratica !'); return end n=length(b); if m~=n disp('Vectorul b are dimensiune gresita !'); return end format piv = (1:n)'; disp('Matricea sistemului este ;') A disp('Vectorul termenilor liberi este ;') b pause % Valoarea maxima a elementului de pe coloana si % linia careia ii corespunde este: for k=1:n-1, [col_max index] = max(abs(A(k:n,k))); index = index + k-1; if index ~= k % Schimba liniile k si index intre ele temp_A = A(k,k:n); A(k,k:n) = A(index,k:n); A(index,k:n) = temp_A; temp_A pause temp_b = b(k);

25

26
b(k) = b(index); b(index) = temp_b; temp = piv(k); piv(k) = piv(index); piv(index) = temp; end

Indrumar de laborator

disp('Matricea sistemului cu liniile invesate este :') A pause for i=k+1:n, if A(k,k)==0 disp('Pivotul este 0: EROARE') return else P(i)=A(i,k)/A(k,k); A(i,k)=0; end for j=k+1:n, A(i,j)=A(i,j)-P(i)*A(k,j); end b(i)=b(i)-P(i)*b(k); end Pasul=k; Pasul disp('Matricea sistemului este acum :') A disp('Vectorul termenilor liberi este :') b pause end x(n)=b(n)/A(n,n); for i=n-1:-1:1, T=0; for j=i+1:n, T=T+A(i,j)*x(j); end x(i)=(b(i)-T)/A(i,i); end disp('Solutia sistemului este :') sol_sist = x(1:n)

Metode Numerice

27

LUCRAREA 6 Rezolvarea sistemelor de ecuaii liniare prin metoda Gauss-Jordan


Aceast metod permite rezolvarea sistemului (5.1) prin transformarea sa ntr-un sistem echivalent a crui matrice este diagonal. Rezolvarea presupune parcurgerea a n pai. n cadrul pasului generic Pk se transcrie numai ecuaia avnd indicele k din sistemul de la pasul anterior. Necunoscuta x k este eliminat din toate celelalte (n-1) ecuaii, printr-un procedeu asemntor celui de la metoda lui Gauss.
A ( k 1) :
k-1 k-1 Liniile i
k 1) a( k 1, k 1

Coloanele j
k 1) a( k 1, j

1) a i(,kk 1

a i(,kj1)

Linia (k-1) rmne nemodificat

(6.1)

Primele (k-2) coloane rmn nemodificate

Coloane modificate Coloana (k-1) va avea zerouri n afara elementului a k 1, k 1


( k 1)

Matricea sistemului va purta la finele fiecrui pas un indice superior egal cu numrul pasului care urmeaz. n cadrul fiecrui pas toate elementele matricei sistemului i indexeaz indicele superior cu o unitate.

28

Indrumar de laborator

Relaiile de recuren ce permit trecerea de la matricea A(k-1) la matricea A(k) pot fi scrise mai uor dac se evideniaz, pe elementele matricei A(k-1) operaiile care se execut, aa cum este prezentat n (6.1): Ele au forma:
1) ( k 1) a i(,k k 1 a k 1, j ( k ) ( k 1 ) a ij = a ij ( k 1) , a k 1, k 1 (k ) ( k 1) , a k 1, j = a k 1, j (k ) ( k 1) a ij = a ij

pentru

i k 1 j k 1 (6.2)

pentru j k 1 pentru j k 2

i respectiv:
1) a i(,k k 1 (k ) ( k 1) k 1) ( k 1) b ( k 1 , b i = b i a k 1,k 1 (k ) ( k 1) b k 1 = b k 1

pentru i k 1

(6.3)

n final se obine un sistem diagonal de forma:


a ( n +1) x1 ... ... ... 11 ( n +1) a 22 x 2 ... ... ... ... ( n +1) a nn x n
n +1) = b( 2 . ... ... n +1) = b( n ( n +1) = b1

(6.4)

Soluia sistemului este evident dat de relaiile: xi = b i( n +1)


( n +1) a ii

, pentru i = 1, n .

(6.5)

Metoda Gauss-Jordan permite i calculul matricei inverse A-1 dac se procedeaz n felul urmtor: - se formeaz o matrice de dimensiuni n(2n+1) compus din: pe primele n coloane matricea A;

Metode Numerice

29

pe urmtoarele n coloane matricea I n ; pe ultima coloan vectorul b; - se aplic procedeul de rezolvare dat de metoda Gauss-Jordan numai c operaiile descrise pentru matricea sistemului se extind asupra ntregii matrice de dimensiuni n(2n+1). Se efectueaz aceste operaii pn cnd n locul matricei A apare matricea diagonal. Ultima operaie care se efectueaz asupra acestei matrice extinse este aceea de a mpri fiecare linie la elementul situat pe diagonala principal a matricei de pe primele n coloane. Ca urmare, n locul matricei diagonale cu elemente oarecare ce se afl pe primele n coloane, vom obine matricea unitate I n . Pe urmtoarele n coloane vom obine matricea invers A-1 iar pe ultima coloan, a (2n+1) - a, vom obine chiar soluia sistemului. Sintetic, metoda poate fi descris astfel:

[A | I n | b] [I n | A 1 | x ]

(6.6)

x fiind soluia sistemului cu componentele x i , i = 1, n . Programul in MATLAB: L6_G_J_1.m


function sol_sist = G_J_1(A,b) % Rezolvarea sistemelor de ecuatii liniare prin % metoda Gauss-Jordan de eliminare, % fara schimbarea pivotului [m,p]=size(A); if m~=p disp('Matricea sistemului nu este patratica !'); return end n=length(b); if m~=n disp('Vectorul b are dimensiune gresita !'); return end

30
format disp('Matricea sistemului este :') A disp('Vectorul termenilor liberi este :') b pause

Indrumar de laborator

for k=1:n, for i=1:n, if i~=k if A(k,k)==0 disp('Pivotul este 0: EROARE') return else P(i)=A(i,k)/A(k,k); A(i,k)=0; end for j=k+1:n, A(i,j)=A(i,j)-P(i)*A(k,j); end b(i)=b(i)-P(i)*b(k); end end Pasul=k; Pasul disp('Matricea sistemului este acum :') A disp('Vectorul termenilor liberi este :') b pause end x(n)=b(n)/A(n,n); for i=n-1:-1:1, T=0; for j=i+1:n, T=T+A(i,j)*x(j); end x(i)=(b(i)-T)/A(i,i); end disp('Solutia sistemului este :') sol_sist=x(1:n)

Metode Numerice

31

Ca i la metoda Gauss, pentru creterea preciziei calculelor numerice este necesar reordonarea ecuaiilor n sistem n cadrul fiecrui pas, astfel nct, de fiecare dat, pivotul s aib o valoare maxim, n modul. Programul in MATLAB: L6_G_J_2.m
function sol_sist = G_J_2(A,b) % Rezolvarea sistemelor de ecuatii liniare prin % metoda Gauss-Jordan de eliminare, % cu schimbarea pivotului [m,p]=size(A); if m~=p disp('Matricea sistemului nu este patratica !'); return end n=length(b); if m~=n disp('Vectorul b are dimensiune gresita !'); return end format piv = (1:n)'; disp('Matricea sistemului este ;') A disp('Vectorul termenilor liberi este ;') b pause for k=1:n, [col_max index] = max(abs(A(k:n,k))); index = index + k-1; if index ~= k % Schimba liniile k si index intre ele temp_A = A(k,k:n); A(k,k:n) = A(index,k:n);

32
A(index,k:n) = temp_A; temp_A pause temp_b = b(k); b(k) = b(index); b(index) = temp_b;

Indrumar de laborator

temp = piv(k); piv(k) = piv(index); piv(index) = temp; end disp('Matricea sistemului cu liniile inversate :') A pause for i=1:n, if i~=k if A(k,k)==0 disp('Pivotul este 0: EROARE') return else P(i)=A(i,k)/A(k,k); A(i,k)=0; end for j=k+1:n, A(i,j)=A(i,j)-P(i)*A(k,j); end b(i)=b(i)-P(i)*b(k); end end Pasul=k; Pasul disp('Matricea sistemului este acum :') A disp('Vectorul termenilor liberi este :') b pause end x(n)=b(n)/A(n,n); for i=n-1:-1:1, T=0; for j=i+1:n, T=T+A(i,j)*x(j); end

Metode Numerice
x(i)=(b(i)-T)/A(i,i); end disp('Solutia sistemului este :') sol_sist=x(1:n)

33

Se poate determina matricea invers matricii A a sistemului, prin alipirea la aceasta, n partea dreapt, a unei matrice unitate de acelai ordin i prin aplicarea algoritmului de rezolvare a sistemului prin metoda Gauss-Jordan, fr schimbarea pivotului. Odat cu soluia sistemului se obtine i matricea invers. Programul in MATLAB: L6_G_J_inv.m
function sol_sist = g_j_inv_1(A,b) % Matricea A se extinde, prin alipirea matricii unitate % de acelasi ordin cu A format disp('Matricea initiala a sistemului este ;') A disp('Vectorul termenilor liberi este ;') b pause n=length(b); % Se formeaza matricea extinsa : for i=1:n for j=n+1:2*n if j==i+n A(i,j)=1; else A(i,j)=0; end end end disp('Matricea extinsa asociata sistemului este :') A_extinsa = A disp('Vectorul termenilor liberi este :') b pause

34

Indrumar de laborator

for k=1:n, for i=1:n, if i==k else if A(k,k)==0 disp('Pivotul este 0: EROARE') else P(i)=A(i,k)/A(k,k); A(i,k)=0; end for j=k+1:2*n, A(i,j)=A(i,j)-P(i)*A(k,j); end b(i)=b(i)-P(i)*b(k); end end Pasul=k; Pasul disp('Matricea sistemului este acum :') A disp('Vectorul termenilor liberi este :') b pause end for i=1:n, for j=1:2*n inv_A(i,j)=A(i,j)/A(i,i); end x(i)=b(i)/A(i,i); end disp('Matricea finala extinsa este :') A_final=A pause disp('Matricea inversa este urmatoarea:') inv_A = A(:,n+1:2*n) disp('Solutia sistemului este :') sol_sist = x(1:n)

Metode Numerice

35

LUCRAREA 7 Descompunerea unei matrice n produs TS


Aceast metod se bazeaz pe faptul c orice matrice nesingular A poate fi descompus ntr-un produs de dou matrice, una inferior triunghiular, cealalt superior triunghiular, introducnd n acelai timp un algoritm de calcul pentru elementele celor dou matrice n funcie de elementele matricei A. Se consider sistemul (5.1), matricea A fiind matricea sistemului, nesingular. Descompunerea va fi de forma:

A = T S
unde:
t ij = 0 pentru i < j T = ( t ij )i, j=1, n , t ii = 1 pentru i = 1, n . S = (sij )i, j=1, n , sij = 0 pentru i > j

(7.1)

(7.2)

Se pot determina relaiile pentru calculul elementelor matricelor T i S dac se impune coincidena ntre elementele matricei A i cele ale matricei produs TS. Considerm un element oarecare al matricei A, a kj avnd k j. Acest element se obine prin nmulirea liniei k din matricea T cu coloana j din matricea S. Deoarece k j se poate scrie:
a kj = t kps pj .
p =1 k

(7.3)

Separnd elementul s kj din (7.3) vom avea:


s kj = a kj t kp s pj , (k j) .
p =1 k 1

(7.4)

36 Considerm acum un element a ik , i > k . Se poate scrie:


a ik = t ips pk .
p =1 k

Indrumar de laborator

(7.5)

Separnd elementul t ik din (7.5) se obine:

t ik =

k 1 1 a ik t ips pk , (i > k ) . s kk p =1

(7.6)

Relaiile (7.4) i (7.6) permit determinarea tuturor elementelor matricelor T i S presupunnd c se cunosc elementele primei linii din S i ale primei coloane din T. Este necesar s se defineasc deci elementele primei linii din S: s1 j = a 1 j , j = 1, n i ale primei coloane din T:
t i1 = a i1 , i = 1, n (a11 0) . a11

(7.7)

(7.8)

Ordinea n care se pot determina elementele matricelor T i S este urmtoarea: o linie din S, o coloan din T, o linie din S, o coloan din T,..., pn la epuizarea elementelor celor dou matrice. Avnd determinate elementele matricelor produs se poate proceda la rezolvarea sistemului:
Ax = b, TSx = b .

(7.9) (7.10)

Se noteaz:
Sx = y ,

astfel nct rezolvarea sistemului iniial (5.1) presupune rezolvarea a dou sisteme triunghiulare de forma: Sx = y . Ty = b Al doilea sistem din (7.11) poate fi scris detaliat astfel: (7.11)

Metode Numerice t11y1.............................. = b1 t y + t y .................. = b 21 1 22 2 2 . .......................................... t n1y1 + t n 2 y 2 + ... + t nn y n = b n

37

(7.12)

Aflarea vectorului necunoscut y se face printr-un procedeu de eliminare direct, cu relaiile:


b1 y1 = t 11 k 1 . b k t kp y p p =1 y = , k = 2,3,..., n k t kk

(7.13)

Avnd cunoscut vectorul y se poate trece la rezolvarea primului sistem din (7.11) care se poate scrie: s11 x1 + s12 x 2 + ... + s1n x n = y1 s 22 x 2 + ... + s 2n x n = y 2 . ........................... s nn x n = y n Soluia se afl prin eliminarea invers:
yn x n = s nn n . y s kp x p k p = k +1 x = ; k = n 2,...,1 k s kk

(7.14)

(7.15)

Aceast metod, care presupune descompunerea matricei A n produs TS, mai apare n literatura de specialitate ca fiind descompunerea LR, corespondena ntre diversele notaii fiind evident. Programul in MATLAB: L7_desc_TS.m

38
function [T,S] = desc_ts(A);

Indrumar de laborator

% Matricea sistemului se descompune in produs TS, % matricea T inferior triunghiulara, % matricea S superior triunghiulara n=length(A); disp(' Matricea initiala a sistemului este :') A pause for i=1:n S(1,i)=A(1,i); end for j=1:n T(j,1)=A(j,1)/A(1,1); end for k=2:n for j=2:n if j>=2 if(k<j) T(k,j)=0; elseif k==j T(k,k)=1; end if(k>j) Q=0; for p=1:j-1 Q=Q+T(k,p)*S(p,j); T(k,j)=(A(k,j)-Q)/S(j,j); end end end end for j=1:n if k>=2 if k>j S(k,j)=0; elseif k<=j R=0; for p=1:k-1 R=R+T(k,p)*S(p,j); end S(k,j)=A(k,j)-R;

Metode Numerice
end end end end disp(' Matricea inferior triunghiulara, T este :') T disp(' Matricea superior triunghiulara, S este :') S disp(' Verificare T*S=A :' ) T*S

39

40

Indrumar de laborator

LUCRAREA 8 Rezolvarea sistemelor de ecuaii liniare prin metoda iterativ Jacobi


Se consider sistemul de ecuaii (5.1), pentru care avem ndeplinit condiia:
a ii 0, i = 1, n .

(8.1)

Rezolvarea sistemului prin metoda Jacobi ncepe prin a pune n eviden n partea stng a semnului egal a necunoscutei x i din ecuaia i:
x1 = (b1 a12 x 2 ... a1n x n ) a 11 x = (b a x a x ... a x ) a 2 2 21 1 23 3 2n n 22 . ................................ x n = (b n a n1x1 a n 2 x 2 ... a n , n 1x n 1 ) a nn

(8.2)

Pentru uurina scrierii se trece la forma matriceal, notnd:


0 a 21 A = a 22 ... a n1 a nn a12 a11 0 ... a n2 a nn a1n a11 a 2n ... a 22 ... ... ... ... b1 x1 a11 b2 x ; x = 2 ; u = a . ... 22 ... x n bn 0 a nn

(8.3)

Sistemul se scrie sub forma:

x = Ax + u .

(8.4)

Metoda Jacobi const n faptul c pune sistemul (8.4) ntr-o form ce permite calculul iterativ: x ( k +1) = Ax ( k ) + u pornind de la o aproximaie iniial x(0) a soluiei sistemului. (8.5)

Metode Numerice

41

n practic, este mai util scrierea relaiei de recuren referitoare la componente:

x i( k +1)

n 1 (k ) = b i a ij x j , i = 1, n, k = 0,1,.... a ii j=1 j i

(8.6)

Metoda este convergent cu condiia ca toate valorile proprii ale matricei A s fie mai mici dect unitatea n modul. Aceast condiie cere ca:

a
j=1 ji

a ij
ii

< 1, i = 1, n .

(8.7)

Relaia (8.7) reprezint pentru metoda iterativ Jacobi o condiie necesar de convergen. n matricea sistemului iniial, trebuie ca fiecare element de pe diagonala principal, n modul, s fie mai mare dect suma modulelor celorlalte elemente din linia respectiv. Este posibil ca sistemul, n forma sa iniial s nu respecte aceast condiie necesar de convergen. nainte de a ncepe aplicarea algoritmului metodei, este necesar o reordonare i renumerotare a ecuaiilor n sistem astfel nct condiia de convergen s fie ndeplinit. Sistemele pentru care se preteaz metoda Jacobi au matricea diagonal dominant. Pentru metodele de rezolvare prin tehnici iterative este necesar s se impun un nivel de precizie > 0 n obinerea soluiei. Oprirea calculelor se poate face atunci cnd valorile pe componente n cadrul a dou iteraii succesive sunt suficient de apropiate, printr-un test de forma:
max x i( k +1) x i( k ) <
i

(8.8)

Pentru aceste metode, convergena nu depinde de alegerea soluiei iniiale x (0) .

42 Programul in MATLAB: L8_Jacobi_1.m

Indrumar de laborator

function sol_sist = Jacobi_1(A,b,x0,max_er,max_it) % Sistemul este de forma A*x=b % x0 este aproximatia initiala a solutiei sistemului % max_er este valoarea maxima admisa pentru componentele solutiei % max_it este numarul maxim de iteratii impus [m,p]=size(A); if m~=p disp('Matricea sistemului nu este patratica !'); return end n = length(b); if m~=n disp('Vectorul b are dimensiune gresita !'); return end % Se verifica mai intai conditia de convergenta; cc=1; for i=1:n, S=0; for j=1:n, if i==j else S=S+abs(A(i,j)); end if S>abs(A(i,i)) cc=0; end end end if cc==0 disp('Sistemul nu indeplineste conditia de converg.!') end % Se construieste procedeul iterativ pentru calculul necunoscutelor; k=1;

Metode Numerice
for i=1:n, x(i,k)=x0(i); end while k < max_it+1 k = k+1; Pasul=k-1; Pasul format long max=0; for i=1:n, S=0; for j=1:n, if i<j S=S+A(i,j)*x(j,k-1); end if i>j S=S+A(i,j)*x(j,k-1); end end x(i,k)=(b(i)-S)/A(i,i); err(i)=abs(x(i,k)-x(i,k-1)); if err(i)>max max=err(i); end end eroarea=max; format short e eroarea if max < max_er disp('Limita erorii a fost atinsa !') disp(' ') disp('Solutia sistemului este :') format long x return end if k == max_it+1 disp('Numarul maxim de iteratii, atins') disp(' ') disp('Solutia partiala a sistemului este :') format long x return end end

43

44

Indrumar de laborator

LUCRAREA 9 Rezolvarea sistemelor de ecuaii liniare prin metoda iterativ Gauss-Seidel


Aceast metod de rezolvare este asemntoare cu metoda iterativ Jacobi, ea putnd fi aplicat doar sistemelor care ndeplinesc condiia de convergen dat de relaia (8.7). Etapele de calcul presupun evidenierea n partea stng a semnului egal a necunoscutei x i din ecuaia i: n 1 b i a ij x j ; a ii 0, i = 1, n xi = a ii j=1 j i
( k +1)

(9.1)

n contrast cu metoda Jacobi, care nu folosete n calculul lui x dect componente ale vectorului x ( k ) , relaia (8.6), metoda Gauss-Seidel folosete pentru determinarea diferitelor componente ale vectorului x ( k +1) att componente ale vectorului de la pasul anterior x ( k ) ct i componente ale vectorului din pasul prezent x ( k +1) , pe msur ce acestea au fost determinate, accelernd astfel convergena procesului. Astfel, pentru calculul lui x i( k +1) , se folosesc componentele noi
( k +1) ( k +1) k +1) x1 , x 2 ,..., x i( 1 , deja calculate n cadrul acestui pas, ct i
k) (k ) (k) componentele x i(+ de la pasul anterior, necalculate nc 1 , x i + 2 , ..., x n n pasul prezent. n aceste condiii, relaia de recuren pentru metoda GaussSeidel este de forma:

x i( k +1) =

n i 1 1 b a x ( k +1) a ij x (jk ) . i ij j a ii j = i +1 j =1

(9.2)

Se apreciaz c, la acelai nivel de precizie impus n calculul soluiei sistemului, metoda Gauss-Seidel este de dou ori mai rapid dect metoda Jacobi.

Metode Numerice

45

Pentru metodele de rezolvare prin tehnici iterative este necesar s se impun un nivel de precizie > 0 n obinerea soluiei. Oprirea calculelor se poate face atunci cnd valorile pe componente n cadrul a dou iteraii succesive sunt suficient de apropiate, prin testul:
max x i( k +1) x i( k ) <
i

(9.3)

Pentru aceste metode, convergena nu depinde de alegerea soluiei iniiale x (0) . Este totui important alegerea acestui vector n ceea ce privete viteza de convergen. Cu ct o mai mare parte dintre componentele vectorului iniial x (0) se afl mai aproape de soluia exact a sistemului, cu att viteza de convergen este mai mare. n practic, este bine s inem seama de datele problemei practice care a generat un asemenea sistem astfel nct s nu alegem chiar la ntmplare vectorul iniial x (0) . Programul in MATLAB: L9_G_Seidel_1.m
function sol_sist = G_Seidel_1(A,b,x0,max_er,max_it) % Sistemul este de forma A*x=b % x0 este aproximatia initiala a solutiei sistemului % max_er este valoarea maxima admisa pentru componentele vectorului solutie % max_it este numarul maxim de iteratii impus [m,p]=size(A); if m~=p disp('Matricea sistemului nu este patratica !'); return end n = length(b); if m~=n disp('Vectorul b are dimensiune gresita !'); return end % Se verifica mai intai conditia de convergenta;

46
cc=1; for i=1:n, S=0; for j=1:n, if i==j else S=S+abs(A(i,j)); end if S>abs(A(i,i)) cc=0; end end end

Indrumar de laborator

if cc==0 disp('Sistemul nu indeplineste conditia de converg.!') end % Se construieste procedeul iterativ pentru calculul necunoscutelor; k=1; for i=1:n, x(i,k)=x0(i); end while k < max_it+1 k = k+1; Pasul=k-1; Pasul format long max=0; for i=1:n, S=0; for j=1:n, if i<j S=S+A(i,j)*x(j,k-1); end if i>j S=S+A(i,j)*x(j,k); end end x(i,k)=(b(i)-S)/A(i,i); err(i)=abs(x(i,k)-x(i,k-1)); if err(i)>max max=err(i);

Metode Numerice
end end eroarea=max; format short e eroarea if max < max_er disp('Limita erorii a fost atinsa !') disp(' ') disp('Solutia sistemului, pas cu pas, este :') format long x return end if k == max_it+1 disp('Numarul maxim de iteratii, atins') disp(' ') disp('Solutia partiala a sistemului este :') format long x return end end

47

48

Indrumar de laborator

LUCRAREA 10 Polinomul de interpolare Lagrange


Considerm c funcia f este cunoscut pe baza unui ansamblu de valori ntr-o reea de noduri x 0 , x 1 ,..., x n nu neaprat echidistante:
y i = f ( x i ), i = 0, n .

(10.1)

Se pune problema determinrii unui polinom de grad n, de forma: L n ( x ) = y 0 0 ( x ) + y11 ( x ) + ... + y n n ( x ) care s coincid cu funcia f n nodurile de interpolare:
L n ( x i ) = f ( x i ) = y i , i = 0, n .

(10.2)

(10.3)

Funciile 0 , 1 ,..., n sunt polinoame de grad n ce urmeaz a fi determinate, y 0 , y1 ,..., y n fiind valorile funciei n punctele x 0 , x 1 ,..., x n . Relaiile (10.3) pot fi puse sub forma:

k =0

y k k (x i ) = y i ,
0, k (x i ) = 1,

i = 0, n .

(10.4)

Ansamblul de relaii (10.4) poate fi satisfcut dac: ik . i=k (10.5)

Polinomul k se anuleaz n toate punctele x i , i k , deci este de forma:


k ( x ) = a k ( x x i ), k = 0, n .
i=0 ik n

(10.6)

Determinarea coeficientului a k se poate face din condiia

Metode Numerice

49

k (x k ) = 1
provenit din (10.5), rezultnd pentru k o expresie de forma:
k (x) = x xi , k = 0, n . x x k i i=0
ik n

(10.7)

(10.8)

n aceste condiii, polinomul Lagrange capt forma:


L n (x) =

k =0

yk

x xi . x x i i=0 k
ik

(10.9)

Programul n MATLAB L10_Lagrange.m


function val_functie = Lagrange(xk,yk,x) % % % % % Aproximarea functiilor prin polinom Lagrange xk este vectorul nodurilor de interpolare yk este vectorul valorilor functiei in nodurile xk Vectorii xk si yk trebuie sa aiba aceeasi lungime x este punctul in care se face aproximarea functiei

n=length(xk); n disp('Functia este cunoscuta prin valorile :') xk yk pause L=0; disp('Valoarea polinomului, adunand termen cu termen :') for k=1:n F(k)=1; for i=1:n if i==k else F(k)=F(k)*(x-xk(i))/(xk(k)-xk(i)); end end

50

Indrumar de laborator
L=L+F(k)*yk(k) pause end val_functie=L; disp('Valoarea functiei in punctul dat este :') disp(' ') val_functie

Metode Numerice

51

LUCRAREA 11 Polinomul de interpolare Newton cu diferene divizate


Se consider o funcie f ale crei valori se cunosc ntr-un ansamblu de noduri x i , i = 0, n , nu neaprat echidistante. Expresiile:

f ( x1 ) f ( x 0 ) f ( x 2 ) f ( x1 ) f ( x n ) f ( x n 1 ) , ,..., x1 x 0 x 2 x1 x n x n 1
poart numele de diferene divizate de ordinul nti ale lui f. Aceste diferene se noteaz prin: f ( x 0 , x1 ), f ( x1 , x 2 ),..., f ( x n 1 , x n ) .

(11.1)

(11.2)

Diferenele divizate de ordinul I se constituie ca fiind operatori liniari fa de f, fiind simetrice n raport cu punctele x i , x j . Se pot defini recursiv diferenele divizate de ordinul II prin:
f (x i , x j , x k ) = f (x j , x k ) f (x i , x j ) xk xi

(11.3)

Diferenele divizate de ordinul k se scriu pornind de la diferenele divizate de ordin (k-1) astfel:
f ( x i1 , x i ,..., x i + k ) = f ( x i ,..., x i + k ) f ( x i 1 ,..., x i+ k 1 ) . x i + k x i 1

(11.4)

Pentru aproximarea funciei f printr-un polinom Newton cu diferene divizate se pornete de la: N n ( x ) = c 0 + c1 ( x x 0 ) + c 2 ( x x 0 )(x x 1 ) + ... + + c n ( x x 0 )...( x x n 1 )
N n ( x i ) = f ( x i ), i = 0, n

(11.5)

Se impune coincidena polinomului cu funcia n nodurile de interpolare: (11.6)

52

Indrumar de laborator

relaii din care se pot determina coeficienii c k , k = 0, n i anume:

c 0 = f ( x 0 ) ; .........;

c1 = f ( x 0 , x1 ) c n = f ( x 0 , x1 ,..., x n )

(11.7)

Expresia final a polinomului Newton cu diferene divizate este: N n ( x ) = f ( x 0 ) + f ( x 0 , x 1 )( x x 0 ) + ... + + f ( x 0 , x 1 ,..., x n )( x x 0 )...( x x n 1 ). (11.8)

Diferenele divizate de diverse ordine pot fi uor calculate dac se construiete un tabel de forma:

xk
x0

f (x k )
f (x 0 )

f (x i , x j )

f (x i , x j , x p )

f ( x 0 , x1 )

x1 x2
x3

f ( x1 ) f ( x1 , x 2 ) f (x 2 )
f (x 2 , x 3 ) f (x 3 )

f ( x 0 , x1 , x 2 ) f ( x 0 , x 1 , x 2 , x 3 ) (11.9) f ( x1 , x 2 , x 3 )

De exemplu,

f ( x1 , x 2 , x 3 ) =

f ( x 2 , x 3 ) f ( x1 , x 2 ) , x 3 x1

(11.10)

relaie ce se determin urmrind liniile ngroate din (11.9). Avantajul utilizrii acestui tip de polinom este dat de faptul c nu se pornete de la nceput cu o anumit valoare a lui n ci se crete treptat gradul polinomului pn cnd se atinge precizia dorit. Atunci cnd se dorete aproximarea valorii funciei f ntr-un punct oarecare t, prin creterea gradului polinomului Newton nu ntotdeauna se obine o cretere semnificativ a preciziei de aproximare. Ar fi de dorit, pentru a obine o precizie foarte bun, ca punctele x 0 , x1 , x 2 ,... s se situeze destul de aproape de punctul t n care se face

Metode Numerice

53

aproximarea. Numai c, n general, nodurile x 0 , x1 , x 2 ,... sunt fixate dinainte, iar pe msur ce folosim un numr mai mare de astfel de noduri (atunci cnd gradul polinomului crete) ne deprtm de punctul t, fapt care conduce la "pierderea" din precizie a aproximrii. Programul n MATLAB L11_Newton_DD.m
function val_functie = Newton_DD(xk,yk,x) % % % % % Aproximare prin Polinoame Newton cu diferente divizate xk este vectorul nodurilor de interpolare yk este vectorul valorilor functiei in nodurile xk Vectorii xk si yk trebuie sa aiba aceeasi lungime x este punctul in care se doreste aproximarea

n=length(xk); n1=length(yk); if n==n1 else disp('Functia este incorect data !') disp('Cei doi vectori nu au aceeasi lungime !') return end n disp('Functia este cunoscuta prin valorile :') xk yk pause % Calcul diferente divizate for i=0:n-2, DD(1,i+1)=(yk(i+2)-yk(i+1))/(xk(i+2)-xk(i+1)); end for k=2:n-1, m=n-k; for i=1:m, DD(k,i)=(DD(k-1,i+1)-DD(k-1,i))/(xk(i+k)-xk(i)); end end disp('Tabloul cu diferente divizate de diverse ordine:') disp(' ') DD' pause

54
% Calculul polinomului NW_DD

Indrumar de laborator

disp('Polinoamele NW_DD, calculate pas cu pas, sint :') P=yk(1); NW_DD=P T=1; for k=1:n-1, pause T=T*(x-xk(k)); P=P+DD(k,1)*T; NW_DD=P end pause disp('Valoarea functiei in punctul indicat') disp('aproximata prin Polinom Newton cu') disp('diferente divizate este :') NW_DD

Metode Numerice

55

LUCRAREA 12 Polinoame de interpolare Newton cu pas constant


Dac nodurile de interpolare x 0 , x 1 ,..., x 3 sunt echidistante, se pot construi polinoame de interpolare Newton, de spea I i a II-a, folosind diferenele finite. Pasul h al unei astfel de reele de noduri reprezint diferena dintre dou puncte consecutive:
h = x i +1 x i , i = 0, n 1 .

(12.1)

Se consider funcia y = f(x) ale crei valori sunt cunoscute ntrun ansamblu de noduri echidistante, de pas h. Se numete diferen finit la dreapta pentru funcia f(x) expresia:
f ( x ) = f ( x + h ) f ( x ) .

(12.2)

Diferenele finite de ordin superior se definesc recursiv astfel: n f ( x ) = (n 1f ( x )) = n 1 (f ( x )) . (12.3)

Aceste relaii se simplific dac se calculeaz diferenele finite n nodurile reelei, deci pentru valorile x = x k :

y k = y k +1 y k 2 y k = (y k ) = y k + 2 2 y k +1 + y k ................
j n y k = (1) j C n y n +k j j=0 n

(12.4)

n practic, este mai util a se calcula diferenele finite la dreapta dac se construiete tabelul diagonal urmtor:

56

Indrumar de laborator

x k yk x 0 y0 x1 y1

y k
y 0

2 y k

3 y k .....

4 y k

2 y 0

y1 x 2 y2 y 2
x 3 y3 y 3 2 y 2 ........ 2 y1

3 y 0 4 y 0

.....

(12.5)

3 y1 ........

........

x 4 y4 .....
n mod asemntor se pot defini diferenele finite la stnga printr-o relaie de forma:
f ( x ) = f ( x ) f ( x h ) .

(12.6)

i aceste diferene se pot calcula recursiv prin relaia:

n f ( x ) = n 1 (f ( x )) = ( n 1f ( x )) .

(12.7)

Dac se efectueaz calculul diferenelor finite la stnga n nodurile reelei se obine: y k = y k y k 1 2 y k = (y k ) = y k 2 y k 1 + y k 2 ............
j n y k = (1) j C n y k j j=0 n

(12.8)

Tabelul diagonal, care este mai util n determinarea diferenelor la stnga de diverse ordine, se construiete pornind de la baz, el avnd aspectul:

Metode Numerice

57

xk

yk

y k
......... y n 3

2 yk

3 y k ..... 4 y k

...... ...... x n 4 yn 4 x n 3 y n 3

...........

y n 2 x n 2 yn 2 y n 1 x n 1 y n 1 y n xn yn

2 y n 2 2 y n 1

........... 3 y 0 ...........

4 y n ..... 3 y1

(12.9)

2 yn

n practic, pentru un ansamblu de noduri dat x 0 , x1 ,..., x n , din punctul de vedere al calculelor efective aceste dou tabele sunt identice. Diferena dintre cele dou tabele este la nivel de semnificaii i anume un anumit element calculat al tabelului poate s aib o anumit notaie prin prisma primului tabel i o alt notaie prin prisma celui de al doilea. De exemplu, y 2 = y 3 y 2 = y 3 , (12.10) i deci diferena y 3 y 2 (care este unic) este notat y 2 prin intermediul primului tabel i y 3 prin cel de-al doilea. a) Polinomul de interpolare Newton de spea I Acest tip de polinom folosete diferenele finite la dreapta. Se pune problema determinrii unui polinom care s coincid cu funcia f n nodurile reelei echidistante. Acest polinom se consider de forma:

Nd n ( 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 )

(12.11)

58

Indrumar de laborator

Determinarea coeficienilor c 0 , c1 ,..., c n se face impunnd condiia:

Nd n ( x i ) = f ( x i ) = y i , i = 0, n .
n relaia (12.11) se dau pe rnd lui x valorile x 0 , x1 ,..., x n . Rezult:
c0 = y0 c1 = c2 = y1 y 0 y 0 = h 1!h

(12.12)

y 2 2 y1 + y 0 2 y 0 = . h 2!h 2 ......... cn = n y 0 n!h n

(12.13)

n aceste condiii, expresia polinomului devine:

Nd n (x)

y 0 2 y 0 = y0 + (x x 0 ) + ( x x 0 )( x x1 ) + 1!h 2!h 2 + ... + n y 0 n!h n ( x x 0 )( x x1 )...(x x n 1 ).

(12.14)

Coeficienii y 0 , y 0 ...n y 0 se iau din tabelul (12.5) de pe latura de sus. Expresia acestui polinom poate fi pus sub form mai comod pentru aplicaii care s nu depind n mod explicit de nodurile reelei de interpolare, dac se noteaz:

t=
Atunci:
( x x 0 )( x x1 )...( x x k 1 ) hk

x x0 . h

(12.15)

= t ( t 1)...( t (k 1)), k = 1, n . (12.16)

Rezult pentru polinom expresia:

Metode Numerice
Nd n ( x 0 + th ) = y 0 + ty 0 + t ( t 1) 2 y 0 + ... + 2! t ( t 1)...( t (n 1)) n + y0. n!

59

(12.17)

Dac se dorete interpolarea ntr-un punct oarecare x diferit de noduri, se calculeaz t i apoi se evalueaz N d n ( x 0 + th ) cu (12.17). Acest tip de polinom de interpolare se utilizeaz de obicei pentru aproximarea funciei f ntr-un punct x situat n vecintatea punctului x 0 . b) Polinomul de interpolare Newton de spea a II-a Acest tip de polinom utilizeaz diferenele finite la stnga. Modul de construcie al polinomului este oarecum asemntor. Se pornete de la:

Ns n ( x ) = c 0 + c1 ( x x n ) + c 2 ( x x n )( x x n 1 ) + + ... + c n ( x x n )( x x n 1 )...(x x1 ).

(12.18)

Se impune condiia de coinciden a polinomului cu funcia n nodurile de interpolare:

Ns n ( x i ) = f ( x i ) = y i , i = 0, n .

(12.19)

Se dau pe rnd lui x valorile x n , x n 1 ,..., x 0 pentru determinarea coeficienilor c 0 , c1 ,..., c n :


c0 = yn y n y n 1 y n = h 1! h . ......... c1 = cn = n yn n!h n

(12.20)

Polinomul are deci forma:

60 Ns n (x) = y n + + ... +

Indrumar de laborator y n 2yn (x x n ) + ( x x n )( x x n 1 ) + 1!h 2!h 2 ( x x n )( x x n 1 )...( x x1 ).

n yn n!h n

(12.21)

Coeficienii y n , y n ,..., n y n se iau din tabelul (12.9) de pe latura de jos. i aceast expresie a polinomului poate fi pus ntr-o form care s nu depind n mod explicit de nodurile reelei de interpolare, dac se noteaz:

t=
Se obine:
Ns n ( x n + th ) = y n +

x xn . h

(12.22)

y n 2yn t+ t ( t + 1) + ... + 1! 2!

n yn + t ( t + 1)...( t + (n 1)). n!

(12.23)

Acest polinom se utilizeaz de obicei pentru aproximarea funciei f ntr-un punct x situat n vecintatea punctului x n . Programul n MATLAB L12_Newton_DF.m
function val_functie = Newton_DF(xk,yk,x) % % % % % Aproximare prin Polinoame Newton cu diferente finite xk este vectorul nodurilor de interpolare, echidistante yk este vectorul valorilor functiei in nodurile xk Vectorii xk si yk trebuie sa aiba aceeasi lungime x este punctul in care se doreste aproximarea

n=length(xk); n1=length(yk); if n==n1 else disp('Functia este incorect data !')

Metode Numerice
disp('Cei doi vectori nu au aceeasi lungime !') return end n disp('Functia este cunoscuta prin valorile :') xk yk pause % Se verifica mai intai echidistanta nodurilor a=1; for i=1:n-2, if xk(i+1)-xk(i)==xk(i+2)-xk(i+1) else a=0; end end if a==1 h=xk(2)-xk(1); else disp('Punctele date nu sunt echidistante.') disp('Corectati reteaua de noduri xk !') disp(' ') return end % Calcul diferente finite

61

for i=0:n-2, Dyk(1,i+1)=yk(i+2)-yk(i+1); end for k=2:n-1, m=n-k; for i=1:m, Dyk(k,i)=Dyk(k-1,i+1)-Dyk(k-1,i); end end disp('Tabloul cu diferente finite de diverse ordine :') disp(' ') Dyk' pause % Calculul polinomului NW1 disp('Polinoamele NW1, calculate pas cu pas, sint:') P=yk(1);

62

Indrumar de laborator
NW1=P T=1; for k=1:n-1, pause T=T*(x-xk(k))/(k*h); P=P+Dyk(k,1)*T; NW1=P end disp('Valoarea functiei in punctul indicat') disp('aproximata prin Polinom Newton de speta I este :') NW1 pause

% Calculul polinomului NW2 disp('Polinoamele NW2, calculate pas cu pas, sint:') R=yk(n); NW2=R S=1; for k=1:n-1, pause S=S*(x-xk(n-k+1))/(k*h); R=R+Dyk(k,n-k)*S; NW2=R end disp('Valoarea functiei in punctul indicat') disp('aproximata prin polinom Newton') disp('de speta a II-a este :') NW2

Metode Numerice

63

LUCRAREA 13 Aproximarea funciilor prin metoda celor mai mici ptrate. Dreapta de regresie
Se consider funcia f cunoscut ntr-un ansamblu de noduri x 0 , x1 ,..., x n avnd valorile:
y i = f ( x i ), i = 0, n .

(13.1)

Se pune problema aproximrii acestei funcii printr-un polinom de grad m, m < n, de forma: Fm ( x ) = c 0 + c1x + ... + c m x m astfel nct abaterea medie ptratic i deci suma:
n

(13.2)

S=

k =0

[f (x k ) Fm (x k )]2

(13.3)

s aib o valoare minim. Cazul cel mai simplu l constituie aproximarea funciei f printrun polinom de gradul I reprezentnd geometric o dreapt de ecuaie

F1 ( x ) = ax + b .
Se impune condiia ca suma:
n

(13.4)

S(a , b) =

k =0

[y k (ax k + b)]2

(13.5)

s aib o valoare minim. Condiiile necesare de extrem se scriu:


n S(a , b) = 2 [y k (ax k + b)] x k = 0 a k =0 . n S(a , b) b = 2 [y k (ax k + b)] = 0 k =0

(13.6)

64

Indrumar de laborator

Aceste relaii reprezint un sistem de 2 ecuaii cu 2 necunoscute care mai poate fi scris sub forma:

a x k + b(n + 1) = y k . 2 + = a x b x x y k k k k

(13.7)

Pentru uurina scrierii s-a renunat la limitele de sumare. Rezolvarea sistemului permite obinerea necunoscutelor a i b de forma:
a = b =

( x k )( y k ) (n + 1) x k y k ( x k )2 (n + 1) x 2 k . ( x 2k )( y k ) ( x k )( x k y k ) 2 (n + 1) x 2 k ( x k )

(13.8)

Se poate verifica uor, folosind derivatele de ordinul al II-lea pentru S(a,b) c valoarea obinut este o valoare minim. Procedura descris poate fi generalizat cutnd n locul funciei liniare o funcie polinomial de grad m, cu m<n. n aceast situaie, trebuie ca suma:

S=

k =0

[y k (c 0 + c1x k + ... + c m x m k )]
n

(13.9)

s aib o valoare minim. Condiiile necesare de extrem se scriu sub forma:


n S i = 2 y k (c 0 + c1 x k + ... + c m x m k ) xk = 0. c i k =0

(13.10)

Dac se noteaz:

Metode Numerice
n i u i = x k k =0 n v = i i x k yk k =0

65

(13.11)

atunci sistemul (13.10) poate fi scris sub forma:


c 0 u 0 + c1u1 + ... + c m u m = v 0 c u + c u + ... + c u 0 1 1 2 m m +1 = v1 . .......... .......... .......... .......... ........ c 0 u m + c1u m+1 + ... + c m u 2m = v m

(13.12)

Soluia acestui sistem reprezint coeficienii c 0 ,..., c m ai polinomului de aproximare cutat. Aceast metod este utilizat frecvent n prelucrarea datelor experimentale. Atunci cnd se dispune de un numr mare de date (funcia f cunoscut ntr-un numr mare de puncte) iar la o simpl reprezentare grafic aceste date se grupeaz sub forma unui nor avnd o anumit dezvoltare, se poate face aproximarea funciei prin aceast metod. Nu se va putea gsi un polinom de aproximare care s treac prin toate punctele norului (deci nu se poate folosi interpolarea) dar se va putea gsi o funcie liniar (sau polinom de grad superior) care s urmreasc direcia norului de puncte ndeplinind condiia dat de relaia (13.3). Programul n MATLAB L13_regresie.m
function drp_regresie = regresie(xk,yk) % Aproximarea functiilor prin Metoda celor mai mici patrate % xk este vectorul nodurilor in care se cunosc valorile functiei % yk este vectorul valorilor functiei in nodurile xk % Vectorii xk si yk trebuie sa aiba aceeasi lungime n=length(xk); n

66

Indrumar de laborator

disp('Functia este cunoscuta prin valorile :') xk yk pause A=sum(xk); B=sum(xk.^2); C=sum(yk); D=sum(xk.*yk); disp('Ecuatia dreptei construita prin') disp('aceasta metoda este y=a*x+b, unde:') a=(n*D-A*C)/(n*B-A*A) b=(C*B-D*A)/(n*B-A*A) % Reprezentarea grafica a dreptei de regresie si a punctelor disp('Reprezentarea grafica arata astfel : (vezi Fig.1)') clf i=1:n; x=min(xk)-10:0.1:max(xk)+10; plot(xk(i),yk(i),'b*',x,a*x+b,'r.') grid

Metode Numerice

67

LUCRAREA 14 Integrare numeric. Formulele trapezelor


Aceste formule de cuadratur numeric se obin prin particularizarea lui n n formulele lui Newton-Cotes i folosind formule de tip nchis i deschis. n = 1, l = 1 , formul de tip deschis:
h= ba a+b . ; x1 = 2 2

(14.1)

Singurul nod de calcul este punctul x1 . Acest nod este un punct interior intervalului [a,b]. Se calculeaz coeficientul Newton-Cotes:
(1) (1) I11 = 1 ; A1 = ( b a ) I11 = ( b a ).

(14.2)

Rezult:
~ a + b I = A1f ( x1 ) = ( b a ) f . 2

(14.3)

Relaia dat de (14.3) poart numele de "a doua formul a trapezelor". Restul acestei formule are expresia: R 1 (f ) = f ' ' ( ) (b a )3 = x ( x x ) dx 1 2! 12 a
b

(14.4)

n=2, l = 0 , formul de tip nchis:

h = ( b a ) ; x1 = a; x 2 = b .

(14.5)

n acest caz avem dou noduri, punctele x1 i x 2 , extremitile intervalului [a,b]. Coeficienii Newton-Cotes vor fi:

68
(2) I10

Indrumar de laborator = ( t 2)dt =


1 2 2

1 ba ; A1 = 2 2 ba A2 = 2

(14.6)

2) I( 20

1 = ( t 1)dt = ; 2 1

Formula de cuadratur este:

~ I=

k =1

A kf (x k ) =

ba (f (a ) + f ( b)) . 2

(14.7)

Aceast formul, dat de (14.7), se numete "prima formul a trapezelor". Restul formulei este, n acest caz, : f ' ' ( ) (b a )3 '' R 2 (f ) = ( x a )( x b ) = f ( ) . 2! 12 a
b

(14.8)

Aceste formule de cuadratur, aplicate o singur dat pentru ntregul interval, conduc la erori mari de aproximare. Pentru creterea preciziei se mbuntete prima formula a trapezelor prin mprirea intervalului [a,b] n n subintervale egale, prin punctele echidistante a = x 0 , x1 , x 2 ,..., x n = b. Se poate scrie: I = f ( x )dx =
a b n xi

i =1 x i 1

f ( x )dx = I i .
i =1

(14.9)

Pe fiecare interval, integrala de tipul I i dat de (14.9) se aproximeaz prin:


~ x i x i 1 (f ( x i 1 ) + f ( x i ) ), i = 1, n . Ii = 2

(14.10)

Dac pasul reelei de noduri este:


h= ba , x i = x 0 + ih n

(14.11)

Metode Numerice atunci:


n 1 ~ n ~ ba . f ( a ) 2 f ( a ih ) f ( b ) I = Ii = + + + 2 n i =1 i =1

69

(14.12)

Pentru evaluarea restului, presupunnd c exist M>0 astfel nct

f ' ' ( x ) M, () x (a, b) atunci se poate scrie c:


R 2 (f )
Programul n MATLAB : L14_trapez_int.m
function integr = trapez_int(a,b,n,index_f) % Calculul integralei prin metoda trapezelor % Intervalul [a,b] se imparte in n subintervale format h=(b-a)/n int=0; n format long for i=0:n-1, int=int+h*(f(a+i*h,index_f)+f(a+h+i*h,index_f))/2; end disp('Valoarea integralei este :') int % Definirea functiei de integrat. function fct = f(x,index) switch index case 1 fct = exp(-x.^2); case 2 fct = 1 ./(1+x.^2); case 3 fct = 1 ./(2+sin(x)); case 4

M( b a ) 3 12n 2

(14.13)

70
fct = exp(cos(x)); case 5 fct = exp(x); end

Indrumar de laborator

Metode Numerice

71

LUCRAREA 15 Integrare numeric. Formula lui Simpson


Acest tip de formul se obine particulariznd formulele Newton-Cotes pentru n = 3 i l = 0 , de tip nchis. Coeficienii Newton-Cotes vor fi:
( 3) I10 =

1 1 ba ( t 2)( t 3)dt = ; A1 = 41 6 6
3

3) I( 20

1 2 2( b a ) = ( t 1)( t 3)dt = ; A 2 = 21 3 3 1 1 ba = ( t 1)( t 2)dt = ; A 3 = 41 6 6


x1 = a; x 2 = a+b ; x3 = b 2 ba . 2
3

(15.1)

3) I( 30

Cele trei noduri sunt: (15.2)

deoarece
h=

(15.3)

Rezult o valoare aproximativ a integralei de forma:

~ I=

k =1

A kf (x k ) =

ba a + b f ( a ) + 4 f + f ( b) . 6 2

(15.4)

i aceast formul de cuadratur introduce erori mari. Ea poate fi mbuntit prin mprirea intervalului [a,b] n 2n subintervale egale prin punctele a = x 0 , x1 ,..., x n = b , de pas h = ( b a ) / 2 n i prin aplicarea formulei lui Simpson pe cte dou subintervale consecutive, scriind integrala: I = f ( x )dx =
a b n x 2i

i =1 x 2 i 2

f ( x )dx = I i .
i =1

(15.5)

72

Indrumar de laborator

Folosind valoarea integralei dat de (15.4), se poate determina valoarea aproximativ pentru I i :

~ x 2i x 2i 2 Ii = f ( x 2i 2 ) + 4f ( x 2i 1 ) + f ( x 2i ) . 6

(15.6)

Rezult:
n n 1 ~ n ~ h . f ( a ) 4 f ( x ) 2 f ( x ) f ( b ) I = Ii = + + + 2 i 1 2 i 3 i =1 i =1 i =1

(15.7)

unde x i = x 0 + ih, i = 1,2n . Pentru evaluarea restului se recurge n mod asemntor la formula trapezelor, determinnd mai nti restul pentru un interval de forma [x 2i 2 , x 2i ] : f ( 4) ( 2i ) 2 i R 3i (f ) = x( x x 2i 2 )( x x 2i 1 )( x x 2i )dx . (15.8) 4! x
2 i2

Rezult:
R 3i (f ) = ( x 2i x 2i 2 )5 ( 4 ) f ( 2i ) . 2880

(15.9)

unde 2i ( x 2i 2 , x 2i ) . Dac exist M>0 astfel nct f ( 4 ) ( x ) M , () x (a , b) atunci se poate scrie restul pentru ntreaga formul:

R 3 (f )

( b a )5 2880n 4

M.

(15.10)

Programul n MATLAB : L15_simpson_int.m


function integr = simpson_int(a,b,n,index_f) % Calculul integralei prin metoda lui Simpson % Intervalul [a,b] se imparte in n subintervale

Metode Numerice
h=(b-a)/(2*n) int=0; n

73

format long for i=0:n-1, int=int+h*(f(a+2*i*h,index_f)+4*f(a+h+2*i*h,index_f)+ +f(a+2*h+2*i*h,index_f))/3; end disp('Valoarea integralei este :') int % Definirea functiei de integrat. function fct = f(x,index) switch index case 1 fct = exp(-x.^2); case 2 fct = 1 ./(1+x.^2); case 3 fct = 1 ./(2+sin(x)); case 4 fct = exp(cos(x)); case 5 fct = exp(x); end

74

Indrumar de laborator

LUCRAREA 16 Integrare numeric. Formulele lui Gauss


Se consider integrala: I = p( x )f ( x )dx
a b

(16.1)

a crei valoare exact nu poate fi determinat analitic. Formulele lui Gauss de cuadratur numeric sunt tot de forma:

~ I I =

k =1

A kf (x k ) ,

(16.2)

dar se caut s se determine att nodurile x k , ct i coeficienii A k , k = 1, n , astfel nct s se obin un grad de exactitate ct mai mare pe clasa polinoamelor algebrice. Dac aproximarea funciei f se consider un polinom construit pe baza irului fundamental 1, x , x 2 ,..., x m , vom avea:
i p( x )f ( x )dx = A k x k , i = 0, m . a k =1 b n

(16.3)

Relaia (16.3) reprezint un sistem de (m+1) ecuaii cu 2n necunoscute (nodurile x k i coeficienii A k , k = 1, n ). Pentru a avea o soluie unic trebuie s avem m + 1 = 2n , adic m = 2 n 1 . Rezult c gradul de exactitate al formulelor Gauss este m = 2 n 1 . Determinarea nodurilor x k i a coeficienilor A k , k = 1, n prin rezolvarea sistemului (16.3) este dificil, sistemul fiind neliniar. Se caut alt modalitate de determinare a necunoscutelor i anume: Se consider un polinom oarecare de grad 2 n 1 , notat P2 n 1 ( x ) pentru care formula de cuadratur este exact:

p( x ) P2n 1dx = A k P2n 1 ( x k ) .


a k =1

(16.4)

Metode Numerice

75

Se presupune problema rezolvat n privina nodurilor i se formeaz polinomul:

Wn ( x ) = ( x x1 )( x x 2 )...(x x n ) .
Se face mprirea cu rest a lui P2 n 1 ( x ) la Wn ( x ) :

(16.5)

P2 n 1 ( x ) = Wn ( x )q( x ) + ( x )

(16.6)

cu grad q n - 1, grad < n. pentru Wn ( x ) ( x ) , de grad 2 n 1 , formula de cuadratur este exact, adic:

p( x )Wn (x ) ( x )dx = A k Wn ( x k )(x k ) = 0 .


a k =1

(16.7)

deoarece Wn ( x k ) = 0, k = 1, n . Rezult polinomul Wn ( x ) este ortogonal oricrui polinom (x) de grad (n-1), cu ponderea p(x). Se poate demonstra c pentru p(x) 1, polinoamele Wn ( x ) care au coeficientul lui x n egal cu 1 i care sunt ortogonale pe [a,b] oricrui polinom de grad cel mult (n-1) sunt polinoamele Legendre de forma: Wn ( x ) = n! d n (x a )n (x b )n . n ( 2n )! dx

(16.8)

n plus, aceste polinoame au proprietatea c toate rdcinile lor sunt reale i cuprinse n intervalul (a,b). Polinoamele Wn ( x ) fiind determinate, sunt determinate i nodurile x k , k = 1, n , ca fiind rdcinile acestui polinom. Determinarea coeficienilor A k , k = 1, n se poate face acum rezolvnd sistemul (16.3) care devine liniar. Mai comod, se poate proceda astfel: Se consider polinomul:
Q k (x ) = Wn ( x ) x xk

(16.9)

76

Indrumar de laborator

de grad (n 1). Ptratul su, Q2 k ( x ) , de grad (2n 2), se anuleaz n punctele x = x i , i k , deoarece din expresia lui Q k ( x ) lipsete paranteza (x x k ) . Avnd gradul (2n-2), pentru acest polinom formulele de cuadratur sunt exacte, adic:
2 2 2 Q k ( x )dx = AiQ k ( x i ) = A kQ k ( x k ) . a i =1 b n

(16.10)

Integrnd prin pri, obinem:


2 Wn (x) 2 = = dx Q ( x ) dx k (x x ) 2 x xk k a a b b 2 Wn (x) b

+
a

+ 2
a

(16.11)

Wn ( x ) W ' n ( x ) dx x xk

Primul termen poate fi calculat dac n scrierea lui Wn ( x ) se folosete formula de derivare Leibniz:

Wn ( x ) =
Rezult:

nk n! n k d k n d ( ) (x b)n C x a n k n k (2n )! k = 0 dx dx

(16.12)

Wn (a ) = ( 1) n

( n! ) 2 (b a) n ( 2n )!

( n! ) 2 Wn ( b) = (b a ) n ( 2n )!

(16.13)

Ultima integral din (16.11) este exact deoarece polinomul de sub integral este de grad (2n-2). Vom avea:
' ' 2 Q k ( x ) Wn ( x )dx = 2 A i Q k ( x i ) Wn (x i ) . a i =1 b n

(16.14)

Metode Numerice innd cont de expresia lui Q k ( x ) din (16.9) se poate scrie:
' Q k ( x k ) = Wn (x k ) .

77

(16.15)

Se obine: Ak

[W (x )]
' n k

[(2n)!)]2 (a x k )( b x k )
( n! ) 4 ( b a ) 2 n +1

( n! ) 4 ( b a ) 2 n +1

' + 2A k Wn (x k )

(16.16)

De aici coeficienii lui Gauss: Ak =

[(2n )!]2 ( x k a )( b x k )[Wn' ( x k )]

(16.17)

De obicei, polinoamele Legendre i rdcinile lor se calculeaz pentru intervalul [-1,1]. Trecerea de la acest interval la intervalul [a,b] se poate face prin:
x= (b a )t + (b + a ) , t [ 1 , 1 ] . 2

(16.18)

Coeficienii A k se pot determina independent de funcie i de limitele de integrare i pot fi tabelai. Se poate demonstra c restul formulei de cuadratur Gauss este de forma:

R 2 n (f ) =

( n! ) 4 ( b a ) 2 n +1

[(2n )!]

(2n + 1)!

f ( 2 n ) (),

(16.19)

unde (a,b). Aceste formule de cuadratur conduc la cele mai exacte rezultate, chiar i pentru un numr mic de noduri. De multe ori, atunci cnd valorile lui f sunt dificil de calculat, formulele lui Gauss pentru un numr mic de noduri sunt de preferat altor formule de cuadratur. Pentru calculul rdcinilor polinomului Legendre de diverse grade se poate folosi urmtorul program MATLAB:

78 Programul n MATLAB : L16_rad_legendre.m


function set_pct = rad_legendre(n);

Indrumar de laborator

% Functia permite determinarea radacinilor % polinomului Legendre de grad n folosit in % Formula de integrare Gauss a=[1 0 -1]; b=[1]; for i=1:n, b=conv(a,b); end % Aranj(n,k)=Comb(n,k)*Perm(k) % Noul coef b este vechiul coef b * Aranj(n,k) for i=1:n+1, b(i)=nchoosek((2*n-i+1),n)*factorial(n)*b(i); b=b(1:n+1); end format long rad_leg=roots(b); set_pct=sort(rad_leg); disp(' ') disp('Setul de puncte pe [-1, 1] este :') set_pct

Calculul integralei prin formule Gauss se face utiliznd urmtorul program MATLAB: Programul n MATLAB : L16_gauss_int.m
function integr = gauss_int(a,b,n,index_f); % % % % % % [int,baza,pond] = gauss_int(fun,a,b,n) integreaza functia f intre a si b folosind metoda lui Gauss in n puncte, care este o metoda exacta pentru un polinom de grad 2*n-1. Conceput dupa modelul din 'Methods of Numerical Integration', autori Philip Davis si Philip Rabinowitz, dupa care au fost

Metode Numerice
% alese punctele de integrare % de ponderare. si factorii

79

% a,b - limitele de intergrare % n - ordinul formulei lui Gauss (implicit n = 20) % int - valoarea integralei % baza, pond - sistemul de puncte si factorii de ponderare pe [-1,1] % index_f - indexul functiei de integrat. format long if nargin < 4, n=20; end u = (1:n-1)./sqrt((2*(1:n-1)).^2-1); [vc,baza] = eig(diag(u,-1)+diag(u,1)); [baza,k] = sort(diag(baza)); pond = 2*vc(1,k)'.^2; x = (a+b)/2+((b-a)/2)*baza; % Punctele in care se face calculul valorilor functiei: disp(' ') disp('Baza de noduri din intervalul [-1, 1] ') disp('pe care se bazeaza formula de calcul Gauss :') baza pause disp('Punctele reale in care se face calculul valorilor functiei :') x pause disp('Ponderile valorilor functiei f in aceste puncte :') pond pause f = fcn(x,index_f)*(b-a)/2; int = pond(:)'*f(:); disp('Valoarea integralei este: ') int % Definirea functiei de integrat function fct = fcn(x,index)

80
switch index case 1 fct = exp(-x.^2); case 2 fct = 1 ./(1+x.^2); case 3 fct = 1 ./(2+sin(x)); case 4 fct = exp(cos(x)); case 5 fct = exp(x); end

Indrumar de laborator

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