Sunteți pe pagina 1din 32

MEDIUL DE PROGRAMARE MATLAB

Curs 2 1. PREZENTARE GENERAL


MATLAB = Matrix laboratory este un limbaj de programare i un sistem de dezvoltare a aplicaiilor din diverse domenii Matlab este dezvoltat de The MathWorks, Inc., SUA

Domenii de utilizare: Matematic, calcul numeric i simbolic Dezvoltarea algoritmilor Modelare, simulare i testarea prototipurilor Analiza i vizualizarea datelor Grafica inginereasc i din tiinele aplicate Dezvoltarea de aplicaii, inclusiv GUI

MATLAB - s-a dezvoltata n: 1. mediul universitar -este pachetul standard pt. cursurile de inginerie, matematic i tiine aplicate 2. industrie - pentru cercetarea, dezvoltare i producie. S-a dezvoltat prin toolbox-uri - familii/colecii de aplicaii (funcii .m) specializate:
SimBiology - modelarea proceselor biologice, Aerospace Toolbox - extinde calculele tehnice n domeniul ingineriei aerospatiale, Bioinformatics Toolbox - mediu pentru analiza genomului, inginerie genetic, cercetri n giologie, Communications Toolbox, Control System toolbox - controlul sistemelor, Data Acquisition Toolbox funcii pentru achiziii de date i adaptori pentru interfaare cu hardware specific (plci de achiziii ale diferitelor firme), Database toolbox funcii MATLAB pentru import i export de date cu baze de date relaionale Distributed Computing Toolbox coordonarea i execuia operaiilor aplicaiilor Matlab simultan ntr-un cluster de calculatoare crescnd viteza de execuie a aplicaiilor mari, Financial toolbox - calcule financiare, Fuzzy logic toolbox logica fuzzy, Generic algorithm - algoritmi genetici, Image acquisition toolbox - achiziii de imagini, Image processing toolbox procesarea imaginilor, Neural network toolbox reele neuronale, Optimization toolbox optimizri de sisteme, Partial Differential Equation Toolbox ecuaii difereniale cu derivate pariale, Robust Control Toolbox funcii pentru analiza i proiectarea sistemelor de control multiinput-multioutput MIMO cu incertitudini, Signal Processing toolbox - procesarea semnalelor, Spline toolbox curbe spline, Statistics toolbox funcii statistice, Symbolic Math - calcule simbolice, System identification toolbox identificarea sistemelor, Virtual reality toolbox realitate virtual, Wavelet toolbox funcii pentru reconstrucia semnalelor, etc. Sistemul MATLAB conine: 1.Limbajul MATLAB, 2.Mediul de lucru MATLAB, 3.Handle Graphics, 4.Biblioteca de funcii matematice, 5.Interfaa de aplicaii program a MATLAB-ului (API)

1.Limbajul MATLAB: - un limbaj de nivel nalt, tipul de baz este matricea, exist instruciuni de control, funcii, structuri de date, intrri/ieiri i cu proprieti de programare orientat pe obiecte. Facilitile de programare sunt organizate pe 6 directoare: 1
Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

ops lang strfun iofun timefun datatypes

Operators and special characters. Programming language constructs. Character strings. File input/output. Time and dates. Data types and structures.

all(), any, xor, or, if, for, while char, strcat fscanf, fseek clock, date cell, class, int8, double, logical

2.Mediul de lucru MATLAB Set de faciliti care permit manevrarea variabilelor n spaiul de lucru, importul/exportul de date, dezvoltarea, manipularea, editarea i depanarea fiierelor MATLAB (.m) i a aplicaiilor MATLAB. Aceste faciliti sunt organizate n directorul: 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 de nalt nivel pentru vizualizarea datelor bi i tri-dimensionale, procesarea imaginilor, animaie, prezentri grafice. Permite de asemenea utilizarea unor comenzi de nivel sczut pentru crearea unor interfee grafice GUI. Funciile grafice sunt organizate n 5 directoare:
graph2d graph3d Specgraph graphics uitools Two-dimensional graphs. Three-dimensional graphs. Specialized graphs. Handle Graphics. Graphical user interface tools.

4.Biblioteca de funcii matematice a MATLAB-ului Reprezint o colecie complex de algoritmi 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 elfun specfun matfun datafun polyfun funfun sparfun Elementary matrices and matrix manipulation. Elementary math functions. Specialized math functions. Matrix functions numerical linear algebra. Data analysis and Fourier transforms. Interpolation and polynomials. Function functions and ODE solvers. Sparse matrices.
isempty(x),zeros(3) abs(),sin(),tan,sinh,exp, log, log2, log10, imag,real bessel,cross,dot, trace, lu, rank ... fft, ifft,mean Legendre, convhull ode45()

full(), sparse()

5.Interfaa de aplicaii program a MATLAB-ului (API) este o bibliotec care permite scrierea de programe n C sau Fortran care interacioneaz cu MATLAB-ul. Include faciliti pentru apelarea rutinelor din MATLAB, apelarea MATLAB-ului ca main de calcul, scrierea i citirea fiierelor de tip MAT .

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

SIMULINK este un pachet software pentru modelarea, simularea i analiza sistemelor dinamice. Pot fi modelate sisteme (mecanice, electrice) liniare, neliniare, continue, discrete, hibride. SIMULINK are interfa grafic utilizator (GUI) pentru crearea modelelor sub forma unor diagrame construite din blocuri, pe baza unor tehnici de tip click-and-drag realizate cu mouse-ul. Astfel, trasarea diagramelor este simpl i intuitiv, aproape la fel de simpl ca trasarea acestor diagrame direct pe hrtie. n plus, se evit formularea matematic laborioas (sistemele dinamice sunt de regul descrise de ecuaii difereniale). Real-time Workshop este un program care permite generarea de cod C pentru schemele 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 execut automat fiierele: matlabrc.m rezervat pentru administratorul de sistem i startup.m. (n directorul local) este destinat utilizatorilor; se pot defini setrile implicite pentru instrumentele Handle Graphics i se pot predefini variabile n spaiul de lucru.
Terminarea sesiunii de lucru: comanda >>quit la prompterul MATLAB sau exit din meniul File Fereastra de comand (fereastra principal) unde Interpretorul MATLAB afieaz un 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 Enter sau Return, MATLAB-ul rspunde cu: A = 1 2 3 4 5 6 7 8 10

Editarea liniilor de comand n fereastra principal Arrow Key Control Key efect previous line - comanda precedenta sau: Ctrl-p sau: Ctrl-n tergerea ferestrei de comand: >> clc next line comanda urmatoare tastata % nu terge variabile curente din spaiul de lucru.

Controlul afirii paginilor ecran n fereastra de comand Controlul afirii paginilor n fereastra de comand: more off i more on. ntreruperea unui program care ruleaz : Ctrl-c. Comanda format controleaz formatul numeric (numrul de zecimale) al valorilor afiate pe ecran (dar nu reprezentarea n memorie): din meniul File/ Preferences/Comand Window sau comanda: format short (4 zecimale este implicit) sau format long (15 zecimale) etc.. Suprimarea afirii rezultatelor unei linii comand - dac ncheiem linia de comand cu punct i virgul ; rezultatele nu sunt afiate la ecran.
Exemplu: >> magic(3) ans = 8 1 6 3 5 7 4 9 2 A = magic(3);

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

