Scheda insegnamento

Laboratorio di programmazione e calcolo                  

anno accademico:   2017/2018
docente:  Silvia Noschese
corso di laurea:  Matematica - DM 270/04 (triennale), I anno
crediti formativi:  9 (84 ore di lezione)
lingua di insegnamento:  italiano
canale:   M-Z
periodo:  I sem (25/09/2017 - 19/01/2018)

Frequenza: consigliata

Obiettivi del corso: L`obiettivo principale del corso è quello di avviare gli studenti ad un approccio costruttivo nella matematica anche attraverso l`uso dei calcolatori. Da questo punto di vista, il corso è complementare agli altri corsi del primo anno, nei quali è maggiormente enfatizzato l`approccio logico/deduttivo. La maggior parte del corso sarà dedicata alla soluzione di problemi, all`analisi degli algoritmi di base ed alla loro implementazione in C++.

Programma completo del corso: Introduzione al linguaggio C++: tipi di variabili, conversione di tipo, variabili array, operatori logici (or, and, not), istruzioni di lettura e scrittura, istruzioni condizionali (if-else) e istruzioni di ciclo (for, while, do-while). Funzioni matematiche. Struttura di un programma C++. Funzioni. Passaggio delle variabili. Rappresentazione dei numeri interi e reali nel calcolatore. Propagazione degli errori nelle operazioni aritmetiche. Algoritmi stabili e algoritmi instabili: calcolo di pigreco. Calcolo del polinomio in un punto (algoritmo di Horner). Matrici, vettori e sistemi di equazioni lineari. Risoluzione numerica di sistemi di equazioni lineari: metodi di Gauss e di Jacobi. Uso della libreria grafica Gnuplot: grafico di una funzione. Metodi numerici per il calcolo degli zeri di una equazione non lineare: metodi della bisezione, di Newton e delle secanti. Uso della formula di Taylor per il calcolo di alcune funzioni matematiche. Interpolazione polinomiale. Metodi numerici per il calcolo di integrali definiti.


Contenuti svolti nella settimana 25-29/09/2017 (6 ore di lezione)
Struttura del corso. Introduzione alla programmazione. I numeri e la loro rappresentazione sui calcolatori. Numeri di macchina. Rappresentazione in virgola fissa e in virgola mobile. Singola e doppia precisione nella rappresentazione binaria. Sistema floating point normalizzato. Approssimazione per troncamento e per arrotondamento. Overflow e underflow. L'aritmetica floating point. Errore assoluto e errore relativo. Precisione di macchina. Errore di roundoff. Propagazione degli errori nelle operazioni aritmetiche: somma algebrica e cancellazione numerica, prodotto e divisione.

Contenuti svolti nella settimana 02-06/10/2017 (6 ore di lezione + 3 ore di laboratorio)
Linguaggio C++. Struttura di un programma. Tipi di dato int, float, double. Uso di printf e scanf. Operatori aritmetici. Operatori relazionali. Alternative (if - else). Operatori logici AND, OR, NOT. Esempi ed esercizi. Operatori di streamig in C++. Le funzioni matematiche. Cenni sull'uso di Linux e Emacs. Foglio di esercizi n.1.

Contenuti svolti nella settimana 09-13/10/2017 (6 ore di lezione)
Discussione sugli esercizi del Foglio n.1. Divisione tra interi e conversione forzata (cast). Operatore logico XOR. Ciclo for. Esempi: algoritmi per provocare integer overflow, per il calcolo della media aritmetica e della media geometrica di dati, per il calcolo del fattoriale e del coefficiente binomiale. Ciclo while. Esempi: algoritmi per provocare integer overflow e per stimare la precisione di macchina. Ciclo do-while. Esempi: immissione dati con reimmissione. Tipo di dato char. Alternative (switch).

Contenuti svolti nella settimana 16-20/10/2017 (6 ore di lezione + 2 ore di laboratorio)
Algoritmo di Euclide per M.C.D e m.c.m.. Stabilità di un algoritmo. Risoluzione di una equazione di secondo grado e calcolo di pi greco con algoritmi stabili. Costo computazionale di un algoritmo: potenza di un numero reale e valutazione di un polinomio. Algoritmo di Horner. Foglio di esercizi n.2.

