Operazioni con le Matrici in R

In linguaggio R le matrici possono essere utilizzate da due prospettive diverse: come strutture dati o come oggetti matematici.

Nel primo caso le matrici sono viste come semplici tabelle di numeri disposti su righe e colonne.

Nel secondo caso le matrici sono viste come oggetti matematici, su cui è possibile effettuare operazioni algebriche come somma, sottrazione, moltiplicazione e divisione.

La distinzione è importante in quanto il comportamento matematico delle matrici è diverso da quello di semplici tabelle di numeri.

In questa lezione vedremo come effettuare in R le tipiche operazioni di algebra lineare sulle matrici.

Matrice Identità

La matrice identità è una matrice quadrata in cui tutti gli elementi della diagonale principale sono uguali a 1 e tutti gli altri elementi sono uguali a 0.

Di solito una matrice identità di dimensione n è indicata con I_n.

Ad esempio, la matrice identità di dimensione 3 è:

I_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}

In R la matrice identità può essere ottenuta con la funzione diag().

Abbiamo già visto la funzione diag() nella lezione precedente per estrarre la diagonale di una matrice.

La stessa funzione diag() può essere utilizzata per creare una matrice identità. Basta passare come parametro la dimensione della matrice identità desiderata.

Ad esempio, per ottenere la matrice identità di dimensione 3 possiamo scrivere:

> diag(3)
     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

Il comportamente della funzione diag cambia a seconda del tipo di input che le viene passato.

Se le viene passato un numero intero n, la funzione restituisce la matrice identità di dimensione n.

Se le viene passata una matrice A, la funzione restituisce la diagonale di A.

Definizione

Creazione di una Matrice Identità in R - Funzione diag()

Una matrice identità in R può essere ottenuta con la funzione diag().

La sintassi è la seguente:

diag(n)

Dove n è la dimensione della matrice identità desiderata.

Trasposta di una Matrice

La trasposta di una matrice A di dimensione m \times n è una matrice di dimensione n \times m ottenuta scambiando le righe con le colonne di A.

Matematicamente, la trasposta di una matrice A è indicata con A^T.

Ad esempio, data la matrice A:

A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ \end{bmatrix}

La sua trasposta è:

A^T = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \\ \end{bmatrix}

In R la trasposta di una matrice può essere ottenuta con la funzione t().

Supponiamo di avere la matrice A definita come segue:

> A <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
> A
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Per ottenere la trasposta di A possiamo scrivere:

> t(A)
     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5    6

Si può facilmente vedere che la trasposta della trasposta di una matrice è la matrice stessa:

> t(t(A))
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
Definizione

Trasposta di una Matrice in R - Funzione t()

La trasposta di una matrice in R può essere ottenuta con la funzione t().

La sintassi è la seguente:

t(matrice)

Dove matrice è la matrice di cui si vuole ottenere la trasposta.

Prodotto di una Matrice per uno Scalare

Il prodotto di una matrice A per uno scalare k è una matrice ottenuta moltiplicando ogni elemento di A per k.

Matematicamente, il prodotto di una matrice A per uno scalare k è indicato con kA.

Ad esempato, data la matrice A:

A = \begin{bmatrix} 1 &amp; 2 \\ 3 &amp; 4 \\ \end{bmatrix}

Il prodotto di A per lo scalare 2 è:

2A = \begin{bmatrix} 2 &amp; 4 \\ 6 &amp; 8 \\ \end{bmatrix}

In R il prodotto di una matrice per uno scalare può essere ottenuto semplicemente moltiplicando la matrice per lo scalare con l'operatore *.

Supponiamo di avere la matrice A definita come segue:

> A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
> A
     [,1] [,2]
[1,]    1    3
[2,]    2    4

Per ottenere il prodotto di A per lo scalare 2 possiamo scrivere:

> 2 * A
     [,1] [,2]
[1,]    2    6
[2,]    4    8
Definizione

Prodotto di una Matrice per uno Scalare in R

Il prodotto di una matrice per uno scalare in R può essere ottenuto semplicemente moltiplicando la matrice per lo scalare con l'operatore *.

La sintassi è la seguente:

k * matrice

Dove k è lo scalare e matrice è la matrice.

Addizione e Sottrazione di Matrici

L'addizione e la sottrazione di due matrici A e B di dimensione m \times n è una matrice ottenuta sommando o sottraendo gli elementi corrispondenti di A e B.

