O functie simpla pentru plot: Sintaxa: ezplot(‘functia(x)’,[limita_inf,limita_sup]) Daca nu se specifica limitele, se folosesc limite implicite

[0,2*pi] Exemple: Ezplot(‘sin(x)’) Ezplot(‘x^2+y^2-1’,[-2,2]) ezplot ('x^2+y^2-1',[-2,2]); axis equal Important – e necesar sa se specifice axis equal, precedat de ; daca dorim ca unitatile de masura sa fie egale pe cele doua axe (adica sa iasa chiar cerc) – altfel cercul arata ca o elipsa!! Alt mod de a scrie: Se poate folosi functia inline g=Inline(‘x^2’) ezplot(g) // fara ghilimele!!! g=inline('x^2+y^2-9'); ezplot(g,[-5,5]);axis equal De retinut si comanda SOLVE – care intoarce solutia unei ecuatii sau a unui sistem. solve('x^2-5*x+6=0') O chestie foarte importanta, care distinge MATLAB de alte limbaje de programare – se accepta variabile simbolice. De exemplu: syms x y //fara virgula!!! asta iti permite sa le folosesti ulterior fara sa le asignezi neaparat niste valori numerice!! deci se poate scrie: syms x y y=x^2+3 ezplot(y) //y nu e in ghilimele!! alt exemplu: syms y y z y=10*(1-cos(x)) z=sin(x) ezplot(y*z,[0,10]) Vectori si matrici Vectorii se pot defini asa: X=[1,2,3,4,5] sau: X=[1 2 3 4 5]

Virgula si spatiul sunt echivalente in acest caz. Sau asa: X=1:5 Variante: X=[5,4,3,2,1] X=5:-1:1 La modul general X=limita_inf : cuanta : limita_sup Cuanta poate fi fractionala sau negativa! X’ este vectorul transpus lui X Y=X' Y = 5 4 3 2 1 Se poate aplica un vector ca argument al unei functii: De exemplu, sin(X) este un vector de aceeasi dimensiune cu X, care are ca elemente sinusul elementelor lui X. Se poate scrie si direct: sin(1:5) sin(1:2:20) Matricile se pot defini asa:
A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12]

Raspunsul este:
A 1 5 9 = 2 3 4 6 7 8 10 11 12

Se observa ca delimitarea intre linii se face cu ‘;’ Suma a doua matrici A+B este o matrice care are ca elemente suma elementelor i,j din cele doua matrici. Matricile adunate trebuie sa aiba aceleasi dimensiuni. Doua matrici se pot inmulti daca A[nxm] B[mxl] atunci C[mxl]=A*B

( A * B ) ij = ∑ Aik * Bkj
k =1

m

Exemplu: Daca A= 1 2 3 4 5 6 7 8 9 B=[10, 20,30] A*B’= 1*10+2*20+3*30 4*10+5*20+6*30 7*10+8*20+9*30 Nota: B’ este transpusa lui B Vom reveni asupra matricilor. De retinut comanda whos, care listeaza variabilele definite in cursul programului sau a sesiunii de lcuru curente. Poti sa verifici daca o variabila este definita, tastandu-i numele. De exemplu: % definire variabilei x=2 %.... x Si obtii raspunsul:

x= 2 Nota: Comentariile se delimiteaza cu simbolul ‘%’

Comanda LENGTH – intoarce dimensiunea unui vector. Exemplu: A=[1 2 3 4] length(A) ans 4 Daca este aplicata unei matrici, length intoarce numarul de elemente de pe o linie.\

