Sunteți pe pagina 1din 22

MEDII DE CALCUL INGINERESC – Îndrumar de laborator 5

L1. Notiuni de configurare a mediului de calcul MATLAB. Manipularea


matricelor

1. Scopul lucrarii
Scopul acestei lucrari de laborator consta în însusirea principalelor facilitati de
configurare a mediului de calcul MATLAB, respectiv fixarea operatiilor de baza de
manipulare a matricelor.

2. Chestiuni de studiat

2.1. Ce este MATLAB ?


2.2. Notiuni de configurare a mediului MATLAB
2.3. Metode de definire a matricelor
2.4. Indexarea elementelor unei matrice
2.5. Operatii cu matrice
2.6. Rezolvarea matriceala a sistemelor de ecuatii
2.7. Aplicatii numerice

3. Elemente teoretice si exemple de calcul

3.1. Ce este MATLAB ?

MATLAB® (MATtrix LABoratory) este un pachet de programe de înalta performanta,


interactiv, destinat calculului matematic, stiintific si ingineresc. MATLAB integreaza
elemente solide de calcul, programare si reprezentare grafica, într-un mediu de lucru
prietenos, solutionarea problemelor abordate presupunând folosirea notatiilor matematice
clasice.
MATLAB este un produs al companiei americane The Mathworks, Inc.
[http://www.mathworks.com] si lucreaza sub Windows, Unix, LINUX si Machintosh.
MATLAB include toate facilitatile unui limbaj complet de programare, admitând interfete
cu limbajul de programare C, C++ si FORTRAN.
MATLAB a cunoscut o puternica evolutie în decursul ultimilor ani, reprezentând astazi
în mediile universitare din Statele Unite, Japonia si Uniunea Europeana o unealta standard
de calcul, fiind asociata diverselor cursuri introductive sau avansate de matematica, stiinta
sau inginerie. În industrie, MATLAB este recunoscut ca un mijloc de investigatie numerica
performant, utilizat în sprijinul unei activitati de cercetare, dezvoltare si analiza de înalt
nivel.
Ultima versiune a pachetului de programe MATLAB contine o întreaga familie de
module specifice, denumite tool-box-uri, respectiv blockset-uri, care permit rezolvarea unor
aplicatii din diverse domenii ale ingineriei cum ar fi: inginerie electrica, mecanica,
aerospatiala, biomedicala si multe altele. Aceste module sunt colectii de functii MATLAB
(M-files), usor de asimilat, care extind puterea de calcul a pachetului de programe
6 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

MATLAB în vederea rezolvarii unor clase particulare de probleme. Colectia de module


MATLAB contine: Simulink, DSP, Control System, SimPowerSystems, SimMechanics,
Data Acquisition, Fuzzy Logic, Image Processing, Partial Differential Equations, Neural
Network, Optimization, System Identification, Financial, Statistics, Communications,
Database, Virtual Reality etc.

3.2. Functii si optiuni MATLAB de intrare si iesire

3.2.1. Comenzi de lansare MATLAB. Exista mai multe variante de lansare a pachetului de
programe MATLAB, printre care :

Varianta A)

Dublu-clic pe icoana MATLAB din Windows Desktop

Varianta B)
Clic pe butonul START ,

urmat de clic pe optiunea MATLAB 4.2, etc.

Varianta D)
Dublu-clic pe icoana de tip shortcut ”MATLAB 4.2” din directorul C:/MATLAB42/BIN,
ca în Fig. 1.

Fig. 1. Lansarea MATLAB 4.2. prin dublu-clic


pe icoana corespunzatoare

3.2.2. Comenzi de iesire din MATLAB. Exista mai multe variante de încheiere a unei
sesiuni de lucru MATLAB, printre care:

Varianta A)
Clic pe meniul File + clic pe Exit MATLAB, ca în Fig. 2.
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 7

Fig. 2. Optiuni de încheiere a unei sesiuni MATLAB


Varianta B)
Clic pe icoana close box a ferestrei MATLAB Desktop .

Varianta C)
Tastare ”exit” sau ”quit” în Command Window, ca în Fig. 3,

Fig. 3. Optiuni de încheiere a unei sesiuni MATLAB

urmat de Enter.

3.3. Fereastra principala de lucru MATLAB

Dupa lansarea programului MATLAB, în prim plan apare fereastra principala MATLAB
Command Window, ce contine meniuri pentru controlul directoarelor, fisierelor, variabilelor
si aplicatiilor MATLAB asociate, Fig. 4.
Fereastra Command Window, permite lansarea comenzilor MATLAB fiind fereastra
principala de comunicare a utilizatorului cu programul, Fig. 4. Aceasta fereastra permite
lansarea de functii si efectuarea de operatii MATLAB.
8 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