Matematicamente, l'addizione e la sottrazione di due matrici A e B sono indicate rispettivamente con A + B e A - B.

Ad esempio, date le matrici A e B:

A = \begin{bmatrix} 1 &amp; 2 \\ 3 &amp; 4 \\ \end{bmatrix}
B = \begin{bmatrix} 5 &amp; 6 \\ 7 &amp; 8 \\ \end{bmatrix}

L'addizione di A e B è:

A + B = \begin{bmatrix} 6 &amp; 8 \\ 10 &amp; 12 \\ \end{bmatrix}

La sottrazione di A e B è:

A - B = \begin{bmatrix} -4 &amp; -4 \\ -4 &amp; -4 \\ \end{bmatrix}

Ovviamente, per essere definite, l'addizione e la sottrazione richiedono che le due matrici abbiano la stessa dimensione.

In R l'addizione e la sottrazione di due matrici possono essere ottenute semplicemente sommando o sottraendo le due matrici con gli operatori + e -.

Proviamo a sommare e sottrarre le due matrici dell'esempio di sopra in R.

> A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
> B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)
> A + B
     [,1] [,2]
[1,]    6    8
[2,]   10   12
> A - B
     [,1] [,2]
[1,]   -4   -4
[2,]   -4   -4

Come si può vedere, per sommare o sottrarre due matrici in R basta scrivere l'operatore + o - tra le due matrici.

Definizione

Addizione e Sottrazione di Matrici in R

L'addizione e la sottrazione di due matrici in R possono essere ottenute semplicemente sommando o sottraendo le due matrici con gli operatori + e -.

La sintassi è la seguente:

A + B
A - B

Dove A e B sono le due matrici.

Il requisito per l'addizione e la sottrazione è che le due matrici abbiano la stessa dimensione.

Prodotto di due Matrici

Il prodotto di due matrici A, di dimensione m \times n, e B, di dimensione n \times p, è una matrice C di dimensione m \times p ottenuta moltiplicando le righe di A per le colonne di B.

Per ricordare facilmente come funziona il prodotto tra matrici, lo si è soliti chiamare come prodotto righe per colonne.

Il requisito per poter effettuare il prodotto tra due matrici è che il numero di colonne della prima matrice sia uguale al numero di righe della seconda matrice.

Ad esempio, date le matrici A di dimensione 2 \times 3 e B di dimensione 3 \times 2:

A = \begin{bmatrix} 1 &amp; 2 &amp; 3 \\ 4 &amp; 5 &amp; 6 \\ \end{bmatrix}
B = \begin{bmatrix} 7 &amp; 8 \\ 9 &amp; 10 \\ 11 &amp; 12 \\ \end{bmatrix}

Possiamo moltiplicarle fra di loro ottenendo una matrice C di dimensione 2 \times 2:

C = \begin{bmatrix} 1 \cdot 7 + 2 \cdot 9 + 3 \cdot 11 &amp; 1 \cdot 8 + 2 \cdot 10 + 3 \cdot 12 \\ 4 \cdot 7 + 5 \cdot 9 + 6 \cdot 11 &amp; 4 \cdot 8 + 5 \cdot 10 + 6 \cdot 12 \\ \end{bmatrix}
C = \begin{bmatrix} 7 + 18 + 33 &amp; 8 + 20 + 36 \\ 28 + 45 + 66 &amp; 32 + 50 + 72 \\ \end{bmatrix}
C = \begin{bmatrix} 58 &amp; 64 \\ 139 &amp; 154 \\ \end{bmatrix}

Ora, come si può osservare, il prodotto tra due matrici non è un semplice prodotto elemento per elemento, per cui non possiamo utilizzare l'operatore *.

Usando questo operatore in R, infatti, otterremmo un risultato diverso da quello che ci aspettiamo.

Bisogna, pertanto, utilizzare l'operatore apposito per il prodotto tra due matrici, ovvero %*%.

Volendo eseguire il prodotto di sopra in R, possiamo scrivere:

