[latexpage]
Nel mondo reale esiste una grande quantità di problemi la cui soluzione non è raggiungibile per via analitica. La soluzione a questi problemi può essere ottenuta mediante simulazione numerica tramite computer.
Rientrano in questo tipo di problemi le simulazioni dei sistemi caotici, sistemi complessi di equazioni, le simulazioni dei sistemi biologici, ecc.
Molti problemi interessanti risultano essere intrinsecamente complicati, ad esempio i sistemi caotici classici, la dinamica dei fluidi, i sistemi a N corpi (atomi, molecole, dinamica delle galassie) e sistemi randomici.
Risolvere i problemi con metodi numerici non è un concetto recente, infatti nella storia della scienza esistono diversi applicazioni, a partire dal papiro egiziano (1650 a.C.) fino ad oggi grazie alla risoluzione dei problemi mediante l’uso del computer moderno. I metodi numerici sono molto importanti per ottenere delle intuizioni in diversi studi: studio dei sistemi casuali (nessuna equazione), sistemi in evoluzione, risoluzioni di problemi fisici, chimici e biologici; come ad esempio, lo studio dell’interazione complessa di atomi e molecole, ecc.
Nel mondo scientifico esistono moltissimi problemi che sono intrinsecamente numerici, cioè non possiedono nessuna equazione. Tra questi ci sono alcuni problemi di economia, la criptografia, la simulazione di strumenti complessi (ad esempio un telescopio). Per studiare questi sistemi casuali bisogna lavorare con numeri randomici e molto spesso ci si scontra con il problema della loro generazione. Esistono tre tipi di generatori di numeri random:
Nel caso di una generazione pseudorandom si usa un sistema deterministico che cerca di simulare una generazione casuale. Per questo motivo si parla di periodicità dei numeri pseudorandom, ad esempio il computer usa un dominio finito che possiede un certo numero di combinazione dipendente dal numero di bit impiegato per generare i numeri. Ad esempio, il generatore lineare congruenziale (Linear Congruential Generator) è un algoritmo per la generazione di numeri pseudo-casuali molto conosciuto. Questo generatore ha il vantaggio di essere computazionalmente leggero, inoltre la teoria sulla quale poggia è semplice da capire e da implementare:
\begin{equation} \label{eq:poly}
X_{n+1}=(aX_{n}+c) % m
\end{equation}
Questo tipo di algoritmo genera numeri casuali tra 0 ed m con una periodicità pari a m, bisogna fare attenzione nell’uso di questi generatori perché la qualità della produzione è estremamente sensibile alla scelta dei parametri, ad esempio un periodo troppo breve può produrre dei difetti e causare generatori inefficaci.
Un caso d’uso dei numeri random è lo studio del comportamento del telescopio “X-ray Multi component telescope” in cui la ricostruzione dell’immagine segue la storia probabilistica dei singoli fotoni. Dunque, all’interno dello strumento, ad ogni passo della propagazione avviene un’estrazione di numeri casuali per riuscire a seguire il percorso di ogni fotone attraverso la complessa strumentazione (filtri e rivelatori quantistici). Ovvero, ad ogni passo viene fornita la probabilità di una data interazione (assorbimento, diffusione ecc.).
Per molti scopi i numeri sub-casuali si prestano meglio dei pseudocasuali o casuali, ad esempio quando è necessario campionare uniformemente un dominio non necessariamente casuale. Questo tipo di sequenze sub- (o quasi-) casuali campionano e coprono un dominio più velocemente delle sequenze casuali.
Solitamente non è possibile ottenere delle soluzioni esatte per le equazioni differenziali, soprattutto per equazioni alle derivate parziali. Piuttosto che trovare un’espressione analitica di una funzione che soddisfi l’equazione, spesso ci si limita a studiarne l’esistenza e l’andamento qualitativo. Ovvero, si determinano soluzioni approssimate servendosi di un computer in grado di effettuare le approssimazioni tramite metodi di calcolo numerici. Un meccanismo per calcolare le soluzioni delle equazioni differenziali alle derivate parziali è quello di passare dal dominio continuo (x,t) a quello discreto con una griglia xk, cioè si passa dall’uso di equazioni differenziali alle equazioni alle differenze.
Questo meccanismo matematico consente il passaggio dallo studio di equazioni differenziali allo studio di equazioni lineari di vettori, in questo modo è possibile integrare l’equazione differenziale con un calcolatore.
Nel fare questa evoluzione si devono tenere conto dei seguenti aspetti:
I metodi numerici consentono ad esempio di studiare la conversione dell’energia magnetica nel riscaldamento del plasma di una corona solare, attraverso la risoluzione di equazioni differenziali non lineari.
L’energia proviene dalla progressiva sollecitazione del campo magnetico da parte dei movimenti fotosferici dovuti alla granulazione e al movimento differenziale. Al di sopra di una soglia, le linee del campo B si riconnettono. Studiare la torsione, la riconnessione e il riscaldamento dei loop coronali con un modello numerico che includa gli effetti fisici rilevanti richiede un codice molto accurato di alto livello e milioni di ore di calcolo, sommando i tempi di lavoro dei processori usati in multitasking.
Un’altra applicazione di questi metodi è lo studio sull’accrescimento stellare e la spiegazione dei brillamenti, cioè esplosioni che accendono il plasma tra la stella e il disco di accrescimento.
In fluidodinamica, i metodi numerici sono usati per lo studio delle turbolenze, cioè i moti di un fluido in cui le forze viscose non sono sufficienti a contrastare le forze di inerzia. Il moto delle particelle avviene in maniera caotica, senza seguire traiettorie ordinate.
Altre applicazioni si possono trovare nelle simulazioni di Dinamica Molecolare. I metodi numerici consentono la risoluzione di problemi a “molti corpi”, ad esempio permettono di simulare il moto di un sistema a N particelle e di misurarne le proprietà di equilibrio e di trasporto.
In conclusione, i metodi numerici consentono lo studio di sistemi molto complessi, affinché questi modelli numerici siano validi devono avere un riscontro analitico e sperimentale. La realizzazione di un codice nasce a partire da un modello semplice e conosciuto analiticamente. Successivamente, a questo modello vengono aggiunti diversi pezzi di codice. Per questa ragione un modello richiede diversi anni di sviluppo e molti passi di validazione.
A cura di Antonino Pagano.