Sei sulla pagina 1di 12

ALGORITMO DI GAUSS

1. Origine dell’algoritmo di Gauss


Cominciamo da un esempio di risoluzione di sistema lineare tramite il metodo di sostituzione.
1.1. Esempio numerico. Consideriamo il seguente sistema lineare, nelle incognite x, y, z:

 2x − 3y + z = 5
7x + y − 3z = −2
−x + 4y + 2z = 1

Utilizziamo, per risolverlo, il metodo di sostituzione: ricaviamo x dalla prima equazione, ottenendo
3 1 5
x= y− z+
2 2 2
e sostituiamo nella seconda e terza equazione, moltiplicandole entrambe per 2, cosı̀ da avere

 2x − 3y + z = 5
23y − 13z = −39
5y + 5z = 7 .

A questo punto, ricaviamo y dalla seconda equazione, ottenendo


13 39
y= z−
23 23
e sostituiamo nella terza equazione, moltiplicandola per 23/4, ottenendo

 2x − 3y + z = 5
23y − 13z = −39
45z = 89 .

Ora, ricaviamo z dalla terza equazione e sostituiamone il valore nella seconda e nella terza:

 2x − 3y = 136/45
23y = −598/45
z = 89/45

dalla seconda cosı̀ possiamo ricavare y e sostituirlo nella prima:



 2x = 58/45
y = −26/45
z = 89/45 .

ed infine ricaviamo x dalla prima equazione:



 x = 29/45
y = −26/45
z = 89/45 .

1.2. Cosa abbbiamo fatto? Ricavare la x dalla prima equazione e sostituirla nella seconda, per poi moltiplicare la
seconda per 2 (per eliminare il denominatore), vuol dire sostituire alla seconda equazione la seguente:
2 · (II equazione) − 7 · (I equazione)
cioè
2(7x + y − 3z) − 7(2x − 3y + z) = 2(−2) − 7(5)
14x + 2y − 6z − 14x + 21y − 7z = −4 − 35
23y − 13z = −39 .
I coefficienti 2 e −7 sono ricavati (in maniera ovvia) dai coefficienti della x (la variabile che vogliamo eliminare) nelle
due equazioni. Dunque, il primo passaggio di sostutuire la x nella seconda e nella terza equazione (ed eliminare i
denominatori) equivale a rimpiazzare la seconda e la terza equazione nel seguente modo:
II equazione 7→ 2 · (II equazione) − 7 · (I equazione)
III equazione 7→ 2 · (III equazione) + (I equazione) ,
mentre sostituire la y nella terza equazione dalla seconda è equivalente a
III equazione 7→ 23 · (III equazione) − 5 · (II equazione)
1
2 ALGORITMO DI GAUSS

e poi moltiplicare per 1/180 la terza equazione per ottenere z.


Ora, sostutuire il valore di z nella seconda e nella prima equazione equivale a
II equazione 7→ II equazione + 13 · (III equazione)
I equazione 7→ I equazione − ·(III equazione)
e ricavare la y dalla seconda ora vuol dire moltiplicare la seconda per 1/23. Infine, sostituire la y nella prima equivale
a
I equazione 7→ I equazione + 3 · (II equazione)
e cosı̀, moltiplicando la prima equazione per 1/2, otteniamo le soluzioni.
1.3. Mosse dell’algoritmo di Gauss. Quello che abbiamo usato nel risolvere il sistema di cui sopra è il sostituire
un’equazione con un suo multiplo (non nullo) più un multiplo di un’altra equazione (che può anche essere nullo).
Dunque
j ma equazione 7→ a(j ma equazione) + b(k ma equazione)
con a ̸= 0.
Un’altra possibilità che dobbiamo lasciarci è quella di scambiare tra loro le equazioni, per ordinarle nel modo che ci
torna meglio, di modo da poter lavorare dall’alto verso il basso nel sostituire le variabili e poi dal basso verso l’alto
per risolvere il sistema.
Un sistema in cui, in ogni successiva equazione, compaiono sempre meno variabili, è detto a scala (potendo ordinare le
variabili di modo che, effettivamente, ogni equazione inizi ”più a destra” della precedente). Una volta che un sistema
è in quella forma, sappiamo risolverlo anche senza una ricetta algoritmica, semplicemente ricavando le variabili dal
fondo verso l’alto.
Possiamo dunque descrivere la nostra risoluzione come il seguente algoritmo, noto come algoritmo di Gauss:
Scopo : ridurre il sistema a scala tramite le seguenti due mosse
Mossa 1 : scambiare due equazioni
Mossa 2 : sostituire un’equazione con un suo multiplo non nullo più il multiplo (anche nullo) di un’altra equazione.
Ovviamente, fissato l’ordine delle variabili, possiamo riscrivere tutto in termini matriciali, dando un’analoga definizione
di matrice a scala e quindi ottenendo la forma matriciale dell’algoritmo di Gauss:
Scopo : ridurre la matrice a scala tramite le seguenti due mosse
Mossa 1 : scambiare due righe
Mossa 2 : sostituire una riga con un suo multiplo non nullo più il multiplo (anche nullo) di un’altra riga.
Ad esempio, la risoluzione del sistema svolta precedentemente assume questa forma:
   
2 −3 1 5 2 −3 1 5
7 1 −3 −2 a −→a a 0 23 −13 −39 −→ 5
II 7→2II −7I III a 7→ 23 a
4 III − 4 II
a
−1 4 2 1 III a 7→2III a +I a 0 5 5 7
   
2 −3 1 5 2 −3 0 136/45
→ 0 23 −13 −39 −→ 0 23 0 −598/45 −→
III a 7→ 45
1
III a II a 7→ 23
1
II a
0 0 45 89 II a 7→II a +13III a
0 0 1 89/45 I a 7→I a +3II a
I a 7→I a −III a
   
