L'insegnamento si propone di approfondire le conoscenze su linguaggi e tecniche di programmazione, algoritmi e strutture dati utili per il calcolo scientifico.
L'insegnamento si propone di far acquisire agli studenti:
- una conoscenza approfondita di programmazione C++ e Python;
- una conoscenza delle problematiche connesse all'utilizzo del calcolatore per eseguire simulazioni accurate ed efficienti;
- una conoscenza dei principali algoritmi e delle fondamentali strutture di dati dell'informatica;
- una conoscenza delle problematiche legate alla geometria computazionale applicata alla computer grafica, all'integrazione numerica e alla risoluzione di equazioni differenziali.
The course aims to deepen the knowledge on languages and programming techniques, algorithms and data structures useful for scientific computing.
The course aims to make students acquire:
- an in-depth knowledge of C++ and Python programming;
- a knowledge of the problems related to the use of the computer to perform accurate and efficient simulations;
- a knowledge of the main algorithms and fundamental data structures of information technology;
- a knowledge of the main problems related to computational geometry for computer graphic, numerical integration and differential equations.
I risultati di apprendimento attesi consistono in:
• una conoscenza approfondita di programmazione C++ e Python;
• una conoscenza delle problematiche connesse all'utilizzo del calcolatore per eseguire simulazioni accurate ed efficienti (complessità computazionale degli algoritmi, stabilità, condizionamento della formulazione del problema);
• una conoscenza dei principali algoritmi e delle fondamentali strutture di dati dell'informatica;
• una conoscenza delle problematiche principali legate alla geometria computazionale.
Le abilità che si vogliono trasmettere sono:
• scrivere un codice complesso individuale e di gruppo;
• collabolare in un team per la risoluzione di un problema computazionale complesso;
• sviluppare algoritmi valutando gli aspetti positivi e negativi delle varie soluzioni possibili;
• prendere decisioni sulla base di valutazioni oggettive in termini di complessità computazionale, robustezza e semplicità tra le diverse possibili soluzioni implementative
Le competenze ottenute alla fine del corso sono:
• analizzare un problema complesso, valutare le possibili soluzioni implementative e progettare un codice di simulazione per il calcolo scientifico funzionante, modulare ed efficiente.
The expected learning outcomes consist of:
- an in-depth knowledge of C / C ++ and Pythin programming,
- a basic knowledge of the problems related to the use of the computer to perform accurate and efficient simulations (computational complexity of algorithms, stability, conditioning of problem formulation),
- a knowledge of the main algorithms and fundamental data structures of information technology,
- a knowledge of the main problems related to computational geometry.
Buona conoscenza di un linguaggio di programmazione e del funzionamento del calcolatore.
Buona conoscenza degli argomenti dei corsi di base di analisi matematica, geometria e algebra lineare.
Good knowledge of a programming language and computer.
Good knowledge of the topics of the basic courses of mathematical analysis, geometry and linear algebra.
Introduzione al Calcolo Scientifico
• Ripasso su condizionamento di un problema e stabilità di un algoritmo numerico.
• Cenni sulla Teoria della complessità computazionale
Introduzione all'Ingegneria del Software
• Cenni sull'Esecuzione e sulle Performance di un Codice
◦ Compiler vs Interpreter
◦ Puntatori, allocazione statica e dinamica della memoria
◦ Introduzione al linguaggio C++ e Python
• Cenni sui Paradigmi di programmazione
◦ Focus sulla Programmazione orientata agli oggetti (OOP)
◦ OOP nel linguaggio C++ e Python
• Cenni sul Design pattern
◦ Abstract Factory Pattern e Factory method pattern
◦ Inversion of control e Dependency injection
• Introduzione al Version Control
◦ Introduzione a Git
Applicazioni del Calcolo Scientifico
◦ Strutture dati avanzate (liste, code, pile, alberi, grafi)
◦ Complessità computazionale, Ricorsione
◦ Algoritmi elementari (ordinamento, attraversamento di alberi e grafi, ricerca di percorsi tra nodi nei grafi)
◦ Strutture dati in C++ e Python
▪ C++ (STL)
• Geometria Computazionale
◦ Introduzione agli oggetti geometrici
◦ Intersezioni
◦ Matrici di Rotazione
◦ Trasformazioni affini, sistemi di riferimento 2D/3D
◦ Quadratura numerica 2D/3D
◦ Geometria computazionale in C++ e Python
▪ C++ - Eigen
▪ Phyton - numpy
Introduction to Scientific Computing
• Review and Insights on Computer Arithmetic
• Reliability of numerical solutions, accuracy, choice of tolerances.
• Review on conditioning of a problem and stability of a numerical algorithm.
• Notes on the theory of computational complexity
Introduction to Software Engineering
• Notes on the Execution and Performance of a Code
◦ Compiler vs Interpreter
◦ Pointers, static and dynamic memory allocation
◦ Introduction to C ++ and Python language
• Notes on programming paradigms
◦ Focus on Object Oriented Programming (OOP)
◦ OOP in the C ++ and Python languages
Notes on the Design pattern
◦ Abstract Factory Pattern and Factory method pattern
◦ Inversion of control and Dependency injection
• Introduction to Version Control
◦ Introduction to Git
Applications of Scientific Computing
◦ Advanced data structures (lists, queues, stacks, trees, graphs)
◦ Computational complexity, Recursion
◦ Elementary algorithms (sorting, crossing trees and graphs, searching for paths between nodes in graphs)
◦ Data structures in C ++ and Python
▪ C ++ (STL)
• Computational geometry
◦ Introduction to geometric objects
◦ Intersections
◦ Rotation matrices
◦ Computational geometry in C ++ and Python
▪ C ++ - Eigen
▪ Phyton - numpy
L'insegnamento copre la durata di un semestre.
Si compone di lezioni teoriche, esercitazioni in aula ed esercitazioni al calcolatore.
Una parte consistente del corso è dedicata allo sviluppo di un progetto di gruppo.
Il progetto a tema vincolato consiste nello sviluppo di un codice da parte di gruppi di 2 o 3 studenti per la risoluzione del problema proposto dal docente utilizzando gli strumenti, le strutture dati e i linguaggi presentati durante il corso.
The course covers lasts two semesters. In both semesters it consists of theoretical lessons,
classroom exercises and exercises at the computer lab. Most of the tutorials
second semester workshops are dedicated to the development of a group project. The project
consists in the development of a code by groups of 2 or 3 students for the resolution of one of the
problems proposed by the teacher using the tools, data structures and languages presented during the
course.
• Crescenzi Pierluigi - Gambosi Giorgio - Grossi Roberto - Rossi Gianluca,
STRUTTURE DI DATI E ALGORITMI, Progettazione, analisi e programmazione,
Editore: PEARSON EDUCATION ITALIA
• Monegato Giovanni, METODI E ALGORITMI PER IL CALCOLO NUMERICO, Editore: CLUT
• Materiale elettronico fornito dai docenti
Crescenzi Pierluigi - Gambosi Giorgio - Grossi Roberto - Rossi Gianluca,
STRUTTURE DI DATI E ALGORITMI, Progettazione, analisi e programmazione,
Editore: PEARSON EDUCATION ITALIA
Slides presented during lessons
Modalità di esame: Prova orale obbligatoria; Elaborato progettuale individuale; Elaborato progettuale in gruppo;
Exam: Compulsory oral exam; Individual project; Group project;
...
La durata dell'esame orale è di circa 45 minuti e consta di 2/3 ca domande con peso nella valutazione finale circa uguale.
Le domande saranno prevalentemente indirizzate alla discussione con il docente:
• delle esercitazioni proposte durante l'anno e implementate indipendentemente dallo studente;
• del progetto a tema vincolato scelto, facendo particolare riferimento agli aspetti di complessità computazionale delle scelte fatte nell'implementazione.
Infine, durante la discussione si approfondiranno inoltre gli argomenti proposti durante l'insegnamento.
Le valutazioni sono espresse in trentesimi e l’esame è superato se la votazione riportata è di almeno 18/30. La valutazione massima è 30 e lode.
La consegna del progetto permette di raggiungere la votazione massima, altrimenti il voto massimo della prova orale è 26/30.
Il progetto è considerato valido al fine della prova orale se consegnato nella sezione Elaborati della pagina del corso entro la fine di Luglio 2023.
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
Exam: Compulsory oral exam; Individual project; Group project;
The exam consists of a computer test with exercises and theoretical questions that normally lasts 1 hour, a project consisting in the development of a code to solve problems assigned by the teacher to the computer, an oral with theoretical questions, discussion of the computer test and discussion of the project with particular reference to the aspects of computational complexity of the choices implemented in the project.
During the written exam, the use of educational materials, calculators and mobile phones is not allowed. There is no minimum evaluation of the computer test to be admitted to the orals.
The computer test is aimed at verifying a basic knowledge of all course topics. In the case from the test gaps emerge in relevant parts of the program, part of the oral exam will be devoted to evaluating the real knowledge of the topics of the questions of the test with missing or incorrect answer.
The evaluations are expressed in thirtieths and the exam is passed if the score is at least 18/30. The maximum rating is 30 cum laude.
The duration of the oral exam is about 45 minutes and consists of 2/3 questions with weight in the final evaluation slmost equal.
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.