CURS_2_ECNI.pdf

7
CURS 2 1 CURS 2 ECNI INTRODUCERE ÎN PROGRAMAREA MATLAB 1. Matrice, vectori şi scalari. Notaţii MATLAB-ul este un pachet de programe care lucrează numai cu un singur tip de obiecte, matrice numerice rectangulare, cu elemente reale sau complexe. În acest sens, scalarii sunt asimilaţi matricelor cu o linie şi o coloană (1x1), iar vectorii sunt asimilaţi matricelor cu o linie (1xn) sau o coloană (nx1). Operaţiile şi comenzile în MATLAB sunt aproape naturale, în sens matriceal, asemănător modului de calcul obişnuit. Astfel entităţile: [ ] 1 1 2 1 2 3 ; ; 2; 1 2 3 3 4 4 5 6 3 A B C D = = = = sunt toate matrice în accepţiunea MATLAB. A este o matrice 2x2, B este 2x3, C este 3x1, D este 3x1. Elementele unei matrice, fie aceasta A, pot fi identificate prin una dintre notaţiile: A[i,j], A(i,j) etc. şi semnifică elementul de la intersecţia liniei i cu coloana j. Ultima notaţie, A(i,j), este cea care a fost adoptată si în MATLAB. Dimensiunea unei matrice este precizată de o pereche de numere care arată numărul de linii si coloane al matricei respective. (D este o matrice 3x1). O matrice cu o singură linie sau o singură coloană se numeşte vector linie (D) sau vector coloană (C), elementele acesteia putând fi identificate cu un singur indice. O matrice cu o singură linie si o singură coloană este un scalar. Pentru a face referire la un element A(i,j) al, unei matrice A, sunt necesari doi indici, indicele de linie şi indicele de coloană, în această ordine. Referirea unui element al unui vector poate fi făcută numai cu un singur indice. Astfel: A(2,1) = 3; B(1,3) = 3, C(2) = 2; D(3) = 3. 2. Definirea matricelor simple Definirea matricelor se face prin una dintre următoarele metode: - introducerea explicită a listei de elemente; - generarea prin instrucţiuni si funcţii; - crearea de fişiere M; - încărcarea din fişiere de date externe. MATLAB-ul nu conţine instrucţiuni de dimensionare şi declaraţii de tip, iar memoria este alocată automat, până la valoarea maxim disponibilă. Cea mai simplă metodă de definire a matricelor mici

Transcript of CURS_2_ECNI.pdf

Page 1: CURS_2_ECNI.pdf

CURS 2

1

CURS 2 ECNI

INTRODUCERE ÎN PROGRAMAREA MATLAB

1. Matrice, vectori şi scalari. Notaţii

MATLAB-ul este un pachet de programe care lucrează numai cu un singur tip de obiecte, matrice numerice rectangulare, cu elemente reale sau complexe. În acest sens, scalarii sunt asimilaţi matricelor cu o linie şi o coloană (1x1), iar vectorii sunt asimilaţi matricelor cu o linie (1xn) sau o coloană (nx1). Operaţiile şi comenzile în MATLAB sunt aproape naturale, în sens matriceal, asemănător modului de calcul obişnuit. Astfel entităţile:

[ ]1

1 2 1 2 3; ; 2 ; 1 2 3

3 4 4 5 63

A B C D

= = = =

sunt toate matrice în accepţiunea MATLAB. A este o matrice 2x2, B este 2x3, C este 3x1, D este 3x1.

Elementele unei matrice, fie aceasta A, pot fi identificate prin una dintre notaţiile: A[i,j], A(i,j) etc. şi semnifică elementul de la intersecţia liniei i cu coloana j. Ultima notaţie, A(i,j), este cea care a fost adoptată si în MATLAB. Dimensiunea unei matrice este precizată de o pereche de numere care arată numărul de linii si coloane al matricei respective. (D este o matrice 3x1). O matrice cu o singură linie sau o singură coloană se numeşte vector linie (D) sau vector coloană (C), elementele acesteia putând fi identificate cu un singur indice. O matrice cu o singură linie si o singură coloană este un scalar.

Pentru a face referire la un element A(i,j) al, unei matrice A, sunt necesari doi indici, indicele de linie şi indicele de coloană, în această ordine. Referirea unui element al unui vector poate fi făcută numai cu un singur indice. Astfel:

