Il corso si propone di approfondire le conoscenze su linguaggi e tecniche di programmazione, algoritmi e strutture dati utili per il calcolo scientifico.
Il corso si propone di far acquisire agli studenti:
- una conoscenza approfondita di programmazione C/C++ e Matlab,
- una conoscenza di base 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.
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 / C ++ and Matlab programming,
- a basic 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.
I risultati di apprendimento attesi consistono in:
- una conoscenza approfondita di programmazione C/C++ e Matlab,
- una conoscenza di base 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.
The expected learning outcomes consist of:
- an in-depth knowledge of C / C ++ and Matlab 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.
Buona conoscenza di un linguaggio di programmazione e del funzionamento del calcolatore.
Buona conoscenza degli argomenti dei corsi di base di analisi matematica e geometria.
Good knowledge of a programming language and computer.
Good knowledge of the topics of the basic courses of mathematical analysis and geometry.
- Approfondimenti su aritmetica del calcolatore e problematiche connesse al calcolo scientifico: affidabilita` delle soluzioni numeriche.
- Richiami su condizionamento di un problema e stabilita` di un algoritmo numerico; analisi degli effetti dell'aritmetica di macchina sull'affidabilita` delle simulazioni numeriche: esempi di situazioni problematiche facilmente riscontrabili nelle simulazioni.
- Introduzione alla programmazione avanzata di algoritmi numerici in Matlab.
- Richiami di programmazione in C per il calcolo scientifico: richiami su puntatori, allocazione statica e dinamica e analisi approfondita in termini di efficienza delle diverse scelte nell'ambito del calcolo scientifico.
- Introduzione alla programmazione ad oggetti nel linguaggio C++, librerie utili per la risoluzione numerica di vari problemi.
- Complessità computazionale, ricorsione, strutture dati (liste, code, pile, alberi, grafi)
- Algoritmi elementari (ordinamento, attraversamento di alberi e grafi, ricerca di percorsi tra nodi nei grafi) e loro implementazione in C/C++; analisi dell'applicabilita` di questi paradigmi in diversi contesti di simulazione e approssimazione delle soluzioni di problemi ingegneristici.
- Breve introduzione alla parallelizzazione con MPI e OpenMP.
- Introduzione alla risoluzione di problemi numerici con Python e descrizione delle librerie numeriche piu` diffuse basate su Python.
- Principali librerie numeriche di pubblico dominio per la risoluzione di sistemi lineari in C, C++ e Python.
- Computer arithmetic and problems related to scientific computing: reliability of numerical solutions.
- Conditioning of a problem and stability of a numerical algorithm; analysis of the effects of machine arithmetic on the reliability of numerical simulations: examples of problematic situations easily found in the simulations.
- Introduction to the advanced programming of numerical algorithms in Matlab.
- C programming for scientific calculation: pointers, static and dynamic allocation and in-depth analysis in terms of efficiency of the various choices in the scientific computing.
- Introduction to object-oriented programming in the C ++ language, libraries useful for the numerical resolution of various problems.
- Computational complexity, recursion, data structures (lists, queues, stacks, trees, graphs)
- Elementary algorithms (sorting, crossing of trees and graphs, searching for paths between nodes in graphs) and their implementation in C / C++; analysis of the applicability of these paradigms in different contexts of simulation and approximation of solutions to engineering problems.
- Brief introduction to parallelization with MPI and OpenMP.
- Introduction to the resolution of numerical problems with Python and description of the most common numerical libraries based on Python.
- Main numerical libraries of public domain for the resolution of linear systems in C, C ++ and Python.
L’insegnamento consta di lezioni, esercitazioni in aula ed esercitazioni presso un laboratorio informatico.
Buona parte delle esercitazioni di laboratorio del secondo semestre sono dedicate allo sviluppo di progetti di gruppo. I progetti consistono nello sviluppo di uno o più codici da parte di gruppi di 2 o 3 studenti che partendo da un tema proposto sviluppano e implementano algoritmi opportuni per la soluzione del problema utilizzando i linguaggi, le strutture dati e varianti degli algoritmi presentati durante il corso.
The course consists of lectures, exercises in the classroom and exercises at an IT laboratory.
A large part of the second semester laboratory exercises are dedicated to the development of group projects. The projects require the development of one or more codes by groups of 2 or 3 students who, starting from a proposed theme, develop and implement appropriate algorithms for solving the problem using the computer languages, data structures and variants of the algorithms 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
Slides utilizzate durante le lezioni
Crescenzi Pierluigi - Gambosi Giorgio - Grossi Roberto - Rossi Gianluca,
STRUTTURE DI DATI E ALGORITMI, Progettazione, analisi e programmazione,
Editore: PEARSON EDUCATION ITALIA
Slides utilizzate durante le lezioni
Modalità di esame: Test informatizzato in laboratorio; Prova orale obbligatoria; Progetto di gruppo;
Exam: Computer lab-based test; Compulsory oral exam; Group project;
...
L'esame consiste in un test informatizzato con esercizi e domande teoriche che dura di norma 1 ora, un progetto consistente nello sviluppo di un codice per risolvere al calcolatore problemi assegnati dal docente, un orale con domande di tipo teorico, discussione del test e discussione del progetto con particolare riferimento agli aspetti di complessità computazionale delle scelte fatte nel progetto.
Durante il test informatizzato non è consentito l’uso di materiali didattici, calcolatrice e cellulari. Non c'e` una valutazione minima del test informatizzato per essere ammessi all'orale.
Il test informatizzato è finalizzato alla verifica di una conoscenza di base di tutti gli argomenti del corso. Nel caso dal test emergano lacune in parti rilevanti del programma, parte della prova orale sarà dedicata a valutare l'effettiva consoscenza degli argomenti delle domande del test con risposta mancante o errata.
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 durata dell'esame orale è di circa 45 minuti e consta di 2/3 domande con peso nella valutazione finale circa uguale.
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: Computer lab-based test; Compulsory oral exam; 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.