Laboratorio di trattamento numerico dei dati sperimentali
A.A. 2023/2024
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 dell'insegnamento 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.
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.
Periodo: Primo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.
Programma e organizzazione didattica
Edizione unica
Responsabile
Periodo
Primo semestre
Programma
Durante l'insegnamento si presentano alcune tecniche numeriche per affrontare problemi fisici di interesse. Il linguaggio di riferimento per l'implementazione di queste tecniche e 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 simulazione di apparati sperimentali.
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 simulazione di apparati sperimentali.
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
2) elementi base di analisi matematica: sviluppi di Taylor, teoria dell'integrazione, equazioni differenziali
Metodi didattici
L'insegnamento 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 necessita'.
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 necessita'.
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/
Trasparenze delle lezioni teoriche e sito di laboratorio
https://ltnds.ariel.ctu.unimi.it/v5/Stats/Help.aspx
http://labmaster.mi.infn.it/Laboratorio2/labTNDS/
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/
Trasparenze delle lezioni teoriche e sito di laboratorio
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 sara' 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 verra' definito in sede di esame orale e terra' 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 capacita' dello studente di applicare le conoscenze acquisite durante l'insegnamento 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, partira' da una discussione dei contenuti della prova scritta per poi accertare più in generale la conoscenza degli aspetti teorici (algoritmi) e metodologici (codifica) trattati nell'insegnamento.
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 verra' definito in sede di esame orale e terra' 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 capacita' dello studente di applicare le conoscenze acquisite durante l'insegnamento 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, partira' da una discussione dei contenuti della prova scritta per poi accertare più in generale la conoscenza degli aspetti teorici (algoritmi) e metodologici (codifica) trattati nell'insegnamento.
FIS/01 - FISICA SPERIMENTALE - CFU: 6
Laboratori: 36 ore
Lezioni: 24 ore
Lezioni: 24 ore
Turni:
Docente:
Carminati Leonardo Carlo
Turno 1
Docente:
Carminati Leonardo CarloTurno 2
Docente:
Carminati Leonardo CarloTurno 3
Docente:
Maino DavideTurno 4
Docente:
Tomasi MaurizioTurno 5
Docente:
Galli Davide EmilioCORSO SERALE
Periodo
Primo semestre
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.
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 (frontale). 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 nell'insegnamento: 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
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
Lezioni: 24 ore
Docenti:
Prelz Francesco, Rebatto Davide
Siti didattici
Docente/i
Ricevimento:
su appuntamento
Ricevimento:
Mercoledì 14:30-16:00, oppure in altri giorni via appuntamento per e-mail
Dip. di Fisica, stanza A/T/S5b (piano 0 edificio LITA), via Celoria, 16
Ricevimento:
Su appuntamento
Laboratorio di Strumentazione Spaziale, Dipartimento di Fisica (via Celoria 16, Milano)