Motivazione: Fattorizzazioni di matrici speciali Diminuire la complessità computazionale = evitare operazioni inutili = risparmiare tempo di calcolo Diminuire l’occupazione di memoria Come si fa? Matrici simmetriche Si tiene conto delle proprietà della matrice dei coefficienti note a priori Definizione: Occupazione di memoria: struttura (elementi diversi da zero) proprietà spettrali (autovalori) ... Algoritmi di fattorizzazione ad hoc 1 Fattorizzazione di matrici simmetriche Si considera una variante della fattorizzazione di Gauss (Hp: i minori principali di A sono non nulli) dove Fattorizzazione di matrici simmetriche Se A è simmetrica (Hp: i minori principali di A sono non nulli) Occupazione di memoria: (solo L e D) Complessità computazionale: (solo L e D) Pivoting? Se A è simmetrica, PA in generale non lo è. Pivoting parziale non direttamente applicabile al calcolo della fattorizzazione Pivoting diagonale per mantenere la simmetria Varianti della fattorizzazione (BunchParlett) per avere stabilità Pro e contro della strategia di pivoting parziale Rende stabile l’algoritmo di fattorizzazione Modifica la struttura delle matrici (es. perdita di simmetria) Ha senso chiedersi se esistono classi di matrici per cui la condizione di pivoting parziale è sempre soddisfatta 2 Condizioni sufficienti Esempio Matrici strettamente a diagonale dominante per righe per colonne Proprietà: Non singolare Tutti i minori principali sono non nulli Sono fattorizzabili nella forma non è strettamente diagonale dominante è strettamente diagonale dominante Condizioni sufficienti Si dimostra che se A è strettamente diagonale dominante per colonne, nel procedimento di Gauss con pivoting parziale non avvengono scambi di righe. L’algoritmo di fattorizzazione è stabile Matrici simmetriche definite positive Proprietà: Tutti gli autovalori sono reali positivi Non singolare Tutti i minori principali sono positivi Teorema di Von Neumann-Goldstine Gli elementi che si incontrano nell’algoritmo non diventano mai troppo grandi rispetto agli elementi di A 3 Teorema di Cholesky Una matrice simmetrica è definita positiva se e solo se esiste una e una sola matrice triangolare inferiore con elementi diagonali positivi tale che Fattorizzazione di Cholesky Si ottiene con metodo di pavimentazione, ossia sfruttando l’uguaglianza matriciale enunciata dal teorema di Cholesky Fattorizzazione di Cholesky Caso 3x3 Caso 3x3 Noti gli elementi di A, si vogliono calcolare gli elementi di L sfruttando la definizione del prodotto righe-colonne 4 Caso 3x3 Caso 3x3 Caso 3x3 Caso 3x3 5 Caso 3x3 = = = 6 Algoritmo di Cholesky Algoritmo di Cholesky Prodotto scalare delle prime j-1 componenti della riga j di L con se stessa Prodotto scalare delle prime j-1 componenti della riga j di L con la riga i Esempio Esempio ? Dal teorema di Choleski possiamo concludere che A non è definita positiva 7 Complessità computazionale Stabilità Dobbiamo trovare un solo fattore: La fattorizzazione di Cholesky stabile nel senso che gli elementi della matrice triangolare non diventano “troppo grandi”. n estrazioni di radice: per evitarle Se le quantità sotto radice sono negative, la matrice non è definita positiva. Soluzione di un sistema Sostituzione all’avanti Sostituzione all’indietro Matrici con struttura Sostituzione all’avanti Sostituzione all’indietro 8 Matrici a banda Se non è necessario il pivoting Caso particolare: matrici tridiagonali Supponiamo non sia necessario il pivoting (Hp: minori principali non nulli). Minore complessità computazionale Se è necessario il pivoting la matrice L ha banda r, ma R ha banda superiore 2s 9 Si sfruttano le uguaglianze matriciali per ottenere la fattorizzazione (metodo di pavimentazione), cioè i-esima riga di L i-esima riga di L (i +1)-esima colonna di R (i -1)-esima colonna di R Algoritmo di fattorizzazione per matrici tridiagonali Complessità computazionale i-esima riga di L i-esima colonna di R 10 Soluzione di un sistema Osservazione La complessità computazionale della fattorizzazione e soluzione di un sistema tridiagonale è Complessità computazionale Osservazione Non è più vero se si effettuano scambi Esempio Matrici sparse Matrici in cui il numero di elementi non nulli è piccolo. Richiedono minore occupazione di memoria. Minore complessità computazionale nelle operazioni (es. prodotto matrice-vettore). 11 Memorizzazione per colonne di una matrice sparsa 14 float 2*14 int oppure 14 + 6 int elementi non nulli 4 -1 1 2 5 2 2 2 -1 1 8 3 2 16 indici di riga 1 2 4 5 1 2 1 5 1 3 4 1 2 5 1 1 1 indici 1 di colonna 2 2 3 3 4 4 4 5 5 5 oppure “puntatori” alle colonne 1 5 7 9 12 15 Gli elementi della fattorizzazione non sono necassariamente sparsi L’occupazione di memoria per L e U potrebbe essere superiore a quella necessaria per memorizzare A Esempio Questo fenomeno si chiama fill-in (riempimento) A è sparsa ma i suoi fattori L ed R non lo sono Esistono tecniche di riordinamento di una matrice che, permutando righe e colonne, servono per minimizzare il fill-in (es. minimum- degree reordering) 12