2 0 0 58/45 1 0 0 29/45
→ 0 1 0 −26/45 −→ 0 1 0 −26/45 .
I a 7→ 12 I a
0 0 1 89/45 0 0 1 89/45
Dopo i primi due passaggi, la matrice era ridotta a scala. I passaggi successivi sono serviti a ”far comparire” le
soluzioni del sistema, sostituendo all’indietro.
Osservazione 1.1. L’algoritmo di Gauss lavora separatamente su ogni colonna: gli elementi di una colonna non
influenzano quelli di un’altra (al contrario di quello che succede, ovviamente, alle righe). Dunque se eliminiamo,
aggiungiamo o modifichiamo una colonna alla matrice di partenza e rifacciamo le stesse mosse di Gauss otterremo
alla fine lo stesso risultato, a parte la colonna che abbiamo modificato.
L’osservazione appena fatta, apparentemente innocua, ci dice ad esempio che se adesso volessimo risolvere il sistema

 2x − 3y + z = −1
7x + y − 3z = 3
−x + 4y + 2z = 0

ci basterebbe rifare sul vettore dei termini noti le mosse di Gauss usate in precedenza:
       
−1 −1 −1 −23/45
3 −→  13  −→ 5  13  −→  299/45 
II a 7→2II a −7I a III a 7→ 23 III a − 4 II a III a 7→ 45
1
III a
0 a
III 7→2III +I a a −1 4 −22 II a 7→II a +13III a −22/45
I a 7→I a −III a
ALGORITMO DI GAUSS 3

   
16/45 8/45
−→  13/45  −→  13/45 
II a 7→ 23
1
II a a 1 a

I a 7→I a +3II a
−22/45 I 7→ 2 I −22/45
Dunque, la soluzione di questo secondo sistema è x = 8/45, y = 13/45, z = −22/45.

2. Pivot e condizioni di compatibilità


In una matrice ridotta a scala (in cui quindi ogni riga inizia con più zeri della precedente), il primo elemento non
nullo di ogni riga è chiamato pivot. Nell’esempio della sezione precedente, ogni riga ed ogni colonna della matrice dei
coefficienti conteneva un pivot.
Vediamo ora un esempio in cui ciò non succede; consideriamo il sistema


 2x − y + z − 3w = 0
x + 3y + z − 2w = −1


 x − 4y − w = 1
3x + y − 5z + w = 2

2.1. Sistemi con infinite soluzioni. Ne scriviamo la matrice completa ed applichiamo Gauss:
     
2 −1 1 −3 0 2 −1 1 −3 0 2 −1 1 −3 0
1 3 1 −2 −1 0 7 1 −1 −2  −→ 0 7
 1 −1 −2
1 −4 0 −1 1  −→ 0 −7 −1
    −→
1 2 0 0 0 0 0
3 1 −5 1 2 0 5 −13 11 4 0 0 −96 82 38
 
2 −1 1 −3 0
0 7 1 −1 −2
→  0 0 −48 41 19 

0 0 0 0 0
Esercizio 1. Scrivere le mosse dell’algoritmo di Gauss che sono state utilizzate.
In blu vediamo i 3 pivot. Notate che nella quarta colonna non c’è un pivot e la quarta riga è composta di soli zeri.
Dunque, l’algoritom di Gauss ha trasformato il nostro sistema in uno con 3 equazioni e 4 incognite. Volendo ora
procedere alla sostituzione all’indietro, la prima variabile che ricaveremmo sarebbe z, in funzione di w; scriveremmo
cioè
41 19
z= w−
48 48
e poi sostituiremmo questa espressione nelle equazioni precedenti eliminando la variabile z. Questo corrisponde ad
usare la terza riga (cioè la terza equazione) per eliminare le entrate che stanno sopra (quindi nelle equazioni precedenti)
al pivot della terza colonna (corrispondente alla variabile z).
Operiamo quindi le seguenti mosse:
48 a 1
II a 7→ II + III a I a 7→ 48I a + III a
7 7
ottenendo  
96 −48 0 −103 19
0
 48 0 −1 −11 
0 0 −48 41 19 
0 0 0 0 0
a a a
e proseguiamo con la mossa I 7→ I + II ottenendo
 
96 0 0 −104 8
 0 48
 0 −1 −11 
0 0 −48 41 19 
0 0 0 0 0
Ora dividiamo ogni riga per il suo pivot, ottenendo
 
1 0 0 −13/12 1/12
0 1 0
 −1/48 −11/48
0 0 1 −41/48 −19/48
0 0 0 0 0
Se ora riconduciamo tutto a equazioni, vediamo che possiamo ricavare le variabili x, y, z in termini di w. Dunque,
fissiamo w come parametro libero: per ogni t ∈ R, otterremo una soluzione ponendo
1
+ 13


 x = 12 12 t
11 1
y = − 48 + 48 t

19 41

 z = − 48 + 48 t
w = t

4 ALGORITMO DI GAUSS

ovvero, l’insieme delle soluzioni è descritto come


    

 1/12 13/12 

−11/48  1/48 
  
  + t  : t∈R .
  19/48  41/48 
 
0 1
 

Dunque, le colonne senza pivot nella matrice dei coefficienti corrispodono a variabili che possono essere fissate come
parametri, quando andiamo a scrivere l’insieme delle soluzioni.
Osservazione 2.1. Nello stesso spirito dell’Osservazione 1.1 e dell’esempio successivo, se volessimo risolvere il si-
stema con un diverso vettore dei termini noti, basterebbe applicare le stesse mosse di Gauss al solo nuovo vettore dei
termini noti.
Questo in particolare dice che eventuali soluzioni del nuovo sistema saranno comunque della forma
    

 ⋆ 13/12 

⋆  1/48 
  
  + t  : t∈R .
 ⋆ 41/48 
 
0 1
 

