Sunteți pe pagina 1din 120

UNIVERSITATEA TITU MAIORESCU

Facultatea de Informatică

Conf. univ. dr. DANIELA JOIȚA

Curs pentru învăţământul la distanţă

BUCUREŞTI – 2014
UNIVERSITATEA TITU MAIORESCU BUCUREŞTI
Facultatea de Informatică

Învăţământ la Distanţă

Introducere

Acest material este destinat studenților anului I, invatamant la distanță, specializarea


Informatică. Modul de prezentare are în vedere particularităţile învăţământului la distanţă, la care
studiul individual este determinant. În timp ce profesorul sprijină studentul prin coordonarea
învățării și prin feedback periodic asupra acumulării cunoștințelor și a deprinderilor, studentul alege
locul, momentul și ritmul pentru studiu, dispune de capacitatea de a studia independent și totodată
își asumă responsabilitatea pentru inițierea și continuarea procesului educațional.

Disciplina Analiză numerică utilizează noţiunile predate la disciplinele Analiză matematică și


Fundamentele algebrice ale informaticii, discipline studiate de asemenea în anul I.

Competențele dobândite de către studenți prin însușirea conținutului cursului Analiză numerică
sunt des folosite la disciplinele de specialitate precum Informatică aplicată în industrie, Tehnici de
transmitere și codificare a informației, Criptografie și securitatea informației, etc. O neînțelegere a
noțiunilor fundamentale prezentate în acest curs poate genera dificultăți în asimilarea conceptelor
mai complexe ce vor fi introduse în aceste cursuri de specialitate.

Structura cursului este următoarea:

Unitatea de învățare 1. Introducere

Unitatea de învățare 2. Metode numerice pentru rezolvarea ecuațiilor neliniare

Unitatea de învățare 3. Metode numerice pentru rezolvarea sistemelor de ecuații liniare

Unitatea de învățare 4. Interpolare

Unitatea de învățare 5. Integrare numerică

Unitatea de învățare 6. Introducere în MATLAB

Este foarte important ca parcurgerea materialului sa se faca in ordinea unităților de învățare 1 –


4. Unitatea de învățare 6 este dedicată software-ului specializat în calcule numerice, analiza datelor și
vizualizare și, nu în ultimul rând, programare, și anume MATLAB, folosit la orele de laborator pentru
acest curs. Această unitate recomandăm să fie parcursă în paralel cu celelalte unități de învățare. În
plus, la sfârșitul fiecărei UI sunt incluse probleme propuse care testeaza cunoasterea notiunilor
teoretice de catre student.

Pachet software recomandat:


MATLAB este un software specializat în calcule numerice, analiza datelor și vizualizare și, nu în
ultimul rând, programare instalat pe calculatoarele din laboratoarele facultății. Acesta va fi folosit la
orele de laborator. In UI 6 este prezentat in detaliu acest software.
http://www.mathworks.com/products/matlab/

Ca alternativă, un open source software similar cu MATLAB este Freemat


http://freemat.sourceforge.net/

Bibliografia recomandată

1. Mathews, J. H., and K. D. Fink. Numerical Methods Using


MATLAB®. 3rd ed. Upper Saddle River, NJ: Prentice Hall,
1998.
2. W. H. Press, B. P. Flannery, S. A. Teukolsky, W. T. Vetterling:
Numerical recipes in C. The art of scientific computing,
Cambridge University Press, 1992
3. Singiresu S. Rao, Applied numerical methods for engineers
and Scientists, Prentice Hall 2002
4. http://www.mathworks.com/products/matlab/
5. http://freemat.sourceforge.net/

Vă precizăm de asemenea că, din punct de vedere al verificărilor şi al notării, cu adevărat


importantă este capacitatea pe care trebuie să o dobândiţi şi să o probaţi de a rezolva toată tipologia
de probleme aplicative aferente materialului teoretic prezentat în continuare. Prezentăm în
continuare criteriile de evaluare și ponderea fiecărei activități de evaluare la stabilirea notei finale.

La stabilirea notei finale se iau în Ponderea în notare, exprimată în %


considerare
{Total = 100%}

- răspunsurile la examen (evaluarea finală) 60%

- răspunsurile finale la lucrările practice de


20%
laborator

- testarea periodică prin teme pentru acasa 10%

- participarea activă la lucrările de laborator


10%
(activitățile asistate)

Modalitatea de evaluare finală: lucrare scrisă (descriptivă şi/sau probleme)

Cerinţe minime pentru nota 5 Cerinţe pentru nota 10

 Însuşirea cunoştinţelor de bază  Rezolvarea corectă şi completă a


 Obţinerea unui procent de cel subiectelor de examen
putin 45% din procentul maxim  Efectuarea corecta si completa a
alocat fiecarei activitati care se temelor pentru acasa
considera in stabilirea notei finale.
 Activitatea în timpul semestrului  Participarea activă la curs si laborator

In speranta ca organizarea si prezentarea materialului va fi pe placul dumneavoastra, va uram


MULT SUCCES!

Coordonator disciplină: Conf. univ. dr. Daniela Joița

Tutore: Conf. univ. dr. Daniela Joița


UNITATEA DE ÎNVĂȚARE 1
Introducere
Problema

Un aspect importantant al aplicarii matematicii in rezolvarea


problemelor din viaa cotidiana este abilitatea de a gasi soluii cat
mai apropiate de soluiile reale, determinate cu computerul. Analiza
numerica se ocupa cu studiul metodelor de determinare a acestor
soluii.
I rezolvare numerica (determinarea solutiilor numerice) ale probl
enginerie, stiinta
I primele computere au fost folosite pentru a efectua calcule
numerice
I primele limbaje de programare folosite in calcule numerice
Erori
In analiza numerica trebuie sa nelegem c soluiile numerice ale
ecuatiilor, integralelor, etc nu sunt ca si cele soltuiile matematice
exacte. Soluiile numerice se doresc s fie ct mai aproape de cele
exacte dar nu sunt. De aceea definim erorile. Precizia unei soluii
numerice este dat de ordinul de mrime a erorii. Eroarea este
diferena ntre valoarea real i cea aproximat a unei valori.

Daca x aprox este valoarea aproximativa a lui x atunci definim:


I eroare absoluta Ex = x − x aprox
x−x aprox
I eroare relativa Rx = x
I erori de calcul
I erori de propagare
I erori de trunchiere
I erori de rotunjire
UNITATEA DE ÎNVĂȚARE 2
Metode numerice pentru rezolvarea ecuațiilor
neliniare
11.11.2014

Metoda bisectiei
(metoda injumatatirii intervalului)
• Fie f o functie continua de o variabila reala x.
• Vrem sa determinam radacinile ecuatiei
f(x)=0.
• Gasim doua valori a si b numere reale astfel
incat
f (a) f (b)  0
• Adica f are semne contrare in cele doua
puncte.

• Deoarece f este continua pe [a, b] inseamna


ca

• Deci exista o radacina a lui f in (a,b).


• Vrem sa gasim aceasta solutie.

1
11.11.2014

Sursa: Wikimedia Commons

• Micsoram intervalul de cautare prin


considerarea mijlocului intervalului

• Daca atunci am gasit solutia.


• Daca nu, atunci
• deci

2
11.11.2014

• Daca

Inseamna ca radacina se afla in ( a, x


m
)

Daca
f ( x ) f (b)  0
m
Inseamna ca radacina se afla in (x
m
, b)

• Procedeul se repeta pana cand se obtine o


valoare care aproximeaza bine solutia.
• Criteriu de oprire:
f ( xm )
sa fie suficient de mic (de aproape de 0).

f ( xm )  
unde ε este precizat inainte de rularea algoritmului

3
11.11.2014

Algoritm
• Notam (l,u) intervalul in care se cauta solutia
• Pas 1. l=a, u=b
• Pas 2. xm=(l+u)/2
• Pas 3. Daca |f(xm)|<=ε atunci solutia este xm
si stop. Altfel mergi la Pas 4.
• Pas 4. Daca f(xm)f(l) <0 atunci u=xm
• altfel l=xm
• Pas 5. Mergi la Pas 2.

Algoritm -pseudocod
• Notam (l,u) intervalul in care se cauta solutia
• l=a, u=b, i=0
• xm=(l+u)/2
• while |f(xm)|>ε
• if f(xm)f(l) <0 then u=xm
• else l=xm
• endif
• i=i+1
• xm=(l+u)/2
• endwhile
• Solutia este xm.
• Numarul de iteratii este i.

4
11.11.2014

Exercitiu
• Sa se determine o radacina a functiei f ( x)  0
pentru
f ( x)  2 x 3  3 x  1
si ε=0.005.
Trebuie sa gasim a si b astfel incat f(a) si f(b) sa
aiba semne contrare.
Apelam la metoda grafica.

5
11.11.2014

• Toate radacinile sunt in (-2, 2)


