Metodi computazionali della fisica

A.A. 2021/2022
6
Crediti massimi
62
Ore totali
SSD
FIS/02
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di presentare una serie di tecniche moderne
utilizzate in Fisica, teorica e sperimentale,per lo sviluppo di modelli e per la predizione di osservabili di interesse fisico.
Il corso intende sviluppare negli studenti una capacita' di analisi dei problemi e di progettazione del codice necessario per la loro soluzione.
Si intende sviluppare codice originale, limitando al massimo l'utilizzo di pacchetti e librerie esterne, in modo da stimolare l'analisi dell'efficienza e dei punti critici del codice sviluppato
dagli studenti.
Le moderne tecniche di programmazione permettono di interfacciare diversi ambienti e linguaggi, combinandone i rispettivi pregi. Il corso si propone di esporre gli studenti a questa molteplicita' di approcci.
Risultati apprendimento attesi
Lo studente al termine del corso avra'
appreso un linguaggio moderno di programmazione (Mathematica, CUDA, C++, Python).
La realizzazione di un package o di una libreria originali permettera' di sviluppare delle capacita' di organizzazione logica e algoritmica del pensiero e inoltre delle competenze pratiche di soluzione esplicita dei problemi affrontati, sia di alto che di basso livello.
I risultati delle simulazioni verranno presentati in una relazione finale, in cui lo studente dovra' dimostrare una capacita' di analisi critica rispetto alla bonta' dei risultati e alla validita' delle soluzioni adottate.
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
Secondo semestre
Il corso verrà tenuto in presenza. Nel caso si dovessero ripresentare problemi sanitari legati all'epidemia di Covid-19, si utilizzerà una modalità di erogazione mista oppure completamente online.

Programma
Sviluppo di un progetto, utilizzando tecniche avanzate di programmazione,
in uno dei seguenti ambiti.
-Mathematica. Realizzazione da zero di un package che sfrutti le possibilità di manipolazione a livello simbolico (p.es. generazione di grafi e di ampiezze di scattering secondo la tecnica dei diagrammi di Feynman, oppure simulazione del problema delle Sand Piles per lo studio di un fenomeno critico in Meccanica Statistica, oppure implementazione di un codice gestito da Mathematica che utilizzi una GPU programmata in CUDA per svolgere calcoli onerosi ).
-Python: implementazione di un algoritmo genetico per l'ottimizzazione di
problemi complessi come la scrittura automatica di programmi, o la soluzione di un problema di crittografia
-Block-chain. Introduzione alle tecniche crittografiche di block-chain. Sviluppo di un ambiente che permetta la formulazione di smart-contracts. Applicazione di queste metodologie a problemi reali.
-Finanza quantitativa. Realizzazione di una libreria in C++ che permetta la simulazione dell'andamento temporale di prodotti finanziari e la valutazione della convenienza dei rispettivi contratti. I programmi di simulazione utilizzano anche schede grafiche NVIDIA.
Prerequisiti
Conoscenza di base di almeno un linguaggio di programmazione (C/C++/Fortran).
Capacità di base di analizzare un problema in termini algoritmici.
Metodi didattici
Il corso è organizzato in tre parti.
La prima parte prevede una serie di lezioni introduttive su alcuni linguaggi e metodi moderni di programmazione. Le lezioni hanno carattere generale e sono utili per affrontare i diversi problemi che possono presentarsi nello sviluppo dei progetti finali. Queste lezioni prevedono che tutti gli studenti abbiano un computer a disposizione per riprodurre immediatamente gli esempi proposti sullo schermo principale.
Nella seconda parte, gli studenti si dividono in gruppi, scegliendo di approfondire un particolare linguaggio di programmazione. I gruppi procedono in parallelo.
In ciascun gruppo vengono trattati, in una seconda serie di lezioni, argomenti specifici del linguaggio e/o della modalità di programmazione che si intendono applicare nello sviluppo del progetto.
Nella terza parte del corso vengono proposti i problemi che gli studenti potranno sviluppare in forma di progetto. Ogni studente inizia individualmente lo sviluppo del codice di computer necessario per risolvere il problema scelto, con l'assistenza del docente. Negli incontri successivi, la pianificazione del codice, il suo sviluppo, la soluzione di eventuali problemi di programmazione o di logica del programma vengono affrontati e risolti con il docente.
Il risultato finale è un codice o una libreria di routines, il cui utilizzo permette di calcolare i risultati, numerici o simbolici, che verranno presentati nella relazione finale.
Modalità di verifica dell’apprendimento e criteri di valutazione
Durante il corso verranno proposti diversi argomenti di approfondimento.
Ciascuno studente dovrà scegliere uno di questi temi e svilupparlo nella forma di un progetto.
L'esame consisterà nella presentazione di una relazione scritta e nella sua discussione orale alla lavagna. La relazione deve descrivere la problematica affrontata, la metodologia di calcolo e/o simulazione adottata, i risultati ottenuti e la loro affidabilità, le prospettive di estensione dell'approccio adottato a problemi di maggiore complessità, nello stesso ambito computazionale.
La valutazione finale si basa su diversi fattori:
la completezza dello svolgimento del progetto assegnato dal docente, nelle sue parti obbligatorie e facoltative;
il rigore metodologico con cui i risultati presentati sono stati verificati;
la chiarezza espositiva nella presentazione della relazione.
FIS/02 - FISICA TEORICA, MODELLI E METODI MATEMATICI - CFU: 6
Laboratori: 48 ore
Lezioni: 14 ore
Docente/i
Ricevimento:
Su appuntamento
Dipartimento di Fisica, via Celoria 16, Milano --- Ufficio DC/1/3
Ricevimento:
Tutti i giorni, dopo le 14.30
DC-1-5
Ricevimento:
Da concordare (via mail)
DC/1/6, Dipartimento di Fisica