Matematica Applicata · Matrici

Matrici e sistemi lineari

Le matrici sono il linguaggio naturale per descrivere sistemi lineari di equazioni. In questa pagina vediamo cosa significa risolvere Ax = b, con esempi numerici piccoli ma realistici, e come questo si collega a problemi di regressione e a Python.

Torna all'indice generale

1. Cosa significa Ax = b

Scrivere Ax = b è un modo compatto per rappresentare un sistema di equazioni lineari. A è una matrice di coefficienti, x è il vettore delle incognite, b è il vettore dei termini noti.

Esempio in parole:
  • tre incognite x1, x2, x3 (per esempio tre flussi o tre correnti);
  • ogni equazione è una combinazione lineare di x1, x2, x3 uguale a un numero noto;
  • la matrice A raccoglie i coefficienti delle incognite, b i valori noti sul lato destro.

Pensare in termini di Ax = b permette di usare algoritmi e librerie generiche, indipendenti dal contesto specifico (reti elettriche, bilanci di massa, problemi di fitting, ecc.).

2. Un esempio numerico 3×3

Consideriamo un piccolo sistema lineare con tre equazioni e tre incognite:

Sistema:
  • 2 x1 + x2 = 5
  • x1 + 3 x2 + x3 = 10
  • 2 x2 + 4 x3 = 8
In forma di matrice A, vettore x e vettore b abbiamo:
  • A = [[2, 1, 0], [1, 3, 1], [0, 2, 4]];
  • x = [x1, x2, x3]^T;
  • b = [5, 10, 8]^T.

Risolvere il sistema significa trovare i numeri x1, x2, x3 che rendono vere tutte e tre le equazioni contemporaneamente.

3. Metodi diretti: eliminazione di Gauss

Un metodo classico per risolvere Ax = b è l'eliminazione di Gauss: trasformiamo passo dopo passo il sistema in uno equivalente ma più semplice, finché non arriviamo a una forma in cui le incognite si possono ricavare all'indietro (back-substitution).

Idee chiave dell'eliminazione di Gauss:
  • scambiare l'ordine delle equazioni se necessario (per avere pivot non nulli);
  • sottrarre multipli di un'equazione da un'altra per annullare coefficienti sotto il pivot;
  • alla fine otteniamo una matrice triangolare superiore, da cui ricavare x3, poi x2, poi x1.

Nella pratica non implementiamo noi questi passi a mano per sistemi grandi: usiamo librerie numeriche che impiegano varianti stabili ed efficienti (fattorizzazioni LU, metodi a blocchi, ecc.).

4. Condizionamento e sensibilità

Non tutti i sistemi lineari sono uguali dal punto di vista numerico. Alcune matrici A sono ben condizionate, cioè piccole variazioni nei dati (in b o nei coefficienti) producono piccole variazioni nella soluzione x. Altre sono mal condizionate: piccolissimi errori possono amplificarsi molto.

Intuizione pratica:
  • se due equazioni sono quasi multipli l'una dell'altra, il sistema è quasi "degenerato";
  • in questi casi, anche piccoli errori di misura nei dati possono produrre soluzioni molto diverse;
  • il numero di condizionamento di A è un indice che misura questa sensibilità.

Capire il condizionamento è importante quando lavoriamo con dati reali e misure rumorose: ci dice quanto ci possiamo fidare della soluzione numerica di Ax = b.

5. Matrici in Python e regressione

In Python, librerie come NumPy permettono di creare matrici e risolvere sistemi lineari in poche righe. Per il sistema A x = b sopra, basta costruire A e b come array e chiamare una routine di soluzione.

Collegamento con la regressione lineare:
  • nei modelli lineari, i parametri si possono ottenere (in forma ideale) risolvendo un sistema del tipo
  • (X^T X) w = X^T y, dove X è la matrice dei dati e y il vettore dei target;
  • anche qui entra in gioco il condizionamento: se X^T X è mal condizionata, la stima di w è instabile.

In una pagina con esempi di codice potremo mostrare come usare numpy.linalg.solve per risolvere piccoli sistemi e come verificare la qualità numerica delle soluzioni con il numero di condizionamento.