21.07.2014 Views

download - Sisteme de Programare pentru Modelare si Simulare

download - Sisteme de Programare pentru Modelare si Simulare

download - Sisteme de Programare pentru Modelare si Simulare

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6. GENERAREA ŞI MANIPULAREA VECTORILOR<br />

ŞI A MATRICELOR<br />

Deşi în MATLAB nu există instrucţiuni <strong>pentru</strong> <strong>de</strong>clararea tipurilor <strong>de</strong><br />

variabile, iar matricele se autodimen<strong>si</strong>onează în timpul utilizării, <strong>pentru</strong> a creşte<br />

viteza <strong>de</strong> lucru, se proce<strong>de</strong>ază la crearea unei matrice goale. Acest lucru se<br />

realizează la începutul se<strong>si</strong>unii <strong>de</strong> lucru sau la apelarea unei funcţii program.<br />

Declararea unei matrice goale (fie aceasta G) se realizează, după cum s-a<br />

arătat, cu instrucţiunea G = [ ], prin care se alocă G o matrice <strong>de</strong> dimen<strong>si</strong>uni 0x0.<br />

Orice matrice goală trebuie să aibă cel puţin una din dimen<strong>si</strong>uni zero. Pentru<br />

a testa dacă o matrice G este goală, se foloseşte funcţia isempty(G), care<br />

returnează 1, dacă matricea este goală şi 0, în caz contrar.<br />

6.1. Generarea vectorilor<br />

Pentru generarea vectorilor cu pas liniar este necesară cunoaşterea limitelor<br />

intervalului (minimă şi maximă) şi a pasului dintre două elemente.<br />

Cunoscând valoarea minimă a intervalului (vmin) şi pe cea maximă (vmax),<br />

fară a se indica pasul, atunci acesta se con<strong>si</strong><strong>de</strong>ră egal cu unitatea, iar secvenţa <strong>de</strong><br />

instrucţiuni <strong>pentru</strong> generarea vectorului V este V=vmin:vmax , ca <strong>de</strong> exemplu:<br />

V=10.45:15.8<br />

rezultând<br />

V =<br />

10.4500 11.4500 12.4500 13.4500 14.4500 15.4500.<br />

Se observă că valoarea iniţială şi finală pot fi numere reale, cu condiţia ca<br />

vmin0, atunci<br />

vmin


Generarea şi manipilarea vectorilor şi a matricelor 109<br />

x =<br />

2 7 12 17 22<br />

sau,<br />

x=-20:3:4<br />

rezultând<br />

x =<br />

-20 -17 -14 -11 -8 -5 -2 1 4<br />

sau,<br />

x=4:-3:-5<br />

rezultând<br />

x =<br />

4 1 -2 -5<br />

sau<br />

x=-14:-3:-25<br />

rezultând<br />

x =<br />

-14 -17 -20 -23<br />

sau<br />

x=-4:1<br />

rezultând<br />

x =<br />

-4 -3 -2 -1 0 1<br />

sunt corecte, în timp ce următoarele instrucţiuni:<br />

x=3 : -1 : 4<br />

şi<br />

x=-5 :2 :-10<br />

sunt incorecte.<br />

Generarea unui vector, având N elemente cu pas liniar, între vmin şi vmax, se<br />

poate realiza cu instrucţiunea X=linspace(vmin,vmax,N), ca <strong>de</strong> exemplu:<br />

X=linspace(2.7,7,4)<br />

rezultând<br />

X =<br />

2.7000 4.1333 5.5667 7.0000.<br />

Pasul liniar dintre două elemente, generate cu linspace este:<br />

vmin − vmax<br />

pas = . Dacă valoarea N este omisă, atunci aceasta este con<strong>si</strong><strong>de</strong>rată<br />

N −1<br />

implicit egală cu 100. După cum am arătat anterior, valorile limitelor intervalului<br />

nu sunt supuse nici unei restricţii.<br />

Generarea unui vector X, <strong>de</strong> N elemente, cu pas logaritmic, între limita<br />

inferioară lmin şi superioară lmax, se realizează cu funcţia<br />

X=logspace(lmin,lmax,N). Vectorul X conţine N elemente, distribuite logaritmic<br />

între <strong>de</strong>ca<strong>de</strong>le [10 lmin 10 lmax ]. Dacă numărul <strong>de</strong> elemente este omis, se generează un


110<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

vector cu 50 elemente distribuite logaritmic între [10 lmin 10 lmax ]. Dacă lmax=pi<br />

(adică π), atunci elementele vectorului sunt distribuite între 10 lmin şi π. Asupra<br />

valorilor limitelor nu se face nici o restricţie şi acestea pot fi date în orice ordine.<br />

Dacă lmin >lmax, vectorul generat va fi ordonat <strong>de</strong>screscător.<br />

De exemplu, generarea unui vector cu N=5 elemente distribuite logaritmic<br />

între 10 -2 şi 10 2 se realizează cu instrucţiunea x=logspace(-2,2,5), rezultând<br />

x =<br />

0.0100 0.1000 1.0000 10.0000 100.0000.<br />

Generarea unui vector cu N=5 elemente, distribuite logaritmic în intervalul<br />

[10 -2 pi], se face prin instrucţiunea<br />

x=logspace(-2,pi,5),<br />

rezultând<br />

x =<br />

0.0100 0.0421 0.1772 0.7462 3.1416.<br />

Generarea unei reţele (mesh) se execută prin funcţia meshgrid, care<br />

transformă un domeniu specificat prin vectorii x şi y, în tablourile X şi Y, care pot<br />

fi folo<strong>si</strong>te, atât la evaluarea funcţiilor <strong>de</strong> două variabile, cât şi <strong>pentru</strong> reprezentările<br />

grafice în două, 2D, sau trei, 3D, dimen<strong>si</strong>uni.<br />

Sintaxa <strong>de</strong> apelare a funcţiei este [X,Y] = meshgrid(x,y), iar atunci când<br />

vectorii x şi y sunt egali, apelarea se face prin [X,Y] = meshgrid(x).<br />

Funcţia returnează în tablourile X şi Y perechile <strong>de</strong> coordonate ale tuturor<br />

punctelor din domeniul <strong>de</strong>finit <strong>de</strong> vectorii x şi y. Vectorii x şi y sunt <strong>de</strong> forma:<br />

x = x min : ∆x : x max , y = y min : ∆y : y max<br />

mesh-ul rezultat din divizarea domeniului fiind reprezentat în figura 6.1.<br />

Fig. 6.1. Mesh-ul rezultat prin divizarea domeniului x-y<br />

De exemplu, generarea tablourilor X şi Y <strong>pentru</strong> domeniul –3≤x≤6, -2≤y≤4,<br />

cu pasul ∆x=3 şi ∆y=2, se face cu instrucţiunea: [X,Y]=meshgrid(-3:3:6, -2:2:4),<br />

obţinându-se rexultatul,


Generarea şi manipilarea vectorilor şi a matricelor 111<br />

X =<br />

-3 0 3 6<br />

-3 0 3 6<br />

-3 0 3 6<br />

-3 0 3 6<br />

Y =<br />

-2 -2 -2 -2<br />

0 0 0 0<br />

2 2 2 2<br />

4 4 4 4.<br />

Dacă este necesar ca <strong>pentru</strong> domeniul <strong>de</strong> mai sus să se evalueze funcţia<br />

x^2+y^2 şi să se traseze graficul acesteia, prezentat în figura6.2, atunci<br />

instrucţiunile care permit acest lucru sunt:<br />

[X,Y] = meshgrid(-3:3:6, -2:2:4); Z=X.^2+Y.^2; mesh(Z).<br />

Fig. 6.2. Reprezentarea funcţiei x 2 +y 2 pe domeniului x-y<br />

Spaţierea <strong>pentru</strong> răspunsul în frecvenţă, <strong>si</strong>milar cu meshgrid, dar în spaţiul 2<br />

D, se realizează cu funcţia freqspace, apelată cu <strong>si</strong>ntaxa,<br />

[F1,F2]=freqspace(n)<br />

în care:<br />

F1, F2 – vectorii <strong>de</strong> dimen<strong>si</strong>unea n x n;<br />

n- numărul <strong>de</strong> puncte.<br />

Dacă n este impar, atunci vectorii F = (-1+1/n:2/n:1-1/n), iar dacă este par,<br />

atunci F = (-1 :2/n:1-2/n).


112<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

6.2. Instrucţiuni care permit obţinerea unor informaţii<br />

<strong>de</strong> bază <strong>de</strong>spre variabile şi matrice<br />

Pentru <strong>de</strong>terminarea dimen<strong>si</strong>unilor unei matrice, X, se utilizează funcţia<br />

<strong>si</strong>ze, apelată cu <strong>si</strong>ntaxa :<br />

[m,n]=<strong>si</strong>ze(X)<br />

care reîntoarce vector linie cu două componente [m,n], care conţine numărul <strong>de</strong><br />

linii m şi numărul <strong>de</strong> coloane n, ale matricei X. Con<strong>si</strong><strong>de</strong>rând matricea X <strong>de</strong> forma,<br />

X =<br />

1 2 3 4<br />

5 6 7 8<br />

9 10 11 12,<br />

prin instrucţiunea [m,n]=<strong>si</strong>ze(X) se obţine,<br />

m =<br />

3<br />

n =<br />

4,<br />

