Sei sulla pagina 1di 8

Capitolo 3

SISTEMI DI EQUAZIONI LINEARI

1. Generalità e algoritmo di Gauss

Nel capitolo precedente abbiamo visto come per risolvere problemi legati allo studio degli spazi
vettoriali lo strumento tecnico fondamentale sia la risoluzione di sistemi di equazioni lineari.
In questo capitolo ci occuperemo di studiare come si risolve un sistema lineare. Nel presente
paragrafo introdurremo alcune definizioni e descriveremo un algoritmo che permette di risolvere tali
sistemi, noto come algoritmo di Gauss.

Definizione 1. Un sistema di m equazioni lineari in n indeterminate (o incognite) x1, x2, . . . , xn,


a valori in un campo K [abbreviato SL oppure SL(m, n, K)] è un insieme di m equazioni del tipo:



a11 x1 + a12 x2 + . . . + a1n xn = b1

 a x + a x + ... + a x = b
21 1 22 2 2n n 2


 ...


am1 x1 + am2 x2 + . . . + amn xn = bm
o (in forma abbreviata):


n
aij xj = bi [i = 1, . . . , m],
j=1
dove gli elementi aij , bi ∈ K sono detti rispettivamente coefficienti e termini noti delle equazioni del
SL. Si chiama soluzione di tale SL ogni n-pla z = (z1, z2, . . . , zn) ∈ K tale che:
n

 n

aij zj = bi [i = 1, . . . , m]
j=1
[cioè che trasformi le m equazioni del sistema in m uguaglianze in K]. Un SL privo di soluzioni è
detto incompatibile; altrimenti è detto compatibile o risolubile.
Un SL(m, n, K) è detto omogeneo [abbreviato SLO(m, n, K)] se i suoi termini noti sono tutti
nulli. Ovviamente un SLO è sempre compatibile: infatti ammette come soluzione la n-pla nulla
0 = (0, 0, . . . , 0), detta soluzione banale. Le altre sue (eventuali) soluzioni sono dette autosoluzioni.
Infine, assegnato un SL(m, n, K), sostituendo i termini noti con 0, si ottiene un SLO(m, n, K),
detto sistema lineare omogeneo associato al SL dato.

Osservazione 1. Con il prodotto righe per colonne è possibile ottenere una scrittura ”matriciale”
dei sistemi di equazioni lineari. Assegnato infatti il SL(m, n, K):
 n

aij xj = bi [i = 1, . . . , m],
j=1
   
x1 b1
   
M
indichiamo con X la colonna  ...  delle indeterminate, con b =  ...  ∈ m,1(K) la colonna

M
xn bm
dei termini noti e con A = (aij ) ∈ m,n(K) la matrice dei coefficienti del SL. Eseguendo il prodotto
righe per colonne delle matrici A ed X, si ha:
   
a11 x1 + · · · + a1n xn b1
 a21 x1 + · · · + a2n xn   b2 
   
AX =  ..  =  .  = b.
 .   .. 
am1 x1 + · · · + amn xn bm
Pertanto il SL assegnato può essere scritto nella forma:
AX = b.
66 G. CAMPANELLA APPUNTI DI ALGEBRA PER INFORMATICA

M
La matrice A b ∈ m,n+1(K) è detta matrice completa (o matrice orlata) del SL AX = b e
M
lo individua completamente. Esiste un’ovvia corrispondenza biunivoca tra m,n+1(K) e l’insieme dei
SL(m, n, K). Quanto alle incognite, è chiaro che il loro nome è arbitrario e può essere modificato;
quel che conta è il numero delle incognite ed il loro ordine.
 n
È evidente che le eventuali soluzioni z = z1 , ... ,zn ∈ K del SL(m, n, K) AX = b corrispon-
z1
 . 
M
dono biunivocamente alle matrici colonna z =  ..  ∈ n,1(K) tali che Az = b. [Per tale motivo

M
zn
n
è opportuno identificare z con z, cioè identificare K con (K)].

n,1

Si osservi infine che ogni soluzione z = z1, ... , zn del SL AX = b esprime la colonna b come
combinazione lineare delle colonne di A. Infatti risulta:  
z1
 .   n