se foloseste comanda SIZE SIZE(C) ans 2 4 Elementele individuale ale unui vector Acestea pot fi adresate astfel: A=[1 2 3 6 8 10] A(1) 1 A(4) 6 A(5) 8 Observatie: Nu se incepe numerotarea de la zero ci de la 1!! In cazul unei matrici. Exemplu: A=[1 2 3 4] sum(A)=1+2+3+4 Daca argumentul sum este o matrice. Exemplu: . intoarce suma elementelor. Pentru a afla dimensiunea unei matrici..B] length(C) – intoarce 4.*B P = 3 15 35 7 9 9 11 63 99 Functia SUM Pentru un vector. sum() intoarce un vector linie care are ca elemente suma elementelor de pe fiecare coloana a matricii argument.*’ Exemplu: >> A=[1:2:10] A = 1 3 5 >> B=[3:2:11] B = 3 5 7 >> P=A.j) % i este numarul liniei j este numarul coloanei Array multiplication Este produsul element cu element a doi vectori. Se simbolizeaza cu ‘. se poate adresa un element oarecare cu: C(i.A=[1 2 3 4] B=[4 5 6 7] C=[A.

2) ans = 2 4 2 4 3 5 4 6 Selectarea unei linii C(1.B] C = 1 3 >> sum(C) ans = 4 6 2 4 3 5 4 6 8 10 Adresarea unui grup de elemente dintr-un vector A=[1 2 3 4 5] X=A(2:4) X=[2 3 4] Izolarea unei coloane dintr-o matrice Sintaxa: C(:.:)=[ ] .2)=[ ] D = 1 3 3 5 4 6 Stergerea unei linii D(1.:) ans = 3 2 3 4 4 5 6 Stergerea unei coloane intr-o matrice D(:.i) – izoleaza coloana i Exemplu: C = 1 3 C(:.>> A=[1 2 3 4] >> B=[3 4 5 6] >> C=[A.:) ans = 1 C(2.

8284 1.6569 -1.2*x = 5') Asta intoarce: x = [ 1+2*2^(1/2)] [ 1-2*2^(1/2)] y = [ 7+4*2^(1/2)] [ 7-4*2^(1/2)] double ([x. y] = solve('x^2 . Exemplu A=[1 –5 6] % x^2-5*x+6=0 roots(A) ans = 3.0000 2. 'y .0000 1. Rezolvarea unor ecuatii generale Comanda SOLVE(‘expresia1=0’.8284 12.D = 3 4 5 6 Selectarea unei sub-matrici C(1:2.’expresia2=0’) Exemplu: [x. Ecuatii polinomiale de tipul P(x)=0 Comanda ROOTS(A) A este un vector al coeficientilor polinomului.2:3) 1:2 se refera la liniile selectate 2:3 se refera la coloanele selectate Note despre rezolvarea ecuatiilor 1.y]) ans = 3.y = 2'.3431 Exemplu de mai sus este un sistem de ecuatii cu doua solutii. Se pot izola valorile individuale ale solutiilor cu x(1) .

Comanda AXIS AXIS([XMIN XMAX YMIN YMAX]) Defineste limitele plot-ului Atentie – vectorul de intrare pentru axis() se refera intai la limitele pentru axa x si apoi la limitele pentru axa y – NU la perechi (x.’S’) Daca x.Care intoarce: ans = 1+2*2^(1/2) si y(1) ans = 7+4*2^(1/2) x(2) ans = 1-2*2^(1/2) y(2) ans = 7-4*2^(1/2) Mai sunt si alte moduri/comenzi pentru rezolvarea unor ecuatii.’S’. dar nu ma intereseaza deocamdata.S=o .y. .. Mai multe despre plotting 1. parametrii x si y ai plot sunt vectori.. .) De regula. pentagram .y) Parametrul ‘S’ indica ce simbol sa se foloseasca pentru reprezentarea punctului.S=p . se poate scrie: plot(x1.x2.S=x .y3. Comanda PLOT(x.y2. y sunt scalari – atunci se ploteaza un punct in plan cu ccoordonatele (x..’S’.’S’.y) cum ar parea logic!! 2.S=h – hexagram Daca sunt mai multe puncte de plotat.y1.x3.S=* ..omiterea parametrului – se pune un punct Cateva optiuni posibile pentru S . Daca se omite parametrul ‘S’ punctele plot-ului se unesc cu linie continua.

f.g. delinitate de ghilimele simple. title('Damped Spring Forcing') Parametrii xlabel.'--') % dashed line plot(x.f. atunci includem in aceleasi ghilimele ambii specificatori: plot(x.x. . ylabel sunt facultativi.g.g.':') Selectia culorilor pentru plot Sunt posibile 8 culori (din care una e alb!) pentru plot-uri. plot(t.f. plot(x.f.4]). Ele sunt codate astfel: Color White Black Blue Red Cyan Green Magenta Yellow Specifier w k b r c g m y Daca vrem sa specificam simultan ca e vorba de linie intrerupta de culoare verde. xlabel('t').x.[0. X.'--'.01:4].'-'.Exemplu: X = -1:0. f = exp(-2*t)*sin(t). Comanda fplot este mai putin pretentioasa decat ‘plot: Seamana mai mult cu ezplot decat cu plot – parametrii sunt string-uri. f) Desi pare corecta.01:2.'-'. ylabel('f(t)'). genereaza o eroare. g=exp(-2*x).^2) Asta are ca efect plotarea unei parabole. Eroarea provine de la faptul ca exp(-2*t) si sin(t) sunt VECTORI (matrici).'g--') % dashed line Comanda FPLOT Exemplu: fplot('exp(–2*t)*sin(t)'.'-'.x. plot(X.x.':') % ‘:’ linie punctata ‘-‘ line continua plot(x. Observatie importanta!!! Secventa de comenzi: t = [0:0. Exemplu: f=exp(-x).g.

f = exp(-2*t).'cos(x)') . [0 10]) Asta are ca efect figura urmatoare: Comanda LEGEND Adauga o legenda la un plot multiplu: Ex: plot(x.x. f) Crearea unor grafice cu plot-uri multiple Comanda HOLD ON/OFF Mentine deschisa fereastra unde se genereaza plot-ul si pentru urmatoarele comenzi plot/ezplot.'g-'.'--b').*sin(t).z. Exemplu: ezplot('exp(-x)'. plot(t.y. trebuie sa folosim array multiplication (.*). care are ca efect inmultirea element cu element a celor doi vectori!!! Deci corect este: t = [0:0. legend('sin(x)'. [0 10]) hold on ezplot('sin(x)'.Corect.01:4].

y = [50.ylabel('Score'). N) generates N points between X1 and X2. Comanda polar(x. distantata cu cuanta q. Comanda bar(x.txt') Atentie – single quotes ! . dar foloseste scara logaritmica pe ambele axe Comanda semilog(x. Este cumva similara cu: X=[a1:q:a2] Care genereaza un vector cu valori intre a1 si a2. Exemplu: x = [1:5].75.98.y) Genereaza un plot de tip bargraf.Comanda LINSPACE LINSPACE(X1. X2) generates a row vector of 100 linearly equally spaced points between X1 and X2.y).y) Simlara cu plot. title('Final Exam') Asta produce un grafic ca in figura: 100 90 80 70 60 Sco re 50 40 30 20 10 0 1 2 3 Student 4 5 Comenzile load si save Salveaza si restaureaza valorile variabilelor curente Exemplu: Y=load('test. LINSPACE(X1. xlabel('Student').98]. bar(x. X2.80.y) Similara cu plot – cu axa logaritmica pe axa x.y) Este similara cu plot() dar traseaza graficul in coordonate polare Comanda loglog(x.

end While trebuie marcat de un end.y2). o functie poate fi apelata de programul principal. y=sqrt(y). y1. Nu se folosesc acoladele in MATLAB (sau se folosesc in alt scop).txt Y Despre functii Functiile sunt fisiere m.2. De exemplu: d=dist(1. variabila locala y folosita in functie. y=(x1-x2)^2+(y1-y2)^2. Important ! Variabilele definite intr-o functie sunt LOCALE ! Despre buclele de program 1. while(x<=10) x=x+1. dar mi-a generat o matrice 21x21. y2) dist.4) Observatie.m function y=dist(x1. 2. while(conditie) Exemplu: x=1.3. Ca sa obtin o singura linie ar fi trebuit sa elimin CR-urile din fisier.y1. De exemplu nu poti redefini functia sin(x) – obtii o eroare.Incarca matricea Y dintr-un fisier text Observatie: Am incarcat cu comanda load fisierul MAP0. Oricum e interesanta observatia. for . iar valoarea intoarsa de aceasta poate fi asignata unor variabile. x2. Exemplu – functia urmatoare calculeaza distanta intre doua puncte.TXT pe care l-am folosit in programul cu feromonii. plasate in directorul curent sau in alta parte pe calea de cautare. Odata definita.x2. Comanda de salvare: save -ascii test. date prin coordonatele lor (x1. care contin definitia UNEI functii. nu o gasesc cu WHOS in programul principal! Nota: Nu se pot defini functii care sunt deja predefinite in MATLAB.

’y’. SWITCH Exemplu: N=3. z] ans = [ 2] [ -1] [ 3] Got it') .3*y + 7*z = -1’. 4. 2. 7.5) break. ’z’) Verificarea rezultatului: A = [3. 1].5) break.6*y + z = 3’.50000000000000 Nota: In exemplul de mai sus sunt doua statement-uri “end” – unul pentru for si unul pentru if !! Se poate si asa: N=10. end end 3. for (x=1:0. A*[x. y. ’x . 1.1:N) if(x>=4. ’x’. z] = solve(’3*x + 4*y + 5*z = 2’. -3. y. 5. end end x x = 4. switch(N) case 3 disp(' end Got it Exercitiu: Sa se rezolve sistemul de ecuatii liniare: 3x + 4y + 5z = 2 2x − 3y + 7z = −1 x − 6y + z = 3. Solutie: [x.Exemplu: for (x=1:0.1:10) if(x>=4. -6. ’2*x .

Mai multe despre expresii simbolice Niste functii folositoare expand(expresie) Exemple: syms x. de exemplu: DBSTOP IF WARNING Note despre dialogul cu operatorul Functia disp(‘mesaj’) Functia input(‘mesaj’) exemplu: x=input(‘Introduceti un numar: ‘) Functia fprintf() este foarte asemanatoare cu printf() din C . ca sa terminam programul. ca sa putem inspecta variabilele. DBSTOP poate fi conditionat. asta se face din menu sau cu comanda dbstop Daca dorim sa continuam executia se foloseste dbcont In final dbclear – pentru stergerea breakpoint-urilor sau dbquit. y expand(sin(x+y)) ans = sin(x)*cos(y)+cos(x)*sin(y) %!!! factor(expresie) – produce descompunerea in factori Exemplu: factor(x^2-y^2) ans = (x-y)*(x+y) Functia simplify Exemplu: simplify(cos(x)^2+sin(x)^2) ans = 1 Note despre debugging Daca dorim putem plasa breakpoints in programe.

1). Sunt cateva .varargin{:}) . inainte de fiecare comanda ezplot se da comanda: figure(1) figure(2) etc.Un exemplu de functie care citeste date dintr-un fisier text in care datele sunt scrise cate o valoarea pe fiecare linie.fscanf(fp. Ca sa controlez culoarea in ezplot. lipire a doua matrici A=[A:B] citire formatata direct cu fscanf [1.'r'). 1).8])].8] testare pentru end of file Note despre ezplot Ca sa deschid mai multe figuri simultan. [1. VR=[VR. [1.'linestyle'.fscanf(fp. 1)].'--') %Type help plot to see available colors and line styles function setcurve(varargin) h=get(gca.dat’). '%d'. '%d'. 1)].modul de . e nevoie de un script: setcurve. '%d'.'red') % setcurve('color'. File: read.m (salvata pe cale sau in directorul curent) %change properties of last curve in current figure %Examples: % setcurve('color'. VL=fscanf(fp.m function A=read(file_name) fp=fopen(file_name. '%d'. % dummy data VR=fscanf(fp. '%d'.modul de . if feof(fp) break end %end if end %end while fclose(fp). % dummy data while 1 A=[A. '%d'.modul de . VL=[VL.8]).fscanf(fp.modul de lucruri demne de atentie in functia asta: folosire a fopen/fclose. end %end file Apelarea acestei functii se face sub forma: A=read(‘record. A=fscanf(fp.'green'. set(h(1).'children').

m % presupunem ca X este o matrice linie (1.i).sigma) for (i=1:1:length(X)) Y(1. end Sigma poate fi si el pasat ca parametru: % presupunem ca X este o matrice linie (1.Y).O problema uzuala Se da o matrice X=[-1:0. [-1. Nota Dimensiunile unei matrici se pot afla cu comanda size E util de exemplu cand citim matricea dintr-un fisier.i)=1/Y(1. de exemplu: ezplot('(1/(1+exp(-2.i) function Y=sigmoid(X) sigma=2.Y).i)). Y(1. Y(1. end Cazul cand Y contine niste date experimentale care se citesc dintr-un fisier dintr-un fisier: Y=load('record. atunci Y trebuie sa fie o matrice de aceeasi dimensiune cu X.2*x)))'. % le citeste ca o coloana Y=Y'.f(x(1.i))] Fiecare element al matricii Y este o functie de elementul corespunzator al matricii X.i)=1+exp(-1*sigma*X(1.01:1] Se cere graficul plot(X.i) function Y=sigmoid(X.dat'). sa=size(A) ans= 215 8 Recapitulare . for (i=1:1:length(X)) Y(1.2.1]) Daca vrem sa folosim plot(X. %Y’ este transpusa lui Y X=[1:1:length(Y)].Y) unde Y este o matrice de forma Y=[1.i)). Pentru asta ne trebuie o functie File:sigmoid.i)=1+exp(-1*sigma*X(1. Una din solutii este.i). hold on plot(X.i)=1/Y(1.

% este echivalent cu: a=1+2+. MATRICI 1. b=7... daca vrei sa reicitesti secvente de exercitii. Numere complexe 5+4i – este un numar complex 5+4*i – i este interpretat ca o variabila!! c. pe aceeasi linie se pot introduce mai multe comenzi separate prin virgula sau ‘. MKDIR – make directory RMDIR – remove directory COPYFILE – copiere fisier DELETE . pana la comanda ‘diary off’. Modalitati de definire a variabilelor de tip matrice si vector a. de exemplu: a=1+2+3+4. b=7. % trei puncte 3+4. %fara afisare Comanda diary(‘filename’) creaza un fisier text in care se pastreaza tot dialogul din fereastra de comenzi. Sintaxa generala a comenzilor O comanda lunga poate fi continuata pe linia urmatoare.. Comenzile zeros si ones A=zeros(3) are ca efect crearea unei matrici (3x3) cu toate elementele egale cu zero.sterge fisier Adaugarea unor directoare la calea (PATH) curenta se face fin meniul principal File -> Set path b. Comenzi de file management PWD – print working directory. E utila pentru incepatori.’ De exemplu: a=5. c=6.a. De asemenea. A = . c=6 sau a=5. Afiseaza directorul curent DIR – listeaza fisierele din directorul curent LS – echivalent cu DIR (pentru utilizatori invatati cu Linux) CD change directory Merge si CD .

Comanda eye Creaza matrici diagonale Exemplu: >> eye(4) ans = 1 0 0 0 Merge si: >> eye(3.4) 0 1 0 0 0 0 1 0 0 0 0 1 .0 0 0 0 0 0 >> A=zeros(1.4) A = 0 0 0 0 0 0 0 >> A=zeros(2.2) B = 1 1 1 1 1 1 1 1 Nota: Dimensiunea unei matrici se poate afla cu functia size() >> size(B) ans = 4 2 b.4) A = 0 0 0 0 0 0 0 0 >> B=ones(4.

3252 >> randn(3) ans = -1.. echidistante in intervalul definit de valorile lim1. e. Comanda linspace Genereaza un vector.9219 -2.5287 0. x=linspace(lim1.1) x=[100 99 98 .2126 0..5165 0. lim2. Doar daca nu se specifica. 2 1] ii.6041 0. E utila pentru plot-uri rapide. lim2) Genereaza un vector cu fix 100 de elemente.. De exemplu: x=linspace(1.2572 0..8051 0.2573 -1.1707 0.4113 d. x=linspace(lim1. N) Se poate specifica direct numarul de elemente al vectorului generat.0565 1. 100] Obs. Nu este necesar ca lim1 < lim2 Se poate si asa: x=linspace(100.ans = 1 0 0 0 1 0 0 0 1 0 0 0 c.2193 -0.100) genereaza x=[1 2 3 4 . Se poate folosi in doua moduri: i. Definirea matricilor prin asignare directa . lim2. Comenzile rand si randn creaza matrici ale caror elemente sunt numere aleatoare >> rand(3) ans = 0.4850 0. se foloseste valoarea implicita N=100.0845 0.4741 0..6618 0.4151 -0.

3.6.2.2.4] >> A=[1 2 3 4] A = 1 2 3 4 >> B=[1.Definirea unor vectori: A=[1 2 3 4] echivalent cu A=[1.2.7.4] B = 1 2 3 4 Observatie: Asignarea directa REDEFINESTE matricea. daca ea era deja definita!! De exemplu.4.4) 3 4 Separarea liniilor in comanda de asignare pentru matrici se face cu ‘.3.3. 5 6 7 8] 2 6 3 7 4 8 .’ Exemplu: >> A=[1.8] A = 1 5 Sau asa: >> A=[1 2 3 4 .5. secventa: >> A=zeros(4) A = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> A=[1 2 3 4] A = 1 2 %reduce A la un vector (1.

al doilea este cuanta.2.j) este elementul de pe linia i si coloana j. Definirea vectorilor folosind operatorul colon ‘:’ Exemple de sintaxa: >> A=[1:3:8] A = 1 4 7 Merge si fara paranteza patrate!! >> A=1:3:8 A = 1 4 7 Primul termen al expresiei A=1:3:8 este marginea inferioara a intervalului.4] B = 1 2 3 4 f. iar al treilea este marginea superioara.3)=2 0 0 0 0 0 0 0 0 0 . >> A=zeros(3) A = 0 0 0 >> A(1.2)=1 A = 0 1 0 0 0 0 >> A(1.>> B=[1. Accesul la elementele unei matrici Elementele individuale ale unei matrici pot fi adresate indicand numarul liniei si al coloanei De exemplu A(i.3.

Obs. Aici e obligatoriu ca argumentele sa fie separate de virgula. 13 14 15 16] A = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16 .3) C = 2 0 0 Observatie: Aici trebuie evitata confuzia intre paranteze patrate si rotunde! Se pot izola si linii sau coloane incomplete >> X=A(1. NU de la zero! A = 0 0 0 1 0 0 2 0 0 Izolarea unei linii sau coloane dintr-o matrice >> B=A(1. 9 10 11 12. 5 6 7 8. Atentie: numerotarea liniilor si coloanelor incepe de la 1. 3) Z = 2 0 >> A=[1 2 3 4.:) B = 0 >> C=A(:. Nu merge cu spatiu! A(1 3)=2 da eroare. [2 3]) X = 2 2 1 2 >> Z=A([1 2].

2:3) D = 2 6 10 3 7 11 Evident.>> B=A(1. 1:end)=5 A = 5 5 9 13 5 6 10 14 5 7 11 15 5 8 12 16 . 2:end) % linia 1 de la coloana 2 la end B = 2 3 4 >> C=A(1:end. merge si cu variabile simbolice: >> k=3 k = 3 >> D=A(1:k. 2) C = 2 6 10 14 >> D=A(1:3. 2:k) D = 2 6 10 3 7 11 Se poate folosi asta si pentru asignarea unor valori in submatrici: >> A(1.

B C] virgula Z = 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 Se poate si asa: >> W=[A B. B] X = 1 1 >> Y=[A. 1 1 1].B] Y = 1 1 2 2 1 1 2 2 1 1 2 2 % am combinat intentionat separatori spatiu si 1 1 1 1 2 2 2 2 2 2 3 3 3 3 >> Z=[A.. [3 3 3. C =. B C] .. 2 2 2]. B = [2 2 2.Combinarea elementelor din mai multe matrici pentru a obtine o noua matrice >> A = [1 1 1. 3 3 3] A = 1 1 1 1 1 1 B = 2 2 2 2 2 2 C = 3 3 >> X=[A.

Adunarea si scaderea De exemplu.*Y Se foloseste cand avem doua matrici X si Y de aceleasi dimensiuni iar Z=X.n) * Y(m. daca X si Y au aceleasi dimensiuni. atunci Z=X+Y are elementele Z(m.Matrix multiplication Z=X*Y - .*Y are elementele Z(m. daca A = 1 1 1 1 1 1 B = 2 2 Atunci A+B ans = 3 3 3 3 3 3 2 2 2 2 Se poate face si adunarea cu un scalar: >> A+3 ans = 4 4 4 4 4 4 b.n) . Z=X.W = 1 1 2 2 1 1 2 2 1 1 2 2 2 2 3 3 2 2 3 3 2 2 3 3 Operatii cu matrici a.n) = X(m.n) De exemplu.n) + Y(m.n) = X(m. Inmultirea matricilor E de doua feluri: Array multiplication.

. n) k c. sau pot intoarce mai mult de o variabila! (asta nu e posibil in alte limbaje).Asta este imultirea propriu-zisa de matrici din algebra Z (m.. Z(m. k ) * Y (k . arg2.\ Z = X./Y means that for each m and n. dar altereaza niste avriabile globale) si functii de argument void.n) = Y(m. Impartirea matricilor (division) Sunt patru feluri de impartire: doua array division si doua matrix division Array division .argN) Exista totusi si in MATLAB functii void (care nu intorc nici o valoare. sau pseudo-inversa./ sau . Z(m. n) = ∑ X (m.n) Z = X. Exemplu: A = 1 1 >> size(A) 1 1 1 1 .n)/X(m.n)/Y(m.n) Matrix division Cele doua forme de matrix division implica folosirea conceptului de matrice inversa.. Apelarea lor se face prin simpla invocare a numelui – fara paranteze.n) = X(m.\Y means that for each m and n. Exemplu functia rand – intoarce un numar pseudoaleator O particularitate importanta a functiilor MATLAB (multe din ele) este polimorfismul: adica pot fi apelate cu un numar variabil de parametri. care vor fi analizate mai tarziu FUNCTII Sintaxa generala: variabila=function_name(arg1.

n]=size(A) %se asigneaza cele doua valori intoarse de size variabilelor m si n!! m = 2 n = 3 .ans = 2 3 >> [m.

Functii predefinite in MATLAB .

caracter.INPUT & OUTPUT FUNCTIONS Keyboard input Functia input(‘prompt_string’) Exemplu: a=input(‘Introduceti ceva:’). 5 6 7 8] . vector etc. Exemple de folosire: >> a=input('Introduceti ceva:') Introduceti ceva:1234 a = 1234 >> a=input('Introduceti ceva:') Introduceti ceva:[1 2 3 4] a = 1 2 3 4 >> a=input('Introduceti ceva:') Introduceti ceva:[1 2 3 4. Acel ‘ceva’ introdus este asignat variabilei a si poate fi orice: numeric. string.

m function a=kbin a=input('Introduceti ceva:') end >> x=kbin Introduceti ceva:123 a = 123 x = 123 Observatie: >> whos a = . %sirul trebuie inclus in ghilimele simple!! Introduceti ceva:'assder' assder Observatie: Am incercat sa folosesc functia input dintr-o functie definita de mine: File: kbin. daca incerc sa asignez valoarea intoarsa catre o variabila.a = 1 5 2 6 3 7 4 8 >> a=input('Introduceti ceva:') Introduceti ceva:asgfasdf ??? Undefined function or variable 'asgfasdf'. obtin o eroare: >> x=kbin ??? Error using ==> kbin Too many output arguments.m function kbin a=input('Introduceti ceva:') end Cand o apelez: >> kbin Introduceti ceva:123 a = 123 In schimb. Geseala e urmatoarea: File: kbin.

050000e+000 >> fprintf('Fie un string: %s\n'. >> x x = 1 2 3 4 >> disp(x) 1 2 3 4 Functia fprintf Seamana cu printf din C/C++. 8 8 double array double array . fara a indica si numele: >> x=[1 2 3 4]. Avem un numar oarecare. a=input('Introduceti ceva:') end In schimb.0). 3 >> fprintf('Avem un numar oarecare. %d\n'. 3. 'Asta e string-ul').Name x Size 1x1 Bytes 8 Class double array a este variabila locala pentru functia kbin!! Ramane locala chiar daca o definesc ca globala in functie: File: kbin. 3. 3. %d\n'. Exemple de utilizare: >> fprintf('Avem un numar oarecare. in programul principal >> clear >> global a.m function a=kbin global a. Afiseaza variabila. Avem un numar oarecare. daca o definesc ca globala inainte de a apela functia.05). >> x=kbin Introduceti ceva:123 a = 123 x = 123 >> whos Name Size Bytes Class a 1x1 (global) x 1x1 FUNCTII DE IESIRE Functia disp(var).

'C'). 234. Fie un numar zecimal: 235 Se observa ca face rotunjire automat.2f\n'. Fie un numar zecimal: 234.000000e+000 Observatii in legatura cu fprintf Nu stie sa tipareasca numere complexe : pur si simplu ignora partea imaginara In principiu. Fie un numar intreg afisat hex: EA >> fprintf('Fie un numar zecimal afisat hex: %2X\n'. Rezumatul specificatorilor de format la fprintf: . 234. Fie un numar negativ zecimal exprimat hex: -1. 234.556).0f\n'. Fie un numar zecimal: 234. -1). Fie un caracter: C >> fprintf('Fie un numar zecimal: %f\n'. Fie un numar zecimal: 234. >> fprintf('Fie un numar intreg afisat hex: %2X\n'. obtinut cu fopen) Exemple de apel fopen: >> FID1=fopen('test.556). (234. 'Sa scriem un sir: %s\n\r'.2f\n'. caz in care trebuie specificat FID – ul (File ID-ul.3)). 'Asta e sirul').txt'.556000 >> fprintf('Fie un numar zecimal: %5.56 >> fprintf('Fie un numar zecimal: %2.556).txt'. fprintf merge si pentru scrierea intr-un fisier.'r+') FID1 = -1 % daca fisierul nu exista.30e+002 Nu vrea cu numere negative !! >> fprintf('Fie un numar negativ zecimal exprimat hex: %16X\n'. 234). intoarce -1!!! >> FID1=fopen('test.'w+') FID1 = 3 % a creat fisierul >> fprintf(FID1. 234.56 >> fprintf('Fie un numar zecimal: %2. Fie un numar zecimal afisat hex: 2.Fie un string: Asta e string-ul >> fprintf('Fie un caracter: %c\n'.556). daca nu_i dam voie sa afiseze toate zecimalele.

y1 = sin(x). Dupa ce am definit vectorii.y2). x. Dar merge sa folosim doua sau mai multe seturi de vectori: plot(x. si iese ceva de genul asta: .y1.1:2*pi.y1).y) Unde x si y sunt doi vectori Exemplu: x = 0:0. se poate scrie: plot(x. y2=cos(x).FUNCTIA plot Cel mai simplu mod de a o apela este: plot(x.

y1=sin(x1). Parametrul suplimentar s defineste culoarea si tipul de linie folosit pentru plot si poate lua urmatoarele valori: Se pot combina. de exemplu: plot(x1.’s’).'. plot(x1.y1. Este posibil ceva de genul urmator: x1=linspace(0.'b'). y2=cos(x2). 2*pi).Observatie.'r.x2.y2. Genereaza figura: .y.x2.y1. 2*pi).y2) si se obtine: Parametri suplimentari pentru functia plot plot(x. x2=linspace(-pi/2.

y1.y2.'g--'.iar: plot(x1. rezulta in: Comenzi auxiliare pentru plot axis axis equal modifica figura in felul urmator: >> >> >> >> >> axis equal grid on xlabel('angle in radians'). ylabel('amplitude in Volts').x2. title('Some diagram').'bd'). .

ii).6] if ii > 0 fprintf(‘%f \n’.5 2. ii). end Loop count= 1 Loop count= 3 Loop count= 5 Loop count= 7 Loop count= 9 Merge si asa: (indexul definit de un sir de valori) for ii = [-2 4 6 -7 3 5 -45 1 -0. ii). se poate face acelasi lucru si asa: . end end Mult mai interesant.PROGRAM LOOPS Bucle de tip for. end Expresia care defineste bucla for are forma generala for ii=limit1:quantum:limit2 Exemplu: >> for ii=1:2:10 fprintf('Loop count= %d\n'. Au structura generala: for variable = expression statements end Exemplu: for ii = 1:10 fprintf(‘\n Loop Count: %d\n’.

m function list_of_primes = myprimes(N) % MYPRIMES Returns a 1xN vector of all the primes from 1 to N % Method: Sieve of Eratosthenes (ca 240 BC) . for ii = 1:length(x) if x(ii) > 0 fprintf('%f \n'. end n = n + 1. Daca incercam sa definim o variabila inainte de a defini functia. Total=%d\n'. input_argument2. total). n. 3.6]. x(ii)).x=[-2 4 6 -7 3 5 -45 1 -0.5 2. E nevoie de cate un end pentru while for si if! USER DEFINED FUNCTIONS Structura generala a definitiei unei functii este: function [output_argument1. Sunt obligatorii parantezele patrate in definitia liste de valori de iesire - O functie desteapta (Sita lui Eratostene) pentru gasirea numerelor prime mai mici decat numarul specificat in argument. end end In bucle for se poate folosi break pentru iesirea prematura. total = 0. …] = function_name(input_argument1. 2. if(total>=30) break. Numele fisierului trebuie sa coincida cu numele functiei Definitia functiei trebuie sa fie prima linie necomentata din fisier. fprintf('n=%d. output_argument2. Spre deosebire de C o functie poate intoarce mai multe valori. File:myprimes. while n <= 10 total = total + n. obtinem o eroare (Attempt to use a script as a function) Cuvantul function apare primul in expresia de definitie a functiei. Bucle de tip while Exemplu: % test pentru bucle de tip while n = 1. Ca si la for conditia de la while NU se pune obligatoriu in pranateze Spre deosebire de for. …) Functiile se definesc in fisiere m de sine statatoare – cate un fisier pentru fiecare functie. incrementarea indexului ramane in grija programatorului. %incrementarea indexului e treaba utilizatorului end Observatii: 1.

Apoi se foloseste indexarea logica – list_of_primes = all_numbers(prime). list_of_primes = all_numbers(prime). 0 if n is not prime. prin care se extrag in variabila list_of_primes doar elementele din all_numbers indicate de 1 (logic) din prime. all_numbers=1:N. % (2) Mark all the numbers that are multiples of a number: for n = 2:sqrt(N) % No factor can be larger than sqrt(N) if prime(n) % Multiples of primes include all multiples prime(n+n:n:N) = 0. Asta se facea relativ greu in C/C++. Exemplu step by step de functionare: >> prime=ones(1. Ce e demn de retinut de aici este smecheria numita “logical indexing”. Se obtine o structura pentru prime ca mai jos: prime = 0 1 1 0 1 0 1 0 0 0 Asta e “sita”. Apoi se fac doua operatii importante: prime=logical(prime) Asta converteste valorile numerice 0 si 1 din vectorul prime in valori logice. prime = ones(1. prime(1) = 0. Se construieste vectorul prime de aceeasi lungime cu all_numbers. initial cu toate valorile 1. % (1) Assume that all the integers from 2 to N are prime. care indica mai multe operatii executate asupra vectrului prime. prime(n) = 1 if n is prime. end end % (3) Put the survivors on a list: prime = logical(prime).% Variables: % prime 1xN. Alta tehnica demna de retinut este linia de cod: prime(n+n:n:N) = 0.N).10) prime = 1 1 1 1 >> n=2 >> prime(n+n:n:10) = 0 1 1 1 1 1 1 . Apoi se pune in prime cate un zero in pozitiile in care numarul e multiplu al unui numar mai mic.

count = total. persistent total. % % % % % Declares the variable total to be persistent. total = total + x. end % % % % The first time this function is run. de exemplu. Conceptul e cumva similar cu variabilele statice din C. end % un singur end pentru if si else Asta poate fi folosita. Note: the local variable count defined in the function declaration can not be persistent! That’s because any variable that is going to be persistent must be declared that way before appearing anywhere else in the function. else out = 0. if isempty(total) total = 0. Definitia trebuie sa apara inainte de orice folosire Exemplu de folosire a variabilelor persistente: function count = running_total(x) %running_total Maintains a running total of all values passed to the function % Function running_total will print the sum total of all values passed to it. This conditional checks to see if the matrix is empty. but it's an empty matrix. That restriction includes the function declaration. that means it's the first time the function has been run and the value of total is set to zero. Variabile globale Variabilele globale trebuie definite ca atare atat in programul principal. O alta functie interesanta: function out = iscomplex(input) % ISCOMPLEX Determines whether the input argument is complex % The function will return 1 if the input is a complex number and % will return 0 if the input is not complex. If it is. cat si in TOATE functiile care le folosesc! Variabile persistente Se folosesc in functii care se apeleaza de mai multe ori si isi pastreaza valorile inte apleuri.prime = 1 1 1 0 1 0 1 0 1 0 Se vede ca a scris 0 la pozitiile corespunzatoare multiplilor numarului n=2. asa: . if imag(input) > eps out = 1. total exists as a persistent variable.

class(x) ans= double x=int8(x) class(x) ans= int8 Conversiile astea merg bine daca nu se depaseste domeniul.function test_real(n) if iscomplex(n) fprintf('E numar complex\n'). end TIPURI DE DATE (DATA TYPES) Se poate afla de ce tip este o anumita variabila folosind functia class Exemplu: >> class(10) ans = double 1. else fprintf('E numar real\n'). Date numerice Sunt posibile conversii de forma: x=10. de exemplu: .

Functii in legatura cu sirurile Exemple: >> x=num2str(pi) x = .uint8(300) ans= 255 sau: uint8(-10) ans= 0 %uint nu poate reprezenta decat numere pozitive Totusi sunt aiureli majore aici. de exemplu: >> x=10 x = 10 >> x=uint8(x) x = 10 >> x=x*30 ??? Error using ==> * Function '*' is not defined for values of class 'uint8'.

1416 >> a=str2num(x) a= 3.1416 >> class(x) ans = char >> x=num2str(pi) x= 3. The callback function executes. The primary function calls gui_mainfnc. . Definirea unei proprietati Object_Name.1416 Uite cum merge isspace: >> mmm='what a day!' mmm = what a day! >> isspace(mmm) ans = 0 0 0 0 1 0 1 0 0 0 0 Intoarce un vector cu 1 in pozitiile unde era spatiu in stringul indicat ca input! GRAPHICAL USER INTERFACES (GUI) Conceptul de « obiect » Din perspectiva programarii. 2. Crearea unui GUI se face folosind GUIDE Secventa de tratare a unui event 1. Un obiect este descris de un set de « proprietati ». which is in our current case MyVeryOwnGUI. un obiect este un set de date si totalitatea functiilor care opereaza asupra lor. E bine de retinut ca elementele unui GUI avem astfel de obiecte. gui_mainfnc calls the callback function. passing as an argument the name of the callback function 3.3. 4.Property_Name = Property_Value Se observa ca obiectul este o structura de date. 5. The user causes an event with the mouse or keyboard. Matlab’s GUI system detects the event and calls the primary function.

Save the changed version of data with the command guidata(object_handle. ylabel('Height (m)'). plot(x. grid.tg. in lista de proprietati gasim una numita “String” – care este textul de pe buton si una numita “Tag” . .m function throw(viteza) % Flight trajectory computation % % Initial values g = 9. % launch angle. GUIDE defineste automat un handle (hObject ) al figurii si o structura de date (handles) in _Opening_Fcn: % hObject % handles handle to figure structure with handles and user data (see GUIDATA) . ft/s^2 theta = 80 * pi/180. Problema e mult mai complicata si se bazeaza pe doua functii: GUIDATA GUIHANDLES Comanda GUIDATA Store or retrieve application data.Pentru obiecte de tip buton. title('Flight Trajectory') end Imi propun sa construiesc un GUI cu graficul si un buton care declanseaza aruncarea. xlabel('Distance (m)'). axis([ 0 1100 0 600 ]). % gravity.^2. y = viteza * sin(theta) * t . Make the desired changes to data.g/2 * t.y).data). In pasul urmator GUI2 imi propun sa adaug un slider cu care sa ajustez viteza initiala. s disp('distance traveled (ft):') % label for distance xg = viteza * cos(theta) * tg % distance traveled % Compute and plot flight trajectory t = linspace(0. radians % Compute and display results disp('time of flight (s):') % label for time of flight tg = 2 * viteza * sin(theta)/g % time to return to ground. E bine sa modificam tag-ul pentru ca functia apelata la apasarea butonului va avea un nume compus din tag+_Callback Proiectul learn/GUI1 Am o functie care ploteaza traiectoria unui proiectil File:throw. x = viteza * cos(theta) * t.81... OK e banal – pur si simplu in functia callback asociata cu butonul se invoca functia throw cu viteza fixa.256). Mod de utilizare: • • • Get a copy of the data with the command data = guidata(object_handle). axis equal.

handles).5. handles. %citim structura %aici definim noile variabile!!!!!! handles.Set breakpoints for debugging Syntax dbstop in file dbstop in file at location dbstop in file if expression .to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) handles=guidata(hObject). %citim structura speed=handles.Recapitulare Luam ca referinta programul /learn/GUI3 care simuleaza aruncarea unor corpuri in camp gravitational si traseaza traiectoria rezultanta. handles) % hObject handle to pushbutton1 (see GCBO) % eventdata . intensity_factor=handles. eventdata. %executia efectiva Despre debugging dbstop . Exista un buton “Aruncare” si doua slider-e unul care ajusteaza viteza initiala si celalalt unghiul de aruncare.speed=100.intensity_factor=0. angle_factor=handles. % Update handles structure guidata(hObject. function pushbutton1_Callback(hObject. guidata(hObject. handles) intensity_factor = get(hObject.'Value'). handles). % guidata(hObject. eventdata. handles=guidata(hObject). handles.unghi).Executes on button press in pushbutton1. function slider1_Callback(hObject.speed. handles.unghi=45. unghi=90*angle_factor. . %read user data %write it back - Iar in functia callback asociata cu butonul.angle_factor=0.angle_factor. %n-am nevoie sa salvez nimic aici throw(speed. speed=speed*intensity_factor.intensity_factor.definirea variabilelor suplimentare se face in functia gui_OpeningFcn handles=guidata(hObject). scriem: % --.Executes on slider movement.5. handles.intensity_factor=intensity_factor. handles) %salvam noua structura In functiile (callback) asociate cu fiecare slider: % --.

'String'). proiectul dialog2 care muta cu doua butoane mesajul intre doua Edit-box-uri.Executes on button press in Clear_Button. % --. Variatiune. handles) % hObject handle to Message_Button (see GCBO) % eventdata reserved . handles) % hObject handle to Clear_Button (see GCBO) % eventdata reserved .Executes on button press in Message_Button. eventdata. in felul urmator: % --.dbstop in file at location if expression dbstop if condition dbstop(s) dbcont – continua executia de la beakpoint (pana la urmatorul) dbstep – executa un pas Ctrl+C iese din mod debug dbquit – iese Cate ceva despre dialogul cu utilizatorul in GUI Comentarii la programul “/learn/dialog1” Contine un “Edit box”. eventdata. .'String').to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) m=get(handles.msg_disp. set(handles. set(handles.edit1.am modificat proprietatile “String’ si ‘Tag’ ale obiectelor din GUI ca sa arate asa: Am modificat codul generat automat in functiile callback asociate cu butoanele.'String'.edit1.'').m). un camp “Static text” si doua butoane “Afiseaza” si “Sterge” Folosind GUIDE .to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) m=get(handles.'String'. function Clear_Button_Callback(hObject.edit1. function Message_Button_Callback(hObject.

function sumator_OpeningFcn(hObject. % hObject handle to figure % eventdata reserved .de notat faptul ca hObject este handle pentru obiectul curent! .Executes just before sumator is made visible. se afiseaza un mesaj de eroare in caz contrar .se preiau datele introduse si se salveaza in variabilele adaugate num1 si num2 .se verifica faptul ca datele introduse sunt numerice.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to sumator (see VARARGIN) % Choose default command line output for sumator handles. In esenta.Pasul urmator: Proiectul /Learn/sumator Are urmatoarele obiecte: Se incepe prin a defini doua variabile suplimentare num1 si num2 care reprezinta valorile numerice asociate cu sirurile introduse in cele doua Edit-box-uri.output = hObject. % Update handles structure guidata(hObject. handles). Mai departe se editeaza callback-functions pentru cele doua edit-box-uri.num1=0.de notat folosirea functiei str2double . eventdata. handles. handles. % Aici cream noile variabile!!!!!! % cream doua variabile NUMERICE asociate cu SIRURILE din edit-box-uri % si le initializam cu zero handles. rolul functiilor este urmatorul: . Asta se face intotdeauna in functia sumator_OpeningFcn % --. varargin) % This function has no output args. see OutputFcn.num2=0.

'Error') end handles.num).to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject. if isnan(num) num = 0.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) addition = handles. . eventdata. handles) % hObject handle to edit2 (see GCBO) % eventdata reserved .to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject. set(hObject.num2.handles) Si pentru butoane: Butonul de adunare (Tag = ‘Add_Button’ % --. function Clear_button_Callback(hObject.Executes on button press in Clear_button.handles) function edit2_Callback(hObject. eventdata. set(handles.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) handles=guidata(hObject). handles) % hObject handle to Add_Button (see GCBO) % eventdata reserved . guidata(hObject.'String'. function Add_Button_Callback(hObject. handles) % hObject handle to Clear_button (see GCBO) % eventdata reserved .'String') returns contents of edit2 as text % str2double(get(hObject.num1 + handles.Executes on button press in Add_Button. errordlg('Input must be a number'.num2 = num.'String') returns contents of edit1 as text % str2double(get(hObject.function edit1_Callback(hObject. 'String'. eventdata.num). errordlg('Input must be a number'. set(hObject.num1 = num. guidata(hObject.'String')). if isnan(num) num = 0. handles) % hObject handle to edit1 (see GCBO) % eventdata reserved . addition).'String')).'String')) returns contents of edit2 as a double num = str2double(get(hObject. eventdata.'String')) returns contents of edit1 as a double num = str2double(get(hObject.'String'. % result este Static text-ul unde se afiseaza rezultatul Butonul Clear (Tag=’Clear_button’) sterge atat campurile de tip edit-box cat si rezultatul % --.result. 'Error') end handles.

dar de data asta valorile vitezei si ale unghiului se introduc manual in doua Edit-box-uri.speed=50. handles. .'String'. handles). set(handles.num1=0.'0'). guidata(hObject.edit1. % hObject handle to figure % eventdata reserved . 'String'.'String'. 0). eventdata. function GUI4_OpeningFcn(hObject.result. handles. % Update handles structure guidata(hObject. handles.num2=0.set(handles. handles. see OutputFcn. varargin) % This function has no output args.'0'). Incepem prin a defini doua variabile suplimentare speed si angle. set(handles.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to GUI4 (see VARARGIN) % Choose default command line output for GUI4 handles.handles) Proiectul /Learn/GUI4 – Aruncare in camp gravitational Revenim la proiectul cu aruncarea in camp gravitational.edit2.angle=45. % Aici cream noile variabile!!!!!! % cream doua variabile NUMERICE handles. pe care le salvam in structura handles.output = hObject.

Modificam codul generat automat pentru cele doua edit-box-uri:
function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double handles=guidata(hObject); %citim structura num = str2double(get(hObject,'String')); if isnan(num) num = 0; set(hObject,'String',num); errordlg('Input must be a number', 'Error') end if (num>100) || (num<0) num = 0; set(hObject,'String',num); errordlg('Speed out of range', 'Error') end handles.speed = num; guidata(hObject,handles) function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double handles=guidata(hObject); %citim structura num = str2double(get(hObject,'String')); if isnan(num) num = 0; set(hObject,'String',num); errordlg('Input must be a number', 'Error') end if (num>90) || (num<0) num = 0; set(hObject,'String',num); errordlg('Angle out of range', 'Error') end handles.angle = num; guidata(hObject,handles)

Si pentru pushbutton
function Throw_Button_Callback(hObject, eventdata, handles) % hObject handle to Throw_Button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) handles=guidata(hObject); %citim structura speed=handles.speed; angle=handles.angle; throw(speed,angle);

