forked from Hammie217/LatexJekyll
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfabiodurastante.html
170 lines (143 loc) · 13.1 KB
/
fabiodurastante.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
---
layout: default
title: Possibili Argomenti di Tesi
author: Fabio Durastante
date: Ottobre 2024
---
<p class="BodyText Justified"> Questa pagina è parte del documento sullo <a href="./index.html">Scrivere una Tesi in Analisi Numerica</a>. I suggerimenti e le referenze contenute qui sono relative ad argomenti
che sto investigando al momento o di interesse attuale. Altre idee annesse o connesse a queste macroaree possono sicuramente essere discusse e valutate.
</p>
<p class="Section">1   Algoritmi per l'Algebra Lineare in Ambiente HPC</p>
<p class="BodyText Justified">L'<strong>High-Performance Computing (HPC)</strong> si riferisce all'uso di potenti sistemi di calcolo e tecnologie avanzate per eseguire calcoli a velocità elevate. Questi sistemi, spesso costituiti da supercomputer o cluster di migliaia di processori interconnessi, permettono di risolvere problemi computazionalmente intensivi che richiederebbero tempi proibitivamente lunghi o quantità di memoria non disponibili su macchine tradizionali. L'HPC viene utilizzato in vari campi, tra cui la simulazione di fenomeni fisici (come la fluidodinamica o la previsione del clima), l'analisi di grandi quantità di dati (big data) e la modellizzazione di sistemi complessi (come proteine o reazioni chimiche). L'obiettivo principale dell'HPC è ottimizzare le prestazioni, migliorare la velocità di esecuzione dei calcoli e ridurre i tempi di elaborazione per problemi di grandi dimensioni e alta complessità.</p>
<figure>
<img src="assets/images/leonardo-cineca.webp" alt="Supercomputer Leonardo" style="width:70%">
<figcaption>Fig.1 - Il Supercomputer Leonardo presso il CINECA.</figcaption>
</figure>
<p class="BodyText Justified"> Al cuore dei molti problemi che si possono affrontare in ambiente HPC ci sono gli algoritmi, più o meno di base dell'Algebra Lineare Numerica: <strong>metodi di Krylov</strong> per la soluzione dei sistemi lineari, precondizionatori di tipo <strong>domain decomposition</strong> o <strong>multigrid algebrico</strong>.</p>
<p class="BodyText Justified">
Una proficua area di indagine e possibile sorgente di argomenti di tesi è quella di studiare i cosìddetti <strong>metodi di Krylov che evitano le comunicazioni</strong>. Consideriamo come esempio il caso del <strong>gradiente coniugato</strong> per la soluzione di un sistema lineare della forma
\[
A \mathbf{x} = \mathbf{b}, \qquad A \in \mathbb{R}^{n \times n},\; \mathbf{x},\mathbf{b} \in \mathbb{R}^n,
\]
con \(n \approx 10^{12}\) ed \(A\) matrice simmetrica, definita positiva e sparsa; una matrice in cui il numero di elementi nonzero è dell'ordine della dimensione della matrice e non del suo quadrato. In generale una matrice così grande può essere contenuta solo all'interno di un <strong>sistema distribuito</strong>, ovvero diverse computer interconnessi da una rete di scambio dati; ad esempio partizionando il suo grafo di adiacenza e partizionando in maniera consistente i vettori.
</p>
<figure>
<img src="assets/images/graph-partitioning.jpg" alt="Supercomputer Leonardo" style="width:55%">
<figcaption>Fig.2 - Esempio di partizionamento del grafo di una matrice sparse e corrispondente partizionamento nei processi delle righe della matrice.</figcaption>
</figure>
<p class="BodyText Justified">
Questo ambiente di lavoro richiede ora, oltre le operazioni di macchina necessarie a compiere operazioni come il <em>prodotto matrice vettore</em> \( \mathbf{y} \gets \alpha A \mathbf{x} + \beta \mathbf{y}\) o il <em>prodotto scalare</em> \( \langle \mathbf{x},\mathbf{y} \rangle \), delle <strong>operazioni di comunicazione</strong> necessarie a scambiare tra i diversi processi i dati su cui compiere le operazioni. La differenza in queste due procedure è che il calcolo è estremamente più efficiente della comunicazione.<br>
Ma dove avvengono le comunicazioni? Scriviamo la versione più semplice possibile del gradiente coniugato.
</p>
{% pseudocode %}
\begin{algorithm}
\caption{Standard Conjugate Gradient}
\begin{algorithmic}
\STATE Input: \(A \in \mathbb{R}^{n \times n}\) SPD, \(\mathbf{b} \in \mathbb{R}^n\), soluzione iniziale \(\mathbf{x}_0 \in \mathbb{R}^n\), tolleranza \(\varepsilon\)
\STATE Output: Soluzione approssimata \(\mathbf{x}\)
\STATE $\mathbf{r}_0 \gets \mathbf{b} - A \mathbf{x}_0$
\STATE $\mathbf{p}_0 \gets \mathbf{r}_0$
\STATE $k \gets 0$
\WHILE{ Norma residuo maggiore di \(\varepsilon\) }
\STATE $\mathbf{v} = A \mathbf{p}_k$
\STATE $\alpha_k \gets \frac{\mathbf{r}_k^T \mathbf{r}_k}{\mathbf{p}_k^T \mathbf{v}}$
\STATE $\mathbf{x}_{k+1} \gets \mathbf{x}_k + \alpha_k \mathbf{p}_k$
\STATE $\mathbf{r}_{k+1} \gets \mathbf{r}_k - \alpha_k \mathbf{v}$
\STATE $\beta_k \gets \frac{\mathbf{r}_{k+1}^T \mathbf{r}_{k+1}}{\mathbf{r}_k^T \mathbf{r}_k}$
\STATE $\mathbf{p}_{k+1} \gets \mathbf{r}_{k+1} + \beta_k \mathbf{p}_k$
\STATE $k \gets k + 1$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
{% endpseudocode %}
<p class="BodyText Justified">
In questa versione dell'algoritmo le comunicazioni avvengono nel calcolo del prodotto matrice vettore \( \mathbf{v} = A \mathbf{p}_k \) e nel calcolo dei prodotti scalari per ottenere \(\alpha_k\) e \(\beta_k\).
Per tentare di ridurre le comunicazioni possiamo "raccogliere insieme" più passi formando il cosìddetto \(s\)-step CG:
</p>
{% pseudocode %}
\begin{algorithm}
\caption{s-step Conjugate Gradient Method}
\begin{algorithmic}[1]
\STATE {Input:} SPD \(A \in \mathbb{R}^{n \times n}\), \(\mathbf{b} \in \mathbb{R}^n\), soluzione iniziale \(\mathbf{x}_0 \in \mathbb{R}^n\), numero di step \(s\), tolleranza \(\varepsilon\)
\STATE {Output:} Solution vector \(\mathbf{x}\)
\STATE $\mathbf{r}_0 \gets \mathbf{b} - A \mathbf{x}_0$
\STATE $\mathbf{p}_0 \gets \mathbf{r}_0$
\STATE $k \gets 0$
\WHILE{Non abbiamo raggiunto la convergenza}
\STATE % Generazione dei blocchi: Calcoliamo \(s\) passi alla volta
\FOR{$j = 0$ to $s-1$}
\STATE $\alpha_{k+j} \gets \frac{\mathbf{r}_{k+j}^T \mathbf{r}_{k+j}}{\mathbf{p}_{k+j}^T A \mathbf{p}_{k+j}}$
\STATE $\mathbf{x}_{k+j+1} \gets \mathbf{x}_{k+j} + \alpha_{k+j} \mathbf{p}_{k+j}$
\STATE $\mathbf{r}_{k+j+1} \gets \mathbf{r}_{k+j} - \alpha_{k+j} A \mathbf{p}_{k+j}$
\IF{L'ultimo residuo ha norma minore di \(\varepsilon\)}
\STATE break
\ENDIF
\ENDFOR
\STATE % Aggiorniamo le direzioni:
\STATE Formiamo i blocchi \(\mathbf{R}_k = [\mathbf{r}_k, \mathbf{r}_{k+1}, \dots, \mathbf{r}_{k+s-1}]\) and \(\mathbf{P}_k = [\mathbf{p}_k, \mathbf{p}_{k+1}, \dots, \mathbf{p}_{k+s-1}]\)
\STATE Ortogonalizziamo le colonne di \(\mathbf{R}_k\) e \(\mathbf{P}_k\)
\STATE \FOR{$j = 0$ to $s-1$}
\STATE $\beta_{k+j} \gets \frac{\mathbf{r}_{k+j+1}^T \mathbf{r}_{k+j+1}}{\mathbf{r}_{k+j}^T \mathbf{r}_{k+j}}$
\STATE $\mathbf{p}_{k+j+1} \gets \mathbf{r}_{k+j+1} + \beta_{k+j} \mathbf{p}_{k+j}$
\ENDFOR
\STATE $k \gets k + s$
\ENDWHILE
\end{algorithmic}
\end{algorithm}
{% endpseudocode %}
<p class="BodyText Justified">
Questa versione riduce il numero di comunicazioni, poiché riduce il numero di prodotti scalari, tuttavia paga di instabilità numerica a causa dell'ortogonalizzazione ritardata dopo \(s\) passi.
Trovare metodi per gestire queste instabilità, scegliere il passo e scrivere varianti del gradiente coniugato (e degli altri metodi di Krylov come GMRES o BiCGstab) è un'area di intensa ricerca.
Una <strong>tesi sull'argomento</strong>, a seconda del livello tra <em>laurea triennale</em> e <em>magistrale</em> si può focalizzare sullo studio delle proprietà matematica e
numeriche di queste varianti, la loro applicazione a problemi di interesse, aspetti implementativi all'interno della suite di librerie per il calcolo parallelo PSCToolkit, fino alla ricerca di
approcci e formulazioni alternative.<br>
<strong>Competenze necessarie: </strong> algebra lineare numerica, programmazione con MATLAB;<br><strong>Competenze consigliate:</strong> calcolo parallelo;<br>
<strong>Corsi suggeriti:</strong> Calcolo Scientifico, Istituzioni di Analisi Numerica (se alla <em>magistrale</em>).
</p>
{% bibliography --file bibliofabio %}
<p class="Section">2   Modellistica e Algoritmi per le Reti Complesse</p>
<p class="BodyText Justified">
L'ambito della ricerca in Reti Complesse si concentra sullo studio di sistemi costituiti da un elevato numero di elementi interconnessi (nodi) e dalle relazioni tra loro (archi),
con l'obiettivo di analizzare e comprendere la struttura e le dinamiche dei sistemi reali complessi. Le reti complesse si manifestano in una vasta gamma di contesti, come le reti
sociali, le reti biologiche (ad esempio, interazioni tra proteine), le reti di trasporto e le reti tecnologiche (come Internet). I modelli matematici usati per descriverle includono
il modello di rete casuale di Erdős-Rényi, le reti small-world di Watts-Strogatz e le reti a scala libera di Barabási-Albert, che descrivono come molte reti reali presentino nodi
altamente connessi (hub). L'analisi di reti complesse si avvale di algoritmi per rilevare comunità, analizzare la centralità dei nodi, trovare percorsi ottimali o modellare la diffusione
di informazioni o epidemie all'interno della rete. Questa ricerca ha applicazioni in campi quali la biologia, la sociologia, l'informatica, la fisica e l'economia, offrendo strumenti per
comprendere la struttura e il comportamento di sistemi complessi e interdipendenti.
</p>
<figure>
<img src="assets/images/graph1.png" alt="Rete Stradale di Pisa 1" style="width:45%">
<img src="assets/images/graph2.png" alt="Rete Stradale di Pisa 1" style="width:45%">
<figcaption>Fig.3 - Esempio di un fenomeno di trasporto sulla rete stradale di Pisa.</figcaption>
</figure>
<p class="BodyText Justified">
Una <strong>tesi</strong> sull'argomento si può focalizzare sia sugli aspetti modellistici, <em>e.g.</em>, la definizione e lo studio delle proprietà di modelli differenziali discreti,
sia sugli aspetti algoritmici, <em>e.g.</em>, calcolo di funzioni di matrici, soluzione di equazioni differenziali definite sui grafi o algoritmi per l'estrazione di informazioni quali
quelle di comunità e cluster da una rete.<br>
<strong>Competenze necessarie: </strong> algebra lineare numerica, proprietà e soluzioni di ODE, programmazione con MATLAB;<br><strong>Competenze consigliate:</strong> matrici non negative;<br>
<strong>Corsi suggeriti:</strong> Calcolo Scientifico, Metodi Numerici per le ODE, Metodi Numerici per le Catene di Markov, Metodi Numerici per le PDE, Istituzioni di Analisi Numerica (se alla <em>magistrale</em>).
</p>
{% bibliography --file bibliofabio2 %}
<p class="Section">3   Soluzione Numerica di Equazioni alle Derivate Parziali Frazionarie</p>
<p class="BodyText Justified">
L'ambito della ricerca in equazioni alle derivate frazionarie esplora estensioni delle classiche equazioni differenziali, introducendo derivate di ordine non intero, ovvero derivate frazionarie.
Si consideri ad esempio la derivata di Riemann-Liouville che è una delle definizioni classiche di derivata frazionaria, che estende il concetto di derivata a ordini non interi.
Viene definita attraverso un'integrazione convolutiva, utilizzando la formula integrale generalizzata della funzione, e permette di calcolare derivate di ordine frazionario (non intero)
di una funzione:
\[
D_t^\alpha f(t) = \frac{1}{\Gamma(n - \alpha)} \frac{\mathrm{d}^n}{\mathrm{d}t^n} \int_{a}^{t} (t - \tau)^{n-\alpha-1} f(\tau) \, \mathrm{d}\tau, \quad \alpha \in \mathbb{R}_+,\; n = \lceil \alpha \rceil.
\]
Le equazioni differenziali definite in termini di questi operatori sono particolarmente efficaci nel modellare fenomeni complessi caratterizzati da memoria e dinamiche non locali, dove l'evoluzione
di un sistema non dipende solo dal suo stato attuale ma anche dalla sua storia passata. Le derivate frazionarie permettono di descrivere processi come la diffusione anomala, che si osserva in materiali
porosi, nei mercati finanziari o in sistemi biologici, e sono ampiamente utilizzate nella fisica dei mezzi continui, nell'economia, nell'ingegneria e nella biologia. Le equazioni frazionarie consentono
anche di modellare fenomeni di viscoelasticità, trasporto di cariche, e sistemi complessi con dinamiche a lungo termine. La ricerca si concentra sia sugli aspetti teorici, come l'analisi dell'esistenza
e unicità delle soluzioni, sia sugli algoritmi numerici per risolvere tali equazioni, data la loro complessità intrinseca. Lo sviluppo di metodi efficienti per risolvere equazioni alle derivate
frazionarie è cruciale per la simulazione di molti sistemi reali, dove i modelli tradizionali a derivate intere risultano inadeguati.
</p>
<p class="BodyText Justified">
Una <strong>tesi</strong> sull'argomento è tipicamente focalizzata sulla definizione di strategie per la discretizzazione di equazioni di questo tipo e sulla costruzione di solutori efficienti per i
problemi discreti così ottenuti.<br>
<strong>Competenze necessarie: </strong> algebra lineare numerica, proprietà e soluzioni di ODE e PDE, programmazione con MATLAB;<br>
<strong>Corsi suggeriti:</strong> Calcolo Scientifico, Metodi Numerici per le ODE, Metodi Numerici per le PDE, Istituzioni di Analisi Numerica (se alla <em>magistrale</em>).
</p>
{% bibliography --file bibliofabio3 %}