MATLAB parte II MATLAB parte II C. Guerrini 1 Array Tutte le variabili sono array (matrici) Un array è una struttura dati, cioè memorizza più dati all interno di una struttura identificata da un singolo nome Un array ha due dimensioni: la prima dimensione rappresenta il numero di righe, la seconda il numero di colonne Scalare: array 1 x 1 Vettore riga: array 1 x n Vettore colonna: array n x 1 Matrice: array n x m Ogni elemento dell array è estratto specificando l indice dell elemento dall inizio dell array MATLAB parte II C. Guerrini 2 1
Array: vettore o matrice V=[1 7 3 5] Vettore riga 1 x 4 Elemento 7 e individuato dall indice 2: v(2) Z=[1;4;5;7] vettore colonna 4 x 1 L elemento 5 e individuato dall indice 3 : z(3) A=[1 9; 5-3;0.1 0.3] Matrice 3 x 2 L elemento 0.1 e individuato dagli indici (3,1): A(3,1) MATLAB parte II C. Guerrini 3 Costruzione di array: v=[inizio:incremento:fine] >> a=[1:2:9] a = 1 3 5 7 9 >> a=[5:-1:1] a = 5 4 3 2 1 >> a=1:5 a = 1 2 3 4 5 >> a=[0:0.1:0.3] a = 0 0.1000 0.2000 0.3000 MATLAB parte II C. Guerrini 4 2
Costruzione di un array Con una funzione Matlab: linspace - genera un vettore riga con elementi equispaziati logspace - genera un vettore con elementi logaritmicamente equispaziati x=linspace(0,pi,7) x = 0 0.5236 1.0472 1.5708 2.0944 2.6180 3.1416 >> x=logspace(0,pi,7) x = 1.0000 1.2102 1.4646 1.7725 2.1450 2.5959 3.1416 MATLAB parte II C. Guerrini 5 Costruzione di array Funzioni predefinite per generare matrici particolari eye(n) genera la matrice identità di ordine n, cioè la matrice che ha elementi 1 sulla diagonale principale e 0 altrove zeros(m,n) genera una matrice m x n con elementi tutti uguali a 0; fornendo in ingresso un solo elemento n si genera una matrice quadrata n x n ones(m,n) analogo a zeros, ma tutti gli elementi della matrice generata sono uguali a 1 diag(v) crea una matrice diagonale con il vettore v sulla diagonale Si veda help elmat MATLAB parte II C. Guerrini 6 3
MATLAB parte II C. Guerrini 7 Operatori algebrici E possibile effettuare in modo trasparente tutte le usuali operazioni elementari (+,-,*,/,^) ben definite tra matrici, vettori e scalari Operazioni scalare-scalare Operazioni array-scalare Operazioni array-array Gli operatori algebrici possono essere applicati anche elemento per elemento ad array delle stesse dimensioni usando la così detta sintassi del punto (.+,.-,.*,./,.^) Valgono le solite regole di precedenza tra gli operatori e nell uso delle parentesi MATLAB parte II C. Guerrini 8 4
Operazioni elementari array-scalari Data la matrice A di m righe ed n colonne e uno scalare b >> C= A +b Equivale a: C(i,j)=A(i,j)+b Per i=1:n-righe; j=1:n-colonne >> C= A*b Equivale a Per i=1,2, m; e j=1,2, n C(i,j)=A(i,j)*b >> C=A/b Equivale a Per i=1,2, m; e j=1,2, n C(i,j)=A(i,j)\b MATLAB parte II C. Guerrini 9 Le operazioni elementari + - * si estendo in modo naturale (quando ben definite!) agli array Non si estende l operazione / (Il simbolo / risolve un sistema lineare) L operazione ^ è definita solo per matrici quadrate MATLAB parte II C. Guerrini 10 5
MATLAB parte II C. Guerrini 11 MATLAB parte II C. Guerrini 12 6
Operazioni elemento per elemento Moltiplicazione.* Divisione./ Elevamento a potenza.^ MATLAB parte II C. Guerrini 13 MATLAB parte II C. Guerrini 14 7
Dimensioni di un array Data una matrice A m x n ed un vettore v (riga o colonna) di dimensione n: size(a) fornisce le dimensioni m e n della matrice A.Possiamo memorizzare il risultato in un vettore scrivendo: [m,n]=size(a) length(v) fornisce la lunghezza del vettore v numel(a) restituisce il numero di elementi di A diag(v): crea una matrice diagonale con il vettore v sulla diagonale diag(a): estrae la diagonale della matrice A tril(a): estrae da la parte triangolare inferiore triu(a): estrae da la parte triangolare superiore abs(a): produce la matrice dei valori assoluti degli elementi di A MATLAB parte II C. Guerrini 15 L'operatore [ ] può essere usato per concatenare matrici MATLAB parte II C. Guerrini 16 8
MATLAB parte II C. Guerrini 17 Manipolazione di array Indirizzamento indiretto L'indirizzamento indiretto tramite array numerico (ind) Estrae gli elementi che hanno quell'indice numerico MATLAB parte II C. Guerrini 18 9
Manipolazione di array L'indirizzamento indiretto tramite array logico estrae gli elementi che hanno indice logico =1 (true) In questo caso il vettore [1 1 0 0 0 1 1] è considerato un vettore di indici e quindi non è valido MATLAB parte II C. Guerrini 19 Manipolazione di Array Ricerca di un sotto array con la funzione find >> help find FIND find indices of non zero elements I=FIND(X) returns the indices of the vector X that are non zero Esempio: vettore >> x=-3:3 X= -3-2 -1 0 1 2 3 >> p=find(abs(x)>1) p= 1 2 6 7 Esempio: matrice >> a=[-1 6 3; 2 0-1; 7 1-4] >>[rows,cols]=find(a>3) rows= 3 1 cols= 1 2 MATLAB parte II C. Guerrini 20 10