Functii cu numar variabil de argumente de intrare. Folosirea varargin
Reluam exemplul cu functia care traseaza traiectoria unui proiectil aruncat in camp gravitational
function throw2(varargin) % Flight trajectory computation % if nargin<2 disp('Too few arguments'); return; end % Initial values g = 9.81; % gravity, ft/s^2 viteza=varargin{1}; theta = varargin{2} * pi/180; % launch angle, radians % Compute and display results disp('time of flight (s):') % label for time of flight tg = 2 * viteza * sin(theta)/g % time to return to ground, s disp('distance traveled (ft):') % label for distance xg = viteza * cos(theta) * tg % distance traveled % Compute and plot flight trajectory t = linspace(0,tg,256); x = viteza * cos(theta) * t; y = viteza * sin(theta) * t - g/2 * t.^2; if nargin==2 hold on; plot(x,y), axis equal, axis([ 0 1100 0 450 ]), grid on, ... xlabel('Distance (m)'), ylabel('Height (m)'), title('Flight Trajectory') else hold off; plot(0,0), axis equal, axis([ 0 1100 0 450 ]), grid on, ... xlabel('Distance (m)'), ylabel('Height (m)'), title('Flight Trajectory') end

Se observa ca se poate testa numarul de argumente al functiei (nargin) si se pot extrage argumentele din varargin{} . Folosirea RADIO BUTTONS Proiect /Learn/GUI5 E un upgrade la GUI4 in care introducem in pluis un radio button care controleaza HOLD ON/OFF pentru plot. Definim o variabila suplimentara:
function GUI5_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. handles.output = hObject; % Aici cream noile variabile!!!!!! handles.speed=50; handles.angle=45; handles.rbstatus=0; %radio button status % Update handles structure guidata(hObject, handles);

