Sunteți pe pagina 1din 12

Informaticaaplicatninginerie MATLAB

CURS2

FUNDAMENTELEPROGRAMRIINMATLAB(continuare)
3. CreareafiierelorMATLAB(.mfiles) Deoarece este mult mai comod i util dect introducerea comenzilor linie dup linie la prompterul MATLAB,selucreazcufiieretextcareconinacesteliniiprogramcucomenzilenecesare. Aceste fiiere conin coduri n limbajul MATLAB i sunt denumite .m files (sau Mfiles). Fiierele se creeazutiliznduneditordetextiapoiseutilizeazcaocomandMATLABobinuit. Suntdoutipuridefiiere.m: Fiiere script, care nu accept argumente de intrarei nu returneaz argumente de ieire. Acestefiiereopereazcudateledinspaiuldelucru. Rutine function, care accept argumente de intrare i returneaz argumente de ieire. Variabileleutilizatesuntvariabilelocale(interne)alefunciei. PentruavedeaconinutulunuifiierMATLAB,deexempluevolutie_studii.m,sefolosetecomanda:
type evolutie_studii

Fiierescript Atuncicndseapeleazlaunfiierscript,MATLABulexecutcomenzilegsitenfiierulrespectiv. Fiierele script pot lucra cu date din spaiul de lucru (workspace) sau pot crea date noi cu care opereaz. Scripturile nu furnizeaz argumente de ieire, iar variabilele create rmn n workspace, pentruafieventualfolositencalculeleulterioare. Exempludefiierscript:beton_script.m, cu urmtoarelecomenziMATLAB:
m0=300 t_005=2.776; t_001=4.604; x=[314 302 284 296 307]; x_med=sum(x)/length(x) s=sqrt(sum((x-x_med).^2)/(length(x)-1)) t=(x_med-m0)/(s/sqrt(length(x))) if t<+t_005 disp('marca cimentului corespunde condiiilor fixate') elseif (t>t_005)&&(t<t_001) disp('se face o alt selecie') else disp('ipoteza se respinge') end

Informaticaaplicatninginerie MATLAB

Latastareanumeluifiieruluiscript(frextensia.m):
beton_script

MATLABul execut comenzile. Dup ce se termin execuia fiierului, iar variabilele rmn n spaiul delucru. Rutine(function) Aceste fiiere accept argumente de intrare i furnizeaz argumente de ieire. Numele fiierului MATLAB (Mfile) i cel al funciei (rutinei) respective trebuie s fie identice. Funciile (rutinele) lucreazcuvariabilepropriiseparatedespaiuldelucruuzualalMATLABului. Exemplu:funciaverificare_rezistenta_beton. Sepoatevizualizafiierulcucomanda:
type verificare_rezistenta_beton function verificare_rezistenta_beton %VERIFICA DACA IPOTEZA CA REZISTENTA MEDIE A BETONULUI ESTE 300 KGF/CMP m0=300 t_005=2.776; t_001=4.604; x=[314 302 284 296 307]; x_med=sum(x)/length(x) s=sqrt(sum((x-x_med).^2)/(length(x)-1)) t=(x_med-m0)/(s/sqrt(length(x))) if t<+t_005 disp('marca cimentului corespunde condiiilor fixate') elseif (t>t_005)&&(t<t_001) disp('se face o alt selecie') else disp('ipoteza se respinge') end

Prima linie a unei funcii Mfile ncepe cu cuvntul cheie function. Aceast linie d numele funciei, ordineainumrulargumentelor. Liniile urmtoare (care ncep cu caracterul %) sunt linii de comentariu, care de fapt sunt i liniile afiateatuncicndseapeleazlacomanda
help verificare_rezistenta_beton

Restulliniilorsuntexecutabile.

Informaticaaplicatninginerie MATLAB

Variabileglobale Dac se dorete ca mai multe astfel de subrutine s utilizeze o anume variabil comun, se declar variabilarespectivcaglobalutilizndcomandaglobalntoatefunciilerespective. Exemplu:fiierulfalling.m:
function h = falling(t) global GRAVITY h = 1/2*GRAVITY*t.^2;