• - una in (-1.5, -1)
• -una in (0, 0.5)
• -o rad este 1.
• Vrem sa gasim radacina din intervalul (0, 0.5).

• a=0, b=0.5, ε=0.005


• f(a)=1, f(b) = -0.25
• i l u xm f(xm) |f(xm)| <=ε

0 0 0.5 0.25 0.2812 nu

1 0.25 0.5 0.375 -0.0195 nu

2 0.25 0.375 0.3125 0.1235 nu

3 0.3125 0.375 0.3438 0.05 nu

4 0.3438 0.375 0.3594 0.0147 nu

5 0.3594 0.375 0.3672 -0.0025 da

6
11.11.2014

Convergenta metodei
• Fie hi lungimea intervalului in care se face
cautarea dupa iteratia i.

h0  b  a
• Atunci hi , pt orice i
• Deci hi 1 
2
h h h
hi 1  i  i 21  ...  i 01
• 2 2 2
• hi  0 cand i 

Observatii
• Metoda nu gaseste solutii multiple.
• Metoda gaseste o singura radacina
• Se aplica numai pentru radacini reale.
• In algoritm este bine ca semnele f(a) si f(b) sa
se pastreze in niste variabile.
• Pentru a fi siguri ca algoritmul se opreste, este
bine sa punem conditia ca nr de iteratii sa fie
limitat de un nr maxim.

7
11.11.2014

• Se poate modifica algoritmul,


• if f(xm)f(l) <0 then u=xm
• else l=xm
• endif
• in
• if sgn(f(xm))=sgn(f(u)) then u=xm
• else l=xm
• endif

Algoritm
• l=a, u=b, i=0. MAX = nr maxim de iteratii
• xm=(l+u)/2
• while i<=MAX and|f(xm)|>ε
• if sgn(f(xm))=sgn(f(u)) then u=xm
• else l=xm
• endif
• i=i+1
• xm=(l+u)/2
• endwhile
• if |f(xm)|<=ε then solutia este xm
• else write ‘ nr maxim de iteratii depasit’

8
11.11.2014

Metoda lui Newton-Raphson


(metoda tangentei)
• Se da o functie reala diferentiabila.
• Vrem sa determinam o radacina a ecuatiei
f(x)=0, deci sa gasim
r astfel incat f (r )  0
• Vom construi un sir de valori reale

xn  astfel incat xn  r

Presupunem
f’(r)!= 0

• Consideram x1 un
punct suficient de
aproape de r pt care f’
nu este zero.
• Construim tangenta la
(x1, f(x1)).
• Fie x2 intersectia
tangentei cu axa Ox.
• x2 este mai aproape de
r decat x1

1
11.11.2014

• In acelasi mod, construim tangenta la (x2, f(x2)).


• Fie x3 intersectia tangentei cu axa Ox.
• x3 este mai aproape de r decat x2.
• Se construieste astfel sirul {xn}.
• Se poate demonstra ca sirul astfel obtinut

xn  astfel incat xn  r

• Ecuatia tangentei la (x1, f(x1)).



y  f ( x1 )  m( x  x1 )

m  f ( x1 )
y  f ( x1 )  f ( x1 )( x  x1 )
y  f ( x1 )  f ( x1 )( x  x1 )

2
11.11.2014

• x2 este intersectia tangentei cu Ox, deci setam


y=0 si obtinem
f ( x1 )  f ( x1 )( x  x1 )  0
f ( x1 )
x  x1  
f ( x1 )
f ( x1 )
x  x1 
f ( x1 )
f ( x1 )
x2  x1 
f ( x1 )

• La fel se gasesc si ceilalti termeni ai sirului


f ( xn )
xn1  xn 
f ( xn )

3
11.11.2014

Exercitiu
• Sa se determine o radacina a functiei f ( x)  0
pentru
f ( x)  2 x 3  3 x  1
Reprezentand grafic functia in intervalul [-2, 2],
alegem x1  0 pentru a determina solutia
din intervalul (0,0.5).
Calculam derivata

f ( x)  6 x 2  3

i x f(x) f’(x)
1 0 1 -3
2 0.3333 0.0741 -2.333
3 0.3651 0.0021 -2.2003
4 0.3660 1.9584e-6 -2.1962
5 0.3660

4
11.11.2014

• Cand ne oprim?
• Xn+1 este foarte apropiat de xn cand |f(xn)| este
f. mic, deci putem una din conditiile de oprire:

| f ( xn ) |  ,  dat
sau
| xn 1  xn |  ,  dat

Algoritm
• Se dau x1, epsilon si MAX= nr maxim de iteratii
• i=1
• do
• x(i+1)=x(i)-f(x(i))/f’(x(i))
• i=i+1
• while |x(i+1)-x(i)|> epsilon and i<=MAX
• If i<=MAX then write ‘solutia este x(i)’
• else write ‘Metoda nu converge. Nr
maxim de iteratii este depasit’

5
11.11.2014

Exercitiu
• Aproximati 5 cu 10 zecimale folosind
metoda lui Newton-Raphson.
• Rezolvare:
• Consideram functia
f ( x)  x 2  5

• Stim ca o valoare apropiata este 2. Luam x1=2.

i x f(x) f’(x)
1 2 -1 4
2 2.25 0.0625 4.5
3 2.2361111111 1.9290e-4 4.4722
4 2.2360679779 1.8605e-9 4.4721
5 2.2360679775 8.8818e-16 4.4721

8.8818e-16=0.0818e-14<0.5e-14

Deci f(x)=0 cu 14 cifre semnificative

Deci x este aproximata cu mai mult de 10 zecimale.

6
11.11.2014

Convergenta metodei
• Notam ei  r  xi eroare dupa a i-a iteratie.
• Putem aproxima, folosind polinomul lui Taylor

f ( x)  f ( xi )  ( x  xi ) f ( xi )  12 ( x  xi ) 2 f ( xi )
0  f ( xi )  (r  xi ) f ( xi )  12 (r  xi ) 2 f ( xi )
0  f ( xi )  ei f ( xi )  12 ei f ( xi )
2

f ( xi ) 2 f ( xi )
  ei  12 ei
f ' ( xi ) f ' ( xi )

f ( xi )
xi 1  xi 
f ' ( xi )
f ( xi )
xi 1  xi  ei  12 ei
2

f ' ( xi )
f ( xi )
ei 1   12 ei
2

f ' ( xi )
f ( xi )
| ei 1 | 12 | ei |2 | |
f ' ( xi )
Ultima ecuatie indica faptul ca eroare la iteratia i este
proportionala cu patratul erorii la iteratia anterioara.
Spunem ca sirul iterativ obtinut prin metoda lui Newton-Raphson
are ordinul de convergenta patratica.
Metoda Newton-Raphson este o metoda rapida.

7
11.11.2014

• In general, spunem ca un sir {xk} care converge la


x* are ordinul de convergenta p daca limita de
mai jos exista si este finita

| ek 1 |
lim
k  | e | p
k
• Cu cat p este mai mare cu atat sirul converge mai
rapid.

Observatii
• Metoda necesita cunoasterea derivatei
functiei intr-un punct.
• Metoda este rapida in general dar poate fi
lenta daca valoarea initiala x1 este f. departe
de radacina.
• Exista o teorema care spune ca o alegere buna
a lui x1 este cand f(x1)f’’(x1)>0.
• Daca derivata este f. aproape de zero atunci
metoda este posibil sa nu convearga.

8
11.11.2014

Metoda secantei
• Se da f functie infinit derivabila. Vrem sa
determinam r astfel incat f(r)=0.
• Ideea acestei metode este sa se inlocuiasca
functia f nu cu tangenta ci cu o dreapta care
trece prin doua puncte de pe grafic.

1
11.11.2014

y  f ( x1 )  m( x  x1 )
f ( x1 )  f ( x0 ) • Se incepe cu
m
x1  x0 doua valori
initiale x0 si
y0 x1.
f ( x1 ) x1  x0  • Se
x2  x1  
f ( x1 )  f ( x0 ) construieste
secanta
f ( x1 ) x1  x0 
x2  x1  (coarda)
f ( x1 )  f ( x0 )

• Se procedeaza la fel in continuare si se


defineste sirul

f ( xi )xi  xi 1 
xi 1  xi 
f ( xi )  f ( xi 1 )

2
11.11.2014