respectiv m=3 coloane şi n=4 linii.<br />

O instrucţiune <strong>de</strong> forma [M1,M2,M3,...,MN] = <strong>si</strong>ze(X), returnează lungimile<br />

primelor N dimen<strong>si</strong>uni ale lui X.<br />

Printr-o instrucţiune <strong>de</strong> forma m = <strong>si</strong>ze(X,DIM), se returnează lungimea<br />

dimen<strong>si</strong>unii specificate prin scalarul DIM. De exemplu, prin instrucţiunea<br />

m=<strong>si</strong>ze(X,1) se găseşte numărul <strong>de</strong> rânduri, respectiv m=3.<br />

Lungimea unui vector sau dimen<strong>si</strong>unea maximă a unei matrice, se obţine cu<br />

instrucţiunea a=length(X), rezultând :<br />

a = 4.<br />

Această instrucţiune, length, este echivalentă cu instrucţiunea max(<strong>si</strong>ze(X)),<br />

doar că această ultimă formă nu este po<strong>si</strong>bil <strong>de</strong> aplicat matricelor goale.<br />

Numărul <strong>de</strong> dimen<strong>si</strong>uni n, ale unei matrice X, sau vector, se <strong>de</strong>termină prin<br />

instrucţiunea n=ndims(X). Pentru matricea X <strong>de</strong> mai sus se obţine n=2. O<br />

instrucţiune <strong>si</strong>milară lui ndims este length(<strong>si</strong>ze(X)).<br />

Vizualizarea (afişarea) unei matrice sau a unui vector text, notat generic cu<br />

X, pe dispay (ecran), fără să tipărească numele acesteia, se face prin funcţia<br />

disp(X).<br />

Dacă X=[1 2 3 4 ; 5 6 7 8], atunci prin comanda disp(X), pe ecran va apărea,<br />

1 2 3 4<br />

5 6 7 8,<br />

iar dacă Xx=['Acest text apare pe ecran'], prin comanda disp(Xx), pe ecran apare,<br />

Acest text apare pe ecran.<br />

Pentru creşterea vitezei <strong>de</strong> lucru se proce<strong>de</strong>ază la crearea unei matrice goale


Generarea şi manipilarea vectorilor şi a matricelor 113<br />

cu instrucţiunea,<br />

X=[ ]<br />

prin care se alocă lui X, matricea <strong>de</strong> dimen<strong>si</strong>uni 0 x 0.<br />

Orice matrice goală trebuie să aibă cel puţin una dintre dimen<strong>si</strong>uni zero.<br />

Verificarea faptului că o matrice este goală se realizează prin instrucţiunea<br />

isempty(matrice), care va avea rezultatul 1, dacă este goală sau zero, altfel..Dacă<br />

con<strong>si</strong><strong>de</strong>răm matricele Y=[] şi YY=[1 2; 3 4], cu instrucţiunea isempty(Y) se obţine<br />

1, iar cu instrucţiunea isempty (YY), se obţine 0. Matricea goală nu are nici un<br />

element, astfel că prod(<strong>si</strong>ze(Y))==0.<br />

Pentru a verifica dacă două sau mai multe matrice sunt egale, se utilizează<br />

instrucţiunea isequal(A, B, …, C), în care A, B, C sunt matricele ce trebuie<br />

verificate. Atunci când toate elementele corespunnzătoare sunt egale, rezultatul<br />

este 1, iar altfel este 0.<br />

Verificarea faptului, dacă o matrice sau vector A conţine valori numerice, se<br />

realizează folo<strong>si</strong>nd instrucţiunea isnumeric(A), la care se returnează 1, atunci când<br />

elementele sunt numerice şi 0, altfel. Dacă A=[1 2; 3 4] atunci prin isnumeric(A)<br />

se obţine 1, iar <strong>pentru</strong> B=[' acest text '; 'nu este numeric'] prin isnumeric(B) se<br />

obţine 0.<br />

Pentru a verifica dacă o variabilă A (matrice sau vector), este <strong>de</strong> tip logic se<br />

utilizează instrucţiunea islogical(A), la care răspunsul trebuie să fie 1, dacă este <strong>de</strong><br />

tip logic şi 0, dacă nu. De exemplu, dacă A=[1 10; 15 20], atunci islogical(A) va fi<br />

0, iar <strong>pentru</strong> B=~A, islogical(B) va fi 1.<br />

Convertirea unei variabile numerice A în variabilă logică, se face prin<br />

instrucţiunea logical(A).<br />

6.3. Generarea matricelor elementare<br />

Matricea nulă sau matricea zero, pe care o vom nota cu O, este o matrice cu<br />

toate elementele zero:<br />

⎡ 0 0 .... 0 ⎤<br />

⎢<br />

⎥<br />

⎢<br />

0 0 .... 0<br />

O =<br />

⎥ .<br />

⎢....<br />

.... .... .... ⎥<br />

⎢<br />

⎥<br />

⎣ 0 0 .... 0 ⎦<br />

Această matrice zero poate fi generată cu funcţia zeros, care se apelează cu<br />

una dintre <strong>si</strong>ntaxele:<br />

O=zeros(n), O=zeros(m,n) sau O=zeros(<strong>si</strong>ze(A)),<br />

un<strong>de</strong> m şi n sunt scalari, iar A este o matrice oarecare.<br />

Dacă funcţia zeros este apelată cu un <strong>si</strong>ngur argument scalar, atunci matricea


114<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

generată este o matrice pătrată, având dimen<strong>si</strong>unea argumentului. De exemplu,<br />

dacă n=4, atunci la comanda O=zeros(4), se obţine:<br />

O = 0 0 0 0<br />

0 0 0 0<br />

0 0 0 0<br />

0 0 0 0.<br />

Atunci când funcţia zeros este apelată cu două argumente scalare (m, n),<br />

matricea generată are m linii şi n coloane. Dacă m=3 şi n=4, atunci cu<br />

instrucţiunea O=zeros(4,3), se obţine:<br />

O = 0 0 0<br />

0 0 0<br />

0 0 0<br />

0 0 0.<br />

Funcţia zeros apelată cu instrucţiunea O=zeros(<strong>si</strong>ze(A)), produce o matrice<br />

zero, <strong>de</strong> aceleaşi dimen<strong>si</strong>uni cu cele ale matricei A.<br />

Con<strong>si</strong><strong>de</strong>rând matricea A = [ 1 2 3; 4 5 6], atunci prin instrucţiunea<br />

O=zeros(<strong>si</strong>ze(A)), se obţine:<br />

O =<br />

0 0 0<br />

0 0 0.<br />

Matricea unitară, pe care o vom nota cu U, este o matrice cu toate<br />

elementele 1:<br />

⎡ 1 1 .... 1 ⎤<br />

⎢<br />

⎥<br />

⎢<br />

1 1 .... 1<br />

U =<br />

⎥ .<br />

⎢....<br />

.... .... .... ⎥<br />

⎢<br />

⎥<br />

⎣ 1 1 .... 1 ⎦<br />

Generarea matricei unitate se face cu funcţia ones, ce poate fi apelată cu una<br />

dintre <strong>si</strong>ntaxele:<br />

U=ones(n), U=ones(m,n) sau U=ones(<strong>si</strong>ze(A)),<br />

un<strong>de</strong> m şi n sunt scalari, iar A este o matrice oarecare.<br />

Dacă funcţia ones este apelată cu un <strong>si</strong>ngur argument scalar, atunci matricea<br />

generată este o matrice pătrată, având dimen<strong>si</strong>unea argumentului. De exemplu,<br />

dacă n=4, atunci la comanda U=ones(4), se obţine:<br />

U =<br />

1 1 1 1<br />

1 1 1 1<br />

1 1 1 1<br />

1 1 1 1.<br />

Atunci când funcţia ones este apelată cu două argumente scalare (m, n),<br />

matricea generată are m linii şi n coloane. Dacă m=3 şi n=4, atunci cu<br />

instrucţiunea U=ones(4,3), se obţine:


Generarea şi manipilarea vectorilor şi a matricelor 115<br />

U =<br />

1 1 1<br />

1 1 1<br />

1 1 1<br />

1 1 1.<br />

Funcţia ones, apelată cu instrucţiunea U=ones(<strong>si</strong>ze(A)), produce o matrice<br />

zero <strong>de</strong> aceleaşi dimen<strong>si</strong>uni cu cele ale matricei A.<br />

Con<strong>si</strong><strong>de</strong>rând matricea A = [ 1 2 3; 4 5 6], atunci prin instrucţiunea<br />

U=ones(<strong>si</strong>ze(A)), se obţine:<br />

U =<br />

1 1 1<br />

1 1 1.<br />

Printr-o instrucţiune <strong>de</strong> forma U=ones(m, n, … , p), se poate obţine o<br />

matrice unitate <strong>de</strong> m x n x … x p dimen<strong>si</strong>uni.<br />

Matricea i<strong>de</strong>ntitate sau unitate, pe care o vom nota cu I, se generează cu<br />

una dintre <strong>si</strong>ntaxele:<br />

I=eye(n), I=eye(m,n) sau I=eye(<strong>si</strong>ze(A)),<br />

un<strong>de</strong> m şi n sunt scalari, iar A este o matrice oarecare.<br />

Matricea i<strong>de</strong>ntitate este o matrice care are elementele <strong>de</strong> pe diagonala<br />