Fig. 4. Fereastra Command Window.

Pentru a reapela functiile, comenzile sau instructiunile lansate recent în Command


Window, în sesiunea MATLAB curenta, folositi scroll-bar-ul sau sagetile up si down de
la tastatura.
Când se strâng prea multe informatii în fereastra Command Window si doriti stergerea
acestora puteti folosi comanda clc sau puteti alege optiunea Clear Session din meniul Edit al
MATLAB-ului.

3.4. Definirea matricelor

O metoda eficienta de a începe initierea în mediul de lucru MATLAB consta în învatarea


operatiunilor de generare si manipulare a matricelor. Definirea matricelor în MATLAB este
posibila pe mai multe cai. De pilda puteti:
Defini explicit matrice prin introducerea unor liste de elemente în Command Window;
Defini matrice prin încarcarea datelor din fisiere externe;
Genera matrice folosind functii MATLAB incluse;
Crea matrice folosind propriile dvs. functii scrise în fisiere M.

3.4.1. Definirea explicita a matricelor în Command Window. O metoda de definire a


matricelor consta în introducerea explicita a elementelor matricelor la linia de comanda în
fereastra Command Window. Prezenta prompt-ului (>>) în Command Window indica faptul
ca MATLAB este gata de a accepta o comanda din partea dvs. Astfel puteti introduce o
variabila, lansa o functie etc.
Începeti prin introducerea unei matrice ca o lista de elemente, respectând câteva conventii
de baza:
Separati elementele unui rând cu spatii blanc sau virgule;
Folositi un semn punct si virgula, ”;”, pentru a indica sfârsitul fiecarui rând;
Includeti întreaga lista între paranteze patrate, ”[ ]”.
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 9

Astfel pentru a defini o matrice, tastati la linia de comanda în Command Window:

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

Dupa ce ati tastat linia de comanda de mai sus, când apasati tasta Enter sau Return,
MATLAB va afisa continutul matricei pe care tocmai ati introdus-o:

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

Odata introdusa matricea de mai sus, aceasta este automat memorata în MATLAB
Workspace. Puteti accesa si vizualiza aceasta matrice tastând pur si simplu A la linia de
comanda urmata de Enter.
În mod similar introducerii unei matrice, pentru a lansa o functie, tastati functia inclusiv
toate argumentele si apasati tasta Return sau Enter. MATLAB va afisa rezultatul. De pilda,
tastati:

» det(A) (3)

MATLAB va calcula determinantul matricei A definite anterior rezultatul fiind:

ans = (4)
0

Când nu specificati o variabila de iesire (variabila raspuns), MATLAB foloseste variabila


predefinita ans, o prescurtare pentru cuvântul englezesc answer, pentru a stoca rezultatul
unei calculatii.

3.4.2. Definirea matricelor prin încarcarea datelor din fisiere externe. Matricele pot fi
create deasemenea prin încarcarea datelor din fisiere externe folosind functia load. Functia
load citeste fisiere binare continând matrice generate în sesiuni MATLAB anterioare, sau
citeste fisiere text continând date numerice. Fisierul text trebuie organizat sub forma unui
tabel de numere, separate de blancuri, cu numar egal de elemente pe fiecare rând, respectiv
pe fiecare coloana.
De pilda creati un fisier de tip text care contine urmatoarele elemente scrise sub forma
unui tablou:

1 2 3 (5)
2 5 1
3 0 1

Salvati în continuare fisierul cu numele matrice.txt în directorul de lucru. Pentru a


importa datele numerice din fisierul cu numele matrice.txt, folositi sintaxa:
10 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

» load matrice.txt (6)

MATLAB va citi fisierul matrice.txt si va crea în MATLAB workspace o variabila cu


numele matrice, continând datele din respectivul fisier. Pentru a verifica existenta variabilei
matrice în MATLAB workspace se foloseste comanda who care afiseaza toate variabilele
existente la momentul curent:

» who (7)

Pentru a vizualiza continutul variabilei matrice creata în workspace, se poate folosi


urmatoarea comanda:

» matrice (8)

3.4.3. Generarea matricelor de baza folosind functii MATLAB incluse. MATLAB


dispune de mai multe functii de generare a matricelor de baza, cum ar fi cele din Tabelul 1.
Tabel 1.
zeros Matrice ce contine doar elemente nule
ones Matrice ce contine doar elemente unitate
rand Matrice cu elemente aleatoare, uniform distribuite, cuprinse între 0 si 1
eye Matrice cu elemente nule, cu exceptia diagonalei principale ce contine
elemente unitate
diag Matrice diagonala
linspace Vectori cu elemente având valori distribuite liniar
logspace Vectori cu elemente având valori distribuite logaritmic