Algoritm
• Se dau x0, x1, epsilon si MAX= nr maxim de
iteratii
• i=1
• do
• x(i+1)=x(i)-f(x(i))*(x(i)-x(i-1))/(f(x(i)-f(x(i-1)))
• i=i+1
• while |f(x(i+1))|> epsilon and i<=MAX
• If i<=MAX then write ‘solutia este x(i)’
• else write ‘Metoda nu converge. Nr
maxim de iteratii este depasit’

Exercitiu
• Gasiti o solutie a ecuatiei f(x)=0
pentru f(x)=cos(x)-x
Alegeti x0=0.5 si x1=pi/4=0.785398 si
eps=0.000005=5e-6

3
11.11.2014

i xi X(i)-x(i-1) f(xi) f(X(i))-f(x(i- |f(xi)|<=eps


1))

0 0.5 0.377582

1 pi/4=0.7853 0.285398 -0.078291 -0.455873


98
2 0.736384 -0.049014 0.0045177 0.0828091 nu
3 0.739058 0.002674 4.51772e-5 -0.004472 nu
4 0.739085 2.7e-5 -2.6982e-8 -4.5204e-5 da

Convergenta metodei
• Se poate arata ca sirul {xk} converge la solutia
x* si ca ordinul de convergenta este

1 5
p  1.618  2
2
• Metoda secantei este mai lenta decat metoda
lui Newton.

4
11.11.2014

Alegerea metodei
• Metoda grafica poate fi folosita pentru
determinarea valorilor aproximative ale
solutiilor ecuatiei f(x)=0, dar nu are atat de
multa acuratete ca celelalte metode.
• Poate in schimb fi folosita pentru
determinarea valorilor initiale necesare
celorlalte metode precum metoda bisectiei,
Newton sau secantei.

Alegerea metodei-continuare
• Metoda bisectiei, desi lenta, gaseste intotdeauna
o solutie. Daca f(x) poate fi determinata usor
atunci aceasta metoda este recomandata.
• Daca f este continua cu derivate continue,
metoda lui Newton este o metoda care
determina eficient o solutie. Dar este posibil ca
aceasta sa nu convearga daca f’ este aproape
nula sau punctul initial nu este suficient de
aproape de solutie.
• Cand evaluarea lui f’ este dificila este
recomandata folosirea metodei secantei.

5
UNITATEA DE ÎNVĂȚARE 3
Metode numerice pentru rezolvarea sistemelor de
ecuații liniare
12.11.2014

Sistem de ecuatii liniare cu n ecuatii si


n necunoscute

 a11x1  a12 x2  ...  a1n xn  b1


a x  a x  ...  a x  b
 21 1 22 2 2n n 2

 ...
an1 x1  an 2 x2  ...  ann xn  bn

• Coeficientii se cunosc.

aij , i, j  1,2,..., n

bi , i  1,2,..., n

1
12.11.2014

 a11 a12 ... a1n 


a  b1 
 a22 ... a2 n  b 
A 21

 ... ... ... ...  b   2


 ... 
   
an1 an 2 ... ann 
bn 
 x1 
x 
x   2
 ... 
 
 xn 

• Sistemul de mai sus se poate scrie sub forma

Ax  b

2
12.11.2014

Metode de rezolvare
• Directe • Iterative
– Regula lui Cramer – Gauss- Jacobi
– Metoda eliminarii a lui – Gauss-Seidel
Gauss
– Metoda Gauss- Jordan
– Metoda descompunerii
LU

3
12.11.2014

Metode directe
• Regula lui Cramer nu este eficienta pentru n
mare.
• Calculul dupa formula a unui det de ordin n,
• C(n)=n*C(n-1) deci C(n) =n!
• Ex: 6!=720, 10!= 3628800
• Din aceste motive trebuie gasite alte metode.

Cazuri particulare
• Daca matricea este diagonala:

a11 0 ... 0 
0 a ... 0 
A 22

 ... ... ... ... 


 
0 0 ... ann 

4
12.11.2014

va avea solutie unica


 a11x1  b1 daca

a22 x2  b2
 aii  0 pentru orice i  1, n
 ...
ann xn  bn
Solutia unica este
xii  bi / aii pentru i  1, n

Algoritm
for i=1, n
if a[i][i]≠0 then x[i]=b[i]/a[i][i]
else write ‘ solutia nu este unica’
stop
endif
endfor

5
12.11.2014

Exemplu
 2 0 0 4
A  0 3 0 b   6 
0 0 9 27
2 x1  4 x1  2
3 x2  6 x2  2

9 x3  27 x3  3

Daca matricea A este superior


diagonala

a11 a12 ... a1n 


 a22 ... a2 n 
A 
 ... ... ... ... 
 
 ... ann 

6
12.11.2014

• Rezolvarea se face
a11x1  a12 x2  ...  a1n xn  b1 incepand cu x(n), x(n-1),
 a x  ...  a x  b etc.
 22 2 2n n 2

 ... bn

xn 
ann xn  bn ann
n
bi  a
j i 1
ij xj
xi 
aii

Algoritm
• Se dau A si b.
• for i=n, 1, -1
• if a[i][i] ≠0 then
• S=0
• for j=i+1, n
• S=S+a[i][j]*x[j]
• endfor
• x[i]=(b[i]-S)/a[i][i]
• else write ‘solutia nu este unica’
• stop
• endif
• endfor
• Write ‘ solutia este ‘ x[i]

7
12.11.2014

Exemplu

• Daca matricea este inferior triunghiulara

 a11 0 ... 0 
a a22 ... 0 
A  21

 ... ... ... ... 


 
an1 an 2 ... ann 

8
12.11.2014

• Rezolvarea se face
 a11x1  b1 incepand cu x(1), x(2),
 a21x1  a22 x2  b2
etc.

 b1
 ... x1 
an1 x1  an 2 x2  ...  ann xn  bn a11
i 1
bi   aij x j
j 1
xi 
aii

Algoritm
• Se dau A si b.
• for i=1, n
• if a[i][i] ≠0 then
• S=0
• for j=1, i-1
• S=S+a[i][j]*x[j]
• endfor
• x[i]=(b[i]-S)/a[i][i]
• else write ‘solutia nu este unica’
• stop
• endif
• endfor
• Write ‘ solutia este ‘ x[i]

9
12.11.2014

Exemplu

Metoda eliminarii a lui Gauss


• Ideea: Se modifica matricea sistemului
aplicand diverse operatii astfel incat matricea
sa devina matrice superior diagonala (sau
inferior diagonala).
• Fie C matricea extinsa a sistemului.
• C=[A b]  a11 a12 ... a1n b1 
 b2 
• Notam 
C   ... ... ... ... ... 
 
an 1,1 an 1, 2 ... an 1,n bn 1 
ai ,n1  bi pentru orice i  1, n  an1 an 2 ... ann bn 

10
12.11.2014

• Se construieste un sir de matrici, notate

C (0) , C (1) ,..., C ( n1)


care vor duce in final la o matrice superior
triunghiulara de forma.
a 11( 0 ) a12
( 0)
... a1n
(0)
a1(,0n)1 
 (1) 
 0 a22 ... a2(1n) a2(1,n) 1 
C ( n 1)   ... ... ... ... ... 
 ( n2)

 0 0 ... a n 1, n an( n1,2n)1 
 0 0 ... a ( n 1)
an( n.n11) 
 nn

• Initial
C ( 0)  C
• Deci aij( 0)  aij i, j  1,2,..., n
ai(,0n)1  bi i  1, n
(0)
La pasul 1, alegem pivot a11 iar sub diagonala
facem restul 0. Inmultim prima ecuatie cu
si adunam ecuatia i cu ai(10 )
 (0)
a11
aceasta prima ecuatie modificata.

11
12.11.2014

ai(10) ( 0)
a(1)
ij a
(0)
ij  ( 0) a1 j , i  2, n, j  2, n  1
a11

j  1  ai(11)  0

• Pentru urmatorul pas folosim ca pivot a (1)


22
iar sub diagonala facem restul 0. Inmultim
ecuatia a doua cu si adunam ecuatia i
ai(21)
cu  (1)
a22
aceasta ecuatie modificata.

12
12.11.2014

ai(21) (1)
a( 2)
ij  a  (1) a2 j , i  3, n, j  3, n  1
(1)
ij
a22

j  2  ai(22)  0

• In general, la pasul k , folosim drept pivot akk( k 1)


iar sub diagonala facem restul 0. Inmultim
ecuatia k cu a ( k 1) si adunam ecuatia k cu
 ik( k 1)
akk
aceasta ecuatie modificata.

13
12.11.2014

aik( k 1) ( k 1)


aij( k )  aij( k 1)  akj , i  k , n, j  k , n  1
akk( k 1)

j  k  aik( k )  0

Algoritm –eliminare Gauss


• Se dau A si b. • for k=1, n-1
• For i=1,n • If a (k-1) [k][k] ≠ 0 then
• for j=1,n • for i=k+1, n
• a [i][j]=a[i][j] •
(0) for j=k, n+1
• Endfor • a (k)[i][j]=a (k-1) [i][j] - a (k-1)
• a (0)[i][n+1]=b[i] [i][k] * a (k-1) [k][j] / a (k-1) [k][k]
• Endfor • endfor
• endfor
• else write ‘Solutia nu este unica’
• stop
• endfor

14
12.11.2014

• Se aplica apoi algoritmul de rezolvare a


sistemelor de ecuatii liniare pentru care
matricea este superior diagonala.

a 11( 0 ) a12
(0)
... a1n
(0)
  a1(,0n)1 
 (1)   (1) 
 0 a22 ... a2(1n)   a2,n 1 
 ... ... ... ... x   
 ( n2)
  
 0 0 ... a n 1, n   
 0 0 ... a ( n 1)  an( n,n11) 
 nn 

• Metoda se poate folosi si pentru calculul


determinantului unei matrici.

15
12.11.2014

Metoda eliminarii Gauss-Jordan


• Ideea: Se modifica matricea sistemului
aplicand diverse operatii astfel incat matricea
sa devina matrice diagonala.
• Fie C matricea extinsa a sistemului.
• C=[A b]
 a11 a12 ... a1n b1 
• Notam  
 b2 
C   ... ... ... ... ... 
 
an 1,1 an 1, 2 ... an 1,n bn 1 
ai ,n1  bi pentru orice i  1, n  an1 an 2 ... ann bn 

• Initial
C ( 0)  C aij( 0)  aij i, j  1,2,..., n
• Deci
ai(,0n)1  bi i  1, n
La pasul 1, normalizam ecuatia 1. Impartim linia 1 la (0)
a11
Pivotam apoi, pentru fiecare ecuatie i, i ≠1,
adunand ecuatia i la ecuatia 1 inmultita cu
 ai(10)

aij(1)  aij(0)  ai(10) a1(0j ) , j  2, n  1

16
12.11.2014

• In general, la pasul k , intai normalizam linia k:

akj( k 1)
a (k )

akk( k 1)
kj

Pivotam apoi, pentru fiecare ecuatie i, i ≠1,


adunand ecuatia i la ecuatia k inmultita cu

 aik( k 1)

aij( k )  aij( k 1)  aik( k 1) akj( k 1) , i  k , j  k , n  1

Algoritm
• for k=1, n
• If a (k-1) [k][k] ≠ 0 then
• Se dau A si b. • For j=k, n+1
• For i=1,n • a (k)[k][j]=a (k-1) [k][j] / a (k-1) [k][k]
• for j=1,n • endfor
• a (0)[i][j]=a[i][j]
• Endfor • for i=1, n
• a (0)[i][n+1]=b[i] • If i≠k then
• Endfor • For j=k, n+1
• a (k)[i][j]=a (k-1) [i][j] - a (k-1) [i][k] * a (k-1) [k][j]
• • endfor
• endif
• else write ‘ Solutia nu este unica’
• stop
• endif
• Endfor
• Write ‘ Solutia este ‘
• For i=1,n
• x[i]= a (k)[i][n+1]
• endfor

17
12.11.2014

• Solutia sistemului este chiar ultima coloana a


matricii extinse rezultate in urma aplicarii
algoritmului Gauss-Jordan.

Exemplu
 2 x1  x2  x3  4

 4 x1  3x2  x3  6
3x  2 x  2 x  15
 1 2 3

2  1 1 4   1 1 
4 3  1 6  1  2 2
  4 3
2
 1 6
3 2 2 15  
  3 2 2 15 
   

18
12.11.2014

 1 1 
 1  2  1  1 1 
2 
 2 2   2 2
4  4 3  4( 1 )  1  4 1 6  4  2   0 5  3  2
 2 2   7 1

  1  1  0 9 
 3  3 2  3     2  3  15  3  2 
  2 2 
  2 2 
 1 1   1 1 1 1  3 1  2 
1  2 2  1        2     
2  2 2 2 2  5 2  5 
 3 2  3 2
0 1    0 1   
 5 5  5 5 
0 7  1 7  3 7  2 
9  0
1 7 7
        9     
2 2   2 2 2 2  5 2  5 
 1 9   1 9   1 1 9 1 
1 0  1 0  1 0   4 
5 5 5 5 5 5 5 5
 3 2  3 2  3 3 2 3 
0 1     0 1     0 1      4
 5 5  5 5  5 5 5 5 
0 0 13 52  0 0 1 4  0 0 1 4 
 5 
5   
  

1 0 0 1 1 
0 1 0 2   x   2 
   
0 0 1 4  4

19
12.11.2014

Metoda descompunerii LU
• Teorema: Orice matrice patratica se poate
scrie ca produs de doua matrici, una inferior
triunghiulara si una superior triunghiulara.
 
• A=LU unde l 0 0 0
 11 
– L=inferior triunghiulara L   l21 l22 0 0 
– U=superior triunghiulara  ... ... ... 0 
 
   ln1 ln 2 ... lnn 
u u ... u 
 11 12 1n 

U   0 u22 ... u2 n 
 ... ... ... ... 
 
0 0 ... unn 

 a11 a12 ... a1n    


a 0  u11 u12 ... u1n 
... a2 n  
l11 0 0
 
 21 a22   l21 l22 0 0  0 u22 ... u2 n 
 ... ... ... ...   ... ... ... 0  ... ... ... ... 
   
an1 an 2 ... ann   l lnn  0 0 ... unn 
 n1 ln 2 ...

Nr de necunoscute = n2+n
Nr. de cunoscute =n2

Pentru determinarea in mod unic a celor doua matrici trebuie sa


adaugam n conditii pe care

l 
ij 1i  n ,1 j i si u ij 1i  n , i  j  n
trebuie sa le satisfaca.

20
12.11.2014

• Metoda lui Crout: uii  1,  i  1, n


• Metoda lui Doolittle:
lii  1,  i  1, n
• Metoda lui Choleski:
lii  uii ,  i  1, n

Metoda lui Crout


 a11 a12 ... a1n    
  
a ... a2 n  
l11 0 0 0  1 u12 ... u1n 

 21 a22   l21 l22 0 0  0 1 ... u2 n 
 ... ... ... ...   ... ... ... 0  ... ... ... ... 
   
... ann   l lnn  0 0
an1 an 2  n1 ln 2 ... ... 1 

• Se scriu ecuatiile si se rezolva sistemul.

21
12.11.2014

Exemplu
2  1 1   l11 0 0  1 u12 u13 
4 3  1   l 
l22 0  0 1 u23  

   21
3 2 2   l31 l32 l33  0 0 1 
2  1 1  l11 l11u12 l11u13 
4 3  1  l l21u12  l22 l21u13  l22u23  
   21
3 2 2  l31 l31u12  l32 l31u13  l32u23  l33 
1 1
   u    
l11  2, l u
11 12 1 12
l11 2
 1 1
l21  4 l11u13  1  u13  
l  3 l11 2
 31

 1
l21u12  l22  3  4      l22  3  l22  5
 2
 1 7
l31u12  l32  2  3      l32  2  l32 
 2 2
1 3
l21u13  l22u23  1  4     5u23  1  u23  
2 5
 1 7  3
l31u13  l32u23  l33  2  3         l33  2
 2 2 5
13
l33 
5

22
12.11.2014

 1 1 
  1  
 2  1 1   2 0 0  2 2 
4 3  1   4 5 0  0 1   3
   7 13  5
3 2 2   3  0 0 1 
 2 5  
 
Observati ordinea in care au fost determinati coeficientii
lij si uij.
Prima coloana apoi prima linie, ce a ramas din a doua
coloana, apoi ce a ramas din a doua linie, etc.

• In cazul general
n
A  LU  aij   lik ukj i, j  1, n
k 1

Dar lst  0 pentru orice t  s


0 pentru orice t  s
u st  
 1 pentru t  s
0 pentru orice k  j
 ukj  
 1 pentru k  j
j 1
aij   lik ukj  lij 
k 1
j 1
lij  aij   lik ukj pentru orice i  j
k 1

23
12.11.2014

lik  0 pentru orice k  i 


i i 1
aij   lik ukj  lii uij   lik ukj 
k 1 k 1
i 1
aij   lik ukj
uij  k 1
pentru orice i  j
lii

• Elementele se determina in ordinea:


li1 , i  1,..., n,
u1 j , j  2,..., n
li 2 , i  2,..., n,
u 2 j , j  3,..., n,
.....
lin 1 , i  n  1, n,
u n 1n ,
lnn

24
12.11.2014

• Cum rezolvam sistemul Ax=b daca scriem


A=LU?
• Ax=b este echivalent cu LUx=b sau L(Ux)=b
• Rezolvam intai sistemul Lz=b, apoi sistemul
Ux=z.

25
12.11.2014

Exemplu
2  1 1  4
• Sa se rezolve sistemul 4 3  1 x   6 
   
3 2 2  15

 1 1 
  1  
2  1 1   2 0 0  2 2 
4 3  1   4 5 0  0 1  
3
   7 13  5
3 2 2   3  0 0 1 
 2 5  
 

• Rezolvam intai
 
2 0 0  z1   4 
 
4 5 0  z 2    6  
 7 13  
3  z 3  15
 2 5
2 z1  4  z1  2
2
4 z1  5 z 2  6  4  2  5 z 2  6  z 2  
5
7 13
3 z1  z 2  z3  15  z3  4
2 5

26
12.11.2014

 1 1 
1  
 2 2   2 
 2
0 1 3
 x  z   
 5  5 
0 0 1   4 
 
 
x3  4
3 2
 x2  x3    x2  2
5 5
1 1
x1  x2  x3  4  x1  1
2 2
1
 
x   2
 4
 

Algoritm
• For k=1,n
• for i=k,n
• S=0
• for t=1,k-1
• S=S+l(i,t)*u(t,k)
• endfor
• l(i,k)=a(i,k)-S
• endfor

27
12.11.2014

• For j=k+1, n
• S=0
• for t=1,k-1
• S=S+l(k,t)*u(t,k)
• endfor
• u(k,j)=(a(k,j)-S)/l(k,k)
• endfor
• endfor

Observatii
• Metoda poate fi folosita cand avem de
rezolvat mai multe sisteme de ecuatii liniare
cu aceeasi matrice, doar termenul din dreapta
diferit, spre deosebire de metoda eliminarii
Gauss

28
12.11.2014

La implementare matricile L si U pot fi


combinate intr-una singura

 
l u ... u1n 
 11 12 
 l21 l22 .... u2 n 
 ... ... ... un 1,n 
 
 ln1 ln 2 ... lnn 

Metode iterative
 a11x1  a12 x2  ...  a1n xn  b1
a x  a x  ...  a x  b
 21 1 22 2 2n n 2

 ...
an1 x1  an 2 x2  ...  ann xn  bn

Din fiecare ecuatie putem exprima, pe


rand x1, x2, ..., xn, in functie de celelalte
necunoscute.

29
12.11.2014

n
bi   aij x j
j 1
j i
xi  pentru orice i  1,...n
aii

• Vrem sa determinam x=(xi)i=1,...,n astfel incat Ax=b.


• Metoda iterativa de rezolvare inseamna ca se pleaca
de la o valoare initiala a lui x, notata x(0) =(xi0)i=1,...,n
si se defineste un sir (x(k))k ce converge la
solutia sistemului.
• Sirul se defineste sub forma:
• x(k+1) =f (x(k)) deci in functie de elementul din sir
la iteratia anterioara.

30
12.11.2014

Metoda Jacobi

n
bi   aij x j
(k )

j 1
( k 1) j i
xi  pentru orice i  1,...n
aii

• Algoritmul se opreste cand x(k+1) si x(k) sunt


suficient de aproape adica
( k 1)
 xi  pentru orice i  1,..., n
(k )
xi

• Def:
• A este o matrice diagonal dominanta daca
n
aii   aij i  1,..., n
j 1
j i

31
12.11.2014

• Teorema
Daca A este o matrice diagonal dominanta
atunci metoda Jacobi este convergenta.

Metoda Gauss - Seidel

i 1 n
bi   aij x j a x
( k 1)

(k )
ij j
( k 1) j 1 j i 1
xi  pentru orice i  1,...n
aii

• Algoritmul se opreste cand x(k+1) si x(k) sunt


suficient de aproape adica
( k 1)
 xi  pentru orice i  1,..., n
(k )
xi

32
12.11.2014

• Teorema
Daca A este o matrice diagonal dominanta
atunci metoda Gauss-Seidel este convergenta.

33
UNITATEA DE ÎNVĂȚARE 4
Interpolare
Problema

Se da o multime de puncte si trebuie gasita o functie continua si


diferentiabila care sa se ”potriveasca” acestor puncte.
Abordari
I Se pune conditia ca graficul functiei sa treaca prin punctele
date. Acest caz se numeste interpolare.
I Se pune conditia ca graficul functiei sa aproximeze cat mai
bine punctele date adica se cauta o functie (polinom,
exponentiala, logaritmica, etc) al carei grafic sa treaca cat mai
aproape de punctele date. Acest caz se numeste regresie.
Interpolare: O solutie directa

Se dau n puncte (xi , yi )i=1,2,...,n . Se cauta o functie=polinom de


gradul n − 1 al carei grafic sa treaca prin aceste puncte.

Se cauta f de forma f (x) = an−1 xin−1 + an−2 xin−2 + ... + a1 x + a0


astfel incat f (xi ) = yi pentru orice i = 1, 2, ..., n.

Se pun conditiile:

an−1 xin−1 + an−2 xin−2 + ... + a1 x + a0 = yi


pentru orice i = 1, 2, ..., n. Am obtinut un sistem de n ecuatii cu n
necunoscute care se poate rezolva cu metode directe sau iterative.
Polinomul de interpolare Lagrange
Sa pp ca se dau punctele (x0 , y0 ), (x1 , y1 ) si (x2 , y2 ).

Vrem sa gasim un polinom de grad 2 de forma

f (x) = a0 (x − x1 )(x − x2 ) + a1 (x − x0 )(x − x2 ) + a2 (x − x0 )(x − x1 )

care sa treaca prin cele trei puncte.


a0 , a1 si a2 se determina din conditia ca graficul lui f (x) sa treaca
prin cele 3 puncte.
f (xi ) = yi
.
y0
I i = 0 implica y0 = a0 (x0 − x1 )(x0 − x2 ) −→ a0 = (x0 −x1 )(x0 −x2 )
y1
I i = 1 implica y1 = a1 (x1 − x0 )(x1 − x2 ) −→ a1 = (x1 −x0 )(x1 −x2 )
y2
i = 0 implica y2 = a2 (x2 − x0 )(x2 − x1 ) −→ a2 =
I
(x2 −x0 )(x2 −x1 )
x−x
Deci f (x) = 2i=0 yi 2j=0,j6=i xi −xjj
P Q
Date n + 1 puncte (xi , yi )i=0,1,2,...,n , polinomul de interpolare
Lagrange de ordin n este:
n n
X Y x − xj
f (x) = yi
xi − xj
i=0 j=0,j6=i
Polinomul de interpolare Newton-Cotes
Sa pp ca se dau punctele (x0 , y0 ), (x1 , y1 ) si (x2 , y2 ).

Vrem sa gasim un polinom de grad 2 de forma

N2 (x) = a0 + a1 (x − x0 ) + a2 (x − x0 )(x − x2 )

care sa treaca prin cele trei puncte.


a0 , a1 si a2 se determina din conditia ca graficul lui f (x) sa treaca
prin cele 3 puncte.
f (xi ) = yi
.
I i = 0 implica y0 = a0 −→ a0 = y0
y1 −y0
I i = 1 implica y1 = a0 + a1 (x1 − x0 ) −→ a1 = x1 −x0
I i = 0 implica
1 y2 −y1 y1 −y0
y2 = a2 (x2 − x0 )(x2 − x1 ) −→ a2 = x2 −x0 [ x2 −x1 − x1 −x0 ]
Notam
g (xi ) = yi
numite diferente divizate de ordin 0
y1 − y0
g (x1 , x0 ) =
x1 − x0
numita diferenta divizate de ordin 1 in nodurile x0 si x1 .
g (x2 , x1 ) − g (x1 , x0 )
g (x2 , x1 , x0 ) =
x2 − x0
numita diferenta divizate de ordin 2 in nodurile x0 , x1 si x2 .
Observam ca N2 (x) = N1 (x) + g (x2 , x1 , x0 )(x − x0 )(x − x1 )
Generalizand:
g (xn , ..., x1 ) − g (xn−1 , ..., x0 )
g (xn , ..., x1 , x0 ) =
xn − x0
numita diferenta divizate de ordin n in nodurile x0 , x1 ,..., xn .
Observam ca
Nn (x) = Nn−1 (x) + g (xn , ..., x1 , x0 )(x − x0 )...(x − xn−1 ). unde
Nn (x)=polinomul de interpolare Newton de ordin n.
Regresie
Se dau n puncte (xi , yi )i=1,2,...,n .

Se pune conditia ca graficul functiei sa aproximeze cat mai bine


punctele date adica se cauta o functie al carei grafic sa treaca cat
mai aproape de punctele date.

Regresie liniara = aproximarea punctelor prin graficul unei drepte


y = a0 + a1 x
Notam yia prox = a0 + a1 xi valorile aproximative ale dreptei in
punctele xi adica (xi , yi ) este aproximat prin punctul de pe dreapta
(xi , yiaprox ).

Metoda celor mai mici patrate: suma patratelor erorilor


n
(yiaprox − yi )2
X
S=
1

trebuie sa fie minima.


Metoda celor mai mici patrate

n
X
S= (a0 + a1 xi − yi )2
1
∂S ∂S
S este minima cand ∂a0 = 0, ∂a1 = 0.

Pornind de la aceste conditii se determina a0 si a1 .

Trebuie rezolvat sistemul de ecuatii


 P   P 
Pn P x2i a0
= P i
y
xi xi a1 xi yi
Sistemul se rezolva f. usor si se determina a0 si a1 .
Dreapta care aproximeaza bine punctele date este y = a0 + a1 x.
UNITATEA DE ÎNVĂȚARE 5
Integrare numerică
Problema

Rb
Calculul integralei a f (x)dx.
I Daca functia f este o functie simpla, ca de exemplu: un
polinom, o exponentiala simpla, o functie trigonometrica
pentru care exista fie o formula care se poate aplica, fie se
poate calcula integrala prin metode precum integrare prin
parti, substitutie etc. atunci o calculam exact folosind
metodele descrise.
I Daca functia f este mai complicata si calculul prin metodele
descrise nu se poate face atunci se apeleaza la metode
numerice care vor determina valori aproximative ale integralei.
Semnificatia integralei
Rb
a f (x)dx= aria de sub graficul functiei f (x) cuprinsa intre
dreptele x = a si x = b.
Semnificatia integralei

Pentru calculul aproximativ al integralei, functia f (x) se va


aproxima pe intervalul [a, b] sau pe subintervale mai mici ale lui.
I Daca functia f (x) ≈ constanta −→ metoda dreptunghiului
I Daca functia f (x) ≈ polinom de grad 1 −→ metoda trapezului
I Daca functia f (x) ≈ polinom de grad 2 −→ metoda Simpson
1/3
I Pentru toate metodele de mai sus, pentru a obtine o buna
aproximare, se imparte intervalul [a, b] in n intervale de
lungime egala si se aproximeaza functia pe fiecare interval sau
pe doua intervale adiacente.
b−a
I Lungimea fiecarui subinterval o notam h = n .
I Notam x0 , x1 , ..., xn capetele subintervalelor care rezulta.
I x0 = a, xn = b si xi = a + ih pentru orice i = 0, 1, ..., n.

I Notam fi = f (xi ) pentru orice i = 0, 1, ..., n.


Metoda dreptunghiului
Pe fiecare interval [xi−1 , xi ] functia se aproximeaza functia
f (x) ≈ fi−1 (sau f (x) ≈ fi ) (valoarea functiei intr-unul din capetele
intervalului)
R xi deci
xi−1 f (x)dx ≈ aria dreptunghiului cu baza [xi−1 , xi ] si inaltimea
fi−1 Z xi
f (x)dx ≈ h ∗ fi−1
xi−1
Z b n
X n
X n−1
X
f (x)dx ≈ h ∗ fi−1 = h ∗ fi−1 = h ∗ fi
a i=1 i=1 i=0
Metoda trapezului

Pe fiecare interval [xi−1 , xi ] functia se aproximeaza f (x) ≈


polinomul de grad I care trece prin punctele (xi−1 , fi−1 ) si (xi , fi ),
deci
R xi cu dreapta care trece prin aceste puncte.
xi−1 f (x)dx ≈ aria trapezului dreptunghic cu baza [xi−1 , xi ] si
laturi fi−1 si fi deci
Z xi
h
f (x)dx ≈ (fi−1 + fi )
xi−1 2
.

Z b n n n n−1 n
X h h X X h X X
f (x)dx ≈ ∗(fi−1 +fi ) = ∗( fi−1 + fi ) = ∗( fi + fi )
a 2 2 2
i=1 i=1 i=1 i=0 i=1
Metoda trapezului

Z b n−1
h X
f (x)dx ≈ ∗ (f0 + 2 fi + fn )
a 2
i=1
Metoda Simpson 1/3

Pe fiecare doua intervale adiacente, [xi−1 , xi ] si [xi , xi+1 ] functia se


aproximeaza f (x) ≈ P(x) polinomul de grad II care trece prin
punctele (xi−1 , fi−1 ), (xi , fi ) si (xi+1 , fi+1 ) deci cu parabola care
trece prin toate aceste puncte.
Pentru a putea aplica metoda trebuie ca n sa fie numar par.
R xi+1 R xi+1
xi−1 f (x)dx ≈ xi−1 P(x)dx. P(x) se determina din conditiile ca P
sa treaca prin punctele mentionate mai sus. Apoi se calculeaza
integrala.
Se gaseste ca
Z xi+1
h
f (x)dx ≈ (fi−1 + 4fi + fi+1 )
xi−1 3
.
Z b n−1
X h
f (x)dx ≈ (fi−1 + 4fi + fi+1 )
a 3
i=1,3,5...
Metoda Simpson 1/3

Z b n−1 n−1
h X X
f (x)dx ≈ ∗ (f0 + 4 fi + 2 fi + fn )
a 3
i=1,3,5,... i=2,4,6,...
UNITATEA DE ÎNVĂȚARE 6
Introducere în MATLAB
12.11.2014

Generalitati
• MATLAB este un pachet de programe cu multe
functii de tip built-in dar si cu posibilitatea de
creare a programelor proprii care permit
invatarea mai usoara a metodelor numerice.
• MATLAB (matrix laboratory) este special creat
pentru a lucra cu matrici si vectori.

Interfata MATLAB
• Dupa lansarea programului MATLAB se va deschide o
fereastra de comanda Command Window ce poate fi
recunoscuta prin prompterul >>.
• La linia de comanda se pot tasta comenzi MATLAB,
functii predefinite, numele unor programe sau ale unor
functii scrise de utilizator.
• Interfata grafica MATLAB include cateva zone:
– meniul cu comenzi si tab-uri in partea de sus
– Command Window
– Workspace - in care apar toate variabilele create la linia de
comanda sau importate din fisiere
– Command History – pt a vedea si rula comenzi care au fost
introduse la linia de comanda

1
12.11.2014

• Programele MATLAB au extensia .m. Acestea pot fi


create cu orice editor de texte sau pot fi create in
interfata MATLAB:
• - meniu File/ New/ M-file sau File/ Open
• Pentru help avem comanda: help urmata de numele
unei comenzi sau functii.
• Comanda lookfor urmata de un cuvant cheie
returneaza functiile si comenzile MATLAB .
• Daca doriti sa rulati un fisier .m a carui cale nu se afla
printre cele in care MATLAB stie sa caute atunci calea
respectiva trebuie adaugata: File /Set Path si apoi Add
Folder, Save si Close.

Input/Output din linia de comanda


Valori scalare
• In MATLAB putem crea si initializa variabile prin
tastarea numelui acestora si urmat de valoare.
• >> a=1
• a=
• 1
• >> b=10
• b=
• 10
• >> c=a+b
• c=
• 11

2
12.11.2014

• Putem scrie expresii fara sa avem o variabila


output care sa preia valoarea rezultatului
expresiei
• >> a*b
• ans =
• 10
• In acest caz MATLAB foloseste variabila ans
pentru a memora rezultatul.

• Daca nu dorim sa vedem rezultatul executarii


comenzii >>a = 1 putem pune la sfarsit ;.
• De ex,
• >> a=9;
• >> b=3;
• >> c=25;
• >> p=a*b+b*c+c*a
• p=
• 327

3
12.11.2014

• In MATLAB exista functii predefinite, cum ar fi cele


trigonometrice care pot fi apelate la linia de comanda
• De ex,

• >> cos(2*pi)
• ans =
• 1
• >> sin(a)
• ans =
• 0.4121

• De asemenea, daca ne aflam la linia de comanda


si apasam tastele sus sau jos putem regasi
intreaga lista de comenzi pe care le-am dat de la
inceputul sesiunii de lucru si putem alege una din
ele, o putem modifica dupa cum dorim.
• Un istoric al acestor comenzi se gaseste si in
fereastra Command History si daca facem dublu-
clic pe una din ele atunci aceasta comanda se
incarca automat la linia de comanda.
• Comentariile in MATLAB sunt linii precedate de %

4
12.11.2014

Exercitii
• Scrieti un set de comenzi pt a introduce 3
variabile a, b, c si pt a calcula: produsul
tuturor, suma de produse de cate doua, suma
tuturor
• Urmariti ce se intampla in ferestrele
Command Window, History, Workspace
• Creati un program .m script in care copiati
comenzile de mai sus. Rulati programul la linia
de comanda

Vectori si matrici
• In Matlab, obiectele de baza sunt matricile si vectorii si
putem lucra direct cu matrici si vectori
• -A =matrice 2 linii si 3 coloane, vector V se numeste
vector coloana pt ca are 1 singura coloana sau W =
vector linie pt ca are 1 singura linie.
• Se pot introduce direct la linia de comanda:
• >>A=[3 7 9 ; 5 8 1]
• A=
• 379
• 581
• Observati ca introducerea matricii se face pe linii, cu ;
intre acestea.

5
12.11.2014

• vector V se numeste vector coloana pt ca are 1


singura coloana sau W = vector linie pt ca are 1 singura
linie.
• >> V=[7; -1; 5]
• V=
• 7
• -1
• 5
• >> W=[3 2 1]
• W=
• 321

Indici vectori si matrici


• In MATLAB indicii vectorilor incep de la 1. La fel si ai
matricillor.

• De ex,
• >> V(1)
• ans =
• 7
• >> W(2)
• ans =
• 2
• >> A(1,1)
• ans =
• 3

6
12.11.2014

• >> A(2,3)
• ans =
• 1
• >> A(3,2)
• Error: index is out of bounds
• Am obtinut o eroare pt ca am incercat sa
accesam un element care nu exista in matrice.

• Se pot extrage si sectiuni dintr-o matrice sau vector


folosind operatorul :

• >> A(:,2)
• ans =
• 7
• 8
• >> A(1:2,2:3)
• ans =
• 79
• 81

7
12.11.2014

Operatorul :
• Operatorul : are doua moduri de utilizare
– cu doi operanzi
De ex:
y=a:c
Inseamna ca y este un vector cu valorile [a a+1 a+2...c]
– cu trei operanzi
De ex,
y=a:b:c
Inseamna ca y este un vector cu valorile [a a+b a+2b...c]

Exemple
• >> y=1:4
• y=
• 1234
• >> y=-2:0.5:2
• y=
• -2.0000 -1.5000 -1.0000 -0.5000 0
0.5000 1.0000 1.5000 2.0000
• >> y=2:1
• y=
• Empty array 1x0

8
12.11.2014

• >> y=2:2
• y=
• 2
• >> y=5:-1:0
• y=
• 543210
• >> y=5:-1:9
• y=
• Empty array 1x0

Functii care creaza matrici predefinite


• De ex,
• rand(2,3) va crea o matrice cu 2 linii si 3
coloane cu valori aleatoare in (0,1)
• >> A=rand(2,3)
• A=
• 0.3759 0.9134 0.7604
• 0.0183 0.3580 0.8077

9
12.11.2014

• zeros(3,3) va crea o matrice nula cu 3 linii si 3 coloane


• >> W=zeros(3,3)
W=
000
000
000
• ones(2,1) va crea o matrice nula cu 2 linii si 1 coloana
cu toate valorile 1
• >> t=ones(2,1)
t=
1
1

• >> M=eye(3) % matricea identitate 3x3


M=
100
010
001

• Comentariile in MATLAB sunt linii precedate


de %

10
12.11.2014

Operatii cu matrici
adunare cu un scalar:
• va aduna la fiecare termen al matricii scalarul
respectiv
• >> A=[3 7 9 ; 5 8 1]
• A=
• 379
• 581
• >> A+10
• ans =
• 13 17 19
• 15 18 11

inmultirea cu un scalar
• va inmulti fiecare termen al matricii cu
scalarul respectiv

• >> A*10
• ans =
• 30 70 90
• 50 80 10

11
12.11.2014

transpusa unei matrici


• >> A'
• ans =
35
78
91

Inmultirea a doua matrici


• >> A=[3 7 9 ; 5 8 1]
• A=
• 379
• 581
• >> B=[1 0; 3 2; 4 5]
• B=
• 10
• 32
• 45
• >> A*B
• ans =
• 60 59
• 33 21

12
12.11.2014

Inversa unei matrici


>> A=[3 7 9 ; 5 8 1; 1 2 5]
A=
379
581
125
• >> inv(A)
ans =
-1.0556 0.4722 1.8056
0.6667 -0.1667 -1.1667
-0.0556 -0.0278 0.3056
• si verificarea
• >> A*inv(A)
• ans =
1.0000 -0.0000 -0.0000
-0.0000 1.0000 0.0000
0.0000 0 1.0000

Comanda format
• Pentru afisarea a mai mult de 4 digits pentru numerele reale se poate
folosi comanda
• >>format long
• inainte de afisare si se poate reveni la formatul implicit cu comanda
• >>format short.
• Acest lucru nu afecteaza modul de reprezentare a numarului in
memorie, se foloseste doar pentru afisare.
• Observati ca numerele sunt rotunjite la 4 zecimale in cazul format
short (format implicit) si la 14 in cazul format long.

• >> format long
• >> inv(A)
• ans =
• -1.05555555555556 0.47222222222222 1.80555555555556
• 0.66666666666667 -0.16666666666667 -1.16666666666667
• -0.05555555555556 -0.02777777777778 0.30555555555556

13
12.11.2014

• >> format short


• >> inv(A)
• ans =
• -1.0556 0.4722 1.8056
• 0.6667 -0.1667 -1.1667
• -0.0556 -0.0278 0.3056

Ridicare la patrat
• Are sens si A*A deoarece matricea A este patratica.
• >> A
• ans =
• 379
• 581
• 125
• >> A*A
• ans =
• 53 95 79
• 56 101 58
• 18 33 36

14
12.11.2014

• >> A^2
• ans =
• 53.0000 95.0000 79.0000
• 56.0000 101.0000 58.0000
• 18.0000 33.0000 36.0000
• Daca in schimb, dorim sa ridicam la patrat fiecare
termen al matricii A putem folosi operatorul .
• >> A.^2
• ans =
• 9 49 81
• 25 64 1
• 1 4 25

Concatenarea a doua matrici


• Doua matrici pot fi concatenate, daca
dimensiunea acestora este permisa, astfel:
• >> a=[1 2 3; 4 5 6]
• a=
• 123
• 456
• >> x=[a,a]
• x=
• 123123
• 456456

15
12.11.2014

• >> y=[a;a]
• y=
• 123
• 456
• 123
• 456
• >> z=[a,x]
• z=
• 123123123
• 456456456
• >> [a;x]
• Error: Mismatch in dimension 2 for elements being
concatenated along dimension 1

Functiile predefinite
• Functiile predefinite pot fi apelate si pentru vectori si matrici
nu doar pentru scalari.
• Astfel,
• >> A=[1 2 3 ; 4 5 6; 7 8 9]
A=
123
456
789
• >> sin(A)
ans =
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 0.4121

16
12.11.2014

• >> v=[1;-2;-3]
v=
1
-2
-3
• >> abs(v)
ans =
1
2
3
• se va aplica functia abs() pentru toate elementele vectorului v.
• Cateva functii predefinite in MATLAB:
– cos( ), tan( ), sinh( ), cosh( ), log( ) (ln), log10( ) (log in
baza10), asin( ) (arcsin ), acos( ) (arccos), atan( ) (arctg),
abs() (valoare absoluta).

Exercitii
• Construiti o matrice cu elem aleatoare de dim
4x2
• Inmultiti-o cu o matrice 2x4
• Aflati inversa matricii rezultate
• Extrageti din matricea rezultata matricea 2x2 din
mijloc (W)
• Aplicati sin(x) pt fiecare termen al matricii W 2x2
• Calculati transpusa matricii W 2x2
• Aflati W*W
• Observati diferenta dintre W.^2 si W*W

17
12.11.2014

• Să se selecteze elementele de pe poziţiile 2-6 şi 1,


4, 7 ale vectorului:
• A=[1 2 3 4 5 6 7 8].
• Fie o matrice A de dimensiune 6x6. Să se
selecteze:
• a) linia 1;
• b) coloana 2;
• c) liniile 1-3 şi coloanele 3-5;
• d) liniile 1,3 şi coloanele 2, 3-5;

