Sunteți pe pagina 1din 17

1.

13 Mediul de programare MATLAB

Acest program oferǎ posibilitatea executǎrii instrucțiunilor


linie-cu-linie (mod linie comandǎ), rezultatele fiind prelucrate imediat
și afișate pe ecran sau prelucrarea unor instrucțiuni conținute ȋn fișiere
(modul programat).
Programele MATLAB sunt redactate ȋn fișiere m (cu extensia
*.m) și conțin o serie de instrucțiuni sau ȋn fișiere de tip “script” (tot
cu extensia *.m), ambele tipuri fiind ȋn format ASCII. Existǎ și
posibilitatea creǎrii unor funcții noi, care sǎ se adauge celor existente
ȋn MATLAB, prin scrierea unor fișiere de tip “function” (funcție).

Fișierele script

Un astfel de fișier este de tip extern, el conține o secvențǎ de


comenzi MATLAB. Pentru a elabora un fișier de tip script, din
meniul File se selecteazǎ opțiunea: “File/New/Script” sau ȋn spațiul
de lucru se introduce comanda edit.
Rezultatul este deschiderea unei ferestre de editare ȋn care se
introduc liniile de comandǎ. De exemplu, vrem sǎ trasǎm graficul
funcției cos(x) pentru x ȋn intervalul [0, 2pi]. Vom scrie:

>> x=linspace(0,2*pi,200);
>> y=cos(x);
>> plot(x,y)
>> xlabel('axa-X')
>> ylabel('axa-Y')
>> title('Graficul lui y=cos(x)')

Îl salvǎm ȋn directorul dorit ca și “cos_grafic.m”. Se poate alege orice


nume pentru fișier dar numele funcțiilor existente ȋn MATLAB
trebuie evitate. De exemplu, nu putem salva fișierul script ca și
“cos.m” deoarece nu vom mai avea acces la comanda cos.
Pentru a rula acest fișier avem douǎ posibilitǎți:
1. din editorul MATLAB se tasteazǎ F5,
2. ȋn spațiul de lucru se tasteazǎ “cos_grafic” (fǎrǎ a mai include și
extensia).

29
Fișierul va fi executat și graficul din fig. 1.2 va apare ȋntr-o fereastrǎ
separatǎ:

Figura 1.2 Graficul funcției y=cos(x) pe intervalul [0,2pi]

Dacǎ fișierul script nu este executat, trebuie sǎ verificați urmǎtoarele:


1. este posibil sǎ mai existe un fișier script cu același nume. Se poate
verifica folosind comanda “which cos_grafic.m”,
2. folosiți comanda “type cos_grafic”și veți obține ȋn spațiul de lucru
conținutul fișierului script și determinați eventualele erori.

Variabilele folosite ȋn interiorul unui fișier script rǎmȃn prezente ȋn


spațiul de lucru dupǎ execuția acestuia, devenind astfel variabile
globale. Acest lucru se poate verifica folosind comanda “whos”:

>> whos
Name Size Bytes Class
x 1x200 1600 double
y 1x200 1600 double

30
Fișierele function (funcție)

Funcțiile sunt fișiere cu extensia *.m care mǎresc capacitǎțile


MATLAB. Toate comenzile din toolbox-uri și cele mai multe
comenzi MATLAB sunt sub formǎ de funcții. Diferența fundamentalǎ
ȋntre fișierele funcție și fișierele script este datǎ de posibilitatea
transferǎrii parametrilor prin valoarea lor, ȋn cazul funcțiilor.
Variabilele folosite ȋn fișierele funcție au caracter local; dupǎ
executarea fișierului se transferǎ ȋn spațiul de lucru numai variabilele
de ieșire.
Structura generalǎ este:

function [param_ieșire]=nume(param_intrare)
% linii de comentarii
linii de comenzi
end

function – cuvȃnt obligatoriu ȋn prima linie