Linii de comand lungi: ntrerupere prin trei puncte urmate de Return sau Enter pentru a indica faptul c expresia continu pe 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 comand permite rularea comenzilor MATLAB, lansarea unor instrumente cum ar fi 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 >>who i whos (mai detaliat) listeaz variabilele 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 sau Fortran se poate face cu Interfaa de Aplicaii Program (API). ncrcarea i salvarea din workspace Comenzile save i load au rolul de a salva variabilele din 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 opiunilor Save Workspace As, respectiv Load Workspace din meniul File.

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

Formatul n care comanda save stocheaz datele poate fi controlat prin adugarea unor flag-uri (opiuni) n lista de nume de fiiere sau variabile:
-mat -ascii -ascii -double -ascii -double tabs -append Exemple: save save f1_var [mat] Salveaz toate variabilele n fiierul matlab.mat Salveaz toate variabilele n fiierul fi_var.mat Utilizeaz formatul binar tip .MAT (implicit). Utilizeaz formatul ASCII pe 8 digii. Utilizeaz formatul ASCII pe 16 digii. Delimiteaz elementele tablourilor cu tab-uri. Adaug datele ntr-un fiier .MAT existent.

ncrcarea unor fiiere cu date ASCII (format text) Comanda load import fiiere de date ASCII. Exemplu: scriem fisierul date.dat coninnd 1234 2345
load date.dat %incarca i creaza variabila matrice [1 2 3 4; 2 3 4 5]

creeaz o variabil cu numele date n workspace. Nume de fiiere ca iruri de caractere Dac numele fiierelor sau variabilelor cu care se lucreaz sunt stocate n variabile de tip ir de caractere, se poate folosi dualitatea comand/funcie pentru a apela load i save ca funcii. De exemplu
save('myfile','VAR1','VAR2') A = 'myfile'; load(A)

au acelai efect cu:


save myfile VAR1 VAR2 load myfile

Wildcards Comenzile load i save permit specificarea unui caracter special de tip wildcard (*). Exemplu: save rundata x* %salveaz toate variabilele din workspace care ncep cu x n fiierul rundata.mat. Browser-ul Workspace (varianta grafic a comenzii whos) permite vizualizarea coninutului spaiului de lucru curent. Exemplu: vizualizarea datelor incrcate cu load

Directorul curent al MATLAB-ul pentru lucrul cu fiiere de tip .m i .mat. 3. FUNDAMENTE DE PROGRAMARE N MATLAB

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

3.1. Cuvinte rezervate (Keywords) ale limbajului MATLAB: 'break' , 'case', try catch 'continue' 'else' 'elseif' 'end' 'for' 'function' global' 'if' 'otherwise' 'persistent' 'return' 'switch' 'try' 'while'. Pentru listarea lor se tasteaz funcia: iskeyword 3.2. Expresii MATLAB-ul lucreaz cu expresii matematice ca i celelalte limbaje de programare Instruciunile Matlab sunt adesea de forma: variabila=expresie sau numai: expresie Se evalueaz valoarea expresiei din dreapta semnului = iar valoarea obinut se atribuie variabilei din stnga semnului =. Pentru forma simplificat (a doua) valoarea expresiei se atribuie unei variabile `ans` (answer) create imediat de Matlab. >> 1/3 ans = 0.3333 Expresia = niruire de operanzi i operatori; operanzii: nume de variabile, constante, nume (sau apel) de funcii. Matlab lucreaz n mod linie avnd la baz un interpretor (i nu compilator). Fiecare instruciune pe rnd este trimis interpretorului i evaluat. 3.3. O variabil MATLAB este un nume care se asigneaz (asociaz) unei zone de memorie unde sunt stocate valori. Prin nume citim/scriem valoarea din/n memorie, i folosim valoarea n expresii. MATLAB dispune de trei tipuri de variabile: locale, globale i persistente. MATLAB-ul NU necesit declararea dimensiunii variabilelor, deoarece la ntlnirea unui nou nume de variabil genereaz automat variabila respectiv i aloc spaiul necesar de memorie. Numele unei variabile este o liter, urmat de un numr orict de mare de litere, cifre sau simboluri. 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