18
12.11.2014

Construirea altor functii ca si


combinatii de functii predefinite

• f=inline('2*x.^2-3*x+1', 'x')
• f=
• inline function object
• f(x) = 2*x.^2-3*x+1
• f(0)
• ans =
• 1

12.11.2014 1

• >> v=[1 2 3]
• v=
• 123
• >> f(v)
• ans =
• 0 3 10
• am scris x.^2 si nu x^2 care ar fi insemnat x*x si
daca aplicam vectorului v atunci v*v ar fi
insemnat produsul vectorului v cu vectorul v

12.11.2014 2

1
12.11.2014

Grafice 2D
Se dau punctele de coordonate (1, 0.2), (2, 0.8),
(3, 1), (4, 1.4) si (5,2).
• >>x=[1 2 3 4 5]
• x=
• 12345
• >> y=[0.2 0.8 1 1.4 2]
• y=
• 0.2000 0.8000
1.0000 1.4000 2.0000
• >> plot(x,y, '*')

12.11.2014 3

• >>plot(x,y)
• va afisa in aceeasi
fereastra punctele unite
printr-o linie.
• >>clf
• va sterge figura
existenta in fereastra de
imagini.

12.11.2014 4

2
12.11.2014

Grafice de functii

• >>x=-8:0.1:8;
• >> plot(x, sin(x))
• >> xlabel('x')
• >> ylabel('sin(x)')
• >> grid on