dove il vettore con i simboli ⋆ sarà ottenuto dal vettore dei termini noti tramite le mosse di Gauss appena descritte.
2.2. Sistemi impossibili. Notiamo che, nell’Osservazione 2.1, abbiamo in qualche modo assunto che, dopo le mosse
di Gauss usate sul sistema, il nuovo termine noto assumesse la forma
 

⋆
 
⋆
0
ovvero vi comparisse uno zero in ultima posizione. Questo non è ovvio e, in effetti, non succede per ogni possibile
termine noto. Ad esempio 

 2x − y + z − 3w = 0
x + 3y + z − 2w = −1


 x − 4y − w = 2
3x + y − 5z + w = 2

se riduciamo a scala con le stesse mosse (che avete trovato nell’Esercizio 1) la matrice del sistema, otteniamo
     
2 −1 1 −3 0 2 −1 1 −3 0 2 −1 1 −3 0
1 3 1 −2 −1 0 7 1 −1 −2  −→ 0 7
 1 −1 −2
1 −4 0 −1 2  −→ 0 −7 −1
    −→
1 4   0 0 0 0 2
3 1 −5 1 2 0 5 −13 11 4 0 0 −96 82 38
 
2 −1 1 −3 0
0 7 1 −1 −2
→  0 0 −48 41 19 

0 0 0 0 2
Questa matrice corrisponde a un sistema in cui l’ultima equazione è 0 = 2, che è chiaramente impossibile. Un sistema è
risolubile se e solo se, dopo la riduzione a scala, non compaiono pivot nella colonna dei termini noti. Equivalentemente,
dopo la riduzione a scala, una riga nulla della matrice dei coefficienti deve corrispondere ad una entrata nulla del vettore
dei termini noti. Queste si dicono, a volte, condizioni di compatibilità.
Ci si potrebbe chiedere, per quali termini noti il sistema dato sopra è risolubile? Per tutti i vettori v ∈ R4 in cui, dopo
aver applicato le mosse trovate nell’Esercizio 1, la quarta componente diventa nulla.
       
a a a a
  −→  2b − a  −→  2b − a  −→  2b − a 
b      
c  2c − a   2b + 2c − 2a  7d − 5b − 8a
d 2d − 3a 14d − 10b − 16a b+c−a
Il vettore dato produrrà un sistema risolubile, se usato come termine noto, se e solo se a = b + c (condizione rispettata
dal primo vettore utilizzato, ma non dal secondo). Dunque, trattando questa singola equazione come un sistema
lineare con 1 equazione e 4 variabili, già ridotto a scala, troviamo un pivot sulla prima colonna, in corrispondenza
dell’incognita a, e possiamo prendere le altre incognite b, c, d come parametri liberi; ovvero, l’insieme dei termini noti
per cui il sistema è risolubile può essere descritto come
       

 1 1 0 

1 0 0
   
c1   + c2   + c3   : c1 , c2 , c3 ∈ R


 0  1  0  

0 0 1
 
ALGORITMO DI GAUSS 5

3. Utilizzi dell’algoritmo di Gauss


Vediamo ora alcune domande a cui si può rispondere riducendo opportunamente a scala una matrice, oltre ovviamente
la risoluzione dei sistemi lineari di cui abbiamo già discusso.
3.1. Calcolo del rango. Il rango di una matrice è il numero di pivot che compaiono dopo una riduzione a scala,
quindi per calcolare rk A si riduce a scala A e si contano i pivot.
3.2. Calcolo dell’inversa. Una matrice A ∈ Matn,n (K) tale che rkA = n è invertibile, cioè esiste B ∈ Matn,n (K)
tale che BA = AB = I (dove I ∈ Matn,n (K) è la matrice identica). Per calcolare B si procede come segue:
(1) si costruisce la matrice (A|I) ∈ Matn,2n (K) ottenuta affiancando le matrici A e I
(2) si riduce a scala tale matrice e, per ipotesi, compariranno n pivot sulle n colonne di A
(3) si continua con l’algoritmo sostituendo all’indietro, come nella risoluzione di un sistema lineare, fino ad arrivare
alla forma (I|B)
(4) la matrice B che compare a destra è l’inversa di A.
3.3. Estrazione di una base e dimensione di uno Span. Siano v1 , . . . , vk ∈ Kn ; per trovare una base di V =
Span{v1 , . . . , vk } ⊆ Kn , si procede come segue:
(1) si costruisce la matrice (v1 | · · · |vk ) ∈ Matn,k (K), ottenuta affiancando i vettori dati
(2) la si riduce a scala, ottenendo r ≤ k pivot, posizionati sulle colonne h1 , . . . , hr
(3) allora dim V = r
(4) e una base di V è {vh1 , . . . , vhr } (cioè i generatori originali che corrispondono alle colonne su cui compariranno
i pivot).
3.4. Completamento ad una base. Siano v1 , . . . , vk ∈ Kn vettori linearmente indipendenti; per trovare altri vettori
vk+1 , . . . , vn che li completino a una base di Kn , si procede come segue:
(1) si sceglie una base w1 , . . . , wn di Kn (ad esempio la base canonica)
(2) si costruisce la matrice (v1 | · · · |vk |w1 | · · · |wn ) ∈ Matn,k+n (K)
(3) la si riduce a scala, ottenendo n pivot (poiché le colonne sono generatori di Kn ), posizionati sulle colonne
1, . . . , k, hk+1 , . . . , hn
(4) l’insieme {v1 , . . . , vk , wh+1 , . . . , whn } è una base di Kn che completa l’insieme di vettori linearmente indipen-
denti assegnato.
3.5. Determinare se un vettore appartiene ad uno Span. Siano v1 , . . . , vk , w ∈ Kn ; per determinare se w ∈
V = Span{v1 , . . . , vk } ⊆ Kn , si procede come segue:
(1) si costruisce la matrice (v1 | · · · |vk |w) ∈ Matn,k+1 (K)
(2) la si riduce a scala
(3) se nell’ultima colonna non compare un pivot, w ∈ V
(4) se nell’ultima colonna compare un pivot, w ̸∈ V .
3.6. Trovare le equazioni cartesiane di uno Span. Siano v1 , . . . , vk ∈ Kn ; per trovare delle equazioni cartesiane
di V = Span{v1 , . . . , vk } ⊆ Kn , si procede come segue:
t
(1) si costruisce la matrice (v1 | · · · |vk |x) ∈ Matn,k+1 (K) dove x = (x1 , . . . , xn ) è un vettore di incognite
(2) si applicano le mosse di Gauss finché le prime k colonne non sono a scala
(3) si prendono gli elementi della k + 1-esima colonna che corrispondono a righe nulle nelle prime k colonne e
questi daranno le equazioni di V .