Seintroducapoinmodinteractivliniile:
global GRAVITY GRAVITY = 32; y = falling((0:0.1:5)');

Funciaeval Funcia eval lucreaz cu variabil text pentru implementarea unei faciliti puternice de tip macro text. Expresia eval(s) folosete interpreterul MATLAB pentru evaluarea expresiei sau execuia declaraieidiniruldecaracteres. Exemplu:
>> for n = 1:5 eval(['M' num2str(n) ' = n^2']) end

M1 = 1

M2 = 4

M3 = 9

M4 =

Informaticaaplicatninginerie MATLAB

16

M5 = 25

Vectorizarea Pentru a obine o vitez de calcul mare, este foarte important aanumita vectorizare a algoritmilor nfiiereleMATLAB.AcoloundealtelimbajefolosescbucledetipforsauDO,MATLABulpoateutiliza operaiimatricealesauvectoriale. Unexemplusimpluesteurmtorul:
x = 0; for k = 1:1001 y(k) = log10(x); x = x + 0.01; end

Versiuneavectorizataaceluiaiprogrameste
x = 0:0.01:10; y = log10(x);

ProgramatoriiMATLABspununeori:"Viaaestepreascurtpentruaiopetrecescriindbucle!" Atuncicndnusepoateeliminacompletfolosireauneibucleseutilizeazproceduradeprealocare. Funciidefuncii n MATLAB exist o clas de funcii care lucreaz cu funcii neliniare ca argument. Funciile de funcii includ:

Gsireazerourilor Optimizare Integrarenumeric Ecuaiidiferenialeordinare

MATLABul reprezint funcia neliniar ca o funcie Mfile care poate fi ulterior utilizat ca argument dealtefunciiMATLAB. Exemplu: Urmtorulfiiercreeazofuncieneliniar:
function y = calcul_imprastiere(x) y = 1./((x-0.3).^2 + 0.01) + 1./((x-0.9).^2 + 0.04) - 6;

Informaticaaplicatninginerie MATLAB

Aceastfunciepoatefievaluatpentruunsetdepunctenintervalul0 x 1cuprogramul:
x = 0:0.002:1; y = calcul_imprastiere(x);

iapoisepoatereprezentagraficfunciacucomanda
plot(x,y)

Graficul arat c funcia are un minim local la aproximativ x = 0.6. Dac de exemplu utilizm funcia fminsearch putem gsi imediat valoareaexacta lui x. Primul argument al funciei fminsearch este chiarnumelefuncieipentrucarecalculmminimul(aldoileaparametruesteoaproximaregrosiera localizriiminimului).
p = fminsearch('calcul_imprastiere',0.5) p = 0.6370

Sepoateacumevaluavaloareafuncieinpunctuldeminimlocal:
calcul_imprastiere(p) ans = 11.2528

4. Matrici,vectoriipolinoame Matriciivectori Pentru a lucra uor i bine cu limbajul MATLAB trebuie n primul rnd s se nvee manipularea matricilor. n MATLAB, o matrice este un tablou dreptunghiular de numere. Scalarii de exemplu sunt matrici1x1,iarmatricilecuosingurliniesaucoloansuntdefaptvectori. Matricilesepotintroducenmaimultemoduri:

Informaticaaplicatninginerie MATLAB

Introducereauneilisteexplicitecuelementelematricei; ncrcareaunordatedinfiiereexternededate; Generareadematriciutilizndfunciibuiltin; CreareadematricinfiiereleMfiles;

Trebuierespectatectevaconveniisimple:

Elementeleuneiliniisuntseparateprinvirgulesauspaii. Sfrituluneiliniisemarcheazcupunctivirgul. Listadeelementecareformeazmatriceasedelimiteazcuparantezedrepte:

PentruintroducereamatriciiluiDrertastm:
A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

MATLABulvaafiamatricea:
A = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

O dat introdus, matricea este memorat n workspacei poate fi apelat simplu, ca A. S vedem acum:deceestemagic? Funciilesum, transpose, diag Caracterulmagicderivdinfaptulcprinefectuareaunoroperaiiasupraelementelormatricirezult numereinteresanteisurprinztoare. Dacdeexemplunsummelementelepeoriceliniesaucoloansaudepeceledoudiagonale,vom obineacelainumr. SverificmacestlucrucuMATLABul. Sumaelementelordepecele4coloanesecalculeazrapidcusum:
sum(A) ans = 34 34 34 34

Pentru calcularea sumelor pe linii, efectum nti transpunerea matricii i apoi aplic din nou comandasum. Transpusasecalculeazcu:
A' ans = 16 3 5 10 9 6 4 15

Informaticaaplicatninginerie MATLAB

2 13

11 8

7 12

14 1

iapoi
sum(A')' ans = 34 34 34 34

Suma elementelor de pe diagonal se calculeaz cu tot cu funcia sum, dar dup ce n prealabil vom sortacufunciadiagelementeledepediagonalaprincipal:
diag(A) ans = 16 10 7 1 sum(diag(A)) ans = 34

Unanumeelementalmatricii,deexempluelementuldinliniaicoloanajsenoteazA(i,j). Prin urmare o alt cale (mai puin rapid) de a calcula suma elementelor de pe a patra coloan, este urmtoarea:
A(1,4) + A(2,4) + A(3,4) + A(4,4) ans = 34

Dacspecificmunelementcarenuexistnmatrice,primimunmesajdeeroare:
t = A(4,5) Index exceeds matrix dimensions.

Operatorul":" Operatorul:estefoarteimportant.Deexemplu,expresia
1:10 ans = 1 2 3 4 5 6 7 8 9 10

esteunvectorlinie

Informaticaaplicatninginerie MATLAB

Exemple:
100:-7:50 ans = 100 93 86 79 72 65 58 51

0:pi/4:pi ans = 0 0.7854 1.5708 2.3562 3.1416

Expresia
A(1:k,j)

sereferlaprimelekelementealecoloaneijaluiA. Dac este utilizat n paranteze operatorul : atunci nseamn c ne referim la toate elementele unei liniisaucoloane:
sum(A(:,3)) ans = 34

calculeazsumaelementelordincoloanaatreiaaluiA: O alt proprietate interesant a ptratului magic este c suma magic 34 este obinut i prin nsumareaelementelormatriciiiprinmprirealadimensiuneamatricii(4):
sum(1:16)/4 ans = 34

Observaie: suma magic pentru orice ptrat magic n x n este (n3 + n)/2 (se poate calcula cu ajutorul SymbolicMathToolbox). Funciamagic MATLABul are o funcie builtin care creeaz ptrate magice de orice dimensiune (funcie pe care dejaamutilizato):
B = magic(4) B = 16 5 9 4 2 11 7 14 3 10 6 15 13 8 12 1

Informaticaaplicatninginerie MATLAB

Aceast matrice este aproape identic cu matricea lui Drer singura diferen fiind c cele dou coloanedinmijlocsuntschimbatentreele.PentruobinereadinBamatriciiluiDrersepoateutiliza urmtoareacomandMATLAB:
A = B(:,[1 3 2 4]) A = 16 5 9 4 3 10 6 15 2 11 7 14 13 8 12 1

Polinoame Polinoamele sunt descrise n MATLAB prin vectori linie ale cror elemente sunt de fapt coeficienii polinoamelornordineadescresctoareaputerilor. Exemplu:polinomulp(x)=x3+5x+6estereprezentatnMATLABastfel:
p = [1 0 5 6]

Unpolinompoatefievaluatpentruovaloarealuixcuajutorulfuncieipolyval:
polyval(p,1) ans= 12

nexempluldemaisusesteevaluatpolinomulppentrux=1. Sepotaflacuuurinrdcinilepolinomuluifolosindfunciaroots:
r=roots(p) r = 0.5000 + 2.3979i 0.5000 - 2.3979i -1.0000

Exist numeroase alte funciii comenzi care se ocup cu operaii asupra polinoamelor, funcii care vor fi abordate ntrun capitol special. Dintre acestea amintim comanda care permite nmulirea a doupolinoame,ianumeconv:
p1=[1 3 5] p1 = 1 3 5

p2=[2 0 1 0 5] p2 = 2 0 1 0 5

Informaticaaplicatninginerie MATLAB

10

p3=conv(p1,p2) p3 = 2 6 11 3 10 15 25

5. Operaiunielementarecumatriciifuncii MATLABul opereaz cu matricile cu aceeai uurin cu care lucreaz cu scalarii. Pentru adunarea a doumatricideexemplusefolosetepurisimplusemnul+calaoadunareobinuit.Binenelesc matriciletrebuiesaibaceleaidimensiunipentruaputeafiadunate. Exemplu:
A=[2 3;15 -3] A = 2 15 3 -3

B=[11 -21; 12 4] B = 11 12 -21 4

C=A+B C = 13 27 -18 1

Pentru nmulirea a dou matrici se folosete operatorul * , valabil de altfel i pentru operaiile cu scalari. Exemplu:
D=A*B D = 58 129 -30 -327

Dac dimensiunile matricilor care se nmulesc nu sunt corespunztoare, atunci va fi furnizat un mesajdeeroare:
E=[1 23; -12 2;1 2] E = 1 -12 1 23 2 2

Informaticaaplicatninginerie MATLAB

11

F=A*E ??? Error using ==> * Inner matrix dimensions must agree.

Pentrudepanareaprogramuluincazulunorastfeldegreelisepoateutilizacomandasizecarene dinformaiidespredimensiunilematricilorrespectiveipermitecorectareaerorilor:
size(A) ans = 2 size(E) ans = 3 2 2

Comandalenghtdinformaiidespredimensiunilevectorilor:
>> B=[16 3 2 13]; >> length(B) ans = 4

MATLABul include multe alte funcii care opereaz cu matrici i care vor fi descrise i utilizate intensivncapitoleleurmtoare.Amintimaicicteva:det,inv,rank,eigetc. O facilitate interesant a MATLABului este aceea c lucreaz cu matricile cu operatori logici i relaionalintrunmodasemntoracestoroperaiiefectuatecuscalari. Deexemplu,pentruoperaiuneascalar
r=17>55 r = 0

MATLABul rspunde cu r=0, adic fals. Dac dorim de exemplu s comparm fiecare element al matriciiAcuelementulcorespunztordinmatriceaB,procedmasemntor:
L=A<=B L = 1 0 0 1

Operatoriilogici,adic&pentruI(AND),|pentruSAU(OR),~pentruNU(NOT),vorreturnavaloarea 1pentruADEVRATi0pentruFALS. Exemplu:

Informaticaaplicatninginerie MATLAB

12

A&B ans = 1 1 ~A ans = 0 0 0 0 1 1