12.11.2014 5

Mai multe functii pe acelasi grafic


• >> x=1:4
• x=
• 1234
• >> y=[x;x+1;x+2;x+3]
• y=
• 1234
• 2345
• 3456
• 4567
• >> plot(x,y)

12.11.2014 6

3
12.11.2014

• plot(x, sin(x), 'r-', x,


cos(x), 'g*-')
• Specificatiile
– r- inseamna
reprezentare cu linie
solida, rosie
– g*- inseamna
reprezentare cu linie
solida, formata din *,
verde

12.11.2014 7

• Putem adauga etichete axelor Ox si Oy precum si legenda care sa


descrie cele doua functii reprezentate.
• >>xlabel('x')
• >> ylabel('f(x)')
• >> legend('sin(x)', 'cos(x)')

12.11.2014 8

4
12.11.2014

• >> x=-5:0.1:5;
• >> plot(x, 2*x.^3 - x +1)
• >> plot(x, 2*x.^3 - x +1), grid on
• >> legend ('2*x^3-x+1')

12.11.2014 9

Exercitii
• Sa se reprezinte grafic funcţia f(x)=x2. Adaugati
etichete pentru axe, legenda, titlu.
• Să se reprezinte pe acelasi grafic funcţiile
f(x)=tg(x) şi g(x)=ctg(x), x ia valori între [0,2π].
Adaugati etichete pentru axe, legenda, titlu.
• Sa se reprezinte grafic multimea de puncte:
(-1, 2.5), (0, 3), (-2, 5), (2, 4) si (-1, 6)

