Laboratorio di trattamento numerico dei dati sperimentali

A.A. 2024/2025
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 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.
Corso singolo

Questo insegnamento può essere seguito come corso singolo.

Programma e organizzazione didattica

Edizione unica

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 è 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 per la simulazione di apparati sperimentali.
Prerequisiti
1) conoscenza dei principali elementi di sintassi del linguaggio C/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
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 analisi numerica 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/

Trasparenze delle lezioni teoriche e sito di laboratorio

https://myariel.unimi.it/course/view.php?id=3553
https://labtnds.docs.cern.ch/
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 del codice. La prova scritta, della durata di due ore, punta a verificare la capacità 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, 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 nell'insegnamento.
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
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)