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.

Concetti Chiave
  • 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
Definizione

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
Definizione

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.

Definizione

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 A e B che hanno lo stesso numero di righe m e lo stesso numero di colonne n:

A = \left| \begin{array}{cccc} a_{1,1} & a_{1,2} & \dots & a_{1,n} \\ a_{2,1} & a_{2,2} & \dots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \dots & a_{m,n} \\ \end{array} \right|
B = \left| \begin{array}{cccc} b_{1,1} & b_{1,2} & \dots & b_{1,n} \\ b_{2,1} & b_{2,2} & \dots & b_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ b_{m,1} & b_{m,2} & \dots & b_{m,n} \\ \end{array} \right|

Il risultato della somma elemento per elemento tra le due matrici in MATLAB sarà:

A + B = \left| \begin{array}{cccc} a_{1,1} + b_{1,1} & a_{1,2} + b_{1,2} & \dots & a_{1,n} + b_{1,n} \\ a_{2,1} + b_{2,1} & a_{2,2} + b_{2,2} & \dots & a_{2,n} + b_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} + b_{m,1} & a_{m,2} + b_{m,2} & \dots & a_{m,n} + b_{m,n} \\ \end{array} \right|

Analogamente la differenza elemento per elemento tra le due matrici in MATLAB sarà:

A - B = \left| \begin{array}{cccc} a_{1,1} - b_{1,1} & a_{1,2} - b_{1,2} & \dots & a_{1,n} - b_{1,n} \\ a_{2,1} - b_{2,1} & a_{2,2} - b_{2,2} & \dots & a_{2,n} - b_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} - b_{m,1} & a_{m,2} - b_{m,2} & \dots & a_{m,n} - b_{m,n} \\ \end{array} \right|

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.
Definizione

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.

Definizione

Addizione e Sottrazione Elemento per Elemento tra un vettore ed una matrice

Data una matrice con m righe ed n colonne, è possibile sommare ad essa un vettore riga che abbia n elementi oppure un vettore colonna che abbia m elementi.

  • Nel primo caso, il risultato sarà una matrice m per n con le righe pari alle righe della matrice di partenza sommate al vettore elemento per elemento:
A = \left| \begin{array}{cccc} a_{1,1} & a_{1,2} & \dots & a_{1,n} \\ a_{2,1} & a_{2,2} & \dots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \dots & a_{m,n} \\ \end{array} \right|
b = \left[ b_1, b_2, \dots, b_n \right]
A + b = \left| \begin{array}{cccc} a_{1,1} + b_1 & a_{1,2} + b_2 & \dots & a_{1,n} + b_n \\ a_{2,1} + b_1 & a_{2,2} + b_2 & \dots & a_{2,n} + b_n \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} + b_1 & a_{m,2} + b_2 & \dots & a_{m,n} + b_n \\ \end{array} \right|
  • Nel secondo caso, il risultato sarà una matrice m per n con le colonne pari alle colonne della matrice di partenza sommate al vettore elemento per elemento:
A = \left| \begin{array}{cccc} a_{1,1} & a_{1,2} & \dots & a_{1,n} \\ a_{2,1} & a_{2,2} & \dots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \dots & a_{m,n} \\ \end{array} \right|
b = \left[ \begin{array}{c} b_1 \\ b_2 \\ \vdots \\ b_m \end{array} \right]
A + b = \left| \begin{array}{cccc} a_{1,1} + b_1 & a_{1,2} + b_1 & \dots & a_{1,n} + b_1 \\ a_{2,1} + b_2 & a_{2,2} + b_2 & \dots & a_{2,n} + b_2 \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} + b_m & a_{m,2} + b_m & \dots & a_{m,n} + b_m \\ \end{array} \right|

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 2 \times 3, e due vettori: 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 A e B:

A = \left| \begin{array}{cccc} a_{1,1} & a_{1,2} & \dots & a_{1,n} \\ a_{2,1} & a_{2,2} & \dots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \dots & a_{m,n} \\ \end{array} \right|
B = \left| \begin{array}{cccc} b_{1,1} & b_{1,2} & \dots & b_{1,n} \\ b_{2,1} & b_{2,2} & \dots & b_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ b_{m,1} & b_{m,2} & \dots & b_{m,n} \\ \end{array} \right|

Il risultato della moltiplicazione elemento per elemento tra le due matrici in MATLAB sarà:

A \otimes B = \left| \begin{array}{cccc} a_{1,1} \cdot b_{1,1} & a_{1,2} \cdot b_{1,2} & \dots & a_{1,n} \cdot b_{1,n} \\ a_{2,1} \cdot b_{2,1} & a_{2,2} \cdot b_{2,2} & \dots & a_{2,n} \cdot b_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} \cdot b_{m,1} & a_{m,2} \cdot b_{m,2} & \dots & a_{m,n} \cdot b_{m,n} \\ \end{array} \right|

Abbiamo usato la notazione \otimes per evidenziare che non si tratta del prodotto tra due matrici.

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:

Definizione

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
Definizione

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 A e B:

A = \left| \begin{array}{cccc} a_{1,1} & a_{1,2} & \dots & a_{1,n} \\ a_{2,1} & a_{2,2} & \dots & a_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m,1} & a_{m,2} & \dots & a_{m,n} \\ \end{array} \right|
B = \left| \begin{array}{cccc} b_{1,1} & b_{1,2} & \dots & b_{1,n} \\ b_{2,1} & b_{2,2} & \dots & b_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ b_{m,1} & b_{m,2} & \dots & b_{m,n} \\ \end{array} \right|

Il risultato della potenza degli elementi di A elevati agli elementi di B sarà:

A \odot B = \left| \begin{array}{cccc} \left( a_{1,1} \right)^{b_{1,1}} & \left( a_{1,2} \right)^{b_{1,2}} & \dots & \left( a_{1,n} \right)^{b_{1,n}} \\ \left( a_{2,1} \right)^{b_{2,1}} & \left( a_{2,2} \right)^{b_{2,2}} & \dots & \left( a_{2,n} \right)^{b_{2,n}} \\ \vdots & \vdots & \ddots & \vdots \\ \left( a_{m,1} \right)^{b_{m,1}} & \left( a_{m,2} \right)^{b_{m,2}} & \dots & \left( a_{m,n} \right)^{b_{m,n}} \\ \end{array} \right|

Anche in questo caso abbiamo usato una notazione differente, \odot, per indicare che non si tratta di un elevamento a potenza tra matrici.

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:

Definizione

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.