4. Proprietà dell’algoritmo di Gauss


In questa sezione dimostreremo, in maniera più possibile autocontenuta, varie proprietà dell’algoritmo di Gauss che
giustificano le procedure descritte nella sezione precedente. Ripartiamo dando una definizione formulata in termini più
combinatorici dell’algoritmo e del suo obiettivo, che saranno gli unici strumenti che useremo per dimostrare i risultati
che vogliamo.
Le dimostrazioni delle prossime pagine possono essere riscritte tramite la teoria delle applicazioni lineari in una forma
più compatta e che si affida meno ai calcoli in coordinate.
4.1. Algoritmi di Gauss e di Gauss-Jordan e sistemi lineari. Sia A ∈ Matn,k (K) una matrice n×k a coefficienti
in K; scriviamo  
R1
 R2 
A= . 
 
 .. 
Rn
dove R1 , . . . , Rn ∈ Mat1,k (K), ovvero vettori riga, cioè le trasposte di vettori di Kk .
6 ALGORITMO DI GAUSS

Definizione 4.1. Consideriamo un vettore riga v ∈ Mat1,k (K) e scriviamo v = (v1 , . . . , vk ). Indichiamo con p(v) il
massimo j ∈ {0, . . . , n} tale che vh = 0 per ogni h ≤ j. Definiamo p(A) = min{p(Rh ) : h = 1, . . . , n}.
In pratica, p(v) è il numero di zeri con cui comincia il vettore riga v; notiamo, ad esempio, che p(A) = n se e solo se
A = 0.
Definizione 4.2. Diciamo che una matrice A come sopra è a scala se esiste j ∈ {1, . . . , n + 1} tale che
p(Rh ) < p(Rh+1 ) se h < j
p(Rh ) = n se h ≥ j
L’algoritmo di Gauss ha come obiettivo il ridurre una matrice a scala e contempla due mosse:
Mossa 1: scambiare due righe
Mossa 2: sostituire alla riga Ri la riga aRi + bRj con a, b ∈ K, a ̸= 0, i ̸= j.
Proposizione 4.3. Tramite le mosse 1 e 2 si può ridurre qualunque matrice a scala.
Dimostrazione. Dimostriamo per induzione su n che l’algoritmo di Gauss termina a partire da una matrice A n × k
producendo una matrice a scala S con p(S) = p(A).
Se n = 1, la matrice è già a scala. Supponiamo n > 1.
Se p(Rh ) = n per ogni h ∈ {1, . . . , k}, la matrice è già a scala (è la matrice nulla). Altrimenti, consideriamo il più
piccolo h tale che p(Rh ) = p(A); se h ̸= 1, applichiamo la Mossa 1, scambiando la riga Rh e la riga R1 . Indichiamo
con A′ la matrice cosı̀ ottenuta e con R1 ′ , . . . , Rn ′ le sue righe.
Ovviamente p(A) = p(A′ ); denotiamo tale intero con j. Sia ora c la j + 1-esima componente di R1′ e siano b2 , . . . , bn
le j + 1-esime componenti di R2′ , . . . , Rn′ . Notiamo che c ̸= 0 per definizione di j.
Per h = 2, . . . , n, applichiamo la Mossa 2 sostituendo alla riga Rh′ la riga
bh ′
Rh′ − R .
c 1
Otteniamo cosı̀ una matrice A′′ , con righe R1′′ , . . . , Rn′′ in cui il j + 1-esimo elemento di Rh′′ è zero per h = 2, . . . , n e
dunque p(Rh′′ ) ≥ j + 1 per h = 2, . . . , n, mentre p(R1′′ ) = p(R1′ ) = j, dunque p(A′′ ) = p(A′ ) = p(A).
Ora, sia B la matrice (n − 1) × k
R2′′
 
 .. 
 .  ,
Rn′′
notiamo che p(B) ≥ j + 1. Per ipotesi induttiva, esiste una sequenza di mosse dell’algoritmo di Gauss che riduce B
ad una matrice a scala S ′ con p(S ′ ) = p(B) ≥ j + 1. Questo vuol dire che la matrice
 ′′ 
R1
 
S=  S  ′

è ridotta a scala ed è stata ottenuta da A tramite mosse dell’algoritmo di Gauss. Inoltre p(S) = min{j, p(S ′ )} = j =
p(A). □
Esercizio 2. Si noti come quello descritto è l’usuale algoritmo di Gauss.
La prima applicazione del metodo di Gauss è la risoluzione dei sistemi lineari; il risultato alla base di tale utilizzo è il
seguente.
Teorema 4.4. Siano A ∈ Matn,k e b ∈ Kn ; sia M la matrice n × (k + 1) ottenuta affiancando A e b, cioè M =
(A|b) ∈ Matn,k+1 (K). Se M ′ = (A′ |b′ ) è ottenuta da M tramite le mosse dell’algoritmo di Gauss, allora
{x ∈ Kk : Ax = b} = {x ∈ Kk : A′ x = b′ } ,
ovvero i sistemi lineari Ax = b e A′ x = b′ sono equivalenti (ovvero, hanno le stesse soluzioni).
Dimostrazione. Innanzitutto notiamo che le mosse dell’algoritmo di Gauss sono invertibili:
• l’inverso della Mossa 1 è essa stessa
• l’inverso di Ri 7→ aRi + bRj è Ri 7→ a−1 Ri − a−1 bRj (ha senso perché per ipotesi a ̸= 0).
Dunque, se tramite le mosse dell’algoritmo di Gauss possiamo andare da una matrice M ad una matrice M ′ , possiamo
anche fare il contrario.
Siano ora
S = {x ∈ Kk : Ax = b} S ′ = {x ∈ Kk : A′ x = b′ }
con M ′ = (A′ |b′ ) ottenuta da M = (A|b) tramite mosse dell’algoritmo di Gauss.
ALGORITMO DI GAUSS 7

