Creazione, concatenazione ed espansione di matrici
La struttura di dati più elementare di MATLAB® è la matrice. Una matrice è un array rettangolare bidimensionale di elementi di dati disposti in righe e colonne. Gli elementi possono essere numeri, valori logici (true o false), date e ore, stringhe, valori categorical o altri tipi di dati di MATLAB.
Anche un singolo numero viene memorizzato come matrice. Ad esempio, una variabile contenente il valore 100 viene memorizzata come matrice 1x1 di tipo double.
A = 100;
whos AName Size Bytes Class Attributes A 1x1 8 double
Costruzione di una matrice di dati
Se si dispone di un insieme specifico di dati, è possibile disporre gli elementi in una matrice utilizzando le parentesi quadre. Una singola riga di dati contiene spazi o virgole tra gli elementi, mentre le righe sono separate da un punto e virgola. Ad esempio, creare una singola riga di quattro elementi numerici. La dimensione della matrice risultante è 1x4 perché è composta da una riga e quattro colonne. Una matrice di questa forma è spesso indicata come vettore riga.
A = [12 62 93 -8]
A = 1×4
12 62 93 -8
sz = size(A)
sz = 1×2
1 4
Creare ora una matrice con gli stessi numeri ma disponendoli su due righe. Questa matrice ha due righe e due colonne.
A = [12 62; 93 -8]
A = 2×2
12 62
93 -8
sz = size(A)
sz = 1×2
2 2
Funzioni di matrice specializzate
MATLAB dispone di numerose funzioni che aiutano a creare matrici con determinati valori o una struttura particolare. Ad esempio, le funzioni zeros e ones creano matrici composte unicamente da zeri o da uno. Il primo e il secondo argomento di queste funzioni sono rispettivamente il numero di righe e il numero di colonne della matrice.
A = zeros(3,2)
A = 3×2
0 0
0 0
0 0
B = ones(2,4)
B = 2×4
1 1 1 1
1 1 1 1
La funzione diag posiziona gli elementi di input sulla diagonale di una matrice. Ad esempio, creare un vettore riga A contenente quattro elementi. Quindi, creare una matrice 4x4 i cui elementi diagonali siano gli elementi di A.
A = [12 62 93 -8]; B = diag(A)
B = 4×4
12 0 0 0
0 62 0 0
0 0 93 0
0 0 0 -8
La funzione createArray (dalla release R2024a) può restituire array di quasi tutti i tipi di dati di MATLAB. La funzione utilizza la stessa sintassi di zeros e ones per definire la dimensione dell'array, ma offre anche diverse opzioni per specificarne il contenuto. Ad esempio, è possibile specificare il valore di riempimento.
C = createArray(2,3,FillValue=duration(1,15,0))
C = 2×3 duration
01:15:00 01:15:00 01:15:00
01:15:00 01:15:00 01:15:00
Concatenazione di matrici
È inoltre possibile utilizzare le parentesi quadre per aggiungere matrici esistenti. Questo modo di creazione di una matrice è chiamato concatenazione. Ad esempio, concatenare due vettori riga per creare un vettore riga ancora più lungo.
A = ones(1,4); B = zeros(1,4); C = [A B]
C = 1×8
1 1 1 1 0 0 0 0
Per disporre A e B come due righe di una matrice, utilizzare il punto e virgola.
D = [A; B]
D = 2×4
1 1 1 1
0 0 0 0
Per concatenare più matrici, è necessario che le loro dimensioni siano compatibili. Ossia, quando le si concatenano orizzontalmente, le matrici devono avere lo stesso numero di righe. Quando le si concatenano verticalmente, devono avere lo stesso numero di colonne.
Ad esempio, creare due matrici che abbiano entrambe due righe. Aggiungere orizzontalmente la seconda matrice alla prima utilizzando le parentesi quadre.
A = ones(2,3)
A = 2×3
1 1 1
1 1 1
B = zeros(2,2)
B = 2×2
0 0
0 0
C = [A B]
C = 2×5
1 1 1 0 0
1 1 1 0 0
Un modo alternativo per concatenare matrici compatibili è utilizzare le funzioni di concatenazione, come horzcat, vertcat e cat. Aggiungere orizzontalmente la seconda matrice alla prima utilizzando horzcat.
D = horzcat(A,B)
D = 2×5
1 1 1 0 0
1 1 1 0 0
Generazione di una sequenza numerica
colon è un modo pratico per creare matrici i cui elementi sono sequenziali ed equidistanti. Ad esempio, creare un vettore riga i cui elementi sono numero interi da 1 a 10.
A = 1:10
A = 1×10
1 2 3 4 5 6 7 8 9 10
È possibile utilizzare l'operatore due punti per creare una sequenza di numeri all'interno di qualsiasi intervallo, incrementati di uno.
A = -2.5:2.5
A = 1×6
-2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000
Per modificare il valore dell'incremento della sequenza, specificare il valore dell'incremento tra il valore iniziale e quello finale dell'intervallo, separati dai due punti.
A = 0:2:10
A = 1×6
0 2 4 6 8 10
Per decrementare, utilizzare un numero negativo.
A = 6:-1:0
A = 1×7
6 5 4 3 2 1 0
È inoltre possibile incrementare con valori non interi. Se un valore dell'incremento non suddivide in modo uniforme l'intervallo specificato, MATLAB termina automaticamente la sequenza all'ultimo valore che può raggiungere prima di superare l'intervallo.
A = 1:0.2:2.1
A = 1×6
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
Espansione di una matrice
È possibile aggiungere uno o più elementi a una matrice posizionandoli al di fuori dei confini esistenti degli indici di riga e colonna. MATLAB riempie automaticamente la matrice con zeri per mantenerla rettangolare. Ad esempio, creare una matrice 2x3 e aggiungere un'ulteriore riga e un'ulteriore colonna inserendo un elemento nella posizione (3,4).
A = [10 20 30; 60 70 80]
A = 2×3
10 20 30
60 70 80
A(3,4) = 1
A = 3×4
10 20 30 0
60 70 80 0
0 0 0 1
È inoltre possibile espandere la dimensione inserendo una nuova matrice al di fuori degli intervalli degli indici esistenti.
A(4:5,5:6) = [2 3; 4 5]
A = 5×6
10 20 30 0 0 0
60 70 80 0 0 0
0 0 0 1 0 0
0 0 0 0 2 3
0 0 0 0 4 5
Per espandere ripetutamente la dimensione di una matrice, ad esempio all'interno di un for loop, una best practice è pre-allocare lo spazio necessario per la matrice più grande che si prevede di creare. Senza pre-allocazione, MATLAB deve allocare memoria ogni volta che la dimensione aumenta, rallentando così le operazioni. Ad esempio, pre-allocare una matrice che possa contenere fino a 10.000 righe e 10.000 colonne inizializzandone gli elementi a zero.
A = zeros(10000,10000);
Se in seguito è necessario pre-allocare ulteriori elementi, è possibile espandere la matrice assegnando valori al di fuori degli intervalli degli indici esistenti oppure concatenando un'altra matrice pre-allocata a A.
Array vuoti
Un array vuoto in MATLAB è un array in cui almeno la lunghezza di una dimensione è pari a zero. Gli array vuoti sono utili per rappresentare concettualmente "nulla" in modo programmatico. Ad esempio, si supponga di voler trovare tutti gli elementi di un vettore che sono minori di 0, ma nessuno lo è. La funzione find restituisce un vettore vuoto di indici, indicando che non sono stati trovati elementi minori di 0.
A = [1 2 3 4]; ind = find(A<0)
ind = 1×0 empty double row vector
Molti algoritmi contengono chiamate di funzione che possono restituire array vuoti. Spesso è utile permettere che gli array vuoti passino attraverso questi algoritmi come argomenti delle funzioni, piuttosto che trattarli come un caso speciale. Se è necessario personalizzare la gestione degli array vuoti, è possibile verificarne la presenza utilizzando la funzione isempty.
TF = isempty(ind)
TF = logical
1