[param_ieșire] – parametrii de ieșire, separați prin virgulǎ
nume – numele sub care se salveazǎ fișierul nume.m
(param_intrare) – parametrii de intrare, separați prin virgulǎ
Liniile opționale de comentariu ȋncep cu simbolul “%”.
Pentru a edita un fișier de tip funcție se selecteazǎ opțiunea:
“File/New/Function” și se deschide un editor ce conține cunvintele
cheie function pe prima linie și end pe ultima. Se introduc
instrucțiunile și se salveazǎ. Se poate scrie și folosind opțiunea “edit”
ȋn spațiul de lucru, apoi se salveazǎ.
Un exemplu de fișier funcție (mai ȋntȃi sǎ golim spațiul de
lucru):

>> clear all


>> whos

În editorul de funcții vom introduce o funcție care calculeazǎ radicalul


din numerele ȋntregi cuprinse ȋn intervalul a și b; a și b fiind introduse
ȋn spațiul de lucru:

31
function r = radical(a,b)
% aceasta functie calculeaza radicalul
% numerelor intregi cuprinse intre a si b
for i=a:b
r(i)=sqrt(i);
end
end

Execuția fișierului ȋn spațiul de lucru:

>> a=1; b=10; % valorile de intrare


>> radical(a,b)
ans = % valorile de iesire
Columns 1 through 7
1.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458
Columns 8 through 10
2.8284 3.0000 3.1623

Dacǎ folosim comanda “whos”obținem variabilele globale:

>> whos
Name Size Bytes Class
a 1x1 8 double
ans 1x10 80 double
b 1x1 8 double

Atribuind valorilor de ieșire numele unei variabile globale:

>> r=radical(a,b)
r=
Columns 1 through 7
1.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458
Columns 8 through 10
2.8284 3.0000 3.1623

și ștergem variabila ans generatǎ automat:


>> clear ans

32
>> whos
Name Size Bytes Class
a 1x1 8 double
b 1x1 8 double
r 1x10 80 double

se pǎstreazǎ ca variabile globale a, b și r.

33
2. ELEMENTE DE ALGEBRĂ MATRICIALĂ
Definirea tuturor variabilelor ȋn MATLAB se face sub formǎ
matricialǎ. Acest lucru ȋnseamnǎ cǎ și scalarii sunt de fapt memorați
ca o matrice de dimensiuni 1x1 (1 linie x 1 coloanǎ), iar vectorii sunt
matricile care au o singurǎ linie sau o singurǎ coloanǎ.

2.1 Definirea matricilor

Se poate face ȋn mai multe moduri:


1. introducerea de la tastaturǎ a unei liste explicite de elemente,
2. ȋncǎrcarea matricilor din fișiere externe,
3. generarea lor folosind funcții existente ȋn MATLAB,
4. crearea matricilor cu funcții definite de utilizator.
În cazul introducerii unei matrici ca o listǎ formatǎ din
elementele acesteia, urmǎtoarele reguli trebuie respectate:
 lista elementelor matricii ȋncepe și se terminǎ cu paranteze
drepte
 elementele fiecǎrei linii sunt separate prin spațiu sau virgulǎ
 liniile sunt separate ȋntre ele prin simbolul punct-și-virgulǎ
”;”, ȋn cazul matricilor de dimensiuni mari se folosește tasta
Enter
Dimensiunile matricii sunt determinate automat, elementele fiind
memorate ȋn virgulǎ mobilǎ ȋn dublǎ precizie, pȃnǎ la valoarea maxim
disponibilǎ.

2.2 Vectori linie

Un vector linie are forma v = [v1,v2,…,vn], v1,..,vn fiind de


regulǎ valori scalare (reale sau complexe). Introducerea unui vector ȋn
MATLAB aratǎ astfel:

>> v=[1,2,3,4,5]
v=
1 2 3 4 5