12.11.2014 10

5
12.11.2014

Programe in MATLAB
• Programele MATLAB au extensia .m.
• Pot fi create cu orice editor de texte sau pot fi
create in interfata MATLAB:
• - meniu File/ New/ Script sau File/ New/
Function
• In MATLAB exista doua feluri de programe,
functii si scripturi.

12.11.2014 11

Functii
• Din meniu File/New/function, scriem
function f=func(x)
f=2*x.^3-3*x+1;
• func este un nume dat de noi si trebuie sa
coincida cu numele fisierului.
• Salvam cu numele func.m
• x - variabila de intrare, iar f –variabila de iesire

12.11.2014 12

6
12.11.2014

• Aceasta functie poate fi apoi folosita la linia de


comanda cu numele func pentru orice valori
numerice, vectori sau matrici.

• >> func(9)
ans =
1432
• >> v=[1 2 3]
• v=
123
• >> func(v)
ans =
0 11 46

12.11.2014 13

• Putem afisa si graficul


functiei:
>> x=-1:0.02:1;
>> y=func(x);
>> plot(x,y);grid on

12.11.2014 14

7
12.11.2014

Reguli
• Numele variabilei x de la apelare si al variabilei
din programul .m nu trebuie sa coincida. Ceea ce
trebuie sa coincida este doar numele fisierului .m
si numele functiei .
• Toate functiile trebuie sa inceapa cu cuvantul
cheie function.
• Trebuie sa aiba parametri de intrare si de iesire.
In cazul functiei func: x este de intrare si y de
iesire.
• Parametrii de iesire, numele functiei si parametrii
de iesire trebuie sa apara in prima linie.
• Corpul functiei trebuie sa dea valori parametrilor
de iesire.
12.11.2014 15

