Didattica & Progetti

Determinanti

← Torna ad Algebra Lineare

Determinanti: Definizione, Metodi di Calcolo e Implementazione
1. Definizione e Interpretazione Geometrica
Definizione Il determinante è una funzione che associa ad ogni matrice quadrata $A$ un numero reale, indicato con $\det(A)$ o $|A|$.

Il determinante fornisce informazioni importanti sulla matrice:
  • Se $\det(A) = 0$, la matrice è singolare (non invertibile)
  • Se $\det(A) \neq 0$, la matrice è invertibile
  • Il valore assoluto $|\det(A)|$ rappresenta il fattore di scala del volume (o area in 2D) sotto la trasformazione lineare associata ad $A$
Interpretazione Geometrica In 2 dimensioni: Per una matrice $2 \times 2$, il determinante rappresenta l'area del parallelogramma formato dai vettori colonna (o riga) della matrice.

In 3 dimensioni: Per una matrice $3 \times 3$, il determinante rappresenta il volume del parallelepipedo formato dai tre vettori colonna (o riga).

Segno del determinante:
  • Se $\det(A) > 0$: la trasformazione preserva l'orientamento
  • Se $\det(A) < 0$: la trasformazione inverte l'orientamento
  • Se $\det(A) = 0$: la trasformazione "schiaccia" lo spazio in una dimensione inferiore
2. Calcolo del Determinante per Matrici $2 \times 2$
Formula Per una matrice $2 \times 2$: $$A = \begin{bmatrix} a & b \\ c & d \end{bmatrix}$$
Il determinante si calcola come: $$\det(A) = ad - bc$$
(prodotto degli elementi sulla diagonale principale meno prodotto degli elementi sulla diagonale secondaria)
Esempio Numerico
$$A = \begin{bmatrix} 3 & 8 \\ 4 & 6 \end{bmatrix}$$
Passo 1: Identificare gli elementi
$a = 3, \quad b = 8, \quad c = 4, \quad d = 6$
Passo 2: Applicare la formula
$\det(A) = ad - bc = (3)(6) - (8)(4) = 18 - 32 = -14$
Risultato: $\det(A) = -14$

Poiché $\det(A) \neq 0$, la matrice è invertibile.
Codice Python
import numpy as np

# Definizione della matrice 2x2
A = np.array([[3, 8],
              [4, 6]])

# Metodo 1: usando numpy
det_numpy = np.linalg.det(A)
print(f"det(A) usando numpy: {det_numpy}")

# Metodo 2: calcolo manuale con la formula
a, b = A[0, 0], A[0, 1]
c, d = A[1, 0], A[1, 1]
det_manuale = a*d - b*c
print(f"det(A) calcolo manuale: {det_manuale}")

# Output:
# det(A) usando numpy: -14.000000000000002
# det(A) calcolo manuale: -14
3. Calcolo del Determinante per Matrici $3 \times 3$
Regola di Sarrus Per una matrice $3 \times 3$: $$A = \begin{bmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \\ a_{31} & a_{32} & a_{33} \end{bmatrix}$$
Procedimento:
  1. Riscrivere le prime due colonne a destra della matrice
  2. Sommare i prodotti delle diagonali discendenti (da sinistra a destra)
  3. Sottrarre i prodotti delle diagonali ascendenti (da sinistra a destra)

$$\det(A) = a_{11}a_{22}a_{33} + a_{12}a_{23}a_{31} + a_{13}a_{21}a_{32}$$ $$- a_{13}a_{22}a_{31} - a_{11}a_{23}a_{32} - a_{12}a_{21}a_{33}$$
Nota: Questa regola funziona solo per matrici $3 \times 3$.
Esempio Numerico (Sarrus)
$$A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}$$
Diagonali discendenti (+):
$(1)(5)(9) = 45$
$(2)(6)(7) = 84$
$(3)(4)(8) = 96$
Somma: $45 + 84 + 96 = 225$
Diagonali ascendenti (-):
$(3)(5)(7) = 105$
$(1)(6)(8) = 48$
$(2)(4)(9) = 72$
Somma: $105 + 48 + 72 = 225$
Risultato:
$\det(A) = 225 - 225 = 0$

