Matlab Curs
Matlab Curs
Matlab Curs
Curs:
Laborator
Sala F113
Proiect
Sala F312
Materiale
platforma Moodle
http://fim.curs.pub.ro/
Informatică Aplicata 1
Structura cursului
Prezenta obligatorie la Laborator….si la Curs
NU se fac recuperari la laborator
numere/variabile/functii uzuale
Ce este MATLAB-ul?
MATrixLABoratory este un limbaj de programare, mai exact un
interpretor pentru programarea calculelor numerice complexe.
Produs de firma MathWorks Inc.
Pachet de programe de inalta performanta pentru calcul si
analiza numerica, simulari si reprezentari grafice in
domeniul stiintei si ingineriei.
MATLAB integreaza analiza numerica cu calculul matriceal, cu
prelucrarea semnalelor si cu grafica intr-un mediu usor de
utilizat. MATLAB este construit pe baza unui soft sofisticat
de calcul matricial de analiza a ecuatiilor liniare.
Poate fi utilizate in domenii: matematica aplicata, fizica, chimie,
tehnic, finante si in orice domeniu care utilizeaza modele ce
necesita calcule numerice complexe.
Structura
Creati si folositi scripturi si functii
Sa scrieti mici programe interactive
Procesati fisiere de date
Lucrati cu vectori si matrici
Creati grafice 2D si 3D
Matlab Online
https://matlab.mathworks.com
Site Octave:
https://www.gnu.org/software/octave/
https://octave.sourceforge.io
Resurse de calcul
Operatii matematice fundamentale,
Programare,
Algebra liniara si functii matriceale,
Analiza datelor si transformatelor Fourier,
Analiza numerica neliniara,
Reprezentarea graficelor 2D si 3D,
Vizualizarea graficelor,
Import si export de documente
Elementul de baza cu care lucreaza MATLAB-ul este
matricea numerica rectangulara, cu elemente reale sau
complexe.
Programele elaborate in mediul MATLAB se salveaza in
fisiere cu extensia .m, numite M-fisiere.
MATLAB Desktop
Structura sistemului MATLAB
Exemple:
save – salveaza toate variabilele in fisierul matlab.mat
save numefisier salveaza toate variabilele/datele in
format binar, numefisier .mat
save numefisier x y - salveaza variabilele x si y in format
binar, numefisier .mat
save -ascii -tabs numefisier.ext se salveaza toate
variabilele in fisierul nume_fisier.ext cu toate datele in
format text si separate de TAB
Exportul fisierelor – functia save
Salveaz toate variabilele din workspace in fisierul tot.mat
ce are formatul .mat (binar)
>> x=[ 1 2 3]
>> y= [4 5 6]
Incarcarea unui fisier de date se face cu functia load
load nume_fisier – variabilele si valorile lor sunt stocate
in workspace si pot si folosite. Implicit se considera
extensia .mat
load masuratori.txt – datele din fisierul masuratori.txt
sunt stocate intr-o variabila numita masuratori. Orice
extensie in afara de .mat indica MATLAB-ului ca datele
sunt incarcate ca date ASCII, text.
Observatii:
1. in practica x este necunoscut, se foloseste aproximarea
δx = | Δx | / | x* | . Daca | Δx | este mic comparativ cu x*, atunci
aproximanta este buna.
2. Daca X = R, se lucreaza cu δx = Δx / x si x = x* − x.
Reprezentarea in virgula mobila a numerelor reale
>> d =[ 2 4 6 ; 6 4 2] ce va rezulta ?
Variabile
ATENŢIE ! Daca unei variabile i se da numele unei funcții
predefinite din MATLAB, functia nu mai poate fi folosita pana
cand variabila nu este stearsa.
>> sin(3)
ans = 0.14112
>> sin(3) =2
sin =
0 0 2
>> sin(3)
ans = 2
>> clear sin - sterg variabila sin si pot sa refolosesc functia sin
Functii si Comenzi pentru Variabile
Datorita faptului ca intr-o sesiune de lucru numarul de variabile
folosite poate fi foarte mare, MATLAB dispune de o serie de
comenzi si functii care sa usureze munca programatorului:
+ Adunare
- Scadere
* Inmultire
/ Impartire la dreapta sau \ Impartire la stanga
.* Inmultire element cu element
./ Impartire la dreapta element cu element
.\ Impartire la stanga element cu element
Functii de aproximare a numerelor
Aceste functii pot fi aplicate unor scalari sau element cu
element unor vectori sau matrici:
ceil – returneaza un nr. intreg rotunjit la cel mai apropiat numar
intreg spre infinit: ceil (5.2)= 6
fix - returneaza un nr. intreg rotunjit la cel mai apropiat numar
intreg spre 0: fix (-5.2)= -5
floor – returneaza un nr. intreg rotunjit la cel mai apropiat numar
intreg spre -infinit: floor (5.2)= 5
round – returneaza un nr. intreg rotunjit la cel mai apropiat numar
intreg: round(5.2)= 5
rem – returneaza restul impartirii argumentelor: rem(-5,2) =-1
mod – returneaza modulul restului impartirii argumentelor : mod(-
5,2)=1
rat – returneaza aproximarea unui nr. cu fractii rationale continue:
rat(5.2) = 5 +1/5
rats – returneaza aproximarea unui nr. cu fractii rationale
rats(5.2)=26/5
Functii de operare cu numere complexe
abs – calculeaza modulul numerelor complexe (valoare absoluta):
abs(3+4i)=5
angle – calculeaza faza numerelor complexe: angle(1+i)=0.7854
unwrap – calculeaza partea reala si imaginara a numerelor
complexe exprimate sub forma polara: unwrap(1+i) =1+i
conj – calculeaza conjugata complexa a numerelor complexe:
conj(3+i)=3-i
imag – calculeaza partea imaginara a numerelor complexe:
imag(3+5i) =5
real – calculeaza partea reala a numerelor complexe:
real(7+2i)=7
complex – construieste numere complexe daca se cunosc partea
reala si imaginara: complex(7,6)=7+6i
isreal – determina daca elementele matricilor sau vectorilor sunt
numere reale: isreal([2 3])=1
Functii putere, radical, exponentiala, logaritm
^ – ridicare la putere a numerelor sau a matricilor: 2^2=4
power – ridicare la putere a numerelor sau a matricilor
element cu element: power(2,2)=4
exp – calculeaza exponentiala: exp(2)=7.3891
log- calculeaza logaritmul natural:log(7.3891)=2
log2- calculeaza logaritmul in baza 2:log2(4)=2
log10- calculeaza logaritmul natural:log10(100)=2
pow2- calculeaza puterea lui 2 :pow2(5)=32
sqrt- calculeaza radicalul de ordinul 2 al numerelor:
sqrt(81)=9
Functii de matematica discreta
factor – intoarce un vector ce contine factorii primi ai unui nr n:
factor(39)= 3 13
factorial – calculeaza factorialul unui numar: factorial(4)=24
gcd – calculeaza cel mai mare divizor comun a doua numere:
gcd(115, 35)=5
lcm- calculeaza cel mai mic multiplu comun a doua numere:
lcm(115, 35)=805
primes- intoarce un vector ce contine numele prime mai mici decat
n: primes(7)= 2 3 5 7
isprime- determina daca elementele unui vector sau matrice sunt
numere prime: isprime([4 5 7])= 0 1 1
nchoosek- calculeaza combinari de n luate cate k: nchoosek(3,2)=3
perms- calculeaza toate permutarile posibile: perms([2,3])= 3 2 ;
23
Functii trigonometrice
Aceste functii pot fi aplicate unor scalari sau elementelor unor
vectori sau matrici. Unghiurile sunt considerate in radiani:
sin, asin, sinh, asinh – calculeaza sinusul, arcsinusul, sinusul
hiperbolic, arcsinusul hiperbolic a argumentului
cos, acos, cosh, acosh - calculeaza cosinusul, arcosinusul,
cosinusul hiperbolic, arcosinusul hiperbolic a argumentului
Tan, atan, tanh, atanh -calculeaza tangenta, arctangenta, tangenta
hiperbolica, arctangenta hiperbolica a argumentului
cot,acot,coth, acoth - calculeaza cotangenta, arcotangenta,
cotangenta hiperbolica, arcotangenta hiperbolica a argumentului
sec,asec,sech, asech- calculeaza secanta, arcsecanta, secanta
hiperbolica, arcsecanta hiperbolica a argumentului
csc,acsc, csch,acsh - calculeaza cosecanta, arcosecanta, cosecanta
hiperbolica, arc0secanta hiperbolica a argumentului
Taste ajutatoare in MATLAB
1. Tasta sageata in sus
>> y=sin(45)
>> y=sine(45)
3. Tasta ;
Stormy Attaway, Matlab, A Practical Introduction to
Programming and Problem Solving, 3rd Edition, 2013 Elsevier
Inc.
Calcul numeric-grafica-aplicatii M. Ghinea, V Fireteanu.
Mathlab. Ed. Teora 2001
http://www.mathworks.com/help/pdf_doc/matlab/getstart.pdf
http://www.mathworks.com/academia/student_center/tutorials/
launchpad.html
Documentatie Octave in format HTML
https://www.gnu.org/software/octave/doc/interpreter/
Curs 2
MATLAB
The Language of Technical
Computing
matrici/vectori/scalari
operatori relationali si logici
instructiuni de control
Curs 2
MATLAB
The Language of Technical
Computing
matrici/vectori/scalari
operatori relationali si logici
instructiuni de control
Baza structurilor de date - Matricea
Matlab-ul lucreaza numai cu un singur tip de obiecte
MATRICEA numerica rectangulara cu elemente reale
sau complexe, sau orice expresie Matlab.
Anm se acceseaza prin A(n,m) - elementele unei
matrici, elementul de la intersectia liniei n cu
coloana m (nu folositi i si j !).
Dimensiunea matricei e data de perechea (n x m).
Indicii incep de la valoarea 1.
Vectorii sunt asimilati :
vector linie – matrice cu o linie (1 x n)
vector coloana – matrice cu o coloana (n x 1).
v(k) – elementul de pe pozitia k din vector
Scalarii sunt asimilati matricilor cu o singura linie si o
singura coloana (1x 1).
Definirea matricilor
A= [1 2; 3 4]+i[5 6; 7 8] sau
A= [1+5i 2+6i; 3+7i 4+8i ]
Cu pas logaritmic
v = logspace( vmin, vmax, nr_puncte)
nr de elemente sunt distribuite logaritmic intre
[10vmin, 10vmax].
Accesarea elementelor. Operatorul :
A = diag(5:-1:1)
A= 6 0 1 0 1
1 4 1 0 1
1 0 4 0 1
0 0 0 2 0
0 0 0 0 1
Operatii matriceale
Adunarea A+ B
Scaderea A– B
Inmultirea A* B
Impartirea la dreapta A/B este echivalent cu A⋅B-1,
daca B este o matrice patratica inversabila
Impartirea la stânga A\B este echivalent cu A-1⋅B, daca
A este o matrice patratica inversabilă,
Ridicarea la putere A^B, A este matrice patratica si B
scalar sau invers, insa A si B nu pot fi simultan matrice
Transpunerea A' = AT
Operatii cu tablouri
Desfasurate dupa regulile calculului scalar, intre elemente
situate pe aceeasi pozitie. Cu exceptia operatiei de
transpunere, pentru celelalte operatii operanzii trebuie sa
aibe aceleasi dimensiuni sau unul dintre operanzi sa fie
scalar .
4 5 2
3 2 0
2 2 5
[n,m] = size(A) – returneaza dimensiunea matricei A:
n- nr de linii si m- nr de coloane
det(A) – returneaza determinantul matricei patratice A
rank(A) – returneaza rangul matricei A
inv(A) – returneaza inversa matricei patratice inversibile
A (inversa unei matrici se calculeaza si asa A^ (-1))
diag(A) – returneaza diagonala principala a matricei A.
conj(A) – returneaza conjugata matricei complexe A
Cateva functii Matlab pentru calcul vectorial
norm(v,p) – returneaza norma p a vectorului v
norm(v)- returneaza norma euclidiana(p=2) a vectorului
dot(v,w) – returneaza produsul scalar al vectorilor de
aceeasi lungime v si w. < u w >= |u| |w| * cos α
;
cross(v,w) – returneaza produsulvectorial al vectorilor v
si w, ( au cate 3 elemente)
sum(v) – returneaza suma elementelor vectorului v
length(v) – returneaza lungimea vectorului v, adica
numarul de elemente
Functii Matlab opereaza pe vectori
Aceste functii opereaza pe vectori (linie sau coloana).
Aplicate pe o matrice (m x n) - matricea interpretata in
maniera coloana x coloana - rezultatul fiind un vector
linie
max, min, sort, sum prod, median, mean, std, any,all
Interpretare linie x linie se obtine folosind transpusa:
exemplu: mean(A')'.
Operatori relationali
0 0 0 0 1 0
1 0 0 1 0 1
0 1 0 1 1 1
1 1 1 1 0 0
Ordinea operatiilor
() % paranteze
‘ ^ % transpusa si ridicare la putere
~ % negatia
* /\ % inmultirea si impartirea
+- % adunarea si scaderea
: % range
< % operatorii relationali
&& % and
|| % or
Operatori relationali si logici
Utilizati la crearea expresiilor logice
Ca date de intrare sunt acceptate doar datele numerice:
-valoarea logica „adevrat” (A) - orice numar diferit de 0
-valoarea logica “fals” (F) - valoarea 0
Datele de iesire nu pot fi decat numerele 1 sau 0,
interpretate ca fiind valorile logice A, respectiv F.
Operatorii relationali pot fi folositi pentru a compara:
function[]=ghici(nr)
zic = input(‘Introduceti un nr mai mic ca 10: ’)
while (zic ~= nr)
zic = input(‘Introduceti un nr mai mic ca 10: ’)
end
disp(‘Felicitari!’)
end
Instructiunea while
function[s]=suma(v)
s=0;
k=1;
l=length(v);
while (v(k)>0)&(k<=l)
s=s+v(k);
k=k+1;
end
end
Instructiunea break
Iesirea fortata dintr-o bucla, inainte de terminarea ei, da
controlul primei comenzi de dupa end-ul buclei - pentru
ciclurile for sau while
Se recomanda a fi utilizata daca o conditie de eroare a fost
detectata
In cazul unor cicluri imbricate comanda iesirea din ciclul
cel mai interior
Exemplu: x = [1 12 NaN 7 8]
>> for ind=1:length(x)
if x(ind)==NaN
break
end
x(ind)=rem(x(ind-1),5);
end
>> x
Instructiunea break
Iesirea fortata dintr-o bucla, inainte de terminarea ei, da
controlul primei comenzi de dupa end-ul buclei - pentru
ciclurile for sau while
Se recomanda a fi utilizata daca o conditie de eroare a fost
detectata
In cazul unor cicluri imbricate comanda iesirea din ciclul
cel mai interior
Exemplu: inlocuiesc elementele vectorului cu restul
impartirii lor la 5 .
>>x = [1 12 NaN 7 8]
>> for ind=1:length(x)
if x(ind)==NaN
breakend
x(ind)=rem(x(ind),5) end
>> x
Exemple
function p=fbreak(v)
% iese fortat din ciclul la intalnirea unui 0 in vector
%daca nu exista elemente nule, treturneaza produsul lor
n=length(v);
p=1;
for k=1:n
if v(k)==0
disp('elemente nule')
break
else
p=p*v(k);
end
end
Exemple
Scrieti functia pentru a calcula suma primilor N+1 termeni a unei
serii geometrice.
gsum=∑ ∞n=0 an = 1/1-a
Cand N -> ∞ suma converge doar daca a<1
Generalizare:
function gsum = geomInf(a,N)
if(N==inf)
if(abs(a)>=1)
error('Serie geometrica divergenta.');
else
gsum=1/(1-a);
end
else
n=0:N;
gsum = sum(a.^n);
end
Vectorizarea codului – MATLAB fara bucle !!
MATLAB rapid pe operatii cu vectori si matrici si lent cu bucle!
Exemplu:
an = n, bn = 1000-� n ptr n = 1... 1000. Calculati
psum=∑ 1000n=1 an bn
a = 1:1000; b = 1000 - a;
psum=0;
for n=1:1000 %solutie proasta
psum = psum +a(n)*b(n);
end
M files
- ruleaza foarte rapid functiile Built -In in MATLAB
%Apelez functia
mexCallMATLAB(1,&rezultat,2,arg,"conv");
%Apelez functia
mexCallMATLAB(1,&rezultat,2,arg,"conv");
mxDuplicateArray
mexErrMsgTxt
mxMalloc
mxRealloc
mxCreateString
mxDestroyArray
mxFree
mxGetCell
mxGetData
…..
Bibliografie
Stormy Attaway, Matlab, A Practical Introduction to
Programming and Problem Solving, 3rd Edition, 2013 Elsevier
Inc.
Instructiuni Conditionate
Sumarul de la pagina 136
Exercitiile din capitolul 4 : 1, 6, 10, 16, 27, 30, 31
Bucle
Sumarul de la paina 183
Exercitiile din capitolul 5 : 1, 6, 7, 8, 9, 13, 40
Exercitiile din capitolul 10 : 1, 2, 6, 7
Curs 3
MATLAB
The Language of Technical
Computing
calcul simbolic
polinoame
sisteme de ecuatii liniare
reprezentari grafice
Bibliografie
Stormy Attaway, Matlab, A Practical Introduction to
Programming and Problem Solving, 3rd Edition, 2013 Elsevier
Inc.
Instructiuni Conditionate
Sumarul de la pagina 136
Exercitiile din capitolul 4 : 1, 6, 10, 16, 27, 30, 31
Bucle
Sumarul de la paina 183
Exercitiile din capitolul 5 : 1, 6, 7, 8, 9, 13, 40
Exercitiile din capitolul 10 : 1, 2, 6, 7
Curs 3
MATLAB
The Language of Technical
Computing
calcul simbolic
polinoame
sisteme de ecuatii liniare
reprezentari grafice
Aproximari numerice
In Matlab avem urmatoarele functii de aproximare numerica.
Precizia aproximarii poate fi adaptata.
inline - definirea functiei
>> g=inline('sin(x)./(sin(x)+cos(x)+4)')
fplot(numef,lm,specl) - graficul functiei utilizator, unde lm este un
vector cu 2 sau 4 valori indicand limitele pentru x si eventual y,iar
specl este specificatorul de linie acelasi ca la comanda plot.
fminbnd(numef,xmin,xmax)- determinarea valorii minime a unei
functii pe un interval, unde [xmin,xmax] indica intervalul in care
cautam valoarea minima.
fzero(numef, x0) -calculul zerourilor(radacinilor) unei functii,
calculeaza o radacina a functiei cea mai aproape de x0.
quad(numef,a,b)- calculul integralei definite, unde a si b sunt
limitele intre care se integreaza. Putem calcula integrale duble sau
triple cu functiile dblquad(numef, ax,bx,ay,by) sau
triplequad(numef,ax,bx,ay,by,az,bz).
Precizia solutiei
In Matlab, solutiile chiar date de formule exacte sunt intotdeauna
aproximative si de aceea este bine ca inainte de a determina
solutia sa calculam precizia solutiei.
F = 6.27376373225551 % mantisa
D = 307 % exponentul (power of ten)
ans = 6.273763732256170e+307
Datele numerice duc la rezultate efective, iar datele simbolice dau
un rezultat simbolic.
Forma simbolica este un rezultat exact in timp ce forma numerica
este un rezultat aproximativ (deoarece reprezentarea numerica are
un numar infinit de zecimale dupa virgula)
Exemplu: >> a=1/2+1/3
a =0.8333
>> b=sym(1)/sym(2)+sym(1)/sym(3)
b = 5/6
ezplot(f)- graficul expresiei f=f(x) in intervalul implicit
-2*pi < x < 2*pi.
Polinoame
Notatia utilizata la polinoame este una simbolica.
Matlab utilizeaza in calcule un vector ce are ca elemente
coeficientii monoamelor.
Ex :se foloseste vectorul p=[1 0 0 0 -5 4] pentru a
reprezenta polinomul: p=x5 - 5x + 4
Avem la stanga coeficientul monomului de grad maxim.
Avem coeficient zero pentru monoamele care lipsesc (cele
de grad 4, 3 si 2).
Numarul elementelor este cu 1 mai mare decat gradul
polinomului (adica 6, 5 fiind gradul polinomului+1).
Manipularea polinoamelor
In Matlab, manipularea polinoamelor se face prin intermediul mai
multor functii aplicate asupra vectorilor coeficientilor:
w=conv(u,v) - inmultirea a doua polinoame, unde u si v sunt
vectorii coeficientilor polinoamelor care se inmultesc, iar w este
vectorul coeficientilor polinomului produs.
[c,r]=deconv(p,q) - impartirea a doua polinoame,unde c este
vectorul coeficientilor catului, iar r este vectorul coeficientilor
restului.
roots(p) -determinarea radacinilor unui polinom
w=poly(v) -determinarea polinomului ale carui radacini sunt
elementele unui vector v
polyval(vcoef,x)-determinarea valorii polinomului reprezentat de
vectorul coeficientilor vcoef, intr-un punct x. (atentie! x poate fi si
un vector!)
w=polyder(p) -derivata polinomului p , unde w sunt coeficientii
rezultati.
Manipularea polinoamelor
Deseori avem nevoie sa determinam un polinom de un anumit grad
care sa aproximeze un set de date experimentale.
Una dintre metodele de aproximare este metoda celor mai mici
patrate (the least squares method)- in care polinomul de gradul n
trebuie generat:
yn(x)= a0xn+a1xn-1+...an-1x+an
astfel incat cei n+1 coeficienti aproximeaza cel mai bine datele
masuratorilor experimentale. n=1- aproximare lineara, n=2-
aproximare patratica etc.
In Matlab acesti coeficienti sunt calculati cu functia polyfit.
Pentru evaluarea acestei aproximari putem folosi functia polyval.
Manipularea polinoamelor
w=polyfit(x,y,n)-determinarea unui polinom de un anumit grad
care sa aproximeze un set de date experimentale in sensul
metodei celor mai mici patrate, unde w este vectorul coeficientilor
polinomului cautat, vectorii x si y sunt vectorii datelor
experimentale, iar n este gradul polinomului cautat.
respectiv,
Y = b * inv(A)
Rezolvarea sistemelor compatibile determinate
In Matlab, aceasta metoda nu necesita determinarea inversei
matricei coeficienţilor.
X=A\b
respectiv,
Y=b/A
Soluia cu operatorul / este mult mai rapida decat cu formula clasica
a inversarii, acest fapt devenind observabil atunci cand matricile
sunt de mari dimensiuni. Astfel pentru matrici de ordinul 1000
soluia / a fost de 400 ori mai rapida.
Rezolvarea sistemelor compatibile nedeterminate
X=A\b
respectiv,
Y=b/A
Tipul de linie poate fi unul din simbolorile:
- continua (implicit) , -- intrerupta, : puncte, -. linie-punct
Tipul marker-ului:
+ ( semnul +), o (cerc), * (asterisc), . (punct), x (cruce),
s (patrat), d (romb), p (pentagon), h (hexagon), ^ (triunghi
cu un varf in sus), v (triunghi cu un varf in jos), > (triunghi
cu un varf la dreapta), < (triunghi cu un varf la stanga)
Culorile pot fi urmatoarele simboluri:
r (rosu), g (verde), b (albastru), c (bleu), m (mov),
y (galben), k (negru), w (alb).
Reprezentari grafice in spatiu- 3D
In Matlab pot fi reprezentate grafic in spatiul 3D: curbe, suprafete
si corpuri 3-dimensionale. O parte din functiile Matlab destinate
reprezentarilor grafice 3D:
plot3(x,y,z, speclinie) - reprezentarea liniilor in spatiu, x,y,z sunt
vectorii ce definesc punctele de reprezentat, iar speclinie este un sir
de caractere intre ` ` reprezentand tipul liniei ce uneste punctele
definite de x si y, markerul cu care se reprezinta punctele definite de
x si y si culoarea liniei, toate in aceasta ordine.
mesh(x,y,z,c) - reprezentarea grafica a suprafetelor 3D sub forma
unei retele (“mesh”)
surf(x,y,z), surfl(x,y,z,s) - reprezentarea grafica a suprafetelor
pline, cu iluminare
contour(x,y,z) , contourf(x,y,z,v) – reprezentarea grafica doar a
liniilor de contur
fill3 - reprezentarea grafica spatiala a poliedrelor
cylinder (y,n), sphere(n), ellipsoid(xc,yc,zc,rx,ry,rz) -
reprezentarea grafica a unor corpuri tridimensionale