Calcolo Numerico

217
Annamaria Mazzia Appunti di Calcolo Numerico Dipartimento di Ingegneria Civile Edile e Ambientale Università degli Studi di Padova Creative Commons Attribuzione- Non commerciale -Non opere derivate 3.0 Italia License a.a. 2011/2012

Transcript of Calcolo Numerico

Page 1: Calcolo Numerico

Annamaria Mazzia

Appunti di Calcolo Numerico

Dipartimento di Ingegneria Civile Edile e Ambientale

Università degli Studi di Padova

Creative Commons Attribuzione- Non commerciale -Non opere derivate 3.0 Italia License

a.a. 2011/2012

Page 2: Calcolo Numerico

Annamaria Mazzia: Appunti di Calcolo Numerico,

Dipartimento di Ingegneria Civile Edile e AmbientaleUniversità degli Studi di PadovaVERSIONE A.A. 2011/2012 .

SITO DELLE DISPENSE:http://dispense.dmsa.unipd.it/

E-MAIL:[email protected]

Questo lavoro è stato rilasciato sotto la licenza CREATIVE COMMONS ATTRIBUZIONE- NON COMMERCIALE -NON OPERE DERIVATE 3.0 ITALIA LICENSE,Per leggere una copia della licenza visita il sito web (http://creativecommons.org/licenses/

by-nc-nd/3.0/it/)

Foto di copertina: Pietre...Per ricordare l’etimologia della parola CALCOLO: dal latino Calculus – pietruzza, lapillo – a sua volta dimi-nuitivo di Calx, nel senso originario di ghiaia, sasso, perchè gli antichi, per fare i loro conti, utilizzavanopietruzze al posto di cifre aritmetiche. (definizione tratta dal Vocabolario Etimologico della Lingua Italiana diO. Pianigiani http://www.etimo.it)

Page 3: Calcolo Numerico

INDICE

Indice iii

1 Struttura dell’elaboratore 11.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 La preistoria del computer: Babbage e Lovelace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Gli albori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Architettura del Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 Software e Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.5.1 Per capire meglio il sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.6 Il file system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.7 Un po’ di storia sui sistemi operativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.8 Lavorare in ambiente Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.9 Editor di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2 Richiami di analisi 132.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2 Identità trigonometriche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Regole su funzione esponenziale e logaritmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4 Derivate e integrali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5 Teoremi utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 Rappresentazione dei numeri nel calcolatore 193.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2 Aritmetica di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.3 Conversione di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.4 Rappresentazione IEEE dei numeri di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.5 Precisione numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.6 Propagazione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.7 Instabilità e malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.7.1 Instabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.7.2 Malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4 Zeri di funzione 374.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.2 Metodo delle Bisezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.3 Metodo del Punto Fisso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.4 Il Metodo di Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.5 Convergenza di un metodo iterativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.6 Complessità computazionale di uno schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.7 Il metodo delle secanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.8 Confronto tra i metodi di Newton-Raphson e la Regula Falsi . . . . . . . . . . . . . . . . . . . . . 504.9 Metodo di Newton-Raphson per radici multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

iii

Page 4: Calcolo Numerico

INDICE

4.10 Controllo sugli scarti e grafici di convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.11 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

5 Interpolazione 615.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.2 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625.3 Interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.3.1 Funzioni base monomiali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.3.2 Polinomi di Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.3.3 Formula dell’errore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665.3.4 Differenze divise e formula di Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.4 Considerazioni sull’interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715.4.1 Fenomeno di Runge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715.4.2 Malcondizionamento nell’interpolazione con funzioni base monomiali . . . . . . . . . 72

5.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6 Approssimazione 776.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776.2 Retta di regressione lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.3 Approssimazione polinomiale ai minimi quadrati . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.4 Approssimazioni di tipo esponenziale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

7 Metodi diretti per la soluzione di sistemi lineari 857.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857.2 Elementi di Algebra Lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867.3 Metodo di eliminazione di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

7.3.1 Sostituzione all’indietro e in avanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907.3.2 Eliminazione di Gauss: esempio particolare . . . . . . . . . . . . . . . . . . . . . . . . . . 917.3.3 Eliminazione di Gauss: caso generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

7.4 Strategie di pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947.5 Fattorizzazione triangolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

7.5.1 Fattorizzazione LDU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967.5.2 Fattorizzazione di Gauss senza pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987.5.3 Fattorizzazione di Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

7.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

8 Metodi Iterativi per la soluzione di sistemi lineari 1058.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058.2 Metodi iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068.3 Norme di vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068.4 Norme di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078.5 Autovalori e autovettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088.6 Metodi classici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

8.6.1 Convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108.6.2 Controllo della convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118.6.3 I metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138.6.4 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassamento . . . . . . . . . . . . . . . 117

8.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

9 Integrazione numerica 1239.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239.2 Formula dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

iv

Page 5: Calcolo Numerico

Indice

9.3 Formule di Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259.3.1 Formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279.3.2 Sull’errore della formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . 129

9.4 Formule composte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.4.1 Formula composta dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson . . . . . . . . . . . . . . . . . 134

9.5 Estrapolazione di Richardson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369.6 Approssimazione di Romberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379.7 Introduzione alle formule di quadratura di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

9.7.1 Proprietà delle formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409.7.2 Formule di Gauss-Legendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419.7.3 Altre formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419.7.4 Applicazione delle formule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429.7.5 Sulla funzione peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

9.8 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

10 Equazioni alle derivate ordinarie 14710.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14710.2 Sulle equazioni differenziali ordinarie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14810.3 Metodo di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14910.4 Metodo di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15110.5 Metodo di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15410.6 Studio dell’errore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15510.7 Errori di troncamento locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15510.8 Convergenza e stabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

10.8.1 Convergenza di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15610.8.2 Stabilità di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15710.8.3 Convergenza di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15710.8.4 Stabilità di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15810.8.5 Convergenza di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15810.8.6 Stabilità di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15910.8.7 Sulla stabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

10.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

11 Introduzione al FORTRAN 77 16111.1 Introduzione alla programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16211.2 FORTRAN: FORmula TRANslator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16211.3 Problemi e Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16311.4 Elementi di un linguaggio di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16411.5 Prime regole sul FORTRAN77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16411.6 Le variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16511.7 I tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16611.8 Espressioni aritmetiche e funzioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16611.9 I predicati elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16711.10 Struttura alternativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17011.11 Programma sul metodo di punto fisso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17211.12 I sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

11.12.1 Le functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17411.12.2 Le subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

11.13 Il formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18011.14 Files di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18211.15 Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18211.16 Ciclo do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

v

Page 6: Calcolo Numerico

INDICE

11.16.1 I vettori nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18411.16.2 Leggere i dati di input da file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

11.17 Matrici in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18711.17.1 Le matrici nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18811.17.2 Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18911.17.3 Memorizzazione delle matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19011.17.4 Un programma di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

11.18 La formula dei trapezi in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19311.19 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

A Cenni su Gnuplot 201A.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201A.2 Grafici di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201A.3 Salvare i grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205A.4 Grafici da files di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206A.5 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208A.6 Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Bibliografia 211

vi

Page 7: Calcolo Numerico

CA

PI

TO

LO 1

STRUTTURA DELL’ELABORATORE

I computer sono incredibilmenteveloci, accurati e stupidi. Gli uominisono incredibilmente lenti,inaccurati e intelligenti. L’insiemedei due costituisce una forzaincalcolabile.

Albert Einstein

1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 La preistoria del computer: Babbage e Lovelace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Gli albori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Architettura del Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5 Software e Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.5.1 Per capire meglio il sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.6 Il file system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.7 Un po’ di storia sui sistemi operativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.8 Lavorare in ambiente Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.9 Editor di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.1 Introduzione

Se dobbiamo comprare un computer, abbiamo solo l’imbarazzo della scelta tra i tanti disponibili sulmercato. Ma in base a quali criteri scegliamo un computer?

Le caratteristiche fondamentali di un computer si possono riassumere in poche parole-chiave: pro-cessore, sistema operativo, memoria. Cosa significano esattamente? E, prima ancora, cosa significaComputer?

1

Page 8: Calcolo Numerico

1. STRUTTURA DELL’ELABORATORE

Figura 1.1: Stralci di volantini pubblicitari per l’acquisto di un computer.

Definizione 1.1.1 Computer = elaboratore elettronico digitale

Dispositivo elettronico che elabora le informazioni, immesse sotto forma di dati

numerici, secondo una sequenza di istruzioni preordinate (programma).Elaboratore: macchina capace di immagazzinare ed elaborare dati in base

ad una serie di istruzioni (programmi) memorizzate sul computerelettronico: utilizza componenti elettroniche per elaborare le informazionidigitale: elabora e memorizza segnali digitali basati su cifre binarie: 0 e 1

In generale, un computer esegue operazioni logiche e aritmetiche e ha una memoria per conservare i dati.Un programma contiene le informazioni relative alle operazioni da eseguire.

Si definisce hardware la struttura fisica del computer cioè i i suoi componenti elettronici e i dispositiviHardware

fisici che lo compongono.Si chiama, invece, software l’insieme delle istruzioni (i programmi) che consentono all’hardware diSoftware

svolgere i propri compiti (per esempio, il sistema operativo – Windows, Linux, etc – è un tipo di software;programmi applicativi come Word, Excel, LaTex sono dei software).

Attraverso un computer, elaboriamo dati (numeri, suoni, video, fotografie) in modo da ottenere in-formazioni (lettere, tabelle, risultati di procedimenti numerici. . . ). Alcune di queste informazioni possonodiventare dati da elaborare di nuovo al computer.

1.2 La preistoria del computer: Babbage e Lovelace

La seconda metà del diciannovesimo secolo fu un tempo di grande fermento in numerosi campi, dall’in-gegneria ai trasporti, dalla comunicazione all’architettura... Furono scoperti nuovi materiali, la forza animalefu sostituita dalla forza motrice, le navi a vapore iniziarono a competere con quelle a vela, la rete ferroviariasi espanse sempre più, il telegrafo elettrico rivoluzionò le comunicazioni... In questo contesto, ingegneri, ar-chitetti, matematici, astronomi, marinai, banchieri, agenti assicurativi... – chiunque avesse a che fare con ilcalcolo – si basava su tavole di calcolo per eseguire i calcoli meno banali. Tuttavia, si sa, gli uomini possonosbagliare e il timore che su quelle tavole ci fossero degli errori era giustificato: un errore non trovato potevadiventare un disastro nelle numerose applicazioni in cui le tavole di calcolo venivano usate!

Già nel 1812 Charles Babbage1 era consapevole dell’inaccuratezza dei calcoli fatti dall’uomo. Nel suoCharlesBabbage lavoro, Babbage doveva verificare l’esattezza di tavole di calcolo che sarebbero state usate da banchieri come

da marinai. Le navi avrebbero identificato la loro posizione in mare mediante quelle tavole! Eliminare ilrischio dell’errore umano divenne per lui un desiderio sempre più grande. Egli stesso scrisse che, mentre

1Charles Babbage (1791-1871), inventore e matematico inglese, è senza dubbio il primo ad avere avuto il concetto del modernocalcolatore.

2

Page 9: Calcolo Numerico

1.3. Gli albori

era seduto nella stanza della Società Analitica, a Cambridge, lavorando, mezzo addormentato, su una tavoladei logaritmi, arrivò un altro membro della società che gli chiese cosa stesse sognando. E lui rispose : – Stopensando che tutte queste tavole – riferendosi alle tavole dei logaritmi – potrebbero essere calcolate da unamacchina!

Nel 1821, Babbage e il suo amico e astronomo John Herschel stanno controllando delle tabelle calcolatea mano. Errore dopo errore, Babbage esclama : – Volesse Dio che questi calcoli venissero eseguiti da unamacchina a vapore!

Il suo desiderio di creare una macchina per eseguire calcoli si concretizzò in due progetti, quello dellaMacchina alle Differenze e quello della Macchina Analitica2. La Macchina alle Differenze doveva calcolarein modo automatico funzioni polinomiali ma non venne mai completata per il suo costo eccessivamenteelevato. La Macchina Analitica, invece, doveva essere una macchina di calcolo programmabile, e si può con-siderare come la prima idea del moderno computer. Anche questo progetto, tuttavia, rimase incompiuto.Solo nel 2002 è stato possibile costruire una macchina che rispondesse al progetto di Babbage.

Nel 1833, Babbage incontrò Ada Lovelace3, figlia del famoso poeta Lord Byron. Lovelace, appena dicias- Ada Lovelace

settenne, aveva parecchie conoscenze matematiche, inusuali per l’epoca, e si entusiasmò talmente tanto peril progetto di Babbage, da intuire altre potenzialità della macchina stessa, come la capacità dei numeri dipoter rappresentare altre entità quali le lettere dell’alfabeto o le note musicali, e che dalla manipolazione deinumeri la macchina avrebbe esteso la propria potenza oltre il mondo della matematica. Sempre la Lovela-ce intuì che la soluzione dei problemi matematici si sarebbe effettuata attraverso delle procedure di calcolo(quelli che noi chiamiamo programmi).

Alla luce degli sviluppi che si sono avuti nel ventesimo secolo, la visione di Babbage e della Lovelaceappare profetica.

1.3 Gli albori

Il 1800 si chiude con una grande invenzione: nel 1896, Guglielmo Marconi inventa la radio. Il 1900 si aprecon altre importanti invenzioni: il triodo, il registratore magnetico, la televisione, fino ad arrivare intorno allametà del 1900 con il transistor (nel 1947) e il circuito integrato (nel 1958). La nuova tecnologia elettromeccani-ca ed elettronica si rivelò decisiva per lo sviluppo dei computer, grazie allo studio sistematico della teoria deicircuiti elettrici. Il più noto tra gli studiosi di questa teoria fu l’americano Claude Shannon4. Il suo contributofondamentale fu quello di elaborare un metodo sistematico per progettare reti logiche capaci di eseguire leoperazioni logico-aritmetiche desiderate: detto più semplicemente, egli mostrò come trasformare una asse-gnata operazione matematica in un circuito elettrico costruito con interruttori e relè di commutazione (quelliusati nelle telecomunicazioni). Nel 1948, il suo articolo A Mathematical Theory of Communication pubbli-cato sulla rivista The Bell System Technical Journal getta le basi teoriche dell’informatica. Per prima voltaviene usato il termine bit come abbreviazione di binary digit, termine suggeritogli dal chimico e statistico J.W. Tukey.

Il lavoro di Shannon diede l’avvio allo studio delle tecniche indispensabili per progettare in modosistematico tutti i circuiti logici di base necessari per realizzare i circuiti di calcolo dei futuri computer.

Da un punto di vista propriamente ”pratico“ invece, la nascita e lo sviluppo dei calcolatori elettroniciinizia nel 1938: il tedesco Konrad Zuse5 costruisce Z1, una macchina costruita e pensata in maniera com-pletamente meccanica, tutta da migliorare, ma che può essere considerata come il primo calcolatore. Zusepassa subito al progetto Z2, dove l’aritmetica meccanica è sostituita da relè elettromeccanici. L’inizio dellaseconda guerra mondiale interrompe bruscamente il lavoro di Zuse, che viene chiamato alle armi, ma riesce

2Osserviamo che l’invenzione del telaio meccanico a schede, in cui il tipo di tessuto veniva scelto (o programmato) in base a delleschede inserite nella macchina, è un precursore del progetto di Babbage.

3Augusta Ada Lovelace (1815-1852) fu la figlia del famoso poeta Lord Byron. I genitori si separono subito dopo la sua nascita ela bambina crebbe insieme alla madre (Lord Byron partì dall’Inghilterra senza farvi più ritorno e morì in Grecia quando Ada aveva ottoanni). Poichè la madre era appassionata di matematica e non voleva che la figlia seguisse la strada del padre, incoraggiò la figlia in questadirezione, impartendole un’istruzione legata alla matematica e alla musica. Nel 1835 sposò William King, di dieci anni più anziano. Nel1838 il marito ricevette il titolo nobiliare di Conte di Lovelace. Ebbero tre figli. La Lovelace morì di cancro a soli 37 anni.

4Claude Shannon (1916-2002) fu fisico e matematico del MIT.5Konrad Zuse, ingegnere civile (1910-1995).

3

Page 10: Calcolo Numerico

1. STRUTTURA DELL’ELABORATORE

a persuadere l’Istituto di Ricerca Aerodinamica del Terzo Reich a continuare i suoi studi. Completa quindi lacostruzione dello Z2 e inizia a lavorare sullo Z3, che è il primo computer che Zuse costruisce per essere usatoe non per verificare le proprie idee. Lo Z3 ha non solo l’unità aritmetica ma anche la memoria realizzata conrelè elettromeccanici, ben 2600. Z3 fu la prima macchina di calcolo programmabile e venne usata dall’in-dustria aerea per risolvere sistemi di equazioni e altri sistemi matematici ricavati da problemi di vibrazionedegli apparecchi aerei messi sotto stress.

Quando Zuse propose di passare all’uso di un computer basato su valvole elettroniche, la proposta furespinta perchè i tedeschi si consideravano così vicini alla vittoria della guerra che ulteriori sforzi nella ricercanon apparivano necessari.

Il lavoro di Zuse, comunque, andò avanti con la costruzione dello Z4, di S1 e S2. E, soprattutto, fucompletamente indipendente dai lavori di John Eckert e John Mauchly negli Stati Uniti e di A. Turing inInghilterra.

In Inghilterrra, Turing6 si occupò di problematiche riguardanti un macchina di calcolo digitale astratta,con una memoria senza limiti, mentre negli USA Eckert e Mauchly7 costruirono l’ENIAC (Electronic Inte-grator and Computer). L’ENIAC fu costruito, con progetto di Eckert, in piena seconda guerra mondiale, apartire dal 1943, presso il Ballistic Research Laboratory e fu completato nel febbraio del 1946. La macchinaera pensata per compiere operazioni di carattere generale, ma fu costruita con lo scopo preciso di compilaretabelle per le traiettorie di bombe. L’ENIAC conteneva circa 18.000 valvole termoioniche e misurava circa 2metri e mezzo di altezza per 24 metri di lunghezza! La macchina era più di mille volte veloce di tutti i prede-cessori elettromeccanici costruiti fino a quel momento e poteva eseguire 5000 addizioni al secondo. Le sueoperazioni erano controllate da un programma che veniva inserito dall’esterno mediante nastri perforati.

Intanto, nel 1944 aveva iniziato a collaborare nella costruzione dell’ENIAC, John von Neumann8. Egli sivonNeumann accorse che l’architettura della macchina andava rivista e che la programmazione del computer mediante un

numero enorme di cavi e interruttori rendeva lenta e poco flessibile la programmazione stessa. Sostenne,quindi, che il programma non dovesse essere rigidamente predisposto nell’hardware tramite interruttori ecavi e neanche letto mediante nastri perforati, ma risiedesse in una memoria su cui poter scrivere e accederevelocemente insieme ai dati da elaborare. Von Neumann per primo descrisse l’architettura dei calcolatori intermini logico-funzionale, secondo uno schema astratto non legato ai dispositivi fisici utilizzati per le varieoperazioni. E il suo schema, sostanzialmente invariato, è l’architettura adottata dai calcolatori dei nostrigiorni!

Prima di von Neumann, il calcolatore veniva controllato mediante programmi non modificabili, registratisu nastro perforato o cablati in una configurazione di cavetti e interruttori. Con von Neumann si presentaun’architettura di riferimento precisa.

Il primo calcolatore costruito seguendo l’architettura di von Neumann entrò in funzione nel 1948all’Università di Manchester e venne chiamato Manchester Mark I.

Inizia, in tal modo, una nuova fase per i calcolatori: i programmi che controllano le operazioni da svolgererisiedono nella memoria del calcolatore insieme ai dati e possono essere modificati dinamicamente nel corsodell’elaborazione.

Dal 1948 fino ai nostri giorni, lo sviluppo dei calcolatori elettronici ha avuto ritmi esponenziali: l’inven-zione del circuito integrato (chip) alla fine degli anni cinquanta permise non solo di ridurre via via lo spaziofisico occupato dai computer ma anche di ottenere computer sempre più potenti tanto che, in due suoi la-vori, del 1965 e del 1975, Gordon Moore9 stabilì che il numero dei transistor inseribili su un chip raddoppia

6Alan Turing (1912-1954), matematico inglese, si interessò di logica matematica e di teoria della probabilità. Introdusse il concettodi una macchina astratta, detta macchina di Turing e pose questioni riguardanti l’intelligenza artificiale

7John Presper Eckert (1919-1995) e John William Mauchly (1907-1980) lavorarono a quello che si può considerare il vero primocalcolatore elettronico.

8John von Neumann (1903-1957) ungherese, studiò prima a Berlino, poi a Zurigo e infine a Budapest, dove ricevette il dottorato inmatematica. Nel 1930 si trasferì alla Università di Princeton dove insegnò matematica. Il suo nome è legato a studi in diversi settori:teoria dei giochi, matematica applicata, logica... Occupa un ruolo fondamentale nello sviluppo dei calcolatori elettronici. Ricevettenumerosi premi e riconoscimenti in tutto il mondo.

9Gordon Moore è nato nel 1929 in California. Di lui basti ricordare che ha stabilito la legge di Moore, è co-fondatore della IntelCorporation e nel 2008 ha ricevuto la medaglia d’onore dell’IEEE per il suo pioneristico contributo nei processi dei circuiti integra-ti, e per la leadership nello sviluppo della memoria del MOS (semiconduttore metal-ossido), del microprocessore e dell’industria deisemiconduttori.

4

Page 11: Calcolo Numerico

1.4. Architettura del Computer

approssimativamente ogni 24 mesi (legge di Moore). Nel 1971 tre ingegneri della Intel tra cui l’italiano Fe-derico Faggin10 inventarono il microprocessore, vale a dire un’intera CPU in un singolo circuito integrato:su una piastrina di 4£ 3 millimetri riuscirono a inserire 2250 transistor, che formavano il cuore di un inte-ro computer: questo microprocessore fu chiamato Intel 4004 ed era capace di eseguire 60.000 operazioni alsecondo.

Se pensiamo che il processore Intel Pentium 4 introdotto nel 2000 ha 42.000.000 processori e l’Intel Ita-nium 2 (con 9MB di cache) introdotto nel 2004 ha 592.000.000 transistors, ci accorgiamo di come la legge diMoore, dal 1968 ad oggi, sia stata rispettata.

1.4 Architettura del Computer

L’architettura del Computer si può riassumere in tre unità:il processore, che fornisce la capacità di elaborazione delle informazioni;la memoria (centrale e di massa)i dispositivi di input/output, che comunicano attraverso un canale detto BUS, costituito da un insiemedi linee elettriche digitali.

Il processore è composto da blocchi con funzionalità diverse:CPU (Central Processing Unit), unità centrale di elaborazionecachevarie interfacce

Se il processore è integrato su un unico chip prende il nome di microprocessore. Sia la CPU sia gran partedei dispositivi che servono per l’attività della CPU sono realizzati con la tecnologia dei circuiti integrati, chepossono essere disposti in una singola scheda detta scheda madre. Questa scheda può essere dunque consi-derata la parte più importante del computer. La CPU esegue tutte le operazioni di elaborazione numerica edi controllo e rappresenta la parte centrale del computer.

A sua volta si suddivide inunità logico-aritmetica (ALU), che svolge tutti i calcoli logici ed aritmetici;unità floating-point (FPU) (Floating Point Unit), che consente di eseguire le operazioni su numeri reali;unità di controllo (CU), che sovrintende all’elaborazione dei dati e alle operazioni di input e output;registri, cioè memoria locale per memorizzare dati e lo stato di avanzamento delle istruzioni. Abbia-mo, ad esempio, il registro di Program Counter, di Program Status Word, il registro Istruzioni, IndirizziMemoria. . .

Ogni elaboratore contiene un circuito di temporizzazione (clock) che genera un riferimento temporalecomune per tutti gli elementi del sistema.

Un ciclo-macchina è il tempo richiesto per svolgere un’operazione elementare (ed è un multiplo del pe-riodo del clock). La velocità di elaborazione di un processore dipende dalla frequenza del clock. I processori

10 Federico Faggin è nato nel 1940 a Vicenza e si è laureato in fisica all’Università di Padova. Nel 1968 si è trasferito prima a Palo Altopresso la Fairchild Semiconductor e poi nel 1970 nella Intel. Oggi è presidente e CEO (Chief Executive Officer) della Foveon.

5

Page 12: Calcolo Numerico

1. STRUTTURA DELL’ELABORATORE

attuali hanno valori di frequenza del clock che variano tra gli 8 MHz e i 3500 MHz (1 MHz = 1 milione diistruzioni al secondo).

La memoria serve per conservare le istruzioni da eseguire e per scrivere/leggere i dati elaborati. Sisuddivide in memoria principale e memoria secondaria.

La memoria principale (o di lavoro) è la memoria in grado di conservare dinamicamente dati eprogrammi che il processore sta utilizzando. A sua volta la memoria principale può essere di due tipi:

memoria di sola lettura (read-only memory): ROM. Viene scritta una volta per tutte dal produttore delsistema e contiene programmi e informazioni specifiche per il sistema; è utilizzata per memorizzareparametri di configurazione del sistema, utili all’avvio del computer;memoria per scrittura-lettura (random access memory): RAM. Serve alla CPU per lavorare con i

programmi inseriti dall’utente.Poichè la RAM conserva i dati solo fino a quando il computer rimane acceso (infatti è detta memoria

di tipo volatile, perchè se ne perde il contenuto quando la macchina viene spenta), per conservare dati eprogrammi per tempi lunghi e a sistema spento, si utilizza la memoria di massa (o secondaria) – dischicome l’Hard Disk, CDROM, DVD, pendrive USB. . . .RAM

La RAM può essere pensata come una sequenza di celle (locazioni), ognuna identificata da un indirizzo ecapace di contenere informazioni binarie.

L’unità minima indirizzabile della memoria è detta parola (word) e può variare da macchina a macchina.In genere una parola vale un byte, cioè 8 bit.

Bit è l’unità elementare di informazione.Per esempio: 0/1, sì/no.1 byte = 8 bit1 Kilobyte (KB) = 210 byte = 1024 byte (circa 103)1 Megabyte (MB) = 220 byte (circa 106)1 Gigabyte (GB) º 109 byte (un miliardo di byte)1 Terabyte (TB) º 1012 byte (mille miliardi di byte)1 Petabyte (PB) º 1015 byte (un milione di miliardi di byte)

Il computer scambia informazioni con il “mondo esterno” per mezzo delle periferiche di input/output(monitor, mouse, stampante, web-cam,...).

Input è l’inserimento di dati nel computer per l’elaborazione. Output è il trasferimento di dati dalcomputer a dispositivi che permettono all’utente di vedere/ascoltare i risultati dell’elaborazione.

1.5 Software e Sistema Operativo

Un software è una sequenza di istruzioni per eseguire le varie elaborazioni sui dati. Ci sono diversecategorie di software: software per il sistema operativo, software di base, software di tipo applicativo.

Il sistema operativo è costituito dall’insieme dei programmi essenziali per far funzionare la macchina.Esso utilizza piccoli programmi già presenti nel calcolatore per accedere ai singoli dispositivi fisici. Questiprogrammi prendono il nome di Device Driver e sono memorizzati nel BIOS (Basic Input Output System).Il BIOS si trova nella ROM del Computer.

Il sistema operativo, da una parte, permette di rendere fruibile all’utente le molteplici risorse del compu-ter (gestione della memoria, della stampante, della tastiera,...); dall’altra rende il computer uno strumentoamichevole e utile per affrontare le molteplici attività che gli si richiedono.

I compiti affidati al sistema operativo sono molteplici:agire da intermediario tra l’utente e l’harware del computercontrollare e coordinare l’utilizzo dell’hardware tra i programmi applicativifornire gli strumenti per l’uso corretto delle risorse di tipo hardware e software del sistemanascondere i dettagli legati alla gestione delle risorse del sistema.

6

Page 13: Calcolo Numerico

1.5. Software e Sistema Operativo

I primi sistemi operativi iniziarono a vedersi intorno alla metà degli anni cinquanta quando si cominciòa individuare una serie di programmi standard di comune utilizzo indipendenti dall’applicazione specificarichiesta al computer. Cenni storici

L’evoluzione dei sistemi operativi ha influenzato anche lo sviluppo dell’hardware in quanto per suppor-tare certe funzioni del sistema operativo sono necessari meccanismi hardware ad hoc (basti pensare allagestione della memoria o delle interruzioni).

I primi computer come lo Z3 di Zuse o l’ENIAC non avevano sistema operativo. Per inserire un program-ma (scritto in linguaggio macchina) bisognava azionare un gruppo di interruttori o modificare collegamentitramite opportuni cavi e spinotti. Ci rendiamo conto, quindi, di quanto fosse difficile usare il computer perrisolvere problemi mediante l’esecuzione di un programma perchè oltre alla competenza specifica del pro-blema da risolvere, si richiedeva una grande conoscenza tecnica della macchina su cui si doveva lavorare. Ilprogramma doveva contenere non solo le istruzioni per la risoluzione del problema (per esempio un sistemadi equazioni) ma anche le istruzioni per gestire le unità di input e output e delle altre periferiche collegate alcomputer. Infine, poteva essere eseguito un solo programma alla volta.

Considerando gli elevatissimi costi per la realizzazione e la gestione dei primi computer, il calcolo auto-matico era una risorsa preziosa a disposizione di pochi utenti. Tutto ciò portò ad un ripensamento del modo

7

Page 14: Calcolo Numerico

1. STRUTTURA DELL’ELABORATORE

di utilizzare i computer e nacquero le prime idee di sistema operativo.Per prima cosa si pensò di creare delle librerie con le istruzioni necessarie per eseguire le operazio-

ni più comuni legate alla gestione delle periferiche del computer (ingresso e uscita dei dati, accesso allamemoria,...).

Ulteriori progressi si ebbero quando il sistema operativo iniziò a sfruttare anche il disco fisso ed ebbeinizio la cosiddetta multiprogrammazione, in base alla quale nella memoria centrale venivano tenuti attivicontemporaneamente alcuni processi e i loro dati pronti per essere eseguiti. Ad ogni momento, uno solo diquesti processi veniva eseguito, tuttavia, quando il processo in esecuzione richiedeva un’istruzione di ingres-so o di uscita, esso veniva sospeso attivando le unità periferiche necessarie per l’esecuzione dell’istruzionedata. Questa tecnica richiedeva una elevata capacità della memoria centrale e solo pochi sistemi potevanofunzionare in modo adeguato.

Uno dei primi sistemi che iniziò ad utilizzare la multiprogrammazione fu il sistema OS/360 realizzato peri computer IBM 360. Questo sistema operativo fu importante per due motivi:

si cercò di realizzare un sistema operativo uniforme e compatibile per macchine IBM molto diverse traloro per quando riguarda l’hardware sottostante: fino a quel momento ogni macchina aveva il propriosistema operativo, che cambiava da macchina a macchina!lo sviluppo di questo sistema operativo fu molto delicato e complesso e aprì lo studio delleproblematiche relative all’ingegneria del software.

Nonostante questi progressi, la multiprogrammazione non permetteva molta interattività tra utente ecomputer: di fatto l’utente consegnava i dati e il programma da eseguire (un pacco di schede perforate) all’o-peratore del computer e accedeva ai risultati dopo qualche ora se non addirittura dopo giorni e giorni, risul-tati che riceveva in forma cartacea ad esecuzione avvenuta (non c’era ancora il monitor per la visualizzazionesu video dei risultati).

Per risolvere questo tipo di problemi, l’uso delle schede fu sostituito da appositi terminali sempre collegatial computer e furono cambiate le modalità di gestione dell’unità centrale modificando i sistemi operativiesistenti. Si arrivò all’interazione con il computer non più mediante schede perforate bensì tramite tastiera-stampante o tramite tastiera-monitor.

Alla fine del 1950 si introdusse il concetto di time-sharing che permetteva l’esecuzione di più processiin modo da poter soddisfare le esigenze di più utenti contemporaneamente. Con il time-sharing si assegna,infatti, un piccolo intervallo di tempo a ciascun processo dando l’impressione che ciascun processo vadaavanti parallelamente agli altri.

Gli sviluppi del sistema operativo ottenuti da allora fino ad oggi si possono così riassumere: il sistemaoperativo fornisce funzioni di base per la gestione delle risorse, quali:

uso del processore (multitasking: l’uso della CPU è permesso ad un programma alla volta per breviintervalli di tempo, quindi l’utente può eseguire più programmi contemporaneamente)uso della memoria centrale (memoria virtuale)riconoscimento e gestione degli utenti (multiutenza)gestione delle periferiche (drivers)file systeminterfaccia grafico.Sul software

Il software di base (o general purpose) può avere funzioni varie: editor di testo, elaborazione di testi, foglielettronici, posta elettronica, internet.

Il software applicativo è costituito da programmi che hanno obiettivi specifici come intrattenimento,controllo di sistemi, progettazione (CAD), risoluzione di problemi matematici.Memoria

cache Per migliorare le prestazioni di un computer si inserisce una memoria intermedia tra CPU e RAM, dettacache. Si trova all’interno del processore. È più veloce della RAM ma anche più costosa.

1.5.1 Per capire meglio il sistema operativo

Immaginiamo un ristorante con un capo-cuoco, il suo aiutante, una cucina, i camerieri e i clienti. I clientiscelgono un piatto dal menu, un cameriere prende l’ordine e lo porta al capo-cuoco. Il capo-cuoco ricevel’ordine e assegna al suo aiutante il compito di preparare il piatto. L’aiutante si dedicherà alla preparazionedel piatto, compito che potrà richiedere più attività. Il capo-cuoco, intanto, supervisiona la preparazione deipiatti e gestisce le risorse (limitate) dei posti nel ristorante.

8

Page 15: Calcolo Numerico

1.6. Il file system

il capo-cuoco rappresenta il sistema operativo,i clienti sono gli utenti,le ricette associate ai piatti corrispondono ai programmi,gli ingredienti sono l’input del programma,il piatto è l’output del programma,il menu e il cameriere sono l’interfaccia verso il sistema operativo,l’aiutante corrisponde al processore (CPU) (Se abbiamo più processori, ci sono più aiutanti),la cucina corrisponde al computer,pentole, fornelli etc, sono le parti che compongono il computer.

L’aiuto cuoco, quindi, rappresenta la CPU mentre il tavolo da lavoro, su cui appoggia gli ingredienti e laricetta per preparare il piatto, rappresenta la memoria centrale. Prima di iniziare a lavorare, il cuoco devesvolgere alcune mansioni (sempre le stesse ogni volta: pulire il tavolo, controllare lo stato di pentole, tegami,coltelli. . . , ricevere le ordinazioni). Supponiamo che queste mansioni siano incise su un pezzo del tavolo dalavoro: corrispondono alla memoria ROM (quella che non può essere alterata). La RAM invece è la parte deltavolo che può essere alterata a piacimento (spostare pentole, tegami, ingredienti).

Quando il ristorante chiude, il tavolo deve essere pulito e sgombro altrimenti si rovina tutto quello che virimane, ad eccezione di ciò che vi è stato inciso. Perciò il cuoco conserva in dispense e frigoriferi i vari in-gredienti rimasti e gli utensili da lavoro: le dispense e i frigoriferi rappresentano i dischi (Hard Disk, CDROM,pen drive USB . . . ) per immagazzinare i dati.

1.6 Il file system

Il sistema operativo gestisce le informazioni su dispositivi di memoria secondaria (dischi).La gestione delle informazioni avviene mediante file11. Un file costituisce un insieme di informazioni

della stessa natura e logicamente correlate. In genere un file contiene un programma (programma sorgenteo programma eseguibile), oppure una sequenza di dati.

L’informazione è rappresentata da files, organizzati in maniera gerarchica (pensiamo ad una struttura adalbero) in directories (cartelle). Una directory è un file che svolge il ruolo di ”raccoglitore“.

I files possono contenere dati (abbiamo i cosiddetti files di testo) oppure programmi (i files diapplicazioni).

Un file è caratterizzato da:

posizione (path, o percorso): sequenza delle directories che portano al filedir1 / dir2 /. . ./ . . ./nome: individua univocamente il file all’interno della cartella (o directory)estensione: la parte del nome del file che segue l’ultimo punto . (dati.txt prova.f matrice.dat

welcome.html foto.jpeg )dimensione: quantità di informazione contenuta nel filealtre informazioni (data di creazione, data di ultima modifica, permessi di scrittura, lettura. . . )

L’intera gestione dei file è a carico di un componente del sistema operativo detto file system.

1.7 Un po’ di storia sui sistemi operativi

Tra i numerosi sistemi operativi, il sistema Unix è quello che ha maggiormente influenzato questo set-tore dell’informatica. Il sistem Unix venne sviluppato sul finire degli anni sessanta nei laboratori della AT &T. La filosofia di base era di realizzare un sistema semplice rispetto agli altri in uso e adatto per la ricerca elo sviluppo. La prima versione fu scritta in linguaggio Assembly e dipendeva dal tipo di macchina su cui sidoveva applicare. Successivamente venne scritto in larga parte in un linguaggio di alto livello, il C, progettato

11 File in inglese significa archivio. Il termine compare nei primi anni cinquanta e inizialmente si riferisce a un pacco di schedecontenente informazioni omogenee. È il sistema operativo a realizzare il concetto astratto di file nella gestione dei dispositivi di memoriadi massa.

9

Page 16: Calcolo Numerico

1. STRUTTURA DELL’ELABORATORE

appositamente per il sistema Unix. In tal modo il sistema operativo diventava facilmente portabile su mac-chine di tipo diverso senza dipendere eccessivamente dalle caratteristiche dell’hardware su cui veniva fattofunzionare. Diversamente dalle abitudini del tempo, l’azienda AT & T distribuì Unix nelle università e resedisponibili i codici sorgenti utilizzati per realizzarlo. Questo portò ad una sua ulteriore innovazione grazie atutti i ricercatori delle università che iniziarono a sperimentarlo.

Quando furono messi in commercio i primi microcomputer (a partire dal 1975), fu necessario sviluppa-re sistemi operativi appositamente progettati per sfruttare le poche risorse disponibili essendo le risorse dicalcolo di tali macchine molto limitate. Inoltre, queste macchine erano pensate più per gli appassionati cheper il personale tecnico esperto e quindi era importante creare un sistema operativo che fosse d’uso relativa-mente semplice. In questo campo si distinsero Bill Gates e Paul Allen, che iniziarono la loro attività scrivendoil linguaggio di programmazione Basic per il micromputer Altair. Nel 1975 crearono una ditta... la Microsoft.

Un altro microcomputer, popolare nei primi anni ottanta, fu l’Apple sviluppato da Steve Wozniak e SteveJobs. Per questa macchina svilupparono un sistema più semplice ed efficiente di quello usato per l’Altair, chesi ispirava vagamente al sistema Unix.

I sistemi operativi per i microcomputer dovevano essere più semplici di quelli impiegati per i grandi com-puter, in quanto la macchina veniva utilizzata da un solo utente e le periferiche collegate erano poche e sem-plici. Il problema maggiore ero quello di gestire i file su floppy disk (gli antenati dei CD-ROM e dei DVD, inuso fino ad una decina di anni fa) o su nastri magnetici e mettere a disposizione dell’utente un linguaggiodi programmazione semplice, come il Basic. Tuttavia, il confine tra linguaggio di programmazione e sistemaoperativo non era ancora ben definito e, una volta avviato, il sistema era pronto per ricevere sia comandi delsistema operativo, sia istruzioni in linguaggio Basic.

I microcomputer iniziarono ad avere un grosso successo tanto che all’inizio degli anni ottanta, l’IBM pen-sò di entrare in questo settore (prima si era solo occupata di grandi computer e di software), introducendoil personal computer, IBM PC, realizzando in tal modo una macchina che servisse non solo per gli appas-sionati e per giocare (uno dei fattori che aveva determinato il successo dei microcomputer) ma anche comestrumento di studio, per i professionisti e per la gestione di piccole aziende.

L’IBM incaricò Bill Gates di realizzare un sistema operativo per il nuovo personal computer. Il successodell’IBM PC portò al successo anche di Bill Gates: i profitti della Microsoft iniziarono a crescere in modoesponenziale. Il sistema realizzato dalla Microsoft prese il nome di MS-Dos e divenne il sistema operativopiù diffuso al mondo grazie alla standardizzazione dei personal computer lanciato dall’IBM.

Il sistema MS-Dos non era facile da usare perchè l’utente interagiva con il computer solo attraversocomandi testuali la cui sintassi non era così semplice da ricordare (qualche anno più tardi fu lanciata sulmercato una versione più amichevole).

Nel 1984, invece, dalla Apple fu prodotto il personal computer Macintosh che adottava un tipo di inter-faccia grafico progettato per interagire in modo semplice e intuitivo con l’utente. Il Macintosh utilizzava uninterfaccia grafico chiamato GUI (Graphic User Interface) composto da icone, finestre, menù... Gli oggettidell’ambiente operativo erano rappresentati con simboli grafici di facile intuizione senza dover comprende-re a fondo tutti i tecnicismi informatici. L’interfaccia GUI non era un’invezione della Apple perchè era statagià sperimentata nel corso degli anni settanta dalla Xerox, che però non aveva intuito le potenzialità di questolavoro, lasciandone invece la fortuna e il successo alla Apple che, insieme ad esso, introdusse il mouse.

Ovviamente, queste novità furono molto apprezzate e la Microsoft, per colmare questa lacuna, lanciò unaltro sistema operativo basato su interfaccia grafica: nel 1985 nacque il primo Windows 1.0 che trovò pochiconsensi perchè troppo lento e instabile. Nel 1986, con la comparsa di nuovi microprocessori, il sistemaWindows cominciò a funzionare in modo adeguato tanto che le versioni di Windows 3.1 e di Windows 95portarono al sopravvento del sistema operativo Windows rispetto al Macintosh.

Accanto a questi sistemi operativi, e forse anche per ridurre lo strapotere della Microsoft, si deve vede-re la strada percorsa da un informatico di Helsinki (data di nascita 1969), Linus Benedict Torvalds, che haintrodotto il sistema Linux.

Durante gli studi universitari, Torvalds si era interessato di sistemi operativi e aveva studiato una versio-ne semplificata di Unix, chiamata Minix. Questo sistema poteva funzionare su personal computer e venivadistributo con i programmi sorgenti disponibili. Torvalds migliorò il sistema Minix, in modo da poterlo uti-lizzare come alternativa a Windows, nella logica di non realizzare profitti (cioè non diventare milionario) madi realizzare un sistema utilizzabile gratuitamente da tutti e migliorabile con il contributo di tutti (la filosofia

10

Page 17: Calcolo Numerico

1.8. Lavorare in ambiente Linux

dell’open source). Nel 1991 fu completata la prima versione del sistema, che fu chiamata Linux e venne mes-sa a disposizione di tutti. Torvalds si riservò il compito di coordinare i diversi miglioramenti via via introdottidagli altri sviluppatori.

Tra le tante distribuzioni attualmente in uso ricordiamo: Debian, Ubuntu, Fedora, Gentoo, Slackware. . .Linux si è dimostrato e si dimostra tuttora un valido sistema operativo, affidabile, sicuro e di buone

prestazioni, in grado di gestire situazioni multiutente e multitasking.Ed è il sistema operativo di riferimento del corso di Calcolo Numerico.

1.8 Lavorare in ambiente Linux

Una volta entrati nel sistema (tramite login e password), si apre l’ambiente grafico e di qui possiamolavorare (per esempio, aprire una finestra di editor, lavorare in Office, navigare in Internet ....).

Per aprire nuove directories (cartelle), per spostare files, per eseguire programmi FORTRAN, ... è benelavorare tramite una finestra di terminale o shell.

La finestra di terminale (shell) mostra il prompt dei comandi.Un esempio di prompt è la login dell’utente (ad esempio studente) + chiocciola + nome della macchina

su cui si sta lavorando (ad esempio george) + attuale directory di lavoro (se non compare nessun nome, èperchè ci troviamo nella home directory, la directory principale dell’utente) + un simbolo (% o $, a secondadella macchina):

studente@george:~ $

Vediamo ora alcuni comandi essenziali (comandi da scrivere dopo il prompt, in una finestra di terminale– dopodichè si clicca il tasto di Invio):

ls mostra l’elenco dei files e delle directories contenuti nella directory attuale ( ls sta per list):

Esempio:

studente@george:~ $ ls

Un volta cliccato Invio, compare l’elenco delle directories presenti nello spazio di lavoro disponibile perl’utente studente sulla macchina george, ad esempio (i numeri a sinistra delle directories o files sonoindicatori dello spazio che occupano in memoria):

5 appunti/ 4 mail/

2 calcolonumerico/ 4 movies/

3 fortran/ 1 varie/

3 foto/ 57 prova.pdf

Per cambiare directory, si deve digitare cd nome-directory

(cd sta per change directory). Esempio: per entrare nella directory foto, scriviamostudente@george:~ $ cd foto

Una volta cliccato il tasto di Invio, si è entrati nella directory foto:studente@george:~/foto $

Il comando cd .. fa tornare nella directory precedente.Per creare una nuova directory: mkdir nomedirectory (mkdir sta per make directory).Per copiare un file dentro una directory: cp nomefile nomedirectory (cp sta per copy).Per trasferire un file in una directory mv nomefile nomedirectory (mv sta per move).Per rinominare un file (o una directory): mv nomevecchio nomenuovo .Per cancellare un file si usa il comando rm nomefile.Per cancellare una directory, dobbiamo prima cancellare tutti i files della directory e poi usare ilcomando rmdir nomedirectory.

11

Page 18: Calcolo Numerico

1. STRUTTURA DELL’ELABORATORE

Per sapere in quale directory ci troviamo, si usa il comando pwd. Esempio: siamo nella directory foto,che è una sottodirectory della home di studente. Con il comando pwd si ha:studente@george:~/foto $ pwd

studente@george:~/foto $ /home/studente/foto

Esempio 1.8.1 Abbiamo due directory chiamate uno e due e il file prova.f nella directory uno.Vogliamo copiare il file dalla directory uno alla directory due.Se ci troviamo nella home, cioè nell’ambiente di partenza, dobbiamo scriverecp uno/prova.f due

studente@george:~ $ cp uno/prova.f due

Se ora passiamo nella directory due e facciamo ls, vedremo il file prova.f

studente@george:~ $ cd due

studente@george:~/due $ ls

total 1

1 prova.f

Se siamo nella directory uno, dobbiamo scriverecp prova.f ../due per ottenere lo stesso risultato.

Se siamo nella directory due, dobbiamo scriverecp ../uno/prova.f . Il punto finale serve per copiare il file prova.f nella directory in cui ci

troviamo.Con cp abbiamo due file identici, quello nella directory uno e quello copiato nella directory due.Possiamo anche scrivere cp prova.f prova2.f: in questo modo creiamo il file prova2.f nellastessa directory in cui si trova prova.f.Se vogliamo trasferire il file dalla directory uno alla directory due (in questo modo avremo solo un filealla fine del procedimento), dobbiamo usare il comando mv.

Riassumendols : lista dei files e delle directorycd : per cambiare directorymkdir: per creare una nuova directorycp: per copiare filesmv: per trasferire o rinominare filesrm: per cancellare filesrmdir: per cancellare directories

1.9 Editor di testo

Se vogliamo scrivere su un file un documento di testo, abbiamo bisogno di un editor di testo. Sotto Linuxne troviamo diversi: vi, emacs, kedit, gedit, nedit.... I più semplici da utilizzare sono gedit e nedit.

Sotto Linux esiste anche il pacchetto Office (del tutto simile all’equivalente Microsoft) per scriveredocumenti in word, creare tabelle, etc. . . . Anche il programma Gnumeric è molto utile per creare tabelle.

Per visualizzare grafici, invece, c’è il pacchetto Gnuplot.

12

Page 19: Calcolo Numerico

CA

PI

TO

LO 2

RICHIAMI DI ANALISI

La teoria attrae la pratica come ilmagnete attrae il ferro.

Carl Friedrich Gauss

2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2 Identità trigonometriche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Regole su funzione esponenziale e logaritmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4 Derivate e integrali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5 Teoremi utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.1 Introduzione

Quando si descrivono teoremi, si danno definizioni o, semplicemente, si discute di matematica, èabbastanza usuale prendere in prestito lettere dell’alfabeto greco.

È importante, quindi, saperle riconoscere e chiamarle in maniera corretta:

A Æ Alfa N ∫ NuB Ø Beta • ª Xi° ∞ Gamma O o Omicron¢ ± Delta ¶ º PiE ≤ Epsilon P Ω RhoZ ≥ Zeta ß æ SigmaH ¥ Eta T ø Tau£ µ Theta ® ¿ UpsilonI ∂ Iota © ¡ FiK ∑ Kappa X ¬ Chi§ ∏ Lambda ™ √ PsiM µ Mu ≠ ! Omega

13

Page 20: Calcolo Numerico

2. RICHIAMI DI ANALISI

2.2 Identità trigonometriche

Nel seguito introduciamo alcune formule trigonometriche, con la notazione:sin(x) ¥ seno(x), cos(x) ¥ coseno(x),

tan(x) ¥ tangente(x) = sin(x)cos(x)

, sec(x) ¥ secante(x) = 1cos(x)

,

cos(°µ) = cos(µ) sin(°µ) =°sin(µ)cos(º2 °µ) = sin(µ) sin(º2 °µ) = cos(µ)cos(º2 +µ) =°sin(µ) sin(º2 +µ) = cos(µ)cos(º°µ) =°cos(µ) sin(º°µ) = sin(µ)cos(º+µ) =°cos(µ) sin(º+µ) =°sin(µ)cos(µ+¡) = cos(µ)cos(¡)° sin(µ)sin(¡) sin(µ+¡) = sin(µ)cos(¡)+cos(µ)sin(¡)sin(2µ) = 2sin(µ)cos(µ) cos(2µ) = cos2 (µ)° sin2 (µ)sin2 (µ)+cos2 (µ) = 1 tan2 (µ)+1 = sec2 (µ)

2.3 Regole su funzione esponenziale e logaritmica

Assumiano a,b 2R, con a > 0 e b > 0. Si ha:

1x = 1ax+y = ax ay ax y = (ax )y

aloga (x) = x a0 = 1ax°y = ax /ay ax bx = (ab)x

loga (x y) = loga (x)+ loga (y) loga (x/y) = loga (x)° loga (y)loga (x y ) = y loga (x) loga (ax ) = x

logb (x) =loga (x)

loga (b)bx = ax loga (b)

2.4 Derivate e integrali

Siano f e g due funzioni dipendenti dalla variabile reale x mentre c 2R sia una costante. Indichiamo la

derivata di f con il simbolod fd x

o mediante f 0. Si ha:

d (c f )d x

= c f 0 regola della costante

d ( f + g )d x

= d fd x

+ d gd x

regola della somma

d ( f /g )d x

= f 0g ° f g 0

g 2 regola del quoziente

d ( f g )d x

= f g 0+ f 0g regola del prodotto

d f r

d x= r f r°1 f 0 regola della potenza

Tra le regole di integrazione, invece, ricordiamo quella di integrazione per parti:Z

f g 0 dx = f g °Z

f 0g dx

14

Page 21: Calcolo Numerico

2.5. Teoremi utili

Diamo ora una tabella delle derivate e degli integrali delle funzioni più note (per gli integrali lasciamofuori la costante di integrazione), e con la simbologia arcsin(x) ¥ arcoseno(x), arccos(x) ¥ arcocoseno(x),cot(x) ¥ cotangente (x), arctan(x) ¥ arcotangente(x), arccot(x) ¥, arcocotangente(x).

f f 0 f f 0

ln(x)1x

ex ex

sin(x) cos(x) cos(x) °sin(x)

tan(x)1

cos2 (x)(= sec2 (x)) cot(x) ° 1

sin2 (x)1

cos(x)tan(x)

1cos(x)

1sin(x)

°cot(x)1

sin(x)

arcsin(x)1

p1°x2

arccos(x) ° 1p

1°x2

arctan(x)1

1+x2 arccot(x) ° 11+x2

fR

f d x fR

f d x

xr xr+1

r +1(r 6= 1) x°1 ln |x|

ex ex ln |x| x ln |x|°xsin(x) °cos(x) cos(x) sin(x)

tan(x) ln | 1cos(x)

| cot(x) ln |sin(x)|

1cos(x)

ln | 1cos(x)

+ tan(x)| 1sin(x)

ln | 1sin(x)

+cot(x)|

1cos2 (x)

tan(x)1

sin2 (x)°cot(x)

tan(x)cos(x)

1cos(x)

cot(x)sin(x)

° 1sin(x)

arcsin(x) x arcsin(x)+p

1°x2 arccos(x) x arccos(x)°p

1°x2

arctan(x) x arctan(x)° 12

ln(1+x2) arccot(x) xarccot(x)° 12

ln(1+x2)1

p1°x2

arcsin(x)1

1+x2 arctan(x)

2.5 Teoremi utili

Richiamiamo, nel seguito, teoremi che trovano applicazione nel Calcolo Numerico. Per alcuni diamoanche la dimostrazione. Notazioni

usate per lefunzionicontinue

Utilizzeremo, inoltre, le seguenti notazioni per funzioni di una sola variabile definite in un insieme X ΩR.L’insieme delle funzioni continue in X verrà denotato con il simbolo C (X ). L’insieme delle funzioni continuein X , che hanno le prime n derivate pure esse continue, sarà indicato con C n(X ).

15

Page 22: Calcolo Numerico

2. RICHIAMI DI ANALISI

Teorema 2.5.1 (Teorema di Rolle) a

Sia f 2C ([a,b]) e differenziabile in ]a,b[.Se f (a) = f (b) = 0, allora esiste un punto ª 2]a,b[tale che f 0(ª) = 0

aMichel Rolle (1652- 1719) fu un matematico francese. Èconosciuto per il teorema che porta il suo nome. Si deve a luila notazione della radice n-sima per mezzo del simbolo npx.

Teorema 2.5.2 (Teorema del Valor Medio)Sia f 2 C ([a,b]) e differenziabile in ]a,b[,allora esiste un punto ª 2]a,b[ tale che

f 0(ª) = f (b)° f (a)b °a

Teorema 2.5.3 (Teorema del Valore Intermedio)Sia f 2 C ([a,b]) e sia K un valore compreso tra f (a)e f (b). Allora esiste almeno un punto ª 2]a,b[ taleche f (ª) = K .

Quindi per funzioni continue, un valore compreso tra i due estremi dell’insieme di definizione, è un valoreassunto dalla funzione stessa (in uno o più punti).

Come conseguenza di questo teorema, se f (a) f (b) < 0 (la funzione assume segno opposto agli estre-mi dell’intervallo [a,b]) allora esiste almeno un punto ª tale che f (ª) = 0, cioè esiste almeno una radicedell’equazione f (x) = 0 nell’intervallo [a,b].

Teorema 2.5.4 (Esistenza del punto fisso) Data una funzione g definita in [a,b], continua e tale che a ∑g (x) ∑ b per ogni x 2 [a,b], allora g ammette almeno un punto fisso.

Dimostrazione. Dire che una funzione g ammette almeno un punto fisso, vuol dire che esiste almenoun punto ª nel suo insieme di definizione, tale che g (ª) = ª.

Dalle ipotesi del teorema, i valori della funzione g sono contenuti nell’intervallo [a,b] e, in particolarea ∑ g (a) ∑ b e a ∑ g (b) ∑ b. Definiamo, perciò, la funzione continua©(x) mediante la relazione

©(x) = g (x)°x

Allora ©(a) = g (a)°a > 0 e ©(b) = g (b)°b < 0. Per il Teorema del Valore Intermedio esiste almeno un puntoª 2]a,b[ tale che ©(ª) = 0, vale a dire g (ª)°ª= 0, cioè g (ª) = ª. Esiste almeno un punto fisso per la funzioneg . 4

16

Page 23: Calcolo Numerico

2.5. Teoremi utili

Teorema 2.5.5 (Esistenza e unicità del punto fisso) Data una funzione g di classe C 1 in [a,b], con a ∑ g (x) ∑b per ogni x 2 [a,b], e con |g 0(x)|∑ m < 1 per ogni x 2 [a,b] allora esiste ed è unico il punto fisso della g in taleintervallo.

Dimostrazione. L’esistenza di almeno un punto fisso è assicurata dal teorema precedente (le ipotesi delteorema precedente ci sono tutte). Supponiamo, allora, che esistano due punti fissi ª e ¥, con ª 6= ¥, per lafunzione g . Si ha

|ª°¥| = |g (ª)° g (¥)|

Applicando il teorema del Valor Medio, esiste un punto c compreso tra ª e ¥ per cui

|g (ª)° g (¥)| = |g 0(c)(ª°¥)|∑ |g 0(c)||ª°¥|

Ma per ipotesi |g 0(c)|∑ m < 1 da cui

|ª°¥|∑ m|ª°¥| < |ª°¥|

Si arriva ad una contraddizione. L’assurdo deriva dall’aver supposto ª 6= ¥. Quindi ª = ¥ e il punto fisso èunico. 4

Teorema 2.5.6 (Teorema del Valor Medio del Calcolo Integrale) Se f 2 C ([a,b]) e g è integrabile in [a,b] eg (x) non cambia segno in [a,b], allora esiste un punto ª 2]a,b[ tale che

Zb

af (x)g (x) d x = f (ª)

Zb

ag (x) d x

Per g ¥ 1, questo teorema ci dà il valore medio della funzione f sull’intervallo [a,b], dato da f (ª) =1

b °a

Rba f (x) d x

Teorema 2.5.7 (Teorema di Rolle generalizzato) Sia f 2 C ([a,b]) n volte differenziabile in ]a,b[. Se f si an-nulla in n+1 punti distinti x0, x1, . . . , xn in ]a,b[, allora esiste un punto ª 2]a,b[ in cui la derivata n-sima dellaf si annulla: f (n)(ª) = 0.

Teorema 2.5.8 (Formula di Taylor) 1

Sia f 2C 2([a,b]) e sia x0 un punto dell’intervallo [a,b]. Allora, per qualunque x 2 [a,b] si può scrivere:

f (x) = f (x0)+ f 0(x0)(x °x0)+ (x °x0)2

2f 00(ªx )

dove ªx è un opportuno punto di [a,b] che si trova sul segmento individuato da x0 e x.

La formula appena scritta si dice formula di Taylor di centro x0 nel punto x.La formula di Taylor appena scritta si può generalizzare se la funzione f è derivabile n+1 volte. Si ha così

la formula polinomiale di Taylor di centro x0:

f (x) = f (x0)+ f 0(x0)(x °x0)+ f 00(x0)2!

(x °x0)2 + . . .+ f (n)(x0)n!

(x °x0)n +Rn

dove

Rn(x) = f (n+1)(ªx )(n +1)!

(x °x0)n+1

con ªx un opportuno punto di [a,b] che si trova sul segmento individuato da x0 e x.

1Brook Taylor (1685 - 1731) fu un matematico inglese che sviluppò quello che oggi è chiamato calcolo delle differenze finite.L’importanza del suo lavoro e, soprattutto, della formula conosciuta oggi con il suo nome, venne riconosciuta solo nel 1772 da Lagrange.

17

Page 24: Calcolo Numerico
Page 25: Calcolo Numerico

CA

PI

TO

LO 3

RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Tutti noi ogni giorno usiamo lamatematica: per prevedere il tempo,per dire l’ora, per contare il denaro.Usiamo la matematica anche peranalizzare i crimini, comprenderegli schemi, prevedere icomportamenti. Usando i numeri,possiamo svelare i più grandimisteri della vita!

NUMB3RS

3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2 Aritmetica di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.3 Conversione di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.4 Rappresentazione IEEE dei numeri di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.5 Precisione numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.6 Propagazione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.7 Instabilità e malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.7.1 Instabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.7.2 Malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.1 Introduzione

Molte volte, si pensa che i risultati numerici ottenuti da un calcolatore elettronico, specie se sono ottenuticome output di un sofisticato software, non contengano errori e, se ne abbiano, siano da ritenersi trascurabili.In realtà, quando si esegue un programma al calcolatore, bisogna prima di tutto aver verificato che sia statoscritto correttamente (il programma deve, cioè, tradurre correttamente il problema matematico che si vuolerisolvere). Inoltre, bisogna tener conto che i risultati numerici sono sempre affetti da un certo tipo di errore,che può essere, per esempio, di arrotondamento o di troncamento: º è un numero con infinite cifre decimalima il calcolatore lo può vedere solo come un numero con finite cifre decimali..., molte formule non possonoessere usate così come sono ma devono essere in qualche modo semplificate (basti pensare ad una somma diinfiniti termini). Non tenere conto di questi fattori può portare a risultati davvero disastrosi, come può essere

19

Page 26: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

verificato andando a controllare la pagina web dedicata ai disastri dovuti a uno scorretto calcolo numerico:http://www.ima.umn.edu/~arnold/disasters/disasters.html

La pagina web è del prof. Douglas N. Arnold, dell’Università del Minnesota, e viene introdotta con laseguente frase (traducendo): Stai seguendo con attenzione il tuo corso di analisi numerica o di calcolo scienti-fico? Se no, potrebbe essere un caro errore. Nel seguito, ci sono esempi dalla vita reale di ciò che può succederequando gli algoritmi numerici non sono applicati correttamente.

Vediamo alcuni di questi disastri numerici.

Il 25 febbraio 1991, durante la prima Guerra del Golfo, un missile Patriot fallì l’intercettazione di unEsempio suldisastro del

missilePatriot

missile Scud iracheno. Questo errore costò la vita di 28 soldati, un centinaio di feriti e la distruzione diun capannone americano. La causa del disastro fu dovuto ad errori di arrotondamento nel sistema ope-rativo del Patriot: ad ogni secondo che passava si introduceva un ritardo infinitesimo che comportava unerrore nella valutazione della traiettoria del missile Scud. Col passare delle ore il ritardo accumulato futale da far intercettare una posizione del tutto diversa da quella in cui si trovava il missile da abbattere.

Figura 3.1: Il disastro del missilePatriot

Difatti, il computer usato per controllare il missile Patriot era basato suun’aritmetica a 24 bit. Per i calcoli, il tempo veniva registrato dall’orolo-gio interno del sistema in decine di secondi e successivamente moltipli-cato per 1/10 per ottenere i secondi, utilizzando 24 bit in virgola fissa. Ilnumero 1/10 in base 2 ha infinite cifre decimali: la sua espansione bina-ria è infatti 0.0001100110011001100110011001100. . .. In 24 bit esso veni-va registrato come 0.00011001100110011001100 introducendo un erro-re di 0.0000000000000000000000011001100. . ., che, in base 10, significacirca 0.000000095.

Gli errori di arrotondamento nella conversione del tem-po causarono un errore nel calcolo della traiettoria: il tem-po di 100 ore calcolato in secondi diede il valore 359999.6567invece di 360000, un errore di 0.3433 secondi che portòil Patriot 687 metri fuori della traiettoria del missile Scud!

L’esplosionedell’Ariane 5

Figura 3.2: L’esplosione diAriane 5

Il 4 giugno 1996, dopo una spesa di 7 miliardi di dollari, e dopo appena 40secondi dal suo lancio, esplose il razzo Ariane 5, nella Guiana Francese. Il razzoe il suo carico erano valutati per oltre 500 milioni di dollari. Perciò il costototale della missione era stato di oltre 7 miliardi e mezzo di dollari. Fu scopertoche l’errore era nel software e, in particolare, nella componente del Sistema diRiferimento Inerziale, che era stato preso dal software dell’Ariane 4. Certe partidel software dell’Ariane 5 erano state aggiornate rispetto al software dell’Ariane4, ma non si era aggiornato quanto preso dal software dell’Ariane 4.

In particolare, il fallimento dell’Ariane 5 è dovuto ad un errore di con-versione da un sistema a 64 bit a virgola mobile ad uno a 16 bit a virgolafissa.

La velocità orizzontale del razzo rispetto alla piattaforma misurato in 64 bitera un numero più grande del massimo consentito nell’aritmetica a 16 bit. Siebbe quindi un errore di overflow che causò l’arresto del software di controllodel volo 37 secondi dopo il lancio del razzo. Dopo 3 secondi il razzo si distrusse.

Il disastro delMars Climate

OrbiterIl disastro, invece, del veicolo spaziale della missione Mars Climate Orbiter

non si trova sulla pagina web del prof. Douglas, ma i dettagli della storia si pos-sono trovare, ad esempio, sul sito http://marsprogram.jpl.nasa.gov/

msp98/orbiter.Il 23 settembre 1999 si perdono le tracce del veicolo spazia-

le Mars Climate Orbiter. Gli obiettivi di questa missione della NASA erano sia di monito-raggio dei cambiamenti climatici sia di supporto per la missione Mars Polar Lander. I costidella Climate Orbiter e della Polar Lander erano di un totale di oltre 320 milioni di dollari.

20

Page 27: Calcolo Numerico

3.2. Aritmetica di macchina

Figura 3.3: La Mars Climate Orbiter

Si era ipotizzato di entrare nell’atmosfera di Marte ad una al-tezza di circa 150 km mentre il veicolo spaziale entrò ad una al-tezza di circa 60 km. Per un errore di conversione delle unità dimisura, il velivolo entrò nell’atmosfera con una traiettoria infe-riore rispetto a quella pianificata. La velocità del mezzo era moltoelevata e portò alla distruzione non solo del veicolo spaziale maanche della stessa Polar Lander.

Diversi furono i motivi che portarono al fallimento di questamissione. Il principale è dovuto all’errore nel trasferimento di in-formazioni tra il team che lavorava sul veicolo spaziale, che si tro-vava in Colorado e il team della missione di navigazione, che la-vorava in California. Un team usava le unità inglesi (inches, feet,pounds) mentre l’altro usava le unità metriche. L’errore fu nel-la mancata conversione delle unità di misura tra unità inglesi e

unità metriche!

3.2 Aritmetica di macchina

Un qualunque numero reale può essere rappresentato accuratamente da una sequenza di infinite cifredecimali.

Ad esempio:

13= 0.3333333. . . =

µ0

100 + 3101 + 3

102 + 3103 + 3

104 . . .∂£100

º= 3.14159265358979. . . =µ

3100 + 1

101 + 4102 + 1

103 + 5104 . . .

∂£100

Osserviamo che abbiamo scritto 1/3 e º in base 10, usando, quindi, le cifre 0,1,2, . . . ,9 per poterlirappresentare.

In genere, un numero reale x può essere rappresentato in base N come

x = xm N m +xm°1N m°1 + . . .+x1N +x0 +x°1N°1 +x°2N°2 + . . . x°n N°n

| {z }parte intera

| {z }parte frazionaria

dove m e n sono interi naturali e xk , k = m,m °1, . . . ,°n sono interi naturali compresi tra 0 e N °1.

EsempioIn base 10, il numero 726.625, scritto in forma estesa è dato dalla forma:

7£102 +2£101 +6+6£10°1 +2£10°2 +5£10°3

Tuttavia, i calcolatori hanno una memoria finita per poter rappresentare i numeri. Ciò significa che solouna sequenza finita di cifre possono essere usate. Inoltre, i calcolatori lavorano in base binaria, quindi ogninumero può essere rappresentato mediante una sequenza di 0 e 1.

Avendo in mente questi due fattori, possiamo ora capire la rappresentazione dei numeri al calcolatore,per cui ad ogni numero reale x è associato il numero di macchina denotato come f l (x), in rappresentazionefloating point – virgola mobile.

21

Page 28: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

3.3 Conversione di base

Nel seguito, non affronteremo gli aspetti teorici del passaggio da una base ad un altra per rappresentarelo stesso numero, ma vedremo l’implementazione pratica per convertire un numero dalla base 10 alla base 2e viceversa.

Il passaggio di un numero dalla rappresentazione in base 2 alla rappresentazione in base 10 è semplice, inquanto si tratta di scrivere il numero come combinazione delle opportune potenze di 2. Vediamo un esempio.

Esempio 3.3.1 Sia 10001000.010 il numero scritto in base 2.Se lo scriviamo mediante le potenze di 2 si ha:

10001000.010 = 1 ·27 +0 ·26 +0 ·25 +0 ·24 +1 ·23 +0 ·22 +0 ·21 +0 ·20+

| {z }parte intera

0 ·2°1 +1 ·2°2 +0 ·2°2

| {z }parte frazionaria

= 27 +23 +2°2 = 128+8+0.25 = 136.25Questo è quindi lo stesso numero ma rappresentato in base 10.

Il passaggio di un numero dalla rappresentazione in base 10 a quella in base 2 si effettua, invece, in duepassi.

Si prende la parte intera del numero e la si divide per 2: se il resto della divisione è zero, allora la cor-rispondente cifra binaria sarà 0; se il resto è diverso da zero, la corrispondente cifra binaria sarà 1. Si ripetela procedura sul risultato avuto dalla divisione, fino a quando si arriva a 1. In tal modo, calcoliamo le cifrebinarie a partire da x0 (il primo resto ottenuto) e andando avanti con indice crescente.

Si prende la parte frazionaria del numero e la si moltiplica per 2. Se il risultato dell’operazione ha laparte intera diversa da zero, allora la corrispondente cifra binaria vale 1, altrimenti vale 0. Si ripete la proce-dura sulla parte frazionaria del risultato appena ottenuto e si continua fino a quando si arriva allo zero (o sesi vede che c’è una periodicità nei risultati). Le cifre binarie vengono costruite da x°1 con indice decrescente.

Esempio 3.3.2 Vogliamo convertire il numero 725.625 dalla base 10 nella base 2.Per la parte intera si ha:

: 2 = quoziente resto725 362 1 x0362 181 0 x1181 90 1 x290 45 0 x345 22 1 x422 11 0 x511 5 1 x65 2 1 x72 1 0 x81 0 1 x9

Per la parte decimale si ha :.625£2 = 1.250 x°1 = 1.250£2 = 0.50 x°2 = 0.5£2 = 1.0 x°3 = 1.0£2 = 0.0

In base 2 il numero diventa 1011010101.101.

22

Page 29: Calcolo Numerico

3.4. Rappresentazione IEEE dei numeri di macchina

Osserviamo che un numero può avere una rappresentazione finita in base 10 e infinita in base 2. Vediamoin dettaglio un esempio:

Esempio 3.3.3 Scriviamo il numero1110

, che è 1.1 in base 10, nella base 2.

Per la parte intera:: 2 = quoziente resto1 0 1 x0

Per la parte decimale:.1£2 = 0.2 x°1 = 0.2£2 = 0.4 x°2 = 0.4£2 = 0.8 x°3 = 0.8£2 = 1.6 x°3 = 1.6£2 = 1.2 x°4 = 1.2£2 = 0.4 x°5 = 0.4£2 = 0.8 x°6 = 0.8£2 = 1.6 x°7 = 1.6£2 = 1.2 x°8 = 1.2£2 = 0.4 x°9 = 0

Osserviamo che nella parte decimale si ripetono all’infinito le cifre 0011. Il numero in base 2 si scrive quindicome: 1.00011| {z }0011| {z } . . .

3.4 Rappresentazione IEEE dei numeri di macchina

Lo sviluppo dei calcolatori ha promosso e sviluppato l’uso del sistema binario, in cui ciascun numero èrappresentato da una successione di cifre binarie (0 e 1). Ma come avviene la rappresentazione di un nume-ro nel calcolatore? Come rappresentare un numero a infinite cifre in maniera accurata utilizzando solo unnumero finito di cifre?

Lo standard IEEE (Institute of Electrical and Electronics Engineers), oggi utilizzato dalla maggior parte deicalcolatori, è dato dalla rappresentazione in virgola mobile (floating point). Esiste anche un tipo di rappre-sentazione in virgola fissa (fixed point), ma in genere è preferita quella in floating point, e noi ci soffermeremosolo su questa.

Riprendiamo l’esempio proposto in Sezione 3.2, dove abbiamo scritto13

in base 10 come

13= 0.3333333. . . =

µ0

100 + 3101 + 3

102 + 3103 + 3

104 . . .∂£100

Questo è un esempio di numero scritto in virgola mobile: un qualunque numero x, in base 10, si puòscrivere sotto la forma x = f 10e dove f rappresenta la mantissa del numero e e è l’esponente (intero) dellabase con cui stiamo rappresentando il numero stesso, che dà informazioni sulla parte intera del numero.

Ci sono diverse rappresentazioni in virgola mobile, tutte equivalenti tra loro. Per esempio 12.5 = 1.25£101 = 0.125£102 = 0.000125£105. Si parla di virgola mobile normalizzata quando la mantissa ha una singolacifra di valore diverso da zero a sinistra della virgola, quindi, in base 2, la mantissa è del tipo 1.qual cosa.

La rappresentazione in virgola mobile normalizzata in base 2 è quella utilizzata nello standard IEEE: inumeri si possono scrivere nella forma x = f 2e . Al calcolatore, tuttavia, non possiamo rappresentare numericon una mantissa a infinite cifre, perciò f = ±1. f°1 f°2 . . . f°n e e = ±eNe°1eNe°2 . . .e0., dove f°1, f°2, . . . , f°n ,e eNe°1,eNe°2, . . . ,e0 sono le cifre che caratterizzano rispettivamente la mantissa e l’esponente del numeroin virgola mobile normalizzata in base 2, e quindi possono valere 1 o 0. Abbiamo n cifre per la mantissa (inrealtà sono n + 1 ma poichè la rappresentazione è normalizzata f0 = 1) e Ne per l’esponente. Nel sistemabinario, le cifre vengono chiamate bits ( binary digits): quindi n bits sono riservati per la mantissa, Ne perl’esponente.

23

Page 30: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Un numero in floating point nella rappresentazione IEEE viene scritto come

x =±(1+ f°12°1 + f°22°2 + . . .+ f°n2°n)£2e

dove1+ f°12°1+ f°22°2+. . .+ f°n2°n è la mantissa, normalizzata, cui sono riservatiun numero n di bits,e è la potenza della base 2 cui sono riservati un numero Ne di bits ed èlimitato a variare in un determinato intervallo [L,U ].

Il primo 1 della mantissa (che corrisponde a f0) non viene messo in memoria ma c’è. La rappresentazionein virgola mobile può essere schematizzata nel modo seguente (s, e ed f rappresentano i bits riservati rispet-tivamente per il segno della mantissa, e per le cifre dell’esponente e della mantissa – ogni celletta può avereil valore 0 o 1):

s e e e e e · · · · · · e f f f f f · · · · · · f

|{z}segno

| {z }cifre dell’esponente

| {z }cifre della mantissa

Abbiamo 1 bit riservato al segno (si ha 0 per il segno + e 1 per il segno °), un numero Ne di bits perl’esponente 2e , e un numero n di bits per la mantissa.

La scelta del numero di bits da riservare all’esponente e alla mantissa si basa su un compromesso tra ladimensione dell’esponente (e quindi il più piccolo e il più grande numero rappresentabile) e la dimensionedella mantissa (e quindi la precisione del numero rappresantibile, più o meno cifre decimali).

Nel sistema IEEE, la rappresentazione in singola precisione è a 32 bits mentre quella in doppia precisioneè a 64 bits. La suddivisione dei bits tra esponente e mantissa viene ripartita nel modo seguente:

s Ne n # totale bitsSingola precisione 1 8 23 32Doppia precisione 1 11 52 64

Gli esponenti possono essere sia positivi sia negativi ma si preferisce memorizzarli come interi positivi(senza segno). Abbiamo dunque bisogno di una tecnica che permetta di rappresentare esponenti negativicome interi positivi. La tecnica utilizzata nello standard IEEE è chiamata di biasing (distorsione): un numeropositivo (detto bias) viene aggiunto all’esponente (sia esso positivo o negativo) in modo che il risultato finalesia sempre positivo. Ed è questo valore che viene memorizzato per rappresentare l’esponente. L’esponenteviene quindi rappresentato in forma biased (parziale, influenzata da un altro numero): se e è l’esponenteeffettivo, noi memorizziamo il valore b + e dove b è il bias dato b = 0111. . .1| {z }

Ne bits

, vale a dire b = 1+2+22 + . . .+

2Ne°2+0·2Ne°1 = 1°2Ne°1

1°2= 2Ne°1°1 (si veda la nota per capire perchè si ha questo risultato nella somma).

Per trovare il limite superiore e inferiore entro cui può variare e, dobbiamo tener conto del fatto che, nellarappresentazione IEEE, due patterns di bits sono riservati per rappresentare numeri speciali quali lo zero,infinito e il Not-a-Number, precisamente 0000. . .0 e 1111. . .1.

Quindi, b + e non può essere uguale nè a 0000. . .0, nè a 1111. . .1. Ciò significa che il massimo esponenteche si può rappresentare è dato sottraendo a 1111. . .1 il valore 1 in base 2, cioè da 1111. . .1° 0000. . .01 =1111. . .10.

Si ha b +e ∑ 1111. . .10, o equivalentemente, 0111. . .1+e ∑ 1111. . .10, da cui ricaviamo

e ∑ 1111. . .10°0111. . .1 = 0111. . .1 = b

.Il limite superiore U è proprio uguale a b.

24

Page 31: Calcolo Numerico

3.4. Rappresentazione IEEE dei numeri di macchina

Per il limite inferiore abbiamo: 0000. . .0 < b +e cioè, equivalentemente,

°b < e ,°b +0000. . .01 ∑ e.

Osserviamo che siamo passati da una diseguaglianza in senso stretto (<) a una relazione con ∑. Quindi illimite inferiore è L =°(b °1).

In singola precisione, b = 0111. . .1| {z }8 bits

: in base 10 b = 12710, da cui l’intervallo [L,U ] = [°126,127].

In doppia precisione, invece, b = 102310 da cui [L,U ] = [°1022,1023].Per quanto riguarda la mantissa, sono ad essa riservati n bits. Considerando anche l’1 della

normalizzazione, la precisione è di n +1 bits.Il più grande numero che si può rappresentare è, quindi1

1.111. . .1| {z }n bits

£2U = (nX

k=02°k )£2U = 1°2°(n+1)

1°2°1 2U = (2°2°n)2U º 2U+1

Il più piccolo numero positivo rappresentabile è dato, invece, da:

1.000. . .0| {z }n bits

£2L = 2L

Se si vuole rappresentare un numero al di fuori di questo intervallo si ha overflow o underflow.In singola e doppia precisione abbiamo, per il più grande e il più piccolo numero positivo rappresentabile,

i seguenti valori:

Singola precisione Doppia precisioneMassimo º 3.4£1038 º 10308

Minimo º 1.2£10°38 º 2.2£10°308

Esempio 3.4.1 Vogliamo scrivere il numero 5.7510 in formato IEEE in singola precisione.Effettuiamo prima la conversione in base 2:Per la parte intera:

5 2 1 x02 1 0 x11 0 1 x2

Per la parte decimale:.75£2 = 1.50 x°1 = 1.5£2 = 1.0 x°2 = 1.0£2 = 0.0

Quindi 5.7510 = 101.112 = 1.0111£22.Memorizziamo ora il numero in singola precisione:Per l’esponente, essendo p = 2, si ha:

(b +p)10 = (127+2)10 = 12910 = 100000012Per la mantissa, m = 23 e si deve trascurare l’1 della normalizzazione, quindi memorizzeremo le cifre 0111e poi avremo tutti 0.

0 1 1 1 0 0 0 . . . 0 0 0 0 0 0 0 0 0 0

Il segno è positivo, quindi s = 0Perciò la memorizzazione, considerati i bits per il segno, l’esponente e la mantissa è:

0 1 0 0 0 0 0 0 1 0 1 1 1 0 . . . 0 0 0 0 0

|{z}s

| {z }esponente

| {z }manti ssa

1È il risultato di una somma del tipo S = 1+a +a2 + . . .+an e vale S = 1°a(n+1)

1°a. In questo caso, a = 1

2= 2°1. Osserviamo, inoltre,

che, dati n valori w1, w2, . . . , wn usiamo la seguente simbologia per indicare la loro somma:

nX

i=1wi = w1 +w2 +w3 + . . . wn

.

25

Page 32: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Consideriamo, ora, la rappresentazione dei numeri speciali.Per convenzione si pone uguale a 0 la rappresentazione che vede tutti zero sia nel segno, sia nell’espo-

nente che nella mantissa (non dimentichiamo che il valore 1 della normalizzazione non è messo in memoriama c’è e quindi non potremmo mai avere il valore 0, perciò lo si pone per convenzione).

Per i valori ±1 si considerano tutti 1 nello spazio dedicato all’esponente, tutti 0 nello spazio dedicato allamantissa e 0 o 1 per il segno, a seconda che sia + o °1.

0 / 1 1 1 1 . . . 1 1 0 0 0 . . . 0 0

|{z}s

| {z }esponente

| {z }mantissa

I valori ±1 si hanno se si fa una divisione per zero o si fa un calcolo che comporta overflow.Si ha invece il Not-a-Number (NaN) come risultato di operazioni non definite, come 0/0 o log0.A seconda della macchina si ha:

NaNS, che produce un segnale di errore0 1 1 1 . . . 1 1 0 1 1 . . . 1 1

|{z}s

| {z }esponente

| {z }mantissa

NaNQ, con il quale il calcolo continua comunque...0 1 1 1 . . . 1 1 1 0 0 . . . 0 0

|{z}s

| {z }esponente

| {z }mantissa

3.5 Precisione numerica

Un numero può avere una rappresentazione finita o infinita. Basti pensare al valore di º o ap

2 in base 10.Abbiamo anche visto che un numero può avere rappresentazione finita in una base ma infinita in un’altra.

Quando rappresentiamo un numero al calcolatore è possibile memorizzare solo un certo numero di cifre:in che modo lo esprimiamo?

Per lasciare maggiore generalità al discorso, consideriamo una base N .Sia x =±(

P1k=0 x°k N°k )N p il numero esatto (può avere infinite cifre decimali e lo rappresentiamo come

somma di infiniti termini).In floating-point esso sarà espresso come x§ = ±(

Pt°1k=0 x§

°k N°k )N p§, esso, cioè, sarà arrotondato (non

possiamo avere infinite cifre decimali e, difatti, la somma considera solo t termini).Ci sono due modi per arrotondare un numero

troncamento: x§ = tr onc(x), dove p§ = p e x§°k = x°k per k = 0, . . . , t ° 1. Le altre cifre, x°t , x°t°1, . . .

sono ignorate.

arrotondamento simmetrico: x§ = ar r (x) = tr onc(x + 12

N°t+1N p ), aggiungiamo un’unità a x°t+1 se

x°t ∏ N /2.

L’errore assoluto |x °x§| che si commette approssimando il numero x con x§ sarà 2

|x °x§|∑

8<

:N 1°t N p nel troncamento12

N 1°t N p nell’arrotondamento

2Evitiamo di effettuare tutti i passaggi che portano alle formule dell’errore assoluto e relativo, che sono il risultato di maggiorazionidi serie geometriche.

26

Page 33: Calcolo Numerico

3.6. Propagazione degli errori

Per l’errore relativo|x °x§|

|x| , invece, si ha:

|x °x§||x| ∑

8<

:N 1°t nel troncamento12

N 1°t nell’arrotondamento

Il valore12

N 1°t è il numero conosciuto come precisione di macchina.

EsempioNel caso della rappresentazione IEEE di un numero, si ha t°1 = n, (ricordiamo che nella rappresentazione

IEEE si memorizza il numero normalizzato), da cui l’errore di arrotondamento relativo che si commette è|x °x§|

|x| ∑ 2°(n+1).

In singola precisione (n = 23), avremo

|x °x§||x| ∑ 2°24 º 5.96£10°8

ciò significa che avremo 8 cifre decimali corrette.In doppia precisione (n = 52) avremo

|x °x§||x| ∑ 2°53 º 1.11£10°16

ciò significa che avremo 16 cifre decimali corrette.

3.6 Propagazione degli errori

Prima di vedere come si propagano gli errori nelle operazioni elementari di moltiplicazione, divisione,addizione e sottrazione, vediamo il concetto di cifre significative.

Le cifre significative sono quelle che danno un’informazione effettiva sul valore del numero,indipendentemente dalla parte esponenziale.

Se scriviamo il numero in virgola mobile normalizzata, le cifre significative sono date dalle cifre dellaparte frazionaria. La bontà delle cifre va diminuendo procedendo da sinistra verso destra e questo può por-tare ad una perdita di cifre significative, come possiamo vedere studiando la propagazione degli errori nelleoperazioni elementari.

Supponiamo che i numeri su cui lavoriamo siano affetti da errore (di arrotondamento), mentre le ope-razioni siano eseguite in modo esatto. Indichiamo con il simbolo o una qualunque delle operazioni ele-mentari {£,/,+,°} e indichiamo con f l (x) il numero x rappresentato in floating point e arrotondato, quindif l (x) = x(1+ex ) dove ex è l’errore di arrotondamento.

Allora f l (x o y) = f l (x)o f l (y) = x(1+ex )o y(1+ey ).

Moltiplicazione3

x(1+ex )£ y(1+ey ) = (x £ y)(1+ex )(1+ey ) º (x £ y)(1+ex +ey )

Quindi l’errore nel prodotto è dato da ex y = ex +eyDivisione (con y 6= 0)4

x(1+ex )y(1+ey )

= xy

(1+ex )(1°ey +e2y + . . .) º x

y(1+ex °ey )

Si ha ex/y = ex °ey : gli errori si accumulano additivamente3Nei calcoli sono trascurabili le potenze maggiori o uguali a due per ex e ey4Possiamo scrivere

11+ey

= (1° ey + e2y + . . .) come risultato della formula polinomiale di Taylor della funzione f (ey ) = 1

1+eydi

centro 0.

27

Page 34: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Addizione (e, analogamente, Sottrazione)

x(1+ex )+ y(1+ey ) = x + y +xex + yey = (x + y)(1+ xx + y

ex +y

x + yey )

L’errore è ex+y =x

x + yex +

yx + y

ey , una combinazione lineare che dipende da x e y .

– x y > 0 =) |ex+y |∑ |ex |+ |ey |– x y < 0 =) |x|

|x + y | e|y |

|x + y | possono essere molto grandi e, in tal caso, ci sarà un’amplificazione

notevole dell’errore. Si ha il fenomeno di cancellazione se non si fa attenzione al numero di cifresignificative dei numeri che vengono sommati.

Supponiamo di avere due numeri molto vicini tra loro, in cui le prime p +2 cifre della parte frazionariaSulla cancel-lazione sono buone mentre le altre sono corrotte. Inoltre, le prime p cifre siano le stesse per entrambi i numeri

(usiamo i simboli v v v v v e w w w w w w per esprimere le cifre corrotte):

f l (x) = 1.d°1d°2 . . .d°p b°(p+1)b°(p+2)v v v v £2e

f l (y) = 1.d°1d°2 . . .d°p b0°(p+1)b

0°(p+2)w w w w £2e

Quando andiamo a fare la sottrazione le prime p cifre buone si annullano. Da p +2 cifre buone, ne abbiamoora solo 2 e tutte le altre sono quelle corrotte. Con la normalizzazione il risultato diventa del tipo (ora qqqqqsono le cifre corrotte):

f l (x ° y) = 1.b00°1b00

°2qqqqqq £2e

Ricordiamo, infine, che in aritmetica di macchina non valgono più la proprietà distributiva o associativadel prodotto.

Esempio 3.6.1 Sia x = 0.1103 e y = 0.009963. Se consideriamo un sistema decimale a 4 cifre,normalizzando i numeri, abbiamo x = 1.103 ·10°1 e y = 9.963 ·10°3

Facendo la sottrazione di questi due numeri, abbiamo 1.103 · 10°1 ° 9.963 · 10°3 = 0.1103 ° 0.009963 =0.100337. Facendo l’arrotondamento a 4 cifre abbiamo il valore 1.0034 ·10°1.

L’errore relativo che commettiamo è:|0.100337°0.10034|

0.100337º 2.99 £ 10°5. Questo errore è minore della

precisione di macchina (considerata la base 10 e le 4 cifre)12·10°3.

Tuttavia, se non teniamo conto delle cifre significative ma tronchiamo i numeri alle prime 4 cifre, abbiamola sottrazione di 0.1103°0.0099 = 0.1004.

Questa volta l’errore relativo è|0.100337°0.1004|

0.100337º .63 £ 10°3. L’errore è maggiore della precisione di

macchina.

Esempio 3.6.2 Sia da risolvere l’equazione ax2+bx+c = 0 con a = 1, b =°56 e c = 1, quindi x2°56x+1 = 0,in una macchina a 4 cifre decimali (normalizzata).

Applicando la formula x1/2 = °b ±p

b2 °4ac2a

abbiamo x1/2 = 28 ±p

783 = 28 ± 27.98213716 =(

0.01786284073

55.98213716. L’arrotondamento delle due radici in virgola mobile normalizzata a 4 cifre decimali

dà: x1 = 1.7863 ·10°2 e x2 = 5.5982 ·101.

28

Page 35: Calcolo Numerico

3.6. Propagazione degli errori

Consideriamo ora la macchina a 4 cifre decimali per risolvere l’equazione:x1 = 28°

p783 = 2.8 ·101 °2.7982 ·101 = 0.0018 ·101 = 0.018 = 1.8 ·10°2

x2 = 28+p

783 = 2.8 ·101 +2.7982 ·101 = 5.5982 ·101

La radice x2 è arrotondata correttamente, mentre la variabile x1 no, per effetto della cancellazione.Per ricavare x1 con l’arrotondamento corretto, applichiamo la formula x1x2 = c/a, che, nel nostro caso, valex1x2 = 1 da cui x1 = 1/x2 = 1/(5.5982 ·101) = 1.7863 ·10°2. Abbiamo fatto un’operazione che non risente delfenomeno di cancellazione numerica!

Esempio 3.6.3 Vediamo come non valga più la relazione (a °b)2 = a2 °2ab +b2.Sia a = 15.6 e b = 15.7 e la macchina sia a 3 cifre decimali (questa volta lavoriamo su una macchina nonnormalizzata, per cui scriveremo la parte frazionaria come 0.qual cosa. Ripetere poi l’esempio lavorandosu una macchina a 2 cifre decimali normalizzata e su una macchina a 3 cifre decimali normalizzata. Cosasi osserva?)(a °b) = (a °b)§+ea°b. Abbiamo (a °b)§ = 15.6°15.7 =°0.1.Quindi (a °b)2 =+0.01 = 0.1 ·10°1.Consideriamo ora a2 °2ab +b2 = 243.36°489.84+246.49 = 0.24336 ·103 °0.48984 ·103 +0.24649 ·103

Considerando la macchina a 3 cifre decimali, abbiamo: 0.243 ·103 °0.490 ·103 +0.246 ·103 =°0.1 ·101

I risultati sono completamente diversi!

Esempio 3.6.4 Consideriamo il problema di approssimare la derivata della funzione f (x) = sin x nel puntox = 1.2.Supponiamo di non poter valutare direttamente la derivata della f e di volerla approssimare applicandola formula polinomiale di Taylor:

f (x0 +h) = f (x0)+h f 0(x0)+ h2

2f 00(x0)+ h3

6f 000(x0)+ h4

24f IV (x0)+ . . .

Allora

f 0(x0) = f (x0 +h)° f (x0)h

° (h2

f 00(x0)+ h2

6f 000(x0)+ h3

24f IV (x0)+ . . .)

Approssimiamo, quindi, la f 0(x0) calcolandof (x0 +h)° f (x0)

h.

L’errore, detto errore di discretizzazione, che si commette è

| f 0(x0)° f (x0 +h)° f (x0)h

| = |h2

f 00(x0)+ h2

6f 000(x0)+ h3

24f IV (x0)+ . . . |

Supponendo di conoscere il valore della derivata seconda in x0, per piccoli valori di h possiamo dare unastima dell’errore di discretizzazione,

| f 0(x0)° f (x0 +h)° f (x0)h

|º h2| f 00(x0)|

Ci aspettiamo, anche senza conoscere il valore di f 00(x0) (purchè diverso da 0) che l’errore di discretizzazionediminuisca proporzionalmente con il passo h, al decrescere di h.Nel nostro caso, in cui f (x) = sin(x), noi conosciamo il valore esatto della derivata in 1.2, cos(1.2) =0.362357754476674... e possiamo dunque calcolare l’errore esatto che commettiamo approssimando laderivata di sin x con la formula che abbiamo ricavato.

29

Page 36: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Per h = 0.1 non abbiamo un’approssimazione accurata. Ci aspettiamo che diminuendo il passo h l’erroreche commettiamo diminuisca.Riportiamo gli errori della formula (in valore assoluto) e confrontiamoli con l’errore di discretizzazioneh2| f 00(x0)| (i conti sono fatti in singola precisione):

h erroreh2| f 00(x0)|

1.e-1 4.7167e-2 4.6602e-21.e-2 4.6662e-3 4.6602e-31.e-3 4.6608e-4 4.6602e-41.e-4 4.6603e-5 4.6602e-51.e-5 4.6602e-6 4.6602e-61.e-6 4.6597e-7 4.6602e-7

L’errore commesso dall’algoritmo decresce come h e, in particolare, comeh2| f 00(1.2)| = 0.46602h.

Possiamo pensare di ottenere un’accuratezza grande quanto vogliamo a condizione di prendere valori di hsempre più piccoli. In realtà, per valori di h molto piccoli, gli errori iniziano ad aumentare!

h erroreh2| f 00(x0)|

1.e-8 4.3611e-10 4.6602e-91.e-9 5.5947e-8 4.6602e-101.e-10 1.6697e-7 4.6602e-111.e-11 4.6603e-5 4.6602e-121.e-12 1.3006e-4 4.6602e-131.e-13 4.2505e-4 4.6602e-141.e-16 3.6236e-1 4.6602e-161.e-18 3.6236e-1 4.6602e-19

In Figura 3.4 vediamo come la curva dell’errore inizialmente segue la retta descritta dall’errore di discretiz-zazione ma poi si allontana da essa. Perchè questo diverso comportamento per valori di h molto piccoli?Dobbiamo tenere presente che l’errore che noi valutiamo non è semplicemente l’errore di discretizzazionema la somma dell’errore di discretizzazione e dell’errore di arrotondamento! Per valori di h grandi, l’erroredi discretizzazione descresce al diminuire di h e domina sull’errore di arrotondamento. Ma quando l’erroredi discretizzazione diventa molto piccolo, per valori di h minori di 10°8, allora l’errore di arrotondamentoinizia a dominare e ad aumentare sempre più al diminuire di h. Questo è un motivo per cui si deve cercaredi far prevalere l’errore di discretizzazione in un procedimento numerico. Nell’errore di arrotondamento,per h via via più piccoli, si verifica un errore di cancellazione: f (x0 +h) è praticamente uguale a f (x0) perh molto piccoli! per cui l’errore che calcoliamo è | f 0(x0)°0| = f 0(x0) = 0.3623577544....Una strategia per evitare la cancellazione è di scrivere diversamente la differenza f (x0+h)° f (x0). Nel caso

di f (x) = sin(x) ricorriamo alla formula trigonometrica per cui sin(¡)° sin(√) = 2cos(¡+√

2)sin(

¡°√2

).

Vediamo come migliorano le cose inserendo nel grafico 3.5 anche la curva dell’errore che otteniamo uti-lizzando questa espressione trigonometrica. L’errore continua a diminuire anche quando la formula pre-cedente dà un errore crescente. Sempre in Figura 3.5, e in riferimento alla formula “non buona”, abbia-mo considerato la curva dell’errore di arrotondamento in modo da confrontare l’andamento effettivo del-l’errore con un limite superiore teorico dell’errore computazionale totale dato dalla somme degli errori didiscretizzazione e di arrotondamento.

30

Page 37: Calcolo Numerico

3.7. Instabilità e malcondizionamento

Figura 3.4: Errore di discretizzazione ed effettivo approssimando f 0(x0) con il rapporto incrementalef (x0 +h)° f (x0)

h.

La rappresentazione di f (x) è affetta da errore per cui avremo: f (x) = f §(x)+ex . L’errore di arrotondamento

èf (x0 +h)° f (x0)

h= f §(x0 +h)° f §(x0)

h+

ex0+h °ex0

h. Maggiorando ex con la precisione di macchina ≤,

l’errore di arrotondamento è dato da 2≤/h: per h piccoli è l’errore che predomina!

3.7 Instabilità e malcondizionamento

3.7.1 Instabilità

In generale è impossibile evitare un accumulo lineare degli errori di arrotondamento durante un calcolo,ed è accettabile che ci sia una crescita lineare moderata, del tipo

En º c0nE0

dove En misura l’errore relativo dell’n-sima operazione dell’algoritmo5 e c0 sia una costante non moltogrande.

Se invece avviene una crescita di tipo esponenziale

En º cn1 E0

con c1 > 1, allora l’algoritmo è instabile. Algoritmi del genere devono essere evitati!

5Per algoritmo intendiamo un procedimento di calcolo. Per una definizione più approfondita si veda pag. 163 al Capitolo 11.

31

Page 38: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Figura 3.5: Errori di discretizzazione, di arrotondamento, ed errore effettivo approssimando f 0(x0) con il

rapporto incrementalef (x0 +h)° f (x0)

h, ed errore che si commette applicando la formula trigonometrica

per cui f (x0 +h)° f (x0) = sin(x0 +h)° sin(x0) = 2cos(2x0 +h/2)sin(h/2).

Definizione 3.7.1 Un procedimento numerico si dice instabile se gli errori che vi sono associati non rimangonolimitati ma crescono fino a distruggere completamente la soluzione.

Esempio 3.7.1 Consideriamo l’integrale

yn =Z1

0

xn

x +10dx

per valori di n = 1,2, . . . ,30. Osserviamo che, poichè x 2 [0,1], la funzione integranda varia pure essanell’intervallo [0,1] per cui 0 < yn < 1.Analiticamente, si ha:

yn +10yn°1 =Z1

0

xn +10xn°1

x +10dx =

Z1

0

xn°1(x +10)x +10

dx =Z1

0xn°1 dx = 1

nVale anche la relazione

y0 =Z1

0

1x +10

dx = ln(11)° ln(10).

Possiamo pensare, quindi, di calcolare numericamente il valore di yn attraverso il seguente algoritmo:

1. valutare y0 = ln(11)° ln(10)

2. per n = 1,2, . . . ,30 valutare yn = 1n°10yn°1

Questa formula ricorsiva darebbe l’esatto valore se non fossero presenti errori di arrotondamento che ciallontanano completamente dalla soluzione vera. L’errore si moltiplica esponenzialmente.

32

Page 39: Calcolo Numerico

3.7. Instabilità e malcondizionamento

Infattiy1 = 1°10y0

y2 =12°10(1°10y0) = 1

2°10+ (°10)2 y0

y3 =13°10(

12°10+102 y0) =°103 y0 + cost ante

......

yn = (°10)n y0 + cost anten

L’algoritmo quindi, considerati gli errori di arrotondamento, presenta un errore En con crescita di tipoesponenziale. Difatti otteniamo valori che via via si allontanano dall’intervallo di ammissibilità [0,1].I risultati che ricaviamo sono i seguenti (osserviamo che sono leggermente diversi a seconda dal linguaggiousato, proprio per effetto dell’instabilità).Da un programma in Fortran:

n yn

0 9.5310e-21 4.6898e-22 3.1021e-23 2.3122e-24 1.8778e-2... ....7 -3.0229e-18 3.1479e+09 -3.1368e+110 3.1378e+218 3.1377e+1027 -3.1377e+1930 3.1377e+22

Da un programma Matlab:

n yn

0 9.5310e-21 4.6898e-22 3.1018e-23 2.3154e-24 1.8465e-2... ....7 1.1481-28 1.0194e-29 9.1673e-310 8.3270e-318 -9.1694e+127 -9.1699e+930 -9.1699e+13

Se invece, consideriamo yn°1 =1

10(

1n° yn), partendo da un valore di n molto grande e andando a ritroso,

l’errore diminuisce. Perciò, dato un valore di accuratezza ≤> 0 e fissato un intero n1 è possibile determinarel’intero n0 tale che, partendo da yn0 = 0 e andando a ritroso, gli integrali yn saranno valutati con un errorein valore assoluto minore di ≤ per 0 < n ∑ n1. Infatti:

yn0 = 0

yn0°1 =1

101

n0

yn0°2 =1

10(

1n0 °1

° 110

1n0

) = 1(°10)2n0

+ cost ante

......

yn = 1(°10)n0°nn0

+ cost anten0°n

L’errore al passo n dipende, quindi, (in valore assoluto) da1

10n0°n .

33

Page 40: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Se richiediamo una tolleranza ≤= 10°6, e fissiamo un valore n1, per calcolare n0 dovrà essere1

10n0°n1< ≤ cioè 10n1°n0 < ≤

Passando al logaritmo in base 10:n1 °n0 < log≤=) n0 > n1 ° log≤

Fissato n1 = 20 si ricava n0 = 26.Questa volta i calcoli danno gli stessi risultati sia in Matlab sia in Fortran:

n yn n yn

26 0.000000 11 7.62944e-325 3.84615e-3 10 8.32797e-324 3.61538e-3 9 9.16720e-323 3.80513e-3 8 1.01944e-222 3.96731e-3 7 1.14806e-221 4.14872e-3 6 1.31377e-220 4.34703e-3 5 1.53529e-219 4.56530e-3 4 1.84647e-218 4.80663e-3 3 2.31535e-217 5.07489e-3 2 3.10180e-216 5.37486e-3 1 4.68982e-215 5.71251e-3 0 9.53102e-214 6.09542e-313 6.53332e-312 7.03898e-3

Osserviamo come il valore y0 coincida con il valore teorico noto.

L’esempio appena visto ci porta a dare alcune considerazioni sui criteri su cui si deve basare un algorit-mo: un algoritmo deve essere accurato, efficiente e robusto, accurato nel senso che bisogna essere in gradodi sapere la grandezza dell’errore che si commette nell’algoritmo stesso; efficiente in termini di velocità diesecuzione e di richiesta di spazio di memoria per le variabili utilizzate; robusto nel dare il risultato correttoentro un livello di tolleranza dell’errore che sia accettabile.

3.7.2 Malcondizionamento

Definizione 3.7.2 Un problema si dice malcondizionato se a piccole variazioni nei dati di input del problemacorrispondono forti variazioni nei dati di output.

Quando il problema è molto sensibile alle variazioni dei dati di input, producendo risultati molto diversi traloro, allora nessun algoritmo, per quanto robusto e stabile, potrà dare una soluzione robusta al problemastesso.

Esempio 3.7.2 Il problema del calcolo delle radici di un polinomio p(x) di grado n è un esempio diproblema malcondizionato.Sia p(x) = a0+a1x+a2x2+ . . .+an xn. I dati di input del problema sono i coefficienti a0, a1, . . . , an. I dati dioutput sono le radici del polinomio.Si può provare che a piccole variazioni sui dati iniziali, corrispondono grandi variazioni sui risultati.

34

Page 41: Calcolo Numerico

3.7. Instabilità e malcondizionamento

Figura 3.6: Esempio: malcondizionamento

Vediamo il caso del polinomio p(x) = (x ° 1)(x ° 2) · · · (x ° 10). Chiaramente, tale polinomio ha radici1,2, . . . ,10. Se perturbiamo il polinomio variando il coefficiente a9 del valore di 0.00001, considerando quin-di il polinomio p(x)+0.00001x9, le radici corrispondenti si discostano di poco da quelle del polinomio dipartenza, come si può notare in Figura 3.6. Ma se variamo il coefficiente a9 del valore 0.0001, considerandocioè il polinomio p(x)+0.0001x9 allora le radici corrispondenti a x7, x8, x9, x10 non saranno più reali maavranno anche una parte immaginaria. La piccola variazione sui dati di ingresso, quindi, provoca unagrande variazione sui dati in uscita, proprio perchè il problema è malcondizionato.

Una quantità che misura il grado di sensibilità di un problema – fornendoci indicazioni sul fatto che apiccole variazioni sui dati di ingresso del problema ci possono essere piccole o grandi variazioni sui dati diuscita – si chiama indice di condizionamento (o numero di condizionamento) del problema. indice di

condiziona-mento

Diamo la definizione nel caso in cui il nostro problema si possa identificare come una funzione f : R°!R. Il valore y = f (x) è il valore di uscita del problema f . Vogliamo vedere cosa succede se il dato di ingressonon è più x ma x +¢x. ¢x rappresenta quindi una perturbazione sul dato iniziale. Assumiamo x 6= 0, y 6= 0.

Applichiamo la formula di Taylor di centro x. Si ha:

f (x +¢x) = f (x)+ f 0(x)¢x +O(¢x2) º f (x)+ f 0(x)¢x

La variazione sul dato d’uscita è data dalla differenza f (x +¢x)° f (x). Chiamiamo questa differenza con¢y . Quindi ¢y = f (x +¢x)° f (x) º f 0(x)¢x (utilizziamo il risultato ottenuto dalla formula di Taylor).

35

Page 42: Calcolo Numerico

3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Se utilizziamo gli errori relativi, abbiamo (e sapendo che y = f (x)):

¢yy

º f 0(x)¢xf (x)

Moltiplico poi numeratore e denominatore a secondo membro per x

¢yy

º x f 0(x)f (x)

¢xx

Al limite per ¢x ! 0, questa uguaglianza approssimata (abbiamo usato il simbolo º) diventa una verauguaglianza. Questo suggerisce di definire l’indice di condizionamento di f mediante la formula

(cond f )(x) =ØØØØ

x f 0(x)f (x)

ØØØØ

Questo numero ci dice quanto grandi sono le perturbazioni relative per y confrontate con le relativeperturbazioni di x.

Per x = 0 e y 6= 0, non ha senso considerare l’errore relativo¢xx

, e si considera l’errore assoluto su x. In tal

caso, si definisce indice di condizionamento la quantità

(cond f )(x) =ØØØØ

f 0(x)f (x)

ØØØØ

Per x = y = 0 si considera invece l’errore assoluto sia per x che per y , dimodochè l’indice dicondizionamento diventa

(cond f )(x) = | f 0(x)|

Esempio 3.7.3 Sia f (x) = x1/Æ, con x > 0 e Æ > 0. Calcoliamo l’indice di condizionamento applicando laformula (poichè abbiamo supposto x > 0, si ha f (x) 6= 0). Risulta

(cond f )(x) =ØØØØ

x f 0(x)f (x)

ØØØØ=

ØØØØØØØ

x1Æ

x1/Æ°1

x1/Æ

ØØØØØØØ= 1Æ

PerÆ grande, (cond f )(x) tende a zero, quindi abbiamo un problema bencondizionato. Se, inveceÆ è moltopiccolo si ha un problema malcondizionato (se Æ= 10°10, si ha f (x) = x1010

e (cond f )(x) = 1010, un valoremolto grande).

36

Page 43: Calcolo Numerico

CA

PI

TO

LO 4

ZERI DI FUNZIONE

Non so come il mondo potràgiudicarmi ma a me sembrasoltanto di essere un bambino chegioca sulla spiaggia, e di essermidivertito a trovare ogni tanto unsasso o una conchiglia più bella delsolito, mentre l’oceano della veritàgiaceva insondato davanti a me.

Isaac Newton

4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374.2 Metodo delle Bisezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.3 Metodo del Punto Fisso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.4 Il Metodo di Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454.5 Convergenza di un metodo iterativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474.6 Complessità computazionale di uno schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484.7 Il metodo delle secanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.8 Confronto tra i metodi di Newton-Raphson e la Regula Falsi . . . . . . . . . . . . . . . . . . . . . . 504.9 Metodo di Newton-Raphson per radici multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.10 Controllo sugli scarti e grafici di convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.11 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

4.1 Introduzione

Il problema di calcolare la radice quadrata di un numero è un problema molto antico. Già gli antichiBabilonesi, intorno al 1700 a.C., se lo erano posto e avevano trovato la soluzione: per calcolare

pb, partivano

da un certo valore x che si avvicinava alla soluzione, dividevano b per questo numero, e facevano poi lamedia, iterando il procedimento. L’algoritmo si può schematizzare nel modo seguente:

partire da x0 prossimo ap

b;

considerare x1 =12

(x0 +bx0

);

generalizzando: xn+1 =12

(xn + bxn

).

37

Page 44: Calcolo Numerico

4. ZERI DI FUNZIONE

Per esempio, per calcolarep

2 º 1.41421356237310, sapendo che il valore che dobbiamo approssimare ècompreso tra 1 e 2, possiamo partire da x0 = 1.5, ottenendo:

x0 = 1.5

x1 = 12 (1.5+ 2

1.5) = 1.41666667

x2 = 12 (1.41666667+ 2

1.41666667) = 1.41421569

x3 = 12 (1.41421569+ 2

1.41421569) = 1.41421356

Il metodo usato dai Babilonesi non è altro che il metodo di Newton-Raphson (che vedremo più avanti)per trovare gli zeri della funzione f (x) = x2 °b.

I metodi numerici discussi in questo Capitolo servono per trovare approssimazioni numeriche adequazioni del tipo f (x) = 0.

4.2 Metodo delle Bisezioni

Sia data una funzione f continua in un intervallo [a,b], con f (a) e f (b) che assumono valori di segnoopposto. Allora, per il teorema del Valore Intermedio (si veda il Teorema 2.5.3 con K = 0), esiste almeno unpunto ª 2]a,b[ tale che f (ª) = 0.

Assumiamo, per semplicità che ci sia una sola radice ª nell’intervallo ]a,b[ (nel caso ci sia più di unaradice, la procedura che ora descriviamo vale sempre, e ci permette di calcolare una di queste radici).

Il metodo delle bisezioni (detto anche metodo dicotomico) si chiama così perchè, ad ogni passo, vienedimezzato l’intervallo precedente, cercando in tal modo di racchiudere la radice ª in sottointervalli semprepiù piccoli.

Si pone a1 = a e b1 = b. Si prende il punto medio dell’intervallo [a1,b1], c1 =a1 +b1

2.

Se f (c1) = 0 allora abbiamo trovato la radice dell’equazione, altrimenti si va a controllare il segno dif (c1).

– Se f (c1) e f (a1) hanno lo stesso segno, allora ª si trova nell’intervallo ]c1,b1[ (applicando di nuovoil teorema del Valore Intermedio). In tal caso porremo a2 = c1 e b2 = b1.

– Se, invece, f (c1) e f (b1) hanno lo stesso segno, allora ª si trova nell’intervallo ]a1,c1[ In tal casoporremo a2 = a1 e b2 = c1.

Riapplichiamo questa procedura appena descritta sul sottointervallo [a2,b2]Fermiamo il procedimento ad una certa iterazione n, se f (cn) = 0 o se l’ampiezza del sottointervallo

è sufficientemente piccola, cioèbn °an

2∑ tol l dove tol l è una certa tolleranza prefissata. In tal caso

assumiamo cn come approssimazione della radice ª.Osserviamo che, ad ogni passo, viene dimezzato l’intervallo in cui si trova la radice ª, da cui

|ª° cn |∑b °a

2n .

Da questa relazione, si può determinare il numero di iterazioni n necessarie per calcolare un’approssimazio-ne della radice ª entro una certa tolleranza tol l richiesta. Infatti

b °a2n ∑ tol =) |ª° cn |∑ tol

Ma

b °a2n ∑ tol () 2n ∏ b °a

tol=) n ∏

logµ

b °atol

log(2).

L’algoritmo di bisezione può essere descritto nel modo seguente (sotto forma di pseudo-codice). Se ilmetodo non converge (perchè, ad esempio, la funzione che abbiamo scelto non assume segno opposto agli

38

Page 45: Calcolo Numerico

4.3. Metodo del Punto Fisso

Figura 4.1: Metodo delle Bisezioni

estremi dell’intervallo), il procedimento iterativo potrebbe entrare in stallo (pensiamo ad un programma dafare eseguire al calcolatore) e quindi conviene introdurre un numero massimo di iterazioni, che viene indi-cato con itmax.

Dati di input: a, b, tol , i tmaxDati di output: soluzione approssimata c o messaggio di fallimento

1 verificare che f (a) f (b) < 0, altrimenti non si può implementare il metodo ;2 n √° 1 ;3 c √° (a +b)/2 ;4 scar to √° |b °a|/2 ;5 Fintantochè n ∑ i tmax e ( f (c) 6= 0 e scar to > tol )6 n √° n +1 (incrementa n) ;7 Se f (a) f (c) > 0 allora8 a √° c9 altrimenti

10 b √° c11 Fine-Se12 aggiorna c ;13 aggiorna scar to ;14 Fine-Fintantochè15 Se f (c) = 0 o scar to ∑ tol allora16 c è la soluzione approssimata17 altrimenti18 n > i tmax ;19 il metodo è fallito dopo i tmax iterazioni ;20 Fine-Se

4.3 Metodo del Punto Fisso

Il problema f (x) = 0 può essere reso equivalente alla ricerca del punto fisso di una opportuna funzione g(vale a dire del problema g (x) = x).

39

Page 46: Calcolo Numerico

4. ZERI DI FUNZIONE

Ad esempio, da f (x) =≥ x

2

¥2°sin(x) = 0, aggiungendo ad ambo i membri x, otteniamo

≥ x2

¥2°sin(x)+x = x

da cui poniamo g (x) =≥ x

2

¥2° sin(x)+x. Le radici della f coincidono con i punti fissi della g .

Definizione 4.3.1 Data una funzione g , si definisce punto fisso della g , quel puntoª che soddisfa la relazione g (ª) = ª

Una funzione può ammettere uno o più punti fissi o non ammetterne affatto.Un modo per calcolare un punto fisso di una funzione g è dato da iterazioni successive sulla funzione g

stessa.

Esempio 4.3.1 Supponiamo che la funzione g sia g (x) = cos(x). Prendiamo come valore iniziale x0 = 1.Con una calcolatrice, andiamo a calcolare (in modalità radianti!) il suo coseno: ricaviamo x1 = cos(x0) =g (x0) = 0.54030230. Successivamente, calcoliamo il coseno di x1, ottenendo x2 = cos(x1) = 0.857553216.Osserviamo che x2 = cos(x1) = cos(cos(x0)) e non cos2 (x0)! Abbiamo innescato, in questo modo, un proce-dimento iterativo per cui xn+1 = cos(xn) = g (xn). Con la calcolatrice, basta digitare sulla funzione cos ognivolta in modo da avere i nuovi valori della successione xn+1. I primi numeri che otteniamo non sono moltoimportanti. Quelli importanti sono quelli che si hanno dopo 15, 30 o 100 passi. Nel nostro caso, abbiamo

n xn5 0.701368774611 0.735604740413 0.741425086614 0.737506890515 0.740147335629 0.739089341430 0.739082298556 0.739085133357 0.739085133258 0.7390851332

Perchè i valori di x tendono a 0.7390851332? Cosa ha di speciale questo numero? È un punto fisso per lafunzione cos(x).

Esempio 4.3.2 Consideriamo la funzione g (x) = 12

x +2. Partendo da x0 = 0 si ha

n xn

1 x1 = 12 ·0+2 = 2

2 x2 = 12 ·2+2 = 3

3 x3 = 12 ·3+2 = 3.5

4 x4 = 12 ·3.5+2 = 3.75

5 x5 = 12 ·3.75+2 = 3.875

6 x6 = 12 ·3.875+2 = 3.9375

I numeri 2, 3, 3.5, 3.75, 3.875, 3.9375 sembrano avvicinarsi a ª= 4. Difatti, per valori crescenti di n, per xn

che tende a ª, si ha, da una parte ª= limn!1 xn+1 = limn!112

xn +2 = 12ª+2 da cui, ª= 1

2ª+2, cioè ª= 4.

40

Page 47: Calcolo Numerico

4.3. Metodo del Punto Fisso

Scopriamo quindi che se l’iterazione xn+1 = g (xn) converge a ª, ª è punto fisso per la funzione g .Da un punto di vista geometrico, i grafici di y = x (bisettrice del primo e terzo quadrante) e di y = g (x) si

intersecano in ª.Tuttavia, non sempre questo schema iterativo, applicato a funzioni che ammettono uno o più punti fissi,

converge. Vediamo con un esempio.

Esempio 4.3.3 Sia g (x) = x2. Analiticamente troviamo due punti fissi per questa funzione. Dovendo essereª = ª2, si ricava ª2 ° ª = 0, vale a dire ª(ª° 1) = 0: quindi ª = 0 e ª = 1 sono i due punti fissi per questafunzione.Partendo da x0 = 0.5, si ha la successione di valori 0.25, 0.0625, 0.00390625, rapidamente il metodo convergea ª= 0Se si prende come punto iniziale un valore x0 2]°1,1[, la successione converge a ª = 0. Le sole successioniche convergono a ª= 1 solo le ovvie successioni generate da x0 =±1. Se si prende come punto iniziale x0 taleche |x0| > 1 allora lo schema iterativo xn+1 = x2

n diverge a +1. Partendo da x0 = 2, si ha 4, 16, 256, 65536...

Questo esempio è significativo per capire come ciascun punto fisso ª abbia un proprio bacino di attra-zione: se si prende x0 in questo bacino, allora i valori xn tendono a ª. Un punto fisso può dunque attirare orespingere i valori xn prodotti dallo schema iterativo.

Prima di passare a studiare quando lo schema di punto fisso converge, ricordiamo che una funzione puòammettere più di un punto fisso, ammetterne uno solo o non ammetterne affatto. Ci sono due teoremi (2.5.4e 2.5.5) che ci dicono quando una funzione può ammettere punti fissi. Il primo assicura l’esistenza di almenoun punto fisso (ciò vuol dire che vi possono essere più punti fissi) quando la funzione g , definita e continuain [a,b], è tale che a ∑ g (x) ∑ b per ogni x 2 [a,b]. Il secondo teorema aggiunge, a queste ipotesi, quelle che gsia di classe C 1 e, inoltre, |g 0(x)|∑ m < 1 per ogni x 2 [a,b]: in tal caso esiste un unico punto fisso.

È importante osservare che, data una funzione che ammette punto fisso, le ipotesi dei due teoremi 2.5.4e 2.5.5 possono essere rilassate dall’intervallo [a,b] ad un intorno del punto fisso.

Possiamo ora provare un teorema di convergenza per lo schema iterativo del punto fisso.

Teorema 4.3.1 A partire da un punto iniziale x0, lo schema iterativo xn+1 = g (xn) converge al punto fisso ª dig se e solo se |g 0(x)| < 1 in un intorno di ª.

Dimostrazione. Dalle relazioni

ª= g (ª)

xn+1 = g (xn)

sottraendo membro a membro e, applicando il teorema del Valore Medio 2.5.2 (con ªn un opportuno puntodel segmento che congiunge ª a xn), otteniamo:

ª°xn+1 = g (ª)° g (xn) = g 0(ªn)(ª°xn)

Possiamo scrivere questa relazione per n = 0,1, . . . ottenendo

ª°x1 = g 0(ª0)(ª°x0)

ª°x2 = g 0(ª1)(ª°x1)

ª°x3 = g 0(ª2)(ª°x2)

... =...

ª°xn = g 0(ªn°1)(ª°xn°1)

41

Page 48: Calcolo Numerico

4. ZERI DI FUNZIONE

Figura 4.2: Il metodo di punto fisso: esempi con g (x) = cos(x) (a sinistra), e g (x) = 12

x +2 (a destra)

Moltiplicando, ora, membro a membro e prendendo i valori assoluti, abbiamo:

|ª°x1| · |ª°x2| · . . . · |ª°xn | =|g 0(ª0)| · |g 0(ª1)| · |g 0(ª2)| · . . . · |g 0(ªn°1)| · |ª°x0| · |ª°x1| · . . . · |ª°xn°1|

La relazione appena trovata può essere semplificata, dividendo ambo i membri per |ª° x1| · |ª° x2| · . . . ·|ª°xn°1| ottenendo:

|ª°xn | = |g 0(ª0)| · |g 0(ª1)| · |g 0(ª2)| · · . . . · |g 0(ªn°1)||ª°x0|

Assumiamo, ora che |g 0(xi )| ∑ m per i = 0,1, . . . ,n ° 1. Abbiamo dunque una relazione che lega l’erroreassoluto al passo n con l’errore assoluto iniziale.

|ª°xn |∑ mn |ª°x0|

Perchè il metodo converga, l’errore deve tendere a zero per n che tende all’infinito. Se m < 1 è assicurata laconvergenza (quindi, se in un intorno del punto fisso, la derivata prima è minore di 1, lo schema converge).Se invece m > 1 in un intorno del punto fisso, lo schema non può convergere al punto fisso.

Se vale m = 1 nulla si può dire a priori, ma bisogna vedere caso per caso cosa succede nell’intorno delpunto fisso. 4

Negli esempi precedenti:

g (x) g 0(x)cos(x) °sin(x)12

x +212

x2 2x

Nel primo caso (esempio 4.3.1) °sin(0.7390851332) = °0.673612, perciò in un intorno del punto fisso laderivata è minore di 1 in valore assoluto e si ha convergenza.

Nell’esempio 4.3.2 g 0(x) = 12

qualunque sia x: si ha convergenza.

Nel terzo caso (esempio 4.3.3), g 0(x) = 2x da cui g 0(0) = 0 e g 0(1) = 2. In un intorno del primo punto fisso,vale m < 1, in un intorno del secondo punto fisso m > 1 e non si potrà mai avere convergenza ad esso.

Il bacino di attrazione si ha quindi se vale m < 1.Da un punto di vista grafico, le iterazioni dello schema di punto fisso si possono vedere sotto forma di

ragnatela. Le iterazioni, infatti, si muovono avanti e indietro tra il grafico della y = g (x) e il grafico dellabisettrice y = x. L’esempio 4.3.1, con g (x) = cos(x), è rappresentato in Figura 4.2 (a sinistra): partendo da(x0, x0) sulla retta y = x, applicando l’algoritmo si ha x1 = g (x0). Perciò:

42

Page 49: Calcolo Numerico

4.3. Metodo del Punto Fisso

Figura 4.3: Il metodo di punto fisso: esempio con g (x) = x2. Si noti la convergenza monotona a ª = 0 (asinistra) e la divergenza monotona da ª= 1 (a destra)

da (x0, x0) si va su o giù fino a raggiungere (x0, x1) sulla curva g ;da (x0, x1) si arriva a (x1, x1) sulla bisettrice y = x.

Questi due passi vengono ripetuti per tutte le altre iterazioni. Da x1 si arriva sulla curva a g (x1). Ora l’altezzaè x2. Da qui si va sulla bisettrice al punto (x2, x2). E così via. Lo scopo delle iterazioni, infatti, è di arrivare alpunto (ª,ª) º 0.7390851332 che è il punto di intersezione tra il grafico di g e la bisettrice y = x. Osserviamoche, per questo esempio, i valori della successione si avvicinano a ª muovendosi a destra e a sinistra rispettoad esso. Si parla di convergenza oscillante.

Nell’esempio 4.3.2, si devono intersecare due linee rette. Notiamo, anche dalla Figura 4.2 (a destra), che ivalori delle iterazioni si trovano tutti da un lato rispetto al punto fisso: si parla di convergenza monotona.

In generale, quando 0 ∑ g 0(x) < 1 in un intorno del punto fisso, si ha convergenza monotona. Se, invece,°1 < g 0(x) < 0 in un intorno del punto fisso, si ha convergenza oscillante.

Analogamente, in Figura 4.3, si possono osservare le conclusioni già viste per l’esempio 4.3.3, in cui g (x) =x2: si ha convergenza monotona verso ª= 0 partendo da un punto iniziale in valore assoluto minore di uno,e divergenza monotona a infinito, partendo da |x0| > 1.

Esempio 4.3.4 Consideriamo ora g (x) = x°sin(x) nell’intervallo [0,2º]. Data la periodicità della funzioneseno, g ammette più di un punto fisso. Infatti da ª= ª° sin(ª) si ha 0 = sin(ª) da cui ª= 0, ª=º e ª= 2º.Studiamo ora la derivata prima g 0(x) = 1° cos(x). Si ha g 0(0) = 1°1 = 0, g 0(º) = 1° (°1) = 2 e g 0(2º) =1°1 = 0. Da queste informazioni, deduciamo che qualunque sia il punto iniziale x0 la successione generatadallo schema del punto fisso non potrà mai convergere a º, come si vede anche dalla Figura 4.4.

Nel caso in cui il metodo di punto fisso converge, si possono ricavare maggiorazioni per l’errore che sicommette approssimando ª mediante xn . Vale infatti la disuguaglianza

|ª°xn |∑m

1°m|xn °xn°1|

dove m, come prima, è una maggiorazione di |g 0(x)|.

43

Page 50: Calcolo Numerico

4. ZERI DI FUNZIONE

Figura 4.4: Il metodo di punto fisso: esempio con g (x) = x ° sin(x). ª= 0 e ª= 2º sono punti fissi attrattivi, alcontrario di ª=º in cui g 0(ª) = g 0(º) = 2

Proviamo questo risultato, scrivendo l’errore all’iterazione n come ª° xn = g (ª)° g (xn°1)Applicando il teorema del valor medio e considerando, come prima, |g 0(x)| ∑ m < 1 in unintorno del punto fisso, si ha:

|ª°xn |∑ m|ª°xn°1| (4.1)Possiamo scrivere ª°xn°1 nel modo seguente aggiungendo e sottraendo xn:

ª°xn°1 = ª°xn +xn °xn°1

ª°xn°1 = g (ª)° g (xn°1)+xn °xn°1

|ª°xn°1|∑ m|ª°xn°1|+ |xn °xn°1|(1°m)|ª°xn°1|∑ |xn °xn°1|

|ª°xn°1|∑1

1°m|xn °xn°1|

Andando a sostituire questa maggiorazione nella disuguaglianza (4.1), si ha

|ª°xn |∑m

1°m|xn °xn°1|

Abbiamo una maggiorazione dell’errore che lega l’errore al passo n con il valore assoluto della differenzatra due iterazioni successive |xn °xn°1| (quest’ultima quantità prende il nome di scarto).

Generalmente, per vedere se il metodo di punto fisso converge al punto fisso entro una certa tolleranzaprestabilita, il controllo da fare è proprio sullo scarto dn = |xn ° xn°1|. Sfruttiamo questo fatto per vederecome implementare l’algoritmo dello schema di punto fisso (sotto forma di pseudo-codice; per i dettaglisull’implementazione in Fortran si vada a pag. 172):

44

Page 51: Calcolo Numerico

4.4. Il Metodo di Newton-Raphson

Dati di input: x0, tol , i tmaxDati di output: xn soluzione approssimata o messaggio di fallimento

1 n √° 1 contatore delle iterazioni;2 dn √° 2tol (una quantità iniziale > tol ) ;3 Fintantochè n ∑ i tmax e dn > tol4 incrementa n di 1;5 applicare l’algoritmo di punto fisso xn = g (xn°1) ;6 aggiorna dn ;7 Fine-Fintantochè8 Se dn ∑ tol allora9 xn è la soluzione approssimata

10 altrimenti11 n > i tmax ;12 il metodo è fallito dopo i tmax iterazioni ;13 Fine-Se

4.4 Il Metodo di Newton-Raphson

Il metodo di Newton-Raphson1 è uno dei metodi più potenti e più famosi per risolvere equazioni non li-neari. Ci sono diversi approcci per introdurre questo metodo – tra questi c’è anche quello di vedere il metododi Newton-Raphson come un particolare schema di punto fisso, come vedremo in seguito.

Supponiamo ora che la derivata prima e seconda di f esistano e siano continue e assumiamo che laderivata prima f 0 sia valutabile con sufficiente facilità.

Lo schema di Newton-Raphson è uno schema iterativo che produce una successione di approssimazionix0, x1, . . . , xn della radice della funzione f .

Sia xn l’iterata corrente. Applicando la formula di Taylor di centro xn si ha:

f (x) = f (xn)+ f 0(xn)(x °xn)+ f 00(ªx )(x °xn)2/2

dove ªx è un punto (che non conosciamo) compreso tra x e xn .Sia x = ª, dove ª è radice di f , f (ª) = 0. Se f fosse lineare, avremmo f 00 ¥ 0 e quindi potremmo trovare la

radice risolvendo direttamente

0 = f (ª) = f (xn)+ f 0(xn)(ª°xn)

Supponendo f 0(xn) 6= 0, otterremmo, con semplici passaggi,

ª= xn ° f (xn)f 0(xn)

Per una funzione non lineare, il discorso da fare è molto simile.La nuova approssimazione xn+1 vogliamo che sia uguale al valore xn più una certa quantità h che ci

permetta di arrivare alla soluzione desiderata.

1 Il metodo fu descritto da Isaac Newton in due suoi scritti del 1669 e del 1671, anche se era riferito solo a polinomi (in particolare ax3 °2x °5 = 0). Il metodo di Newton fu pubblicato per la prima volta nel 1685. Nel 1690 Joseph Raphson ne pubblicò una descrizionesemplificata in termini di approssimazioni successive xn piuttosto che di sequenze di polinomi. Fu solo nel 1740 che Thomas Simpsondescrisse il metodo di Newton come un metodo iterativo per risolvere equazioni non lineari (e non solo polinomi) e diede una versionegeneralizzata per sistemi di due equazioni.

Isaac Newton (1643-1727), inglese, fu fisico, matematico, astronomo, alchimista, inventore, filosofo naturalista. È visto come uno deipiù grandi scienzati nella storia dell’umanità.

Su Joseph Raphson (1648-1715) non si hanno molti dettagli. Pare che Newton stesso gli permettesse di vedere e studiare i suoi scrittimatematici. Il suo lavoro del 1690 Analysis aequationum universalis gli valse l’ingresso nella Royal Society, nel 1691 benchè fosse unostudente (si laureò nel 1692) piuttosto anziano (aveva 43 anni).

45

Page 52: Calcolo Numerico

4. ZERI DI FUNZIONE

Applicando la formula di Taylor di centro xn , deve essere

f (xn+1) = f (xn +h) = f (xn)+ f 0(xn)h + f 00(ªh)h2/2

Vogliamo che sia f (xn+1) = 0, da cui, trascurando il termine in h2 e considerando f 0(xn) 6= 0, ricaviamo

h =° f (xn)f 0(xn)

Utilizziamo questo valore di h per la nuova approssimazione xn+1 = xn +h ottenendo la formula

xn+1 = xn ° f (xn)f 0(xn)

, n = 0,1,2, . . . (4.2)

L’interpretazione geometrica del metodo di Newton è che xn+1 è l’intercetta, sull’asse delle x, dellatangente della f a xn (vedi figura 4.5).

Figura 4.5: Il metodo di Newton-Raphson applicato alla funzione f (x) = (x/2)2 ° sin(x) con x0 = 1.3

Lo schema di Newton-Raphson si può vedere come un caso particolare dello schema del punto fisso ap-plicato alla funzione g (x) = x ° f (x)/ f 0(x). Perchè lo schema del punto fisso converga, deve essere |g 0(x)| < 1in un intorno di ª. Nel caso specifico abbiamo:

|g 0(x)| = |1° f 0(x)2 ° f (x) f 00(x)f 0(x)2 | = | f (x) f 00(x)

f 0(x)2 |

Supponendo f 0(ª) 6= 0 (che è il caso in cui la radice non è multipla), si ha |g 0(ª)| = 0, poichè al numeratoref (ª) = 0 (essendo ª radice della f ). Per continuità, allora, vale |g 0(x)| < 1 in un intorno di ª. Pertanto il metododi Newton-Raphson è generalmente convergente.

Per vedere come si riduce l’errore via via che le approssimazioni si avvicinano a ª, consideriamo l’errorecambiato di segno ≤n , per cui xn = ª+≤n . Sostituendo in (4.2) abbiamo

≤n+1 +ª= ≤n +ª° f (ª+≤n)f 0(ª+≤n)

≤n+1 = ≤n ° f (ª+≤n)f 0(ª+≤n)

46

Page 53: Calcolo Numerico

4.5. Convergenza di un metodo iterativo

Applicando la formula polinomiale di Taylor sia su f sia su f 0 di centro ª, si ha:

≤n+1 = ≤n °f (ª)+≤n f 0(ª)+≤2

n f 00(ª)/2+ . . .

f 0(ª)+≤n f 00(ª)+ . . .

Poichè f (ª) = 0, raccogliendo i termini si ricava:

≤n+1 =≤n f 0(ª)+≤2

n f 00(ª)°≤n f 0(ª)°≤2n f 00(ª)/2+ . . .

f 0(ª)+≤n f 00(ª)+ . . .=

≤2n f 00(ª)/2+ . . .

f 0(ª)+≤n f 00(ª)+ . . .

Trascurando i termini ≤n f 00(ª)+. . . al denominatore e le potenze maggiori o uguali a ≤3n al numeratore si trova:

≤n+1 =f 00(ª)

2 f 0(ª)≤2

n = A≤2n ponendo A = f 00(ª)

2 f 0(ª).

L’ultima relazione che abbiamo ottenuto ci dice che l’errore al passo n + 1 è proporzionale, secondo ilfattore A, al quadrato dell’errore al passo precedente. Perciò se partiamo da un errore iniziale dell’ordinedi 10°2, al passo successivo l’errore è proporzionale a 10°4 e poi a 10°8 fino a 10°16 in tre sole iterazioni.Generalmente, quindi, il numero delle cifre significative raddoppia ad ogni passo del metodo. Si parla diconvergenza quadratica. Sulla

convergenzaNel caso in cui ª sia una radice multipla, allora f 0(ª) = 0 e A =1: se il metodo converge, la convergenzanon sarà più quadratica ma avremo una convergenza di tipo lineare, come vedremo meglio in seguito.

Se in ª vi è un punto di flesso, non orizzontale, per cui f (ª) = 0, f 0(ª) 6= 0, f 00(ª) = 0, allora A = 0 e ciaspettiamo una convergenza superiore a quella quadratica.

4.5 Convergenza di un metodo iterativo

Un metodo iterativo si dice:

linearmente convergente se esiste una costante M < 1 tale che, per n sufficientemente grande, vale

|xn+1 °ª|∑ M |xn °ª|

a convergenza quadratica se esiste una costante M tale che, per n sufficientemente grande, vale

|xn+1 °ª|∑ M |xn °ª|2

a convergenza superlineare se esiste una successione di costanti Mn ! 0 tale che, per nsufficientemente grande, vale

|xn+1 °ª|∑ Mn |xn °ª|.

In generale un metodo ha ordine di convergenza p se si possono definire due costanti p ∏ 1 e M > 0 taliche

limn!1

|xn+1 °ª||xn °ª|p = M

La costante M prende il nome di costante asintotica dell’errore o fattore di convergenza.Nel caso del metodo di Newton-Raphson, generalmente vale p = 2 e la costante asintotica dell’errore è

quella che abbiamo definito come A presa in valore assoluto, cioè M =ØØØØ

f 00(ª2 f 0(ª)

ØØØØ.

Nel metodo del punto fisso, la convergenza è lineare. Infatti, considerando l’errore cambiato di segno, larelazione xn+1 = g (xn) si può scrivere, in modo equivalente, come

ª+≤n+1 = g (ª+≤n) e, applicando la formula (polinomiale) di Taylor si ha

ª+≤n+1 = g (ª)+≤n g 0(ª)+ . . .

ª+≤n+1 = ª+≤n g 0(ª)+ . . .

≤n+1 = ≤n g 0(ª)+ . . . e, al limite per n !1≤n+1 = g 0(ª)≤n

47

Page 54: Calcolo Numerico

4. ZERI DI FUNZIONE

La costante asintotica per lo schema di punto fisso vale, dunque, M = |g 0(ª)|.Il metodo delle bisezioni, invece, può essere visto come un metodo lineare, con M = 1

2(considerando

che, ad ogni passo, si riduce della metà l’intervallo in cui viene cercata l’approssimazione della radice).

Esempio 4.5.1 Consideriamo l’equazione f (x) = 2x °cos(x)+1 = 0 che ammette come unica radice ª= 0.Poichè f 0(x) = 2+ sin(x), il metodo di Newton-Raphson diventa:

xn+1 = xn ° 2xn °cos(xn)+12+ sin(xn)

Partendo da x0 = 0.5 e richiedendo una tolleranza pari a 10°10 nei risultati (interrompiamo l’algoritmoquando dn < 10°10), si ha:

n xn dn

0 0.51 0.4730746270E-01 0.4526925E+002 0.5462695134E-03 0.4676119E-013 0.7458221874E-07 0.5461949E-034 0.1395426403E-14 0.7458222E-075 0.7647622253E-17 0.1387779E-14

I valori generati dall’algoritmo tendono a ª= 0.

Considerando che f 00(x) = cos(x) possiamo valutare la costante asintotica M = | f 00(ª)|2| f 0(ª)| =

|cos(ª)|2(|2+ sin(ª)|) =

14= 0.25

Da un punto di vista teorico, applicando il teorema del valor medio, si haf (ª)° f (xn) = f 0(ªn)(ª°xn)

dove ªn è un punto, che non conosciamo, compreso tra ª e xn. Per xn vicino a ª possiamo considerareªn º xn, da cui ricaviamo (essendo f (ª) = 0):

° f (xn) º f 0(xn)(ª°xn). Sostituendo questa espressione nell’iterazione di Newton-Raphson si ha:

xn+1 = xn ° f (xn)f 0(xn)

º xn + (ª°xn)

vale a direxn+1 °xn = ª°xn cioè dn+1 = ≤n

Ma in condizioni di convergenza, dn+1 < dn da cui, per l’errore, vale la maggiorazione ≤n < dn.Perciò gli scarti sono molto vicini agli errori e possono essere utilizzati sia per controllare il numero diiterazioni da effettuare per approssimare la radice entro una certa tolleranza sia per approssimare M.Nel nostro esempio

d2

(d1)2 = 0.2282d3

(d2)2 = 0.2498d4

(d3)2 = 0.2500d5

(d4)2 = 0.2495

4.6 Complessità computazionale di uno schema

Un altro elemento da considerare per valutare l’efficienza numerica di uno schema iterativo è la sua com-plessità computazionale. Un metodo, infatti, può avere un elevato ordine di convergenza ma avere anche uncosto computazionale molto elevato. Viceversa, un metodo può avere un basso ordine di convergenza maessere anche semplice computazionalmente e, quindi, molto vantaggioso da questo punto di vista.

48

Page 55: Calcolo Numerico

4.7. Il metodo delle secanti

Si definisce indice di efficienza E dello schema iterativo la quantità

E = p1/s

dove s indica il numero di volte in cui bisogna calcolare la funzione e la sua derivata prima ad ogni iterazionee p è l’ordine di convergenza del metodo.

4.7 Il metodo delle secanti

La conoscenza della derivata prima della f per applicare il metodo di Newton-Raphson potrebbe esseresemplice ma a volte potrebbe rivelarsi un’operazione molto costosa e alquanto complicata.

Il metodo delle secanti è una variante del metodo di Newton-Raphson dove, al posto della derivata prima,si considera una sua approssimazione.

Scriviamo la formula ricorsiva

xn+1 = xn ° f (xn)Cn

Per Cn = f 0(xn) abbiamo la formula di Newton-Raphson, che possiamo anche chiamare della tangentevariabile perchè è il coefficiente angolare della retta tangente a (xn , f (xn)) che interseca l’asse delle x in xn+1.

Vediamo altre scelte di Cn :Cn = f 0(x0): il valore di Cn è costante e dà vita al metodo della tangente fissa.

Cn = f (x1)° f (x0)x1 °x0

: abbiamo sempre una costante che approssima la derivata f 0(x0) utilizzando i valori

di x1 e x0. Lo schema è detto della secante fissa.

Cn = f (xn)° f (xn°1)xn °xn°1

. La derivata f 0(xn) è approssimata utilizzando il rapporto incrementale della f

valutata in xn e xn°1. Abbiamo il metodo delle secante variabile, che chiameremo nel seguito anchemetodo2 della Regula Falsi.

In forma estesa, l’iterazione n +1 della Regula Falsi si scrive come:

xn+1 = xn ° f (xn)(xn °xn°1)f (xn)° f (xn°1)

Notiamo che, per innescare il metodo occorrono due valori iniziali, x0 e x1. Ma è richiesta solo lavalutazione della funzione f a ciascun passo (nessuna conoscenza della derivata prima).

Da un punto di vista geometrico, nel metodo delle secanti il valore xn+1 è dato dall’intercetta sull’assedelle x della retta passante per xn , f (xn) e xn°1, f (xn°1). Per quanto riguarda l’accumulo degli errori di arro-tondamento, conviene utilizzare la formula così come è stata scritta in quanto è più sicura rispetto alla formacompatta in cui vengono raccolti i termini, data da

xn+1 =xn°1 f (xn)°xn f (xn°1)

f (xn)° f (xn°1)

in quanto in quest’ultima, si può avere il fenomeno della cancellazione numerica per xn º xn°1 ef (xn) f (xn°1) > 0.

Per quanto riguarda l’ordine di convergenza si può dimostrare che si ha convergenza superlineare poichèvale la relazione

≤n+1 = M

pp +1 ≤p

n

dove p = 1+p

52

= 1.618 e A è la costante asitontica del metodo di Newton-Raphson, da cui

≤n+1 = M 0.618≤1.618n

2Attenzione! In letteratura viene descritto un altro metodo (simile ma non lo stesso) con il nome della Regula Falsi o Falsa Posizioneche genera i valori xn+1 in modo che la radice ª sia sempre compresa tra le iterazioni successive.

49

Page 56: Calcolo Numerico

4. ZERI DI FUNZIONE

Figura 4.6: Il metodo della Regula Falsi applicato alla funzione f (x) = (x/2)2 ° sin(x) con x0 = 1.3 e x1 = 1.35

4.8 Confronto tra i metodi di Newton-Raphson e la Regula Falsi

Sebbene il metodo di Newton-Raphson abbia ordine di convergenza più elevato della Regula Falsi,quest’ultimo è computazionalmente più efficiente. Si ha infatti

Metodo p s ENewton-Raphson 2 2

p2 º 1.414

Regula Falsi 1.618 1 1.618

Vediamo ora come applicare i due metodi e le differenze che si hanno.

Esempio 4.8.1 Consideriamo la funzione f (x) = 0 con f (x) = (x/2)2 ° sin(x). La derivata prima è f 0(x) =(x/2)° cos(x) Consideriamo come x0 = 1.3 per entrambi i metodi e x1 = 1.35 per la Regula Falsi. Comecriterio di arresto, consideriamo una tolleranza tol = 1.e °8, cioè andremo avanti con le iterazioni fino aquando troveremo che lo scarto dn = |xn ° xn°1| sarà minore di tol . Otteniamo i seguenti risultati per ilmetodo di Newton-Raphson

n xn f (xn ) f 0(xn ) dn dn /d2n°1

0 1.3 -0.541058185 0.3825011711 2.714526871831 1.42796213 2.26744846 1.414526872 2.084760792766 0.215754599 1.53401376 0.629766079 0.3147435653 1.944113685369 0.0137718957 1.33676314 0.140647107 0.354627394 1.933811265085 7.60156095E-05 1.32199993 0.0103024203 0.5208080085 1.933753764621 2.37200355E-09 1.32191743 5.7500464E-05 0.5417423966 1.933753762827 -1.00668172E-16 1.79436599E-09 0.542710632

50

Page 57: Calcolo Numerico

4.8. Confronto tra i metodi di Newton-Raphson e la Regula Falsi

Per la Regula Falsi:

n xn f (xn )f (xn )° f (xn°1)

xn °xn°1dn dn /d1.618

n°1

0 1.3 -0.5410581851 1.35 -0.520098358 0.4191965522 2.590702853065 1.15448972 1.34970922 1.240702853 1.735341043061 -0.233640901 1.62285784 0.85536181 0.6033862154 1.879309845941 -0.0698346071 1.1377902 0.143968803 0.1853744735 1.940687248331 0.00919996444 1.28768192 0.0613774024 1.412310766 1.933542654410 -0.000279035921 1.32673746 0.00714459392 0.6531002157 1.933752971771 -1.04570967E-06 1.3217654 0.000210317362 0.6239352398 1.933753762918 1.19824825E-10 1.32191686 7.91146198E-07 0.7044414559 1.933753762827 -1.00668172E-16 9.0644825E-11 0.676026603

Attraverso gli scarti, abbiamo fatto una stima della costante asintotica dell’errore, considerando che, allimite per k !1, xn ! ª. Le ultime colonne delle tabelle, infatti, valutano i rapporti dn/d 2

n°1 e dn/d 1.618n°1 .

Diamo un’ulteriore stima di tali costanti facendo uso della definizione teorica e considerando ªº xn.

Per il metodo di Newton-Raphson dobbiamo calcolare M = | f 00(ª)|2| f 0(ª)| mentre per la Regula Falsi dobbiamo

considerare il valore M 0.618.Poichè f 00(x) = 1/2+sin(x), abbiamo, per ªº x6 (di Newton-Raphson) o, equivalentemente per ªº x9 (dellaRegula Falsi), in pratica ª º 1.933753762827, f 0(ª) = 1.32191743 e f 00(ª) = 1.4348509. Otteniamo quindi:M º 0.542715784 e M 0.618 º 0.685434221

Esempio 4.8.2 Sia data f (x) = sin(x). Nell’intervallo ]°º/2,º/2[ la f ha esattamente una radice, ª= 0.Il metodo di Newton applicato alla funzione f , diventa:

xn+1 = xn ° tan(xn), n = 0,1,2, . . .Se scegliamo come valore iniziale x0 = x§ tale che tan(x§) = 2x§, allora x1 =°x0, x2 =°x1 = x0... Si ha unasituazione di stallo: i valori della successione saranno, alternativamente, x§ e °x§ e non avremo convergen-za alla radice ª= 0. Il valore critico x§ vale 1.165561185207 e lo si può trovare numericamente applicandoil metodo del punto fisso a alla funzione g (x) = arctan(2x).Vediamo dunque cosa accade applicando il metodo di Newton-Raphson e la Regula Falsi utilizzando comex0 = x§ ( e x1 =°x0 nella Regula Falsi). Facciamo i conti in singola precisioneb, richiedendo un’accuratezzadell’ordine ≤= 10°8.

aSe si considera g (x) = tan(x)/2 si trova il punto fisso 0 in quanto g 0(x§) > 1 per g (x) = tan(x)/2.bLavorando in doppia precisione non si riesce a osservare il comportamento ciclico ma si ha convergenza o divergenza a

seconda che si abbia un’iterata |xk | < o > x§.

51

Page 58: Calcolo Numerico

4. ZERI DI FUNZIONE

Abbiamo le seguenti tabelle.Per Newton-Raphson

n xn f (xn) f 0(xn) dn

0 1.1655612 0.919009745 0.3942348661 -1.1655612 -0.919009745 0.394234866 2.33112242 1.1655612 0.919009745 0.394234866 2.33112243 -1.1655612 -0.919009745 0.394234866 2.3311224...

......

......

n 1.1655612 0.919009745 0.394234866 2.3311224n+1 -1.1655612 -0.919009745 0.394234866 2.3311224

Per la Regula Falsi:

n xn f (xn)f (xn)° f (xn°1)

xn °xn°1dn

0 1.1655612 0.9190097451 -1.1655612 -0.919009745 0.7884697322 0.000000024087 0.000000024087 0.788469732 1.16556123 -0.000000006462 -0.000000006462 3.05485912E-08 2.38417108E-084 0.000000000000 0.0000000000000 6.46195142E-09

Poche iterazioni sono necessarie perchè la Regula Falsi converga alla soluzione esatta.Perchè il metodo di Newton-Raphson converga il valore iniziale x0 deve essere scelto tale che |x0| < x§.

Questo esempio ci permette di capire il significato di metodo generalmente convergente e il fatto che le pro-prietà di convergenza di un metodo possono valere localmente, cioè quando si è sufficientemente vicini allaradice.

Da un punto di vista pratico occorre prestare molta attenzione anche alla scelta del punto iniziale per ilQuandoNewton-

Raphson dàrisultati

scarsi

metodo di Newton-Raphson. Dal momento che la formula richiede una divisione per f 0(xn), occorre evitaredi prendere un punto iniziale in cui la f abbia una tangente (e quindi f 0) con pendenza vicina allo zero. In talcaso, infatti, ci si può allontanare dalla radice e il metodo può non convergere.

Figura 4.7: Il metodo di Newton-Raphson applicato alla funzione f (x) = sin(x) con x0 = x§ (a sinistra). Lafunzione f (x) = x5 °6 (a destra)

52

Page 59: Calcolo Numerico

4.9. Metodo di Newton-Raphson per radici multiple

Esempio 4.8.3 Consideriamo f (x) = x5 °6, per la quale f 0(x) = 5x4, il cui grafico è in Figura 4.7 (a destra).Se partiamo da un punto iniziale prossimo allo zero, poichè la tangente alla f è quasi orizzontale, non siriesce ad avere convergenza se non dopo molte iterazioni: partendo da x0 = 0.01 e richiedendo una tolleran-za 10°8, sono necessarie 88 iterazioni per arrivare a ª = 1.430969081115725849. Vediamo in tabella, comecambia il numero delle iterazioni al variare di x0:

x0 0.05 0.1 0.5 0.8 1.0 1.4 1.5 2. 3. 10. 20. 100.iterazioni 59 46 18 10 7 4 4 6 8 14 17 24

4.9 Metodo di Newton-Raphson per radici multiple

Definizione 4.9.1 Data un’equazione f (x) = 0, una radice ª è multipla di molteplicità r se vale: f (ª) = f 0(ª) =. . . = f r°1(ª) = 0 e f r (ª) 6= 0.

Quando si ha una radice multipla, il metodo di Newton-Raphson diventa un metodo del primo ordine inquanto la formula che lega l’errore al passo n +1 con l’errore al passo n diventa3:

≤n+1 =r °1

r≤n

da cui la costante asintotica è M = r °1r

. Per poter avere un metodo che sia di nuovo a convergenza

quadratica, occorre modificare l’algoritmo, ottenendo la formula di Newton-Raphson modificata, nel modoseguente:

xn+1 = xn ° rf (xn)f 0(xn)

4.10 Controllo sugli scarti e grafici di convergenza

Da un punto di vista pratico, il controllo per verificare la convergenza o meno della successione xn ge-nerata dallo schema iterativo viene effettuato sullo scarto dn = |xn ° xn°1| piuttosto che sull’errore (assolu-to) ≤n = |ª° xn |, poichè, se avessimo informazioni sull’errore, conosceremmo anche il valore di ª (che, ingenerale, non è noto).

Nel caso del metodo di Newton-Raphson, quando è di ordine 2, abbiamo visto che il controllo sullo scartova bene (si veda quanto detto a pag. 48).

Vediamo cosa succede per metodi lineari. Sia tol l la tolleranza richiesta per approssimare ª utilizzandogli scarti. Sappiamo che, per n grande e se il metodo converge, vale la relazione

≤n+1 º M≤n

dove M < 1 è la costante asintotica.Riscriviamo la precedente formula come:

|ª°xn+1|º M |ª°xn | = M |ª°xn +xn+1 °xn+1|∑ M (|ª°xn+1|+ |xn+1 °xn |)

Quindi

≤n+1 ∑ M(≤n+1 +dn+1)

(1°M)≤n+1 ∑ Mdn+1

3Il procedimento da seguire è del tutto simile a quanto è stato fatto nell’ipotesi in cui f 0(ª) 6= 0. Come esercizio, si consiglia di provarea ricavare questo risultato.

53

Page 60: Calcolo Numerico

4. ZERI DI FUNZIONE

Supponendo dn+1 ∑ tol l , vale

≤n+1 ∑M

1°Mdn+1 ∑

M1°M

tol l

Perciò, perM

1°M< 1 (quindi per M < 1/2), se dn+1 ∑ tol l anche ≤n+1 ∑ tol l . Se, invece, M ∏ 1/2, allora

l’errore può essere più grande della tolleranza richiesta.Per quanto riguarda il metodo della secante variabile, poichè è superlineare, in base alla definizione,

≤n+1 º Mn+1≤n con Mn+1 ! 0, perciò si può vedere come un caso limite di convergenza lineare con fattore diconvergenza che tende a zero, e quindi il controllo dello scarto permette un buon controllo dell’errore.

Quando si implementa un metodo iterativo, si può fare il grafico semilogaritmico di convergenza delmetodo, ponendo sull’asse delle ascisse i valori delle iterazioni e sull’asse delle ordinate i logaritmi (in base10) degli scarti.

Asintoticamente possiamo sostituire l’errore con lo scarto, nella definizione di ordine di convergenza diun metodo, per cui dn º Md p

n°1.Nel caso in cui p = 1, si ha:

dn º Mdn°1

dn°1 º Mdn°2

dn°2 º Mdn°3

......

d2 º Md1

d1 º Md0

Partendo dalla prima relazione abbiamo:

dn º Mdn°1 º M 2dn°2 º M 3dn°3 º . . . º M nd0

Troviamo una relazione tra dn e d0. Passando ai logaritmi:

log10 (dn) = n log10 (M)+ log10 (d0)

Abbiamo un’equazione del tipo y = ax +b dove y = log10 (dn) e x = n, che rappresenta l’equazione della rettanel nostro grafico semilogaritmico, e la pendenza della retta vale a = log10 (M). Dalla pendenza della rettapossiamo dunque risalire al valore della costante asintotica M .

Nel caso in cui p 6= 1 il discorso si fa più complicato (e non staremo qui ad analizzarlo nei dettagli). Peresempio, per p = 2, si trova una curva che dipende da 2n .

Esempio 4.10.1 In Figura 4.8, riportiamo un esempio di grafico con i profili di convergenza per i meto-di di Newton-Raphson, secante variabile e punto fisso per trovare lo zero della funzione f (x) = x + ln(x)(applicando lo schema di punto fisso alla funzione g (x) = e°x ).

54

Page 61: Calcolo Numerico

4.11. Esercizi

Figura 4.8: Profili di convergenza a confronto

4.11 Esercizi

Esercizio 4.11.1 Si vuole risolvere l’equazione x = g (x) con lo schema del punto fisso; sapendo cheg (x) = x2 °5x +9

(a) calcolare analiticamente il valore del punto fisso;(b) determinare il fattore di convergenza M dello schema del punto fisso;(c) calcolare le approssimazioni x1, x2 e x3 partendo prima da x0 = 1 e poi da x0 = 2.5 e giustificandone

il diverso comportamento.

Svolgimento

(a) ª è punto fisso della funzione g se verifica g (ª) = ª.Imponiamo dunque la condizione g (ª) = ª. Ricaviamo ª2 °5ª+9 = ª, ovvero ª2 °6ª+9 = 0, cioè

(ª°3)2 = 0, da cui ª= 3 è punto fisso della g .(b) Il fattore di convergenza è M = g 0(ª).

Poichè g 0(x) = 2x °5, si ha g 0(ª) = g 0(3) = 1.Osserviamo che, a priori, non si può dire se lo schema del punto fisso converge o meno proprio

perchè nel punto fisso la derivata prima vale esattamente 1, ma bisogna vedere caso per caso a secondadel punto iniziale da cui si fa partire il metodo.

(c)

Per x0 = 1 si hak xk g (xk )0 1 51 5 92 9 453 45 1809

Per x0 = 2.5 si hak xk g (xk )0 2.5 2.751 2.75 2.81252 2.8125 2.847656253 2.84765625 2.870864868

55

Page 62: Calcolo Numerico

4. ZERI DI FUNZIONE

Figura 4.9: Esercizio sullo schema di punto fisso

Per x0 = 1 il metodo non converge, mentre per x0 = 2.5 il metodo converge. La diversità di com-portamento si giustifica graficamente, come si può vedere dalla Figura 4.9, osservando che per x0 = 1 ivalori ottenuti dallo schema si allontanano sempre più dal punto fisso. Nel secondo caso, al contrario,i valori si avvicinano con monotonia al punto fisso.

Esercizio 4.11.2 Si vuole risolvere l’equazione f (x) = 0 con f (x) = (x °1)2 +3ln(x), nell’intervallo [0.5,2]con gli schemi di Newton-Raphson e della Regula Falsi.

(a) Dimostrare esistenza e unicità della soluzione nell’intervallo considerato.(b) Calcolare le approssimazioni x1, x2 e x3 con lo schema di Newton-Raphson, partendo da x0 = 0.5;(c) Calcolare le approssimazioni x2 e x3 con lo schema della Regula-Falsi partendo da x0 = 0.5 e x1

calcolato al punto b).Stimare, inoltre il fattore di convergenza del metodo di Newton-Raphson assumendo ªº x3.

Svolgimento(a) La funzione ammette valori opposti all’estremo dell’intervallo. Infatti f (0.5) = °1.82944154 e f (2) =

3.07944154. Quindi, per il teorema del valor intermedio, esiste almeno una radice. Inoltre f 0(x) = 2(x °

1)+ 3x= 2x2 °2x +3

xè sempre positivo nell’intervallo dato, (la parabola 2x2 °2x +3 ha discriminante

negativo e quindi è sempre positiva). Perciò, da f 0(x) > 0 concludiamo che la f è crescente. Di quil’unicità della radice.

(b) Partendo da x0 = 0.5, il metodo di Newton-Raphson fornisce i seguenti valori:

k xk f (xk ) f 0(xk )0 0.50000000E+00 -0.18294415E+01 0.50000000E+011 0.86588831E+00 -0.41401211E+00 0.31964267E+012 0.99541173E+00 -0.13775443E-01 0.30046517E+013 0.99999643E+00

Dalla tabella sembra che i valori della successione tendano a 1. E, infatti, si vede facilmente chef (1) = 0 e quindi 1 è il valore che stiamo cercando. Per stimare la costante asintotica dell’errore del

56

Page 63: Calcolo Numerico

4.11. Esercizi

metodo di Newton-Raphson assumendo ªº x3, occorre usare la formula

M º | f 00(x3)|2| f 0(x3)|

dove, nel caso specifico, vale f 0(x) = 2(x °1)+ 3x

e f 00(x) = 2° 3x2 .

Usando il valore trovato per x3 si ricava M º 0.16667004E +00.(c) Partendo da x0 e x1 del metodo di Newton-Raphson, la Regula Falsi dà:

k xk f (xk )f (xn)° f (xn°1)

xn °xn°10 0.50000000E+00 -0.18294415E+01 -1 0.86588831E+00 -0.41401211E+00 0.38684741E+012 0.97291038E+00 -0.81656072E-01 0.31054906E+013 0.99920448E+00

Esercizio 4.11.3 Provare, anche solo graficamente, che l’equazionef (x) = sin(x)+x °1 = 0

ammette una sola radice ª nell’intervallo [0,1].(a) Dire se lo schema del punto fisso con g (x) = arcsin(1°x) può convergere.(b) Partendo da x0 = 0.1 calcolare le approssimazioni x1, x2 e x3 con lo schema di Newton-Raphson;(c) Dare una stima del fattore di convergenza.

SvolgimentoGraficamente, da f (x) = 0 si ha sin(x) = 1° x. Se si studia l’intersezione delle due curve, sin(x) e 1° x

nell’intervallo [0,1], si può osservare una sola intersezione, cioè una sola radice della f (fare il grafico delledue funzioni).

Analiticamente, la funzione f (x) assume valori di segno opposto agli estremi dell’intervallo dato:

f (0) = sin(0)+0°1 =°1

f (1) = sin(1)+1°1 = 0.8414709848

La derivata prima della f è f 0 = cos(x)+1: è funzione continua e sempre positiva nell’intervallo [0,1]. Quindif è una funzione crescente e interseca l’asse delle x solo una volta in [0,1], vale a dire ammette un’unicaradice.

(a) Da f (x) = 0 si ha sin(x)+x °1 = 0 o, equivalentemente, sin(x) = 1°x, da cui x = arcsin(1°x).Consideriamo perciò lo schema del punto fisso con g (x) data da g (x) = arcsin(1°x). La derivata di

g (x) è g 0(x) = 1p

1° (1°x)2.

Nell’intervallo [0,1] valgono le seguenti disuguaglianze:

0 ∑ x ∑ 1 =) 0 ∏°x ∏°1 =) 1 ∏ 1°x ∏ 0 =)=) 1 ∏ (1°x)2 ∏ 0 =)°1 ∑°(1°x)2 ∑ 0 =) 0 ∑ 1° (1°x)2 ∑ 1 =)

=) 0 ∑p

1° (1°x)2 ∑ 1 =) 1 ∑ 1p

1° (1°x)2

Perciò g 0(x) è sempre maggiore di 1 e lo schema del punto fisso non può convergere.(b) Da f (x) = sin(x)+x °1 si ha f 0(x) = cos(x)+1 e f 00(x) =°sin(x). Il metodo di Newton-Raphson è:

xk+1 = xk °sin(x)+x °1

cos(x)+1.

57

Page 64: Calcolo Numerico

4. ZERI DI FUNZIONE

Utilizziamo la notazione M1 e M2 per indicare la stima della costante asintotica dell’errore mediante leformule

M1 =|xk+1 °xk ||xk °xk°1|2

o M2 =| f 00(xk )|2| f 0(xk )|

Partendo da x0 = 0.1 si ottengono i seguenti valori:

k xk f (xk ) f 0(xk ) |xk °xk°1|0 0.1 -0.80016658E+00 0.19950042E+01 -1 0.50108517E+00 -0.18537249E-01 0.18770618E+01 0.40108517E+002 0.51096084E+00 -0.23565955E-04 0.18722750E+01 0.98756733E-023 0.51097343E+00 -0.38737166E-10 - 0.12586802E-04

(c) La stima del fattore di convergenza è dato da M1 = 0.12905712E+00 o da M2 = 0.13059731E+00, aseconda della strada scelta per dare la stima.

Esercizio 4.11.4 Data l’equazione f (x) = ln(x)+x2 °x = 0,(a) si provi, anche solo graficamente, che l’equazione ammette l’unica radice ª = 1 nell’intervallo

[0.7,2.3];(b) si applichino due iterazioni del metodo dicotomico (o delle bisezioni) a partire dall’intervallo dato,

chiamando con x0 l’ultimo valore ottenuto con tale metodo;(c) a partire da x0 del punto (b) si calcoli l’approssimazione x1 con il metodo di Newton-Raphson;(d) a partire da x0 e x1 del punto (c) si calcolino le approssimazioni x2 e x3 con il metodo della Regula

Falsi;(e) considerata la radice esatta ª = 1, si calcoli la costante asintotica di convergenza del metodo della

Regula Falsi.

Svolgimento(a) Da f (x) = 0 si ricava ln(x) = x ° x2, per cui graficamente si può vedere che le due curve si intersecano

in un solo punto, che vale ª= 1.Analiticamente, invece, la funzione f (x) assume valori di segno opposto agli estremi dell’intervallo

dato:

f (0.7) =°0.566674943938732

f (2.3) = 3.8229091229351

Inoltre f è continua, quindi ammette almeno una radice nell’intervallo dato. La derivata prima è:

f 0(x) = 1x+2x °1, che possiamo anche scrivere come f 0(x) = 1+2x2 °x

x: numeratore e denominatore

sono entrambi sempre positivi nell’intervallo dato, (la parabola 2x2 ° x +1 ha discriminante negativo¢ = °7, di conseguenza, per ogni x reale si ha 2x2 ° x +1 > 0). Da f 0(x) > 0 per ogni x segue che f ècrescente e, quindi, ammette un’unica radice.

(b) Applichiamo il metodo delle bisezioni a partire dall’intervallo dato (utilizziamo la notazione xs perindicare l’estremo sinistro dell’intervallo, xd per indicare l’estremo destro dell’intervallo, xc , il puntomedio dell’intervallo considerato):

iter. xs f (xs ) segno xd f (xd ) segno xc f (xc )1 0.7 -0.566674944 - 2.3 3.822909123 + 1.5 1.1554651082 0.7 -0.566674944 - 1.5 1.155465108 + 1.1 0.205310180

Il valore x0 è dunque x0 = 1.1.

(c) Il metodo di Newton-Rapshon è xk+1 = xk °f (xk )f 0(xk )

dove f 0 = 1/x+2x°1. Partendo da x0 = 1.1, si ricava

x1 = 1.1° 0.205310182.1090909

= 1.002654656

58

Page 65: Calcolo Numerico

4.11. Esercizi

(d) Applicando il metodo della Regula Falsi si ha:

k xk f (xk )f (xk )° f (xk°1)

xk °xk°11 1.002654656 0.5312842078E-02 0.2054513650E+012 1.000068720 0.1374413812E-03 0.2001364094E+013 1.000000046

(e) Considerato che la radice esatta è ª = 1, la costante asintotica di convergenza della Regula Falsi si cal-

cola utilizzando l’espressione M = | f 00(ª)2 f 0(ª)

|0.618. Da f 0(x) = 1x+2x °1 segue f 0(1) = 2 e f 00(x) =° 1

x2 +2,

da cui f 00(1) = 1, per cui M = 14

0.618= 0.4245481.

59

Page 66: Calcolo Numerico
Page 67: Calcolo Numerico

CA

PI

TO

LO 5

INTERPOLAZIONE

Non vi è alcuna incompatibilità fral’esatto e il poetico. Il numero ènell’arte come nella scienza.L’algebra è nell’astronomia el’astronomia confina con la poesia.L’anima dell’uomo ha tre chiavi cheaprono tutto: la cifra, la lettera, lanota. Sapere, pensare, sognare.

Victor Hugo

5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.2 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625.3 Interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.3.1 Funzioni base monomiali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635.3.2 Polinomi di Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655.3.3 Formula dell’errore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665.3.4 Differenze divise e formula di Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

5.4 Considerazioni sull’interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715.4.1 Fenomeno di Runge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715.4.2 Malcondizionamento nell’interpolazione con funzioni base monomiali . . . . . . . . . . 72

5.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5.1 Introduzione

Il censimento della popolazione italiana, dall’unità d’Italia al 2001, ha visto un incremento dellapopolazione, come si può vedere in Tabella 5.1. Gli stessi dati sono riportati in Figura 5.1.

Ci si può chiedere se questi dati possono essere utili (considerandoli tutti o solo una parte) per dare unaragionevole stima della popolazione nel 1975 o nel 1995 o per predire a quanto ammonterà nel 2015. Per farciò, possiamo seguire due strade:

cercare una funzione che passi esattamente per i dati assegnati (detti anche punti di appoggio): questoprocedimento prende il nome di interpolazione ed è il soggetto di questo Capitolo;

61

Page 68: Calcolo Numerico

5. INTERPOLAZIONE

Anno 1861 1871 1881 1901 1911 1921 1931Popolazione 22176 27300 28952 32963 35842 39397 41043

Anno 1936 1951 1961 1971 1981 1991 2001Popolazione 42398 47516 50624 54137 56557 56778 56996

Tabella 5.1: Dati forniti dall’ISTAT, tratti da http://dawinci.istat.it/daWinci/jsp/dawinci.jsp:popolazione residente dell’Italia ai confini ai confini attuali ai censimenti dal 1861 al 2001. Popolazione inmigliaia.

Figura 5.1: Censimento della popolazione residente in Italia.

cercare una funzione che, “in qualche modo” passi vicino ai dati assegnati: si parla di approssimazione(che vedremo nel prossimo Capitolo).

In particolare, dato l’insieme dei punti (xi , yi ), i = 0,1, . . . ,n, dove yi è il valore assunto da una funzione fin xi o il valore di un dato sperimentale, cerchiamo una funzione v(x) che, in maniera ragionevole si addicaall’insieme dei dati. Se i dati sono accurati, ha senso richiedere che la funzione interpoli i dati (cioè passiesattamente per le coppie di punti): v(xi ) = yi . Nell’approssimazione, invece, si cerca una funzione piùsemplice v(x) che sia vicina ad una funzione più complicata f (x) o ad una serie di dati.

5.2 Interpolazione

Una funzione di interpolazione v(x) serve per vari scopi.Possiamo usare la v(x) per trovare valori approssimati y in punti x diversi da quelli assegnatix0, x1, . . . xn . Se x si trova all’interno dell’intervallo che contiene le ascisse dei dati assegnati si parladi interpolazione. Se invece x si trova all’esterno dell’intervallo si ha estrapolazione. Nell’esempio dellapopolazione italiana, si interpolano i dati per stimare la popolazione nel 1975 o nel 1995, si applicainvece un procedimento di estrapolazione se si vuole stimare la popolazione del 2012.Se le coppie di dati assegnati si riferiscono ad una funzione f (x), la funzione di interpolazione puòessere utile per approssimare le derivate o gli integrali della f .

Assumiamo che la funzione v di interpolazione sia una combinazione lineare di funzioni base di unqualche appropriato spazio di funzioni, cioè si possa scrivere come

v(x) = c0¡0(x)+ . . .+ cn¡n(x)

62

Page 69: Calcolo Numerico

5.3. Interpolazione polinomiale

dove ci , i = 0,1, . . . ,n sono i coefficienti incogniti (o parametri) da determinare in base ai dati in possesso,mentre ¡i sono le funzioni base che assumiamo linearmente indipendenti1.

Esempi di interpolazione sono dati dall’interpolazione polinomiale, dall’interpolazione polinomiale atratti, dall’interpolazione trigonometrica. Noi ci limitiamo a studiare l’interpolazione polinomiale: date n+1coppie di punti (xi , yi ), per i = 0,1, . . . ,n, andremo a cercare un polinomio p(x) di grado n per cui p(xi ) = yi .Parleremo, dunque, di polinomio di interpolazione p(x) (v(x) ¥ p(x)).

Il processo di interpolazione si basa su due stadi:costruire la funzione interpolante, cioè determinare i coefficienti c0, c1, . . . ,cn per un’assegnata base¡0,¡1, . . . ,¡n ;valutare la funzione interpolante in un assegnato punto x.

Il primo punto è fatto una volta per tutte, una volta fissata la base e noto l’insieme dei punti da interpolare. Ilsecondo punto può essere applicato tutte le volte che si vuole valutare la funzione interpolante.

5.3 Interpolazione polinomiale

L’interpolazione polinomiale è il tipo di interpolazione più semplice. I polinomi, infatti, sono facili dacostruire e da valutare, sono facili da sommare e moltiplicare (e il risultato è sempre un polinomio) e sonoaltrettanto facili da differenziare e integrare (e il risultato è sempre un polinomio).

Sia p(x) = pn(x) un polinomio di grado n dato da

pn(x) = c0 + c1x + . . .+ cn xn

Date n +1 coppie di punti (x0, y0), (x1, y1), . . ., (xn , yn), vogliamo trovare gli n +1 coefficienti c0,c1, . . .cntali che p(xi ) = yi , i = 0, . . . ,n.

Ricordiamo che, un polinomio di grado n ha n+1 coefficienti e che, date n+1 coppie di punti, il polinomiointerpolatore sarà di grado n.

Assumiamo, inoltre, che le ascisse delle coppie dei punti siano distinte, cioè xi 6= x j , per i 6= j .

5.3.1 Funzioni base monomiali

Utilizziamo come funzioni base i monomi x0, x1, x2, . . . , xn .

Esempio 5.3.1 Sia n +1 = 2: abbiamo quindi due coppie di dati

xi 1 2yi 1 3

Cerchiamo quindi un polinomio di primo grado (una retta) che passi per i punti assegnati, della formap(x) = p1(x) = c0 + c1x.Le condizioni di interpolazione diventano:

p1(x0) = y0 () c0 +1c1 = 1

p1(x1) = y1 () c0 +2c1 = 3

Abbiamo due equazioni in due incognite c0 e c1. Risolvendo il sistema 2£ 2 otteniamo c1 = 2 e c0 = °1,quindi p1(x) = 2x °1.

1Le funzioni ¡0,¡1, . . . ,¡n si dicono linearmente indipendenti se vale: c0¡0(x) + . . .cn¡n (x) ¥ 0 per ogni x se e solo se tutti icoefficienti sono nulli c0 = . . . = cn = 0.

63

Page 70: Calcolo Numerico

5. INTERPOLAZIONE

Figura 5.2: Interpolazione lineare e quadratica

Esempio 5.3.2 Consideriamo adesso un ulteriore coppia di punti per cui i dati che abbiamo sono n +1 = 3e

xi 1 2 4yi 1 3 3

Il problema è ora diverso rispetto a quello appena risolto, perchè la terza coppia di punti specifica unavalore y2 ben diverso da quello predetto da p1 in x2 = 4. Difatti p1(x2) = 7, nell’esempio precedente, mentreora al valore di x2 = 4 deve corrispondere y2 = 3.Cerchiamo il polinomio di grado 2, quindi, della forma p2(x) = c0 + c1x + c2x2 che passa attraverso i puntidati.Le condizioni di interpolazione adesso sono:8

><

>:

p2(x0) = c0 +1c1 +1c2 = 1

p2(x1) = c0 +2c1 +4c2 = 3

p2(x2) = c0 +4c1 +16c2 = 3Abbiamo un sistema lineare di 3 equazioni in 3 incognite, la cui soluzione è:

c0 =°73

, c1 = 4, c2 =°23

.

Il polinomio è p2(x) = (°2x2 +12x °7)/3. Per x = 3 si ha p2(3) = 113

= 3.666666667, valore ben diverso da

p1(3) = 5. Del resto le curve che abbiamo ottenuto coincidono solo nei punti d’appoggio comuni a entrambe,una è una retta, l’altra è un polinomio di secondo grado (si veda Figura 5.2).

Generalizzando gli esempi precedenti, date n +1 coppie di punti, il polinomio di interpolazione di gradon sarà costruito risolvendo un sistema lineare di n equazioni nelle n incognite c0,c1, . . . ,cn :

8>>>>>>>><

>>>>>>>>:

pn(x0) = y0 () c0 + c1x0 + c2x20 + . . .+ cn xn

0 = y0

pn(x1) = y1 () c0 + c1x1 + c2x21 + . . .+ cn xn

1 = y1

pn(x2) = y2 () c0 + c1x2 + c2x22 + . . .+ cn xn

2 = y2...

pn(xn) = yn () c0 + c1xn + c2x2n + . . .+ cn xn

n = yn

64

Page 71: Calcolo Numerico

5.3. Interpolazione polinomiale

In forma compatta, sotto forma matriciale2 le equazioni del sistema si possono scrivere come0

BBBBBB@

1 x0 x20 . . . xn

01 x1 x2

1 . . . xn1

1 x2 x22 . . . xn

2...

......

...1 xn x2

n . . . xnn

1

CCCCCCA

0

BBBB@

c0c1...

cn

1

CCCCA=

0

BBBB@

y0y1...

yn

1

CCCCA

La matrice dei coefficienti è una matrice ben nota in letteratura e prende il nome di matrice di Van-dermonde.3 È una matrice con determinante diverso da zero, e quindi il sistema ammette una ed una solasoluzione. Osserviamo che la prima colonna ha tutti gli elementi uguali a 1, la seconda colonna ha le ascissedei punti di appoggio, la terza colonna ha i quadrati di esse, e così via.

Perciò, date n+1 coppie di punti di appoggio (xi , yi ), i = 0, . . . ,n, con ascisse distintexi , esiste un unico polinomio interpolatore p(x) di grado al più n tale che p(xi ) = yi ,i = 0, . . . ,n.

Tuttavia, la matrice di Vandermonde non ha buone proprietà: difatti è una matrice malcondizionata, equesto lo si osserva al crescere di n in quanto la soluzione del sistema diventa inaccurata4, qualunque metodovenga utilizzato per risolverlo.

Questo approccio ci è servito per dimostrare che il polinomio di interpolazione esiste ed è unico, manon è utile nella pratica a causa del malcondizionamento. Sarebbe preferibile, quindi, poter usare funzionibase diverse dai monomi in modo da evitare il malcondizionamento, avere meno operazioni dal punto divista computazionale e poter manipolare in maniera più efficiente le funzioni basi ¡i in vista di una loroapplicazione nella differenziazione e integrazione numerica.

5.3.2 Polinomi di Lagrange

Scriviamo il polinomio p(x) con i coefficienti ci uguali alle ordinate dei punti d’appoggio yi , ci ¥ yi :

p(x) = pn(x) = y0¡0(x)+ . . . yn¡n(x)

Una base di funzioni che ci permette una simile rappresentazione è data dai polinomi di Lagrange.5

I polinomi di Lagrange L j (x), per j = 0,1, . . . ,n sono polinomi di grado n che, nei nodi xi , soddisfano larelazione

L j (xi ) =(

0 se i 6= j

1 se i = j

Allora il polinomio pn(x) = Pnj=0 L j (x) · y j è tale che pn(xi ) = yi cioè soddisfa la condizione di

interpolazione, per ogni i = 0, . . . ,n.

2Questo argomento verrà approfondito nel Capitolo 7, dove rimandiamo per i dettagli.3Alexandre-Theophile Vandermonde, (1735-1796), abbandonò una carriera da violinista per dedicarsi alla matematica quando

aveva 35 anni. Si occupò di vari problemi di algebra, di topologia, calcolo combinatoriale, e teoria dei determinanti.4Una matrice A è malcondizionata quando, a piccole variazioni sui coefficienti della matrice, corrispondono grandi variazioni nella

soluzione del sistema lineare Ax = b5 Joseph Louis Lagrange (1736-1813) nacque a Torino (come Giuseppe Luigi Lagrangia) e si trasferì in Francia, a Parigi, dove diven-

ne cittadino francese adottando la traduzione francese del suo nome. Matematico e astronomo, diede un importante contributo allameccanica classica e celeste e alla teoria dei numeri.

65

Page 72: Calcolo Numerico

5. INTERPOLAZIONE

I polinomi di Lagrange sono definiti dalla relazione:6

L j (x) =nY

k=0k 6= j

(x °xk )(x j °xk )

In forma estesa abbiamo

L j (x) =(x °x0) · · · (x °x j°1)(x °x j+1) · · · (x °xn)

(x j °x0) · · · (x j °x j°1)(x j °x j+1) · · · (x j °xn)=

nY

k=0k 6= j

x °xk

x j °xk

Esempio 5.3.3 Siano date le tre coppie di punti dell’esempio precedente (1,1), (2,3), (4,3). I polinomi diLagrange sono:

L0(x) = (x °2)(x °4)(1°2)(1°4)

= (x °2)(x °4)3

L1(x) = (x °1)(x °4)(2°1)(2°4)

=° (x °1)(x °4)2

L2(x) = (x °1)(x °2)(4°1)(4°2)

= (x °1)(x °2)6

Il polinomio si scrive, quindi, come

p2(x) = L0(x) ·1+L1(x) ·3+L2(x) ·3 = 13

(x °2)(x °4)° 32

(x °1)(x °4)+ 36

(x °1)(x °2)

Raccogliendo i termini ritroviamo p2(x) = (°2x2 +12x °7)/3, lo stesso polinomio ottenuto con le funzionibase monomiali, e ciò è dovuto all’unicità del polinomio interpolatore.

5.3.3 Formula dell’erroreFormula

dell’errore Supponiamo, ora, che le ordinate yi siano i valori di una funzione f valutata nei punti di appoggio xi . Co-nosciamo, quindi, una funzione f e di questa funzione vogliamo fare l’interpolazione sostituendola medianteun polinomio di grado n tale che p(xi ) = f (xi ) = yi , i = 0, . . . ,n.

L’errore che si commette interpolando la funzione f con un polinomio p(x) di grado n vale

f (x)°p(x) = f (n+1)(ª(x))(n +1)!

nY

i=0(x °xi )

6Ricordiamo che, dati n valori w1, w2, . . . , wn usiamo la seguente simbologia per indicare la loro somma e il loro prodotto, rispetti-vamente:

nX

i=1wi = w1 +w2 +w3 + . . .+wn

nY

i=1wi = w1 ·w2 ·w3 · . . . ·wn

.

66

Page 73: Calcolo Numerico

5.3. Interpolazione polinomiale

Figura 5.3: Polinomi di Lagrange L0(x), L1(x), L2(x), con x0 = 1, x1 = 2, x2 = 4.

Proviamo questo risultato introducendo il polinomio F (x) di grado n + 1 che si annullanelle n +1 ascisse dei dati assegnati.

F (x) =nY

k=0(x °xk )

Consideriamo, inoltre, un punto t distinto dai punti di appoggio e compreso nell’intervalloI individuato dai valori minimo e massimo delle ascisse dei punti di appoggio.

Definiamo la quantità S che dipende da t , data da S = f (t )°p(t )F (t )

e la funzione G(x) = f (x)°p(x)°SF (x).

La funzione G si annulla non solo negli n+1 punti d’appoggio poichè G(xi ) = f (xi )°p(xi )°SF (xi ) = 0 peri = 0, . . . ,n ma anche in t a causa di come è stato definito S. Si annulla, quindi, in n +2 punti.Per il teorema di Rolle, la derivata prima si annulla n +1 volte in I . Applicando ripetutamente il teoremadi Rolle sulle derivate successive, si arriva alla derivata n +1-sima di G, che si annulla almeno 1 volta in I .Sia ª il punto in cui G (n+1)(ª) = 0. Maa

G (n+1)(ª) = f (n+1)(ª)°S(n +1)!Si ha perciò:

f (n+1)(ª)°S(n +1)! = 0 ovverof (t )°p(t )

F (t )= S = f (n+1)(ª)

(n +1)!Considerando, ora, x al posto di t , e scrivendo ª come funzione di x (in quanto il valore di ª dipende da x)e scrivendo in forma estesa il polinomio F (x), otteniamo

f (x)°p(x) = f (n+1)(ª(x))(n +1)!

nY

i=0(x °xi )

aLa derivata n+1-sima di un polinomio di grado n è una quantità nulla, mentre la derivata n+1-sima di un polinomio di gradon +1, quale è F (x), vale (n +1)!.

Abbiamo quindi una formula per l’errore, detta anche formula del resto. Il resto normalmente è incognitoma se conosciamo la f e una maggiorazione della f (n+1), allora possiamo maggiorare il resto.

Allo stesso modo, possiamo limitare l’errore di interpolazione se troviamo un limite superiore per |F (x)|.

67

Page 74: Calcolo Numerico

5. INTERPOLAZIONE

5.3.4 Differenze divise e formula di NewtonDifferenze

divise eformula di

Newton

Uno dei punti forti della rappresentazione di Lagrange è che se alcuni dati cambiano (ad esempio il valoredi y j per un certo j ) allora il cambiamento è immediatamente visibile nell’intero polinomio di interpolazione.Uno dei punti deboli, invece, è la procedura per valutare pn(x). Con la formula di Newton abbiamo un utilecompromesso.

Le funzioni base che ora consideriamo sono

¡ j (x) =j°1Y

i=0(x °xi ) j = 0,1, . . . ,n

Quindi vogliamo scrivere il polinomio di interpolazione come:

p(x) = c0 + c1(x °x0)+ c2(x °x0)(x °x1)+ . . .+ cn(x °x0)(x °x1) · . . . (x °xn°1)

dove c0, c1 . . .cn sono delle costanti da definire in modo opportuno.

Esempio 5.3.4 Consideriamo sempre le tre coppie di punti degli esempi precedenti, (1,1), (2,3) e (4,3).Per costruire p2(x) abbiamo bisogno di ¡0, ¡1 e ¡2:

¡0(x) = 1

¡1(x) = (x °x0) = (x °1)

¡2(x) = (x °x0)(x °x1) = (x °1)(x °2)

La condizione di interpolazione in x0 = 1 porta a:f (x0) = 1 = p2(x0) = p2(1) = c0¡0(1)+ c1¡1(1)+ c2¡2(1) = c0 ·1+ c1 ·0+ c2 ·0

Quindi c1 = 1 = f (x0).In x1 = 2 abbiamo:

f (x1) = 3 = p2(x1) = p2(3) = f (x0)+ c1¡1(2)+ c2¡2(2) = f (x0)+ c1 ·1+ c2 ·0

Ricaviamo quindi c1 = f (x1)° f (x0)x1 °x0

= 3°12°1

= 2. Chiamiamo questa quantità differenza divisa del primo

ordine tra x0 e x1 e la indichiamo con f [x0, x1]. Quindi

f [x0, x1] = f (x1)° f (x0)x1 °x0

Infine,f (x2) = 3 = p2(x2) = p2(4) = f (x0)+ f [x0, x1]¡1(4)+ c2¡2(4)

= f (x0)+ f [x0, x1](4°1)+ c2(4°1)(4°2)Per ottenere una formula per c2 che abbia carattere generale, riscriviamo l’equazione precedente utilizzandoi simboli x0, x1, x2 per le ascisse.In x1 si ha f (x1) = p2(x1) = f (x0)+ f [x0, x1](x1 °x0).In x2 si ha f (x2) = p2(x2) = f (x0)+ f [x0, x1](x2 °x0)+ c2(x2 °x0)(x2 °x1).Sottraendo membro a membro la prima equazione dalla seconda si ricava:

f (x2)° f (x1) = f [x0, x1](x2 °x0 °x1 +x0)+ c2(x2 °x0)(x2 °x1)

f (x2)° f (x1) = f [x0, x1](x2 °x1)+ c2(x2 °x0)(x2 °x1)Quindi

f (x2)° f (x1)° f [x0, x1](x2 °x1) = c2(x2 °x0)(x2 °x1)

f (x2)° f (x1)x2 °x1

° f [x0, x1]x2 °x1

x2 °x1= c2(x2 °x0)

f (x2)° f (x1)x2 °x1

° f [x0, x1] = c2(x2 °x0)

68

Page 75: Calcolo Numerico

5.3. Interpolazione polinomiale

Maf (x2)° f (x1)

x2 °x1= f [x1, x2] è la differenza divisa del primo ordine tra x1 e x2 da cui

f [x1, x2]° f [x0, x1] = c2(x2 °x0) =) c2 =f [x1, x2]° f [x0, x1]

x2 °x0La quantità chiamata c2 prende il nome di differenza divisa del secondo ordine e si indica con

f [x0, x1, x2] = f [x1, x2]° f [x0, x1]x2 °x0

.

Facendo le opportune sostituzioni si ricava c2 = °46

= °23

. Quindi, p2(x) = f (x0) + f [x0, x1](x ° x0) +

f [x0, x1, x2](x °x0)(x °x1) Nell’esempio considerato: p2(x) = 1+2(x °1)° 23

(x °1)(x °2)

Date le stesse coppie di punti, abbiamo visto come cambia la rappresentazione (usando come funzionibase i monomi, poi i polinomi di Lagrange e ora la formulazione di Newton) ma il polinomio finale è semprelo stesso essendo unico il polinomio interpolatore.

Da questo esempio, si può vedere come la rappresentazione secondo Newton sia di tipo ricorsivo: il po-linomio p1(x) = f (x0)+ f [x0, x1](x ° x0) (che si ha arrestandosi ai primi due passi del procedimento appenaeffettuato) è un polinomio, in tal caso una retta, che interpola i dati (x0, y0), e (x1, y1). Il polinomio p2(x) è da-to dalla somma di p1(x) e del termine f [x0, x1, x2](x°x0)(x°x1). Quindi, una volta determinato il polinomiopn°1 che interpola i primi n dati, possiamo usare questa rappresentazione per costruire pn che interpola idati precedenti cui si aggiunge la coppia (xn , yn).

Il coefficiente c j del polinomio interpolatore di Newton si chiama differenza divisa di ordine j e vieneindicata con f [x0, x1, . . . , x j ].

Perciò:

f [x0] = c0, f [x0, x1] = c1, . . . , f [x0, x1, . . . , xn] = cn

La notazione utilizzata ci permette di capire anche da quali coppie di punti dipende il coefficiente c j .

Dati i punti x0, x1, . . . , xn , per indici i e j arbitrari con 0 ∑ i ∑ j ∑ n, si ha

f [xi ] = f (xi )

f [xi , . . . , x j ] =f [xi+1, . . . x j ]° f [xi , . . . , x j°1]

x j °xi

La formula interpolatoria alle differenze divise di Newton è dunque data da

pn(x) = f [x0]+ f [x0, x1](x °x0)+ f [x0, x1, x2](x °x0)(x °x1)+ . . .

+ f [x0, x1, . . . , xn](x °x0)(x °x1) · · · (x °xn°1)

Da un punto di vista computazionale i coefficienti si ricavano mediante la tabella delle differenze di-vise, tenendo presente che per calcolare f [x0, x1, . . . , xn] dobbiamo aver calcolato tutte le differenze divisef [x j°k , . . . , x j ], con 0 ∑ k ∑ j ∑ n.

69

Page 76: Calcolo Numerico

5. INTERPOLAZIONE

xi f [·] f [·, ·] f [·, ·, ·] f [·, ·, ·, ·] f [·, ·, ·, ·, ·]x0 f (x0)

f [x0, x1]x1 f (x1) f [x0, x1, x2]

f [x1, x2] f [x0, x1, x2, x3]x2 f (x2) f [x1, x2, x3] f [x0, x1, x2, x3, x4]

f [x2, x3] f [x1, x2, x3, x4]

x3 f (x3) f [x2, x3, x4]...

f [x3, x4]...

x4 f (x4)...

......

...

I coefficienti della diagonale principale sono i coefficienti c j del polinomio interpolatore di Newton.

Esempio 5.3.5 Costruiamo la tabella delle differenze divise per i dati (1,1), (2,3) e (4,3).

xi f [·] f [·, ·] f [·, ·, ·]1 1

2

2 3 °23

04 3

Il polinomio p2(x) si scrive: p2(x) = 1+2(x °1)° 23

(x °1)(x °2).

Se vogliamo aggiungere altri dati, per esempio, la coppia (5,4), dobbiamo aggiungere una riga alla tabelladella differenza divisa e un termine al polinomio che abbiamo già ricavato per ottenere quello di gradosuperiore interpolante tutti i dati che abbiamo a disposizione.

xi f [·] f [·, ·] f [·, ·, ·] f [·, ·, ·, ·]1 1

2

2 3 °23

014

4 313

15 4

Il polinomio p3(x) è p3(x) = p2(x)+ 14

(x °1)(x °2)(x °4).

Il concetto di differenza divisa può essere visto come un’estensione del concetto di derivata di una fun-zione. Si ha, infatti, che, per f derivabile, la diffenza divisa del primo ordine f [x0, x1] può essere vista comeun rapporto incrementale e quindi, al limite per x1 ! x0, si ha f 0(x0).

70

Page 77: Calcolo Numerico

5.4. Considerazioni sull’interpolazione polinomiale

La differenza divisa k-sima e la derivata k-sima di f sono legate tra loro. Si può provare, infatti, per k ∏ 1Derivatak-sima della

fche vale la relazione

f [x0, x1, . . . , xk ] = f (k)(ª)k !

dove ª è un punto appartente all’interno dell’intervallo individuato dagli estremi di x0, . . . , xk . Quando i punticoincidono, si ha

f [x0,x0,...,x0| {z }k+1 volte

] = f (k)(x0)k !

Questa formula serve per calcolare il polinomio di interpolazione che interpola non solo una certa funzionef ma anche le sue derivate in alcuni punti assegnati (si veda l’esercizio 5.5.3 a fine Capitolo).

Se al polinomio pn(x) aggiungiamo la coppia di dati (x, f (x)) si ha pn+1(x) = f (x) = pn(x) + Formuladell’erroref [x0, x1, . . . , xn , x](x ° x0)(x ° x1) · . . . (x ° xn). L’ultima differenza divisa non si può calcolare, poichè dipende

da x (che è la nostra variabile), ma ci è utile per capire quanto vale l’errore che commettiamo nell’approssi-mare f (x) mediante il polinomio interpolatore, applicando la rappresentazione di Newton. Inoltre, dato cheil polinomio interpolatore è unico (fissate le coppie di dati del problema), anche l’errore che si commette è lostesso, qualunque sia la strategia utilizzata per arrivare ad esso. Quindi possiamo eguagliare l’errore trovatoutilizzando i polinomi di Lagrange con l’errore trovato nella rappresentazione di Newton, ottenendo:

f (n+1)(ª(x))(n +1)!

nY

i=0(x °xi ) = f [x0, x1, . . . , xn , x]

nY

i=0(x °xi )

5.4 Considerazioni sull’interpolazione polinomiale

5.4.1 Fenomeno di Runge

Data una funzione f , si pensa che il polinomio di interpolazione possa approssimare bene la funzione,soprattutto se si aumenta il numero dei punti di appoggio. In realtà questo non è sempre vero e un semplice

e famoso esempio ce lo fa capire. Sia data la funzione di Runge7 f (x) = 11+x2 e consideriamo il polino- Fenomeno di

Rungemio di interpolazione di questa funzione per valori crescenti di n prendendo punti di appoggio equidistantinell’intervallo [°5,5]. Partiamo da n +1 = 2 con i punti equidistanti x0 =°5, x1 = 0 e x2 = 5. Si ha la tabella

xi °5 0 5yi = f (xi ) 3.846154e °2 1. 3.846154e °2

Costruiamo quindi il polinomio di interpolazione p2(x) (utilizzando l’approccio di Lagrange o di Newton, irisultati non cambiano). Raddoppiamo il numero dei punti aggiungendo un punto tra x0 e x1 e uno tra x1 ex2. Abbiamo n +1 = 5 e i valori della tabella

xi °5 °2.5 0 2.5 5yi = f (xi ) 3.846154e °2 1.379310e °1 1. 1.379310e °1 3.846154e °2

Con lo stesso procedimento, costruiamo i polinomi di interpolazione di grado 8 e 16. In Figura 5.4 sono ri-portati i grafici della funzione di Runge (in nero) e dei polinomi interpolanti di grado 2, 4 e 8. Si può osservareche solo in un sottointervallo di [°5,5] al crescere di n, i polinomi convergono alla funzione. Agli estremidell’intervallo [°5,5] si hanno oscillazioni che aumentano sempre più al crescere di n. Infatti in Figura 5.5(a sinistra) non si riesce più a distinguere il profilo della funzione di Runge perchè il polinomio di interpo-lazione di grado 16 ha delle oscillazioni molto alte. Tuttavia, se restringiamo questo grafico in un intornodell’origine, possiamo vedere come il polinomio p16 si avvicini bene alla funzione – si veda la Figura 5.5 (adestra)! L’esempio di Runge è utile per capire che la scelta dei nodi equidistanti non si rivela sempre la sceltagiusta e che altri tipi di interpolazione possono dare risultati migliori. Per indagare ulteriormente su questoproblema, si rimanda alla letteratura specializzata del settore.

7Carl Runge (1856-1927) fu un matematico tedesco. Fu studente di Weierstrass, Kirchhoff, Helmholtz. Iniziò poi a collaborare conKronecker e poi si dedicò in particolare allo studio della soluzione numerica di equazioni algebriche e alla spettroscopia.

71

Page 78: Calcolo Numerico

5. INTERPOLAZIONE

Figura 5.4: Funzione di Runge e polinomi interpolanti di grado 2, 4 e 8.

Figura 5.5: Funzione di Runge e polinomio interpolante di grado 16 su tutto l’intervallo [°5,5] (a sinistra) e inun sottointervallo (a destra)

5.4.2 Malcondizionamento nell’interpolazione con funzioni base monomiali

All’inizio di questo Capitolo, abbiamo introdotto il polinomio di interpolazione mediante funzioni ba-se monomiali: il problema dell’interpolazione veniva risolto mediante un sistema lineare la cui matrice, diVandermonde, è malcondizionata.

Vediamo di capire questo malcondizionamento mediante un esempio. Si voglia studiare l’interpolazionedei seguenti dati

xi 1010.5 1011.5 1012.5 1013 1014 1015yi 4 2.5 2.5 2 2 0

Confrontando i vari algoritmi di interpolazione, osserveremo che gli algoritmi di Lagrange e delle diffe-renze divise di Newton danno buoni risultati. Al contrario, il metodo che porta alla costruzione della matricedi Vandermonde dà risultati disastrosi, come si può vedere in Figura 5.6. Eppure, dal punto di vista teorico irisultati dovrebbero essere identici.

72

Page 79: Calcolo Numerico

5.5. Esercizi

Figura 5.6: Effetti del malcondizionamento

Perchè si hanno questi risultati? Bisogna tener conto di tre aspetti: il calcolo della matrice di Vandermon-de; la soluzione del sistema lineare per ricavare i coefficienti del polinomio con funzioni base monomiali; ilcalcolo dei valori del polinomio.

La matrice di Vandermonde consiste di colonne che crescono di colonna in colonna - 1, xi , x2i , x3

i , . . .,x5

i . Per questo caso test, si va da 1 a elementi dell’ordine di 1015. La matrice è molto mal condizionata.Perciò la soluzione del sistema lineare non può dare risultati affidabili e il vettore che fornisce i coefficienti delpolinomio interpolatore è completamente errato. Ciò porta anche al fenomeno della cancellazione numericanel calcolo del polinomio di interpolazione, per cui si ha una significativa perdita di accuratezza e il graficorisultante presenta un profilo altamente oscillante.

5.5 Esercizi

Esercizio 5.5.1 Sia data la tabella seguente:

xi -1 0 2 3 4f (xi ) 9 0 0 15 84

(a) Scrivere la tabella delle differenze divise.(b) Trovare il polinomio interpolatore (con la formula di Newton) di grado non superiore a 4.

Svolgimento(a) La tabella delle differenza divise è:(b) Il polinomio di Newton di grado 4 che interpola i dati assegnati è dunque (prendendo i valori della

73

Page 80: Calcolo Numerico

5. INTERPOLAZIONE

xi f (xi ) f (·, ·) f (·, ·, ·) f (·, ·, ·, ·) f (·, ·, ·, ·, ·)-1 9

0 00°9

0° (°1)= °9

2 00°02°0

= 00+9

2° (°1)= 3

3 1515°03°2

= 1515°03°0

= 55°3

3° (°1)= 0.5

4 8484°15

4°3= 69

69°154°2

= 2727°54°0

= 112

11/2°1/24° (°1)

= 1

diagonale principale della tabella)

p(x) = 9°9(x +1)+3(x +1)x +0.5(x +1)x(x °2)+ (x +1)x(x °2)(x °3) == x4 °3.5x3 +3.5x2 °x

Esercizio 5.5.2 Sia data la tabella seguente:

xi 0 0.1 0.8 1.2f (xi ) 1 0.48 1.32 5.32

(a) Scrivere la tabella delle differenze divise.(b) Usando i quattro punti in successione, scrivere i polinomi interpolanti (di Newton) pn(x) di grado

non superiore ad n (con n=0,1,2,3); commentare il risultato.(c) Usando pn(x) stimare, per ogni n, f (0.6) e f 0(0.6).(d) scrivere il polinomio p2(x) con la formula di Lagrange.

Svolgimento

(a) La tabella delle differenza divise è:

xi f (xi ) f (·, ·) f (·, ·, ·) f (·, ·, ·, ·)0 1

0.1 0.480.48°1

0.1=°5.2

0.8 1.321.32°0.48

0.7= 1.2

1.2+5.20.8

= 8

1.2 5.325.32°1.32

0.4= 10

10°1.21.1

= 88°81.2

= 0

74

Page 81: Calcolo Numerico

5.5. Esercizi

(b) I polinomi di Newton di grado 0,1,2 e 3 sono:

p0(x) = 1

p1(x) = 1°5.2x

p2(x) = 1°5.2x +8x(x °0.1) = 8x2 °6x +1

p3(x) = 1°5.2x +8x(x °0.1)+0x(x °0.1)(x °0.8) = 1°5.2x +8x(x °0.1) = p2(x)

Il polinomio p3(x) coincide con p2(x) in quanto p2(x3) = p2(1.2) = f (1.2) = f (x3) cioè il polinomiodi grado 2 interpola non solo i dati (x0, f (x0)), (x1, f (x1)) e (x2, f (x2)) ma anche (x3, f (x3)).

(c) Per le derivate di pn(x), n = 0,1,2 si ha

p 00(x) = 0

p 01(x) =°5.2

p 02(x) = 16x °6

La stima di f (0.6) e f 0(0.6) è:n pn(0.6) p 0

n(0.6)0 1 01 -2.12 -5.22 0.28 3.6

(d) I polimoni di Lagrange per ricavare il polinomio p2 sono dati considerando i valori x0, x1 e x2:

L0(x) = (x °0.1)(x °0.8)(°0.1)(°0.8)

= x2 °0.9x +0.080.08

L1(x) = x(x °0.8)0.1(0.1°0.8)

= x2 °0.8x°0.07

L2(x) = x(x °0.1)0.8(0.8°0.1)

= x2 °0.1x0.56

Il polinomio è:

p2(x) = 1L0(x)+0.48L1(x)+1.32L2(x)

= x2 °0.9x +0.080.08

°0.48x2 °0.8x

0.07+1.32

x2 °0.1x0.56

= 12.5(x2 °0.9x +0.08)°6.857142857(x2 °0.8x)+2.357142857(x2 °0.1x)

e raccogliendo i termini

p2(x) = 8x2 °6x +1

Esercizio 5.5.3 Trovare il polinomio di grado non superiore a 4 che interpola i dati seguenti: f (0) =2, f 0(0) = 7, f 00(0) = 18, f (1) = 27 f 0(1) = 60. Stimare f (0.2) e f 0(0.2).

Svolgimento

75

Page 82: Calcolo Numerico

5. INTERPOLAZIONE

Costruiamo la tabella delle differenze divise tenendo presente che le derivate di una funzione f si possonoavere come limite delle differenze divise:

f [0,0] = f 0(0) = 7 f [0,0,0] = f 00(0)2!

= 9 f [1,1] = f 0(1) = 60

Tenendo conto di queste relazioni tra differenze divise e derivate, nella tabella delle differenzi divise,dobbiamo ripetere per tre volte l’ascissa 0 e due volte l’ascissa 1. Si ottiene:

0 2f 0(0)=7

0 2 f 00(0)/2=9

f 0(0)=718°91°0

=9

0 225°71°0

=1817°91°0

=827°21°0

=2535°18

1°0=17

1 2760°25

1°0=35

f 0(1)= 601 27

Il polinomio è dunque p(x) = 2+7x +9x2 +9x3 +8x3(x °1), vale a dire

p(x) = 8x4 +x3 +9x2 +7x +2.

La stima di f (0.2) è data da: f (0.2) º p(0.2) = 3.7808.Per stimare f 0(0.2) dobbiamo prima calcolare la derivata prima di p. Si ha

p 0(x) = 32x3 +3x2 +18x +7,

da cui f 0(0.2) º p 0(0.2) = 12.056.

76

Page 83: Calcolo Numerico

CA

PI

TO

LO 6

APPROSSIMAZIONE

I numeri governano il mondo.

Platone

6.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776.2 Retta di regressione lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.3 Approssimazione polinomiale ai minimi quadrati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806.4 Approssimazioni di tipo esponenziale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

6.1 Introduzione

La legge di Hooke stabilisce che l’allungamento subito da una molla, costruita con materiale uniforme,è direttamente proporzionale alla forza applicata: F (x) = kx dove k è la costante di proporzionalità, dettacostante elastica, e x rappresenta l’allungamento della molla.

Supponiamo di voler determinare k per una molla che, quando è a riposo, esercita una forza di1.4724811N . Se applichiamo una forza pari a 2.418165N si misura un allungamento pari a 0.042m. Sianoeffettuate diverse misure, ricavando i dati di Tabella 6.1. I dati raccolti non giacciono esattamente su una

x 0.00000 0.04200 0.08000 0.11800 0.15600F 1.472481 2.418165 3.363849 4.309533 5.255217

Tabella 6.1: Dati sperimentali per la legge di Hooke

linea retta. Per approssimare la costante elastica k, potremmo prendere una qualunque coppia di dati e fareil rapporto tra la forza e l’allungamento. In questo modo, tuttavia, non terremmo conto di tutte le misureeffettuate. È più ragionevole trovare la linea retta che meglio approssima tutti i dati sperimentali e utilizzarlaper approssimare il valore di k. Questo tipo di approssimazione sarà l’argomento di questo Capitolo.

A differenza dell’interpolazione, in cui si cerca una funzione che passi esattamente per i dati assegnati,nell’approssimazione si cerca una funzione (più semplice di quella data, se vi è una funzione di partenza) cheapprossimi al meglio i dati assegnati, senza passare esattamente per questi.

Alcuni dei motivi che spingono a cercare una funzione di approssimazione piuttosto che di interpolazionesono questi:

77

Page 84: Calcolo Numerico

6. APPROSSIMAZIONE

Figura 6.1: Legge di Hooke: i dati sperimentali

xi 1 2 3 4 5 6 7 8 9 10yi 1.2 2.3 4.5 5.1 7 8.5 10.2 13.1 12.5 16.5

Tabella 6.2: Dati sperimentali

i dati a disposizione sono affetti da errore;siamo interessati a vedere l’andamento dei dati su lunga scala, in una visione globale1

vogliamo che la funzione dipenda da pochi parametri, sebbene questi siano determinati considerandotutti i dati a disposizione.

Nel seguito studieremo l’approssimazione ai minimi quadrati.

6.2 Retta di regressione lineare

Supponiamo di avere i 10 dati sperimentali della Tabella 6.2 (quindi n +1 = 10). La Figura 6.2 (a sinistra)mostra il grafico delle coppie di punti: appare evidente che la relazione tra x e y è di tipo lineare. Il motivoper cui i dati non sono esattamente su una retta è dovuto ad errori nei dati. Non ha senso, quindi, cercare unafunzione che passi esattamente per i dati assegnati (come accade nell’interpolazione), perchè una funzionedel genere introdurrebbe oscillazioni prive di significato fisico: lo vediamo andando a costruire il polinomiodi interpolazione di grado 9 che passa esattamente per i dati e che vediamo in Figura 6.2 (a destra). Cerchiamoallora una retta (funzione lineare, poichè abbiamo visto che i dati hanno una relazione di tipo lineare) chemeglio approssima i dati senza dover coincidere con essi. Sia p1(x) = a0 +a1x la retta che andiamo cercando(dobbiamo quindi capire come trovare i due coefficienti a0 e a1). Allora p1(xi ) = a0 +a1xi , per i = 0,1, . . . ,nrappresenta il valore sulla retta che deve approssimare il valore yi dato dal problema. Per ogni dato sperimen-tale, per i = 0,1, . . . ,n, possiamo misurare lo scarto che scaturisce dall’approssimare yi mediante a0 + a1xi .Nell’approccio ai minimi quadrati, si cerca di minimizzare la somma dei quadrati delle differenze tra i valoridati yi e i valori corrispondenti p1(xi ) sulla retta; si cerca, cioè, di minimizzare la somma dei quadrati degli

1 Se si hanno a disposizione n = 100 dati, anche molto accurati, una funzione interpolante può dare una buona idea localmente,mentre una funzione approssimante data da una retta fornisce una migliore idea del comportamento su lunga scala dei dati.

78

Page 85: Calcolo Numerico

6.2. Retta di regressione lineare

Figura 6.2: Dati sperimentali (a sinistra) della Tabella 6.2 e polinomio di interpolazione (a destra).

scarti. Introduciamo, quindi la funzione che dipende dai coefficienti incogniti a0 e a1.

S(a0, a1) =nX

i=0

£(a0 +a1xi )° yi

§2

Per minimizzare questa funzione, occorre porre le derivate parziali della S rispetto ad a0 e a1 uguali a zero.2

Si pone dunque

0 = @S(a0, a1)@a0

= @

@a0

nX

i=0

£(a0 +a1xi )° yi

§2 = 2nX

i=0

£(a0 +a1xi )° yi

§

0 = @S(a0, a1)@a1

= @

@a1

nX

i=0

£(a0 +a1xi )° yi

§2 = 2nX

i=0

£(a0 +a1xi )° yi

§xi

Queste equazioni si semplificano nel sistema delle cosiddette equazioni normali:(

(n +1)a0 +a1Pn

i=0 xi =Pn

i=0 yi

a0Pn

i=0 xi +a1Pn

i=0 x2i =Pn

i=0 xi yi

Introducendo la notazione A12 =Pn

i=0 xi , A22 =Pn

i=0 x2i , b1 =

Pni=0 yi e b2 =

Pni=0 xi yi e osservando che la

matrice del sistema è simmetrica (A12 = A21), la soluzione è data da:

a0 =A22b1 ° A12b2

(n +1)A22 ° A212

a1 =(n +1)b2 ° A12b1

(n +1)A22 ° A212

Nell’esempio proposto, per calcolare la retta di approssimazione ai minimi quadrati, dobbiamo calcolarei coefficienti delle equazioni normali. In Tabella 6.3 poniamo i valori che servono per risolvere il sistema: lasoluzione è a0 =°0.87333333 e a1 = 1.62969697. La retta è rappresentata in Figura 6.3.

La retta che abbiamo appena costruito è la retta che minimizza gli scarti verticali, supponendo affettida errore le ordinate delle coppie di punti a disposizione. Essa prende pure il nome di retta di regressionelineare sugli scarti verticali.

Osserviamo che il baricentro dei punti assegnati giace sulla retta ai minimi quadrati, in quanto conside- Sulbaricentrorando la prima equazione del sistema si ha, per X = Pn

i=0 xi /(n +1) e Y = Pni=0 yi /(n +1) (le coordinate del

baricentro dei punti assegnati):

a0 +a1X = Y

2Per funzioni f (x) di una variabile reale, i punti di massimo o minimo si trovano tra i punti critici della f , per i quali f 0(x) = 0,studiando il segno della f 00. Analogo procedimento si segue per funzioni di due variabili. Per la funzione S(a0, a1) che stiamo studiando,si può provare che i valori (a0, a1) che annullano le derivate parziali della S rappresentano i valori che minimizzano la S stessa. Questoargomento viene approfondito nei corsi di Analisi Matematica.

79

Page 86: Calcolo Numerico

6. APPROSSIMAZIONE

xi yi x2i xi yi

1 1.2 1 1.22 2.3 4 4.63 4.5 9 13.54 5.1 16 20.45 7 25 356 8.5 36 517 10.2 49 71.48 13.1 64 104.89 12.5 81 112.510 16.5 100 165A12 = 55 b1 = 80.9 A22 = 385 b2 = 579.4

Tabella 6.3: Tabella per il calcolo della retta di approssimazione ai minimi quadrati

Figura 6.3: Retta di approssimazione sugli scarti verticali.

Se invece sono affetti da errore le ascisse delle coppie di punti, si può cercare la retta che minimizza gliscarti orizzontali, detta anche retta di regressione lineare sugli scarti orizzontali, (basta scambiare il ruolodelle x con quello delle y per ricavare, con lo stesso procedimento, la retta p1(y) = b0 +b1 y). Il baricentro deipunti assegnati giace anche su questa retta, da cui possiamo concludere che esso è il punto di intersezionedelle due rette che minimizzano gli scarti verticali e orizzontali.

6.3 Approssimazione polinomiale ai minimi quadrati

In generale, avendo a disposizione n+1 coppie di punti, il problema di approssimazione si può ricondurrealla ricerca di un polinomio di approssimazione di grado m, pm(x) = a0 +a1x +a2x2 + . . .+am xm con m < n.Quando n = m il polinomio d’approssimazione coincide con quello d’interpolazione.

80

Page 87: Calcolo Numerico

6.4. Approssimazioni di tipo esponenziale

La funzione da minimizzare è

S(a0, a1, . . . , am) =nX

i=0

£(a0 +a1xi +a2x2

i + . . .+am xmi )° yi

§2

La procedura seguita per la retta viene generalizzata. Questa volta bisogna porre uguali a zero le m+1 derivateparziali della S rispetto ai coefficienti del polinomio pm .

@S@a j

= 0 j = 0,1, . . . ,m

Ricaviamo, quindi

2nX

i=0(a0 +a1xi + . . .+am xm

i ° yi )x ji = 0 per j = 0,1, . . . ,m

In forma estesa possiamo scrivere

a0

nX

i=0x j

i +a1

nX

i=0x j+1

i + . . .+am

nX

i=0x j+m

i =nX

i=0x j

i yi per j = 0,1, . . . ,m

Poichè queste equazioni si hanno per j = 0,1. . . ,m, si ha da risolvere un sistema, che, scritto in formamatriciale, è:

AT Aa = AT b

dove A è una matrice rettangolare (n +1)£ (m +1), data da

A =

0

BBBB@

1 x0 x20 . . . xm

01 x1 x2

1 . . . xm1

......

......

1 xn x2n . . . xm

n

1

CCCCA

Le equazioni del sistema sono dette equazioni normali. Si può provare che la matrice Q = AT A èsimmetrica, definita positiva3 ed è non singolare, quindi il sistema ammette soluzione.

6.4 Approssimazioni di tipo esponenziale

Può capitare che i dati sperimentali abbiano un andamento di tipo esponenziale o ricordino una funzionepotenza della variabile x. Allora si può richiedere che la funzione approssimante abbia una delle due formeseguenti (e, a seconda della rappresentazione, si ha un diverso modello):

y(x) = aebx modello esponenziale

y(x) = axb modello potenza

con a e b opportune costanti. Per ricavare a e b si passa ai logaritmi ricavando l’equazione di una retta i cuicoefficienti sono ottenuti con la procedura di minimizzazione ai minimi quadrati. Da questi, si ritorna poi aicoefficienti delle funzioni di partenza. Vediamo come.

Nel caso del modello esponenziale, passando ai logaritmi (in base naturale) si ha:

ln(y) = ln(a)+bx

Ponendo X = x, Y = ln(y), a0 = ln(a) e a1 = b, si ha un’equazione del tipo Y = a0 +a1X .Quindi, dalle coppie di dati (xi , yi ) i = 0,1, . . . ,n, si deve passare alle coppie (Xi = xi , Yi = ln(yi ))

e su queste coppie si costruisce la retta di approssimazione ai minimi quadrati con la procedura cheabbiamo studiato in Sezione 6.2. Una volta ricavati i coefficienti a0 e a1, si ha a = ea0 e b = a1.

3 Le definizioni di matrice simmetrica e matrice definita positiva sono date nel Capitolo 7.

81

Page 88: Calcolo Numerico

6. APPROSSIMAZIONE

Nel caso del modello potenza, passando ai logaritmi (qualunque sia la base usata, il risultato noncambia) si ha:

log(y) = log(a)+b log(x)

Ponendo X = log(x), Y = log(y), a0 = log(a) e a1 = b, si ha un’equazione del tipo Y = a0 +a1X .Quindi, dalle coppie di dati (xi , yi ) i = 0,1, . . . ,n, si deve passare alle coppie (Xi = log(xi ), Yi =

log(yi )) e su queste coppie si costruisce la retta di approssimazione ai minimi quadrati. Una voltaricavati i coefficienti a0 e a1, si ha b = a1 mentre, con gli opportuni passaggi, si trova il valore di a.

6.5 Esercizi

Esercizio 6.5.1 Sia data la tabella seguente:

xi -1 0 2 3 4f (xi ) 9 0 0 15 84

(a) Trovare la retta ai minimi quadrati che minimizza la somma dei quadrati degli scarti verticali.(b) Trovare la retta ai minimi quadrati che minimizza la somma dei quadrati degli scarti orizzontali.(c) Calcolare il punto di intersezione delle due rette e dire di che punto si tratta.

Svolgimento(a) Il sistema da risolvere per ottenere la retta di approssimazione ai minimi quadrati è:

((n +1)a0 +

Pni=0 xi a1 =

Pni=0 yiPn

i=0 xi a0 +Pn

i=0 x2i a1 =

Pni=0 xi yi

dove n +1 = 5. PoichèP4

i=0 xi = 8,P4

i=0 x2i = 30,

P4i=0 yi = 108 e

P4i=0 xi yi = 372, si ha il sistema

(5a0 +8a1 = 108

8a0 +30a1 = 372

La soluzione è a0 = 3.069767442, a1 = 11.581395349. La retta ai minimi quadrati che minimizza gliscarti verticali è: y = 3.069767442+11.581395349x.

(b) Ricaviamo la retta di approssimazione che minimizza gli scarti orizzontali.

((n +1)b0 +

Pni=0 yi b1 =

Pni=0 xiPn

i=0 yi b0 +Pn

i=0 y2i b1 =

Pni=0 yi xi

dove n +1 = 5. PoichèP4

i=0 yi = 108,P4

i=0 y2i = 7362,

P4i=0 xi = 8 e

P4i=0 xi yi = 372, si ha il sistema

(5b0 +108b1 = 8

108b0 +7362b1 = 372

La soluzione è b0 = 0.744452398, b1 = 0.03960868528. La retta ai minimi quadrati che minimizza gliscarti orizzontali è: x = 0.744452398+0.03960868528y .

82

Page 89: Calcolo Numerico

6.5. Esercizi

(c) Troviamo il punto di intersezione delle due rette:(

y = 3.069767442+11.581395349x

x = 0.744452398+0.03960868528y

Ricaviamo x = 1.6 e y = 21.6Se calcoliamo il baricentro dei punti assegnati, troviamo

X =P4

i=0 xi

5= °1+2+3+4

5= 1.6 Y =

P4i=0 yi

5= 9+15+84

5) = 21.6

Il punto di intersezione delle due rette è il baricentro dei punti assegnati.

Esercizio 6.5.2 Sono assegnati i seguenti dati sperimentali

xi 4.0 4.2 4.5 4.7 5.1 5.5 5.9 6.3 6.8 7.1yi 102.56 113.18 131.2 142 168 196.2 225 256.8 299.51 325.6

Costruire la curva di approssimazione ai minimi quadrati della forma axb.

Svolgimento Per trovare la curva di approssimazione del tipo y = axb , dobbiamo prima passare ai logaritmi:

log(y) = log(axb) = log(a)+b log(x)

In questo modo ci riconduciamo ad una retta di approssimazione ai minimi quadrati sui logaritmi dei puntiassegnati. Consideriamo il logaritmo naturale (ma i risultati non cambiano con i logaritmi in un’altra base).

I dati su cui lavorare sono dunque:

log(xi ) log(yi )1.386294361 4.6304479931.435084525 4.7289794721.504077397 4.8767228761.547562509 4.9558270583.931825633 5.1239639801.704748092 5.2791345471.774952351 5.4161004021.840549633 5.5482975721.916922612 5.7021478061.960094784 5.785669634

Calcoliamo la retta di approssimazione ai minimi quadrati, ponendo Xi = log(xi ) e Yi = log(yi ). Il sistemada risolvere è

((n +1)a0 +

Pni=0 Xi a1 =

Pni=0 YiPn

i=0 Xi a0 +Pn

i=0 X 2i a1 =

Pni=0 Xi Yi

dove n +1 = 10.Si ha

Pni=0 Xi = 16.6995268,

Pni=0 X 2

i = 28.2537116,Pn

i=0 Yi = 52.0472913,Pn

i=0 Xi Yi = 87.6541085Il sistema da risolvere diventa

(10a0 +16.6995268a1 = 52.0472913

16.6995268a0 +28.2537116a1 = 87.6541085

che ha come soluzione a0 = 1.84197978 e a1 = 2.013679425.Ora a0 = log(a) da cui a = ea0 = 6.30901637 Invece a1 = b. Il modello y = axb diventa quindi y =

6.30901637x2.013679425.

83

Page 90: Calcolo Numerico
Page 91: Calcolo Numerico

CA

PI

TO

LO 7

METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

All’inizio e alla fine abbiamo ilmistero. Potremmo dire cheabbiamo il disegno di Dio. A questomistero la matematica si avvicina,senza penetrarlo.

Ennio De Giorgi

7.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857.2 Elementi di Algebra Lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 867.3 Metodo di eliminazione di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

7.3.1 Sostituzione all’indietro e in avanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907.3.2 Eliminazione di Gauss: esempio particolare . . . . . . . . . . . . . . . . . . . . . . . . . . . 917.3.3 Eliminazione di Gauss: caso generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

7.4 Strategie di pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947.5 Fattorizzazione triangolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

7.5.1 Fattorizzazione LDU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967.5.2 Fattorizzazione di Gauss senza pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987.5.3 Fattorizzazione di Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

7.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

7.1 Introduzione

Si consideri la capacità C di un conduttore. Dall’elettrostatica, sappiamo che vale q =C¡ dove q rappre-senta la carica del conduttore e ¡ il suo potenziale elettrostatico, quando il conduttore è isolato. Nel caso incui il conduttore non sia isolato, la situazione cambia. Supponiamo di avere 4 conduttori in equilibrio elet-trostatico all’interno di una cavità collegata a terra (a terra il potenziale elettrostatico vale zero). Supponendodi collegare i conduttori 2, 3 e 4 a terra, si ha ¡2 =¡3 =¡4 = 0 e ¡1 6= 0. Il conduttore 1 induce carica sugli altriconduttori, per cui, per ciascun conduttore vale, rispettivamente:

85

Page 92: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

q1 =C11¡1

q2 =C21¡1

q3 =C31¡1

q4 =C41¡1

Si ripete lo stesso discorso supponendo¡2 6= 0 e tutti gli altri potenziali nulli. Poi sia¡3 6= 0 e gli altri potenzialinulli. Infine ¡4 6= 0 e tutti gli altri nulli.

La sovrapposizione dei 4 stati considerati corrisponde alla situazione in cui¡1,¡2,¡3,¡4 sono tutti diversida zero. Si ha perciò:

q1 =C11¡1 +C12¡2 +C13¡3 +C14¡4

q2 =C21¡1 +C22¡2 +C23¡3 +C24¡4

q3 =C31¡1 +C32¡2 +C33¡3 +C34¡4

q4 =C41¡1 +C42¡2 +C43¡3 +C44¡4

I coefficienti Ci i si chiamano coefficienti di capacità, mentre i coefficienti Ci j , con j 6= i si chiamanocoefficienti di induzione.

Si può presentare il problema inverso: note le cariche qi , si vuole determinare il valore dei ¡i . Si devequindi risolvere un sistema lineare di 4 equazioni in 4 incognite.

In questo Capitolo studieremo metodi diretti per la soluzione di sistemi lineari del tipo8>>>>>>>><

>>>>>>>>:

a11x1 +a12x2 + . . .+a1n xn = b1

a21x1 +a22x2 + . . .+a2n xn = b2

a31x1 +a32x2 + . . .+a3n xn = b3... =

...

an1x1 +an2x2 + . . .+ann xn = bn

(7.1)

dove ai j , per i , j = 1,2, . . . ,n e bi , per i = 1,2, . . . ,n sono assegnati e le incognite da determinare so-no x1, x2, . . . , xn . I metodi diretti sono metodi che risolvono il problema in un numero fissato di passi,introducendo un errore dovuto solo all’arrotondamento.

7.2 Elementi di Algebra Lineare

Sia dato un sistema lineare come in (7.1). Per poterlo semplificare, possiamo eseguire le seguentioperazioni (trasformazioni elementari) :

L’i -sima equazione del sistema può essere moltiplicata per una qualunque costante ∏ 6= 0 e l’equazionerisultante può essere usata al posto di quella di partenza: la soluzione del sistema non cambia.L’equazione j -sima, moltiplicata per una qualunque costante ∏ 6= 0 e sommata all’equazione i -sima,può essere usata al posto dell’equazione i -sima di partenza: la soluzione del sistema non cambia.Le equazioni i -sima e j -sima possono essere scambiate: la soluzione del sistema non cambia.

In questa maniera, un sistema lineare può essere trasformato in uno di più facile soluzione, comevedremo nell’algoritmo di eliminazione di Gauss.

Poichè le operazioni da fare coinvolgono i coefficienti ai j e bi , conviene scrivere il sistema di equazionilineari utilizzando una forma compatta mediante matrici e vettori.

MatriceDefinizione 7.2.1 Una matrice n £m è una griglia rettangolare (o array) di elementi disposti su n righe e mcolonne.

86

Page 93: Calcolo Numerico

7.2. Elementi di Algebra Lineare

Generalmente, una matrice si denota con una lettera maiuscola, per esempio A, mentre i suoi valori siindicano con la corrispondente lettera minuscola e i pedici che si riferiscono alla riga e colonna in cui si trovaquel valore, per esempio ai j si riferisce all’elemento di riga i e colonna j della matrice A.

A =£ai j

§=

0

BBBBBB@

a11 a12 a13 . . . a1na21 a22 a23 . . . a2na31 a32 a33 . . . a3n

......

... . . ....

an1 an2 an3 . . . ann

1

CCCCCCA

Esempio 7.2.1

A =µ2 10 53 1 0

è una matrice 2£3 con elementi a11 = 2, a12 = 10, a13 = 5, a21 = 3, a22 = 1 e a23 = 0.

Per indicare che una matrice A ha n righe e m colonne, diremo che A ha dimensione n £m. Quandolavoreremo con matrici quadrate di n righe e n colonne, parleremo di dimensione n della matrice per indicareche il numero di righe è uguale al numero di colonne e vale n.

I vettori si possono vedere come un caso particolare delle matrici. Si parla di vettore riga se ci riferiamo a Vettori

una matrice 1£n e si parla di vettore colonna se ci si riferisce a una matrice n £1.Per indicare un vettore colonna e un vettore riga si usa, rispettivamente, la notazione

x =

0

BBBBBB@

x1x2x3...

xn

1

CCCCCCAx =

°x1 x2 x3 . . . xn

¢

Vediamo, nel seguito, alcune importanti definizioni e proprietà delle matrici.

Due matrici A e B , di dimensione n £m, sono uguali se hanno lo stesso numero di righe e di colonne,e, inoltre, vale, ai j = bi j per i ,= 1,2, . . . ,n e j = 1,2, . . . ,m.Date due matrici A e B , entrambe n £m, si definisce la matrice somma di A e B la matrice n £m A+Bi cui elementi sono dati da ai j +bi j , per i ,= 1,2, . . . ,n e j = 1,2, . . . ,m.Se A è una matrice n£m e ∏ è un numero reale, la moltiplicazione scalare di ∏ per A, denotata con ∏A,è una matrice n £m i cui elementi sono ∏ai j per i ,= 1,2, . . . ,n e j = 1,2, . . . ,m.Indichiamo con O la matrice i cui elementi sono tutti uguali a zero.Data la matrice A, n £m, indichiamo con °A la matrice i cui elementi sono °ai j .

Teorema 7.2.1 Date A, B e C tre matrici n £m, e ∏ e µ due numeri reali, valgono le seguenti proprietà:

A+B = B + A (A+B)+C = A+ (B +C )A+O =O + A = A A+ (°A) =°A+ A =O∏(A+B) =∏A+∏B (∏+µ)A =∏A+µA∏(µA) = (∏µ)A 1A = A

87

Page 94: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

Date due matrici A di dimensione n£m e B di dimensione m£p, la matrice prodotto di A e B , denotatacon C = AB , è una matrice i cui elementi ci j sono dati da:Matrice

prodotto

ci j =mX

k=1ai k bk j = ai 1b1 j +ai 2b2 j + . . .+ai mbm j

per i = 1,2, . . . ,n e j = 1,2, . . . , p.

Data una matrice A di dimensione n e un vettore colonna x di lunghezza n, si definisce il vettore y = Axprodotto della matrice A per il vettore x, il vettore le cui componenti sono date daProdotto

matrice-vettore

yi =nX

j=1ai j x j per i = 2, . . . ,n

Dati due vettori x e y si definisce prodotto scalare xT y =Pni=1 xi yi .Prodotto

scalare travettori

In generale, AB 6= B A.Una matrice D si dice diagonale se è quadrata con di j = 0 per i 6= j . Gli elementi diversi da zero si

Matricediagonale

trovano quindi sulla diagonale (detta diagonale principale) che si può tracciare partendo dall’elementoin alto a sinistra (di posto 11) e arrivando all’elemento in basso a destra (di posto nn).

Esempio:

D =

0

BB@

1 0 0 00 2 0 00 0 5 00 0 0 °1

1

CCA

Si chiama matrice identità e si indica con I , una matrice diagonale i cui elementi diagonali valgono 1.MatriceIdentità Esempio:

I =

0

BB@

1 0 0 00 1 0 00 0 1 00 0 0 1

1

CCA

Una matrice si dice tridiagonale se gli elementi non nulli si trovano sulla diagonale principale e sugliMatricetridiagonale elementi delle diagonali che si trovano sopra e sotto la diagonale principale.

Esempio:

A =

0

BBBB@

°2 1 0 0 01 °2 1 0 00 1 °2 1 00 0 1 °2 10 0 0 1 °2

1

CCCCA

Una matrice si dice triangolare se ha tutti gli elementi nulli ad eccezione di quelli che si trovano tuttisopra (o tutti sotto) la diagonale principale.

– Si definisce matrice triangolare superiore U (U sta per upper) di dimensione n, la matrice per laMatricetriangolare

superiorequale, per j = 1,2, . . . ,n, si ha

ui j = 0 per i = j +1, j +2, . . . ,n

– Si definisce matrice triangolare inferiore L (L sta per lower) di dimensione n, la matrice per laMatricetriangolare

inferiorequale, per i = 1,2, . . . ,n, si ha

li j = 0 per j = i +1, i +2, . . . ,n

88

Page 95: Calcolo Numerico

7.2. Elementi di Algebra Lineare

Esempi

U =

0

@1 °2 5.30 3.2 °40 0 10

1

A L =

0

@1 0 02 °21 0

°3.4 5.7 °4

1

A

Teorema 7.2.2 Date A matrice n £m, B matrice m £ s, C matrice s £ p, D matrice m £ s, Im e Is le matriciidentità, rispettivamente di dimensione m e s, e ∏ e µ due numeri reali, valgono le seguenti proprietà:

A(BC ) = (AB)C A(B +D) = AB + ADImB = B B Is = B ∏(AB) = (∏A)B = A(∏B).

A questo punto, il sistema lineare (7.1) può essere scritto in forma matriciale come

Ax = b

Collegata alla soluzione di un sistema lineare è l’inversa di una matrice.

Definizione 7.2.2 Data una matrice A di dimensione n, A si dice nonsingolare (o invertibile o regolare) se Matriceinversaesiste una matrice, che indichiamo come A°1 di dimensione n tale che

A A°1 = A°1 A = I

La matrice A°1 si chiama matrice inversa della A. Una matrice che non ha inversa si dice, invece, singolare (onon invertibile).

Teorema 7.2.3 Per ogni matrice A di dimensione n nonsingolare si ha:A°1 è unicaA°1 è nonsigolare e (A°1)°1 = ASe B è non singolare, di dimensione n, allora (AB)°1 = B°1 A°1

Dato il sistema Ax = b, se A è nonsingolare, si ha x = A°1b.Un’altra importante matrice associata ad un’assegnata matrice A è la sua trasposta.

Definizione 7.2.3 La trasposta di una matrice A di dimensione n £m è la matrice indicata con AT , di di- Trasposta diuna matricemensione m £n, per la quale la colonna i della trasposta coincide con la riga i della matrice A di partenza:

aTi j = a j i .

Esempio:

A =µ1 2 32 5 6

∂AT =

0

@1 22 53 6

1

A

Legata alla trasposta di una matrice è la seguente definizione.

Definizione 7.2.4 Una matrice quadrata si dice simmetrica se A = AT .

Esempio:

A =

0

@1 4 84 2 68 6 5

1

A AT =

0

@1 4 84 2 68 6 5

1

A

Teorema 7.2.4 Valgono le seguenti proprietà (per matrici per cui è possibile eseguire le seguenti operazioni):

89

Page 96: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

(AT )T = A (A+B)T = AT +B T

(AB)T = B T AT Se esiste A°1 allora (A°1)T = (AT )°1

Il determinante di una matrice permette di stabilire esistenza e unicità della soluzione nei sistemi lineari.Data una matrice quadrata A, il suo determinante si indica mediante la notazione det (A) o |A|.

Se A = [a] è una matrice 1£1, allora det (A) = a.Se A è una matrice di dimensione n, si definisce minore Mi j il determinante della sottomatrice didimensione n °1 ottenuta cancellando la i -sima riga e la j -sima colonna da A.Determinante

di unamatrice

Il determinante di A è dato dalla formula

det (A) =nX

j=1(°1)i+ j ai j Mi j (fissato un qualunque i = 1,2, . . . ,n)

det (A) =nX

i=1(°1)i+ j ai j Mi j (fissato un qualunque j = 1,2, . . . ,n)

Il calcolo del determinante di una matrice di dimensione n richiede O (n!) moltiplicazioni. Quindi, anche pervalori piccoli di n, le operazioni da fare diventanto proibitive.

Teorema 7.2.5 Sia assegnata A una matrice quadrata di dimensione n.Se una riga o una colonna di A ha elementi tutti nulli, allora det (A) = 0.Se A ha due righe o due colonne con gli stessi elementi, allora det (A) = 0.Denotata con A la matrice ottenuta scambiando due righe di A, si ha det (A) =°det (A).Denotata con A la matrice ottenuta da A moltiplicando una sua riga per un numero reale ∏, si hadet (A) =∏det (A).Denotata con A la matrice ottenuta da A sommando una sua riga per un’altra che è stata moltiplicataper ∏, si ha det (A) = det (A).Se B è un’altra matrice di dimensione n, si ha det (AB) = det (A)det (B)det (AT ) = det (A)

Se esiste A°1, si ha det (A°1) = 1det (A)

Se A è una matrice trangolare superiore o trangolare inferiore o diagonale, allora det (A) =Qni=1 ai i

7.3 Metodo di eliminazione di Gauss

Ritorniamo al sistema di equazioni (7.1), che possiamo scrivere in forma matriciale come Ax = b.Nel metodo di eliminazione di Gauss1 il sistema lineare di partenza viene trasformato in uno equivalente

di più facile soluzione in quanto la matrice del nuovo sistema ha forma triangolare (superiore o inferiore) epuò essere risolto facilmente mediante sostituzione (all’indietro o in avanti).

Vediamo nel dettaglio come si risolve un sistema lineare con queste tecniche.

7.3.1 Sostituzione all’indietro e in avanti

La matrice A sia nonsingolare e triangolare superiore, cioè

A =

0

BBBBB@

a11 a12 . . . a1n

a22. . . a2n. . .

...ann

1

CCCCCA

1 Carl Friedrich Gauss fu un matematico e fisico tedesco (1777-1855) che ha dato il suo contribuito in maniera significativa innumerosi campi: teoria dei numeri, analisi, geometria differenziale, geodesia, magnetismo, astronomia, ottica. Al pari di Eulero, Newtone Archimede è considerato uno dei più grandi matematici della storia.

In suo onore è stato dato il suo nome a una nave di ricerca tedesca, a una montagna (Gaussberg) in Antartide, a un cratere sulla luna,e all’unità di misura della densità di flusso magnetico o di induzione magnetica.

90

Page 97: Calcolo Numerico

7.3. Metodo di eliminazione di Gauss

La soluzione del sistema Ax = b può dunque procedere dal basso verso l’alto, a partire dall’ultima riga. Leequazioni, infatti, sono

a11x1 +a12x2 +a13x3 + . . . a1n xn = b1

a22x2 +a23x3 + . . . a2n xn = b2

a33x3 + . . . a3n xn = b2

... =...

ann xn = bn

L’ultima riga si legge come ann xn = bn . Quindi possiamo ricavare xn = bn/ann .Noto il valore di xn , possiamo ricavare xn°1 dalla riga n °1 del sistema:

an°1n°1xn°1 +an°1n xn = bn°1. Si ha xn°1 =1

an°1n°1(bn°1 °an°1n xn).

Si procede a ritroso in questo modo arrivando fino alla prima equazione che ci permette di calcolare il va-lore di x1. Osserviamo che tutte le divisioni per i coefficienti ai i sono possibili in quanto stiamo supponendoA non singolare e, poichè det(A) =Qn

i=1 ai i 6= 0, necessariamente ciascun ai i 6= 0.Possiamo dunque scrivere l’algoritmo di sostituzione all’indietro:

Per i = n fino a i = 1, procedendo all’indietro con passo °1

xi =bi °

Pnj=i+1 ai j x j

ai i

Un analogo algoritmo si ricava quando la matrice è triangolare inferiore. In tal caso, si parte dalla primaequazione per ricavare x1 e poi si va avanti nell’equazione successiva.

Si ha l’algoritmo di sostituzione in avanti:

Per i = 1 fino a i = n, procedendo in avanti con passo 1

xi =bi °

Pi°1j=1 ai j x j

ai i

7.3.2 Eliminazione di Gauss: esempio particolare

Il metodo di eliminazione di Gauss trasforma il sistema di partenza in uno ad esso equivalente ma piùfacile da risolvere, perchè la matrice del sistema è di forma triangolare superiore, in modo da poter applicareil metodo di sostituzione all’indietro.

Per capire come si applica questo metodo consideriamo un semplice esempio di sistema di 3 equazioniin 3 incognite, Ax = b dove

A =

0

@2 1 24 1 21 2 5

1

A b =

0

@101220

1

A

Le equazioni del sistema sono, dunque,

2x1 +x2 +2x3 = 10

4x1 +x2 +2x3 = 12

x1 +2x2 +5x3 = 20

91

Page 98: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

Al primo passo del metodo, cerchiamo di annullare tutti i coefficienti dell’incognita x1 nella seconda eterza equazione.

– Dividiamo il coefficiente 4 che moltiplica x1 nella seconda equazione con il coefficiente 2 che

moltiplica x1 nella prima equazione. Otteniamo il valore42= 2. Adesso moltiplichiamo per questo

valore (2) la prima equazione, ricavando

2(2x1 +x2 +2x3 = 10) =) 4x1 +2x2 +4x3 = 20

Se ora facciamo la sottrazione tra la seconda equazione del sistema e questa che abbiamo ricavatootteniamo

4x1 +x2 +2x3 = 12 °4x1 +2x2 +4x3 = 20 =

°x2 °2x3 =°8

Sostituiamo questa equazione alla seconda del sistema (il sistema rimane equivalente), ricavando

2x1 +x2 +2x3 = 10

°x2 °2x3 =°8

x1 +2x2 +5x3 = 20

Abbiamo eliminato, in questo modo, il coefficiente di x1 nella seconda equazione.– Alla stessa maniera, dividiamo il coefficiente di x1 nella terza equazione (che vale 1) con il coeffi-

ciente di x1 nella prima equazione: abbiamo12

. Moltiplichiamo la prima equazione per12

e poi

facciamo la sottrazione tra la terza equazione e la prima moltiplicata per12

:

x1 +2x2 +5x3 = 20 °12

(2x1 +x2 +2x3 = 10) ()x1 +12

x2 +x3 = 5 =

32

x2 +4x3 = 15

Sostituiamo questa equazione alla terza del sistema.– A questo punto il sistema è

2x1 +x2 +2x3 = 10

°x2 °2x3 =°832

x2 +4x3 = 15

Nella seconda e terza equazione non c’è più l’incognita x1.Per poter arrivare ad un sistema di equazioni triangolare inferiore, dobbiamo eliminare il coefficiente dix2 nella terza equazione del sistema. Ripetiamo il ragionamento appena fatto, lavorando sulla secondae terza equazione.

– Consideriamo il coefficiente di x2 della terza equazione (32

) e lo dividiamo per il coefficiente

di x2 della seconda equazione ( che vale °1). Moltiplichiamo la seconda equazione per questo

92

Page 99: Calcolo Numerico

7.3. Metodo di eliminazione di Gauss

coefficiente (cioè per °32

) e poi sottraiamo la terza equazione dalla seconda moltiplicata per °32

:

32

x2 +4x3 = 15 °

°32

(°x2 °2x3 =°8) ()32

x2 +3x3 = 12 =

x3 = 3

– Sostituiamo questa equazione alla terza del sistema, ricavando il sistema equivalente

2x1 +x2 +2x3 = 10

°x2 °2x3 =°8

x3 = 3

Con tutte le trasformazioni effettuate, abbiamo trasformato il sistema di partenza in uno equivalente, chesi può risolvere facilmente mediante sostituzioni all’indietro. Dall’ultima equazione abbiamo x3 = 3. Sosti-tuendo questo valore nella seconda equazione otteniamo °x2 ° 6 = °8 da cui x2 = 2. Infine, sostituendo ivalori di x3 e x2 nella prima equazione abbiamo 2x1 +2+6 = 10 da cui x1 = 1.

7.3.3 Eliminazione di Gauss: caso generale

Sia dato un sistema di n equazioni, in cui la matrice A è piena (o densa, cioè abbia quasi tutti gli elementinon nulli). Applichiamo trasformazioni elementari per riga in modo da ridurre il sistema di partenza in unoequivalente di forma triangolare superiore, che potremo risolvere mediante sostituzione all’indietro.

La soluzione del problema Ax = b, infatti, non cambia se moltiplichiamo una riga per una costante, sesottraiamo il multiplo di una riga da un’altra riga o se facciamo scambi di righe, come abbiamo detto all’iniziodella Sezione 7.2.

Supponiamo, per il momento, che tutti gli elementi della diagonale principale di A siano non nulli.Al primo passo vogliamo eliminare gli elementi della prima colonna al di sotto della diagonaleprincipale:

– sottraiamo la prima equazione moltiplicata pera21

a11dalla seconda equazione:

a21x1 +a22x2 +a23x3 + . . .+a2n xn = b2 °a21

a11(a11x1 +a12x2 +a13x3 + . . .+a1n xn ) = a21

a11b1 =

(a22 °a21

a11a12)x2 + (a23 °

a21

a11a13)x3 + . . .+ (a2n ° a21

a11a1n )xn = b2 °

a21

a11b1

– sottraiamo la prima equazione moltiplicata pera31

a11dalla terza equazione.

– . . .– sottraiamo la prima equazione moltiplicata per

an1

a11dalla n-sima equazione.

Come risultato di questa operazione avremo una nuova matrice con gli elementi della primacolonna, eccetto quello di posto 11, tutti uguali a zero.

0

BBBB@

a11 a12 . . . a1n

0 a(1)22 . . . a(1)

2n...

... . . ....

0 a(1)n2 . . . a(1)

nn

1

CCCCA

0

BBBB@

x1x2...

xn

1

CCCCA=

0

BBBB@

b1

b(1)2...

b(1)n

1

CCCCA

93

Page 100: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

Al secondo passo, consideriamo il sistema ridotto che si ha ignorando la prima equazione del sistemae la prima colonna della nuova matrice che abbiamo ottenuta (che ha tutti 0 al di sotto dell’elementodiagonale).

A questa sottomatrice applichiamo lo stesso procedimento di prima, sottraendo, quindi, la prima

equazione della sottomatrice moltiplicata pera(1)

32

a(1)22

dalla seconda equazione della sottomatrice, e così

via.Dopo questo passo, il sistema sarà equivalente a:

0

BBBBBBB@

a11 a12 . . . . . . a1n

0 a(1)22 a(1)

23 . . . a(1)2n

... 0 a(2)33 . . . a(2)

3n...

...... . . .

...0 0 a(2)

n3 . . . a(2)nn

1

CCCCCCCA

0

BBBBBB@

x1x2x3...

xn

1

CCCCCCA=

0

BBBBBB@

b1

b(1)2

b(2)3...

b(1)n

1

CCCCCCA

Dopo aver applicato questo procedimento n ° 1 volte, avremo un sistema triangolare superioresemplice da risolvere utilizzando l’algoritmo di sostituzione all’indietro.

0

BBBBBBB@

a11 a12 . . . . . . a1n

0 a(1)22 a(1)

23 . . . a(1)2n

... 0 a(2)33 . . . a(2)

3n...

... . . . . . ....

0 0 . . . 0 a(n°1)nn

1

CCCCCCCA

0

BBBBBB@

x1x2x3...

xn

1

CCCCCCA=

0

BBBBBB@

b1

b(1)2

b(2)3...

b(n°1)n

1

CCCCCCA

7.4 Strategie di pivoting

Gli elementi diagonali generati ad ogni passo del metodo di eliminazione a(k)i i sono detti elementi

pivotali.Nel descrivere il metodo di eliminazione di Gauss abbiamo supposto, per semplicità, che tutti gli elemen-

ti diagonali fossero diversi da zero. Ma una matrice può essere non singolare senza che gli elementi delladiagonale principale siano tutti diversi da zero.

Inoltre, andando avanti nel procedimento di eliminazione, può succedere che un elemento pivotale di-venti nullo – e quindi la corrispondente incognita non può essere eliminata attraverso quella equazione nelprocedimento di sostituzione all’indietro.

C’è, infine, da considerare il fatto che si possono avere grossi errori numerici quando un elementopivotale è molto piccolo.

Cosa fare in queste circostanze? In che modo applicare l’eliminazione di Gauss?Si hanno le cosiddette strategie di pivoting:

pivoting parzialeMano mano che si va avanti nell’eliminazione, per i = 1,2, . . . ,n°1 a ciascuno stadio si sceglie il più

piccolo intero q tale che

|a(i°1)qi | = max

i∑ j∑n|a(i°1)

j i |

e si scambiano le righe i e q .Si opera, dunque, un controllo sulla colonna i -sima dalla posizione i fino alla posizione n, andando

a cercare il coefficiente massimo in modulo.pivoting totale

Nel pivoting totale, invece, la ricerca dell’elemento più grande avviene in tutta la sottomatrice chesi ha considerando le colonne e le righe rispettivamente a destra e sotto l’elemento diagonale i -simo.

94

Page 101: Calcolo Numerico

7.4. Strategie di pivoting

Si vanno quindi a cercare i più piccoli interi q e r tali che

|a(i°1)qr | = max

i∑k, j∑n|a(i°1)

j k |

Si opera, quindi, uno scambio non solo di righe ma anche di colonne in modo da portare l’ele-mento pivotale dalla riga e colonna qr al posto i i . Di questo scambio di colonne bisogna conservaretraccia perchè vengono scambiate anche le componenti del vettore soluzione, in modo da effettuare loscambio inverso una volta risolto il sistema.

Il maggiore sforzo computazionale garantisce maggiore accuratezza e stabilità nei risultati, nel senso chegli errori di arrotondamento non sono così amplificati come potrebbe succedere senza l’adozione di unatecnica di pivoting.

Esempio 7.4.1 Consideriamo il sistemax1 +x2+x3 = 1

x1 +1.0001x2 +2x3 = 2

x1 +2x2 +2x3 = 1

L’esatta soluzione, corretta a 4 cifre decimali, è x = (1, °1.0001, 1.0001)T .L’eliminazione di Gauss senza pivoting porta al sistema

x1 +x2+x3 = 1

0.0001x2 +1x3 = 1

1x2 +1x3 = 0

e, infine, ax1 +x2+x3 = 1

0.0001x2 +1x3 = 1

°9999x3 =°10000

Se usiamo un’aritmetica in base 10 con 3 cifre decimali, allora la sostituzione all’indietro ci darà

x3 =°10000°9999

= 1.000, quad x2 =1°1

0.0001= 0, x1 = 0.

La soluzione è completamente sbagliata.Se, invece, facciamo lo scambio della seconda e terza riga adottando il pivoting parziale, allora avremo ilsistema:

x1 +x2+x3 = 1

1x2 +1x3 = 0

0.0001x2 +1x3 = 1

e, infine,x1 +x2+x3 = 1

1x2 +1x3 = 0

0.9999x3 = 1

Questa volta si ha (sempre lavorando con 3 cifre decimali) x3 = 1.000, x2 = °1.000, x1 = 1.000, che è lasoluzione corretta a 3 cifre decimali.

95

Page 102: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

7.5 Fattorizzazione triangolare

Il metodo di eliminazione di Gauss, visto in forma matriciale, decompone la matrice A nelprodotto LU di due matrici L, trangolare inferiore, e U , triangolare superiore.Basta considerare, ad ogni passo, la matrice

M (k) =

0

BBBBBBBBBBBBBBBBBBBBBBBBB@

10 1... 0 1...

... 0 1...

...... °

a(k°1)k+1k

a(k°1)kk

1

......

... °a(k°1)

k+2k

a(k°1)kk

. . .

......

......

. . .

......

... °a(k°1)

n k

a(k°1)kk

1

1

CCCCCCCCCCCCCCCCCCCCCCCCCA

Si considera quindi la matrice A(k) = M (k) A(k°1) = M (k)M (k°1) . . . M (1) A e il vettore b(k) =M (k)b(k°1) = M (k)M (k°1) · · ·M (1)b.Dopo n °1 passi, avremo

U = A(n°1) = M (n°1) . . . M (2)M (1) Acon U matrice triangolare superiore. Otteniamo quindi A = LU , con

L = (M (n°1) · · ·M (2)M (1))°1 = [M (1)]°1 · · · [M (n°2)]°1[M (n°1)]°1

L è triangolare inferiore con elementi dati dal prodotto delle matrici M (k) generate durante l’eliminazionedi Gauss.

7.5.1 Fattorizzazione LDU

L’eliminazione di Gauss è un caso particolare di fattorizzazione LDU , nella quale la matrice A viene de-composta nel prodotto di 3 matrici, la L che è triangolare inferiore con elementi sulla diagonale principale(elementi diagonali) uguali a 1, la D che è una matrice diagonale e la U che è una triangolare superiore conelementi diagonali uguali a 1.

Nell’eliminazione di Gauss vista prima, nella U abbiamo inglobato anche la matrice D , per cui abbiamouna fattorizzazione LU .

La decomposizione LDU è assicurata dal teorema LDU . Prima di vedere il teorema, definiamo i minoriprincipali di una matrice A.

Definizione 7.5.1 Data una matrice A si definisce minore principale di dimensione k (con 1 ∑ k ∑ n), laMinoreprincipale sottomatrice che si ha prendendo le prime k righe e k colonne di A.

2

64

a11 . . . a1k...

...ak1 . . . akk

3

75

Teorema 7.5.1 (LDU ) Nell’ipotesi che tutti i minori principali di A, (per i = 1,2, . . . ,n) siano non-singolari,allora la matrice A è decomponibile in maniera univoca nel prodotto A = LDU

96

Page 103: Calcolo Numerico

7.5. Fattorizzazione triangolare

Qualsiasi matrice non singolare può essere condotta sotto una forma tale da soddisfare il teorema LDUmediante opportuni scambi di righe e di colonne (abbiamo visto cosa fare quando un elemento pivotale ènullo). Fare uno scambio di righe o di colonne significa moltiplicare la matrice A con un’opportuna matricedi permutazione.

Una matrice di permutazione P è una matrice ottenuta dalla matrice identità operando scambi di righe odi colonne in modo che la matrice risultante abbia esattamente un unico valore diverso da zero su ogni rigae colonna, e tale valore sia uguale a 1. Matrice di

permutazio-ne

Esempio 7.5.1 Si consideri la matrice di permutazione P di dimensione 3 data da

P =

0

@1 0 00 0 10 1 0

1

A

Qualunque sia la matrice A, di dimensione 3, moltiplicandola a sinistra per P si ottiene lo scambio dellaseconda e terza riga di A; invece, moltiplicandola a destra per P si ottiene lo scambio della seconda e terzacolonna di A:

PA =

0

@1 0 00 0 10 1 0

1

A

0

@a11 a12 a13a21 a22 a23a31 a32 a33

1

A=

0

@a11 a12 a13a31 a32 a33a21 a22 a23

1

A

AP =

0

@a11 a12 a13a21 a22 a23a31 a32 a33

1

A

0

@1 0 00 0 10 1 0

1

A=

0

@a11 a13 a12a21 a23 a22a31 a33 a32

1

A

Quindi, il teorema LDU si può applicare alla matrice A o ad un’opportuna matrice PA, se si effettua il pivotingparziale, o a PAQ se si effettua il pivoting totale (e quindi si considerano due matrici di permutazioni P e Q).

In genere, la matrice D viene inglobata nella L o nella U (post-moltiplicando o pre-moltiplicando le L e leU definite prima per la D).

Nel caso in cui la matrice D viene inglobata nella matrice L, la L ha elementi diagonali li i 6= 0, mentrela U ha elementi diagonali unitari. Si parla di fattorizzazione di Crout.Nel caso in cui la matrice D viene inglobata nella matrice U , la U ha elementi diagonali ui i 6= 0, mentrela L ha elementi diagonali unitari. Si parla di fattorizzazione di Doolittle.

Scriviamo in forma estesa il prodotto tra matrici, nell’ipotesi di operare la fattorizzazione di Crout:0

BBBB@

a11 a12 . . . a1na21 a22 . . . a2n

......

...an1 an2 . . . ann

1

CCCCA=

0

BBBB@

l11 0 . . . 0l21 l22 . . . 0

......

...ln1 ln2 . . . lnn

1

CCCCA

0

BBBB@

1 u12 . . . u1n0 1 . . . u2n...

......

0 0 . . . 1

1

CCCCA

Moltiplichiamo la prima riga di L per le colonne di U ed eguagliamo i termini con gli elementi della primariga di A. Otteniamo:

l11 ·1 = a11l11 ·u1k = a1k , k = 2, . . . ,nQuindi: l11 = a11 e u1k = a1k /l11. Abbiamo ricavato gli elementi della prima riga di L e U .Moltiplicando le successive righe di L per le colonne di U ed uguagliando i termini ai corrispondenti

termini di A, abbiamo:

li j = ai j °j°1X

m=1li mum j i = 1,2, . . .n j = 1,2, . . . , i

ui j =1

li i(ai j °

i°1X

m=1li mum j ) i = 1,2, . . . ,n °1 j = i +1, . . .n

97

Page 104: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

Si calcolano prima gli elementi della riga i -sima di L e poi quelli della riga i -sima di U , per i = 1,2, . . . ,n.Trovate le matrici L e U , il sistema di partenza Ax = b è equivalente a LU x = b.Si pone, dunque, y = U x, ottenendo il sistema Ly = b. Si ricava facilmente y mediante sostituzione in

avanti e da U x = y si ricava x mediante sostituzione all’indietro.Lo sforzo computazionale maggiore è quindi quello per il calcolo dei coefficienti di L e U .Nell’eliminazione di Gauss noi ricaviamo espressamente solo la U mentre le modifiche operate sulla

colonna dei termini noti è equivalente al prodotto L°1b (quindi da LU x = b risolviamo U x = L°1b).

7.5.2 Fattorizzazione di Gauss senza pivoting

Abbiamo visto che, a volte, il metodo di eliminazione di Gauss richiede scambi di righe per evitare divisio-ni per zero. Allo stesso modo, il teorema di fattorizzazione LDU vale su matrici A non singolari o su matriciottenute da A mediante moltiplicazioni a sinistra o a destra con opportune matrici di permutazione.

Ci chiediamo se esistono matrici per le quali il metodo di eliminazione di Gauss possa essere implementa-to senza scambi di righe e per le quali l’algoritmo di eliminazione di Gauss sia stabile rispetto ad una crescitadi errori di arrotondamento.

Vediamo, nel seguito, alcune speciali classi di matrici per cui valgono le nostre richieste.Una matrice A di dimensione n si dice diagonalmente dominante in senso stretto per righe se vale laMatrice dia-

gonalmentedominante insenso stretto

per righe

relazione

|ai i | >nX

j=0j 6=i

|ai j | per ogni i = 1,2, . . . ,n.

Una matrice A di dimensione n si dice diagonalmente dominante in senso stretto per colonne se vale laMatrice dia-gonalmente

dominante insenso strettoper colonne

relazione

|a j j | >nX

i=0i 6= j

|ai j | per ogni j = 1,2, . . . ,n.

Esempio 7.5.2

A =

0

@7 3 12 10 °25 0 6

1

A

A è una matrice diagonalmente dominante in senso stretto per righe poichè vale:|7| > |3| + |1| = 4, |10| >|2|+ |°2| = 4 e |6| > |5|+ |0|. Non è diagonalmente dominante in senso stretto per colonne in quanto sullaprima colonna si ha |7| = |2|+ |5|.

Esempio 7.5.3

A =

0

@6 3 °43 9 5°4 5 11

1

A

A non è diagonalmente dominante in senso stretto per righe poichè, sulla prima riga si ha |6| < |3|+ |°4| =7. Essendo simmetrica, la matrice non può essere neanche diagonalmente dominante in senso stretto percolonne, perchè la relazione che abbiamo sulla prima riga vale sulla prima colonna.

Le definizioni appena date si possono rilassare, definendo le matrici diagonalmente dominanti.

98

Page 105: Calcolo Numerico

7.5. Fattorizzazione triangolare

Una matrice A di dimensione n si dice diagonalmente dominante per righe se vale la relazione

|ai i |∏nX

j=0j 6=i

|ai j | per ogni i = 1,2, . . . ,n.

Matrice dia-gonalmentedominante

Analoga è la definizione di matrice diagonalmente dominante per colonne (basta applicare la definizionedi matrice diagonalmente dominante per righe sulla matrice AT )

Si hanno i seguenti teoremi.

Teorema 7.5.2 Se A è una matrice diagonalmente dominante e non singolare, allora il metodo di eliminazionedi Gauss può essere implementato senza alcuno scambio di righe e di colonne e i calcoli sono stabili rispettoalla crescita degli errori di arrotondamento.

Teorema 7.5.3 Se A è una matrice diagonalmente dominante in senso stretto (per righe o per colonne), alloraA è non singolare. In questo caso il metodo di eliminazione di Gauss può essere implementato senza alcunoscambio di righe e di colonne e i calcoli sono stabili rispetto alla crescita degli errori di arrotondamento.

Un’altra importante classe di matrici è data dalle matrici definite positive.Una matrice A di dimensione n si dice

definita positiva se è simmetrica e vale xT Ax > 0 qualunque sia il vettore x 6= 0 Matricedefinitapositiva

semidefinita positiva se xT Ax ∏ 0 qualunque sia il vettore x,indefinita altrimenti.2

Si ha un’analoga definizione per matrici definite negative e semidefinite negative. Una matrice A didimensione n si dice

definita negativa se è simmetrica e vale xT Ax < 0 qualunque sia il vettore x 6= 0, Matricedefinitanegativa

semidefinita negativa se xT Ax ∑ 0 qualunque sia il vettore x.Dalla definizione di matrice definita positiva, deve essere xT Ax > 0 qualunque sia il vettore x, vale a dire:

°x1 x2 . . . xm

¢

0

BBBB@

a11 a12 . . . a1na21 a22 . . . a2n

...... . . .

...an1 an2 . . . ann

1

CCCCA

0

BBBB@

x1x2...

xm

1

CCCCA

=°x1 x2 . . . xm

¢

0

BBBB@

Pnj=1 a1 j x jPnj=1 a2 j x j

...Pnj=1 an j x j

1

CCCCA=

nX

i=1

nX

j=1ai j xi x j > 0

Basarsi sulla definizione per verificare che una matrice sia o meno definita positiva può essere moltodifficile. Fortunatamente, ci sono molti criteri che ci permettono di dire se una matrice è definita positivaoppure no.

IL seguente risultato ci permette di eliminare certe matrici dalla classe delle matrici definite positive, senon soddisfano certi requisiti.

Teorema 7.5.4 Se una matrice A di dimensione n è definita positiva, alloraA ammette la matrice inversa;ai i > 0 per ogni i = 1,2, . . . ,n

2Osserviamo che non tutti gli autori richiedono la simmetria per definire una matrice definita positiva, e distinguono tra matricidefinite positive e matrici simmetriche definite positive.

99

Page 106: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

Quindi se una matrice ha elementi ai i ∑ 0, non è una matrice definita positiva, perché, se lo fosse, in base alteorema avrebbe elementi diagonali tutti positivi.

Vediamo ora una condizione necessaria e sufficiente per matrici definite positive.

Teorema 7.5.5 Una matrice A simmetrica di dimensione n è definita positiva se e solo se tutti i suoi minoriprincipali hanno determinante positivo.

Teorema 7.5.6 Una matrice A simmetrica di dimensione n con elementi diagonali tutti positivi ediagonalmente dominante è definita positiva.

Anche per matrici simmetriche definite positive, si può applicare il metodo di eliminazione di Gausssenza operare scambi di righe e di colonne e i calcoli rimangono stabili rispetto alla crescita degli errori diarrotondamento. Questo risultato ci serve per la fattorizzazione di Cholesky.

7.5.3 Fattorizzazione di Cholesky

Nel caso in cui la matrice A sia simmetrica, il teorema LDU si presenta nel seguente modo

Teorema 7.5.7 (LDU per matrici simmetriche) Se A è una matrice simmetrica e nessuno dei suoi minoriprincipali è singolare, allora A si può decomporre nel prodotto A = LDLT , dove L è triangolare inferiore conelementi diagonali unitari ed è univocamente determinata, LT è la sua trasposta e D è matrice diagonale.

Dimostrazione. Intanto valgono le ipotesi del teorema LDU e quindi si può scrivere in maniera univocaA = LDU con L matrice triangolare inferiore, D diagonale e U triangolare superiore. Inoltre, poichè A èsimmetrica, e quindi A = AT , si ha pure LDU = (LDU )T vale a dire LDU = U T DT LT = U T DLT . Si deduce,dall’uguaglianza, che U = LT e la decomposizione diventa A = LDLT . 4

Nel caso particolare in cui A sia simmetrica e definita positiva, da xT Ax > 0 vale pure

xT Ax = xT LDLT x = (LT x)T DLT x = yT Dy > 0 con y = LT x per ogni x > 0.

Essendo A è definita positiva, risulta anche D definita positiva. Perciò gli elementi di D (che è una matricediagonale) devono necessariamente essere tutti positivi. In tal caso, si considera la matrice D1/2 che è lamatrice diagonale con elementi dati dalle radici quadrate degli elementi diagonali di D (si prende il valorepositivo della radice quadrata, e il risultato è un numero reale in virtù del fatto che gli elementi diagonali diD sono tutti positivi). Si pone, quindi, M = LD1/2 e si ottiene A = M M T : abbiamo il prodotto di una matricetriangolare inferiore con coefficienti tutti reali per la sua trasposta. Se D non fosse definita positiva (ma avessequalche elemento negativo), allora neanche A sarebbe definita positiva e la matrice M sarebbe non reale.

Quindi se A è simmetrica, si ha la decomposizione nel prodotto LLT (chiamiamo di nuovo con L lamatrice M) con L reale se e solo se A è definita positiva.

I coefficienti della matrice L si trovano facendo il prodotto righe per colonne ed eguagliando i termini aicorrispondenti elementi di A.

Si ricava:

l11 =p

a11

li 1 = ai 1/l11 i = 2,3, . . . ,n

li i =

vuut(ai i °i°1X

k=1l 2

i k ) i = 2,3, . . . ,n

li j =1

li i(ai j °

j°1X

k=1li k l j k ) j = 2, . . . ,n i = j +1, . . . ,n

Tale fattorizzazione prende il nome di fattorizzazione di Cholesky 3.

3 André-Louis Cholesky (1875-1918) fu un matematico francese. Fu ufficiale ingegnere e morì alla fine della prima guerra mondiale.

100

Page 107: Calcolo Numerico

7.6. Esercizi

7.6 Esercizi

Esercizio 7.6.1 Sia data la matrice

A =

0

@1 0 20 4 82 8 29

1

A

Provare che verifica le condizioni del teorema LDU e trovare i fattori L e LT tali che A = LLT .

Svolgimento La matrice A è simmetrica e soddisfa le ipotesi del teorema LDU ( infatti |a11| = 1, detµ1 00 4

∂=

4 e det (A) = 116°16°64 = 36) per cui è possibile scrivere la matrice A come A = LLT . Si ha, quindi:

0

@l11 0 0l21 l22 0l31 l32 l33

1

A

0

@l11 l21 l310 l22 l320 0 l33

1

A=

0

@l 2

11 l11l21 l11l31l21l11 l 2

21 + l 222 l21l31 + l22l32

l31l11 l31l21 + l32l22 l 231 + l 2

32 + l 233

1

A

Devono quindi valere le relazioni:

l 211 = 1 =) l11 = 1

l21l11 = 0 =) l21 = 0

l31l11 = 2 =) l31 = 2

l 221 + l 2

22 = 4 =) l22 =p

4°0 = 2

l21l31 + l22l32 = 8 =) l32 = 8/2 = 4

l 231 + l 2

32 + l 233 = 29 =) l33 =

p29°22 °42 =

p29°4°16 =

p9 = 3

La matrice L è dunque

0

@1 0 00 2 02 4 3

1

A

Esercizio 7.6.2 Data la matrice

A =

0

@0.2 1 0.21 6.5 1.750 2 2.25

1

A

(a) verificare che A soddisfa le condizioni del teorema LDU ;(b) fattorizzare secondo Crout A = LU (prendendo ui i = 1);(c) usare la fattorizzazione per calcolare det(A°2);(d) usare la fattorizzazione per risolvere il sistema Ax = b, con bT = (2.8 19.25 10.75)T .

Svolgimento(a) La matrice verifica le condizioni del teorema LDU in quanto i minori principali costruiti a partire

dall’angolo superiore sinistro hanno tutti determinante diverso da zero:

a11 = 0.2 6= 0 detµ0.2 11 6.5

∂= 0.3 6= 0 det A = 0.375 6= 0

101

Page 108: Calcolo Numerico

7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

(b) La fattorizzazione di A come A = LU si costruisce imponendo:

A =

0

@0.2 1 0.21 6.5 1.750 2 2.25

1

A= LU =

0

@l11 0 0l21 l22 0l31 l32 l33

1

A

0

@1 u12 u130 1 u230 0 1

1

A

Usando le formule di pag. 97, si ottiene

l11 = 0.2

0.2u12 = 1 =) u12 = 5

0.2u13 = 0.2 =) u13 = 1

l21 = 1

1 ·5+ l22 = 6.5 =) l22 = 1.5

1 ·1+1.5u23 = 1.75 =) u23 = 0.5

l31 = 0

0 ·5+ l32 = 2 =) l32 = 2

0 ·1+2 ·0.5+ l33 = 2.25 =) l33 = 1.25

Le matrici L e U sono:

L =

0

@0.2 0 01 1.5 00 2 1.25

1

A U =

0

@1 5 10 1 0.50 0 1

1

A

(c) Si ha det A = detLU = detL detU = detL = 0.375. Quindi det(A°2) = det(A)°2 = 0.375°2 = 7.11111111.(d) Da Ax = b si ha LU x = b.

Si pone U x = y e si hanno i due sistemi da risolvere per sostituzione in avanti e all’indietro: Ly = b eU x = y.

0

@0.2 0 01 1.5 00 2 1.25

1

A

0

@y1y2y3

1

A=

0

@2.8

19.2510.75

1

A=)

8><

>:

y1 = 2.8/0.2 = 14

y2 = (19.25°14)/1.5 = 3.5

y3 = (10.75°2 ·3.5)1.25 = 3

0

@1 5 10 1 0.50 0 1

1

A

0

@x1x2x3

1

A=

0

@143.53

1

A=)

8><

>:

x3 = 3

x2 = 3.5°3 ·0.5 = 2

x1 = 14°3°5 ·2 = 1

Quindi x = (1, 2, 3)T .

Esercizio 7.6.3 È dato il sistema lineare Ax = b dove:

A =

0

@16 °8 4°8 20 44 4 12.25

1

A b =

0

@2028

28.25

1

A

(a) Provare che la matrice è definita positiva.(b) Fattorizzare la matrice secondo Cholesky: A = LLT .(c) Usare la fattorizzazione per risolvere il sistema Ax = b e per calcolare det(A3).

Soluzione

102

Page 109: Calcolo Numerico

7.6. Esercizi

(a) La matrice è simmetrica, definita positiva in quanto gli elementi della diagonale principale sono tuttipositivi e la matrice è diagonalmente dominante in senso stretto:

16 > |°8|+ |4| = 12

20 > |°8|+ |4| = 12

12.25 > |4|+ |4| = 8

(b) Ponendo A = LLT si ricava:

l 211 = 16 =) l11 = 4

l21l11 =°8 =) l21 =°2

l31l11 = 4 =) l31 = 1

l 221 + l 2

22 = 20 =) l22 =p

20°4 = 4

l21l31 + l22l32 = 4 =) l32 = (4+2)/4 = 1.5

l 231 + l 2

32 + l 233 = 12.25 =) l33 =

p12.25°1°2.25 =

p9 = 3

La matrice L è dunque

L =

0

@4 0 0°2 4 01 1.5 3

1

A

(c) Per risolvere il sistema Ax = b, adoperiamo il metodo di sostituzione in avanti e all’indietro risolvendoi sistemi: Ly = b e poi LT x = y.

Il primo sistema dà:

0

@4 0 0°2 4 01 1.5 3

1

A

0

@y1y2y3

1

A=

0

@2028

28.25

1

A

e otteniamo y1 = 20/4 = 5, y2 = (28+10)/4 = 9.5, y3 = (28.25°5°14.25)/3 = 3.Nel risolvere il sistema LT x = y si ha

0

@4 °2 10 4 1.50 0 3

1

A

0

@x1x2x3

1

A=

0

@5

9.53

1

A

da cui x3 = 1, x2 = (9.5°1.5)/4 = 2, x1 = (5°1+4)/4 = 2, quindi x = (2, 2, 1).Inoltre, da det(A) = det(LLT ) = det(L)2 = (4 · 4 · 3)2 = 482 = 2304 e da det(A3) = (det(A))3 si ha

det(A3) = 23043 = 12230590464.

103

Page 110: Calcolo Numerico
Page 111: Calcolo Numerico

CA

PI

TO

LO 8

METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

Mi spiace ammettere che la materiache mi è piaciuta di meno è stata lamatematica. Ci ho pensato su, ecredo che la ragione sia che lamatematica non lascia spazio allediscussioni. Se fai un errore, nonpuoi scamparla.

Malcom X

8.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058.2 Metodi iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068.3 Norme di vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068.4 Norme di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078.5 Autovalori e autovettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088.6 Metodi classici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

8.6.1 Convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108.6.2 Controllo della convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118.6.3 I metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138.6.4 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassamento . . . . . . . . . . . . . . . . 117

8.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

8.1 Introduzione

L’equazione che governa la conduzione del calore in una piastra metallica piana, omogenea e isotropaprende il nome di equazione di Poisson e si scrive come

@2T@x2 + @2T

@y2 = f (x, y)ΩcKH

Si tratta di un’equazione alle derivate parziali dove T [ oC ] è la temperatura, KH [m2/s] è il coefficiente di dif-fusività termica, Ω [K g /m2] è la densità della piastra, c [C al/K g oC ] è il calore specifico, f (x, y) [C al/m2s] è ilcalore aggiunto o sottratto alla piastra per unità di tempo e di area. In letteratura diverse tecniche numerichepermettono di risolvere il problema (ricordiamo i metodi alle differenze finite e i metodi agli elementi finiti),

105

Page 112: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

in determinati punti (detti nodi) della piastra. Qualunque sia il metodo utilizzato, si arriva ad un sistema diequazioni lineari del tipo

HT = q

dove H rappresenta la matrice di discretizzazione del metodo, T rappresenta il vettore delle temperature neinodi e q è il vettore dei termini noti che deriva dal metodo applicato.

La matrice H puó avere una dimensione molto elevata ma ha la caratteristica di essere sparsa, cioè diavere pochi elementi diversi da zero per ogni riga.

Per risolvere sistemi lineari di questo tipo, si preferisce usare metodi iterativi piuttosto che diretti. Inquesto Capitolo presentiamo alcuni dei metodi iterativi per la risoluzione di sistemi lineari.

8.2 Metodi iterativi

Per risolvere un sistema di equazioni lineari Ax = b, applicando un metodo diretto, e trascurando glierrori di arrotondamento, si ottiene la soluzione esatta del problema in un numero finito (e noto a prio-ri) di operazioni. Nei metodi iterativi, invece, si parte da un’approssimazione iniziale che viene migliorata,mediante un procedimento iterativo, fino ad ottenere una approssimazione sufficientemente accurata dellasoluzione. L’idea di risolvere sistemi lineri con metodi iterativi risale ai tempi di Gauss (1823), ma solo conl’avvento dei computers (negli anni cinquanta) si può osservare il loro sviluppo, visto che diventa possibilerisolvere sistemi lineari dove la matrice A è sparsa e di grandi dimensioni – un particolare tipo di proble-ma improponibile per i metodi diretti. Difatti, nei metodi diretti, il processo di eliminazione di Gauss (o ladecomposizione della matrice di partenza nel prodotto LU con L triangolare inferiore e U triangolare supe-riore) porta all’introduzione del cosiddetto fill-in, cioè a matrici L e U con elementi diversi da zero là dovela matrice di partenza A ha elementi nulli. I metodi diretti diventano quindi proibitivi perchè troppo costosiper quanto riguarda il numero di operazioni aritmetiche e l’occupazione di dati che devono essere salvati perl’implementazione numerica del metodo stesso. I metodi iterativi, al contrario, lavorano direttamente sullamatrice A e, dal momento che A viene coinvolta solo in termini di prodotti matrice-vettore, non c’è neanchebisogno di memorizzare tutta la matrice (in genere, quando la matrice è sparsa, si lavora su memorizzazio-ni in forma compatta delle matrici, memorizzando solo gli elementi non nulli che servono per il prodottomatrice-vettore).

Quando abbiamo studiato gli zeri di funzione nel Capitolo 4, data un’approssimazione iniziale, si pro-cedeva nell’algoritmo iterativo fino a quando lo scarto tra due approssimazioni successive non diventavaminore di una prefissata tolleranza.

Nel caso dei sistemi lineari, l’approccio è simile. Si parte da un vettore iniziale che approssima la solu-zione del sistema e, mediante un certo procedimento ricorsivo, si calcola una nuova approssimazione (unvettore). Dobbiamo dunque essere capaci di misurare lo scarto tra due vettori in modo da capire quando lasuccessione dei vettori generati dall’algoritmo tende al vettore soluzione del sistema lineare.

Abbiamo perciò bisogno di definire le norme di vettori e di matrici. Nel seguito, tratteremo solo norme dimatrici e vettori definite nello spazio dei numeri reali (e non complessi).

8.3 Norme di vettori

Il concetto di norma generalizza quello di valore assoluto (o modulo) di un numero reale (o complesso).Sia Rn lo spazio dei vettori colonna di lunghezza n. La norma di un vettore x 2Rn è una funzione, k ·k,Norma

definita in Rn e a valori in R, che gode delle seguenti proprietà:kxk> 0 per ogni x 6= 0kxk= 0 se e solo se x = 0kÆxk= |Æ|kxk dove Æ è un reale (o complesso) arbitrariokx+yk ∑ kxk+kyk

Le principali norme vettoriali sono:Norme 1, 1,2 Norma assoluta (o norma l1), indicata con k ·k1: kxk1 =

Pni=1 |xi |

Norma massima (o norma infinito, l1), indicata con k ·k1: kxk1 = max1∑i∑n |xi |

106

Page 113: Calcolo Numerico

8.4. Norme di matrici

Figura 8.1: Vettori in R2 con norma unitaria nelle norme 1, 1 e 2.

Norma euclidea (o norma l2), indicata con k ·k2: kxk2 =p

xT x =qPn

i=1 |xi |2Tra le norme 1, 1 e 2 valgono le seguenti relazioni (che pongono un’equivalenza tra esse). Dato un vettore

x 2Rn :

kxk1 ∑ kxk2 ∑p

nkxk1kxk1 ∑ kxk1 ∑ nkxk1

Esempio 8.3.1 Il vettore x = (1,5,°20)T ha norme:kxk1 = |1|+ |5|+ |°20| = 26

kxk1 = max(|1|, |5|, |°20|) = 20

kxk2 =p

(12 +52 + (°20)2) =p

426 = 20.639767441

Per la norma euclidea vale la diseguaglianza di Cauchy-Schwarz: Diseguaglianzadi Cauchy-Schwarz

xT y ∑ kxk2kyk2

Dati due vettori x e y 2 Rn , si definisce distanza tra i due vettori la norma della differenza tra i vettori. Distanza travettoriQuindi:

kx°yk1 =nX

i=1|xi ° yi |

kx°yk1 = max1∑i∑n

|xi ° yi |

kx°yk2 =s

nX

i=1|xi ° yi |2

Il concetto di distanza serve per definire il limite di una successione di vettori.Data una successione di vettori in Rn , x(k), per k = 1,2, . . . ,1, si dice che la successione converge ad un

vettore x di Rn e si scrive limk!1 x(k) = x se, per ogni ≤> 0, esiste un intero m tale che Limite di unasuccessionedi vettorikx(k) °xk< ≤ per tutti gli indici k ∏ m

8.4 Norme di matrici

Analogamente alla definizione di norma vettoriale, la norma di matrici quadrate di dimensione n è unafunzione, che indichiamo con k ·k che, per tutte le matrici A e B di dimensione n e per tutti i numeri reali (ocomplessi) Æ, soddisfa le seguenti proprietà:

107

Page 114: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

kAk> 0 per ogni A 6= 0kAk= 0 se e solo se A = 0kÆAk= |Æ|kAkkA+Bk ∑ kAk+kBkkABk ∑ kAkkBk

Una proprietà importante che si richiede alle norme su matrici è che siano compatibili con norme vet-toriali: la norma kAk di una matrice A si dice compatibile con la norma kxk di un vettore x se vale larelazioneNorma

compatibile

kAxk ∑ kAkkxk

Alcune norme su matrici sono generate da norme su vettori: si parla allora di norma naturale o indottadalla norma di vettori. In particolare, se k · k è una norma su vettori in Rn , allora kAk = maxkxk=1 kAxk è laNorma

naturale norma naturale o indotta dalla norma k ·k su vettori.Le norme di matrici indotte dalla norma 1 e dalla norma infinito su vettori sono:

Norma 1: kAk1 = max jPn

i=1 |ai j | (data dal massimo sulla somma delle colonne)Norma infinito: kAk1 = maxi

Pnj=1 |ai j | (data dal massimo sulla somma delle righe)

La norma di matrice indotta dalla norma 2 è più complicata e vedremo in seguito come è definita.È facile vedere che le norme naturali sono norme compatibili con la norma di vettori da cui sono costruite.Una norma di matrici, che non è indotta, ma compatibile con la norma 2 è la cosiddetta norma euclidea

(o di Frobenius). Tenendo presente che, data una matrice A, si chiama traccia della matrice o tr (A) la sommatraccia di unamatrice degli elementi della diagonale principale di A, la norma euclidea è data da

N (A) =p

tr (AT A) =p

tr (A AT ) =rPn

i=1j=1

|ai j |2.

8.5 Autovalori e autovettori

Data una matrice quadrata A di ordine n, se esiste un numero (reale o complesso) ∏ e un vettore x 6= 0 taliche

Ax =∏x

allora ∏ è un autovalore e x il corrispondente autovettore della matrice A.Autovalore eautovettore Scritta in maniera equivalente, la relazione definisce il sistema lineare

(A°∏I )x = 0

Poichè x 6= 0 e il termine noto del sistema è il vettore di tutti zeri, il determinante della matrice del sistemadeve necessariamente essere uguale a zero, cioè det(A°∏I ) = 0.

Lo sviluppo del determinante porta a un polinomio di grado n nell’incognita ∏:

∏n ° tr (A)∏n°1 + . . .+ (°1)n det(A) = 0

Questo polinomio si chiama polinomio caratteristico. Le sue n radici, che chiamiamo ∏1,∏2, . . . ,∏n , sono gliPolinomiocaratteristico n autovalori della matrice A.

Per le proprietà dei polinomi vale:

nX

i=1∏i = tr (A) = a11 +a22 + . . .+ann e

nY

i=1∏i = det(A)

Alcune proprietà sugli autovalori e autovettori sono le seguenti:

Se ∏ è autovalore della matrice A, allora ∏k è autovalore della matrice potenza Ak (cioè A · A · · · A kvolte).

108

Page 115: Calcolo Numerico

8.5. Autovalori e autovettori

Figura 8.2: Autovalori e autovettori

Gli autovalori di una matrice A e della sua trasposta AT sono gli stessi (ma gli autovettori sono, ingenere, diversi).Se A e B sono due matrici arbitrarie regolari, allora gli autovalori di AB sono gli stessi di B A.

Se x è un autovettore associato alla matrice A, allora Ax = ∏x: la matrice A trasforma il vettore x in unvettore le cui componenti sono moltiplicate per ∏: se ∏> 1, allora A ha l’effetto di allungare x di un fattore ∏;se invece 0 < ∏< 1, allora x si restringe di un fattore ∏; gli effetti sono simili, ma il verso del vettore risultanteAx è opposto, quando ∏< 0. I quattro casi che si possono presentare sono illustrati in Figura 8.2.

Altre proprietà da tenere presenti sono le seguenti:Se tutti gli n autovalori di una matrice A sono distinti, allora gli n autovettori u(1),u(2), . . .u(n) sonolinearmente indipendenti.1

Se A è una matrice simmetrica reale definita positiva, allora i suoi autovalori sono tutti reali e positivi.Introduciamo ora il raggio spettrale di una matrice A . Raggio

spettrale

Definizione 8.5.1 Il raggio spettrale Ω(A) di una matrice A è definito da

Ω(A) = max∏ autovalore di A

|∏|

Quindi il raggio spettrale è il massimo, in modulo, degli autovalori di A (ricordiamo che se ∏ è uncomplesso, ∏=Æ+ iØ, con i =

p°1, si ha |∏| =

pÆ2 +Ø2).

Possiamo ora definire la norma 2 su matrici indotta dalla norma 2 su vettori. Si può, infatti, provare che Norma 2 sumatrici

kAk2 =qΩ(AT A).

Inoltre, per ogni norma naturale, vale il risultato

Ω(A) ∑ kAk

Nello studiare i metodi iterativi per risolvere i sistemi lineari, sarà di particolare importanza sapere quan-do le potenze di una matrice tendono alla matrice nulla. Matrici A, per cui (Ak )i j ! 0 per k !1, qualunquesia i , j = 1,2, . . . ,n, (consideriamo A · A · · · A k volte e gli elementi della matrice risultante tendono a zero perk !1) si dicono matrici convergenti. Diciamo che una matrice A di dimensione n è convergente se Matrice

convergentelim

k!1(Ak )i j = 0, i , j = 1,2, . . . ,n

Si ha il seguente teorema.

Teorema 8.5.1 Data una matrice A di dimensione n, sono equivalenti le seguenti proposizioni1. A è una matrice convergente.2. limk!1kAkk= 0, per qualche norma naturale.3. limk!1kAkk= 0, per tutte le norme naturali.4. Ω(A) < 1.5. limk!1 Ak x = 0, qualunque sia il vettore x.

1Dati n vettori linearmente indipendenti di Rn, u(1),u(2), . . .u(n), ogni vettore di Rn

si può scrivere come una loro combinazionelineare. Quindi esistono n coefficientiÆ1,Æ2, . . . ,Æn per cui x =Æ1u(1)+Æ2u(2)+. . .+Æn u(n). Inoltre, per vettori linearmente indipendentivale il risultato: Æ1u(1) +Æ2u(2) + . . .+Æn u(n) = 0 se e solo se tutti i coefficienti Æi sono uguali a zero, per i = 1,2, . . . ,n.

109

Page 116: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

8.6 Metodi classici

I metodi iterativi classici per la risoluzione di un sistema di equazioni lineari del tipo Ax = b si basano suun’idea molto semplice.

Si parte da un’approssimazione iniziale x(0), commettendo un’errore e(0) = x°x(0). L’errore e(0) è solu-zione del sistema Ae(0) = b° Ax(0) = r(0), dove r(0) è il residuo (ciò che resta fuori, ci dice di quanto ilvettore Ax(0) si discosta da b).Successivamente si definisce il passo x(1) come x(1) = x(0) +p(0), dove ora p(0) è soluzione del sistemaMp(0) = r0, in cui la matrice M è più semplice della A e, allo stesso tempo, M°1 approssima in qualchemodo A°1.Il procedimento viene iterato fino a convergenza.

Da queste richieste tra loro contradditorie, si sviluppa una strategia che porta alla soluzione esatta x comelimite della successione dei valori approssimati x(k).

Il processo iterativo si legge, infatti, come:

x(k+1) = x(k) +M°1(b° Ax(k)) k = 0,1, . . . .

O, equivalentemente,x(k+1) = (I °M°1 A)x(k) +M°1b k = 0,1, . . .

Notiamo che, ad ogni passo, non dobbiamo calcolare esplicitamente M°1, perchè risolviamo problemi deltipo Mp(k) = r(k) = b° Ax(k) in modo da porre x(k+1) = x(k) +p(k). La matrice E = I °M°1 A è detta matrice diiterazione del metodo. Nel seguito, per semplicità, poniamo q = M°1b.

Lo schema iterativo appena descritto è un metodo stazionario (cioè non dipende dall’iterazione k) epuò essere visto come caso particolare di uno schema di punto fisso per equazioni nonlineari: la funzio-ne g tale che x(k+1) = g (x(k)) converga alla soluzione del sistema Ax = b, è data da g (x) = x+M°1(b° Ax) oequivalentemente da g (x) = Ex(k) +q.

8.6.1 Convergenza

Per studiare la convergenza di un metodo iterativo, consideriamo, per ogni vettore x(k), il residuo r(k) =b° Ax(k) e l’errore e(k) = x°x(k). Osserviamo che si ha la relazione r(k) = Ae(k). Infatti

Ae(k) = A(x°x(k)) = Ax° Ax(k) = b° Ax(k) = r(k)

Lo schema converge quando la successione x(k) converge alla soluzione x per k ! 1, ovvero quandolimk!1 e(k) = 0 qualunque sia il vettore iniziale x(0).

Consideriamo lo schema iterativo x(k+1) = Ex(k) +q.È facile vedere che per la soluzione esatta x vale la relazione x = Ex+q.Consideriamo x°x(k). Si ha

x = Ex+q

x(k) = Exk°1 +q

e sottraendo si ricava

e(k) = Ee(k°1)

La relazione appena trovata vale, alla stessa maniera, tra l’errore e(k°1) e l’errore e(k°2) per cui possiamoscrivere e(k°1) = Ee(k°2).

Scriviamo queste relazioni dall’iterazione k fino ad arrivare all’iterazione 0.

110

Page 117: Calcolo Numerico

8.6. Metodi classici

e(k) = Ee(k°1)

e(k°1) = Ee(k°2)

e(k°2) = Ee(k°3)

... =...

e(2) = Ee(1)

e(1) = Ee(0)

Partendo, ora, dalla prima relazione e, andando a sostituire, ogni volta, a secondo membro, la relazionesuccessiva, si ha:

e(k) = Ee(k°1) = E(Ee(k°2)) = E 2e(k°2) = E 2(Ee(k°3)) = E 3e(k°3) = . . . = E k e(0)

Osserviamo che E k rappresenta la potenza k della matrice E , cioè la E ·E · · ·E k volte.Il metodo converge se e(k) ! 0 per k ! 1. Poichè l’errore iniziale è arbitrario, si ha che limk!1 e(k) =

limk!1 E k e(0) = 0 se e solo se limk!1 E k = 0.Per il teorema sulla convergenza di matrici (si veda pag. 109), questo si ha se e solo se Ω(E) < 1. Si può

dunque stabilire il seguente teorema.

Teorema 8.6.1 Lo schema iterativo

x(k+1) = Ex(k) +q k ∏ 0

converge qualunque sia il vettore iniziale x0 al vettore x = Ex+q = A°1b se e solo se Ω(E) < 1.

Questo risultato lo si può provare facilmente, nel caso in cui la matrice di iterazione E abbia n autovaloridistinti e, quindi, possieda n autovettori linearmente indipendenti, per cui l’errore iniziale e(0) si può scriverecome e(0) = Æ1u(1) +Æ2u(2) + . . .+Æn u(n), dove Æ1,Æ2, . . . ,Æn sono delle costanti, mentre u(1), u(2) . . .u(n) sonogli autovettori associati, rispettivamente, a ∏1, ∏2, . . . ,∏n . Supponiamo che gli autovalori siano in ordine de-crescente in modulo, cioè: |∏1| > |∏2| > . . . > |∏n |, per cui Ω(E) = |∏1|. In tal caso si può scrivere (ricordandoche, se ∏ è un autovalore associato alla matrice A, con u un autovettore ad esso associato, si ha Ak u =∏k u)

e(k) = E k e(0) = E k (Æ1u(1) +Æ2u(2) + . . .+Æn u(n))

=Æ1E k u(1) +Æ2E k u(2) + . . .+ÆnE k u(n)

=Æ1∏k1 u(1) +Æ2∏

k2 u(2) + . . .+Æn∏

kn u(n)

mettiamo in evidenza ∏k1

=∏k1

Æ1u(1) +Æ2∏k

2

∏k1

u(2) + . . .+Æn∏k

n

∏k1

u(n)

!

per k !1 si ha∏k

i

∏k1

! 0 per i = 2,3, . . . ,n

º∏k1Æ1u(1)

Perciò limk!1 e(k) = limk!1∏k1Æ1u(1) = 0 se e solo se∏k

1 ! 0 e questo si ha se e solo se |∏1| < 1. Ma |∏1| = Ω(E):ritroviamo il risultato visto prima.

8.6.2 Controllo della convergenza

Oltre a sapere che lo schema iterativo converge, è importante conoscere quanto velocemente lo schemaconverge. A tal proposito osserviamo che, in condizioni asintotiche (per k !+1) vale il seguente risultato2

ke(k)k º Ω(E)kke(0)k (8.1)2 Questa relazione vale anche per matrici con autovalori non distinti tra loro.

111

Page 118: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

Scrivendo l’equazione (8.1) per l’iterazione k ° 1 e facendo il rapporto tra le norme degli errori a due passisuccessivi si ha:

ke(k)kke(k°1)k

º Ω(E)

Ricaviamo, quindi, che il metodo iterativo ha convergenza lineare con costante asintotica uguale al raggiospettrale della matrice di iterazione.

La relazione appena trovata è utile per stabilire quanto veloce è il metodo iterativo per approssimare lasoluzione del sistema con una certa accuratezza. Ad esempio, vogliamo stabilire a priori quante iterazionioccorrono per ridurre la norma dell’errore iniziale di un certo fattore, ad esempio 10 (il che vuol dire ridurrel’errore di un ordine di grandezza). Vogliamo dunque capire quale deve essere il valore di k per cui ke(k)k =ke(0)k

10. Ma ke(k)k º Ω(E)kke(0)k da cui

Ω(E)kke(0)k º ke(0)k10

=) Ω(E)k º 110

Applicando il logaritmo in base 10 ad ambo i membri si ha

k log10(Ω(E)) º°1 =) k º° 1log10 (Ω(E))

cioè occorrono k iterazioni con k dato dal più piccolo intero che soddisfa la relazione appena scritta. Menoiterazioni occorrono fare, più veloce è il metodo.

Si definisce perciò velocità asintotica di convergenzaVelocitàasintotica diconvergenza

R =° log10 (Ω(E)) =° log10 (Ω(E k ))

k

Osserviamo che, essendo Ω(E) < 1, nelle ipotesi in cui il metodo converge, log10 (Ω(E)) < 0 e, di conseguenza,R > 0. Se vogliamo ridurre l’errore iniziale di una certa quantità ≤, rifacendo i conti come prima, da una partevogliamo che sia ke(k)k ∑ ≤ke(0)k, dall’altra sappiamo che ke(k)k º Ω(E)kke(0)k. Uguagliando i termini abbiamo

Ω(E)kke(0)k ∑ ≤ke(0)k=) Ω(E)k ∑ ≤

Passando ai logaritmi (di quantità minori di uno) si ha

k log10(Ω(E)) ∑ log10 (≤) =)°k log10(Ω(E)) ∏° log10 (≤) =) k ∏° log10 (≤)

R

Troviamo in questo modo quante iterazioni (il primo intero k che verifica la relazione precedente) occorrefare per poter ridurre l’errore iniziale di ≤.

Se si traccia un grafico semilogaritmico del profilo di convergenza dello schema iterativo, ponendo sul-l’asse delle ascisse il numero delle iterazioni e sull’asse delle ordinate la norma dell’errore, si può vedere chela velocità asintotica di convergenza è legata alla pendenza della retta. Infatti, riconducendoci, per semplici-tà, al caso in cui la matrice di iterazione abbia n autovalori distinti tra loro e ordinati in senso crescente, dallarelazione (vista a pag. 111)

e(k) º∏k1Æ1u(1)

passando alle norme e ai logaritmi in base 10 si ha

log10 ke(k)k º k log10 |∏1|+costante

La pendenza del grafico è l’opposto della velocità asintotica di convergenza R.Nel caso in cui non è nota la soluzione esatta x, poichè ke(k)k º kx(k) °x(k°1)k = kd(k)k (valgono le stesse

considerazioni viste per gli schemi iterativi per funzioni non lineari a pag. 53), ritroviamo lo stesso risultatosul profilo di convergenza semilogaritmico in cui si pone sull’asse delle ascisse il numero delle iterazioni esull’asse delle ordinate la norma degli scarti.

112

Page 119: Calcolo Numerico

8.6. Metodi classici

Figura 8.3: La matrice A come somma delle matrici L, D e U .

8.6.3 I metodi

Si scriva la matrice A come somma della matrice che ha i soli elementi diagonali di A (che chiamiamoD), della matrice costituita dai soli elementi della parte triangolare bassa di A (che chiamiamo L) e dai solielementi della parte triangolare alta di A (che denotiamo con U ),

A = L+D +U

In questo modo è facile ricavare i metodi iterativi di Jacobi, Gauss-Seidel e di rilassamento, che sono i metodiiterativi classici per la soluzione di sistemi lineari.

L’ipotesi da fare è che A abbia elementi diagonali diversi da zero (ai i 6= 0 per i = 1,2, . . . ,n,n, da cui lamatrice diagonale D è invertibile).

Se la matrice A è simmetrica, definita positiva, necessariamente ai i 6= 0. Altrimenti, poichè A è non singo-lare (se così non fosse non potremmo risolvere il sistema), le equazioni del sistema possono essere riordinatein modo da avere la matrice risultante con elementi diagonali diversi da zero.

Il metodo di Jacobi

Il metodo di Jacobi3 (o degli spostamenti simultanei - o rilassamento simultaneo) si ha ponendo M = Dda cui la matrice di iterazione diventa E J = I °D°1 A = I °D°1(L+D +U ) =°D°1(L+U ).

Scrivendo lo schema iterativo per Jacobi, si ha, in forma matriciale:

x(k+1) = E J x(k) +D°1b

x(k+1) =°D°1(L+U )x(k) +D°1b

Per ricavare questo schema, si può partire dal sistema lineare Ax = b e scrivere la matrice A come L+D+U .Si ha

(L+D +U )x = b

si porta a secondo membro (L+U )x

Dx =°(L+U )x+b

si moltiplicano ambo i membri per l’inversa della matrice D

x =°D°1(L+U )x+D°1b

si innesca il metodo iterativo considerando il vettore x a primo membro dell’equazione

all’iterazione k +1 e quello a destra all’iterazione k

x(k+1) =°D°1(L+U )x(k) +D°1b

3Carl Gustav Jacob Jacobi (1804-1851) fu un grande matematico tedesco. Tra i suoi numerosi studi ricordiamo quelli sulle funzioniellittiche, sulla teoria dei numeri e sulla meccanica celeste.

113

Page 120: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

Componente per componente, il metodo di Jacobi si scrive, per i = 1,2, . . . ,n, come

x(k+1)i =

(D°1)i i1

ai i*

2

664bi °((L+U )x(k))inX

j=1, j 6=iai j x(k)

j

*

3

775

o, equivalentemente,

x(k+1)i =

(D°1)i i1

ai i*

2

664bi °

(Lx(k))ii°1X

j=1ai j x(k)

j

*

°(U x(k))i

nX

j=i+1ai j x(k)

j

*

3

775 per i = 1, . . . ,n

La formula la si può ricavare direttamente, scrivendo, equazione per equazione, il sistema da risolvereAx = b:

a11x1 +a12x2 +a13x3 + . . .+a1n xn = b1

a21x1 +a22x2 +a23x3 + . . .+a2n xn = b2

... =...

ai 1x1 +ai 2x2 +ai 3x3 + . . .+ai n xn = bi

... =...

an1x1 +an2x2 +an3x3 + . . .+ann xn = bn

Dalla prima equazione “isoliamo” la prima incognita rispetto a tutte le altre; dalla seconda equazione“isoliamo” la seconda incognita e così via per le altre equazioni, ottenendo:

a11x1 = b1 ° (a12x2 +a13x3 + . . .+a1n xn)

a22x2 = b2 ° (a21x1 +a23x3 + . . .+a2n xn)

... =...

ai i xi = bi ° (ai 1x1 +ai 2x2 + . . .+ai i°1xi°1 +ai i+1xi+1 + . . .+ai n xn)

... =...

ann xn = bn ° (an1x1 +an2x2 +an3x3 + . . .+ann°1xn°1)

Dividendo l’i -sima equazione per il coefficiente ai i , per i = 1,2, . . . ,n, ricaviamo

x1 =1

a11[b1 ° (a12x2 +a13x3 + . . .+a1n xn)]

x2 =1

a22[b2 ° (a21x1 +a23x3 + . . .+a2n xn)]

... =...

xi =1

ai i[bi ° (ai 1x1 +ai 2x2 + . . .+ai i°1xi°1 +ai i+1xi+1 + . . .+ai n xn)]

... =...

xn = 1ann

[bn ° (an1x1 +an2x2 +an3x3 + . . .+ann°1xn°1)]

114

Page 121: Calcolo Numerico

8.6. Metodi classici

Se pensiamo di partire da un vettore inziale x(0), il vettore x(1) si ottiene dalle equazioni precedenti, po-nendo a secondo membro di ciascuna equazione le componenti del vettore x(0). Si ricava, in tal modo, laformula ricorsiva dello schema di Jacobi:

x(k+1)1 = 1

a11

hb1 °

≥a12x(k)

2 +a13x(k)3 + . . .+a1n x(k)

n

¥i

x(k+1)2 = 1

a22

hb2 °

≥a21x(k)

1 +a23x(k)3 + . . .+a2n x(k)

n

¥i

... =...

x(k+1)i = 1

ai i

hbi °

≥ai 1x(k)

1 +ai 2x(k)2 + . . .+ai i°1x(k)

i°1 +ai i+1x(k)i+1 + . . .+ai n x(k)

n

¥i

... =...

x(k+1)n = 1

ann

hbn °

≥an1x(k)

1 +an2x(k)2 +an3x(k)

3 + . . .+ann°1x(k)n°1

¥i

Ritroviamo, dunque, la formula scritta prima in forma compatta.La formula in funzione del residuo r(k) = b° Ax(k) è data invece da x(k+1) = x(k) +D°1r(k).

Il Metodo di Gauss-Seidel

Nell’algoritmo di Gauss-Seidel4 si pone M = D +L ottenendo la matrice ES = I ° (D +L)°1 A = I ° (D +L)°1(L+D +U ) =°(D +L)°1U . Lo schema iterativo è:

x(k+1) = ES x(k) + (D +L)°1b

Lo schema di Gauss-Seidel si può ricavare a partire dal sistema lineare Ax = b nel modo seguente:

Ax = b

(L+D +U )x = b

si porta a secondo membro U x

(D +L)x =°U x+b

si moltiplicano ambo i membri per l’inversa della matrice (D +L)

x =°(D +L)°1U x+ (D +L)°1b

si innesca il metodo iterativo considerando il vettore x a primo membro dell’equazione

all’iterazione k +1 e quello a destra all’iterazione k

x(k+1) =°(D +L)°1U x(k) + (D +L)°1b

Moltiplicando ambo i membri per (D +L) si ha

(D +L)x(k+1) = b°U x(k)

Dx(k+1) = b°Lx(k+1) °U x(k)

da cui

x(k+1) = D°1≥b°Lx(k+1) °U x(k)

¥

Componente per componente si ha

4 Philipp Ludwig von Seidel (1821-1896) fu un matematico tedesco. Il suo lavoro più importante riguarda le aberrazioni ottiche.

115

Page 122: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

x(k+1)i = 1

ai i

"

bi °i°1X

j=1ai j x(k+1)

j °nX

j=i+1ai j x(k)

j

#

per i = 1, . . . ,n

Il metodo è detto anche degli spostamenti successivi, in quanto il calcolo delle componenti del vettorex(k+1) è fatto utilizzando le componenti già calcolate del vettore stesso. Infatti, per i > 1, è ragionevole pensareche i valori già calcolati x(k+1)

1 , x(k+1)2 , . . . , x(k+1)

i°1 possano essere utilizzati per dare una migliore approssimazio-

ne del valore x(k+1)i . Dalle equazioni del sistema, ragionando come per il metodo di Jacobi, possiamo quindi

scrivere:

a11x(k+1)1 = b1 °

≥a12x(k)

2 +a13x(k)3 + . . .+a1n x(k)

n

¥

a22x(k+1)2 = b2 °

≥a21x(k+1)

1 +a23x(k)3 + . . .+a2n x(k)

n

¥

... =...

ai i x(k+1)i = bi °

≥ai 1x(k+1)

1 +ai 2x(k+1)2 + . . .+ai i°1x(k+1)

i°1 +ai i+1x(k)i+1 + . . .+ai n x(k)

n

¥

... =...

ann x(k+1)n = bn °

≥an1x(k+1)

1 +an2x(k+1)2 +an3x(k+1)

3 + . . .+ann°1x(k+1)n°1

¥

Dividendo ambo i membri dell’equazione i -sima per ai i (per i = 1,2, . . . ,n) si ha:

x(k+1)1 = 1

a11

hb1 °

≥a12x(k)

2 +a13x(k)3 + . . .+a1n x(k)

n

¥i

x(k+1)2 = 1

a22

hb2 °

≥a21x(k+1)

1 +a23x(k)3 + . . .+a2n x(k)

n

¥i

... =...

x(k+1)i = 1

ai i

hbi °

≥ai 1x(k+1)

1 +ai 2x(k+1)2 + . . . ai i°1x(k+1)

i°1 +ai i+1x(k)i+1 + . . .+ai n x(k)

n

¥i

... =...

x(k+1)n = 1

ann

hbn °

≥an1x(k+1)

1 +an2x(k+1)2 +an3x(k+1)

3 + . . .+ann°1x(k+1)n°1

¥i

Usando il residuo, lo schema di Gauss-Seidel si scrive come

x(k+1) = x(k) + (D +L)°1r(k)

Il metodo di rilassamento

Ciascuno dei metodi di Jacobi e Gauss-Seidel può essere anche rilassato tramite un fattore ! in modo chela nuova approssimazione x(k+1) sia ottenuta come una combinazione di x(k+1) e x(k) mediante il fattore !. Inpratica:

x(k+1) √° (1°!)x(k) +!x(k+1)

Questa operazione viene fatta direttamente nel momento in cui si stabilisce il metodo iterativo conrilassamento.

Si può osservare che il metodo di Jacobi rilassato non produce effettivi miglioramenti rispetto al metodonon rilassato. Invece, il metodo di Gauss-Seidel rilassato può produrre un metodo molto più veloce in termini

116

Page 123: Calcolo Numerico

8.6. Metodi classici

di convergenza e, quindi, preferibile rispetto al metodo senza rilassamento. Come metodo di rilassamento,dunque, consideriamo il metodo di rilassamento ottenuto da Gauss-Seidel. Per scelte di ! nell’intervallo]0,1[ si parla di metodo Sotto-Rilassato, o Under-Relaxation (e in genere è usato per ottenere convergenzanella soluzione di sistemi che non convergono con il metodo di Gauss-Seidel). Per valori di ! nell’intervallo[1,2[ si ha, invece, il metodo noto come metodo di sovra-rilassamento o SOR (Successive Over-Relaxation) –usato per accelerare la convergenza in sistemi che sono convergenti con il metodo di Gauss-Seidel.

Lo schema di rilassamento, applicato al metodo di Gauss-Seidel, è dato da

x(k+1)i = (1°!)x(k)

i + !

ai i

"

bi °i°1X

j=1ai j x(k+1)

j °nX

j=i+1ai j x(k)

j

#

per i = 1, . . . ,n

La matrice di iterazione del metodo di rilassamento si ricava scrivendo in forma matriciale l’algoritmoappena descritto

x(k+1) = (1°!)x(k) +!D°1≥b°Lx(k+1) °U x(k)

¥

x(k+1) =£(1°!)I °!D°1U

§x(k) °!D°1Lx(k+1) +!D°1b

(I +!D°1L)x(k+1) =£(1°!)I °!D°1U

§x(k) +!D°1b

Moltiplicando ambo i membri per D , si ricava

(D +!L)x(k+1) = [(1°!)D °!U ]x(k) +!b

La matrice di iterazione del metodo è dunque

E = (D +!L)°1 [(1°!)D °!U ]

= (D +!L)°1 [(1°!)D °!(A°D °L)]

= (D +!L)°1 [(D +!L)°!A]

=£I °!(D +!L)°1 A

§

A questo punto, ci si può chiedere quale sia l’! ottimale nel metodo di rilassamento. L’! ottimale è quelloche fa sì che il metodo di rilassamento converga nel minor numero di iterazioni (quindi, l’! ottimale rendeminimo il raggio spettrale della matrice di iterazione). Vedremo, per particolari matrici A, quando è possibilestabilire a priori quale sia l’! ottimale per risolvere il sistema lineare Ax = b.

8.6.4 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassamento

Le matrici di iterazione dei tre metodi appena descritti sono scritte in Tabella 8.6.4 Perchè ci sia

metodo matriceJacobi E J = I °D°1 A =°D°1(L+U )Gauss-Seidel ES = I ° (D +L)°1 A =°(D +L)°1Urilassamento E! = I °!(D +!L)°1 A

Tabella 8.1: Matrici di iterazione dei metodi di Jacobi, Gauss-Seidel, rilassamento

convergenza, il raggio spettrale della matrice di iterazione deve essere minore di uno.Per i metodi di Jacobi e di Gauss-Seidel si può provare la convergenza del metodo, se la matrice A ha una

delle seguenti caratteristiche:A è diagonalmente dominante in senso stretto

117

Page 124: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

A è a diagonalmente dominante (per righe o per colonne) ed è irriducibile5.Si ha inoltre, questo risultato:

se A è simmetrica non singolare con elementi principali reali e positivi, allora il metodo di Gauss-Seidelè convergente se e solo se A è definita positiva.

Per quanto riguarda il metodo di rilassamento, condizione necessaria per la convergenza è |!°1| < 1, cioè! deve appartenere all’intervallo [0,2] ( per 0 < ! < 1 si ha sotto-rilassamento e per 1 ∑ ! < 2 si ha sovra-rilassamento).

Difatti il determinante della matrice di iterazione del metodo di rilassamento vale6 detE! = (1°!)n e,poichè il prodotto degli autovalori di una matrice è uguale al determinante della matrice stessa, segue 7 larelazione Ω(E!) ∏ |1 °!|. Quindi, se |1 °!| > 1, sicuramente il metodo di rilassamento non convergerà.Perciò, condizione necessaria per la convergenza è |1°!| < 1.

Si ha questo importante teorema.

Teorema 8.6.2 (Ostrowski-Reich) Se A è definita positiva e ! è un numero reale nell’intervallo ]0,2[, allora ilmetodo di rilassamento è convergente.

La convergenza del metodo di rilassamento si ha, inoltre, per A simmetrica con elementi diagonalipositivi ed elementi extra-diagonali negativi o nulli, se e solo se A è definita positiva.

Un altro interessante teorema mette in relazione il metodo di rilassamento con i metodi di Jacobi e di Gauss-Seidel, sia per quanto riguarda la convergenza, sia per quanto riguarda il valore ottimale del parametro !, incorrispondenza di matrici A che godono della cosidetta proprietà A e che siano coerentemente ordinate.

Definizione 8.6.1 Una matrice A, di dimensione n, si dice che ha proprietà A se esiste una matrice dipermutazione P tale che la matrice PAP T abbia la forma

PAP T =µD1 A1A2 D2

dove D1 e D2 sono matrici diagonali.

Una matrice con proprietà A si dice biciclica.Equivalentemente, una matrice A, di dimensione n, ha proprietà A se l’insieme dei numeri naturali

{1,2, . . . ,n} può essere scomposto in due sottoinsiemi non vuoti e complementari8 S e T in modo tale che

5cioè non può essere messa sotto la formaµ

P Q; R

6 Dalla definizione di E! si ha detE! = det[(D +!L)°1((1°!)D °!U )]. Poichè il determinante del prodotto di due matrici è ugualeal prodotto dei determinanti delle matrici stesse, si ha detE! = det[(D +!L)°1]det[(1°!)D °!U )] = detD°1(1°!)n detD . Si arrivaa questo risultato, tenendo presente il fatto che il determinante di una matrice triangolare è uguale al prodotto degli elementi delladiagonale principale.

7 Infatti, considerando ∏i autovalore della matrice E!, per i = 1,2, . . . ,n e Ω(E!) il raggio spettrale, si ha detE! = Qni=1∏i ∑Qn

i=1Ω(E!) = Ω(E!)n da cui segue (1°!)n ∑ Ω(E!)n , cioè Ω(E!) ∏ |1°!|.8Due insiemi S e T non vuoti si dicono complementari di V = {1,2, . . . ,n} se S 6= ;, T 6= ;, S [T = V e, inoltre, se i 2 S, i 62 T e,

viceversa, se j 2 T, j 62 S

118

Page 125: Calcolo Numerico

8.6. Metodi classici

i coefficienti non nulli ai j 6= 0 si hanno per i = j oppure per i 2 S e j 2 T oppure per i 2 T e j 2 S.

Esempio 8.6.1 La matrice tridiagonale

A =

0

BB@

2 °1 0 0°1 2 °1 00 °1 2 °10 0 °1 2

1

CCA

ha proprietà A (o è biciclica): permutando la prima e quarta riga e la prima e quarta colonna, mediante la

matrice di permutazione P =

0

BB@

0 0 0 10 1 0 00 0 1 01 0 0 0

1

CCA si ha

PAP T =

0

BB@

2 0 °1 00 2 °1 °1°1 °1 2 00 °1 0 2

1

CCA=) D1 = D2 =µ2 00 2

Possiamo scegliere S = {1,3} e T = {2,4}.

Definizione 8.6.2 Una matrice si dice coerentemente ordinata in relazione ad un vettore di ordinamento q, dilunghezza n, se per ogni coefficiente ai j non nullo, con i 6= j , si verifica:

se j > i allora q j °qi = 1se j < i allora q j °qi =°1

Un’altra definizione di matrice con coerente ordinamento considera la matrice A data non dalla scompo-sizione A = L +D +U che abbiamo visto fino ad ora ma come A = D(L A + I +UA), (osserviamo che, rispettoalla prima scomposizione, abbiamo messo in evidenza la matrice diagonale D e quindi le matrici triango-lari superiore e inferiore sono L A = D°1L e UA = D°1U ). Sia D non singolare. Allora la matrice A è dettacoerentemente ordinata se gli autovalori della matrice J (Æ) =ÆL A +Æ°1UA , con Æ 6= 0 sono indipendenti dalparametro Æ.

Le matrici con proprietà A (o bicicliche) nella forma A =µD1 A1A2 D2

∂(P = I nella definizione di proprietà

A) sono coerentemente ordinate.Le matrici tridiagonali sono un esempio di matrici bicicliche e coerentemente ordinate.Per il metodo di rilassamento si può provare il seguente risultato.

Teorema 8.6.3 (Young) Se A è una matrice con proprietà A e coerente ordinamento e 0 <!< 2, allora:se µ è autovalore della matrice di iterazione di Jacobi E J , ogni ∏ che verifica la relazione (∏+!°1)2 =∏!2µ2 è autovalore di E!;se ∏ è autovalore non nullo di E!, allora ogni µ che verifica la relazione precedente è autovalore di E J ;se gli autovalori di E J sono reali e il metodo di Jacobi converge (Ω(E J ) < 1), esiste uno ed uno solo !optche rende ottimale il metodo di rilassamento, tale cioè che Ω(!opt ) = min0<!<2Ω(E!). Risulta

!opt =2

1+p

1°Ω(E J )2e Ω(E!opt ) =!opt °1

Per ! = 1 il metodo di rilassamento coincide con il metodo di Gauss-Seidel. Allora, per matrici con pro-prietà A e coerentemente ordinate, nelle ipotesi del teorema di Young, valendo la relazione (∏+!° 1)2 =∏!2µ2, si trova, per ! = 1, ∏2 = ∏µ2 da cui Ω(ES ) = Ω(E J )2. Come conseguenza, si ha che il metodo diGauss-Seidel ha velocità doppia rispetto al metodo di Jacobi.

119

Page 126: Calcolo Numerico

8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

8.7 Esercizi

Esercizio 8.7.1 Sia dato il sistema lineare Ax = b, dove

A =

0

@8 2 67 5 01 0 5

1

A b =

0

@30347

1

A

(a) Provare che gli schemi di Jacobi e di Seidel convergono e calcolare la velocità asintontica diconvergenza di entrambi gli schemi.

(b) A partire dallo stesso vettore iniziale x(0) = (0 0 0)T , calcolare le approssimazioni x(1) e x(2) che siottengono applicando lo schema di Jacobi e lo schema di Seidel.

Svolgimento

(a) La matrice A non è diagonalmente dominante nè per righe nè per colonne (vedasi la seconda riga ela terza colonna). Non possiamo usare il criterio di matrice diagonalmente dominante per provare laconvergenza dei due metodi. La matrice A è biciclica e coerentemente ordinata (si veda lo schema a

croce che individua D1 = (8) e D2 =µ5 00 5

∂):

8 2 67 5 01 0 5

Quindi se proviamo che lo schema di Jacobi converge, cioè che l’autovalore di massimo modulo dellamatrice di Jacobi è reale e in modulo minore di 1, allora, poichè per matrici bicicliche e coerentemen-te ordinate vale Ω(E J )2 = Ω(ES ), allora anche il metodo di Gauss-Seidel convergerà alla soluzione (daΩ(E J ) < 1 segue Ω(ES ) < 1). La matrice di Jacobi è E J = I °D°1 A cioè

E J =

0

@0 °2/8 °6/8

°7/5 0 0°1/5 0 0

1

A=

0

@0 °1/4 °3/4

°7/5 0 0°1/5 0 0

1

A

Troviamo gli autovalori della matrice E J imponendo det(E J °µI ) = 0.

ØØØØØØ

°µ °1/4 °3/4°7/5 °µ 0°1/5 0 °µ

ØØØØØØ=°µ3 + 3

4· 1

5µ+ 1

4· 7

5µ= 0

Si ha: 0 = det(E J °µI ) =°µ3 + (3

20+ 7

20)µ,

Una radice è µ= 0, e le altre due sono µ=±p

1/2 =±p

0.5 = 0.707106781.Gli autovalori sono tutti reali e quello di massimo modulo è µ= 0.707106781 < 1.C’è, dunque, convergenza per i metodi di Jacobi e di Gauss-Seidel (Ω(ES ) = Ω(E J )2 = 0.5). Le velocità

di convergenza valgono

RJ =° log10(Ω(E J )) = 0.1505149

RS =° log10(Ω(ES )) = 0.301029995 =° log10(Ω(E J )2) = 2RJ

120

Page 127: Calcolo Numerico

8.7. Esercizi

(b)

Lo schema di Jacobi è:8>>>>>>>>>><

>>>>>>>>>>:

x(k+1)1 = 1

8(30°2x(k)

2 °6x(k)3 )

x(k+1)2 = 1

5(34°7x(k)

1 )

x(k+1)3 = 1

5(7°x(k)

1 )

Partendo dal vettore x(0) con com-ponenti tutte nulle, abbiamo

k x1(k) x2

(k) x3(k)

0 0 0 01 3.75 6.8 1.42 1.0 1.55 0.65

Lo schema di Seidel è:8>>>>>>>>>><

>>>>>>>>>>:

x(k+1)1 = 1

8(30°2x(k)

2 °6x(k)3 )

x(k+1)2 = 1

5(34°7x(k+1)

1 )

x(k+1)3 = 1

5(7°x(k+1)

1 )

Partendo dal vettore x(0) con com-ponenti tutte nulle, abbiamo

k x(k)1 x(k)

2 x(k)3

0 0 0 01 3.75 1.55 0.652 2.875 2.775 0.825

Esercizio 8.7.2 Dato il sistema Ax = b con

A =

0

@5 0 100 3 152 1 Æ

1

A

(a) dire per quali valori di Æ il metodo di Jacobi converge.(b) trovare il valore diÆ in corrispondenza del quale il metodo SOR ha un valore di omega ottimo!opt =

3/2. Per tale valore trovare la velocità asintotica di convergenza del metodo SOR.

Svolgimento

(a) La matrice dipende dal parametro Æ quindi a priori non possiamo dire se Jacobi converge o meno.Scriviamo la matrice di iterazione del metodo di Jacobi come

E J =°D°1(L+U ) =°

0

@1/5 0 0

0 1/3 00 0 1/Æ

1

A

0

@0 0 100 0 152 1 0

1

A=

0

@0 0 °20 0 °5

°2/Æ °1/Æ 0

1

A

Gli autovalori si calcolano imponendo det(E J °µI ) = 0, vale a direØØØØØØ

°µ 0 °20 °µ °5

°2/Æ °1/Æ °µ

ØØØØØØ= 0 vale a dire °µ3 + 9µ

Æ= 0

Ricaviamo gli autovalori µ= 0 e µ=± 3pÆ

.

Perchè ci sia convergenza deve dunque essere3

< 1 ovvero 3 <pÆ. Ricaviamo la relazione Æ> 9.

(b) Dalla relazione dell’!opt , !opt =2

1+p

1°Ω(E J )2, valida perchè la matrice è biciclica e coerentemente

ordinata, si ha:

2

1+p

1°9/Æ= 3

2=) 1

3=p

1°9/Æ=) °89

=° 9Æ

=)Æ= 818

= 10.125

Da !opt =32= 1.5 segue ∏opt =!opt °1 = 0.5, da cui R =° log10 (∏opt ) = 0.3010299957.

121

Page 128: Calcolo Numerico
Page 129: Calcolo Numerico

CA

PI

TO

LO 9

INTEGRAZIONE NUMERICA

Dio non si preoccupa delle nostredifficoltà matematiche. Lui integraempiricamente.

Albert Einstein

9.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239.2 Formula dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249.3 Formule di Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

9.3.1 Formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279.3.2 Sull’errore della formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . . 129

9.4 Formule composte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.4.1 Formula composta dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . 134

9.5 Estrapolazione di Richardson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369.6 Approssimazione di Romberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379.7 Introduzione alle formule di quadratura di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

9.7.1 Proprietà delle formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409.7.2 Formule di Gauss-Legendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419.7.3 Altre formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419.7.4 Applicazione delle formule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429.7.5 Sulla funzione peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

9.8 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

9.1 Introduzione

Un’automobile effettua il giro di una pista in 84 secondi. La velocità dell’auto viene misurata ogni 6 se-condi usando un’apparecchiatura radar per il controllo della velocità, ricavando i valori che si trovano inTabella 9.1.

In base ai dati in possesso, quanto è lunga la pista?

Sapendo che la velocità v è data da v(t ) = d sd t

(dove s rappresenta lo spostamento e t il tempo), per calco-

lare la lunghezza della pista (data dallo spostamento effettuato dall’auto), dobbiamo integrare la velocità tra

123

Page 130: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Tempo 0 6 12 18 24 30 36 42 48 54 60 66 72 78 84Velocità 38 41 45 48 45 41 37 33 30 26 24 27 32 35 37

Tabella 9.1: Dati della velocità misurati ogni 6 secondi. Il tempo è espresso in secondi e la velocità è data inmetri al secondo.

il tempo iniziale e quello finale.

Z84

0v(t )d t =

Zs(84)

s(0)

d sd t

d t =Zs(84)

s(0)d s

Essendo s(0) = 0 e s(84) = L la lunghezza della pista, si ha

Z84

0v(t )d t =

Zs(84)

s(0)d s = L

Quindi, se riusciamo a risolvere l’integrale in cui la funzione integranda è la velocità, per le uguaglianzedate, sapremo dire quanto vale L, essendo

Z84

0v(t )d t = L

Sfruttando i dati della velocità misurati ogni 6 secondi, dobbiamo essere in grado di poter risolverenumericamente questo integrale.

In questo Capitolo studieremo come fare. Ci occuperemo, infatti, di approssimare l’integrale definito

I =Zb

af (x)d x

dove f è una funzione definita nell’intervallo [a,b] (e f può essere nota oppure data su determinati puntidell’intervallo, come nell’esempio appena visto).

Una formula di integrazione numerica (detta anche formula di quadratura numerica) approssimal’integrale esatto I =

Rba f (x)d x mediante

Pnj=0 a j f (x j ):

I =Zb

af (x)d x º

nX

j=0a j f (x j )

dove x j , j = 0, . . . ,n sono le ascisse o punti di appoggio della formula di quadratura e a j sono i pesi dellaformula.

9.2 Formula dei trapezi

Consideriamo la retta che interpola la f negli estremi dell’intervallo di integrazione. Per semplicità,seguiamo l’approccio di interpolazione mediante la tabella delle differenze divise:

a f (a)

b f (b)f (b)° f (a)

b °a

Il polinomio di interpolazione (retta) che interpola la f in a e in b (gli estremi dell’intervallo di integrazione)è dato da

p(x) = f (a)+ f (b)° f (a)b °a

(x °a)

124

Page 131: Calcolo Numerico

9.3. Formule di Newton-Cotes

L’errore di interpolazione, utilizzando l’espressione del resto di Lagrange è dato da

E(x) = f 00(ªx )2

(x °a)(x °b)

dove ªx è un punto dell’intervallo [a,b]. Per quanto abbiamo studiato sull’interpolazione, sappiamo che lafunzione f (x) si può scrivere come somma del polinomio e dell’errore: f (x) = p(x)+E(x). Nel nostro caso,abbiamo

f (x) = f (a)+ f (b)° f (a)b °a

(x °a)+ f 00(ªx )2

(x °a)(x °b)

Dovendo integrare la f tra a e b e valendo l’uguaglianza precedente, integrando ambo i membri,otteniamo:

Zb

af (x)d x =

Zb

a

µf (a)+ f (b)° f (a)

b °a(x °a)

∂d x +

Zb

a(x °a)(x °b)

f 00(ªx )2

d x

ovveroZb

af (x)d x = (b °a)

f (a)+ f (b)2

+ 12

Zb

a(x °a)(x °b) f 00(ªx ))d x

Poichè il prodotto (x°a)(x°b) ha segno costante in [a,b], per il teorema del Valor Medio del calcolo integrale(si veda il Teorema 2.5.6) si ha

12

Zb

a(x °a)(x °b) f 00(ªx ))d x = 1

2f 00(ª)

Zb

a(x °a)(x °b)d x =°1

2f 00(ª)

(b °a)3

3!

dove ª è un punto interno all’intervallo [a,b].

La quantità Ei nt = °12

f 00(ª)(b °a)3

3!= ° 1

12f 00(ª)(b ° a)3 rappresenta l’errore che si commette approssi-

mando l’integrale di f in [a,b] mediante l’integrale della retta passante per f (a) e f (b), vale a dire, mediantel’area del trapezio sottesa dalla corda passante per f (a) e f (b).

Indicando con M = maxa∑x∑b | f 00(x)| possiamo maggiorare l’errore con la relazione

|Ei nt |∑ M(b °a)3

12

La formula dei trapezi approssima l’integrale di f in [a,b] come Itr ap dato da

Itr ap = b °a2

[ f (a)+ f (b)]

9.3 Formule di Newton-Cotes

Se, al posto di una retta, prendiamo come funzione interpolante la f un polinomio di grado più elevato,otterremo altre formule di quadrature.

Supponiamo di poter valutare la f in n +1 punti x0, x1, . . . , xn e costruiamo il polinomio interpolatore digrado n utilizzando la formula di Lagrange.

Avremo pn(x) =Pni=0 f (xi )Li (x), dove i polinomi di Lagrange sono dati dalla nota formula

Li (x) =nY

j=0j 6=i

x °x j

xi °x j

125

Page 132: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Figura 9.1: Formula dei trapezi: l’integrale della funzione f (zona tratteggiata in blu) viene approssimatamediante l’area del trapezio sotteso alla retta di interpolazione per f (a) e f (b) (zona verde).

Se i nodi sono equidistanti con passo h, possiamo scrivere x j = x0 + j h, con j = 0,1, . . . ,n e per un genericopunto x compreso tra x0 e xn vale x = x0 + sh con 0 ∑ s ∑ n, s numero reale.

Quindi x ° x j = x0 + sh ° (x0 + j h) = (s ° j )h e xi ° x j = (i ° j )h, da cui il polinomio di Lagrange si puòscrivere come

Li (x) =nY

j=0j 6=i

s ° ji ° j

= Li (s)

Da f (x) = pn(x) + E(x) dove E(x) è l’errore della formula di interpolazione, passando all’integrale,abbiamo

Zb

af (x)d x =

Zb

apn(x)d x +

Zb

aE(x)d x

Il primo integrale a secondo membro rappresenta la formula che approssima l’integrale della f mentre ilsecondo integrale rappresenta l’errore della formula di quadratura.

La formula di quadratura è quindi data dal valore dell’integrale di pn :

I =Zb

af (x)d x º

Zb

a

nX

i=0f (xi )Li (x)d x =

nX

i=0f (xi )

Zb

aLi (x)d x

La formula di quadratura ha dunque come nodi i punti xi e come pesi gli integraliRb

a Li (x)d x.Sia x0 = a e xn = b, tenendo presente che Li (x) = Li (s) con x = x0 + sh, da cui d x = hd s abbiamo

Zb

aLi (x)d x =

Zxn

x0

Li (x)d x =Zn

0Li (s)hd s = h

Zn

0Li (s)d s

Allora

I =Zb

af (x)d x º h

nX

i=0f (xi )

Zn

0Li (s)d s

126

Page 133: Calcolo Numerico

9.3. Formule di Newton-Cotes

Definiamo coefficienti di Newton-Cotes1 le espressioni

C (n)i = 1

n

Zn

0Li (s)d s i = 0,1, . . . ,n

La formula precedente si scrive, quindi, come

I =Zb

af (x)d x º nh

nX

i=0f (xi )C (n)

i = (xn °x0)nX

i=0f (xi )C (n)

i (9.1)

L’errore della formula di quadratura è dato da

Ei nt =Zb

aE(x)d x =

Zb

a

f (n+1)(ªx )(n +1)!

(x °x0)(x °x1) · · · (x °xn)d x

Dato un polinomio di interpolazione di grado n mediante il procedimento di Lagrange è dunque possibilericavare una formula di quadratura numerica che prende il nome di formula di Newton-Cotes. Per quantoriguarda l’errore si può osservare che le formule ottenute con un valore n dispari (cui corrisponde un numeron + 1 pari di punti di appoggio) è solo leggermente inferiore alle formule di ordine pari che le precedonoimmediatamente (cui corrisponde un numero dispari di punti di appoggio).

Per questo motivo le formule di ordine pari sono le più usate.Osserviamo che per f (x) ¥ 1, qualunque sia il grado del polinomio utilizzato nelle formule di Newton-

Cotes, l’errore di integrazione sarà zero. Nell’intervallo [a,b] ¥ [0,1], applicando l’equazione (9.1) si ha

1 =Z1

0d x =

nX

i=0C (n)

i

Troviamo che la somma dei coefficienti di Newton-Cotes vale 1.Per n = 1 (si hanno quindi due punti di appoggio, x0 e x1) i coefficienti di Cotes sono quelli già ricavati

della formula dei trapezi Formula deitrapezi

C (1)0 = 1

1

Z1

0L0(s)d s =

Z1

0

(s °1)°1

d s = 12

C (1)1 = 1

1

Z1

0L1(s)d s =

Z1

0

s1

d s = 12

e la formula di integrazione diventa

I =Zb

af (x)d x º h

1X

i=0f (xi )C (1)

i = (x1 °x0)f (x0)+ f (x1)

2

9.3.1 Formula di Cavalieri-Simpson

Considerando n = 2 (quindi 3 punti di appoggio nell’intervallo [a,b], x0 = a, x1 = a +b2

e x2 = b, i due

estremi dell’intervallo e il punto centrale) la formula di quadratura prende il nome di formula di Cavalieri-Simpson2

1 Roger Cotes (1682-1716) fu un matematico inglese che lavorò molto con Isaac Newton, in particolare per la correzione del suofamoso libro Principia. Egli inventò le formule di quadratura che prendono il suo nome e per primo introdussse quella che oggiconosciamo come formula di Eulero, per cui ex = cos(x)+ i sin(x) nel campo complesso.

2 Bonaventura Francesco Cavalieri (1598-1647) fu un matematico italiano. Studiò teologia e geometria. Lavorò su problemi di otticae di cinematica. È famoso soprattutto per il cosiddetto principio di Cavalieri.

Thomas Simpson (1710-1761) fu un matematico britannico, inventore della formula di quadratura per il calcolo di integrali definiti,sebbene questa formula fosse stata già scoperta 200 anni prima da Keplero e pare fosse usata anche da Cavalieri nel 1639 e poi riscopertada James Gregory. I suoi studi riguardano anche l’astrologia.

127

Page 134: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Figura 9.2: Formula di Cavalieri-Simpson: l’integrale della funzione f (zona tratteggiata in blu) vieneapprossimata mediante l’area della regione sottesa alla parabola passante per f (a), f (c) e f (b) (zona verde).

C (2)0 = 1

2

Z2

0L0(s)d s = 1

2

Z2

0

(s °1)(s °2)(°1)(°2)

d s = 16

C (2)1 = 1

2

Z2

0L1(s)d s = 1

2

Z2

0

(s)(s °2)(1)(°1)

d s = 46

C (2)2 = 1

2

Z2

0L2(s)d s = 1

2

Z2

0

(s)(s °1)(2)(1)

d s = 16

La formula di Cavalieri-Simpson approssima l’integrale della f considerando come nodi x0 =a, x1 = c = a +b

2e x2 = b e come pesi i coefficienti di Cotes C (2)

0 = 16

, C (2)1 = 4

6, C (2)

2 = 16

, ottenendo:

I =Zb

af (x)d x º (x2 °x0)

2X

i=0f (xi )C (2)

i = (b °a)(f (a)

6+ 4 f (c)

6+ f (b)

6)

= b °a6

( f (a)+4 f (c)+ f (b))

Con la formula di Cavalieri-Simpson, dunque, l’integrale della f viene approssimato con l’integrale dellaparabola passante per i due estremi a e b e per il punto centrale dell’intervallo.

Per quanto riguarda l’errore che si commette approssimando l’integrale della f con la formula diCavalieri-Simpson, consideriamo, seguendo l’approccio visto per la formula dei trapezi, l’integrale dell’erroredel polinomio di interpolazione di Lagrange.

Per il polinomio di secondo grado p2 che interpola la f , l’errore è dato da E(x) = f 000(ªx )3!

(x°a)(x°c)(x°b).

128

Page 135: Calcolo Numerico

9.3. Formule di Newton-Cotes

Quando facciamo l’integrale, l’errore nell’approssimare l’integrale esatto con la formula di Cavalieri-Simpson è dunque dato da

Ei nt =Zb

a

f 000(ªx )3!

(x °a)(x ° c)(x °b)d x

Questa volta, la funzione (x ° a)(x ° c)(x °b) cambia segno all’interno dell’intervallo [a,b] e non possiamopiù applicare il teorema del Valor Medio come nella formula dei trapezi. In maniera più laboriosa, tuttavia, siricava per l’errore la seguente formula:

Ei nt =° f IV (u)90

µb °a

2

∂5

=° f IV (u)2880

(b °a)5

dove u è un opportuno punto dell’intervallo ]a,b[.Osservando i valori dei coefficienti di Newton-Cotes per n = 1 e per n = 2 si può vedere come i coefficienti

siano simmetrici e la loro somma vale 1. Questo risultato si può generalizzare per ogni n.

9.3.2 Sull’errore della formula di Cavalieri-Simpson

Per capire l’errore che si ha nella formula di Cavalieri-Simpson, deduciamo la stessa formula seguendoun’altra strada.

Per semplificare il discorso, scegliamo l’intervallo [a,b] simmetrico rispetto all’origine, quindi del tipo[°t , t ] con t 2R, sapendo che, se non fosse così, basta applicare una traslazione dell’asse x per ricondursi aquesto caso. Scriviamo il polinomio di interpolazione che passa per i punti °t , 0 e t e che interpola anche laderivata prima della f in 0.

Mediante la tabella delle differenza divise, il punto 0 va contato due volte e si ha:°t f (°t )

0 f (0)f (0)° f (°t )

t

0 f (0) f 0(0)f 0(0)° f (0)° f (°t )

tt

= t f 0(0)° f (0)+ f (°t )t 2

t f (t )f (t )° f (0)

t

f (t )° f (0)t

° f 0(0)

t= f (t )° f (0)° t f 0(0)

t 2

f (t )°2t f 0(0)° f (°t )2t 3

Il polinomio di interpolazione è, dunque

p(x) = f (°t )+ f (0)° f (°t )t

(x + t )+ t f 0(0)° f (0)+ f (°t )t 2 (x + t )x + f (t )°2t f 0(0)° f (°t )

2t 3 (x + t )x2

L’errore di interpolazione per questo polinomio di grado 3 vale

E(x) = f (IV )(ªx )4!

(x + t )x2(x ° t )

Quindi da f (x) = p(x)+E(x), andando a integrare tra °t e t si ha:

Zt

°tf (x)d x =

Zt

°tp(x)d x +

Zt

°tE(x)d x

Nell’integrazione del polinomio p(x) è facile vedere che i termini che dipendono da f 0(0) portano uncontributo nullo. Infatti

Zt

°t

µf 0(0)

t(x + t )x ° f 0(0)

t 2 (x + t )x2∂

d x =Zt

°t

f 0(0)t

µx2 + t x ° x3

t°x2

∂d x

= f 0(0)t

∑t

x2

2° x4

4t

∏t

°t= 0

129

Page 136: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Gli integrali degli altri termini del polinomio p(x) portano alla formula di Cavalieri-Simpson. Infatti(omettendo i passaggi matematici) si ha

Zt

°t

µf (°t )+ f (0)° f (°t )

t(x + t )+ f (°t )° f (0)

t 2 (x + t )x + f (t )° f (°t )2t 3 (x + t )x2

∂d x =

= 2t6

( f (°t )+4 f (0)+ f (t ))

Allora l’errore della formula di Cavalieri-Simpson coincide con l’integrale di E(x).

Quindi Ei nt =Rt°t

f (IV )(ªx )4!

(x + t )x2(x ° t )d x

La funzione (x + t )x2(x ° t ) = (x2 ° t 2)x2 non cambia mai segno all’interno dell’intervallo [°t , t ], quindi sipuò applicare il teorema del Valore Medio del calcolo integrale, per cui

Ei nt =f (IV )(ª)

24

Zt

°t(x2 ° t 2)x2d x = f (IV )(ª)

24

∑x5

5° t 2 x3

3

∏t

°t=° f (IV )(ª)

90t 5

Considerando che l’ampiezza dell’intervallo è h = 2t si ha

Ei nt =° f (IV )(ª)90

(h2

)5 =° f (IV )(ª)2880

h5

Troviamo la formula dell’errore per Cavalieri-Simpson.

9.4 Formule composte

Le formule di Newton-Cotes non vanno bene su intervalli molto ampi perchè per avere risultati più ac-curati dovremmo utilizzare formule di grado elevato (in modo da utilizzare un numero elevato di punti diappoggio). Ci sono vari motivi che sconsigliano questa procedura:

i valori dei coefficienti in formule di grado elevato sono difficili da ottenere;le formule di Newton-Cotes, essendo basate su polinomi di interpolazione con nodi equidistanti,danno risultati inaccurati su intervalli ampi a causa della natura oscillatoria dei polinomi di gradoelevato.

Conviene dunque utilizzare formule di grado basso ma scomponendo l’intervallo di integrazione in piùsottointervalli e, in ciascuno di essi, applicare la stessa formula.

Sfruttiamo il fatto che se l’intervallo [a,b] viene diviso in n sottointervalli in modo che [a,b] = [a, x1][[x1, x2][ [x2, x3][ . . .[ [xn°1,b], allora

Zb

af (x)d x =

Zx1

af (x)d x +

Zx2

x1

f (x)d x +Zx3

x2

f (x)d x + . . .+Zb

xn°1

f (x)d x

Su ciascuno intervallo [xi°1, xi ] per i = 1,2, . . . ,n, approssimiamo l’integrale della f mediante una formuladi quadratura più semplice, utilizzando pochi punti.

9.4.1 Formula composta dei trapezi

Suddividiamo l’intervallo [a,b] in n sottointervalli definiti dai punti d’appoggio x0, x1, . . . , xn (per sem-

plicità supponiamo i punti equidistanti con passo h = b °an

, in modo che x0 = a e xn = b, xi = x0 + i h,

i = 0, . . . ,n).L’integrale su [a,b] si può dunque ottenere come somma degli integrali su tali sottointervalli:

Zb

af (x)d x =

nX

i=1

Zxi

xi°1

f (x)d x

130

Page 137: Calcolo Numerico

9.4. Formule composte

Figura 9.3: Formula composta dei trapezi, utilizzando 3 sottointervalli (4 punti).

Ciascuno degli integrali su [xi°1, xi ] viene approssimato utilizzando la formula dei trapezi:

nX

i=1

Zxi

xi°1

f (x)d x ºnX

i=1

xi °xi°1

2[ f (xi°1)+ f (xi )] =

nX

i=1

h2

[ f (xi°1)+ f (xi )]

In forma estesa abbiamo

I º h2

[ f (x0)+2 f (x1)+2 f (x2)+ . . .+2 f (xn°1)+ f (xn)]

= h[f (a)+ f (b)

2+ f (x1)+ f (x2)+ . . . f (xn°1)]

L’errore che si commette è dato dalla somma degli errori commessi sui singoli sottointervalli

Ei nt =nX

i=1° f 00(ªi )

h3

12

Supponendo che la derivata seconda della f sia continua e limitata in [a,b] e chiamando con m e Mrispettivamente il minimo e il massimo di f 00 in [a,b], si ha:

m ∑ f 00(ªi ) ∑ M i = 1, . . . ,n

Considerando la somma di queste diseguaglianze, per i = 1, . . . ,n si ricava

nm ∑nX

i=1f 00(ªi ) ∑ nM =) m ∑

Pni=1 f 00(ªi )

n∑ M

Per il teorema del Valor Intermedio (teorema 2.5.3),

Pni=1 f 00(ªi )

nè un valore assunto dalla funzione in

qualche punto u di [a,b].

Applicando la relazione h = b °an

, l’errore diventa

Ei nt =nX

i=1° f 00(ªi )

h3

12=°n f 00(ª)

h3

12=° f 00(ª)

12(b °a)h2 =° f 00(ª)

12(b °a)3

n2

131

Page 138: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Quindi per n !1 l’errore tende a zero come h2 o, equivalentemente, come1

n2 .

Formula composta di Cavalieri-Simpson

Suddividiamo l’intervallo [a,b] in n sottointervalli di ampiezza costante uguale a h e su ciascuno di questisottointervalli applichiamo la formula di Cavalieri-Simpson. Abbiamo, in questo modo, la formula compostadi Cavalieri-Simpson.

Su ogni intervallino, quindi, dobbiamo considerare gli estremi dell’intervallino e il punto centrale di esso.

Siano ai e bi gli estremi di ciascuna suddivisione e sia ci =ai +bi

2il punto medio di ciascuna suddivisione

(quindi per i = 1, . . . ,n). L’estremo superiore bi di ciascun intervallino, con i = 1,n °1 coincide con l’estremoinferiore dell’intervallino successivo: bi = ai+1. In tal modo, seguendo lo stesso ragionamento fatto per itrapezi si ha:

Zb

af (x)d x =

Zb1

a1

f (x)d x +Zb2

a2

f (x)d x + . . .+Zbn

an

f (x)d x

Applicando la formula di Cavalieri-Simpson su ciascun intervallino risulta:

Zbi

ai

f (x)d x º bi °ai

6

°f (ai )+4 f (ci )+ f (bi )

¢= h

6

°f (ai )+4 f (ci )+ f (bi )

¢

In tal modoZb

af (x)d x º

nX

i=1

h6

°f (ai )+4 f (ci )+ f (bi )

¢

Si ha la formula composta di Cavalieri-Simpson.

Figura 9.4: Formula composta di Cavalieri-Simpson, utilizzando 3 sottointervalli (7 punti).

132

Page 139: Calcolo Numerico

9.4. Formule composte

Possiamo vedere la formula composta di Cavalieri-Simpson anche in una forma compatta.Considerando che, su ogni sottointervallo, dobbiamo prendere il punto medio, facciamouna numerazione progressiva dei punti di integrazione nel modo seguente:

x0 = a

x2i = x0 + i h i = 0, . . .n nodi estremi dei sottointervalli

x2i+1 = x0 + (i + 12

)h i = 0, . . . ,n °1 nodi centrali dei sottointervalli

Quindi i nodi pari corrispondono agli estremi dei sottointervalli, mentre i nodi dispari sonoi punti centrali di ogni sottointervallo. Per la formula di quadratura otteniamo

I =Zb

af (x)d x =

n°1X

i=0

Zx2i+2

x2i

f (x)d x

ºn°1X

i=0

h6

[ f (x2i )+4 f (x2i+1)+ f (x2i+2)]

= h6

[ f (x0)+4 f (x1)+2 f (x2)+4 f (x3)+ . . .+2 f (x2n°2)+4 f (x2n°1)+ f (x2n)]

= h6

[ f (x0)+4n°1X

i=0f (x2i+1)+2

n°1X

i=0f (x2i )+ f (x2n)]

Per quanto riguarda l’errore, facendo la somma degli errori di integrazione sugli n sottointervalli,nell’ipotesi che la derivata quarta sia continua e limitata, si ha3:

Ei nt =° 190

µh2

∂5

( f IV (ª1)+ f IV (ª2)+ . . .+ f IV (ªn))

=° h5

2880

n°1X

i=0f IV (ªi ) =° (b °a)5

2880n5

n°1X

i=0f IV (ªi )

Si considera quindi il punto ª tale che4

f IV (ª) = 1n

nX

i=1f IV (ªi )

Ei nt =° (b °a)5

2880n4 f IV (ª) =° (b °a)h4

2880f IV (ª)

Quindi per n ! 1 l’errore tende a zero come1

n4 o, equivalentemente, come h4. Nella formula dei trape-

zi l’errore invece decresce come1

n2 . Ci aspettiamo quindi che il maggiore sforzo computazionale dia una

maggiore accuratezza nei risultati quando si applica la formula di Cavalieri-Simpson rispetto alla formula deitrapezi.

3Ricordiamo che h = b °an

.4Si ripete lo stesso ragionamento fatto sulla derivata seconda nella formula composta dei trapezi, questa volta però sulla derivata

quarta. Per esercizio, si consiglia di ripetere tutti i passaggi per arrivare al risultato.

133

Page 140: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

9.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson

Esempio 9.4.1 Consideriamo f (x) = ex . Sia a = 0 e b = 1.Allora, per l’integrale esatto e per le formule dei trapezi e di Cavalieri-Simpson, si ha, rispettivamente:

I =Z1

0ex d x =

£ex§1

0 = e °1 = 1.718281828

Itr ap = 12

(1+e) = 1.859140914

IC°S = 16

(1+4e1/2 +e) = 16

(1+6.594885083+2.718281828) = 1.718861152

La formula di Cavalieri-Simpson dà il risultato migliore.Sia ancora f (x) = ex ma gli estremi di integrazione siano a = 0.9 e b = 1. Allora

I =Z1

0.9ex d x = e °e0.9 = 0.2586787173

I ° Itr ap = I ° 0.12

(e0.9 +e) =°2.2£10°4

I ° IC°S = I ° 0.16

(e0.9 +4e0.95 +e) =°9.0£10°9

Ora la formula di Cavalieri-Simpson si rivela particolarmente accurata. Ciò non deve sorprendere se si vaa vedere la formula dell’errore, con l’ampiezza dell’intervallo che da 1 si è ridotta a 0.1, per cui (b°a)5 da 1vale ora 10°5.Considerato che f 00 = f e f IV = f , queste derivate possono essere maggiorate dal valore assunto nell’estremosuperiore dell’intervallo, cioè e. Quindi gli errori delle formule dei trapezi e di Cavalieri-Simpson sonomaggiorate da

|Etr ap |∑e

12(b °a)3 = 2.265£10°1(b °a)3

|EC°S |∑e

2880(b °a)5 = 9.438£10°4(b °a)5

Perciò per a = 0 e b = 1 gli errori sono maggiorati da|Etr ap | = 2.265£10°1

|EC°S | = 9.438£10°4

Invece per a = 0.9 e b = 1, poichè b °a = 0.1 = 10°1, abbiamo|Etr ap | = 2.265£10°1 ·10°3 = 2.265£10°4

|EC°S | = 9.438£10°4 ·10°5 = 9.438£10°9

Esempio 9.4.2 Si voglia approssimare l’integrale aZ1

0e°x2

d x º 0.746824.

a È un integrale che non può essere risolto analiticamente. Se si vuole calcolare una sua approssimazione sen-za fare uso di formule di quadrature, possiamo, ad esempio, pensare di applicare la definizione di integrale

Rba f (x)d x =

limn!1Pn

i=0 f (a + i h(n)) ·h(n), con h(n) = (b ° a)/n, e considerare come approssimazione dell’integrale la somma parzialePn

i=0 f (a + i h(n)) ·h(n) con un valore di n molto grande. Per esempio, con n = 107 otteniamo il valore 0.74682420125254.

134

Page 141: Calcolo Numerico

9.4. Formule composte

Suddividiamo l’intervallo [0,1] in 4 sottointervalli. Sia h = 1/4 = 0.25. Per la formula composta dei trapeziabbiamo

Itr ap = h2

[e0 +2e°h2 +2e°(2h)2 +2e°(3h)2 +e°(4h)2]

= 0.125[1+2e°0.1252 +2e°0.52 +2e°0.752 +e°1]

= 0.742984

Applichiamo ora la formula di Cavalieri-Simpson su soli 2 sottointervalli, in modo da valutare la funzionenegli stessi punti precedenti. L’ampiezza di ciascun sottointervallo è dunque h = 0.5.

IC°S = h6

[e0 +4e°(h/2)2 +2e°(h)2 +4e°( 32 h)2 +e°(2h)2

]

= 0.253

[1+4e°0.1252 +2e°0.52 +4e°0.752 +e°1]

= 0.746855A parità di punti (e non di sottointervalli) la formula di Cavalieri-Simpson è più accurata di quella deitrapezi.Invece considerando 4 sottointervalli nella formula di Cavalieri-Simpson dobbiamo considerare anche ipunti interni di ascisse 0.125, 0.375, 0.625, 0.875 e il risultato che otteniamo è 0.746826, evidentementemaggiormente accurato.

Esempio 9.4.3 Riprendiamo l’esempio visto all’inizio del Capitolo, in cui è misurata la velocità diun’automobile ogni 6 secondi e si vuole calcolare la lunghezza percorsa dalla macchina.In base ai dati in possesso, possiamo applicare la formula composta dei trapezi su 14 intervalli di ampiezzah = 6 secondi. Abbiamo (ponendo v1 = v(0), v2 = v(6), . . . , v13 = v(78), v14 = v(84)):

L = 6≥ v1 + v14

2+ v2 + v3 + . . .+ v13

¥= 3009 metri

Possiamo anche applicare la formula di Cavalieri-Simpson, considerando ora 7 intervalli di ampiezza paria h = 12 secondi. In tal caso, otteniamo:

L = 2(v1 +4v2 +2v3 +4v4 +2v5 + . . .+2v12 +4v13 + v14) = 3010 metriIn questo caso entrambi i risultati sono accettabili.

Se la funzione integranda ha le derivate che sono facili da determinare e da maggiorare, la formula del-l’errore può essere utile per determinare il numero di sottointervalli su cui applicare una formula compostadi quadratura in modo da ottenere un’approssimazione con un errore minore di una tolleranza prefissata.

Esempio 9.4.4 ConsideriamoR1

0 e°x2d x. In quanti sottointervalli bisogna suddividere l’intervallo di inte-

grazione per applicare la formula dei trapezi e di Cavalieri-Simpson e ottenere un errore che sia minore diuna tolleranza ≤= 10°5 ?Per i trapezi, l’errore è maggiorato da

|Etr ap |∑max0∑x∑1 | f 00(x)|

12(b °a)3

n2

Per Cavalieri-Simpson si ha

|EC°S |∑max0∑x∑1 | f IV (x)|

2880(b °a)5

n4

135

Page 142: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Da f (x) = e°x2abbiamo, per le derivate:

f 0(x) =°2xe°x2

f 00(x) = (°2+4x2)e°x2

f 000(x) = (12x °8x3)e°x2

f IV (x) = (12°48x2 +16x4)e°x2

Si trova che il massimo di | f 00| e | f IV | in [0,1] è dato dal loro valore in x = 0, quindi abbiamo:

|Etr ap |∑2

12n2 = 16n2 |EC°S |∑

122880n4 = 1

240n4

La richiesta dell’accuratezza per l’errore diventa:|Etr ap |∑ 10°5 |EC°S |∑ 10°5

vale a dire, rispettivamente,1

6n2 ∑ 10°5 1240n4 ∑ 10°5

Per i trapezi, il primo intero n che verifica la disuguaglianza è n = 130, per Cavalieri-Simpson si ha, invece,n = 5.Applicando le formule su 130 intervalli per i trapezi e su 5 intervalli per Cavalieri-Simpson, otteniamo irisultati:

Itr ap = 0.74682050480289 IC°S = 0.7468249482544

9.5 Estrapolazione di Richardson

Applichiamo la formula di Cavalieri-Simpson sull’intero intervallo [a,b]. L’errore che si commette, comesappiamo, vale

E1 =° f IV (ª1)90

µb °a

2

∂5

=° f IV (ª1)2880

(b °a)5

Suddividiamo ora l’intervallo [a,b] in due sottointervalli e applichiamo la formula composta di Cavalieri-Simpson. L’errore che otteniamo vale

E2 =° f IV (ª2)2880

(b °a)5

24

e, supponendo che le derivate quarte della f non siano molto diverse tra loro, si ha E2 ºE1

16.

L’errore, quindi, diventa 16 volte più piccolo passando dalla formula di Cavalieri-Simpson in un intervalloalla formula applicata in due sottointervalli.

Sia I il valore esatto dell’integrale e Q1 e Q2 i due valori approssimati ottenuti considerando la formuladi Cavalieri-Simpson con n = 1 e n = 2 sottointervalli. Sia ≤ l’errore, cambiato di segno, che si ha con n = 2,≤=°E2 º°E1/16. Possiamo scrivere

I +≤=Q2 per n = 2

I +16≤=Q1 per n = 1

136

Page 143: Calcolo Numerico

9.6. Approssimazione di Romberg

Si può ricavare ≤ dalle due relazioni ottenendo

≤= Q1 °Q2

15

Quindi

I ºQ2 +Q2 °Q1

15

Utilizzando le due approssimazioni Q1 e Q2 possiamo approssimare l’integrale esatto con una maggiore ac-curatezza mediante la formula appena scritta. Questo procedimento prende il nome di estrapolazione diRichardson. Può essere utilizzato per migliorare l’approssimazione di un integrale ma è basato sull’ipotesiche le derivate quarte della funzione integranda siano circa uguali e, quindi, va usato con cautela.

9.6 Approssimazione di Romberg

Ripetendo lo stesso discorso dell’estrapolazione di Richardson a partire dalla formula dei trapezi e inmaniera sistematica, si ha l’approssimazione di Romberg.

Supponiamo l’uguaglianza delle derivate seconde della funzione integranda f e sia 2m il numero disottointervalli in cui suddividiamo il dominio di integrazione [a,b].

Applicando la formula dei trapezi su 2m°1 sottointervalli e, successivamente, su 2m sottointervalli, l’errorediminuisce come 1/4. Chiamando con Am e Am°1 i risultati della formula dei trapezi rispettivamente su 2m

e su 2m°1 sottointervalli e chiamando con ≤ l’errore cambiato di segno commesso con 2m sottointervalli,abbiamo:

I +≤= Am

I +4≤= Am°1

L’integrale può essere dunque migliorato con il valore

Bm = Am + Am ° Am°1

3.

Per m = 1 si ha:

A0 =b °a

2[ f (a)+ f (b)] è la formula dei trapezi applicata su un unico intervallo

A1 =b °a

2[

f (a)2

+ f (a +b

2)+ f (b)

2] è la formula dei trapezi su 2 sottointervalli

B1 = (b °a)[f (a)

6+

4 f (a +b

2)

6)+ f (b)

6] troviamo la formula di Cavalieri-Simpson!

Si ha dunque che B1 (e quindi ciascun Bm) corrisponde al valore ottenuto con la formula di Cavalieri-Simpson. L’errore ottenuto con Bm è dunque proporzionale a 1/n4. Nel passo successivo, utilizzando i valoriBm , otteniamo la nuova approssimazione data da

Cm = Bm + Bm °Bm°1

15per m ∏ 2

Si può dimostrare che Cm coincide con la formula di Newton-Cotes con n = 4, dove l’errore è proporzionalea 1/n6 e alla derivata sesta di f.

La nuova approssimazione è data da:

Dm =Cm + Cm °Cm°1

63per m ∏ 3

137

Page 144: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

L’errore ora diventa proporzionale a 1/n8 ma Dm non è più un risultato delle formule di Newton-Cotes. Ilprocedimento può andare avanti per calcolare Em , Fm , etc tenendo presente che al denominatore dobbiamomettere il valore 4(d +1)°1 dove d è il valore del denominatore della formula precedente.

Il vantaggio dell’approssimazione di Romberg si vede solo ai primi livelli dell’applicazione (in particolarepassando da Am a Bm). Inoltre, a causa della precisione finita con cui sono eseguiti i calcoli, le formule diRomberg di ordine elevato diventano inefficaci se il risultato iniziale Am è già abbastanza accurato rispettoalla precisione numerica consentita.

9.7 Introduzione alle formule di quadratura di Gauss

Consideriamo di voler approssimare l’integrale dato daZb

af (x)w(x) d x

dove [a,b] può essere finito o infinito (per esempio [°1,1], [0,+1]). Abbiamo due funzioni, la f (x) e la w(x),e vogliamo integrare il prodotto di queste due funzioni. La funzione w(x), che chiamiamo funzione peso, siapositiva (w(x) ∏ 0).

Vogliamo trovare dei coefficienti wi , i = 0, . . .n (detti pesi della formula di quadratura) e dei nodi xi , i =0, . . .n (detti nodi di quadratura) nell’intervallo [a,b] in modo da approssimare l’integrale mediante

Zb

af (x)w(x) d x º

nX

0=1wi f (xi )

Considerando anche l’errore di quadratura:Zb

af (x)w(x) d x =

nX

i=0wi f (xi )+Ei nt ( f )

Diremo che la formula di quadratura ha un grado di precisione (o esattezza) polinomiale d se Ei nt ( f ) = 0per tutti i polinomi f fino al grado d (cioè se applichiamo la formula di quadratura per approssimareRb

a f (x)w(x) d x con f polinomio di grado d , l’errore è nullo). Osserviamo che ora non stiamo parlando diformule di quadratura composte quindi n non si riferisce a suddivisioni dell’intervallo [a,b].

Per le formule di Newton-Cotes, si ha w(x) ¥ 1 e si può provare che il grado di precisione d è:d = n per le formule ottenute da polinomi di interpolazione di grado n dispari (come nei Trapezi: n = 1)d = n + 1 per le formule ottenute da polinomi di interpolazione di grado n pari (come in Cavalieri-Simpson: n = 2)

Diremo che la formula di quadratura è interpolatoria se vale d = n . Le formule interpolatorie sono ot-tenute per interpolazione, percorrendo la stessa strada che abbiamo visto per le formule di Newton-Cotes.Interpoliamo la funzione f mediante un polinomio di grado n, utilizzando i polinomi di Lagrange. Nel co-struire i pesi dobbiamo tenere conto anche della funzione w e quindi i pesi saranno wi =

Rba Li (x)w(x) d x

dove Li (x) è l’i -simo polinomio di Lagrange.Con questo approccio, e con nodi equidistanti, la formula di quadratura che ricaviamo ha al più grado di

precisione d = n (o d = n +1 quando w(x) ¥ 1 e per n pari, come abbiamo visto per le formule di Newton-Cotes).

È possibile ricavare formule di quadratura che abbiano un grado di precisione d maggiore del grado delpolinomio interpolante? E se sì come?

A tal fine consideriamo il polinomio dei nodi F (x) = Qni=0(x ° xi ), di grado n +1, lo stesso che abbiamo

introdotto nel Capitolo sull’interpolazione.Vale il seguente teorema.

Teorema 9.7.1 (di W. Gautschi) Dato un intero k con 0 < k ∑ n +1, la formula di quadraturaZb

af (x)w(x) d x =

nX

i=0wi f (xi )+Ei nt ( f )

ha grado di precisione (esattezza) d = n +k se e solo se sono soddisfatte entrambe le condizioni (a) e (b):

138

Page 145: Calcolo Numerico

9.7. Introduzione alle formule di quadratura di Gauss

(a) la formula è interpolatoria;(b) il polinomio dei nodi F (x) soddisfa la relazione

Rba F (x)p(x)w(x) d x = 0 per ogni polinomio p di grado

∑ k °1.

Osserviamo che la condizione in (b):impone k condizioni sui nodi x0, x1, x2, . . . xn . Se fosse k = 0 non ci sarebbero condizioni in più daconsiderare e avremmo d = n (cioè esattezza d = n);fornisce una relazione di ortogonalità: il polinomio F è ortogonale ai polinomi di grado ∑ k°1 rispettoalla funzione peso w . 5

Nel caso specifico, il punto (b) dice che:

Zb

aF (x)w(x) d x = 0

Zb

axF (x)w(x) d x = 0

Zb

ax2F (x)w(x) d x = 0

...Zb

axk°1F (x)w(x) d x = 0

fa sì che k non possa essere maggiore o uguale a n +2. Se fosse infatti k = n +2, il punto (b) sarebbe:(b) il polinomio dei nodi F (x) soddisfa la relazione

Rba F (x)p(x)w(x)d x = 0 per ogni polinomio p di

grado ∑ k °1 = n +1.

Allora, si potrebbe prendere come polinomio p(x) esattamente F (x) (che ha grado n +1) e, per la(b) sarebbe

Rba (F (x))2w(x)d x = 0: ma questo è un assurdo perchè l’integrale di una funzione positiva

non può essere nullo, e, nel nostro caso, w(x) è positiva e (F (x))2, essendo il quadrato di un polinomio,è pure essa una funzione positiva.

Il caso ottimale (il più alto grado di precisione che si può ottenere), si ha per k uguale al valore massimo chepuò assumere, vale a dire k = n +1. In tal caso d = n +k = n +n +1 = 2n +1. Si hanno le cosiddette formuledi Gauss.

A seconda della scelta della funzione peso w e dell’intervallo [a,b] abbiamo diverse formule di Gauss.

Dimostrazione. [del teorema di W. Gautschi]Dimostriamo che se d = n +k allora sono vere la (a) e la (b) (necessità). Essendo d = n +kla formula è esatta anche per polinomi di grado n: abbiamo dimostrato il punto (a).Se p è un polinomio di grado al più k °1, allora F (x)p(x) è un polinomio (perchè prodottodi due polinomi) di grado al più n + 1+ k ° 1 = n + k. Applichiamo a questo polinomioprodotto la formula di quadratura (che è esatta valendo l’ipotesi che d = n + k, quindi

Ei nt (F (x)p(x)) = 0). QuindiZb

aF (x)p(x)w(x) d x =

nX

i=0F (xi )p(xi )wi .

Ma F (xi ) = 0 essendo F il polinomio dei nodi. PerciòPn

i=0 F (xi )p(xi )wi = 0

5Per definizione, infatti, due funzioni u e v si dicono ortogonali rispetto alla funzione peso w (positiva), seRb

a u(x)v(x)w(x) d x = 0.

139

Page 146: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Di conseguenzaRb

a F (x)p(x)w(x) d x =Pni=0 F (xi )p(xi )wi = 0 e quindi il punto (b) è provato.

Supponiamo ora che siano vere le condizioni (a) e (b) e dimostriamo che d = n +k (sufficienza). Sia p unpolinomio di grado n+k. Dobbiamo provare che Ei nt (p) = 0. Dividiamo il polinomio p per il polinomio F :possiamo scrivere p(x) = F (x)q(x)+r (x) dove q(x) (quoziente) è un polinomio di grado k °1 e r (x) (resto) èun polinomio di grado n. Nel fare l’integrale, abbiamoZb

ap(x)w(x) d x =

Zb

aq(x)F (x)w(x) d x +

Zb

ar (x)w(x) d x

Il primo integrale a secondo membro vale zero a motivo dell’ipotesi (b) (q(x) è un polinomio di grado k °1e quindi quell’integrale è zero). Il secondo integrale, invece, per la (a) può essere calcolato esattamenteandando ad applicare la formula di quadratura (essendo r di grado n ed essendo la formula interpolatoriasi ha Ei nt (r ) = 0 ). Si haZb

ap(x)w(x) d x =

Zb

ar (x)w(x) d x =

nX

i=0r (xi )wi

Ma r (xi ) = p(xi )°q(xi )F (xi ) = p(xi ) (essendo F (xi ) = 0). QuindiZb

ap(x)w(x) d x =

Zb

ar (x)w(x) d x =

nX

i=1p(xi )wi

L’errore è dunque zero e la dimostrazione è completata. 4

Da un punto di vista teorico la condizione (a) del teorema permette di calcolare i pesi delle formule di Gauss:essendo la formula interpolatoria si ha wi =

Rba Li (x)w(x) d x.

La condizione (b) permette di calcolare i nodi xi della formula (imponendo l’ortogonalità tra F (x) e ipolinomi di grado k = 0,1,2, . . . ,n si ricava un sistema di n + 1 equazioni nelle incognite dei coefficien-ti del polinomio F (x). Una volta trovato il polinomio F (x) ricaviamo le radici, che sono appunti i nodi diintegrazione6.

9.7.1 Proprietà delle formule di Gauss

Scriviamo le formule di Gauss con la notazioneZb

af (x)w(x) d x =

nX

i=0wi f (xi )+EG

i nt ( f )

Si ha EGi nt ( f ) ¥ 0 per f polinomio di grado ∑ 2n +1

I nodi xi sono reali, distinti e contenuti nell’intervallo aperto ]a,b[.I pesi wi sono tutti positivi.

Infatti, per j = 0,1, . . .n si ha 0 <Rb

a (L j (x))2w(x) d x =Pni=0 wi (L j (xi ))2

(l’errore è nullo perchè (L j (x))2 è un polinomio di grado 2n). Ma L j (xi ) = 0 se i 6= j e L j (xi ) = 1 se i = j .Quindi

Pni=0 wi (L j (xi ))2 = w j . Abbiamo provato che i pesi sono positivi.

Le formule di Gauss si possono ricavare mediante interpolazione (detta di Hermite) sui nodi xi contaticiascuno come nodo doppio nel senso che su ciascun nodo imponiamo la condizione di interpolazione nonsolo sulla f ma anche sulla derivata prima della f . Una volta che abbiamo ricavato il polinomio di interpo-lazione p(x) (che interpola quindi per ogni nodo sia la f sia la f 0) e approssimato

Rba f (x)w(x) d x medianteRb

a p(x)w(x) d x, dalla formula che ricaviamo imponiamo che i termini che contengono la derivata primasiano uguali a zero (questa osservazione è dovuta a Markov, matematico russo, nel 1885).

La formula che otteniamo (considerando che il polinomio interpola la f e la f 0) avrà termini del tipo:Rba f (x)w(x) d x =Pn

i=0 wi f (xi )+Pni=0 Ci f 0(xi )+EG

i nt (x)

6 Ricordiamo che un polinomio di grado n +1 lo possiamo scrivere come an+1xn+1 +an xn +·· ·+a0 ma possiamo anche dividereper il coefficiente di grado massimo e scriverlo in forma cosiddetta monica xn+1 +bn xn +bn°1xn°1 + . . .+b0, e avere quindi solo n +1coefficienti (b0, b1, . . . , bn ) : le radici dei due polinomi non cambiano.

140

Page 147: Calcolo Numerico

9.7. Introduzione alle formule di quadratura di Gauss

Imponendo Ci = 0 i = 0,1,2, . . .n, otteniamo n+1 condizioni che ci permettono di ricavare i valori di xi (inodi di integrazione della formula). Possiamo poi ricavare il valore dei pesi wi (che dipendono a loro volta dainodi). Nel procedere con l’interpolazione sui valori della f e della f 0, l’errore del polinomio di interpolazione

si può scrivere come E = (F (x))2 f (2(n+1))(ªx )(2(n +1))!

(poichè ogni nodo è contato due volte, e supponendo che la f

sia derivabile 2(n +1) volte e sia continua).Di conseguenza, l’errore nella formula di integrazione (applicando il teorema del Valor Medio in quanto

(F (x))2w(x) non cambia segno nell’intervallo di integrazione) si può scrivere come EGi nt

EGi nt (x) = f (2(n+1))(ª)

(2(n +1))!

Zb

a(F (x))2w(x) d x

9.7.2 Formule di Gauss-Legendre

A seconda della funzione peso, si ha una particolare formula di Gauss.In genere i nodi di integrazione sono calcolati su intervalli “canonici” (spetta a noi fare il cambio di

variabili se l’integrale è da farsi su altri intervalli).Per w(x) ¥ 1 e [a,b] ¥ [°1,1] si ha la formula di Gauss-Legendre.I nodi della formula di quadratura, sono le radici dei cosiddetti polinomi di Legendre.

n +1 nodi pesi2 x0,1 =±0.57735026918962576 w0 = w1 = 1.03 x0 =°0.77459666924148338 w0 = 5/9 = 0.5555555556

x1 = 0 w1 = 8/9 = 0.8888888889x2 = 0.77459666924148338 w2 = 5/9 = 0.5555555556

4 x0 =°0.86113631159405257 w0 = 0.3478548451374538x1 =°0.33998104358485626 w1 = 0.6521451548625461x2 = 0.33998104358485626 w2 = 0.6521451548625461x3 = 0.86113631159405257 w3 = 0.3478548451374538

I polinomi di Legendre (e, come essi, anche tutti gli altri polinomi le cui radici sono i nodi delle altreformule di Gauss) hanno la caratteristica di essere polinomi mutuamente ortogonali (nel senso che presidue polinomi di Legendre, che chiamiamo !n(x) e !m(x), rispettivamente di grado n e m, con n 6= m, si haRb

a !n(x)!m(x)w(x) d x = 0).I polinomi di Legendre (e, come essi, i polinomi delle altre formule di Gauss), si ricavano mediante for-

mule ricorsive, cioè ogni polinomio di Legendre di grado n è legato (mediante una relazione opportuna) aipolinomi di Legendre di grado n °1 e n °2.

9.7.3 Altre formule di Gauss

Con w(x) = 1p

(1°x2)e [a,b] = [°1,1] si hanno le formule di Gauss-Chebychev (prima specie) in

quanto i nodi di integrazione sono le radici dei cosiddetti polinomi di Chebychev di prima specie.Con w(x) =

p(1°x2) e [a,b] = [°1,1] si hanno le formule di Gauss-Chebychev (seconda specie) in

quanto i nodi di integrazione sono le radici dei cosiddetti polinomi di Chebychev di seconda specie.Con w(x) = (1°x)Æ(1+x)Ø (per Æ>°1 e Ø>°1) e [a,b] = [°1,1] si hanno le formule di Gauss-Jacobi.Con w(x) = xÆe°x (per Æ>°1) e [a,b] = [0,+1] si hanno le formule di Gauss-Laguerre.Con w(x) = e°x2

e [a,b] = [°1,+1] si hanno le formule di Gauss-Hermite.

141

Page 148: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Figura 9.5: Funzioni peso per le formule di quadratura di Gauss-Chebycev di prima e seconda specie (asinistra e a destra rispettivamente)

Figura 9.6: Funzioni peso per le formule di quadratura di Gauss-Jacobi (conÆ= 2 eØ= 4) e di Gauss-Laguerre(con Æ= 2) (a sinistra e a destra rispettivamente)

Figura 9.7: Funzione peso per le formula di quadratura di Gauss-Hermite.

9.7.4 Applicazione delle formule

Supponiamo di voler approssimare un integrale utilizzando le formule di Gauss-Legendre, ma in unintervallo diverso da [°1,1].

Dobbiamo fare un cambio di variabili. DaRb

a f (x) d x dobbiamo passare aR1°1 f (t ) d t .

Poniamo x = b °a2

t + b +a2

Per t = °1 si ha x = b °a2

(°1)+ b +a2

= °b +a +b +a2

= 2a2

= a. Quindi per t = °1, si ha x = a (il primo

estremo di un intervallo viene trasformato nel primo estremo dell’altro intervallo).

Per t = 1 si ha x = b °a2

(1)+ b +a2

= b °a +b +a2

= 2b2

= b.

Perciò, per t = 1, si ha x = b.

Inoltre d x = b °a2

d t . Con la trasformazione di variabili si ha:

Zb

af (x) d x =

Z1

°1fµ

b °a2

t + b +a2

∂b °a

2d t

142

Page 149: Calcolo Numerico

9.8. Esercizi

Applicando la formula di Gauss-Legendre

Zb

af (x) d x º b °a

2

nX

i=0wG

i f (b °a

2xi +

b +a2

)

9.7.5 Sulla funzione peso

Supponiamo di voler integrare una funzione g (x) in [a,b] (intervallo finito). Supponiamo che la funzio-ne integranda g abbia una singolarità algebrica agli estremi (con una certa molteplicità), in modo da poterscrivere g (x) = f (x)(b °x)Æ(x °a)Ø

Adesso, facciamo un cambiamento di variabile, da [a,b] a [°1,1], considerando la trasformazione x =b °a

2t + b +a

2.

Si ha (b °x) = b °a2

(1° t ) e (x °a) = b °a2

(1+ t ).

AlloraRb

a g (x) d x = b °a2

R1°1 f (

b °a2

t + b +a2

b °a2

∂Æ(1° t )Æ

µb °a

2

∂Ø(1+ t )Ø d t

b °a2

∂Æ+Ø+1 R1°1 f (

b °a2

t + b +a2

)(1° t )Æ(1+ t )Ø d t

Posso applicare le formule di Gauss-Jacobi e “scaricare” sulla funzione peso le singolarità della funzionedi partenza.

Sia dato l’integraleR1

0 f (x)(1° x)p d x con f regolare e p intero elevato: allora (1° x)p è una funzione cheha valori vicini a zero. La funzione da integrare è quasi discontinua e le formule classiche (Trapezi o Cavalieri-Simpson) non danno buoni risultati. Si può pensare a questo integrale come ad un integrale di tipo Jacobi (sucui applicare la formula di Gauss-Jacobi) con Æ= p e Ø = 0. Si fa l’opportuno passaggio di variabili in mododa integrare sull’intervallo [°1,1]. La formula di Gauss incorpora nella funzione peso la parte che riguarda(1°x)p .

9.8 Esercizi

Esercizio 9.8.1 Sia dato l’integrale I =Z0

°2e°x (x +1) dx.

(a) Approssimare il valore dell’integrale applicando la formula dei trapezi con n = 5 suddivisioni in partiuguali dell’intervallo di integrazione.

(b) Trovare una maggiorazione dell’errore commesso e, dopo aver calcolato analiticamente l’integraleesatto, confrontare tale stima con l’errore esatto.

Svolgimento(a) Applichiamo la formula dei trapezi con n = 5 suddivisioni dell’intervallo dato. Vale, dunque, h = 0.4. I

punti da considerare e il valore della f (x) = e°x (x +1), sono:i xi f (xi )0 -2 -7.38905611 -1.6 -2.971819452 -1.2 -0.6640233853 -0.8 0.4451081864 -0.4 0.8950948195 0 1

143

Page 150: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

La formula dei trapezi è

Itr ap = h(f (x0)+ f (x5)

2+ f (x1)+ f (x2)+ f (x3)+ f (x4)) =°2.19606715

(b) Per calcolare una maggiorazione dell’errore commesso, dobbiamo calcolare la derivata seconda dellaf .

Da f (x) = e°x (x +1) segue f 0(x) =°e°x (x +1)+e°x =°e°x x e f 00(x) = e°x x °e°x = e°x (x °1).Poichè f 00(x) è sempre negativa nell’intervallo di integrazione e a noi interessa la funzione valore

assoluto della f 00(x), studiamo la funzione g (x) = | f 00(x)| = e°x (1° x). Si ha che g 0(x) = e°x (x °2) < 0in [°2,0], quindi g è decrescente e ha valore massimo per x =°2. Si ha dunque che M = max | f 00(x)| =| f 00(°2)| = 22.1671682968

Quindi |Etr ap |∑ M|(b °a)3|

12 ·52 = 0.591124488

Analiticamente, è facile calcolare l’integrale esatto (per parti):

I =Z0

°2f (x) dx =°e°x (x +1)|0°2 +

Z0

°2e°x dx =°e°x (x +2)|0°2 =°2

Quindi l’errore esatto, in valore assoluto, è: |I ° Itr ap | = 0.196067154, un valore minore dellamaggiorazione trovata prima.

Esercizio 9.8.2 Sia dato l’integraleZ2

0

2x °4

d x

(a) Dare una sua approssimazione con la formula dei trapezi e n = 4 suddivisioni in parti ugualidell’intervallo di integrazione.

(b) Trovare una maggiorazione dell’errore commesso.(c) Confrontare l’errore esatto con la stima precedentemente trovata.(d) Dire in quanti sottointervalli occorre suddividere l’intervallo di integrazione per ottenere una

maggiorazione dell’errore minore della tolleranza ≤= 10°5.

Svolgimento(a) Suddividendo l’intervallo di integrazione [0,2] in n = 4 parti si trova un passo h = 2/4 = 1/2 = 0.5.

La formula dei trapezi è:

IT = b °an

(f (a)+ f (b)

2+ f (x1)+ f (x2)+ f (x3))

= 0.5(f (0)+ f (2)

2+ f (0.5)+ f (1)+ f (1.5))

= 0.5(°0.5°1

2°0.571428571°0.666666667°0.8)

=°1.39404762

(b) Consideriamo la formula dell’errore: E =° f 00(ª)12

(b °a)3

n2

Da f (x) = 2x °4

segue f 0(x) = °2(x °4)2 e f 00(x) = 4

(x °4)3 .

Per maggiorare l’errore dobbiamo considerare che vale

|E |∑ max0∑x∑2 | f 00(x)|12

(b °a)3

n2 , da cui dobbiamo calcolare M = max0∑x∑2 | f 00(x)|.

144

Page 151: Calcolo Numerico

9.8. Esercizi

La funzione (x°4)3 è continua, crescente e sempre negativa nell’intervallo [0,2]. Quindi | 4(x °4)3 | =

4(4°x)3 : osserviamo il cambiamento al denominatore. Poniamo g (x) = 4

(4°x)3 . Risulta g 0(x) =12

(4°x)4 > in [0,2], quindi la g è crescente e ha valore massimo per x = 2. Perciò M = max0∑x∑2 | f 00(x)| =

| f 00(2)| = 423 = 1/2 = 0.5. Si ha allora la maggiorazione dell’errore |E |∑ M

1223

42 = 148

= 0.0208333333

(c) L’integrale esatto si calcola facilmente:

I =Z2

0

2x °4

d x = 2ln(|x °4|)|20 = 2ln(|°2|)°2ln(|°4|) = 2ln(1/2) = ln(1/4)°1.386294361

L’errore esatto commesso con la formula dei trapezi, in valore assoluto, è |I ° IT | = 0.00775325793

(d) Perchè la maggiorazione dell’errore sia minore della tolleranza ≤= 10°5 deve essere |E |∑ M12

23

n2 ∑ 10°5

cioè n2 ∏ M12

23105 = 105

3= 33333.333333. Quindi n > 182.574186, vale a dire n = 183.

Esercizio 9.8.3 Dato l’integrale

I =Z0.5

0

1p

1°x2d x

(a) si approssimi I con i valori Q1 e Q2 ottenuti applicando il metodo di Cavalieri-Simpson prima a tuttol’intervallo e poi suddividendo l’intervallo in due parti uguali;

(b) si approssimi I usando la formula di estrapolazione di Richardson;(c) dopo aver calcolato analiticamente il valore esatto di I , determinare l’errore esatto commesso con

l’estrapolazione di Richardson.

Svolgimento(a) Applichiamo la formula di Cavalieri-Simpson su tutto l’intervallo, considerando che l’ampiezza

dell’intervallo è b °a = 0.5 e h = 0.25

Q1 =0.25

3( f (0)+4 f (0.25)+ f (0.5)) = 0.523823565

Si ha, infatti, f (0) = 1, f (0.25) = 1.03279556 e f (0.5) = 1.15470054.Suddividendo l’intervallo in due parti uguali, abbiamo h = 0.125, da cui i punti: x0 = a = 0, x1 =

0.125, x2 = 0.25, x3 = 0.375, e x4 = b = 0.5.

Q2 =h3

( f (x0)+4( f (x1)+4 f (x3))+2 f (x2)+ f (x4)) = 0.523616326

dove f (0.125) = 1.00790526, f (0.375) = 1.07871978 (essendo già in possesso degli altri valori, calcolatiper Q1)

(b) La formula di estrapolazione di Richardson è: Q3 =Q2 +Q2 °Q1

15da cui ricaviamo Q3 = 0.5236025101

(c) Analiticamente l’integrale esatto è:

I =Z0.5

0

1p

1°x2d x = arcsin(x)|0.5

0 =º/6°0 = 0.523598775

L’errore esatto commesso con l’estrapolazione di Richardson, in valore assoluto, è: |I°Q3| = 3.7351·10°6.

145

Page 152: Calcolo Numerico

9. INTEGRAZIONE NUMERICA

Esercizio 9.8.4 Si calcoli I =R5

2 sin(p

x) d x utilizzando il metodo di Gauss-Legendre con 3 punti diappoggio (x1 =°

p(3/5), x2 = 0, x3 =

p(3/5); w1 = w3 = 5/9, w1 = 8/9).

SvolgimentoApplichiamo la formula, ricordandoci che dobbiamo utilizzarla non in [2,5] ma in [°1,1]. Considerando

che la trasformazione dall’intervallo [2,5] all’intervallo [°1,1] porta al cambiamento di variabili x = b °a2

t +b +a

2= 5°2

2t + 5+2

2= 3

2t + 7

2si ha d x = 3

2d t . La formula di Gauss-Legendre deve essere applicata sui nodi

trasformati dati da32

xi +72

. Perciò abbiamo

IG = 32

µw1 f (

32

x1 +72

)+w2 f (32

x2 +72

)+w3 f (32

x3 +72

)∂

= 1.5°(5/9) f (°1.161895004+3.5)+ (8/9) f (3.5)+ (5/9) f (1.161895004+3.5)

¢

= 1.5(0.5550723689+0.8491794877+0.4621443545) = 2.799594317

146

Page 153: Calcolo Numerico

CA

PI

TO

LO 10

EQUAZIONI ALLE DERIVATE ORDINARIE

L’universo è un’equazionedifferenziale.

Jules Henri Poincarè

10.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14710.2 Sulle equazioni differenziali ordinarie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14810.3 Metodo di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14910.4 Metodo di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15110.5 Metodo di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15410.6 Studio dell’errore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15510.7 Errori di troncamento locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15510.8 Convergenza e stabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

10.8.1 Convergenza di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15610.8.2 Stabilità di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15710.8.3 Convergenza di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15710.8.4 Stabilità di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15810.8.5 Convergenza di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15810.8.6 Stabilità di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15910.8.7 Sulla stabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

10.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

10.1 Introduzione

All’inizio del ’900, van der Pol1 studiò fenomeni non lineari e propose l’equazione differenziale

1Balthasar van der Pol (1889-1959) fu un fisico e matematico olandese. Nel 1916 lavorò per un anno con l’ingegnere John AmbroseFleming a Londra (Fleming aveva già inventato il diodo nel 1904). Si trasferì successivamente a Cambridge e iniziò una collaborazionecon John Joseph Thomson al Cavendish Laboratory (Thomson aveva scoperto l’elettrone nel 1897). Qui divenne amico di Edward Ap-pleton che, nel 1947, ricevette il premio Nobel per la fisica per i suoi contributi alla conoscenza della ionosfera – studi fatti insieme avan der Pol. La loro collaborazione riguardò anche lo studio di fenomeni non lineari usando circuiti triodi per verificare le loro teorie.Quando van del Pol rientrò in Olanda, continuò a occuparsi di ottica, elettromagnetismo, onde radio e fisica atomica. Il nome di vander Pol è associato con l’equazione differenziale che porta il suo nome. Questa equazione apparve per la prima volta sul suo articolo Onrelaxation oscillation pubblicato sulla rivista Philosophical Magazine nel 1926.

147

Page 154: Calcolo Numerico

10. EQUAZIONI ALLE DERIVATE ORDINARIE

y 00(t )+≤(y2(t )°1)y 0(t )+ y(t ) = 0

Questa equazione governa l’intensità di corrente in un circuito oscillante a triodo e viene utilizzata nellostudio di circuiti che contengono valvole termoioniche, i cosiddetti tubi a vuoto, come il tubo catodico deltelevisore o il magnetron nei forni a microonde. La quantità ≤ indica l’intensità dello smorzamento nonlineare: quanto più ≤ è elevato tanto più il sistema perde energia rapidamente.

L’equazione differenziale del secondo ordine si può ricondurre ad un sistema di equazioni differenzialidel primo ordine. Ponendo u = (u1,u2) = (y, y 0) si ha

µu0

1u0

2

∂=

µu2

°≤((u1)2 °1)u2 °u1

Come si risolve numericamente un sistema di equazioni differenziali come quello appena scritto? Inquesto Capitolo, daremo una piccola introduzione a metodi numerici che permettono di risolvere equazionidifferenziali del primo ordine.

10.2 Sulle equazioni differenziali ordinarie

Vogliamo trovare una funzione y(t ) che soddisfi la seguente equazione differenziale ordinaria ( ODE:Ordinary Differential Equation) del primo ordine:

dydt

= f (t , y), a ∑ t ∑ b

La funzione f (t , y) è assegnata. Ci riferiamo a t come alla variabile indipendente. Dobbiamo trovare quella

funzione y = y(t ) tale che la sua derivata prima y 0 = y 0(t ) = dy(t )dt

coincida con f (t , y(t )).

Esempio 10.2.1 Sia f (t , y) =°y + t definita per t ∏ 0 e per qualunque y reale. Si hay 0 =°y + t , t ∏ 0

Si verifica che, per qualunque scalare Æ la funzione y(t ) = t °1+Æe°t soddisfa la ODE.Se, inoltre, è assegnato un valore iniziale, per esempio y(0) = 1, allora, dovendo essere °1+Æ = y(0) = 1,risulta Æ= 2. Assegnare una soluzione iniziale determina un’unica soluzione all’ODE. Si parla di problemaa valori iniziali (IVP).Nel caso in cui y(0) = 1 si ricava l’unica soluzione y(t ) = t °1+2e°t .

Problemi in cui abbiamo equazioni alle derivate ordinarie di ordine più elevato possono essere trasformatiin sistemi equivalenti di equazioni del primo ordine.

Esempio 10.2.2 La seconda legge del moto di Newton dice che la forza F è uguale al prodotto della massam per l’accelerazione a: F = ma. Questa equazione è una ODE del secondo ordine in quanto l’accelerazionea è data da a = y 00, dove y è la coordinata della posizione. L’ODE può essere riscritta come:

y 00 = F /mDefinendo u1 = y e u2 = y 0 si ha il sistema (equivalente all’equazione di prima) di due equazioni del primoordine di ODE: µ

u01

u02

∂=

µu2

F /m

Per risolvere il sistema, possiamo usare metodi che vanno bene per risolvere equazioni differenziali del pri-mo ordine. La prima componente della soluzione u1 corrisponde alla posizione y dell’equazione da cuisiamo partiti. La seconda componente u2 fornisce la velocità y 0.

148

Page 155: Calcolo Numerico

10.3. Metodo di Eulero esplicito

Sistemi diODESistemi del primo ordine di ODE hanno la forma

y0(t ) = f(t ,y)

dove y : R°!Rn con y = (y1 y2 . . . yn), f : Rn+1 °!Rn e y0(t ) = dyd t

denota la derivata rispetto a t (per cui la

i -sima componente del vettore derivata è data da y 0i (t ) = d yi (t )

d t). La funzione f è assegnata e noi vogliamo

determinare il vettore di funzioni y che soddisfa l’ODE.Per semplicità noi studieremo il caso di una singola equazione scalare, n = 1. Ma l’approccio è del tutto

simile nel caso di sistemi di equazioni del primo ordine.Sia data l’ODE

y 0 = f (t , y(t )) a ∑ t ∑ b

con valore iniziale

y(a) = ya .

Per risolvere questa ODE discretizziamo l’intervallo [a,b] in n +1 punti, equidistanti per semplicità: ti =a + i h, h = 0,1, . . . ,n, con h = (b °a)/n.

Il passo di discretizzazione (temporale se t assume il significato della variabile temporale) è dunque h.Nelle applicazioni pratiche, il passo h è variabile (cioè i punti non sono equidistanti), tuttavia, per capiremeglio come funzionano i metodi, noi useremo sempre un passo h costante.

Sia y(t ) la soluzione esatta del nostro problema a valori iniziali. Allora y(ti ) è il valore esatto dellasoluzione calcolata nel punto ti .

Indichiamo invece con yi il valore approssimato al tempo ti che ricaviamo applicando un metodonumerico che risolve il problema proposto.

10.3 Metodo di Eulero esplicito

Con il metodo di Eulero2 esplicito applichiamo la formula di Taylor (del secondo ordine) alla funzioney(t ), di centro ti , in modo da poter successivamente approssimare la derivata prima y 0(ti ):

y(t ) = y(ti )+ (t ° ti )y 0(ti )+ (t ° ti )2

2y 00(ªi )

La quantità(t ° ti )2

2y 00(ªi ) è il resto della formula di Taylor con ªi un punto opportuno nel segmento di

estremi t e ti .Prendiamo come t il valore ti +h vale a dire ti+1, da cui si ha t ° ti = ti+1 ° ti = h. Sostituendo si ottiene:

y(ti+1) = y(ti )+hy 0(ti )+ h2

2y 00(ªi )

Esplicitando y 0(ti ) rispetto agli altri termini si ha:

y 0(ti ) = y(ti+1)° y(ti )h

° h2

y 00(ªi )

Ora si sostituisce il valore trovato per y 0(ti ) nella ODE y 0 = f (t , y(t )) per t = ti :

y(ti+1)° y(ti )h

° h2

y 00(ªi ) = f (ti , y(ti ))

2Leonhard Euler (1707-1783) fu un matematico svizzero. Fu studente di Johann Bernoulli che comprese le sue grandi potenzialitàe favorì i suoi studi. Eulero è noto soprattutto per i suoi contributi nel campo della geometria, della teoria dei numeri, delle equazionidifferenziali, del calcolo delle variazioni. È lui che introdusse il simbolo f (x) per indicare le funzioni, e per la base naturale, i per laradice quadrata di °1, di º, il simbolo di sommatoria

Pe altri ancora.

149

Page 156: Calcolo Numerico

10. EQUAZIONI ALLE DERIVATE ORDINARIE

Trascurando il termineh2

y 00(ªi ) non abbiamo più i valori della soluzione esatta, ma otterremo i valori della

soluzione approssimata. Scriviamo dunque:

yi+1 ° yi

h= f (ti , yi )

La formula di Eulero esplicito è: yi+1 = yi +h f (ti , yi ).

La formula è di tipo esplicito perchè per passare dal livello i al livello i + 1 sfruttiamo i dati che giàconosciamo del livello i .

Si parte infatti da y0 = y(t0) = y(a) = ya e si ricava:

y1 = y0 + f (t0, y0)

y2 = y1 + f (t1, y1)

... =...

Si arriva alla stessa formula integrando l’ODE e approssimando l’integrale della f mediante il valore inUn altroapproccio f (t0, y(t0)): da y 0 = f (t , y(t )) integrando ambo i membri da t0 a t , otteniamo

Zt

t0

d yd t

d t =Zt

t0

f (t , y(t )) d t =)Zy(t )

y0

d y =Zt

t0

f (t , y(t )) d t

Al secondo membro, approssiamoRt

t0f (t , y(t )) d t mediante il valore (t ° t0) f (t0, y(t0)) (approssimiamo la f

mediante la retta f (t0, y(t0))).Abbiamo:

y(t ) = y0 + (t ° t0) f (t0, y0))+errore della formula di quadratura.

Per t = t1, numericamente: y1 = y0 +h f (t0, y0)).Ai passi successivi: yi+1 = yi +h f (ti , yi ))

Esempio 10.3.1 Supponiamo di applicare il metodo di Eulero esplicito alla ODE y 0 = °y con passo h apartire dal punto iniziale t0 = 0 e avanziamo al tempo t1 = t0 +h

y1 = y0 +h f (t0, y0) = y0 °hy0 = (1°h)y0Il valore y1 che otteniamo è affetto da errore: y1 6= y(t1) Per esempio, se per t0 si ha y0 = 1, la soluzione esattaè y(t ) = e°t . Per h = 0.5, si ha y1 = 0.5 mentre y(0.5) = e°0.5 º 0.60653

Da un punto di vista geometrico (si veda la Figura 10.1), il valore in ti+1 è approssimato utilizzando il valoreInterpretazionegeometrica della retta la cui pendenza è data da f (ti , yi ): è come se ad ogni passo cercassimo di risolvere il problema a

valori iniziali:

y 0(t ) = f (t , y(t ))

y(ti ) = yi

per cui il valore che otteniamo per il tempo ti+1 è tangente alla traiettoria della soluzione di questo IVP.

150

Page 157: Calcolo Numerico

10.4. Metodo di Eulero implicito

Figura 10.1: Interpretazione geometrica del metodo di Eulero esplicito. Si è considerato il problema y 0 =°ycon y(0) = 1 la cui soluzione esatta è y(t ) = e°t . I valori numerici ottenuti dal metodo di Eulero esplicito sonocerchiati e si trovano sulla linea spezzata che li interpola. La linea spezzata è tangente, all’inizio di ogni passo,alla traiettoria che passa per il corrispondente punto, soluzione del problema y 0 =°y con y(ti ) = yi .

10.4 Metodo di Eulero implicito

Se applichiamo la formula di Taylor di punto iniziale ti+1, abbiamo

y(t ) = y(ti+1)+ (t ° ti+1)y 0(ti+1)+ (t ° ti+1)2

2y 00(ªi )

Per t = ti , si ha t ° ti+1 = ti ° ti+1 = ti ° (ti +h) =°h. Sostituendo, abbiamo:

y(ti ) = y(ti+1)°hy 0(ti+1)+ h2

2y 00(ªi )

Otteniamo quindi

y 0(ti+1) = y(ti+1)° y(ti )h

+ h2

y 00(ªi )

Andando a sostituire nella ODE al tempo ti+1, si ha :

y(ti+1)° y(ti )h

+ h2

y 00(ªi ) = f (ti+1, y(ti+1))

Trascurando il termine del resto di Taylorh2

y 00(ªi ) abbiamo:

yi+1 ° yi

h= f (ti+1, yi+1))

La formula di Eulero implicito vale yi+1 = yi +h f (ti+1, yi+1)).

151

Page 158: Calcolo Numerico

10. EQUAZIONI ALLE DERIVATE ORDINARIE

La differenza rispetto alla formula esplicita è che la f è valutata non più al tempo ti ma al tempo ti+1 Quindiil calcolo di yi+1 dipende implicitamente da yi+1 stesso! La valutazione di yi+1 diventa quindi più laboriosae complicata (se si ha un’equazione non lineare in yi+1, la si risolve tramite un metodo di punto fisso o diNewton-Raphson). In termini di accuratezza si hanno risultati migliori.

Esempio 10.4.1 Consideriamo sempre y 0 =°y con y(0) = 1 (soluzione esatta y(t ) = e°t ).Il metodo di Eulero implicito diventa: yi+1 = yi °hyi+1 ovvero (1+h)yi+1 = yi

La soluzione numerica è yi+1 =yi

(1+h).

Per h = 0.5 ricaviamo y1 = 0.66667 contro un valore esatto y(1) º 0.60653.

Esempio 10.4.2 Si abbia l’equazione y 0 =°y3 con condizione iniziale y(0) = 1. Usando il metodo di Euleroimplicito con passo h = 0.5, per ricavare y1 otteniamo l’equazione implicita

y1 = y0 +h f (t1, y1) = 1°0.5y31

Questa equazione non lineare in y1 può essere risolta mediante metodo di punto fisso (x = g (x) = 1°0.5x3)oppure utilizzando il metodo di Newton-Raphson per F (x) = 0 con F (x) = x°1+0.5x3) . L’approssimazioneiniziale per ottenere y1 può essere o la soluzione al passo precedente, y0, oppure usare il metodo di Euleroesplicito, che dà y1 = y0 °0.5y3

0 = 0.5. Otteniamo, come y1 il valore finale y1 º 0.7709.

Esempio 10.4.3 Vogliamo discretizzare il problema di Cauchyy 0 =°y2

y(0) = 1con passo h = 0.1 applicando il metodo di Eulero esplicito per ricavare y1 e y2.Il metodo di Eulero esplicito è:

yi+1 = yi +h f (ti , yi ) = yi +h(°y2i ) = yi °hy2

iPartendo da y0 = 1 si ricava:

y1 = 1°0.1(12) = 0.9

y2 = 0.9°0.1(0.92) = 0.819

Per confronto, calcoliamo la soluzione esatta y(t ) = 1t +1

, ottenendo:

y(t1) = y(0.1) = 1/(0.1+1) = 0.9090909090

y(t2) = y(0.2) = 1/(0.2+1) = 0.8333333333

Applichiamo ora il metodo di Eulero implicito con lo stesso passo h = 0.1.

yi+1 = yi +h f (ti+1, yi+1) = yi °hy2i+1

Per ricavare y1 la formula diventa:y1 = y0 +h f (t1, y1) = 1°0.1(y2

1 )

152

Page 159: Calcolo Numerico

10.4. Metodo di Eulero implicito

Abbiamo un’equazione non lineare in y1. Per trovare y1, possiamo pensare di applicare lo schema di puntofisso alla funzione g (y) = 1° 0.1(y2) partendo da y (0) = y0 = 1, in quanto y1 = g (y1) è punto fisso per lafunzione g . Applichiamo tre passi dello schema di punto fisso:

y (1) = g (y (0)) = 1°0.1(12) = 0.9

y (2) = g (y (1)) = 1°0.1(0.92) = 0.919

y (3) = g (y (2)) = 1°0.1(0.9192) = 0.9155439

Se prendiamo y (3) come approssimazione di y1 ricaviamo y1 = 0.9155439 (per confronto, il valore esatto è0.90909090).Calcoliamo ora y2:

y2 = y1 +h f (t2, y2) = 0.9155439°0.1(y22 )

Ora la funzione di punto fisso diventa g (y) = 0.9155439° 0.1(y2). Applichiamo lo schema di punto fissopartendo da y (0) = y1 = 0.9155439.

y (1) = g (y (0)) = 0.9155439°0.1(0.91554392) = 0.8317218367

y (2) = g (y (1)) = 0.9155439°0.1(0.83172183672) = 0.8463677786

y (3) = g (y (2)) = 0.9155439°0.1(0.84636777862) = 0.8439100583

Troviamo quindi y2 = 0.8439100583 (valore esatto 0.8333333333).Vediamo cosa accade in Eulero implicito se il punto iniziale del metodo di punto fisso è dato da un passodel metodo di Eulero esplicito.Per ricavare y1, considero come y (0) = y0 +h f (t0, y0) = 1°0.1 = 0.9In tal caso, l’approssimazione iniziale è quella che, nel caso di prima, era il valore y (1).Applichiamo tre volte lo schema di punto fisso:

y (1) = g (y (0)) = 1°0.1(0.92) = 0.919

y (2) = g (y (1)) = 1°0.1(0.9192) = 0.9155439

y (3) = g (y (2)) = 1°0.1(0.91554392) = 0.9161779367

Quindi y1 = 0.9161779367.Al secondo passo, lo schema di punto fisso è dato dalla funzione g (y) = y1 °h(y2) = 0.9161779367°0.1y2.Come approssimazione iniziale prendiamo y (0) = y1 +h f (t1, y1) = g (y1) = 0.8322397355. Si ha:

y (1) = g (y (0)) = 0.9161779367°0.1(0.83223973552) = 0.8469156390

y (2) = g (y (1)) = 0.9161779367°0.1(0.84691563902) = 0.8444513267

y (3) = g (y (2)) = 0.9161779367°0.1(0.84445132672) = 0.8448681324

Ricaviamo y2 = 0.8448681324.

153

Page 160: Calcolo Numerico

10. EQUAZIONI ALLE DERIVATE ORDINARIE

10.5 Metodo di Crank-Nicolson

Partiamo dall’ODE 3 y 0 = f (t , y(t )). Integriamo ambo i membri dell’equazione sull’intervallo [ti , ti+1]:Zy(ti+1)

y(ti )dy =

Zti+1

ti

f (t , y(t )) dt =) y(ti+1)° y(ti ) =Zti+1

ti

f (t , y(t )) dt

A secondo membro, applichiamo la formula dei trapezi trascurando l’errore di integrazione:

yi+1 ° yi =h2

[ f (ti , yi )+ f (ti+1, yi+1)]

Si ha la formula di Crank-Nicolson: yi+1 = yi +h2

[ f (ti , yi )+ f (ti+1, yi+1)]

Altroapproccio La stessa formula la si può ricavare prendendo la media aritmetica delle formule di Eulero esplicito e

implicito:

yi+1 ° yi = h f (ti , yi )

yi+1 ° yi = h f (ti+1, yi+1)

sommando e dividendo per 2:

yi+1 ° yi =h2

[ f (ti , yi )+ f (ti+1, yi+1)] =) yi+1 = yi +h2

[ f (ti , yi )+ f (ti+1, yi+1)]

Esempio 10.5.1 Lo stesso esempio di prima (y 0 = °y con y(0) = 1) risolto con Crank-Nicolson dà: yi+1 =yi +

h2

[°yi ° yi+1)] cioè

(1+ h2

)yi+1 = (1° h2

)yi =) (2+h)yi+1 = (2°h)yi =) yi+1 =µ

2°h2+h

∂yi

Per h = 0.5, confrontiamo i valori ottenuti dai metodi di Eulero esplicito, implicito e Crank-Nicolson, con lasoluzione esatta:

ti y(ti ) yi Eul. Espl. yi Eul. Impl. yi C-N0.0 1.000000 1.0000000 1.000000 1.0000000.5 0.606531 0.5000000 0.666667 0.6000001.0 0.367879 0.2500000 0.444444 0.3600001.5 0.223130 0.1250000 0.296296 0.2160002.0 0.135335 0.0625000 0.197531 0.1296002.5 0.082085 0.0312500 0.131687 0.0777603.0 0.049787 0.0156250 0.087791 0.0466563.5 0.030197 0.0078125 0.058528 0.0279944.0 0.018316 0.0039062 0.039018 0.016796

3 John Crank (1916-2006) è stato un matematico inglese che si è dedicato soprattutto allo studio di soluzioni numeriche di equazionialle derivate parziali, in particolare di problemi di conduzione del calore. È noto soprattutto per il lavoro svolto con Phyllis Nicolson.

Phyllis Nicolson (1917-1968) è stata una matematica inglese. Negli anni della seconda guerra mondiale lavorò sulla teoria delmagnetron. È nota, appunto, per il metodo di Crank-Nicolson.

154

Page 161: Calcolo Numerico

10.6. Studio dell’errore

10.6 Studio dell’errore

Nel costruire i metodi (di Eulero esplicito, implicito, Crank-Nicolson) abbiamo trascurato un termine (ilresto della formula di Taylor o l’errore della formula dei trapezi): questo termine che abbiamo trascuratorappresenta l’errore di troncamento locale. Nel caso di Eulero esplicito avevamo (usando la formula diTaylor):

y 0 (ti+1) = y(ti+1)° y(ti )h

° h2

y 00(ªi ) = f (ti , y(ti ))

Per costruire il metodo, abbiamo trascurato il termine del resto, vale a dire la quantità

di =y(ti+1)° y(ti )

h° f (ti , y(ti )) = h

2y 00(ªi ) =O (h)

Questa quantità ci dice di quanto la soluzione esatta “fallisce” nel soddisfare la relazione della formula diEulero esplicito e rappresenta l’errore di troncamento locale.

Definizione 10.6.1 Si definisce errore totale di troncamento "i la quantità:

"i = y(ti )° yi .

Ci aspettiamo che sia dello stesso ordine di grandezza dell’errore di troncamento locale.

Definizione 10.6.2 Per effetto dell’arrotondamento, al tempo ti al posto di yi otteniamo il valore arrotondatoyi . Si definisce errore totale di arrotondamento la quantità:

"i = yi ° yi

Definizione 10.6.3 L’errore globale dello schema numerico è dato dal contributo dell’errore totale ditroncamento e dell’errore totale di arrotondamento

≤i = y(ti )° yi = "i +"i

Gli errori di arrotondamento nell’approssimare la derivata prima di una funzione si comportano come

O (1h

) (si veda l’esempio fatto sulla propagazione degli errori a pag. 29). Tuttavia questo aspetto diventa se-

condario nella risoluzione delle ODE sia perchè il passo h nelle applicazioni non è mai troppo (esagerata-mente) piccolo per ragioni di efficienza sia perchè è la y e non la y 0 la funzione che dobbiamo approssimare.Inoltre, nell’eseguire i calcoli in doppia precisione (come si fa nei moderni linguaggi di programmazione),l’aspetto dovuto all’arrotondamento si vede poco rispetto ad altri fenomeni che influenzano la propagazionedegli errori.

10.7 Errori di troncamento locale

Nel metodo di Eulero esplicito:

di =y(ti+1)° y(ti )

h° f (ti , y(ti )) = h

2y 00(ªi ) =O (h)

Nel metodo di Eulero implicito:

di =y(ti+1)° y(ti )

h° f (ti , y(ti+1)) =°h

2y 00(ªi ) =O (h)

155

Page 162: Calcolo Numerico

10. EQUAZIONI ALLE DERIVATE ORDINARIE

Nel metodo di Crank-Nicolson (derivando la formula dai trapezi e includendo il termine dell’errore):

y(ti+1)° y(ti ) = h2

[ f (ti , y(ti ))+ f (ti+1, y(ti+1))]° f 00(ªi ,øi )12

h3

dove ªi e øi sono opportuni punti. Ma f = y 0 da cui f 0 = y 00 e f 00 = y 000.Perciò

y(ti+1)° y(ti ) = h2

[ f (ti , y(ti ))+ f (ti+1, y(ti+1))]° y 000(ªi )12

h3

di =y(ti+1)° y(ti )

h° 1

2[ f (ti , y(ti ))+ f (ti+1, y(ti+1))] =° y 000(ªi )

12h2 =O (h2)

10.8 Convergenza e stabilità

Definizione 10.8.1 Un metodo si dice convergente se lim h!0i!+1

≤i = 0 cioè se l’errore va a zero al tendere del

passo h a zero e di i all’infinito in modo che il prodotto i h si mantenga costante (così t0+i h tende ad un valoredi t fissato: studiamo l’errore fissato t).

Esempio 10.8.1 Vediamo come, fissato un certo istante t , possiamo fare tendere h a zero e far crescere iall’infinito in modo che t0 + i h sia sempre uguale a t . Sia t0 = 0 e t = 0.5:

h i i h0.5 1 0.50.25 2 0.50.125 4 0.50.0625 8 0.5...

......

2.4414e-4 2048 0.5

Definizione 10.8.2 Un metodo si dice stabile se l’errore iniziale si mantiene limitato al crescere di i (per i !1):

|≤i |∑ M |≤0|con M costante positiva.

Studieremo la convergenza e la stabilità dei metodi di Eulero esplicito, implicito e Crank-Nicolsonapplicati all’equazione test y 0 =°∏y (∏> 0 in modo che °∏< 0) con condizione iniziale y(0) = y0.

La soluzione esatta di questo IVP è y(t ) = y0e°∏t : tende a zero per valori di t crescenti. Ci aspettiamo cheanche la soluzione numerica si comporti in maniera simile.

10.8.1 Convergenza di Eulero esplicito

Per semplicità, applichiamo la formula del metodo di Eulero esplicito all’equazione test con ∏= 1.

y1 = y0 +h f (t0, y0) = y0 °hy0 = (1°h)y0

y2 = y1 +h f (t1, y1) = y1 °hy1 = (1°h)y1

...

yi = yi°1 +h f (ti°1, yi°1) = yi°1 °hyi°1 = (1°h)yi°1

156

Page 163: Calcolo Numerico

10.8. Convergenza e stabilità

Andando a ritroso troviamo una formula che lega yi direttamente a y0.

y1 = (1°h)y0

y2 = (1°h)y1 = (1°h)2 y0

...

yi = (1°h)yi°1 = (1°h)i y0

La soluzione numerica al tempo ti è data da yi = (1°h)i y0. Fissato un tempo t = i h, vediamo se limh!0

i!+1≤i = 0

cioè se limh!0

i!+1yi = y(t ).

Osserviamo che: (1°h)i = (1°h)

i hh =

2

4(1°h)

1h

3

5t

Ricordiamo la proprietà per la quale xÆ = e ln(xÆ) = eÆ ln(x). Perciò: (1°h)

1h = e ln(1°h)(1/h) = e

ln(1°h)h

Quando facciamo il limite per h ! 0 e per i !+1 consideriamo che, per il teorema dell’ Hôpital, vale

limh!0

ln(1°h)h

= limh!0

°11°h

=°1

Di conseguenza limh!0 e

ln(1°h)h = e°1

Allora

limh!0

i!+1yi = lim

h!0i!+1

y0(1°h)i = limh!0

i!+1y0

2

4(1°h)

1h

3

5t

= y0e°t = y(t )

In questo modo abbiamo provato che il metodo converge. Il discorso si ripete in maniera del tutto simile,per ∏ 6= 1.

10.8.2 Stabilità di Eulero esplicito

Per quanto riguarda la stabilità, dobbiamo provare che l’errore si mantiene limitato. Sia ∏ > 0. Abbiamoyi+1 = yi ° h∏yi = (1 ° h∏)yi , vale a dire yi+1 = y0(1 ° h∏)i+1. La soluzione esatta di questo problema èy(t ) = y0e°∏t e tende a zero per valori di t crescenti. Vogliamo che tenda a zero anche la soluzione numerica(in modo da mantenere limitato l’errore). La soluzione numerica (fissato h e per i grande, cioè per valori di t

crescente) tende a zero se |1°h∏| < 1 cioè per °1 < 1°h∏< 1 () 0 < h∏< 2 () h < 2∏

.

Il metodo di Eulero esplicito è stabile sotto condizione.

10.8.3 Convergenza di Eulero implicito

Il metodo di Eulero implicito applicato all’equazione test diventa:

yi+1 =yi

(1+h∏)

157

Page 164: Calcolo Numerico

10. EQUAZIONI ALLE DERIVATE ORDINARIE

Quindi

y1 =y0

(1+h∏)

y2 =y1

(1+h∏)= y0

(1+h∏)2

y3 =y2

(1+h∏)= y0

(1+h∏)3

...

yi =yi°1

(1+h∏)= y0

(1+h∏)i

In tal caso

limh!0

i!+1yi = lim

h!0i!+1

y0

(1+h∏)i= lim

h!0i!+1

y0(1+h∏)°i = y0

2

4(1+h∏)

1h

3

5°i h

= y0e°t∏ = y(t )

(i passaggi sono del tutto simili a quelli visti per Eulero esplicito).Abbiamo provato la convergenza.

10.8.4 Stabilità di Eulero implicito

Per la stabilità, dalla soluzionei numerica yi =y0

(1+∏h)i, si osserva che, per i !+1, qualunque sia il va-

lore di h, la soluzione tende a zero in quanto limi!+11

(1+∏h)i= 0 Si parla di metodo incondizionatamente

stabile.

10.8.5 Convergenza di Crank-Nicolson

Il metodo di Crank-Nicolson applicato all’equazione test diventa: yi+1 = yi +h∏2

[°yi ° yi+1] da cui

yi+1 =µ

2°h∏2+h∏

∂yi

Andando a ritroso si ricava

yi+1 = y0

µ2°h∏2+h∏

∂i+1

Per verificare che il metodo converge studiamo il limite limh!0

i!+1yi . Partiamo dalla relazione

µ2°h∏2+h∏

∂i

=

2

64µ

2°h∏2+h∏

∂ 1h

3

75

i h

=

2

64µ

2°h∏2+h∏

∂ 1h

3

75

t

Maµ

2°h∏2+h∏

∂ 1h = e

1h

ln(2°h∏2+h∏

)

158

Page 165: Calcolo Numerico

10.8. Convergenza e stabilità

Nel fare il limite per h ! 0 e i ! +1 della quantità che si trova all’esponente, applichiamo l’Hôpital e

ricordiamo che la derivata di2°h∏2+h∏

vale°∏(2+h∏)° (2°h∏)∏

(2+h∏)2 = °4∏(2+h∏)2 :

limh!0

i!+1

ln(2°h∏2+h∏

)

h= lim

h!0i!+1

2+h∏2°h∏

°4∏(2+h∏)2 = lim

h!0i!+1

°4∏(2+h∏)(2°h∏)

=°∏

Quindi

limh!0

i!+1yi = lim

h!0i!+1

y0

µ2°h∏2+h∏

∂i

= limh!0

i!+1y0

2

64µ

2°h∏2+h∏

∂ 1h

3

75

i h

= y0e°t∏ = y(t )

La convergenza è provata.

10.8.6 Stabilità di Crank-Nicolson

Per la stabilità, si vede che la soluzione numerica è yi = y0

µ2°∏h2+∏h

∂i

. Per i !+1, qualunque sia il valore

di h, la soluzione tende a zero in quanto limi!+1

µ2°∏h2+∏h

∂i

= 0. Il metodo è incondizionatamente stabile.

10.8.7 Sulla stabilità

La stabilità di questi metodi la si può verificare anche considerando direttamente l’errore ≤i , dimostrandoche gli errori al passo i e al passo i +1 verificano la stessa relazione che hanno yi+1 e yi e mostrando che l’er-rore rimane limitato sotto condizione per Eulero esplicito mentre è incondizionatamente stabile per gli altrimetodi. In Figura 10.2 si vede come il metodo di Eulero esplicito sia stabile sotto condizione mentre i metodidi Eulero implicito e Crank-Nicolson sono stabili qualunque passo di discretizzazione venga utilizzato.

Esempio 10.8.2 Consideriamo il metodo di Eulero esplicito e applichiamolo all’equazione test. Sappiamoche yi+1 = yi +h∏yi .Per la soluzione esatta, sappiamo che vale y(ti+1) = y(ti )+h∏y(ti )+hdi (con di l’errore di troncamentolocale).Sottraendo la prima equazione dalla seconda abbiamo

≤i+1 = ≤i +h∏≤i +hdi

Considerato che di =h2

y 00(ªi ) e che, per studiare la stabilità, h è fissato mentre i tende a +1, il termine hdi

non influisce sull’andamento dell’errore e possiamo trascurarlo. Si ha allora la relazione:≤i+1 = ≤i +h∏≤i

Ricaviamo ≤i = ≤0(1+h∏)i .Il ragionamento da fare è lo stesso che abbiamo fatto in precedenza e troviamo gli stessi risultati. Dobbiamoinfatti verificare quando ≤i tende a zero per i che tende a +1. . .

159

Page 166: Calcolo Numerico

10. EQUAZIONI ALLE DERIVATE ORDINARIE

Figura 10.2: Confronto dei metodi di Eulero esplicito, implicito e Crank-Nicolson sull’equazione test y 0 =°y ,prendendo come h il valore h = 2 (a sinistra) e h = 0.5 (a destra).

10.9 Esercizi

Esercizio 10.9.1 Studiare la stabilità del metodo di Eulero esplicito applicato all’equazione differenziale

y 0 =°2y +1, con y(0) = 1 (soluzione esatta y(t ) = e°2t +12

)

SvolgimentoPer provare la stabilità del metodo dobbiamo verificare che l’errore iniziale si mantiene limitato per valori

crescenti del tempo.Il metodo di Eulero esplicito applicato all’ODE del problema diventa

yi+1 = yi +h(°2yi +1) = (1°2h)yi +h

La soluzione esatta soddisfa un’equazione del tipo

y(ti+1) = y(ti )+h(°2y(ti )+1)+hdi = (1°2h)y(ti )+h +hdi

Nel calcolare l’errore ≤i+1 = y(ti+1)° yi+1 abbiamo

≤i+1 = (1°2h)≤i +hdi

Il termine hdi (di errore locale di troncamento) si può trascurare. Abbiamo allora ≤i+1 = (1°2h)≤i .Possiamo trovare con facilità che ≤i+1 = (1°2h)i+1≤0 o, ancora, ≤i = (1°2h)i ≤0.Se vogliamo che l’errore rimanga limitato per i !1 la quantità (1°2h)i non deve crescere.Quindi deve essere |1 ° 2h| < 1, vale a dire °1 < 1 ° 2h < 1 cioè 2h < 2, quindi h < 1: stabilità sotto

condizione.

160

Page 167: Calcolo Numerico

CA

PI

TO

LO 11

INTRODUZIONE AL FORTRAN 77

:–Almeno hai trovato i files?:– Non so nemmeno come... comesono fatti?:– Sono dentro il computer.:– Sono “dentro” il computer?...:– Com’è che i files non escono?

Zoolander

11.1 Introduzione alla programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16211.2 FORTRAN: FORmula TRANslator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16211.3 Problemi e Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16311.4 Elementi di un linguaggio di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16411.5 Prime regole sul FORTRAN77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16411.6 Le variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16511.7 I tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16611.8 Espressioni aritmetiche e funzioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16611.9 I predicati elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16711.10 Struttura alternativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17011.11 Programma sul metodo di punto fisso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17211.12 I sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

11.12.1 Le functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17411.12.2 Le subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

11.13 Il formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18011.14 Files di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18211.15 Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18211.16 Ciclo do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

11.16.1 I vettori nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18411.16.2 Leggere i dati di input da file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

11.17 Matrici in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18711.17.1 Le matrici nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18811.17.2 Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

161

Page 168: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

11.17.3 Memorizzazione delle matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19011.17.4 Un programma di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

11.18 La formula dei trapezi in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19311.19 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

11.1 Introduzione alla programmazione

Prendono il nome di software quei programmi che vengono fatti eseguire al calcolatore e consentonoall’hardware di svolgere il proprio compito.

Esistono due categorie di linguaggi per scrivere programmi:linguaggi di alto livello (come FORTRAN, C, C++)linguaggi di basso livello (come assembler).

Il linguaggio macchina, invece, è il linguaggio specifico dell’elaboratore e consiste di cifre binarie 0 e 1 cheidentificano istruzioni elementari. Ogni elaboratore ha il suo linguaggio macchina.

I linguaggi di basso e alto livello si possono tradurre in un qualsiasi linguaggio macchina e possono essereutilizzati su qualsiasi elaboratore (sono portabili).

Con i linguaggi di basso livello, i codici binari (fatti da 0 e 1) vengono sostituiti da opportune ”paro-le chiave” che permettono una corrispondenza uno-uno tra il linguaggio di basso livello e il linguaggiomacchina.

Con i linguaggi di alto livello, una singola istruzione può tradurre più istruzioni di linguaggio macchina.Inoltre un linguaggio di alto livello è facile da capire (nella sua sintassi, nelle sue regole, nel suo modo diessere utilizzato) da chi programma.

Perciò, quando si programma con un linguaggio di alto livello, il programmatore deve conoscere e saperebene la grammatica, la sintassi, il vocabolario del linguaggio stesso.

Uno volta scritto il programma in modo corretto, occorre fare capire al computer che c’è un programma daeseguire: bisogna quindi tradurre in linguaggio macchina il programma scritto con il linguaggio di alto livello:questo passaggio lo si fa mediante la compilazione. Useremo un comando (un’istruzione da scrivere nellafinestra di shell, nella stessa directory in cui si trova il programma che abbiamo scritto) che ci permetteràdi tradurre il programma scritto nel linguaggio di alto livello (che chiamamo programma sorgente) in unprogramma equivalente scritto in linguaggio macchina e che potrà essere eseguito dal calcolatore, dettoprogramma eseguibile.

Programma sorgentecompi l ator e°°°°°°°°°! Programma eseguibile

11.2 FORTRAN: FORmula TRANslator

FORTRAN è una sigla per FORMula TRANslator.Anche se il FORTRAN si è molto evoluto, ci soffermeremo in particolare sulla versione 77 perchè (a par-

te alcuni punti ormai obsoleti) la sintassi e il modo di imparare a scrivere un programma è più semplice.Inoltre è possibile scaricare gratuitamente in rete compilatori del FORTRAN77 da poter installare sul propriocomputer (anche con sistema operativo Windows).

Un programma FORTRAN va prima scritto mediante un editor di testo, salvandolo con un nome che abbial’estensione .f, per esempio prova.f. Poi va tradotto in linguaggio macchina in modo da poterlo esegui-re al calcolatore: questo passo viene fatto attraverso la compilazione. Un compilatore è il g77. Mediantel’istruzione

g77 -o prova prova.f

tradurremo in linguaggio macchina il programma prova.f e il risultato sarà la creazione di un nuovo filechiamato prova che potremo eseguire. Analogo è il comando

g77 prova.f -o prova

162

Page 169: Calcolo Numerico

11.3. Problemi e Algoritmi

Notiamo l’ordine dei comandi. L’importante è che la scrittura -o sia immediatamente precedente il nomedel file eseguibile!

Possiamo scrivere anche

g77 -o prova.exe prova.f

Possiamo mettere un’estensione al file eseguibile, prova.exe, oppure no.Per eseguire il programma prova, scriveremo da shell l’istruzione

prova

oppure

./prova

a seconda del calcolatore.Altri tipi di compilatore sono f77, gfortran.

11.3 Problemi e Algoritmi

Ci sono tante definizioni per problema:etimologicamente, viene dal verbo greco ”pro-ballein” pro: davanti, ballein: mettere, da cui problemaha il significato di ostacolo, promontorio, impedimento;sul dizionario troviamo: Questione da risolvere partendo da elementi noti mediante il ragionamento, eper la quale si propongono soluzioni;1

o ancora quesito con cui si chiede di trovare, mediante un procedimento di calcolo, uno o più datisconosciuti, partendo dai dati noti contenuti...;2

in senso figurato, invece, per problema si intende Questione, situazione difficile o complessa di cuisi cerca la spiegazione o la soluzione:3 e questione, situazione, caso difficile da risolvere e che generapreoccupazione, . . . , complicazione, difficoltà, ostacolo;4

estendendo ancora il significato, si trova Persona misteriosa, incomprensibile, il cui comportamentopreoccupa o mette in difficoltà;5

. . .Qualunque sia la definizione che diamo, il tratto comune è di avere a che fare con una questione cui vogliamodare una risposta o che vogliamo risolvere. Una delle prime cose da considerare quando si cerca di risolvereun problema è, dunque, come porre il problema.

Il linguaggio naturale viene usato per descrivere un problema. Ma bisogna porre attenzione:Lo stesso evento è descritto diversamente da un bambino di 3 anni rispetto a un uomo adulto.Lo stesso evento viene descritto diversamente da un ingegnere, un fisico, un matematico.A volte, le stesse parole possono essere usate per dire cose completamente diverse!

C’è poi il linguaggio artificiale, che si presenta sotto forma di termini tecnici (dalla fisica, ingegneria, etc) enotazioni (dall’algebra, dal calcolo, dalla logica).

Termini come temperatura, pressione, massa, espansione isotermica e adiabatica, possono essere usati inun’officina per riparare il motore di un’automobile, da un medico che sta misurando la pressione del sangue,da un ingegnere che lavora su una turbina a gas. . .

Una volta che il problema è stato descritto e se ne ha una buona conoscenza (con l’aiuto del linguaggionaturale e artificiale), si può passare alla fase di soluzione del problema stesso.

Ecco l’approccio dell’algoritmo. Un algoritmo è una sequenza di passi che permettono di risolvere tutto Algoritmo

1Dal Dizionario online della Hoepli http://dizionari.hoepli.it

2Dal Dizionario online della Garzanti http://www.garzantilinguistica.it

3Da http://dizionari.hoepli.it

4Da il Sabatini Colletti Dizionario della Lingua Italiana http://dizionari.corriere.it/dizionario_italiano

5Da http://dizionari.hoepli.it

163

Page 170: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

o parte di un problema.6

Un algoritmo si può paragonare ad una ricetta di cucina: la ricetta consiste di due partila lista degli ingredientila sequenza dei passi da fare per realizzare la ricetta.

Nel realizzare una ricetta si possono avere problemi nel cercare alcuni ingredienti. Una parte dell’esecuzionerichiederà poco tempo, altre parti richiederanno più tempo. Alcuni passi non richiedono che si segua uncerto ordine, altri passi richiedono che si mantenga l’ordine scritto sulla ricetta. . . Le stesse analogie troviamoin un algoritmo.

11.4 Elementi di un linguaggio di programmazione

Come tutti i linguaggi, anche un linguaggio di programmazione ha le sue regole di grammatica, sintassi,ortografia. . .

Inoltre, un programma non può essere ambiguo, in quanto diventa il preciso risultato delle istruzioni inesse contenute.

Alcune attività (non di programmazione) possono essere vaghe o ambigue:studia molto per superare l’esame. . . – quanto molto?compra un po’ di pane prima di tornare a casa. . . – quanto pane?Siamo noi che capiamo quanto dobbiamo studiare, quanto pane dobbiamo comprare, a seconda dell’esameda fare, della fame che abbiamo. . .

In un programma non si può lasciare spazio al vago! Occorre essere precisi.I linguaggi di programmazione sono fatti da dichiarazioni (statements):

descrizione dei dati: che genere di dati abbiamo? Se vogliamo scrivere un programma in cui perogni studente calcoliamo la media dei suoi voti, c’è differenza tra i nomi degli studenti (una stringa dicaratteri) e la loro media (un numero). Si parla di tipo di dati.strutture di controllo. Un programma può essere visto come una sequenza di istruzioni per risol-

vere un certo problema. Alcune istruzioni vanno ripetute, altre vanno eseguite solo in determinatecondizioni. . .lavorazione dei dati (data processing). In un programma occorre poter lavorare sui dati e poterli

”manipolare” opportunamente.dichiarazioni di ingresso e uscita (input e output). In genere, un programma è scritto in modo che i

dati su cui si lavora possano esistere fuori del programma stesso.

11.5 Prime regole sul FORTRAN77

Scriviamo il nostro primo programma di prova, prova.f (apriamo un editor di testo e scriviamo leseguenti righe, poi salviamo il file dando il nome prova.f):

program provaCC questo e ’ un programma di provaC

write ( * , * ) ’programma di prova ’write ( * , * ) ’ questo e ’ ’ un programma di prova ’stopend

6La parola algoritmo è entrata in uso negli anni ’50 in sostituzione di algorismo, termine con cui si indicava il processo di calcoloutilizzando i numeri arabi. Il termine algoritmo deriva dal nome di “al-Khwarizmi”, importante matematico arabo del nono secolo grazieal quale l’Europa imparò ad usare i numeri arabi, oltre alla notazione in base 10. Le procedure che permettevano di effettuare calcoli innotazione decimale presero il nome di algorismi o algoritmi. Anche la parola algebra viene da questo matematico e, in particolare, dallasua opera “Al-mukhtasar fi hisab al-jabr wa al-muqabala”.

Nel medioevo (e forse anche per qualche studente di oggi!!!), si pensava che questa parola derivasse dal greco algiros (panico, dolore)e arithmos (numero).

164

Page 171: Calcolo Numerico

11.6. Le variabili

In FORTRAN77 tutte le istruzioni vanno scritte tra la 7-ima e la 72-sima colonna7;le colonne da 1 a 6 hanno un significato particolare.

– sulla prima colonna si mette una C (o un altro carattere) se ciò che segue è una riga di commento– sulla colonna 6 si mette un carattere qualunque (meglio una lettera dell’alfabeto) se l’istruzione

scritta sulla riga precedente è troppo lunga e va oltre la 72-sima colonna per cui si deve andare acapo oppure si vuole andare a capo per leggere meglio l’istruzione. Nella riga in cui si mette uncarattere sulla colonna 6, continua l’istruzione iniziata nella riga precedente.

Il programma inizia con l’istruzione program seguito dal nome del programma.L’istruzione stop arresta l’esecuzione del programma.L’istruzione end segnala che non vi sono altre righe nel programma.

Con questo programma di esempio, vogliamo far scrivere al computer, sulla finestra di shell in cui eseguiamoil programma, le due frasi programma di prova e questo e’ un programma di prova.

L’istruzione write(*,*) ’programma di prova’rende disponibile all’esterno le informazioni contenute tra i due apici, vale a dire la stringa di caratteriprogramma di prova.

Al posto di write(*,*) ’programma di prova’ potremmo scrivere, in modo del tutto equivalente,write(6,*) ’programma di prova’

Il primo simbolo “*” di write(*,*) o il numero “6” di write(6,*) sono due modi equivalenti per indicare che ildispositivo di uscita su cui mostrare la stringa di caratteri è il terminale (la finestra di shell da cui eseguiamoil programma).

Vedremo che ci sono anche altri modi per rendere disponibile l’output del programma non su video masu file.

L’apice viene usato per indicare l’inizio e la fine della stringa di caratteri da stampare. Quindi, per stam-pare e’ dobbiamo usare gli apici due volte:

write(*,*) ’questo e’’ un programma di prova’

11.6 Le variabili

Scriviamo ora un programma più complicato

program a r e a t r i aC programma per c a l c o l a r e l ’ area di un triangoloC dando in input i v a l o r i del la base e del l ’ al tezza

implicit nonereal *8 a , b , areawrite ( * , * ) ’ base a ’read ( * , * ) awrite ( * , * ) ’ base ’ , awrite ( * , * ) ’ a l tezza b ’read ( * , * ) bwrite ( * , * ) ’ a l tezza ’ , barea =(a*b ) * 0 . 5write ( * , * ) ’ area del triangolo ’ , areastopend

L’istruzione implicit none dice che nessuna variabile può essere dichiarata implicitamente: dobbiamodichiarare tutte le variabili che utilizziamo all’interno del programma!Introduciamo tre variabili di tipo reale in doppia precisione, mediante real*8 a,b,c.

7Questo limite è dovuto al fatto che fino alla fine degli anni settanta, la programmazione veniva fatta utilizzando schede per-forate, dei cartoncini rettangolari di dimensione standard, ciascuna delle quali era suddivisa in un numero fisso di colonne e righe(generalmente 80 colonne e 12 righe).

165

Page 172: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

integer variabile interareal variabile reale in precisione semplicereal*8 variabile reale in doppia precisione

(occupa esattamente 8 bytedi memoria)

double precision variabile reale in doppia precisione(accuratezza diversa a secondadella macchina usata)

logical variabile logicacharacter stringhe di caratteri

Tabella 11.1: Tipi di dati

Con read(*,*) a si impone al calcolatore di prendere un valore e memorizzarlo nella variabile a, e que-sto valore lo si dà tramite tastiera. Analogamente potremmo scrivere read(5,*) a : il numero 5 indicache l’acquisizione dei dati avviene da tastiera.Prima dell’istruzione di read c’è una write che ci indica quale valore dobbiamo mettere: è importantealtrimenti vedremmo che l’elaboratore si mette in attesa di un valore e rimane così fino a quando nonlo riceve. Ma se noi non sappiamo che valore dargli, possiamo aspettare anche ore. . . . (vedere cosasuccede togliendo le istruzioni di write!)Una volta dati i valori di input, si effettua un’istruzione di assegnazione: si prende il valore memorizzatonella variabile a lo si moltiplica per il valore di b e per 0.5 e il risultato viene memorizzato in una nuovavariabile chiamata area. Il simbolo * è il simbolo di moltiplicazione.Quando effettuiamo un’assegnazione, il valore contenuto nella variabile a sinistra del segno = vieneperso. Nel nostro caso, in area non era memorizzato nessun valore, ma se avessimo posto in area unqualche valore iniziale, esso andrebbe perso perchè sostituito dall’operazione a*b*0.5. I valori di a eb non cambiano.Nel momento in cui viene lanciato il programma, il valore delle variabili è incognito. Mediante tastiera,noi diamo i valori ad a e b. Mediante assegnazione, diamo il valore ad area. Una volta terminatal’esecuzione del programma, il valore delle variabili viene perso. Perciò ci facciamo stampare il lorovalore prima dell’istruzione di stop. torna ad essere incognitoo

11.7 I tipi di dati

Una variabile rappresenta un ”posto” (o locazione) della memoria del calcolatore, contrassegnato daun nome che identifica la variabile, e dove possono essere scritte delle informazioni che l’elaboratore puòutilizzare (per esempio il valore della variabile se la variabile è di tipo reale o intero).

Le variabili possono essere di vario tipo: intere, reali, logiche (per le variabili logiche il valore può esseresolo o vero o falso), complesse, di caratteri (stringhe di caratteri). Si veda la Tabella 11.1 per una sintesi deivari tipi di dati.

Le variabili di tipi intero possono variare in un intervallo limitato (tra un minimo e un massimo interirappresentabili). La stessa cosa vale per le variabili di tipo reale: esiste un valore minimo e massimo realerappresentabile. Questi valori di minimo e massimo dipendono dall’elaboratore (si veda il Capitolo 1).

Osserviamo che in FORTRAN una variabile può essere scritta con i caratteri maiuscoli o minuscolisenza distizioni: XOLD è la stessa cosa di xold o XoLd.

11.8 Espressioni aritmetiche e funzioni elementari

Nel fare le operazioni matematiche, in FORTRAN viene data la precedenza (priorità) agli elevamenti a po-tenza, poi alle moltiplicazioni e divisioni, infine a sottrazione e addizione (si veda Tabella 11.2 per i simboli

166

Page 173: Calcolo Numerico

11.9. I predicati elementari

§§ elevamento a potenza§ moltiplicazione/ divisione+ addizione° sottrazione

Tabella 11.2: Operazioni aritmetiche

Funzione FORTRAN Significatosin(x) sin(x)cos(x) cos(x)tan(x) tan(x)asin(x) asi n(x)acos(x) acos(x)atan(x) at an(x)exp(x) ex

log(x) ln(x)log10(x) log(x)sqrt(x)

px

Tabella 11.3: Principali funzioni

usati per ciascuna di queste operazioni). Quando due operatori hanno la stessa priorità vengono eseguitele operazioni partendo da sinistra e andando verso destra. Tuttavia, quando le espressioni sono abbastan-za complicate e c’è il rischio di non capire bene quali operazioni vanno fatte prima e quali dopo, convienemettere sempre le parentesi.

In FORTRAN ci sono già molte funzioni matematiche che possiamo utilizzare per i nostri programmi. InTabella 11.3, ne vediamo elencate alcune.

11.9 I predicati elementari

Gli algoritmi che tradurremo in programmi quasi mai hanno solo istruzioni sequenziali (vale a dire istru-zioni da eseguire l’una di seguito all’altra). Molte volte, infatti, viene eseguita una istruzione piuttosto cheun’altra se certe condizioni sono vere. Oppure vengono ripetute alcune istruzioni fintantochè sono vere de-terminate condizioni. Gli operatori mostrati in Tabella 11.4 ci serviranno per poter scrivere istruzioni legatead una condizione.

Dato P un predicato (vale a dire una proposizione logica che può assumere solo valore vero o falso) sihanno gli operatori logici di Tabella 11.5.

Esempio 11.9.1 Sia a=5 e b=10.La proposizione (a.le.b) è una proposizione vera (.true.) perchè il valore assunto da a (5) è minore ouguale al valore di b (10).La proposizione (a.eq.b) è falsa (.false.) perchè il valore di a è diverso da quello di b.La proposizione (a.gt.b) è falsa.La proposizione (a.ge.b) è falsa.La proposizione (a.ne.b) è vera.La proposizione (a.lt.b) è vera.

167

Page 174: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

Operatore Significato Esempio Valore.GT. > (a.gt.b) Vero se a > b

Falso se a ∑ b.GE. >= (a.ge.b) Vero se a ∏ b

Falso se a < b.LT. < (a.lt.b) Vero se a < b

Falso se a ∏ b.LE. <= (a.le.b) Vero se a ∑ b

Falso se a > b.EQ. == (a.eq.b) Vero se a = b

Falso se a 6= b.NE. ª= (a.ne.b) Vero se a 6= b

Falso se a = b

Tabella 11.4: Operatori logici ( È la stessa cosa scrivere .GT. o .gt. .GE. o .ge. e così via.)

Operatore Significato Esempio.NOT. negazione .not.(P)

ª.AND. congiunzione (P1).and.(P2)

&.OR. disgiunzione (P1).or.(P2)

inclusiva|

Tabella 11.5: Operatori logici

Esempio 11.9.2 Sia a=5, b=10, c=2(a.le.b).and.(c.le.b) è una proposizione vera perchè composta da due proposizioni vere..not.(a.le.b) è una proposizione falsa. Negare (a.le.b) vuol dire scrivere (a.gt.b). Ma a non è maggiorestretto di b, quindi il risultato è falso..not.(b.eq.c) è una proposizione vera, in quanto stiamo negando (b.eq.c): (b.eq.c) è falsa quindi la suanegazione è vera.(a.le.b).or.(c.ge.b) è una proposizione vera perchè basta che una delle due proposizioni sia vera perrendere vero l’intero predicato.(a.le.b).and.(c.ge.b) è un predicato falso perchè devono essere vere tutte e due le proposizioni che lacompongono per rendere vero il predicato.(a.eq.b).and.(c.ge.b) è un predicato falso perchè composto da due proposizioni false.(a.eq.b).or.(c.ge.b) è un predicato falso.

RiassumendoNegare un predicato falso dà come risultato un predicato vero.Negare un predicato vero dà come risultato un predicato falso.Congiungere (con .and.) due predicati veri dà come risultato un predicato vero.Congiungere (con .and.) due predicati falsi dà come risultato un predicato falso.

168

Page 175: Calcolo Numerico

11.9. I predicati elementari

Congiungere (con .and.) due predicati, uno vero ed uno falso, dà come risultato un predicato falso.Disgiungere (con .or.) due predicati veri dà come risultato un predicato vero.Disgiungere (con .or.) due predicati falsi dà come risultato un predicato falso.Disgiungere (con .or.) due predicati, uno vero ed uno falso, dà come risultato un predicato vero.

Importanti sono da ricordare le regole di De Morgan. Dati due predicati P1 e P2

( .not. ( (P1).and.(P2) ) equivale a scrivere ( .not.(P1) .or. .not.(P2) )Negare una congiunzione significa disgiungere le negazioni dei due predicati che la compongono.

( .not. ( (P1).or.(P2) ) equivale a scrivere ( .not.(P1) .and. .not.(P2) )Negare una disgiunzione significa congiungere la negazione dei due predicati che la compongono.

Esempio 11.9.3 (.not.( (oggi fa freddo).and.(oggi è piovuto) ) ) =(oggi NON fa freddo) .or. (oggi NON è piovuto)

(.not.( (oggi fa freddo).or.(oggi NON ho voglia di fare niente) ) ) =(oggi NON fa freddo) .and. (oggi ho voglia di fare tante cose)

(.not.( it.le.100). and. ( x.ge.0.001) ) ) = ( (it.gt.100). or. (x.lt.0.001) )

(.not.( it.le.100). or. ( x.ge.0.001) ) ) = ( (it.gt.100). and. (x.lt.0.001) )

program p r e d i c a t i l o g i c iC programma di esempio s u l l e proposizioni logiche

implicit nonereal *8 a , b , cl o g i c a l p1 , p2 , pwrite ( * , * ) ’ s c r i v i i l valore di a ’read ( * , * ) awrite ( * , * ) ’ a= ’ , awrite ( * , * ) ’ s c r i v i i l valore di b ’read ( * , * ) bwrite ( * , * ) ’b= ’ , bwrite ( * , * ) ’ s c r i v i i l valore di c ’read ( * , * ) cwrite ( * , * ) ’ c= ’ , cp1= ( a . l t . b)p2=(b . gt . c )write ( * , * ) ’p1= a . l t . b ’ , p1write ( * , * ) ’p2= b . gt . c ’ , p2p= p1 . and . p2write ( * , * ) ’p1 and p2 ’ , pp= . not . ( p1 . and . p2 )write ( * , * ) ’ not ( p1 and p2 ) ’ , pp= p1 . or . p2write ( * , * ) ’p1 or p2 ’ , pp= . not . ( p1 . or . p2 )write ( * , * ) ’ not ( p1 or p2 ) ’ , pstopend

169

Page 176: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

11.10 Struttura alternativa

I programmi in cui le istruzioni devono essere eseguite una di seguito all’altra si dicono a struttura se-quenziale. Questa struttura è pero abbastanza limitata in quanto non permette di risolvere problemi anchesemplici.

Supponiamo di risolvere il problema di trovare le radici di un’equazione di secondo grado ax2+bx+c = 0.i dati di input sono i coefficienti a,b,csi calcola il discriminante ¢= b2 °4acse ¢< 0 allora le radici sono complessese ¢= 0 allora sappiamo che le radici coincidonose ¢ > 0 allora applichiamo la formula per trovare le due radici. Sappiamo però che si può verifica-re il fenomeno di cancellazione numerica se b2 ° 4ac º b2 e quindi possiamo applicare una formulaalternativa. . .Ciclo if

Come fare a scrivere un programma che tenga conto di tutte le condizioni che abbiamo visto prima, chefaccia quindi qualcosa piuttosto che un’altra a seconda che sia vera o falsa una certa condizione? Si ha ilcosidetto ciclo if.

i f ( espressione logica ) then{ is truzione 1a }{ istruzione 2a }{ . . . . }

else{ is truzione 1b }{ istruzione 2b }{ . . . . }

end i f

Se è vera l’espressione logica allora sieseguono le istruzioni 1a, 2a, . . . .Altrimenti – cioè se è falsa l’espressionelogica – allora si eseguono le istruzioni 1b,2b, . . .

i f ( espressione logica ) then{ is truzione 1a }{ istruzione 2a }{ . . . . }

end i f

Se è vera l’espressione logica allora si ese-guono le istruzioni 1a, 2a, . . . , altrimentinon si fa nulla.

Ciclo if –struttura più

generale

i f ( espressione logica1 ) then{ is truzione 1a }{ istruzione 2a }{ . . . . }

else i f ( espressione logica2 ) then{ is truzione 1b }{ istruzione 2b }{ . . . . }

. . . .else

{ is truzione 1z }{ istruzione 2z }{ . . . . }

end i f

170

Page 177: Calcolo Numerico

11.10. Struttura alternativa

Vediamo un programma che calcola le radici di un’equazione di secondo grado.

program r a d i c iimplicit nonereal a , b , c , deltareal x1 , x2

C calcolo d e l l e r a d i c i r e a l i di ax **2 +bx+c = 0C x = [°b +/° s q r t { b**2 ° 4ac } ] / 2aC

write ( * , * ) ’ c o e f f i c i e n t i di un’ ’ equazione di secondo grado ’write ( * , * ) ’ a = ’read ( * , * ) awrite ( * , * ) ’ a = ’ , awrite ( * , * ) ’b = ’read ( * , * ) bwrite ( * , * ) ’b = ’ , bwrite ( * , * ) ’ c = ’read ( * , * ) cwrite ( * , * ) ’ c = ’ , c

delta=b**2 ° 4 . * a* ci f ( delta . l t . 0 ) then

write ( * , * ) ’ l e r a d i c i sono complesse ’else

x1= ( °b + sqrt ( delta ) ) / ( 2 . * a )write ( * , * ) ’ x1 = ’ , x1x2= ( °b ° sqrt ( delta ) ) / ( 2 . * a )write ( * , * ) ’ x2 = ’ , x2

end i fstopend

Complichiamo la seconda parte del programma, andando a scrivere le radici coincidenti nel caso in cui¢ = 0 e utilizzando la formula alternativa (dalla considerazione che x1x2 = c/a) per evitare il fenomeno dicancellazione numerica.

i f ( delta . l t . 0 ) thenwrite ( * , * ) ’ l e r a d i c i sono complesse ’

else i f ( delta . eq . 0 . d0 ) thenx1= °b/ ( 2 . 0 d0*a )x2=x1write ( * , * ) ’ l e r a d i c i sono : ’ , x1 , x2

elsex1= ( °b + sqrt ( delta ) ) / ( 2 . * a )x2= ( °b ° sqrt ( delta ) ) / ( 2 . * a )write ( * , * ) ’ l e r a d i c i sono : ’ , x1 , x2i f ( ab ( x1 ) . gt . abs ( x2 ) ) then

x2= c / ( x1 *a )write ( * , * ) ’ x2 con formula a l te rnat i v a ’ , x2

elsex1= c / ( x2 *a )write ( * , * ) ’ x1 con formula a l te rnat i v a ’ , x1

end i fend i f

Ciclo dowhileIl ciclo if non basta per scrivere tutti i nostri programmi. Pensiamo ad un blocco di istruzioni da ripe-

tere molte volte, fino a quando è vera una determinata condizione. In questo caso, si usa il ciclo do while(pensiamo all’algoritmo visto per il metodo di bisezione, o allo schema di punto fisso).

171

Page 178: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

do while ( espressione logica ){ istruzione 1 }{ istruzione 2 }{ . . . }{ is truzione n }

end do

Fintantochè è vera l’espressione logicaallora esegui istruzione 1, 2, . . . , n.

Le istruzioni 1, 2, . . . vengono ripetute ciclicamente (non una volta sola come nel ciclo if). Quando siesegue l’ultima istruzione posta all’interno del ciclo, si torna all’espressione logica e si controlla se è vera ofalsa. Se è vera, si eseguono di nuovo le istruzioni 1, 2, . . . ,n. Se non è vera, si esce dal ciclo while. Occorredunque prestare attenzione a non creare cicli infiniti!

11.11 Programma sul metodo di punto fisso

Consideriamo l’algoritmo dello schema di punto fisso

xn+1 = cos(xn)

e proviamo a scrivere un programma FORTRAN che ci permetta di trovare una buona approssimazione delpunto fisso ª (sempre che lo schema converga). I dati di input che dobbiamo dare al programma sono:

l’approssimazione iniziale x0la tolleranza " con cui vogliamo approssimare il punto fissoil numero massimo di iterazioni entro cui cercare la convergenza dello schema (per evitare cicli infiniti).

I dati di output che possiamo chiedere al programma sono:l’approssimazione xn+1 ad ogni passol’iterazione nlo scarto ad ogni passo: |xn+1 °xn |una stima della costante asintotica dell’errore M .

Cerchiamo ora di capire come gestire le variabili per xn e xn+1 e per gli scarti ad ogni passo. Con il metododi punto fisso, si crea una successione di valori: x0, x1, x2, . . . xn . . . . Nella teoria, per n che tende all’infinito,la successione può convergere al punto fisso. Nella pratica ci si arresta quando lo scarto (il valore assoluto tradue iterazioni successive) è minore di una certa tolleranza. A priori, tuttavia, non sappiamo quante iterazionidobbiamo fare. Potremmo pensare di memorizzare le varie approssimazioni xn in un vettore che abbia unadimensione molto elevata. Ma ci sono due inconvenienti:

1. Non sappiamo ancora come scrivere in un programma FORTRAN un vettore.2. Supposto di saperlo fare, possiamo e dobbiamo evitarlo perchè non serve conservare in memoria tutti

le approssimazioni che generiamo (xn+1 dipende dal valore xn e basta). Se ci interessano i valori gene-rati dall’algoritmo, li possiamo scrivere di volta in volta sul video (meglio su un file! vedremo poi comescrivere dati di output su un file).

Lavoreremo facendo uso di due variabili: xold che corrisponde a xn e xnew che corrisponde a xn+1. Diamoin input il valore iniziale x0. Dobbiamo effettuare la prima iterazione cioè trovare x1 = cos(x0).

Porremo xold=x0 e poi xnew= cos(xold) per l’iterazione iter=1. xnew ha il significato di x1.Una volta fatta la prima iterazione, il valore di xold=x0 non ci interessa più. Per iter=iter+1=2,ci serve calcolare x2 = cos(x1). Proprio perchè il valore di xold non serve più assegniamo a xold ilvalore calcolato per x1=xnew in modo da poter sfruttare la relazione di prima. Applicheremo di nuovola formula xnew= cos(xold) dove ora xnew ha il significato di x2 e xold di x1.Alla fine del secondo passo, quindi xnew=x2 e xold=x1Ora x1 non serve più. Per iter=iter+1=3, ci serve solo x2. Perciò faremo xold=xnew,

xnew=cos(xold) e avremo xnew=x3. E così via. . .

172

Page 179: Calcolo Numerico

11.11. Programma sul metodo di punto fisso

xold=x0i t e r =0scartonew =2.0d0* t o l ldo while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) )

i t e r = i t e r +1xnew=cos ( xold )scartonew=abs (xnew° xold )write ( * , * ) i t e r , xnewxold=xnew

end do

La variabile scartonew ha il significato dello scarto xn ° xn°1| e, difatti, viene di volta in volta aggiornatacome scartonew=abs(xnew°xold). Prima di iniziare il ciclo do while è posto scartonew=2.0d0*toll, una quan-tità più grande della tolleranza, perchè così, la prima volta che si entra nel ciclo do while, la proposizionelogica ad essa legata è vera. Difatti, quando si entra nel ciclo do while scartonew=2.0d0*toll > toll

e iter=0< itmax. Si eseguono le istruzioni del ciclo do while fino a quando rimane vera la proposizio-ne (scartonew.ge.toll) .and. (iter . le .itmax) . Si esce dal ciclo do while quando scartonew < toll oppurequando iter > itmax.

Sappiamo che, per lo schema di punto fisso, vale limn!1|ª°xn ||ª°xn°1

= M = |g 0(ª)|. Poichè non conosciamo

l’errore, ma possiamo calcolare lo scarto e, per n ! 1, vale |ª° xn | º |xn ° xn°1|, abbiamo due modi perstimare M :

1. calcolare il rapporto tra gli scarti a due passi successivi2. calcolare |g 0(xn)|.Per calcolare il rapporto tra gli scarti a due passi successivi introduciamo un’altra variabile, che chiamia-

mo scartold, che corrisponde allo scarto |xn°1°xn°2|. L’aggiornamento di scartonew e scartold vienefatto in maniera del tutto analoga a quanto visto per xold e xnew.

Nel codice calcoliamo quindi due stime di M , utilizzando le variabili che chiamiamo asint1 e asint2.Vediamo il codice completo.

program puntofissoC programma per i l calcolo del punto f i s s o per g ( x)= cos ( x ) in [ 0 , pi / 2 ]

implicit noneCC s i g n i f i c a t o d e l l e v a r i a b i l iC i t e r : i t e r a z i o n e del metodo del punto f i s s oC itmax : numero massimo di i t e r a z i o n iC t o l l : tol leranza p r e f i s s a t a per l ’ approssimazioneC del punto f i s s oC x0 : punto i n i z i a l e del la successioneC xold : approssimazione al passo n°1C xnew : approssimazione al passo nC s c a r t o l d : scarto al l ’ i t e r a t a precedenteC scartonew : valore assoluto tra l ’ i t e r a t a corrente e quella alC passo precedenteC asint1 : scartonew / s c a r t o l d ° approssimazione di MC asint2 : abs(° sin (xnew ) ) ° approssimazione di M

integer i t e r , itmaxreal *8 x0 , xold , xnew , scartold , scartonew , t o l lreal *8 asint1 , asint2

write ( * , * ) ’ approssimazione i n i z i a l e ’read ( * , * ) x0write ( * , * ) ’ x0 = ’ , x0

itmax=100t o l l =1.d°10

173

Page 180: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

scartonew =2.0* t o l lscartold=scartonewi t e r = 0xold=x0write ( * , * ) ’ i t xnew scarto

1 asint1 asint2 ’write ( * , * ) i t e r , xold , scartonewdo while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) )

i t e r = i t e r +1xnew=cos ( xold )scartonew=abs (xnew° xold )asint1= scartonew/ scartoldasint2=abs(°sin (xnew ) )write ( * , * ) i t e r , xnew , scartonew , asint1 , asint2xold=xnewscartold=scartonew

end dostopend

11.12 I sottoprogrammi

Quando l’algoritmo e il problema su cui stiamo lavorando sono complicati, conviene spezzare il problemain sottoproblemi in modo da semplificare la programmazione.

Analogamente, al posto di avere un unico programma in FORTRAN, conviene scrivere il programmafacendo uso di sottoprogrammi. Si hanno due tipi di sottoprogrammi in FORTRAN:

subroutines,functions.

In tal modo un programma FORTRAN può risultare composto da:programma principale,una o più subroutines,una o più functions.

11.12.1 Le functions

Il programma che abbiamo scritto funziona bene ma ha un punto debole: se vogliamo applicare loschema di punto fisso ad un’altra funzione g , dobbiamo andare a cambiare le istruzioni xnew=cos(xold) e

asint2=abs(°sin(xnew)). E se la funzione è complicata? E se dobbiamo valutare la stessa funzione (o le stessefunzioni) anche su altre parti del programma?

Introduciamo il concetto di function in FORTRAN. Una function è del tutto simile al concetto difunzione scalare, che può essere definita in un sottoinsieme di Rn ma ha valori in R. Difatti una function

può avere uno o più dati di input e un solo dato di output.Vediamo come scrivere il programma precedente facendo uso delle functions.Nello stesso file (per semplicità) in cui abbiamo scritto il programma principale fisso.f, dopo le istruzioni

stop e end che chiudono il programma principale, dopo aver lasciato qualche riga bianca per mostrare chefinisce il programma principale, andremo a scrivere la nostra prima functionEsempio di

function gfunstopend

C f i n e del programma principale

real *8 function gfun ( x )C funzione di punto f i s s o

implicit none

174

Page 181: Calcolo Numerico

11.12. I sottoprogrammi

real *8 xgfun=cos ( x )returnend

La funzione che stiamo scrivendo è di tipo real*8 ed è la prima cosa che scriviamo per identificarla. C’è poila parola function e poi gfun(x). gfun ha un duplice significato: è il nome della function ma è ancheil nome della variabile che contiene il risultato dell’esecuzione della function gfun.

Il corpo della function è del tutto analogo a quello che si ha in un programma principale: implicit none,dichiarazione delle variabili, istruzioni. Tutte le istruzioni servono ad assegnare il valore alla variabile gfun.

La function termina con le istruzioni return (per ritornare nel programma da cui è stata chiamata) eend.

La funzione in questo caso dipende da una sola variabile, che chiamiamo x. La variabile (o le variabili)da cui dipende una function deve essere dello stesso tipo (dichiarata allo stesso modo) sia all’interno dellafunction sia nel programma principale, ma può avere nomi diversi (x, xold). Esempio di

functiondgfun

Per la derivata prima la function è la seguente:

real *8 function dgfun ( x )C derivata del la funzione di punto f i s s o

implicit nonereal *8 xdgfun= °sin ( x )returnend

Come cambia il programma principale?Nella dichiarazione delle variabili dobbiamo dichiarare le due function gfun e dgfun

integer i t e r , itmaxreal *8 x0 , xold , xnew , scartold , scartonew , t o l lreal *8 asint1 , asint2real *8 gfun , dgfun

Un’altra istruzione (opzionale) è dire che ci sono due sottoprogrammi esterni al programma principale,subito dopo la dichiarazione delle variabili:

integer i t e r , itmaxreal *8 x0 , xold , xnew , scartold , scartonew , t o l lreal *8 asint1 , asint2real *8 gfun , dgfunexternal gfun , dgfun

Infine, nel ciclo while, dove abbiamo bisogno della funzione di punto fisso e della sua derivata, si ha:

do while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) )i t e r = i t e r +1xnew=gfun ( xold )scartonew=abs (xnew° xold )asint1= scartonew/ scartoldasint2=abs ( dgfun (xnew ) )write ( * , * ) i t e r , xnew , scartonew , asint1 , asint2xold=xnewscartold=scartonew

end do

Una function, dunque, è un sottoprogramma del programma principale.Una function viene chiamata direttamente: xnew=gfun(xold).La function restituisce un valore ben preciso – il valore assunto dalla funzione stessa in funzione deiparametri. Perciò deve essere dichiarato il tipo della function (integer, real, real*8, . . . )

175

Page 182: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

La function restituisce un solo valore: gfun=cos(x).La function può avere uno o più parametri in ingresso.Per scrivere una function si usa l’istruzione di implicit none, si dichiarano tutte le variabili che sonousate all’interno della function, si scrivono tutte le istruzioni che servono (anche cicli if, o while seoccorrono).La function termina con le istruzioni di return e end.

Vediamo ora un altro esempio per cercare di capire meglio il concetto e l’uso delle functions.

Esempio 11.12.1 Supponiamo di dover scrivere un semplice programma che, dati in input, due valori a eb, valuta la funzione f (x) =

px2 +1+e°x per x = a e per x = b, stampando i risultati. Per la funzione f (x)

si deve utilizzare una function che chiameremo fun. Il programma può essere di questo tipo

program esempiousofunzioniimplicit nonereal *8 a , b , c , dreal *8 funwrite ( * , * ) ’ s c r i v i valore a ’read ( * , * ) awrite ( * , * ) ’ s c r i v i valore b ’read ( * , * ) b

C la v a r i a b i l e c ha i l valore del la funzione fun in ac=fun ( a )

C la v a r i a b i l e d ha i l valore del la funzione fun in bd=fun (b)write ( * , * ) ’ a = ’ , a , ’ f ( a)= ’ , cwrite ( * , * ) ’b = ’ , b , ’ f (b)= ’ , dreturnend

real *8 function fun ( x )implicit nonereal *8 xfun=sqrt ( x **2+1.0) +exp(°x )returnend

Un errore molto comune, nel fare programmi di questo tipo, in cui una function viene chiamata più volte inmodo sequenziale (cioè non all’interno di un ciclo while) è quello di scrivere la stessa function tante voltequante viene chiamata all’interno del programma!!! In questo caso un programma ERRATO sarebbe scrittoin questo modo

program esempiousofunzioniC ATTENZIONE ! ! ! ! ! ! ! ! !C QUESTO E ’ UN ESEMPIO DI PROGRAMMA NON CORRETTO ! ! ! !C Durante la compilazione s i ha i l seguente messaggio di e r r o r e :C Global name ’ fun ’ at ( 1 ) i s already being used as a FUNCTION at ( 2 )

implicit nonereal *8 a , b , c , dreal *8 funwrite ( * , * ) ’ s c r i v i valore a ’read ( * , * ) awrite ( * , * ) ’ s c r i v i valore b ’read ( * , * ) b

C la v a r i a b i l e c ha i l valore del la funzione fun in a

176

Page 183: Calcolo Numerico

11.12. I sottoprogrammi

c=fun ( a )C la v a r i a b i l e d ha i l valore del la funzione fun in b

d=fun (b)write ( * , * ) ’ a = ’ , a , ’ f ( a)= ’ , cwrite ( * , * ) ’b = ’ , b , ’ f (b)= ’ , dstopend

real *8 function fun ( a )implicit nonereal *8 afun=sqrt ( a **2+1.0) +exp(°a )returnend

real *8 function fun (b)implicit nonereal *8 bfun=sqrt (b**2+1.0) +exp(°b)returnend

La function fun è sempre la stessa. Perchè riscriverla due volte? All’interno del programma principale,la function viene dapprima chiamata per essere valutata nel punto a e poi per essere valutata nel punto b.La function fun va scritta solo una volta (noi l’abbiamo fatta dipendere da una generica variabile scalarex, ma potremmo farla dipendere anche da una variabile che chiamiamo a o b). Sottolineiamo il fatto chele variabili da cui dipende la function devono avere lo stesso significato nel programma principale, ma nonnecessariamente gli stessi nomi.

Quello che succede nel programma potrebbe essere descritto sinteticamente nel modo seguente:

programma.........

c=fun(a) °!

Il programma chiama lafunction fun.Nella function x = a.La function restituisce in cil valorefun(a).

d=fun(b) °!

Il programma chiama lafunction fun.Nella function x = b.La function restituisce in cil valorefun(b).

...

...

177

Page 184: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

11.12.2 Le subroutines

Possiamo pensare di cambiare ancora il programma per l’approssimazione del punto fisso, utilizzandoun diverso approccio: la parte che riguarda le iterazioni dello schema del punto fisso la facciamo fare ad unsottoprogramma che chiameremo, in qualche modo, nel programma principale. Scomporre il programmaprincipale in più sottoprogrammi ha il suo vantaggio nel momento in cui gli algoritmi che dobbiamo imple-mentare diventano via via più complicati, oppure se una parte di un programma viene ripetuta più volte (eanzichè scrivere righe e righe di istruzioni da eseguire, le scriviamo solo una volta nel sottoprogramma e poile richiamiamo dove occorre).

program puntofissoimplicit noneinteger i t e r , itmaxreal *8 x0 , xnew , t o l lexternal i t e r p f i s s owrite ( * , * ) ’ approssimazione i n i z i a l e ’read ( * , * ) x0write ( * , * ) ’ x0 = ’ , x0itmax=100t o l l =1.d°10i t e r = 0c a l l i t e r p f i s s o ( i t e r , itmax , x0 , t o l l , xnew)write ( * , * ) ’ approssimazione f i n a l e ’ , xnewwrite ( * , * ) ’ i t e r a z i o n i e f f e t t u a t e ’ , i t e rstopend

Osserviamo che la subroutine è chiamata tramite l’istruzionecall iterpfisso( iter ,itmax,x0,toll,xnew)

Abbiamo parametri di input: iter, itmax, x0, toll.Ci sono parametri di output: xnew.Alcuni dei parametri di input (in questo caso iter), vengono modificati all’interno della subroutine, altrino.Nel programma principale non sono dichiarate le variabili che usiamo soltanto all’interno dellasubroutine (xold, scartonew, scartold, asint1, asint2, le due functions gfun e dgfun).

Per scrivere la subroutine, lasciamo qualche riga vuota dopo le istruzioni stop e end del programma prin-cipale e scriviamo la subroutine prima delle functions (o dopo, non cambia niente). L’importante è che siscriva tutto il programma principale completo, tutta la/le subroutine complete, tutte la/le functions comple-te (senza che pezzi di subroutine o di functions o di programma principale si intersechino tra di loro nellascrittura!!!!)Esempio di

subroutine:iterpfisso subroutine i t e r p f i s s o ( i t e r , itmax , x0 , t o l l , xnew)

C sottoprogramma che implementa l ’ algoritmo del metodo di punto f i s s oimplicit noneinteger i t e r , itmaxreal *8 x0 , xnew , xold , t o l l , scnew , scold , asint1 , asint2real *8 gfun , dgfunexternal gfun , dgfun

scnew=2.0* t o l lscold=scnewxold=x0write ( * , * ) ’ i t xkp1 scarto

1 asint1 asint2 ’write ( * , * ) i t e r , xold , scnewdo while ( ( scnew . ge . t o l l ) . and . ( i t e r . l e . itmax ) )

i t e r = i t e r +1xnew=gfun ( xold )

178

Page 185: Calcolo Numerico

11.12. I sottoprogrammi

scnew=abs (xnew° xold )asint1= scnew/ scoldasint2=abs ( dgfun (xnew ) )write ( * , * ) i t e r , xnew , scnew , asint1 , asint2xold=xnewscold=scnew

end doreturnend

Una subroutine inizia con l’istruzione subroutine nomesubroutine(lista di parametri)il nome di una subroutine non può essere uguale a quello di altre variabili utilizzate;il “corpo” della subroutine è analogo a quello di un programma principale (implicit none, dichiarazionedelle variabili, istruzioni, cicli. . . );la subroutine si chiude con le istruzioni return e endla subroutine è chiamata nel programma principale tramite l’istruzione

call nomesubroutine(parametri)

Il fatto che noi chiamiamo una subroutine nel programma principale (call) dice che la subroutine non è unprogramma a sè stante. Quando termina l’esecuzione di ciò che è scritto all’interno della subroutine si tornaindietro nel programma principale e si continua l’elaborazione da quel punto. L’istruzione return fa tornareal programma principale. Le variabili non devono avere necessariamente lo stesso nome nel programmaprincipale e nella subroutine. Per esempio, possiamo scrivere:

call iterpfisso( iter ,itmax,x0,toll,xnew) nel programma principalesubroutine iterpfisso(it,itmassime,x0,toll,xnew) nella subroutine.

L’importante è che le variabili abbiamo lo stesso significato (stesso tipo di variabile, ma anche stes-sa valenza di variabile) e devono essere messe nello stesso ordine: se nel programma principale scrivia-mo call iterpfisso(itmax,iter,x0, toll ,xnew) ma poi nella subroutine scambiamo il ruolo di itmax e di iter,

subroutine iterpfisso(it,itmassime,x0,toll,xnew) ,all’interno della subroutine è assegnato a it il valore di itmax, mentre a itmassime è assegnato il valore di iter(che è zero all’inizio). . . ..

All’interno della subroutine si possono utilizzare altre variabili oltre a quelle che sono presenti tra i pa-rametri della stessa. L’importante è dichiararle nella subroutine. Tali variabili non passano nel programmaprincipale ma sono usate solo nella subroutine. In questo esempio xold, scnew, scold, asint1, asint2, gfun,dgfun sono usate solo nella subroutine.

Vediamo un altro esempio di programma con uso di subroutines.

Esempio 11.12.2 Scriviamo un programma che, assegnate tre variabili, che chiamiamo a, b e c, considerale possibili coppie di punti che si possono formare e calcola la corrispondente media geometrica e mediaaritmetica. Le possibili coppie di punti sono: a-b, a-c, b-c. Per calcolare il valor medio di ciascuna coppia,utilizziamo una subroutine che chiamiamo medie. Un possibile programma è il seguente.

program medie_arit_geomimplicit nonereal *8 a , b , creal *8 media1 , media2write ( * , * ) ’ s c r i v i t r e numeri a , b , c ’read ( * , * ) a , b , cc a l l medie ( a , b , media1 , media2 )write ( * , * ) ’ coppie di punti : ’ , a , bwrite ( * , * ) ’media aritmetica ’ , media1write ( * , * ) ’media geometrica ’ , media2

179

Page 186: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

c a l l medie ( a , c , media1 , media2 )write ( * , * ) ’ coppie di punti : ’ , a , cwrite ( * , * ) ’media aritmetica ’ , media1write ( * , * ) ’media geometrica ’ , media2c a l l medie (b , c , media1 , media2 )write ( * , * ) ’ coppie di punti : ’ , b , cwrite ( * , * ) ’media aritmetica ’ , media1write ( * , * ) ’media geometrica ’ , media2stopend

subroutine medie ( a , b , media_aritm , media_geom)implicit nonereal *8 a , b , media_aritm , media_geommedia_aritm= ( a+b ) * 0 . 5media_geom=sqrt ( a*b)returnend

In questo caso la subroutine ha come variabili, nell’ordine, i due punti di cui calcolare la media aritmetica egeometrica, il valore della media aritmetica, il valore della media geometrica. Osserviamo che, nel program-ma principale, la subroutine viene chiamata tre volte. Poichè, dopo ogni chiamata, ci facciamo stampare ilvalore della media aritmetica e della media geometrica, abbiamo usato solo due variabili, rispettivamentemedia1 e media2. Ad ogni chiamata della subroutine, i valori ottenuti alla chiamata precedente vengono per-si perchè sostituiti dai nuovi valori che si ottengono. Se, nel programma, dovessimo utilizzare tutti i valoridelle medie ottenute per le tre coppie di punti, non potremmo sovrascriverli ma dovremmo utilizzare sei va-riabili distinte. Osserviamo, ancora una volta, che abbiamo un’unica subroutine che viene chiamata più volteall’interno del programma principale.

11.13 Il formato

Fino ad ora abbiamo stampato i risultati dei nostri programmi su video e senza aver dato nessunaindicazione su come visualizzare i dati.

Per avere un output elegante e ordinato, conviene usare l’istruzione format.Vediamo questa istruzione direttamente all’interno di un programma d’esempio (quello del punto fisso

appena visto nelle le righe di codice relative al ciclo do while, il resto rimane invariato)Programmadi punto fisso

conl’istruzione

format

do while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) )i t e r = i t e r +1xnew=gfun ( xold )scartonew=abs (xnew° xold )asint1= scartonew/ scartoldasint2=abs ( dgfun (xnew ) )write ( * , 1 0 0 ) i t e r , xnew , scartonew , asint1 , asint2xold=xnewscartold=scartonew

end do100 format (1 x , i4 , 1 x , f15 .12 ,1 x , e14 . 6 , 1x , 2e13 . 5 )

Nell’istruzione write, non abbiamo scritto write(*,*) ma write(*,100). Al posto del secondo simbolo *abbiamo messo un numero (un’etichetta).

Questo numero lo si trova scritto alla fine del ciclo while (ma possiamo metterlo ovunque all’interno delprogramma – dopo la dichiarazione delle variabili e prima della end finale) a partire dalla seconda colonna.

Dopo aver scritto il numero che contraddistingue il formato, abbiamo l’istruzione format e, tra pa-rentesi, abbiamo tutte le indicazioni su come rappresentare le variabili della stampa cui ci si riferisce:

format(1x,i4,1x,f15.12,1x,e14.6,1x,2e13.5)Nell’esempio particolare:

180

Page 187: Calcolo Numerico

11.13. Il formato

1x significa: lascia uno spazio bianco sulla riga;i4 significa: 4 caratteri riservati per la prima variabile che è di tipo intero (iter);f15.12 : scrivi il valore della variabile xnew in formato fisso, riservando 15 caratteri per il numero di cui12 per la parte decimale;e14.6: scrivi il valore di scartonew in formato esponenziale, riservando 14 caratteri per il numero, dicui 6 per la mantissa;2e13.5 : scrivi i 2 numeri successivi asint1 e asint2 nello stesso formato esponenziale, riservando aciascuno di essi 13 caratteri di cui 5 per la mantissa.

formato Significatoi formato interoe esponenzialef fissoa alfanumericox spazi bianchi

Tabella 11.6: Il formato

formato Esempioi i5 – 5 caratteri per un interoe e14.6 – 14 caratteri, 6 per la mantissa

e18.10 – 18 caratteri, 10 per la mantissaf f14.6 – 14 caratteri, 6 per le cifre decimali

f15.12 – 15 caratteri, 12 per le cifre decimalia a5 – una stringa di al più 5 caratterix 1x – 1 carattere bianco

3x – 3 caratteri bianchi

Tabella 11.7: Esempi di formato

Specificando il formato, occorre prestare attenzione al fatto che non tutti i numeri possono essere stam-pati correttamente. Per esempio se un intero ha più di 5 caratteri (per esempio 100150) ma il formato per essoè i5, vengono stampati degli * o altri caratteri a seconda del compilatore. Se si hanno strani risultati in outputusando un formato, togliere il formato, compilare e rieseguire il programma per verificare se l’errore dipendedal formato!

Lo stesso formato può essere utilizzato da più righe di write se il formato si riferisce a variabili dellostesso tipo. Le stringhe di caratteri possono essere scritte mediante un formato opportuno.

Vediamo di nuovo il programma di prima:

i t e r = 0xold=x0write ( * , 9 8 ) ’ i t ’ , ’ xk ’ , ’ scarto ’ , ’ asint1 ’ , ’ asint2 ’write ( * , 9 9 ) i t e r , xold , scartonewdo while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) )

C t u t t o invariato come primawrite ( * , 1 0 0 ) i t e r , xnew , scartonew , asint1 , asint2xold=xnewscartold=scartonewend do

98 format (1 x , a4 , 1 x , a15 , 1 x , a14 , 1 x , 2 a13 )99 format (1 x , i4 , 1 x , f15 .12 ,1 x , e14 . 6 )100 format (1 x , i4 , 1 x , f15 .12 ,1 x , e14 . 6 , 1x , 2e13 . 5 )

181

Page 188: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

stopend

Per le stringhe è stato usato un formato riservando a ciascuna stringa lo stesso numero di caratteri riser-vati alle variabili corrispondenti cui si riferiscono le stringhe. In tal modo, si riesce a creare una tabellina dirisultati messi in colonna l’uno dopo l’altro in maniera ordinata.

11.14 Files di dati

Piuttosto che visualizzarli sulla finestra di shell del computer, conviene salvare i risultati in un file di dati.Il modo più semplice per fare questo è far sì che durante l’esecuzione del programma venga generato un filedi scrittura di dati: si apre il file all’interno del programma principale associando ad esso un numero (label)mediante l’istruzione open. Per esempio, dopo la dichiarazione delle variabili, scriviamo

open(10, file=’rispuntofisso.txt’)Le istruzioni di write saranno poi associate a quella label e scritte su quel file.Quindi, al posto di scrivere write(*,98) andremo a scrivere write(10,98) perchè dobbiamo scrivere la stampa

dei risultati sul file contrassegnato dall’etichetta 10.Prima di chiudere il programma, chiudiamo il file con l’istruzione close.

close(10)Esempio difile di dati

program puntofissoC programma di punto f i s s oC t u t t o come primaC dichiarazione d e l l e v a r i a b i l i

open(10 , f i l e = ’ r ispuntof isso . txt ’ )write ( * , * ) ’ approssimazione i n i z i a l e ’read ( * , * ) x0write ( * , * ) ’ x0 = ’ , x0

C i l programma continua con l e i s t r u z i o n i gia ’ v i s t eC l e uniche modifiche saranno n e l l e write :

write (10 ,98) ’ i t ’ , ’ xk ’ , ’ scarto ’ , ’ asint1 ’ , ’ asint2 ’write (10 ,99) i t e r , xold , scartonew

C ora i l c i c l o do whileC all ’ interno abbiamo

write (10 ,100) i t e r , xnew , scartonew , asint1 , asint2C f i n i s c e i l c i c l o do whileC scriviamo i formati

close (10)stopend

Una volta che il programma è stato compilato correttamente ed eseguito, la stampa dei risultati non saràpiù sul video ma verrà generato un file (con il nome che abbiamo dato all’interno del programma) sul qualetroveremo i risultati che prima erano sul video.

Se rieseguiamo il programma questo file sarà riscritto da capo. Quindi se dobbiamo eseguire ilprogramma più volte per diverse simulazioni, il file di output conviene rinominarlo in modo da non perderlo.

11.15 Vettori

Quando si programma in FORTRAN, un vettore va dichiarato in un certo modo e usato in maniera quasisimile a come li abbiamo studiati.

Supponiamo di voler calcolare la media di un vettore x.Nello scrivere il programma, dobbiamo pensare ad una lunghezza massima per il vettore che dobbiamo

dare in input: questo perchè in FORTRAN77 si ha un’allocazione statica delle variabili (e non dinamica).Se diamo 20 come lunghezza massima del vettore, il programma che scriveremo potrà essere eseguito su

vettori che avranno al più dimensione 20.

182

Page 189: Calcolo Numerico

11.16. Ciclo do

Ci sono vari modi per dare questa dimensione massima ai vettori. Noi partiremo dal modo più semplice.Supponiamo di voler scrivere un programma che calcola la media delle componenti di un vettore. Come

procedere?I dati di input sono: n, la dimensione effettiva del vettore e xi per i = 1,2, . . .n le componenti del vettorex.

L’output è la variabile medi a =(Pn

i=1 xi )

nPer calcolare la variabile medi a faremo la somma in questo modo (medi a è la cosiddetta variabile di

accumulo):partiamo da medi a = 0quindi facciamo medi a = medi a +x1 (prima componente della somma)poi medi a = medi a +x2 (il risultato è x1 +x2)poi medi a = medi a +x3 (avremo x1 +x2 +x3 )e così via fino a medi a = medi a +xn (in medi a avremo tutta la somma dei vettori)Dopo si fa medi a = medi a/n e avremo il risultato finale.

11.16 Ciclo do

Per applicare la formula per ottenere la variabile medi a possiamo pensare a un ciclo do while scrittocome:

media =0.d0i =0do while ( i . l e . n)

i = i +1media = media + x ( i )

end domedia= media/n

Noi non useremo questo approccio ma una struttura equivalente ad essa che prende il nome di ciclo do:

media = 0 . d0do i =1 ,n

media = media + x ( i )end domedia= media/n

Programmasulla mediadei vettoriprogram mediavettori

C programma che calcola la media d e l l e componenti di un v e t t o r eimplicit noneinteger n , ireal *8 x (20) , mediawrite ( * , * ) ’ lunghezza e f f e t t i v a del vettore ’read ( * , * ) nwrite ( * , * ) ’ lunghezza del vettore ’ , ni f (n . gt . 2 0 ) then

write ( * , * ) ’n > massimo consentito ’ , nstop

endifdo i =1 ,n

write ( * , * ) ’componente ’ , i , ’°sima del vettore ’read ( * , * ) x ( i )

end dodo i =1 ,n

write ( * , * ) ’ elemento ’ , i , ’ = ’ , x ( i )end domedia=0.d0

183

Page 190: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

do i =1 ,nmedia = media + x ( i )

end domedia =media/nwrite ( * , * ) ’media ’ , mediastopend

Il vettore è stato dichiarato come real*8 x(20): il vettore può avere al più 20 componenti.Osserviamo che questo tipo di dichiarazione non fa distinzione tra vettore riga e vettore colonna.La dimensione effettiva del vettore è data dalla variabile intera n che viene data in input (per ilmomento da tastiera);Le singole componenti vengono inserite da tastiera tramite un’applicazione del ciclo do;Facciamo un controllo su n, se è più piccolo o più grande della dimensione massima. Attenzione: ilciclo if si può usare anche per interrompere il programma! Se n > 20 interrompiamo bruscamente ilprogramma mediante l’istruzione stop all’interno del ciclo if.

Con il ciclo do che abbiamo visto, la variabile intera i varia da 1 a n (la dimensione del vettore).In generale la struttura del ciclo do è la seguente:

do indice= v a l o r e i n i z i a l e , valoref inale , incremento{ i s t r u z i o n i }

end do

Quando incremento=1 possiamo evitare di scriverlo.

Esempio 11.16.1 Vogliamo fare la somma delle componenti di indice pari del vettore x:

sommapari=0.d0do i =2 ,n, 2

sommapari=sommapari + x ( i )end do

L’indice i vale i = 2, i = 2+2 = 4, i = 4+2 = 6. . . .

Attenzione: se valoreiniziale > valorefinale e l’incremento è positivo, non si entra nel ciclo do.Si può anche trovare il ciclo do scritto nella forma (ormai obsoleta, ma può capitare di trovarlo su vecchi

programmi):

do l a be l indice= v a l i n i z i a l e , v a l f i n a l e , incremento{ i s t r u z i o n i }

l a be l continue

dove label è un numero (etichetta) che si trova all’inizio del ciclo e poi alla fine per chiuderlo (label

continue). La label dell’istruzione label continue va scritta a partire dalla seconda colonna.

11.16.1 I vettori nei sottoprogrammi

I vettori si possono usare come variabili di input nelle functions (e non di output in quanto la functiondeve dare un unico valore come output e quindi non può dare un vettore) e come variabili di input e outputnelle subroutines.

Quando dichiariamo i vettori in un sottoprogramma, possiamo dichiararli con la loro dimensioneeffettiva. Vediamo un esempio di function che calcola la norma euclidea di un vettore.

184

Page 191: Calcolo Numerico

11.16. Ciclo do

real *8 function norma2(n , x )implicit noneinteger n , ireal *8 x (n)norma2=0.d0do i =1 ,n

norma2=norma2 + x ( i ) * * 2end donorma2=dsqrt (norma2)returnend

Attenzione a come si passano i vettori nelle functions! Abbiamo scritto real*8 function norma2(n,x). Nelprogramma principale (che qui non abbiamo scritto) la function sarà chiamata, ad esempio, tramite leistruzioni

a l f a =norma2(n , x )beta=norma2(n , y )

In questo caso, nel programma principale calcoliamo la norma dei vettori x e y e il valore di queste norme èassegnato alle variabili alfa e beta.

Attenzione! Un errore frequente nell’uso di functions o di subroutines è di passare i vettori con la lorodimensione! Nel programma principale si scrive (in maniera non corretta!!!):

alfa=norma2(n,x(n))Nella function, in maniera non corretta, si scrive:

real*8 function norma2(n,x(n))Non si deve scrivere x(n): la dimensione del vettore viene passata mediante la variabile n che è già tra iparametri della function. Si deve scrivere solo x.

11.16.2 Leggere i dati di input da file

È chiaro che se un vettore ha molte componenti diventa proibitivo assegnare le componenti del vettoretramite tastiera. . . È possibile leggere i dati di input da un file già esistente, cui viene associata una label e cheviene aperto all’inizio del programma. Ora sono le istruzioni di read che vengono associate alla label delfile di lettura dati. Vediamo il programma di prima come cambia (e nello stesso calcoliamo la media dellecomponenti del vettore utilizzando una function).

program mediavettoriC programma che calcola la media d e l l e componenti di un v e t t o r e

implicit noneinteger n , ireal *8 x ( 2 0 ) , media , funmediaopen(10 , f i l e = ’ vettoreinput . dat ’ )read ( 1 0 , * ) ni f (n . gt . 2 0 ) then

write ( * , * ) ’n > massimo consentito ’ , nstop

endifC nella riga seguente troviamo i l c i c l o do implici to

read ( 1 0 , * ) ( x ( i ) , i =1 ,n)C analogamente possiamo applicare i l do e s p l i c i t oC che ora e ’ commentatoc do i =1 ,nc read ( 1 0 , * ) x ( i )c end do

do i =1 ,nwrite ( * , * ) ’ elemento ’ , i , ’ = ’ , x ( i )

end do

185

Page 192: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

media= funmedia (n , x )write ( * , * ) ’media ’ , mediaclose (10)stopend

real *8 function funmedia (n , x )implicit noneinteger i , nreal *8 x (n)funmedia=0.d0do i =1 ,n

funmedia = funmedia + x ( i )end dofunmedia =funmedia/nreturnend

Per la lettura dei dati di input si può utilizzare sia il ciclo do che abbiamo visto fino ad ora sia quello che èchiamato do implicito.

Essenzialmente quando si devono leggere dei dati da un file, il compilatore FORTRAN leggerà dellestringhe di caratteri e le convertirà in numeri.

Ci sono delle differenze sulle modalità di come avviene la lettura mediante il do esplicito o implicito, manon entriamo nei dettagli. Ciò che importa ricordare è che ci deve essere corrispondenza nell’ordine in cui levariabili sono scritte sul file di dati e la lettura delle variabili stesse nel programma FORTRAN.

Conviene, poi, lasciare almeno uno spazio bianco tra un valore e il successivo se li scriviamo sulla stessariga nel file di dati.

Le variabili di tipo reale vanno scritte con il punto decimale. Le variabili di tipo intero vanno scritte senzail punto decimale.

Le componenti di un vettore vanno scritte o su una riga o in colonna componente per componente, inmaniere del tutto indifferente se usiamo il ciclo do implicito nel programma principale. Vanno scritte incolonna, se usiamo il ciclo do esplicito.Esempi di file

vettorein-put.dat

Se usiamo il do implicito per la lettura dei dati del vettore, possiamo scrivere indifferentemente il file deidati nei due modi seguenti.

Il primo modo è di scrivere sul file di dati, sulla prima riga il valore di n e sulla seconda riga le componentidel vettore.

4

1. 2. 3. 4.

Il secondo modo è di scrivere sulla prima riga il valore di n e sulle righe successive le componenti delvettore.

4

1.

2.

3.

4.

Se usiamo il ciclo do esplicito per la lettura dei dati di input, il vettore deve essere scritto come vettorecolonna, quindi dobbiamo usare il secondo approccio.

186

Page 193: Calcolo Numerico

11.17. Matrici in FORTRAN

11.17 Matrici in FORTRAN

In FORTRAN, le matrici vanno dichiarate dando una dimensione massima sia sulle righe sia sulle colonne.Possiamo lavorare sia su matrici rettangolari, sia su matrici quadrate. Per semplicità, poichè noi avremo a chefare con matrici quadrate, descriveremo e faremo programmi solo su matrici quadrate.

Supponiamo di voler fare il prodotto di una matrice A per un vettore x.Il risultato del prodotto di una matrice per un vettore è un vettore.Come scrivere un programma che fa questa operazione?

I dati di input sono: n, la dimensione effettiva della matrice A e del vettore, le componenti A(i , j ) (iindice di riga e j indice di colonna) per i , j = 1,2, . . .n della matrice, e le componenti x(i ) del vettore,per i = 1,2, . . .n.L’output è il vettore y di componenti y(i ) dove y = Ax

Sappiamo che yi = (Ax)i =Pn

j=1 Ai j x j .Traduciamo il tutto in FORTRAN con il seguente programma. Programma

sul prodottomatrice-vettore

program matrvettC programma per i l calcolo del prodotto di una matrice A per unC v e t t o r e xC dati di input :C n ° dimensione e f f e t t i v a del la matrice ( quadrata ) eC del v e t t o r e xC A ° matrice di dimensione nxnC x ° v e t t o r e di lunghezza nC dati di outputC y ° v e t t o r e di lunghezza n uguale al prodotto AxC

implicit noneinteger i , j , nreal *8 A( 2 0 , 2 0 ) , x ( 2 0 ) , y (20)open(10 , f i l e = ’ matrvett . dat ’ )open(11 , f i l e = ’ matrvett . r i s ’ )

C l e t t u r a del la dimensione nread ( 1 0 , * ) n

C l e t t u r a del la matrice AC usiamo un c i c l o do i =1 ,n e s p l i c i t o e un c i c l o do implici toC leggiamo g l i elementi che s i trovano s u l l a riga i°simaC e la l e t t u r a viene f a t t a riga per riga

do i =1 ,nread ( 1 0 , * ) (A( i , j ) , j =1 ,n)

end doCC l e t t u r a del v e t t o r e x

read ( 1 0 , * ) ( x ( i ) , i =1 ,n)C s c r i t t u r a dei dati di input sul f i l e dei r i s u l t a t i

write ( 1 1 , * ) ’ dimensione ’ , nwrite ( 1 1 , * ) ’ matrice A ’do i =1 ,n

write ( 1 1 , * ) (A( i , j ) , j =1 ,n)end dowrite ( 1 1 , * ) ’ vettore x ’write ( 1 1 , * ) ( x ( i ) , i =1 ,n)

C prodotto matrice°v e t t o r e : l ’ elemento i°simo del prodottoC matrice°v e t t o r e e ’ dato dalla somma per j =1 ,n di A( i , j ) * x ( j )

do i =1 ,ny ( i ) = 0 . d0

do j =1 ,ny ( i ) = y ( i ) + A( i , j ) * x ( j )

187

Page 194: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

end doend dowrite ( 1 1 , * ) ’ vettore y=Ax ’write ( 1 1 , * ) ( y ( i ) , i =1 ,n)stopend

La matrice è stata dichiarata come real*8 A(20,20): significa che il programma va bene per matrici chepossono avere al massimo 20 righe per 20 colonne.Abbiamo usato un ciclo do i=1, n e un ciclo do j=1,n concatenato al primo per fare il prodottomatrice-vettore.Per calcolare le componenti del prodotto matrice-vettore abbiamo prima posto y(i)=0.d0 in mododa poter fare la somma dei vari termini “accumulandoli” di volta in volta.Abbiamo letto i dati di input da file. Ricordiamo che il numero che scriviamo all’interno dell’istruzioneche apre il file open(10, file=’nomefile.dat’) lo scegliamo noi. Se apriamo più files a ciascunfile deve essere associato un numero diverso, in modo da poter leggere (se il file è di lettura) o scrivere(se il file è di scrittura) in modo appropriato.

11.17.1 Le matrici nei sottoprogrammi

Quando una (o più matrici) devono essere passate in un sottoprogramma (sia esso una function o unasubroutine), all’interno del sottoprogramma si deve necessariamente dichiarare la matrice (o le matrici) conla loro dimensione massima sulle righe.

Facciamo un esempio e successivamente ne vedremo le ragioni.Scriviamo un programma in cui, mediante una subroutine, data la matrice A si crea la matrice B = AT .

program matrtraspostaC programma che crea la matrice B=A^TC dati di input :C n ° dimensione e f f e t t i v a del la matrice ( quadrata )C A ° matrice di dimensione nxnC dati di outputC B ° matrice trasposta di AC

implicit noneinteger i , j , nreal *8 A( 2 0 , 2 0 ) , B(20 ,20)

open(10 , f i l e = ’ matrice . dat ’ )open(11 , f i l e = ’ r i s t r a s p o s t a . dat ’ )

C l e t t u r a del la dimensione nread ( 1 0 , * ) n

C l e t t u r a del la matrice AC usiamo un c i c l o do i =1 ,n e s p l i c i t o e un c i c l o do implici toC leggiamo g l i elementi che s i trovano s u l l a riga i°sima eC la l e t t u r a viene f a t t a riga per riga

do i =1 ,nread ( 1 0 , * ) (A( i , j ) , j =1 ,n)

end dowrite ( 1 1 , * ) ’ dimensione ’ , nwrite ( 1 1 , * ) ’ matrice A ’do i =1 ,n

write ( 1 1 , * ) (A( i , j ) , j =1 ,n)end doc a l l trasposta (n , A , B)

188

Page 195: Calcolo Numerico

11.17. Matrici in FORTRAN

write ( 1 1 , * ) ’ matrice trasposta B ’do i =1 ,n

write ( 1 1 , * ) (B( i , j ) , j =1 ,n)end dostopend

subroutine trasposta (n , A , B)implicit noneinteger i , j , nreal *8 A(20 ,n) , B(20 ,n)do i =1 ,n

do j =1 ,nB( i , j )=A( j , i )

end doend doreturnend

Anche per le matrici, vale la stessa osservazione che abbiamo fatto per i vettori: quando si lavora confunctions o subroutines, le matrici vanno passate con il nome della loro variabile. È corretto scrivere

subroutine trasposta(n,A,B). Non è corretto scrivere subroutine trasposta(n,A(20,n),B(20,n)).

11.17.2 Parameter

Supponiamo di dover scrivere più sottoprogrammi che richiamano matrici e vettori. Per le matrici, inciascuno dei sottoprogrammi dobbiamo dare la dimensione massima delle righe: per esempio A(20,20)

nel programma principale e A(20,n) o A(20,20) (vanno bene entrambe le forme) nei sottoprogrammi.Supponiamo però di voler eseguire il programma già fatto, e che funziona bene, per una matrice di di-

mensione 50£50. Possiamo andare ad aumentare la dimensione massima delle matrici e dei vettori da 20 a50, ricompilare il programma ed eseguirlo.

Cosa può succedere? Se da qualche parte ci siamo dimenticati di correggere il 20 con il 50. . . il codicedarà risultati sbagliati. . . Per evitare questo inconveniente possiamo usare una variabile che si chiama para-meter per indicare la dimensione massima delle matrici. Nel programma principale (supponiamo di volermodificare il programma della trasposta di una matrice), scriveremo

program matrtraspostaC programma che crea la matrice B=A^TC t u t t i g l i a l t r i commenti come primaC

implicit noneinteger nmaxparameter (nmax=20)integer i , j , nreal *8 A(nmax,nmax) , B(nmax,nmax)

C t u t t o i l r e s t o i n a l t e r a t o fino al l a chiamata del la subroutinec a l l trasposta (nmax, n , A , B)

subroutine trasposta (nmax, n , A , B)implicit noneinteger i , j , n ,nmaxreal *8 A(nmax, n) , B(nmax, n)do i =1 ,n

do j =1 ,nB( i , j )=A( j , i )

end doend do

189

Page 196: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

returnend

Parameternmax La variabile nmax è un parametro che viene definito una volta per tutte mediante l’istruzione

parameter (nmax=20): all’interno del programma noi non possiamo cambiare il valore dato a nmax.Al posto di scrivere A(20,20) noi scriviamo A(nmax,nmax). Se ci sono vettori, li dichiariamo come

x(nmax).Nei sottoprogrammi, dove ci sono matrici, passiamo nmax nella lista delle variabili di input del

sottoprogramma e dichiariamo A(nmax,n).In questo modo, se vogliamo cambiare la dimensione massima, andiamo a cambiare solo l’istruzione

parameter (nmax=20) Per esempio scriviamo parameter (nmax=50), compiliamo il programma e possiamo ese-guirlo per matrici e vettori al più di dimensione 50. Ma andiamo a cambiare solo una riga di codice e nontutte le righe in cui sono dichiarate le matrici e i vettori. . .

11.17.3 Memorizzazione delle matrici

Le matrici sono memorizzate colonna per colonna – prima gli elementi di tutta la prima colonna dallaprima all’ultima riga, poi tutti gli elementi della seconda colonna dalla prima all’ultima riga, e così via . . .

Sia nmax=6, A(nmax,nmax)

A può avere al più nmax righe per nmax colonne. nmax * nmax = 36 celle di memoria sono predisposteper i valori della matrice, a partire da A(1,1)

1 7 13 19 25 312 8 14 20 26 323 9 15 21 27 334 10 16 22 28 345 11 17 23 29 356 12 18 24 30 36

Cosa succede se la dimensione effettiva della matrice è n < nmax? All’interno del programma principalei valori della matrice vengono memorizzati nelle celle di memoria che corrispondono alla “sottomatrice” didimensione n x n.

Sia n=4. Si ha:

1� 7� 13� 19� 25 312� 8� 14� 20� 26 323� 9� 15� 21� 27 334� 10� 16� 22� 28 345 11 17 23 29 356 12 18 24 30 36

Se nel sottoprogramma si dichiara correttamente la matrice A

real*8 A(nmax,n)

allora anche il passaggio della matrice avviene correttamente.Se nel sottoprogramma si dichiara invece

real*8 A(n, n)

allora la locazione di memoria all’interno del sottoprogramma è “pensata” come se fosse nmax=n

1 5� 9 132 6� 10 143 7 11� 154 8 12� 16

190

Page 197: Calcolo Numerico

11.17. Matrici in FORTRAN

Ma nelle cellette di posto 5, 6, 11 e 12 non ci sono i valori della matrice: la memorizzazione risulta noncorretta!!!

11.17.4 Un programma di esempio

Scriviamo ora un programma in cui dobbiamo usare subroutines e functions.

Esempio 11.17.1 Assegnate due matrici quadrate A e B di dimensione n (n ∑ 20), si vuole calcolare latraccia delle matrici C = AB e D = B A.Scrivere dunque un programma in linguaggio FORTRAN che:

1. legge n, A e B;2. calcola le matrici C = AB e D = B A servendosi della subroutine PRODMATR che esegue il prodotto di

due matrici quadrate;3. calcola Æ (la traccia della matrice C ) e Ø (la traccia della matrice D) servendosi della function TRAC

che calcola la traccia di una matrice;4. stampa i risultati ottenuti.

Per scrivere questo programma dobbiamo innanzitutto ricordarci la formula per fare il prodotto di duematrici e quella per la traccia di una matrice. Date due matrici quadrate A e B si ha C = AB con elementi

ci j =nX

k=1ai k bk j per i , j = 1,2, . . . ,n.

Traducendo in pseudo-linguaggio questa formula abbiamo:

1 Per i=1,n2 Per j=1,n3 C(i,j)=0 ;4 C inizializzo a zero i valori della matrice perchè devo fare una somma;5 Per k=1,n6 C(i,j)= C(i,j) + A(i,k)*B(k,j)7 Fine-Per8 Fine-Per9 Fine-Per

Sarà proprio questo che faremo nella subroutine PRODMATRInvece la traccia di una matrice A è data da tr acci a = tr (A) =Pn

i=1 ai i . Sotto forma di pseudo-algoritmoabbiamo

1 traccia=0 ;2 C inizializzo a zero la variabile traccia perchè devo fare una somma;3 Per i=1,n4 traccia=traccia + A(i,i)5 Fine-Per

Tradurremo questo algoritmo nella function TRAC.Poichè dobbiamo costruire due matrici prodotto e due tracce di matrici, vuol dire che la subroutine che

costruirà la matrice prodotto verrà chiamata due volte nel programma principale (con gli opportuni parame-tri) e la function che calcolerà la traccia di una matrice verrà anch’essa chiamata due volte nel programmaprincipale.

Un’ultima osservazione riguarda le due variabili Æ e Ø: nel codice non possiamo scrivere lettere greche,quindi le chiameremo semplicemente alfa e beta.

Il programma sarà dunque scritto nel modo seguente.

191

Page 198: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

program prodottomatricietracciaimplicit noneinteger nmaxparameter (nmax=20)integer n , i , jreal *8 A(nmax,nmax) , B(nmax,nmax) , C(nmax,nmax) , D(nmax,nmax)real *8 trac , a l fa , beta

open(10 , f i l e = ’ input . dat ’ )read ( 1 0 , * ) ndo i =1 ,nread ( 1 0 , * ) (A( i , j ) , j =1 ,n)end dodo i =1 ,nread ( 1 0 , * ) (B( i , j ) , j =1 ,n)end do

c a l l prodmatr (nmax, n , A , B,C)c a l l prodmatr (nmax, n , B, A ,D)a l f a =trac (nmax, n ,C)beta=trac (nmax, n ,D)write ( * , * ) ’ t r a c c i a d el l a matrice C ’ , a l f awrite ( * , * ) ’ t r a c c i a d el l a matrice D ’ , beta

close (10)stopend

subroutine prodmatr (nmax, n , A , B,C)implicit noneinteger nmax, n , i , j , kreal *8 A(nmax, n) , B(nmax, n) , C(nmax, n)

do i =1 ,ndo j =1 ,n

C( i , j ) = 0 . d0do k=1 ,n

C( i , j )= C( i , j ) + A( i , k ) *B( k , j )end do

end doend do

returnend

real *8 function trac (nmax, n , A)implicit noneinteger nmax, n , ireal *8 A(nmax, n)

trac =0.d0do i =1 ,n

trac=trac+ A( i , i )end doreturnend

Un esempio di file di input può essere il seguente:

192

Page 199: Calcolo Numerico

11.18. La formula dei trapezi in FORTRAN

4

1. 2. 1. 0.

0. 2. 6. 1.

0. 1. 3. -1.

0. 0. -7. 4.

0. 1. 3. 5.

2. 3. 6. 8.

9. 10. 2. 4.

5. 6. 8. 1.

dove prima scriviamo n, la dimensione delle matrici (in questo caso 4), poi gli elementi della matrice A (rigaper riga) e successivamente (abbiamo lasciato anche una riga vuota) gli elementi della matrice B .

11.18 La formula dei trapezi in FORTRAN

Proviamo a implementare la formula composta dei trapezi in FORTRAN.Scegliamo la funzione da integrare e gli estremi di integrazione e, come primo approccio, diamo in input

il numero di suddivisioni n in cui applicare la formula composta. Inoltre, per vedere se il codice lo abbiamoscritto bene, daremo anche il valore esatto dell’integrale Iex (che avremo precedentemente calcolato concarta e penna) in modo da calcolare l’errore esatto.

La funzione da approssimare, gli estremi di integrazione, il valore esatto dell’integrale saranno funzioneo variabili del programma:

dati di input:– numero di suddivisioni n– estremi di integrazione a, b

dati di output:– valore approssimato dell’integrale (usiamo per esso la variabile i tr ap)– errore esatto, che chiamiamo er r tr ap.

Il programma sarà così composto:programma principalefunction in cui scriviamo la funzione integranda.function in cui scriviamo la primitiva della funzione integranda (per calcolare il valore esattodell’integrale)function in cui applichiamo la formula semplice dei trapezi e che chiamiamo trapsemplice.

Tra i dati che ci facciamo stampare sul file di output, conviene farsi stampare una specie di promemoriasul problema che stiamo risolvendo (formula che stiamo applicando, gli estremi di integrazione a e b, ilvalore esatto dell’integrale Iex e, come stringa di caratteri, anche quale è la funzione integranda). In talmodo abbiamo “memoria” del problema che vogliamo risolvere e dei risultati ad esso associati.

Applichiamo la formula dei trapezi su ciascun intervallino. La prima volta andrà applicata sull’intervallo[a, a +h], poi su [a +h, a + 2h] e così via, dove h è l’ampiezza dei singoli sottointervalli, che è la stessa su

tutti i sottointervalli avendo scelto di suddividere in parti uguali l’intervallo [a,b], quindi h = b °an

. Su ogni

sottointervallo possiamo applicare la formula semplice dei trapezi in modo da avere il valore finale dell’inte-grale approssimato come somma dei contributi su ciascun sottointervallo. A tal scopo useremo, su ciascunsottointervallo, una function che applica la formula semplice dei trapezi.

Possiamo quindi fare un ciclo do in modo da applicare la formula semplice all’intervallino [x0, x1], do-ve x0 rappresenta l’estremo inferiore e x1 l’estremo superiore di ciascun sottointervallo. Ogni volta aggior-neremo in maniera appropriata i due estremi (tenendo conto che x1 nell’intervallo successivo diventa x0:l’estremo superiore di ogni intervallino diventa l’estremo inferiore nell’intervallino successivo).

193

Page 200: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

Scriviamo sotto forma di pseudocodice, quello che dobbiamo fare:Dati di input: a, b, nDati di output: i tr ap, er r tr ap

1 h √° (b °a)/n ;2 calcolare Iex ;3 inizializzare i tr ap: i tr ap √° 0.d0 ;4 inizializzare x0 del primo sottointervallo x0 √° a ;5 Per i = 1,n6 assegnare il valore di x1: x1 √° x0+h ;7 applicare la formula dei trapezi sull’intervallino i -simo e sommare il contributo al valore i tr ap:

i tr ap √° i tr ap + tr apsempl i ce(x0, x1) ;8 aggiornare x0: x0 √° x1 ;9 Fine-Per

10 stampare l’integrale approssimato i tr ap ;11 calcolare e stampare l’errore esatto er r tr ap ;

Per le functions da scrivere, si deve tener conto che, per la funzione integranda, la function da utilizzare èmolto semplice: basta scrivere la funzione integranda.

Per esempio, per calcolare l’integraleR0.5

p1°x2

, f (x) = ºp

1°x2. Per scrivere º in Fortran, basta

ricordare che º= 2arcsin(1). Allora la function diventa:

real *8 function fun ( x )implicit nonereal *8 x , pipi =2* asin ( 1 . )fun= pi / sqrt ( 1 . 0 d0 ° x * * 2 )returnend

Per il calcolo del valore esatto dell’integrale, dobbiamo calcolare analiticamente l’integrale (faremo degliesempi di applicazione delle formule di quadratura con integrali di cui è possibile conoscere l’integrale esatto,quindi preliminarmente, avremo calcolato a mano l’integrale, andando a cercare una primitiva della funzio-ne integranda). Conviene allora utilizzare una function per la primitiva, in modo da poter assegnare il valo-re esatto dell’integrale mediante l’istruzione Iex = F pr i m(b)°F pr i m(a), dove F pr i m è il nome dato allafunction della primitiva. Nell’esempio, F pr i m(x) =ºarcsin(x) e la function viene costruita di conseguenza.

real *8 function Fprim ( x )real *8 pi , xpi =2.* asin ( 1 . )Fprim= pi * asin ( x )returnend

Invece, la function trapsemplice non è nient’altro che l’applicazione della formula semplice dei trapezisull’intervallo di estremi x0 e x1 dati in input alla function stessa. All’interno della trapsemplice vienechiamata la function della funzione integranda.

real *8 function trapsemplice ( a , b)real *8 a , b , funtrapsemplice =(b°a ) / 2 . * ( fun ( a)+ fun (b ) )returnend

Proviamo ora ad applicare la formula composta dei trapezi partendo da una sola suddivisione n = 1, e poiraddoppiando ogni volta il numero delle suddivisioni: n = 2, n = 4, n = 8, . . . In tal caso conviene modificareil programma scritto per applicare la formula composta dei trapezi per tute le suddivisioni richieste introdu-cendo un ciclo do while che permette di calcolare la formula composta dei trapezi prima per n = 1, poi

194

Page 201: Calcolo Numerico

11.19. Esercizi

per n = 2 e così via, raddoppiando ogni volta il numero di suddivisioni. In questo modo, conservando i valoridell’errore esatto tra due suddivisioni successive, possiamo calcolare il rapporto tra l’errore alla suddivisionen/2 e l’errore alla suddivisione n. Memorizziamo questo rapporto nella variabile r ate e la stampiamo per

ogni suddivisione n > 1. Dai risultati saremo in grado di capire se l’errore decresce come1

n2 oppure no e,

quindi, se sono verificate le ipotesi per la formula composta dell’errore come descritto a pag. 130.Per esempio, se vogliamo applicare la formula dei trapezi per n = 1,2,4,8, . . . ,128 sotto forma di pseudo-

codice, abbiamoDati di input: a, bDati di output: i tr ap, er r tr ap, r ate per ogni suddivisione

1 n √° 1 ;2 Fintantochè n < 1283 inizializzare i tr ap: i tr ap √° 0.d0 ;4 porre h √° (b °a)/n5 ; inizializzare x0 del primo sottointervallo: x0 √° a ;6 applicare l’algoritmo della formula composta dei trapezi ;7 stampare i tr ap per quel valore di n ;8 calcolare l’errore esatto er r tr ap ;9 Se n > 1 allora

10 calcolare il rapporto r ate tra l’errore al passo n/2 e l’errore al passo n11 altrimenti12 r ate √° 1 (non ha significato per n = 1)13 Fine-Se14 stampare n, i tr ap, er r tr ap, r ate ;15 aggiornare una variabile er r tr apol d che memorizza l’errore al passo precedente:

er r tr apol d √° er r tr ap ;16 aggiornare n: n √° 2n ;17 Fine-Fintantochè

11.19 Esercizi

Esercizio 11.19.1 Scrivere un programma FORTRAN che, assegnate due matrici A e B di dimensione n∑ 30,esegua il prodotto C=AB; memorizzi in un vettore x gli elementi della diagonale principale di C; calcoli lanorma euclidea di x.I dati di input siano letti da un file chiamato input.dat.Scrivere, perciò, un programma che:

a) legge la dimensione n, le matrici A e B e stampa i dati letti con commento;b) calcola la matrice C=AB servendosi della subroutine MATRMATR;c) salva gli elementi Ci i in un vettore chiamato x;d) calcola la norma euclidea di x servendosi della function NORMAEUC;e) stampa la norma euclidea di x.

(mettere a punto la subroutine MATRMATR e la function NORMAEUC.)

Svolgimento

program prodottomatriciimplicit noneinteger nmaxparameter (nmax=30)

195

Page 202: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

integer n , i , jreal *8 A(nmax,nmax) ,B(nmax,nmax) , C(nmax,nmax) , x (nmax)real *8 normaeuc , euc

open(20 , f i l e = ’ input . dat ’ )open(21 , f i l e = ’ output . dat ’ )read ( 2 0 , * ) nwrite ( 2 1 , * ) ’ dimensione n ’ , nwrite ( 2 1 , * ) ’ matrice A’do i =1 ,n

read ( 2 0 , * ) (A( i , j ) , j =1 ,n)write ( 2 1 , * ) (A( i , j ) , j =1 ,n)

end dowrite ( 2 1 , * ) ’ matrice B’do i =1 ,n

read ( 2 0 , * ) (B( i , j ) , j =1 ,n)write ( 2 1 , * ) (B( i , j ) , j =1 ,n)

end doc a l l matrmatr (nmax, n , A , B,C)do i =1 ,n

x ( i )= C( i , i )end doeuc=normaeuc(n , x )write ( 2 1 , * ) ’norma euclidea di x ’ , eucstopend

subroutine matrmatr (nmax, n , A , B,C)implicit noneinteger nmax, n , i , j , kreal *8 A(nmax, n) , B(nmax, n) , C(nmax, n)do i =1 ,n

do j =1 ,nC( i , j )= 0 . d0do k=1 ,n

C( i , j )= C( i , j ) + A( i , k ) *B( k , j )end do

end doend doreturnend

real *8 function normaeuc(n , x )implicit noneinteger n , ireal *8 x (n)normaeuc=0.d0do i =1 ,n

normaeuc= normaeuc + x ( i ) * * 2end donormaeuc= sqrt (normaeuc)returnend

196

Page 203: Calcolo Numerico

11.19. Esercizi

Esercizio 11.19.2 Si vuole ricavare un’approssimazione della soluzione del sistema lineare Ax = beffettuando un passo del metodo del gradiente coniugato, secondo il quale

x1 = x0 +Æ0r0dove

Æ0 =rT

0 r0

rT0 Ar0

e r0 = b° Ax0.

Il vettore x0 sia scelto come x0 = D°1b dove D è la matrice diagonale che si ricava da A prendendo glielementi della sua diagonale principale.Scrivere quindi un programma in linguaggio FORTRAN che:

1. legge n, A e b;2. costruisce la matrice diagonale D;3. costruisce la matrice I NV D, che è la matrice inversa di D;4. calcola il vettore x0 = D°1b utilizzando la subroutine DIAGMAT che effettua il prodotto di una

matrice diagonale con un vettore.5. calcola y = Ax0 utilizzando la subroutine MATRVETT che fa il prodotto matrice vettore;6. calcola il vettore r0 = b°y;7. calcola il prodotto z = Ar0 utilizzando la subroutine MATRVETT;8. calcola d = rT

0 r0 usando la function PSCAL che effettua il prodotto scalare tra due vettori;9. calcola t = rT

0 z usando la function PSCAL;10. calcola Æ0 = d/t11. calcola e stampa x1 = x0 +Æ0r0.

Svolgimento Osserviamo che la matrice diagonale D ha tutti gli elementi uguali a zero eccetto quellidella diagonale principale, che nell’esercizio proposto, devono essere uguali agli elementi della diagonaleprincipale di A. Per risolvere l’esercizio, si può costruire la matrice D mediante le istruzioni

do i =1 ,ndo j =1 ,n

D( i , j )=0.0i f ( i . eq . j ) then

D( i , j )=A( i , j )end i f

end doend do

Oppure, si può costruire un vettore che rappresenta la diagonale principale della matrice A. Nellosvolgimento, noi seguiamo questa seconda strada e ne terremo conto nelle subroutine INVD e DIAGMAT.

program esgradconimplicit noneinteger nmaxparameter (nmax=40)integer n , i , jreal *8 A(nmax,nmax) , b(nmax) , matrd (nmax) , x0 (nmax) , r0 (nmax)real *8 y (nmax) , x1 (nmax) , inversad (nmax) , z (nmax)real *8 d , t , a l fa , pscal

C matrd e ’ i l v e t t o r e che contiene g l i elementi del la diagonale principale di A

open(10 , f i l e = ’ input . dat ’ )read ( 1 0 , * ) ndo i =1 ,n

read ( 1 0 , * ) (A( i , j ) , j =1 ,n)

197

Page 204: Calcolo Numerico

11. INTRODUZIONE AL FORTRAN 77

end doread ( 1 0 , * ) (b( i ) , i =1 ,n)do i =1 ,n

matrd ( i )= A( i , i )end doc a l l invd (n , matrd , inversad )c a l l diagmat (n , inversad , b , x0 )c a l l matrvett (nmax, n , A , x0 , y )do i =1 ,n

r0 ( i )=b( i )°y ( i )end doc a l l matrvett (nmax, n , A , r0 , z )d=pscal (n , r0 , r0 )t =pscal (n , r0 , z )a l f a =d/ tdo i =1 ,n

x1 ( i )= x0 ( i )+ a l f a * r0 ( i )write ( * , * ) x1 ( i )

end dostopend

subroutine invd (n , d , dd)implicit noneinteger n , ireal *8 d(n) , dd(n)do i =1 ,n

dd( i ) = 1 . /d( i )end doreturnend

subroutine diagmat (n , dd , b , x )implicit noneinteger n , ireal *8 b(n) , dd(n) , x (n)do i =1 ,n

x ( i )= dd( i ) * b( i )end doreturnend

subroutine matrvett (nmax, n , A , x , y )implicit noneinteger nmax, n , i , jreal *8 A(nmax, n) , x (n) , y (n)do i =1 ,n

y ( i ) = 0 . d0do j =1 ,n

y ( i )=y ( i )+A( i , j ) * x ( j )end do

end doreturnend

real *8 function pscal (n , x , y )

198

Page 205: Calcolo Numerico

11.19. Esercizi

implicit noneinteger n , ireal *8 x (n) , y (n)pscal =0.d0do i =1 ,n

pscal=pscal + x ( i ) * y ( i )end doreturnend

199

Page 206: Calcolo Numerico
Page 207: Calcolo Numerico

AP

PE

ND

IC

E ACENNI SU GNUPLOT

Il matematico sbircia dietro le spalledi Dio per trasmettere la bellezzadella Sua creazione al resto delle Suecreature.

Paul Erdös

A.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201A.2 Grafici di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201A.3 Salvare i grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205A.4 Grafici da files di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206A.5 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208A.6 Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

A.1 Introduzione

Gnuplot è un programma utile per fare grafici (sia di funzioni, sia di dati), distribuito gratuitamente persistemi operativi Linux, Windows, e altri ancora.

Nel seguito vedremo alcuni comandi essenziali di Gnuplot al fine di poter visualizzare funzioni che di-pendono da una sola variabile e creare grafici da tabelle di dati. Le potenzialità di Gnuplot sono molto di piùdi quanto diremo e, per chi è interessato, si rimanda al sito http://www.gnuplot.info.

Ci rifacciamo alla versione 4.4 patchlevel 0, ultima modifica Marzo 2010, in ambiente Linux.Per poter lavorare in ambiente Gnuplot, da una finestra di shell digitiamo gnuplot e poi clicchiamo il

tasto di invio. L’ambiente gnuplot si presenta come nella Figura A.1Per uscire dall’ambiente gnuplot, si digita exit. Per avere un help on-line si digita help.Tutte le istruzioni per fare e salvare grafici, si basano su comandi scritti sulla finestra del gnuplot. Si pos-

sono anche scrivere piú istruzioni da eseguire in un file script che viene poi lanciato in ambiente gnuplot(vedremo successivamente come).

A.2 Grafici di funzioni

Per fare il grafico di una funzione, basta scrivere il comandoplot [a:b] f(x)

201

Page 208: Calcolo Numerico

A. CENNI SU GNUPLOT

Figura A.1: Ambiente gnuplot

Figura A.2: Finestra di shell dove si sta lavorando in ambiente gnuplot e grafico della funzione cos(x)nell’intervallo [°º,º].

dove, al posto di a e b scriviamo i valori numerici degli estremi dell’intervallo in cui vogliamo visualizzarela funzione f(x). La funzione f(x) si scrive usando le stesse notazioni del Fortran. Dopo aver scritto ilcomando precedente e cliccato il tasto di invio, si apre una finestra con il grafico della funzione, come si puòvedere nella Figura A.2.

Se si scrive semplicemente plot f(x) il grafico è fatto sull’intervallo [°10,10].Vediamo degli esempi

plot [-pi: pi] cos(x) : fa il grafico della funzione cos(x) nell’intervallo [°º,º]. Osserviamo

202

Page 209: Calcolo Numerico

A.2. Grafici di funzioni

Figura A.3: Istruzione: plot sin(x) with points pt 5

che pi ha il significato di º.plot x**2 -2*x+1: fa il grafico della parabola x2 ° 2x + 1 nell’intervallo [°10,10] (non essendo

stato specificato).plot [0:3] log(x): fa il grafico della funzione ln(x) nell’intervallo [0,3]

Ogni volta, il grafico viene sovrascritto, perdendo quello precedente.Per fare il grafico di più funzioni definite nello stesso intervallo, sulla stessa figura, basta scrivere le diverse

funzioni seguite da una virgola: plot [a:b], f(x), g(x), h(x)

plot [-pi:pi] sin(x), cos(x): abbiamo i grafici delle due funzioni seno e coseno in due coloridiversi. La legenda, in alto a destra, spiega le diverse funzioni del grafico.plot x, x**2, x**3: abbiamo i grafici delle funzioni x, x2 e x3 nell’intervallo [°10,10].

È possibile cambiare lo stile del grafico (linee continue, punti, linee e punti), con il seguente coman-do: plot [a:b] f(x) with <stile> dove <stile> può essere: lines, points, linespoints, dots. Si puòanche cambiare il colore (e, in alcune modalità, il tipo della linea o del punto) usando il comando with

<stile> lt <numero> dove <numero> può variare nell’insieme {°1,0,1, . . .22}. Si provi a eseguire ilcomando test e vedere il grafico che viene prodotto per vedere i vari colori e stili.

Per esempio:plot sin(x) with linespoints, cos(x) with points produce un grafico in cui sin(x) èrappresentata mediante linee e punti e cos(x) tramite punti (che possono essere date dal simbolo +o da un quadratino pieno a seconda dello spessore richiesto).plot sin(x) with lines lt -1 produce un grafico con la linea di colore nero.

Si può variare lo spessore delle linee e dei punti mediante i comandi linewidth (o, in maniera del tuttoequivalente, lw) e pointtype (o pt) rispettivamente. Vediamo con degli esempi:

plot sin(x) with points pt 5: i punti hanno dimensione 5 pt (si veda la Figura A.3).plot sin(x) with lines lw 2: la linea ha un’ampiezza pari 2 volte quella di default (si veda laFigura A.4).plot sin(x) with linespoints lw 2 pt 5 : la linea è larga 2 lw mentre i punti hannodimensione 5 pt (si veda la Figura A.5).

Per fare un grafico semilogaritmico o logaritmico, prima di fare il grafico, si digita il comandoset logscale: per avere un grafico logaritmicoset logscale y: per avere un grafico semilogaritmico lungo l’asse y .set logscale x: per avere un grafico semilogaritmico lungo l’asse x.

203

Page 210: Calcolo Numerico

A. CENNI SU GNUPLOT

Figura A.4: Istruzione: plot sin(x) with lines lw 2

Figura A.5: Istruzione: plot sin(x) with linespoints lw 2 pt 5

204

Page 211: Calcolo Numerico

A.3. Salvare i grafici

Dopo si scrive la funzione di cui fare il grafico in scala logaritmica (o semilogaritmica), mediante il comandoplot.

Vediamo un esempio:set logscale y

plot [0.1:10] x**2

Per uscire dalla scala logaritmica, basta scrivere il comando unset logscale.A volte può essere utile un grafico che abbia la stessa scala lungo l’asse x e y . Il comando da utilizzare è il

seguente:set size ratio -1

Altri comandi utili sono i seguenti:Per mettere un’etichetta sull’asse delle x o delle y , si scrive il comandoset xlabel "nome da mettere su asse x"

dove tra apici si scrive l’etichetta dell’asse delle x. Se il grafico è stato già fatto, si digita il comandoreplot. Analogamente, per scrivere un’etichetta sull’asse delle y si usaset ylabel "nome da mettere su assse y"

Si può cambiare il tipo di formato con cui sono rappresentati i numeri sull’asse delle ascisse o delleordinate. Il caso interessante da vedere si ha quando si hanno grafici semilogaritmi e si vuole usare unascala esponenziale per visualizzare l’asse delle y . Un esempio è:set format y "%4.2e"

Si ha una rappresentazione in formato esponenziale con due cifre nella mantissa e una lunghezza totaledel numero pari a quattro: per esempio 1.00e-11.

A.3 Salvare i grafici

Per conservare un grafico, ad esempio, in formato .gif, dobbiamo cambiare la modalità del terminale. Pervedere come è impostato il terminale nel modo default, si digita l’istruzioneshow terminal.

Come risposta si può avereterminal type is wxt 0.

Fatta questa premessa (utile per ritornare a fare i grafici senza salvarli su file) si scrivono i seguenticomandi:

set terminal gif

set output "prova.gif"

plot sin(x)

Il grafico di sin(x) viene creato e salvato direttamente sul file prova.gif nella directory in cui è stato apertoil programma gnuplot. Se si vuole salvare un grafico in un file .jpeg (o .png o .pdf), si sostituisce gif con jpeg(o png o pdf) nei comandi precedenti1 (si veda la Figura A.6 per un esempio di grafico salvato come .png). Adesempio

set terminal png

set output "prova.png"

plot sin(x)

Se è stato già creato un grafico, si può usare il comando replot per salvarlo su file:

plot sin(x)

set terminal gif

set output "prova.gif"

replot

Per ritornare nella modalità di terminale di default si scriveset terminal wxt 0

1 Osserviamo che, dopo l’istruzione set terminal gif o set terminal jpeg, sulla riga dei comandi di gnuplot viene la-sciato un messaggio con le possibili opzioni che possono essere usate. Ignoriamo questo messaggio, perchè vogliamo usare gnuplot nelmodo più semplice possibile.

205

Page 212: Calcolo Numerico

A. CENNI SU GNUPLOT

Figura A.6: Il grafico salvato come file prova.png

A.4 Grafici da files di dati

A volte c’è bisogno di fare grafici da tabelli di dati (per esempio da files di output generati da programmiFortran).

Vediamo con degli esempio come creare tali grafici. Supponiamo che nel file dati.dat ci siano duecolonne corrispondenti ai valori sull’asse delle x e delle y , rispettivamente, che vogliamo mettere in grafico.

Il file dati.dat sia il seguente:

1.0000 1.5403

2.0000 3.5839

3.0000 8.0100

4.0000 15.3464

5.0000 25.2837

6.0000 36.9602

7.0000 49.7539

8.0000 63.8545

9.0000 80.0889

10.0000 99.1609

Per fare il grafico, dobbiamo caricare il file nell’ambiente gnuplot e far capire che la prima colonnacorrisponde ai valori da mettere sull’asse delle x e la seconda ai valori da mettere sull’asse delle y .

Sia il file dati.dat nella directory in cui viene lanciato il programma gnuplot. In ambiente gnuplot sidigita il comando:plot �dati.dat�

e viene creato il grafico per punti. Se si vuole un grafico per linee o per linee e punti basta scrivereplot �dati.dat�with lines

oppureplot ’dati.dat’ with linespoints. Osserviamo che sul grafico, la legenda mostra il nome del file

206

Page 213: Calcolo Numerico

A.4. Grafici da files di dati

Figura A.7: Grafico del file dati.dat

(nel nostro caso ’dati.dat’). Se vogliamo cambiare, si usa il comando title nel modo seguente:plot �dati.dat� title "nuova legenda"

dove la nuova legenda è scritta tra doppi apici. Il comando title si può usare anche per i grafici di funzioni.Si può lavorare sul grafico così come è stato visto per le funzioni. Se si vuole un grafico semilogaritmico

o logaritmico, prima dell’istruzione plot si scrivono i comandi che abbiamo visto, set logscale ...

Analogamente a quanto visto nella Sezione precedente, si può salvare il grafico su file.Se sul file di dati sono scritti dei commenti, le righe devono essere precedute dal simbolo cancelletto #.Se abbiamo dati salvati su più files, da inserire nello stesso grafico, si opera nel modo seguente. Suppo-

niamo di avere i due files dati1.dat e dati2.dat. Il comando (base) in ambiente gnuplot da lanciare è:plot �dati1.dat�, �dati2.dat�.

Per specificare il tipo di linea, la legenda (e tutto quello che abbiamo già visto per un grafico), bastainserire le istruzioni che servono relativamente a ciascuna curva. Per esempio:

plot ’dati.dat’ with linespoints lw2 title "curva 1", \

’dati2.dat’ with lines lw2 title "curva 2"

Osserviamo che, essendo l’istruzione molto lunga, siamo andati a capo, mediante l’uso del backslash \Si possono avere files in cui abbiamo più colonne di dati, la prima che corrisponde ai valori dell’asse x e

le successive colonne da mettere sull’asse y .Sia dato, ad esempio, il file multi.dat:

# x y z

# sin(x) cos(x)

0.00000 0.00000 1.00000

0.31416 0.30902 0.95106

0.62832 0.58779 0.80902

0.94248 0.80902 0.58779

1.25664 0.95106 0.30902

1.57080 1.00000 0.00000

207

Page 214: Calcolo Numerico

A. CENNI SU GNUPLOT

Figura A.8: Grafico del file multi.dat mediante le istruzioni che personalizzano la legenda.

1.88496 0.95106 -0.30902

2.19911 0.80902 -0.58779

2.51327 0.58779 -0.80902

2.82743 0.30902 -0.95106

3.14159 0.00000 -1.00000

Si può procedere in vari modi:plot �multi.dat� using 1:2, �multi.dat� using 1:3

Produce un grafico con le due curve di diverso colore, prodotte utilizzando punti. La legenda dàmulti.dat using 1:2 per la prima curva e multi.dat using 1:3 per la seconda curva.plot �multi.dat� using 1:2 with linespoints, �multi.dat� using 1:3 with

lines

Con questo comando specifichiamo il tipo di curva.plot ’multi.dat’ using 1:2 with linespoints title "valori y", \

’multi.dat’ using 1:3 with lines title "valori z"

Cambiamo la legenda per ogni curva. Nella Figura A.8 si può osservare il grafico risultante.

A.5 Script

A volte, specie se le figure devono essere salvate in un file, conviene scrivere tutte le istruzioni in unoscript, cioè in un file in cui le righe di commento sono precedute dal simbolo # mentre sulle altre righescriviamo i comandi che vanno eseguiti in ambiente gnuplot.

Ad esempio, scriviamo (con un editor che salva in formato testo – lo stesso che usiamo per scrivere iprogrammi Fortran) il file istr.gnu (possiamo dare anche un’altra estensione che ci ricordi gnuplot, peresempio istr.gp):

set logscale y

set terminal jpeg

208

Page 215: Calcolo Numerico

A.6. Print

set output "logfig.jpeg"

plot [1:20] exp(2)*(1/x)**2

Oppure scriviamo il file istr2.gnu:

set terminal jpeg

set output "fileprova.jpeg"

plot ’multi.dat’ using 1:2 with lines lw 2 title "y", \

’multi.dat’ using 1:3 with lines lw 2 title "z"

Un modo per eseguire queste istruzioni è scrivere, da una finestra di shell (non in ambiente gnuplot):gnuplot istr.gnu

In tal modo gnuplot esegue solamente le istruzioni contenute nello script istr.gnu, e, una volta ese-guite, si è di nuovo nella finestra di shell (non si possono eseguire altri comandi perchè noi non entriamonell’ambiente gnuplot).

Perciò questo modo di eseguire uno script è utile per generare dei files (.jpeg, .gif, .png). Se invece voglia-mo generare dei grafici su terminale e vogliamo avere il tempo di osservarli, non conviene usare il comandognuplot istr.gnu perchè non riusciremmo a vedere niente. Invece, in ambiente gnuplot, si può digitareil comandoload ’istr.gnu’

Vengono eseguite le istruzioni dello script ma si rimane in ambiente gnuplot. Bisogna dunque stare attenti alfatto che non vediamo le istruzioni eseguite e che alcuni parametri, se sono stati posti in un certo all’internodello script potrebbero creare problemi (per esempio abbiamo messo la scala logaritmica e non l’abbiamotolta).

I due files precedenti vanno bene se eseguiti con il comando gnuplot da una finestra di shell, mentre èmeglio modificarli se si vuole eseguirli mediante il comando load, aggiungendo le seguenti ultime 2 righeper evitare di fare altri grafici in scala semilogaritmica e di sovrascriverli sul file di output:

set logscale y

set terminal jpeg

set output "logfig.jpeg"

plot [1:20] exp(2)*(1/x)**2

unset logscale

set terminal wxt 0

Un’ultima osservazione riguarda l’uso degli apici nei comandi descritti precedentemente: usare il sim-bolo 'o il simbolo "può essere usato indifferentemente là dove abbiamo usato l’uno o l’altro nei comandi diprima (nomi dei files di dati, legende, titoli,...).

A.6 Print

Gnuplot può essere usato anche come una calcolatrice: basta scrivere print seguito dalla formula davalutare.

Esempiprint cos(pi)

produce il risultato -1.0

print exp(-5)

dà 0.00673794699908547

print 3.4**2 +log(3) - 4*20*7.6

fornisce -595.341387711332

209

Page 216: Calcolo Numerico
Page 217: Calcolo Numerico

BIBLIOGRAFIA

[1] ASCHER, U. M. e GREIF, C. (2007), A First Course on Numerical Methods.

[2] BJÖRK, A. e DAHLQUIST, G. (2008), Numerical Methods in Scientific Computing, Volume II, Siam.

[3] BURDEN, R. L. e FAIRES, J. D. (2004), Numerical Analysis, Brooks-Cole Publishing.

[4] DAHLQUIST, G. e BJÖRK, A. (2006), Numerical Methods in Scientific Computing, Volume I, Siam.

[5] GAMBOLATI, G. (1994), Lezioni di Metodi Numerici, Cortina, Padova.

[6] GAUTSCHI, W. (1997), Numerical Analysis: An Introduction, Birkäuser, Boston.

[7] GIANGRANDI, P. (2010), Dispense del corso di Storia dell’Informatica, Università degli Studi di Udine,Italia.

[8] GIANGRANDI, P. (ultima visita: febbraio 2012), Museo on line - Breve storia degli Strumenti di Calcolo,Tecnoteca, http://www.tecnoteca.it/museo/.

[9] KEISLER, H. J. (2009), Elementary Calculus, An Infinitesimal Approach, Creative Commons AttributionNon-Commercial-ShareAlike License, http://www.math.wisc.edu/~Keisler/calc.html.

[10] MOORE, H. (2008), MATLAB® per l’ingegneria, Pearson Prentice Hall, Italy.

[11] O’CONNOR, J. e ROBERTSON, E. F. (ultima visita: febbraio 2012), The MacTutor History of Mathematicsarchive, University of St Andrews Scotland, http://www-gap-dcs.st-and.ac.uk/~history/.

[12] SARTORETTO, F. e PUTTI, M. (2008), Introduzione alla Programmazione per Elaborazioni Numeriche.,Edizioni Libreria Progetto, Padova.

[13] STRANG, G. (1991), Calculus, Wellesley-Cambridge Press.

[14] SWADE, D. (ultima visita: febbraio 2012), The Babbage Engine, Computer History Museum, MountainView, CA, http://www.computerhistory.org/babbage.

211