Soluzione numerica di sistemi lineari sparsi

Transcript

Soluzione numerica di sistemi lineari sparsi
Soluzione numerica
di sistemi lineari sparsi
Una matrice sparsa è una matrice… “…that allows special techniques
to take advantage of the large number of zero elements” (Wilkinson)
Una matrice A ∈ R n è sparsa se il numero degli
elementi diversi da zero è di ordine O(n).
Una matrice sparsa si dice strutturata se gli
elementi non nulli sono disposti secondo uno
schema ben definito.
1
2
Esempi:
1. matrici sparse strutturate
2. matrici sparse non strutturate
• Matrici diagonali
Sia n=numero totale di pagine web
• Matrici tridiagonali
Si consideri la seguente matrice di dimensione n:
A(i,j)=numero dei link che vanno dalla pagina i
alla pagina j.
La matrice A è sparsa ma non ha nessuna struttura
particolare.
• Matrici a banda
(con banda “piccola”)
3
4
Collezioni standard di matrici sparse
Applicazioni:
Fisica (es. fluido-dinamica, meccanica quantistica),
Astrofisica, Chimica
Ingegneria civile, Ingegneria elettronica (es.
simulazione di circuiti), Ingegneria strutturale
Geografia
Economia
Psicologia
Statistica
….
Controllo del traffico aereo
Algoritmo del page rank di Google
Grafica 3D
5
…
Figure di matrici sparse provenienti da diverse
applicazioni (prese dalla Harwell-Boeing Sparse
Matrix Collection).
Modello per il controllo
del traffico aereo
ZENIOS
L’elevato numero di applicazioni ha portato alla nascita
di raccolte di matrici e sistemi test sparsi provenienti da
diverse discipline scientidiche.
• Harwell-Boeing Sparse Matrix Collection
http://math.nist.gov/MatrixMarket/data/Harwell-Boeing/
• Rutherford-Boeing Sparse Matrix Collection
Sarà a breve disponibile su MatrixMarket. Si veda il report:
ftp://ftp.numerical.rl.ac.uk/pub/reports/duglRAL97031.ps.gz
• UF Sparse Matrix Collection:
http://www.cise.ufl.edu/research/sparse/matrices/
Modelli economici
Ingegneria strutturale
ORANI678
LOCK2232
WM3
BCSSTM13
6
Modellizzazione di oceani
PLAT362
7
8
Problema: Soluzione di un sistema lineare
Ax = b, con A sparsa.
Problema: Soluzione di un sistema lineare
Ax = b, con A sparsa.
Metodi diretti o iterativi?
Metodi diretti o iterativi?
Metodi diretti
Metodi iterativi
Vantaggi:
• sono generalmente più applicabili (non c’è il
problema della convergenza)
• risentono di meno del malcondizionamento
Vantaggi: • non modificano la struttura della matrice: possono
sfruttarne a pieno la sparsità
Svantaggi • richiedono generalmente più memoria in quanto si
può verificare il “fill-in” (riempimento) e cioè la
comparsa, durante il processo di eliminazione, di
nuovi elementi diversi da zero
• richiedono particolari tecniche di riordinamento
9 (per
minimizzare il fill in)
Svantaggi: • sono applicabili solo se il metodo è convergente
• possono richiedere molte iterazioni (si usano
tecniche di accelerazione, precondizionatori...)
Recentemente stanno nascendo approcci di tipo ibrido che
10
combinano metodi diretti ed iterativi (metodi iterativi a blocchi).
Problema del fill-in: esempio
i 1
Metodi Diretti per la
soluzione numerica
di sistemi lineari sparsi
1
10
1
A= 10
1
10
1
k 10
1
10
1
10
1
10
1 y
10
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
primo passo del
metodo di eliminazione
di Gauss
11
1 {
ii 11 11 1
1111
111
11 y
yy
10
110010 11
0
1010
0
1110
0
100
11
00
1 1 99991 −−
1 −−− 1
011 −−−011
− 110
1010 110000
11
0
10000 110
10000 11
000
99991 −−00
1 1 − 010 1
11 −−011
1010 100 110000
110000 11000
91
9 −01
1
1 1 −0
010 −000
11
1010 100
100 100
100
1 1 −0
1
1
1
9
0
0
0
1
−00
0 −00
19 {{
kk1010 0
100
100
100 100{
12
Problema del fill-in: esempio
i 1
1
10
1
A= 10
1
10
1
k 10
1
10
1
10
1
10
1 y
10
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
Riordiniamo la matrice A scambiando la prima riga
con l’ultima e la prima colonna con l’ultima:
1 {
i 1
1
10
99
100
− 1
99
− 1
99
− 1
99
1
10
1
10
1
10
1
k 10
Fattorizzazione LU
1
10
− 1
100
98
99
− 1
98
− 1
98
1
10
− 1
100
− 1
99
97
98
− 1
97
1 y
10
− 1
100
− 1
99
− 1
98
96
97 {13
Per una matrice di dimensione 40, avente
la stessa struttura, si ottiene:
Matrice
0
5
5
10
10
15
15
20
1
0
0
0
2
20
0
10
nz = 58
20
0
0
0
5
5
10
10
15
15
20
10
nz = 400
10
nz = 58
20
20
1
0
0
0
0
1
0
0
k1
0
0
1
1
10
1
10
1
10
0
0
1
0
0
0
0
1
0
0
0
0
1
1
10
1
10
1
10
k1
0
1
0
0
3
0
0
1
0
6
0
0
0
1
9
1 y
10
1
10
1
10
1
10
− 3
100 {
1 y
10
1
10
1
10
1
10
1
10 {
14
2
2
2
2
12
1
2
0
20
(nz = numero di elementi non nulli nella matrice)
0
0
Fattorizzazione
LU
10
nz = 58
0
0
i2
0
0
i1
20
0
0
Pr APc =
Fattorizzazione LU
Non c’è fill-in!!
i1
E se “bisogna” utilizzare strategie di pivoting?
Fattorizzazione LU
0
1⎤
⎡0
⎢ 1
⎥
⎢
⎥
Pr = Pc = ⎢
1
⎥
⎢
⎥
1 ⎥
⎢
⎢⎣1
0⎥⎦
15
k
3
− 3
2
− 2
3
0
0
0
0
6
9
−3 − 9
2
−2
−3 − 2
− 1 − 3
2
0
12 y
−4
2
− 2
3
3
5
3
28
9 {
16
Pr APc = LU
I metodi diretti si basano sostanzialmente sull’eleminazione
di Gauss:
Eliminazione di Gauss per matrici dense:
Pr e Pc sono scelte in modo da mantenere la
fattorizzazione della matrice:
stabilità numerica
Pr APc = LU
Eliminazione di Gauss per matrici sparse:
soluzione dei sistemi triangolari:
Pr e Pc sono scelte in modo da mantenere la
stabilità numerica e preservare la sparsità
(minimizzare il fill-in nei fattori L ed U)
⎧ Ly = Pr b
Ax = b ⇔ ⎨
⎩Uz = y
17
x = Pc z
18
Sia Pr APc = LU . Allora:
⎧ Ly = Pr b
Ax = b ⇔ ⎨
⎩Uz = y
Ax = b
x = Pc z
A ∈ Rn
Se la matrice A è considerata densa la risoluzione del
sistema lineare richiede:
Dimostrazione.
Ax = b ⇔ Pr Ax = Pr b ⇔ Pr Ax = Pr b ⇔
⇔ Pr APc ( Pc x ) = Pr b
Ponendo z = Pc x e sostituendo Pr APc = LU , si ottiene
Ax = b ⇔ LUz = Pr b ⇔ ⎧ Ly = Pr b
⎨
⎩Uz = y
19
Complessità di tempo:
n3
+ O (n 2 )
3
Complessità di spazio:
O (n 2 )
Lo scopo degli algoritmi per sistemi sparsi è di ottenere
una complessità, sia di tempo che di spazio, di
O ( n ) + O (τ )
dove τ è il numero di elementi non nulli.
20
Struttura base di codici per la soluzione di
sistemi sparsi mediante metodi diretti:
Struttura base di codici per la soluzione di
sistemi sparsi mediante metodi diretti:
1. ANALISI
1. ANALISI:
Viene analizzata la struttura della matrice in modo da fornire:
a. un opportuno ordinamento (scelta di opportune Pr e Pc) in modo
da minimizzare il fill-in (la struttura di sparsità dei fattori L ed U
dipende dalla struttura di A, e può essere cambiata permutando
righe e/o colonne)
2. FATTORIZZAZIONE
3. RISOLUZIONE
b. opportune strutture dati che permettano di memorizzare soltanto
gli elementi non nulli e di gestire eventuali fill-in, al fine di
ottenere una fattorizzazione efficiente.
2. FATTORIZZAZIONE
3. RISOLUZIONE
21
Struttura base di codici per la soluzione di
sistemi sparsi mediante metodi diretti:
22
Struttura base di codici per la soluzione di
sistemi sparsi mediante metodi diretti:
1. ANALISI
1. ANALISI
2. FATTORIZZAZIONE:
Si costruisce numericamente la fattorizzazione della matrice
riordinata: si determinano L, U (Pr e Pc vengono generalmente
modificate in quanto vengono effettuati anche tests di stabilità).
2. FATTORIZZAZIONE
3. RISOLUZIONE:
Si risolvono i sistemi triangolari ottenuti mediante i metodi di
backward e forward substitution.
3. RISOLUZIONE
23
24
Le fasi 1. e 2. possono essere completamente separate quando si ha
a che fare ad esempio con matrici simmetriche definite positive.
Infatti in questo caso nella fase 1 viene determinato un
ordinamento “ottimale”, che non viene successivamente
modificato in fase di fattorizzazione (non è necessario pivoting).
Matrici a banda
Per problemi non simmetrici si ha generalmente un’unica fase
1.+2. di analisi-fattorizzazione in cui vengono effettuati anche tests
di stabilità per la determinazione dell’ordinamento ottimale.
25
26
q
p
Si dice che una matrice A ha:
• banda superiore q se
aij = 0 per j>i+q
• banda inferiore p se
aij = 0
Le matrici a banda con q<<n e p<<n rappresentano un
significativo esempio di matrice sparsa.
per i>j+p
Esse si ottengono quando le equazioni del sistema possono essere
ordinate in modo tale che ogni incognita xi appaia solo in poche
equazioni vicino alla i-sima (hanno interesse ad esempio nei
modelli di reti).
q
p
27
28
Sia A una matrice con banda superiore q e banda
inferiore p. Se A ammette una fattorizzazione del
tipo:
A=LU,
allora U ha banda superiore q e L ha banda
inferiore p(*).
Quando si applicano strategie di pivoting gli scambi
di righe o di colonne possono distruggere la struttura
a banda. Se si utilizza ad esempio il pivoting parziale:
• U può avere banda di ampiezza p+q
• L ha al più p+1 elementi non nulli per colonna
q
q
L’algoritmo di eliminazione di Gauss è pertanto
particolarmente interessante nel caso in cui non è
richiesta l’operazione di pivoting, come ad esempio
per matrici:
• simmetriche definite positive
• a diagonale dominante
30
p
p
A
U
L
non c’è fill-in al di fuori
delle bande
29
(*) si è supposto di non utilizzare tecniche di pivoting
1b. Memorizzazione:
Una matrice A con banda inferiore p e banda
superiore q può essere memorizzata in una matrice
Aband di dimensione (p+q+1)×n in modo tale che:
Problema: Soluzione di un sistema lineare
Ax = b, con A matrice a banda.
1. ANALISI
A(i, j) = Aband(i - j + q + 1, j)
1a. Non essendoci il problema del fill-in al di
fuori delle bande la fase di riordinamento non
viene effettuata.
1b. Memorizzazione
31
Esempio:
⎛6
⎜
⎜ -1
⎜ -3
⎜
0
A= ⎜⎜ 0
⎜
⎜0
⎜0
⎜
⎜0
⎜0
⎝
-1
6
-1
-1
0
0
0
0
0
-1
-1
6
0
-1
0
0
0
0
0
-2
0
6
-1
-3
0
0
0
p=q=2; n=9
0
0
-1
-1
6
-1
-1
0
0
0
0
0
-1
-1
6
0
-1
0
0
0
0
0
-1
0
6
-1
-1
0
0
0
0
0
-1
-1
6
-1
0⎞
0 ⎟⎟
0⎟
⎟
0⎟
→
0 ⎟ ⎯⎯
⎟
0⎟
-2 ⎟
⎟
-1 ⎟
6 ⎟⎠
Aband: 5×9
⎡0
⎢0
⎢
⎢6
⎢
⎢ -1
⎢⎣-3
0
-1
6
-1
-1
-1
-1
6
0
-1
-2
0
6
-1
-3
-1
-1
6
-1
-1
-1
-1
6
0
-1
-1
0
6
-1
-1
32
-1
-1
6
-1
0
-2⎤
-1⎥⎥
6⎥
⎥
0⎥
0 ⎥⎦
2. FATTORIZZAZIONE
2. FATTORIZZAZIONE
Fattorizzazione LU per una matrice a banda:
q
min(k+p,n)
for k = 1 : n-1
for i = k+1 : n
A(i,k)=A(i,k)/A(k,k)
for j = k+1 : n
A(i,j)=A(i,j)-A(i,k)*A(k,j)
end j
end i
end k
p
min(k+q,n)
metodo di Gauss
33
2. FATTORIZZAZIONE
34
2. FATTORIZZAZIONE
colonna k colonna k+q
colonna k colonna k+q
q
q
p
p
riga k
riga k
riga k+p
riga k+p
35
36
2. FATTORIZZAZIONE
3. RISOLUZIONE
Fattorizzazione LU per una matrice a banda:
for k = 1 : n-1
for i = k+1 : min(k+p,n)
A(i,k)=A(i,k)/A(k,k)
for j = k+1 : min(k+q,n)
A(i,j)=A(i,j)-A(i,k)*A(k,j)
end j
end i
end k
⎧Ly = b
(LU)x = b ⇔ ⎨
⎩Ux = y
p<<n, q<<n
Sostituzioni in avanti per matrici L a banda di lunghezza p:
O(npq) flops
for i=1:n
b(i) = b(i) −
end i
Oss: Nell’implementazione bisogna tenere conto di come è stata
memorizzata la matrice A (mediante la matrice Aband). La
stessa area di memoria è sufficiente per memorizzare anche la
37
fattorizzazione LU.
p<<n
i−1
∑
L(i, j)b(j)
j=max(1,i−p)
O(np) flops
• La soluzione y del sistema Ly=b è memorizzata in b.
• Tener presente che gli elementi di L sono memorizzati
38
nel triangolo inferiore di A
3. RISOLUZIONE
⎧Ly = b
(LU)x = b ⇔ ⎨
⎩Ux = y
Sostituzioni all’indietro per matrici U a banda di lunghezza q:
for i=n:-1:1
min(i+q,n)
⎛
⎞
b(i) = ⎜ b(i) − ∑ U(i, j)b(j) ⎟ / u(i,i)
j=i+1
⎝
⎠
end i
q<<n
Matrici tridiagonali
O(nq) flops
• La soluzione y del sistema Ux=b è memorizzata in b.
• Tener presente che gli elementi di U sono memorizzati
nel triangolo superiore di A
39
40
FATTORIZZAZIONE LU DI MATRICE
TRIDIAGONALE
⎛ a1
⎜b
⎜ 2
⎜0
A=⎜
⎜ M
⎜0
⎜
⎝
⎛1 0
⎜β
⎜ 2 1
⎜ 0 β3
L=⎜
⎜ M M
⎜0 0
⎜⎜
⎝0 0
c1
a2
b2
0
c2
a3
M
0
0
O O O
K K b n −1
K K 0
0
0
1
0
0
c3
0
0
0
K
K
K
0
0
0
0
0
0
M
a n −1
bn
K
K
K
M
1
O O O
K K βn−1
K K 0 βn
⎞
⎟
⎟
⎟
⎟
M ⎟
c n −1 ⎟
⎟
an ⎠
0
0
0
Algoritmo di Thomas
(Gauss senza pivoting se la
matrice è a diagonale
dominante)
La matrice tridiagonale è
memorizzata nei tre
vettori a, b, c
0⎞
⎛α 1 c 1
⎟
⎜0 α
0⎟
2
⎜
0⎟
⎜0 0
⎟ U= ⎜
M⎟
⎜M M
⎜0 0
0⎟
⎜⎜
⎟⎟
1⎠
⎝0 0
0
0
0
c2
0 0
α3 0 0
O O O
K K 0
K K 0
0 ⎞
K
0 ⎟⎟
K
0 ⎟
⎟
M
M ⎟
α n−1 c n−1 ⎟
⎟
41
0 α n ⎟⎠
K
Begin
% Calcolo la fattorizzazione
LU
alfa1 = a1
For k=2 to n
betak= bk/ alfa k-1
alfa k = ak - betak c k-1
end k
% Soluzione del sistema
Ux=y
xn = yn / alfa n
For i =n-1 to 1 (step -1)
xi = (yi - c i x i+1)/alfa i
end i
end
% Soluzione del sistema Ly=b
y1 = b1
For i =2 to n
yi = bi - beta i y i-1
end i
42
Matrici sparse non strutturate
In questo caso si lavora generalmente direttamente sui
numeri e l’ordinamento ottimale viene determinato
mediante
un’unica
fase
di
ANALISI
+
FATTORIZZAZIONE in cui vengono effettuati anche
tests di stabilità.
Matrici sparse non
strutturate
43
44
Rappresentazione mediante coordinate (CS):
1b. Memorizzazione:
La matrice A viene memorizzata mediante tre vettori:
Rappresentazione mediante coordinate
• Elm
contiene gli elementi non nulli di A
• Rnr
contiene gli indici di riga degli elementi di Elm;
• Cnr
contiene gli indici di colonna degli elementi di Elm
Schema orientato per righe (compressed row
storage = CSR)
Schema linked list (lista concatenata)
45
46
Rappresentazione mediante coordinate (CS):
Schema orientato per righe (compressed
row storage =CSR)
La matrice A viene memorizzata mediante quattro vettori:
Esempio:
47
• Elm
contiene gli elementi non nulli di A
• Cnr
contiene gli indici di colonna degli elementi di Elm;
• Rst
Rst(k) contiene la posizione in Cnr ed Elm del primo
elemento non nullo nella k-sima riga di A.
• Rlg
Rlg(k)-1 rappresenta il numero di elementi non nulli
della riga k-sima.
48
Schema orientato per righe (compressed
row storage =CSR)
Schema orientato per righe (compressed
row storage =CRS)
akj
j
Gli elementi della k-sima riga si
trovano nelle posizioni da Rst(k)
fino a Rst(k)+Rlg(k) del vettore
Elm
Il vettore Rlg è superfluo se le righe di A sono memorizzate in ordine
49
Il vettore Rlg è superfluo se le righe di A sono
memorizzate in ordine:
Schema linked list
Esempio
⎛
⎜
⎜
⎜
A = ⎜
⎜
⎜
⎜
⎜
⎝
9
4
0
6
− 2
0
0
0
−1
0
0
−1
0
0
0
− 2
3
0
0
0
2
0
0
0
4
0
0
0
− 3
0
0⎞
⎟
0⎟
5⎟
⎟
0⎟
0⎟
⎟
7 ⎟⎠
Elm = ( 9 −2 −1 4 6 3 5 −1 2 −2 4 −3 7 )
Cnr = (1
Rst =
(1
3
4
5
6
1
2 3 6
8
1 4
10 12 14 )
50
2
5
4 6)
51
La matrice A viene memorizzata mediante:
• Elm: contiene gli elementi non nulli di A.
• Cnr: contiene gli indici di colonna degli elementi di Elm;
• Rst: Rst(k) contiene la posizione in Cnr ed Elm del primo
elemento non nullo nella k-sima riga di A.
• Ptr : Ptr(p) rappresenta l’indice della posizione in Elm
dell’elemento successivo della riga a cui Elm(p) appartiene. Se
Elm(p) è l’ultimo elemento di una riga allora Ptr(p) assumerà il
valore di un indice non esistente: se Elm(p) è l’ultimo elemento
della i-sima riga, allora Ptr(p)=na+i.
• Vac: contiene l’indice della prima posizione vuota.
Elm e Cnr contengono in genere anche delle posizioni vuote (hanno dimensione na
strettamente maggiore del numero di elementi non nulli nz), al fine di gestire eventuali
52
fill-in (anche le posizioni vuote sono collegate tramite il puntatore Ptr)
Schema linked list
Schema linked list
Le posizioni libere vengono denotate con *. Utilizziamo na=17, vac=5.
…
nxt
akj …
2
…
j2 …
…
nxt1 …
53
54
Operazione base del metodo di Gauss
2. Fattorizzazione:
In corrispondenza di ciascuno schema di memorizzazione
si utilizzano opportune tecniche per:
Implementare l’operazione base del metodo di Gauss:
w=A(i,:)+m*A(k,:)
(sommare alla riga i-sima della matrice A, la riga k-sima
moltiplicata per uno scalare m).
Gestire il fill-in:
se il vettore w contiene più elementi non nulli rispetto alla
riga i-sima della matrice A, allora siamo in presenza di un
55
fill-in.
w=A(i,:)+m*A(k,:)
Rappresentazione mediante coordinate (CS):
for j=1,…,n
w(j)=0
Elm(p) appartiene alla riga i-sima
end j
Elm(p) appartiene alla riga k-sima
for p=1,…,nz
if Rnr(p)=i
w(Cnr(p))=w(Cnr(p))+Elm(p)
elseif Rnr(p)=k
w(Cnr(p))=w(Cnr(p))+m*Elm(p)
end if
56
end p
Operazione base del metodo di Gauss
Operazione base del metodo di Gauss
w=A(i,:)+m*A(k,:)
w=A(i,:)+m*A(k,:)
Schema linked list
Schema orientato per righe (CRS)
Indirizzamento indiretto:
si riempie l’elemento di w
di indice corrispondente
alla colonna a cui
appartiene Elm(p)
scorre la riga i-sima
for j=1,…,n
w(j)=0
end j
scorre la riga k-sima
for p=Rst(i),…,Rst(i)+Rlg(i)
w(Cnr(p))= Elm(p)
end p
for p=Rst(k),…,Rst(k)+Rlg(k)
w(Cnr(p))=w(Cnr(p))+m*Elm(p)
end p
57
Gestione del fill-in
for j=1,…,n
w(j)=0
individua il primo elemento della riga i-sima
end j
p=Rst(i)
while p<=na
w(Cnr(p))=Elm(p)
p=Ptr(p)
passa all’elemento successivo della riga i-sima
end p
p=Rst(k)
While p<=na
w(Cnr(p))=w(Cnr(p))+m*Elm(p)
p=Ptr(p)
58
end p
Gestione del fill-in
Schema orientato per righe (CRS)
Rappresentazione mediante coordinate (CS):
spazio libero
Basta aggiungere i nuovi elementi non nulli alla fine
di vettori Elm, Cnr e Rnr
59
elementi di L
elementi di A(i,k:n)
•Ust: Ust(i) indica il punto in cui nella i-sima riga di A iniziano
gli elementi della parte attiva di A.
1. Si copiano gli elementi di L nello spazio libero e si calcola
m=A(i,k)/A(k,k).
2. Si effettua l’operazione w=A(i,:)+m*A(k,:)
3. Si spostano gli elementi non nulli di w nello spazio libero
lasciando zeri in w
4. Le posizioni Rst(i)…Rst(i)+Rlg(i) sono denotate come vuote
e
60
vengono aggiurnati Rst(i), Ust(i) e Rlg(i)
METODO DI GAUSS
per matrici sparse non strutturate
Gestione del fill-in: Schema linked list
Supponiamo che ci sia un fill-in nella posizione (i,j)
e denotiamo con a l’elemento da inserire
Fattorizzazione:
w è un vettore temporaneo utilizzato per
effettuare l’operazione base del metodo
di Gauss (come descritto nelle slides
precedenti), ulilizzando la
memorizzazione della matrice in formato
compresso (es. CRS o linked list).
for k=1:n-1
Si memorizza l’elemento a nella posizione new
corrispondente alla prima posizione vuota vac
for i=k+1:n
Si aggiorna l’indice della
prima posizione vuota
m=-aik/akk
w=A(i,:)+m*A(k,:)
Se l’indice di colonna j di a è più
piccolo dell’indice di colonna Cnr(p)
del primo elemento non nullo della
riga i-sima allora la riga i.sima inizia
nella posizione new.
Nel momento in cui si arresta questo
ciclo si avrà Cnr(p0)<j<Cnr(p) per
cui la posizione new sarà tra p0 e p.
61
A(i,:)
w
bi=bi+m*bk
Il vettore w deve essere poi
memorizzato nella riga i-sima
della matrice A.
Trasformazione del vettore dei
termini noti
end
end
Una volta effettuata la fattorizzazione bisogna risolvere il sistema triangolare
superiore Ax=b utilizzando il metodo di sostituzione all’indietro e tenendo conto
62
della memorizzazione della matrice A in formato compresso.
Schema di Markowitz: ordinamento (per
minimizzare il fill-in ed assicurare stabilità )
Schema di Markowitz: ordinamento (per
minimizzare il fill-in ed assicurare stabilità )
- Minimizzare il fill-in
La strategia consiste, ad ogni passo dell’eliminazione di Gauss,
nello scegliere come elemento pivot l’elemento non nullo della
matrice ridotta per il quale risulti minimo il prodotto tra il numero
di elementi non nulli della riga a cui appartiene ed il numero di
elementi non nulli della colonna a cui appartiene.
Sono richiesti anche controlli per la stabilità numerica utilizzando
una strategia di pivoting parziale con un parametro di soglia u.
ri( k )
Numero di entrate nella riga i-sima della marice ridotta
c(jk )
Numero di entrate nella colonna j-sima della marice ridotta
Il criterio di Markowitz seleziona come elemento pivot l’elemento
a (k)
pq della matrice ridotta che soddisfa:
(rp( k) − 1) * (c(qk) − 1) = min ⎡⎣(ri( k) − 1) * (c(jk) − 1) ⎤⎦
i, j≥ k
63
64
Schema di Markowitz: ordinamento (per
minimizzare il fill-in ed assicurare stabilità )
- Assicurare la stabilità
Il criterio di Markowitz seleziona come elemento pivot l’elemento
a (k)
pq della matrice ridotta che soddisfa:
a (pqk) ≥ u * max a (iqk )
Matrici simmetriche
definite positive
i = k,...,n
0 ≤ u ≤ 1 parametro di soglia
(nella pratica spesso si utilizza u=0.1)
In Matlab:
[L,U,P,Q] = LU(X,u)
65
66
Ordinamenti che minimizzano il fill-in
Matrici simmetriche definite positive
In questo caso le fasi di fattorizzazione ed analisi possono
essere completamente separate.
Algoritmo di grado minimo
In Matlab:
s=symmmd(A)
p=symamd(A)
(Essendo la matrice definita positiva non si effettuano
strategie di pivoting).
B=A(s,s)
matrice riordinata
B=A(p,p)
I comandi symmmd e symamd implementano l’algoritmo di grado minimo in
maniera leggermente diversa (symamd è più recente di symmmd).
Algoritmo di Cutchill-Mckee (teoria dei grafi)
In Matlab:
67
r=symrcm(A)
B=A(r,r)
matrice riordinata
68
Cutchill-Mckee
(symrcm)
nessun riordinamento
A
grado minimo
(symmmd)
A(r,r)
0
0
20
20
40
40
60
0
A(s,s)
60
50
0
nz = 240
chol(A)
grado minimo
(symamd)
0
20
20
40
40
60
0
50
nz = 240
chol(A(r,r))
A(p,p)
0
60
50
0
nz = 240
chol(A(s,s))
0
0
0
0
20
20
20
20
40
40
40
40
60
60
0
50
nz = 1022
0
50
60
0
50
70
nz = 636
Matrici sparse in Matlab
A = bucky+4*speye(60);
s = symmmd(A);
50
nz = 660
nz = 978
I grafici riportati nelle due slides precedenti sono
stati ottenuti mediante il codice Matlab:
r = symrcm(A);
60
0
69
50
nz = 240
chol(A(p,p))
S = sparse(A) converte una matrice A dal formato pieno al formato
sparso
p = symamd(A);
A = full(S)
S = A(s,s);
P = A(p,p);
subplot(2,2,1), spy(S), title('A(s,s)')
subplot(2,2,2), spy(P), title('A(p,p)')
subplot(2,2,3), spy(chol(S)+(chol(S))'), title('chol(A(s,s))')
subplot(2,2,4), spy(chol(P)+(chol(P))'), title('chol(A(p,p))')
n = nnz(S)
spy(S)
figure(2)
R = A(r,r);
subplot(2,2,1), spy(A), title('A')
subplot(2,2,2), spy(R), title('A(r,r)')
subplot(2,2,3), spy(chol(A)+(chol(A))'), title('chol(A)')
subplot(2,2,4), spy(chol(R)+(chol(R))'), title('chol(A(r,r))')
71
converte una matrice S dal formato sparso al formato
pieno
numero di elementi non nulli della matrice S
Il comando spy(S) permette di visualizzare la sparsità di una
matrice generndo un grafico nel quale sono evidenziati con
un punto solo gli elementi di S che sono diversi da zero.
72