principală egale cu unu, iar toate celelalte egale zero:<br />

⎡ 1 0 .... 0 ⎤<br />

⎢<br />

⎥<br />

⎢<br />

0 1 .... 0<br />

I =<br />

⎥ .<br />

⎢....<br />

.... .... .... ⎥<br />

⎢<br />

⎥<br />

⎣ 0 0 .... 1 ⎦<br />

⎧0,<br />

<strong>pentru</strong> i ≠ j,<br />

Elementele sale sunt: I ij<br />

= ⎨<br />

.<br />

⎩1,<br />

<strong>pentru</strong> i = j<br />

Dacă funcţia eye este apelată cu un <strong>si</strong>ngur argument scalar, atunci matricea<br />

generată este o matrice pătrată, având dimen<strong>si</strong>unea argumentului. De exemplu,<br />

dacă n=4, atunci la comanda I=eye(4), se obţine:<br />

I =<br />

1 0 0 0<br />

0 1 0 0<br />

0 0 1 0<br />

0 0 0 1.<br />

Atunci când funcţia eye este apelată cu două argumente scalare (m, n),<br />

matricea generată are m linii şi n coloane.<br />

Dacă m=3 şi n=4, atunci cu instrucţiunea I=eye(4,3), se obţine:


116<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

I =<br />

1 0 0<br />

0 1 0<br />

0 0 1<br />

0 0 0.<br />

Funcţia eye, apelată cu instrucţiunea I=eye(<strong>si</strong>ze(A)), produce o matrice<br />

i<strong>de</strong>ntitate <strong>de</strong> aceleaşi dimen<strong>si</strong>uni cu cele ale matricei A.<br />

Con<strong>si</strong><strong>de</strong>rând matricea A = [ 1 2 3; 4 5 6], atunci prin instrucţiunea<br />

I=eye(<strong>si</strong>ze(A)), se obţine:<br />

I =<br />

1 0 0<br />

0 1 0.<br />

Generarea matricelor cu numere aleatoare se poate face utilizând funcţia<br />

rand, <strong>pentru</strong> numere aleatoare, cu distribuţie uniformă în intervalul (0,1) sau<br />

funcţia randn, <strong>pentru</strong> numere aleatoare cu distribuţie normală (Gaus<strong>si</strong>ană), <strong>de</strong><br />

medie zero şi variantă unu.<br />

Instrucţiunile <strong>pentru</strong> generarea matricelor cu numere aleatoare au formele,<br />

• <strong>pentru</strong> distribuţia uniformă,<br />

Ru = rand(n), Ru = rand(m,n), Ru = rand(<strong>si</strong>ze(A)),<br />

• <strong>pentru</strong> distribuţia normală,<br />

Rn = randn(n), Rn = randn(m,n), Rn = randn(<strong>si</strong>ze(A)),<br />

un<strong>de</strong> m şi n sunt scalari, iar A este o matrice oarecare.<br />

Apelate cu un <strong>si</strong>ngur argument scalar, funcţiile rand sau randn generează<br />

matrice pătrate <strong>de</strong> numere aleatoare, având dimen<strong>si</strong>unea argumentului. Dacă m=3,<br />

atunci prin comanda Ru=rand(3), se obţine,<br />

Ru =<br />

0.1124 0.3459 0.5733<br />

0.2915 0.6931 0.2175<br />

0.4433 0.3445 0.0443,<br />

iar prin comanda Rn=randn(3),<br />

Rn =<br />

-0.1567 -1.0565 0.5287<br />

-1.6041 1.4151 0.2193<br />

0.2573 -0.8051 -0.9219.<br />

Atunci când funcţiile rand sau randn sunt apelate cu două argumente scalare<br />

(m, n), matricea generată are m linii şi n coloane.<br />

Dacă m=3 şi n=4, atunci cu instrucţiunea Ru = rand(4,3), se obţine,<br />

Ru =<br />

0.2898 0.8921 0.7216<br />

0.4357 0.0167 0.6730<br />

0.3234 0.0562 0.3465<br />

0.8637 0.1458 0.1722,


Generarea şi manipilarea vectorilor şi a matricelor 117<br />

iar cu instrucţiunea Rn = randn(4,3),<br />

Rn =<br />

-0.6918 -1.4410 0.8156<br />

0.8580 0.5711 0.7119<br />

1.2540 -0.3999 1.2902<br />

-1.5937 0.6900 0.6686.<br />

Funcţiile rand şi randn, apelate cu instrucţiunea Ru=rand(<strong>si</strong>ze(A)), sau<br />

Rn=randn(<strong>si</strong>ze(A)), produc matrice cu numere aleatoare <strong>de</strong> aceleaşi dimen<strong>si</strong>uni cu<br />

cele ale matricei A.<br />

Con<strong>si</strong><strong>de</strong>rând matricea A = [ 1 2 3; 4 5 6], atunci prin instrucţiunea<br />

Ru=rand(<strong>si</strong>ze(A)), se obţine:<br />

Ru =<br />

0.4565 0.8214 0.6154<br />

0.0185 0.4447 0.7919,<br />

iar prin instrucţiunea Rn=randn(<strong>si</strong>ze(A)),<br />

Rn =<br />

0.5913 0.3803 -0.0195<br />

-0.6436 -1.0091 -0.0482.<br />

Prin instrucţiuni <strong>de</strong> forma:<br />

Ru = rand(m, n, … , p), sau Ru = rand(m, n, … , p)<br />

se poate obţine o matrice cu numere aleatoare <strong>de</strong> m x n x … x p dimen<strong>si</strong>uni.<br />

De menţionat că la orice altă apelare a instrucţiunilor <strong>de</strong> mai sus, se obţin<br />

matrice cu alte numere aleatoare, fiind 35 <strong>de</strong> stări ale generatorului <strong>de</strong> numere<br />

aleatoare, cu distribuţie uniformă în intervalul [2^(-53), 1-2^(-53)].<br />

Pentru <strong>si</strong>mularea experienţelor care comportă aceleaşi condiţii, se generează<br />

serii <strong>de</strong> numere aleatoare i<strong>de</strong>ntice, la care se controlează parametrul <strong>de</strong> iniţializare<br />

al generatorului, notat seed, prin instrucţiunile rand('seed',n) sau randn('seed',n),<br />

un<strong>de</strong> n este valoarea atribuită lui seed. De exemplu, prin instrucţiunile,<br />

rand('seed',33); rand(2),<br />

se va obţine, la orice apelare, aceeaşi matrice <strong>de</strong> numere aleatoare cu distribuţie<br />

uniformă,<br />

ans =<br />

0.9260 0.5630<br />

0.1365,<br />

iar prin setul <strong>de</strong> instrucţiuni,<br />

randn('seed',33); randn(2),<br />

se va obţine, la orice apelare, aceeaşi matrice <strong>de</strong> numere aleatoare cu distribuţie<br />

normală,<br />

ans =<br />

0.1885 1.2282<br />

-1.6564 -1.9732.


118<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

6.4. Instrucţiuni <strong>pentru</strong> manipularea matricelor<br />

Schimbarea dimen<strong>si</strong>unilor unei matrice sau transformarea unei matrice A, <strong>de</strong><br />

m rânduri şi n coloane, într-o matrice B, <strong>de</strong> l rânduri şi p coloane, prin<br />

ordonarea, începând cu elementele <strong>de</strong> pe coloane, se realizează prin instrucţiunea<br />

B=reshape(A,l,p).<br />

Pentru ca operaţia <strong>de</strong> redimen<strong>si</strong>onare să fie po<strong>si</strong>bilă, trebuie ca l x p = m x n.<br />

Dacă matricea A are m=3 rânduri şi n=6 coloane,<br />

A = [ 1 2 3 4 5 6<br />

7 8 9 10 11 12<br />

13 14 15 16 17 18],<br />

prin instrucţiunea B=reshape(A,6,3) se obţine,<br />

ans =<br />

1 3 5<br />

7 9 11<br />

13 15 17<br />

2 4 6<br />

8 10 12<br />

14 16 18,<br />

iar prin instrucţiunea B=reshape(A,2,9) se obţine,<br />

ans =<br />

1 13 8 3 15 10 5 17 12<br />

7 2 14 9 4 16 11 6 18.<br />

Se observă că, elementele matricei B, în ordinea succe<strong>si</strong>vă a coloanelor şi pe<br />

fiecare coloană <strong>de</strong> sus în jos, sunt elementele matricei A originale, citite <strong>de</strong> sus în<br />

jos şi <strong>de</strong> la stânga la dreapta.<br />

Instrucţiunea diag permite gă<strong>si</strong>rea diagonalelor unei matrice şi a matricei<br />

diagonale.<br />

Pentru exemplificarea modului <strong>de</strong> acţiune a acestei instrucţiuni, se con<strong>si</strong><strong>de</strong>ră<br />

matricea A, <strong>de</strong>scrisă anterior, respectiv:<br />

A = [ 1 2 3 4 5 6<br />

7 8 9 10 11 12<br />

13 14 15 16 17 18].<br />

Prin aplicarea a<strong>de</strong>cvată a instrucţiunii diag se <strong>de</strong>termină:<br />

• diagonala principală, cu instrucţiunea diag(A) sau diag(A,0), rezultând o<br />

matrice coloană cu aceste elemente,<br />

ans =<br />

1<br />

8<br />

15


Generarea şi manipilarea vectorilor şi a matricelor 119<br />

