Professional Documents
Culture Documents
Uno dei problemi piu frequenti che si presenta nella matematica applicata
e la risoluzione di sistemi di equazioni lineari, poiche ad esempio moltissimi
problemi, anche molto complessi, vengono trattati numericamente dopo aver
fatto ricorso ad una semplicazione, ossia dopo averli resi lineari, e in pratica si
risolvono numericamente mediante la soluzione di opportuni sistemi lineari.
Anche in architetura, il problema della risoluzione di sistemi lineari e un
problema che si incontra spesso e che talvolta semplicato, perche non si hanno
a disposizione i programmi di calcolo adeguati. Qui vedremo come risolvere
sistemi lineari di larghe dimensioni mediante luso del programma per il calcolo
scientico MATLAB.
A questo scopo introduciamo il problema della soluzione di sistemi di equazioni
lineari, arontandolo dal punto di vista dell analisi numerica.
x1 x2 + 2x3 = 4
puo essere riscritto in forma pi compatta, usando matrici e vettori, nel modo
seguente:
2 3 2
x1
1
Ax = b, dove A = 3 3 4 , x = x2 , b = 2
1 1 2
x3
3
In generale, dato un sistema algebrico lineare Ax = b, con A matrice m n, b
vettore dei termini noti m 1, e x vettore delle incognite n 1, il problema
numerico consiste in:
a) individuare il carattere del sistema lineare, che puo essere univoca*
mente determinato (ossia avere una soluzione unica) oppure indeterminato ( os*
sia avere innite soluzioni) oppure impossibile (ossia non avere alcuna soluzione)
b) risolvere il sistema ossia determinare, se possibile, il vettore x
(se la soluzione e unica) oppure un vettore x (se le soluzioni sono
innite), che soddis il sistema.
Vediamo ora come si presenta il problema di individuare il carattere e la soluzione
di un sistema lineare dato.
1
Esaminiamo i seguenti sistemi dal punto di vista del tipo di soluzione che am*
mettono:
2x1 + 3x2 = 2 univocamente determinato
7x1 x2 = 3
(soluzione unica)
2x1 + 3x2 = 6 indeterminato
4x1 + 6x2 = 3 (innite soluzioni)
2x1 + 3x2 = 2
impossibile
4x1 + 6x2 = 3 (nessuna soluzione)
Gli esempi interpretati geometricamente indicano nel piano rispettivamente due
rette che si intersecano in un punto, due rette coincidenti, due rette parallele e
sono facilmente caratterizzabili.
Tuttavia se la ricerca del carattere di un sistema si conduce attraverso il calcolo
di determinanti, occorrono n! calcoli per ogni determinante; ad es. se n = 10,
n! 4000000.
Allora esaminiamo come, utilizzando i metodi numerici, possiamo trasformare il
problema in questione in un problema piu semplice, sia per quanto riguarda il
problema dell identicazione del carattere del sistema, sia per quanto riguarda
il problema della soluzione del sistema
Cominciamo dal caso pi semplice possibile. Supponiamo che nel sistema
lineare Ax = b la matrice A, n n, sia un matrice triangolare superiore che
indichiamo con U di elementi diagonali u11 , u22 , ..., unn .
I caso) uii = 0,
1 i n.
Allora l ultima equazione e del tipo unn xn = bn da cui si ha immediatamente
xn = bn /unn . Quindi, noto xn , dalla penultima equazione dove compaiono xn e
xx1 si ricava immediatamente xn1 e cosi di seguito poseguendo all indietro.
In pratica xi = bi ni+1 uij xj /uii , i = n 1, ..., 1.
Il sistema e univocamente determinato e la soluzione e determinabile con n2
operazioni oating point. Infatti osserviamo che occorrono n(n 1)/2 addizioni
+ sottrazioni ; n(n 1)/2 moltiplicazioni e n divisioni per un totale di n2
operazioni oating point.
Ad esempio per il seguente sistema triangolare:
2x1 + x2 + x3 = 1
3x2 x3 = 1
4x3 = 4
2 1 1
0
dove U = 0 3 1 , la soluzione x = 0 si ottiene con 9 oper*
0 0 4
1
azioni.
II caso) unn = 0, bn = 0
Allora l ultima equazione e del tipo 0 xn = 0 da cui si ha immediatamente
xn = arbitrario, giacche qualsiasi numero moltiplicato per 0 da 0. Quindi,
2
2x1 + x2 + x3 = 1
x2 + x3 = 2
0x3 = 0
2 1 1
1/2
dove U = 0 1 1 , la soluzione x = 2 si ottiene con 8 oper*
0 0 0
azioni.
III caso) unn = 0, bn = 0
Il sistema e impossibile: non ammette alcuna soluzione, infatti nessun numero
moltiplicato per 0 da un numero diverso da 0.
Le osservazioni fatte sopra varrebbero anche nel caso in cui la matrice A del
sistema fosse una matrice triangolare inferiore o ancora piu semplicemente un
matrice diagonale.
Allora nel caso di sistemi triangolari il problema della determinazione del
carattere di un sistema lineare si puo risolvere facilmente senza far ricorso ai
determinanti. Mostreremo nel seguito come i metodi numerici diretti triangolarizzino qualunque sistema utilizzando un numero di operazioni
competitivo rispetto a (n + 1)!.
x1 x2 + 2x3 = 4
2 3 2
dove la matrice dei coecienti e A = 3 3 4 .
1 1 2
Lo scopo che ci preggiamo e quello di ottenere un sistema equivalente a questo,
ma con la matrice dei coecienti triangolare superiore ossia tale da presentare
elementi nulli sotto la diagonale principale. Allora come primo passo, calcoliamo
(1)
(1)
m31 = a31 /a11 = 1/2
i seguenti moltiplicatori: m21 = a21 /a11 = 3/2;
(1)
Moltiplichiamo la prima equazione per m21 :
x1 x2 + 2x3 = 4
x1 x2 + 2x3 = 4
(1)
x1 + 3/2x2 + x3 = 1/2
3/2x2 + x3 = 5/2
x1 x2 + 2x3 = 4
(4)
5/2x2 + x3 = 7/2
(5)
2/3x3 = 2/3
(7)
5/2x2 + x3 = 7/2
2
3
2
1
sistema triangolare dove la matrice dei coecienti e U = 0 3/2
0
0
2/3
1
e dal quale si ottiene facilmente la soluzione x = 1 .
1
Osserviamo che il sistema triangolare nale e equivalemte al sistema
originale perche per passare dall uno all altro sono state impiegate solo op*
erazioni elementari per riga.
Contiamo le operazioni eseguite.
per passare dal sistema (1)al sistema (2) abbiamo compiuto quattro moltipli*
cazioni: una per il calcolo del moltiplicatore e tre per trasformare la prima
equazione, evitando il prodotto (a21 /a11 )a11 perche e noto che poi tale termine
sottratto da a21 da 0.
Inoltre per passare da (2) a (3) abbiamo compiuto tre addizioni, e non quattro,
per il medesimo motivo.
Per passare da (3) a (5) abbiamo ripetuto lo stesso numero di operazioni.
Quindi in tutto per il primo passo abbiamo eseguito 2(4 + 3) = 14
operazioni.
Per il secondo passo, in modo analogo, abbiamo eseguito (3 + 2) = 5 operazioni.
Quindi in tutto occorrono 19 operazioni per trasformare un sistema 3 3 in
forma triangolare. In generale, e necessario il seguente numero di operazioni
oating point:
per la triangolarizzazione di A n n:
addizioni +sottrazioni
n(n 1)(2n 1)/6
moltipl. + divis.
n(n 1)/3
per le modiche del vettore b:
addizioni +sottrazioni n(n 1)/2
moltipl .+ divis.
n(n 1)/2
2 3
1 2
7
Totale
3n + 2n 6n
Dunque il numero di operazioni necessarie per risolvere un sistema lineare 3 3
con il metodo dell eliminazione gaussiana e proporzionale a n3 , o meglio , e
O(n3 ) e si legge "o grande di enne al cubo".
E chiaro che gia per n abbastanza piccolo, diciamo n = 6, la convenienza
di calcolo dell eliminazione gaussiana e evidente, infatti abbiamo 63 = 216,
mentre con luso dei determinanti abbiamo 6! = 720.
Vediamo ora come si puo formalizzare il procedimento dell eliminazione di Gauss esemplicato sopra.
(k)
(k)
(k)
mik
= aik /akk ,
(k+1)
aij
(k)
akk = 0
(k) (k)
(k+1)
(k)
(k) (k)
mik bk
x1 + x2 + x3 = 1
x1 + x2 + 2x3 = 2 .
Vediamo un semplice esempio:
x1 + 2x2 + 2x
3 =1
x1 + x2 + x3 = 1
x3 = 1
Nel primo passo della triangolarizzazione si ha:
x2 + x3 = 0
(2)
Dunque a22 = 0; allora per poter continuare con il metodo di Gauss scambiamo le righe:
x1 + x2 + x3 = 1
x2 + x3 = 0
x3 = 1
0 1 8 2
a) A =
0 0 1 5
0 0 0 1
0 0 0 0
0 0 0 0
1
1/2
b) A =
1/3
1/4
1/2
1/3
1/4
1/5
1/3
1/4
1/5
1/6
0
0
0
1
6
1
0
0
0
0
0
2
6
1
0
0
0
0
0
2
7
, b =
1/4
1/5
, b =
1/6
1/7
1
2
1
2
1
2
1
1
*1
1
*1
1
1
1
A=
1
1
1
1 1 1
1
2 3 4
5
3 6 10 15
4 10 20 35
5 15 35 70
6 21 56 126
1
0
0
viene triangolarizzata nella seguente matrice
0
0
0
3
3
3
3
3
3
1
1
0
0
0
0
1
2
1
0
0
0
1
3
3
1
0
0
1
4
6
4
1
0
3
0
0
0
0
0
, da cui si
BA = I
2
Vericare mediante la denizione che data la matrice A = 1
0
3/4 *1/2
1/4
1 *1/2
sua inversa e A1 = *1/2
1/4 *1/2
3/4
1
2
1
0
1 , la
2
1 1 *1
A = 1 2 *1
*2 1
1
Costruiamo la matrice orlata per i tre
1 1
A= 1 2
*2 1
*1 1 0 0
*1 0 1 0
1 0 0 1
1 1 *1
1
0 1 *1 *1
0 3 *1
2
0
0
1
1 1 *1
1
0 0
0 1 *1 *1
1 0
0 0
2
5 *3 1
Usando la sostituzione all indietro possiamo ora risolvere immediatamente i tre
sistemi triangolari:
1 1 *1
x11
1
0 1 *1 x21 = *1
0 0
2
x31
5
1
0
0
1
0
0
1
1
0
1
1
0
*1
*1
2
*1
*1
2
x12
x22 =
x32
x13
x23 =
x33
0
1
*3
0
0
1
2
*1
0
A1 = 3/2 *1/2 1/2
5/2 *3/2 1/2
9
25x1 + 4x2 x3 = 14
2x1 + 26x2 + 3x3 = 15.5
x1 + x2 + 24x3 = 12
x1 = (4x2 + x3 + 14)/25
x = (2x1 3x3 + 15.5)/26
2
x3 = (x1 x2 + 12)/24
(1)
(1)
x3 = (12 + 0 0)/24 = 0.50
10
dove abbiamo indicato in grassetto gli elementi del vettore iniziale usati per
(1) (1) (1)
calcolare la prima approssimazione x(1) = [x1 x2 x3 ] = [0.56. 0.60 0.50] .
Va messo in evidenza che conveniamo di usare un aritmetica a due cifre.
Proseguendo in modo analogo, il secondo passo fornisce la seguente soluzione
approssimata:
(2)
(2)
x3 = (12 + 0.56 0.60)/24 = 0.50
Di nuovo abbiamo indicato in grassetto gli elementi del vettore x(1) usati per
(2) (2) (2)
calcolare la seconda approssimazione x(2) = [x1 x2 x3 ] = [0.48. 0.49 0.50] .
Proseguendo in modo analogo si dimostra che ci si avvicina alla soluzione vera
x = [0.50 0.50 0.50] tanto quanto si vuole; osserviamo comunque che dopo
due passi siamo gia abbastanza vicini alla soluzione.
Il metodo sopra descritto si dice metodo iterativo di Jacobi.
A questo punto e bene denire con esattezza cosa si intende come errore
tra due vettori. Sia x il vettore che approssima il vettore vero x entrambi
di n elementi; allora deniamo lerrore tra i due vettori come il massimo degli
errori tra le componenti
Errore = max |xi xi |
1 i n
Dunque l errore tra due vettori x e x puo essere denito anche come x x ,
ossia come la norma del vettore dierenza.
Analogamente si puo denire la norma (innito) di una matrice A n n
n
A = max
1 i n
|aij |
j=1
12
0 0.3 0.1
0
0.3
senza problemi. La matrice del metodo iterativo e B = 0.2
0.1 0.3
0
La soluzione esatta e x = [1 1 1] .
Per controllare la convergenza, calcoliamo B ; otteniamo B = 0.5.
Prendendo come vettore di partenza x = [0 0 0] si ottengono i seguenti risultati:
k
0
1
2
3
4
x1
0
1.4
1.11
0.929
0.9906
x2
0
0.5
1.20
1.055
0.964
x3
0
1.4
1.11
0.929
0.9906
Abbiamo visto come i metodi numerici per la soluzione dei sistemi lineari si
dividono in due gruppi principali: metodi diretti e metodi iterativi.
I metodi diretti forniscono teoricamente, la soluzione esatta. In generale
i metodi diretti classici sono preferibili per sistemi di ordine non troppo alto
(al di sotto del centinaio di equazioni). Esistono anche metodi diretti costruiti
ad hoc per matrici sparse e questi permettono di trattare con grande ecienza
anche sistemi sparsi di ordine molto piu elevato.
In MATLAB l eliminazione gaussiana con pivot parziale per riga e implemen*
tato direttamente con il comndo "\", che si legge "barra alla rovescia", percio
per risolvere un sistema lineare Ax = b, basta dare il comando x = A\b .
I metodi iterativi dieriscono dai precedenti in modo sostanziale, infatti
ottengono stime della soluzione che si avvicinano progressivamente ai valori
esatti. I metodi iterativi poi si prestano meglio ad essere implementati in versioni
perticolari che tengano conto della sparsita della matrice dei coecienti. Per
questi motivi i metodi iterativi sono preferibili per sistemi di ordine elevato,
come nel caso dei programmi agli elementi niti.
14