Laboratorio di trattamento numerico dei dati sperimentali

A.A. 2020/2021
6
Crediti massimi
60
Ore totali
SSD
FIS/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di fornire agli studenti una introduzione alle principali tecniche numeriche utilizzate in fisica. Si discutono funzioni e comandi del sistema operativo, alcune tipologie di strutture di dati (in particolare quelle offerte dalla libreria standard C++), tecniche numeriche per il calcolo di integrali, soluzione di equazioni differenziali e alcuni esempi di metodi basati sulla generazione di numeri casuali. Particolare enfasi viene posta sulla comprensione approfondita dei vantaggi e delle limitazioni delle tecniche numeriche presentate. Il linguaggio di programmazione utilizzato e' il C++ di cui si studiano le caratteristiche principali come ereditarietà, incapsulamento e polimorfismo, nel modello di progettazione e programmazione orientato agli oggetti (OO).
Risultati apprendimento attesi
Lo studente al termine del corso avrà acquisito le seguenti abilità:
1) saprà interagire con il sistema operativo UNIX, in particolare nelle sue funzioni di lettura, scrittura e immagazzinamento dei dati.
2) saprà scrivere codice in C++ per acquisire e/o analizzare dati sperimentali e calcolarne i principali stimatori statistici.
3) sarà in grado di implementare nel linguaggio C++ alcuni algoritmi numerici come la ricerca di zeri di una funzione, il calcolo di integrali e la risoluzione di equazioni differenziali.
4) saprà scrivere un codice numerico in C++ per affrontare alcuni semplici problemi di meccanica ed elettrostatica.
5) sarà in grado di costruire un generatore di numeri casuali e di comprenderne funzionamento e limitazioni.
6) saprà utilizzare la generazione di numeri casuali per costruire algoritmi di soluzione di integrali mono e multidimensionali.
7) saprà utilizzare la generazione di numeri casuali per costruire simulazioni numeriche di apparati sperimentali studiando la propagazione delle incertezze sistematiche connesse alla misura.
Programma e organizzazione didattica

Edizione unica

Periodo
Primo semestre
Il corso sarà erogato interamente da remoto. Le lezioni si svolgeranno in modalità sincrona sulla piattaforma zoom per consentire l'interazione in tempo reale tra studenti e docenti. Le sessioni di laboratorio si svolgeranno da remoto su una piattaforma web che verrà illustrata durante il corso.
Programma
Durante il corso si presentano alcune tecniche numeriche per affrontare problemi fisici di interesse. Il linguaggio di riferimento per l'implementazione di queste tecniche è il C++ di cui si approfondiranno le principali caratteristiche sintattiche.
Gli argomenti trattati nel dettaglio saranno :
1) Analisi dati sperimentali : lettura dati da un file, analisi statistica elementare e visualizzazione dei dati raccolti.
- Richiami sugli elementi base del linguaggio C ( tipi di dati, strutture di controllo )
- Introduzione alla programmazione orientata agli oggetti, il concetto di classe
- Classi e funzioni template
- Contenitori di dati e algoritmi: contenitori elementari, contenitori STL (vector, list e map) e algoritmi (algorithm.h)
2) Esercizi su approccio object oriented: calcolo di campi elettrici e gravitazionali
- classi derivate, classi a derivazione multipla. incapsulamento.
3) Metodi di ricerca di zeri di una funzione: algoritmo di bisezione, metodo delle secanti e di Newtown. Performance e limitazioni.
- metodi virtuali, classi astratte e polimorfismo
4) Tecniche di quadratura numerica : metodo midpoint, metodo dei trapezi e di Simpson. Stima dell'errore nel calcolo di un integrale con tecniche numeriche.
5) Soluzione di equazioni differenziali ordinarie. Metodi ad un passo (Eulero e Runge-Kutta). Applicazione a vari sistemi fisici : pendolo, oscillatore armonico forzato e smorzato. Analisi dell'errore.
6) Richiami di teoria delle probabilità, variabili casuali e teorema del limite centrale. Generatori di numeri casuali per distribuzione uniforme, esponenziale e gaussiano. Metodo della funzione inversa e accept/reject. Metodi Monte Carlo per l'integrazione di una funzione e nelle simulazioni di esperimenti.
Prerequisiti
1) conoscenza dei principali elementi di sintassi del linguaggio C: tipi di variabili, strutture di controllo (if, for, while), funzioni e passaggio dei dati
2) elementi base di analisi matematica: sviluppi di Taylor, teoria dell'integrazione, equazioni differenziali
Metodi didattici
Il corso si articola in 12 lezioni frontali da due ore in aula e in 12 sessioni di laboratorio da tre ore. In ogni lezione frontale vengono introdotti gli elementi teorici di base per un nuovo argomento che viene poi approfondito mediante applicazioni concrete nella sessione di laboratorio successiva. Nelle sessioni di laboratorio vengono proposti dei problemi di matematica e di fisica da affrontare implementando gli algoritmi numerici discussi a lezione in codici C++.
Gli studenti svolgono l'attività di laboratorio in modo autonomo seguendo le indicazioni sul sito di riferimento e appoggiandosi all'aiuto del docente o degli assistenti in caso di necessità.
Materiale di riferimento
D.S. Malik: Programmazione in C++. Apogeo, 2013.
N. M. Josuttis: The C++ Standard Library-A Tutorial and Reference, 2nd Edition, Addison Wesley Longman, 2012
W.H. Press et al.: Numerical recipes in C/C++: the art of scientific computing, Cambridge University Press
http://www.cplusplus.com/
https://en.cppreference.com/w/
https://ltnds.ariel.ctu.unimi.it/v5/Stats/Help.aspx
http://labmaster.mi.infn.it/Laboratorio2/labTNDS/
Modalità di verifica dell’apprendimento e criteri di valutazione
La verifica dell'apprendimento sarà effettuata a partire dalla valutazione di :
1) codici realizzati dallo studente durante le sessioni di laboratorio per la soluzione degli esercizi proposti.
2) una prova pratica al calcolatore
3) una discussione orale.
Il voto finale in trentesimi verrà definito in sede di esame orale e terrà conto dell'esito delle tre parti sopra elencate. Gli esercizi svolti verranno valutati in termini di correttezza, completezza ed efficienza nell'implementazione del codice. La prova scritta, della durata di due ore, punta a verificare la capacità dello studente di applicare le conoscenze acquisite durante il corso ad un problema fisico nuovo: lo studente dovrà' realizzare un programma in linguaggio C++ che permetta la soluzione del problema proposto. In questa prova lo studente potrà utilizzare tutto il materiale da lui realizzato durante lo svolgimento del laboratorio. La prova orale infine, della durata di circa un'ora, partirà da una discussione dei contenuti della prova scritta per poi accertare più in generale la conoscenza degli aspetti teorici (algoritmi) e metodologici (codifica) trattati nel corso.
FIS/01 - FISICA SPERIMENTALE - CFU: 6
Laboratori: 36 ore
Lezioni: 24 ore
Turni:
Turno 1
Docente: Carminati Leonardo Carlo
Turno 2
Docente: Carminati Leonardo Carlo
Turno 3
Docente: Maino Davide
Turno 4
Docente: Tomasi Maurizio
Turno 5
Docente: Galli Davide Emilio

