Computational physics laboratory

A.Y. 2020/2021
Overall hours
Learning objectives
The course aims to provide basic notions of some computational tools (C++, shell and scripting languages, python, LaTex), and "Data Science" skills, in the sense of reasoned and model-driven data analysis, data visualization and effective communication of scientific results. The main features of this course are the use and conceptualization of advanced data analysis tools through their use, with a clear plan and clear objectives. The course provides the technical and scientific background essential to work on the "data challenge" projects.
Expected learning outcomes
At the end of the course, the student will have to master an essential technical background which includes C++, Shell scripting, AWK, Python, data visualization and statistical data analysis tools. S/he will also be able to use technical skills in "data challenges", projects that start from a dataset and aim to extract the main trends. This also implies the acquisition of critical skills in the interpretation and understanding of trends in the data. Finally it is expected that the students will be able to communicate their results and their work in reports (written in English) that include plots and illustrative figures.
Course syllabus and organization

Single session

Lesson period
Second semester
if the restrictions necessary to guarantee minimal health conditions will be enforced also in the second semester, then the course will be delivered online
Course syllabus
Development of a project, using advanced programming techniques, in
one of the following fields.
-Mathematica. Realization from scratch of a symbolic manipulation
package (generation of graphs and of scattering amplitudes
according to the Feynman diagrams technique, or optimization of
problems, with a genetic algorithm, like the automatic writing of
computer codes, the training of a neural network, the training of
an expert system that plays the "Prisoner's dilemma").
-CUDA. Introduction to programming NVIDIA graphics cards in
CUDA. Development of parallelized algorithms, able to run on these
kind of devices.
-Block-chain. Introduction to the cryptography techniques based on bloch-chains. Development of an environment that allows to set smart-contracts. The techniques are then applied to real life problems.
-Quantitative finance. Development of a C++ library that allows the simulation of the temporal evolution of financial products and the evaluation of the gain of the contracts related to these products. The simulation codes run also on NVIDIA GPUs.
Prerequisites for admission
Basic knowledge of at least one programming language (C/C++/Fortran).
Basic skills for the analysis and description of a problem in algorithmic form.
Teaching methods
The course is organised in three parts.
In the first part, a series of lectures on modern programming language is delivered, with the aim of providing a background for the problems and the needs that might arise during the development of the final projects. During the lectures each student must have a computer available to immediately reproduce and test the examples proposed.
In the second part, the students are split in groups, choosing to focus on a specific programming language. The activity of the groups proceed in parallel . In each group a second series of lectures is delivered, to discuss the detailed features of the chosen programming language, which will be then applied in the final project.
In the third part, the topics of the final projects are proposed. Each student chooses on topic and starts individually to develop the code. In the following meetings, the planning of the code, its development, the solution of bugs or of logical problems are faced, discussed and solved with the Professor. The final result is a computer code or a library of routines, whose usage allows to compute the results, numerical or symbolical, which will be illustrated in the final report.
Assessment methods and Criteria
During the course, several topics are introduced and proposed for a more detailed study.
Each student has to choose one of these topics and has to elaborate it in the form of a project. The exam consists in the submission of a written report on the project and its oral discussion at the blackboard. The report will describe the problem, the methodologies used in the calculations and/or in the simulations, the final results and their soundness, the prospects to extend the approach to more complex requests in the same computational domain.
The final evaluation is based on several factors:
the completeness of the project, in its mandatory and complementary items;
the level of the checks which have been applied to test the validity of the results presented;
the level of the oral presentation of the final results.
Laboratories: 48 hours
Lessons: 14 hours
Mo-Fr, after 2.30pm