• diagonalele <strong>de</strong>asupra diagonalei principale, respectiv cele care au ca prim<br />

element numărul coloanei, nd, specificat în instrucţiunea diag(A,nd),<br />

astfel că <strong>pentru</strong> diag(A,2) rezultă,<br />

ans =<br />

3<br />

10<br />

17<br />

• elementele <strong>de</strong> pe diagonalele <strong>de</strong> sub diagonala principală, prin<br />

instrucţiunea diag(A,-nd), astfel că, <strong>pentru</strong> diag(A,-1) se obţine,<br />

ans =<br />

7<br />

14.<br />

Crearea, prin extragerea dintr-o matrice dată A, a unei matrice superior<br />

triunghiulare se face utilizând instrucţiunea tril, iar crearea unei matrice inferior<br />

triunghiulare se realizează cu comanda triu.<br />

Sintaxele <strong>de</strong> apelare a funcţiilor tril şi triu, <strong>pentru</strong> matricea A, sunt tril(A,k)<br />

şi triu(A,k), un<strong>de</strong> k indică diagonala matricei A, cu următoarea semnificaţie:<br />

• k=0 sau k omis, <strong>pentru</strong> diagonala principală ;<br />

• k > 0, indică diagonala k, <strong>de</strong> <strong>de</strong>asupra diagonalei principale ;<br />

• k < 0, <strong>pentru</strong> diagonala k, <strong>de</strong> sub cea principală.<br />

Pentru matricea A, prin instrucţiunea tril(A) sau tril(A,0) se obţine,<br />

ans = 1 0 0 0 0 0<br />

7 8 0 0 0 0<br />

13 14 15 0 0 0,<br />

iar prin instrucţiunea triu(A) sau triu(A,0),<br />

ans = 1 2 3 4 5 6<br />

0 8 9 10 11 12<br />

0 0 15 16 17 18.<br />

Pentru diagonala 2, <strong>de</strong> <strong>de</strong>asupra diagonalei principale, extragerea matricei<br />

inferioare se face cu instrucţiunea tril(A,2),<br />

ans = 1 2 3 0 0 0<br />

7 8 9 10 0 0<br />

13 14 15 16 17 0,<br />

iar a matricei superioare cu triu(A,2),<br />

ans = 0 0 3 4 5 6<br />

0 0 0 10 11 12<br />

0 0 0 0 17 18.<br />

Pentru prima diagonală <strong>de</strong> sub diagonala principală, extragerea matricei<br />

diagonale inferioare se face prin tril(A,-1),


120<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

ans =<br />

0 0 0 0 0 0<br />

7 0 0 0 0 0<br />

13 14 0 0 0 0,<br />

iar a celei superioare prin triu(A,-1),<br />

ans =<br />

1 2 3 4 5 6<br />

7 8 9 10 11 12<br />

0 14 15 16 17 18.<br />

Inversarea ordinii coloanelor unei matrice, <strong>de</strong> la stânga la dreapta, sau<br />

rotirea matricei în jurul axei verticale se realizează cu instrucţiunea fliplr(B),<br />

un<strong>de</strong> B este matricea asupra căreia se acţionează. Elementele matricei rezultate<br />

sunt obţinute prin pivotarea matricei argument în jurul ultimei coloane, operaţie<br />

prin care aceasta <strong>de</strong>vine prima coloană. Instrucţiunea flipdim(B,2) conduce la<br />

acelaşi rezultat.<br />

Dacă B=[1 2 3 4; 5 6 7 8; 9 10 11 12], atunci prin comanda fliplr(B) sau<br />

flipdim(B,2) se obţine,<br />

ans =<br />

4 3 2 1<br />

8 7 6 5<br />

12 11 10 9.<br />

Rotirea matricei în jurul axei orizontale sau inversarea ordinii liniilor<br />

unei matrice, <strong>de</strong> sus în jos se realizează cu instrucţiunea flipud(B), un<strong>de</strong> B este<br />

matricea asupra căreia se acţionează. Elementele matricei rezultate sunt obţinute<br />

prin pivotarea matricei argument în jurul ultimei linii, operaţie prin care aceasta<br />

<strong>de</strong>vine prima linie. Acelaşi rezultat se obţine şi prin utilizarea instrucţiunii<br />

flipdim(B,1).<br />

Dacă B=[1 2 3 4; 5 6 7 8; 9 10 11 12], atunci prin comanda flipud(B) sau<br />

flipdim(B,1) se obţine,<br />

ans =<br />

9 10 11 12<br />

5 6 7 8<br />

1 2 3 4.<br />

Rotirea unei matrice A, cu multipli <strong>de</strong> 90 gra<strong>de</strong>, se face prin instrucţiunea<br />

rot90(A,k), un<strong>de</strong> k sunt multipli <strong>de</strong> 90º, numere naturale. Dacă k lipseşte, atunci<br />

rotirea se face cu 90º, în sens trigonometric.<br />

Atunci când k >=1, rotirea se face în sens trigonometric (invers sensului<br />

orar), iar dacă k


Generarea şi manipilarea vectorilor şi a matricelor 121<br />

ans =<br />

3 6 9<br />

2 5 8<br />

1 4 7,<br />

iar prin instrucţiunea rot90(A,-2) sau rot90(A,6) se obţine rotirea cu 180° în sens<br />

orar şi cu 540º în sens trigonometric,<br />

ans =<br />

9 8 7<br />

6 5 4<br />

3 2 1.<br />

Determinarea indicilor elementelor unui vector X care sunt diferite <strong>de</strong> zero<br />

sau verifică o condiţie, se realizează prin instrucţiunea find(X). Pentru vectorul<br />

X=[1 0 –2 3 0 5 0 7], instrucţiunea a=find(X) va returna indicii elementelor lui X<br />

diferiţi <strong>de</strong> zero, respectiv:<br />

a =<br />

1 3 4 6 8.<br />

Pentru o matrice A ca argument, funcţia fiind analizează coloană cu coloană<br />

elementele acesteia, returnând indicii diferiţi <strong>de</strong> zero, ce au valori cuprinse în<br />

intervalul 1 … mxn, în care m este numărul <strong>de</strong> linii iar n, <strong>de</strong> coloane, al matricei A.<br />

Dacă A = [ 1 0 3; 4 -5 0; 0 8 9], atunci prin comanda a=find(A) se obţine,<br />

a = [1 ; 1 ; 2 ; 5 ; 6 ; 7 ; 9 ].<br />

Instrucţiunea [l,c]=find(A) permite returnarea numărului liniei (vectorul l) şi<br />

al coloanei (vectorul c) matricei argument A ,care conţine elemente diferite <strong>de</strong> zero,<br />

l =<br />

1<br />

2<br />

2<br />

3<br />

1<br />

3<br />

c =<br />

1<br />

1<br />

2<br />

2<br />

3<br />

3.<br />

Returnarea şi a vectorului V, al elementelor diferite <strong>de</strong> zero (eliminând<br />

elemente diferite <strong>de</strong> zero), se face cu instrucţiunea<br />

[l,c,V]=find(A),<br />

rezultând,


122<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

V =<br />

1<br />

4<br />

-5<br />

8<br />

3<br />

9.<br />

Atunci când este necesară <strong>de</strong>terminarea poziţiei indicilor unor elemente dintr-o<br />

matrice, care în<strong>de</strong>plinesc o anumită condiţie, <strong>de</strong> exemplu, mai mari <strong>de</strong>cât o valoare<br />

dată v, se utilizează inctrucţiunea [l,c]=find(A>v). Dacă v=4, atunci prin comanda<br />

[l,c]=find(A>4) se obţine:<br />

l =<br />

3<br />

3<br />

c =<br />

2<br />

3.<br />

Ultimul indice al unei linii sau coloane dintr-o matrice sau ultimul indice al<br />

unui vector, poate fi <strong>de</strong>semnat prin end. Dacă, <strong>de</strong> exemplu V=[1 2 0 7 9 10 11 4],<br />

atunci V(end)=4, iar V(end-2)=10. Pentru matricea,<br />

A = [ 1 2 3 4<br />

5 6 7 8<br />

9 10 11 12],<br />

A(2:end, :) este,<br />

5 6 7 8<br />

9 10 11 12,<br />

iar A(2:end, 2:end-1) este,<br />

6 7<br />

11.<br />

Gă<strong>si</strong>rea indicelui liniar dintr-o matrice, <strong>de</strong> dimen<strong>si</strong>uni oarecare, se face prin<br />

instrucţiunea ind=sub2ind(<strong>si</strong>z,i1,i2,…,in), care returnează un indice echivalent<br />

ind, ce corespun<strong>de</strong> aşezării în matricea iniţială <strong>de</strong> dimen<strong>si</strong>une <strong>si</strong>z (dată sub forma<br />

[<strong>si</strong>z]=<strong>si</strong>ze(A), un<strong>de</strong> A este matricea iniţială) şi <strong>de</strong> indici i1,i2,…,in, care corespund<br />

celor n dimen<strong>si</strong>uni ale matricei iniţiale A.<br />

Inversa funcţiei <strong>de</strong> mai sus, prin care se găsesc indicii i1,i2,…,in, când se<br />

dau, dimen<strong>si</strong>unea iniţială a matricei <strong>si</strong>z şi indicele liniar ind, este funcţia<br />