Modificam codul pentru Radio button: % --- Executes on button press in radiobutton1. function radiobutton1_Callback(hObject, eventdata, handles) % hObject handle to radiobutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject,'Value') returns toggle state of radiobutton1 handles=guidata(hObject); %citim structura mm=get(hObject, 'Value'); handles.rbstatus=mm; guidata(hObject, handles); Si pentru pushbutton
% --- Executes on button press in Throw_button. function Throw_button_Callback(hObject, eventdata, handles) % hObject handle to Throw_button (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) handles=guidata(hObject); speed=handles.speed; angle=handles.angle; mm=handles.rbstatus; if(mm==1) throw2(speed,angle); else throw2(speed,angle,1); end %citim structura

Folosirea check-box-urilor Proiect: /Learn/Beat

% hObject handle to figure % eventdata reserved . handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved . eventdata.Executes on button press in pushbutton1.output = hObject. %%%%%%%%%%% % Update handles structure guidata(hObject. %%%ADDED%%% % initialise global variable cf global cf. Variabile globale trebuie redeclarate ca globale in toate functiile care le folosesc! Functia asociata cu butonul “Play” % --. see OutputFcn. GUI-ul arata asa: Detalii function beats_OpeningFcn(hObject. cf=1000.Ilustreaza grafic si sonor compunerea a doua oscilatii cu frecvente apropiate care dau fenomenul de batai. varargin) % This function has no output args.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) . handles). handles. O noutate aici: folosirea uei variabile globale cf. function pushbutton1_Callback(hObject. eventdata.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to beats (see VARARGIN) % Choose default command line output for beats handles.

Like the sound function.'Value') returns toggle state of checkbox1 global cf.44000). the precision) of the sample values. axis([ 0 0. The possible values for bit depth depend on the audio hardware available on your system.axes1). in y soundsc(y.checkbox2. set(handles. Most platforms support depths of 8 bits or 16 bits.y). before playing the signal.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject.0 to 1. soundsc scales the values to fit in the range from -1.bits) specifies the bit depth (that is. % -------------------------------------------------------------------- .text1. Tips • • The soundsc function supports sound devices on all Windows and most UNIX platforms.checkbox1.% reference global variable global cf. handles) % hObject handle to checkbox1 (see GCBO) % eventdata reserved . Specifying a sample rate outside this range produces unexpected results.5*sin(2*pi*(cf+bf/2)*t). cf=1000. soundsc assumes that y contains floating-point numbers.1 -1 1 ]). set(handles. soundsc(y.'String'. return. eventdata.Executes on button press in checkbox1. The default range is [min(y) max(y)]. maps the values between low and high to the full sound range. the soundsc function plays at an 8-bit depth. Most sound cards support sample rates between 5 kHz and 48 kHz.5*sin(2*pi*(cf-bf/2)*t)-0.Fs. soundsc(y.0.Fs) sends audio signal y to the speaker at sample rate Fs. However. O noutate aici: folosirea functiei SOUNDSC soundsc(y.range).Fs. If you do not specify a sample rate. function checkbox1_Callback(hObject.1). soundsc plays at 8192 Hz.0). plot(t. If you do not specify bits. % make beats by combining two sinewaves %t=0:1/11025:1. set(handles. % set default axes to figure and plot axes(handles. Specifying Fs and bits is optional. y=0.'Beats Demonstration (1000Hz)'). where range is of the form [low high]. Functiile asociate cu check-box-urile % --. % get beat frequency from text box bf=45. grid on return. t=0:1/44000:1.bits. so that the audio is played as loudly as possible without clipping.'Value'.'Value'.

se creaza automat fisierul m asociat cu noul nume. set(handles.'Value') returns toggle state of checkbox2 global cf. sau Pushbutton.'String'. varargin) handles. Cea ma semnificativa variatiune pe tema asta este sa definim un edit box unde sa introducem valoarea frecventei de batai bf.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hint: get(hObject.% --. sa arate ca un Toggle Button. eventdata. bf=100. eventdata.1).'Value'. set(handles. fara sa modificam deloc codul. avem nevoie de inca o variabila globala: function beats3_OpeningFcn(hObject.0).text1. % initialise global variables global cf. daca salvam cu Save as si schimbam numele figurii. cf=1000. handles) % hObject handle to checkbox2 (see GCBO) % eventdata reserved .'Beats Demonstration (2000Hz)').'Value'.checkbox1.Executes on button press in checkbox2. sau Radio button.output = hObject. global bf.checkbox2. handles. function checkbox2_Callback(hObject. . return. cf=2000. set(handles. care pastreaza toate modificarile facute de user!! Se poate modifica proprietatea “Style” a check-box-urilor. Pentru asta. % -------------------------------------------------------------------- Variatiuni: /Learn/beats2 Observati1: Din GUIDE.

'String'. handles). set(hObject.handles) . set(hObject. if isnan(num) num = 100.'String'.'String') returns contents of edit1 as text % str2double(get(hObject. Iar codul pentru edit-box arata asa: function edit1_Callback(hObject. errordlg('Bf out of range'. end bf=num. errordlg('Input must be a number'. guidata(hObject.num). eventdata. handles=guidata(hObject).'String')) returns contents of edit1 as a double global bf. 'Error') end if (num>1000) || (num<1) num = 100. %citim structura num = str2double(get(hObject. handles) % hObject handle to edit1 (see GCBO) % eventdata reserved .% Update handles structure guidata(hObject. 'Error') bf=num.to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject.num).'String')).

j)).Cate ceva despre File I/O 1. A=rand(4. end fprintf(fid. end fclose(fid). File: fcreate2. [m n]=size(A).'w').0f '. '%f\r\n'.m % asta e un script nu o functie! % definim o matrice A si o scriem intr-un fisier text. . n numarul de coloane al A fid=fopen('mdata2.8). A(i. if fid<0 disp('Cannot open file').8). Variatiune: Sa scriem matricea in fisier. % m contine numarul de linii. in asa fel incat s-o % putem reconstitui usor. end end fclose(fid). return end for i=1:m for j=1:n fprintf(fid.j)). Exercitiu: Sa se scrie o matrice A[m.txt'.n] intr-un fisier text in asa fel incat fiecare element al matricii sa fie pe cate o linie a fisierului. return end for i=1:m for j=1:n fprintf(fid. cate o linie a matricii pe o linie a fisierului de iesire. A=rand(4.m % asta e un script nu o functie! % definim o matrice A si o scriem intr-un fisier text.'w'). '%4. n numarul de coloane fid=fopen('mdata1. % m contine numarul de linii. if fid<0 disp('Cannot open file').txt'. [m n]=size(A). '\r\n'). 1000*A(i. in asa fel incat s-o % putem reconstitui usor. File: fcreate.

intoarce in vectorul x TOATE valorile din fisier.txt’.n] fid=fopen('mdata1. B=zeros(m. if fid<0 disp('Cannot open file'). return end fprintf(fid. for i=1:m for j=1:n B(i. %numarul de linii n=8. ‘%d’). n numarul de coloane al A fid=fopen('mdata3.txt'.Totul se poate scrie mai simplu: File: fcreate3.m % asta e un script nu o functie! % definim o matrice A si o scriem intr-un fisier text. File: fread1. Secventa de comenzi: fid=fopen(‘mdata1. if fid<0 disp('Cannot open input file') return end A=fscanf(fid.n). end end .numarul total de valori din fisier) Ne propunem sa scriem un script – si ulterior o functie refolosibila – care sa citeasca datele dintr-un fisier text (se presupune ca sunt valori numerice acolo) si sa le organizeze in diverse configuratii de matrici specificate. A=A'. % m contine numarul de linii. m=4.'rt'). 1000*A). A=rand(4. ‘rt’).8). fclose(fid).'wt'). in asa fel incat s-o % putem reconstitui usor. x=fscanf(fid. indiferent cum sunt organizate.j)=A(k). [m n]=size(A). x este un vector cu N linii si o coloana (N. Acum sa le citim. fclose(fid). '%d'). ‘%3.txt'. k=k+1. OK. %numarul de coloane k=1.0f’.m % citim fisierul specificat intr-o matrice % organizam matricea initiala copiind campurile intr-o alta matrice % de dimenziunea dorita [m.