La matrice ha determinante nullo → è singolare (le righe sono linearmente dipendenti).
Minore Complementare e Cofattore Prima di introdurre il metodo di Laplace, definiamo due concetti fondamentali:

Minore complementare $M_{ij}$:
Il minore complementare dell'elemento $a_{ij}$ di una matrice $A$ è il determinante della sottomatrice ottenuta eliminando la riga $i$ e la colonna $j$ dalla matrice $A$.

Cofattore (o Complemento Algebrico) $C_{ij}$:
Il cofattore dell'elemento $a_{ij}$ è definito come: $$C_{ij} = (-1)^{i+j} \cdot M_{ij}$$
Il segno $(-1)^{i+j}$ alterna secondo uno schema a scacchiera: $$\begin{bmatrix} + & - & + & - & \cdots \\ - & + & - & + & \cdots \\ + & - & + & - & \cdots \\ - & + & - & + & \cdots \\ \vdots & \vdots & \vdots & \vdots & \ddots \end{bmatrix}$$
Esempio per matrice $3 \times 3$: $$A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}$$
Calcolo di $C_{12}$ (riga 1, colonna 2):

1. Elimino riga 1 e colonna 2: $$M_{12} = \begin{vmatrix} 4 & 6 \\ 7 & 9 \end{vmatrix} = (4)(9) - (6)(7) = 36 - 42 = -6$$
2. Applico il segno: $(-1)^{1+2} = (-1)^3 = -1$
3. Cofattore: $C_{12} = (-1) \cdot (-6) = 6$
Sviluppo di Laplace Il determinante può essere calcolato sviluppando rispetto ad una riga o colonna qualsiasi, usando i cofattori:

Sviluppo rispetto alla prima riga: $$\det(A) = a_{11}C_{11} + a_{12}C_{12} + a_{13}C_{13}$$
dove $C_{ij} = (-1)^{i+j} M_{ij}$ è il cofattore dell'elemento $a_{ij}$, e $M_{ij}$ è il minore complementare (determinante della matrice ottenuta eliminando la riga $i$ e la colonna $j$).

Esempio con la stessa matrice: $$A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix}$$
Sviluppo rispetto alla prima riga:

$C_{11} = (+1) \begin{vmatrix} 5 & 6 \\ 8 & 9 \end{vmatrix} = (5)(9) - (6)(8) = 45 - 48 = -3$

$C_{12} = (-1) \begin{vmatrix} 4 & 6 \\ 7 & 9 \end{vmatrix} = -[(4)(9) - (6)(7)] = -[36 - 42] = 6$

$C_{13} = (+1) \begin{vmatrix} 4 & 5 \\ 7 & 8 \end{vmatrix} = (4)(8) - (5)(7) = 32 - 35 = -3$

$\det(A) = (1)(-3) + (2)(6) + (3)(-3) = -3 + 12 - 9 = 0$
Codice Python (Matrici 3x3)
import numpy as np

# Definizione della matrice 3x3
A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

# Metodo 1: usando numpy
det_numpy = np.linalg.det(A)
print(f"det(A) usando numpy: {det_numpy}")

# Metodo 2: Regola di Sarrus (manuale)
def sarrus(A):
    """Calcola il determinante 3x3 con la regola di Sarrus"""
    # Diagonali discendenti
    pos = (A[0,0]*A[1,1]*A[2,2] +
           A[0,1]*A[1,2]*A[2,0] +
           A[0,2]*A[1,0]*A[2,1])

    # Diagonali ascendenti
    neg = (A[0,2]*A[1,1]*A[2,0] +
           A[0,0]*A[1,2]*A[2,1] +
           A[0,1]*A[1,0]*A[2,2])

    return pos - neg

det_sarrus = sarrus(A)
print(f"det(A) con Sarrus: {det_sarrus}")

# Metodo 3: Sviluppo di Laplace (prima riga)
def laplace_3x3(A):
    """Calcola il determinante 3x3 con sviluppo di Laplace"""
    # Cofattori rispetto alla prima riga
    C11 = A[1,1]*A[2,2] - A[1,2]*A[2,1]
    C12 = -(A[1,0]*A[2,2] - A[1,2]*A[2,0])
    C13 = A[1,0]*A[2,1] - A[1,1]*A[2,0]

    return A[0,0]*C11 + A[0,1]*C12 + A[0,2]*C13