CORSO SERALE

Responsabile
Periodo
Primo semestre
* Metodi didattici
Nell'A.A. 2020/21 l'insegnamento si svolgerà a distanza in modalità sincrona negli orari previsti utilizzando la piattaforma Zoom. Lo strumento principale per le esercitazioni sarà una macchina virtuale installata sul laptop degli studenti (altre modalità verranno se necessario concordate con gli studenti presenti).

* Programma e materiale di riferimento
Il programma e il materiale di riferimento non subiranno variazioni.

* Modalità di verifica dell'apprendimento e criteri di valutazione
La modalità di svolgimento dell'esame non subirà variazioni (consiste sempre nella dimostrazione e discussione di un programma originale sviluppato dallo studente), ma si svolgerà a distanza sulla piattaforma Zoom.
Programma
Dopo richiami iniziali sulla struttura del programma C++, il funzionamento della catena di compilazione, sulla semantica del linguaggio nel suo uso procedurale, sull'uso di strumenti per il debug del codice, viene approfondita la struttura delle librerie standard iostream e STL, e la loro funzione nello sviluppo di algoritmi efficienti per il trattamento dei dati (il pacchetto di analisi dati utilizzato è ROOT). Viene quindi illustrato in forma generale il modello di progettazione e programmazione orientato agli oggetti.
Vengono quindi presentati alcuni classici metodi numerici per la ricerca degli zeri di una funzione, la soluzione di equazioni differenziali ordinarie, il calcolo degli integrali, la generazione di numeri casuali secondo una distribuzione di probabilità. Vengono infine illustrate e messe in pratica le funzionalità fondamentali del sistema operativo e delle librerie di sistema per l'accesso a periferiche, il controllo di processi, la comunicazione via rete, l'esecuzione parallela.
Prerequisiti
E' necessaria una conoscenza dei fondamenti di uso e funzionamento del calcolatore e della programmazione procedurale in un qualsiasi linguaggio di alto livello, così come proposte ad esempio dal corso di "Informatica" del corso di laurea in Fisica.
Metodi didattici
L'insegnamento comprende una parte di presentazione tradizionale. Ad ogni lezione segue l'assegnazione di un esercizio, da risolvere e sviluppare al calcolatore. Le soluzioni vengono condivise e commentate all'inizio della lezione successiva.
Materiale di riferimento
Materiale trattato nel corso: http://labmaster.mi.infn.it/Laboratorio2/serale/
Testi di riferimento/consultazione:
* N. Josuttis, The C++ Standard Library, a tutorial and reference, 2nd edition, Addison Wesley
* R. Lischner, "C++ in a nutshell", O'Reilly
* W.H. Press et al., "Numerical recipes in C/C++: the art of scientific computing", Cambridge University Press
* J.Peek, G.Todino, J.Strang, "Learning the Unix Operating System", O'Reilly
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame comporta lo sviluppo (in precedenza) di un'applicazione originale (in linguaggio C++) di trattamento o analisi dati, con argomento scelto liberamente dallo studente e approvato preventivamente dal docente. L'esame consiste in una prova pratica al calcolatore basata su tale applicazione. Il voto finale in trentesimi verrà definito in sede di esame orale e terrà conto dell'esito sia della prova pratica sia della parte orale.
FIS/01 - FISICA SPERIMENTALE - CFU: 6
Laboratori: 36 ore
Lezioni: 24 ore
Docente/i
Ricevimento:
su appuntamento
Ricevimento:
su appuntamento da concordare per e-mail o telefono
Via Celoria, 16 - Stanza A/T/C5 (piano 0 edificio LITA)
Ricevimento:
Su appuntamento via e-mail: Francesco.Prelz@mi.infn.it
Studio presso l'edificio 'I' - Centro di Calcolo del dipartimento di Fisica, via Celoria 16
Ricevimento:
Su appuntamento
Uff. I/T/11A c/o Palazzina Calcolo del Dipartimento di Fisica (via Celoria 16)
Ricevimento:
Su appuntamento
Laboratorio di Strumentazione Spaziale, Dipartimento di Fisica (via Celoria 16, Milano)