A(2,1) = 3; B(1,3) = 3, C(2) = 2; D(3) = 3.

2. Definirea matricelor simple

Definirea matricelor se face prin una dintre următoarele metode:

- introducerea explicită a listei de elemente;

- generarea prin instrucţiuni si funcţii;

- crearea de fişiere M;

- încărcarea din fişiere de date externe.

MATLAB-ul nu conţine instrucţiuni de dimensionare şi declaraţii de tip, iar memoria este alocată automat, până la valoarea maxim disponibilă. Cea mai simplă metodă de definire a matricelor mici

Page 2: CURS_2_ECNI.pdf

Elemente de calcul numeric ingineresc

2

constă în utilizarea unei liste explicite. La introducerea unei astfel de liste trebuie respectate următoarele reguli:

- elementele unei linii trebuie separate prin blanc-uri sau virgule;

- liniile se separă prin semnul punct-virgulă ”;”;

- elementele matricei sunt cuprinse între paranteze drepte „[ ]”.

Astfel, matricea A din paragraful anterior poate fi introdusă cu secvenţa:

A=[l 2;3 4]

care returnează rezultatul:

1 23 4

A =

Matricea A, astfel definită, poate fi utilizată în calcule sau poate fi salvată într-un fişier de date pentru o folosire ulterioară.

Pentru matricele mari, la care datele de intrare nu încap pe o singură linie, se poate proceda la înlocuirea semnului „;” cu „Enter", ca în exemplu următor:

A=[l 2

3 4]

Un alt mod de definire a unei matrice constă în apelarea numelui unui fişier de date aflat pe disc. Acest fişier trebuie să fie înregistrat în format ASCII (text), organizat ca o matrice rectangulară (completă) şi să aibă extensia *.m. Astfel, dacă pe disc se găseşte un fişier cu numele date.m care conţine următoarele două linii de text:

1 2

3 4

instrucţiunea care citeşte fişierul si generează matricea A este:

A=date

Elementele matricelor

Elementele matricelor pot fi numere reale sau complexe, precum si orice expresie MATLAB. De exemplu, pentru:

x=[-1.3 sqrt(3) (l+2+3)*4/5]

Page 3: CURS_2_ECNI.pdf

CURS 2

3

rezultă:

x = [ -1.3000 1.7321 4.8000 ]

Elementele unei matrice pot fi referite cu indici cuprinşi între paranteze rotunde „()", ca în exemplul:

a = x(2) care returnează:

a =1.7321

De remarcat că dacă se asignează o valoare unui element care ocupă o poziţie în afara dimensiunii maxime a matricei sau vectorului referit, dimensiunea acestuia este mărită automat până la valoarea indicelui noului element, iar elementele nedefinite sunt setate la valoarea zero. în acest sens, instrucţiunea:

x(5)= abs(x(l))

returnează rezultatul:

x = [-1.3000 1.7321 4.8000 0 1.3000]

iar instrucţiunea:

A(2,4)= 6

returnează rezultatul:

1 2 0 03 4 0 6

A =

În exemplele de mai sus s-au utilizat 2 funcţii MATLAB predefinite a căror denumire este rezervată:

abs – modulul unui număr; sqrt – rădăcină pătrată

O modalitate de a construi matrice mari constă în folosirea matricelor mici ca elemente. Spre exemplu, din două matrice 2x3 se poate construi o matrice 4x3; dimensiunile matricelor utilizate trebuie să fie astfel alese încât să realizeze tablouri rectangulare complete.

Fie A1 şi A2 cele două matrice utilizate. Cu secvenţa următoare:

Al = [l 2;3 4]

A2 = [5 6;7 8]

A = [Al; A2]

se obţine rezultatul:

Page 4: CURS_2_ECNI.pdf

Elemente de calcul numeric ingineresc

4

1 23 45 67 8

A =

O matrice mai mică poate fi extrasă din matrice mai mari utilizând semnul „:" (două puncte). De exemplu:

B = A(2:3,:)

extrage liniile doi si trei şi toate coloanele din matricea curentă A, obţinându-se matricea B:

3 45 6

B =

Declaraţii şi variabile

MATLAB-ul este un limbaj de expresii. Expresiile tipărite de utilizator sunt interpretate şi evaluate. Instrucţiunile MATLAB sunt, de cele mai multe ori, de forma:

variabila = expresie

sau, mai simplu:

expresie

Expresiile sunt compuse din operatori sau alte caractere speciale, din funcţii şi nume de variabile. Evaluarea expresiei produce o matrice, care este afişată pe ecran şi atribuită unei variabile. Dacă numele variabilei şi semnul egal („variabila=”) sunt omise, MATLAB-ul crează automat o variabilă cu numele „ans”, ca în exemplul:

3/4

care returnează:

ans= 0.7500

Orice instrucţiune este în mod normal terminată cu „Enter". Dacă ultimul caracter al acesteia este punct-virgulă „;”, instrucţiunea este executată, dar tipărirea este suprimată. Utilizarea acestui caracter la sfârşitul unei instrucţiuni în fişiere-M este necesară în situaţiile în care nu se doreşte afişarea datelor intermediare. De exemplu:

A=[1 2 3; 4 5 6;7 8 9] ;

introduce matricea A, dar nu o afişează. Tastarea numelui unei variabile urmată de „Enter" afişează valoarea acesteia.

Page 5: CURS_2_ECNI.pdf

CURS 2

5

Dacă expresia este aşa de mare încât declaraţia nu încape pe o singură linie, se utilizează semnul „...” (trei puncte), urmat de „Enter", pentru a preciza că instrucţiunea continuă pe linia următoare. Astfel, instrucţiunea:

S=1+2+3+...

4+5+6;

evaluează suma celor şase numere şi o atribuie variabilei S. Spaţiile dintre semnele „=”, „+”, „-” şi numere sunt opţionale.

Numele de variabile si funcţii au ca prim caracter o literă, urmată de litere, cifre sau caracterul „underscore” (adică „ _”). Deşi se pot folosi oricâte caractere, MATLAB-ul reţine ca nume de variabilă numai primele 19 caractere. MATLAB-ul face deosebirea între literele mari şi mici (case sensitive), astfel încât „a" si „A" sunt două variabile distincte.

Numere şi expresii aritmetice

MATLAB-ul utilizează pentru reprezentarea numerelor notaţia zecimală convenţională, cu punct zecimal. Puterea este un factor de scală inclus ca sufix, ca şi în notaţia ştiinţifică. Exemple de reprezentări de numere în MATLAB, sunt:

3 -99 0.0001

9.6397238 160210E-20 6,02252e23

Calculatoarele care utilizează aritmetica în virgulă mobilă IEEE au precizia relativă a numerelor „eps", aproximată cu 16 digiti semnificativi. Limitele numerelor folosite în MATLAB sunt 30810− şi 30810 .

MATLAB-ul utilizează următorii operatori aritmetici: „+” adunarea; „-” scăderea; „*” înmulţirea; „/” împărţirea; „^” ridicarea la putere

Într-o expresie, parantezele sunt utilizate pentru a preciza ordinea executării operaţiilor.

Structura programelor MATLAB

MATLAB-ul lucrează fie în modul linie de comandă, situaţie în care fiecare linie este prelucrată imediat şi rezultatele sunt afişate, fie cu programe conţinute în fişiere. Aceste două moduri formează împreună un „mediu" de programare.

Fişierele ce conţin instrucţiuni MATLAB se numesc fisiere-M (deoarece au extensia ,,.m”) şi sunt programe MATLAB. Un fişier-M constă dintr-o succesiune de instrucţiuni MATLAB, cu posibilitatea apelării altor fisiere-M precum şi a apelării recursive.

Un program MATLAB poate fi scris sub forma fişierelor „script” sau a fişierelor „function”. Ambele tipuri de fişiere sunt scrise în format ASCII, iar algoritmul care a fost implementat poate fi urmărit cu foarte multă uşurinţă, dacă se cunosc convenţiile şi sintaxa MATLAB. Aceste tipuri de fişiere, obligatoriu cu extensia *.m, permit crearea unor funcţii noi care le pot completa pe cele deja existente. Prin această facilitate, MATLAB-ul poate fi extins la aplicaţii specifice utilizatorului, care are posibilitatea să scrie noi proceduri.

Page 6: CURS_2_ECNI.pdf

Elemente de calcul numeric ingineresc

6

Fişierele script

