Programma
PROGRAMMA:
MODULO EQUAZIONI DIFFERENZIALI ORDINARIE (30 ore)
Integrazione di equazioni differenziali con condizioni iniziali. Metodo di Eulero. Errore locale e errore globale. Oscillatore armonico.
Metodo di Eulero-Cromer. Studio dell'errore di integrazione.
Il prototipo della funzione main e gli argomenti da linea di comando. La gestione dell’input/output: stdin, stdout, stderr. Redirezione di input e output dalla linea di comando.
Trasferimento dei file tra macchine in remoto. Uso di gnuplot per la generazione di grafici di dati.
Stabilità: il caso delle oscillazioni e crescita/decrescita esponenziale. Proprietà di stabilità dei metodi di Eulero e Eulero-Cromer. Importanza delle scale di tempo caratteristiche.
Metodi di integrazione: Reversibilità nel metodo di Eulero-Cromer e metodo di Verlet.
Leggi di conservazione lungo le traiettorie approssimate dell'oscillatore armonico.
Pendolo semplice. Misura del periodo e studio delle piccole oscillazioni. Oscillazioni con smorzamento lineare. Calcolo del tempo di dimezzamento e dello smorzamento critico.
Uso delle macro del precompilatore per la compilazione condizionale: #if, #elif, #else, #endif, #ifdef. L'opzione -D del compilatore gcc.
Compilazione condizionale e funzioni macro.
Approfondimenti sull’uso di gnuplot: grafici in scala bilogaritmica ("set log”), definizione di funzioni di una variabile indipendente, aggiustare i parametri delle funzioni con gnuplot ("fit via”).
Metodi di Runge-Kutta del II e IV ordine.
Strutture C: struct, puntatori a struct.
Pendolo forzato. Cenni sul caos. Sezione di Poincaré. Bacini di attrazione. Diagrammi di biforcazione.
Moto in un piano. Equazioni accoppiate. Moto di pianeti intorno a stella fissa. Unità di misura astronomiche. Calcolo del periodo di un'orbita chiusa nello spazio delle fasi.
Considerazioni sulla precisione del calcolo floating-point nella scelta del passo di integrazione.
Grafici tridimensionali con gnuplot.
Stabilità per oscillazioni ed errore relativo sul calcolo dell'energia con i metodi di Runge-Kutta.
MODULO CAMMINI ALEATORI (20 ore)
Allocazione dinamica di memoria: malloc(), calloc(), realloc(), free(), sizeof().
Moto browniano. Random Walk in una dimensione.
Generazione di numeri casuali con distribuzione qualunque: inversione della cumulativa, metodo "accetta o rifiuta”. Trasformazione di Box-Müller.
Numeri pseudocasuali uniformemente distribuiti: Generatori Congruenziali Lineari.
Generatori notevoli (nel bene e nel male) e di uso comune: Minimal Standard, Randu, puramente moltiplicativi di l’Ecuyer.
Funzioni di libreria del C: rand(), lrand48(), drand48()
Costruzione dell'istogramma dei valori di un random walk unidimensionale al tempo t fisso. Binning di un istogramma. Random walk in più dimensioni spaziali. Probabilità di ritorno.
Richiami sui sistemi numerici posizionali. Sistema Esadecimale. Rappresentazione dei numeri interi sul calcolatore. Operatori bitwise "&","|", "^","~". Operatori di scorrimento di bit "", "
Prerequisiti
Laboratorio di Calcolo, basi di unix, bash e programmazione C
Testi di riferimento
ITA: L.Barone, E. Marinari, G. Organtini, F. Ricci Tersenghi,
"Programmazione scientifica", Pearson Italia (2006)
Modalità insegnamento
Circa 30 ore di lezioni frontali e 10 esperienze in laboratorio
(https://elearning.uniroma1.it/course/view.php?id=2315)
Frequenza
La frequenza alle esercitazioni di laboratorio e' obbligatoria.
Modalità di esame
LABORATORIO DI FISICA COMPUTAZIONALE 1
STRUTTURA DEGLI ESAMI DI PROFITTO
Il corso di Laboratorio di Fisica Computazionale 1 (primo semestre del secondo anno della Laurea Triennale in Fisica) è un corso teorico e pratico, che prevede la frequenza obbligatoria di esercitazioni di laboratorio computazionale. Il corso prevede in totale circa trenta ore di lezione cattedratica e circa trenta ore di frequenza del laboratorio computazionale. Una proficua partecipazione alle esercitazioni di laboratorio è obbligatoria: eventuali assenze non evitabili possono essere recuperate in accordo con i docenti del corso. Il lavoro in laboratorio si svolge in gruppi, ognuno composto da due studenti, ma è naturalmente cruciale che entrambi i componenti del gruppo contribuiscano in modo fattivo al lavoro comune.
Le caratteristiche del corso richiedono una valutazione in forma articolata, diversa dalla valutazione dei corsi che si svolgono solo in aula. Gli ingredienti fondamentali sono le valutazioni delle due prove in itinere, entrambe obbligatorie, e la valutazione del lavoro fatto in laboratorio, sia durante le esercitazioni che nella sua forma finale, con valutazione dei codici e dei risultati prodotti in laboratorio.
La prima prova in itinere viene di solito proposta intorno alla metà del corso (primi di novembre) e viene svolta a casa: c'è a disposizione per svolgerla circa una settimana, e si richiede di analizzare un problema di fisica non banale (del livello atteso per uno studente che comincia il secondo anno della Laurea Triennale in Fisica) con l’ausilio degli strumenti di programmazioni insegnati nel corso. Bisogna scrivere un codice, verificarlo, ed utilizzarlo per analizzare e comprendere i comportamenti fisici del sistema sotto esame. Oltre al codice viene richiesto di consegnare una relazione che descriva i principali risultati. La prova è individuale, e sia lo sviluppo del codice che la preparazione della relazione vanno svolti dallo studente in modo completamente autonomo. Non è previsto il recupero di questa prova, a meno di ritardi causati da dimostrata forza maggiore, che verranno discussi caso per caso.
La seconda prova in itinere si svolge di solito la settimana successiva all'ultima esercitazione di laboratorio. Si tratta di una prova individuale da sostenere al computer, nei nostri laboratori computazionali, e serve a dimostrare le competenze acquisite durante il corso di laboratorio. La parte principale della prova ha di solito a che fare con la correzione di una codice e/o con la scrittura di frammenti di codice o di brevi codici interi, ed infine con la produzione di grafici, fit ed istogrammi. In casi di forza maggiore che devono essere certificati, come malattia o impegni assolutamente irrinunciabili, lo studente può accedere a una prova di recupero.
In entrambe le prove in itinere possono essere contenute domande "teoriche" relative esclusivamente al materiale discusso durante le lezioni cattedratiche ed incluso nel programma.
I codici prodotti in laboratorio vengono valutati, sia durante le singole esercitazioni che alla fine del corso nella forma definitiva in cui vengono ufficialmente consegnati. Viene valutata la correttezza, la completezza e la pulizia dei codici, la loro efficienza, così come vengono valutate le conclusioni raggiunte con quei codici (figure e dati). In questo caso non sono richieste né previste relazioni esplicative.
Il voto finale di "esonero dal laboratorio" viene composto attraverso una combinazione dei voti discussi nei paragrafi precedenti, con pesi diversi, che possono variare a seconda della effettiva difficoltà delle prove presentate (tipicamente, come ordine di grandezza, la prima prova e la seconda prova avranno rispettivamente un peso vicino a 0.3 per la prima e a 0.4 per la seconda, e le valutazioni fatte in laboratorio avranno un peso totale vicino a 0.3). Essere esonerati dal laboratorio con un voto sufficiente certifica che il laboratorio è stato seguito con profitto, ed è condizione necessaria per poter sorpassare l'esame. Chi non ottiene la dichiarazione di esonero dal laboratorio non ha avuto un profitto tale da consentirgli di sorpassare l'esame, e dovrà seguire nuovamente le esercitazioni in laboratorio in un futuro anno accademico.
Le prove in itinere del corso sono obbligatorie proprio perché sono lo strumento principale di valutazione, il cui scopo è quello di certificare l’apprendimento reale dello studente durante il laboratorio. Come già detto, coloro che sono stati assenti per gravi motivi possono recuperarle immediatamente dopo la data delle prove stesse. Tuttavia le prove non possono essere ripetute in altri periodi dell’anno perché sono prove in itinere e sono parte integrante del laboratorio, che si conclude con la fine del corso.
Nella gran parte dei casi il voto finale di "esonero dal laboratorio" viene proposto agli studenti, che possono accettarlo, come voto finale. Per gli studenti che accettano il voto quest’ultimo viene verbalizzato al primo appello utile, senza ulteriori verifiche delle conoscenze acquisite. Solo in alcuni casi, in cui i risultati delle prove in itinere, pur potenzialmente sufficienti, non forniscano un’evidenza chiara del livello di conoscenze e competenze raggiunto dallo studente, viene richiesto di sostenere una prova finale, orale-pratica. Questi casi vengono motivati in dettaglio singolarmente.
Nel caso in cui sia necessario sostenere un'ulteriore prova orale-pratica, o nel caso in cui lo studente decida di non accettare il voto proposto come voto finale da verbalizzare, è possibile sostenere la prova orale-pratica in tutti gli appelli previsti dai regolamenti e fissati dai docenti. In questi casi il voto di "esonero dal laboratorio", che resterà invariato e valido per l'intero anno accademico, verrà mediato con il risultato dell'esame orale-pratico, e per essere promossi sarà necessario che questa media raggiunga la sufficienza.
La prova-orale pratica verte sia sugli argomenti teorici contenuti nel programma e illustrati durante le lezioni cattedratiche, sia sulle pratiche di programmazione e debugging che potranno essere svolte al computer durante l'esame orale-pratico.
Bibliografia
“Numerical Recipes in C”, Press, Teukolsky, …
Modalità di erogazione
Circa 30 ore di lezioni frontali e 10 esperienze in laboratorio
(https://elearning.uniroma1.it/course/view.php?id=2315)