Contenuti svolti nella settimana 23-27/10/2017 (4 ore di lezione + 4 ore di laboratorio)
Discussione sugli esercizi del Foglio n.2. Gli array ad una e due dimensioni. Immissione delle componenti di un array. Implementazione dell'algoritmo di Horner in C++. Foglio di esercizi n.3. Algoritmo di conversione di un numero dalla base 10 alla base 2 e dalla base 2 alla base 10. Potenza naturale di un numero reale sfruttando la rappresentazione in base 2 dell'esponente. Crivello di Eratostene (I parte).

Contenuti svolti nella settimana 30/10-03/11/2017 (4 ore di lezione + 3 ore di laboratorio)
Crivello di Eratostene (II parte). Algoritmo di Erone. Algoritmo per il calcolo del numero di Nepero. Funzioni. Passaggio di parametri per valore e per indirizzo. Passaggio di parametri di tipo array. Foglio di esercizi n.4.

Contenuti svolti nella settimana 06-10/11/2017 (4 ore di lezione + 4 ore di laboratorio)
Ordinamento di un vettore con l'algoritmo della selezione (selection sort). Discussione sugli esercizi del Foglio n. 4. Calcolo della mediana delle componenti di un vettore. Calcolo della minima componente di un vettore e del relativo indice. Algoritmi per il calcolo del prodotto scalare tra vettori, del prodotto tra matrice e vettore, e del prodotto tra matrici. Costo computazionale e implementazione in C++. Soluzione di sistemi lineari. Algoritmi per la soluzione di sistemi triangolari: sostituzioni in avanti e all'indietro. Costo computazionale. Foglio di esercizi n.5.

Contenuti svolti nella settimana 13-17/11/2017 (2 ore di lezione + 4 ore di laboratorio + PRIMA PROVA IN ITINERE)
Esercizi di ripasso. Foglio di esercizi n.6.

Contenuti svolti nella settimana 20-24/11/2017 (4 ore di lezione + 3 ore di laboratorio)
Implementazione in C++ del metodo delle sostituzioni in avanti per la soluzione di un sistema triangolare inferiore. Metodi diretti per la soluzione di sistemi lineari. Il metodo di eliminazione di Gauss. Complessità computazionale. Stabilità dell’algoritmo e riordinamento pivotale. Calcolo del determinante di una matrice. Implementazione in C++ dell'algoritmo di Gauss con riordinamento pivotale. Foglio di esercizi n.7.

Contenuti svolti nella settimana 27/11-01/12/2017 (4 ore di lezione + 4 ore di laboratorio)
Metodi iterativi per la soluzione di sistemi lineari. Il metodo di Jacobi. Analisi della convergenza del metodo di Jacobi. Un criterio di arresto a posteriori. Un criterio di arresto a priori. Confronto tra il costo del metodo di Jacobi e il costo del metodo di eliminazione di Gauss in termini di operazioni aritmetiche. Implementazione in C++ dell'algoritmo di Jacobi con criterio di arresto a priori o a posteriori. Foglio di esercizi n.8.

Contenuti svolti nella settimana 04/12-08/12/2017 (4 ore di lezione + 2 ore di laboratorio)
Soluzione numerica di equazioni non lineari. Localizzazione e separazione delle radici di una equazione. Il metodo di bisezione. Il criterio di arresto a priori. Iterazioni di punto fisso. Teorema di convergenza locale. Teorema di convergenza globale. Criteri di arresto a priori e a posteriori. Foglio di esercizi n.9.

Contenuti svolti nella settimana 11-15/12/2017 (4 ore di lezione + 4 ore di laboratorio)
Il metodo di Newton. Interpretazione grafica. Convergenza superlineare e convergenza quadratica. Approssimazione iniziale del metodo di Newton. Estremo di Fourier. Teoremi di convergenza monotona. Modifiche al metodo di Newton. Il metodo delle secanti. Esempi e esercizi. Presentazione di GNUPLOT. Discussione sugli esercizi del Foglio n.10. Approssimazione di funzioni mediante polinomi. L'errore nell'approssimazione tramite la formula di Taylor. Esempi: cos(x) e exp(x).

