RISOLUZIONE DI SISTEMI LINEARI
Algebra lineare numerica 1 La risoluzione di un sistema lineare è il nucleo principale del processo di risoluzione di circa il 70% di tutti i problemi reali Per la risoluzione di un sistema di equazioni lineari, è necessario disporre di metodi, algoritmi e software efficienti
Algebra lineare numerica 2 Esempio Risolviamo il sistema: 10x 1 +x 2 5x 3 = 1 20x 1 +3x 2 +20x 3 = 2 5x 1 +3x 2 +5x 3 = 6 Uno dei metodi di risoluzione piú noti è il metodo di Cramer passo 1: calcolo di 10 1 5 20 3 20 5 3 5 10 1 5 20 3 20 5 3 5 = 10 3 20 3 5 +20 1 5 3 5 +5 1 5 3 20 = 10 (3 5 20 3)+20 (1 5+5 3)+5 (1 20+5 3) = 125 =
Algebra lineare numerica 3 passo 2: calcolo della soluzione: x 1 = 1 1 5 2 3 20 6 3 5 125 = 1 x 2 = 10 1 5 20 2 20 5 6 5 125 = 2 x 3 = 10 1 1 20 3 2 5 3 6 125 = 1.4
Algebra lineare numerica 4 Calcolo delle operazioni effettuate M = numero di moltiplicazioni A = numero di addizioni passo 1 (calcolo di un determinante di ordine 3): 9M + 5A passo 2 (calcolo di 3 determinanti di ordine 3 ed esecuzione di 3 divisioni): (3 9 + 3)M + (3 5)A TOTALE = 39M + 20A
Algebra lineare numerica 5 In generale: la risoluzione di un sistema lineare di ordine n con il metodo di Cramer richiede il calcolo di n+1 determinanti di ordine n, ciascuno dei quali richiede la somma di n termini, ciascuno a sua volta costruito mediante 1+(n-1)! moltiplicazioni (n + 1)[n(1 + (n 1)!)] = = (n + 1)n(n 1)! + (n + 1)n moltiplicazioni T Cramer (n) = O((n + 1)!)
Algebra lineare numerica 6 Numero di operazioni e tempo di calcolo per la risoluzione di un sistema lineare di ordine n con il metodo di Cramer su una ws IBM RS6000 F50 con velocità operativa pari a 317 Mflops: 1 n (n + 1)! = # operazioni Tempo di calcolo (317 Mflops) 10 39 916 800 0.13 secondi 12 6 227 020 800 19 secondi 14 1 307 674 368 000 1 ora 16 355 687 428 096 000 12 giorni 18 121 645 100 408 832 000 12 anni 20 51 090 942 171 709 440 000 51 secoli 1 Mflops= Milioni di operazioni floating-point (cioè fra numeri reali) al secondo
Algebra lineare numerica 7 pur utilizzando un elaboratore con elevata potenza di calcolo, il tempo richiesto per risolvere un sistema di ordine basso (fino a 14) è eccessivo, mentre per ordini maggiori la risoluzione del problema diventa impossibile. Il metodo di Cramer non è utilizzabile nella risoluzione di problemi concreti Illustreremo di seguito alcuni dei metodi piú utilizzati per la risoluzione dei sistemi lineari, iniziando da quelli per sistemi con matrice dei coefficienti di forma particolare: diagonale triangolare superiore triangolare inferiore
Algebra lineare numerica 8 D = d 1,1 d 2,2 d 3,3... d n,n matrice diagonale U = u 1,1 u 1,2 u 1,3... u 1,n u 2,2 u 2,3... u 2,n u 3,3... u 3,n... u n,n u i,j = 0 per i > j matrice triangolare superiore L = l 1,1 l 2,1 l 2,2 l 3,1 l 3,2 l 3,3...... l n,1 l n,2 l n,3... l n,n l i,j = 0 per i < j matrice triangolare inferiore
Algebra lineare numerica 9 Risoluzione di un sistema diagonale Esempio 7x 1 = 3 6.5x 2 = 2 8x 3 = 1.4 sistema diagonale La forma del sistema suggerisce il metodo di risoluzione: x 1 = 3 7 x 2 = 2 6.5 x 3 = 1.4 8 operazioni effettuate: 3M
Algebra lineare numerica 10 In generale: a 1,1 x 1 = b 1 a 2,2 x 2 = b 2 a 3,3 x 3 = b 3.... a n,n x n = b n sistema diagonale (compatibile e determinato a i,i 0) metodo di risoluzione: x i = b i /a i,i, i = 1,..., n (a i,i 0) operazioni effettuate: nm T diag (n) = O(n)
Algebra lineare numerica 11 Risoluzione di un sistema triangolare Esempio 2x 1 +2x 2 +4x 3 = 5 7x 2 +11x 3 = 8 2x 3 = 2 sistema triangolare superiore La forma del sistema suggerisce il metodo di risoluzione: x 3 = 2 2 = 1 x 2 = 8 11x 3 7 = 8 11 1 7 = 3 7 x 1 = 5 2x 2 4x 3 2 = 5 2 ( 3/7) 4 1 2 = 13 14 metodo di back-substitution (sostituzione all indietro) operazioni effettuate: 3A + 6M
Algebra lineare numerica 12 In maniera analoga: 2x 1 = 4 3x 1 +2x 2 = 5 x 1 +2x 2 3x 3 = 1 sistema triangolare inferiore x 1 = 4 2 = 2 x 2 = 5 3x 1 2 = 5 3 2 2 = 1 2 x 3 = 1 x 1 2x 2 3 = 1 2 2 ( 1/2) 3 = 0 metodo di forward-substitution (sostituzione in avanti) operazioni effettuate: 3A + 6M
Algebra lineare numerica 13 In generale: u 1,1 x 1 +u 1,2 x 2 +u 1,3 x 3 +... +u 1,n x n = b 1 u 2,2 x 2 +u 2,3 x 3 +... +u 2,n x n = b 2 u 3,3 x 3 +... +u 3,n x n = b 3.... u n,n x n = b n sistema triangolare superiore (compatibile e determinato u i,i 0) metodo di back-substitution x n = b n /u n,n x i = (b i u i,i+1 x i+1 u i,i+2 x i+2... u i,n x n )/u i,i = (b i ( n k=i+1 u i,k x k )) /u i,i i = n 1, n 2,..., 1
Algebra lineare numerica 14 Analogamente: l 1,1 x 1 = b 1 l 2,1 x 1 +l 2,2 x 2 = b 2 l 3,1 x 1 +l 3,2 x 2 +l 3,3 x 3... = b 3. l n,1 x 1 +l n,2 x 2 +l n,3 x 3 +... +l n,n x n = b n sistema triangolare inferiore (compatibile e determinato l i,i 0, i) metodo di forward-substitution x 1 = b 1 /l 1,1 x i = (b i l i,1 x 1 l i,2 x 2... l i,i 1 x i 1 )/l i,i = ( b i ( i 1 k=1 l i,k x k )) /li,i i = 2, 3,..., n
Algebra lineare numerica 15 Algoritmo B-S (Back-Substitution) versione 1 Ux = b U triangolare superiore. x n := b n /u n,n for i = n 1 to 1 by 1 x i := b i for j = i + 1 to n x i := x i u i,j x j endfor x i := x i /u i,i endfor.
Algebra lineare numerica 16 Algoritmo F-S (Forward-Substitution) Lx = b L triangolare inferiore. x 1 := b 1 /l 1,1 for i = 2 to n x i := b i for j = 1 to i 1 x i := x i l i,j x j endfor x i := x i /l i,i endfor.
Algebra lineare numerica 17 Numero di operazioni effettuate dall algoritmo B-S 1 M per x n 1 A + 2 M per x n 1 2 A + 3 M per x n 2 (n i)a + (n i + 1)M per x i, i = n 3,..., 1 n(n + 1) (1+2+3+...+(n 1)+n) M = M 2 n(n 1) (1+2+3+...+(n 2)+(n 1)) A = 2 A Analogamente: T B S (n) = O( n2 2 ) T F S (n) = O( n2 2 )
Algebra lineare numerica 18 Si ha: OSSERVAZIONE 1 1+ 2+ 3+... + (n 1)+ n+ n+ (n 1)+ (n 2)+... + 2+ 1 = (n + 1)+ (n + 1)+ (n + 1)+... + (n + 1)+ (n + 1) = = n(n + 1) (1 + 2 + 3 +... + (n 1) + n) = = n(n + 1) 2
Algebra lineare numerica 19 x i = OSSERVAZIONE 2 b i n k=i+1 u i,kx k u i,i i = n 1,..., 1 (back-substitution) n u i,kx k = (u i,i+1 u i,i+2... u i,n ) k=i+1 prodotto scalare di due vettori i+1 x i+1 x i+2. x n i i+1 n la quantità u ikx k può essere calcolata k=i+1 mediante la function dot(u n i, x n i ) di BLAS, u n i = (u i,i+1,..., u i,n ), x n i = (x i+1,..., x n )
Algebra lineare numerica 20 OSSERVAZIONE 3 Negli algoritmi di back e forwardsubstitution ad ogni passo si effettua una divisione per un elemento diagonale condizione di applicabilità: elementi diagonali 0
Algebra lineare numerica 21 U triangolare superiore con u i,i = 0 0x i +u i,i+1 x i+1 +u i,i+2 x i+2 +...+u i,n x n = b i (i-ma equazione) r i = b i n u i,kx k = 0 k=i+1 (resto i-ma equazione)
Algebra lineare numerica 22 1 caso: r i 0 sistema incompatibile: l algoritmo termina Esempio: x 1 +x 2 +x 3 +x 4 = 6 0x 2 +3x 3 +x 4 = 5 3x 3 +x 4 = 2 0x 4 = 1 r 4 = 1 sistema incompatibile
Algebra lineare numerica 23 2 caso: r i = 0 sistema incompatibile o indeterminato: l algoritmo termina Esempio: a) x 1 +x 2 +x 3 +x 4 = 6 0x 2 +3x 3 +x 4 = 5 3x 3 +x 4 = 2 0x 4 = 0 r 4 = 0 scelta arbitraria di x 4 r 2 = 5 (3x 3 + x 4 ) MA 3x 3 + x 4 = 2 (terza equazione) sistema incompatibile.
Algebra lineare numerica 24 b) x 1 +x 2 +x 3 +x 4 = 6 0x 2 +2x 3 +x 4 = 5 3x 3 +x 4 = 2 0x 4 = 0 r 4 = 0 scelta arbitraria di x 4 r 2 = 5 (2x 3 + x 4 ) = 5 2 (2 x 4) 3 x 4 = = 5 4 3 x 4 3 r 2 = 0, per x 4 = 11 verificato per x 1 = 2 x 2, x 4 = 11, x 3 = 3 e x 2 sistema indeterminato
Algebra lineare numerica 25 Algoritmo B-S versione 2 (con controllo esistenza soluzioni). l :=.true. indica sistema determinato calcolo di x n e controllo compatibilità sistema if (U(n, n) 0) then x(n) := b(n)/u(n, n) elseif (b(n) = 0) then sistema incompatibile o indeterminato l :=.false. else sistema incompatibile l :=.false. endif ciclo per il calcolo degli x i i := n 1 while (l.and.i 0) calcolo della somma dei termini u i,k x k le istruzioni successive realizzano il prodotto scalare dei due vettori (u i,i+1 u i,i+2... u i,n )(x i+1 x i+2... x n ) T cont.
Algebra lineare numerica 26 sum := 0 for k = i + 1 to n sum := sum + U(i, k)x(k) endfor calcolo resto i-ma equazione r := b(i) sum controllo compatibilità sistema if (U(i, i) 0) then calcolo finale di x i x(i) := r/u(i, i) elseif (r = 0) then sistema incompatibile o indeterminato l :=.false. else sistema incompatibile l :=.false. endif i := i 1 endwhile.
Algebra lineare numerica 27 OSSERVAZIONE 4 Nel caso in cui la memorizzazione della matrice avviene per colonne, si può ottenere una implementazione del metodo di back-substitution piú efficiente. Essa viene realizzata nella seguente versione dell algoritmo B-S, dove si accede agli elementi di U procedendo per colonne: ad ogni passo, ai termini noti si sottrae l ultimo valore calcolato, x i+1, moltiplicato per il relativo coefficiente in tutte le righe dalla prima alla (i) ma, con i = n 1,..., 1.
Algebra lineare numerica 28 Algoritmo B-S versione 3 (accesso per colonne). l :=.true. indica sistema determinato calcolo di x n e controllo compatibilità sistema if (U(n, n) 0) then x(n) := b(n)/u(n, n) elseif (b(n) = 0) then sistema incompatibile o indeterminato l :=.false. else sistema incompatibile l :=.false. endif ciclo per il calcolo degli x i i := n 1 while (l.and.i 0) aggiornamento dei termini noti cont.
Algebra lineare numerica 29 for k = 1 to i b(k) := b(k) U(k, i + 1)x(i + 1) endfor controllo compatibilità sistema if (U(i, i) 0) then calcolo di x i x(i) := b(i)/u(i, i) elseif (b(i) = 0) then sistema incompatibile o indeterminato l :=.false. else sistema incompatibile l :=.false. endif i := i 1 endwhile.
Algebra lineare numerica 30 In generale, per risolvere un sistema qualsiasi Ax = b con A matrice n n non singolare, si può sviluppare l idea seguente: Ax = b viene trasformato in un sistema equivalente Ux = b con U almeno triangolare (equivalente: ammette stessa soluzione) In tal modo, una volta effettuata la trasformazione, il sistema può essere risolto con uno dei metodi illustrati in precedenza.
Algebra lineare numerica 31 Esempio Consideriamo il sistema: 2x + y = 4 x 0.5y = 1 la cui soluzione è (1.5,1). Un sistema ad esso equivalente è dato dal sistema triangolare: 2x + y = 4 y = 1
Algebra lineare numerica 32 Questo sistema si può ottenere algebricamente con una opportuna combinazione lineare dei vettori riga associati alle due equazioni del sistema: Dunque l equazione: ( 1 0.5 1 ) 1 2 ( 2 1 4 ) 0 1 1 y = 1 diventa la nuova seconda equazione che dà luogo al sistema equivalente: 2x + y = 4 y = 1
Algebra lineare numerica 33 Seguendo questa idea, si arriva al metodo di eliminazione di Gauss Obiettivo: trasformare Ax = b in Ux = b triangolare superiore equivalente Esempio Dato il sistema: 2x 1 +2x 2 4x 3 = 4 3x 1 +6x 2 +3x 3 = 3 5x 1 8x 2 x 3 = 9 ad esso è associata la matrice: 2 2 4 4 A b = 3 6 3 3 5 8 1 9
Algebra lineare numerica 34 passo 1 scopo: eliminare x 1 dalla seconda e terza equazione procedimento: 1) moltiplicare per 3/2 la prima riga della matrice A b e sottrarla dalla seconda: II riga ( 3 6 3 3) 3 2 I riga 3 2 ( 2 2 4 4) nuova II riga ( 0 3 9 3) = moltiplicatore relativo alla II riga 2) moltiplicare per 5/2 la prima riga e sottrarla dalla terza: III riga (5 8 1 9) 5 2 I riga 5 2 ( 2 2 4 4) nuova III riga ( 0 3 11 1) = moltiplicatore relativo alla III riga
Algebra lineare numerica 35 Al termine del passo 1, il sistema equivalente ottenuto è: 2x 1 +2x 2 4x 3 = 4 3x 2 +9x 3 = 3 3x 2 11x 3 = 1 passo 2 scopo: eliminare x 2 dalla terza equazione procedimento: moltiplicare per 3/3 = 1 la seconda riga della matrice aumentata e sottrarla dalla terza: III riga (0 3 11 1) II riga 1(0 3 9 3) nuova III riga (0 0 2 2) 1 = moltiplicatore relativo alla III riga
Algebra lineare numerica 36 Al termine del passo 2, il sistema equivalente ottenuto è: 2x 1 +2x 2 4x 3 = 4 3x 2 +9x 3 = 3 2x 3 = 2 sistema triangolare superiore questo sistema è risolubile con il metodo di back-substitution x 3 = 2 2 = 1 x 2 = 1 3 (3 9 ( 1)) = 4 x 1 = 2 1 ( 4 2 4 + 4 ( 1)) = 8
Algebra lineare numerica 37 RISOLUZIONE DI Ax = b metodo di eliminazione di Gauss (triangolarizzazione) + back-substitution (risoluzione sistema triangolare)
Algebra lineare numerica 38 eliminazione di Gauss caso generale passo 1 passo 2 A b A (1) b (1)... passo n-1 A (2) b (2) A (n 1) b (n 1)
Algebra lineare numerica 39 Passo 1 scopo annullare tutti gli elementi della prima colonna di A tranne a 11 procedimento per i = 2,..., n sottrarre dalla i-ma riga della matrice aumentata A b, la prima riga moltiplicata per m i1 = a i1 a 11 Ciò significa che ciascuna riga della matrice aumentata A b, a partire dalla seconda, viene sostituita con una combinazione lineare della riga stessa e della prima moltiplicata per un opportuno scalare (moltiplicatore m i1 ): m 21 = a 21 a 11. m n 1 1 = a n 1 1 a 11 m n1 = a n1 a 11 a 11 a 12... a 1n b 1 a 21 a 22... a 2n b 2....... a n 1 1 a n 1 2... a n 1 n b n 1 a n1 a n2... a nn b n
Algebra lineare numerica 40 La matrice A b diventa: a 11 a 12... a 1n b 1 0 a 22 a 21 a 11 a 12... a 2n a 21 a 11 a 1n b 2 a 21 a 11 b 1....... 0 a n 1 2 a n 1 1 a 11 a 12... a n 1 n a n 1 1 a 11 a 1n b n 1 a n 1 1 a 11 b 1 0 a n2 a n1 a 11 a 12... a nn a n1 a 11 a 1n b n a n1 a 11 b 1 Al termine del passo 1, si ottiene il sistema equivalente: A (1) x = b (1)
Algebra lineare numerica 41 con: A (1) = a 11 a 12... a 1n 0 a (1) 22... a (1) 2n...... 0 a (1) n 1 2... a(1) n 1 n 0 a (1) n2... a (1) nn ; dove: b (1) = b 1 b (1) 2. b (1) n a (1) ij = a ij m i1 a 1j ; i, j = 2, 3,..., n b (1) i = b i m i1 b 1 ; i = 2, 3,..., n m i1 = a i1 a 11 ; i = 2, 3,..., n (moltiplicatori)
Algebra lineare numerica 42 Passo 2 scopo annullare tutti gli elementi della seconda colonna di A (1) a partire da a (1) 32 procedimento per i = 3,..., n sottrarre dalla i-ma riga della matrice aumentata A (1), la seconda riga moltiplicata per m i2 = a(1) i2 a (1) 22 b Al termine del passo 2 si ottiene il sistema equivalente: A (2) x = b (2)
Algebra lineare numerica 43 con: A (2) = a 11 a 12 a 13... a 1n 0 a (1) 22 a (1) 23... a (1) 2n 0 0 a (2) 33... a (2) 3n....... 0 0 a (2) n 1 3... a(2) n 1 n 0 0 a (2) n3... a (2) nn ; b (2) = b 1 b (1) 2 b (2) 3. b (2) n 1 b (2) n dove: a (2) ij = a(1) ij m i2a (1) 2j ; i, j = 3,..., n b (2) i = b (1) i m i2 b (1) 2 ; i = 3,..., n m i2 = a(1) i2 a (1) 22 ; i = 3,..., n (moltiplicatori)
Algebra lineare numerica 44 Al generico passo k, con k < n: inalterati riga pivot k 0 matrice attiva vet to re at ti vo m ik k n k modificare
Algebra lineare numerica 45 Passo k: scopo annullare tutti gli elementi della k-ma colonna di A (k 1) a partire da a (k 1) k+1 k procedimento per i = k + 1,..., n sottrarre dalla i-ma riga della matrice aumentata A (k 1) b, la k-ma riga moltiplicata per m ik = a(k 1) ik a (k 1) kk Al termine del generico passo k si ottiene il sistema equivalente: A (k) x = b (k)
Algebra lineare numerica 46 con: A (k) = a 11 a 12... a 1k a 1 k+1... a 1n 0 a (1) 22... a(1) 2k a (1) 2 k+1... a (1) 2n....... 0 0... a (k 1) kk a (k 1) k k+1 0 0... 0 a (k)... a (k 1) kn.... k+1 k+1... a(k) k+1 n..... 0 0... 0 a (k) n 1 k+1... a(k) n 1 n 0 0... 0 a (k) n k+1... a (k) nn b (k) = (b 1 b (1) 2... b (k 1) k dove: b (k) k+1... b(k) n 1 b(k) n ) T a (k) ij = a (k 1) ij m ik a (k 1) kj ; i, j = k + 1,..., n b (k) i = b (k 1) i i = k + 1,..., n m ik b (k 1) k ; m ik = a(k 1) ik ; a (k 1) kk
Algebra lineare numerica 47 Il procedimento si ripete fino ad ottenere il sistema equivalente: con: A (n 1) = A (n 1) x = b (n 1) a 11 a 12 a 13... a 1n 0 a (1) 22 a(1) 23... a(1) 2n 0 0 a (2) 33... a(2) 3n... 0 0... 0 a (n 1) nn (triangolare superiore) b (n 1) = (b 1 b (1) 2 b (2) 3... b (n 1) n ) T il metodo di Gauss termina dopo n 1 passi
Algebra lineare numerica 48 Ax = b A (1) x = b (1).. A (n 1) x = b (n 1) A (n 1) = U b (n 1) = b Ux = b equivalente ad Ax = b Per il ruolo svolto nel metodo di eliminazione, gli elementi a (k 1) k k pivot (cardini) sono detti
Algebra lineare numerica 49 Algoritmo di Gauss Schema:. per k = 1 fino a n 1 per i = k + 1 fino a n calcolo moltiplicatori m ik modifica riga i ma matrice e vettore attivi.
Algebra lineare numerica 50 Algoritmo di Gauss versione 1. ciclo sui passi for k = 1 to n 1 cicli per ottenere A (k) e b (k) for i = k + 1 to n moltiplicatore i-ma riga m ik := a ik /a kk ; a ik := 0; modifica elementi matrice attiva for j = k + 1 to n a ij := a ij m ik a kj ; endfor modifica vettore termini noti b i := b i m ik b k ; endfor endfor.
Algebra lineare numerica 51 Calcolo del numero delle operazioni effettuate dall algoritmo di Gauss passo k calcolo di n k moltiplicatori k riga k k n-k costo per 1 moltiplicatore m ik = a i,k a k,k : 1M costo totale moltiplicatori: (n k)m
Algebra lineare numerica 52 modifica matrice e vettore attivi k in al te ra ta inalterata riga k matrice attiva k vet to re at ti vo n-k modificare costo per 1 elemento matrice attiva a i,j = a i,j m ik a k,j : 1M + 1A costo per 1 elemento vettore attivo b i = b i m ik b k : 1M + 1A numero totale di elementi =(n k) 2 +(n k) costo totale modifica: (n k)(n k +1)M +(n k)(n k +1)A
Algebra lineare numerica 53 Eseguendo tutti i passi dell algoritmo, si ha in definitiva: Costo globale = calcolo moltiplicatori (n 2 n) M 2 + modifica matrici e vettori attivi 2 (n 3 n) (A + M) 3 2 n 1 k=1 = n 1 (n k)(n k + 1) = n 1 (n k) 2 + n 1 (n k) = k=1 k 2 + n 1 k=1 k=1 k=1 k = 1 6 n(n 1)(2n 1) + 1 n(n 1) = 2 = 1 3 n(n 1)(n + 1) = 1 3 (n3 n)
Algebra lineare numerica 54 Algoritmo di Gauss T Gauss (n) = n3 n 3 (A+M)+ n2 n 2 M = = O n 3 3 Risoluzione del sistema (Gauss + Back-substitution) T Gauss+Back (n) = O n 3 3 + n2 2 = O n 3 3
Algebra lineare numerica 55 Numero di operazioni e tempo di calcolo per la risoluzione di un sistema lineare di ordine n con l algoritmo di Gauss e di back-substitution, su una workstation IBM RS6000 F50 con velocità operativa pari a 317 Mflops: = # operazioni Tempo di calcolo (317 Mflops) 10 333 0.000001 secondi n n 3 3 20 2.666 0.000008 secondi 50 41.666 0.0001 secondi 100 333.333 0.001 secondi 1.000 333.333.333 1 secondo 10.000 333.333.333.333 17 minuti Il metodo di Gauss è utilizzabile per la risoluzione di sistemi lineari
Algebra lineare numerica 56 Complessità di spazio algoritmo di Gauss Al passo k la costruzione di A (k) e b (k) richiede solo A (k 1) e (b (k 1) a (k) i,j b (k) i possono essere memorizzati su a(k 1) i,j può essere memorizzato su b (k 1) i algoritmo in place
Algebra lineare numerica 57 Inoltre a (k) i,k, i = k + 1,..., n sono eliminati m ik, i = k + 1,..., n possono essere memorizzati su a (k) i,k, i = k + 1,..., n complessità di spazio algoritmo di Gauss S Gauss (n) = n 2 + n = O(n 2 )
Algebra lineare numerica 58 OSSERVAZIONE Una implementazione del metodo di Gauss che risulta piú efficiente nel caso in cui la memorizzazione della matrice avviene per colonne, viene realizzata nella seguente versione dell algoritmo, dove si accede agli elementi della matrice attiva per colonne, calcolando, ad ogni passo k, prima tutti i moltiplicatori e poi modificando gli elementi procedendo sulle colonne invece che sulle righe (semplicemente scambiando le iterazioni su i e su j).
Algebra lineare numerica 59 Algoritmo di Gauss versione 2 (accesso per colonne). ciclo sui passi for k = 1 to n 1 cicli per ottenere A (k) e b (k) for i = k + 1 to n moltiplicatori di tutte le righe a ik := a ik /a kk ; endfor modifica matrice attiva e vettore termini noti for j = k + 1 to n for i = k + 1 to n a ij := a ij m ik a kj ; b i := b i m ik b k ; endfor endfor endfor.