Course Syllabus
Obiettivi
Questo corso intende fornire agli studenti le basi della programmazione e dei metodi computazionali per la fisica; gli studenti impareranno a modellizzare e simulare semplici problemi fisici, ottenendo predizioni e analizzando i risultati.
Obiettivi secondo i Descrittori di Dublino:
2. Conoscenza e capacità di comprensione applicate
3. Autonomia di giudizio
5. Capacità di apprendere
Contenuti sintetici
• Introduzione al Bash e agli script Bash.
• Introduzione alla programmazione, linguaggi interpretati vs linguaggi compilati. Python e librerie fondamentali: NumPy, SciPy, Matplotlib. Accenni al calcolo simbolico con SimPy.
• Accenni di programmazione a oggetti e al calcolo parallelo
• Metodi numerici: interpolazione, approssimazione, zeri, differenziazione e integrazione.
• Algebra lineare: operazioni elementari con matrici, sistemi lineari, equazioni agli autovalori.
• Equazioni differenziali ordinarie.
• Modellizzare semplici problemi fisici: esempi dalla meccanica classica.
• Dinamica gravitazionale di sistemi a più corpi.
• Metodi di Monte Carlo per simulazioni.
Programma esteso
Parte 1: Basi di programmazione e calcolo numerico
Introduzione al Bash: shell, comandi Unix, creare e manipolare file e cartelle, variabili di ambiente e alias.
Creare ed eseguire uno script in Bash, primi passi nel coding: variabili, cicli, condizioni, funzioni.
Introduzione ai linguaggi di programmazione. Python, accenni di C++; creare ed eseguire un codice.
Tipi di variabili e operazioni fondamentali. Leggere e scrivere file, definire funzioni, importare moduli. Liste e manipolazioni di liste.
Moduli specifici
NumPy: funzioni fondamentali, numeri pseudocasuali, array multidimensionali.
Matplotlib: realizzare e manipolare immagini, 2D e 3D plotting.
Accenni alla programmazione a oggetti in Python: classi, membri, metodi, ereditarietà.
Metodi numerici per trovare gli zeri: bisezione, metodo di Newton ed estensioni, metodo della secante. Implementazioni in Python con SciPy.
Interpolazione in una e due dimensioni. Implementazione con SciPy.
Derivate prime e seconde con differenze finite. Calcolo esatto con SimPy. scipy.misc.derivative.
Metodi numerici per l’integrazione: metodo dei rettangoli, metodo dei trapezi, formula di Cavalieri-Simpson, metodo di Gauss. Implementazione con SciPy.integrate.
Operazioni con array e matrici: somme, differenze, moltiplicazione righe per colonne. Risolvere sistemi lineari, calcolare il determinante di una matrice e ottenere la matrice inversa. Diagonalizzazione, calcolare autovalori e autovettori con NumPy.
Risolvere equazioni differenziali ordinarie: metodi di Eulero e Runge Kutta. Condizioni al contorno e Shooting.
Parte 2: modellizzazione e simulazione
Risoluzione di problemi di fisica elementare usando metodi numerici:
• cinematica del punto materiale: derivazione numerica delle traiettorie per moti in una, due e tre dimensioni.
• Meccanica: equazioni del moto per il pendolo semplice e smorzato
• pendolo doppio
• sistemi meccanici in presenza di attrito
• moto di rotolamento
Modellizzare problemi complessi:
• sistemi collisionali a molte particelle (esempio del gas in una scatola e calcolo di osservabili fisiche come temperatura e pressione)
• sistemi non collisionali a molte particelle: il potenziale gravitazionale di un sistema autogravitante
• Tempi computazionali. Accenno al calcolo parallelo
Rudimenti di metodi Monte-Carlo: cenni storici, algoritmo di Metropolis-Hastings. L’integrazione numerica con metodi Monte-Carlo.
Prerequisiti
Si richiedono conoscenze matematiche di base, funzioni elementari e calcolo algebrico: equazioni, disequazioni, trigonometria.
Modalità didattica
Le lezioni saranno erogate sia da remoto, in modalità asincrona, per 30 ore, sia in presenza per 18 ore. Ogni lezione prevede una parte teorica di lezione frontale (30 ore), sia una parte di esercitazione guidata (18).
Materiale didattico
Dispense delle lezioni ed esempi di codici forniti dal docente, volta per volta.
Testo suggerito per la programmazione in Python: “Introduction to Python Programming by OpenStack”, reperibile liberamente online https://openstax.org/details/books/introduction-python-programming (CC license)
Periodo di erogazione dell'insegnamento
Primo semestre
Modalità di verifica del profitto e valutazione
La modalità di verifica del profitto consiste nella presentazione di un progetto di gruppo con relazione finale, da discutere durante una prova orale, dove verranno inoltre verificate le competenze di programmazione e modellizzazione acquisite durante il corso. Non sono previste prove parziali, ma verranno lasciati degli esercizi settimanali che, se svolti e discussi correttamente all'esame, garantiranno da 1 a 3 punti in più sul voto finale.
Orario di ricevimento
Ogni giorno, possibilmente con richiesta di appuntamento via email
Sustainable Development Goals
Aims
This course aims to provide students with the fundamentals of programming and computational methods for physics. Students will learn how to model and simulate simple physical problems, make predictions, and analyze the results.
objectives according to Dublin Descriptors:
2. Applying knowledge and understanding
3. Making judgements
5. Learning skills
Contents
• Introduction to Bash and Bash scripts.
• Introduction programming, compiled vs inteprted languages. Pyhton and fundamental libraries: NumPy, SciPy, Matplotlib. Mention to symbolic calculus with SimPy.
• Basic notion about object-oriented programming and parallel computation
• Numerical methods: interpolation, approximation, root finding, differentiation, and integration.
• Linear algebra: basic matrix operations, linear systems, eigenvalue equations.
• Ordinary differential equations.
• Modelling simple physical problems: examples from classical mechanics.
• Gravitational dynamics of multi-body systems.
• Monte Carlo methods for simulations.
Detailed program
Part 1: Basics of Programming and Numerical Computing
Introduction to Bash: shell, Unix commands, creating and managing files and directories, environment variables, and aliases.
Creating and executing a Bash script, first steps in coding: variables, loops, conditions, functions.
Introduction to programming languages. Python, brief mention to C++; create and execute a code. Variable types and fundamental operations. Reading and writing files, defining functions, importing modules. Lists and list manipulations.
Specific Modules
NumPy: fundamental functions, pseudorandom numbers, multidimensional arrays.
Matplotlib: creating and manipulating images, 2D and 3D plotting.
Introduction to object-oriented programming in Python: classes, members, methods, inheritance.
Numerical methods for finding zeros: bisection, Newton’s method and extensions, secant method. Implementations in Python with SciPy.
Interpolation in one and two dimensions. Implementation with SciPy.
First and second derivatives using finite differences. Exact calculation with SymPy. scipy.misc.derivative.
Numerical methods for integration: rectangle method, trapezoidal rule, Cavalieri-Simpson’s formula, Gauss quadrature. Implementation with SciPy.integrate.
Operations with arrays and matrices: sums, differences, row-by-column multiplication. Solving linear systems, computing the determinant and inverse of a matrix. Diagonalization, computing eigenvalues and eigenvectors with NumPy.
Solving ordinary differential equations: Euler and Runge-Kutta methods. Boundary conditions and the Shooting method.
Part 2: Modelling and Simulation
Solving elementary physics problems using numerical methods:
• Kinematics of a material point: numerical derivation of trajectories in one, two, and three dimensions.
• Mechanics: equations of motion for the simple and damped pendulum.
• Double pendulum.
• Mechanical systems with friction.
• Rolling motion.
Modelling complex problems:
• Many-particle collisional systems (e.g., gas in a box and computation of physical observables such as temperature and pressure).
• Many-particle non-collisional systems: gravitational potential of a self-gravitating system.
• Computational time. introduction to parallel computing.
Introduction to Monte Carlo methods: historical background, Metropolis-Hastings algorithm. Numerical integration using Monte Carlo methods.
Prerequisites
Knowledge of basic Mathematics is required, elementary functions and algebraic calculus: equations, inequalities, trigonometry.
Teaching form
Lectures will be delivered both remotely, in asynchronous mode, for 28 hours, and in person for 20 hours. Each lesson includes a theoretical lecture component (30 hours) as well as a guided exercise session (18 hours).
Textbook and teaching resource
Lecture notes and codes examples provided gradually.
Suggested Textbook for Python programming: “Introduction to Python Programming by OpenStack”, reperibile liberamente online https://openstax.org/details/books/introduction-python-programming (CC license)
Semester
First semester
Assessment method
The assessment relies on presenting a group project with a final report, to be discussed during an oral exam, in order to evaluate the programming and modeling skills acquired during the course. No partial exams are planned, but weekly exercises will be assigned. If completed and discussed correctly during the exam, these exercises will grant an additional 1 to 3 points on the final grade.
Office hours
Every day with preferred requested appointment via email