Curs_Matlab
-
Upload
adriandascalu -
Category
Documents
-
view
217 -
download
0
Transcript of Curs_Matlab
-
7/24/2019 Curs_Matlab
1/34
-
7/24/2019 Curs_Matlab
2/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
2
ops Operators and special characters. all(), any, xor, or,
lang Programming language constructs. if, for, while
strfun Character strings. char, strcat
iofun File input/output. fscanf, fseek
timefun Time and dates. clock, date
datatypes Data types and structures. cell, class, int8, double, logical
2.Mediul de lucru MATLAB Set de faciliti care permit manevrarea variabilelor n spaiulde lucru, importul/exportul de date, dezvoltarea, manipularea, editarea i depanarea fiierelorMATLAB (.m) i a aplicaiilor MATLAB. Aceste faciliti sunt n dir.generaldin toolbox/matlab/:
general General purpose commands.
Exemple: beep, delete, dir, rmdir, dos, echo, exit, import, load, who, whos, ver, save, quit etc.
3.Handle Graphics Reprezint sistemul grafic al MATLAB-ului. Cuprinde comenzi denalt nivel pentru vizualizarea datelor bi i tri-dimensionale, procesarea imaginilor, animaie,
prezentri grafice. Permite de asemenea utilizarea unor comenzi de nivel sczut pentru crearea unorinterfee grafice GUI. Funciile grafice sunt organizate n 5 directoaredin toolbox/matlab/:graph2d Two-dimensional graphs.
graph3d Three-dimensional graphs.
Specgraph Specialized graphs.
graphics Handle Graphics.
uitools Graphical user interface tools.
4.Biblioteca de funcii matematice a MATLAB-ului Reprezint o colecie complex dealgoritmi de calcul pornind de la funcii elementare (sinus, cosinus etc.) pn la funcii sofisticate(inversarea de matrice, valori proprii, funcii Bessel, FFT etc.). Funciile matematice sunt organizate
n 8 directoare:elmat Elementary matrices and matrix manipulation. isempty(x),zeros(3)
elfun Elementary math functions.abs(),sin(),tan,sinh,exp,log, log2, log10, imag,real
specfun Specialized math functions. bessel,cross,dot,
matfun Matrix functions numerical linear algebra. trace,lu,rank,svd,eig ...
datafun Data analysis and Fourier transforms. fft, ifft,mean,var,std
polyfun Interpolation and polynomials. Legendre, convhull
funfun Function functions and ODE solvers. Ode23, ode45()
sparfun Sparse matrices. full(), sparse()
5.Interfaa de aplicaii program a MATLAB-ului (API) este o bibliotec care permitescrierea de programe n C sau Fortran care interacioneazcu MATLAB-ul. Include faciliti pentruapelarea rutinelor din MATLAB, apelarea MATLAB-ului ca main de calcul, scrierea i citireafiierelor de tip MAT .
-
7/24/2019 Curs_Matlab
3/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
3
SIMULINK este un pachet software pentru modelarea, simularea i analiza sistemelordinamice. Pot fi modelate sisteme (mecanice, electrice) liniare,neliniare, continue, discrete, hibride.
SIMULINK are interfagraficutilizator (GUI) pentrucrearea modelelor sub forma unor diagrame construite din
blocuri, pe baza unor tehnici de tip click-and-dragrealizatecu mouse-ul. Astfel, trasarea diagramelor este simpl i
intuitiv, aproape la fel de simplca trasarea acestor diagrame direct pe hrtie. n plus, se evitformularea matematic laborioas (sistemele dinamice sunt de regul descrise de ecuaiidifereniale).
Real-time Workshop este un program care permite generarea de cod C pentruschemele bloc create n SIMULINK i astfel permite rularea de aplicaii n timp real.
2. MEDIUL DE LUCRU MATLAB
Lansare sub Windows: shortcut la programul executabil
La pornire, MATLAB-ul executautomat fiierele:
matlabrc.m rezervat pentru administratorul de sistem istartup.m. (n directorul local) este destinat utilizatorilor; se pot defini setrile implicitepentru instrumenteleHandle Graphicsi se pot predefini variabile n spaiul de lucru.
Terminarea sesiunii de lucru: comanda >>quitla prompterul MATLAB sau exitdin meniul FileFereastra de comand(fereastra principal) unde Interpretorul MATLAB afieazun prompter (>>).
De exemplu, pentru introducerea unei matrice 3 x 3 se poate tasta: A = [1 2 3; 4 5 6; 7 8 10]
i la apsarea tastelor Entersau Return, MATLAB-ul rspunde cu:A =
1 2 34 5 67 8 10
Editarea liniilor de comandn fereastra principalArrow Key Control Key efectsau: Ctrl-p previous line - comanda precedenta
sau: Ctrl-n next line comanda urmatoare tastata
tergerea ferestrei de comand: >> clc %clear command..., nu terge variabile din spaiul de lucru.
Controlul afirii paginilor ecran n fereastra de comandControlul afirii paginilor n fereastra de comand: moreoff i moreon.
ntreruperea unui program care ruleaz: Ctrl-c.Comanda formatcontroleazformatul numeric (numrul de zecimale) al valorilor afiate pe
ecran (dar nu reprezentarea n memorie): File/ Preferences/Comand Window sau comanda:formatshort(4 zecimale (implicit), : 3.1416) sau format long(15 zecimale: 3.141592653589793) etc.
Suprimarea afirii rezultatelor unei linii comand- dacncheiem linia de comandcupuncti virgul; rezultatele nu sunt afiate la ecran.Exemplu:>> magic(3)ans =
8 1 63 5 74 9 2
A = magic(3);
-
7/24/2019 Curs_Matlab
4/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
4
Linii de comand lungi: ntrerupere prin trei puncte urmate de Return sau Enter pentru a
indica faptul cexpresia continupe linia urmtoare. Exemplu:s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 . . .
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;
Fereastra de comandpermite rularea comenzilor MATLAB, lansarea unor instrumente cum arfi Editor/Debugger i permite startarea toolbox-urilor.
Spaiul de lucru al MATLAB-ului (workspace)-conine un set de variabile (vectori, matrice, structuri, cells etc.) care pot fi manevrate din linia
de comand. comenzile >>whoiwhos(mai detaliat) listeazvariabilele curente din workspace.comanda >>clear % tergerea variabilelor din workspace>>clear v1 % terge variabila v1>>clear v* % terge variabilele care ncep cu caracterul v
Citirea sau scrierea unor fiiere .mat (fiiere de date Matlab) din programe externe n C sauFortran se poate face cu Interfaa de Aplicaii Program (API).
ncrcarea i salvarea din workspaceComenzile save iloadau rolul de a salva variabileledin spaiul de lucru i respectiv de a le
rencrca ntr-o sesiune ulterioar. Aceste comenzi se pot folosi i pentru a importa i exporta date.Pe platformele Windows, operaiile save, load sunt disponibile i prin selectarea opiunilorSave Workspace As, respectivLoad Workspacedin meniul File.
Formatul n care comanda savestocheazdatele poate fi controlat prin adugarea unor flag-uri(opiuni) n lista de nume de fiiere sau variabile:
-
7/24/2019 Curs_Matlab
5/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
5
-mat Utilizeazformatul binartip .MAT (implicit).
-ascii Utilizeazformatul ASCII pe 8 digii.
-ascii -double Utilizeazformatul ASCII pe 16 digii.
-ascii -double tabs Delimiteazelementele tablourilor cu tab-uri.
-append Adaugdatele ntr-un fiier .MAT existent.
Exemple:savesave f1_var [mat]
Salveaztoate variabilele n fiierul matlab.matSalveaztoate variabilele n fiierulfi_var.mat
ncrcarea unor fiiere cu date ASCII (format text)Comanda loadimportfiiere de date ASCII. Exemplu: scriem fisierul date.datconinnd:1 2 3 42 3 4 5
load date.dat %incarca i creaza variabila matrice [1 2 3 4; 2 3 4 5]
creeazo variabilcu numele date n workspace.Nume de fiiere ca iruri de caractereDacnumele fiierelor sau variabilelor cu care se lucreazsunt stocate n variabile de tip ir de
caractere, se poate folosi dualitatea comand/funcie pentru a apela loadi saveca funcii. Deexemplu
save('myfile','VAR1','VAR2') %salveaza variabilele var1 i var2 n myfile.dat A = 'myfile'; load(A)
au acelai efect cu: save myfile VAR1 VAR2 load myfile
Wildcards Comenzile loadi savepermit specificarea unui caracter special de tip wildcard (*).Exemplu: save rundata x* %salveaz toate variabilele din workspace care ncep cu x n fiierulrundata.mat.
Browser-ul Workspace (varianta grafica comenzii whos) permite vizualizarea coninutuluispaiului de lucru curent.
Exemplu: vizualizarea datelor incrcate cu load
Directorul curental MATLAB-ul pentru lucrul cu fiiere de tip .m i .mat.
3. FUNDAMENTE DE PROGRAMARE N MATLAB
3.1. Cuvinte rezervate (Keywords) ale limbajului MATLAB: 'break' , 'case', 'continue' 'if ''else' 'elseif' 'end' 'for' 'function' global' 'otherwise' 'persistent' 'return' 'switch''try' catch 'while'. Pentru listarea lor se tasteazfuncia: iskeyword
-
7/24/2019 Curs_Matlab
6/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
6
3.2. Expresii
MATLAB-ul lucreazcu expresii matematice ca i celelalte limbaje de programareInstruciunile Matlab sunt adesea de forma:
variabila=expresiesau numai:
expresie
Se evalueaz valoarea expresiei din dreapta semnului = iar valoarea obinut se atribuievariabilei din stnga semnului =.Pentru forma simplificat(a doua) valoarea expresiei se atribuie unei variabile `ans` (answer)
create imediat de Matlab.>> 1/3ans =
0.3333Expresia = niruire de operanzi i operatori; operanzii: nume de variabile, constante, nume
(sau apel) de funcii, operatorii: +, *, .*, ^, .^ etc.Matlab lucreaz n mod linie avnd la baz un interpretor (i nu compilator). Fiecare
instruciune pe rnd este trimisinterpretorului i evaluat.
3.3. O variabilMATLAB este un nume care se asigneaz (asociaz) unei zone de memorieunde sunt stocate valori. Prin numecitim/scriem valoarea din/n memorie, i folosim valoarea nexpresii. MATLAB dispune de trei tipuri de variabile: locale, globaleipersistente(locale funciei, nu
se terg la ieire, valoarea lor este reinuti regsitla un nou apel al aceleai funcii).
MATLAB-ulNU necesitdeclararea dimensiunii variabilelor, deoarece la ntlnirea unui nounume de variabilgenereazautomat variabilarespectivi alocspaiul necesar de memorie.
Tipul de datasociat numelui se poate schimba n acelai program:>> a=123 >> a='qwer' >> a=[1 2 3; 2 3 4; 3 4 5]
Numele unei variabileeste o liter, urmatde un numr orict de mare de litere, cifre sausimboluri. Din nume numai primele 31 de caractere sunt folosite pentru identificare.
MATLAB-ul este case sensitive- face distincie ntre literele mici i cele mari (n nume).Exemplu:
a = 30 >> A=30 % alta variabila diferita de a
creeazo matrice 1 x 1cu numele ai stocheaz(memoreaz) valoarea 30
Reprezentarea numerelor imaginare este realizatcu litera isau j. Exemple:
>> sqrt(-2)ans =
0 + 1.4142i
>> abs(3+4j)ans =
5
>> ians =0 + 1.0000i
>> jans =0 + 1.0000i
>> exp(i*pi/2)ans =
0.0 + 1.0000icos(pi/2) + i*sin(pi/2)
Operatori elementariOperatori aritmetici n cadrul expresiilor:+ adunare - scdere \ mprire la stnga* multiplicare / mprire ^ ridicare la putere`transpusa unei matrice sau complex conjugata unui numr complex( ) operatorul de specificare a ordinii de evaluare (cu prioritate maxim)3.4.FunciiMATLAB-ul furnizeaz un mare numr de funcii matematice elementare standard: abs,
angle, sqrt, exp, log,log10,log2, sin (argument n radiani), asin, sind (argumentgrade), asind, atan2, sinh, imag, real, rem, sign (Ex: Angle(i) => pi/2)
Existi funcii matematice avansate (funcii Bessel, gama etc.),multe dintre acestea acceptnd argumente complexe.
-
7/24/2019 Curs_Matlab
7/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
7
Pentru vizualizarea funciilor elementare se poate tasta: help elfunPentru a vedea lista funciilor avansate se poate tasta: help specfun sau help elmat
O parte din funcii (cum ar fi sqrt,sin)sunt de tipbuilt-in, fac parte din nucleul Matlab,fiind compilate i astfel ofer vitez de execuie sporit (accesul la structura funciei nefiind
permis). Unele funcii sunt implementate ca fiiereMATLAB (M-files) i pot fi modificate.
Pentru a gsi calea spre codul sursa unei funcii MATLAB M-file folosimfuncia which:>> which exp => built-in (D:\MATLAB\toolbox\matlab\elfun\@double\exp) % double method>> whichpascal=> D:\MATLAB\toolbox\matlab\elmat\pascal.m
Sunt doutipuri de fiiere M-files: script i function(pot primi i returna valori).
Cteva funcii furnizeazvalorile unor constante:
pi 3.14159265
i i j Imaginary unit, (sqrt(-1) )
epsPrecizia Floating-point 2-52 (2.2204e-016)
Realmin Cel mai mic numr real floating-point, 2-1022 (2.2251e-308)
Realmax Cel mai mare numr real floating-point, 21023 (1.7977e+308)
Inf Infinit
NaN Not a Number
Numele funciilor NU sunt rezervate i deci este posibilsuprascrierea lor.Exemplu:eps = 1.e-6 true=0 (implicit true=1)
Funcia originaleste reconstituit(tergnd variabilele noi) prin comanda:
clear eps clear true3.5.Exemple de expresiiExemple de expresii i rezultatele evalurii acestor expresii:
rho = (1+sqrt(5))/2rho =
1.6180
a = abs(3+4i)a =
5
>> exp(i*pi)ans =-1.0000 + 0.0000i
huge1 = exp(log(realmax))huge1 =
1.7977e+308
toobig = pi*hugetoobig =
Inf
Curs 23.6.Tipuri de date in MatlabTipul fundamental de dat la baza produsului Matlab este matricea. Elementele matricei
sunt de acelai tip de dat: ntreg sau real, logic, caracter, structuretc.Tipurile structuri celule de tablouristocheaztipuri diferite de daten cmpurile lor.Pot fi de asemenea dezvoltate tipuri noi de date proprii utilizatorului folosind clase Matlab
(user classes i Java classes). Sunt 15 tipuri fundamentale de date (matrice sau tablou) variind de laminim 0 x 0 elemente la n dimensionale.
-
7/24/2019 Curs_Matlab
8/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
8
Cuvintele cheie asociatetipurilor fundamentale suntscrise cu litere mici (Figura->).
Pot fi create matrice 2Dde tip double i logical fiecare
putnd fi n format FULL sauSPARSE (pentru matrice cu
marea majoritate a elementelornule pentru economie dememorie).
Tipul de dat Exemple Descrierentreg:int8, uint8,int16,uint16,int32, uint32,int64, uint64
uint16(65000)( conversie la uint16 )
Tablou de ntregi signed (int) i unsigned (uint)Pe 8, 16, 32 resp. 64 bii.
Single
(4 octei)
single(3.1 * 10^38) Tablou de numere n simpl precizie. Dpdv almemoriei: mai puin dect tipul double avnd maimicprecizie i domeniu de valori mai ngust.Domeniul 0: 1.17549e-038 to 3.40282e+038Spaierea:Eps(1)=4.7684e-007 aprox. (=2^-21)
Double(tip implicit)
(8 octei)
3.4 * 10^3005 + 6i[1 2; 3 4.1]
Tablou de numere n dublprecizie (este tipul implicitde dat). Tablourile 2D pot fi de tip sparse.Domeniul: -1.79769e+308 to -2.22507e-308 and
2.22507e-308 to 1.79769e+308Spaierea(eps): 2.2204e-016 aprox (=2^-52)
Logical
(1 octet)
x = [true, true, false, 1];
>> magic(2) => ans =1 34 2
>> magic(2) > 2ans =
0 11 0
Existdouvalori logice: 1 (true) i 0 (false).Orice valoare diferitde 0 este considerattrue (1)>> true & [0 1 4 -4 false true]ans =
0 1 1 1 0 1Tablourile 2D de valori logice pot fi sparse (rare).
Char
(2 octei/caracter)
'Dati val. pt. vector: 'mesaj='Hello'>> mesaj(2:4)ans =
ell
Tablou de tip caracter (sau ir de caracterestring);- fiecare caracter se memo. pe 16 bii (2oct) lungime.Tablou de caractere. irurile sunt reprezentate cavectori de caractere. Pentru tablouri ce conin mai mult
de un ir se preferfolosirea tipului cell arrays.Structure str.numar = 124;str.color = 'alb';str.matr = magic(3);str.logic=[true];
prin . se refera cmpul
str(2).numar = -17;
Structura este un set de cmpuri; fiecare cmp arenume propriu (numar, color, matr) i memoreazoricetip de dat. Structura are nume ex:str;Ostructursingulareste un tablou 1 x 1 de structuriaa cum un scalar numeric (ex:7) este o matrice 1 x 1;se pot forma tablouri de structuri.
Cell array a{1,1} = 12;a{1,2} = 'Red';a{1,3} = magic(4);
Tablou de celule indexate. Fiecare celul poatememora un tablou de orice tip sau mrime. Celuleletabloului se referprin acolade, ex: a{1,1} = tablou 1x1
-
7/24/2019 Curs_Matlab
9/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
9
a{2,3}='a'
b={5, 'e', [1 2;3 4]}
de double, a{1,2}=tablou 1x3 caractere, a{1,3}=matrice4x4cell2={12, 'asdf', [1 2;3 4]; 1:3,[],'aa'} (alt exemplu)
Functionhandle
ra2=@sqrtstruct(2).a1=@sincell2{4,1}=@cos
Pointer la o funcie. Cmpul a1 al structurii structmemoreazpointer la funcie.>> ra2(2) ans =1.4142>> cell2{4,1}(pi) >> >> struct(2).a1(pi/2)
ans = > -1 ans= > 1User class polynom([0 -2 -5]) Obiecte construite dintr-o clasdefinitde utilizatorJava class java.awt.Frame Obiecte construite dintr-o clasJava (vezi clase Java)
Valorile numerice sunt stocate intern, implicit n format virgul mobildouble-precision.Pentru a stoca un ntreg trebuie realizatconversie (vezi funcii de conversie) de la tipul double latipul ntreg dorit.
Ex.1. pentru a memora valoarea 325 ntr-o variabilntreagcu semn pe 16-bit:x = int16(325); % x este un tablou 1 x 1 de ntregi cu semnx1=int32(500.499) % se va memora 500 (partea fracionareste neglijat)x1=int32(500.502) % se va memora 501 (rotunjire la ntregul mai mare)
Ex.2.Tablou de valori logice
>> val_log=true $ este un tablou 1x1 de valori logice>> a = [true, true, false, true, false] $ a este tablou 1 x 5 de val. logice
a =1 1 0 1 0
b = [2.5 6 .7 9.2 inf 4.8];isfinite(b)ans => 1 1 1 0 1
d=magic(3)8 1 63 5 74 9 2
>> d>=5ans =
1 0 10 1 10 1 0
Ex.3.Tablou 1D, ir de caractere, 1 x 14 numit: pr_nupr_nu =Marius Giurgiu
- n workspaceapare:Name Size Bytes Classpr_nu 1x14 28 char
Tablou 2Dde caractere sau tablou de iruri de caractere de lungimi egale:>> nume= ['Marius Giurgiu ' ;'Mircea Bolboaca'] % s-a adugat un blank dupGiurgiu pt. lungimi egalenume =Marius GiurgiuMircea Bolboaca
>> nume(2, 7:15) % linia 2 coloanele 7:15ans =
BolboacaEste incomodde a lucra cu iruri de lungimi egale n tablouri de caractere. Se poate trece la
tipul cell arraycare permite iruri de lungimi oarecare. Conversia se face cu funcia cellstr:>> cell_array1=cellstr(nume)cell_array1 = { 'Marius Giurgiu' , ...
'Mircea Bolboaca' }>> cell_array1{1}ans =Marius Giurgiucell_array1{1}(1)
>> cell_array1{2}ans =Mircea Bolboaca>> cell_array1{2}(2:4) %identific cell cu { }ans = % apoi in tablou refer cu ( )
-
7/24/2019 Curs_Matlab
10/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
10
ans => M irc
Ex.4. Structuri (tablou de cmpuri cu nume)Construirea unui tablou de structuri 1x1 (structursingular) prin asignare de date fiecrui
cmp n parte:student.nume = 'Giurgiu';student.prenume = 'Marius';
student.note = [9 7 10; 8 9 10; 9 8 4];In continuare se poate aduga a doua structur=> tablou de structuri:student(2).nume='Botean'student(2).prenume='Tudor'student(2).note=[4 8; 9 9; 10 9]
Accesarea datelor n structur:Pentru afiare n fereastra de comenzi tastm:>>student(1) % sau student(2)ans =
nume: 'Giurgiu'prenume: 'Mircea'
note: [3x2 double]
>> student(1).noteans =
9 7 108 9 109 8 4
>> student(2).note(3,1)ans =
10
Exemple:Cell arraysTabloul(matricea) de celuleeste folosit la stocarea indexata datelor de tipuri diferite. n
celulele tabloului pot fi stocate date de tipuri i mrimi diverse. Putem spune c celulele sunt
cmpuri frnume (dar indexate pentru a putea fi referite).Ex1: Urmtoarea instruciune creeazun tablou A de 2 x 2 celule:
A = {[1 4 3; 0 5 8; 7 2 9], 'Marius Giurgiu' ; 3+7i, -pi : pi/4 : pi};
Se poate iniializa individualfiecare celul:A(1,1) = {[1 4 3; 0 5 8; 7 2 9]}; %sauA{1,1} = [1 4 3; 0 5 8; 7 2 9];
% Obs: paranteze rotunde ( ) i acolade {} NU: A3{1,1} = {[1 4 3; 0 5 8; 7 2 9]}A(1,2) = {'Marius Giurgiu'}; %sau A{1,2} = 'Marius Giurgiu';A(2,1) = {3+7i}; % A{2,1} = 3+7i;
A(2,2) = {-pi:pi/4:pi}; % A{2,2} = [-pi:pi/4:pi];Dac introducem A(3,3) = {5}; se va extinde tabloul
de celule cu 4 celule vide.(clear A %Seterge A i se initializeazdin nou)
Ex2: Dacse iniializeaz: >>A{1,1} = {[1 4 3; 0 5 8; 7 2 9]} ,se obine un cell array pentru A{1,1}
se poate aduga: A{1,3} = {'abc', 'de'} i A{2,2} = [1 2 3]Extragem caracterul b: A{1,3}{1,1}(2)
Ex3: n figura alturatobservm un tablou de celule cu urmtoarele componente (celule):
-
7/24/2019 Curs_Matlab
11/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
11
aa{1,1} conine tablou de ntregi frsemn,aa{1,2} conine tablou de iruri de caractere (irurile
sunt de lungimi egale),aa{1,3} conine tablou de numere complexeaa{2,1} conine ir (1D) de numere n virgulmobilaa{2,2} conine tablou 2D de ntregi cu semnaa{2,3} tablou de celule de tipuri variate
Ex.4: Observai urmtoarele exemple:aa{1,1}={1 2 3; 2 3 4; 3 4 5}aa{1,2}={'11'; 'qwe'; 'wd45'}aa{1,3}={'11' 'qwe' 'wd45'}aa{1,4}={'11', 'qwe', 'wd45'}aa{2,3}={'text', [4 2;1 5]; [1.2 2.3;1.22 1.3], .2+5i}Exemplu - referire elemente:aa{2,3}{1,1}(2)='a' % s-a schimbat e cu a
Ex.5:WIREFRAME. Stack{1,1}(1,1)
Structura WIREFRAME cu cmpul Stack de tip cell array; se refercelula {1,1} care esteun ir de caractere => este referit primul caracter din ir.
2.OperatoriOperatorii MATLAB pot fi clasificai n trei categorii: Operatori aritmetici Operatori relaionali (comparoperanzii cantitativ) Operatori logici
*Operatori aritmetici
+ Adunare .^ Fiecare element din matrice la putere[2 3 4] .^ 2 => [4 9 16]
- Scdere ' Transpusa unei matrice reale
.* nmulire element cu elem.
[2 3] .* [10 20] -> [20 60]
' Transpusa + conjugata complexa numerelor
complexe din matrice (dacexist)./ mprire la dreapta:1 ./[1 2 3]
1.0000 0.5000 0.3333>>[1 2] . / [2 3]
0.5000 0.6667
.' Transpusa fr conjugata complex anumerelor complexe
.\ mprire la stnga: 2 .\[1 2 3]0.5000 1.0000 1.5000
* nmulire matriceal(| nm. dounumere)Amxn* Bnxp=> Cmxp
+ Plus unar A/B mprire matricealla dreapta A*B^-1
- Minus unar A\B mprire matricealla stnga A^-1 *B
: Operatorul doupuncte ^ Matrice ptraticla o putere
Operatorii aritmetici pe element (.*, ./) lucreaz cu elementele corespondente ale unor tablouri dedimensiuni egale.
Unii operatori binari lucreazcu un operand matrice i cellalt scalar. n acest caz MATLAB-ul aplicscalarul fiecrui element al matricei, ex: [2 3] 1 [1 2]
*Operatori relaionali= Mai mare sau egal Mai mare ~= Diferit de
-
7/24/2019 Curs_Matlab
12/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
12
Operatorii relaionali comparelementele corespondenteale unor tablouri de dimensiune egal.Operatorii relaionali lucreaztotdeauna element cu element. Exemplu:
A = [2 7 6; 9 0 5; 3 0.5 6]; B = [8 7 0; 3 2 5; 4 -1 7];
A == Bans =
0 1 00 0 10 0 0
Rezultatele comparaiilor sunt valori de tiplogic: 0 sau 1
>> A>=B0 1 11 0 10 1 0
CURS 3*Operatori logici
& AND (I)
| OR (SAU)
~ NOT (Negatie)
1 & 1 = 1
0 & 1 = 0
1 & 0 = 0
0 & 0 = 0
1 I 1 = 1
0 I 1 = 1
1 I 0 = 1
0 I 0 = 0
XOR(0, 0) = 0
XOR(0, 1) = 1
XOR(1, 0) = 1XOR(1, 1) = 0
Operatorii logici aplicai elementelor corespondente ale unor tablouri de dimensiuni egale.Pentru vectori i tablouri dreptunghiulare ambii operanzi trebuie saibaceeai dimensiune
O expresie care utilizeaz operatorul & (I) este adevrat dac ambii operanzi suntadevrai. n termeni numerici, expresia este adevrat dac ambii operanzi sunt nenuli.Exemplu:
u = [1 0 -2 3 0 -5]; v = [5 6 -1 0 0 7]; u &vans= 1 0 1 0 0 1
O expresie care utilizeaz operatorul | (SAU) este adevrat dac cel puin unul dintreoperanzi este logic adevrat. Pentru operanzi numerici, expresia este fals dac ambiioperanzi sunt nuli. Exemplu:
u |vans = 1 1 1 1 0 1
O expresie care utilizeazoperatorul ~ (NOT)neaglogic operandul. n termeni numerici,orice operand nenul devine nul i orice operand nul devine unu. Exemplu:
u = [1 0 -2 3 0 -5]; ~uans = 0 1 0 0 1 0
Un operand este scalar i cellalt vector: n acest caz, ca i la operatorii aritmetici,MATLAB-ul aplicscalarul fiecrui element al celuilalt operand.
u = [1 0 -2 3 0 -5];>> u | 0
ans = 1 0 1 1 0 1
v = 5 6 -1 0 0 7>> v & 4
ans =1 1 1 0 0 1
Funcii logicen plus fade operatorii logici MATLAB-ul furnizeazi funcii logice:
Funcie Descriere Exemple
xor Realizeaz sau exclusiv. Returneaz logic adevrat dacunul din operanzi este adevrat i cellalt fals. n termeninumerici, returneaz1 dacun operand este nenul i cellalteste zero.
a = 1; b = 1; xor(a,b)ans = 0
-
7/24/2019 Curs_Matlab
13/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
13
all Parametrul este vector: returneaz1 dac toate elementelevectorului sunt adevrate sau nenule.
Parametrul este matrice(acioneazpe coloane):
u = [0 1 2 0]; all(u)ans = 0
A = [0 12; 3 50]; all(A)ans = 0 1 0
any Parametrul vector: returneaz 1 dac cel puin unul dintreelementele argumentului este adevrat (nenul); n cazcontrar returneaz0.
Parametrul matrice(acioneazpe coloane)
v = [5 0 8]; any(v)ans = 1>> any([5 08; 2 04])ans = 1 0 1
Alte funcii: isnan, isinf, find.
3.Prioritatea operatorilorSe pot scrie expresii care folosesc orice combinaie de operatori aritmetici, relaionali i logici.
a) ordinea de evaluare a expresiei este datde nivelele de precedena/prioritateb) n cadrul fiecrui nivel de precedenoperatorii au aceeai prioritate i se evalueazde la
stnga la dreapta.c) prioritatea maximo au parantezele:
1. Paranteze ()2. Transpusa (.'), putere (.^), transpusa cu complex conjugate ('), matrice la putere (^)3. plus unar (+), minus unar (-), negare logic(~)4. nmulire (.*), mprire la dreapta (./), la stnga (.\), nmulire de matrice (*),mprire matrice dreapta (/),mprire matrice stnga (\)5. adunare (+), scdere (-)6. operatorul doupuncte (:)7. mai mic (=),test egalitate (==), test diferit (~=)8. i (&)9. sau (|)
Exemplu: observai scrierea compacti puterea operatorilor n Matlab:Sse evalueze (frciclri) expresia A(r,) pentru: r=0:0.01:2.5 i =[0.03, 0.05,0.1,0.2,0.5]
ze=[0.03 0.05 0.1 0.20 0.50]'; r=0:0.005:2.5;X=sqrt( ((2*ze*r).^2+1) ./( (ones(size(ze))*(1-r.*r).^2) + (2*ze*r).^2) );plot(r,X)
La numrtor: prin ze*rse nmulete:o matrice coloanze (transpune) cu o matrice linie r;
apoi se ridicla ptrat fiecare element din matrice.
La numitor: primul termen 22 )1( r rezult vector iar al doilea22
4 r matrice => avem nevoie de matrice i n primul termen.size(ze) returneaz perechea de valori (5,1); acesta este argument
pentru funcia ones() care creazmatricea cu 5 linii i o coloande valoriunitare.
>> ones(size(ze))ans =
1111
ones(size(ze))*(1-r.*r).^2
Sunt generate 5 linii identice care vor fi adunate cumatricea (2*ze*r).^2 (n care fiecare linie (r) senmulete cu un alt zeta)ze*r => matrice 5x501X => matrice 5x501
2222
22
4)1(
41),(
rr
rrA
+
+=
-
7/24/2019 Curs_Matlab
14/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
14
1>> [1 1 1]' * [4 5 6 7 8]
ans =4 5 6 7 84 5 6 7 84 5 6 7 8
plot(r,X) => 5 grafice, pentru abscisa (vectorul) r setraseazfiecare linie din matricea X.
4. Instruciuni pentru controlul derulrii unui program4.1. if - end, if else - end, if - elseif else - end, if elseif - end
- executun grup de instruciuni pe baza unei condiii logice.- dupelseif poate snu mai existe un else
if expresie_logicagrup de instructiuni
end
...i=2;j=input('j= ');ifi+j>0
fprintf('i+j=%7.2f\n',(i+j)^2 );
endif expresie_logica
grup1 de instructiunielse
grup2 de instructiuniend
- - - - - - - - -ifx>0
fprintf('x este numar pozitiv\n')else
fprintf('x negativ sau zero\n')endifa>b
disp('a>b')elseifab'a>b'else
'a mai mic sau egal cu b'end
n=input('n= ');ifn < 0 %Daca n este negativ afisaza un mesaj de eroare.
disp('valoarea furnizata trebuie sa fie pozitiva');elseif rem(n,2)==0 %Daca n este pozitiv si par, imparte n la 2.
A = n/2; disp('n par');else %Daca n este pozitiv si impar incrementeaza si imparte la 2
A = (n+1)/2; disp('n impar');enda=input('a= ');ifa
-
7/24/2019 Curs_Matlab
15/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
15
4.2.switch, case otherwiseswitch expresie %scalar sau sir de caractere/string
case valoare_1grup 1 instructiuni
% se executpentru: expresie== valoare_1 =>truecase valoare_2grup 2 instructiuni
% se executpentru: expresie== valoare_2 =>truecase valoare_n
grup n instructiuni
otherwise
grup n+1 instructiuni% se executdacexpresienu egaleaznici un caz
end
%switch poate rezolva mai multe condiii ntr-un%singur caz prin folosirea acoladelor { } (cell array).
var=input('var= ')switch var
case 1disp('1')
case {2,3,4}disp('2 sau 3 sau 4')
case 5disp('5')
otherwisedisp('altvaloare')
end
exemplul 2switch var1
case -1disp('minus unu');case 0
disp('zero');case 1
disp('unu, pozitiv');otherwise
disp('alta valoare');end
sircar = input('Tastati o culoare: ','s'); % descriptor spentru citire sirswitchsircar % valoarea citita este sir de caractere
case'rosu'disp('ati tastat rosu');case'galben'
fprintf('ati tastat %s\n', sircar);case{'albastru','violet'}
disp('ati tastat albastru sau violet');otherwise
disp('ati tastat altceva decat rosu, galben, albastru, violet');end
Spre deosebire de limbajul C, daca un caz este adevrat i acesta se execut, se sare dupend frafolosi instruciune Break. In C se executimplicit i cazurile urmtoare (daca nu existinstr. break).
4.3. Instruciunea de ciclare for- Executo instruciune sau un grup de instruciuni de un numr cunoscut dinainte de ori:
-
7/24/2019 Curs_Matlab
16/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
16
===
n
inx
iXVAR1
212 )][(
for index = start:increment:end
grup de instructiuniend
x=3:8; %sau x=[3 4 5 6 7 8];suma=0; %initializam variabila sumafori=1:length(x)
suma=suma + x(i);
endsuma % se afisaza 33%sau: sum(3:8) sum([3:8])
x(1)=1; %se adaugvalori in vect. x(i)for n = 2 : 6
x(n) = 2 * x(n - 1);end%rezulta: 1 2 4 8 16 32
for k=1:2:n. . .
end
n=100; %increment 1.25
mu = sum(x)/length(x); %vectorizarevariance2=sum(( x-mu).^2)/length(x);
sau: sum((x-mu).*(x-mu))sau: (x-mu)*(x-mu)
Calcule cu matrice
%Numrare elemente ai pozitive din vectora=input(`Tastati sir numeric= `);
%exemplu [5 -3 1 -9 4 1]contor=0;fori=1:length(a)
Suma elementelor aijde pe DP (i = j) folosind un ciclu for
a=[2-1 3 ;-9 41; 2 2 2]sum=0;nc= length(a(1,:)) %lin 1 i toate coloanele
-
7/24/2019 Curs_Matlab
17/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
17
ifa(i)>0contor=contor+1
endenddisplay(contor)
fori=1:ncsum=sum+a(i,i);fprintf('i=%d j=%d a=%.3f\n',i,i,a(i,i));
endsum
Se citete matricea ptratica=[1 2 34; 2 3 4 5; 3 4 5 6;4 5 6 7]. Se parcurg elementele matricei unucte unu i se calculeazsuma elementelor pozitive situate deasupra DP i deasupra DS.
Fiecare element nsumat va ndeplini simultan trei condiii:Condiii de poziie n matrice: 1) i
-
7/24/2019 Curs_Matlab
18/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
18
i=1; %initializam indicele in_e= length(x)whilei
-
7/24/2019 Curs_Matlab
19/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
19
while expresie logica
bloc de instructiuni
end
switch expresie
% scalar sau sir de caractere/stringcase valoare1
grup1 instructiuni
case valoare2grup 2 instructiuni
. . .case valoare n
grupn instructiuni
otherwise
grup n+1 instructiuniend
Sse traseze schema logicasociatprogramuluide mai jos: conine decizii multiple n corpul ciclului for
-
7/24/2019 Curs_Matlab
20/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
20
Programul contorizeaznumrul deapariii n irul xa valorilor 1, 2, 3 i restulde valori.
x=input('Tastati un sir de valori x=[...] ');v1=0; v2=0; v3=0; v=0;fori=1:length(x)
ifx(i)==1
v1=v1+1;elseifx(i)==2
v2=v2+1;elseifx(i)==3
v3=v3+1;else
v=v+1;end
endfprintf('v1=%d v2=%d v3=%dv=%d\n',v1,v2,v3,v);
Observai:
1.Asemnarea deciziei multiple realizatecu if-elseifi cea realizatcu switch-case2. S-au compus schemele logice pentru fori if-elseif (sau switch)3.Linia ntreruptmrginete corpulinstruciunii de ciclare for i coninedeciziile multiple4. Rescriei exemplul folosindinstruciunea switch-case
5. Definirea unei funcii n Matlab5.1. Sintaxa definirii unei funcii:
in1, in2,inn sunt argumente de intrare(parametri formali)ou1,out2,outm sunt argumente de ieirein1, in2, ou1,out2, sunt variabile localeai sunt parametri actuali sau efectivi care auvalori concrete la momentul apelului funcieiriprimesc valorile de la outi
1. Funciile sunt subprograme (apelate) care folosesc parametri de intrare (in1, in2,) i parametride ieire (ou1,out2,)pentru a comunica cu programul apelant, cu alte funcii sau cu fereastra decomenzi.2. Definiia funciei este salvatntr-un fiier ce poartacelai nume cu cel al funcieisau altul iextensia .m In cazul n care numele funciei este diferit de al fiierului se folosete numelefiierului la apel. Calea spre fiier trebuie setatSet Path dacfiierul nu se afln directorulcurent sau n lista de ci spre directore.3. Apelul funciei este: nume_fun(a1, a2,,an) unde a1, a2, ,ansunt parametri efectivi (actuali)avnd valori concrete/cunoscute (la momentul apelului).4.Valorile parametrilor efectivi sunt transferate parametrilor formali n ordine de la stnga la dreap.
-
7/24/2019 Curs_Matlab
21/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
21
===
n
inx
iXVAR1
212 )][(
5. O funcie poate fi apelatde mai multe ori; la fiecare apel, prin parametri de intrare, se aplicacelai algoritm de calcul unor date de intrare diferite.6. Folosirea funciilor permite modularizarea programului (anumite sarcini de calcul s fiencapsulate)7. Funciile folosesc variabile locale funciei, variabile care exist numai pe timpul execuieifunciei: n fun_demo1: i, x; la ieirea din funcie variabilele locale se pierd (elibereazmemoria).8. Variabilele locale sunt independente de variabilele cu acelai nume din programul principal
(apelant) sau din alte funcii.9. Funcia poate fi apelatdin linia de comand, dintr-o altfuncie sau dintr-un fiier script.10. Funciile pot snu aibargumente de intrare sau argumente de ieire.11. Pentru funcia apelatdintr-o expresie, apelul se nlocuiete cu valoarea returnat.
5.2. EXEMPLE1) Un parametru de intrare i unul de ieirefunction y = average(x)
% AVERAGE media elementelor vectoruluiy = sum(x) / length(x);end
x = parametrul de intrare este vectory = parametrul de ieire este scalarFuncia average este salvatn fiierul average.m
APELURI valide ale funciei:
v=[1 2 3 -3 5];ave=average(v)
v=[1 2 3 -3 5];average(v)ans = 1.6000
average([1 2 3 -3 5])ans =
1.6000
2) 2 parametri de intrare i un (1) parametru de ieirefunction z=xplusy(x,y);z=x+y;end
x,y doi parametri de intrarez un parametru de ieire
Se salveazdefiniia funciei ntr-un fisier cu numelexplusy.mAPELURI valide ale funciei:
a=1b=2scal1=xplusy(a,b)
a=[1 2 3; 3 4 5]b=[7 8 9; 2 0 4]matr1=xplusy(a,b)
a=7b=[7 8 9; 2 0 4]matr2=xplusy(a,b)
scal2=xplusy(1,2) matr1=xplusy([1 2 3; 3 4 5],b) matr2=xplusy(7, [7 8 9; 2 0 4])3) 2 par. intrare, nu sunt parametri de ieire
functioncomp(a,b)ifa>b
'a>b'elseifa>comp(4,6)
4) un parametru intrare, 2 parametri de ieirefunction[s,sp]=sumapoz(x)%returneaza suma si suma elem >0
s=0;sp=0;fori=1:length(x)s=s+x(i);ifx(i)>0
sp=sp+x(i);%insumare%x(i)>0
endend
endApel:[suma, sp]=sumapoz([1 5 -3])
Parametrii formali ai functiei
-
7/24/2019 Curs_Matlab
22/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
22
pot avea acelasi nume (sp) cuvariabilele din seciunea careapeleaz
5. Instruciunea breakdeterminntreruperea ciclrii for sau while i salt la prima instruciunedupinstruciunea enda ciclrii.6. Instruciunea continuetrece controlul sau realizeazsalt la prima instruciune din urmtoareaiteraie n cadrul ciclrilor for sau while.
7. Instruciunea return provoac ieirea forat din funcie (funcia apelat f_A) i ntoarcerea npunctul de apel din funcia apelantf_An (care a apelat funcia f_A).
functionout=fun_demo1(in)i=1;whilei < in
x(i)=rand(1);ifx(i)>0.95
's-a executat break'break; % intrerupe ciclul while
endi=i+1;
endout=x; %salvare x in out
idisplay('exemplu cu break')end%incheiere functie cu end optional
functionout=fun_demo2(in)i=1;whilei < in
x(i)=rand(1);ifx(i)>0.95
out=x; %salvam x in outi'return'return; %iesire din functie
endi=i+1;
endout=x;display('exemplu cu return')i
Apel: a=fun_demo1(1.e2); Apel: b=fun_demo2(1.e2);
(continuare funcii)
1. Se poate defini o funcie n corpul altei funcii:
Bulina roie => breakpointSgeata alb=> punct de apel funcieSgeata verde => poziie curentde rulare
>> stat3([1 2 3 4]) %apel functie stat3% media se calc. n altfuncie (ave)
2. Pentru evaluarea unei formule se pot folosifuncii inlinepentru a evita definirea unei funcii.function y=f_expresie(x) % se creaza un nou fisiery=x+sin(x)+x.^2;
Ex1: un argument: xfun_ex=inline('x+sin(x)+x.^2');
Sunt permise apelurile:Rez1=f_expresie(2.2) Rez_1=fun_ex(2.2)Rez2=f_expresie([2.2 3 5]) Rez_2=fun_ex([2.2 3 5])
Ex2: mai multe argumente: a, om, texp_comp=inline(a*exp(j*om .*t))>> exp_comp(1, 3, 0:.1:0.4)ans = 1.0000 0.9553 + 0.2955i 0.8253 + 0.5646i 0.6216 + 0.7833i 0.3624 + 0.9320i>>plot(0: .1 :2*pi, exp_comp(3, pi, 0: .1 :2*pi) ) graficul:
0 1 2 3 4 5 6 7-3
-2
-1
0
1
2
3
-
7/24/2019 Curs_Matlab
23/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
23
CURS 53.Variabile globaleVG permit folosirea unor variabile n corpul funciilor frca acele variabile sfie pasate
prin parametri n acele funcii.Comunicare numai prin parametri
Spaiul de lucru (workspace) Definiie fun_1a=1
b=2c=5re=fun_1(a,b,c)
functie y=fun_1(pa,pb,pc)
.y=pa+pb+pc;
Variabilele a,b,c i-au transferat valorile parametrilor formali pa,pb respectiv pcValoarea calculatytransfervaloarea variabilei re
Comunicare prin parametri i variabilglobala=1b=2global vgC;vgC=55re=fun_1(a,b)
functie y=fun_1(pa,pb).global vgC;..y=pa+pb+ vgC;
Variabilele a,b i-au transferat valorile parametrilor formali pa respectiv pbVariabila vbC este declaratglobaln funcia apelanti apelat(fun_1) deci poate fi folositnexpresii n funcia apelatfun_1
Variabile persistente sunt locale funciei, nu se terg la ieirea din funcie, valoarea loreste reinuti regsitla un nou apel al aceleai funcii.
3.
Fiiere script Matlab sau macrouri
Scriptul Matlab este un segment de program Matlab salvat ntr-un fiier numefis.m. Execuiasegmentului de program se obine prin apelul numelui fiierului numefis (frextensie) n linia de comand,n funcii sau n alte fiiere script.
Dupexecuia fiierului script variabilele locale rmn n spaiul de lucru al aplicaiei (spredeosebire de funcie).
Un program Matlab are forma fiierelor script sau fiierelor function ambele avnd extensiam.
Din fiierele de funcii sau fiierele script se pot apela alte funcii sau fiiere script.Se pot face de asemenea apeluri recursiveadico funcie sse apeleze pe sine sau dintr-un fiier
script sse apeleze acelai fiier script.
Grafic2D n MATLAB
1. Funcii pentru reprezentri grafice 2D n MATLABsubplot(abc) divizeazgraficul a=numr linii, b=numr coloane, c=poziia curentn matrice numrnd pelinii: a11, a12 a21plot(y) realizeazreprezentri grafice n coordonate liniare
a) y este vector => reprezintvalorile lui y n funcie de numrul de ordine al fiecrui element din vectorb) y este matrice m x n => plot(y) reprezintn curbe cte o curbpentru fiecare coloana matricei
-
7/24/2019 Curs_Matlab
24/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
24
x=0 : pi/100 : 4*pi %vector real de 401%elemente
y=sin(x);plot(y)
Exemplux=0 : pi/100 : 3*piy=sin(x);y1=sin(x+pi/3);
ma(:,1)=y; %generare coloana 1ma(:,2)=y1; %generare coloana 2plot(ma);
c) dacy este un vector de valori complexe va reprezenta plot(real(y), imag(y))x=0 : pi/100 : 3*pi %vector realy=sin(x);z=fft(y); % transf. Fourier rapida calculeazvectorul z
% avnd length(y) valori complexe(simetrice)subplot(121) % linia 1, coloana 2, pozitia 1 devine curentaplot(z)subplot(122) % linia 1, coloana 2, pozitia 2 devine curenta
plot(real(z), imag(z)) % grafic identic cu plot(z)
Exemplu cu numere complexe:
Profilul unei fore periodice este de forma:
t2
+t+t2
=f(t) 00 04cos5.1cos3cos1
Se traseazgrafic fora i se pun n evidencomponentele armonice aleprofilului (amplitudinea i argumentul fiecrui cosinus):w0=10;t=0:0.01:5;f1=1*cos(w0/2*t)+3*cos(w0*t)+1.5*cos(4*w0/2*t);subplot(211); plot(t,f1)Y1 = fft(f1); %Fast Fourier Transformsubplot(212); plot(abs(Y1(1:length(Y1)/4) ));
Y1:
plot(x,y)a) reprezintgrafic vectorul y (ordonate) n funcie de vectorul x (abscise)b) x vector, y matrice => coloanele matricei y vor fi reprezentate n funcie de vectorul x
plot(x1,y1, x2,y2) => n acelai grafic sunt reprezentate curbele (x1, y1) i (x2, y2)
Reprezentare n coordonate logaritmice i semilogaritmiceloglog(x,y) scaleazambele axe folosind logaritmul n baza 10 (10 -1, 100 , 101, 102,sunt echidistante)semilogx(x,y) scaleazlogaritmic axa x (10-1, 100 , 101, 102,sunt echidistante pe x)semilogy(x,y) scaleazlogaritmic axa y (10-1, 100 , 101, 102,sunt echidistante pe y)
x=0 : pi/100 : 10*pi%vector real de 1001 elemente
y=sin(x);semilogx(x, y)
-
7/24/2019 Curs_Matlab
25/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
25
subplot(312);semilogx(abs(Y1(1:length(Y1)/4) ));subplot(313);semilogy(abs(Y1(1:length(Y1)/4) ));
Reprezentarea discreta datelorx=0 : pi/10 : 3*pi %vector real de elementey=sin(x);stem(x, y)
Reprezentare n treptex=0 : pi/10 : 3*pi %vector realy=sin(x);stairs(x, y)
Grafic de bare
x=0 : pi/5 : pi %vector realy=sin(x);subplot(1,2,1)bar (x,y)subplot(1,2,2)bar (y)
Reprezentare n coordonate polare(u,R)u=0 : pi/10 : 2*pi;R=sin(u) .*cos(u);polar(u,R);
fplot(nume_fun, limite, n) reprezintgrafic o funcie n limite specificate:
functiony=f2(x) % definitie functie; x poate fi vectory=sin(x) .* x; % salvam functia f2() in fisierul f2.m
fplot('f2', [-22 44], 1000); %reprezintgrafic funcia f2 definitn fiierul f2sau:
[x,y]=fplot('f2', [-22 44], 1000); %NU reprezitfunctia ci nuami returneaza vectori abscise i ordonate n [x, y]plot(x,y); grid;
Funia fplot returneaz1000 abscise i 1000 ordonate n vectorii x i y. Apelm plot(x,y) pentru reprezentare grafic.comet(y) i comet(x,y) realizeazreprezentare dinamica unei curbe 2D printr-un punct care traseazcurba.
1. Tiprire cu format prin folosirea funcieifprintfx=input('vector x= ');fori=1 :length(x)
fprintf('element x(%3d)=%12.3f\n', i, x(i) );
end% s-a folosit \npentru trecerea cursorului pe randulurmator la inceput dupfiecare execuie a funciei fprintf
Folosim:%d pentru tiprire valori ntregi (decimal)%s pt. tiprire iruri de caractere (string)
%f pentru tiprire valori reale (float)%12.3f valoarea realse tiprete ntr-un spaiu de12 caractere dintre care 3 sunt alocate zecimalelor iarrestul punctului zecimal i prii ntregi.
n cadrul parametrului actual de tip ir de caractere a funciei fprintf, pot fi folosite caractere de formatare atextului (caractere de evitare):\n Linefeed LF + carriage return CR = se trece (scrie) la
inceputul liniei urmtoare\t Tab (se sare un numr de
caractere/pozitii de scriere)\r carriage return \b Backspace (inapoi un caracter)Folosim \\pentru a tipri un caracter backslash i %%pentru tiprirea unui caracter procent.
-
7/24/2019 Curs_Matlab
26/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
26
pentru a tipri un caracter apostrofTiprire n formtabelarla ecran:x=input('medii x= ');s=0; m=0; ma=0;nivel={'slab', 'mediu', 'bun'}; %cell array conine 3 iruri de caractere de lungimi diferitefprintf(' \t\tNote studenti\n'); %doutaburi (\t) i trecere la inceputul rndului urmtor (\n)fprintf(' \t\t----------------\n');fori=1:length(x)
ifx(i)
-
7/24/2019 Curs_Matlab
27/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
27
2. Calcule cu polinoame
In Matlab polinoamele sunt reprezentate prin vectorul coeficienilor polinomului luai n ordinedescresctoare a puterilor.p1=[1 2 3] ; %vector coef.x=[-18: .2 : 22];%argumentey=polyval(p1,x);
plot(x,y);
32)( 2 ++= xxxp
Funciapolyvalevalueazun polinom(dat prin coeficienii polinomului p1) la
abscisele din x (parametrul al doilea).
Adunare i scdere de polinoameSe adun/scad element cu element coeficienii de acelai ordin. Vectorii coeficienilor trebuie saibacelainumr de elemente: p1=[1 2 3], p2= [0 3 4] => p_suma=p1+ p2 -> [1 5 7]
Inmulire i mprire de polinoame cu funiile conv i deconv:prod(x)=p1(x)*p2(x)
)(2)(1
)(xp
xpximp =
)1)(32()( 2 ++= xxxxprod
1322)(
++=
xxxximp
Exemplu Matlab:p1=[1 2 3];
p2=[1 -1];prod=conv(p1,p2)[cat, rest]=deconv(p1,p2)p1_ini = conv(p2,cat) + rest
prod = 1 1 1 -3cat = 1 3rest = 0 0 6p1_ini =1 2 3
nmulirea a doupolinoame date prin vectorii coeficienilor:Comparai coeficienii obinui prin programul scris i prin apelul funciei conv()
(gradul polinoamelor p1,p2 scrise prin coeficieni este length(p1)-1 respectiv length(p2)-1;gradul polin. produs p12 este length(p1)+length(p2) - 2 i se aloclength(p1)+length(p2)-1 pozitii n p12).p1=[1 2 3 -4];p2=[1 -1];p12= zeros(1,length(p1)+length(p2)-1)fori=1:length(p1)
forj=1:length(p2)p12(i+j-1)= p12(i+j-1)+p1(i)* p2(j);
endendp12 %afisare coef. determinati prin programprod=conv(p1,p2) %afisare coef. determ prin fun. conv()
Descompunerea n sumde fracii simple a raportului a doupolinoameA(x) i B(x)Fraciile conin la numitor polinoame de ordinul unu.
)(... )()(
)2()2(
)1()1(
)()(
xknpx
nr
px
r
px
r
xB
xA ++++= unde numim r(1) ,, r(n)reziduuriiarp(1) ,, p(n)poli.
Se folosete funcia Matlab:[r,p,k]=residue(A,B)
Funcia se poate apela i n forma:[A,B]=residue(r, p, k) caz n care sunt returnai coeficienii polinoamelor A i B.Sse studieze funcia G(s):
1214
3
2
)(++++=
xx
xxsG
num=[1 4 1]; den=[1 0 2 1];>> roots(num) % rdcini ec.polinom (zerouri)ans = -3.7321
-0.2679
>> roots(den) % radacini numitor (poli)ans = 0.2267 + 1.4677i
0.2267 - 1.4677i-0.4534
Tratarea expresiei )()(
xB
xA ca funcie de transfer (tf):
>> sist=tf(num,den)Transfer function:s^2 + s x + 1-------------
-
7/24/2019 Curs_Matlab
28/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
28
s^3 + s x + 1
Calcul poli, zerouri i trasare figura alturatpzmap([1 4 1],[1 0 2 1]) sau:pzmap(sist)
- cerculeele zerouri sunt rdcinile polinomului de lanumrtor.- cu x sunt notate rdcinile de la numitor polii.
Descompunere n fracii simple a funciei G=num/den :>> [r,p,k]=residue(num,den)
Sirul reziduurilor r(1), r(2), r(3):r =
0.6162 - 1.2316i0.6162 + 1.2316i
-0.2324Obs: 2 reziduuri complex conjugate
Sirul polilor p(1), p(2), p(3):p =
0.2267 + 1.4677i0.2267 - 1.4677i-0.4534
Obs: 2 poli complex conjugai
Rest:k =
[]
-0.4534)(-0.2324
1.4677i)0.2267(1.2316i0.6162
1.4677i)0.2267(1.2316i-0.6162
)3()3(
)2()2(
)1()1(
1214
)()(
3
2
+
+++++ ++=++==
xxxpx
r
px
r
px
r
xx
xxxB
xA
3. GRAFICE 3D
1. Curbe spaiale(3D) sintaxa funciei plot3()
plot3(x,y,z)plot3(x,y,z, tip-linie);plot3(x1,y1,z1, tip-linie1, x2,y2,z2, tip-linie2, )plot3(X,Y,Z)
Exemplu:t=0 : pi/40 : 10*pi;plot3(sin(t), sin(t) .*cos(t), 2*t); grid on;
Doucurbe spaiale:plot3(sin(t), sin(t).*cos(t), 2*t, sin(t), cos(t), 2*t);
Grafic spaial dinamic - un punct traseazdinamic curbacomet3(sin(t), sin(t).*cos(t), 2*t);
2.Generarea unei reele mesh, n plan[X, Y]=meshgrid(x,y) sau [X, Y]=meshgrid(x)
Funcia meshgridfolosete domeniile 1D specificate prin vectorii x i y pentru generarea tablourilor X i Y .Aceste tablouri sunt folosite la evaluarea funciilor de douvariabile z=f(x,y) prin funciile Matlab mesh isurfcu reprezentare 3D.
>> [X,Y]=meshgrid(0:4, 6:2:10)X =
0 1 2 3 40 1 2 3 40 1 2 3 4
Y =6 6 6 6 68 8 8 8 8
10 10 10 10 10
Domeniu dreptunghiular:-primul vector 0:4 desfoarvalorile pe linie sau pe axa x ncadrul matricei X (attea linii cte valori sunt pe direcia oy).-vectorul 6:2:10 desfoarvalorile pe coloane sau axa y n cadrul
matricei Y (attea coloane cte valori sunt pe direc
ia ox
).Cele doumatrice X i Y au acelai numr de lin. i col.PERECHILE (X(i,j), Y(i,j)) formeazreeaua de puncte dindomeniul 2D oxy, dreptunghiular, de definiie al funciei z=f(x,y)
>> [X,Y]=meshgrid(3:6)X =
3 4 5 63 4 5 63 4 5 63 4 5 6
Y =3 3 3 3
Domeniul este ptrat.
Perechile de puncte din plan sunt de forma ( X(i,j), Y(i,j) ):(3,3), (4,3), (5,3), (6,3), (3,4), (4,4) etc.
-
7/24/2019 Curs_Matlab
29/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
29
4 4 4 45 5 5 56 6 6 6
3. Reprezentare suprafee wireframe cu funcia mesh isuprafee netede cu funciasurf
Matlab reprezint suprafee prin cote z = valori ale funciei
pentru o reea de puncte din planul ox-y. Punctele de cotz adiacentesunt conectate prin segmente colorate de dreapt(wireframe) n cazulfunciei meshi coloreazfee pentru comandasurf.
Fie o funcie de forma z=f(x,y):z=sin(ra)/raunde ra=sqrt(x^2+y^2)Se creazreeaua de puncte din planul x-y:
[X,Y]=meshgrid(-12:.4:12, -12:.4:12); %sau meshgrid(-12: .4: 12);ra=sqrt(X .^2+Y.^2); %ra este matrice de valori intermediare
%matricele X i Y sunt ridicate la ptrat element cu element,%adunate, apoi radicalii din fiecare element salvai n matricea ra
Z=sin(ra) ./ra; %calcul valori funcie n matrice Zsubplot(211);h=mesh(X,Y,Z); % heste handle la funcia mesh
grid on;subplot(212);s2=surf(X,Y,Z); % vezi figura alturat->
%fiecare matrice X,Y,Z conine coordonatele x, y resp. z aletuturor punctelor din grafic.get(h) % returneazsetul de proprieti ale graficului asociatset(h, 'LineWidth', 1) %set(h, ) se impune limea liniei detrasare a graficului sau alte proprieti ale graficului asociat.
title('Functia sinc cu surf');xlabel('axa x');ylabel('axa y');text(0, 0, 0.5 ,vrf);
Exemplul 2:[X,Y]=meshgrid(-10:16);Z=sqrt(X .^2+Y .^2);surf(X,Y,Z);
-
7/24/2019 Curs_Matlab
30/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
30
4. Elemente de CALCUL SIMBOLIC
Variabila simbolicse memoreazn forma unui ir de caractere
%definete un singur obiect simbolicx =sym('x')x =x
% defineste mai multe obiecte simbolicesymsy f g1 g2 gwhos % afisaza tipul variabilelorName Size Bytes Class
f 1x1 126 sym object
Derivaref0=3*x^3+5*x^2-6*x+2pretty(f0)
3 23 x + 5 x - 6 x + 2
diff(f0) => ans = 9*x^2+10*x-6
f1 = 2*x^2*exp(3*x)>> diff(f1)
ans = > 4*x*exp(3*x)+6*x^2*exp(3*x)
>> diff(log(x))ans =1/x>> int(1/x)ans =
log(x)
% defineste expresia ff= 12 + (x-1)*(x-1)*(x-2)*(x-3)
f =12+(x-1)^2*(x-2)*(x-3)
diff(f) % prima derivataans =2*(x-1)*(x-2)*(x-3)+(x-1)^2*(x-3)+(x-1)^2*(x-2)
diff(f,x,2) % derivatde ordin 2
ans =2*(x-2)*(x-3)+4*(x-1)*(x-3)+4*(x-1)*(x-2)+2*(x-1)^2
diff(f,x,3) % a treia derivatans =24*x-42
>> diff(sin(5*x))ans =5*cos(5*x)
>> diff(sin(x)^2)ans =2*sin(x)*cos(x)
>> diff( sin(x)*cos(x) )ans =cos(x)^2 - sin(x)^2
>> diff(exp(x)*cos(x))ans =exp(x)*cos(x)-exp(x)*sin(x)
syms x %derivare fractie + simplificare formanum = 2*x^2 + 3*x -1;denom = x^2 - x + 3;f= num/denom
fp=diff(f), pretty(fp) - ->fps=simplify(fp), pretty(fps) - ->
AFISARE:f =(2*x^2+3*x-1)/(x^2-x+3)
fp =(4*x+3)/(x^2-x+3) - (2*x^2+3*x-1)/(x^2-x+3)^2*(2*x-1)
24 x + 3 (2 x + 3 x - 1) (2 x - 1)---------- - --------------------------2 2 2
x - x + 3 (x - x + 3)
fps =-(5*x^2-14*x-8)/(x^2-x+3)^2
25 x - 14 x - 8
- ---------------2 2
(x - x + 3)
syms g1g2xy;g1= 20*x^3 +15*y -30 ;g2 = 0.25*x + y -1;% g1,g2 pot avea derivate partialediff(g1,x) % derivata parial
ans =60*x^2
diff(g1,y)
g12 = [g1; g2] % g=vector coloande 2 funcii de var. x,yg12 = [ 20*x^3+15*y-30]
[ 1/4*x+y-1]% Calcul matrice Jacobian=derivatele pariale ale vectorului g12 n% raport cu variabilele independente x i y
xy = [x y]; % vectorul linie al variabilelorJ =jacobian(g12, xy) % calcul JacobianJ = [ 60*x^2, 15]
-
7/24/2019 Curs_Matlab
31/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
31
ans =15
[ 1/4, 1]
Easy Plot:syms x f1 f2;% polinom cu solutii simetrice fatde oy:f1=(x-2.16)*(x-12.7)*(x-38.3) * (x+2.16)*(x+12.7)*(x+38.3)
subplot(211)ezplot(f1, [-40,40]) ; line([-40 40],[0 0],'Color','r');
f2= (x-1)*(x-1)*(x-2)*(x-3)+4subplot(212)
ezplot(f2) % easy plot -2 pi < x < 2 piezplot(f2, [0,4]) % graficul fun. f pentru 0 aa=subs(f, x, x^2+y)ans =(x^2+y)^2*y + 5*(x^2+y)*y^(1/2)>> simplify(aa)ans =x^4*y + 2*x^2*y^2 + y^3 + 5*x^2*y^(1/2) + 5*y^(3/2)
syms g1g2xy;g1= 20*x^3 +15*y -30 ;g2 = 0.25*x + y -1;
g12 = [g1; g2]
% evaluare g12 pentru x = 1, y = 2.5subs(g12, {x, y}, {1 , 2.5})ans = 27.5000
1.750Soluii simbolice i numericepentru ecuaiisau sistemede ecuaii algebrice:
>> x12=solve('a*x^2 + b*x + c')
x12 =
-1/2*(b-(b^2-4*a*c)^(1/2))/a
-1/2*(b+(b^2-4*a*c)^(1/2))/a
Soluie simbolic:
pretty(x12)
[ 2 1/2 ][ b - (b - 4 a c) ][- 1/2 -------------------][ a ][ ][ 2 1/2 ][ b + (b - 4 a c) ]
[- 1/2 -------------------][ a ][sx sy] = solve(' x + y = 1 ' , 'x - 11*y = 5 ') %solutie numericasx =
4/3sy =
-1/3>> [sx sy] = solve(' x + y = a ' , ' x - 11*y = b ') %solutie simbolicasx =
11/12*a+1/12*bsy =
-
7/24/2019 Curs_Matlab
32/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
32
1/12*a-1/12*b[sx1 sx2 sx3] = solve(' 3*x1-x2=5' , ' -2*x1+x2+x3', ' 2*x1-x2+4*x3=15' )sx1 =
2sx2 =
1sx3 =
3
Rezolvare pereche de ecuaii neliniare: clearsyms x1 x2 % definire funciih1 = x1*x1 + x2*x2 - 2;h2 = 0.25*x1*x1 +0.75*x2*x2 -1;sol =solve(h1,h2); %rezolva sist. pt. x1 i x2
%[x1 x2]=solve(h1,h2)>> [sol.x1 sol.x2]ans =[ 1, 1][ -1, 1][ 1, -1][ -1, -1]
Integraresimbolicsyms xfin =2*x^2>> int(fin)ans =2/3*x^3
>> int(1/x)ans =
log(x)
syms a b x % variabile simbolicef = 3*a*b*x + 2*exp(a*x + b); % definitie ff1 = diff(f,x) % derivata functiei f in rap. cu x>> f1 =
3*a*b+2*a*exp(a*x+b)
int(f1, x) % integrare simbolica f1 n raport cu xans =
3*a*b*x+2*exp(a*x+b) % s-a obinut f din nou int(f, x, 0, pi/2) % integrare n raport cu variabila x ntre 0 i pi/2
ans = > 1/8*(3*a^2*b*pi^2+16*exp(1/2*pi*a+b)-16*exp(b))/a f2 = int(f, b, 0, pi/2) % integrare n raport cu b ntre 0 i pi/2
f2 = > 3/8*a*pi^2*x+2*exp(a*x+1/2*pi)-2*exp(a*x)Matricesyms m1 m2 M;M=[m1 0; 0 m2]inv(M)
M =[ m1, 0][ 0, m2]
ans =[ 1/m1, 0][ 0, 1/m2]
syms a b c d A;A=[a b; c d]pretty(inv(A))
[ d b ][ --------- - ---------][ a d - b c a d - b c][ ][ c a ][- --------- --------- ][ a d - b c a d - b c ]
det(A)ans = a*d - b*c
%Matrice coloana * matrice linie[a; b] * [c d]ans =[ a*c, a*d][ b*c, b*d]
Expand:syms abc;c=sin(a+b)expand(c)
ans =
etc.
-
7/24/2019 Curs_Matlab
33/34
Prof.dr.ing. Iulian LupeaProgramarea i Utilizarea Calculatoarelor
33
sin(a)*cos(b)+cos(a)*sin(b)expand(cos(a+b))
ans =cos(a)*cos(b)-sin(a)*sin(b)
Dezvoltare n seriede funcii Taylor
Serie MacLaurin
syms xf1 = sin(x); f2=cos(x);T1 = taylor(f1,10), T2=taylor(f2,10)T1 = > x -1/6*x^3 +1/120*x^5 -1/5040*x^7 +1/362880*x^9T2 = > 1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8
Sse verifice relaiile: (x)j+(x)=ejx sincos (x)j-(x)=e-jx sincos
f3 =exp(j*x); T3 = taylor(f3,10)
T3 = 1+ i*x- 1/2*x^2 - 1/6*i*x^3+ 1/24*x^4+ 1/120*i*x^5- 1/720*x^6 -1/5040*i*x^7+ 1/40320*x^8+ 1/362880*i*x^9
Diverse
1. Rezolvare sistem de ecuaii liniare de forma: AX=B
1.1. Inversare matrice:A=[3 -1 0;-2 1 1;2 -1 4] B=[5 0 15]' sau B=[5; 0; 15;]X1=A^-1 * B
X1 =2.00001.00003.0000Sau:
X2=A \ B
1.2.Metoda lui Cramer: x1= /1 , x2= /2 , x3= /3 unde este determinantul sistemului iar i estedeterminantul matricei coeficienilor (A) n care coloana i a fost nlocuitcu coloana termenilor liberi (B).
A=[3 -1 0;-2 1 1;2 -1 4]
B=[5 0 15]'
X=A^(-1)*B;XA1=[5 -1 0;
0 1 1;15-1 4]
x1=det(A1)/det(A)
A3=[3 -1 5;-2 1 0;2 -1 15];
x3=det(A3)/det(A)
2. Calcul matriceal, verificarea unor relaii:1. (A*B)T=BT* AT, 3. (A-1)T=(AT)-1 5. (A+B)*C=A*C+B*C2. (A*B)-1=B-1 * A-1 4. det(A) * det(A-1)=1 det(AB)= det(BA)=det(A)*det(B)
3. Sortare prin metoda selecieia=input('Va sorta in ord. descresc.\nIntroducetiun sir: ')asort=sort(a,'descend');n=length(a);fori=1:n-1
=+
=++
=
1534212
03212
5213
xxx
xxx
xx
nn
n
Rxn!
xfx
!
xf+x
!
xf+x
!
xfxf=xxf ++++
)(
3
)(
2
)(
1
)()()( 0
)(30
'''20
''0
'
00
nn
n
Rxn!
fx
!
f+x
!
f+x
!
ff=xf ++++
)0(
3
)0(
2
)0(
1
)0()0()0(
)(3
'''2
'''
-
7/24/2019 Curs_Matlab
34/34
poz_max=i;forj=i+1:n
ifa(j)>a(poz_max)poz_max=j;%retine pozitie element maxim
endend
aux=a(i);a(i)=a(poz_max);a(poz_max)=aux; %intershimbaendaasort
4. Sortare prin metoda bulelora=input('Va sorta in ord. descresc.\nIntroduceti un sir: ')asort=sort(a,'descend');n=length(a);fori=n-1:-1:0
forj=1:i%elem. cel mai mare este plasat ultimul in subsirul de indici 1,...,iif a(j)