MATLAB parte II Array
Transcript
MATLAB parte II Array
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 Vettore riga 1x4 V=[1 7 3 5] Z=[1;4;5;7] vettore colonna 4x1 A=[1 9; 5 -3;0.1 0.3] Matrice 3 x 2 Elemento 7 e’ individuato dall’indice 2: v(2) L’elemento 5 e’ individuato dall’indice 3 : z(3) L’elemento 0.1 e’ individuato dagli indici (3,1): A(3,1) MATLAB parte II Costruzione di array: >> a=[1:2:9] a= 13579 >> a=[5:-1:1] a= 54321 MATLAB parte II C. Guerrini 3 v=[inizio:incremento:fine] >> a=1:5 a= 12345 >> a=[0:0.1:0.3] a= 0 0.1000 0.2000 0.3000 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 >> x=logspace(0,pi,7) x= 1.0000 1.2102 1.4646 MATLAB parte II 1.7725 2.0944 2.1450 2.6180 2.5959 3.1416 3.1416 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 MATLAB parte II • • • >> C=A/b Equivale a Per i=1,2,…m; e j=1,2,…n C(i,j)=A(i,j)\b 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 • 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 • 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 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: matrice >> a=[-1 6 3; 2 0 -1; 7 1 -4] >>[rows,cols]=find(a>3) rows= 3 1 Esempio: vettore >> x=-3:3 X= -3 -2 -1 0 1 2 3 >> p=find(abs(x)>1) p= 1 2 6 7 cols= 1 2 MATLAB parte II C. Guerrini 20 10