creeaz o matrice 1 x 1 cu numele a i stocheaz (memoreaz) valoarea 30 Reprezentarea numerelor imaginare este realizat cu litera i sau j. Exemple: > sqrt(-7) >> j >> i >> abs(3+4j) ans = ans = ans = ans = 0 + 2.6458i 0 + 1.0000i 0 + 1.0000i 5 Operatori elementari Operatori aritmetici n cadrul expresiilor: + adunare - scdere * multiplicare / mprire \ mprire la stnga ^ ridicare la putere ` transpusa unei matrice sau complex conjugata unui numr complex ( ) operatorul de specificare a ordinii de evaluare (cu prioritate maxim) 3.4.Funcii MATLAB-ul furnizeaz un mare numr de funcii matematice elementare standard (abs, 6
Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

sqrt, exp, sin ).

Exist i funcii matematice avansate (funcii Bessel, gama etc.), multe dintre acestea acceptnd argumente complexe.
Pentru vizualizarea funciilor elementare se poate tasta: help elfun

Pentru a vedea lista funciilor avansate se poate tasta:


help specfun sau help elmat

O parte din funcii (cum ar fi sqrt, sin)sunt de tip built-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 fiiere MATLAB (M-files) i pot fi modificate. Pentru a gsi calea spre codul surs a unei funcii MATLAB M-file folosim funcia which: >> which exp => built-in (D:\MATLAB\toolbox\matlab\elfun\@double\exp) % double method >> which pascal => D:\MATLAB\toolbox\matlab\elmat\pascal.m Sunt dou tipuri de fiiere M-files: script i function (pot primi i retura valori). Cteva funcii furnizeaz valorile unor constante:
pi i i j eps Realmin Realmax Inf NaN 3.14159265 Imaginary unit, -1 (sqrt(-1) ) Precizia Floating-point 2-52 (2.2204e-016) Cel mai mic numr real floating-point, 2-1022 (2.2251e-308) Cel mai mare numr real floating-point, 21023 (1.7977e+308) Infinit Not a Number

Numele funciilor NU sunt rezervate i deci este posibil suprascrierea lor. Exemplu: eps = 1.e-6 Funcia original este reconstituit prin comanda: clear eps 3.5.Exemple de expresii Exemple de expresii i rezultatele evalurii acestor expresii:
rho = (1+sqrt(5))/2 rho = 1.6180 huge = exp(log(realmax)) huge = 1.7977e+308 toobig = Inf a = abs(3+4i) a = 5 exp(pi/2*i) ans = 0.0000 + 1.0000i

toobig = pi*huge

3.6.Tipuri de date in Matlab Tipul fundamental de dat la baza produsului Matlab este matricea. Elementele matricei sunt de acelai tip de dat: ntreg sau real, logic, caracter, structur etc. Tipurile structur i celule de tablouri stocheaz tipuri diferite de date n cmpurile lor. 7
Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

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 la minim 0 x 0 elemente la n dimensionale. Cuvintele cheie asociate tipurilor fundamentale sunt scrise cu litere mici (Figura->). Pot fi create matrice 2D de tip double i logical fiecare putnd fi n format FULL sau SPARSE (pentru matrice cu marea majoritate a elementelor nule pentru economie de memorie).

Tipul de dat ntreg: int8, uint8, int16,uint16, int32, uint32, int64, uint64 Single

Exemple uint16(65000) conversie la uint16

Descriere Tablou de ntregi signed (int) i unsigned (uint) Pe 8, 16, 32 resp. 64 bii.

single(3 * 10^38)

Double (tip implicit)

3 * 10^300 5 + 6i
[1 2;3 4]

Logical

x = [true, true, false, true];

Char

>> magic(2) > 2 ans = 0 1 1 0 'Dati val. pt. vector: ' mesaj='Hello' >> mesaj(2:4) ans = ell
str.numar = 124; str.color = 'alb'; str.matr = magic(3); str.logic=[true];

Structure

prin . se refera campul


str(2).numar = -17;

Cell array

a{1,1} = 12; a{1,2} = 'Red'; a{1,3} = magic(4);

Tablou de numere n simpl precizie. Dpdv al memoriei: mai puin dect tipul double avnd mai mic precizie i domeniu de valori mai ngust. Domeniul <0: -3.40282e+038 to -1.17549e-038 i >0: 1.17549e-038 to 3.40282e+038 Spaierea:Eps(1)=4.7684e-007 aprox. Tablou de numere n dubl precizie (este tipul implicit de dat). Tablourile 2D pot fi de tip sparse. Domeniul: -1.79769e+308 to -2.22507e-308 and 2.22507e-308 to 1.79769e+308 Spaierea(eps): 2.2204e-016 aprox Tablou de valori logice 1 (true) or 0 (false). Tablourile 2D pot fi sparse (rare). >> magic(2) => ans = 1 3 4 2 Tablou de tip caracter (sau ir de caracterestring); fiecare caracter are 16 bii lungime. Tablou de caractere. irurile sunt reprezentate ca vectori de caractere. Pentru tablouri ce conin mai mult de un ir se prefer folosirea tipului cell arrays. Structura este un set de cmpuri; fiecare cmp are nume propriu (numar, color, matr) i memoreaz orice tip de dat. Structura are nume ex:str; O structur singular este un tablou 1 x 1 de structuri aa cum un scalar numeric (ex:7) este o matrice 1 x 1; se pot forma tablouri de structuri. Tablou de celule indexate. Fiecare celul poate memora un tablou de orice tip sau mrime. Celulele tabloului se refer prin acolade, ex: a{1,1} = tablou 1x1 8
Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

b={5,e,[1 2;3 4]} Function handle x=@sin struct(2).a1=@sin cell2{4,1}=@cos

de double, a{1,2}=tablou 1x3 caractere, a{1,3}=matrice 4x4

cell2={12, 'asdf', [1 2;3 4]; 1:3, 2,'aa'} (alt exemplu) Pointer la o funcie. Cmpul a1 al structurii struct memoreaz pointer la funcie. >> cell2{4,1}(pi) >> >> struct(2).a1(pi/2) ans = > -1 ans= > 1 User class polynom([0 -2 -5]) Obiecte construite dintr-o clas definit de utilizator Java class java.awt.Frame Obiecte construite dintr-o clas Java (vezi clase Java) Valorile numerice sunt stocate intern, implicit n format virgul mobil double-precision. Pentru a stoca un ntreg trebuie realizat conversie (vezi funcii de conversie) de la tipul double la tipul ntreg dorit. Ex.1. pentru a memora valoarea 325 ntr-o variabil ntreag cu semn pe 16-bit: x = int16(325); % x este un tablou 1 x 1 de ntregi cu semn x1=int32(500.499) % se va memora 500 partea fractionara este neglijata x1=int32(500.501) % se va memora 501 rotunjire la intregul mai mare ex.2.Tablou de valori logice >> val_log=true
>> a = [true, true, false, true, false] 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 6 3 5 7 4 9 2

$ este un tablou 1x1 de valori logice


$ a este tablou 1 x 5 de val. logice

>> d>=5 ans = 1 0 0 1 0 1

1 1 0

Ex.3.Tablou 1D, ir de caractere, 1 x 14 numit: pr_nu pr_nu =Marius Giurgiu - n workspace apare: Name Size Bytes Class pr_nu 1x14 28 char Tablou 2D de caractere <2 x 15 char> sau tablou de iruri de caractere de lungimi egale:
>> nume = ['Marius Giurgiu ' ; 'Mircea Bolboaca'] nume = Marius Giurgiu Mircea Bolboaca % s-a adugat un blank dup Giurgiu

>> nume(2, 7:15) % linia 2 coloanele 7:15 ans = Bolboaca Este incomod de a lucra cu iruri de lungimi egale n tablouri de caractere. Se poate trece la tipul cell array care permite iruri de lungimi oarecare. Conversia se face cu funcia cellstr: >> cell_array1=cellstr(nume) >> cell_array1{2} cell_array1 = { ans = Marius Giurgiu' Mircea Bolboaca 'Mircea Bolboaca' } >> x{2}(1) >> cell_array1{1} ans = ans = M Marius Giurgiu 9
Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

Ex.4. Structuri (tablou de cmpuri cu nume) Construirea unui tablou de structuri 1x1 (structur singular) 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=[3 3;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).note ans = 5 6 4 9 8 10 >> student(2).note(3,1) ans = 10 CURS 3 Ex.5. Cell arrays Tabloul(matricea) de celule este folosit la stocarea indexat a datelor de tipuri diferite. n celulele tabloului pot fi stocate date de tipuri i mrimi diverse. Putem spune c celulele sunt cmpuri fr nume (dar indexate pentru a putea fi referite). Urmtoarea instruciune creeaz un 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 individual fiecare celul: A(1,1) = {[1 4 3; 0 5 8; 7 2 9]}; %sau A{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. Dac s-ar iniializa: >>A{1,1} = {[1 4 3; 0 5 8; 7 2 9]} s-ar obine un cell array pentru A{1,1}
n figura alturat observm un tablou (de celule) cu urmtoarele celule:

10

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

aa{1,1} conine tablou de ntregi fr semn, aa{1,2} conine tablou de iruri de caractere (irurile sunt de lungimi egale), aa{1,3} conine tablou de numere complexe aa{2,1} conine ir (1D) de numere n virgul mobil aa{2,2} conine tablou 2D de ntregi cu semn aa{2,3} tablou de celule de tipuri variate Observai urmatoarele 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

WIREFRAME. Stack{1,1}(1,1) Structura WIREFRAME cu cmpul Stack de tip cell array; se refer celula {1,1} care este un ir de caractere => este referit primul caracter din ir. 2.Operatori
Operatorii MATLAB pot fi clasificai n trei categorii: Operatori aritmetici Operatori relaionali (compar operanzii cantitativ) Operatori logici

*Operatori aritmetici + Adunare .* ./ .\ + : Scdere nmulire element cu elem.


[2 3] .* [10 20] -> [20 60]

.^ ' ' .' * / \ ^

Fiecare element din matrice la putere


[2 3 4] .^ 2 => [4 9 16]

Transpusa unei matrice reale


Transpusa + conjugata complex a numerelor complexe din matrice dac exist

mprire la dreapta: 1./[1 2 3]


1.0000 0.5000 0.3333

Transpusa fr conjugata complex a


numerelor complexe

mprire la stnga: 2.\ [1 2 3]


0.5000 1.0000 1.5000

nmulire matriceal Amxn * Bnxp => Cmxp mprire matriceal la dreapta A*B^-1 mprire matriceal la stnga A^-1 *B Matrice ptratic la o putere

Plus unar Minus unar Operatorul dou puncte

Operatorii aritmetici pe element lucreaz cu elementele corespondente ale unor tablouri de dimensiuni egale. Unii operatori binari lucreaz cu un operand matrice i cellalt scalar. n acest caz MATLAB-ul aplic scalarul fiecrui element al matricei. *Operatori relaionali < Mai mic <= Mai mic sau egal > Mai mare

>= == ~=

Mai mare sau egal Egal cu Diferit de

Operatorii relaionali compar elementele corespondente ale unor tablouri de dimensiune egal. Operatorii relaionali lucreaz totdeauna 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 == B

11

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

ans = 0 0 0

1 0 0

0 1 0 1 0 1 0 I I I I 1=1 1=1 0=1 0=0 XOR(0, 0) = 0 XOR(0, 1) = 1 XOR(1, 0)= 1 XOR(1, 1)= 0

*Operatori logici
& | ~
1&1=1 AND (I) 0&1=0 OR (SAU) NOT (Negatie) 1 & 0 = 0 0&0=0

O expresie care utilizeaz operatorul & (I) este adevrat dac ambii operanzi sunt adevrai. 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 & v ans = 1 0 1 0 0

O expresie care utilizeaz operatorul | (SAU) este adevrat dac cel puin unul dintre operanzi este logic adevrat. Pentru operanzi numerici, expresia este fals dac ambii operanzi sunt nuli. Exemplu:
u | v ans = 1 1 1 1 0 1

O expresie care utilizeaz operatorul ~ (NOT)neag logic operandul. n termeni numerici, orice operand nenul devine nul i orice operand nul devine unu. Exemplu:
~u ans = 0 1 0 0 1 0

Operatorii logici se aplic elementelor corespondente ale unor tablouri de dimensiuni egale. Pentru vectori i tablouri dreptunghiulare ambii operanzi trebuie s aib aceeai dimensiune, cu excepia situaiei n care unul dintre ei este scalar. n acest caz, ca i la operatorii aritmetici, MATLAB-ul aplic scalarul fiecrui element al celuilalt operand. Funcii logice n plus fa de operatorii logici MATLAB-ul furnizeaz i funcii logice:
Funcie xor Descriere Exemple Realizeaz sau exclusiv. Returneaz logic adevrat dac a = 1; unul din operanzi este adevrat i cellalt fals. n termeni b = 1; numerici, returneaz 1 dac un operand este nenul i xor(a,b) cellalt este zero. ans = 0 u = [0 1 2 0]; Returneaz 1 dac toate elementele unui vector sunt all(u) adevrate sau nenule. ans = 0 Opereaz i cu matrice (pe coloane). A = [0 1 2; 3 5 0]; all(A) ans =

all

12

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

any

Returneaz 1 dac cel puin unul dintre elementele argumentului este adevrat sau nenule; n caz contrar returneaz 0. Alte funcii: isnan, isinf, find (a se folosi help pentru detalii).

0 1 0 v = [5 0 8]; any(v) ans = 1

3.Prioritatea operatorilor Se pot scrie expresii care folosesc orice combinaie de operatori aritmetici, relaionali i logici. Ordinea de evaluare a expresiei este dat de nivelele de precedena/prioritate. In cadrul fiecrui nivel de preceden operatorii au aceeai prioritate i se evalueaz de la stnga la dreapta. Prioritatea maxim o au parantezele:
1. Paranteze () 2. Transpusa (.'), putere (.^), complex conjugate transpose ('), 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 dou punce (:) 7. mai mic (<), mai mic sau egal (<=), mai mare (>), mai mare sau egal (>=), test egalitate (==), test diferit (~=) 8. AND (&) 9. OR (|)

Exemplu: observai scrierea compact i puterea operatorilor n Matlab: S se evalueze (fr ciclri) expresia A(r,) pentru: r=0:0.01:2.5 i =[0.03, 0.05,0.1,0.2,0.5]
A( r , ) = 1 + 4 2 r 2 (1 r 2 ) 2 + 4 2 r 2

r=0:0.005:2.5; ze=[0.03 0.05 0.1 0.20 0.50]'; 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*r se nmulete o matrice coloan ze ( transpune) cu o matrice linie r; apoi se ridic la ptrat fiecare element din matrice. La numitor: primul termen (1 r 2 )2 rezult vector iar al doilea

4 2 r 2 matrice => avem nevoie de matrice i n primul termen. size(ze) returneaz perechea de valori (5,1); acesta este argument pentru funcia ones() care creaz matricea cu 5 linii i o coloan de valori unitare. ones(size(ze))*(1-r.*r).^2 >> ones(size(ze)) ans = Sunt generate 5 linii identice care vor fi adunate cu matricea 1 (2*ze*r).^2 (n care fiecare linie (r) se nmulete cu un alt 1 zeta) ze*r => matrice 5x501 1 X => matrice 5x501 1 plot(r,X) => 5 grafice, pentru abscisa (vectorul) r se 1 traseaz fiecare linie din matricea X.

13

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

4. Instruciuni pentru controlul derulrii unui program 4.1 . if, if else, if - elseif - else

execut un grup de instruciuni pe baza unei condiii logice. dup elseif poate s nu mai existe un else

if expresie_logica grup de instructiuni end ...


i=2 j=input(' j= '); if i+j>0 fprintf('i+j=%10.3f\n',i+j); end

if expresie_logica grup1 de instructiuni else grup2 de instructiuni end --------if x>0 fprintf('x este numar pozitiv\n') else fprintf('x negativ sau zero\n') end if a>b a=input('a= ');b=input('b= '); disp('a>b') if a>b 'a>b' elseif a<b disp('a<b') else 'a mai mic sau egal cu b' else %a==b disp('egalitate') end end n=input('n= '); if n < 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'); end

14

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

4. 2.switch, case otherwise


switch expresie %scalar sau sir de caractere/string case valoare1 grup 1 instructiuni
% se execut pentru expresie de valoare 1

case valoare2 grup 2 instructiuni


% se execut pentru expresie de valoare 2

case valoare n grup n instructiuni otherwise grup n+1 instructiuni


% se execut dac expresie nu egaleaz nici un caz

end

%switch poate rezolva mai multe condiii ntr-un %singur caz prin folosirea acoladelor (cell array).
var=input('var= ')

switch var case 1 disp('1') case {2,3,4} disp('2 sau 3 sau 4') case 5 disp('5') otherwise disp('alt valoare') end

exemplul 2 switch var1 case -1 disp('minus unu'); case 0 disp('zero'); case 1 disp('unu pozitiv'); otherwise disp('alta valoare'); end

culoare = input('Tastati o culoare: ','s'); switch culoare % valoarea citita este sir de caractere case 'rosu' disp('culoarea este rosiu'); case 'galben' fprintf('ati tastat %s\n', culoare); case {'albastru','violet'} disp('culoarea este 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 dup end fr a folosi instruciune Break. In C se execut implicit i cazurile urmtoare (daca nu exist instr. break).

4.3. Instruciunea de ciclare for


- Execut o instruciune sau un grup de instruciuni de un numr cunoscut dinainte de ori:

15

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

for index = start:increment:end grup de instructiuni end


x=1:6; %sau x=[1 2 3 4 5 6]; suma=0; %initializam variabila suma for i=1:length(x) suma=suma + x(i) end suma

for k=1:2:n x(1)=1; . . . for n = 2 : 6 end x(n) = 2 * x(n - 1); end 2 4 8 16 32 % rezulta: 1 for k=n:-1:1 for x=0: pi/30 : 2*pi . . . fprintf(x= %10.2f sin= %10.2f\n , x, sin(x) ); end end Se pot scrie instruciuni for n corpul unei alte instruciuni for (for imbricat): m=5; n=12
for i = 1:m %se repeta de m ori for j = 1:n %repeta de m x n ori B(i,j) = 1/(i + j - 1); end end plot(1:m,B) %sau plot(B)

plot(1:n,B)

x=1:10; %Cod scalar: for k=1:length(x) y(k)=sin(x(k)); end

x=-5:0.1:25; %Cod scalar: for k=1:length(x) y(k)=x(k)+sin(x(k)); end plot(x,y) x=[1 2 3 4] mu = sum(x)/length(x); %scalar suma=0; for i=1:length(x) suma=suma +(x(i)-mu)^2 end variance1=suma/length(x); % variance1 -> 1.25

Cod echivalent prin vectorizare: x=1:10; y=sin(x); ----------x=-5:0.1:25; y=x+sin(x); plot(x,y) mu = sum(x)/length(x); %vectorizare variance2=sum(( x-mu).^2)/length(x);

sau

(x-mu).*(x-mu)
2 VAR = x = 1 ( X [i ] ) 2 n i =1 n

CURS 4
%Numrare elemente ai pozitive din vector a=input(`Tastati sir numeric= `); %exemplu [1 -2 3 -9 4 1] contor=0; for i=1:length(a) if a(i)>0 contor=contor+1 end end contor

Suma elementelor aij de pe DP (i = j) folosind un ciclu for


a=[1 -2 3 ;-9 4 1; 2 2 2] sum=0; nl= length(a(:,1)) %numar linii sau coloane for i=1:nl sum=sum+a(i,i); fprintf('i=%d j=%d a=%.3f\n',i,i,a(i,i)); end sum

Se citete matricea ptratic a=[1 2 3 4; 2 3 4 5; 3 4 5 6;4 5 6 7]. Se parcurg elementele matricei unu

16

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

cte unu i se calculeaz suma elementelor pozitive situate deasupra DP i deasupra DS. Fiecare element nsumat va ndeplini simultan trei condiii: Condiii de poziie n matrice: 1) i<j selecteaz elementele aij situate deasupra DP
Condiia de valoare este: 2) i+j<n+1 3) a(i, j)>0 selecteaz elem. deasupra DS

a=input(`Intr. Matrice patratica=`) % tastati: [1 8 3 ;-9 4 1; 2 2 2] n=length(a(:,1)); % (toate liniile, coloana 1) sum=0; for i=1:n %ciclu exter. ciclarea liniilor for j=1:n %ciclu interior: ciclarea coloanelor if i<j & i+j<n+1 & a(i,j)>0 %expresie logica sum=sum+a(i,j); fprintf('i=%d j=%d a=%.3f\n',i ,j , a(i,j)); end end end sum

4.4. Instruciunea de ciclare while cu condiionare anterioar

-execut un grup de instruciuni de un numr nedefinit de ori, sub controlul unei condiii logice. while expresie logica bloc de instructiuni end (1) Se evalueaz expresie logica (EL). (2) Daca EL este True se executa bloc de instructiuni si se trece iar la (1) (3)Dac EL este False se trece direct dupa end
i=-2; while i<7 i=i+1; end i x=1:6; %sau x=[1 2 3 4 5 6]; suma=0; %initializam variabila suma i=1; %initializam indicele i n_e= length(x) while i <= n_e suma=suma + x(i); i=i+1; %indicele incrementeaza end suma %suma elementelor x(2) x(5)din sirul x x=1:10; suma=0; i=2; while i<=5 suma=suma+x(i); i=i+1; end suma %instructiune while in corpul while m=input('linii m= '); n=input('coloane n= ') i=1; while i<=m %se repeta de m ori j=1 while j<=n %se repeta de m x n ori A(i,j) = 1/(i + j - 1); j=j+1; end i=i+1; end i j plot(A); % este mai dificila gestionarea indicilor %dect n cazul folosirii ciclului for

4.5. Instruciunea break provoac ntreruperea ciclrii for sau while i salt la prima instruciune dup instruciunea end a ciclrii. 17
Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

4.6. Instruciunea continue trece controlul sau realizeaz salt la prima instruciune din urmtoarea iteraie n cadrul ciclrilor for sau while.
4.7. Instruciunea return provoac ieirea forat din funcie (funcia apelat fA) i ntoarcerea la funcia apelant fAn (care a apelat procedura).
function out=fun_demo1(in) i=1; while i < in x(i)=rand(1); if x(i)>0.95 'break' break; %salt la iteratia urmat. end i=i+1; end out=x; i display('exemplu cu break') end %incheiere functie cu end optional function out=fun_demo2(in) i=1; while i < in x(i)=rand(1); if x(i)>0.95 out=x; %salvam x in out i 'return' return;%iesire din functie end i=i+1; end out=x; display('exemplu cu return') i

Apel: a=fun_demo1(1.e2);

Apel: b=fun_demo2(1.e2);

5. Scheme logice asociate instruciunilor de decizie i de ciclare

Schemele logice conin: blocul de start, B.de stop, B intrare date, B. ieire date (paralelograme), B. de decizii logice (romb), bloc de atribuiri i calcul (dreptunghi) (interconectare prin sgei orientate).
if expresie_logica grup de instructiuni end

if expresie_logica grup1 de instructiuni else grup2 de instructiuni end

18

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

for index = start:increment:end grup de instructiuni end

while expresie logica bloc de instructiuni end

switch expresie % scalar sau sir de caractere/string case valoare1 grup1 instructiuni case valoare2 grup 2 instructiuni ... case valoare n grupn instructiuni otherwise grup n+1 instructiuni end

S se traseze schema logic asociat programului de mai jos: conine decizii multiple n corpul ciclului for

19

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

Programul contorizeaz numrul de apariii n irul X a valorilor 1, 2, 3 i restul de valori. x=input('Dati sir de valori x= '); v1=0; v2=0; v3=0; v=0; for i=1:length(x) if x(i)==1 v1=v1+1; elseif x(i)==2 v2=v2+1; elseif x(i)==3 v3=v3+1; else v=v+1; end end fprintf('v1=%d v2=%d v3=%d
v=%d\n',v1,v2,v3,v);

Observai: 1.asemnarea deciziei multiple realizate cu if-elseif i cea realizat cu switch-case 2. S-au compus schemele logice pentru for i if-elseif (sau switch) 3.Linia ntrerupt mrginete corpul instruciunii de ciclare for i conine deciziile multiple

5. Definirea unei funcii n Matlab 5.1. Sintaxa definirii unei funcii: in1, in2,inn sunt argumente de intrare (parametri formali) ou1,out2,outm sunt argumente de ieire
in1, in2, ou1,out2, sunt variabile locale

ai sunt parametri actuali sau efectivi care au valori concrete la momentul apelului funciei ri primesc valorile de la outi

1. Funciile sunt subprograme care folosesc parametri de intrare (in1, in2,) i parametri de ieire (ou1,out2,) pentru a comunica cu alte funcii sau cu fereastra de comenzi 2. Parametrii de intrare permit aplicarea unui algoritm de calcul unor date de intrare diferite 3. Folosirea funciilor permite modularizarea programului (anumite sarcini de calcul s fie ncapsulate) 4. Funciile folosesc variabile locale funciei, variabile care exist numai pe timpul execuiei funciei: n fun_demo1: i, x; la ieirea din funcie variabilele locale se pierd.

20

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

5. Variabilele locale sunt independente de variabilele cu acelai nume din workspace sau din alte funcii. 6. Definiia funciei este salvat ntr-un fiier referabil cu acelai nume cu al funciei sau altul i extensia .m In cazul n care numele funciei este diferit de al fiierului se folosete numele fiierului la apel. Calea spre fiier trebuie setat Set Path dac fiierul nu se afl n directorul curent sau n lista de ci spre directore. 7. Funcia poate fi apelat n linia de camand sau din alte funcii sau fiiere script Matlab. 8. Funciile pot s nu aib argumente de intrare sau argumente de ieire. 9. Apelul funciei este: nume_fun(a1, a2,) unde a1, a2 sunt parametri efectivi (actuali) avnd valori concrete/cunoscute. 10. Apelul funciei se poate face din linia de comand, dintr-o alt funcie sau dintr-un fiier script. 11.Valorile parametrilor efectivi sunt transferate parametrilor formali n ordine de la stnga la dreapta. 5.2. EXEMPLE 1) Un parametru de intrare i unul de ieire x parametrul intrare vector function y = average(x) % AVERAGE media elementelor vectorului y param. ieire scalar y = sum(x) / length(x); Funcia average este salvat n fiierul average.m end APELURI valide ale funciei: v=[1 2 3 -3 5]; v=[1 2 3 -3 5]; average([1 2 3 -3 5]) ave=average(v) average(v) ans = ans = 1.6000 1.6000 2) 2 parametri de intrare i un (1) parametru de ieire function z=xplusy(x,y); x,y doi parametri de intrare z=x+y; z un parametru de ieire Se salveaz definiia funciei ntr-un fisier cu numele xplusy.m. end APELURI valide ale funciei: a=1 a=[1 2 3; 3 4 5] a=7 b=2 b=[7 8 9; 2 0 4] b=[7 8 9; 2 0 4] scal1=xplusy(a,b) matr1=xplusy(a,b) 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
function comp(a,b) if a>b 'a>b' elseif a<b 'a<b' else %a==b 'egalitate' end a,b parametri intrare; nu exista parametri de ieire Salvam definitia n fiierul comp.m APELURI: >>comp(4,6)

4) un parametru intrare, 2 parametri de ieire function [s,sp]=sumap(x) %returneaza suma si suma elem >0 s=0;sp=0; for i=1:length(x) s=s+x(i); if x(i)>0 sp=sp+x(i);%insumare x(i)>0 end end

21

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

end Apel:

[suma, sp]=sumap([1 5 -3])

2 VAR = x = 1 ( X [i] ) 2 n i =1

Parametrii formali ai functiei pot avea acelasi nume cu variabilele din seciunea care apeleaz

CURS 5 (nov.) (continuare funcii)


1. Se poate defini o funcie n corpul altei funcii:

Bulina roie => breakpoint Sgeata alb => punct de apel funcie Sgeata versde => poziie curent de rulare

>> stat3([1 2 3 4]) %apel functie stat3 2. Pentru evaluarea unei formule se pot folosi funcii inline pentru a evita definirea unei funcii.
function y=f_expresie(x) % se creaza un nou fisier y=x+sin(x)+x.^2; Sunt permise apelurile: Re1=f_expresie(2.2) Re1=f_expresie([2.2 3 5]) fun_ex=inline('x+sin(x)+x.^2'); Re2=fun_ex(2.2) Re2=fun_ex([2.2 3 5])

3.Variabile globale VG permit folosirea unor variabile n corpul funciilor fr ca acele variabile s fie pasate prin parametri n acele funcii. Comunicare numai prin parametri Spaiul de lucru (workspace) Definiie fun_1 a=1 functie y=fun_1(pa,pb,pc) b=2 . c=5 y=pa+pb+pc; re=fun_1(a,b,c) Variabilele a,b,c i-au transferat valorile parametrilor formali pa,pb respectiv pc Valoarea calculat y transfer valoarea variabilei re Comunicare prin parametri i variabil global a=1 functie y=fun_1(pa,pb) b=2 . global vgC; global vgC; vgC=55 .. re=fun_1(a,b) y=pa+pb+ vgC; Variabilele a,b i-au transferat valorile parametrilor formali pa respectiv pb Variavila vbC este declarat global n funcia apelant i apelat (fun_1) deci poate fi folosit n expresii n funcia apelat fun_1 22
Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

4. Fiiere script Matlab sau macrouri


Scriptul Matlab este un segment de program Matlab salvat ntr-un fiier numefis.m. Execuia segmentului de program se obine prin apelul numelui fiierului numefis (fr extensie) n linia de comand, n funcii sau n alte fiiere script. Dup execuia fiierului script variabilele locale rmn n spaiul de lucru al aplicaiei (spre deosebire de funcie).

Un program Matlab are forma fiierelor script sau fiierelor function ambele avnd extensia m.
Din fiierele de funcii sau fiierele script se pot apela alte funcii sau fiiere script. Se pot face de asemenea apeluri recursive adic o funcie s se apeleze pe sine sau dintr-un fiier script s se apeleze acelai fiier script.

Grafic 2D n MATLAB 1. Funcii pentru reprezentri grafice 2D n MATLAB


subplot(abc) divizeaz graficul a=numr linii, b=numr coloane, c=poziia curent n matrice numrnd pe linii: a11, a12 a21 plot(y) realizeaz reprezentri grafice n coordonate liniare a) y este vector => reprezint valorile lui y n funcie de numrul de ordine al fiecrui element din vector b) y este matrice m x n => plot(y) reprezint n curbe cte o curb pentru fiecare coloan a matricei x=0 : pi/100 : 4*pi %vector real de 401 %elemente y=sin(x); plot(y) Exemplu x=0 : pi/100 : 3*pi y=sin(x); y1=sin(x+pi/3); ma(:,1)=y; %generare coloana 1 ma(:,2)=y1; %generare coloana 2 plot(ma); c) dac y este un vector de valori complexe va reprezenta plot(real(y), imag(y)) x=0 : pi/100 : 3*pi %vector real y=sin(x); z=fft(y); % transformata Fourier calculeaz vectorul z % avnd length(y) valori complexe(simetrice) subplot(121) % linia 1, coloana 2, pozitia 1 devine curenta plot(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: 4 f(t) = 1 cos 0 t + 3 cos 0 t +1.5 cos 0 t 2 2 Se traseaz grafic fora i se pun n eviden componentele armonice ale profilului (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); subplot(212); plot(abs(Y1(1:length(Y1)/4) ));

23

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

Y1: plot(x,y) a) reprezint grafic vectorul y (ordonata) n funcie de vectorul x (abscisa) 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 semilogaritmice loglog(x,y) scaleaz ambele axe folosind logaritmul n baza 10 (10-1 , 100 , 101 , 102 ,sunt echidistante) semilogx(x,y) scaleaz logaritmic axa x (10-1 , 100 , 101 , 102 ,sunt echidistante pe x) semilogy(x,y) scaleaz logaritmic axa y (10-1 , 100 , 101 , 102 ,sunt echidistante pe y) x=0 : pi/100 : 10*pi %vector real de 1000 elemente y=sin(x); semilogx(x, y)

subplot(312); semilogx(abs(Y1(1:length(Y1)/4) )); subplot(313); semilogy(abs(Y1(1:length(Y1)/4) ));

Reprezentarea discret a datelor x=0 : pi/10 : 3*pi %vector real de elemente y=sin(x); stem(x, y) Reprezentare n trepte x=0 : pi/10 : 3*pi %vector real y=sin(x); stairs(x, y)
Grafic de bare x=0 : pi/5 : pi %vector real y=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) reprezint grafic o funcie cu limite specificate: function y=f2(x) y=sin(x) .* x; % definitie functie, x poate fi vector % salvam functia in fisierul f2

>>[x,y]=fplot('f2', [-22 44], 1000); >>plot(x,y); grid;

24

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

Funia fplot returneaz 1000 abscise i 1000 ordonate n vectorii x i y. Apelm plot(x,y) pentru reprezentare grafic. comet(y) i comet(x,y) realizeaz reprezentare dinamic a unei curbe 2D printr-un punct care traseaz curba. 1. Tiprire cu format prin folosirea funciei fprintf

x=input('vector x= '); for i=1 : length(x) fprintf('element x(%3d)=%12.3f\n', i, x(i) );

Folosim: %d pentru tiprire valori ntregi (decimal) %s pt. tiprire iruri de caractere (string) end %f pentru tiprire valori reale (float) % s-a folosit \n pentru trecerea cursorului pe randul %12.3f valoarea real se tiprete ntr-un spaiu de urmator la inceput dup fiecare execuie a funciei fprintf 12 caractere dintre care 3 sunt alocate zecimalelor iar restul punctului zecimal i prii ntregi. n cadrul parametrului actual de tip ir de caractere a funciei fprintf, pot fi folosite caractere de formatare a textului (caractere de evitare): \n Linefeed LF + carriage return CR = se trece (scrie) la \t Tab (se sare un numr de inceputul liniei urmtoare 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.

Tiprire n form tabelar la ecran: x=input('medii x= '); s=0; m=0; ma=0; nivel={'slab', 'mediu', 'bun'}; %cell array conine 3 iruri de caractere de lungimi diferite fprintf(' \t\tNote studenti\n'); %dou taburi (\t) i trecere la inceputul rndului urmtor (\n) fprintf(' \t\t----------------\n'); for i=1:length(x) if x(i)<=6 s=s+1; % %s este descriptor pentru ir de caractere fprintf('student #%d nivel %s =%12.3f s=%d\n', i, nivel{1}, x(i), s) elseif x(i)<=8 m=m+1; fprintf('student #%d nivel %s =%12.3f m=%d\n',i,nivel{2},x(i),m ) else ma=ma+1; fprintf('student #%d nivel %s =%12.3f m=%d\n',i,nivel{3},x(i),ma) end end Pentru scriere n fiier (n locul ecranului) folosim o secven de forma urmtoare: x=input('vector x= '); fid=fopen('fisdate.dat', 'wt'); for i=1:length(x) fprintf(fid, 'element x(%3d)=%12.3f\n', i, x(i) ) end . Sintaxa de scriere: fid = fopen(cale_numefisier, mod) deschide fiierul n modul specificat prin mod care poate fi: 'r' read 'w' write (creaz fiierul dac este necesar) 'a' append (creaz fiierul dac este necesar) 'r+' read and write (nu creaz) 'w+' truncheaz sau creaz pentru read i write 'a+' read i append (creaz fiierul dac este necesar) Fiierul poate fi deschis (pentru citire din fiier sau scriere n fiier) n mod text (exemple 'rt' i 'w+t') sau binar (implicit). Obs.: funcia fscanf este folosit pentru citire cu format din fiiere.

25

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

CURS 6
1. Completare funcii

Funcii pasate ca parametru altei funcii:


Sunt definite dou funcii apelate: f() i rie() function [y]=f(x) function [F]=rie(f,a,b,n) y=sin(x)+x; F=f(a)+b+n end end

%Program principal( apelant) a=1; b=2; n=4; rezultat=rie(@f, a,b,n); disp(rezultat); 2. Calcule cu polinoame In Matlab polinoamele sunt reprezentate prin vectorul coeficienilor polinomului luai n ordine descresctoare a puterilor. p1=[1 2 3] ; %vector coef. p( x) = x 2 + 2 x + 3 x=[-18: .2 : 22]; Funcia polyval evalueaz un polinom %argumente (dat prin coeficienii polinomului p1) la y=polyval(p1,x); abscisele din x (parametrul al doilea). plot(x,y); Adunare i scdere de polinoame Se adun/scad element cu element coeficienii de acelai ordin. Vectorii coeficienilor trebuie s aib acelai numr 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) prod ( x ) = ( x 2 + 2 x + 3)( x 1)
imp ( x) =
p1( x ) p 2( x )
2 imp ( x ) = x + 2 x + 3

x 1

Exemplu Matlab: p1=[1 2 3]; p2=[1 -1]; prod=conv(p1,p2) [imp, rest]=deconv(p1,p2) p1_nou = conv(p2,imp) + rest
prod = 1 1 1 -3 imp = 1 3 rest = 0 0 6 p1_nou =1 2 3

nmulirea a dou polinoame 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 aloc length(p1)+length(p2)-1 pozitii n p12). p1=[1 2 3 -4]; p2=[1 -1]; p12= zeros(1,length(p1)+length(p2)-1) for i=1:length(p1) for j=1:length(p2) p12(i+j-1)=p12(i+j-1)+p1(i)*p2(j); end end p12 prod=conv(p1,p2)

Descompunerea n sum de fracii simple a raportului a dou polinoame A(x) i B(x) Fraciile conin la numitor polinoame de ordinul unu.
A( x ) r (1) r ( 2) r ( n) = + + ... + + k ( x) B ( x) x p (1) x p ( 2) x p ( n)

unde numim r(1) ,, r(n) reziduuri iar p(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. S se studieze funcia:
2 G ( s ) = s + 4 s +1

s 3 + 2 s +1

26

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

num=[1 4 1]; den=[1 0 2 1];

>> roots(num) % calcul rdcini ec.polinom ans = -3.7321 -0.2679 >> roots(den) %numitor ans = 0.2267 + 1.4677i 0.2267 - 1.4677i -0.4534 Tratarea expresiei ca funcie de transfer (tf): >> sist=tf(num,den) Transfer function: s^2 + 4 s + 1 ------------s^3 + 2 s + 1

Calcul poli, zerouri i trasare figura alturat pzmap([1 4 1],[1 0 2 1]) sau: pzmap(sist) Descompunere n fracii simple a funciei G=num/den. >> [r,p,k]=residue(num,den) r= 0.6162 - 1.2316i 0.6162 + 1.2316i -0.2324 p= 0.2267 + 1.4677i 0.2267 - 1.4677i -0.4534 k= [] 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; Dou curbe spaiale: plot3(sin(t), sin(t).*cos(t),2*t, sin(t), cos(t),2*t);

- cerculeele zerouri sunt rdcinile polinomului de la numrtor. - cu x sunt notate rdcinile de la numitor polii.

Grafic spaial dinamic - un punct traseaz dinamic curba comet3(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 meshgrid folosete domeniile 1D specificate prin vectorii x i y pentru generarea tablourilor X i Y . Aceste tablouri sunt folosite la evaluarea funciilor de dou variabile z=f(x,y) prin funciile Matlab mesh i surf cu reprezentare 3D.

27

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

>> [X,Y]=meshgrid(0:4, 6:2:10)


X= 0 0 0 Y= 6 8 10 1 1 1 2 2 2 3 3 3 4 4 4

6 6 6 6 8 8 8 8 10 10 10 10

Domeniu dreptunghiular: -primul vector 0:4 desfoar valorile pe linie sau pe axa x n cadrul matricei X. -vectorul 6:2:10 desfoar valorile pe coloane sau axa y n cadrul matricei Y. Cele dou matrice X i Y au acelai numr de lin. i col. PERECHILE (X(i,j), Y(i,j) ) formeaz reeaua de puncte din domeniul 2D oxy, dreptunghiular, de definiie al funciei z=f(x,y) 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.

>> [X,Y]=meshgrid(3:6) X= 3 4 5 6 3 4 5 6 3 4 5 6 3 4 5 6 Y= 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6

3. Reprezentare suprafee wireframe cu funcia mesh i suprafee netede cu funcia surf Matlab reprezint suprafee prin cote z = valori ale funciei pentru o reea de puncte din planul x-y. Punctele de cot z adiacente sunt conectate prin segmente colorate de dreapt (wireframe) n cazul funciei mesh i coloreaz fee pentru comanda surf. Fie o funcie de forma z=f(x,y): z=sin(x)/x unde x=sqrt(x^2+y^2) Se creaz reeaua 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); Z=sin(ra)./ra; %calcul valori funcie subplot(211); h=mesh(X,Y,Z); % h este handle la funcia mesh grid on; subplot(212); s2=surf(X,Y,Z); % vezi figura alturat ->
get(h) % returneaz setul de proprieti ale graficului asociat set(h, 'LineWidth', 1) %set(h, ) se impun proprieti 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);

28

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

4. Elemente de CALCUL SIMBOLIC Variabila simbolic se memoreaz n forma unui ir de caractere


%definete un singur obiect simbolic x = sym('x') x= x % defineste mai multe ob. simbolice syms y f g1 g2 g whos % afisaza tipul variabilelor Name Size Bytes Class f 1x1 126 sym object

Derivare
f0=3*x^3+5*x^2-6*x+2 pretty(f0) 3 2 3x +5x -6x+2 diff(f0) => ans = 9*x^2+10*x-6 % defineste expresia f f= 12 + (x-1)*(x-1)*(x-2)*(x-3) f= 12+(x-1)^2*(x-2)*(x-3) diff(f) % prima derivata ans = 2*(x-1)*(x-2)*(x-3)+(x-1)^2*(x-3)+(x-1)^2*(x-2) diff(f,x,2) % derivat de ordin 2 ans = 2*(x-2)*(x-3)+4*(x-1)*(x-3)+4*(x-1)*(x-2)+2*(x1)^2 diff(f,x,3) % a treia derivat ans = 24*x-42

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)

>> 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)

g1= 20*x^3 +15*y -30 g2 = 0.25*x + y -1; % g1,g2 pot avea derivate partiale diff(g1,x) % derivata parial ans =

g = [g1;g2] % g=vector coloan de 2 funcii de var. x,y g = [ 20*x^3+15*y-30] [ 1/4*x+y-1] % Calcul matrice Jacobian=derivatele pariale ale vectorului g n raport cu variabilele independente x i y

29

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

60*x^2 diff(g1,y) ans = 15

xy = [x y]; J = jacobian(g,xy) J = [ 60*x^2, 15] [ 1/4, 1]

% vectorul linie al variabilelor % calcul Jacobian

syms x f1 f2 % polinom cu solutii simetrice fat de oy: f1=(x-2.16)*(x-12.7)*(x-38.3) * (x+2.16)*(x+12.7)*(x+38.3) subplot(211) ezplot(f1, [-44,44]) ; line([-44 44],[0 0],'Color','r'); f2= (x-1)*(x-1)*(x-2)*(x-3)+4 subplot(212) ezplot(f2) % -2 pi < x < 2 pi ezplot(f2, [0,4]) % graficul fun. f pentru 0 <= x <= 4 Df1 = diff(f1); ezplot(df1,[0,4]) % grafic derivata line([0 4],[0 0],'Color','r')

8 (x-54/25) ( x-127/10) (x-383/10) (x+54/25) (x+127/10) ( x+383/10) x 10

3 2 1 0 -1 -2 -3 -4 -40 -20 0 x (x-1)2 (x-2) (x-3)+4 14 12 10 8 6 4 0 1 2 x 3 4 20 40

g g= [ 20*x^3+15*y-30] [ 1/4*x+y-1]

% evaluare g pentru x = 1, y = 2.5 subs(g,{x, y}, {1 , 2.5}) ans = 27.5000 1.750

Calculele numerice i symbolice pot fi combinate.

Integrare
syms x fin =2*x^2 >> int(fin) ans = 2/3*x^3 >> int(1/x) ans = log(x)

syms a b x % variabile simbolice f = 3*a*b*x + 2*exp(a*x + b); % definitie f f1 = diff(f,x) % derivata functiei f in rap. cu x f1 = 3*a*b+2*a*exp(a*x+b)

int(f1,x) % integrare f1 n raport cu x ans = 3*a*b*x+2*exp(a*x+b) % s-a obinut f din nou

int(f,0,pi/2) % integrare n raport cu variabila implicit 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) clear % definire funcii Rezolvare pereche de ecuaii neliniare: syms x1 x2 h1 = 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 >>[double(sol.x1) double(sol.x2)]

30

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

Matrice
syms 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 ] [ --------- - ---------] [ad-bc a d - b c] [ ] [ c a ] [- --------- --------- ] [ ad-bc ad-bc]

%Matrice coloana x matrice linie [a; b]*[c d] ans = [ a*c, a*d] [ b*c, b*d] det(A) ans = a*d-b*c

syms a b c d ; c=sin(a+b) d=cos(a+b) expand(c) expand(d)

etc.

ans = sin(a)*cos(b)+cos(a)*sin(b) ans = cos(a)*cos(b)-sin(a)*sin(b)


syms x y f = x^2*y + 5*x*sqrt(y) subs(f, x, 3) ans = 9*y+15*y^(1/2) subs(f, y, 3) ans = 3*x^2+5*x*3^(1/2)

Dezvoltare n serie de funcii Taylor

f ( x0 + x ) =

n =0

f n ( x0 ) ( x x0 ) n n!

Serie MacLaurin

f ( 0 + x ) = f ( 0) +

f ' ( 0) f ' ' ( 0 ) 2 f ' '' ( 0) 3 f ( n ) ( 0 ) n x+ x + x + x + Rn 1! 2! 3! n!

syms x f1 = 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^9 T2 = > 1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8


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 syms x num = 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 =

2 4 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 2 5 x - 14 x - 8 - --------------2 2

31

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor

(4*x+3)/(x^2-x+3)-(2*x^2+3*x-1)/(x^2-x+3)^2*(2*x-1)

(x - x + 3)

Diverse
1. Rezolvare sistem de ecuaii liniare de forma AX=B 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.0000 1.0000 3.0000 Sau: X2=a\b 2. Sortare prin metoda seleciei
a=input('Va sorta in ord. descresc.\nIntroduceti un sir: ') asort=sort(a,'descend'); n=length(a); for i=1:n-1 poz_max=i; for j=i+1:n if a(j)>a(poz_max) poz_max=j;%retine pozitie element maxim end end aux=a(i);a(i)=a(poz_max);a(poz_max)=aux; %intershimba end a asort

3 x1 x 2 = 5 2 x1 + x 2 + x3 = 0 2 x1 x 2 + 4 x3 = 15

3. Sortare prin metoda bulelor


a=input('Va sorta in ord. descresc.\nIntroduceti un sir: ') asort=sort(a,'descend'); n=length(a); for i=n-1:-1:0 for j=1:i %elem. cel mai mare este plasat ultimul in subsirul de indici 1,...,i if a(j)<a(j+1) aux=a(j); a(j)=a(j+1); a(j+1)=aux; end end end a asort

32

Prof.dr.ing. Iulian Lupea Programarea i Utilizarea Calculatoarelor