In particolare, supponiamo che M ′ sia ottenuta da M tramite la mossa 1, applicata alle righe i e j. Chiamando, come
sopra R1 , . . . , Rn le righe di A, b1 , . . . , bn le componenti di b e nel modo ovvio le righe di A′ e le componenti di b′ , si
ha che
Ri′ = Rj Rj′ = Ri Rh′ = Rh se h ̸∈ {i, j}
b′i = bj b′j = bi b′h = bh se h ̸∈ {i, j}
e dunque, se x ∈ S, allora
• Ri x = bi ovvero Rj′ x = b′j
• Rj x = bj ovvero Ri′ x = b′i
• Rh x = bh se h ̸∈ {i, j} ovvero Rh′ x = b′h se h ̸∈ {i, j}
dunque x ∈ S ′ .
Se invece M ′ è ottenuta da M tramite la mossa 2, sulle righe i, j con coefficienti a, b, si ha
Ri′ = aRi + bRj Rh′ = Rh se h ̸= i

b′i = abi + bbj b′h = bh seh ̸= i


e dunque, se x ∈ S, allora
• Rh x = bh se h ̸= i, ovvero Rh′ x = b′h se h ̸= i
t
• Ri′ x = (aRi + bRj ) = aRi x + bRj x = abi + bbj = b′i
quindi x ∈ S ′ .
Dunque S ⊆ S ′ , ma i ruoli di S ed S ′ possono essere scambiati senza problemi, poiché l’algoritmo di Gauss è invertibile.
Dunque S = S ′ □

Definizione 4.5. Sia S ∈ Matn,k (K) una matrice ridotta a scala; per ogni riga Ri di S non nulla, definiamo il pivot
della riga Ri come il p(Ri ) + 1-esimo elemento della riga (ovvero il primo elemento non nullo da sinistra).
Ovviamente, la definizione di pivot può essere data in qualunque matrice, ma, di solito, ha un’utilità solo in matrici
che presentano una struttura a scala.
Definizione 4.6. Una matrice S ∈ Matn,k si dice a scala ridotta se le colonne che contengono i pivot sono elementi
della base canonica di Kn .
Proposizione 4.7. Sia S ∈ Matn,k una matrice a scala; tramite le mosse dell’algoritmo di Gauss posso portarla in
forma a scala ridotta.
Dimostrazione. Siano R1 , . . . , Rn le righe di S e definiamo mh = p(Rh ) + 1, di modo che la colonna mh -esima di S
contenga l’h-esimo pivot (se mh ≤ n).
Chiamato r il più grande h tale che mh ≤ n, scriviamo la colonna mr -esima come
 
b1
 .. 
 . 
 
br−1 
 
 ar 
 
 0 
 
 . 
 .. 
0
e consideriamo le mosse:
Ri 7→ Ri − a−1
r bi Rr se i < r .
Rr 7→ a−1
r Rr

Queste mosse lasciano la matrice a scala, non modificano le prime mr − 1 colonne e fanno sı̀ che la mr -esima colonna
diventi er (r-esimo elemento della base canonica di Kn ).
Ora, consideriamo r−1 e prendiamo la colonna mr−1 -esima della matrice ottenuta dalle mosse precedenti e applichiamo
le stesse mosse, riferite però alla colonna mr−1 -esima. E cosı̀ via. □

Esercizio 3. E’ un utile esercizio provare a riscrivere la dimostrazione precedente come una induzione formale (simil-
mente a quanto abbiamo fatto per dimostrare che le mosse dell’algoritmo di Gauss possono ridurre a scala qualunque
matrice).
L’algoritmo che, utilizzando le mosse 1 e 2, ha come obiettivo il ridurre in forma a scala ridotta una matrice è a volte
detto algoritmo di Gauss-Jordan.
8 ALGORITMO DI GAUSS

4.2. Inversa di una matrice. La giustificazione della procedura per trovare l’inversa di una matrice è, a questo
punto, abbastanza semplice.
Consideriamo le matrici A, B ∈ Matn,n (K) tali che AB = BA = I; scriviamo
 
R1
 R2 
A= .  B = (C1 | · · · |Cn )
 
 . .
Rn
con Rj ∈ Mat1,n (K) e Cj ∈ Matn,1 (K) per j = 1, . . . , n. Dalla relazione AB = I si ha che