34
Se remarcǎ afișarea elementelor vectorului, deoarece dupǎ
introducerea elementelor nu s-a folosit simbolul ”;”, care ar conduce
numai la memorarea vectorului v și elementele lui nu mai sunt afișate.
Lungimea unui vector se determinǎ folosind comanda “length”:

>> length(v)
ans =
5

Referirea la un element al vectorului v situat ȋn poziția k, v(k) se face


astfel:

>> v(3)
ans =
3

ceea ce ȋnseamnǎ cǎ al treilea element are valoarea 3. Identificarea


mai multor elemente ale vectorului v ȋnseamnǎ scrierea sintaxei:

>> v([1,2,4])
ans =
1 2 4

Dacǎ se dorește modificarea valorii unui element, folosind tot funcția


de indexare, se atribuie valoarea doritǎ:

>> v(5)=1500
v=
1 2 3 4 1500

și automat se afișeazǎ vectorul v cu noile valori. Se pot schimba


simultan valorile mai multor elemente:

>> v([1 3 5])=[-10 0 -20]


v=
-10 2 0 4 -20

35
Dacǎ se dorește ca mai multe elemente sǎ ia aceeași valoare, se poate
scrie sub formǎ compactǎ:

>> v([1 3 5])=0


v=
0 2 0 4 0

2.3 Vectori coloanǎ

 v1 
v 2 
Un vector coloanǎ are forma v    , unde valorile v1,
 ... 
 
vn
v2,…, vn sunt scalari (numere reale sau complexe).
Un astfel de vector se introduce element-cu-element, valorile fiind
separate prin punct-și-virgulǎ:

>> w=[1;2;3]
w=
1
2
3
Lungimea unui vector coloanǎ se determinǎ ca și ȋn cazul unui vector
linie:

>> length(w)
ans =
3

Introducerea elementelor unui vector coloanǎ și modificarea valorilor


lor se fac ȋn mod similar cu vectorii linie.

Exemplu:
>> w(3)
ans =
3

36
>> w(2)=10
w=
1
10
3

2.4 Operatorul de transpunere ȋn MATLAB

Transpusul unui vector linie este un vector coloanǎ și


transpusul unui vector coloanǎ este un vector linie. Din punct de
vedere matematic, operația de transpunere ȋnseamnǎ:

T
 v1
v 2 
   v1 v 2 ... vn
 ... 
 
vn

În cazul general avem nevoie de douǎ feluri de operatori de


transpunere:
1. operatorul de transpunere normal,
2. operatorul de transpunere conjugatǎ.
Operatorul de transpunere normal este definit de simoblul
punct-și-apostrof “ .’ ”, iar operatorul de transpunere conjugatǎ este
definit de operatorul apostrof “ ’ ”.
Exemplu:

>> u=[2;4;6;8]
u=
2
4
6
8
>> u.'
ans =
2 4 6 8

37
Operatorul transpunere conjugatǎ acționeazǎ ca și operatorul
transpunere normalǎ (schimbǎ un vector linie ȋn unul coloanǎ și
invers) dar transformǎ și elementele complexe ȋn valorile lor
complex-conjugate (valoarea a+bi devine a-bi):

>> c=[1+2i,i,3,-1-2i]
c=
Columns 1 through 3
1.0000 + 2.0000i 0 + 1.0000i 3.0000
Column 4
-1.0000 - 2.0000i
>> c'
ans =
1.0000 - 2.0000i
0 - 1.0000i
3.0000
-1.0000 + 2.0000i

2.5 Operatorul coloanǎ

Se pot crea ușor vectori care sǎ aibǎ elementele ȋn progresie


aritmeticǎ. Forma de introducere a unor astfel de vectori este:

valoare inițialǎ : pas : valoare finalǎ

Simbolul “ : ” se numește operatorul coloanǎ. Dacǎ valoarea pasului


este egalǎ cu 1, atunci se pot introduce numai valorile inițialǎ și cea
finalǎ, separate de operatorul coloanǎ.