• Putem avea functii cu mai multi parametrii de


intrare si/sau de iesire.
• De ex,
• Functia de mai jos are un param de intrare, x
si trei de iesire x2, x3, x4
function [x2 x3 x4] = puteri(x)
x2 = x.^2;
x3 = x.^3;
x4 = x.^4;
• Salvam fisierul cu numele puteri.m

12.11.2014 16

8
12.11.2014

• >> x= -1:.1:1;
• >> [x2 x3 x4] = puteri(x);
• >> plot(x, x, 'k', x, x2,
'b', x, x3, 'g', x, x4, 'r')

12.11.2014 17

Scripturi
• De ex, scrieti urmatorul text si • >> p1
salvati-l cu numele p1.m A=
• %testare matrici si vectori 123
• A=[1 2 3 ; 4 5 6] %matrice A 456
2x3
• b=[3;2;1] %vector 3x1 b=
• c=[1 2 3 4 5] %vector linie 3
• w=A*b 2
1
• Rolul comentariilor de la c=
inceputul fisierului .m este sa 12345
apara atunci cand comanda
help urmata de numele w=
fisierului este data la linia de 10
comanda. 28
• Se va afisa primul bloc de
comentarii. • >> help p1
• %testare matrici si vectori
12.11.2014 18

9
12.11.2014