0 se i ̸= j
Ri · Cj =
1 se i = j
ovvero ACj = ej per j = 1, . . . , n. Quindi per trovare Cj ci basta fare Gauss-Jordan sulla matrice completa (A|ej ) e
nell’ultima colonna troveremo Cj , una volta che al posto della matrice A abbiamo ottenuto l’identità; ma a seguito
dell’Osservazione 1.1, possiamo affiancare la matrice A con tutti gli elementi della base canonica, eseguire le stesse
mosse di Gauss e ottenere tutte le colonne di B.
La matrice ottenuta affiancando in ordine i vettori della base canonica è proprio l’identità e dunque, trasformando
(A|I) con le mosse di Gauss nella forma a scala ridotta (I|B), le colonne della matrice B saranno le soluzioni di
Ax = ej , ovvero saranno le colonne dell’inversa di A. Quindi B = A−1 .
4.3. Immagine di una matrice. Ricordiamo che, data A ∈ Matn,k (K), le possiamo associare l’applicazione lineare
LA : Kk → Kn definita come LA (x) = Ax.
Definizione 4.8. Data A ∈ Matn,k , l’ immagine di A è l’immagine dell’applicazione lineare LA , ovvero il sottospazio
vettoriale
Im A = {Ax : x ∈ Kk } ⊆ Kn .
Il fatto che l’immagine sia un sottospazio vettoriale non è parte della definizione, ma va dimostrato (ed è stato
dimostrato in precedenza).
Lemma 4.9. Data A ∈ Matn,k , siano C1 , . . . , Ck ∈ Kn le colonne di A, allora
Im A = Span{C1 , . . . , Ck } .
Dimostrazione. Per definizione, se y ∈ Im A ,y = Ax per x ∈ Kk , dunque
y = Ax = x1 C1 + . . . + xk Ck ∈ Span{C1 , . . . , Ck } .

L’algoritmo di Gauss ci permette di trovare una base dell’immagine.
Proposizione 4.10. Data A ∈ Matn,k , riduciamola a scala tramite l’algoritmo di Gauss e supponiamo di trovare i
pivot sulle colonne Cp1 , . . . , Cpr , allora queste formano una base di Im A.
Dimostrazione. Dimostriamo innanzitutto che tali colonne sono indipendenti. Dati cp1 , . . . , cpr ∈ K, definiamo x =
cp1 ep1 + . . . + cpr epr ∈ Kk , dove e1 , . . . , ek è la base canonica. Allora
cp1 Cp1 + . . . + cpr Cpr = Ax
e dunque la combinazione lineare fa 0 se e solo se Ax = 0, se e solo se Sx P= 0, dove S è una matrice in forma a scala
r
ridotta, ottenuta tramite l’algoritmo di Gauss-Jordan. Ma allora Sx = h=1 cph eh , poiché la ph -esima colonna di S
è eh ; quindi Sx = 0 se e solo se cph = 0 per h = 1, . . . , r. Il che dimostra che le colonne Cp1 , . . . , Cpr sono linearmente
indipendenti.
Ora mostriamo che, dato m ∈ L, si ha
Cm ∈ Span{Cp1 , . . . , Cpr } .

Indicando con Cm la m-esima colonna di S, abbiamo che, per definizione di forma a scala ridotta,

Cm ∈ Span{eh : ph < m} ⊆ Span{e1 , . . . , er }
e dunque esistono c1,m , . . . , cr,m ∈ K tali che

Cm = c1,m e1 + . . . + cr,m er
ovvero il vettore
r
X
x = −em + ch,m eph
h=1
appartiene a ker S, cioè Sx = 0, ma allora Ax = 0; dunque
−Cm + c1,m Cp1 + . . . + cr,m Cpr = 0
ALGORITMO DI GAUSS 9

ovvero
Cm = c1,m Cp1 + . . . + cr,m Cpr .
Dunque, grazie al Lemma 4.9,
Im A = Span{C1 , . . . , Ck } = Span{Cp1 , . . . , Cpr } .
Il che dimostra che le colonne su cui compariranno i pivot sono una base dell’immagine. □
Da questa proposizione segue che il numero di pivot che compaiono in una riduzione a scala di una matrice è
indipendente dalle mosse eseguite.
Definizione 4.11. Data A ∈ Matn,k (K), si dice rango di A il numero di pivot che compaiono in una qualsiasi
riduzione a scala di A tramite l’algoritmo di Gauss e si denota con rkA.
Possiamo quindi riformulare la proposizione come segue.
Corollario 4.12. Data A ∈ Matn,k (K), si ha
dim Im A = rk A .
Concludiamo con un risultato sullo spazio generato dalle righe.
Teorema 4.13. Sia A ∈ Matn,k (K), allora rkA = rk t A.
Dimostrazione. Scriviamo, come sopra  
R1
 R2 
A=
 
.. 
 . 
Rn
con R1 , . . . , Rn ∈ Mat1,k (K) e sia vj = t Rj per j = 1, . . . , n. Allora rk t A = dim Span {v1 , . . . , vn }.
Se A è una matrice a scala ridotta con r ≤ n pivot che compaiono sulle colonne p1 , . . . , pr , allora
Span {v1 , . . . , vn } = Span {v1 , . . . , vr }
e X
c1 v1 + . . . + cr vr = ch eph + w
dove w appartiene a Span {em : m ̸∈ {p1 , . . . , pr }}. Dunque tale combinazione lineare è nulla se e solo se w = 0 e
ch = 0 per h = 1, . . . , r, il che implica che v1 , . . . , vr sono linearmente indipendenti.
Quindi, se A è a scala ridotta con r pivot, rk t A = r = rkA.
Ora mostriamo che le mosse dell’algoritmo di Gauss non alterano lo spazio generato dai vettori riga, cioè
V = Span {v1 , . . . , vn } .
Chiaramente la Mossa 1 non altera V ; consideriamo la Mossa 2 e sostituiamo il vettore vi con il vettore avi + bvj . E’
evidente che, se
v ∈ Span {v1 , . . . , vi−1 , avi + bvj , vi+1 , . . . , vn }
allora anche
v ∈ Span {v1 , . . . , vn }
e quindi
Span {v1 , . . . , vi−1 , avi + bvj , vi+1 , . . . , vn } ⊆ Span {v1 , . . . , vn } = V .
Ma poiché l’algoritmo di Gauss è invertibile, otteniamo anche l’altra inclusione e, di conseguenza, l’uguaglianza.
Ora, visto che ogni matrice può essere portata dalle mosse di Gauss in forma a scala ridotta, visto che per esse vale
rkA = rk t A e visto che Gauss non altera il rango di A, né lo spazio generato dalle righe di A, la tesi segue. □
4.4. Nucleo di una matrice. Ora, volgiamo la nostra attenzione al nucleo.
Definizione 4.14. Data A ∈ Matn,k (K), il nucleo di A è il nucleo dell’applicazione lineare LA , ovvero il sottospazio
vettoriale
ker A = {x ∈ Kk : Ax = 0} ⊆ Kk .
Ancora, il fatto che ker A sia un sottospazio non è parte della definizione, ma va dimostrato.
Per il Teorema 4.4, possiamo direttamente considerare una matrice in forma a scala ridotta S ∈ Matn,k (K); siano
p1 , . . . , pr gli indici delle colonne che contengono i pivot (e dunque la colonna ph -esima sarà eh ∈ Kn ). Indichiamo con
C1 , . . . , Ck le colonne di S, cioè C1 , . . . , Ck ∈ Kn e
S = (C1 | · · · |Ck )
con Cph = eh .
Notiamo che, per ogni m ∈ {1, . . . , k},
Cm ∈ Span{eh : ph ≤ m} .
10 ALGORITMO DI GAUSS