Un fişier „script” este un fişier extern care conţine o secvenţă de comenzi MATLAB. Prin apelarea numelui fişierului, se execută secvenţa MATLAB conţinută în acesta. După execuţia completă a unui fişier script, variabilele cu care acesta a operat rămân în zona de memorie a aplicaţiei (workspace). Aceste fişiere nu permit integrarea în programe mari, realizate pe principiul modularizării. Fişierele script sunt folosite pentru rezolvarea unor probleme care cer comenzi succesive atât de lungi, încât ar putea deveni greoaie pentru lucrul în mod interactiv, adică în modul linie de comandă.

Fişierele funcţie

Dacă prima linie a fisierului-M conţine cuvântul „function”, fişierul respectiv este declarat ca fişier funcţie. O funcţie diferă de un ,script” prin faptul că poate lucra cu argumente. Variabilele definite şi manipulate în interiorul fişierului funcţie sunt localizate la nivelul acesteia. Prin urmare, la terminarea execuţiei unei funcţii, în memoria calculatorului nu rămân decât variabilele de ieşire ale acesteia.

Fişierele funcţie sunt utilizate pentru extinderea MATLAB-ului, adică pentru crearea unor noi funcţii MATLAB. Forma generală a primei linii a unui fişier funcţie este:

function [param_ieşire]= nume_funcţie(param_intrare)

unde:

function - este cuvânt cheie care declară fişierul ca fişier funcţie (obligatoriu);

nume_funcţie - numele funcţiei, adică numele sub care se salvează fişierul, fără extensie. Nu poate fi identic cu cel al unui fisier-M preexistent.

param_ieşire - parametri de ieşire trebuie separaţi cu virgulă şi cuprinşi între paranteze drepte. Dacă funcţia nu are parametri de ieşire, parantezele drepte şi semnul egal nu mai au sens.

param_intrare - parametri de intrare trebuie separaţi cu virgulă şi cuprinşi între paranteze rotunde. Dacă funcţia nu are parametri de intrare, parantezele rotunde nu mai au sens.

Aceste fişiere pot fi adăugate ca funcţii noi în structura MATLAB. Comenzile şi funcţiile care sunt utilizate de noua funcţie sunt înregistrate într-un fişier cu extensia .m. Prima linie a fişierului trebuie să conţină definiţia sintactică a noii funcţii. De exemplu, un fişier funcţie numit „medie.m", care calculează media aritmetică, poate avea următoarea formă:

Exemple de implementat la laborator (utilizarea funcţiilor în MATLAB)

1. calculul mediei aritmetice a n numere introduse ca un vector coloană

function medie(x)

n=length(x);

m=sum(x)/n;

y=['media aritmetica a celor ',num2str(n),' numere este: ',num2str(m)];

Page 7: CURS_2_ECNI.pdf

CURS 2

7

disp(y)

s-au utilizat 2 funcţii MATLAB: sum şi num2str (a se consulta help-ul pentru explicitarea acestora). Apelaţi funcţia în linia de comandă după ce aţi introdus un vector coloană. În aceeaşi manieră, definiţi o funcţie care să calculeze suma elementelor de pe a 2 a coloană a unei matrici cu cel puţin 2 coloane, introduse în linia de comandă, fără a utiliza instrucţiuni de control (tip for).

2. calculul mediei geometrice a n numere diferite de 0 introduse ca un vector linie

function medieg(x)

n=length(x);

m=(prod(x))^(1/n);

y=['media geometrica a celor ',num2str(n),' numere este: ',num2str(m)];

disp(y)

3. calcul simbolic – utilizarea toolbox+ului SYMBOLIC

Să se rezolve câteva ecuaţii algebrice clasice: ex. ecuaţia de ordinul 2 2 0ax bx c+ + =

syms x a b c

solve('a*x^2+b*x+c=0')

Pe acelaşi mecanism rezolvaţi un sistem de 2 ecuaţii algebrice cu 2 necunoscute confruntând soluţia

obţinută cu cea rezultată din calculul matricial (se definesc ajutător 2 funcţii preluate ulterior în curs:

inv – calculul inversei unei matrici şi det – calculul determinantului unei matrici)

Sistemul considerat: 2 3

5 2 12x y

x y+ =

− =

Var1. [a,b]=solve('2*x+y-3=0','5*x-2*y-12=0')

Var2. x=det([3 1;12 -2])/det([2 1;5 -2]) etc.