You are on page 1of 14
Lucrarea 5 — Figiere cu instructiuni in Matlab. Functii definite de utilizator Lucrarea 5 Figiere cu instructiuni in Matlab. Functii definite de utilizator Obiectivul lucrarii Fisierele cu instructiuni se mai numesc $i fisiere M deoarece au extensia .m. Utiizarea fisierelor M este foarte important pentru scurtarea timpului de lucru in Matlab si pentru construirea functilor definite de utilizator. Aceasta lucrare de laborator isi propune s& prezinte modul in care se construiesc si se utilizeaza fisierele M in Matlab. Aspecte generale si mersul lucrarii 4. Tipuri de figiere cu instructiuni in Matlab Limbajul de programare Matlab permite executarea instructiunilor in dou& moduri [1] - inmod interactiv, prin introducerea instructiunilor in fereastra de comand, Command Window, - prin rularea unui fisier care contine instructiunile de Matlab. ‘Ambele moduri sunt echivalente in ceea ce priveste rezultatul, dar introducerea instructiunilor in mod interactiv, una cate una, presupune rescrierea acestora atunci cand este necesara repetarea proceduri Fisierele care contin instructiuni de Matlab au extensia .m si poarta numele de fisiere M. Aceste fisiere pot fi: - Fisiere script, - Fisiere functie. 2. Fisierele script Un fisier script este un figier M care confine instructiuni de Matlab, care vor fi scrise in Editor. Editorul poate fi deschis scriind comanda edit in Command Window, care duce totodata la deschiderea unui fisier gol cu numele Untitled, aga cum poate fi observat in figura 5.1 49 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator Figura 5.1. Deschiderea Editorului Matlab cu comanda edit O alta modalitate de a deschide un fisier nou este folosirea primei pictograme (de la stanga la dreapta) de sub meniul Home aga cum poate fi observat in figura 5.2. Figura 5.2. Deschiderea unui fisier folosind pictograma New Script Rularea unui fisier script impune salvarea acestuia in prealabil, La salvarea unui figier Min Matlab, trebuie tinut cont de faptul cd numele fisierului urmeaza aceleasi convent ca la numirea variabilelor. in Matlab, numele unei variabile (si deci al unui fisier) incepe cu o litera, urmata de alte litere, cifre sau caractere underscore. In plus, Matlab este case sensitive, variabila é fiind diferita de variabila F. Numele unui fisier M nu trebuie s& contin spatii, alte simboluri decat underscore si nici nu poate avea numele unei functii deja existente in Matlab (de exemplu NU poate fi numit plot.m). La salvarea fisierului, Matlab va pune implicit extensia .m, iar daca aceasta este ignorata fisierul nu va mai putea fi rulat (Figura 5.3). La prima salvare a fisierului se foloseste pictograma Save As din meniul Home. 50 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator A selec Fle for Save As ‘ ThisC > Desktop > Informatica Apicata vo Informatica Aplicata File name: | Program : Save as ype: MATLAB Code file I © Browse Folders Save cance! Figura 5.3. Salvarea unui fisier M in Matlab Exemplu: Se va construi un fisier M cu ajutorul caruia se va reprezenta grafic functia F(x) = 2x3 + 4x? + 2x + 4, pe domeniul x € [-10, 10] Pentru rezolvarea problemei s-a construit un figier M, salvat cu numele Program_1.m, asa cum poate fi observat in figura 5.4. Se poate observa cA, in afara instructiunilor de Matlab, se pot introduce comentarii folosind simbolul », Daca un comentariu este introdus inaintea tuturor instructiunilor, acel text va deveni descrierea fisierului gi va aparea in fereastra Details atunci cand fisierul este selectat in fereastra Current Folder. Comentariile care sunt puse la finalul fiecarei instructiuni nu apar in fereastra Details si au rolul de a transmite mai multe informati utiizatorului despre fiecare parte a programului. eo Gsr~ = eater ie ee Figura 5.4. Rularea unui fisier script in Matlab 51 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator In programul din figura 5.4 s-a folosit functia clear pentru a goli spafiul de lucru (Workspace) de orice variabila definita anterior. Functia clear poate fi folosita de asemenea in fereastra de comanda (Command Window). Pentru reprezentarea grafica a functiei (x) este necesara definirea domeniului pe care se doreste evaluarea functiei. Astfel, se defineste variabila x ca fiind un vector cu pas liniar (daca pasul nu este stabilit, va fi implicit 1) de la -10 la 10. Se calculeaza apoi functia £ in cele 21 de valori ale lui x rezultate (se va vizualiza dimensiunea vectorilor in Workspace). S-au folosit operatii element cu element (. * nu *), deoarece variabila x este un vector si dorim sa ridicam la putere fiecare element al vectorului nu tot vectorul (lucru care nu este posibil). La finalul liniilor 5 si 6 din programul afigat in figura 5.4 s-a utilizat simbolul ; (punct si virgula) pentru a suprima rezultatul. x si £ nu vor fi afigate in Command Window dar pot fi vizualizate in Workspace. Reprezentarea graficd se poate face cu functia plot, a carei argument va contine vectorul x (afisat pe axa ox) si vectorul £ (afigat pe axa oy). Se poate observa in figura 5.4 ca la rularea fisierului script a aparut © noua fereastra care contine graficul functiei f(x). Un fisier script poate fi rulat in mai multe moduri, Cel mai simplu mod este apasarea butonului Run din meniul Editor aga cum poate fi observat in figura 4. Meniul Editor este activ doar atunci cand sunt deschise fisiere M (comparati figura 5.2 cu figura 5.4). Un alt mod de a rula un fisier script este scrierea numelui acestuia in Command Window sau folosirea functiei run. Deschiderea unui nou fisier M se poate face fie intorcdndu-ne la meniul Home, fie folosind prima pictograma (de la stanga la dreapta) din meniul Editor, aga cum poate fi vazut in figura 5.5. Toate fisierele deschise vor aparea sub forma unor tab-uri in Editor. Fereastra Editor poate fi separata de celelalte ferestre, pentru a céstiga mai mult spatiu pentru vizualizarea instructiunilor, folosind optiunea undock la apasarea butonului din dreapta-sus a ferestrei Figura 5.5. Deschiderea unui fisier M nou din meniul Editor 52 Lucrarea 5 — Figiere cu instructiuni in Matlab. Functii definite de utilizator Calea catre un fisier script poate fi gasita folosind butoanele de navigare ale ferestrei Current Folder. Daca un fisier deschis in Editor nu are deschisa calea catre el, la rulare Matlab va solicita schimbarea directorului de lucru, 3. Functii definite de utilizator. Fi re functie Programatorul are posibilitatea de a-si defini propriile functii (pe langa cele implementate deja in Matlab) prin construirea unor fisiere functie. Spre deosebire de fisierele script, toate variabilele dintr-un fisier functie sunt variabile locale, adica sunt valabile doar in interiorul functiei (nu apar in Workspace). Fisierele functie sunt utile atunci cand este necesara repetarea unei operatii, de ‘exemplu evaluarea unei functii de mai multe ori, in mai multe puncte. Fisierele functie pot face parte din programe mai mari si pot fi solicitate in argumentul unor functii Matlab [2]. Prima linie a unui figier functie o vor numi antet si reprezinta linia/instructiunea care defineste functia. Sintaxa prime’ linii este urmaitoarea: function [variabile de iesire] = nume_functie(variabile de intrare) - cuvantul function declara orice figier ca fiind fisier functie daca este scris la inceputul acestuia. - variabilele de iegire sunt acele variabile ale caror valori sunt calculate de instructiunile din interiorul functiei, folosind valorile variabilelor de intrare. Variabilele de iesire vor fi separate prin virgule si incadrate in paranteze patrate. Daca functia are o singura variabila de iesire, parantezele patrate pot fi omise. Pot exista si cazuri in care nu exist variabile de iesire gi atunci se va omite gi semnul =. Definirea unor variabile de iesire este singura modalitate de a scoate variabilele locale din fisierul functie si de a le face disponibile in Workspace. - numele functiei este numele cu care functia va fi apelata. Este obligatoriu ca numele fisierului s& fie identic cu numele functiei, altfel va fi afisat un mesaj de eroare. De exemplu, daca numele unei functii definite de utilizator este exemp1u atunci numele fisierului va fi exemplu.m. Numele functiei urmeaza aceleasi conventii ca la numirea variabilelor aga cum a fost descris mai sus. - variabilele de intrare sunt acele variabile care sunt necesare pentru calcularea variabilelor de iesire. Ele vor fi separate prin virgule si incadrate in paranteze rotunde, chiar daca exista doar o singura variabil de intrare. Variabilele de intrare nu sunt date 53 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator in figierul functie ci sunt preluate din Workspace. Pentru a fi preluate din Workspace ele trebuie introduse fie interactiv, in Command Window, fie prin rularea unui figier script. Una dintre modalitatile simple de a crea un fisier functie este de a deschide un figier script, asa cum a fost descris in subcapitolul anterior, in care se va scrie prima linie conform indicatiilor de mai sus. Daca primul cuvant este function, fisierul va urma automat regulile unui fisier functie O alta modalitate este de a folosi butonul New, fie din meniul Home (Figura 5.2), fie din meniul Editor (Figura 5.5), si apoi selectarea optiunii Function. Se va deschide un fisier functie cu doua variabile de iesire, numele untitled si doua variabile de intrare aga cum poate fi vazut in figura 5.6. i a it Figura 5.6. Crearea unui nou fisier functie folosind butonul New Variabilele de iesire (output Arg! si outputArg2) trebuie inlocuite ou variabilele de iesire dorite. Se poate elimina una dintre variabilele de iesire sau se pot adauga mai multe. Fiecare variabila de iesire trebuie sa aiba o instructiune care sé o defineasca/calculeze (linile 4 gi 5). Numele functiei trebuie inlocuit cu numele dorit, in caz contrar fisierul va trebui numit untitled.m. Numele fisierul nu poate fi numele unei functii deja definite in Matlab, de exemplu, numele functiei nu poate fi funct ion, plot, figure ete. 54 Lucrarea 5 — Figiere cu instructiuni in Matlab. Functii definite de utilizator Variabilele de intrare (inputArgl si inputArg2) vor fi inlocuite cu variabilele de intrare dorite. Numarul variabilelor de intrare poate fi diferit de numarul variabilelor de iesire in functie de natura problemei, @ IMPORTANT: - Un figier functie nu se ruleaza ci se apeleaza - Variabilele de intrare nu sunt date in fisierul funcfie ci sunt preluate din exteriorul acestuia (din Workspace) - O functie definita de utilizator se apeleaza cu partea din antet care nu contine cuvantul function, adica apelarea se va face interactiv (scriind in Command Window) sau ruland un fisier script care contine secventa de apelare: Ivariabile de iesire] = nume_functie(variabile de intrare) Inainte de apelarea functiei definite de utilizator se vor introduce in Workspace variabilele de intrare, in caz contrar Matlab va afiga un mesaj de eroare. Figier functie a carui antet are o de intrare gio singura variabila \gura variabild de iesi Vom relua exemplul de la sectiunea anterioara urmarind evaluarea si reprezentarea grafic a functiei f(x) = 2x? + 4x? + 2x +4, pe domeniul x € [-10, 10]. De data aceasta vom construi un figier functie care va confine expresia f(x). Stim ca pentru a calcula 0 valoare a functiei f(x) avem nevoie de o valoare a lui x, deci x va fi variabila de intrare, iar f va fi variabila de iesire. In figura 5.7 se poate observa cum a fost scris fisierul functie func.m care contine functia f(x). Pentru ca avem un singur parametru de iesire s-au omis parantezele patrate. De asemenea, Matlab afiseaza o pictograma diferita pentru figierele script fat de fisierele functie, asa cum se poate vedea in figura 5.7, in fereastra Current Folder (Program1_m este un fisier script, iar func.m este un fisier functie) Putem apela functia func pentru o singura valoare a lui x, care poate fi inlocuita direct in instructiunea de apelare. Daca se omite variabila de iesire atunci Matlab va asocia rezultatul unei variabile ans. Dacé de doreste evaluarea funetiei in punctul x = 2, adic F (2), putem scrie in Command Window. 55 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator >> func (2) ans = 40 Pentru a asocia rezultatul evaluarii functiei in x =2 unei variabile, se va folosi urmatoarea instructiune: >> £ = func(2) 40 dars9 2010 ob SPD crm oe _ See ueSeae "St OT "Slat wonapace 2 Cow Wages + > GIES» > Wien » ge» Dep > matin Aer Cato © i sstor- Cer aeo\ Deon woman Apleat\incm ame RU twen XE Alinm 1 Gfmetion f ~ fincts) Sivegamim a- jes gees satncd + 2+ 4s Figura 7. Fisier functie cu o variabila de iesire si o variabila de intrare Rezultatul poate fi asociat oricarei variabile chiar daca in figierul functie s-a declarat © ca variabilé de iesire, ¢ face legatura doar dintre antet si instructiunile din interiorul functiei. Posibilitatea de a redenumi variabila de iesire este avantajoasa atunci cand se doreste apelarea functiei de mai multe ori si pastrarea rezultatelor obtinute. Spre exemplu, daca se aleg 3 puncte (x;, x2 $i xs) in care se doreste evaluarea functiei si pastrarea acestor valori (f(x), f(x2) si (xs), tedenumirea variabilei de iegire devine utila. Se pot folosi urmatoarele instructiuni: >> xl = -57 >> x2 = 23 >> x3 = 8; 56 Lucrarea 5 — Figiere cu instructiuni in Matlab. Functii definite de utilizator >> £1 = func(x1) >> £2 = func(x2) Fisierul functie func.m primeste ca variabile de intrare si vectori. Se poate defini astfel x ca fiind un vector cu pas liniar pe domeniul -10, 10, se apeleaz apoi functia func si se reprezinta grafic folosind urmatoarele instructiuni: >> x = -10:10; >> £ = fune(x); >> plot (x, £) Daca x este vector, £ va fi un vector de aceeasi dimensiune (se poate observa in Workspace sau se poate folosi functia length (x) gi length (£)). Cele 3 instructiuni de mai sus au fost introduse interactiv, in fereastra de comanda, dar pot fi alternativ salvate intr-un fisier script. Daca se alege a doua variant, fisierul script va fi rulat, nu figierul functie. Fisierul script va apela fisierul functie oi de cate ori va fi specificat. @ IMPORTANT: - Figierul script care apeleaza fisierul functie trebuie sé fie salvat in acelasi director cu fisierul functie. 57 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator Fisier functie a cérui antet are mai multe variabile de i de intrare gio singura variabila Sa lum ca obiectiv reprezentarea graficd a functiei f(x) = 2x? + 4x? +2x +4 sia primei derivate a acesteia f"(x) = 6x? + 8x + 2, pe domeniul x € [—10, 10]. Putem crea doua fisiere functie, unul pentru f(x) si unul pentru /"(x), aga cum a fost prezentat mai sus. Totusi, pentru a simplifica lucrul in Matlab putem adauga derivata f"(x) alaturi de funotia f(x) in fisierul func.m. in plus, vom declara prima derivata a functiei ca variabil& de iesire. Vom avea, deci, doud variabile de iesire si o variabild de intrare. Noul fisier func.m va avea urmatoarea forma function [f,fd] = func(x) £ = 2*x.43 + 4x02 + 2x + 4p fd = 6*x.*2 + 8x + 27 8 end functia £(x) prima derivata a functiei £(x) La fel ca in subcapitolul anterior, variabila de intrare x poate fi scalara sau vectorial’. Daca de doreste evaluarea functiei si a primei sale derivate in punctul x = 2, atunci se poate apela fisierul functie astfel: >> [f,fd] = func (2) Chiar daca variabilele de iesire £ si fa sunt redenumite atunci cand fisierul functie este apelat, se va pastra ordinea variabilelor, adicé pe prima pozitie va fi data valoarea funotiei, iar pe pozitia a 2-a valoarea derivatei. Daca se solicita doar valoarea derivatei in punctul x = 2, se poate omite valoarea functiei folosind simbolul tilda, ~, asa cum poate fi vazut mai jos: >> [~,fd] = fune(2) 58 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator 42 Daca variabila de intrare x este vectorial, atunci se poate face reprezentarea graficd pe tot domeniul -10, 10 la fel ca mai sus. Instructiunile folosite pentru definirea variabilei de intrare x, apelarea functiei func $i reprezentarea grafic au fost scrise intr-un figier func_run.m asa cum poate fi vazut mai jos. clear x = -10:10; [£, fd] = func(x)7 plot (x,£,x,fd); grid; grid minor xlabel('x'), ylabel('f(x)') legend(‘Functia f(x)",’Prima derivata a functiei f(x)’,.. ‘Location’, NorthWest’) La rularea fisierului func_run.m se va obtine graficul prezentat in figura 5.8. 2500 Frais) |—— Priva dra anette) 10) Figura 5.8. Reprezentarea grafica a functiei f(x) si a derivatei acesteia, f"(x) 59 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator Fisier functie a carui antet are mai multe variabile de iesire si mai multe varia! de intrare Folosindu-ne de informatiile de mai sus vom crea un program capabil sa calculeze perimetrul si aria unui dreptunghi, solicitand utilizatorului sa introduca lungimea si latimea. Identificam doi parametri de iesire (perimetrul si aria dreptunghiului) si doi parametri de intrare (lungimea si latimea). Vom crea un figier functie dreptunghi.m in care vom scrie formulele perimetrului si ariei function [Perimetru,Arie] = dreptunghi (Lungime, Latime) Perimetru = 2*(Lungime + Latime); Arie = Lungime * Latime; Se poate observa ca instructiunea end s-a omis din figierul functie. Ea este utilé atunci cnd se scriu mai multe funetii in acelasi figier gi trebuie separate Pentru a apela functia dreptunghi se cere utilizatorului sa introduca in fereastra de comanda lungimea si latimea cu ajutorul functiei input. Se va crea un figier script cu numele dreptunghi_run.m care va confine urmatoarele instructiuni clear Lungime = input ('Introduceti lungimea dreptunghiului '); Latime = input ('Introduceti latimea dreptunghiului ') [Perimetru,Arie] = dreptunghi (Lungime, Latime) La rularea fisierului dreptunghi_run.m se va afiga in fereastra de comanda perimetrul si aria dreptunghiului pentru ca nu s-a folosit simbolul ; la sfarsitul ultimei instructiuni Ambele figiere dreptunghi.m si dreptunghi_run.m vor fi salvate in acelasi director. 4. Functii definite de utilizator in argumentul unor functii Matlab Sunt multe functii Matlab care solicita in argumentul lor functii definite de utilizator. Pentru a putea fi utilizate in acest fel, functile definite de utilizator au nevoie de un handle. Acesta este de fapt referinta céitre functia definita de utilizator. In acest scop se foloseste simbolul @ inainte de numele functiei 60 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator Sa luam de exemplu functia g(x) = 4x? + 20x +4 pentru care construim un figier functie cu denumirea func_g.m: function g ne_g(x) g = 4x42 + 20*K + 4; Putem reprezenta grafic functia g(x) utiliznd functia Matlab fp1ot. In argumentul functiei Matlab £p ot se serie referinta catre functia definité de utilizator folosind simbolul @. Funofia este reprezentata grafic pe intervalul implicit [-5 5], dar poate fi modificat cu usurinta. >> fplot (@func_g) O alté functie Matlab care solicita referinta catre 0 functie definita de utilzator este fzero care cauta radacinile functiei in vecindtatea unei valori alese de utilizator. S-a creat un figier script func_g_run.m care confine instructiunile de mai jos: clear x1 = fzero(@func_g,-5) x2 = fzero(@func_g, 0) fplot (@func_g, [-7 5])# gri hold on plot (x1,0,’ro’,x2,0,/ ro’) xlabel(’x’); ylabel(’g(x)") title(’Graficul functiei g(x) si radacinile acesteia’) grid minor Functia g(x) are doua radacini care vor fi afigate in fereastra de comanda dar si reprezentate grafic (Figura 9). 61 Lucrarea 5 — Fisiere cu instructiuni in Matlab. Functii definite de utilizator Cele doua rdacini, 1 si x2, pot fi suprapuse peste graficul obtinut cu functia fp1ot daca se foloseste instructiunea hold on. 1s0| / te s Figura 7.9. Reprezentarea grafica a functiei g(x) si radacinilor acesteia Exist numeroase functii Matlab care solicit crearea unei functii definite de utilizator si, de aceea, definirea corecta a variabilelor de intrare si de iesire este foarte importanta. Bibliografie [1] Gilat Amos. Matlab. An Introduction With Applications. Third Edition. John Wiley & Sons, USA, 2008. [2] Palm WJ. Introduction to Matlab for Engineers. McGraw-Hill, ed. III. 2011 Cerinte 1, SA de introduca in Matlab toate instructiunile de Matlab prezentate in aceasta lucrare. 2. Sa se scrie un program care sa afiseze grafic functia f(x) = (2x — 1)(x + 1)(x- 2), prima si a doua derivata a acesteia pe intervalul x € [—10 10]. f(x), f’(x) si f"(x) vor fi scrise intr-un singur fisier functie. 3. Sa se scrie un program care s afigeze aria si volumul unui con, solicitand utilizatorului s introduc raza $i indiltimea. Formulele ariei si a volumului se vor scrie intr-un singur fisier functie 62

You might also like