Metodi computazionali della fisica
A.A. 2024/2025
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.
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 dell'insegnamento avrà
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.
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.
Periodo: Secondo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento può essere seguito come corso singolo.
Programma e organizzazione didattica
Edizione unica
Responsabile
Periodo
Secondo semestre
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 ).
-elettronica digitale: verrà introdotto il linguaggio di programmazione delle FPGA e verrà sviluppato un progetto che utilizza questo tipo di schede.
-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.
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 ).
-elettronica digitale: verrà introdotto il linguaggio di programmazione delle FPGA e verrà sviluppato un progetto che utilizza questo tipo di schede.
-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.
Prerequisiti
Conoscenza di base di almeno un linguaggio di programmazione (C/C++/Fortran).
Capacità di base di analizzare un problema in termini algoritmici.
Capacità di base di analizzare un problema in termini algoritmici.
Metodi didattici
L'insegnamento è 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 di questo insegnamento 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.
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 di questo insegnamento 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.
Materiale di riferimento
Modalità di verifica dell’apprendimento e criteri di valutazione
Durante le lezioni 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.
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
Lezioni: 14 ore
Docenti:
Riboldi Stefano, Vicini Alessandro
Docente/i
Ricevimento:
Su appuntamento
Edificio LITA; II piano