Scheda insegnamento

Laboratorio di Programmazione e Calcolo                  

anno accademico:   2016/2017
docente:  Biancamaria Della Vecchia
corso di laurea:  Matematica - DM 270/04 (triennale), I anno
tipo di attività formativa:  di base
crediti formativi:  9 (84 ore di lezione)
lingua di insegnamento:  italiano
canale:   A-L
periodo:  I sem (03/10/2016 - 13/01/2017)

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 personal computers. 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. Cenni all'uso dei puntatori. 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 I settimana: Introduzione al corso. Rappresentazione dei numeri al calcolatore. Rappresentazione in virgola mobile. Approssimazione di un numero reale, precisione macchina, overflow, underflow. Singola e doppia precisione. Introduzione alla programmazione. Introduzione al linguaggio C. Primi esercizi su operatori logici. Foglio di esercizi N. 1

Contenuti svolti nella II settimana: Primi esercizi in C++; uso di printf, scanf; scambio tra due variabili; istruzioni condizionali; esercizi sul massimo tra più numeri, sui numeri pari, sulle classi resto, sulle equazioni di secondo grado. Istruzioni condizionali e cicli (for, while, do while). Algoritmi per il calcolo del fattoriale, per il calcolo della somma di n numeri. Foglio di esercizi N. 2

Contenuti svolti nella III settimana: Discussione sugli esercizi del foglio N. 2. Programma per il calcolo della somma dei reciproci dei primi n numeri interi, della somma dei quadrati dei primi n numeri interi, dei cubi dei primi n numeri interi, dei primi n numeri interi elevati alla potenza k. Istruzione switch. Algoritmo euclideo per il calcolo del m.c.m. di 2 numeri interi. Algoritmo euclideo per il calcolo del M.C.D. tra due numeri interi. Algoritmo per il calcolo del coefficiente binomiale. Foglio di esercizi N. 3

Contenuti svolti nella IV settimana: Discussione sugli esercizi del foglio N. 3. Algoritmo per il calcolo dei primi n numeri primi. Analisi dell'errore propagato. Algoritmo stabile per il calcolo delle soluzioni di un'equazione di secondo grado. Gli array. Algoritmo per il calcolo della media di n numeri assegnati come componenti di un vettore. Algoritmo per il calcolo della massima componente di un vettore. Algoritmo per il calcolo della massima componente di un vettore e corrispondente indice. Criteri di divisibilità per un intero. Scomposizione in fattori primi. Algoritmo per la trasformazione di un numero dalla base b alla base 10. Algoritmo per la trasformazione di un numero dalla base 10 alla base b. Algoritmo del selection sort. Foglio di esercizi N. 4

Contenuti svolti nella V settimana: Algoritmo per la stampa di n dati su c colonne. Array in due dimensioni. Algoritmo per il calcolo della somma degli elementi delle righe di una matrice. Richiami sulle matrici. Risoluzione di un sistema di equazioni lineari in forma triangolare. Foglio di esercizi N. 5

Contenuti svolti nella VI settimana: Le istruzioni define e const. Successioni definite per ricorrenza. L'algoritmo di Erone. Norma di vettore e di matrice. Sistemi malcondizionati. Indice di malcondizionamento. Metodi diretti e iterativi per la risoluzione dei sistemi di equazioni,lineari. Il metodo di Gauss. La tecnica del pivot parziale e totale. Applicazione al calcolo del determinante di una matrice e del rango di una matrice. Esempi. La fattorizzazione LU. Applicazioni. Calcolo dell’inversa di una matrice triangolare. Foglio di esercizi N. 6.

Contenuti svolti nella VII settimana: Crivello di Eratostene. Calcolo approssimato del numero pi greco. L'algoritmo di Horner. Le function. Algoritmo per il calcolo mediante function del valore assoluto di un numero e della distanza eucliedea tra 2 numeri. Le istruzioni cin, cout e void. Scambio delle variabili per indirizzo. Algoritmo per il calcolo della distanza euclidea tra due numeri mediante function. L'istruzione typedef. Algoritmo per la lettura e la stampa di un vettore. Algoritmo per il calcolo del prodotto scalare tra due vettori. Foglio di esercizi N. 7 e discussione.