det_laplace = laplace_3x3(A)
print(f"det(A) con Laplace: {det_laplace}")

# Output:
# det(A) usando numpy: -9.51619735392994e-16  (≈ 0)
# det(A) con Sarrus: 0
# det(A) con Laplace: 0
4. Metodo Generale: Riduzione a Forma Triangolare
Teoria Per matrici di ordine $n > 3$, il metodo più efficiente è ridurre la matrice a forma triangolare usando le operazioni elementari sulle righe.

Proprietà chiave:
  • Il determinante di una matrice triangolare è il prodotto degli elementi sulla diagonale principale
  • Scambiare due righe cambia il segno del determinante
  • Moltiplicare una riga per $k$ moltiplica il determinante per $k$
  • Sommare ad una riga un multiplo di un'altra riga non cambia il determinante

Procedimento (Eliminazione di Gauss):
  1. Ridurre la matrice a forma triangolare superiore
  2. Moltiplicare gli elementi sulla diagonale
  3. Tener conto dei cambi di segno dovuti agli scambi di righe
Esempio Numerico
$$A = \begin{bmatrix} 2 & 1 & 3 \\ 4 & -1 & 2 \\ 1 & 2 & 1 \end{bmatrix}$$
Passo 1: $R_2 \leftarrow R_2 - 2R_1$ $$\begin{bmatrix} 2 & 1 & 3 \\ 0 & -3 & -4 \\ 1 & 2 & 1 \end{bmatrix}$$
Passo 2: $R_3 \leftarrow R_3 - \frac{1}{2}R_1$ $$\begin{bmatrix} 2 & 1 & 3 \\ 0 & -3 & -4 \\ 0 & \frac{3}{2} & -\frac{1}{2} \end{bmatrix}$$
Passo 3: $R_3 \leftarrow R_3 + \frac{1}{2}R_2$ $$\begin{bmatrix} 2 & 1 & 3 \\ 0 & -3 & -4 \\ 0 & 0 & -\frac{5}{2} \end{bmatrix}$$
Risultato:
$\det(A) = (2)(-3)(-\frac{5}{2}) = 15$
Codice Python (Metodo Generale)
import numpy as np

def det_gauss(A):
    """
    Calcola il determinante usando eliminazione di Gauss
    con riduzione a forma triangolare
    """
    # Copia della matrice per non modificare l'originale
    U = A.astype(float).copy()
    n = len(U)
    det = 1.0

    for i in range(n):
        # Trova il pivot (elemento massimo in valore assoluto)
        max_row = i + np.argmax(np.abs(U[i:, i]))

        # Se il pivot è zero, il determinante è zero
        if abs(U[max_row, i]) < 1e-10:
            return 0.0

        # Scambia le righe se necessario
        if max_row != i:
            U[[i, max_row]] = U[[max_row, i]]
            det *= -1  # Cambio segno per lo scambio

        # Elimina gli elementi sotto il pivot
        for j in range(i + 1, n):
            factor = U[j, i] / U[i, i]
            U[j, i:] -= factor * U[i, i:]

    # Il determinante è il prodotto della diagonale
    for i in range(n):
        det *= U[i, i]

    return det

# Test con diverse matrici
A = np.array([[2, 1, 3],
              [4, -1, 2],
              [1, 2, 1]])

print("Matrice A:")
print(A)
print(f"\ndet(A) con numpy: {np.linalg.det(A):.4f}")
print(f"det(A) con Gauss: {det_gauss(A):.4f}")

# Matrice 4x4
B = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12],
              [13, 14, 15, 16]])

print("\n\nMatrice B (4x4):")
print(B)
print(f"\ndet(B) con numpy: {np.linalg.det(B):.4f}")
print(f"det(B) con Gauss: {det_gauss(B):.4f}")