2. Transmisia unor pachete de raspuns.Variatiune. k=1. cum se folosesc 3.'rt').7) OK – ce urmeaza? 1. Neural networks 5. . demos_async . n) % m si n sunt dimensiunile matricii de iesire care contine datele din % fisier fid=fopen(file_name. A=A'. plotarea.j)=A(k).Introduction to serial port binary read and write operations.n). Citeste datele din fisier si intoarce o matrice de dimensiunea specificata cu datele citite din fisier. k=k+1.txt’.2.8) Se pot citi si bucati mai mici din fisierul initial: B=read2(‘mdata1. Automate celulare Cam asta ar fi si ordinea de abordare Pentru inceput.Introduction to serial port asynchronous operations. salvarea in fisiere.4. Primirea unor pachete de date pe linia seriala.txt’. Fuzzy logic 4. e bine sa citesc help-ul pentru urmatoarele demo-uri: Serial port demos. if fid<0 disp('Cannot open input file') return end A=fscanf(fid. Sa se scrie o functie care primeste ca argumente numele fisierului si numarul de linii si coloane al matricii de iesire. File: fread2. for i=1:m for j=1:n B(i.Introduction to serial port ASCII read and write operations. conditionate de primirea pachetelor de intrare. '%d'). demos_ascii .m function B=read(file_name.txt’. B=zeros(m. Timere. demos_binary . Comunicatie seriala.8) sau se pot reorganiza altfel datele: B=read2(‘mdata1. fclose(fid).3. m. interpretarea lor. end end %A is a local variable Exemple de apel a acestei functii: B=read2(‘mdata1.

y) ale unui punct din plan si o constanta a . delete(existing_ports). B sunt numere intre 0 si 1. 9600. 0x03. c) X si Y sunt matrici care contin coordonatele colturilor poligonului c este culoarea c este o matrice de forma [R G B] unde R. Y care contin coordonatele colturilor unui patrat cu centrul in punctul (x. 'BaudRate'. A). 'COM1'). clear existing_porta. % se emite 0x01.m % % % % % % o functie care primeste ca argumente coordonatele (x. end . 'terminator'. 4800) set(newport. . Y. pot genera cu terminalul Br@y aproape orice pachete repetitive de date.cu fwrite'). Se pot schimba individual parametrii portului. fopen(newport) fwrite(newport. 'InputBufferSize'. fprintf(newport. A=1:5. 300 ) Un interludiu Functia fill deseneaza un poligon plin cu o culoare specificata Exemple: fill (X.cell size si creaza DOI vectori X. 'baudrate'.m Creaza un nou obiect de tip serial port (COM1) il deschide trimite un string pe linia seriala inchide portul si sterge variabilele asociate % % % % %Verificam daca portul exista deja existing_ports=instrfind('Port'.1). Un prim test cu linia seriala: FILE: serial_hello.Pentru teste. G. 0x04. 'TimeOut'. % cream noul obiect newport = serial('COM1'. '%3.y) Numerotarea colturilor incepe cu cel din dreapta-jos si se continua in sens trigonometric . 0x02. 0x05!!! fclose(newport). de exemplu: set(newport. De exemplu: [1 1 1] inseamna alb [0 0 0] inseamna negru. 'Alt mesaj emis cu cu fprintf'). set(newport. 123).0f'. if length(existing_ports) > 0 disp('Port already in use!'). fprintf(newport. [1 0 0] inseamna rosu pur Exemplu de utilizare: file: corners. 'Hello World! . delete(newport) clear newport. fprintf(newport. 'CR').