Iata câteva exemple. Tastati:

» Z = zeros(2, 3) (9)

Z= (10)
0 0 0
0 0 0

» F = 5*ones(2, 2) (11)

F= (12)
5 5
5 5

» N = 10*rand(1, 5) (13)

N= (14)
9.5013 2.3114 6.0684 4.8598 8.9130

» R = rand(4, 4) (15)
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 11

R= (16)
0.4447 0.7382 0.9169 0.3529
0.6154 0.1763 0.4103 0.8132
0.7919 0.4057 0.8936 0.0099
0.9218 0.9355 0.0579 0.1389

» S = eye(3, 4) (17)

S= (18)
1 0 0 0
0 1 0 0
0 0 1 0

3.4.4. Definirea matricelor folosind functii scrise în fisiere M. Puteti crea propriile dvs.
matrice folosind fisiere de tip M. Aceste fisiere sunt fisiere text ce contin instructiuni
MATLAB si au extensia .m. Un astfel de fisier M îl puteti crea folosind oricare editor de
text (de pilda Notepad sau Wordpad) si trebuie sa contina aceleasi instructiuni pe care le-ati
tasta la linia de comanda în Command Window. Dupa ce ati creat fisierul acesta trebuie
salvat în format text sub un nume dorit, însa trebuie sa aiba extensia .m.
De pilda, creati un fisier continând urmatoarele patru linii.

»A=[ 16.0 3.0 2.0 13.0 (19)


5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0 ]

Salvati fisierul sub numele matr.m în directorul curent. Tastati în continuare la linia de
comanda în Command Window instructiunea:

» matr (20)

MATLAB va executa instructiunea (19) de mai sus si va crea o variabila A continând


elementele definite anterior si o va afisa pe ecran:

A= (21)
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0

3.5. Indexarea elementelor

Elementul din rândul i si coloana j a matricei A este notat cu A(i, j). De pilda, A(4, 2) este
elementul din rândul 4 si coloana 2, adica, în cazul matricei de mai sus, este numarul 15.
Este posibila deasemenea accesarea elementelor elementelor unei matrice folosind un
singur indice, A(k). Acesta este modul uzual de accesare vectorilor tip rând sau coloana.
Aceasta metoda poate fi aplicata si unei matrice bidimensionale, caz în care vectorul este
12 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

privit ca un vector lung de tip coloana format din coloanele matricei originale. Astfel, în
cazul matricei A definite anterior, A(8) este o alta cale de accesare a valorii 15 stocata în
A(4, 2). Daca încercati sa accesati valoarea unui element din afara matricei, apare un mesaj
de eroare. Tastati de pilda:

» t = A(4, 5) (22)

MATLAB va afisa raspunsul urmator:

??? Index exceeds matrix dimensions. (23)

Daca stocati o valoare într-un element din afara matricei, dimensiunea matricei va creste
în mod automat pentru a include noua valoare. Tastati de pilda :

» X = A; (24)

» X(4, 5) = 17 (25)

MATLAB va afisa raspunsul urmator:


X= (26)
16 3 2 13 0
5 10 11 8 0
9 6 7 12 0
4 15 14 1 17

3.5.1. Operatorul ”:„ este foarte important în MATLAB. Acesta apare în diferite forme. De
pilda expresia 1:10 reprezinta un vector rând continând numerele întregi de la 1 la 10.
Tastati:
» 1:10 (27)

MATLAB va afisa raspunsul urmator:

ans = (28)
1 2 3 4 5 6 7 8 9 10

Pentru a obtine un ecart diferit de unitate între elementele vectorului astfel generat,
specificati un increment. De pilda tastati:

» 100: -7: 50 (29)

MATLAB va afisa raspunsul:

ans = (30)
100 93 86 79 72 65 58 51
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 13

Tastati:

» 0: pi/4: pi (31)

Raspunsul MATLAB va fi:

ans = (32)
0 0.7854 1.5708 2.3562 3.1416

Expresiile cu indici ce contin operatorul ”:” se refera la portiuni dintr-o matrice. De pilda
A(1:k, j) reprezinta primele k elemente (rânduri) ale coloanei j ale matricei A. Tastati de
pilda:

» A(1:2, 3:4) (33)

Rezultatul MATLAB este urmatorul:

ans = (34)
2 13
11 8

3.5.2. Indexarea logica. Vectorii logici creati din operatii logice si relationale pot fi folositi
pentru a face referinta la subvectori. Daca presupunem ca X este o matrice clasica si L o
matrice de aceasi dimensiune care este rezultatul unei operatii logice, atunci X(L) furnizeaza
elementele lui X unde elementele lui L sunt diferite de zero.
În Tabelul 2 sunt prezentate functii folosite frecvent la indexarea logica a matricelor. Se
considera M = [1 2 3; 2 3 4].

