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.
- 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:
- 2 x1 + x2 = 5
- x1 + 3 x2 + x3 = 10
- 2 x2 + 4 x3 = 8
- 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).
- 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.
- 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.
- 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.