Instructiuni de iesire
• disp – afiseaza un text daca textul este inclus
intre ' ' sau disp(expr) va afisa valoarea
expresiei.
• >> disp('abc')
• abc
• >> x=3;
• >> disp(x*x)
• 9

12.11.2014 19

fprintf
• Are aceasi sintaza ca si printf in C doar ca
stringul se scrie intre apostrofuri.

12.11.2014 20

10
12.11.2014

Instructiuni de intrare
Pentru introducerea de la tastatura de valori se foloseste instructiunea input.
• >> input('n=')
• n=5
• ans =
• 5
• >> x=input('introduceti valoarea lui x ')
• introduceti valoarea lui x 6
• x=
• 6

• Daca se doreste introducerea de la tastatura a unui string se va adauga, la
apelarea functiei input 's'.
• >> input('textul este: ', 's')
• textul este: A fost odata
• ans =
• A fost odata
12.11.2014 21

Operatori relationali
• Ca si in C cu exceptia ca diferit este ~=.
• >> 3~=3
• ans =
• 0
• >> 1~=5
• ans =
• 1

12.11.2014 22

11
12.11.2014

• Se pot folosi si intre vectori cu aceeasi dimensiune sau


matrici de aceeasi dimensiune dar se aplica fiecarui
element.
• >> a=[1 2 3 ; 4 5 6]
• a=
• 123
• 456
• >> b=[2 1 3 ; 5 4 1]
• b=
• 213
• 541
• >> a==b
• ans =
• 001
• 000
12.11.2014 23

Operatori logici
• &, |, ~, xor
• xor(x,y) = true daca si numai daca exact unul
dintre x si y este true

12.11.2014 24

12
12.11.2014

Instructiunea if
if conditie if conditie
secv de instructiuni secv de instructiuni
end elseif
secv de instructiuni
sau else
secv de instructiuni
if conditie end
secv de instructiuni
else
secv de instructiuni
end

12.11.2014 25

• O functie care ar determina semnul unei variabile


de intrare este:
• function s=semn(x)
• if x>0
• s=1
• elseif x<0
• s=-1
• else s=0
• end
12.11.2014 26

13
12.11.2014

• O functie care calculeaza n!



• function f=fact(x)
• if x~=0, f=fact(x-1)*x
• else f=1
• end

12.11.2014 27

• function f=factorial(x)
• if x==0, f=1;
• else
• p=1;
• for i=1:x
• p=p*i;
• end
• f=p;
• end

12.11.2014 28

14
12.11.2014

Instructiuni de ciclare
• for var=val initiala: incrementare: val finala
• secv de instructiuni
• end
• Din for se poate iesi fortat cu break.
• while conditie
• secv de instructiuni
• end
• Din while se poate iesi fortat cu break.

12.11.2014 29

Exercitii
• Sa se scrie un program MATLAB care citeste de
la tastatura un numar intreg n si afiseaza unul
din mesajele: “nr. Poz”, “nr. Neg”, “zero”.
• Sa se scrie o functie suma care are drept var
de intrare un n si calculeaza suma 1+2+…+n,
pe care o si returneaza.
• Introduceti comentarii sugestive si testati
comanda help.

12.11.2014 30

15
12.11.2014

Functia mod
• Functia mod (x, y) returneaza restul impartirii
lui x la y.
• Spre deosebire de operatia x mod y de la
algebra, x si y pot fi atat numere pozitive cat si
negative, ba chiar si vectori.
• Daca x si y sunt scalari atunci
– mod(x, 0) = x pentru orice x
– mod(0,x)=0 pentru orice x
– mod(x, y) are acelasi semn cu y, oricare ar fi x.

12.11.2014 31

Exemple:
• >> mod(25,4)
• ans =
• 1
• >> mod(25,5)
• ans =
• 0
• >> mod(25, -4)
• ans =
• -3
• >> mod(-25, 4)
• ans =
• 3
• >> mod(-25, -4)
• ans =
• -1
• >> mod(-25, 0)
• ans =
• -25
• >> mod(0, 25)
• ans =
• 0
12.11.2014 32

16
12.11.2014

• Daca x este vector, x=[x1 x2...xn] si y scalar


atunci
• mod(x, y)=[mod(x1, y) mod(x2, y)...mod(xn,
y)]
>> mod([2 -5 5 6], 2)
ans =
0110

12.11.2014 33

• Daca x este vector, x=[x1 x2...xn] si y este tot


vector, cu acelasi nr de elem ca si x, y=[y1 y2
...yn] atunci mod(x,y)=[mod(x1,y1) mod(x2,
y2)...mod(xn, yn)].

>> mod([2 -5 5 6], [2 7 3 4])


ans =
0222

12.11.2014 34

17

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