Poniamo L = {1, . . . , k} \ {p1 , . . . , pk }.


Infine, se m ∈ L, scriviamo
 
c1,m
 .. 
 . 
 
cp,m 
Cm =
  ,
 0 

 . 
 .. 
0
dove p è il massimo intero tale che pp < m.
Vogliamo studiare il sottospazio vettoriale di Kk
ker S = {x ∈ Kk : Sx = 0} ,
ovvero le soluzioni del sistema Sx = 0.
Scrivendo
 
x1
x =  ... 
 

xk
abbiamo che
k
X r
X X
Sx = xm Cm = x ph e h + xm C m .
m=1 h=1 m∈L

Esaminando la seconda sommatoria, possiamo esplicitarla componente per componente, P


ricordando che Cm ha com-
ponente h-esima non nulla solo se ph < m. Dunque la componente h-esima della somma m∈L xm Cm è
X
xm ch,m .
m∈L, m>ph

Ad esempio, la r-esima è
k
X
xm cr,m .
m=pr +1

Dunque, affinché Sx = 0, si deve avere che


r
X X
xph eh = − xm C m
h=1 m∈L

poiché e1 , . . . , er sono linearmente indipendenti questo significa che


X
x ph = − xm ch,m .
m∈L, m>ph

Del resto è evidente che, una volta soddisfatta questa condizione, otteniamo una soluzione di Sx = 0.
Abbiamo dimostrato il seguente risultato.
Teorema 4.15. Dato x ∈ Kk , con le notazioni sopra introdotte, si ha che Sx = 0 se e solo se
X
x ph = − xm ch,m ,
m∈L, m>ph

per h = 1, . . . , r. In particolare, comunque fissati numeri xm ∈ K per m ∈ L, troviamo xp1 , . . . , xpk ∈ K tali che il
vettore x che li ha come componenti soddisfi Sx = 0.
Riflettendo con un minimo di attenzione sulle sommatorie scritte nell’enunciato del teorema, se ne deduce il seguente
risultato.
Corollario 4.16. Si ha che
ker S = Span{vm , m ∈ L}
dove, per m ∈ L, definiamo
X
vm = e m − ch,m eh .
h : ph <m
ALGORITMO DI GAUSS 11

Dimostrazione. Notiamo che, fissati numeri xm ∈ K per m ∈ L, il vettore


X
x= x m vm
m∈L
ha come componente m-esima xm , se m ∈ L; invece la componente ph -esima sarà
X
− xm ch,m
m∈L, m>ph

e dunque per il teorema appena dimostrato Sx = 0. Viceversa, sempre per il teorema, ogni soluzione di Sx = 0 ha
questa forma e dunque si può scrivere per opportuni xm , con m ∈ L, come combinazione lineare dei vm , con m ∈ L. □
Inoltre, i generatori di ker S appena trovati sono una base.
Lemma 4.17. I vettori vm , m ∈ L sono linearmente indipendenti.
Dimostrazione. Consideriamo una combinazione lineare
X X
cm vm = cm e m + w
m∈L m∈L

dove w ∈ Span{ep1 , . . . , epr } e dunque in particolare le componenti m-esime per m ∈ L di w sono nulle.
Dunque, tale combinazione lineare può essere nulla se e solo se, separatamente
X
cm e m = 0 w=0
m∈L
e dalla prima condizione segue immediatamente cm = 0 per ogni m ∈ L, poiché gli em sono parte della base canonica
e quindi tra loro linearmente indipendenti. Dunque i vettori {vm : m ∈ L} sono linearmente indipendenti. □
Combinando il Corollario 4.16 e il Lemma 4.17, otteniamo
Corollario 4.18. I vettori vm , m ∈ L sono una base di ker S e dunque dim ker S = |L| = k − r.
Dunque, data una qualsiasi A ∈ Matn,k (K), se dopo una riduzione a scala troviamo r pivot, ker A avrà dimensione
k − r.
Combinando quanto appena detto con il Corollario 4.12, abbiamo appena dimostrato il seguente risultato.
Teorema 4.19. Data A ∈ Matn,k (K), si ha
k = dim ker A + rk A ,
ovvero
k = dim ker A + dim Im A .

