Documente Academic
Documente Profesional
Documente Cultură
Facultatea de Informatică
BUCUREŞTI – 2014
UNIVERSITATEA TITU MAIORESCU BUCUREŞTI
Facultatea de Informatică
Învăţământ la Distanţă
Introducere
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.
Bibliografia recomandată
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.
1
11.11.2014
2
11.11.2014
• Daca
Daca
f ( x ) f (b) 0
m
Inseamna ca radacina se afla in (x
m
, b)
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
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 01
• 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
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
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
m f ( x1 )
y f ( x1 ) f ( x1 )( x x1 )
y f ( x1 ) f ( x1 )( x x1 )
2
11.11.2014
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
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
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
| 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
y0 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 )
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
0 0.5 0.377582
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
• Coeficientii se cunosc.
aij , i, j 1,2,..., n
•
bi , i 1,2,..., n
1
12.11.2014
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
4
12.11.2014
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
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
a11 0 ... 0
a a22 ... 0
A 21
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
10
12.11.2014
• 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
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
13
12.11.2014
j k aik( k ) 0
14
12.11.2014
a 11( 0 ) a12
(0)
... a1n
(0)
a1(,0n)1
(1) (1)
0 a22 ... a2(1n) a2,n 1
... ... ... ... x
( n2)
0 0 ... a n 1, n
0 0 ... a ( n 1) an( n,n11)
nn
15
12.11.2014
• 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)
16
12.11.2014
akj( k 1)
a (k )
akk( k 1)
kj
aik( k 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
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
Nr de necunoscute = n2+n
Nr. de cunoscute =n2
l
ij 1i n ,1 j i si u ij 1i n , i j n
trebuie sa le satisfaca.
20
12.11.2014
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
23
12.11.2014
24
12.11.2014
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
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
29
12.11.2014
n
bi aij x j
j 1
j i
xi pentru orice i 1,...n
aii
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
• 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.
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
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 pun conditiile:
N2 (x) = a0 + a1 (x − x0 ) + a2 (x − x0 )(x − x2 )
n
X
S= (a0 + a1 xi − yi )2
1
∂S ∂S
S este minima cand ∂a0 = 0, ∂a1 = 0.
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
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
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
2
12.11.2014
3
12.11.2014
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
• 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.
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
9
12.11.2014
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
•
• >> A'
• ans =
35
78
91
12
12.11.2014
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
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
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
18
12.11.2014
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
12.11.2014 6
3
12.11.2014
12.11.2014 7
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
• >> func(9)
ans =
1432
• >> v=[1 2 3]
• v=
123
• >> func(v)
ans =
0 11 46
12.11.2014 13
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
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
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
13
12.11.2014
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
12.11.2014 33
12.11.2014 34
17