download - Sisteme de Programare pentru Modelare si Simulare

download - Sisteme de Programare pentru Modelare si Simulare download - Sisteme de Programare pentru Modelare si Simulare

21.07.2014 Views

6. GENERAREA ŞI MANIPULAREA VECTORILOR ŞI A MATRICELOR Deşi în MATLAB nu există instrucţiuni pentru declararea tipurilor de variabile, iar matricele se autodimensionează în timpul utilizării, pentru a creşte viteza de lucru, se procedează la crearea unei matrice goale. Acest lucru se realizează la începutul sesiunii de lucru sau la apelarea unei funcţii program. Declararea unei matrice goale (fie aceasta G) se realizează, după cum s-a arătat, cu instrucţiunea G = [ ], prin care se alocă G o matrice de dimensiuni 0x0. Orice matrice goală trebuie să aibă cel puţin una din dimensiuni zero. Pentru a testa dacă o matrice G este goală, se foloseşte funcţia isempty(G), care returnează 1, dacă matricea este goală şi 0, în caz contrar. 6.1. Generarea vectorilor Pentru generarea vectorilor cu pas liniar este necesară cunoaşterea limitelor intervalului (minimă şi maximă) şi a pasului dintre două elemente. Cunoscând valoarea minimă a intervalului (vmin) şi pe cea maximă (vmax), fară a se indica pasul, atunci acesta se consideră egal cu unitatea, iar secvenţa de instrucţiuni pentru generarea vectorului V este V=vmin:vmax , ca de exemplu: V=10.45:15.8 rezultând V = 10.4500 11.4500 12.4500 13.4500 14.4500 15.4500. Se observă că valoarea iniţială şi finală pot fi numere reale, cu condiţia ca vmin0, atunci vmin

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!