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
Ad esempio, la matrice identità di dimensione 3 è:
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
Se le viene passata una matrice
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
Matematicamente, la trasposta di una matrice
Ad esempio, data la matrice
La sua trasposta è:
In R la trasposta di una matrice può essere ottenuta con la funzione t()
.
Supponiamo di avere la matrice
> 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
> 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
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
Matematicamente, il prodotto di una matrice
Ad esempato, data la matrice
Il prodotto di
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 <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
> A
[,1] [,2]
[1,] 1 3
[2,] 2 4
Per ottenere il prodotto di
> 2 * A
[,1] [,2]
[1,] 2 6
[2,] 4 8
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
Matematicamente, l'addizione e la sottrazione di due matrici
Ad esempio, date le matrici
L'addizione di
La sottrazione di
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.
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
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
Possiamo moltiplicarle fra di loro ottenendo una matrice
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
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.
Ricordarsi che il prodotto di matrici non è commutativo
Il prodotto di matrici non è commutativo, ovvero in generale
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
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 <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
> A
[,1] [,2]
[1,] 1 3
[2,] 2 4
Per ottenere il determinante di
> det(A)
[1] -2
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
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 <- 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 %*% solve(A)
[,1] [,2]
[1,] 1 0
[2,] 0 1
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()
.