[<strong>si</strong>z,i1,i2,…,in]=sub2ind(<strong>si</strong>z,nd).<br />

Funcţia ind2sub este utilizată <strong>pentru</strong> <strong>de</strong>terminarea valorii indicelui dintr-o<br />

matrice, ce verifică o anumită proprietate, fiind apelată, <strong>de</strong> exemplu, sub forma:<br />

[I,J] = ind2sub(<strong>si</strong>ze(A),find(A>5)).<br />

Dacă,


Generarea şi manipilarea vectorilor şi a matricelor 123<br />

A =<br />

1 2 3 4 5 6<br />

7 8 9 10 11 12,<br />

atunci,<br />

[I,J] = ind2sub(<strong>si</strong>ze(A),find(A>9)),<br />

conduce la:<br />

I =<br />

2<br />

2<br />

2<br />

J =<br />

4<br />

5<br />

6.<br />

6.5. Extragerea elementelor individuale ale unui vector<br />

sau ale unei matrice şi a submatricelor acesteia<br />

Elementele individuale ale unui vector se apelează prin numele vectorului,<br />

urmat <strong>de</strong> numărul elementului dorit, pus între paranteze rotun<strong>de</strong>. De exemplu,<br />

<strong>pentru</strong> vectorul A=[1 2 3 4 5 6 7 8 9], elementul al cincelea se extrage cu comanda<br />

A(5), rezultând:<br />

ans =<br />

5.<br />

Modificarea valorii unui element al vectorului se face, prin atribuirea noii<br />

valori elementului respectiv, A(i)=v, un<strong>de</strong> i este elementul, iar v valoarea atribuită.<br />

Dacă se doreşte ca elementul al patrulea al vectorului A să fie suma dintre<br />

elementul al treilea şi al cincelea, atunci aceasta se realizează prin instrucţiunea,<br />

A(4)=A(3)+A(5),<br />

rezultând:<br />

A =<br />

1 2 3 8 5 6 7 8 9.<br />

Pentru extragerea vectorilor cu elemente succe<strong>si</strong>ve, <strong>de</strong>cupate din alţi vectori,<br />

se utilizează o instrucţiune <strong>de</strong> forma A(i:j), care selectează elementele [i, i+1, …, j]<br />

ale vectorului A, iar dacă i > j, atunci vectorul rezultat este nul. De exemplu, <strong>pentru</strong><br />

A=[1 2 3 4 5 6 7 8 9 10 11], prin instrucţiunea A(4:7) se obţine,<br />

ans =<br />

4 5 6 7,<br />

iar prin instrucţiunea A(7:4) rezultă o matrice goală,


124<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

ans =<br />

Empty matrix: 1-by-0.<br />

Extragerea elementelor unui vector, aflate la un pas dat, unul <strong>de</strong> altul, se<br />

realizează prin instrucţiunea A(i:p:j), având ca rezultat un vector cu elementele [i,<br />

i+p, i+2p, …, j], sau un vector nul, dacă p>0 şi i>j sau dacă p


Generarea şi manipilarea vectorilor şi a matricelor 125<br />

D =<br />

2<br />

6<br />

10<br />

14<br />

18,<br />

iar prin instrucţiunea E=M(3,:) se extrage matricea E, care conţine toate coloanele<br />

din linia 3,<br />

E =<br />

9 10 11 12.<br />

Inversarea coloanelor unei matrice date M, se face cu instrucţiunea<br />

M=M(:,nc:-1:1), un<strong>de</strong> nc este numărul maxim <strong>de</strong> coloane, calculat prin<br />

instrucţiunea [nl,nc]=<strong>si</strong>ze(M). Pentru matricea anterioară, cu [nl,nc]=<strong>si</strong>ze(M) se<br />

obţine,<br />

nl = 5<br />

nc = 4,<br />

astfel că, inversarea coloanelor se face prin instrucţiunea M=M(:,nc:-1:1),<br />

rezultând,<br />

M =<br />

1 2 3 4<br />

5 6 7 8<br />

9 10 11 12<br />

13 14 15 16<br />

17 18 19 20.<br />

Pentru inversarea liniilor unei matrice date M, se utilizează instrucţiunea<br />

M=M(nl:-1:1,:), un<strong>de</strong> nl este numărul maxim <strong>de</strong> linii. Pentru matricea M iniţială<br />

se obţine,<br />

M =<br />

17 18 19 20<br />

13 14 15 16<br />

9 10 11 12<br />

5 6 7 8<br />

1 2 3 4.<br />

Crearea matricelor mari, precum şi manipularea acestora se poate face uşor,<br />

prin utilizarea unor vectori ca indici. De exemplu, cu instrucţiunea A(:,<br />

[2,4,6])=B(:,1:3) se înlocuiesc coloanele 2, 4 şi 6 ale matricei A cu primele 3<br />

coloane ale matricei B.<br />

Pentru extragerea din matricea M, obţinută anterior, a tuturor liniilor <strong>pentru</strong><br />

care elementul dintr-o anumită coloană (fie aceasta 4), în<strong>de</strong>plineşte o anumită<br />

condiţie (<strong>de</strong> exemplu este mai mare <strong>de</strong>cât 6), se formează vectorul ajutător, pe care


126<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

îl notăm cu L, care conţine toate liniile şi coloana specificată, care în<strong>de</strong>plinesc<br />

condiţia, cu instrucţiunea:<br />

L=X(:,4) > 6,<br />

rezultând:<br />

L =<br />

1<br />

1<br />

1<br />

1<br />

0.<br />

Acesta permite apoi i<strong>de</strong>ntificarea elementelor matricei M, care în<strong>de</strong>plinesc<br />

condiţia pusă, prin instrucţiunea Y=M(L,:), rezultând matricea Y, <strong>de</strong> elemente:<br />

Y =<br />

17 18 19 20<br />

13 14 15 16<br />

9 10 11 12<br />

5 6 7 8.<br />

Duplicarea unei matrice A <strong>de</strong> M ori, pe linii şi N ori pe coloane, se realizează<br />

cu instrucţiunea: B = repmat(A,M,N). De exemplu, dacă A=[1 2; 3 4], atunci<br />

instrucţiunea B = repmat(A,2,3), conduce la:<br />

B =<br />

1 2 1 2 1 2<br />

3 4 3 4 3 4<br />

1 2 1 2 1 2<br />

3 4 3 4 3 4.<br />

6.6. Matrice specializate<br />

6.6.1. Companionul matriceal<br />

Generarea companionului matriceal al unui polinom P, dat, se face cu<br />

instrucţiunea compan(p), un<strong>de</strong> p este un vector cu coeficienţii polinomiali scrişi în<br />

ordinea <strong>de</strong>screscătoare a puterilor.<br />

Pentru polinomul:<br />

n<br />

n−1<br />

n−2<br />

2<br />

P(<br />

x)<br />

= p(1)<br />

⋅ x + p(2)<br />

⋅ x + p(3)<br />

⋅ x + ... + p(<br />

n −1)<br />

⋅ x + p(<br />

n)<br />

⋅ x + p(<br />

n + 1)<br />

prima linie a companionulul este:<br />

− p (2) − p(3)<br />

− p(<br />

n −1)<br />

− p(<br />

n)<br />

− p(<br />

n + 1)<br />

, , ..., , ,<br />

.<br />

p(1)<br />

p(1)<br />

p(1)<br />

p(1)<br />

p(1)<br />

După cum se observă, prima linie a companionului este constituită din<br />

numere reprezentând câtul cu semn schimbat dintre coeficienţii polinomiali,<br />

începând cu puterea (n-1), până la termenul liber şi coeficientul polinomial al


Generarea şi manipilarea vectorilor şi a matricelor 127<br />

puterii n.<br />

Valorile proprii ale companionului unui vector p, ai cărui coeficienţi<br />

polinomiali sunt daţi <strong>de</strong> funcţia eig(compan(p)), sunt rădăcinile polinomului.<br />

Deci, <strong>pentru</strong> a <strong>de</strong>termina rădăcinile r ale unui polinom, în Matlab, se poate<br />

utiliza expre<strong>si</strong>a r = eig(compan(p)).<br />

Pentru un polinom dat,<br />

3 2<br />

p ( x)<br />

= x + x + x + 1,<br />

vectorul p, care conţine coeficienţii acestuia este,<br />

p = [1 1 1 1],<br />

astfel încât, companionul polinomului, notat cu b, se <strong>de</strong>termină cu,<br />

b=compan(p),<br />

rezultând,<br />

b = [ -1 -1 -1 ; 1 0 0 ; 0 1 0 ].<br />

Pentru <strong>de</strong>terminarea rădăcinilor polinomului, notate cu r, se găsesc valorile<br />

proprii ale acestuia cu relaţia,<br />

r=eig(b),<br />

sau direct din vectorul p prin relaţia,<br />

r=eig(compan(p)),<br />

rezultând rădăcinile polinomului:<br />

x = [ -1 +i –i].<br />

6.6.2. Matricea Hadamard<br />

Matricea Hadamard este o matrice pătrată neortogonală, cu toate elementele 1<br />

sau –1, aşezate într-o astfel <strong>de</strong> succe<strong>si</strong>une încât, linia j este i<strong>de</strong>ntică cu coloana j.<br />

Pentru a <strong>de</strong>termina matricea Hadamard, pe care o notăm cu Ha, <strong>de</strong> ordinul n, se<br />

exectă comanda,<br />

