Costruzione di una libreria per la risoluzione di sistemi lineari tramite i seguenti metodi iterativi:
- Metodo di Jacobi
- Metodo di Gauß-Seidel
- Metodo del Gradiente
- Metodo del Gradiente coniugato
La matrice A viene acquisita leggendo i dati da un file .mtx
Il vettore soluzione x è un vettore composto da tutti
Il vettore b viene calcolato dal vettore soluzione x col seguente calcolo
Il vettore x di partenza usato da tutti i metodi è un vettore della stessa grandezza della matrice A e con tutti i valori a zero
I metodi si e arrestarsi qualora la k-esima iterata
Dove
Sono state controllate volta per volta 4 tolleranze diverse, ovvero:
Inoltre viene fatto un controllo sul numero massimo di iterazioni che se superato viene segnalata la mancata convergenza
$x^{(k+1)} = x^{(k)} + P^{-1}r^{(k)}$
Dove
$x^{(k+1)}i =\frac{1}{a{i,i}} ( b_i – a_{i,1}x^{(k+1)}1 − \cdots – a{i,i−1} x^{(k+1)}{i−1} − a{i,i+1} x^{(k)}{i+1} − \cdots – a{i,n}x^{(k)}_n)$
$r^{(k)} = b − Ax^{(k)}$ - Sostituzione in avanti
$Py = r^{(k)}$ $x^{(k+1)} = y^{(k)} + y$
Dove la matrice
$r^{(k)} = b -Ax^{(k)}$ $y^{(k)} = Ar^{(k)}$ $a = (r^{(k)})^tr^{(k)}$ $b = (r^{(k)})^ty^{(k)}$ $\alpha_k = a/b$ $x^{(k+1)} = r^{(k)} \alpha_kr^{(k)}$
Versione compatto per il calcolo di
$r^{(k)}=b−Ax^{(k)}$ $y^{(k)} = Ad^{(k)}$ $z^{(k)} = Ar^{(k)}$ $\alpha_k = (d^{(k)} · r^{(k)})/(d^{(k)} · y^{(k)})$ $x^{(k+1)} = x^{(k)} + \alpha_kd^{(k)}$ $r^{(k+1)}=b−Ax^{(k+1)}$ $w^{(k)} = Ar^{(k+1)}$ $\beta_k = (d^{(k)} · w^{(k)})/(d^{(k)} · y^{(k)})$ $d^{(k+1)} = r^{(k+1)} − \beta_kd^{(k)}$
README.md
- Descrizione tecnica del progetto
jacobi.py
- Implementazione dell’algoritmo risolutivo di Jacobi
gauss_seidel.py
- Implementazione dell’algoritmo risolutivo di Gauß-Seidel
gradiente.py
- Implementazione dell’algoritmo risolutivo del Gradiente
gradiente_coniugato.py
- Implementazione dell’algoritmo risolutivo del Gradiente Coniugato
control.py
- Definizione di diverse funzioni di usate per effettuare dei controlli nei diversi algoritmi realizzati
main.py
- File eseguibile dove vengono calcolati i vettori soluzione richiesti e si salvano i risultati
Progetto_MCS.ipynb
- Notebook in cui vengono esaminate le matrici usate e analizzati i risultati ottenuti
utils.py
- Definizione di funzioni utili all’analisi dei risultati
Dizionario contenente
- Vettore X calcolato
"vectX"
- Numero di iterazioni fatte
"nIter"
- Tempo impeigato in mirosecondi
"time"
- Errore relativo
"eRel"
Esempio:
res = {
"vectX" : [],
"nIter" : 150,
"time" : 1654545,
"eRel" : 0.0000001
}
Dizionario suddiviso per ogni ogni metodo usato, ognuno di questi conterrà un ulteriore dizionario per ogni matrice in input che conterrà i risultati ottenuti per ogni tolleranza testata
Esempio:
resTot = {
"Jacobi" : {
"spa1" : [
{
"tol" : 0.0001,
"nIter" : 150,
"time" : 1654545,
"eRel" : 0.0000001
}
]
}
}