Tabel 2
Functie Descriere Exemplu
isempty Testeaza daca vectorii sau matricele sunt goale isempty(M) 0

issparse Testeaza daca vectorii sau matricele sunt de tip rar issparse(M) 0
isnan Testeaza daca vectorii sau matricele au elementul NaN isnan(M) 0 0 0
(not a number) 000
isinf Testeaza daca vectorii sau matricele au elementul Inf isinf(M) 0 0 0
(infinity) 000

Indexarea elementelor unei matrice se poate efectua specificând o operatie logica. Sa


presupunem ca avem urmatorul set de date sub forma de vector:
» x =[2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8] (35)

NaN este un simbol pentru (Not-a-Number). Pentru a elimina aceasta data irelevanta
utilizând indexarea logica, se foloseste functia ~isnan(x), care este falsa pentru toate
valorile numerice de tip NaN. În MATLAB operatorul ”~” înseamna ”nu logic”.

» x = x(~isnan(x)) (36)
14 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

MATLAB va raspunde cu:

x= (37)
2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8

3.6. Operatiuni de baza cu matrice

MATLAB pune la dispozitia utilizatorului un numar important de functii de calcul cu


matrice.
3.6.1. Operatii matematice cu matrice. Operatiile matematice de baza cu matrice presupun
utilizarea operatorilor din Tabelul 3.

Tabel 3
Operator Operatie
+ Adunare
- Scadere
* Înmultire
/ Împartire
\ Împartire la stânga
^ Putere
’ Transpusa complex conjugata
() Pentru ordinea operatiilor

Operatiile matematice efectuate asupra matricelor reprezinta obiectul de studiu al


algebrei liniare. De pilda adaugând la o matrice transpusa sa se obtine o matrice simetrica:

» A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]; (38)


» A + A' (39)
ans = (40)
32 8 11 17
8 20 17 23
11 17 14 26
17 23 26 2

Pentru a calcula suma elementelor din coloana a patra a matricei A, puteti tasta:

» A(1, 4) + A(2, 4) + A(3, 4) + A(4, 4) (41)

Rezultatul MATLAB va fi urmatorul:

ans = (42)
34

Operatorul de multiplicare ,*, aplicat matricelor determina multiplicarea matricelor


utilizând produsul intern între rânduri si coloane. Înmultind transpusa unei matrice cu
matricea însasi se obtine o matrice simetrica:
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 15

» A'*A (43)

ans = (44)
378 212 206 360
212 370 368 206
206 368 370 212
360 206 212 378

Matricele si scalarii pot fi combinati în multe feluri. De pilda, în cazul în care un scalar
este adunat sau înmultit cu o matrice, operatia se efectueaza asupra fiecarui element al
matricei. Tastati de pilda:

» A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] ; (45)


»B=A-1 (46)

Raspunsul MATLAB va fi urmatorul:

B= (47)
15 2 1 12
4 9 10 7
8 5 6 11
3 14 13 0

3.6.2. Operatii matematice element cu element. Operatiile matematice de adunare si


scadere cu matrice sau cu vectori, efectuate element cu element, sunt identice cu cele
efectuate direct asupra matricelor.
Operatiile de înmultire, împartire, ridicare la putere si transpunere fara conjugare
complexa, efectuate element cu element, se apeleaza însa diferit, operatorii standard fiind
precedati de operatorul punct, ".". Lista de operatori include, Tabel 4:

Tabel 4
Operator Operatie
+ Adunare
- Scadere
.* Înmultire element cu element
./ Împartire element cu element
.\ Împartire la stânga element cu element
.^ Putere element cu element
.’ Transpusa matricei cu elementele neconjugate complex

Daca matricea A se înmulteste cu ea însasi folosind înmultirea element cu element,

» A.*A (48)

rezultatul este o matrice continând patratele elementelor matricei A initiale:


16 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

ans = (49)
256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1

Operatiile cu vectori sunt folositoare pentru construirea tablourilor. Sa presupunem ca n


este reprezentat de vectorul coloana n = (0:9)'. Folosind comanda:

» puteri = [n n.^2 2.^n] (50)

puteti construi un tablou cu patratele si puterile lui 2 de la 0 la 9.

» puteri = (51)
0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512

Functiile matematice elementare opereaza asupra vectorilor element cu element. Tastati:

» x = (1:0.1:2)'; (52)
» logaritmi = [x log10(x)]

Raspunsul MATLAB consta în constructia unui tabel de logaritmi.


logaritmi = (53)
1.0 0
1.1 0.04139
1.2 0.07918
1.3 0.11394
1.4 0.14613
1.5 0.17609
1.6 0.20412
1.7 0.23045
1.8 0.25527
1.9 0.27875
2.0 0.30103