Ha=hadamard(n),<br />

un<strong>de</strong> ordinul n aparţine numerelor naturale pozitive şi trebuie să fie divizibil cu 4,<br />

adică rem(n,4)=0, sau ca n, n/12 ori n/20 să fie o putere a lui 2.<br />

Pentru n=8, matricea Hadamard este Ha=hadamard(8), respectiv:<br />

Ha =<br />

1 1 1 1 1 1 1 1<br />

1 -1 1 -1 1 -1 1 -1<br />

1 1 -1 -1 1 1 -1 -1<br />

1 -1 -1 1 1 -1 -1 1<br />

1 1 1 1 -1 -1 -1 -1<br />

1 -1 1 -1 -1 1 -1 1<br />

1 1 -1 -1 -1 -1 1 1<br />

1 -1 -1 1 -1 1 1 -1.<br />

Utilizarea practică a matricei Hadamard se găseşte în trasarea liniilor <strong>de</strong><br />

nivel cu funcţia contour(hadamard(n)), funcţia contour fiind folo<strong>si</strong>tă la trasarea


128<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

grafică a conturului. De exemplu, <strong>pentru</strong> matricea <strong>de</strong> mai sus, conturul este redat în<br />

figura 6.1.<br />

8<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

1 2 3 4 5 6 7 8<br />

Fig. 6.1. Conturul a 8 nivele.<br />

O proprietate importantă a matricei Hadamard este că Ha'*Ha = n*eye(n).<br />

Matricea Hadamard se poate ortogonaliza prin înmulţirea cu un scalar <strong>de</strong><br />

forma<br />

1<br />

k<br />

2<br />

, k ∈ N.<br />

Prin urmare, <strong>pentru</strong> matricea anterioară, luând k=4, se obţine<br />

matricea Hadamard ortogonalizată, Hao, cu instrucţiunea,<br />

Hao=<br />

0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5<br />

0.5 -0.5 0.5 -0.5 0.5 -0.5 0.5 -0.5<br />

0.5 0.5 -0.5 -0.5 0.5 0.5 -0.5 -0.5<br />

0.5 -0.5 -0.5 0.5 0.5 -0.5 -0.5 0.5<br />

0.5 0.5 0.5 0.5 -0.5 -0.5 -0.5 -0.5<br />

0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5<br />

0.5 0.5 -0.5 -0.5 -0.5 -0.5 0.5 0.5<br />

0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5 -0.5.<br />

6.6.3. Matricea Hankel<br />

Matricea Hankel este o matrice anti<strong>si</strong>metrică şi antidiagonală, generată cu<br />

una dintre <strong>si</strong>ntaxele: H=hankel(c) sau H=hankel(c,l).<br />

O matrice A este <strong>si</strong>metrică dacă matricea transpusă este egală cu matricea


Generarea şi manipilarea vectorilor şi a matricelor 129<br />