Y=[y1 y2 y3 y4].a) x1=x+a/2.Y]=corners(i. X=[x1 x2 x3 x4]. end end Si efectul este: Se poate reorganiza mai general asa: File: draw_map. k=[1 1 1].20). y1=y-a/2. x2=x+a/2.Y]=corners(x.y. y3=y+a/2.% defineste colturile unui patrat de latura a in jurul punctului specificat function [X. y4=y-a/2. fill(X. y2=y+a/2. hold on axis equal.Y.j. Exemplu de utilizare a acestei functii %un test de folosire a functiei corners cu fill figure(1). % k este culoarea de fill R G B % daca R=G=B se obtin nuante de gri!! for i=10:20:500 for j=10:20:500 [X. x4=x-a/2.m % o functie care primeste ca input doi parametri . x3=x-a/2.k).

if x>=0 center_x=cell_size*floor(x/cell_size)+cell_size/2.y.y.% number_of_cells si cell_size % deseneaza o harta grid patrata cu latura data de % number_of_cells*cell_size % harta este simetrica in jurul originii % de exemplu draw_map(50. avem nevoie de o functie paint_cell(x.center_y. color_shade ia valori intre 0 si 1. else center_x=cell_size*floor(x/cell_size)-cell_size/2. hold on.color_shade) care sa coloreze celula hartii. color=[1 1 1]. end if y>=0 center_y=cell_size*floor(y/cell_size)+cell_size/2. else center_y=cell_size*floor(y/cell_size)-cell_size/2.color). fill(X. for ii=-size/2:cell_size:size/2 for jj=-size/2:cell_size:size/2 [X. apoi se determina colturile patratului si in final se face fill function paint_cell(x. care afiseaza nuante de gri: % % % % % paint_cell e o functie care primeste ca input coordonatele unui punct in plan (x. cell_size) size=number_of_cells*cell_size.y) specificate. Se presupune ca cell_size este globala. inainte de a apela draw_map() e necesar sa scriem: figure(1). color=[color_shade.y) si inca un parametru care indica nuanta de culoare folosita pentru fill. . varianta asta.Y. fill(X. se identifica celula hartii corespunzator coordonatelor specificate. Iata si functia main care deseneaza o diagonala: figure(1) hold on axis equal global cell_size. In continuare. color_shade]. corespunzatoare coordonatelor(x. end [X. end end Nota: In main. axis equal. color_shade.cell_size).jj.Y.Y]=corners(center_x.cell_size).cell_size) color_shade=1-color_shade.Y]=corners(ii.color).color_shade. De exemplu. 20) deseneaza un teritoriu patrat (50x50 celule) intins intre % -500 si +500 function draw_map(number_of_cells.

WAVWRITE(Y. NBITS must be 8. Stereo data should be specified as a matrix with two columns. draw_map(51. (in intervalul [-1. end Generarea unor sunete cu frecventa/forma controlata si salvarea intr-un fisier wav.cell_size).NBITS. Daca folosim valorile implicite de mai sus. amplitude values outside the range [-1. WAVWRITE(Y.FS. for i=1:length(X) paint_cell(X(i). WAVWRITE(Y.cell_size).8000) y=sin(2*pi*x) plot(x.y) % creaza o matrice cu 8000 de elemente liniar crescatoare intre 0 si 1 . X=0:10:500. matricea Y care trebuie pregatita pentru o secunda de ton ar trebui sa aiba 8000 de elemente.WAVEFILE) writes data Y to a Windows WAVE file specified by the file name WAVEFILE.Y(i). with a sample rate of FS Hz and with NBITS number of bits.1]) Exemplu: x=linspace(0.WAVEFILE) assumes NBITS=16 bits.cell_size=20. Y=0:10:500.wav") sound file.1.8. Functia MATLAB care scrie efectiv datele in fisier este: WAVWRITE Write Microsoft WAVE (".0.+1] are clipped.FS. For NBITS < 32. or 32. 16.WAVEFILE) assumes NBITS=16 bits and FS=8000 Hz. 24.

. wavwrite(y.*(sin(2*pi*f1*x)). x=linspace(0.wav').file: snd1. Numarul de esantioane pe secunda total_samples=Fs*total_time.6.total_samples). % sample frequency.total_time.total_time. y=(sin(2*pi*f0*x)). y=sin(2*pi*f0*x). % numarul total de esantioane f0=7. % numarul total de esantioane f0=8.Fs. % frecventa sunetului generat in Hz f1=16000. % sample frequency.y).'rada2.y). %in secunde Fs=40000. wavwrite(y. % frecventa sunetului generat in Hz f1=15000. %sound(y.Fs. %in secunde Fs=40000. Numarul de esantioane pe secunda total_samples=Fs*total_time.'rada.6.wav').m total_time=3. file: snd2. Numarul de esantioane pe secunda total_samples=Fs*total_time.Fs). plot(x.Fs). % numarul total de esantioane f0=7. %in secunde Fs=20000. sound(y.total_samples).m total_time=3. Varianta cu modulatie de frecventa %Modulatie de frecventa total_time=2. % sample frequency. % frecventa sunetului generat in Hz x=linspace(0. plot(x.

*fm). y=0. %sound(y.'rada2.wav'). axis ([0 0.Fs.Fs).01 -1 1]).9*sin(2*pi*t.total_time. .total_samples).t=linspace(0. plot(t.y). fm=f1+1000*sin(2*pi*f0*t). wavwrite(y. De notat aici si modul de plot cu specificarea axelor.