87948 - SOFTWARE AND COMPUTING FOR APPLIED PHYSICS

Scheda insegnamento

  • Docente Enrico Giampieri

  • Crediti formativi 6

  • SSD FIS/07

  • Modalità didattica Convenzionale - Lezioni in presenza

  • Lingua di insegnamento Inglese

  • Campus di Bologna

  • Corso Laurea Magistrale in Physics (cod. 9245)

  • Risorse didattiche su Virtuale

Anno Accademico 2022/2023

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