3.6.3. Functii de informare generala. Functiile mai importante de informare generala


referitoare la matrice pot fi structurate ca în Tabelul 5. Se considera A = [1 2 3; 2 3 4].
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 17

Tabel 5
Functie Descriere Exemplu
disp Afiseaza vectori sau matrice disp(A)
123
234
length Determina lungimea unui vector si cea mai mare length(A) 3
dimensiune a unei matrice
size Determina dimensiunile vectorilor si matricelor size(A) 23

3.6.4. Functii de prelucrare a matricelor. Principalele functiile MATLAB utilizate la


manipularea matricelor sunt prezentate în Tabelul 6. Pentru exemplificare se considera
A = [1 2 3; 2 3 4], C = [1 2 3], D = [2 3 4], E = [5 2; 1 3].
Tabel 6
Functie Descriere Exemplu
cross Calculeaza produsul vectorial a doi vectori cross(C, D) -1 2 -1
cumprod Calculeaza produsul cumulativ a doi vectori cumprod(D) 2 6 24
cumsum Calculeaza suma cumulativa a doi vectori cumsum(D) 2 5 9
diag Defineste sau întoarce diagonalele matricelor diag(A) 1
3
dot Calculeaza produsul scalar a doi vectori dot(C, D) 20
find Gaseste indicii si elementele nenule ale vectorilor find(A) 123456
sau matricelor
fliplr Permuta matricele stânga-dreapta fliplr(A) 3 2 1
4 3 2
flipud Permuta matricele sus-jos flipud(A) 2 3 4
1 2 3
max Calculeaza maximul elementelor unui vector sau max(C) 3
maximul elementelor dupa o anumita directie
min Calculeaza minimul elementelor unui vector sau max(C) 1
minimul elementelor dupa o anumita directie
prod Calculeaza produsul elementelor unui vector prod(C) 6
reshape Creaza o alta matrice de dimensiuni impuse reshape(A,3,2) 1 3
2 3
2 4
rot90 Roteste o matrice cu 90° rot90(A) 3 4
2 3
1 2
sort Sorteaza elementele în ordine crescatoare sort(E) 1 2
5 3
sum Însumeaza elementele unui vector sum(C) 6
sqrtm Calculeaza matricea radical, adica matricea care se sqrtm(E) 2.2065 0.5128
obtine astfel încât X*X = E 0.2564 1.6937
tril Returneaza elementele de sub diagonala principala Tril(E) 5 0
a unei matrice, inclusiv aceasta (triunghiul 1 3
inferior), restul elementelor fiind nule
triu Returneaza elementele de deasupra diagonalei triu(E) 5 2
principale a unei matrice, inclusiv aceasta 0 3
(triunghiul superior), restul elementelor fiind nule
18 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

Pentru a calcula eficient suma elementele unei coloane ale unei matrice se poate folosi
operatorul ”:” si functia de sumare sum. De pilda pentru a calcula suma elementelor
coloanei a patra a matricei A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] se poate folosi
comanda sum(A(1:4, 4)). Exista însa si o alta cale pentru a efectua acest calcul si anume
utilizând functia sum(A(:, 4)) ce efectueaza suma elementelor de pe ultima coloana a
matricei A. Daca tastati:

» sum(A(:, 4)) (54)

MATLAB va afisa raspunsul urmator:

ans = (55)
34

De pilda daca efectuati suma elementelor matricei A definita mai sus, de-a lungul oricarui
rând sau coloana, sau de-a lungul oricarei diagonale principale, veti obtine întotdeauna
acelasi numar. Sa verificam aceasta caracteristica a matricei A în MATLAB. Întâi sa
efectuam suma elementelor de pe coloanele matricei. Pentru aceasta vom folosi functia
sum(A) care realizeaza tocmai acest lucru:

» sum(A) (56)

MATLAB raspunde cu:

ans = (57)
34 34 34 34

Folosind functia sum(A) se calculeaza un vector linie continând sumele elementelor de


pe coloanele matricei A. Pe fiecare coloana se obtine aceeasi suma, 34.
Pentru a calcula suma elementelor de pe rândurile matricei o idee este de a utiliza functia
de transpunere a matricelor, de a aplica apoi aceeasi functie sum pe matricea transpusa si în
final de a transpune rezultatul folosind aceeasi functie de transpunere a matricelor. Functia
de transpunere a matricelor este A’, si consta în adaugarea unui apostrof dupa variabila
matrice A:

» A’ (58)
MATLAB va afisa raspunsul urmator:

ans = (59)
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1

