Operazioni su Vettori e Matrici in MATLAB
In questa lezione studieremo come utilizzare i vettori e le matrici in espressioni matematiche.
Dapprima vedremo come applicare in MATLAB le Operazioni Scalari su matrici e vettori, ossia operazioni che coinvolgono una quantità scalare, un numero, ed una matrice o un vettore.
Passeremo, poi, alle Operazioni Elemento per Elemento, chiamate anche operazioni element-wise o array operations, che combinano due vettori o due matrici delle stesse dimensioni applicando un'operazione a coppie di elementi nelle stesse posizioni.
- Le operazioni scalari in MATLAB sono operazioni tra uno scalare ed un vettore o matrice;
- Il risultato di un'operazione scalare in MATLAB è una matrice o un vettore con le stesse dimensioni in cui gli elementi sono il risultato dell'operazione tra lo scalare e l'elemento di partenza;
- Le operazioni elemento per elemento in MATLAB sono operazioni tra vettori o matrici delle stesse dimensioni;
- Il risultato è un vettore o una matrice con le stesse dimensioni i cui elementi sono il risultato dell'operazione tra le coppie di elementi di partenza nelle stesse posizioni.
Operazioni scalari su vettori e matrici
Nelle precedenti lezioni abbiamo visto come creare e modificare vettori e matrici. Abbiamo visto come applicare funzioni su di essi. Adesso vediamo come usare vettori e matrici in espressioni matematiche.
La grande potenza di MATLAB sta nel fatto che sia i vettori che le matrici possono essere adoperati in espressioni matematiche in maniera molto semplice. In molti linguaggi di programmazione lavorare con vettori e matrici può risultare, invece, abbastanza complesso.
Partiamo dalle semplici operazioni aritmetiche. Supponiamo, ad esempio, di voler moltiplicare un vettore per uno scalare. La sintassi da usare è semplicissima:
>> v = [2 4 6 8]
v =
2 4 6 8
>> 3 * v
ans =
6 12 18 24
Come potete osservare, per moltiplicare il vettore v
per il numero 3 è stato sufficiente usare il vettore in un'espressione matematica. In questo modo, il risultato è un vettore delle stesse dimensioni i cui elementi sono gli elementi del vettore v
moltiplicati per 3.
Analogamente, possiamo sommare uno scalare ad un vettore, sottrarre uno scalare ad un vettore e dividere un vettore per uno scalare:
>> v = [3 6 9 12]
v =
3 6 9 12
>> v + 3
ans =
6 9 12 15
>> v - 3
ans =
0 3 6 9
>> v / 3
ans =
1 2 3 4
I risultati saranno sempre vettori delle stesse dimensioni in cui gli elementi sono i risultati dell'operazione effettuata su ogni elemento del vettore di input.
Allo stesso modo, possiamo effettuare operazioni aritmetiche tra uno scalare ed una matrice. Il risultato sarà sempre una matrice delle stesse dimensioni i cui elementi sono il risultato dell'operazione effettuata per ogni singolo elemento della matrice di input.
Ad esempio:
>> A = -10.0 + (20.0).*rand(3, 4)
A =
-1.6547 8.8957 -3.2456 -7.7759
-9.0069 -0.1827 8.0011 5.6050
8.0543 -0.2149 -2.6151 -2.2052
>> A + 2
ans =
0.3453 10.8957 -1.2456 -5.7759
-7.0069 1.8173 10.0011 7.6050
10.0543 1.7851 -0.6151 -0.2052
>> A - 3
ans =
-4.6547 5.8957 -6.2456 -10.7759
-12.0069 -3.1827 5.0011 2.6050
5.0543 -3.2149 -5.6151 -5.2052
>> A * 4
ans =
-6.6186 35.5830 -12.9824 -31.1038
-36.0276 -0.7309 32.0043 22.4202
32.2173 -0.8598 -10.4603 -8.8209
>> A / 5
ans =
-0.3309 1.7791 -0.6491 -1.5552
-1.8014 -0.0365 1.6002 1.1210
1.6109 -0.0430 -0.5230 -0.4410
Operazioni aritmetiche tra scalari e vettori o matrici
In MATLAB, il risultato di un'operazione aritmetica tra uno scalare ed un vettore o matrice consiste in un vettore o matrice delle stesse dimensioni i cui elementi sono uguali al risultato dell'operazione tra lo scalare e l'elemento corrispondente del vettore o matrice di partenza.
Elevamento a Potenza
In MATLAB è possibile elevare a potenza i singoli elementi di un vettore o di una matrice. La sintassi per fare questo, però, è differente.
Ad esempio, prendiamo il seguente vettore:
>> x = [1, 2, 3, 4, 5]
x =
1 2 3 4 5
Supponiamo di voler elevare al quadrato i singoli elementi del vettore x
. In tal caso saremmo tentati di scrivere il comando che segue nel prompt:
>> x^2
Ma, facendo così, otterremmo un'errore:
>> x^2
Error using ^ (line 10)
Incorrect dimensions for raising a matrix to a power.
Check that the matrix is square and the power is a scalar.
To perform elementwise matrix powers, use '.^'.
Questo perché staremmo chiedendo a MATLAB di effettuare l'elevamento a potenza di un vettore che rappresenta un'operazione totalmente differente.
Per poter elevare a potenza i singoli elementi bisogna usare l'operatore .^
, in questo modo:
>> x .^ 2
ans =
1 4 9 16 25
Lo stesso discorso si può applicare ad una matrice di cui si vogliono elevare a potenza i singoli elementi:
>> x = [1, 2; 3, 4]
x =
1 2
3 4
>> x .^ 2
ans =
1 4
9 16
Elevazione a Potenza dei singoli elementi di un vettore o di una matrice
In MATLAB, per poter elevare a potenza i singoli elementi di un vettore o di una matrice bisogna usare l'operatore .^
nel modo seguente:
x .^ e
dove x
è un vettore o una matrice ed e
è un esponente.
Il risultato sarà un vettore o una matrice con le stesse dimensioni di x
e i cui elementi sono il risultato dei corrispondenti elementi di x
elevati ad e
.
Operazioni Elemento per Elemento tra vettori e matrici
MATLAB è anche in grado di effettuare in maniera semplice operazioni elemento per elemento tra vettori e matrici. Tali operazioni prendono il nome inglese di Array Operations o Operazioni Element-wise.
Operazioni Elemento per Elemento in MATLAB
Un'operazione elemento per elemento o operazione element-wise tra due vettori o tra due matrici delle stesse dimensioni è un'operazione che restituisce come risultato un vettore o una matrice delle stesse dimensioni con gli elementi pari al risultato dell'operazione applicata a coppie tra elementi nelle stessa posizione.
Vediamo tali operazioni nel dettaglio.
Addizione e Sottrazione tra Matrici
Per sommare o sottrarre due matrici tra di loro in MATLAB è sufficiente usare gli operatori di addizione, +
, o sottrazione, -
, in un'espressione.
Per comprendere meglio, supponiamo di avere due matrici
Il risultato della somma elemento per elemento tra le due matrici in MATLAB sarà:
Analogamente la differenza elemento per elemento tra le due matrici in MATLAB sarà:
Queste due operazioni corrispondono esattamente alle operazioni di addizione e sottrazione tra matrici come sono definite in algebra lineare.
Per Eseguire tali operazioni in MATLAB è sufficiente usare gli operatori di somma e differenza in un'espressione che contiene vettori o matrici. Ad esempio:
>> A = [10, 20; 30, 40]
A =
10 20
30 40
>> B = [1, 2; 3 4]
B =
1 2
3 4
>> A + B
ans =
11 22
33 44
>> A - B
ans =
9 18
27 36
Ovviamente bisogna garantire che gli operandi, vettori o matrici, abbiano le stesse dimensioni. In caso contrario, MATLAB restituisce un errore:
>> A = [1, 2, 3; 4, 5, 6]
A =
1 2 3
4 5 6
>> B = [1, 2; 3, 4]
B =
1 2
3 4
>> A + B
Matrix dimensions must agree.
Addizione e Sottrazione tra Matrici in MATLAB
L'Addizione tra Matrici e la Sottrazione tra Matrici in MATLAB può essere effettuata tra matrici delle stesse dimensioni usando gli operatori di somma, +
, e sottrazione, -
.
A + B
A - B
Le operazioni di addizione e sottrazione tra matrici in MATLAB corrispondono alle equivalenti operazioni definite in Algebra lineare.
Lo stesso discorso analogo vale anche per i vettori che possono essere considerati come matrici con una dimensione pari a 1:
>> v1 = [1 2 3 4]
v1 =
1 2 3 4
>> v2 = [5 6 7 8]
v2 =
5 6 7 8
>> v1 + v2
ans =
6 8 10 12
>> v2 - v1
ans =
4 4 4 4
Addizione e Sottrazione Elemento per Elemento tra un vettore ed una matrice
Sebbene per poter sommare due vettori o due matrici elemento per elemento è necessario che i due operandi abbiano le stesse dimensioni, in MATLAB è possibile sommare una matrice ed un vettore solo in due casi.
Addizione e Sottrazione Elemento per Elemento tra un vettore ed una matrice
Data una matrice con
- Nel primo caso, il risultato sarà una matrice
perm con le righe pari alle righe della matrice di partenza sommate al vettore elemento per elemento:n
- Nel secondo caso, il risultato sarà una matrice
perm con le colonne pari alle colonne della matrice di partenza sommate al vettore elemento per elemento:n
Stesso discorso vale per la Sottrazione.
Analizziamo l'esempio che segue:
>> A = [1, 2, 3; 4, 5, 6]
A =
1 2 3
4 5 6
>> b1 = [2, 2, 2]
b1 =
2 2 2
>> b2 = [3; 3]
b2 =
3
3
>> A + b1
ans =
3 4 5
6 7 8
>> A + b2
ans =
4 5 6
7 8 9
In questo esempio abbiamo definito una matrice A
di dimensione b1
un vettore riga di 3 elementi e b2
un vettore colonna di 2 elementi.
Il vettore riga b1
ha un numero di elementi pari al numero di colonne di A
, ossia 3, pertanto possiamo sommare A
e b1
e il risultato è, infatti, una matrice di dimensioni pari ad A
le cui righe corrispondono alle righe di A
sommate al vettore b1
.
Analogamente, il vettore b2
ha un numero di elementi pari al numero di righe di A
, ossia 2. La somma di A
e b2
è una matrice con le stesse dimensioni di A
le cui colonne sono pari a quelle di A
sommate al vettore b2
.
Provando, invece, a sommare ad A
un vettore riga con il numero di elementi errato otteniamo un errore. Analogamente se proviamo a sommare un vettore colonna con il numero di elementi errato:
>> b = [1, 1, 1, 1]
b =
1 1 1 1
>> A + b
Matrix dimensions must agree.
Moltiplicazione e Divisione Elemento per Elemento tra Matrici
La moltiplicazione elemento per elemento tra due matrici è un'operazione ben diversa dalla moltiplicazione tra matrici.
In tal caso si tratta di moltiplicare gli elementi di due matrici di dimensioni identiche a coppie. Se prendiamo due matrici
Il risultato della moltiplicazione elemento per elemento tra le due matrici in MATLAB sarà:
Abbiamo usato la notazione
Per poter effettuare il prodotto elemento per elemento tra due matrici in MATLAB è necessario usare l'operatore di moltiplicazione *
preceduto da un punto .
: .*
. Vediamo un esempio:
>> A = [2, 4; 6, 8]
A =
2 4
6 8
>> B = [1, 2; 3, 4]
B =
1 2
3 4
>> A .* B
ans =
2 8
18 32
Stesso discorso vale per la divisione elemento per elemento. In tal caso bisogna usare l'operatore di divisione preceduto da un punto: ./
.
>> A = [2, 4; 6, 8]
A =
2 4
6 8
>> B = [1, 2; 3, 4]
B =
1 2
3 4
>> A ./ B
ans =
2 2
2 2
Ricapitolando:
Moltiplicazione elemento per elemento tra due matrici in MATLAB
La Moltiplicazione elemento per elemento tra due matrici in MATLAB può essere effettuata tra matrici delle stesse dimensioni usando l'operatore .*
:
A .* B
Divisione elemento per elemento tra due matrici in MATLAB
La Divisione elemento per elemento tra due matrici in MATLAB può essere effettuata tra matrici delle stesse dimensioni usando l'operatore ./
:
A ./ B
Elevamento a Potenza Elemento per Elemento tra Matrici
L'ultima operazione che studieremo in questa lezione è l'elevamento a potenza elemento per elemento tra matrici in MATLAB.
Tale operazione si può applicare a matrici o vettori delle stesse dimensioni. Date due matrici
Il risultato della potenza degli elementi di
Anche in questo caso abbiamo usato una notazione differente,
In MATLAB si può effettuare questa operazione usando l'operatore di elevamento a potenza preceduto da un punto: .^
.
Vediamo un esempio:
>> A = [1, 2; 3, 4]
A =
1 2
3 4
>> B = [2, 4; 6, 8]
B =
2 4
6 8
>> A .^ B
ans =
1 16
729 65536
Ricapitolando:
Elevamento a Potenza Elemento per Elemento tra due Matrici in MATLAB
L'Elevamento a Potenza Elemento per Elemento tra due Matrici in MATLAB può essere effettuato tra matrici delle stesse dimensioni usando l'operatore .^
:
A .^ B
In Sintesi
In questa lezione abbiamo visto che è possibile applicare un'operazione aritmetica tra uno scalare ed un vettore o una matrice. MATLAB applicherà l'operazione tra lo scalare ed i singoli elementi del vettore o matrice di input e restituirà un vettore o matrice delle stesse dimensioni. La sintassi è identica al caso di espressioni matematiche.
Nel caso di operazioni elemento per elemento, invece, gli operandi sono due vettori o due matrici delle stesse dimensioni. MATLAB applicherà l'operazione a coppie tra gli elementi nelle stesse posizioni dei due operandi. Il risultato sarà un vettore o una matrice delle stesse dimensioni di partenza.