Matrici triangolari. Prima di esporre il metodo LU per la risoluzione di sistemi lineari, introduciamo la nozione di matrice triangolare. Ci limiteremo al caso di matrici quadrate anche se l’estensione a matrici rettangolari non presenta difficoltà. Allora una n n matrice A è triangolare superiore o triangolare alta se i > j implica aij = 0 Vale a dire sono nulli tutti i coefficienti sotto la diagonale. Tipicamente 𝑎11 𝑎12 ⋯ 𝑎1𝑛 0 𝑎22 ⋯ 𝑎2𝑛 𝐴= ⋮ ⋱ ⋮ ⋮ 𝑎 0 0 ⋯ 𝑛𝑛 Invece una n n matrice A è triangolare inferiore o triangolare bassa se i < j implica aij = 0 Questa volta sono nulli tutti gli elementi sotto la diagonale. Tipicamente 𝑎11 0 ⋯ 0 𝑎21 𝑎22 ⋯ 0 𝐴= ⋮ ⋮ ⋮ ⋱ 𝑎𝑛1 𝑎𝑛2 ⋯ 𝑎𝑛𝑛 Per esempio, una matrice 4 4 triangolare alta ha la forma a11 a12 a13 a14 0 a 22 a 23 a 24 A 0 0 a33 a34 0 0 0 a 44 mentre una matrice di ordine 4 triangolare bassa è del tipo 0 0 a11 0 0 a 21 a 22 0 A a a32 a33 0 31 a a a a 43 43 44 41 Il determinante di una matrice triangolare ( di entrambi i tipi ) è il prodotto degli elementi diagonali. Per esempio, se n = 4, detA = a11a22a33a44 Segue che una matrice triangolare è singolare se almeno uno degli elementi diagonali è nullo. Una matrice diagonale è nello stesso tempio triangolare alta e bassa. I sistemi di equazioni con matrice dei coefficienti triangolare sono facilmente risolubili. Cominciamo a mostrare l’algoritmo nel caso A sia triangolare inferiore di ordine n. Il sistema Ax = b, in forma esplicita, si scrive a11x1 = b1 a21x1 + a22x2 = b2 . . . ai1x1 + …aijxj + …aiixi = bi . . . an1x1 + ……………………….annxn = bn Il metodo di risoluzione è il metodo di sostituzione in avanti. Si calcola x1 dalla prima equazione 𝑏1 𝑥1 = 𝑎11 e, supposto di aver calcolato x1, x2, …xi-1, si utilizza la equazione i-esima ai1x1 + …aijxj + …aiixi = bi, per calcolare xi, come xi =( bi – ai1x1 – ai2x2 – …aii-1xi-1 )/aii, i = 2, …n. Per calcolare xi occorrono 2i-1 flop per cui il calcolo del vettore soluzione richiede 2( 1+2 + …n) – n = n(n+1) – n = n2 flop. Il metodo di risoluzione del sistema Ax = b, nel caso di A triangolare superiore di ordine n, è, invece, il metodo di sostituzione all’indietro. Intanto, in forma esplicita, a11x1 + a12x2 + …a1nxn = b1 a22x2 + …a2nxn = b2 . . . aiixi + …aijxj + ….ainxn = bi . . . annxn = bn. Si calcola xn dall’ultima equazione, ottenendo 𝑏𝑛 𝑥𝑛 = 𝑎𝑛𝑛 Poi, supposto di avere calcolato xn, xn-1, …xi+1, si trova xi servendosi dell’equazione i-esima. Allora xi = (bi –aii+1xi+1 –aii+2x2…. ainxn)/aii, i = n-1, …1 Ancora una volta il costo complessivo è di n2 flop. Da notare che ogni elemento diagonale non nullo ha permesso il calcolo del vettore soluzione. Questi due algoritmi molto efficaci per risolvere sistemi triangolari ( cioè con matrice dei coefficienti triangolare), si rilevano molto utili se la matrice A di un sistema si presenta in forma fattorizzata. Per esempio si consideri il sistema (L1UL2)x = b, dove L1 e L2 sono triangolari basse e U è triangolare alta, tutte dello stesso ordine n e non singolari. Invece di calcolare la matrice A = L1UL2, conviene, usando la proprietà associativa, porre UL2x = y e risolvere il sistema triangolare L1y = b. Una volta calcolato y, si deve risolvere il sistema (UL2)x = y, e conviene porre L2x = z, e risolvere il sistema Uz = y. Infine, trovato z, non resta che risolvere L2x = z. Il tutto con 3n2 flop !. Esempio Con riferimento all’esempio di prima sia n = 4, e 1 0 0 0 2 −2 0 1 1 0 0 0 𝐿1 = −2 1 0 0 , 𝑈 = 0 1 1 2 , 𝐿2 = −2 2 0 0 0 0 2 1 −1 1 2 0 1 1 2 0 0 0 0 1 1 1 1 1 1 −1 1 2 Il vettore termine noto sia b = (1 0 15 9)T. Allora, senza eseguire il prodotto A = L1UL2, da L1UL2x = b, con la posizione UL2x = y, andiamo a risolvere il sistema L1y = b, che, esplicitando, è y1 = 1, -2y1 + y2 = 0, -y1 + y2 + 2y3 = 15, y1 + y2 + y3 + y4 = 9. Sostituendo y1 nella seconda equazione si ha y2 = 2, e sostituendo y1 e y2 nella terza equazione si trova y3 = 7, e, infine, per sostituzione nella quarta si trae y4 = -1. IL vettore soluzione è y = (1 2 7 1)T. Questo diventa vettore termine noto del sistema UL2x = y, e con la posizione L2x = z, dobbiamo risolvere il sistema Uz = y, che, esplicitando, è 2z1 - 2z2 + z4 = 1, z2 + z3 + 2z4 = 2, 2z3 + z4 = 7, z4 = -1. Allora, sostituendo z4 nella terza equazione, si calcola z3 = 4, e con la sostituzione di z3 e z4, nella seconda si trova z2 = 0, e, infine, mettendo z2, z3 e z4 nella prima, si trova z1 = 1. Il vettore soluzione è dunque z = ( 1 0 4 -1)T. Resta da risolvere L2x = z, che, in forma esplicita, è x1 = 1, -2x1 + 2x2 = 0, x1 + x2 + 2x3 = 4, x1 –x2 + x3 + 2x4 = -1 Con la sostituzione di x1 nella seconda equazione si trae x2 = 1, e con la sostituzione di x1 e x2 nella terza equazione, si calcola x3 = 1 e, infine, mettendo x1, x2, x3, nella quarta equazione si trova x4 = 1. Il vettore soluzione del sistema è x = (1 1 1 -1 )T. • Per illustrare il metodo LU richiamiamo la nozione si sottomatrice principale e minore principale di testa. Sia A una matrice di ordine n. Una sottomatrice principale di ordine h n, si ottiene selezionando h righe e colonne di A con gli stessi indici. Se scegliamo le prime h righe e h colonne otteniamo la matrice principale di testa di ordine h. Le matrici principali di testa sono n come n è la dimensione della matrice. La primo è la 1 1 matrice a11, e l’ultima e la matrice A stessa In sostanza si tratta delle sottomatrici a11 a12 a13 a11 a12 , a21 a22 a23 , ecc. a11, a21 a22 a 31 a32 a33 I determinanti delle sottomatrici principali di testa sono i minori principali di testa di A. Sarà utile per il seguito la seguente proprietà sulle matrici principali di testa. Se L è una matrice triangolare inferiore e B è una matrice qualsiasi, entrambe quadrate dello stesso ordine, allora le sottomatrici principali di testa di A = LB, sono il prodotto tra le corrispondenti matrici principali di L e B. Questo nasce dal fatto che, selezionata una sottomatrice principale di testa di L, questa viene affiancata da un blocco nullo in L. Vale il Teorema Sia A una matrice quadrata di ordine n. Se i primi n minori principali di testa di A sono diversi da zero, esiste una sola matrice triangolare bassa L con elementi diagonali uguali a uno e una sola matrice triangolare alta U, tali che A = LU. • L’ Algoritmo LU Nel descrivere questo algoritmo di fattorizzazione, mostreremo che, in realtà, si ottengono anche tutte le fattorizzazioni LU delle sottomatrici principali di testa. Risulterà evidente l’ipotesi sui minori principali di testa. Le matrici L e U della fattorizzazione si ottengono dopo n-1 passi, durante i quali si hanno le fattorizzazioni intermedie A = L(k)U(k), k = 1, …n-1. (k) Al termine del passo k-esimo, L è una matrice triangolare bassa con la seguente struttura L(k) 0 11 L(k) (k) L21 I dove L(k) 11 è una matrice quadrata di ordine k , triangolare bassa e con elementi diagonali uguali a uno, L(k) 21 è una (n-k) k matrice, I è la matrice identità di ordine n -k, e 0 è un blocco k ( n-k) nullo. In sostanza L(k) è una matrice triangolare inferiore con elementi diagonali uno, ma i coefficienti sotto l’elemento diagonale sono zero a partire dalla colonna (k+1)-esima. Invece U(k) è una “ quasi “ triangolare alta con la struttura (k) U (k) U12 U (k) 11 (k) 0 U 22 (k) (k) (k) dove U11 è una matrice quadrata di ordine k triangolare alta, U12 è una k (n-k) matrice, U 22 è (k) una matrice quadrata di ordine n - k, e 0 è un blocco (n-k) k nullo. In sostanza U è tale che le prime k colonne hanno elementi nulli sotto l’elemento diagonale. Dalla proprietà prima enunciata, la matrice principale di testa di A, di ordine k, diventa il prodotto delle due matrici principali di testa di L(k) e U(k) che sono rispettivamente triangolare bassa (ad elementi diagonali uno) e triangolare alta. Cioè si ha la fattorizzazione LU di tale matrice. Per uniformità di notazione poniamo L(0) = I, U(0) = A. (0) u11 . u1( j0 ) . u1(n0 ) . . . . . U ( 0 ) ui(10 ) . uij( 0 ) . uin( 0 ) . . . . . ( 0 ) (0) (0) un1 . unj . unn (0) Allora, u11 a11 è il primo pivot ed è non nullo perché a11 è il primo minore principale di testa. Formiamo i moltiplicatori dividendo per il pivot ogni elemento della prima colonna. u0 1 li1 = i10 , i = 2, … u11 La prima riga, contenente il pivot è la riga pivotale che è quella di riferimento per eseguire le seguenti trasformazioni. Da ogni riga i sottraiamo la riga pivotale premoltiplicata per il moltiplicatore li11 . Si forma una nuova matrice U(1) di elementi, uij( 1 ) uij( 0 ) li(11 )u1( j0 ) , i,j 2,...n. Gli elementi della prima riga sono gli stessi di U(0). Gli elementi della prima colonna sotto il pivot sono stati resi nulli. Questo è il motivo per cui l’indice j parte da 2. Insomma la nuova matrice è (1) u11 . u1( 1j ) . u1(n1 ) (1) . . u2( 1n) 0 u22 U (1) 0 . . . . . . . . . (1) (0) . . unn 0 un 2 Mettiamo i moltiplicatori, nell’ordine, nella prima colonna di L(0) = I, sotto l’elemento diagonale , per formare 𝐿(1) = 1 𝑙21 . . 𝑙𝑛1 0 1 0 . 0 . . . . . . . . . 0 0 0 . 0 1 Si dimostra che A è il prodotto di tali matrici, quindi il primo passo A = L(1)U(1) è completato. Supponiamo, ora, di essere pervenuti al passo (k-1), con A = L(k-1)U(k-1), L(k111 ) 0 (k 1 ) , L (k 1 ) L I 21 (k 1 ) (k 1 ) U11 U12 U (k 1 ) 0 U 22 La matrice L(k-1) è triangolare bassa con elementi diagonali uguali a uno, e la sottomatrice principale (k 1 ) di testa di ordine k di U(k-1) è triangolare alta, con determinante ukk(k 1 ) det U11 Poiché deve essere (k 1 ) uguale al minore principale di testa di ordine k di A, segue che il k-esimo pivot ukk(k 1 ) è non nullo. (𝑘−1) Prendiamo in esame il blocco 𝑈𝑘𝑘 (k 1 ) ukk(k 1 ) . ukj(k 1 ) . ukn . . . . . (k 1 ) U 22 uik(k 1 ) . uij(k 1 ) . uin(k 1 ). . . . . . (k 1 ) (k 1 ) . unj(k 1 ) . unn unk e formiamo i moltiplicatori uik(k 1 ) (k) lik (k 1 ) , i k 1,...n ukk La riga k-esima è, ora, la riga pivotale. Da ogni riga i > k, sottraiamo la riga pivotale, premoltiplicata per il moltiplicatore i-esimo, vale a dire uij(k) uij(k 1 ) lik(k)ukj(k 1 ), i,j k 1,...n. (k) Il blocco viene modificato con prima colonna nulla sotto il pivot. La nuova matrice U ha i restanti elementi uguali alla matrice U(k-1). Mettiamo i moltiplicatori nella colonna k-esima ddi L(k-1) nell’ordine sotto l’elemento diagonale uno. Si viene a formare la matrice L(k) e ancora una volta si prova A = L(k)U(k) (n-1) Al passo n-1 la matrice L = L è triangolare bassa ( ma lo erano anche le altre) con elementi diagonali uno, e U = U(n-1) è finalmente triangolare alta. Risulta A = LU, e abbiamo anche ottenuto le fattorizzazioni delle sottomatrici principali. Esempio. 1 1 3 2 9 7 1 4 A 3 0 12 3 5 6 0 24 9 9 12 11 2 8 1 1 7 e proviamo a costruire la fattorizzazione A = LU. Poiché, in generale, non possiamo controllare che i cinque minori principali di testa di A sono non nulli, mandiamo comunque in esecuzione l’algoritmo di fattorizzazione, e al primo pivot nullo incontrato ( se ciò accade) siamo costretti a fermarci e a riconoscere nella matrice A che il minore principale di testa corrispondente è nullo. Quindi iniziamo con U (0) = A, e L( 0 ) 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Risulta evidentemente A = L(0)U(0) Il primo pivot è 3 0, e quindi formiamo il primo vettore di moltiplicatori 9/3 =3, (-3)/3 = -1 6/3=2 9/3=3 e la nuova matrice L(1) 1 0 0 0 0 3 1 0 0 0 L(1) 1 0 1 0 0 2 0 0 1 0 3 0 0 0 1 Dalla seconda riga di U(0) sottraiamo la prima riga premoltiplicata per il secondo elemento della prima riga di L(1) che è il moltiplicatore 3, dalla terza riga di U(0) sottraiamo la prima riga premoltiplicata per il terzo elemento della prima riga di L(11 che è il moltiplicatore –1. Dalla quarta riga di U(0) sottraiamo la prima riga premoltiplicata per ilquarto elemento della prima riga di L(1) che è il moltiplicatore 2. Dalla quinta riga di U(0) sottraiamo la prima riga premoltiplicata per il quinto elemento della prima riga di L(1) che è il moltiplicatore 3. Si ottiene la nuova matrice 3 0 (1) U 0 0 0 2 1 1 1 2 4 1 2 2 11 4 1 4 22 7 3 3 15 8 1 Il secondo pivot è –1 0. Se ciò non fosse avvenuto, il minore principale di testa di ordine due sarebbe stato nullo. Formiamo, allora, i moltiplicatori (-2)/(-1) =2, 4/(-1)= -4, (-3)/(-1) = 3, (2) La nuova matrice L si ottiene da L(1) sostituendo gli zeri della seconda colonna sotto l’elemento diagonale uno, con i nuovi moltiplicatori Risulta, allora 0 0 0 0 1 1 0 0 0 3 L( 2 ) 1 2 1 0 0 2 4 0 1 0 3 3 0 0 1 Dalla terza riga di U(1) sottraiamo la seconda riga premoltiplicata per il terzo elemento della seconda colonna di L(2) che è il moltiplicatore 2. . Dalla quarta riga di U(1) sottraiamo la seconda riga premoltiplicata per il quarto elemento della seconda colonna di L(2) che è il moltiplicatore –4. Dalla quinta riga di U(1) sottraiamo la seconda riga premoltiplicata per il quinto elemento della seconda colonna di L(2) che è il moltiplicatore 3. Otteniamo U (2) 3 2 1 0 1 4 0 0 3 0 0 6 0 0 3 1 2 1 2 2 3 3 5 5 5 Il terzo pivot è 3 0. Se fosse risultato nullo, sarebbe stato nullo il minore principale di testa di ordine tre di A. Allora i moltiplicatori sono (-6)/3 = -2 3/3 = 1 La nuova matrice L(3), è 0 0 0 0 1 1 0 0 0 3 L(3) 1 2 1 0 0 2 4 2 1 0 3 3 1 0 1 Dalla quarta riga di U(2) sottraiamo la terza riga premoltiplicata per quarto elemento della terza colonna di L(3) che è il moltiplicatore –2. Dalla quinta riga di U(2) sottraiamo la terza riga premoltiplicata per il quinto elemento della terza colonna di L(3) che è il moltiplicatore 1. Si ottiene U (3) 3 2 1 0 1 4 0 0 3 0 0 0 0 0 0 1 2 1 2 2 3 1 1 3 2 Il quarto pivot è –1 0. Se fosse risultato zero, sarebbe stato zero anche il minore principale di testa di ordine quattro di A. L’ultimo moltiplicatore è (-3)/(-1) = 3 Si trova la matrice finale triangolare bassa con elementi diagonali uno 0 0 0 0 1 1 0 0 0 3 L L( 4 ) 1 2 1 0 0 . 2 4 2 1 0 3 3 1 3 1 Sottraiamo dalla quinta riga di U(3) la quarta riga premoltiplicata per l’ultimo moltiplicatore 3 ( il quinto elemento della quarta colonna di L(4). Quindi la matrice finale triangolare alta è U U (4) 3 2 1 0 1 4 0 0 3 0 0 0 0 0 0 1 2 1 2 2 3 1 1 0 1 In sostanza abbiamo fatto le 4 = 5-1, fattorizzazioni A = L(1)U(1), A = L(2)U(2), A = L(3)U(3), A = L(4)U(4) = LU. Esercizio Individuale le fattorizzazioni LU delle quattro sottomatrici principali. Una di queste è 3 2 1 1 0 0 3 2 1 9 7 1 3 1 0 0 1 4 3 0 12 1 2 1 0 0 3 Conseguenze della fattorizzazione. L’algoritmo LU produce il determinante di A se si calcola il prodotto degli elementi diagonali di U Nell’esempio di prima il determinante è - 9. Infine i minori principali di testa di A sono i minori principali di testa di U. Nell’esempio illustrato sono nell’ordine 3, -3, -9, 9, -9 Il costo computazionale della fattorizzazione. Una analisi dettagliata delle operazioni floating ( flop) per eseguire la fattorizzazione, porta al calcolo esatto del costo complessivo C. Interessa, però, solo la parte predominante del costo e si usa scrivere C = O(2n3/3) 2 Vuol dire che esistono altri termini in n e n e un termine costante che, per n sufficientemente grande sono trascurabili rispetto al termine predominante. Per esempio se fattorizziamo una matrice di ordine n = 100, dobbiamo eseguire 650000 circa operazioni alle quali aggiungere circa 10000 operazioni che non alterano l’ordine di grandezza del costo complessivo. Utilizzo della fattorizzazione. . Una volta eseguita la fattorizzazione A = LU di A il sistema lineare si presenta nella forma LUx = b In questa forma si pone Ux = y, poi si comincia col risolvere il sistema triangolare inferiore,cioè con matrice dei coefficienti triangolare bassa, e a elementi diagonali unitari, Ly = b. In forma esplicita questo sistema si scrive y1 = b1 l21y1 + y2 = b2 . li1y1 + ……yi = bi . ln1y1 + ………….yn = bn Allora la prima equazione dà y1, e, supposto di averecalcolato y1, …yi-1, dalla equazione i-esima si trova yi = bi – li1y1 - ….lii-1yi-1, i =2, …n. Questo è il metodo di sostituzione in avanti per sistemi triangolari bassi, che abbiamo già illustrato, ma semplificato dal fatto il coefficiente di yi nella equazione i-esima è uno. Il sistema Ux = y, in forma esplicita si scrive u11x1 + …u1nxn = y1 . . uiixi + …uinxn = yi . . unnxn = yn. Questa volta il metodo risolutivo è esattamente quello di sostituzione all’indietro già illustrato. Si prende xn = yn/unn dall’ultima equazione, e , supposto di avere calcolato xn, …xi+1, si trova xi dalla equazione i-esima, xi = (yi - uinxn - …uii+1xi+1)/uii, i =n-1, …1. Come già riferito la fattorizzazione LU prende spesso il nome di fattorizzazione di Gauss ( o Gaussiana). In generale le tecniche del tipo sottrarre da una riga un’altra premoltiplicata, ec., vanno sotto il nome di procedure ( di riduzione) di Gauss. Costo complessivo. Il costo per la soluzione di un sistema triangolare è n2 flop e, in conseguenza, occorre aggiungere per la soluzione del sistema originario altri 2n2 flop. Questo non contribuisce all’ordine di grandezza della fattorizzazione e resta il fatto che la soluzione di un sistema di ordine n richiede un costo di O(2n3/3) flop. Esempio Si consideri la matrice precedente e i sistemi con termine noto rispettivamente b = (4 –5 –38 77 -40)T, b = ( -1 –8 –7 14 -18)T Si controlla che i vettori soluzione sono rispettivamente x= (3 –2 –2 3 4 )T, x = ( 1 –1 0 2 2)T Ricordiamo che A è fattorizzata in 0 0 0 0 1 1 0 0 0 3 L 1 2 1 0 0 2 4 2 1 0 3 3 1 3 1 e 3 2 1 1 2 0 1 4 1 2 U 0 0 3 2 3 0 1 1 0 0 0 0 0 0 1 Per risolvere il sistema col primo termine noto proposto occorre prima risolvere il sistema Ly = b, che, in questo caso si scrive y1 = 4 3y1 + y2 = -5 -y1 + 2y2 +y3 = -38 2y1 -4y2 -2y3 +y4 = 77 3y1 + 3y2 + y3 +3y4 + y5 = -40 Si ottiene y1 = 4 e sostituendo y1 nella seconda equazione si trae y2 = -5 -3y1 = -17. Mettendo questi due nella terza equazione si ottiene y3 = -38 +y1 -2y2 = 0. Quindi con i valori di y1, y2, e y3, nella quarta equazione si trae y4 = 77 -2y1 + 4y2 +2y3 = 1. Infine siamo in grado di calcolare y5 = -40 -3y1 -3y2 –y3 – 3y4 = -4. Il vettore y diventa termine noto nel sistema Ux = y, che, in questo caso, si scrive 3x1 -2x2 –x3 –x4 -2x5 = 4 -x2 +4x3 –x4 -2x5 = -17 3x3 -2x+3x5= 0 -x4 + x5 = 1 -x5 = -4 Si ricava x5 = 4, e sostituendo nella quarta equazione si ha x4 = (1-x5)/(-1) = 3. Poi, dalla terza equazione x3 = (0 +2x4 -3x5)/3 = -2. Quindi, dalla seconda equazione x2 = (-17 -4x3 +x4 +2x5)/(-1) = -2. Infine coinvolgendo la prima equazione si ottiene x1 = (4 +2x2 +x3 + x4 +2x5)/3 = 3. Esercizio Risolvere il sistema col secondo vettore termine noto. • Come si vede dall’esempio, ma la cosa vale in generale, per risolvere vari sistemi con la stessa matrice dei coefficienti, si calcolano una volta per tutte le matrici della fattorizzazione e volta per volta si risolvono i due sistemi triangolari. Il caso delle matrici a banda. In molte applicazioni le matrici di sistema hanno una struttura particolare, detta struttura a bande, che ora illustriamo. Facciamo riferimento a matrici quadrate, anche se le definizioni si estendono senza problemi a matrici rettangolari. Definizione Una matrice quadrata A di ordine n ha larghezza di banda alta q, se j > i + q, implica a ij = 0. Invece ha larghezza di banda bassa p se i > j + p implica aij = 0. • Per comprendere questa struttura, ispirandoci al Matlab, diciamo che la diagonale di una matrice è la diagonale 0 e la chiamiamo diagonale principale. Poi gli elementi ai i+1, i = 1, …n-1, formano la diagonale 1, immediatamente sopra la principale. Gli elementi ai i+2, i =1, …n-2, formano la diagonale 2, ….gli elementi ai i+h, i = 1, …n-h, h=1, …n-1, formano la diagonale h. La diagonale (n1) è costituita dal solo elemento a1n. Quindi gli elementi ai-1 i, i = 2, …n, sono quelli della diagonale -1, immediatamente sotto la diagonale principale. Gli elementi ai-h i, i = h+1, …n, h =1, …n-1,sono quelli della diagonale –h, e l’unico an1 va a formare la diagonale –(n-1). Allora larghezza di banda alta q vuol dire che sono nulle le diagonali q+1, …n-1, mentre larghezza di banda bassa p vuol dire che sono nulle le diagonali –(p+1), …-(n-1). Una matrice triangolare superiore ha larghezza di banda bassa 0, mentre una triangolare inferiore ha larghezza di banda alta 0.