Contenuti svolti nella settimana 18-22/12/2017 (4 ore di lezione + 2 ore di laboratorio)
Interpolazione. Esistenza e unicità del polinomio interpolatore. Errore nell'interpolazione. Come usare l'espressione dell'errore nell'interpolazione. Foglio di esercizi n.10. Leggi di scelta dei nodi. Nodi di Chebyshev. Come rappresentare il polinomio interpolatore. Il polinomio interpolatore di Lagrange. Esempi e esercizi. Discussione sugli esercizi del Foglio n.11.

Contenuti svolti nella settimana 08-12/01/2018 (4 ore di lezione + 4 ore di laboratorio)
Formule di quadratura. Formule di quadratura interpolatorie. Formule di Newton-Cotes di tipo chiuso e di tipo aperto. Formula del trapezio. Formula della parabola o di Simpson. Formula del rettangolo. Grado di precisione delle formule di Newton-Cotes. Formule di quadratura composite. Formule di Newton-Cotes composite. Errore nelle formule di Newton-Cotes composite. Formula dei trapezi. Formula delle parabole o di Cavalieri-Simpson. Formula dei rettangoli. Foglio di esercizi n.11.

Contenuti svolti nella settimana 15-19/01/2018 (2 ore di lezione + SECONDA PROVA IN ITINERE)
Esercizi di ricapitolazione.

Orario di ricevimento: Giovedì 14:00-16:00. Studio n. 15. Appuntamenti in altro orario possono essere concordati per posta elettronica.

Testo consigliato:
- Le note che saranno messe in rete;
- A. Quarteroni, R. Sacco, F. Saleri, P. Gervasio, “Matematica numerica”, Springer, 2014 (o l’edizione del 2008 - dei primi tre autori). In alternativa può essere usato - se già posseduto - A. Quarteroni, “Elementi di Calcolo Numerico”, Progetto Leonardo, 1998 oppure J.F. Epperson, “Introduzione all'analisi numerica”, McGraw-Hill, 2003;
- Luis J. Aguilar, “Fondamenti di programmazione in C++”, McGraw-Hill, 2008 (o testo equivalente).

Dispense:

Modalità di erogazione: convenzionale

Esercitazioni:

Metodo di valutazione: Ai fini del superamento dell`esame si dovrà superare:
- 2 prove in itinere o una prova scritta finale
- un colloquio orale.

Risultati delle prove d'esame:

Avvisi:

  • Precisazioni sulla struttura del corso
  • Mercoledì 25 ottobre nel Laboratorio 1 (in Dipartimento) gli studenti registrati al corso le cui prime due lettere del cognome vanno da MA a PU sono nel primo turno (11:00-12:00); gli altri nel secondo turno (12:00-13:00).
  • Giovedì 16/11/2017 durante il solito orario del corso in Aula II si svolgerà la prima prova in itinere.
  • Venerdì 27 ottobre gli studenti registrati al corso possono partecipare alla sessione con il tutor nel Laboratorio 1 (in Dipartimento) in orario 11:00-14:00 (senza divisione in turni).
  • Venerdì 3 novembre gli studenti registrati al corso possono partecipare alle esercitazioni in Aula 16 dei Laboratori interfacoltà di Via Tiburtina 205 in orario 11:00-14:00 (senza divisione in turni).
  • Mercoledì 8 novembre nel Laboratorio 1 (in Dipartimento) gli studenti registrati al corso le cui prime due lettere del cognome vanno da RA a ZI sono nel primo turno (11:00-12:00); gli altri nel secondo turno (12:00-13:00).
  • Venerdì 10 novembre gli studenti registrati al corso possono partecipare alla sessione con il tutor nel Laboratorio 1 (in Dipartimento) in orario 11:00-14:00 (senza divisione in turni).
  • Mercoledì 15 novembre nel Laboratorio 1 (in Dipartimento) gli studenti registrati al corso le cui prime due lettere del cognome vanno da MA a PU sono nel primo turno (11:00-12:00); gli altri nel secondo turno (12:00-13:00).
  • Venerdì 17 novembre gli studenti registrati al corso possono partecipare alla sessione con il tutor in Aula 16 dei Laboratori interfacoltà di Via Tiburtina 205 in orario 11:00-14:00 (senza divisione in turni).
  • Mercoledì 22 novembre nel Laboratorio 1 (in Dipartimento) gli studenti registrati al corso le cui prime due lettere del cognome vanno da RA a ZI sono nel primo turno (11:00-12:00); gli altri nel secondo turno (12:00-13:00).
  • Venerdì 24 novembre gli studenti registrati al corso possono partecipare alla sessione con il tutor in Laboratorio 1 (in Dipartimento) in orario 11:00-13:00 (senza divisione in turni). Prestare attenzione al cambiamento di orario.
  • A partire da mercoledì 29 novembre nel Laboratorio 1 (in Dipartimento) gli studenti registrati al corso possono partecipare alle esercitazioni senza divisione in turni.
  • Venerdì 1 dicembre gli studenti registrati al corso possono partecipare alla sessione con il tutor in Aula 16 dei Laboratori interfacoltà di Via Tiburtina 205 in orario 11:00-13:00 (senza divisione in turni). Prestare attenzione al cambiamento di orario.
  • Venerdì 15 dicembre gli studenti registrati al corso possono partecipare alla sessione con il tutor in Laboratorio 1 (in Dipartimento) in orario 11:00-13:00 (senza divisione in turni).
  • Venerdì 12 gennaio gli studenti registrati al corso possono partecipare alla sessione con il tutor in Aula 16 dei Laboratori interfacoltà di Via Tiburtina 205 in orario 11:00-13:00.
  • Giovedì 18/01/2018 dalle ore 10:00 in Aula II si svolgerà la seconda prova in itinere.
  • Mercoledì 31/01/2018 dalle ore 10:00 in Aula II si svolgerà lo scritto del primo appello.
  • Gli studenti iscritti al secondo appello che sono esonerati dalla prova scritta, o che hanno superato la prova scritta nel primo appello, se sono interessati a sostenere la prova orale il 16/02 sono invitati a farne richiesta al più presto per posta elettronica.
  • Lunedì 19/02/2018 dalle ore 10:00 in Aula IV (al secondo piano del Dipartimento) si svolgerà lo scritto del secondo appello. Gli studenti esonerati iscrittisi all'appello, se sono interessati a sostenere anche la prova scritta, sono pregati di comunicarmelo al più presto per posta elettronica.
  • Lunedì 02/07/2018 dalle ore 10:00 in Aula I si svolgerà lo scritto del terzo appello. Gli studenti esonerati iscrittisi all'appello, se sono interessati a sostenere anche la prova scritta, sono pregati di comunicarmelo al più presto per posta elettronica.
  • Lunedì 23/07/2018 dalle ore 10:00 in Aula IV si svolgerà lo scritto del quarto appello. Gli studenti esonerati iscrittisi all'appello, se sono interessati a sostenere anche la prova scritta, sono pregati di comunicarmelo al più presto per posta elettronica. Gli orali si terranno il 24/07 e il 25/07 secondo un calendario che sarà pubblicato il 23/07 nel pomeriggio.
  • Martedì 18/09/2018 dalle ore 10:00 in Aula G si svolgerà lo scritto del quinto appello.

Risultati di apprendimento - Conoscenze acquisite: Gli studenti che abbiano superato l'esame avranno una conoscenza di base della programmazione e delle proprietà matematiche di semplici algoritmi. Gli studenti avranno anche acquisito le nozioni fondamentali su convergenza, ordine di convergenza, errore e complessità di algoritmi elementari.

Risultati di apprendimento - Competenze acquisite: Gli studenti che abbiano superato l'esame saranno in grado di scrivere un semplice codice C++ per scopi scientifici e di utilizzare alcuni algoritmi numerici di base per la soluzione di problemi. Saranno anche in grado di scegliere l`algoritmo più appropriato per la soluzione di semplici problemi quali la ricerca degli zeri, il calcolo di un integrale e la soluzione di un sistema lineare. Durante le esercitazioni in laboratorio impareranno ad usare un PC, gli strumenti grafici e una rete LAN.

Studio personale: la percentuale prevista di studio personale sul totale dell'impegno richiesto è del 65%

Calendario appelli d'esame su Infostud

Dati statistici relativi ai risultati degli esami

© Università degli Studi di Roma "La Sapienza" - Piazzale Aldo Moro 5, 00185 Roma