Aplicând functia:
» sum(A')' (60)
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 19

Raspunsul MATLAB va fi:

ans = (61)
34
34
34
34

Suma elementelor de pe diagonala principala se poate obtine folosind functiile sum si


diag. Functia diag(A) scoate ca rezultat un vector continând elementele de pe diagonala
principala. Tastati:

» diag(A) (62)

MATLAB va afisa urmatorul raspuns:

ans = (63)
16
10
7
1

Tastând:

» sum(diag(A)) (64)

se va obtine rezultatul dorit:

ans = (65)
34

Suma elementelor de pe anti-diagonala matricei A, se poate obtine folosind functia, fliplr,


care genereaza matricea permutata stânga-dreapta (flip left-right). Astfel pentru a obtine
suma dorita tastati:

» sum(diag(fliplr(A))) (66)

MATLAB va afisa raspunsul:

ans = (67)
34

Aflarea dimensiunilor matricelor si vectorilor este posibila folosind functiile size si


length. Deoarece matricea A este o matrice 4x4, executând comanda size(A) se obtine:

» size(A) (68)

ans = (69)
4 4
20 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

Functia find gaseste indicii elementelor unui vector care îndeplinesc o conditie logica
data. În forma sa cea mai simpla, find întoarce un vector coloana de indici cu elemente
nenule. Transpunând acel vector se obtine un vector de tip rând de indici. Daca definim
B = [0 1 2; 1 0 3; 1 2 0] si aplicam functia find, gasim locatiile numerelor nenule folosind
indexarea unidimensionala în matricea B:

» k = find(B)' (70)

k= (71)
2 3 4 6 7 8

Pentru a afisa acele numere nenule ca vector rând în ordinea determinata de k, folosim
operatia B(k)

ans = (72)
1 1 1 2 2 3

3.6.5. Concatenarea si reconfigurarea matricelor. Concatenarea este procesul de alaturare


a matricelor mici pentru a construi matrice mai mari. De fapt, o matrice reprezinta
concatenarea elementelor sale individuale. Perechea de paranteze patrate, [ ], este operatorul
de concatenare. De pilda, plecând de la matricea A, construiti matricea B = [A A+32; A+48
A+16]. Rezultatul este o matrice 8 x 8, obtinuta alaturând cele patru sub-matrice.

B= (73)
16 3 2 13 48 35 34 45
5 10 11 8 37 42 43 40
9 6 7 12 41 38 39 44
4 15 14 1 36 47 46 33
64 51 50 61 32 19 18 29
53 58 59 56 21 26 27 24
57 54 55 60 25 22 23 28
52 63 62 49 20 31 30 17

Sumele elementelor de pe coloanele matricei B se obtin folosind functia sum(B):

ans = (74)
260 260 260 260 260 260 260 260

Sumele elementelor de pe rândurile matricei B se obtin folosind functia sum(B').

ans = (75)
196 196 196 196 324 324 324 324

Puteti sterge rânduri si coloane dintr-o matrice folosind doar o pereche de paranteze
patrate. Începeti cu X = A. Apoi, pentru a sterge cea de-a doua coloana a lui X, folositi
X(:, 2) = [ ]. Astfel X devine:
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 21

X= (76)
16 2 13
5 11 8
9 7 12
4 14 1

Daca stergeti un singur element dintr-o matrice, rezultatul nu mai este o matrice. Deci
expresii ca X(1, 2) = [ ] sunt incorecte si generatoare de erori.

3.6.6. Functii de analiza matriceala. MATLAB include o biblioteca de functii de analiza


matriceala din care fac parte cele din Tabelul 7. Pentru exemplificare se considera
B = [5 2; 1 3].

Tabel 7
Functie Descriere Exemplu
cond Numarul de conditionare cond(B) 2.6180
det Calculeaza determinantul unei matrice det(B) 13
eig Calculeaza valorile proprii ale unei matrice eig(B) 5.7321
2.2679
inv Calculeaza inversa unei matrice inv(B) 0.2308 -0.1538
-0.0769 0.3846
norm Calculeaza norma unei matrice sau a unui vector norm(B) 5.8339
rank Calculeaza rangul unei matrice rank(B) 2
trace Calculeaza urma unei matrice sau suma trace(B) 8
elementelor de pe diagonala principala

Determinantul matricei A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] este zero (a se


vedea instructiunea (3)), deci matricea A este singulara si nu are inversa. Daca încercati sa
calculati inversa cu:

» X = inv(A) (77)

Veti obtine un mesaj de avertizare:


Warning: Matrix is close to singular or badly scaled. (78)
Results may be inaccurate. RCOND = 1.175530e-017.
Erorile de trunchiere îngreuiaza algoritmul de detectare cu precizie a singularitatii. În
acest caz valoarea lui rcond, care desemneaza nivelul de conditionare al matricei este de
ordinul lui eps, adica precizia relativa în virgula mobila, deci precizia de calcul a inversei
este mediocra. Valorile proprii ale matricei A se calculeaza cu:

» e = eig(A) (79)
e= (80)
34.0000
8.0000
0.0000
-8.0000
22 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

3.7. Rezolvarea sistemelor de ecuatii liniare folosind operatii cu matrice


Una dintre problemele importante în calculul tehnic consta în solutionarea simultana a
ecuatiilor liniare. În limbaj matriceal, aceasta problema poate fi formulata dupa cum
urmeaza:
Fiind data o matrice A si un vector B, exista un vector unic X astfel încât AX = B sau
XA = B ?
Putem considera în prima faza exemplul unei matrice A de dimensiune 1x1, A = 7 si
B = 21. Are ecuatia 7.X = 21 o solutie unica ? Bineînteles si solutia aceasta este obtinuta
prin împartire, X = 21/7 = 3. Solutia nu este în general obtinuta prin calculul inversului lui
7, adica 7-1 = 0.142857..., si apoi prin înmultirea lui 7-1 cu 21. Aceste operatiuni ar
presupune mai multe calcule si, daca 7-1 este reprezentat de un numar finit de digiti,
operatiunile ar putea conduce la un rezultat afectat de erori. Consideratii similare sunt
valabile în cazul seturilor de ecuatii liniare cu mai mult de o necunoscuta. MATLAB
rezolva asemenea ecuatii fara a calcula inversa matricei. Cele doua simboluri de împartire,
”/” si ”\” sunt folosite pentru cele doua situatii în care matricea necunoscuta apare în stânga
sau în dreapta matricei coeficientilor.

X = A\B reprezinta solutia ecuatiei matriceale AX = B.


X = B/A reprezinta solutia ecuatiei matriceale XA = B.
În practica, ecuatiile liniare de forma AX = B sunt mult mai frecvente decât cele de forma
XA = B, iar matricea coeficientilor A este de regula patratica. Daca matricea A este
singulara, solutia ecuatiei AX = B fie nu exista, fie nu este unica. Operatia A\B genereaza un
mesaj de avertizare daca matricea A este aproape singulara si un mesaj de eroare daca
matricea A este singulara.

3.7.1. Formularea matriceala a sistemelor de ecuatii liniare. Fie urmatorul sistem de


ecuatii liniare:

3x + 2y – z = 10 (81)
- x + 3y + 2z = 5
x - y - z = -1

Acest sistem poate fi pus sub urmatoarea forma matriceala:

3 2 1 x 10
1 3 2 y 5 (82)
1 1 1 z 1

Putem efectua urmatoarele notatii:


MEDII DE CALCUL INGINERESC – Îndrumar de laborator 23

3 2 1 10
A 1 3 2 , B 5 (83)
1 1 1 1

Astfel acest sistem poate fi scris sub forma matriceala AX = B si a carui rezolvare
presupune aflarea vectorului necunoscut:

x
X y (84)
z

3.7.2. Rezolvarea sistemelor prin împartirea matricelor. O metoda de rezolvare a


sistemelor de ecuatii liniare consta în împartirea matricelor. În cazul aplicatiei numerice de
mai sus rezolvarea ecuatiei matriceale presupune împartirea la stânga a matricelor:
AX = B => X=A\B (85)
Astfel pentru a rezolva aplicatia numerica de mai sus se face apel la urmatoarea secventa
de comenzi MATLAB:
» A = [3 2 -1; -1 3 2; 1 -1 -1]; (86)
» B = [10; 5; -1];
» X = A\B
Rezultatul calculelor efectuate este urmatorul:
X = [-2.0000; 5.0000; -6.0000] (87)
Ceea ce semnifica faptul ca solutia sistemului este: x = -2, y = 5 si z = -6.
3.7.3. Rezolvarea sistemelor prin inversarea matricelor. O alta metoda de rezolvare a
sistemelor de ecuatii liniare consta în inversarea matricelor. În cazul aplicatiei numerice de
mai sus rezolvarea ecuatiei matriceale presupune inversarea matricei A. Astfel înmultind la
stânga sistemul matriceal AX = B cu A-1 se obtine:

A-1AX = A-1B => I X = X = A-1B (88)

Inversarea unei matrice în MATLAB presupune utilizarea functiei specifice inv. Astfel
pentru a rezolva aplicatia numerica de mai sus se face apel la urmatoarea secventa de
comenzi MATLAB:

» A = [3 2 -1; -1 3 2; 1 -1 -1]; (89)


» B = [10; 5; -1];
» X = inv(A)*B
Rezultatul calculelor efectuate este acelasi cu cel obtinut prin metoda împartirii
matricelor:

X = [-2.0000; 5.0000; -6.0000] (90)


24 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

Aceasta semnifica faptul ca solutia sistemului este x = -2, y = 5 si z = -6.


Folosind ansamblul de comenzi de cronometrare a timpului de calcul tic toc se poate
constata ca metoda de rezolvare a sistemelor folosind inversarea matricelor conduce la un
timp de calcul sensibil mai lung decât metoda împartirii matricelor.

4. Aplicatii numerice propuse spre rezolvare

APLICATIA 1
Generati o matrice 4x4 cu numere reale aleatoare cuprinse între 0 si 100 folosind functia
MATLAB rand.

APLICATIA 2
Generati o matrice 5x5 cu numere reale aleatoare cuprinse între 10 si 20 folosind functia
MATLAB rand.

APLICATIA 3
Generati matricea A =[16 2 3 NaN; NaN 11 10 8; NaN 7 6 12; 4 NaN 15 1].
Identificati elementele de tip NaN ale matricei A folosind functia MATLAB isnan si
calculati numarul lor (NaN – Not a Number).

APLICATIA 4
Creati într-un editor exterior MATLAB-ului (de pilda Notepad) un fisier text matrice.dat
sau matrice.txt continând urmatoarele date:
16.0 3.0 2.0 13.0
5.0 10.0 11.0 8.0
9.0 6.0 7.0 12.0
4.0 15.0 14.0 1.0
Importati fisierul în MATLAB Workspace folosind una din sintaxele functiei ”load”:
load matrice.dat sau load matrice.txt.

APLICATIA 5
Localizati elementele matricei A =[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]
care sunt mai mici decât 10 si afisati-le pe ecran.

APLICATIA 6
Creati matricea A =[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1] si determinati
dimensiunile matricei si numarul de elemente folosind functia MATLAB size.

APLICATIA 7
Generati vectorul V = [1 4 7 2 3 6 5] si ordonati-l în sens crescator si apoi descrescator
folosind operatii cu vectori, respectiv comanda MATLAB sort.
MEDII DE CALCUL INGINERESC – Îndrumar de laborator 25

APLICATIA 8
Se dau vectorii x = [1 5 2 8 9 0 1] si y = [5 2 2 6 0 0 2]. Executati comenzile de mai jos
si explicati rezultatele obtinute:
x>y
y<x
y(y<x)
x == y (În MATLAB operatorul ”==” înseamna ”egal” logic si este folosit în operatii
logice. Atentie nu este identic cu operatorul clasic de atribuire ”=”)
x <= y
y >= x
x | y (În MATLAB operatorul ”|” înseamna ”sau” logic)
x & y (În MATLAB operatorul ”&” înseamna ”si” logic)
x & (~y) (În MATLAB operatorul ”~” înseamna ”nu” logic)
(x > y) | (y < 4)
(x > y) & (x < y)

APLICATIA 9
Sa se creeze în directorul curent un fisier script cu numele prog.m care sa genereze o
matrice A de dimensiune 10 x 10 si un vector B de dimensiune 10 x 1, ambele cu elemente
aleatoare cuprinse între 0 si 100. Apoi sa se determine numarul de conditionare al
matricei A si sa se rezolve sistemul AX = B prin doua metode.

APLICATIA 10
Generati matricea A =[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1] si apoi creati
matricea B adaugând 16 la fiecare din elementele matricei A. Generati o noua matrice C
având elementele egale cu radacina patrata a elementelelor matricei B. Generati o noua
matrice D având elementele egale cu patratul elementelelor matricei C. Folositi functia
sqrt de extragere a radicalului.

APLICATIA 11
Calculati numeric limita seriei Xn pentru n=1... 8 , în care Xn=1/[n(n+1)].

APLICATIA 12
Creati un vector cu elementele Xn=(-1)n+1/(2n-1) unde n ia valoarea de la 1 la 100.
Calculati suma elementelor acestui vector.

APLICATIA 13
Fie seria S = Xn pentru n=1... 8 , în care Xn=1/[sin(n)+2]. Determinati, folosind
comenzile MATLAB învatate, daca seria S este convergenta.
26 MEDII DE CALCUL INGINERESC – Îndrumar de laborator

APLICATIA 14
Calculati valorile curentilor I1, I2, I3 folosind teoremele lui Kirchoff si operatiile cu
matrice din MATLAB. Cele 3 ecuatii de circuit specifice puneti-le sub forma [R]*[I]=[U],
unde [R] reprezinta o matrice cunoscuta de dimensiune 3x3, [I] reprezinta un vector
coloana necunoscut care contine cei 3 curenti, iar [U] reprezinta un vector coloana
cunoscut.
7V

I1 I2 I3

1 2 3

12 V

S-ar putea să vă placă și