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 dellinversa 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:
- Breve corso di C/C++ (a cura del Prof. M. Falcone)
- Problemi, algoritmi e programmi di matematica elementare (a cura del Prof. S. Finzi Vita)
- Lezione introduttiva al corso (a cura del Prof. S. Finzi Vita)
- I numeri macchina (a cura della Prof. E. Carlini)
- Analisi dell'errore propagato (a cura del Prof. M.Marfurt)
- Note per l'utilizzo del compilatore C/C++ con Linux (a cura della Prof.ssa A. Seghini)
- Programma in C con esempi di conversione di tipo
- Introduzione al C++ (a cura del Prof. M. Marfurt)
- Sistemi di equazioni lineari (a cura del Prof. Marfurt)
- Risoluzione numerica di equazioni non lineari, a cura del Prof. Falcone
- Dispense sull'approssimazione di funzioni. Acura del Prof. M. Falcone
Modalità di erogazione: convenzionale
Esercitazioni:
- Foglio di esercizi n. 1
- Foglio di esercizi N. 2
- Foglio di esercizi N. 3
- Foglio di esercizi N. 4
- Foglio di esercizi N. 5
- Foglio di esercizi N. 6
- Foglio di esercizi N. 7
- Foglio di esercizi N. 8
- Foglio di esercizi N. 9
- Foglio di esercizi N. 10
- Foglio di esercizi N. 11
Testi di passate prove d'esame:
- Testo degli esercizi di esonero negli anni precedenti
- Testo degli esercizi di esonero negli anni precedenti
- Prova di esonero del 14 novembre 2016
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, lordine di convergenza, lerrore 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 lalgoritmo 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%