> A <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)
> B <- matrix(c(7, 8, 9, 10, 11, 12), nrow = 3, ncol = 2, byrow = TRUE)
> A
    [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> B
     [,1] [,2]
[1,]    7    8
[2,]    9   10
[3,]   11   12
> A %*% B
     [,1] [,2]
[1,]   58   64
[2,]  139  154
Definizione

Prodotto di due Matrici in R

Il prodotto di due matrici in R può essere ottenuto con l'operatore %*%.

La sintassi è la seguente:

A %*% B

Dove A e B sono le due matrici.

Il requisito per il prodotto tra due matrici è che il numero di colonne della prima matrice sia uguale al numero di righe della seconda matrice.

Nota

Ricordarsi che il prodotto di matrici non è commutativo

Il prodotto di matrici non è commutativo, ovvero in generale AB \neq BA.

Lo si può vedere facilmente in R tornando all'esempio di prima:

> A %*% B
     [,1] [,2]
[1,]   58   64
[2,]  139  154
> B %*% A
     [,1] [,2] [,3]
[1,]   39   54   69
[2,]   49   68   87
[3,]   59   82  105

Determinante di una Matrice

Il determinante di una matrice quadrata A di dimensione n \times n è un numero reale ottenuto da una combinazione lineare degli elementi di A.

Il determinante di una matrice è una quantità molto importante in algebra lineare, in quanto permette di capire se una matrice è invertibile o meno.

In R il determinante di una matrice può essere ottenuto con la funzione det() che, ovviamente, può essere applicata solo a matrici quadrate.

Supponiamo di avere la matrice A definita come segue:

> A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
> A
     [,1] [,2]
[1,]    1    3
[2,]    2    4

Per ottenere il determinante di A possiamo scrivere:

> det(A)
[1] -2
Definizione

Determinante di una Matrice in R - Funzione det()

Il determinante di una matrice in R può essere ottenuto con la funzione det().

La sintassi è la seguente:

det(matrice)

Dove matrice è la matrice di cui si vuole ottenere il determinante.

Matrice Inversa

La matrice inversa di una matrice quadrata A di dimensione n \times n è una matrice A^{-1} tale che il prodotto di A per A^{-1} è la matrice identità I_n:

A \cdot A^{-1} = I_n

L'inversa di una matrice può essere ottenuta solo quando la matrice in questione non è singolare, ossia quando il suo determinante è diverso da zero.

L'inversa di una matrice è una quantità molto importante in algebra lineare, in quanto permette di risolvere sistemi di equazioni lineari.

Esistono vari approcci per calcolare l'inversa di una matrice e, in generale, si tratta di operazioni che al crescere della dimensione della matrice diventano molto impegnative dal punto di vista computazionale.

Qui non ci occuperemo di come si possa calcolare l'inversa di una matrice, ne di quanto costi in termini di tempo di calcolo. Ci limiteremo a vedere come si possa ottenere l'inversa di una matrice in R.

In R l'inversa di una matrice può essere ottenuta con la funzione solve() che si può applicare solo a matrici quadrate.

Supponiamo di avere la matrice A definita come segue:

> A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
> A
     [,1] [,2]
[1,]    1    3
[2,]    2    4

Possiamo vedere subito che si tratta di una matrice non singolare in quanto il suo determinante è diverso da zero:

> det(A)
[1] -2

Possiamo quindi ottenere la sua inversa con la funzione solve():

> solve(A)
     [,1] [,2]
[1,]   -2  1.5
[2,]    1 -0.5

Inoltre, possiamo controllare che essa sia effettivamente l'inversa di A effettuando la moltiplicazione tra le due matrici:

> A %*% solve(A)
     [,1] [,2]
[1,]    1    0
[2,]    0    1
Definizione

Matrice Inversa in R - Funzione solve()

L'inversa di una matrice in R può essere ottenuta con la funzione solve().

La sintassi è la seguente:

solve(matrice)

Dove matrice è la matrice di cui si vuole ottenere l'inversa.

In Sintesi

Ricapitolando, in questa lezione abbiamo visto che:

  • La matrice identità può essere ottenuta con la funzione diag().
  • La trasposta di una matrice può essere ottenuta con la funzione t().
  • Il prodotto di una matrice per uno scalare può essere ottenuto semplicemente moltiplicando la matrice per lo scalare con l'operatore *:

    k * matrice
    
  • L'addizione e la sottrazione di due matrici possono essere ottenute semplicemente sommando o sottraendo le due matrici con gli operatori + e -:

    A + B
    
    A - B
    
  • Il prodotto di due matrici può essere ottenuto con l'operatore %*%:

    A %*% B
    
  • Il determinante di una matrice può essere ottenuto con la funzione det().

  • L'inversa di una matrice può essere ottenuta con la funzione solve().