Metodi computazionali della fisica
A.A. 2019/2020
Obiettivi formativi
Il corso fornisce un'introduzione ai metodi computazionali avanzati utilizzati attualmente in Fisica.
L'utilizzo di linguaggi moderni (Mathematica, CUDA, C++, Python) permette di affrontare problematiche computazionali di attualità, sviluppando da zero un progetto. Viene sviluppato un codice la cui esecuzione permette di risolvere le richieste del problema in esame, numeriche o simboliche.
L'utilizzo di linguaggi moderni (Mathematica, CUDA, C++, Python) permette di affrontare problematiche computazionali di attualità, sviluppando da zero un progetto. Viene sviluppato un codice la cui esecuzione permette di risolvere le richieste del problema in esame, numeriche o simboliche.
Risultati apprendimento attesi
Alla fine del corso lo studente:
1) saprà utilizzare le funzionalità avanzate di uno o più linguaggi moderni di programmazione;
2) saprà strutturare il flusso logico necessario per impostare la scrittura di un programma per computer articolato;
3) saprà stimare la validità dei risultati ottenuti;
4) saprà presentare i risultati e discutere le peculiarità dei metodi adottati.
1) saprà utilizzare le funzionalità avanzate di uno o più linguaggi moderni di programmazione;
2) saprà strutturare il flusso logico necessario per impostare la scrittura di un programma per computer articolato;
3) saprà stimare la validità dei risultati ottenuti;
4) saprà presentare i risultati e discutere le peculiarità dei metodi adottati.
Periodo: Secondo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
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
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
possibilita' di manipolazione a livello simbolico
(p.es. generazione di grafi e di ampiezze di scattering secondo la
tecnica dei diagrammi di Feynman, oppure
implementazione di un algoritmo genetico per l'ottimizzazione di
problemi complessi come la scrittura automatica di programmi,
la creazione di un sistema esperto in grado di giocare al
"dilemma del prigioniero", l'allenamento di una rete neurale)
-CUDA. Introduzione alla programmazione di schede grafiche NVIDIA e
sviluppo di algoritmi parallelizzati, adatti al funzionamento su
queste 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.
-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.
in uno dei seguenti ambiti.
-Mathematica. Realizzazione da zero di un package che sfrutti le
possibilita' di manipolazione a livello simbolico
(p.es. generazione di grafi e di ampiezze di scattering secondo la
tecnica dei diagrammi di Feynman, oppure
implementazione di un algoritmo genetico per l'ottimizzazione di
problemi complessi come la scrittura automatica di programmi,
la creazione di un sistema esperto in grado di giocare al
"dilemma del prigioniero", l'allenamento di una rete neurale)
-CUDA. Introduzione alla programmazione di schede grafiche NVIDIA e
sviluppo di algoritmi parallelizzati, adatti al funzionamento su
queste 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.
-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.
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.
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.
Materiale di riferimento
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.
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:
Gherardi Marco, Vicini Alessandro
Turni:
Docente/i
Ricevimento:
Su appuntamento
Dipartimento di Fisica, via Celoria 16, Milano --- Ufficio DC/1/3