>> x=0:0.5:10
x=
Columns 1 through 7
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
Columns 8 through 14
3.5000 4.0000 4.5000 5.0000 5.5000 6.0000 6.5000
Columns 15 through 21
7.0000 7.5000 8.0000 8.5000 9.0000 9.5000 10.0000

38
În exemplul de mai sus am creat un vector ce conține elemente cu
valori cuprinse ȋntre 0 și 10 și incrementul dintre douǎ valori
succesive este 0.5.
Un vector ce conține toate elementele ȋntregi de la 0 la 10 inclusiv
este:

>> y=1:10
y=
1 2 3 4 5 6 7 8 9 10

Operatorul coloanǎ se poate aplica și direct, ȋn cazul unui vector


coloanǎ (obținut prin transpunere):

>> z=(0:0.2:1)'
z=
0
0.2000
0.4000
0.6000
0.8000
1.0000

Valorile incrementului pot fi și negative:

>> u=100:-10:0
u=
100 90 80 70 60 50 40 30 20 10 0

Observație: se remarcǎ lipsa parantezelor pǎtrate ȋn definirea


vectorilor. Dacǎ se dorește totuși folosirea lor, rezultatul este același
ca mai sus:

>> u=[100:-10:0]
u=
100 90 80 70 60 50 40 30 20 10 0

39
Identificarea unor elemente ale unui vector definit cu operatorul
coloanǎ:
a). al cincilea element al lui u:

>> u(5)
ans =
60

b). de la elementul al cincilea pȃnǎ la ultimul:

>> u(5:end)
ans =
60 50 40 30 20 10 0

c). elementele pare ale vectorului u:


>> u(2:2:end)
ans =
90 70 50 30 10

d). modificarea valorii unui element:

>> u(1)=300
u=
300 90 80 70 60 50 40 30 20 10 0

2.6 Multiplicarea cu un scalar

Un scalar este un numǎr real sau complex. Înmulțirea dintre un vector


și un scalar ȋnseamnǎ matematic:

  v    v1 v2 ... vn    v1   v2 ...   vn

De exemplu: 2·[1 2 3 4 5]=[2 4 6 8 10]


În MATLAB pentru vectorii linie:

>> a=1:5
a=

40
1 2 3 4 5
>> b=2*a
b=
2 4 6 8 10
Similar și pentru vectorii coloanǎ:

>> c=(1:4)'
c=
1
2
3
4
>> d=2*c
d=
2
4
6
8

2.7 Adunarea și scǎderea vectorilor

Se pot aduna doi vectori de aceeași dimensiune, rezultȃnd un vector


ale cǎrui elemente reprezintǎ suma element-cu-element a celor doi
vectori, adicǎ:

[u1 u2 … un]+[v1 v2 … vn]=[u1+v1 u2+v2 … un+vn]

O secvențǎ MATLAB este:

>> u=1:5
u=
1 2 3 4 5

>> v=6:10
v=
6 7 8 9 10
>> u+v

41
ans =
7 9 11 13 15

Vectorii coloanǎ se ȋnsumeazǎ ca și cei linie:

>> u=[1,2,3]', v=[4,5,6]'


u=
1
2
3
v=
4
5
6
>> u+v
ans =
5
7
9

Atenție: nu se pot aduna vectori de lungime diferitǎ, MATLAB


genereazǎ un mesaj de eroare:

>> u+v
ans =
5
7
9
>> u=1:3, v=1:4
u=
1 2 3
v=
1 2 3 4
>> u+v
??? Error using ==> plus
Matrix dimensions must agree.

42
2.8 Adunarea unui vector cu un scalar

Din punct de vedere matematic, acest lucru nu este posibil. Expresia


urmǎtoare: [1 2 3]+5 nu are sens matematic. În MATLAB, expresia
de mai sus este echivalentǎ cu faptul cǎ fiecare element al vectorului
se adunǎ cu scalarul respectiv, echivalent cu expresia: [1 2 3]+[5 5 5].