iniţială (A'=A) şi anti<strong>si</strong>metrică, dacă transpusa este A' = - A. Este evi<strong>de</strong>nt că o<br />

matrice <strong>de</strong> mxn, <strong>de</strong>finită prin A = a i , j<br />

cu i = 1,2,...,<br />

m şi j = 1,2,...,<br />

n ,este<br />

<strong>si</strong>metrică dacă a<br />

i, j<br />

= a<br />

j,<br />

i<br />

şi anti<strong>si</strong>metrică, dacă a<br />

i, j<br />

= −a<br />

j,<br />

i<br />

.<br />

Atunci când funcţia hankel este apelată cu un <strong>si</strong>ngur vector ca argument,<br />

matricea returnată este o matrice Hankel pătrată, a cărei coloană şi primă linie sunt<br />

elementele vectorului argument şi toate elementele <strong>de</strong> sub antidiagonală sunt nule.<br />

Dacă c=[5 4 1 2 3], atunci matricea Hankel corespunzătoare va fi, H=hankel(c),<br />

respectiv,<br />

H =<br />

5 4 1 2 3<br />

4 1 2 3 0<br />

1 2 3 0 0<br />

2 3 0 0 0<br />

3 0 0 0 0,<br />

<strong>de</strong> un<strong>de</strong> se observă că prima coloană şi prima linie sunt elementele vectorului<br />

argument c, iar toate elementele <strong>de</strong> sub prima antidiagonală sunt nule. Totodată,<br />

antidiagonalele paralele cu antidiagonala principală au aceleaşi elemente.<br />

Dacă funcţia Hankel este apelată cu doi vectori ca argument, <strong>de</strong> dimen<strong>si</strong>uni m<br />

şi n, matricea returnată este o matrice Hankel, cu dimen<strong>si</strong>unea mxn. La această<br />

matrice, prima coloană este <strong>de</strong>finită <strong>de</strong> primul vector argument, iar ultima linie este<br />

<strong>de</strong>finită prin elementele celui <strong>de</strong>-al doilea vector argument. De menţionat că,<br />

ultimul element al primului vector (respectiv prima coloană) diferă <strong>de</strong> primul<br />

element al celui <strong>de</strong>-al doilea vector (ultima linie) ; elementul coloanei (primul<br />

vector) are prioritate faţă <strong>de</strong> elementul liniei. Pentru vectorii daţi:<br />

c = [ 11 4 8] şi l = [ 2 7 9 3],<br />

se generează matricea Hankel cu instrucţiunea H=hankel(c,l), rezultând,<br />

H =<br />

11 4 8 7<br />

4 8 7 9<br />

8 7 9 3,<br />

un<strong>de</strong> se observă prioritatea ultimului element al vectorului, care <strong>de</strong>fineşte prima<br />

coloană, faţă <strong>de</strong> primul element al vectorului, care <strong>de</strong>fineşte ultima linie.<br />

6.6.4. Matricea Hilbert<br />

Matricea Hilbert este o matrice slab condiţionată, ale cărei elemente sunt<br />

<strong>de</strong>finite <strong>de</strong> relaţia:<br />

1<br />

Hi ( n)<br />

= , i = 1,2,..., n,<br />

j = 1,2,..., m.<br />

i + j −1<br />

,<br />

fiind unul dintre cele mai faimoase exemple <strong>de</strong> matrice bandă.<br />

Dacă n=5, atunci matricea Hilbert va fi Hi=hilb(5), respectiv:


130<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

Hi =<br />

1 0.5 0.33333 0.25 0.2<br />

0.5 0.33333 0.25 0.2 0.16667<br />

0.33333 0.25 0.2 0.16667 0.14286<br />

0.25 0.2 0.16667 0.14286 0.125<br />

0.2 0.16667 0.14286 0.125 0.11111.<br />

O utilizare eficientă a matricei Hilbert se găseşte în înlocuirea buclele for şi<br />

do prin segmente vectorizate.<br />

6.6.5. Inversa matricei Hilbert<br />

În general, inversa unei matrice se obţine prin următoarele operaţii:<br />

1. se formează matricea care are ca elemente complemenţii algebrici ai<br />

elementelor matricei date;<br />

2. se ia transpusa acesteia;<br />

3. se împarte matricea obţinută cu <strong>de</strong>terminantul matricei iniţiale.<br />

Principala proprietate a matricei inverse este aceea că produsul dintre o<br />

matrice şi inversa sa este matricea unitate.<br />

Funcţia care calculează matricea Hilbert inversă, <strong>de</strong> ordinul n, este<br />

invhilb(n). Pentru matricea Hilbert anterioară, Hi=hilb(5), matricea inversă este,<br />

iHi=invhilb(5),<br />

respectiv,<br />

iHi =<br />

25 -300 1050 -1400 630<br />

-300 4800 -18900 26880 -12600<br />

1050 -18900 79380 -117600 56700<br />

-1400 26880 -117600 179200 -88200<br />

630 -12600 56700 -88200 44100.<br />

Dacă se verifică proprietatea anterioară, se constată că Hi*iHi este practic<br />

matricea unitate, respectiv eye(5),<br />

ans =<br />

1 0 0 0 0<br />

0 1 0 0 0<br />

1.4211e-014 0 1 -3.638e-012 0<br />

0 0 0 1 0<br />

0 0 0 0 1.<br />

Se precizează că algoritmul implementat <strong>pentru</strong> inversarea matricei Hilbert<br />

este <strong>de</strong>ficitar <strong>pentru</strong> n>15 şi, prin aceasta, se atrage atenţia că este necesară o<br />

verificare atentă a algoritmilor <strong>de</strong> rezolvare şi condiţiilor <strong>de</strong> aplicare utilizaţi.<br />

Pentru n=25, dacă se verifică proprietatea anterioară,<br />

d=hilb(25)*invhilb(25)-eye(25), se obţin valori total inacceptabile cu o diferenţă<br />

maximă <strong>de</strong> 3.4588e+018.


Generarea şi manipilarea vectorilor şi a matricelor 131<br />

6.6.6. Pătratul magic<br />

Pătratul magic <strong>de</strong> ordinul n, cu n>3, este o matrice <strong>de</strong> nxn, construită cu<br />

întregi <strong>de</strong> la 1 la n 2 , care are suma elementelor <strong>de</strong> pe fiecare linie, coloană,<br />

diagonală şi anti-diagonală principală, egală. Pătratul magic are suma scalată<br />

dublu stocastic.<br />

Funcţia care generează pătratul magic (matrice pe care o notăm cu Pmag) <strong>de</strong><br />

ordinul n este: Pmg=magic(n). Perntru n = 5, se obţine:<br />

Pmg =<br />

17 24 1 8 15<br />

23 5 7 14 16<br />

4 6 13 20 22<br />

10 12 19 21 3<br />

11 18 25 2 9,<br />

care are suma elementelor liniilor, coloanelor, diagonalei principale şi<br />

antidiagonalei, egală cu 65.<br />

6.6.7. Matricea Pascal<br />

Matricea Pascal conţine elementele triunghiului lui Pascal. Triunghiul lui<br />

Pascal conţine coeficienţii binomiali ai <strong>de</strong>scompunerii ( a + b) n<br />

, respectiv:<br />

n n 1 n 2 n−1<br />

2<br />

n−1<br />

n−1<br />

n<br />

( a + b) = a + C a b + C a b + ... + C ab + b ,<br />

n<br />

n<br />

<strong>pentru</strong> orice număr natural n.<br />

De exemplu, triunghiul lui Pascal, cu coeficienţii <strong>de</strong>scompunerii unui<br />

polinom <strong>de</strong> ordinul patru, are următoarea formă:<br />

0 1<br />

1 1 1<br />

2 1 2 1<br />

3 1 3 3 1<br />

4 1 4 6 4 1.<br />

Pentru numerotarea liniilor triunghiului lui Pascal, începând cu zero (ca în<br />

exemplu <strong>de</strong> mai sus), fiecare linie din triunghi va conţine numărul n şi coeficienţii<br />

<strong>de</strong>compunerii binomului ( a + b) n<br />

. De exemplu, linia 3 conţine coeficienţii<br />

<strong>de</strong>scompunerii binomului ( a + b) 3<br />

, respectiv 1, 3, 3, 1.<br />

Funcţia Pascal se apelează cu <strong>si</strong>ntaxa P=pascal(n). De multe ori, apelarea<br />

funcţiei Pascal se face cu una dintre <strong>si</strong>ntaxele:<br />

P1=abs(pascal(n,1)),<br />

sau,<br />

P2=abs(pascal(n,2)).<br />

n


132<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

Dacă n=5, atunci matricele Pascal <strong>de</strong> ordinul 5 sunt:<br />

P =<br />

1 1 1 1 1<br />

1 2 3 4 5<br />

1 3 6 10 15<br />

1 4 10 20 35<br />

1 5 15 35 70,<br />

P1 =<br />

1 0 0 0 0<br />

1 1 0 0 0<br />

1 2 1 0 0<br />

1 3 3 1 0<br />

1 4 6 4 1,<br />

P2 =<br />

0 0 0 0 1<br />

0 0 0 1 4<br />

0 0 1 3 6<br />

0 1 2 3 4<br />

1 1 1 1 1.<br />

Matricea P1 conţine elementele triunghiului Pascal ordonate pe linie, în<br />

partea triunghiulară, din colţul stâng. Dacă P1=pascal(n,1), atunci rezultă factorul<br />

Cholesky, ca o matrice triunghiulară inferioară.<br />

Matricea P2 conţine elementele triunghiului lui Pascal ordonate pe coloană,<br />

în partea triunghiulară din colţul drept.<br />

Pentru extragerea coeficienţilor <strong>de</strong>scompunerii binomiale ( a + b) 9<br />

, se<br />

foloseşte secvenţa n=9; P=abs(pascal(n+1,1)); Coef=P(n+1,1:n+1), rezultând,<br />

Coef = [ 1 9 36 84 126 126 84 36 9 1 ].<br />

6.6.8. Matricea Rosser<br />

Matricea Rosser este o matrice <strong>de</strong> 8x8 cu elemente întregi, fiind utilizată în<br />

algoritmii care lucrează cu valori proprii. Apelarea acestei matrice se face prin<br />

comanda rosser, rezultând:<br />

ans =<br />

611 196 -192 407 -8 -52 -49 29<br />

196 899 113 -192 -71 -43 -8 -44<br />

-192 113 899 196 61 49 8 52<br />

407 -192 196 611 8 44 59 -23<br />

-8 -71 61 8 411 -599 208 208<br />

-52 -43 49 44 -599 411 208 208<br />

-49 -8 8 59 208 208 99 -911<br />

29 -44 52 -23 208 208 -911 99.


Generarea şi manipilarea vectorilor şi a matricelor 133<br />

6.6.9. Matricea Toeplitz<br />

Matricea Toeplitz, generată <strong>de</strong> funcţia toeplitz, este <strong>de</strong>finită prin vectorii<br />

elementelor primei coloane şi ai primei linii. O matrice Toeplitz <strong>si</strong>metrică este<br />

<strong>de</strong>finită doar <strong>de</strong> un <strong>si</strong>ngur vector ca argument. Funcţia toeplitz se poate apela cu<br />

una dintre <strong>si</strong>ntaxele:<br />

T1=toeplitz(c)<br />

sau<br />

T2=toeplitz(c,l).<br />

Dacă matricea Toeplitz este generată <strong>de</strong> funcţia toeplitz(c), apelată cu un<br />

<strong>si</strong>ngur vector argument, atunci matricea returnată este pătrată, având ca elemente<br />

ale primei linii şi primei coloane elementele vectorului argument, iar pe diagonala<br />

principală şi pe toate diagonalele paralele cu aceasta se găsesc elementele <strong>de</strong>finite<br />

în linia sau coloana respectivă. De exemplu, dacă c=[1 2 3 4 5 6], atunci<br />

T1=toeplitz(c) , este:<br />

T1 =<br />

1 2 3 4 5 6<br />

2 1 2 3 4 5<br />

3 2 1 2 3 4<br />

4 3 2 1 2 3<br />

5 4 3 2 1 2<br />

6 5 4 3 2 1.<br />

Matricea T1 este <strong>si</strong>metrică şi hermitică.<br />

Atunci când matricea Toeplitz este generată prin T2=toeplitz(c,l), matricea<br />

generată este ne<strong>si</strong>metrică şi va avea dimen<strong>si</strong>unea mxn, un<strong>de</strong> m este lungimea<br />

vectorului c, iar n este dimen<strong>si</strong>unea vectorului l. La această matrice prima coloană<br />

este <strong>de</strong>finită <strong>de</strong> primul vector argument (vectorul c), iar prima linie <strong>de</strong> elementele<br />

celui <strong>de</strong>-al doilea vector argument (vectorul l). Dacă primul element al primului<br />

vector (prima coloană) diferă <strong>de</strong> primul element al celui <strong>de</strong>-al doilea vector (prima<br />

linie), elementul coloanei are prioritate faţă <strong>de</strong> elementul liniei. De exemplu, dacă<br />

c=[1 2 3 4 5 6] şi l=[8 9 10 11], atunci T2=toeplitz(c,l) <strong>de</strong>vine:<br />

T2 =<br />

1 9 10 11<br />

2 1 9 10<br />

3 2 1 9<br />

4 3 2 1<br />

5 4 3 2<br />

6 5 4 3.<br />

6.6.10. Matricea Van<strong>de</strong>rmon<strong>de</strong><br />

n−<br />

j<br />

Matricea Van<strong>de</strong>rmon<strong>de</strong> este <strong>de</strong>finită <strong>de</strong> expre<strong>si</strong>a ( ) ( )<br />

V i, j = c i , un<strong>de</strong> c,<br />

este vectorul cu n elemente, asociat penultimei coloane. Coloana j a matricei


134<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

Van<strong>de</strong>rmon<strong>de</strong> este A(:,j)=C^(n-j). Generarea matricei Van<strong>de</strong>rmon<strong>de</strong> se face prin<br />

funcţia van<strong>de</strong>r(c), un<strong>de</strong> c este un vector argument dat.<br />

Dacă c = [1 2 3 4 5], atunci V = van<strong>de</strong>r(c) este:<br />

4 3 2<br />

0<br />

1 1 1 1 1 1 1 1 1 1<br />

16<br />

256<br />

625<br />

8<br />

V = 81 27 9 3 1 =<br />

64<br />

125<br />

16<br />

25<br />

6.6.11. Matricea Wilkinson<br />

4<br />

2<br />

4<br />

5<br />

1<br />

1<br />

1<br />

Matricea Wilkinson este o matrice larg utilizată în testarea valorilor proprii<br />

ale matricelor, fiind o matrice <strong>si</strong>metrică, tridiagonală, cu perechi <strong>de</strong> valori proprii.<br />

Matematric, matricea Wilkinson <strong>de</strong> ordinul n are elementele <strong>de</strong>finite prin<br />

relaţia:<br />

W ( i,j)<br />

=<br />

⎧ n-2i<br />

+ 1<br />

⎪ , i = j<br />

⎪ 2<br />

⎨1<br />

, i = j + 1.<br />

⎪ 0 , altfel<br />

⎪<br />

⎩<br />

Generarea matricei Wilkinson se face cu comanda W=wilkinson(n), un<strong>de</strong><br />

n este ordinul. Cea mai frecventă matrice Wilkinson este cea <strong>de</strong> ordinul 7, generată<br />

prin wilkinson(7) şi având ca rezultat<br />

ans =<br />

3 1 0 0 0 0 0<br />

1 2 1 0 0 0 0<br />

0 1 1 1 0 0 0<br />

0 0 1 0 1 0 0<br />

0 0 0 1 1 1 0<br />

0 0 0 0 1 2 1<br />

0 0 0 0 0 1 3.<br />

O altă matrice Wilkinson, frecvent utilizată, este cea <strong>de</strong> ordinul 21, generată<br />

cu instrucţiunea wilkinson(21).<br />

6.6.12. Matrice <strong>de</strong> testare<br />

Pentru testarea tipurilor <strong>de</strong> matrice se utilizează instrucţiunea gallery, apelată<br />

cu <strong>si</strong>ntaxa :<br />

[out1,out2,...] = gallery('matname', param1, param2, ...),<br />

2<br />

3<br />

4<br />

5<br />

4<br />

4<br />

4<br />

4<br />

2<br />

3<br />

4<br />

5<br />

3<br />

3<br />

3<br />

3<br />

2<br />

3<br />

4<br />

5<br />

2<br />

2<br />

2<br />

2<br />

2<br />

3<br />

4<br />

5<br />

1<br />

1<br />

1<br />

1<br />

2<br />

3<br />

4<br />

5<br />

0<br />

0<br />

0<br />

0


Generarea şi manipilarea vectorilor şi a matricelor 135<br />

un<strong>de</strong> : out1,out2 sunt parametrii <strong>de</strong> ieşire, 'matname' este unul dintre numele <strong>de</strong><br />

matrice <strong>de</strong> mai jos, iar param1, param2 sunt parametrii <strong>de</strong> intrare.<br />

Sunt disponibile următoarele tipuri <strong>de</strong> matrice, 'matname' , respectiv :<br />

cauchy, chebspec, chebvand, chow, circul, clement, compar, con<strong>de</strong>x, cycol, dorr,<br />

dramadah, fiedler, forsythe, frank, gearmat, grcar, hanowa, house, invhess, invol,<br />

ipjfact, jordbloc, kahan, kms, krylov, lauchli, lehmer, lesp, lotkin, minij, moler,<br />

neumann, orthog, parter, pei, poisson, prolate, randcolu, randcorr, rando, randhess<br />

randsvd, redheff, riemann, ris, rosser, smoke, toeppd, tridiag, triw, van<strong>de</strong>r, wathen,<br />

wilk.<br />

În plus , gallery (3) este o matrice bandă condiţionată <strong>de</strong> 3 x 3, iar gallery(5)<br />

este utilă în problemele cu valori proprii, gă<strong>si</strong>nd uşor vectorii şi valorile proprii.<br />

6.7. Instrucţiuni, variabile şi constante specifice<br />

Instrucţiunea end este utilizată <strong>pentru</strong> încheierea ciclurilor „for”, „while”,<br />

„switch”, „try” şi a segmentului <strong>de</strong> comandă „if”. Fără această instrucţiune, după<br />

una dintre comenzile for, while, switch, try sau if, se aşteaptă introducerea unei<br />

linii <strong>de</strong> comenzi Matlab <strong>pentru</strong> a face parte din corpul <strong>de</strong> instrucţiuni precizate<br />

anterior. Fiecare end introdus încheie ultima comandă for, while, switch, try sau if<br />

tastată.<br />

De menţionat că end este şi ultimul in<strong>de</strong>x al unui vector sau matrice,<br />

notată cu X, adică end = <strong>si</strong>ze(X,k), un<strong>de</strong> k este in<strong>de</strong>xul coloanei, <strong>pentru</strong> matrice.<br />

De exemplu, dacă X=[1 2 3 4 5 6 7 0 8 9], atunci elementul al treilea,<br />

începând <strong>de</strong> la sfârşit spre început, se află cu comanda X(end-2), rezultând 0.<br />

Dacă con<strong>si</strong><strong>de</strong>răm vectorul A=[1 2 3 4; 5 6 7 8; 9 10 11 12], atunci:<br />

• A(end), este ultimul element al matricei A, respectiv, 12;<br />

• A(1,end), este ultimul element al liniei 1, respectiv 4;<br />

• A(end,1), este ultimul element al coloanei 1, respectiv 9;<br />

• A(2,3:end) prezintă elementele liniei 2 <strong>de</strong> la coloana 3 până la ultima<br />

coloană, respectiv 7 şi 8.<br />

Atunci când unei expre<strong>si</strong>i nu i se asociază nici o variabilă, Matlabul creează<br />

automat variabila <strong>de</strong> lucru ans, care va avea întot<strong>de</strong>auna ultima valoare calculată.<br />

În această variabilă ans, creată automat, este returnat rezultatul calculelor<br />

expre<strong>si</strong>ei.<br />

Variabila permanentă, în care este memorată eroarea relativă <strong>pentru</strong> calculele<br />

efectuate în virgulă mobilă, este eps. Valoarea implicită este eps=2.2204e-016, dar<br />

poate fi re<strong>de</strong>finită la oricare altă valoare, prin instrucţiunile pinv şi rank.<br />

Cea mai mare valoare pozitivă în virgulă mobilă, care poate fi folo<strong>si</strong>tă în<br />

calcule, este memorată în variabila realmax, având valoarea 1.7977e+308.<br />

Cea mai mică valoare pozitivă în virgulă mobilă, care poate fi folo<strong>si</strong>tă în


136<br />

SISTEME DE PROGRAMARE PENTRU MODELARE ŞI SIMULARE<br />

calcul, respectiv 2.2251e-308, este memorată în variabila realmin.<br />

Variabilei matematice cunoscute π , îi este asociată variabila permanentă pi,<br />

cu valoarea: pi = 4*atan(1) = imag(log(-1)) = 3.1415926535897....<br />

Pentru introducerea numerelor complexe, ca <strong>de</strong> exemplu,<br />

z = 1 + 2 −1<br />

= 1+<br />

2i , se utilizează <strong>pentru</strong> partea imaginară, ca variabile<br />

pre<strong>de</strong>finite i sau j, i = j = −1.<br />

Este po<strong>si</strong>bil ca variabilei imaginare să îi fie<br />

ataşată o variabilă pre<strong>de</strong>finită utilizării sale, <strong>de</strong> exemplu , z = 1+ 2s<br />

.<br />

Pentru reprezentarea lui<br />

1<br />

+ ∞ în aritmetica IEEE, rezultat al împărţirii sau 0<br />

al <strong>de</strong>păşirii celui mai mare număr, la operaţia <strong>de</strong> ridicare la putere<br />

foloseşte variabila inf.<br />

1000<br />

e , se<br />

Variabila <strong>pentru</strong> reprezentarea lui Not-a-Number (NaN), în aritmetica IEEE,<br />

rezultat al împărţirii ne<strong>de</strong>finite 0<br />

0 , sau ∞<br />

∞ este notată NaN.<br />

Testarea dacă elementele unui vector sau matrice sunt NaN se face cu funcţia<br />

isnan.<br />

Pentru o matrice dată oarecare X, prin comanda Y=isnan(X) se returnează o<br />

matrice Y, <strong>de</strong> aceleaşi dimen<strong>si</strong>uni cu matricea argument X, având 1 pe poziţia în<br />

care elementele maticei X sunt NaN şi 0, în caz contrar.<br />

De exemplu, dacă X=[-15 NaN 20; 2 pi Inf; -Inf 0 NaN], prin instrucţiunea<br />

Y=isnan(X), se obţine:<br />

Y =<br />

0 1 0<br />

0 0 0<br />

0 0 1.<br />

Testarea şi <strong>de</strong>terminarea poziţiei elementelor infinite dintr-o matrice sau<br />

vector se face cu funcţia i<strong>si</strong>nf, apelată cu <strong>si</strong>ntaxa Y=i<strong>si</strong>nf(X).<br />

În matricea Y, <strong>de</strong> aceleaşi dimen<strong>si</strong>uni cu matricea iniţială X, se returnează 1<br />

pe poziţia elementelor infinite din X şi 0, în caz contrar.<br />

Pentru matricea X <strong>de</strong> mai sus, prin comanda Y=i<strong>si</strong>nf(X) se obţine:<br />

Y =<br />

0 0 0<br />

0 0 1<br />

1 0 0.<br />

Determinarea poziţiei elementelor finite dintr-o matrice sau vector se face cu<br />

funcţia isfinite, apelată cu <strong>si</strong>ntaxa Y=isfinite(X).<br />

În matricea Y, <strong>de</strong> aceleaşi dimen<strong>si</strong>uni cu matricea iniţială X, se returnează 1


Generarea şi manipilarea vectorilor şi a matricelor 137<br />

pe poziţia elementelor finite din X şi 0, în caz contrar.<br />

Pentru matricea X <strong>de</strong> mai sus, prin comanda Y=i<strong>si</strong>nf(X) se obţine:<br />

Y =<br />

1 0 1<br />

1 1 0<br />

0 1 0.<br />

Funcţia flops, returnează numărul <strong>de</strong> operaţii în virgulă mobilă efectuate <strong>de</strong><br />

calculator.<br />

Adunările şi scă<strong>de</strong>rile sunt contorizate, fiecare câte o operaţie, dacă se<br />

efectuează între numere reale, şi două operaţii, dacă se efectuează între valori<br />

complexe.<br />

Înmulţirile şi împărţirile sunt con<strong>si</strong><strong>de</strong>rate fiecare câte o operaţie, dacă<br />

rezultatul este real şi 6 operaţii, dacă acesta este complex.<br />

Aducerea la zero a contorului operaţiilor efectuate se realizează prin<br />

comanda flops(0).

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!