b = Az = A(1) ... A(n)  ..  = A(i) zi .
i=1
zn

Due esempi. (1) È assegnato il SL(1, 3, R ) { x1 = 1 . Tale sistema ha tre incognite (di cui x1
è ragionevolmente la prima). In forma matriciale si scrive
 
x1
( 1 0 0 )  x2  = ( 1 ).
x3
Tale SL è compatibile e le sue soluzioni sono le terne (1, b, c) ∈ R , ∀ b, c ∈ R .
3

 
1 0 1
(2) È assegnato un SL con matrice completa . Si tratta del SL(2, 2, R )
1 0 2
     
x1 = 1 1 0 x1 1
[ovvero, scritto in in forma matriciale, = ].
x1 = 2, 1 0 x2 2
Tale sistema è manifestamente incompatibile (in quanto implica 1 = 2).

x1 = 0
Il SLO(2, 2, R ) ad esso associato è Le soluzioni di tale SLO formano il sottoinsieme
x1 = 0.
Σ0 = {(0, t), ∀ t ∈ R } di R . Si tratta del sottospazio vettoriale (0, 1) di R . Che l’insieme delle
2 2

soluzioni di tale SLO sia uno spazio vettoriale non è un fatto casuale, come ora vedremo.

Proposizione 1. Sia AX = 0 un SLO(m, n, K). L’insieme Σ0 delle sue soluzioni è un sottospazio


n
vettoriale di K .

Dim. Basta verificare che, ∀ y, z ∈ Σ0 e ∀ a, b ∈ K, risulta a y + b z ∈ Σ0, ovvero [indicate con


y e z le colonne corrispondenti a y, z] A (a y + b z) = 0. Infatti si ha (utilizzando le proprietà di
Prop. 1 di Cap. 2.2):
A(ay + bz) = A(a y) + A(b z) = a(A y) + b(A z) = a 0 + b 0 = 0.

Sia AX = b un SL compatibile e non omogeneo. In tal caso l’insieme Σ delle sue soluzioni non
può mai essere un sottospazio vettoriale di K [infatti 0 ∈ Σ]. Tuttavia, come ora vedremo, Σ è
n

in corrispondenza biunivoca con il sottospazio vettoriale Σ0 delle soluzioni del suo SLO associato.

Proposizione 2. Sia AX = b un SL(m, n, K) compatibile e sia z 0 una sua soluzione. Denotato


con Σ l’insieme delle sue soluzioni e con Σ0 il sottospazio vettoriale delle soluzioni del SLO associato
AX = 0, risulta:
 
Σ = z 0 + Σ0 = {z 0 + y, ∀ y ∈ Σ0} .
Ne segue che Σ e Σ0 sono in corrispondenza biunivoca.

Dim. (⊆). Sia z ∈ Σ [cioè Az = b]. Poiché, per ipotesi, Az0 = b, allora:

A z − z0 = Az − Az0 = b − b = 0
CAP. 3.1 GENERALITà E ALGORITMO DI GAUSS 67

e dunque z − z 0 ∈ Σ0. Pertanto z = z 0 + (z − z 0) ∈ z 0 + Σ0.

(⊇). Verifichiamo che, ∀ y ∈ Σ0, z 0 + y ∈ Σ. Infatti:



A z0 + y = Az0 + Ay = b + 0 = b.
L’ultima affermazione è ovvia: l’applicazione y → z 0 + y stabilisce una biiezione da Σ0 a Σ.

La precedente proposizione suggerisce come ottenere tutte le soluzioni di un SL compatibile non


omogeneo. Una volta ottenutane una soluzione, per ottenere le altre basta risolvere il SLO associato
e sommarne le soluzioni a quella del SL già ottenuta.

Poiché Σ non è uno spazio vettoriale, ”non ha diritto” ad una dimensione; tuttavia possiamo
in qualche modo attribuirgli la dimensione di Σ0. Precisamente, se dim(Σ0) = t, diremo che il
SL AX = b (se compatibile) ha ∞ soluzioni. Questa terminologia proviene dal fatto che, come
t

vedremo, le soluzioni dipendono da t parametri in K. Poiché K è tradizionalmente il campo R ,


che ha cardinalità infinita, i t parametri variano ciascuno in infiniti modi e le soluzioni sono quindi
∞ . Si noti infine che, se Σ0 = {0}, la terminologia introdotta ci dice che il SL (se compatibile) ha
t

∞ soluzioni; poiché in questo caso il SL ha una sola soluzione, conveniamo di porre: ∞ = 1.


0 0

Vogliamo ora risolvere un SL, cioè determinarne le soluzioni. Cominciamo dai SL più semplici:
i sistemi di equazioni lineari a scala (o a gradini). Premettiamo una definizione.

Definizione 2. Siano AX = b e A X = b due SL aventi lo stesso numero di incognite. Diciamo


che tali SL sono equivalenti se hanno le stesse soluzioni (cioè se Σ = Σ ).

Definizione 3. Un SL(m, n, K) AX = b è detto a scala (o a gradini) se verifica le seguenti tre


condizioni:
m ≤ n, aij = 0 se i > j, aii = 0, ∀ i = 1, ... m.

La matrice di un SL a scala è dunque del tipo


 
a11 . . . . . . . . . . . .
 0 a22 . . . . . . . . . 
 
A= . . . . , con a11 ·a22 ... ·amm = 0.
 .. . . . . . 
.
0 0 0 amm . . .
Risolvere un SL a scala è piuttosto semplice e intuitivo. Si comincia dall’ultima equazione, cioè
amm xm + ... + amn xn = bm .
bn
Se n = m, si ottiene xn = ann e si sostituisce tale valore nella penultima equazione, ottenendo
cosı̀ un’unica espressione per xn−1 . Sostituendo ciascuno dei valori via via trovati nell’equazione
precedente, si perviene ad un’unica soluzione del sistema.
Se invece n > m, si attribuiscono alle incognite xm+1 , ... , xn valori parametrici arbitrari (in K),
ad esempio t1, ... , tn−m e si ottiene un valore per xm . Si procede poi come nel caso precedente
e si otterrà un’unica soluzione del SL, dipendente da n − m parametri indipendenti, cioè ∞
n−m

soluzioni. Con la convenzione fatta sopra (cioè ∞ = 1) abbiamo quindi ottenuto il seguente risultato.
0

Proposizione 3. Ogni SL(m, n, K) a scala è compatibile ed ha ∞


n−m
soluzioni.

Ad esempio vogliamo risolvere il SL(3, 4, R ) a scala



 −x1 + x2 + x4 = 1

2x2 + x3 = 2


x3 − x4 = 0.
68 G. CAMPANELLA APPUNTI DI ALGEBRA PER INFORMATICA

Poniamo x4 = t. Risolvendo l’ultima equazione, x3 = t. Sostituendo i valori di x3 (e x4) nella


seconda equazione si ottiene x2 = 1 − 2t . Sostituendo i valori di x2, x3 e x4 nella prima equazione,
si ottiene x1 = 2t . Pertanto il SL assegnato ha le ∞ soluzioni
1

t 
2 , 1 − 2 , t, t , ∀ t ∈ R .
t

Utilizzando la Prop. 2, possiamo ottenere subito le soluzioni del SLO associato. Infatti, una
soluzione del SL dato è z 0 = (0, 1, 0, 0) (ottenuta ponendo t = 0). Pertanto
    
Σ0 = Σ − z 0 = 2t , − 2t , t, t , ∀ t ∈ R = ( 12 , − 12 , 1, 1  = (1, −1, 2, 2 .

Veniamo ora all’algoritmo di Gauss (o di Gauss-Jordan) per la risoluzione di un sistema di equazioni


lineari. Tale procedimento consiste nel trasformare (se possibile) un assegnato SL(m, n, K) AX = b
in un SL a gradini ad esso equivalente [che verrà poi risolto come visto sopra].
Per trasformare il SL si fa ricorso a tre tipi di operazioni sulle equazioni del SL, dette operazioni
elementari (sulle equazioni), e cioè:
I operazione elementare: scambiare di posizione due equazioni del SL;
II operazione elementare: sostituire un’equazione con un multiplo non nullo della stessa equazione;
III operazione elementare: sostituire un’equazione con la stessa equazione sommata ad un multiplo
di un’altra.

Tali operazioni [che del resto abbiamo già eseguito nella risoluzione ”empirica” dei SL incontrati
nel capitolo precedente] evidentemente non cambiano le soluzioni del sistema, e dunque trasformano
il SL in un altro ad esso equivalente.

Se al sistema assegnato AX = b si sostituisce la sua matrice completa M = A b , le tre ope-
razioni elementari (sulle equazioni) si trasformano nelle corrispondenti operazioni elementari di riga,
che indicheremo schematicamente come segue:
(i) (j)
I[M ↔ M ];
(i) (i)
II[M → cM ], con c = 0;
(i) (i) (j)
III[M → M + cM ], con i = j e c ∈ K.
(i) (i) (j)
Ad esempio, l’operazione III sopra considerata sostituisce alla riga M la riga M +cM [ovvero
sostituisce alla i–esima equazione la somma della i–esima con la j–esima moltiplicata per c].
Per abbreviare le notazioni, converremo di denotare tale operazione con III[(ia) → (ia) + c(j a)] ed
usare analoghe notazioni per le altre due operazioni.
Oltre alle tre operazioni elementari di riga, nell’algoritmo di Gauss può talvolta essere necessario
eseguire uno acambio di colonne della matrice A. Ciò evidentemente corrisponde ad uno scambio delle
variabili del SL. In tal caso sarà poi necessario, al termine dell’algoritmo, procedere allo scambio di
variabili opposto.

Descriviamo ora l’algoritmo di Gauss, suddividendolo in ”blocchi” di quattro passi, da ripetere


un

numero finito di volte. Consideriamo un SL(m, n, K) AX = b, con matrice completa M = A b .

1◦ passo. Si elimina ogni eventuale riga nulla di M [corrispondente all’equazione banale 0 = 0].
2◦ passo. Si fa in modo che risulti M(1) = 0 (cioè A(1) = 0). Ciò può essere ottenuto scambiando
ad esempio la colonna nulla A(1) con una successiva colonna A(i) non nulla [ed è meglio scegliere
l’ultima colonna non nulla di A, per evitare di dover ripetere tale operazione].
3◦ passo. Si fa in modo che risulti a11 = 1. A tale scopo, se a11 = 0 e ad esempio ai1 = 0, si ese-
(1) (i)
gue l’operazione I[M ↔M ] e si ottiene quindi una nuova matrice con a11 = 0; successivamente,
(1) (1)
se a11 = 1, si esegue l’operazione II[M → 1
a11 M ] e si ottiene a11 = 1.
4◦ passo. Si fa in modo che risulti: a21 = a31 = · · · = am1 = 0. A tale scopo, basta eseguire (per
(i) (i) (1)
i = 2, . . . , m) le operazioni III[M →M − ai1 M ].

A questo punto la matrice completa M del SL assegnato si è trasformata in una matrice del tipo
CAP. 3.1 GENERALITà E ALGORITMO DI GAUSS 69

[ma si noti che in tale matrice gli elementi a12 , ... della seconda e delle successive colonne non sono
ovviamente gli stessi della matrice A; abbiamo mantenuto le stesse lettere soltanto per semplificare
le notazioni]:
 
1 a12 . . . . . .
 0 a22 . . . . . . 
 
 0 . . . . . . . . . ,
 
 
0 am 2 . . . . . .
con m ≤ m (e m < m a seguito di cancellazione di righe nulle).
Si ripete ora il blocco dei quattro passi sopra descritto, a partire dall’elemento che si trova sulla
seconda riga e seconda colonna di tale matrice. Si eliminano quindi eventuali righe nulle e si fa in
modo (operando relativamente alla seconda colonna) che la matrice completa del SL diventi del tipo:
 
1 a12 ... ...
 0 1 ... ... 
 
 0 0 a . . . 
 33 
... ... ... ... 
0 0 am 3 . . . . . .
(con m ≤ m ). Si ripete quindi il blocco dei quattro passi a partire dalla terza riga e terza colonna,
dalla quarta ... e cosı̀ via.

Se nel corso del procedimento si ottiene una riga della forma 0 0 . . . 0 b , con b = 0, il SL è
incompatibile [ed il procedimento di Gauss ovviamente si interrompe]. In caso contrario il SL si
riduce ad un SL a scala, come richiesto. Si osservi infine che, se nel procedimento sono stati necessari
scambi di variabili, sarà necessario ripristinare le variabili iniziali, procedendo agli scambi opposti.
Illustreremo l’algoritmo con un paio di esempi.

Esempio 1. Risolviamo il seguente SL(4, 4, R ):





x1 + 2x2 + 3x3 + 4x4 = 1

 −x + 4x = 0
3 4


 x1 + 2x2 + 2x4 = 1


x3 + x4 = 0.
La matrice completa del SL è
 
1 2 3 4 1
 0 0 −1 4 0 
 .
1 2 0 2 1
0 0 1 1 0
Per completare il primo blocco dell’algoritmo è sufficiente procedere con III[(3a) → (3a) − (1a)]. Si
ottiene:
 
1 2 3 4 1
 0 0 −1 4 0 
 .
0 0 −3 −2 0
0 0 1 1 0
Iniziamo il secondo blocco dell’algoritmo. Poiché la seconda colonna è nulla [a partire dall’elemento
di posto (2, 2)], si procede (ad esempio) allo scambio di variabili x2 ↔ x4. Si pone quindi:
y1 = x1, y2 = x4, y3 = x3, y4 = x2
e si ottiene un SL avente matrice completa:
 
1 4 3 2 1
0 4 −1 0 0
 .
0 −2 −3 0 0
0 1 1 0 0
Con II[(2a) → 14 (2a)] si ottiene:
 
1 4 3 2 1
0 1 − 14 0 0
 .
0 −2 −3 0 0
0 1 1 0 0
70 G. CAMPANELLA APPUNTI DI ALGEBRA PER INFORMATICA

Poi, con III[(3a) → (3a) + 2(2a)] e con III[(4a) → (4a) − (2a)] si ottiene:
 
1 4 3 2 1
 0 1 −1 0 0 
 4 
 0 0 − 7 0 0 .
2
5
0 0 4 0 0
Iniziamo ora il terzo blocco dell’algoritmo. Con II[(3a) → − 27 (3a)] si ottiene:
 
1 4 3 2 1
 0 1 −4 0 0 
1
 .
0 0 1 0 0
5
0 0 4 0 0
Infine, con III[(4a) → (4a) − 54 (3a)], si ottiene:
 
1 4 3 2 1
 0 1 − 14 0 0
 .
0 0 1 0 0
0 0 0 0 0
Veniamo ora al quarto ed ultimo blocco dell’algoritmo: basta eliminare la quarta riga (che è nulla)
ed otteniamo una matrice a gradini. Si è cosı̀ ottenuto il SL(3, 4, R ):


 y1 + 4y2 + 3y3 + 2y4 = 1
y2 − 1
y3 = 0


4
y3 = 0.
Posto y4 = t, si ha: y3 = 0, y2 = 0, y1 = 1 − 2t. Ripristiniamo le variabili di partenza:
x1 = y1 = 1 − 2t, x2 = y4 = t, x3 = y3 = 0, x4 = y2 = 0.
Pertanto l’insieme Σ delle soluzioni del SL assegnato è:
  
Σ = 1 − 2t, t, 0, 0 , ∀ t ∈ R .

Esempio 2. Risolviamo il seguente SL(3, 4, R ) ed il corrispondente SLO associato:




 x1 + 2x2 + 3x4 = 1
−x1 + x2 + x3 − 2x4 = 2


3x2 + x3 + x4 = 2.
La matrice completa del SL è
 
1 2 0 3 1
M =  −1 1 1 −2 2 .
0 3 1 1 2
Per completare il primo blocco dell’algoritmo è sufficiente eseguire III[(2a) → (2a) + (1a)]. Si ottiene
 
1 2 0 3 1
0 3 1 1 3.
0 3 1 1 2
Eseguiamo il secondo blocco. Con II[(2a) → 13 (2a)] otteniamo
 
1 2 0 3 1
0 1 1 1 1
3 3
0 3 1 1 2
e con III[(3a) → (3a) − 3(2a)] otteniamo
 
1 2 0 3 1
0 1 1 1 1 .
3 3
0 0 0 0 −1
Esaminando ora l’ultima riga concludiamo che il SL è incompatibile.
Consideriamo ora il SLO(3, 4, R ) asssociato. La sua matrice è
 
1 2 0 3
A =  −1 1 1 −2 
0 3 1 1
CAP. 3.1 GENERALITà E ALGORITMO DI GAUSS 71

[si osservi che è inutile considerare la matrice completa del SLO, in quanto la colonna dei termini
noti è nulla e non viene alterata nel corso dell’algoritmo].
Ripetiamo i passi dell’algoritmo appena eseguito. Con III[(2a) → (2a) + (1a)] otteniamo
 
1 2 0 3
0 3 1 1.
0 3 1 1
Con II[(2a) → 1
3 (2a)] otteniamo
 
1 2 0 3
0 1 1 1 
3 3
0 3 1 1
e con III[(3 ) → (3 ) − 3(2 )] otteniamo
a a a
 
1 2 0 3
0 1 1 1 .
3 3
0 0 0 0
Eliminiamo la terza riga (nulla) ed otteniamo il SLO(2, 4, R ) a scala

x1 + 2x2 + 3x4 = 0
1 1
x2 + 3 x3 + 3 x4 = 0.
Poniamo x3 = t, x4 = s ed otteniamo
x2 = − 13 (t + s), x1 = 2
3 t− 7
3 s.
Ne segue che l’insieme delle soluzioni di tale SLO è
  
Σ0 = 23 t − 73 s, − 13 (t + s), t, s , ∀ t, s ∈ R
ovvero
 2  
Σ0 = 3, − 13 , 1, 0 , − 73 , − 13 , 0, 1 .

Risolvere un SL con l’algoritmo di Gauss può essere molto vantaggioso se si è dotati della velocità
di un computer o se si dispone di molta pazienza (e molta carta!). Quando poi il SL non ha
coefficienti tutti numerici, ma alcuni di essi dipendono da parametri, l’algoritmo di Gauss si complica
notevolmente, in quanto si deve tener conto del possibile annullamento delle espressioni dipendenti da
parametri, che vengono via via a determinarsi tramite le operazioni fondamentali di riga.
Per questo è utile saper risolvere un SL anche con mezzi più teorici, cioè utilizzando i classici
teoremi di Cramer e di Rouché-Capelli. Quest’ultimo teorema poi è centrale nell’Algebra Lineare,
in quanto ci permette di rappresentare, usando sistemi di equazioni lineari, i sottospazi di uno spazio
vettoriale.
Gli strumenti tecnici che ci serviranno per descrivere tali risultati e pervenire quindi ad un altro
metodo per la risoluzione di un SL sono due: il determinante di una matrice quadrata ed il rango
di una matrice. Di essi ci occuperemo nei due paragrafi successivi.

ESERCIZI PROPOSTI

3.1.1. Risolvere con l’algoritmo di Gauss il seguente SL(3, 5, R )




 x3 + 2 x5 = 2
x4 − x5 = 3


2 x1 + x3 = 1.
Dedurne una base del sottospazio vettoriale Σ0 delle soluzioni del SLO associato.

3.1.2. Al variare del parametro a ∈ R , risolvere il seguente SLO(2, 2, R )



2x + (a + 2)y = 0
2
(a + 1)x + (a + 2)y = 0.

3.1.3. Al variare del parametro a ∈ R , risolvere il seguente SLO(3, 2, R )


72 G. CAMPANELLA APPUNTI DI ALGEBRA PER INFORMATICA


 x + ay = 0
2x + 2y = 0


ax = 0.

3.1.4. Al variare dei parametri non nulli a, b ∈ R , risolvere il seguente SLO(3, 3, R )




 ay + bz = 0
−a x + z = 0


−b x − y = 0.

3.1.5 Risolvere con l’algoritmo di Gauss il seguente SL(2, 2, Z 5)



3x + y = 1
x − y = 0.