>> v=1:3, w=v+5


v=
1 2 3
w=
6 7 8

Scǎderea vectorilor sau scǎderea unui scalar dintr-un vector sunt


operații similare cu cele de la adunarea vectorilor.

2.9 Produsul scalar a doi vectori

În cazul a doi vectori de aceeași dimensiune, produsul scalar (inner


product, dot product) este un scalar, egal cu suma produselor
elementelor corespunzǎtoare acelorași poziții:

u  u1 u 2 ... un , v  v1 v 2 ... vn


n
w  u  v  u1  v1  u 2  v 2  ...  un  vn   ui  vi
i 1

MATLAB are un operator special care permite operații aritmetice


element-cu-element ȋn cazul matricilor și vectorilor. Acest operator
notat cu ”. “ este aplicat ȋn fața operațiilor de ȋnmulțire, ȋmpǎrțire sau
ridicare la putere a unor vectori sau matrici.
Astfel, operatorul ”.* “ aplicat vectorilor u și v ȋnseamnǎ cǎ fiecare
element al lui u se ȋnmulțește cu fiecare element al lui v. Pentru
calculul produsului scalar se apeleazǎ funcția “sum”.
Exemplu: fie vectorii a = [3 -1 2] și b = [4 -1 -2]. Calculați produsul
lor scalar.
Secvența MATLAB este:

43
>> a=[3 -1 2]; b=[4 -1 -2]; %se introduc datele fara a fi afisate
>> c=sum(a.*b) % produsul scalar
c=
9

O modalitate mai simplǎ de calcul a produsului scalar a doi vectori de


dimensiune (1 x N) este de a ȋnmulți primul vector de mǎrime (1 x N)
cu al doilea vector transpus, adicǎ de mǎrime (N x 1), rezultatul fiind
un scalar:

>> a=[3 -1 2]; b=[4 -1 -2];


>> d=a*b'% produsul scalar
d=
9

Ca o concluzie, ȋntotdeauna produsul scalar este obținut ȋn urma


ȋnmulțirii unui vector linie cu unul coloanǎ. Se pot ȋnmulți ȋntre ei și
vectori coloanǎ. Rezultatul obținut ȋn acest caz este o matrice,
provenitǎ din ȋnmulțirea unui vector de dimensiune (N x 1) cu un alt
vector de dimensiune (1 x N), cel din urmǎ fiind obținut prin
transpunerea vectorului coloanǎ original. Aceastǎ operație se numește
produs extern (outer product) și nu trebuie confundatǎ cu produsul
vectorial din mecanica mediilor continue.
Pentru vectorii de mai sus, produsul extern are valoarea:

>> a=[3 -1 2]; b=[4 -1 -2];


>> e=a'*b % produsul extern
e=
12 -3 -6
-4 1 2
8 -2 -4

2.10 Produsul vectorial a doi vectori

Produsul vectorial (cross product) este un vector perpendicular pe cei


doi. Fie vectorul m  5i  3 j  k și n  i  2 j  2k . Produsul
vectorial este:

44
i j k
p  m  n  mx my mz  p x  i  p y  j  p z  k
nx ny nz

ȋn care i, j și k sunt versorii axelor de coordinate ȋn sistemul cartezian


(x,y,z). Rezolvarea ȋn MATLAB face apel la funcția “cross”:

>> m=[5 -3 -1]; n=[-1 -2 -2];


>> p=cross(m,n)
p=
4 11 -13

adicǎ rezultatul produsului vectorial este vectorul p  4i  11 j  13k .


Putem verifica și faptul cǎ vectorul p este perpendicular atȃt pe
vectorul m, cȃt și pe vectorul n:

>> [p*m' p*n']


ans =
0 0

instrucțiune ce calculeazǎ produsele scalare, care fiind nule confirmǎ


ortogonalitatea vectorilor respectivi.

45

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