{"id":21253948,"url":"https://github.com/fabbio00/iterative-linear-solver","last_synced_at":"2026-05-19T01:35:00.278Z","repository":{"id":172250395,"uuid":"630979020","full_name":"fabbio00/Iterative-Linear-Solver","owner":"fabbio00","description":" Library implementing iterative methods for solving linear systems with matrix acquired from .mtx file, supporting various convergence criteria","archived":false,"fork":false,"pushed_at":"2024-03-24T22:18:03.000Z","size":14505,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-21T21:15:39.103Z","etag":null,"topics":["compression-algorithm","image-processing","linear-algebra","python"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fabbio00.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-04-21T15:55:44.000Z","updated_at":"2024-03-24T22:22:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"30061197-c89b-4fd3-8a50-e83919ec1d7b","html_url":"https://github.com/fabbio00/Iterative-Linear-Solver","commit_stats":null,"previous_names":["fabbio00/progettomcs"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabbio00%2FIterative-Linear-Solver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabbio00%2FIterative-Linear-Solver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabbio00%2FIterative-Linear-Solver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fabbio00%2FIterative-Linear-Solver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fabbio00","download_url":"https://codeload.github.com/fabbio00/Iterative-Linear-Solver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243690149,"owners_count":20331728,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compression-algorithm","image-processing","linear-algebra","python"],"created_at":"2024-11-21T03:53:34.214Z","updated_at":"2026-05-19T01:34:55.233Z","avatar_url":"https://github.com/fabbio00.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Progetto Metodi del Calcolo Scientifico ~ Libreria di metodi iterativi\n\nCostruzione di una libreria per la risoluzione di sistemi lineari tramite i seguenti metodi iterativi:\n\n- Metodo di Jacobi\n- Metodo di Gauß-Seidel\n- Metodo del Gradiente\n- Metodo del Gradiente coniugato\n\nLa **matrice A** viene acquisita leggendo i  dati da un file `.mtx`\n\nIl **vettore soluzione x** è un vettore composto da tutti $1$\n\nIl **vettore b** viene calcolato dal vettore soluzione x col seguente calcolo $b=Ax$\n\nIl **vettore x di partenza** usato da tutti i metodi è un vettore della stessa grandezza della matrice A e con tutti i valori a zero\n\nI metodi si e arrestarsi qualora la k-esima iterata $x^{(k)}$ soddisfa il seguente **criterio di arresto**:\n\n$\\frac{||r^{(k)}||}{||b||} \u003c tol$\n\nDove $r^{(k)}$ è il residuo alla k-esima iterazione calcolato come $r^{(k)}=Ax^{(k)} − b$\n\nSono state controllate volta per volta 4 **tolleranze** diverse, ovvero:\n$tol = [10^{−4}, 10^{−6}, 10^{−8}, 10^{−10}]$\n\nInoltre viene fatto un controllo sul **numero massimo di iterazioni** che se superato viene segnalata la mancata convergenza $(k\u003emaxIter)$ dove $maxIter = 2000$\n\n## Metodo di Jacobi\n\n### Pseudocodice\n\n1. $x^{(k+1)} = x^{(k)} + P^{-1}r^{(k)}$\n\nDove $P^{-1}$ è una matrice diagonale costruita nel seguente modo:\n\n$$\nP^{-1}:=\\left[\\begin{array}{cccc}\n1 / a_{1,1} \u0026 0 \u0026 \\cdots \u0026 0 \\\\\n0 \u0026 1 / a_{2,2} \u0026 \\cdots \u0026 0 \\\\\n\\vdots \u0026 \\vdots \u0026 \\ddots \u0026 \\vdots \\\\\n0 \u0026 0 \u0026 \\cdots \u0026 1 / a_{n, n}\n\\end{array}\\right]\n$$\n\n## Metodo di Gauß-Seidel\n\n### Idea alla base\n\n$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)$\n\n### Psudocodice\n\n1. $r^{(k)} = b − Ax^{(k)}$\n2. Sostituzione in avanti $Py = r^{(k)}$\n3. $x^{(k+1)} = y^{(k)} + y$\n\nDove la matrice $P$ è costruita nel seguente modo:\n\n$$\nP:=\\left[\\begin{array}{cccc}\na_{1,1} \u0026 0 \u0026 \\cdots \u0026 0 \\\\\na_{2,1} \u0026 a_{2,2} \u0026 \\cdots \u0026 0 \\\\\n\\vdots \u0026 \\vdots \u0026 \\ddots \u0026 \\vdots \\\\\na_{n, 1} \u0026 a_{n, 2} \u0026 \\cdots \u0026 a_{n, n}\n\\end{array}\\right]\n$$\n\n## Metodo del Gradiente\n\n### Psudocodice\n\n1. $r^{(k)} = b -Ax^{(k)}$\n2. $y^{(k)} = Ar^{(k)}$\n3. $a = (r^{(k)})^tr^{(k)}$\n4. $b = (r^{(k)})^ty^{(k)}$\n5. $\\alpha_k = a/b$\n6. $x^{(k+1)} = r^{(k)} \\alpha_kr^{(k)}$\n\nVersione compatto per il calcolo di $\\alpha_k$\n\n$$\n\\alpha_k=\\frac{(r^{(k)})^tr^{(k)}}{(r^{(k)})^tAr^{(k)}}\n$$\n\n## Metodo del Gradiente coniugato\n\n### Pseudocode\n\n1. $r^{(k)}=b−Ax^{(k)}$\n2. $y^{(k)} = Ad^{(k)}$\n3. $z^{(k)} = Ar^{(k)}$\n4. $\\alpha_k = (d^{(k)} · r^{(k)})/(d^{(k)} · y^{(k)})$\n5. $x^{(k+1)} = x^{(k)} + \\alpha_kd^{(k)}$\n6. $r^{(k+1)}=b−Ax^{(k+1)}$\n7. $w^{(k)} = Ar^{(k+1)}$\n8. $\\beta_k = (d^{(k)} · w^{(k)})/(d^{(k)} · y^{(k)})$\n9. $d^{(k+1)} = r^{(k+1)} − \\beta_kd^{(k)}$\n\n## Descrizione rapida dei file\n\n- `README.md`\n  - Descrizione tecnica del progetto\n- `jacobi.py`\n  - Implementazione dell’algoritmo risolutivo di Jacobi\n- `gauss_seidel.py`\n  - Implementazione dell’algoritmo risolutivo di Gauß-Seidel\n- `gradiente.py`\n  - Implementazione dell’algoritmo risolutivo del Gradiente\n- `gradiente_coniugato.py`\n  - Implementazione dell’algoritmo risolutivo del Gradiente Coniugato\n- `control.py`\n  - Definizione di diverse funzioni di usate per effettuare dei controlli nei diversi algoritmi realizzati\n- `main.py`\n  - File eseguibile dove vengono calcolati i vettori soluzione richiesti e si salvano i risultati\n- `Progetto_MCS.ipynb`\n  - Notebook in cui vengono esaminate le matrici usate e analizzati i risultati ottenuti\n- `utils.py`\n  - Definizione di funzioni utili all’analisi dei risultati\n\n## Risultati\n\n### Risultati di ogni funzione\n\nDizionario contenente\n\n- Vettore X calcolato `\"vectX\"`\n- Numero di iterazioni fatte `\"nIter\"`\n- Tempo impeigato in mirosecondi `\"time\"`\n- Errore relativo `\"eRel\"`\n\nEsempio:\n\n```python\nres = {\n    \"vectX\" : [],\n    \"nIter\" : 150,\n    \"time\" : 1654545,\n    \"eRel\" : 0.0000001 \n}\n```\n\n### Risulati finali\n\nDizionario 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\n\nEsempio:\n\n```python\nresTot = {\n    \"Jacobi\" : {\n        \"spa1\" : [\n            {\n                \"tol\" : 0.0001,\n                \"nIter\" : 150,\n                \"time\" : 1654545,\n                \"eRel\" : 0.0000001 \n            }\n        ]\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabbio00%2Fiterative-linear-solver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffabbio00%2Fiterative-linear-solver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffabbio00%2Fiterative-linear-solver/lists"}