- Docente: Enrico Giampieri
- Crediti formativi: 6
- SSD: FIS/07
- Lingua di insegnamento: Inglese
- Moduli: Enrico Giampieri (Modulo 1) Nico Curti (Modulo 2) Alessandra Merlotti (Modulo 3)
- Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2) Convenzionale - Lezioni in presenza (Modulo 3)
- Campus: Bologna
- Corso: Laurea Magistrale in Physics (cod. 9245)
-
Orario delle lezioni (Modulo 1)
dal 27/02/2024 al 11/04/2024
-
Orario delle lezioni (Modulo 2)
dal 09/05/2024 al 30/05/2024
-
Orario delle lezioni (Modulo 3)
dal 15/04/2024 al 06/05/2024
Conoscenze e abilità da conseguire
At the end of the course the student will learn the basic concepts of programming and modern scientific computation, as they are currently used in the Applied Physics field. He/she will have an understanding of the major software development techniques and strategies and an understanding of the various computational frameworks, database, data maintenance and collection. The student will be able to solve advanced problems in scientific software design that will be developed as small group projects addressing real word problems in the Applied Physics field.
Contenuti
MODULO 1:
Stili e standard di programmazione. Design e sviluppo software. Tecniche e paradigmi di programmazione. Linguaggi di programmazione. Linguaggi compilati e interpretati. Paradigmi object-oriented. Programmazione funzionale. Punti di forza e debolezza, domini di applicazione, metodologie di diversi linguaggi di programmazione (in uso nella fisica contemporanea). L’esempio di Python, anche in ambienti multi-linguaggio. Come scrivere, debuggare, documentare, condividere, mantenere nel tempo un progetto software (software versioning, software verification and testing, life-cycle modeling, software maintenance, selected software engineering methods and tools).
Infrastrutture e risorse di calcolo. Databases relazionali. Gestione dati: formato, riduzione, replicazione, manipolazione. File systems. Concetti generali su: Big Data, tecniche di Analytics, Machine learning, Deep learning, Intelligenza artificiale, metodi di algebra simbolica ed applicazioni al deep learning.
MODULO 2:
Utilizzo di algoritmi random per la simulazione di sistemi fisici e di generazione dati.
Esempio di utilizzo per modellizzazione statistica frequentista e bayesiana.
Modelli random con memoria: processi markoviani.
Ottimizzazione di sistemi con metodi di esplorazione stocastica (come gli algoritmi generici).
Integrazione di equazioni differenziali, sensitivity analysis e propagazione degli errori tramite simulazioni montecarlo.
Fit di dati da processi complessi, applicazione alla calibrazione di strumentazione.
Testi/Bibliografia
Dispense, fornite come repository pubblico, e risorse online gratuite per l'approfondimento dei temi proposti in classe.
Metodi didattici
Il corso verrà svolto tramite lezioni frontali, con partecipazione attiva da parte degli studenti.
Durante le lezioni gli studenti saranno guidati nell'implementazione e la pratica degli argomenti discussi.
Saranno organizzati seminari opzionali per l'approfondimento di temi di interesse specifico.
Modalità di verifica e valutazione dell'apprendimento
Gli studenti verranno valutati sulla base di un progetto di programmazione.
Questo progetto andrà inserito in un repository di controllo di versione pubblico.
È lasciata libertà allo studente sul linguaggio utilizzato.
I metodi di controllo di versione accettabili sono git e fossil.
Il progetto sarà valutato sulla base di:
chiarezza della struttura del repository (6 punti)
chiarezza e completezza della documentazione ed organizzazione del codice sorgente (12 punti)
presenza ed eseguibilità di una routine di test (12 punti)
Lla valutazione sarà poi potenzialmente migliorata dai seguenti punti (opzionali):
contributo a progetti open source (fino a 6 punti)
Strumenti a supporto della didattica
Dispense, fornite come repository pubblico, e repository pubblici usati come casi di studio
Link ad altre eventuali informazioni
https://unibodifabiophysics.github.io/programmingCourseDIFA/
Orario di ricevimento
Consulta il sito web di Enrico Giampieri
Consulta il sito web di Nico Curti
Consulta il sito web di Alessandra Merlotti