# Output:
# Matrice A:
# [[ 2  1  3]
#  [ 4 -1  2]
#  [ 1  2  1]]
#
# det(A) con numpy: 15.0000
# det(A) con Gauss: 15.0000
#
#
# Matrice B (4x4):
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]
#  [13 14 15 16]]
#
# det(B) con numpy: 0.0000
# det(B) con Gauss: 0.0000
5. Proprietà dei Determinanti
Proprietà Fondamentali
  1. $\det(I) = 1$ (determinante della matrice identità)
  2. $\det(AB) = \det(A) \cdot \det(B)$ (proprietà moltiplicativa)
  3. $\det(A^T) = \det(A)$ (determinante della trasposta)
  4. $\det(A^{-1}) = \frac{1}{\det(A)}$ (se $A$ è invertibile)
  5. $\det(kA) = k^n \det(A)$ per una matrice $n \times n$
Proprietà sulle Righe/Colonne
  • Se una riga (o colonna) è nulla, $\det(A) = 0$
  • Se due righe (o colonne) sono uguali, $\det(A) = 0$
  • Se due righe (o colonne) sono proporzionali, $\det(A) = 0$
  • Scambiando due righe (o colonne), il determinante cambia segno
  • Moltiplicando una riga (o colonna) per $k$, il determinante viene moltiplicato per $k$
  • Sommando ad una riga un multiplo di un'altra, il determinante non cambia
Verifica con Python
import numpy as np

A = np.array([[1, 2],
              [3, 4]])

B = np.array([[5, 6],
              [7, 8]])

print("Proprietà 1: det(I) = 1")
I = np.eye(2)
print(f"det(I) = {np.linalg.det(I)}")

print("\nProprietà 2: det(AB) = det(A) * det(B)")
det_A = np.linalg.det(A)
det_B = np.linalg.det(B)
det_AB = np.linalg.det(A @ B)
print(f"det(A) = {det_A:.4f}")
print(f"det(B) = {det_B:.4f}")
print(f"det(AB) = {det_AB:.4f}")
print(f"det(A)*det(B) = {det_A * det_B:.4f}")

print("\nProprietà 3: det(A^T) = det(A)")
det_AT = np.linalg.det(A.T)
print(f"det(A) = {det_A:.4f}")
print(f"det(A^T) = {det_AT:.4f}")

print("\nProprietà 5: det(kA) = k^n * det(A)")
k = 2
n = 2  # dimensione matrice
det_kA = np.linalg.det(k * A)
print(f"k = {k}, n = {n}")
print(f"det({k}A) = {det_kA:.4f}")
print(f"{k}^{n} * det(A) = {k**n * det_A:.4f}")

# Output:
# Proprietà 1: det(I) = 1
# det(I) = 1.0
#
# Proprietà 2: det(AB) = det(A) * det(B)
# det(A) = -2.0000
# det(B) = -2.0000
# det(AB) = 4.0000
# det(A)*det(B) = 4.0000
#
# Proprietà 3: det(A^T) = det(A)
# det(A) = -2.0000
# det(A^T) = -2.0000
#
# Proprietà 5: det(kA) = k^n * det(A)
# k = 2, n = 2
# det(2A) = -8.0000
# 2^2 * det(A) = -8.0000
6. Applicazioni dei Determinanti
Invertibilità di Matrici Una matrice quadrata $A$ è invertibile se e solo se $\det(A) \neq 0$.

Questa è una condizione fondamentale per:
  • Calcolare l'inversa di una matrice
  • Determinare l'esistenza e unicità della soluzione di un sistema lineare
Teorema di Cramer Il determinante è utilizzato nel Teorema di Cramer per risolvere sistemi lineari:

Se $\det(A) \neq 0$, la soluzione del sistema $A\mathbf{x} = \mathbf{b}$ è: $$x_i = \frac{\det(A_i)}{\det(A)}$$ dove $A_i$ è la matrice ottenuta sostituendo la colonna $i$ con $\mathbf{b}$.
Area e Volume In 2D: L'area del parallelogramma formato da due vettori $\mathbf{u}$ e $\mathbf{v}$ è: $$\text{Area} = |\det([\mathbf{u} \ \mathbf{v}])|$$
In 3D: Il volume del parallelepipedo formato da tre vettori è: $$\text{Volume} = |\det([\mathbf{u} \ \mathbf{v} \ \mathbf{w}])|$$