5. Matrici elementari
Dati i ∈ {1, . . . , p} e j ∈ {1, . . . , q}, sia Eij ∈ Matp,q (K) la matrice che ha tutte le entrate nulle tranne quella (i, j)
(cioè i-esima riga, j-esima colonna), che è uguale a 1.
Se {e1 , . . . , ep } è la base canonica di Kp , possiamo dire le colonne di Eij sono tutte nulle tranne la j-esima, che è
uguale a ei ; se invece denotiamo con {e1 , . . . , eq } la base canonica di Kq , possiamo dire che le righe di Eij sono tutte
nulle, tranne la i-esima che è uguale a ej .
Osservazione 5.1. Si ha Eij = ei t ej con ei ∈ Kp , ej ∈ Kq , elementi delle rispettive basi canoniche.
Come è noto, l’insieme {Eij : 1 ≤ i ≤ p, 1 ≤ j ≤ q} è una base di Matp,q (K) come spazio vettoriale (che ha dunque
dimensione pq). Pn
Ad esempio, se p = q = n, abbiamo che I = i Eii .
Lemma 5.2. Siano Eij ∈ Matn,n (K) e A ∈ Matn,k (K), allora Eij A ∈ Matn,k ha tutte le righe nulle tranne la i-esima,
che è uguale alla j-esima riga di A.
Dimostrazione. Scriviamo A = (C1 | · · · |Ck ) con C1 , . . . , Ck ∈ Matn,1 (K); se Rh ∈ Mat1,n (K) è la h-esima riga di Eij ,
la h-esima riga di Eij A è
(Rh C1 , . . . , Rh Ck )
ma per definizione,  t
ej se h = i
Rh =
0 se h ̸= i
e dunque la h-esima riga di Eij A è 0 se h ̸= i, mentre, se h = i, è
(t ej C1 , . . . , t ej Ck ) .
Dato v ∈ Kn , t ej v = vj , cioè la j-esima componente di v; dunque la i-esima riga di Eij A è la collezione delle j-esime
componenti delle colonne di A, ovvero la j-esima riga di A. □
12 ALGORITMO DI GAUSS

Ad esempio, nelle ipotesi del lemma,


• A − Eii A è una matrice uguale ad A, tranne che per la i-esima riga, che è nulla
• A + bEij A è una matrice uguale ad A, tranne che per la i-esima riga, che è uguale alla i-esima riga di A più b
volte la j-esima riga di A.
Otteniamo cosı̀ il seguente risultato.
Proposizione 5.3. Sia A ∈ Matn,k (K) e sia {Eij } la base di Matn,n (K) descritta sopra. Allora
(1) la matrice (I − Eii − Ejj + Eij + Eji )A è ottenuta da A applicando la Mossa 1 dell’algoritmo di Gauss,
scambiando le righe i e j
(2) la matrice (I + bEij )A è ottenuta da A applicando la Mossa 2 dell’algoritmo di Gauss, sostituendo alla riga
i-esima la somma tra la riga i-esima e b volte la riga j-esima.
Una matrice della forma I + αu t v con u, v ∈ Kn si dice matrice elementare n × n. Osserviamo che
t
I − Eii − Ejj + Eij + Eji = I − (ei − ej ) (ei − ej )
I + bEij = I + bei t ej
sono matrici elementari.
Corollario 5.4. Se, tramite l’algoritmo di Gauss, riduciamo una matrice A ad una matrice S, allora esistono matrici
elementari M1 , . . . , Mm tali che
S = M m · . . . · M1 A .
Esercizio 4. Dimostrare che M = I + αu t v è invertibile se e solo se a t vu ̸= −1 e l’inversa è I + βu t v con
α
β=− .
1 + α t vu
Corollario 5.5. L’algoritmo di Gauss è invertibile.
t
Dimostrazione. Dalla Proposzione 5.3, la mossa 1 corrisponde alla moltiplicazione per M = I − (ei − ej ) (ei − ej ) e
la mossa 2 alla moltiplicazione per N = I + bei t ej . Per l’Esercizio 4, si ha
M −1 = M N −1 = I − bei t ej ,
che corrispondono ancora a mosse dell’algoritmo di Gauss.
Dunque, se S = Mm · · · M1 A, allora
A = M1−1 · · · Mm
−1
S
−1
e le inverse Mj corrispondono ancora a mosse dell’algoritmo di Gauss. □
Questa interpretazione matriciale dell’algoritmo di Gauss permette di fornire dimostrazioni alternative di alcuni fatti.
Ne portiamo due esempi.
Proposizione 5.6. Dati A ∈ Matn,k (K) e b ∈ Kn , se (S|b′ ) è una riduzione a scala di (A|b), allora
{x ∈ K k : Ax = b} = {x ∈ Kk : Sx = b′ }
Dimostrazione. Sappiamo che esiste una matrice invertibile N ∈ Matn,n (K) tale che (S|b′ ) = N (A|b), ovvero, per
come è definito il prodotto tra matrici, tale che S = N A e b′ = N b.
Dunque, Ax = b se e solo se N Ax = N b (è un se e solo se poiché N è invertibile) se e solo se Sx = b′ . Quindi i due
insiemi coincidono. □
In particolare, ker A = ker S.
Proposizione 5.7. Sia A ∈ Matn,n (K); A è invertibile se e solo se la sua forma a scala ridotta è la matrice identità.
La sua inversa è un prodotto di matrici elementari.
Dimostrazione. A è invertibile se e solo se esiste B tale che AB = I, ovvero se e solo se il sistema Ax = ej è risolubile
per ogni j = 1, . . . , n. Questo è chiaramente equivalente a dire che la riduzione a scala di A deve avere un pivot su
ogni riga (e quindi anche su ogni colonna, visto che è quadrata), il che è equivalente a dire che la forma a scala ridotta
sia la matrice identità.
Sappiamo allora che esiste un prodotto di matrici elementari N tale che N A = I. Poiché inversa destra e sinistra
coincidono, si ha che N = A−1 . □
In particolare, applicando Gauss su (A|I) fino a ottenere (I|⋆), stiamo moltiplicando la matrice n × 2n (A|I) per un
prodotto di matrici elementari N ; per la definizione di prodotto righe per colonne, il risultato è (I|N ) e dunque per la
proposizione precedente questa riduzione a scala produce la matrice inversa di A.

Potrebbero piacerti anche