Contenuti svolti nell'VIII settimana: Discussione sugli esercizi del Foglio N. 8. Algoritmo per il calcolo della norma euclidea e del massimo di un vettore mediante function. Algoritmo per il calcolo del prodotto matrice vettore mediante function. Algoritmo di selection sort mediante function. La tecnica del pivot parziale per l'algoritmo di Gauss. Osservazioni sulla fattorizzazione LU. L'algoritmo di Thomas. Il metodo iterativo di Jacobi. Foglio di esercizi N. 9 e discussione.

Contenuti svolti nella IX settimana: Formulazione matriciale del metodo di Jacobi. Confronto tra il metodo di Jacobi ed il metodo di Gauss. Il metodo di Gauss-Seidel. Esempi. Discussione sull'algoritmo di Gauss.

Contenuti svolti nella X settimana: Discussione sugli esercizi dell esonero. Criteri di stop a priori e a posteriori per il metodo di Jacobi. Risoluzione numerica di equazioni non lineari. Il metodo di bisezione. Teorema di convergenza e stima dell errore. Il metodo di Newton-Raphson. Interpretazione geometrica. Applicazione al calcolo del reciproco di un numero e della radice di 2. Ordine di convergenza di un metodo. Il metodo delle secanti. Il metodo delle corde. Iterazioni di punto fisso. Teoremi di convergenza globali e locali. Introduzione all'interpolazione. L'approssimazione. L'approssimazione polinomiale. Il polinomio di Taylor. Il polinomio interpolante di Lagrange. Il metodo dei coefficienti indeterminati. Rappresentazione mediante i polinomi fondamentali di Lagrange. Il problema della convergenza dell'interpolazione lagrangiana. Esempi. Discussione sugli esercizi di preparazione all'esonero.

Contenuti svolti nella XI settimana: Lettura e scrittura su file. La libreria gnuplot. Espressione esplicita del resto dell'interpolazione lagrangiana. Stime del resto dell'interpolazione lagrangiana di grado 1 e 2. Interpolazione a tratti. La quadratura numerica. Generalità. La formula dei trapezi. Stima dell'errore della formula dei trapezi.

Contenuti svolti nella XII settimana: Formula di quadratura di Cavalieri-Simpson con stima dell'errore. Formule di quadratura composite dei trapezi e di Cavalieri-Simpson con stime dell'errore. Cenni sulle formule di quadratura interpolatorie e relativo comportamento asintotico. Cenni sulle formule di quadratura gaussiane. La derivazione numerica. Generalità. Formule di derivazione numerica e stime dell'errore. Discussione sugli argomenti per il secondo esonero. Discussione sugli argomenti per la prova orale.

Testo consigliato: Dispense in rete fornite dai docenti

Luis J. Aguilar, "Fondamenti di programmazione in C++", McGraw-Hill, 2008 o testo equivalente.

A. Quarteroni, R. Sacco, F. Saleri, "Matematica numerica", Springer, 2008
In alternativa al precedente puo' essere usato (se gia' posseduto) uno dei testi seguenti:

A.Quarteroni , "Elementi di Calcolo Numerico", Progetto Leonardo ,1998
J.F. Epperson, "Introduzione all'analisi numerica", McGraw-Hill, 2003

Dispense:

Modalità di erogazione: convenzionale

Esercitazioni:

Testi di passate prove d'esame:

Risultati di apprendimento - Conoscenze acquisite: Gli studenti che abbiano superato l'esame saranno in grado di avere una conoscenza di base della programmazione e delle proprietà matematiche di semplici algoritmi. Gli studenti avranno anche acquisito le nozioni fondamentali sulla convergenza, l’ordine di convergenza, l’errore e la 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