Sei sulla pagina 1di 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
Annamaria Mazzia: Appunti di Calcolo Numerico,
Dipartimento di Ingegneria Civile Edile e Ambientale
Universit degli Studi di Padova
VERSIONE A.A. 2011/2012 .
SITO DELLE DISPENSE:
http://dispense.dmsa.unipd.it/
E-MAIL:
mazzia@dmsa.unipd.it
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 letimologia 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, utilizzavano
pietruzze al posto di cifre aritmetiche. (denizione tratta dal Vocabolario Etimologico della Lingua Italiana di
O. Pianigiani http://www.etimo.it)
INDICE
Indice iii
1 Struttura dellelaboratore 1
1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 La preistoria del computer: Babbage e Lovelace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Gli albori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Architettura del Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Software e Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5.1 Per capire meglio il sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Il le system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7 Un po di storia sui sistemi operativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.8 Lavorare in ambiente Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.9 Editor di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 Richiami di analisi 13
2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Identit trigonometriche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Regole su funzione esponenziale e logaritmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 Derivate e integrali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5 Teoremi utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Rappresentazione dei numeri nel calcolatore 19
3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Aritmetica di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Conversione di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4 Rappresentazione IEEE dei numeri di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.5 Precisione numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.6 Propagazione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.7 Instabilit e malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7.1 Instabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7.2 Malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4 Zeri di funzione 37
4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2 Metodo delle Bisezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3 Metodo del Punto Fisso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.4 Il Metodo di Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5 Convergenza di un metodo iterativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.6 Complessit computazionale di uno schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.7 Il metodo delle secanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.8 Confronto tra i metodi di Newton-Raphson e la Regula Falsi . . . . . . . . . . . . . . . . . . . . . 50
4.9 Metodo di Newton-Raphson per radici multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
iii
INDICE
4.10 Controllo sugli scarti e graci di convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.11 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5 Interpolazione 61
5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3 Interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.1 Funzioni base monomiali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.2 Polinomi di Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.3 Formula dellerrore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.4 Differenze divise e formula di Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.4 Considerazioni sullinterpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4.1 Fenomeno di Runge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4.2 Malcondizionamento nellinterpolazione con funzioni base monomiali . . . . . . . . . 72
5.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6 Approssimazione 77
6.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2 Retta di regressione lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.3 Approssimazione polinomiale ai minimi quadrati . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.4 Approssimazioni di tipo esponenziale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
7 Metodi diretti per la soluzione di sistemi lineari 85
7.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.2 Elementi di Algebra Lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.3 Metodo di eliminazione di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.3.1 Sostituzione allindietro e in avanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.3.2 Eliminazione di Gauss: esempio particolare . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.3.3 Eliminazione di Gauss: caso generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
7.4 Strategie di pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.5 Fattorizzazione triangolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.5.1 Fattorizzazione LDU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.5.2 Fattorizzazione di Gauss senza pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
7.5.3 Fattorizzazione di Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
8 Metodi Iterativi per la soluzione di sistemi lineari 105
8.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.2 Metodi iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.3 Norme di vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.4 Norme di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.5 Autovalori e autovettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
8.6 Metodi classici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.6.1 Convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.6.2 Controllo della convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.6.3 I metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.6.4 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassamento . . . . . . . . . . . . . . . 117
8.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
9 Integrazione numerica 123
9.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
9.2 Formula dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
iv
Indice
9.3 Formule di Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.3.1 Formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.3.2 Sullerrore della formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . 129
9.4 Formule composte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.4.1 Formula composta dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson . . . . . . . . . . . . . . . . . 134
9.5 Estrapolazione di Richardson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
9.6 Approssimazione di Romberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.7 Introduzione alle formule di quadratura di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
9.7.1 Propriet delle formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.7.2 Formule di Gauss-Legendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
9.7.3 Altre formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
9.7.4 Applicazione delle formule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
9.7.5 Sulla funzione peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
9.8 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
10 Equazioni alle derivate ordinarie 147
10.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.2 Sulle equazioni differenziali ordinarie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.3 Metodo di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.4 Metodo di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.5 Metodo di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
10.6 Studio dellerrore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
10.7 Errori di troncamento locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
10.8 Convergenza e stabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.8.1 Convergenza di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.8.2 Stabilit di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.8.3 Convergenza di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.8.4 Stabilit di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10.8.5 Convergenza di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10.8.6 Stabilit di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.8.7 Sulla stabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
11 Introduzione al FORTRAN77 161
11.1 Introduzione alla programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
11.2 FORTRAN: FORmula TRANslator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
11.3 Problemi e Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
11.4 Elementi di un linguaggio di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
11.5 Prime regole sul FORTRAN77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
11.6 Le variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
11.7 I tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
11.8 Espressioni aritmetiche e funzioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
11.9 I predicati elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
11.10Struttura alternativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
11.11Programma sul metodo di punto sso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
11.12I sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
11.12.1 Le functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
11.12.2 Le subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
11.13Il formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
11.14Files di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
11.15Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
11.16Ciclo do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
v
INDICE
11.16.1 I vettori nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
11.16.2 Leggere i dati di input da le . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
11.17Matrici in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.17.1 Le matrici nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
11.17.2 Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.17.3 Memorizzazione delle matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.17.4 Un programma di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.18La formula dei trapezi in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
11.19Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
A Cenni su Gnuplot 201
A.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
A.2 Graci di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
A.3 Salvare i graci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
A.4 Graci da les di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
A.5 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
A.6 Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Bibliograa 211
vi
C
A
P
I
T
O
L
O
1
STRUTTURA DELLELABORATORE
I computer sono incredibilmente
veloci, accurati e stupidi. Gli uomini
sono incredibilmente lenti,
inaccurati e intelligenti. Linsieme
dei due costituisce una forza
incalcolabile.
Albert Einstein
1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 La preistoria del computer: Babbage e Lovelace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Gli albori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Architettura del Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Software e Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5.1 Per capire meglio il sistema operativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Il le system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7 Un po di storia sui sistemi operativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.8 Lavorare in ambiente Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.9 Editor di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.1 Introduzione
Se dobbiamo comprare un computer, abbiamo solo limbarazzo della scelta tra i tanti disponibili sul
mercato. 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 signicano esattamente? E, prima ancora, cosa signica
Computer?
1
1. STRUTTURA DELLELABORATORE
Figura 1.1: Stralci di volantini pubblicitari per lacquisto di un computer.
Denizione 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 computer
elettronico: utilizza componenti elettroniche per elaborare le informazioni
digitale: 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 denisce hardware la struttura sica del computer cio i i suoi componenti elettronici e i dispositivi Hardware
sici che lo compongono.
Si chiama, invece, software linsieme delle istruzioni (i programmi) che consentono allhardware di Software
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, fotograe) in modo da ottenere in-
formazioni (lettere, tabelle, risultati di procedimenti numerici. . . ). Alcune di queste informazioni possono
diventare 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, dallin-
gegneria ai trasporti, dalla comunicazione allarchitettura... Furono scoperti nuovi materiali, la forza animale
fu sostituita dalla forza motrice, le navi a vapore iniziarono a competere con quelle a vela, la rete ferroviaria
si 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 il
calcolo si basava su tavole di calcolo per eseguire i calcoli meno banali. Tuttavia, si sa, gli uomini possono
sbagliare e il timore che su quelle tavole ci fossero degli errori era giusticato: un errore non trovato poteva
diventare un disastro nelle numerose applicazioni in cui le tavole di calcolo venivano usate!
Gi nel 1812 Charles Babbage
1
era consapevole dellinaccuratezza dei calcoli fatti dalluomo. Nel suo Charles
Babbage
lavoro, Babbage doveva vericare lesattezza di tavole di calcolo che sarebbero state usate da banchieri come
da marinai. Le navi avrebbero identicato la loro posizione in mare mediante quelle tavole! Eliminare il
rischio dellerrore umano divenne per lui un desiderio sempre pi grande. Egli stesso scrisse che, mentre
1
Charles Babbage (1791-1871), inventore e matematico inglese, senza dubbio il primo ad avere avuto il concetto del moderno
calcolatore.
2
1.3. Gli albori
era seduto nella stanza della Societ Analitica, a Cambridge, lavorando, mezzo addormentato, su una tavola
dei logaritmi, arriv un altro membro della societ che gli chiese cosa stesse sognando. E lui rispose : Sto
pensando che tutte queste tavole riferendosi alle tavole dei logaritmi potrebbero essere calcolate da una
macchina!
Nel 1821, Babbage e il suo amico e astronomo John Herschel stanno controllando delle tabelle calcolate
a mano. Errore dopo errore, Babbage esclama : Volesse Dio che questi calcoli venissero eseguiti da una
macchina a vapore!
Il suo desiderio di creare una macchina per eseguire calcoli si concretizz in due progetti, quello della
Macchina alle Differenze e quello della Macchina Analitica
2
. La Macchina alle Differenze doveva calcolare
in modo automatico funzioni polinomiali ma non venne mai completata per il suo costo eccessivamente
elevato. 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 Lovelace
3
, glia del famoso poeta Lord Byron. Lovelace, appena dicias- Ada Lovelace
settenne, aveva parecchie conoscenze matematiche, inusuali per lepoca, e si entusiasm talmente tanto per
il progetto di Babbage, da intuire altre potenzialit della macchina stessa, come la capacit dei numeri di
poter rappresentare altre entit quali le lettere dellalfabeto o le note musicali, e che dalla manipolazione dei
numeri 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 Lovelace
appare profetica.
1.3 Gli albori
Il 1800 si chiude con una grande invenzione: nel 1896, Guglielmo Marconi inventa la radio. Il 1900 si apre
con altre importanti invenzioni: il triodo, il registratore magnetico, la televisione, no ad arrivare intorno alla
met del 1900 conil 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 dei
circuiti elettrici. Il pi noto tra gli studiosi di questa teoria fu lamericano Claude Shannon
4
. Il suo contributo
fondamentale fu quello di elaborare un metodo sistematico per progettare reti logiche capaci di eseguire le
operazioni logico-aritmetiche desiderate: detto pi semplicemente, egli mostr come trasformare una asse-
gnata operazione matematica inuncircuito elettrico costruito coninterruttori e rel di commutazione (quelli
usati 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 dellinformatica. Per prima volta
viene usato il termine bit come abbreviazione di binary digit, termine suggeritogli dal chimico e statistico J.
W. Tukey.
Il lavoro di Shannon diede lavvio allo studio delle tecniche indispensabili per progettare in modo
sistematico 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 elettronici
inizia nel 1938: il tedesco Konrad Zuse
5
costruisce Z1, una macchina costruita e pensata in maniera com-
pletamente meccanica, tutta da migliorare, ma che pu essere considerata come il primo calcolatore. Zuse
passa subito al progetto Z2, dove laritmetica meccanica sostituita da rel elettromeccanici. Linizio della
seconda guerra mondiale interrompe bruscamente il lavoro di Zuse, che viene chiamato alle armi, ma riesce
2
Osserviamo che linvenzione del telaio meccanico a schede, in cui il tipo di tessuto veniva scelto (o programmato) in base a delle
schede inserite nella macchina, un precursore del progetto di Babbage.
3
Augusta Ada Lovelace (1815-1852) fu la glia del famoso poeta Lord Byron. I genitori si separono subito dopo la sua nascita e
la bambina crebbe insieme alla madre (Lord Byron part dallInghilterra senza farvi pi ritorno e mor in Grecia quando Ada aveva otto
anni). Poich la madre era appassionata di matematica e non voleva che la glia seguisse la strada del padre, incoraggi la glia in questa
direzione, impartendole unistruzione legata alla matematica e alla musica. Nel 1835 spos William King, di dieci anni pi anziano. Nel
1838 il marito ricevette il titolo nobiliare di Conte di Lovelace. Ebbero tre gli. La Lovelace mor di cancro a soli 37 anni.
4
Claude Shannon (1916-2002) fu sico e matematico del MIT.
5
Konrad Zuse, ingegnere civile (1910-1995).
3
1. STRUTTURA DELLELABORATORE
a persuadere lIstituto di Ricerca Aerodinamica del Terzo Reich a continuare i suoi studi. Completa quindi la
costruzione dello Z2 e inizia a lavorare sullo Z3, che il primo computer che Zuse costruisce per essere usato
e non per vericare le proprie idee. Lo Z3 ha non solo lunit aritmetica ma anche la memoria realizzata con
rel elettromeccanici, ben 2600. Z3 fu la prima macchina di calcolo programmabile e venne usata dallin-
dustria aerea per risolvere sistemi di equazioni e altri sistemi matematici ricavati da problemi di vibrazione
degli apparecchi aerei messi sotto stress.
Quando Zuse propose di passare alluso di un computer basato su valvole elettroniche, la proposta fu
respinta perch i tedeschi si consideravano cos vicini alla vittoria della guerra che ulteriori sforzi nella ricerca
non apparivano necessari.
Il lavoro di Zuse, comunque, and avanti con la costruzione dello Z4, di S1 e S2. E, soprattutto, fu
completamente indipendente dai lavori di John Eckert e John Mauchly negli Stati Uniti e di A. Turing in
Inghilterra.
In Inghilterrra, Turing
6
si occup di problematiche riguardanti un macchina di calcolo digitale astratta,
con una memoria senza limiti, mentre negli USA Eckert e Mauchly
7
costruirono lENIAC (Electronic Inte-
grator and Computer). LENIAC fu costruito, con progetto di Eckert, in piena seconda guerra mondiale, a
partire dal 1943, presso il Ballistic Research Laboratory e fu completato nel febbraio del 1946. La macchina
era pensata per compiere operazioni di carattere generale, ma fu costruita con lo scopo preciso di compilare
tabelle per le traiettorie di bombe. LENIAC conteneva circa 18
.
000 valvole termoioniche e misurava circa 2
metri e mezzo di altezza per 24 metri di lunghezza! La macchina era pi di mille volte veloce di tutti i prede-
cessori elettromeccanici costruiti no a quel momento e poteva eseguire 5000 addizioni al secondo. Le sue
operazioni erano controllate da un programma che veniva inserito dallesterno mediante nastri perforati.
Intanto, nel 1944 aveva iniziato a collaborare nella costruzione dellENIAC, John von Neumann
8
. Egli si von
Neumann
accorse che larchitettura della macchina andava rivista e che la programmazione del computer mediante un
numero enorme di cavi e interruttori rendeva lenta e poco essibile la programmazione stessa. Sostenne,
quindi, che il programma non dovesse essere rigidamente predisposto nellhardware tramite interruttori e
cavi e neanche letto mediante nastri perforati, ma risiedesse in una memoria su cui poter scrivere e accedere
velocemente insieme ai dati da elaborare. Von Neumann per primo descrisse larchitettura dei calcolatori in
termini logico-funzionale, secondo uno schema astratto non legato ai dispositivi sici utilizzati per le varie
operazioni. E il suo schema, sostanzialmente invariato, larchitettura adottata dai calcolatori dei nostri
giorni!
Prima di von Neumann, il calcolatore veniva controllato mediante programmi non modicabili, registrati
su nastro perforato o cablati in una congurazione di cavetti e interruttori. Con von Neumann si presenta
unarchitettura di riferimento precisa.
Il primo calcolatore costruito seguendo larchitettura di von Neumann entr in funzione nel 1948
allUniversit 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 svolgere
risiedono nella memoria del calcolatore insieme ai dati e possono essere modicati dinamicamente nel corso
dellelaborazione.
Dal 1948 no ai nostri giorni, lo sviluppo dei calcolatori elettronici ha avuto ritmi esponenziali: linven-
zione del circuito integrato (chip) alla ne degli anni cinquanta permise non solo di ridurre via via lo spazio
sico occupato dai computer ma anche di ottenere computer sempre pi potenti tanto che, in due suoi la-
vori, del 1965 e del 1975, Gordon Moore
9
stabil che il numero dei transistor inseribili su un chip raddoppia
6
Alan Turing (1912-1954), matematico inglese, si interess di logica matematica e di teoria della probabilit. Introdusse il concetto
di una macchina astratta, detta macchina di Turing e pose questioni riguardanti lintelligenza articiale
7
John Presper Eckert (1919-1995) e John William Mauchly (1907-1980) lavorarono a quello che si pu considerare il vero primo
calcolatore elettronico.
8
John von Neumann (1903-1957) ungherese, studi prima a Berlino, poi a Zurigo e inne a Budapest, dove ricevette il dottorato in
matematica. 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. Ricevette
numerosi premi e riconoscimenti in tutto il mondo.
9
Gordon Moore nato nel 1929 in California. Di lui basti ricordare che ha stabilito la legge di Moore, co-fondatore della Intel
Corporation e nel 2008 ha ricevuto la medaglia donore dellIEEE 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 dellindustria dei
semiconduttori.
4
1.4. Architettura del Computer
approssimativamente ogni 24 mesi (legge di Moore). Nel 1971 tre ingegneri della Intel tra cui litaliano Fe-
derico Faggin
10
inventarono il microprocessore, vale a dire unintera 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 al
secondo.
Se pensiamo che il processore Intel Pentium 4 introdotto nel 2000 ha 42
.
000
.
000 processori e lIntel Ita-
nium 2 (con 9MB di cache) introdotto nel 2004 ha 592
.
000
.
000 transistors, ci accorgiamo di come la legge di
Moore, dal 1968 ad oggi, sia stata rispettata.
1.4 Architettura del Computer
Larchitettura 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 uncanale detto BUS, costituito da uninsieme
di linee elettriche digitali.
Il processore composto da blocchi con funzionalit diverse:
CPU (Central Processing Unit), unit centrale di elaborazione
cache
varie interfacce
Se il processore integrato su un unico chip prende il nome di microprocessore. Sia la CPU sia gran parte
dei dispositivi che servono per lattivit della CPU sono realizzati con la tecnologia dei circuiti integrati, che
possono 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 e
di controllo e rappresenta la parte centrale del computer.
A sua volta si suddivide in
unit logico-aritmetica (ALU), che svolge tutti i calcoli logici ed aritmetici;
unit oating-point (FPU) (Floating Point Unit), che consente di eseguire le operazioni su numeri reali;
unit di controllo (CU), che sovrintende allelaborazione 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, Indirizzi
Memoria. . .
Ogni elaboratore contiene un circuito di temporizzazione (clock) che genera un riferimento temporale
comune per tutti gli elementi del sistema.
Un ciclo-macchina il tempo richiesto per svolgere unoperazione 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 sica allUniversit di Padova. Nel 1968 si trasferito prima a Palo Alto
presso la Fairchild Semiconductor e poi nel 1970 nella Intel. Oggi presidente e CEO (Chief Executive Ofcer) della Foveon.
5
1. STRUTTURA DELLELABORATORE
attuali hanno valori di frequenza del clock che variano tra gli 8 MHz e i 3500 MHz (1 MHz = 1 milione di
istruzioni al secondo).
La memoria serve per conservare le istruzioni da eseguire e per scrivere/leggere i dati elaborati. Si
suddivide in memoria principale e memoria secondaria.
La memoria principale (o di lavoro) la memoria in grado di conservare dinamicamente dati e
programmi 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 del
sistema e contiene programmi e informazioni speciche per il sistema; utilizzata per memorizzare
parametri di congurazione del sistema, utili allavvio del computer;
memoria per scrittura-lettura (random access memory): RAM. Serve alla CPU per lavorare con i
programmi inseriti dallutente.
Poich la RAM conserva i dati solo no 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 e
programmi per tempi lunghi e a sistema spento, si utilizza la memoria di massa (o secondaria) dischi
come lHard Disk, CDROM, DVD, pendrive USB. . . . RAM
La RAM pu essere pensata come una sequenza di celle (locazioni), ognuna identicata da un indirizzo e
capace di contenere informazioni binarie.
Lunit 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 lunit elementare di informazione.
Per esempio: 0/1, s/no.
1 byte = 8 bit
1 Kilobyte (KB) = 2
10
byte = 1024 byte (circa 10
3
)
1 Megabyte (MB) = 2
20
byte (circa 10
6
)
1 Gigabyte (GB) 10
9
byte (un miliardo di byte)
1 Terabyte (TB) 10
12
byte (mille miliardi di byte)
1 Petabyte (PB) 10
15
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 linserimento di dati nel computer per lelaborazione. Output il trasferimento di dati dal
computer a dispositivi che permettono allutente di vedere/ascoltare i risultati dellelaborazione.
1.5 Software e Sistema Operativo
Un software una sequenza di istruzioni per eseguire le varie elaborazioni sui dati. Ci sono diverse
categorie di software: software per il sistema operativo, software di base, software di tipo applicativo.
Il sistema operativo costituito dallinsieme dei programmi essenziali per far funzionare la macchina.
Esso utilizza piccoli programmi gi presenti nel calcolatore per accedere ai singoli dispositivi sici. Questi
programmi 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 allutente le molteplici risorse del compu-
ter (gestione della memoria, della stampante, della tastiera,...); dallaltra rende il computer uno strumento
amichevole e utile per affrontare le molteplici attivit che gli si richiedono.
I compiti afdati al sistema operativo sono molteplici:
agire da intermediario tra lutente e lharware del computer
controllare e coordinare lutilizzo dellhardware tra i programmi applicativi
fornire gli strumenti per luso corretto delle risorse di tipo hardware e software del sistema
nascondere i dettagli legati alla gestione delle risorse del sistema.
6
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 dallapplicazione specica
richiesta al computer. Cenni storici
Levoluzione dei sistemi operativi ha inuenzato anche lo sviluppo dellhardware in quanto per suppor-
tare certe funzioni del sistema operativo sono necessari meccanismi hardware ad hoc (basti pensare alla
gestione della memoria o delle interruzioni).
I primi computer come lo Z3 di Zuse o lENIAC non avevano sistema operativo. Per inserire un program-
ma (scritto in linguaggio macchina) bisognava azionare un gruppo di interruttori o modicare collegamenti
tramite opportuni cavi e spinotti. Ci rendiamo conto, quindi, di quanto fosse difcile usare il computer per
risolvere problemi mediante lesecuzione di un programma perch oltre alla competenza specica del pro-
blema da risolvere, si richiedeva una grande conoscenza tecnica della macchina su cui si doveva lavorare. Il
programma doveva contenere non solo le istruzioni per la risoluzione del problema (per esempio un sistema
di equazioni) ma anche le istruzioni per gestire le unit di input e output e delle altre periferiche collegate al
computer. Inne, 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
1. STRUTTURA DELLELABORATORE
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 alla
memoria,...).
Ulteriori progressi si ebbero quando il sistema operativo inizi a sfruttare anche il disco sso ed ebbe
inizio la cosiddetta multiprogrammazione, in base alla quale nella memoria centrale venivano tenuti attivi
contemporaneamente alcuni processi e i loro dati pronti per essere eseguiti. Ad ogni momento, uno solo di
questi processi veniva eseguito, tuttavia, quando il processo in esecuzione richiedeva unistruzione di ingres-
so o di uscita, esso veniva sospeso attivando le unit periferiche necessarie per lesecuzione dellistruzione
data. Questa tecnica richiedeva una elevata capacit della memoria centrale e solo pochi sistemi potevano
funzionare in modo adeguato.
Uno dei primi sistemi che inizi ad utilizzare la multiprogrammazione fu il sistema OS/360 realizzato per
i 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 tra
loro per quando riguarda lhardware sottostante: no a quel momento ogni macchina aveva il proprio
sistema operativo, che cambiava da macchina a macchina!
lo sviluppo di questo sistema operativo fu molto delicato e complesso e apr lo studio delle
problematiche relative allingegneria del software.
Nonostante questi progressi, la multiprogrammazione non permetteva molta interattivit tra utente e
computer: di fatto lutente consegnava i dati e il programma da eseguire (un pacco di schede perforate) allo-
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 cera ancora il monitor per la visualizzazione
su video dei risultati).
Per risolvere questo tipo di problemi, luso delle schede fusostituito da appositi terminali sempre collegati
al computer e furono cambiate le modalit di gestione dellunit centrale modicando i sistemi operativi
esistenti. Si arriv allinterazione con il computer non pi mediante schede perforate bens tramite tastiera-
stampante o tramite tastiera-monitor.
Alla ne del 1950 si introdusse il concetto di time-sharing che permetteva lesecuzione di pi processi
in 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 limpressione che ciascun processo vada
avanti parallelamente agli altri.
Gli sviluppi del sistema operativo ottenuti da allora no ad oggi si possono cos riassumere: il sistema
operativo fornisce funzioni di base per la gestione delle risorse, quali:
uso del processore (multitasking: luso della CPU permesso ad un programma alla volta per brevi
intervalli di tempo, quindi lutente pu eseguire pi programmi contemporaneamente)
uso della memoria centrale (memoria virtuale)
riconoscimento e gestione degli utenti (multiutenza)
gestione delle periferiche (drivers)
le system
interfaccia graco.
Sul software
Il software di base (o general purpose) pu avere funzioni varie: editor di testo, elaborazione di testi, fogli
elettronici, posta elettronica, internet.
Il software applicativo costituito da programmi che hanno obiettivi specici 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, detta
cache. Si trova allinterno 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 clienti
scelgono un piatto dal menu, un cameriere prende lordine e lo porta al capo-cuoco. Il capo-cuoco riceve
lordine e assegna al suo aiutante il compito di preparare il piatto. Laiutante si dedicher alla preparazione
del piatto, compito che potr richiedere pi attivit. Il capo-cuoco, intanto, supervisiona la preparazione dei
piatti e gestisce le risorse (limitate) dei posti nel ristorante.
8
1.6. Il le system
il capo-cuoco rappresenta il sistema operativo,
i clienti sono gli utenti,
le ricette associate ai piatti corrispondono ai programmi,
gli ingredienti sono linput del programma,
il piatto loutput del programma,
il menu e il cameriere sono linterfaccia verso il sistema operativo,
laiutante 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.
Laiuto cuoco, quindi, rappresenta la CPU mentre il tavolo da lavoro, su cui appoggia gli ingredienti e la
ricetta per preparare il piatto, rappresenta la memoria centrale. Prima di iniziare a lavorare, il cuoco deve
svolgere 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 da
lavoro: corrispondono alla memoria ROM (quella che non pu essere alterata). La RAM invece la parte del
tavolo 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 vi
rimane, 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 le system
Il sistema operativo gestisce le informazioni su dispositivi di memoria secondaria (dischi).
La gestione delle informazioni avviene mediante le
11
. Un le costituisce un insieme di informazioni
della stessa natura e logicamente correlate. In genere un le contiene un programma (programma sorgente
o programma eseguibile), oppure una sequenza di dati.
Linformazione rappresentata da les, organizzati in maniera gerarchica (pensiamo ad una struttura ad
albero) in directories (cartelle). Una directory un le che svolge il ruolo di raccoglitore.
I les possono contenere dati (abbiamo i cosiddetti les di testo) oppure programmi (i les di
applicazioni).
Un le caratterizzato da:
posizione (path, o percorso): sequenza delle directories che portano al le
dir1 / dir2 /. . . /. . . /
nome: individua univocamente il le allinterno della cartella (o directory)
estensione: la parte del nome del le che segue lultimo punto . (dati.txt prova.f matrice.dat
welcome.html foto.jpeg )
dimensione: quantit di informazione contenuta nel le
altre informazioni (data di creazione, data di ultima modica, permessi di scrittura, lettura. . . )
Lintera gestione dei le a carico di un componente del sistema operativo detto le system.
1.7 Un po di storia sui sistemi operativi
Tra i numerosi sistemi operativi, il sistema Unix quello che ha maggiormente inuenzato questo set-
tore dellinformatica. Il sistem Unix venne sviluppato sul nire degli anni sessanta nei laboratori della AT &
T. La losoa di base era di realizzare un sistema semplice rispetto agli altri in uso e adatto per la ricerca e
lo sviluppo. La prima versione fu scritta in linguaggio Assembly e dipendeva dal tipo di macchina su cui si
doveva applicare. Successivamente venne scritto in larga parte in un linguaggio di alto livello, il C, progettato
11
File in inglese signica archivio. Il termine compare nei primi anni cinquanta e inizialmente si riferisce a un pacco di schede
contenente informazioni omogenee. il sistema operativo a realizzare il concetto astratto di le nella gestione dei dispositivi di memoria
di massa.
9
1. STRUTTURA DELLELABORATORE
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 dellhardware su cui veniva fatto
funzionare. Diversamente dalle abitudini del tempo, lazienda AT & T distribu Unix nelle universit e rese
disponibili i codici sorgenti utilizzati per realizzarlo. Questo port ad una sua ulteriore innovazione grazie a
tutti 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 di
calcolo di tali macchine molto limitate. Inoltre, queste macchine erano pensate pi per gli appassionati che
per il personale tecnico esperto e quindi era importante creare un sistema operativo che fosse duso relativa-
mente semplice. In questo campo si distinsero Bill Gates e Paul Allen, che iniziarono la loro attivit scrivendo
il linguaggio di programmazione Basic per il micromputer Altair. Nel 1975 crearono una ditta... la Microsoft.
Un altro microcomputer, popolare nei primi anni ottanta, fu lApple sviluppato da Steve Wozniak e Steve
Jobs. Per questa macchina svilupparono un sistema pi semplice ed efciente di quello usato per lAltair, che
si 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 le su oppy disk (gli antenati dei CD-ROM e dei DVD, in
uso no ad una decina di anni fa) o su nastri magnetici e mettere a disposizione dellutente un linguaggio
di programmazione semplice, come il Basic. Tuttavia, il conne tra linguaggio di programmazione e sistema
operativo non era ancora ben denito e, una volta avviato, il sistema era pronto per ricevere sia comandi del
sistema operativo, sia istruzioni in linguaggio Basic.
I microcomputer iniziarono ad avere un grosso successo tanto che allinizio degli anni ottanta, lIBMpen-
s di entrare in questo settore (prima si era solo occupata di grandi computer e di software), introducendo
il 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 come
strumento di studio, per i professionisti e per la gestione di piccole aziende.
LIBM incaric Bill Gates di realizzare un sistema operativo per il nuovo personal computer. Il successo
dellIBM PC port al successo anche di Bill Gates: i protti della Microsoft iniziarono a crescere in modo
esponenziale. Il sistema realizzato dalla Microsoft prese il nome di MS-Dos e divenne il sistema operativo
pi diffuso al mondo grazie alla standardizzazione dei personal computer lanciato dallIBM.
Il sistema MS-Dos non era facile da usare perch lutente interagiva con il computer solo attraverso
comandi testuali la cui sintassi non era cos semplice da ricordare (qualche anno pi tardi fu lanciata sul
mercato una versione pi amichevole).
Nel 1984, invece, dalla Apple fu prodotto il personal computer Macintosh che adottava un tipo di inter-
faccia graco progettato per interagire in modo semplice e intuitivo con lutente. Il Macintosh utilizzava un
interfaccia graco chiamato GUI (Graphic User Interface) composto da icone, nestre, men... Gli oggetti
dellambiente operativo erano rappresentati con simboli graci di facile intuizione senza dover comprende-
re a fondo tutti i tecnicismi informatici. Linterfaccia GUI non era uninvezione della Apple perch era stata
gi sperimentata nel corso degli anni settanta dalla Xerox, che per non aveva intuito le potenzialit di questo
lavoro, 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 un
altro sistema operativo basato su interfaccia graca: nel 1985 nacque il primo Windows 1.0 che trov pochi
consensi perch troppo lento e instabile. Nel 1986, con la comparsa di nuovi microprocessori, il sistema
Windows cominci a funzionare in modo adeguato tanto che le versioni di Windows 3.1 e di Windows 95
portarono 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 ha
introdotto il sistema Linux.
Durante gli studi universitari, Torvalds si era interessato di sistemi operativi e aveva studiato una versio-
ne semplicata di Unix, chiamata Minix. Questo sistema poteva funzionare su personal computer e veniva
distributo 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 protti (cio non diventare milionario) ma
di realizzare un sistema utilizzabile gratuitamente da tutti e migliorabile con il contributo di tutti (la losoa
10
1.8. Lavorare in ambiente Linux
dellopen 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 introdotti
dagli 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, afdabile, 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 lambiente graco e di qui possiamo
lavorare (per esempio, aprire una nestra di editor, lavorare in Ofce, navigare in Internet ....).
Per aprire nuove directories (cartelle), per spostare les, per eseguire programmi FORTRAN, ... bene
lavorare tramite una nestra di terminale o shell.
La nestra di terminale (shell) mostra il prompt dei comandi.
Un esempio di prompt la login dellutente (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 dellutente) + un simbolo (% o $, a seconda
della macchina):
studente@george:~ $
Vediamo ora alcuni comandi essenziali (comandi da scrivere dopo il prompt, in una nestra di terminale
dopodich si clicca il tasto di Invio):
ls mostra lelenco dei les e delle directories contenuti nella directory attuale ( ls sta per list):
Esempio:
studente@george:~ $ ls
Un volta cliccato Invio, compare lelenco delle directories presenti nello spazio di lavoro disponibile per
lutente studente sulla macchina george, ad esempio (i numeri a sinistra delle directories o les sono
indicatori 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, scriviamo
studente@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 le dentro una directory: cp nomefile nomedirectory (cp sta per copy).
Per trasferire un le in una directory mv nomefile nomedirectory (mv sta per move).
Per rinominare un le (o una directory): mv nomevecchio nomenuovo .
Per cancellare un le si usa il comando rm nomefile.
Per cancellare una directory, dobbiamo prima cancellare tutti i les della directory e poi usare il
comando rmdir nomedirectory.
11
1. STRUTTURA DELLELABORATORE
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 le prova.f nella directory uno.
Vogliamo copiare il le dalla directory uno alla directory due.
Se ci troviamo nella home, cio nellambiente di partenza, dobbiamo scrivere
cp uno/prova.f due
studente@george:~ $ cp uno/prova.f due
Se ora passiamo nella directory due e facciamo ls, vedremo il le prova.f
studente@george:~ $ cd due
studente@george:~/due $ ls
total 1
1 prova.f
Se siamo nella directory uno, dobbiamo scrivere
cp prova.f ../due per ottenere lo stesso risultato.
Se siamo nella directory due, dobbiamo scrivere
cp ../uno/prova.f . Il punto nale serve per copiare il le prova.f nella directory in cui ci
troviamo.
Con cp abbiamo due le identici, quello nella directory uno e quello copiato nella directory due.
Possiamo anche scrivere cp prova.f prova2.f: in questo modo creiamo il le prova2.f nella
stessa directory in cui si trova prova.f.
Se vogliamo trasferire il le dalla directory uno alla directory due (in questo modo avremo solo un le
alla ne del procedimento), dobbiamo usare il comando mv.
Riassumendo
ls : lista dei les e delle directory
cd : per cambiare directory
mkdir: per creare una nuova directory
cp: per copiare les
mv: per trasferire o rinominare les
rm: per cancellare les
rmdir: per cancellare directories
1.9 Editor di testo
Se vogliamo scrivere su un le un documento di testo, abbiamo bisogno di un editor di testo. Sotto Linux
ne troviamo diversi: vi, emacs, kedit, gedit, nedit.... I pi semplici da utilizzare sono gedit e nedit.
Sotto Linux esiste anche il pacchetto Ofce (del tutto simile allequivalente Microsoft) per scrivere
documenti in word, creare tabelle, etc. . . . Anche il programma Gnumeric molto utile per creare tabelle.
Per visualizzare graci, invece, c il pacchetto Gnuplot.
12
C
A
P
I
T
O
L
O
2
RICHIAMI DI ANALISI
La teoria attrae la pratica come il
magnete attrae il ferro.
Carl Friedrich Gauss
2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Identit trigonometriche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Regole su funzione esponenziale e logaritmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 Derivate e integrali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5 Teoremi utili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1 Introduzione
Quando si descrivono teoremi, si danno denizioni o, semplicemente, si discute di matematica,
abbastanza usuale prendere in prestito lettere dellalfabeto greco.
importante, quindi, saperle riconoscere e chiamarle in maniera corretta:
A Alfa N Nu
B Beta Xi
Gamma O o Omicron
Delta Pi
E Epsilon P Rho
Z Zeta Sigma
H Eta T Tau
Theta Upsilon
I Iota Fi
K Kappa X Chi
Lambda Psi
M Mu Omega
13
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) =
1
cos(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) =cos
2
() sin
2
()
sin
2
() +cos
2
() =1 tan
2
() +1 =sec
2
()
2.3 Regole su funzione esponenziale e logaritmica
Assumiano a, b R, con a >0 e b >0. Si ha:
1
x
=1
a
x+y
=a
x
a
y
a
xy
=(a
x
)
y
a
log
a
(x)
=x a
0
=1
a
xy
=a
x
/a
y
a
x
b
x
=(ab)
x
log
a
(xy) =log
a
(x) +log
a
(y) log
a
(x/y) =log
a
(x) log
a
(y)
log
a
(x
y
) = y log
a
(x) log
a
(a
x
) =x
log
b
(x) =
log
a
(x)
log
a
(b)
b
x
=a
x log
a
(b)
2.4 Derivate e integrali
Siano f e g due funzioni dipendenti dalla variabile reale x mentre c Rsia una costante. Indichiamo la
derivata di f con il simbolo
d f
dx
o mediante f
0
. Si ha:
d (c f )
d x
=c f
0
regola della costante
d ( f +g)
d x
=
d f
d x
+
d g
d x
regola della somma
d ( f /g)
d x
=
f
0
g f g
0
g
2
regola del quoziente
d ( f g)
d x
= f g
0
+ f
0
g 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:
_
f g
0
dx = f g
_
f
0
g dx
14
2.5. Teoremi utili
Diamo ora una tabella delle derivate e degli integrali delle funzioni pi note (per gli integrali lasciamo
fuori 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)
1
x
e
x
e
x
sin(x) cos(x) cos(x) sin(x)
tan(x)
1
cos
2
(x)
(=sec
2
(x)) cot (x)
1
sin
2
(x)
1
cos(x)
tan(x)
1
cos(x)
1
sin(x)
cot (x)
1
sin(x)
arcsin(x)
1
p
1x
2
arccos(x)
1
p
1x
2
arctan(x)
1
1+x
2
arccot(x)
1
1+x
2
f
_
f d x f
_
f d x
x
r
x
r +1
r +1
(r 6=1) x
1
ln|x|
e
x
e
x
ln|x| x ln|x| x
sin(x) cos(x) cos(x) sin(x)
tan(x) ln|
1
cos(x)
| cot (x) ln| sin(x)|
1
cos(x)
ln|
1
cos(x)
+tan(x)|
1
sin(x)
ln|
1
sin(x)
+cot (x)|
1
cos
2
(x)
tan(x)
1
sin
2
(x)
cot (x)
tan(x)
cos(x)
1
cos(x)
cot (x)
sin(x)

1
sin(x)
arcsin(x) x arcsin(x) +
p
1x
2
arccos(x) x arccos(x)
p
1x
2
arctan(x) x arctan(x)
1
2
ln(1+x
2
) arccot(x) xarccot(x)
1
2
ln(1+x
2
)
1
p
1x
2
arcsin(x)
1
1+x
2
arctan(x)
2.5 Teoremi utili
Richiamiamo, nel seguito, teoremi che trovano applicazione nel Calcolo Numerico. Per alcuni diamo
anche la dimostrazione. Notazioni
usate per le
funzioni
continue
Utilizzeremo, inoltre, le seguenti notazioni per funzioni di una sola variabile denite in un insieme X R.
Linsieme delle funzioni continue in X verr denotato con il simbolo C(X). Linsieme delle funzioni continue
in X, che hanno le prime n derivate pure esse continue, sar indicato con C
n
(X).
15
2. RICHIAMI DI ANALISI
Teorema 2.5.1 (Teorema di Rolle)
a
Sia f C([a, b]) e differenziabile in ]a, b[.
Se f (a) = f (b) =0, allora esiste un punto ]a, b[
tale che f
0
() =0
a
Michel Rolle (1652- 1719) fu un matematico francese.
conosciuto per il teorema che porta il suo nome. Si deve a lui
la notazione della radice n-sima per mezzo del simbolo
n
p
x.
Teorema 2.5.2 (Teorema del Valor Medio)
Sia f C([a, b]) e differenziabile in ]a, b[,
allora esiste un punto ]a, b[ tale che
f
0
() =
f (b) f (a)
b a
Teorema 2.5.3 (Teorema del Valore Intermedio)
Sia f C([a, b]) e sia K un valore compreso tra f (a)
e f (b). Allora esiste almeno un punto ]a, b[ tale
che f () =K.
Quindi per funzioni continue, unvalore compreso tra i due estremi dellinsieme di denizione, unvalore
assunto 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 dellintervallo [a, b]) allora esiste almeno un punto tale che f () = 0, cio esiste almeno una radice
dellequazione f (x) =0 nellintervallo [a, b].
Teorema 2.5.4 (Esistenza del punto sso) Data una funzione g denita in [a, b], continua e tale che a
g(x) b per ogni x [a, b], allora g ammette almeno un punto sso.
Dimostrazione. Dire che una funzione g ammette almeno un punto sso, vuol dire che esiste almeno
un punto nel suo insieme di denizione, tale che g() =.
Dalle ipotesi del teorema, i valori della funzione g sono contenuti nellintervallo [a, b] e, in particolare
a g(a) b e a g(b) b. Deniamo, 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
]a, b[ tale che () =0, vale a dire g() =0, cio g() =. Esiste almeno un punto sso per la funzione
g. 4
16
2.5. Teoremi utili
Teorema 2.5.5 (Esistenza e unicit del punto sso) Data una funzione g di classe C
1
in [a, b], con a g(x)
b per ogni x [a, b], e con |g
0
(x)| m<1 per ogni x [a, b] allora esiste ed unico il punto sso della g in tale
intervallo.
Dimostrazione. Lesistenza di almeno un punto sso assicurata dal teorema precedente (le ipotesi del
teorema precedente ci sono tutte). Supponiamo, allora, che esistano due punti ssi e , con 6= , per la
funzione 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. Lassurdo deriva dallaver supposto 6= . Quindi = e il punto sso
unico. 4
Teorema 2.5.6 (Teorema del Valor Medio del Calcolo Integrale) Se f C([a, b]) e g integrabile in [a, b] e
g(x) non cambia segno in [a, b], allora esiste un punto ]a, b[ tale che
_
b
a
f (x)g(x) d x = f ()
_
b
a
g(x) d x
Per g 1, questo teorema ci d il valore medio della funzione f sullintervallo [a, b], dato da f () =
1
b a
_
b
a
f (x) d x
Teorema 2.5.7 (Teorema di Rolle generalizzato) Sia f C([a, b]) n volte differenziabile in ]a, b[. Se f si an-
nulla in n+1 punti distinti x
0
, x
1
, . . . , x
n
in ]a, b[, allora esiste un punto ]a, b[ in cui la derivata n-sima della
f si annulla: f
(n)
() =0.
Teorema 2.5.8 (Formula di Taylor)
1
Sia f C
2
([a, b]) e sia x
0
un punto dellintervallo [a, b]. Allora, per qualunque x [a, b] si pu scrivere:
f (x) = f (x
0
) + f
0
(x
0
)(x x
0
) +
(x x
0
)
2
2
f
00
(
x
)
dove
x
un opportuno punto di [a, b] che si trova sul segmento individuato da x
0
e x.
La formula appena scritta si dice formula di Taylor di centro x
0
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 x
0
:
f (x) = f (x
0
) + f
0
(x
0
)(x x
0
) +
f
00
(x
0
)
2!
(x x
0
)
2
+. . . +
f
(n)
(x
0
)
n!
(x x
0
)
n
+R
n
dove
R
n
(x) =
f
(n+1)
(
x
)
(n +1)!
(x x
0
)
n+1
con
x
un opportuno punto di [a, b] che si trova sul segmento individuato da x
0
e x.
1
Brook Taylor (1685 - 1731) fu un matematico inglese che svilupp quello che oggi chiamato calcolo delle differenze nite.
Limportanza del suo lavoro e, soprattutto, della formula conosciuta oggi con il suo nome, venne riconosciuta solo nel 1772 da Lagrange.
17
C
A
P
I
T
O
L
O
3
RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
Tutti noi ogni giorno usiamo la
matematica: per prevedere il tempo,
per dire lora, per contare il denaro.
Usiamo la matematica anche per
analizzare i crimini, comprendere
gli schemi, prevedere i
comportamenti. Usando i numeri,
possiamo svelare i pi grandi
misteri della vita!
NUMB3RS
3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Aritmetica di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Conversione di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.4 Rappresentazione IEEE dei numeri di macchina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.5 Precisione numerica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.6 Propagazione degli errori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.7 Instabilit e malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7.1 Instabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7.2 Malcondizionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1 Introduzione
Molte volte, si pensa che i risultati numerici ottenuti da un calcolatore elettronico, specie se sono ottenuti
come output di unsosticato software, noncontengano errori e, se ne abbiano, siano da ritenersi trascurabili.
In realt, quando si esegue un programma al calcolatore, bisogna prima di tutto aver vericato che sia stato
scritto correttamente (il programma deve, cio, tradurre correttamente il problema matematico che si vuole
risolvere). 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 innite cifre decimali
ma il calcolatore lo pu vedere solo come un numero con nite cifre decimali..., molte formule non possono
essere usate cos come sono ma devono essere in qualche modo semplicate (basti pensare ad una somma di
inniti termini). Non tenere conto di questi fattori pu portare a risultati davvero disastrosi, come pu essere
19
3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
vericato 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, dellUniversit del Minnesota, e viene introdotta con la
seguente frase (traducendo): Stai seguendo con attenzione il tuo corso di analisi numerica o di calcolo scienti-
co? Se no, potrebbe essere un caro errore. Nel seguito, ci sono esempi dalla vita reale di ci che pu succedere
quando 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 lintercettazione di un Esempio sul
disastro del
missile
Patriot
missile Scud iracheno. Questo errore cost la vita di 28 soldati, un centinaio di feriti e la distruzione di
un 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 innitesimo che comportava un
errore nella valutazione della traiettoria del missile Scud. Col passare delle ore il ritardo accumulato fu
tale da far intercettare una posizione del tutto diversa da quella in cui si trovava il missile da abbattere.
Figura 3.1: Il disastro del missile
Patriot
Difatti, il computer usato per controllare il missile Patriot era basato su
unaritmetica a 24 bit. Per i calcoli, il tempo veniva registrato dallorolo-
gio interno del sistema in decine di secondi e successivamente moltipli-
cato per 1/10 per ottenere i secondi, utilizzando 24 bit in virgola ssa. Il
numero 1/10 in base 2 ha innite cifre decimali: la sua espansione bina-
ria infatti 0.0001100110011001100110011001100. . .. In24 bit esso veni-
va registrato come 0.00011001100110011001100 introducendo un erro-
re di 0.0000000000000000000000011001100. . ., che, in base 10, signica
circa 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.6567
invece di 360000, un errore di 0.3433 secondi che port
il Patriot 687 metri fuori della traiettoria del missile Scud!
Lesplosione
dellAriane 5
Figura 3.2: Lesplosione di
Ariane 5
Il 4 giugno 1996, dopo una spesa di 7 miliardi di dollari, e dopo appena 40
secondi dal suo lancio, esplose il razzo Ariane 5, nella Guiana Francese. Il razzo
e il suo carico erano valutati per oltre 500 milioni di dollari. Perci il costo
totale della missione era stato di oltre 7 miliardi e mezzo di dollari. Fu scoperto
che lerrore era nel software e, in particolare, nella componente del Sistema di
Riferimento Inerziale, che era stato preso dal software dellAriane 4. Certe parti
del software dellAriane 5 erano state aggiornate rispetto al software dellAriane
4, ma non si era aggiornato quanto preso dal software dellAriane 4.
In particolare, il fallimento dellAriane 5 dovuto ad un errore di con-
versione da un sistema a 64 bit a virgola mobile ad uno a 16 bit a virgola
ssa.
La velocit orizzontale del razzo rispetto alla piattaforma misurato in 64 bit
era un numero pi grande del massimo consentito nellaritmetica a 16 bit. Si
ebbe quindi un errore di overow che caus larresto del software di controllo
del volo 37 secondi dopo il lancio del razzo. Dopo 3 secondi il razzo si distrusse.
Il disastro del
Mars Climate
Orbiter
Il 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 costi
della Climate Orbiter e della Polar Lander erano di un totale di oltre 320 milioni di dollari.
20
3.2. Aritmetica di macchina
Figura 3.3: La Mars Climate Orbiter
Si era ipotizzato di entrare nellatmosfera 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 di
misura, il velivolo entr nellatmosfera con una traiettoria infe-
riore rispetto a quella pianicata. La velocit del mezzo era molto
elevata e port alla distruzione non solo del veicolo spaziale ma
anche della stessa Polar Lander.
Diversi furono i motivi che portarono al fallimento di questa
missione. Il principale dovuto allerrore nel trasferimento di in-
formazioni tra il teamche 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 laltro usava le unit metriche. Lerrore 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 innite cifre
decimali.
Ad esempio:
1
3
=0.3333333. . . =
_
0
10
0
+
3
10
1
+
3
10
2
+
3
10
3
+
3
10
4
. . .

10
0
=3.14159265358979. . . =
_
3
10
0
+
1
10
1
+
4
10
2
+
1
10
3
+
5
10
4
. . .

10
0
Osserviamo che abbiamo scritto 1/3 e in base 10, usando, quindi, le cifre 0, 1, 2, . . . , 9 per poterli
rappresentare.
In genere, un numero reale x pu essere rappresentato in base N come
x =x
m
N
m
+x
m1
N
m1
+. . . +x
1
N +x
0
+x
1
N
1
+x
2
N
2
+. . . x
n
N
n
. .
parte intera
. .
parte frazionaria
dove m e n sono interi naturali e x
k
, k =m, m1, . . . , n sono interi naturali compresi tra 0 e N 1.
Esempio
In base 10, il numero 726.625, scritto in forma estesa dato dalla forma:
710
2
+210
1
+6+610
1
+210
2
+510
3
Tuttavia, i calcolatori hanno una memoria nita per poter rappresentare i numeri. Ci signica che solo
una sequenza nita di cifre possono essere usate. Inoltre, i calcolatori lavorano in base binaria, quindi ogni
numero 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 rappresentazione
oating point virgola mobile.
21
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 rappresentare
lo stesso numero, ma vedremo limplementazione pratica per convertire un numero dalla base 10 alla base 2
e viceversa.
Il passaggio di un numero dalla rappresentazione in base 2 alla rappresentazione in base 10 semplice, in
quanto si tratta di scrivere il numero come combinazione delle opportune potenze di 2. Vediamo unesempio.
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 2
7
+0 2
6
+0 2
5
+0 2
4
+1 2
3
+0 2
2
+0 2
1
+0 2
0
+
. .
parte intera
0 2
1
+1 2
2
+0 2
2
. .
parte frazionaria
=2
7
+2
3
+2
2
=128+8+0.25 =136.25
Questo 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 due
passi.
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 ripete
la procedura sul risultato avuto dalla divisione, no a quando si arriva a 1. In tal modo, calcoliamo le cifre
binarie a partire da x
0
(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 delloperazione ha la
parte 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 no a quando si arriva allo zero (o se
si 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 resto
725 362 1 x
0
362 181 0 x
1
181 90 1 x
2
90 45 0 x
3
45 22 1 x
4
22 11 0 x
5
11 5 1 x
6
5 2 1 x
7
2 1 0 x
8
1 0 1 x
9
Per la parte decimale si ha :
.6252 = 1.250 x
1
=1
.2502 = 0.50 x
2
=0
.52 = 1.0 x
3
=1
.02 = 0.0
In base 2 il numero diventa 1011010101.101.
22
3.4. Rappresentazione IEEE dei numeri di macchina
Osserviamo che un numero pu avere una rappresentazione nita in base 10 e innita in base 2. Vediamo
in dettaglio un esempio:
Esempio 3.3.3 Scriviamo il numero
11
10
, che 1.1 in base 10, nella base 2.
Per la parte intera:
: 2 = quoziente resto
1 0 1 x
0
Per la parte decimale:
.12 = 0.2 x
1
=0
.22 = 0.4 x
2
=0
.42 = 0.8 x
3
=0
.82 = 1.6 x
3
=1
.62 = 1.2 x
4
=1
.22 = 0.4 x
5
=0
.42 = 0.8 x
6
=0
.82 = 1.6 x
7
=1
.62 = 1.2 x
8
=1
.22 = 0.4 x
9
=0
Osserviamo che nella parte decimale si ripetono allinnito le cifre 0011. Il numero in base 2 si scrive quindi
come: 1.00011
. .
0011
. .
. . .
3.4 Rappresentazione IEEE dei numeri di macchina
Lo sviluppo dei calcolatori ha promosso e sviluppato luso 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 innite cifre in maniera accurata utilizzando solo un
numero nito di cifre?
Lo standard IEEE (Institute of Electrical and Electronics Engineers), oggi utilizzato dalla maggior parte dei
calcolatori, dato dalla rappresentazione in virgola mobile (oating point). Esiste anche un tipo di rappre-
sentazione invirgola ssa (xed point), ma ingenere preferita quella inoating point, e noi ci soffermeremo
solo su questa.
Riprendiamo lesempio proposto in Sezione 3.2, dove abbiamo scritto
1
3
in base 10 come
1
3
=0.3333333. . . =
_
0
10
0
+
3
10
1
+
3
10
2
+
3
10
3
+
3
10
4
. . .

10
0
Questo un esempio di numero scritto in virgola mobile: un qualunque numero x, in base 10, si pu
scrivere sotto la forma x = f 10
e
dove f rappresenta la mantissa del numero e e lesponente (intero) della
base 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
10
1
=0.12510
2
=0.00012510
5
. Si parla di virgola mobile normalizzata quando la mantissa ha una singola
cifra 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: i
numeri si possono scrivere nella forma x = f 2
e
. Al calcolatore, tuttavia, non possiamo rappresentare numeri
con una mantissa a innite cifre, perci f = 1. f
1
f
2
. . . f
n
e e = e
Ne1
e
Ne2
. . . e
0
., dove f
1
, f
2
, . . . , f
n
,
e e
Ne1
, e
Ne2
, . . . , e
0
sono le cifre che caratterizzano rispettivamente la mantissa e lesponente del numero
in virgola mobile normalizzata in base 2, e quindi possono valere 1 o 0. Abbiamo n cifre per la mantissa (in
realt sono n +1 ma poich la rappresentazione normalizzata f
0
= 1) e Ne per lesponente. Nel sistema
binario, le cifre vengono chiamate bits ( binary digits): quindi n bits sono riservati per la mantissa, Ne per
lesponente.
23
3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
Un numero in oating point nella rappresentazione IEEE viene scritto come
x =(1+ f
1
2
1
+ f
2
2
2
+. . . + f
n
2
n
) 2
e
dove
1+f
1
2
1
+f
2
2
2
+. . .+f
n
2
n
la mantissa, normalizzata, cui sono riservati
un 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 f
0
) non viene messo in memoria ma c. La rappresentazione
in 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 dellesponente e della mantissa ogni celletta pu avere
il valore 0 o 1):
s e e e e e e f f f f f f
..
segno
. .
cifre dellesponente
. .
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 per
lesponente 2
e
, e un numero n di bits per la mantissa.
La scelta del numero di bits da riservare allesponente e alla mantissa si basa su un compromesso tra la
dimensione dellesponente (e quindi il pi piccolo e il pi grande numero rappresentabile) e la dimensione
della 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 bits
Singola precisione 1 8 23 32
Doppia 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 negativi
come interi positivi. La tecnica utilizzata nello standard IEEE chiamata di biasing (distorsione): un numero
positivo (detto bias) viene aggiunto allesponente (sia esso positivo o negativo) in modo che il risultato nale
sia sempre positivo. Ed questo valore che viene memorizzato per rappresentare lesponente. Lesponente
viene quindi rappresentato in forma biased (parziale, inuenzata da un altro numero): se e lesponente
effettivo, noi memorizziamo il valore b +e dove b il bias dato b = 0111. . . 1
. .
Ne bits
, vale a dire b = 1+2+2
2
+. . . +
2
Ne2
+02
Ne1
=
12
Ne1
12
=2
Ne1
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, nella
rappresentazione IEEE, due patterns di bits sono riservati per rappresentare numeri speciali quali lo zero,
innito 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 signica che il massimo esponente
che 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. . . 100111. . . 1 =0111. . . 1 =b
.
Il limite superiore U proprio uguale a b.
24
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 il
limite inferiore L =(b 1).
In singola precisione, b =0111. . . 1
. .
8 bits
: in base 10 b =127
10
, da cui lintervallo [L,U] =[126, 127].
In doppia precisione, invece, b =1023
10
da cui [L,U] =[1022, 1023].
Per quanto riguarda la mantissa, sono ad essa riservati n bits. Considerando anche l1 della
normalizzazione, la precisione di n +1 bits.
Il pi grande numero che si pu rappresentare , quindi
1
1. 111. . . 1
. .
n bits
2
U
=(
n

k=0
2
k
) 2
U
=
12
(n+1)
12
1
2
U
=(22
n
)2
U
2
U+1
Il pi piccolo numero positivo rappresentabile dato, invece, da:
1. 000. . . 0
. .
n bits
2
L
=2
L
Se si vuole rappresentare un numero al di fuori di questo intervallo si ha overow o underow.
Insingola e doppia precisione abbiamo, per il pi grande e il pi piccolo numero positivo rappresentabile,
i seguenti valori:
Singola precisione Doppia precisione
Massimo 3.410
38
10
308
Minimo 1.210
38
2.210
308
Esempio 3.4.1 Vogliamo scrivere il numero 5.75
10
in formato IEEE in singola precisione.
Effettuiamo prima la conversione in base 2:
Per la parte intera:
5 2 1 x
0
2 1 0 x
1
1 0 1 x
2
Per la parte decimale:
.752 = 1.50 x
1
=1
.52 = 1.0 x
2
=1
.02 = 0.0
Quindi 5.75
10
=101.11
2
=1.01112
2
.
Memorizziamo ora il numero in singola precisione:
Per lesponente, essendo p =2, si ha:
(b +p)
10
=(127+2)
10
=129
10
=10000001
2
Per la mantissa, m=23 e si deve trascurare l1 della normalizzazione, quindi memorizzeremo le cifre 0111
e 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 =0
Perci la memorizzazione, considerati i bits per il segno, lesponente e la mantissa :
0 1 0 0 0 0 0 0 1 0 1 1 1 0 . . . 0 0 0 0 0
..
s
. .
esponent e
. .
mant i ssa
1
il risultato di una somma del tipo S =1+a +a
2
+. . . +a
n
e vale S =
1a
(n+1)
1a
. In questo caso, a =
1
2
=2
1
. Osserviamo, inoltre,
che, dati n valori w
1
, w
2
, . . . , w
n
usiamo la seguente simbologia per indicare la loro somma:
n

i =1
w
i
=w
1
+w
2
+w
3
+. . . w
n
.
25
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 nellespo-
nente che nella mantissa (non dimentichiamo che il valore 1 della normalizzazione non messo in memoria
ma c e quindi non potremmo mai avere il valore 0, perci lo si pone per convenzione).
Per i valori si considerano tutti 1 nello spazio dedicato allesponente, tutti 0 nello spazio dedicato alla
mantissa e 0 o 1 per il segno, a seconda che sia + o .
0 / 1 1 1 1 . . . 1 1 0 0 0 . . . 0 0
..
s
. .
esponente
. .
mantissa
I valori si hanno se si fa una divisione per zero o si fa un calcolo che comporta overow.
Si ha invece il Not-a-Number (NaN) come risultato di operazioni non denite, come 0/0 o log0.
A seconda della macchina si ha:
NaNS, che produce un segnale di errore
0 1 1 1 . . . 1 1 0 1 1 . . . 1 1
..
s
. .
esponente
. .
mantissa
NaNQ, con il quale il calcolo continua comunque...
0 1 1 1 . . . 1 1 1 0 0 . . . 0 0
..
s
. .
esponente
. .
mantissa
3.5 Precisione numerica
Un numero pu avere una rappresentazione nita o innita. Basti pensare al valore di o a
p
2 in base 10.
Abbiamo anche visto che un numero pu avere rappresentazione nita in una base ma innita in unaltra.
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 =(

k=0
x
k
N
k
)N
p
il numero esatto (pu avere innite cifre decimali e lo rappresentiamo come
somma di inniti termini).
In oating-point esso sar espresso come x

= (

t 1
k=0
x

k
N
k
)N
p

, esso, cio, sar arrotondato (non


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

= t r 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) = t r onc(x +
1
2
N
t +1
N
p
), aggiungiamo ununit a x
t +1
se
x
t
N/2.
Lerrore assoluto |x x

| che si commette approssimando il numero x con x

sar
2
|x x

|
_
_
_
N
1t
N
p
nel troncamento
1
2
N
1t
N
p
nellarrotondamento
2
Evitiamo di effettuare tutti i passaggi che portano alle formule dellerrore assoluto e relativo, che sono il risultato di maggiorazioni
di serie geometriche.
26
3.6. Propagazione degli errori
Per lerrore relativo
|x x

|
|x|
, invece, si ha:
|x x

|
|x|

_
_
_
N
1t
nel troncamento
1
2
N
1t
nellarrotondamento
Il valore
1
2
N
1t
il numero conosciuto come precisione di macchina.
Esempio
Nel caso della rappresentazione IEEEdi unnumero, si ha t 1 =n, (ricordiamo che nella rappresentazione
IEEE si memorizza il numero normalizzato), da cui lerrore di arrotondamento relativo che si commette
|x x

|
|x|
2
(n+1)
.
In singola precisione (n =23), avremo
|x x

|
|x|
2
24
5.9610
8
ci signica che avremo 8 cifre decimali corrette.
In doppia precisione (n =52) avremo
|x x

|
|x|
2
53
1.1110
16
ci signica 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 signicative.
Le cifre signicative sono quelle che danno uninformazione effettiva sul valore del numero,
indipendentemente dalla parte esponenziale.
Se scriviamo il numero in virgola mobile normalizzata, le cifre signicative sono date dalle cifre della
parte frazionaria. La bont delle cifre va diminuendo procedendo da sinistra verso destra e questo pu por-
tare ad una perdita di cifre signicative, come possiamo vedere studiando la propagazione degli errori nelle
operazioni 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 oating point e arrotondato, quindi
f l (x) =x(1+e
x
) dove e
x
lerrore di arrotondamento.
Allora f l (x o y) = f l (x) o f l (y) =x(1+e
x
) o y(1+e
y
).
Moltiplicazione
3
x(1+e
x
) y(1+e
y
) =(x y)(1+e
x
)(1+e
y
) (x y)(1+e
x
+e
y
)
Quindi lerrore nel prodotto dato da e
xy
=e
x
+e
y
Divisione (con y 6=0)
4
x(1+e
x
)
y(1+e
y
)
=
x
y
(1+e
x
)(1e
y
+e
2
y
+. . .)
x
y
(1+e
x
e
y
)
Si ha e
x/y
=e
x
e
y
: gli errori si accumulano additivamente
3
Nei calcoli sono trascurabili le potenze maggiori o uguali a due per e
x
e e
y
4
Possiamo scrivere
1
1+e
y
= (1 e
y
+e
2
y
+. . .) come risultato della formula polinomiale di Taylor della funzione f (e
y
) =
1
1+e
y
di
centro 0.
27
3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
Addizione (e, analogamente, Sottrazione)
x(1+e
x
) +y(1+e
y
) =x +y +xe
x
+ye
y
=(x +y)(1+
x
x +y
e
x
+
y
x +y
e
y
)
Lerrore e
x+y
=
x
x +y
e
x
+
y
x +y
e
y
, una combinazione lineare che dipende da x e y.
xy >0 =|e
x+y
| |e
x
| +|e
y
|
xy < 0 =
|x|
|x +y|
e
|y|
|x +y|
possono essere molto grandi e, in tal caso, ci sar unamplicazione
notevole dellerrore. Si ha il fenomeno di cancellazione se non si fa attenzione al numero di cifre
signicative dei numeri che vengono sommati.
Supponiamo di avere due numeri molto vicini tra loro, in cui le prime p +2 cifre della parte frazionaria Sulla cancel-
lazione
sono buone mentre le altre sono corrotte. Inoltre, le prime p cifre siano le stesse per entrambi i numeri
(usiamo i simboli vvvvv e wwwwww per esprimere le cifre corrotte):
f l (x) =1.d
1
d
2
. . . d
p
b
(p+1)
b
(p+2)
vvvv 2
e
f l (y) =1.d
1
d
2
. . . d
p
b
0
(p+1)
b
0
(p+2)
wwww2
e
Quando andiamo a fare la sottrazione le prime p cifre buone si annullano. Da p +2 cifre buone, ne abbiamo
ora solo 2 e tutte le altre sono quelle corrotte. Con la normalizzazione il risultato diventa del tipo (ora qqqqq
sono le cifre corrotte):
f l (x y) =1.b
00
1
b
00
2
qqqqqq 2
e
Ricordiamo, inne, che in aritmetica di macchina non valgono pi la propriet distributiva o associativa
del 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 larrotondamento a 4 cifre abbiamo il valore 1.0034 10
1
.
Lerrore relativo che commettiamo :
|0.1003370.10034|
0.100337
2.99 10
5
. Questo errore minore della
precisione di macchina (considerata la base 10 e le 4 cifre)
1
2
10
3
.
Tuttavia, se non teniamo conto delle cifre signicative ma tronchiamo i numeri alle prime 4 cifre, abbiamo
la sottrazione di 0.11030.0099 =0.1004.
Questa volta lerrore relativo
|0.1003370.1004|
0.100337
.63 10
3
. Lerrore maggiore della precisione di
macchina.
Esempio 3.6.2 Sia da risolvere lequazione ax
2
+bx+c =0 con a =1, b =56 e c =1, quindi x
2
56x+1 =0,
in una macchina a 4 cifre decimali (normalizzata).
Applicando la formula x
1/2
=
b
p
b
2
4ac
2a
abbiamo x
1/2
= 28
p
783 = 28 27.98213716 =
_
0.01786284073
55.98213716
. Larrotondamento delle due radici in virgola mobile normalizzata a 4 cifre decimali
d: x
1
=1.7863 10
2
e x
2
=5.5982 10
1
.
28
3.6. Propagazione degli errori
Consideriamo ora la macchina a 4 cifre decimali per risolvere lequazione:
x
1
=28
p
783 =2.8 10
1
2.7982 10
1
=0.0018 10
1
=0.018 =1.8 10
2
x
2
=28+
p
783 =2.8 10
1
+2.7982 10
1
=5.5982 10
1
La radice x
2
arrotondata correttamente, mentre la variabile x
1
no, per effetto della cancellazione.
Per ricavare x
1
con larrotondamento corretto, applichiamo la formula x
1
x
2
=c/a, che, nel nostro caso, vale
x
1
x
2
=1 da cui x
1
=1/x
2
=1/(5.5982 10
1
) =1.7863 10
2
. Abbiamo fatto unoperazione che non risente del
fenomeno di cancellazione numerica!
Esempio 3.6.3 Vediamo come non valga pi la relazione (a b)
2
=a
2
2ab +b
2
.
Sia a = 15.6 e b = 15.7 e la macchina sia a 3 cifre decimali (questa volta lavoriamo su una macchina non
normalizzata, per cui scriveremo la parte frazionaria come 0.qual cosa. Ripetere poi lesempio lavorando
su una macchina a 2 cifre decimali normalizzata e su una macchina a 3 cifre decimali normalizzata. Cosa
si osserva?)
(a b) =(a b)

+e
ab
. Abbiamo (a b)

=15.615.7 =0.1.
Quindi (a b)
2
=+0.01 =0.1 10
1
.
Consideriamo ora a
2
2ab +b
2
=243.36489.84+246.49 =0.24336 10
3
0.48984 10
3
+0.24649 10
3
Considerando la macchina a 3 cifre decimali, abbiamo: 0.243 10
3
0.490 10
3
+0.246 10
3
=0.1 10
1
I risultati sono completamente diversi!
Esempio 3.6.4 Consideriamo il problema di approssimare la derivata della funzione f (x) =sinx nel punto
x =1.2.
Supponiamo di non poter valutare direttamente la derivata della f e di volerla approssimare applicando
la formula polinomiale di Taylor:
f (x
0
+h) = f (x
0
) +hf
0
(x
0
) +
h
2
2
f
00
(x
0
) +
h
3
6
f
000
(x
0
) +
h
4
24
f
I V
(x
0
) +. . .
Allora
f
0
(x
0
) =
f (x
0
+h) f (x
0
)
h
(
h
2
f
00
(x
0
) +
h
2
6
f
000
(x
0
) +
h
3
24
f
I V
(x
0
) +. . .)
Approssimiamo, quindi, la f
0
(x
0
) calcolando
f (x
0
+h) f (x
0
)
h
.
Lerrore, detto errore di discretizzazione, che si commette
| f
0
(x
0
)
f (x
0
+h) f (x
0
)
h
| =|
h
2
f
00
(x
0
) +
h
2
6
f
000
(x
0
) +
h
3
24
f
I V
(x
0
) +. . . |
Supponendo di conoscere il valore della derivata seconda in x
0
, per piccoli valori di h possiamo dare una
stima dellerrore di discretizzazione,
| f
0
(x
0
)
f (x
0
+h) f (x
0
)
h
|
h
2
| f
00
(x
0
)|
Ci aspettiamo, anche senza conoscere il valore di f
00
(x
0
) (purch diverso da 0) che lerrore di discretizzazione
diminuisca 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 lerrore esatto che commettiamo approssimando la
derivata di sinx con la formula che abbiamo ricavato.
29
3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
Per h = 0.1 non abbiamo unapprossimazione accurata. Ci aspettiamo che diminuendo il passo h lerrore
che commettiamo diminuisca.
Riportiamo gli errori della formula (in valore assoluto) e confrontiamoli con lerrore di discretizzazione
h
2
| f
00
(x
0
)| (i conti sono fatti in singola precisione):
h errore
h
2
| f
00
(x
0
)|
1.e-1 4.7167e-2 4.6602e-2
1.e-2 4.6662e-3 4.6602e-3
1.e-3 4.6608e-4 4.6602e-4
1.e-4 4.6603e-5 4.6602e-5
1.e-5 4.6602e-6 4.6602e-6
1.e-6 4.6597e-7 4.6602e-7
Lerrore commesso dallalgoritmo decresce come h e, in particolare, come
h
2
| f
00
(1.2)| =0.46602h.
Possiamo pensare di ottenere unaccuratezza grande quanto vogliamo a condizione di prendere valori di h
sempre pi piccoli. In realt, per valori di h molto piccoli, gli errori iniziano ad aumentare!
h errore
h
2
| f
00
(x
0
)|
1.e-8 4.3611e-10 4.6602e-9
1.e-9 5.5947e-8 4.6602e-10
1.e-10 1.6697e-7 4.6602e-11
1.e-11 4.6603e-5 4.6602e-12
1.e-12 1.3006e-4 4.6602e-13
1.e-13 4.2505e-4 4.6602e-14
1.e-16 3.6236e-1 4.6602e-16
1.e-18 3.6236e-1 4.6602e-19
In Figura 3.4 vediamo come la curva dellerrore inizialmente segue la retta descritta dallerrore di discretiz-
zazione ma poi si allontana da essa. Perch questo diverso comportamento per valori di h molto piccoli?
Dobbiamo tenere presente che lerrore che noi valutiamo non semplicemente lerrore di discretizzazione
ma la somma dellerrore di discretizzazione e dellerrore di arrotondamento! Per valori di h grandi, lerrore
di discretizzazione descresce al diminuire di h e domina sullerrore di arrotondamento. Ma quando lerrore
di discretizzazione diventa molto piccolo, per valori di h minori di 10
8
, allora lerrore di arrotondamento
inizia a dominare e ad aumentare sempre pi al diminuire di h. Questo un motivo per cui si deve cercare
di far prevalere lerrore di discretizzazione in un procedimento numerico. Nellerrore di arrotondamento,
per h via via pi piccoli, si verica un errore di cancellazione: f (x
0
+h) praticamente uguale a f (x
0
) per
h molto piccoli! per cui lerrore che calcoliamo | f
0
(x
0
) 0| = f
0
(x
0
) =0.3623577544....
Una strategia per evitare la cancellazione di scrivere diversamente la differenza f (x
0
+h)f (x
0
). 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 graco 3.5 anche la curva dellerrore che otteniamo uti-
lizzando questa espressione trigonometrica. Lerrore 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 dellerrore di arrotondamento in modo da confrontare landamento effettivo del-
lerrore con un limite superiore teorico dellerrore computazionale totale dato dalla somme degli errori di
discretizzazione e di arrotondamento.
30
3.7. Instabilit e malcondizionamento
Figura 3.4: Errore di discretizzazione ed effettivo approssimando f
0
(x
0
) con il rapporto incrementale
f (x
0
+h) f (x
0
)
h
.
La rappresentazione di f (x) affetta da errore per cui avremo: f (x) = f

(x)+e
x
. Lerrore di arrotondamento

f (x
0
+h) f (x
0
)
h
=
f

(x
0
+h) f

(x
0
)
h
+
e
x
0
+h
e
x
0
h
. Maggiorando e
x
con la precisione di macchina ,
lerrore di arrotondamento dato da 2/h: per h piccoli lerrore 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
E
n
c
0
nE
0
dove E
n
misura lerrore relativo delln-sima operazione dellalgoritmo
5
e c
0
sia una costante non molto
grande.
Se invece avviene una crescita di tipo esponenziale
E
n
c
n
1
E
0
con c
1
>1, allora lalgoritmo instabile. Algoritmi del genere devono essere evitati!
5
Per algoritmo intendiamo un procedimento di calcolo. Per una denizione pi approfondita si veda pag. 163 al Capitolo 11.
31
3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
Figura 3.5: Errori di discretizzazione, di arrotondamento, ed errore effettivo approssimando f
0
(x
0
) con il
rapporto incrementale
f (x
0
+h) f (x
0
)
h
, ed errore che si commette applicando la formula trigonometrica
per cui f (x
0
+h) f (x
0
) =sin(x
0
+h) sin(x
0
) =2cos(2x
0
+h/2) sin(h/2).
Denizione 3.7.1 Unprocedimento numerico si dice instabile se gli errori che vi sono associati nonrimangono
limitati ma crescono no a distruggere completamente la soluzione.
Esempio 3.7.1 Consideriamo lintegrale
y
n
=
_
1
0
x
n
x +10
dx
per valori di n = 1, 2, . . . , 30. Osserviamo che, poich x [0, 1], la funzione integranda varia pure essa
nellintervallo [0, 1] per cui 0 < y
n
<1.
Analiticamente, si ha:
y
n
+10y
n1
=
_
1
0
x
n
+10x
n1
x +10
dx =
_
1
0
x
n1
(x +10)
x +10
dx =
_
1
0
x
n1
dx =
1
n
Vale anche la relazione
y
0
=
_
1
0
1
x +10
dx =ln(11) ln(10).
Possiamo pensare, quindi, di calcolare numericamente il valore di y
n
attraverso il seguente algoritmo:
1. valutare y
0
=ln(11) ln(10)
2. per n =1, 2, . . . , 30 valutare y
n
=
1
n
10y
n1
Questa formula ricorsiva darebbe lesatto valore se non fossero presenti errori di arrotondamento che ci
allontanano completamente dalla soluzione vera. Lerrore si moltiplica esponenzialmente.
32
3.7. Instabilit e malcondizionamento
Infatti
y
1
=110y
0
y
2
=
1
2
10(110y
0
) =
1
2
10+(10)
2
y
0
y
3
=
1
3
10(
1
2
10+10
2
y
0
) =10
3
y
0
+cost ant e
.
.
.
.
.
.
y
n
=(10)
n
y
0
+cost ant e
n
Lalgoritmo quindi, considerati gli errori di arrotondamento, presenta un errore E
n
con crescita di tipo
esponenziale. Difatti otteniamo valori che via via si allontanano dallintervallo di ammissibilit [0, 1].
I risultati che ricaviamo sono i seguenti (osserviamo che sono leggermente diversi a seconda dal linguaggio
usato, proprio per effetto dellinstabilit).
Da un programma in Fortran:
n y
n
0 9.5310e-2
1 4.6898e-2
2 3.1021e-2
3 2.3122e-2
4 1.8778e-2
... ....
7 -3.0229e-1
8 3.1479e+0
9 -3.1368e+1
10 3.1378e+2
18 3.1377e+10
27 -3.1377e+19
30 3.1377e+22
Da un programma Matlab:
n y
n
0 9.5310e-2
1 4.6898e-2
2 3.1018e-2
3 2.3154e-2
4 1.8465e-2
... ....
7 1.1481-2
8 1.0194e-2
9 9.1673e-3
10 8.3270e-3
18 -9.1694e+1
27 -9.1699e+9
30 -9.1699e+13
Se invece, consideriamo y
n1
=
1
10
(
1
n
y
n
), partendo da un valore di n molto grande e andando a ritroso,
lerrore diminuisce. Perci, dato un valore di accuratezza >0 e ssato un intero n
1
possibile determinare
lintero n
0
tale che, partendo da y
n
0
=0 e andando a ritroso, gli integrali y
n
saranno valutati con un errore
in valore assoluto minore di per 0 <n n
1
. Infatti:
y
n
0
=0
y
n
0
1
=
1
10
1
n
0
y
n
0
2
=
1
10
(
1
n
0
1

1
10
1
n
0
) =
1
(10)
2
n
0
+cost ant e
.
.
.
.
.
.
y
n
=
1
(10)
n
0
n
n
0
+cost ant e
n
0
n
Lerrore al passo n dipende, quindi, (in valore assoluto) da
1
10
n
0
n
.
33
3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
Se richiediamo una tolleranza =10
6
, e ssiamo un valore n
1
, per calcolare n
0
dovr essere
1
10
n
0
n
1
< cio 10
n
1
n
0
<
Passando al logaritmo in base 10:
n
1
n
0
<log =n
0
>n
1
log
Fissato n
1
=20 si ricava n
0
=26.
Questa volta i calcoli danno gli stessi risultati sia in Matlab sia in Fortran:
n y
n
n y
n
26 0.000000 11 7.62944e-3
25 3.84615e-3 10 8.32797e-3
24 3.61538e-3 9 9.16720e-3
23 3.80513e-3 8 1.01944e-2
22 3.96731e-3 7 1.14806e-2
21 4.14872e-3 6 1.31377e-2
20 4.34703e-3 5 1.53529e-2
19 4.56530e-3 4 1.84647e-2
18 4.80663e-3 3 2.31535e-2
17 5.07489e-3 2 3.10180e-2
16 5.37486e-3 1 4.68982e-2
15 5.71251e-3 0 9.53102e-2
14 6.09542e-3
13 6.53332e-3
12 7.03898e-3
Osserviamo come il valore y
0
coincida con il valore teorico noto.
Lesempio appena visto ci porta a dare alcune considerazioni sui criteri su cui si deve basare un algorit-
mo: un algoritmo deve essere accurato, efciente e robusto, accurato nel senso che bisogna essere in grado
di sapere la grandezza dellerrore che si commette nellalgoritmo stesso; efciente in termini di velocit di
esecuzione e di richiesta di spazio di memoria per le variabili utilizzate; robusto nel dare il risultato corretto
entro un livello di tolleranza dellerrore che sia accettabile.
3.7.2 Malcondizionamento
Denizione 3.7.2 Un problema si dice malcondizionato se a piccole variazioni nei dati di input del problema
corrispondono forti variazioni nei dati di output.
Quando il problema molto sensibile alle variazioni dei dati di input, producendo risultati molto diversi tra
loro, allora nessun algoritmo, per quanto robusto e stabile, potr dare una soluzione robusta al problema
stesso.
Esempio 3.7.2 Il problema del calcolo delle radici di un polinomio p(x) di grado n un esempio di
problema malcondizionato.
Sia p(x) =a
0
+a
1
x +a
2
x
2
+. . . +a
n
x
n
. I dati di input del problema sono i coefcienti a
0
, a
1
, . . . , a
n
. I dati di
output sono le radici del polinomio.
Si pu provare che a piccole variazioni sui dati iniziali, corrispondono grandi variazioni sui risultati.
34
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 radici
1, 2, . . . , 10. Se perturbiamo il polinomio variando il coefciente a
9
del valore di 0.00001, considerando quin-
di il polinomio p(x) +0.00001x
9
, le radici corrispondenti si discostano di poco da quelle del polinomio di
partenza, come si pu notare in Figura 3.6. Ma se variamo il coefciente a
9
del valore 0.0001, considerando
cio il polinomio p(x) +0.0001x
9
allora le radici corrispondenti a x
7
, x
8
, x
9
, x
10
non saranno pi reali ma
avranno anche una parte immaginaria. La piccola variazione sui dati di ingresso, quindi, provoca una
grande 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 a
piccole variazioni sui dati di ingresso del problema ci possono essere piccole o grandi variazioni sui dati di
uscita si chiama indice di condizionamento (o numero di condizionamento) del problema. indice di
condiziona-
mento
Diamo la denizione nel caso in cui il nostro problema si possa identicare 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 ingresso
non 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(x
2
) f (x) + f
0
(x)x
La variazione sul dato duscita 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
3. RAPPRESENTAZIONE DEI NUMERI NEL CALCOLATORE
Se utilizziamo gli errori relativi, abbiamo (e sapendo che y = f (x)):
y
y

f
0
(x)x
f (x)
Moltiplico poi numeratore e denominatore a secondo membro per x
y
y

x f
0
(x)
f (x)
x
x
Al limite per x 0, questa uguaglianza approssimata (abbiamo usato il simbolo ) diventa una vera
uguaglianza. Questo suggerisce di denire lindice 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 relative
perturbazioni di x.
Per x =0 e y 6=0, non ha senso considerare lerrore relativo
x
x
, e si considera lerrore assoluto su x. In tal
caso, si denisce indice di condizionamento la quantit
(cond f )(x) =

f
0
(x)
f (x)

Per x = y = 0 si considera invece lerrore assoluto sia per x che per y, dimodoch lindice di
condizionamento diventa
(cond f )(x) =| f
0
(x)|
Esempio 3.7.3 Sia f (x) = x
1/
, con x > 0 e > 0. Calcoliamo lindice di condizionamento applicando la
formula (poich abbiamo supposto x >0, si ha f (x) 6=0). Risulta
(cond f )(x) =

x f
0
(x)
f (x)

x
1

x
1/1
x
1/

=
1

Per grande, (cond f )(x) tende a zero, quindi abbiamo un problema bencondizionato. Se, invece molto
piccolo si ha un problema malcondizionato (se =10
10
, si ha f (x) =x
10
10
e (cond f )(x) =10
10
, un valore
molto grande).
36
C
A
P
I
T
O
L
O
4
ZERI DI FUNZIONE
Non so come il mondo potr
giudicarmi ma a me sembra
soltanto di essere un bambino che
gioca sulla spiaggia, e di essermi
divertito a trovare ogni tanto un
sasso o una conchiglia pi bella del
solito, mentre loceano della verit
giaceva insondato davanti a me.
Isaac Newton
4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2 Metodo delle Bisezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3 Metodo del Punto Fisso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.4 Il Metodo di Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.5 Convergenza di un metodo iterativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.6 Complessit computazionale di uno schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.7 Il metodo delle secanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.8 Confronto tra i metodi di Newton-Raphson e la Regula Falsi . . . . . . . . . . . . . . . . . . . . . . 50
4.9 Metodo di Newton-Raphson per radici multiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.10 Controllo sugli scarti e graci di convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.11 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.1 Introduzione
Il problema di calcolare la radice quadrata di un numero un problema molto antico. Gi gli antichi
Babilonesi, intorno al 1700 a.C., se lo erano posto e avevano trovato la soluzione: per calcolare
p
b, partivano
da un certo valore x che si avvicinava alla soluzione, dividevano b per questo numero, e facevano poi la
media, iterando il procedimento. Lalgoritmo si pu schematizzare nel modo seguente:
partire da x
0
prossimo a
p
b;
considerare x
1
=
1
2
(x
0
+
b
x
0
);
generalizzando: x
n+1
=
1
2
(x
n
+
b
x
n
).
37
4. ZERI DI FUNZIONE
Per esempio, per calcolare
p
2 1.41421356237310, sapendo che il valore che dobbiamo approssimare
compreso tra 1 e 2, possiamo partire da x
0
=1.5, ottenendo:
x
0
= 1.5
x
1
=
1
2
(1.5+
2
1.5
) =1.41666667
x
2
=
1
2
(1.41666667+
2
1.41666667
) =1.41421569
x
3
=
1
2
(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) =x
2
b.
I metodi numerici discussi in questo Capitolo servono per trovare approssimazioni numeriche ad
equazioni 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 segno
opposto. Allora, per il teorema del Valore Intermedio (si veda il Teorema 2.5.3 con K = 0), esiste almeno un
punto ]a, b[ tale che f () =0.
Assumiamo, per semplicit che ci sia una sola radice nellintervallo ]a, b[ (nel caso ci sia pi di una
radice, 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, viene
dimezzato lintervallo precedente, cercando in tal modo di racchiudere la radice in sottointervalli sempre
pi piccoli.
Si pone a
1
=a e b
1
=b. Si prende il punto medio dellintervallo [a
1
, b
1
], c
1
=
a
1
+b
1
2
.
Se f (c
1
) = 0 allora abbiamo trovato la radice dellequazione, altrimenti si va a controllare il segno di
f (c
1
).
Se f (c
1
) e f (a
1
) hanno lo stesso segno, allora si trova nellintervallo ]c
1
, b
1
[ (applicando di nuovo
il teorema del Valore Intermedio). In tal caso porremo a
2
=c
1
e b
2
=b
1
.
Se, invece, f (c
1
) e f (b
1
) hanno lo stesso segno, allora si trova nellintervallo ]a
1
, c
1
[ In tal caso
porremo a
2
=a
1
e b
2
=c
1
.
Riapplichiamo questa procedura appena descritta sul sottointervallo [a
2
, b
2
]
Fermiamo il procedimento ad una certa iterazione n, se f (c
n
) = 0 o se lampiezza del sottointervallo
sufcientemente piccola, cio
b
n
a
n
2
t ol l dove t ol l una certa tolleranza pressata. In tal caso
assumiamo c
n
come approssimazione della radice .
Osserviamo che, ad ogni passo, viene dimezzato lintervallo in cui si trova la radice , da cui
|c
n
|
b a
2
n
.
Da questa relazione, si pu determinare il numero di iterazioni n necessarie per calcolare unapprossimazio-
ne della radice entro una certa tolleranza t ol l richiesta. Infatti
b a
2
n
t ol =|c
n
| t ol
Ma
b a
2
n
t ol 2
n

b a
t ol
=n
log
_
b a
t ol

log(2)
.
Lalgoritmo di bisezione pu essere descritto nel modo seguente (sotto forma di pseudo-codice). Se il
metodo non converge (perch, ad esempio, la funzione che abbiamo scelto non assume segno opposto agli
38
4.3. Metodo del Punto Fisso
Figura 4.1: Metodo delle Bisezioni
estremi dellintervallo), il procedimento iterativo potrebbe entrare in stallo (pensiamo ad un programma da
fare eseguire al calcolatore) e quindi conviene introdurre un numero massimo di iterazioni, che viene indi-
cato con itmax.
Dati di input: a, b, t ol , i t max
Dati di output: soluzione approssimata c o messaggio di fallimento
1 vericare che f (a) f (b) <0, altrimenti non si pu implementare il metodo ;
2 n 1 ;
3 c (a +b)/2 ;
4 scar t o |b a|/2 ;
5 Fintantoch n i t max e ( f (c) 6=0 e scar t o >t ol )
6 n n +1 (incrementa n) ;
7 Se f (a) f (c) >0 allora
8 a c
9 altrimenti
10 b c
11 Fine-Se
12 aggiorna c ;
13 aggiorna scar t o ;
14 Fine-Fintantoch
15 Se f (c) =0 o scar t o t ol allora
16 c la soluzione approssimata
17 altrimenti
18 n >i t max ;
19 il metodo fallito dopo i t max iterazioni ;
20 Fine-Se
4.3 Metodo del Punto Fisso
Il problema f (x) =0 pu essere reso equivalente alla ricerca del punto sso di una opportuna funzione g
(vale a dire del problema g(x) =x).
39
4. ZERI DI FUNZIONE
Ad esempio, da f (x) =

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

x
2
_
2
sin(x)+x =x
da cui poniamo g(x) =

x
2
_
2
sin(x) +x. Le radici della f coincidono con i punti ssi della g.
Denizione 4.3.1 Data una funzione g, si denisce punto sso della g, quel punto
che soddisfa la relazione g() =
Una funzione pu ammettere uno o pi punti ssi o non ammetterne affatto.
Un modo per calcolare un punto sso 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 x
0
= 1.
Con una calcolatrice, andiamo a calcolare (in modalit radianti!) il suo coseno: ricaviamo x
1
=cos(x
0
) =
g(x
0
) = 0.54030230. Successivamente, calcoliamo il coseno di x
1
, ottenendo x
2
= cos(x
1
) = 0.857553216.
Osserviamo che x
2
=cos(x
1
) =cos(cos(x
0
)) e non cos
2
(x
0
)! Abbiamo innescato, in questo modo, un proce-
dimento iterativo per cui x
n+1
=cos(x
n
) =g(x
n
). Conla calcolatrice, basta digitare sulla funzione cosogni
volta in modo da avere i nuovi valori della successione x
n+1
. I primi numeri che otteniamo non sono molto
importanti. Quelli importanti sono quelli che si hanno dopo 15, 30 o 100 passi. Nel nostro caso, abbiamo
n x
n
5 0.7013687746
11 0.7356047404
13 0.7414250866
14 0.7375068905
15 0.7401473356
29 0.7390893414
30 0.7390822985
56 0.7390851333
57 0.7390851332
58 0.7390851332
Perch i valori di x tendono a 0.7390851332? Cosa ha di speciale questo numero? un punto sso per la
funzione cos(x).
Esempio 4.3.2 Consideriamo la funzione g(x) =
1
2
x +2. Partendo da x
0
=0 si ha
n x
n
1 x
1
=
1
2
0+2 =2
2 x
2
=
1
2
2+2 =3
3 x
3
=
1
2
3+2 =3.5
4 x
4
=
1
2
3.5+2 =3.75
5 x
5
=
1
2
3.75+2 =3.875
6 x
6
=
1
2
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 x
n
che tende a , si ha, da una parte =lim
n
x
n+1
=lim
n
1
2
x
n
+2 =
1
2
+2 da cui, =
1
2
+2, cio =4.
40
4.3. Metodo del Punto Fisso
Scopriamo quindi che se literazione x
n+1
=g(x
n
) converge a , punto sso per la funzione g.
Da un punto di vista geometrico, i graci 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 ssi,
converge. Vediamo con un esempio.
Esempio 4.3.3 Sia g(x) =x
2
. Analiticamente troviamo due punti ssi per questa funzione. Dovendo essere
=
2
, si ricava
2
= 0, vale a dire ( 1) = 0: quindi = 0 e = 1 sono i due punti ssi per questa
funzione.
Partendo da x
0
=0.5, si ha la successione di valori 0.25, 0.0625, 0.00390625, rapidamente il metodo converge
a =0
Se si prende come punto iniziale un valore x
0
] 1, 1[, la successione converge a = 0. Le sole successioni
che convergono a =1 solo le ovvie successioni generate da x
0
=1. Se si prende come punto iniziale x
0
tale
che |x
0
| >1 allora lo schema iterativo x
n+1
=x
2
n
diverge a +. Partendo da x
0
=2, si ha 4, 16, 256, 65536...
Questo esempio signicativo per capire come ciascun punto sso abbia un proprio bacino di attra-
zione: se si prende x
0
in questo bacino, allora i valori x
n
tendono a . Un punto sso pu dunque attirare o
respingere i valori x
n
prodotti dallo schema iterativo.
Prima di passare a studiare quando lo schema di punto sso converge, ricordiamo che una funzione pu
ammettere pi di un punto sso, ammetterne uno solo o non ammetterne affatto. Ci sono due teoremi (2.5.4
e 2.5.5) che ci dicono quando una funzione pu ammettere punti ssi. Il primo assicura lesistenza di almeno
un punto sso (ci vuol dire che vi possono essere pi punti ssi) quando la funzione g, denita e continua
in [a, b], tale che a g(x) b per ogni x [a, b]. Il secondo teorema aggiunge, a queste ipotesi, quelle che g
sia di classe C
1
e, inoltre, |g
0
(x)| m<1 per ogni x [a, b]: in tal caso esiste un unico punto sso.
importante osservare che, data una funzione che ammette punto sso, le ipotesi dei due teoremi 2.5.4
e 2.5.5 possono essere rilassate dallintervallo [a, b] ad un intorno del punto sso.
Possiamo ora provare un teorema di convergenza per lo schema iterativo del punto sso.
Teorema 4.3.1 A partire da un punto iniziale x
0
, lo schema iterativo x
n+1
= g(x
n
) converge al punto sso di
g se e solo se |g
0
(x)| <1 in un intorno di .
Dimostrazione. Dalle relazioni
=g()
x
n+1
=g(x
n
)
sottraendo membro a membro e, applicando il teorema del Valore Medio 2.5.2 (con
n
un opportuno punto
del segmento che congiunge a x
n
), otteniamo:
x
n+1
=g() g(x
n
) =g
0
(
n
)(x
n
)
Possiamo scrivere questa relazione per n =0, 1, . . . ottenendo
x
1
=g
0
(
0
)(x
0
)
x
2
=g
0
(
1
)(x
1
)
x
3
=g
0
(
2
)(x
2
)
.
.
. =
.
.
.
x
n
=g
0
(
n1
)(x
n1
)
41
4. ZERI DI FUNZIONE
Figura 4.2: Il metodo di punto sso: esempi con g(x) =cos(x) (a sinistra), e g(x) =
1
2
x +2 (a destra)
Moltiplicando, ora, membro a membro e prendendo i valori assoluti, abbiamo:
|x
1
| |x
2
| . . . |x
n
| =
|g
0
(
0
)| |g
0
(
1
)| |g
0
(
2
)| . . . |g
0
(
n1
)| |x
0
| |x
1
| . . . |x
n1
|
La relazione appena trovata pu essere semplicata, dividendo ambo i membri per |x
1
| |x
2
| . . .
|x
n1
| ottenendo:
|x
n
| =|g
0
(
0
)| |g
0
(
1
)| |g
0
(
2
)| . . . |g
0
(
n1
)||x
0
|
Assumiamo, ora che |g
0
(x
i
)| m per i = 0, 1, . . . , n 1. Abbiamo dunque una relazione che lega lerrore
assoluto al passo n con lerrore assoluto iniziale.
|x
n
| m
n
|x
0
|
Perch il metodo converga, lerrore deve tendere a zero per n che tende allinnito. Se m < 1 assicurata la
convergenza (quindi, se in un intorno del punto sso, la derivata prima minore di 1, lo schema converge).
Se invece m>1 in un intorno del punto sso, lo schema non pu convergere al punto sso.
Se vale m = 1 nulla si pu dire a priori, ma bisogna vedere caso per caso cosa succede nellintorno del
punto sso. 4
Negli esempi precedenti:
g(x) g
0
(x)
cos(x) sin(x)
1
2
x +2
1
2
x
2
2x
Nel primo caso (esempio 4.3.1) sin(0.7390851332) = 0.673612, perci in un intorno del punto sso la
derivata minore di 1 in valore assoluto e si ha convergenza.
Nellesempio 4.3.2 g
0
(x) =
1
2
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 sso,
vale m<1, in un intorno del secondo punto sso 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 graco, le iterazioni dello schema di punto sso si possono vedere sotto forma di
ragnatela. Le iterazioni, infatti, si muovono avanti e indietro tra il graco della y = g(x) e il graco della
bisettrice y = x. Lesempio 4.3.1, con g(x) = cos(x), rappresentato in Figura 4.2 (a sinistra): partendo da
(x
0
, x
0
) sulla retta y =x, applicando lalgoritmo si ha x
1
=g(x
0
). Perci:
42
4.3. Metodo del Punto Fisso
Figura 4.3: Il metodo di punto sso: esempio con g(x) = x
2
. Si noti la convergenza monotona a = 0 (a
sinistra) e la divergenza monotona da =1 (a destra)
da (x
0
, x
0
) si va su o gi no a raggiungere (x
0
, x
1
) sulla curva g;
da (x
0
, x
1
) si arriva a (x
1
, x
1
) sulla bisettrice y =x.
Questi due passi vengono ripetuti per tutte le altre iterazioni. Da x
1
si arriva sulla curva a g(x
1
). Ora laltezza
x
2
. Da qui si va sulla bisettrice al punto (x
2
, x
2
). E cos via. Lo scopo delle iterazioni, infatti, di arrivare al
punto (, ) 0.7390851332 che il punto di intersezione tra il graco di g e la bisettrice y = x. Osserviamo
che, per questo esempio, i valori della successione si avvicinano a muovendosi a destra e a sinistra rispetto
ad esso. Si parla di convergenza oscillante.
Nellesempio 4.3.2, si devono intersecare due linee rette. Notiamo, anche dalla Figura 4.2 (a destra), che i
valori delle iterazioni si trovano tutti da un lato rispetto al punto sso: si parla di convergenza monotona.
In generale, quando 0 g
0
(x) <1 in un intorno del punto sso, si ha convergenza monotona. Se, invece,
1 <g
0
(x) <0 in un intorno del punto sso, si ha convergenza oscillante.
Analogamente, in Figura 4.3, si possono osservare le conclusioni gi viste per lesempio 4.3.3, in cui g(x) =
x
2
: si ha convergenza monotona verso =0 partendo da un punto iniziale in valore assoluto minore di uno,
e divergenza monotona a innito, partendo da |x
0
| >1.
Esempio 4.3.4 Consideriamo ora g(x) =xsin(x) nellintervallo [0, 2]. Data la periodicit della funzione
seno, g ammette pi di un punto sso. Infatti da =sin() si ha 0 =sin() da cui =0, = e =2.
Studiamo ora la derivata prima g
0
(x) = 1cos(x). Si ha g
0
(0) = 11 = 0, g
0
() = 1(1) = 2 e g
0
(2) =
11 =0. Da queste informazioni, deduciamo che qualunque sia il punto iniziale x
0
la successione generata
dallo schema del punto sso non potr mai convergere a , come si vede anche dalla Figura 4.4.
Nel caso in cui il metodo di punto sso converge, si possono ricavare maggiorazioni per lerrore che si
commette approssimando mediante x
n
. Vale infatti la disuguaglianza
|x
n
|
m
1m
|x
n
x
n1
|
dove m, come prima, una maggiorazione di |g
0
(x)|.
43
4. ZERI DI FUNZIONE
Figura 4.4: Il metodo di punto sso: esempio con g(x) =x sin(x). =0 e =2 sono punti ssi attrattivi, al
contrario di = in cui g
0
() =g
0
() =2
Proviamo questo risultato, scrivendo lerrore alliterazione n come x
n
= g() g(x
n1
)
Applicando il teorema del valor medio e considerando, come prima, |g
0
(x)| m < 1 in un
intorno del punto sso, si ha:
|x
n
| m|x
n1
| (4.1)
Possiamo scrivere x
n1
nel modo seguente aggiungendo e sottraendo x
n
:
x
n1
=x
n
+x
n
x
n1
x
n1
=g() g(x
n1
) +x
n
x
n1
|x
n1
| m|x
n1
| +|x
n
x
n1
|
(1m)|x
n1
| |x
n
x
n1
|
|x
n1
|
1
1m
|x
n
x
n1
|
Andando a sostituire questa maggiorazione nella disuguaglianza (4.1), si ha
|x
n
|
m
1m
|x
n
x
n1
|
Abbiamo una maggiorazione dellerrore che lega lerrore al passo n con il valore assoluto della differenza
tra due iterazioni successive |x
n
x
n1
| (questultima quantit prende il nome di scarto).
Generalmente, per vedere se il metodo di punto sso converge al punto sso entro una certa tolleranza
prestabilita, il controllo da fare proprio sullo scarto d
n
= |x
n
x
n1
|. Sfruttiamo questo fatto per vedere
come implementare lalgoritmo dello schema di punto sso (sotto forma di pseudo-codice; per i dettagli
sullimplementazione in Fortran si vada a pag. 172):
44
4.4. Il Metodo di Newton-Raphson
Dati di input: x
0
, t ol , i t max
Dati di output: x
n
soluzione approssimata o messaggio di fallimento
1 n 1 contatore delle iterazioni;
2 d
n
2t ol (una quantit iniziale > t ol ) ;
3 Fintantoch n i t max e d
n
>t ol
4 incrementa n di 1;
5 applicare lalgoritmo di punto sso x
n
=g(x
n1
) ;
6 aggiorna d
n
;
7 Fine-Fintantoch
8 Se d
n
t ol allora
9 x
n
la soluzione approssimata
10 altrimenti
11 n >i t max ;
12 il metodo fallito dopo i t max iterazioni ;
13 Fine-Se
4.4 Il Metodo di Newton-Raphson
Il metodo di Newton-Raphson
1
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 metodo
di Newton-Raphson come un particolare schema di punto sso, come vedremo in seguito.
Supponiamo ora che la derivata prima e seconda di f esistano e siano continue e assumiamo che la
derivata prima f
0
sia valutabile con sufciente facilit.
Lo schema di Newton-Raphson uno schema iterativo che produce una successione di approssimazioni
x
0
, x
1
, . . . , x
n
della radice della funzione f .
Sia x
n
literata corrente. Applicando la formula di Taylor di centro x
n
si ha:
f (x) = f (x
n
) + f
0
(x
n
)(x x
n
) + f
00
(
x
)(x x
n
)
2
/2
dove
x
un punto (che non conosciamo) compreso tra x e x
n
.
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 (x
n
) + f
0
(x
n
)(x
n
)
Supponendo f
0
(x
n
) 6=0, otterremmo, con semplici passaggi,
=x
n

f (x
n
)
f
0
(x
n
)
Per una funzione non lineare, il discorso da fare molto simile.
La nuova approssimazione x
n+1
vogliamo che sia uguale al valore x
n
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 a
x
3
2x 5 =0). Il metodo di Newton fu pubblicato per la prima volta nel 1685. Nel 1690 Joseph Raphson ne pubblic una descrizione
semplicata in termini di approssimazioni successive x
n
piuttosto che di sequenze di polinomi. Fu solo nel 1740 che Thomas Simpson
descrisse il metodo di Newton come un metodo iterativo per risolvere equazioni non lineari (e non solo polinomi) e diede una versione
generalizzata per sistemi di due equazioni.
Isaac Newton (1643-1727), inglese, fu sico, matematico, astronomo, alchimista, inventore, losofo naturalista. visto come uno dei
pi grandi scienzati nella storia dellumanit.
Su Joseph Raphson (1648-1715) non si hanno molti dettagli. Pare che Newton stesso gli permettesse di vedere e studiare i suoi scritti
matematici. Il suo lavoro del 1690 Analysis aequationum universalis gli valse lingresso nella Royal Society, nel 1691 bench fosse uno
studente (si laure nel 1692) piuttosto anziano (aveva 43 anni).
45
4. ZERI DI FUNZIONE
Applicando la formula di Taylor di centro x
n
, deve essere
f (x
n+1
) = f (x
n
+h) = f (x
n
) + f
0
(x
n
)h + f
00
(
h
)h
2
/2
Vogliamo che sia f (x
n+1
) =0, da cui, trascurando il termine in h
2
e considerando f
0
(x
n
) 6=0, ricaviamo
h =
f (x
n
)
f
0
(x
n
)
Utilizziamo questo valore di h per la nuova approssimazione x
n+1
=x
n
+h ottenendo la formula
x
n+1
=x
n

f (x
n
)
f
0
(x
n
)
, n =0, 1, 2, . . . (4.2)
Linterpretazione geometrica del metodo di Newton che x
n+1
lintercetta, sullasse delle x, della
tangente della f a x
n
(vedi gura 4.5).
Figura 4.5: Il metodo di Newton-Raphson applicato alla funzione f (x) =(x/2)
2
sin(x) con x
0
=1.3
Lo schema di Newton-Raphson si pu vedere come un caso particolare dello schema del punto sso ap-
plicato alla funzione g(x) =x f (x)/f
0
(x). Perch lo schema del punto sso converga, deve essere |g
0
(x)| <1
in un intorno di . Nel caso specico 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 numeratore
f () =0 (essendo radice della f ). Per continuit, allora, vale |g
0
(x)| <1 in un intorno di . Pertanto il metodo
di Newton-Raphson generalmente convergente.
Per vedere come si riduce lerrore via via che le approssimazioni si avvicinano a , consideriamo lerrore
cambiato di segno
n
, per cui x
n
=+
n
. Sostituendo in (4.2) abbiamo

n+1
+ =
n
+
f (+
n
)
f
0
(+
n
)

n+1
=
n

f (+
n
)
f
0
(+
n
)
46
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
()
2
n
f
00
()/2+. . .
f
0
() +
n
f
00
() +. . .
=

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

n+1
=
f
00
()
2f
0
()

2
n
= A
2
n
ponendo A =
f
00
()
2f
0
()
.
Lultima relazione che abbiamo ottenuto ci dice che lerrore al passo n +1 proporzionale, secondo il
fattore A, al quadrato dellerrore al passo precedente. Perci se partiamo da un errore iniziale dellordine
di 10
2
, al passo successivo lerrore proporzionale a 10
4
e poi a 10
8
no a 10
16
in tre sole iterazioni.
Generalmente, quindi, il numero delle cifre signicative raddoppia ad ogni passo del metodo. Si parla di
convergenza quadratica. Sulla
convergenza
Nel caso in cui sia una radice multipla, allora f
0
() =0 e A =: se il metodo converge, la convergenza
non sar pi quadratica ma avremo una convergenza di tipo lineare, come vedremo meglio in seguito.
Se in vi un punto di esso, non orizzontale, per cui f () = 0, f
0
() 6= 0, f
00
() = 0, allora A = 0 e ci
aspettiamo 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 sufcientemente grande, vale
|x
n+1
| M|x
n
|
a convergenza quadratica se esiste una costante M tale che, per n sufcientemente grande, vale
|x
n+1
| M|x
n
|
2
a convergenza superlineare se esiste una successione di costanti M
n
0 tale che, per n
sufcientemente grande, vale
|x
n+1
| M
n
|x
n
|.
In generale un metodo ha ordine di convergenza p se si possono denire due costanti p 1 e M > 0 tali
che
lim
n
|x
n+1
|
|x
n
|
p
=M
La costante M prende il nome di costante asintotica dellerrore o fattore di convergenza.
Nel caso del metodo di Newton-Raphson, generalmente vale p = 2 e la costante asintotica dellerrore
quella che abbiamo denito come A presa in valore assoluto, cio M =

f
00
(
2f
0
()

.
Nel metodo del punto sso, la convergenza lineare. Infatti, considerando lerrore cambiato di segno, la
relazione x
n+1
=g(x
n
) 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

n+1
=g
0
()
n
47
4. ZERI DI FUNZIONE
La costante asintotica per lo schema di punto sso 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 lintervallo in cui viene cercata lapprossimazione della radice).
Esempio 4.5.1 Consideriamo lequazione 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:
x
n+1
=x
n

2x
n
cos(x
n
) +1
2+sin(x
n
)
Partendo da x
0
= 0.5 e richiedendo una tolleranza pari a 10
10
nei risultati (interrompiamo lalgoritmo
quando d
n
<10
10
), si ha:
n x
n
d
n
0 0.5
1 0.4730746270E-01 0.4526925E+00
2 0.5462695134E-03 0.4676119E-01
3 0.7458221874E-07 0.5461949E-03
4 0.1395426403E-14 0.7458222E-07
5 0.7647622253E-17 0.1387779E-14
I valori generati dallalgoritmo 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()|)
=
1
4
=0.25
Da un punto di vista teorico, applicando il teorema del valor medio, si ha
f () f (x
n
) = f
0
(
n
)(x
n
)
dove
n
un punto, che non conosciamo, compreso tra e x
n
. Per x
n
vicino a possiamo considerare

n
x
n
, da cui ricaviamo (essendo f () =0):
f (x
n
) f
0
(x
n
)(x
n
)
. Sostituendo questa espressione nelliterazione di Newton-Raphson si ha:
x
n+1
=x
n

f (x
n
)
f
0
(x
n
)
x
n
+(x
n
)
vale a dire
x
n+1
x
n
=x
n
cio d
n+1
=
n
Ma in condizioni di convergenza, d
n+1
<d
n
da cui, per lerrore, vale la maggiorazione
n
<d
n
.
Perci gli scarti sono molto vicini agli errori e possono essere utilizzati sia per controllare il numero di
iterazioni da effettuare per approssimare la radice entro una certa tolleranza sia per approssimare M.
Nel nostro esempio
d
2
(d
1
)
2
=0.2282
d
3
(d
2
)
2
=0.2498
d
4
(d
3
)
2
=0.2500
d
5
(d
4
)
2
=0.2495
4.6 Complessit computazionale di uno schema
Un altro elemento da considerare per valutare lefcienza numerica di uno schema iterativo la sua com-
plessit computazionale. Un metodo, infatti, pu avere un elevato ordine di convergenza ma avere anche un
costo computazionale molto elevato. Viceversa, un metodo pu avere un basso ordine di convergenza ma
essere anche semplice computazionalmente e, quindi, molto vantaggioso da questo punto di vista.
48
4.7. Il metodo delle secanti
Si denisce indice di efcienza E dello schema iterativo la quantit
E =p
1/s
dove s indica il numero di volte in cui bisogna calcolare la funzione e la sua derivata prima ad ogni iterazione
e p lordine 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 essere
semplice ma a volte potrebbe rivelarsi unoperazione 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
x
n+1
=x
n

f (x
n
)
C
n
Per C
n
= f
0
(x
n
) abbiamo la formula di Newton-Raphson, che possiamo anche chiamare della tangente
variabile perch il coefciente angolare della retta tangente a (x
n
, f (x
n
)) che interseca lasse delle x in x
n+1
.
Vediamo altre scelte di C
n
:
C
n
= f
0
(x
0
): il valore di C
n
costante e d vita al metodo della tangente ssa.
C
n
=
f (x
1
) f (x
0
)
x
1
x
0
: abbiamo sempre una costante che approssima la derivata f
0
(x
0
) utilizzando i valori
di x
1
e x
0
. Lo schema detto della secante ssa.
C
n
=
f (x
n
) f (x
n1
)
x
n
x
n1
. La derivata f
0
(x
n
) approssimata utilizzando il rapporto incrementale della f
valutata in x
n
e x
n1
. Abbiamo il metodo delle secante variabile, che chiameremo nel seguito anche
metodo
2
della Regula Falsi.
In forma estesa, literazione n +1 della Regula Falsi si scrive come:
x
n+1
=x
n

f (x
n
)(x
n
x
n1
)
f (x
n
) f (x
n1
)
Notiamo che, per innescare il metodo occorrono due valori iniziali, x
0
e x
1
. Ma richiesta solo la
valutazione della funzione f a ciascun passo (nessuna conoscenza della derivata prima).
Da un punto di vista geometrico, nel metodo delle secanti il valore x
n+1
dato dallintercetta sullasse
delle x della retta passante per x
n
, f (x
n
) e x
n1
, f (x
n1
). Per quanto riguarda laccumulo degli errori di arro-
tondamento, conviene utilizzare la formula cos come stata scritta in quanto pi sicura rispetto alla forma
compatta in cui vengono raccolti i termini, data da
x
n+1
=
x
n1
f (x
n
) x
n
f (x
n1
)
f (x
n
) f (x
n1
)
in quanto in questultima, si pu avere il fenomeno della cancellazione numerica per x
n
x
n1
e
f (x
n
) f (x
n1
) >0.
Per quanto riguarda lordine di convergenza si pu dimostrare che si ha convergenza superlineare poich
vale la relazione

n+1
=M
p
p +1

p
n
dove p =
1+
p
5
2
=1.618 e A la costante asitontica del metodo di Newton-Raphson, da cui

n+1
=M
0.618

1.618
n
2
Attenzione! In letteratura viene descritto un altro metodo (simile ma non lo stesso) con il nome della Regula Falsi o Falsa Posizione
che genera i valori x
n+1
in modo che la radice sia sempre compresa tra le iterazioni successive.
49
4. ZERI DI FUNZIONE
Figura 4.6: Il metodo della Regula Falsi applicato alla funzione f (x) =(x/2)
2
sin(x) con x
0
=1.3 e x
1
=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,
questultimo computazionalmente pi efciente. Si ha infatti
Metodo p s E
Newton-Raphson 2 2
p
2 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 x
0
= 1.3 per entrambi i metodi e x
1
= 1.35 per la Regula Falsi. Come
criterio di arresto, consideriamo una tolleranza t ol = 1.e 8, cio andremo avanti con le iterazioni no a
quando troveremo che lo scarto d
n
= |x
n
x
n1
| sar minore di t ol . Otteniamo i seguenti risultati per il
metodo di Newton-Raphson
n x
n
f (x
n
) f
0
(x
n
) d
n
d
n
/d
2
n1
0 1.3 -0.541058185 0.382501171
1 2.714526871831 1.42796213 2.26744846 1.41452687
2 2.084760792766 0.215754599 1.53401376 0.629766079 0.314743565
3 1.944113685369 0.0137718957 1.33676314 0.140647107 0.35462739
4 1.933811265085 7.60156095E-05 1.32199993 0.0103024203 0.520808008
5 1.933753764621 2.37200355E-09 1.32191743 5.7500464E-05 0.541742396
6 1.933753762827 -1.00668172E-16 1.79436599E-09 0.542710632
50
4.8. Confronto tra i metodi di Newton-Raphson e la Regula Falsi
Per la Regula Falsi:
n x
n
f (x
n
)
f (x
n
) f (x
n1
)
x
n
x
n1
d
n
d
n
/d
1.618
n1
0 1.3 -0.541058185
1 1.35 -0.520098358 0.419196552
2 2.590702853065 1.15448972 1.34970922 1.24070285
3 1.735341043061 -0.233640901 1.62285784 0.85536181 0.603386215
4 1.879309845941 -0.0698346071 1.1377902 0.143968803 0.185374473
5 1.940687248331 0.00919996444 1.28768192 0.0613774024 1.41231076
6 1.933542654410 -0.000279035921 1.32673746 0.00714459392 0.653100215
7 1.933752971771 -1.04570967E-06 1.3217654 0.000210317362 0.623935239
8 1.933753762918 1.19824825E-10 1.32191686 7.91146198E-07 0.704441455
9 1.933753762827 -1.00668172E-16 9.0644825E-11 0.676026603
Attraverso gli scarti, abbiamo fatto una stima della costante asintotica dellerrore, considerando che, al
limite per k , x
n
. Le ultime colonne delle tabelle, infatti, valutano i rapporti d
n
/d
2
n1
e d
n
/d
1.618
n1
.
Diamo unulteriore stima di tali costanti facendo uso della denizione teorica e considerando x
n
.
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 x
6
(di Newton-Raphson) o, equivalentemente per x
9
(della
Regula 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). Nellintervallo ] /2, /2[ la f ha esattamente una radice, =0.
Il metodo di Newton applicato alla funzione f , diventa:
x
n+1
=x
n
tan(x
n
), n =0, 1, 2, . . .
Se scegliamo come valore iniziale x
0
=x

tale che tan(x

) =2x

, allora x
1
=x
0
, x
2
=x
1
=x
0
... Si ha una
situazione 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 applicando


il metodo del punto sso
a
alla funzione g(x) =arctan(2x).
Vediamo dunque cosa accade applicando il metodo di Newton-Raphson e la Regula Falsi utilizzando come
x
0
=x

( e x
1
=x
0
nella Regula Falsi). Facciamo i conti in singola precisione
b
, richiedendo unaccuratezza
dellordine =10
8
.
a
Se si considera g(x) =tan(x)/2 si trova il punto sso 0 in quanto g
0
(x

) >1 per g(x) =tan(x)/2.


b
Lavorando in doppia precisione non si riesce a osservare il comportamento ciclico ma si ha convergenza o divergenza a
seconda che si abbia uniterata |x
k
| < o >x

.
51
4. ZERI DI FUNZIONE
Abbiamo le seguenti tabelle.
Per Newton-Raphson
n x
n
f (x
n
) f
0
(x
n
) d
n
0 1.1655612 0.919009745 0.394234866
1 -1.1655612 -0.919009745 0.394234866 2.3311224
2 1.1655612 0.919009745 0.394234866 2.3311224
3 -1.1655612 -0.919009745 0.394234866 2.3311224
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
n 1.1655612 0.919009745 0.394234866 2.3311224
n+1 -1.1655612 -0.919009745 0.394234866 2.3311224
Per la Regula Falsi:
n x
n
f (x
n
)
f (x
n
) f (x
n1
)
x
n
x
n1
d
n
0 1.1655612 0.919009745
1 -1.1655612 -0.919009745 0.788469732
2 0.000000024087 0.000000024087 0.788469732 1.1655612
3 -0.000000006462 -0.000000006462 3.05485912E-08 2.38417108E-08
4 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 x
0
deve essere scelto tale che |x
0
| <x

.
Questo esempio ci permette di capire il signicato di metodo generalmente convergente e il fatto che le pro-
priet di convergenza di un metodo possono valere localmente, cio quando si sufcientemente vicini alla
radice.
Da un punto di vista pratico occorre prestare molta attenzione anche alla scelta del punto iniziale per il Quando
Newton-
Raphson d
risultati
scarsi
metodo di Newton-Raphson. Dal momento che la formula richiede una divisione per f
0
(x
n
), occorre evitare
di prendere un punto iniziale in cui la f abbia una tangente (e quindi f
0
) con pendenza vicina allo zero. In tal
caso, 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 x
0
= x

(a sinistra). La
funzione f (x) =x
5
6 (a destra)
52
4.9. Metodo di Newton-Raphson per radici multiple
Esempio 4.8.3 Consideriamo f (x) =x
5
6, per la quale f
0
(x) =5x
4
, il cui graco in Figura 4.7 (a destra).
Se partiamo da un punto iniziale prossimo allo zero, poich la tangente alla f quasi orizzontale, non si
riesce ad avere convergenza se non dopo molte iterazioni: partendo da x
0
=0.01 e richiedendo una tolleran-
za 10
8
, sono necessarie 88 iterazioni per arrivare a =1.430969081115725849. Vediamo in tabella, come
cambia il numero delle iterazioni al variare di x
0
:
x
0
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
Denizione 4.9.1 Data unequazione 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 in
quanto la formula che lega lerrore al passo n +1 con lerrore al passo n diventa
3
:

n+1
=
r 1
r

n
da cui la costante asintotica M =
r 1
r
. Per poter avere un metodo che sia di nuovo a convergenza
quadratica, occorre modicare lalgoritmo, ottenendo la formula di Newton-Raphson modicata, nel modo
seguente:
x
n+1
=x
n
r
f (x
n
)
f
0
(x
n
)
4.10 Controllo sugli scarti e graci di convergenza
Da un punto di vista pratico, il controllo per vericare la convergenza o meno della successione x
n
ge-
nerata dallo schema iterativo viene effettuato sullo scarto d
n
= |x
n
x
n1
| piuttosto che sullerrore (assolu-
to)
n
= | x
n
|, poich, se avessimo informazioni sullerrore, conosceremmo anche il valore di (che, in
generale, non noto).
Nel caso del metodo di Newton-Raphson, quando di ordine 2, abbiamo visto che il controllo sullo scarto
va bene (si veda quanto detto a pag. 48).
Vediamo cosa succede per metodi lineari. Sia t ol l la tolleranza richiesta per approssimare utilizzando
gli 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:
|x
n+1
| M|x
n
| =M|x
n
+x
n+1
x
n+1
| M(|x
n+1
| +|x
n+1
x
n
|)
Quindi

n+1
M(
n+1
+d
n+1
)
(1M)
n+1
Md
n+1
3
Il procedimento da seguire del tutto simile a quanto stato fatto nellipotesi incui f
0
() 6=0. Come esercizio, si consiglia di provare
a ricavare questo risultato.
53
4. ZERI DI FUNZIONE
Supponendo d
n+1
t ol l , vale

n+1

M
1M
d
n+1

M
1M
t ol l
Perci, per
M
1M
< 1 (quindi per M < 1/2), se d
n+1
t ol l anche
n+1
t ol l . Se, invece, M 1/2, allora
lerrore pu essere pi grande della tolleranza richiesta.
Per quanto riguarda il metodo della secante variabile, poich superlineare, in base alla denizione,

n+1
M
n+1

n
con M
n+1
0, perci si pu vedere come un caso limite di convergenza lineare con fattore di
convergenza che tende a zero, e quindi il controllo dello scarto permette un buon controllo dellerrore.
Quando si implementa un metodo iterativo, si pu fare il graco semilogaritmico di convergenza del
metodo, ponendo sullasse delle ascisse i valori delle iterazioni e sullasse delle ordinate i logaritmi (in base
10) degli scarti.
Asintoticamente possiamo sostituire lerrore con lo scarto, nella denizione di ordine di convergenza di
un metodo, per cui d
n
Md
p
n1
.
Nel caso in cui p =1, si ha:
d
n
Md
n1
d
n1
Md
n2
d
n2
Md
n3
.
.
.
.
.
.
d
2
Md
1
d
1
Md
0
Partendo dalla prima relazione abbiamo:
d
n
Md
n1
M
2
d
n2
M
3
d
n3
. . . M
n
d
0
Troviamo una relazione tra d
n
e d
0
. Passando ai logaritmi:
log
10
(d
n
) =nlog
10
(M) +log
10
(d
0
)
Abbiamo unequazione del tipo y =ax +b dove y =log
10
(d
n
) e x =n, che rappresenta lequazione della retta
nel nostro graco semilogaritmico, e la pendenza della retta vale a = log
10
(M). Dalla pendenza della retta
possiamo 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). Per
esempio, per p =2, si trova una curva che dipende da 2
n
.
Esempio 4.10.1 In Figura 4.8, riportiamo un esempio di graco con i proli di convergenza per i meto-
di di Newton-Raphson, secante variabile e punto sso per trovare lo zero della funzione f (x) = x +ln(x)
(applicando lo schema di punto sso alla funzione g(x) =e
x
).
54
4.11. Esercizi
Figura 4.8: Proli di convergenza a confronto
4.11 Esercizi
Esercizio 4.11.1 Si vuole risolvere lequazione x =g(x) con lo schema del punto sso; sapendo che
g(x) =x
2
5x +9
(a) calcolare analiticamente il valore del punto sso;
(b) determinare il fattore di convergenza M dello schema del punto sso;
(c) calcolare le approssimazioni x
1
, x
2
e x
3
partendo prima da x
0
=1 e poi da x
0
=2.5 e giusticandone
il diverso comportamento.
Svolgimento
(a) punto sso della funzione g se verica g() =.
Imponiamo dunque la condizione g() = . Ricaviamo
2
5 +9 = , ovvero
2
6 +9 = 0, cio
(3)
2
=0, da cui =3 punto sso 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 sso converge o meno proprio
perch nel punto sso la derivata prima vale esattamente 1, ma bisogna vedere caso per caso a seconda
del punto iniziale da cui si fa partire il metodo.
(c)
Per x
0
=1 si ha
k x
k
g(x
k
)
0 1 5
1 5 9
2 9 45
3 45 1809
Per x
0
=2.5 si ha
k x
k
g(x
k
)
0 2.5 2.75
1 2.75 2.8125
2 2.8125 2.84765625
3 2.84765625 2.870864868
55
4. ZERI DI FUNZIONE
Figura 4.9: Esercizio sullo schema di punto sso
Per x
0
= 1 il metodo non converge, mentre per x
0
= 2.5 il metodo converge. La diversit di com-
portamento si giustica gracamente, come si pu vedere dalla Figura 4.9, osservando che per x
0
=1 i
valori ottenuti dallo schema si allontanano sempre pi dal punto sso. Nel secondo caso, al contrario,
i valori si avvicinano con monotonia al punto sso.
Esercizio 4.11.2 Si vuole risolvere lequazione f (x) = 0 con f (x) = (x 1)
2
+3ln(x), nellintervallo [0.5, 2]
con gli schemi di Newton-Raphson e della Regula Falsi.
(a) Dimostrare esistenza e unicit della soluzione nellintervallo considerato.
(b) Calcolare le approssimazioni x
1
, x
2
e x
3
con lo schema di Newton-Raphson, partendo da x
0
=0.5;
(c) Calcolare le approssimazioni x
2
e x
3
con lo schema della Regula-Falsi partendo da x
0
= 0.5 e x
1
calcolato al punto b).
Stimare, inoltre il fattore di convergenza del metodo di Newton-Raphson assumendo x
3
.
Svolgimento
(a) La funzione ammette valori opposti allestremo dellintervallo. 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) +
3
x
=
2x
2
2x +3
x
sempre positivo nellintervallo dato, (la parabola 2x
2
2x +3 ha discriminante
negativo e quindi sempre positiva). Perci, da f
0
(x) > 0 concludiamo che la f crescente. Di qui
lunicit della radice.
(b) Partendo da x
0
=0.5, il metodo di Newton-Raphson fornisce i seguenti valori:
k x
k
f (x
k
) f
0
(x
k
)
0 0.50000000E+00 -0.18294415E+01 0.50000000E+01
1 0.86588831E+00 -0.41401211E+00 0.31964267E+01
2 0.99541173E+00 -0.13775443E-01 0.30046517E+01
3 0.99999643E+00
Dalla tabella sembra che i valori della successione tendano a 1. E, infatti, si vede facilmente che
f (1) = 0 e quindi 1 il valore che stiamo cercando. Per stimare la costante asintotica dellerrore del
56
4.11. Esercizi
metodo di Newton-Raphson assumendo x
3
, occorre usare la formula
M
| f
00
(x
3
)|
2| f
0
(x
3
)|
dove, nel caso specico, vale f
0
(x) =2(x 1) +
3
x
e f
00
(x) =2
3
x
2
.
Usando il valore trovato per x
3
si ricava M 0.16667004E +00.
(c) Partendo da x
0
e x
1
del metodo di Newton-Raphson, la Regula Falsi d:
k x
k
f (x
k
)
f (x
n
) f (x
n1
)
x
n
x
n1
0 0.50000000E+00 -0.18294415E+01 -
1 0.86588831E+00 -0.41401211E+00 0.38684741E+01
2 0.97291038E+00 -0.81656072E-01 0.31054906E+01
3 0.99920448E+00
Esercizio 4.11.3 Provare, anche solo gracamente, che lequazione
f (x) =sin(x) +x 1 =0
ammette una sola radice nellintervallo [0, 1].
(a) Dire se lo schema del punto sso con g(x) =arcsin(1x) pu convergere.
(b) Partendo da x
0
=0.1 calcolare le approssimazioni x
1
, x
2
e x
3
con lo schema di Newton-Raphson;
(c) Dare una stima del fattore di convergenza.
Svolgimento
Gracamente, da f (x) = 0 si ha sin(x) = 1 x. Se si studia lintersezione delle due curve, sin(x) e 1 x
nellintervallo [0, 1], si pu osservare una sola intersezione, cio una sola radice della f (fare il graco delle
due funzioni).
Analiticamente, la funzione f (x) assume valori di segno opposto agli estremi dellintervallo dato:
f (0) =sin(0) +01 =1
f (1) =sin(1) +11 =0.8414709848
La derivata prima della f f
0
=cos(x)+1: funzione continua e sempre positiva nellintervallo [0, 1]. Quindi
f una funzione crescente e interseca lasse delle x solo una volta in [0, 1], vale a dire ammette ununica
radice.
(a) Da f (x) =0 si ha sin(x) +x 1 =0 o, equivalentemente, sin(x) =1x, da cui x =arcsin(1x).
Consideriamo perci lo schema del punto sso con g(x) data da g(x) =arcsin(1x). La derivata di
g(x) g
0
(x) =
1
_
1(1x)
2
.
Nellintervallo [0, 1] valgono le seguenti disuguaglianze:
0 x 1 =0 x 1 =1 1x 0 =
=1 (1x)
2
0 =1 (1x)
2
0 =0 1(1x)
2
1 =
=0
_
1(1x)
2
1 =1
1
_
1(1x)
2
Perci g
0
(x) sempre maggiore di 1 e lo schema del punto sso 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 :
x
k+1
=x
k

sin(x) +x 1
cos(x) +1
.
57
4. ZERI DI FUNZIONE
Utilizziamo la notazione M
1
e M
2
per indicare la stima della costante asintotica dellerrore mediante le
formule
M
1
=
|x
k+1
x
k
|
|x
k
x
k1
|
2
o M
2
=
| f
00
(x
k
)|
2| f
0
(x
k
)|
Partendo da x
0
=0.1 si ottengono i seguenti valori:
k x
k
f (x
k
) f
0
(x
k
) |x
k
x
k1
|
0 0.1 -0.80016658E+00 0.19950042E+01 -
1 0.50108517E+00 -0.18537249E-01 0.18770618E+01 0.40108517E+00
2 0.51096084E+00 -0.23565955E-04 0.18722750E+01 0.98756733E-02
3 0.51097343E+00 -0.38737166E-10 - 0.12586802E-04
(c) La stima del fattore di convergenza dato da M
1
= 0.12905712E+00 o da M
2
= 0.13059731E+00, a
seconda della strada scelta per dare la stima.
Esercizio 4.11.4 Data lequazione f (x) =ln(x) +x
2
x =0,
(a) si provi, anche solo gracamente, che lequazione ammette lunica radice = 1 nellintervallo
[0.7, 2.3];
(b) si applichino due iterazioni del metodo dicotomico (o delle bisezioni) a partire dallintervallo dato,
chiamando con x
0
lultimo valore ottenuto con tale metodo;
(c) a partire da x
0
del punto (b) si calcoli lapprossimazione x
1
con il metodo di Newton-Raphson;
(d) a partire da x
0
e x
1
del punto (c) si calcolino le approssimazioni x
2
e x
3
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 x
2
, per cui gracamente 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 dellintervallo
dato:
f (0.7) =0.566674943938732
f (2.3) =3.8229091229351
Inoltre f continua, quindi ammette almeno una radice nellintervallo dato. La derivata prima :
f
0
(x) =
1
x
+2x 1, che possiamo anche scrivere come f
0
(x) =
1+2x
2
x
x
: numeratore e denominatore
sono entrambi sempre positivi nellintervallo dato, (la parabola 2x
2
x +1 ha discriminante negativo
= 7, di conseguenza, per ogni x reale si ha 2x
2
x +1 > 0). Da f
0
(x) > 0 per ogni x segue che f
crescente e, quindi, ammette ununica radice.
(b) Applichiamo il metodo delle bisezioni a partire dallintervallo dato (utilizziamo la notazione x
s
per
indicare lestremo sinistro dellintervallo, x
d
per indicare lestremo destro dellintervallo, x
c
, il punto
medio dellintervallo considerato):
iter. x
s
f (x
s
) segno x
d
f (x
d
) segno x
c
f (x
c
)
1 0.7 -0.566674944 - 2.3 3.822909123 + 1.5 1.155465108
2 0.7 -0.566674944 - 1.5 1.155465108 + 1.1 0.205310180
Il valore x
0
dunque x
0
=1.1.
(c) Il metodo di Newton-Rapshon x
k+1
=x
k

f (x
k
)
f
0
(x
k
)
dove f
0
=1/x+2x1. Partendo da x
0
=1.1, si ricava
x
1
=1.1
0.20531018
2.1090909
=1.002654656
58
4.11. Esercizi
(d) Applicando il metodo della Regula Falsi si ha:
k x
k
f (x
k
)
f (x
k
) f (x
k1
)
x
k
x
k1
1 1.002654656 0.5312842078E-02 0.2054513650E+01
2 1.000068720 0.1374413812E-03 0.2001364094E+01
3 1.000000046
(e) Considerato che la radice esatta = 1, la costante asintotica di convergenza della Regula Falsi si cal-
cola utilizzando lespressione M =|
f
00
()
2f
0
()
|
0.618
. Da f
0
(x) =
1
x
+2x 1 segue f
0
(1) =2 e f
00
(x) =
1
x
2
+2,
da cui f
00
(1) =1, per cui M =
1
4
0.618
=0.4245481.
59
C
A
P
I
T
O
L
O
5
INTERPOLAZIONE
Non vi alcuna incompatibilit fra
lesatto e il poetico. Il numero
nellarte come nella scienza.
Lalgebra nellastronomia e
lastronomia conna con la poesia.
Lanima delluomo ha tre chiavi che
aprono tutto: la cifra, la lettera, la
nota. Sapere, pensare, sognare.
Victor Hugo
5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.3 Interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.1 Funzioni base monomiali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.3.2 Polinomi di Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.3.3 Formula dellerrore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
5.3.4 Differenze divise e formula di Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.4 Considerazioni sullinterpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4.1 Fenomeno di Runge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.4.2 Malcondizionamento nellinterpolazione con funzioni base monomiali . . . . . . . . . . 72
5.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.1 Introduzione
Il censimento della popolazione italiana, dallunit dItalia al 2001, ha visto un incremento della
popolazione, 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 una
ragionevole stima della popolazione nel 1975 o nel 1995 o per predire a quanto ammonter nel 2015. Per far
ci, possiamo seguire due strade:
cercare una funzione che passi esattamente per i dati assegnati (detti anche punti di appoggio): questo
procedimento prende il nome di interpolazione ed il soggetto di questo Capitolo;
61
5. INTERPOLAZIONE
Anno 1861 1871 1881 1901 1911 1921 1931
Popolazione 22176 27300 28952 32963 35842 39397 41043
Anno 1936 1951 1961 1971 1981 1991 2001
Popolazione 42398 47516 50624 54137 56557 56778 56996
Tabella 5.1: Dati forniti dallISTAT, tratti da http://dawinci.istat.it/daWinci/jsp/dawinci.jsp:
popolazione residente dellItalia ai conni ai conni attuali ai censimenti dal 1861 al 2001. Popolazione in
migliaia.
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 linsieme dei punti (x
i
, y
i
), i =0, 1, . . . , n, dove y
i
il valore assunto da una funzione f
in x
i
o il valore di un dato sperimentale, cerchiamo una funzione v(x) che, in maniera ragionevole si addica
allinsieme dei dati. Se i dati sono accurati, ha senso richiedere che la funzione interpoli i dati (cio passi
esattamente per le coppie di punti): v(x
i
) = y
i
. Nellapprossimazione, 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 assegnati
x
0
, x
1
, . . . x
n
. Se x si trova allinterno dellintervallo che contiene le ascisse dei dati assegnati si parla
di interpolazione. Se invece x si trova allesterno dellintervallo si ha estrapolazione. Nellesempio della
popolazione italiana, si interpolano i dati per stimare la popolazione nel 1975 o nel 1995, si applica
invece 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 un
qualche appropriato spazio di funzioni, cio si possa scrivere come
v(x) =c
0

0
(x) +. . . +c
n

n
(x)
62
5.3. Interpolazione polinomiale
dove c
i
, i = 0, 1, . . . , n sono i coefcienti incogniti (o parametri) da determinare in base ai dati in possesso,
mentre
i
sono le funzioni base che assumiamo linearmente indipendenti
1
.
Esempi di interpolazione sono dati dallinterpolazione polinomiale, dallinterpolazione polinomiale a
tratti, dallinterpolazione trigonometrica. Noi ci limitiamo a studiare linterpolazione polinomiale: date n+1
coppie di punti (x
i
, y
i
), per i =0, 1, . . . , n, andremo a cercare un polinomio p(x) di grado n per cui p(x
i
) = y
i
.
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 coefcienti c
0
, c
1
, . . . , c
n
per unassegnata base

0
,
1
, . . . ,
n
;
valutare la funzione interpolante in un assegnato punto x.
Il primo punto fatto una volta per tutte, una volta ssata la base e noto linsieme dei punti da interpolare. Il
secondo punto pu essere applicato tutte le volte che si vuole valutare la funzione interpolante.
5.3 Interpolazione polinomiale
Linterpolazione polinomiale il tipo di interpolazione pi semplice. I polinomi, infatti, sono facili da
costruire e da valutare, sono facili da sommare e moltiplicare (e il risultato sempre un polinomio) e sono
altrettanto facili da differenziare e integrare (e il risultato sempre un polinomio).
Sia p(x) =p
n
(x) un polinomio di grado n dato da
p
n
(x) =c
0
+c
1
x +. . . +c
n
x
n
Date n +1 coppie di punti (x
0
, y
0
), (x
1
, y
1
), . . ., (x
n
, y
n
), vogliamo trovare gli n +1 coefcienti c
0
, c
1
, . . . c
n
tali che p(x
i
) = y
i
, i =0, . . . , n.
Ricordiamo che, unpolinomio di grado n ha n+1 coefcienti e che, date n+1 coppie di punti, il polinomio
interpolatore sar di grado n.
Assumiamo, inoltre, che le ascisse delle coppie dei punti siano distinte, cio x
i
6=x
j
, per i 6= j .
5.3.1 Funzioni base monomiali
Utilizziamo come funzioni base i monomi x
0
, x
1
, x
2
, . . . , x
n
.
Esempio 5.3.1 Sia n +1 =2: abbiamo quindi due coppie di dati
x
i
1 2
y
i
1 3
Cerchiamo quindi un polinomio di primo grado (una retta) che passi per i punti assegnati, della forma
p(x) =p
1
(x) =c
0
+c
1
x.
Le condizioni di interpolazione diventano:
p
1
(x
0
) = y
0
c
0
+1c
1
=1
p
1
(x
1
) = y
1
c
0
+2c
1
=3
Abbiamo due equazioni in due incognite c
0
e c
1
. Risolvendo il sistema 2 2 otteniamo c
1
= 2 e c
0
= 1,
quindi p
1
(x) =2x 1.
1
Le funzioni
0
,
1
, . . . ,
n
si dicono linearmente indipendenti se vale: c
0

0
(x) +. . . c
n

n
(x) 0 per ogni x se e solo se tutti i
coefcienti sono nulli c
0
=. . . =c
n
=0.
63
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 =3
e
x
i
1 2 4
y
i
1 3 3
Il problema ora diverso rispetto a quello appena risolto, perch la terza coppia di punti specica una
valore y
2
ben diverso da quello predetto da p
1
in x
2
=4. Difatti p
1
(x
2
) =7, nellesempio precedente, mentre
ora al valore di x
2
=4 deve corrispondere y
2
=3.
Cerchiamo il polinomio di grado 2, quindi, della forma p
2
(x) =c
0
+c
1
x +c
2
x
2
che passa attraverso i punti
dati.
Le condizioni di interpolazione adesso sono:
_

_
p
2
(x
0
) =c
0
+1c
1
+1c
2
=1
p
2
(x
1
) =c
0
+2c
1
+4c
2
=3
p
2
(x
2
) =c
0
+4c
1
+16c
2
=3
Abbiamo un sistema lineare di 3 equazioni in 3 incognite, la cui soluzione :
c
0
=
7
3
, c
1
=4, c
2
=
2
3
.
Il polinomio p
2
(x) = (2x
2
+12x 7)/3. Per x = 3 si ha p
2
(3) =
11
3
= 3.666666667, valore ben diverso da
p
1
(3) =5. Del resto le curve che abbiamo ottenuto coincidono solo nei punti dappoggio comuni a entrambe,
una una retta, laltra 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 grado
n sar costruito risolvendo un sistema lineare di n equazioni nelle n incognite c
0
, c
1
, . . . , c
n
:
_

_
p
n
(x
0
) = y
0
c
0
+c
1
x
0
+c
2
x
2
0
+. . . +c
n
x
n
0
= y
0
p
n
(x
1
) = y
1
c
0
+c
1
x
1
+c
2
x
2
1
+. . . +c
n
x
n
1
= y
1
p
n
(x
2
) = y
2
c
0
+c
1
x
2
+c
2
x
2
2
+. . . +c
n
x
n
2
= y
2
.
.
.
p
n
(x
n
) = y
n
c
0
+c
1
x
n
+c
2
x
2
n
+. . . +c
n
x
n
n
= y
n
64
5.3. Interpolazione polinomiale
In forma compatta, sotto forma matriciale
2
le equazioni del sistema si possono scrivere come
_
_
_
_
_
_
_
_
1 x
0
x
2
0
. . . x
n
0
1 x
1
x
2
1
. . . x
n
1
1 x
2
x
2
2
. . . x
n
2
.
.
.
.
.
.
.
.
.
.
.
.
1 x
n
x
2
n
. . . x
n
n
_
_
_
_
_
_
_
_
_
_
_
_
_
_
c
0
c
1
.
.
.
c
n
_
_
_
_
_
_
=
_
_
_
_
_
_
y
0
y
1
.
.
.
y
n
_
_
_
_
_
_
La matrice dei coefcienti 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 sola
soluzione. Osserviamo che la prima colonna ha tutti gli elementi uguali a 1, la seconda colonna ha le ascisse
dei punti di appoggio, la terza colonna ha i quadrati di esse, e cos via.
Perci, date n+1 coppie di punti di appoggio (x
i
, y
i
), i =0, . . . , n, conascisse distinte
x
i
, esiste ununico polinomio interpolatore p(x) di grado al pin tale che p(x
i
) = y
i
,
i =0, . . . , n.
Tuttavia, la matrice di Vandermonde non ha buone propriet: difatti una matrice malcondizionata, e
questo lo si osserva al crescere di n inquanto la soluzione del sistema diventa inaccurata
4
, qualunque metodo
venga utilizzato per risolverlo.
Questo approccio ci servito per dimostrare che il polinomio di interpolazione esiste ed unico, ma
non utile nella pratica a causa del malcondizionamento. Sarebbe preferibile, quindi, poter usare funzioni
base diverse dai monomi in modo da evitare il malcondizionamento, avere meno operazioni dal punto di
vista computazionale e poter manipolare in maniera pi efciente le funzioni basi
i
in vista di una loro
applicazione nella differenziazione e integrazione numerica.
5.3.2 Polinomi di Lagrange
Scriviamo il polinomio p(x) con i coefcienti c
i
uguali alle ordinate dei punti dappoggio y
i
, c
i
y
i
:
p(x) =p
n
(x) = y
0

0
(x) +. . . y
n

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 x
i
, soddisfano la
relazione
L
j
(x
i
) =
_
0 se i 6= j
1 se i = j
Allora il polinomio p
n
(x) =

n
j =0
L
j
(x) y
j
tale che p
n
(x
i
) = y
i
cio soddisfa la condizione di
interpolazione, per ogni i =0, . . . , n.
2
Questo argomento verr approfondito nel Capitolo 7, dove rimandiamo per i dettagli.
3
Alexandre-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.
4
Una matrice A malcondizionata quando, a piccole variazioni sui coefcienti della matrice, corrispondono grandi variazioni nella
soluzione del sistema lineare Ax =b
5
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 alla
meccanica classica e celeste e alla teoria dei numeri.
65
5. INTERPOLAZIONE
I polinomi di Lagrange sono deniti dalla relazione:
6
L
j
(x) =
n

k=0
k6=j
(x x
k
)
(x
j
x
k
)
In forma estesa abbiamo
L
j
(x) =
(x x
0
) (x x
j 1
)(x x
j +1
) (x x
n
)
(x
j
x
0
) (x
j
x
j 1
)(x
j
x
j +1
) (x
j
x
n
)
=
n

k=0
k6=j
x x
k
x
j
x
k
Esempio 5.3.3 Siano date le tre coppie di punti dellesempio precedente (1, 1), (2, 3), (4, 3). I polinomi di
Lagrange sono:
L
0
(x) =
(x 2)(x 4)
(12)(14)
=
(x 2)(x 4)
3
L
1
(x) =
(x 1)(x 4)
(21)(24)
=
(x 1)(x 4)
2
L
2
(x) =
(x 1)(x 2)
(41)(42)
=
(x 1)(x 2)
6
Il polinomio si scrive, quindi, come
p
2
(x) =L
0
(x) 1+L
1
(x) 3+L
2
(x) 3 =
1
3
(x 2)(x 4)
3
2
(x 1)(x 4) +
3
6
(x 1)(x 2)
Raccogliendo i termini ritroviamo p
2
(x) =(2x
2
+12x 7)/3, lo stesso polinomio ottenuto con le funzioni
base monomiali, e ci dovuto allunicit del polinomio interpolatore.
5.3.3 Formula dellerrore
Formula
dellerrore
Supponiamo, ora, che le ordinate y
i
siano i valori di una funzione f valutata nei punti di appoggio x
i
. Co-
nosciamo, quindi, una funzione f e di questa funzione vogliamo fare linterpolazione sostituendola mediante
un polinomio di grado n tale che p(x
i
) = f (x
i
) = y
i
, i =0, . . . , n.
Lerrore 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)!
n

i =0
(x x
i
)
6
Ricordiamo che, dati n valori w
1
, w
2
, . . . , w
n
usiamo la seguente simbologia per indicare la loro somma e il loro prodotto, rispetti-
vamente:
n

i =1
w
i
=w
1
+w
2
+w
3
+. . . +w
n
n

i =1
w
i
=w
1
w
2
w
3
. . . w
n
.
66
5.3. Interpolazione polinomiale
Figura 5.3: Polinomi di Lagrange L
0
(x), L
1
(x), L
2
(x), con x
0
=1, x
1
=2, x
2
=4.
Proviamo questo risultato introducendo il polinomio F(x) di grado n +1 che si annulla
nelle n +1 ascisse dei dati assegnati.
F(x) =
n

k=0
(x x
k
)
Consideriamo, inoltre, un punto t distinto dai punti di appoggio e compreso nellintervallo
I individuato dai valori minimo e massimo delle ascisse dei punti di appoggio.
Deniamo 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 dappoggio poich G(x
i
) = f (x
i
)p(x
i
)SF(x
i
) =0 per
i =0, . . . , n ma anche in t a causa di come stato denito 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 teorema
di 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. Ma
a
G
(n+1)
() = f
(n+1)
() S(n +1)!
Si ha perci:
f
(n+1)
() S(n +1)! =0 ovvero
f (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)!
n

i =0
(x x
i
)
a
La derivata n+1-sima di un polinomio di grado n una quantit nulla, mentre la derivata n+1-sima di un polinomio di grado
n +1, quale F(x), vale (n +1)!.
Abbiamo quindi una formula per lerrore, detta anche formula del resto. Il resto normalmente incognito
ma se conosciamo la f e una maggiorazione della f
(n+1)
, allora possiamo maggiorare il resto.
Allo stesso modo, possiamo limitare lerrore di interpolazione se troviamo un limite superiore per |F(x)|.
67
5. INTERPOLAZIONE
5.3.4 Differenze divise e formula di Newton
Differenze
divise e
formula di
Newton
Uno dei punti forti della rappresentazione di Lagrange che se alcuni dati cambiano (ad esempio il valore
di y
j
per uncerto j ) allora il cambiamento immediatamente visibile nellintero polinomiodi interpolazione.
Uno dei punti deboli, invece, la procedura per valutare p
n
(x). Con la formula di Newton abbiamo un utile
compromesso.
Le funzioni base che ora consideriamo sono

j
(x) =
j 1

i =0
(x x
i
) j =0, 1, . . . , n
Quindi vogliamo scrivere il polinomio di interpolazione come:
p(x) =c
0
+c
1
(x x
0
) +c
2
(x x
0
)(x x
1
) +. . . +c
n
(x x
0
)(x x
1
) . . . (x x
n1
)
dove c
0
, c
1
. . . c
n
sono delle costanti da denire 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 p
2
(x) abbiamo bisogno di
0
,
1
e
2
:

0
(x) =1

1
(x) =(x x
0
) =(x 1)

2
(x) =(x x
0
)(x x
1
) =(x 1)(x 2)
La condizione di interpolazione in x
0
=1 porta a:
f (x
0
) =1 =p
2
(x
0
) =p
2
(1) =c
0

0
(1) +c
1

1
(1) +c
2

2
(1) =c
0
1+c
1
0+c
2
0
Quindi c
1
=1 = f (x
0
).
In x
1
=2 abbiamo:
f (x
1
) =3 =p
2
(x
1
) =p
2
(3) = f (x
0
) +c
1

1
(2) +c
2

2
(2) = f (x
0
) +c
1
1+c
2
0
Ricaviamo quindi c
1
=
f (x
1
) f (x
0
)
x
1
x
0
=
31
21
=2. Chiamiamo questa quantit differenza divisa del primo
ordine tra x
0
e x
1
e la indichiamo con f [x
0
, x
1
]. Quindi
f [x
0
, x
1
] =
f (x
1
) f (x
0
)
x
1
x
0
Inne,
f (x
2
) =3 =p
2
(x
2
) =p
2
(4) = f (x
0
) + f [x
0
, x
1
]
1
(4) +c
2

2
(4)
= f (x
0
) + f [x
0
, x
1
](41) +c
2
(41)(42)
Per ottenere una formula per c
2
che abbia carattere generale, riscriviamo lequazione precedente utilizzando
i simboli x
0
, x
1
, x
2
per le ascisse.
In x
1
si ha f (x
1
) =p
2
(x
1
) = f (x
0
) + f [x
0
, x
1
](x
1
x
0
).
In x
2
si ha f (x
2
) =p
2
(x
2
) = f (x
0
) + f [x
0
, x
1
](x
2
x
0
) +c
2
(x
2
x
0
)(x
2
x
1
).
Sottraendo membro a membro la prima equazione dalla seconda si ricava:
f (x
2
) f (x
1
) = f [x
0
, x
1
](x
2
x
0
x
1
+x
0
) +c
2
(x
2
x
0
)(x
2
x
1
)
f (x
2
) f (x
1
) = f [x
0
, x
1
](x
2
x
1
) +c
2
(x
2
x
0
)(x
2
x
1
)
Quindi
f (x
2
) f (x
1
) f [x
0
, x
1
](x
2
x
1
) =c
2
(x
2
x
0
)(x
2
x
1
)
f (x
2
) f (x
1
)
x
2
x
1
f [x
0
, x
1
]
x
2
x
1
x
2
x
1
=c
2
(x
2
x
0
)
f (x
2
) f (x
1
)
x
2
x
1
f [x
0
, x
1
] =c
2
(x
2
x
0
)
68
5.3. Interpolazione polinomiale
Ma
f (x
2
) f (x
1
)
x
2
x
1
= f [x
1
, x
2
] la differenza divisa del primo ordine tra x
1
e x
2
da cui
f [x
1
, x
2
] f [x
0
, x
1
] =c
2
(x
2
x
0
) =c
2
=
f [x
1
, x
2
] f [x
0
, x
1
]
x
2
x
0
La quantit chiamata c
2
prende il nome di differenza divisa del secondo ordine e si indica con
f [x
0
, x
1
, x
2
] =
f [x
1
, x
2
] f [x
0
, x
1
]
x
2
x
0
.
Facendo le opportune sostituzioni si ricava c
2
=
4
6
=
2
3
. Quindi, p
2
(x) = f (x
0
) + f [x
0
, x
1
](x x
0
) +
f [x
0
, x
1
, x
2
](x x
0
)(x x
1
) Nellesempio considerato: p
2
(x) =1+2(x 1)
2
3
(x 1)(x 2)
Date le stesse coppie di punti, abbiamo visto come cambia la rappresentazione (usando come funzioni
base i monomi, poi i polinomi di Lagrange e ora la formulazione di Newton) ma il polinomio nale sempre
lo stesso essendo unico il polinomio interpolatore.
Da questo esempio, si pu vedere come la rappresentazione secondo Newton sia di tipo ricorsivo: il po-
linomio p
1
(x) = f (x
0
) + f [x
0
, x
1
](x x
0
) (che si ha arrestandosi ai primi due passi del procedimento appena
effettuato) un polinomio, in tal caso una retta, che interpola i dati (x
0
, y
0
), e (x
1
, y
1
). Il polinomio p
2
(x) da-
to dalla somma di p
1
(x) e del termine f [x
0
, x
1
, x
2
](x x
0
)(x x
1
). Quindi, una volta determinato il polinomio
p
n1
che interpola i primi n dati, possiamo usare questa rappresentazione per costruire p
n
che interpola i
dati precedenti cui si aggiunge la coppia (x
n
, y
n
).
Il coefciente c
j
del polinomio interpolatore di Newton si chiama differenza divisa di ordine j e viene
indicata con f [x
0
, x
1
, . . . , x
j
].
Perci:
f [x
0
] =c
0
, f [x
0
, x
1
] =c
1
, . . . , f [x
0
, x
1
, . . . , x
n
] =c
n
La notazione utilizzata ci permette di capire anche da quali coppie di punti dipende il coefciente c
j
.
Dati i punti x
0
, x
1
, . . . , x
n
, per indici i e j arbitrari con 0 i j n, si ha
f [x
i
] = f (x
i
)
f [x
i
, . . . , x
j
] =
f [x
i +1
, . . . x
j
] f [x
i
, . . . , x
j 1
]
x
j
x
i
La formula interpolatoria alle differenze divise di Newton dunque data da
p
n
(x) = f [x
0
] + f [x
0
, x
1
](x x
0
) + f [x
0
, x
1
, x
2
](x x
0
)(x x
1
) +. . .
+ f [x
0
, x
1
, . . . , x
n
](x x
0
)(x x
1
) (x x
n1
)
Da un punto di vista computazionale i coefcienti si ricavano mediante la tabella delle differenze di-
vise, tenendo presente che per calcolare f [x
0
, x
1
, . . . , x
n
] dobbiamo aver calcolato tutte le differenze divise
f [x
j k
, . . . , x
j
], con 0 k j n.
69
5. INTERPOLAZIONE
x
i
f [] f [, ] f [, , ] f [, , , ] f [, , , , ]
x
0
f (x
0
)
f [x
0
, x
1
]
x
1
f (x
1
) f [x
0
, x
1
, x
2
]
f [x
1
, x
2
] f [x
0
, x
1
, x
2
, x
3
]
x
2
f (x
2
) f [x
1
, x
2
, x
3
] f [x
0
, x
1
, x
2
, x
3
, x
4
]
f [x
2
, x
3
] f [x
1
, x
2
, x
3
, x
4
]
x
3
f (x
3
) f [x
2
, x
3
, x
4
]
.
.
.
f [x
3
, x
4
]
.
.
.
x
4
f (x
4
)
.
.
.
.
.
.
.
.
.
.
.
.
I coefcienti della diagonale principale sono i coefcienti 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).
x
i
f [] f [, ] f [, , ]
1 1
2
2 3
2
3
0
4 3
Il polinomio p
2
(x) si scrive: p
2
(x) =1+2(x 1)
2
3
(x 1)(x 2).
Se vogliamo aggiungere altri dati, per esempio, la coppia (5, 4), dobbiamo aggiungere una riga alla tabella
della differenza divisa e un termine al polinomio che abbiamo gi ricavato per ottenere quello di grado
superiore interpolante tutti i dati che abbiamo a disposizione.
x
i
f [] f [, ] f [, , ] f [, , , ]
1 1
2
2 3
2
3
0
1
4
4 3
1
3
1
5 4
Il polinomio p
3
(x) p
3
(x) =p
2
(x) +
1
4
(x 1)(x 2)(x 4).
Il concetto di differenza divisa pu essere visto come unestensione del concetto di derivata di una fun-
zione. Si ha, infatti, che, per f derivabile, la diffenza divisa del primo ordine f [x
0
, x
1
] pu essere vista come
un rapporto incrementale e quindi, al limite per x
1
x
0
, si ha f
0
(x
0
).
70
5.4. Considerazioni sullinterpolazione polinomiale
La differenza divisa k-sima e la derivata k-sima di f sono legate tra loro. Si pu provare, infatti, per k 1 Derivata
k-sima della
f
che vale la relazione
f [x
0
, x
1
, . . . , x
k
] =
f
(k)
()
k!
dove un punto appartente allinterno dellintervallo individuato dagli estremi di x
0
, . . . , x
k
. Quando i punti
coincidono, si ha
f [
x
0
,x
0
,...,x
0
. .
k+1 volte
] =
f
(k)
(x
0
)
k!
Questa formula serve per calcolare il polinomio di interpolazione che interpola non solo una certa funzione
f ma anche le sue derivate in alcuni punti assegnati (si veda lesercizio 5.5.3 a ne Capitolo).
Se al polinomio p
n
(x) aggiungiamo la coppia di dati (x, f (x)) si ha p
n+1
(x) = f (x) = p
n
(x) + Formula
dellerrore
f [x
0
, x
1
, . . . , x
n
, x](x x
0
)(x x
1
) . . . (x x
n
). Lultima differenza divisa non si pu calcolare, poich dipende
da x (che la nostra variabile), ma ci utile per capire quanto vale lerrore che commettiamo nellapprossi-
mare f (x) mediante il polinomio interpolatore, applicando la rappresentazione di Newton. Inoltre, dato che
il polinomio interpolatore unico (ssate le coppie di dati del problema), anche lerrore che si commette lo
stesso, qualunque sia la strategia utilizzata per arrivare ad esso. Quindi possiamo eguagliare lerrore trovato
utilizzando i polinomi di Lagrange con lerrore trovato nella rappresentazione di Newton, ottenendo:
f
(n+1)
((x))
(n +1)!
n

i =0
(x x
i
) = f [x
0
, x
1
, . . . , x
n
, x]
n

i =0
(x x
i
)
5.4 Considerazioni sullinterpolazione 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 Runge
7
f (x) =
1
1+x
2
e consideriamo il polino- Fenomeno di
Runge
mio di interpolazione di questa funzione per valori crescenti di n prendendo punti di appoggio equidistanti
nellintervallo [5, 5]. Partiamo da n +1 =2 con i punti equidistanti x
0
=5, x
1
=0 e x
2
=5. Si ha la tabella
x
i
5 0 5
y
i
= f (x
i
) 3.846154e 2 1. 3.846154e 2
Costruiamo quindi il polinomio di interpolazione p
2
(x) (utilizzando lapproccio di Lagrange o di Newton, i
risultati non cambiano). Raddoppiamo il numero dei punti aggiungendo un punto tra x
0
e x
1
e uno tra x
1
e
x
2
. Abbiamo n +1 =5 e i valori della tabella
x
i
5 2.5 0 2.5 5
y
i
= f (x
i
) 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 graci della funzione di Runge (in nero) e dei polinomi interpolanti di grado 2, 4 e 8. Si pu osservare
che solo in un sottointervallo di [5, 5] al crescere di n, i polinomi convergono alla funzione. Agli estremi
dellintervallo [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 prolo della funzione di Runge perch il polinomio di interpo-
lazione di grado 16 ha delle oscillazioni molto alte. Tuttavia, se restringiamo questo graco in un intorno
dellorigine, possiamo vedere come il polinomio p
16
si avvicini bene alla funzione si veda la Figura 5.5 (a
destra)! Lesempio di Runge utile per capire che la scelta dei nodi equidistanti non si rivela sempre la scelta
giusta e che altri tipi di interpolazione possono dare risultati migliori. Per indagare ulteriormente su questo
problema, si rimanda alla letteratura specializzata del settore.
7
Carl Runge (1856-1927) fu un matematico tedesco. Fu studente di Weierstrass, Kirchhoff, Helmholtz. Inizi poi a collaborare con
Kronecker e poi si dedic in particolare allo studio della soluzione numerica di equazioni algebriche e alla spettroscopia.
71
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 lintervallo [5, 5] (a sinistra) e in
un sottointervallo (a destra)
5.4.2 Malcondizionamento nellinterpolazione con funzioni base monomiali
Allinizio di questo Capitolo, abbiamo introdotto il polinomio di interpolazione mediante funzioni ba-
se monomiali: il problema dellinterpolazione veniva risolto mediante un sistema lineare la cui matrice, di
Vandermonde, malcondizionata.
Vediamo di capire questo malcondizionamento mediante un esempio. Si voglia studiare linterpolazione
dei seguenti dati
x
i
1010.5 1011.5 1012.5 1013 1014 1015
y
i
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 matrice
di Vandermonde d risultati disastrosi, come si pu vedere in Figura 5.6. Eppure, dal punto di vista teorico i
risultati dovrebbero essere identici.
72
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 coefcienti del polinomio con funzioni base monomiali; il
calcolo dei valori del polinomio.
La matrice di Vandermonde consiste di colonne che crescono di colonna in colonna - 1, x
i
, x
2
i
, x
3
i
, . . .,
x
5
i
. Per questo caso test, si va da 1 a elementi dellordine di 10
15
. La matrice molto mal condizionata.
Perci la soluzione del sistema lineare nonpu dare risultati afdabili e il vettore che fornisce i coefcienti del
polinomio interpolatore completamente errato. Ci porta anche al fenomeno della cancellazione numerica
nel calcolo del polinomio di interpolazione, per cui si ha una signicativa perdita di accuratezza e il graco
risultante presenta un prolo altamente oscillante.
5.5 Esercizi
Esercizio 5.5.1 Sia data la tabella seguente:
x
i
-1 0 2 3 4
f (x
i
) 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
5. INTERPOLAZIONE
x
i
f (x
i
) f (, ) f (, , ) f (, , , ) f (, , , , )
-1 9
0 0
09
0(1)
= 9
2 0
00
20
=0
0+9
2(1)
= 3
3 15
150
32
=15
150
30
=5
53
3(1)
= 0.5
4 84
8415
43
=69
6915
42
=27
275
40
=
11
2
11/21/2
4(1)
= 1
diagonale principale della tabella)
p(x) =99(x +1) +3(x +1)x +0.5(x +1)x(x 2) +(x +1)x(x 2)(x 3) =
=x
4
3.5x
3
+3.5x
2
x
Esercizio 5.5.2 Sia data la tabella seguente:
x
i
0 0.1 0.8 1.2
f (x
i
) 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) p
n
(x) di grado
non superiore ad n (con n=0,1,2,3); commentare il risultato.
(c) Usando p
n
(x) stimare, per ogni n, f (0.6) e f
0
(0.6).
(d) scrivere il polinomio p
2
(x) con la formula di Lagrange.
Svolgimento
(a) La tabella delle differenza divise :
x
i
f (x
i
) f (, ) f (, , ) f (, , , )
0 1
0.1 0.48
0.481
0.1
=5.2
0.8 1.32
1.320.48
0.7
=1.2
1.2+5.2
0.8
=8
1.2 5.32
5.321.32
0.4
=10
101.2
1.1
=8
88
1.2
=0
74
5.5. Esercizi
(b) I polinomi di Newton di grado 0,1,2 e 3 sono:
p
0
(x) =1
p
1
(x) =15.2x
p
2
(x) =15.2x +8x(x 0.1) =8x
2
6x +1
p
3
(x) =15.2x +8x(x 0.1) +0x(x 0.1)(x 0.8) =15.2x +8x(x 0.1) =p
2
(x)
Il polinomio p
3
(x) coincide con p
2
(x) in quanto p
2
(x
3
) = p
2
(1.2) = f (1.2) = f (x
3
) cio il polinomio
di grado 2 interpola non solo i dati (x
0
, f (x
0
)), (x
1
, f (x
1
)) e (x
2
, f (x
2
)) ma anche (x
3
, f (x
3
)).
(c) Per le derivate di p
n
(x), n = 0,1,2 si ha
p
0
0
(x) =0
p
0
1
(x) =5.2
p
0
2
(x) =16x 6
La stima di f (0.6) e f
0
(0.6) :
n p
n
(0.6) p
0
n
(0.6)
0 1 0
1 -2.12 -5.2
2 0.28 3.6
(d) I polimoni di Lagrange per ricavare il polinomio p
2
sono dati considerando i valori x
0
, x
1
e x
2
:
L
0
(x) =
(x 0.1)(x 0.8)
(0.1)(0.8)
=
x
2
0.9x +0.08
0.08
L
1
(x) =
x(x 0.8)
0.1(0.10.8)
=
x
2
0.8x
0.07
L
2
(x) =
x(x 0.1)
0.8(0.80.1)
=
x
2
0.1x
0.56
Il polinomio :
p
2
(x) =1L
0
(x) +0.48L
1
(x) +1.32L
2
(x)
=
x
2
0.9x +0.08
0.08
0.48
x
2
0.8x
0.07
+1.32
x
2
0.1x
0.56
=12.5(x
2
0.9x +0.08) 6.857142857(x
2
0.8x) +2.357142857(x
2
0.1x)
e raccogliendo i termini
p
2
(x) =8x
2
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
5. INTERPOLAZIONE
Costruiamo la tabella delle differenze divise tenendo presente che le derivate di una funzione f si possono
avere 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 lascissa 0 e due volte lascissa 1. Si ottiene:
0 2
f
0
(0)=7
0 2 f
00
(0)/2=9
f
0
(0)=7
189
10
=9
0 2
257
10
=18
179
10
=8
272
10
=25
3518
10
=17
1 27
6025
10
=35
f
0
(1)= 60
1 27
Il polinomio dunque p(x) =2+7x +9x
2
+9x
3
+8x
3
(x 1), vale a dire
p(x) =8x
4
+x
3
+9x
2
+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) =32x
3
+3x
2
+18x +7,
da cui f
0
(0.2) p
0
(0.2) =12.056.
76
C
A
P
I
T
O
L
O
6
APPROSSIMAZIONE
I numeri governano il mondo.
Platone
6.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.2 Retta di regressione lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.3 Approssimazione polinomiale ai minimi quadrati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.4 Approssimazioni di tipo esponenziale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.1 Introduzione
La legge di Hooke stabilisce che lallungamento subito da una molla, costruita con materiale uniforme,
direttamente proporzionale alla forza applicata: F(x) = kx dove k la costante di proporzionalit, detta
costante elastica, e x rappresenta lallungamento della molla.
Supponiamo di voler determinare k per una molla che, quando a riposo, esercita una forza di
1.4724811N. Se applichiamo una forza pari a 2.418165N si misura un allungamento pari a 0.042m. Siano
effettuate 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.15600
F 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 fare
il rapporto tra la forza e lallungamento. In questo modo, tuttavia, non terremmo conto di tutte le misure
effettuate. pi ragionevole trovare la linea retta che meglio approssima tutti i dati sperimentali e utilizzarla
per approssimare il valore di k. Questo tipo di approssimazione sar largomento di questo Capitolo.
A differenza dellinterpolazione, in cui si cerca una funzione che passi esattamente per i dati assegnati,
nellapprossimazione si cerca una funzione (pi semplice di quella data, se vi una funzione di partenza) che
approssimi al meglio i dati assegnati, senza passare esattamente per questi.
Alcuni dei motivi che spingono a cercare una funzione di approssimazione piuttosto che di interpolazione
sono questi:
77
6. APPROSSIMAZIONE
Figura 6.1: Legge di Hooke: i dati sperimentali
x
i
1 2 3 4 5 6 7 8 9 10
y
i
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 landamento dei dati su lunga scala, in una visione globale
1
vogliamo che la funzione dipenda da pochi parametri, sebbene questi siano determinati considerando
tutti i dati a disposizione.
Nel seguito studieremo lapprossimazione 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 graco delle coppie di punti: appare evidente che la relazione tra x e y di tipo lineare. Il motivo
per cui i dati non sono esattamente su una retta dovuto ad errori nei dati. Non ha senso, quindi, cercare una
funzione che passi esattamente per i dati assegnati (come accade nellinterpolazione), perch una funzione
del genere introdurrebbe oscillazioni prive di signicato sico: lo vediamo andando a costruire il polinomio
di interpolazione di grado 9 che passa esattamente per i dati e che vediamo inFigura 6.2 (a destra). Cerchiamo
allora una retta (funzione lineare, poich abbiamo visto che i dati hanno una relazione di tipo lineare) che
meglio approssima i dati senza dover coincidere con essi. Sia p
1
(x) =a
0
+a
1
x la retta che andiamo cercando
(dobbiamo quindi capire come trovare i due coefcienti a
0
e a
1
). Allora p
1
(x
i
) = a
0
+a
1
x
i
, per i = 0, 1, . . . , n
rappresenta il valore sulla retta che deve approssimare il valore y
i
dato dal problema. Per ogni dato sperimen-
tale, per i = 0, 1, . . . , n, possiamo misurare lo scarto che scaturisce dallapprossimare y
i
mediante a
0
+a
1
x
i
.
Nellapproccio ai minimi quadrati, si cerca di minimizzare la somma dei quadrati delle differenze tra i valori
dati y
i
e i valori corrispondenti p
1
(x
i
) 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
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 coefcienti incogniti a
0
e a
1
.
S(a
0
, a
1
) =
n

i =0
_
(a
0
+a
1
x
i
) y
i
_
2
Per minimizzare questa funzione, occorre porre le derivate parziali della S rispetto ad a
0
e a
1
uguali a zero.
2
Si pone dunque
0 =
S(a
0
, a
1
)
a
0
=

a
0
n

i =0
_
(a
0
+a
1
x
i
) y
i
_
2
=2
n

i =0
_
(a
0
+a
1
x
i
) y
i
_
0 =
S(a
0
, a
1
)
a
1
=

a
1
n

i =0
_
(a
0
+a
1
x
i
) y
i
_
2
=2
n

i =0
_
(a
0
+a
1
x
i
) y
i
_
x
i
Queste equazioni si semplicano nel sistema delle cosiddette equazioni normali:
_
(n +1)a
0
+a
1

n
i =0
x
i
=

n
i =0
y
i
a
0

n
i =0
x
i
+a
1

n
i =0
x
2
i
=

n
i =0
x
i
y
i
Introducendo la notazione A
12
=

n
i =0
x
i
, A
22
=

n
i =0
x
2
i
, b
1
=

n
i =0
y
i
e b
2
=

n
i =0
x
i
y
i
e osservando che la
matrice del sistema simmetrica (A
12
= A
21
), la soluzione data da:
a
0
=
A
22
b
1
A
12
b
2
(n +1)A
22
A
2
12
a
1
=
(n +1)b
2
A
12
b
1
(n +1)A
22
A
2
12
Nellesempio proposto, per calcolare la retta di approssimazione ai minimi quadrati, dobbiamo calcolare
i coefcienti delle equazioni normali. In Tabella 6.3 poniamo i valori che servono per risolvere il sistema: la
soluzione a
0
=0.87333333 e a
1
=1.62969697. La retta rappresentata in Figura 6.3.
La retta che abbiamo appena costruito la retta che minimizza gli scarti verticali, supponendo affetti
da errore le ordinate delle coppie di punti a disposizione. Essa prende pure il nome di retta di regressione
lineare sugli scarti verticali.
Osserviamo che il baricentro dei punti assegnati giace sulla retta ai minimi quadrati, in quanto conside- Sul
baricentro
rando la prima equazione del sistema si ha, per X =

n
i =0
x
i
/(n +1) e Y =

n
i =0
y
i
/(n +1) (le coordinate del
baricentro dei punti assegnati):
a
0
+a
1
X =Y
2
Per 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(a
0
, a
1
) che stiamo studiando,
si pu provare che i valori (a
0
, a
1
) che annullano le derivate parziali della S rappresentano i valori che minimizzano la S stessa. Questo
argomento viene approfondito nei corsi di Analisi Matematica.
79
6. APPROSSIMAZIONE
x
i
y
i
x
2
i
x
i
y
i
1 1.2 1 1.2
2 2.3 4 4.6
3 4.5 9 13.5
4 5.1 16 20.4
5 7 25 35
6 8.5 36 51
7 10.2 49 71.4
8 13.1 64 104.8
9 12.5 81 112.5
10 16.5 100 165
A
12
=55 b
1
=80.9 A
22
=385 b
2
=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 gli
scarti orizzontali, detta anche retta di regressione lineare sugli scarti orizzontali, (basta scambiare il ruolo
delle x con quello delle y per ricavare, con lo stesso procedimento, la retta p
1
(y) =b
0
+b
1
y). Il baricentro dei
punti assegnati giace anche su questa retta, da cui possiamo concludere che esso il punto di intersezione
delle due rette che minimizzano gli scarti verticali e orizzontali.
6.3 Approssimazione polinomiale ai minimi quadrati
Ingenerale, avendo a disposizione n+1 coppie di punti, il problema di approssimazione si pu ricondurre
alla ricerca di un polinomio di approssimazione di grado m, p
m
(x) =a
0
+a
1
x +a
2
x
2
+. . . +a
m
x
m
con m<n.
Quando n =m il polinomio dapprossimazione coincide con quello dinterpolazione.
80
6.4. Approssimazioni di tipo esponenziale
La funzione da minimizzare
S(a
0
, a
1
, . . . , a
m
) =
n

i =0
_
(a
0
+a
1
x
i
+a
2
x
2
i
+. . . +a
m
x
m
i
) y
i
_
2
La procedura seguita per la retta viene generalizzata. Questa volta bisogna porre uguali a zero le m+1 derivate
parziali della S rispetto ai coefcienti del polinomio p
m
.
S
a
j
=0 j =0, 1, . . . , m
Ricaviamo, quindi
2
n

i =0
(a
0
+a
1
x
i
+. . . +a
m
x
m
i
y
i
)x
j
i
=0 per j =0, 1, . . . , m
In forma estesa possiamo scrivere
a
0
n

i =0
x
j
i
+a
1
n

i =0
x
j +1
i
+. . . +a
m
n

i =0
x
j +m
i
=
n

i =0
x
j
i
y
i
per j =0, 1, . . . , m
Poich queste equazioni si hanno per j = 0, 1. . . , m, si ha da risolvere un sistema, che, scritto in forma
matriciale, :
A
T
Aa = A
T
b
dove A una matrice rettangolare (n +1) (m+1), data da
A =
_
_
_
_
_
_
1 x
0
x
2
0
. . . x
m
0
1 x
1
x
2
1
. . . x
m
1
.
.
.
.
.
.
.
.
.
.
.
.
1 x
n
x
2
n
. . . x
m
n
_
_
_
_
_
_
Le equazioni del sistema sono dette equazioni normali. Si pu provare che la matrice Q = A
T
A
simmetrica, denita positiva
3
ed non singolare, quindi il sistema ammette soluzione.
6.4 Approssimazioni di tipo esponenziale
Pu capitare che i dati sperimentali abbiano unandamento di tipo esponenziale o ricordino una funzione
potenza della variabile x. Allora si pu richiedere che la funzione approssimante abbia una delle due forme
seguenti (e, a seconda della rappresentazione, si ha un diverso modello):
y(x) =ae
bx
modello esponenziale
y(x) =ax
b
modello potenza
con a e b opportune costanti. Per ricavare a e b si passa ai logaritmi ricavando lequazione di una retta i cui
coefcienti sono ottenuti con la procedura di minimizzazione ai minimi quadrati. Da questi, si ritorna poi ai
coefcienti 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), a
0
=ln(a) e a
1
=b, si ha unequazione del tipo Y =a
0
+a
1
X.
Quindi, dalle coppie di dati (x
i
, y
i
) i = 0, 1, . . . , n, si deve passare alle coppie (X
i
= x
i
, Y
i
= ln(y
i
))
e su queste coppie si costruisce la retta di approssimazione ai minimi quadrati con la procedura che
abbiamo studiato in Sezione 6.2. Una volta ricavati i coefcienti a
0
e a
1
, si ha a =e
a
0
e b =a
1
.
3
Le denizioni di matrice simmetrica e matrice denita positiva sono date nel Capitolo 7.
81
6. APPROSSIMAZIONE
Nel caso del modello potenza, passando ai logaritmi (qualunque sia la base usata, il risultato non
cambia) si ha:
log(y) =log(a) +blog(x)
Ponendo X =log(x), Y =log(y), a
0
=log(a) e a
1
=b, si ha unequazione del tipo Y =a
0
+a
1
X.
Quindi, dalle coppie di dati (x
i
, y
i
) i = 0, 1, . . . , n, si deve passare alle coppie (X
i
= log(x
i
), Y
i
=
log(y
i
)) e su queste coppie si costruisce la retta di approssimazione ai minimi quadrati. Una volta
ricavati i coefcienti a
0
e a
1
, si ha b =a
1
mentre, con gli opportuni passaggi, si trova il valore di a.
6.5 Esercizi
Esercizio 6.5.1 Sia data la tabella seguente:
x
i
-1 0 2 3 4
f (x
i
) 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)a
0
+

n
i =0
x
i
a
1
=

n
i =0
y
i

n
i =0
x
i
a
0
+

n
i =0
x
2
i
a
1
=

n
i =0
x
i
y
i
dove n +1 =5. Poich

4
i =0
x
i
=8,

4
i =0
x
2
i
=30,

4
i =0
y
i
=108 e

4
i =0
x
i
y
i
=372, si ha il sistema
_
5a
0
+8a
1
=108
8a
0
+30a
1
=372
La soluzione a
0
=3.069767442, a
1
=11.581395349. La retta ai minimi quadrati che minimizza gli
scarti verticali : y =3.069767442+11.581395349x.
(b) Ricaviamo la retta di approssimazione che minimizza gli scarti orizzontali.
_
(n +1)b
0
+

n
i =0
y
i
b
1
=

n
i =0
x
i

n
i =0
y
i
b
0
+

n
i =0
y
2
i
b
1
=

n
i =0
y
i
x
i
dove n +1 =5. Poich

4
i =0
y
i
=108,

4
i =0
y
2
i
=7362,

4
i =0
x
i
=8 e

4
i =0
x
i
y
i
=372, si ha il sistema
_
5b
0
+108b
1
=8
108b
0
+7362b
1
=372
La soluzione b
0
=0.744452398, b
1
=0.03960868528. La retta ai minimi quadrati che minimizza gli
scarti orizzontali : x =0.744452398+0.03960868528y.
82
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.6
Se calcoliamo il baricentro dei punti assegnati, troviamo
X =

4
i =0
x
i
5
=
1+2+3+4
5
=1.6 Y =

4
i =0
y
i
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
x
i
4.0 4.2 4.5 4.7 5.1 5.5 5.9 6.3 6.8 7.1
y
i
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 ax
b
.
Svolgimento Per trovare la curva di approssimazione del tipo y =ax
b
, dobbiamo prima passare ai logaritmi:
log(y) =log(ax
b
) =log(a) +blog(x)
In questo modo ci riconduciamo ad una retta di approssimazione ai minimi quadrati sui logaritmi dei punti
assegnati. Consideriamo il logaritmo naturale (ma i risultati non cambiano con i logaritmi in unaltra base).
I dati su cui lavorare sono dunque:
log(x
i
) log(y
i
)
1.386294361 4.630447993
1.435084525 4.728979472
1.504077397 4.876722876
1.547562509 4.955827058
3.931825633 5.123963980
1.704748092 5.279134547
1.774952351 5.416100402
1.840549633 5.548297572
1.916922612 5.702147806
1.960094784 5.785669634
Calcoliamo la retta di approssimazione ai minimi quadrati, ponendo X
i
=log(x
i
) e Y
i
=log(y
i
). Il sistema
da risolvere
_
(n +1)a
0
+

n
i =0
X
i
a
1
=

n
i =0
Y
i

n
i =0
X
i
a
0
+

n
i =0
X
2
i
a
1
=

n
i =0
X
i
Y
i
dove n +1 =10.
Si ha

n
i =0
X
i
=16.6995268,

n
i =0
X
2
i
=28.2537116,

n
i =0
Y
i
=52.0472913,

n
i =0
X
i
Y
i
=87.6541085
Il sistema da risolvere diventa
_
10a
0
+16.6995268a
1
=52.0472913
16.6995268a
0
+28.2537116a
1
=87.6541085
che ha come soluzione a
0
=1.84197978 e a
1
=2.013679425.
Ora a
0
= log(a) da cui a = e
a
0
= 6.30901637 Invece a
1
= b. Il modello y = ax
b
diventa quindi y =
6.30901637x
2.013679425
.
83
C
A
P
I
T
O
L
O
7
METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
Allinizio e alla ne abbiamo il
mistero. Potremmo dire che
abbiamo il disegno di Dio. A questo
mistero la matematica si avvicina,
senza penetrarlo.
Ennio De Giorgi
7.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.2 Elementi di Algebra Lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.3 Metodo di eliminazione di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.3.1 Sostituzione allindietro e in avanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.3.2 Eliminazione di Gauss: esempio particolare . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.3.3 Eliminazione di Gauss: caso generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
7.4 Strategie di pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.5 Fattorizzazione triangolare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.5.1 Fattorizzazione LDU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.5.2 Fattorizzazione di Gauss senza pivoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
7.5.3 Fattorizzazione di Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.1 Introduzione
Si consideri la capacit C di un conduttore. Dallelettrostatica, sappiamo che vale q =C dove q rappre-
senta la carica del conduttore e il suo potenziale elettrostatico, quando il conduttore isolato. Nel caso in
cui il conduttore non sia isolato, la situazione cambia. Supponiamo di avere 4 conduttori in equilibrio elet-
trostatico allinterno di una cavit collegata a terra (a terra il potenziale elettrostatico vale zero). Supponendo
di 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 altri
conduttori, per cui, per ciascun conduttore vale, rispettivamente:
85
7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
q
1
=C
11

1
q
2
=C
21

1
q
3
=C
31

1
q
4
=C
41

1
Si ripete lo stesso discorso supponendo
2
6=0 e tutti gli altri potenziali nulli. Poi sia
3
6=0 e gli altri potenziali
nulli. Inne
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 diversi
da zero. Si ha perci:
q
1
=C
11

1
+C
12

2
+C
13

3
+C
14

4
q
2
=C
21

1
+C
22

2
+C
23

3
+C
24

4
q
3
=C
31

1
+C
32

2
+C
33

3
+C
34

4
q
4
=C
41

1
+C
42

2
+C
43

3
+C
44

4
I coefcienti C
i i
si chiamano coefcienti di capacit, mentre i coefcienti C
i j
, con j 6= i si chiamano
coefcienti di induzione.
Si pu presentare il problema inverso: note le cariche q
i
, si vuole determinare il valore dei
i
. Si deve
quindi risolvere un sistema lineare di 4 equazioni in 4 incognite.
In questo Capitolo studieremo metodi diretti per la soluzione di sistemi lineari del tipo
_

_
a
11
x
1
+a
12
x
2
+. . . +a
1n
x
n
=b
1
a
21
x
1
+a
22
x
2
+. . . +a
2n
x
n
=b
2
a
31
x
1
+a
32
x
2
+. . . +a
3n
x
n
=b
3
.
.
. =
.
.
.
a
n1
x
1
+a
n2
x
2
+. . . +a
nn
x
n
=b
n
(7.1)
dove a
i j
, per i , j = 1, 2, . . . , n e b
i
, per i = 1, 2, . . . , n sono assegnati e le incognite da determinare so-
no x
1
, x
2
, . . . , x
n
. I metodi diretti sono metodi che risolvono il problema in un numero ssato di passi,
introducendo un errore dovuto solo allarrotondamento.
7.2 Elementi di Algebra Lineare
Sia dato un sistema lineare come in (7.1). Per poterlo semplicare, possiamo eseguire le seguenti
operazioni (trasformazioni elementari) :
Li -sima equazione del sistema pu essere moltiplicata per una qualunque costante 6=0 e lequazione
risultante pu essere usata al posto di quella di partenza: la soluzione del sistema non cambia.
Lequazione j -sima, moltiplicata per una qualunque costante 6= 0 e sommata allequazione i -sima,
pu essere usata al posto dellequazione 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, come
vedremo nellalgoritmo di eliminazione di Gauss.
Poich le operazioni da fare coinvolgono i coefcienti a
i j
e b
i
, conviene scrivere il sistema di equazioni
lineari utilizzando una forma compatta mediante matrici e vettori.
Matrice
Denizione 7.2.1 Una matrice n m una griglia rettangolare (o array) di elementi disposti su n righe e m
colonne.
86
7.2. Elementi di Algebra Lineare
Generalmente, una matrice si denota con una lettera maiuscola, per esempio A, mentre i suoi valori si
indicano con la corrispondente lettera minuscola e i pedici che si riferiscono alla riga e colonna in cui si trova
quel valore, per esempio a
i j
si riferisce allelemento di riga i e colonna j della matrice A.
A =
_
a
i j
_
=
_
_
_
_
_
_
_
_
a
11
a
12
a
13
. . . a
1n
a
21
a
22
a
23
. . . a
2n
a
31
a
32
a
33
. . . a
3n
.
.
.
.
.
.
.
.
. . . .
.
.
.
a
n1
a
n2
a
n3
. . . a
nn
_
_
_
_
_
_
_
_
Esempio 7.2.1
A =
_
2 10 5
3 1 0

una matrice 23 con elementi a


11
=2, a
12
=10, a
13
=5, a
21
=3, a
22
=1 e a
23
=0.
Per indicare che una matrice A ha n righe e m colonne, diremo che A ha dimensione n m. Quando
lavoreremo conmatrici quadrate di n righe e n colonne, parleremo di dimensione n della matrice per indicare
che 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 1n 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 =
_
_
_
_
_
_
_
_
x
1
x
2
x
3
.
.
.
x
n
_
_
_
_
_
_
_
_
x =
_
x
1
x
2
x
3
. . . x
n
_
Vediamo, nel seguito, alcune importanti denizioni 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, a
i j
=b
i j
per i , =1, 2, . . . , n e j =1, 2, . . . , m.
Date due matrici A e B, entrambe n m, si denisce la matrice somma di A e B la matrice n m A+B
i cui elementi sono dati da a
i j
+b
i j
, per i , =1, 2, . . . , n e j =1, 2, . . . , m.
Se A una matrice nm e un numero reale, la moltiplicazione scalare di per A, denotata con A,
una matrice n m i cui elementi sono a
i 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 a
i 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
7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
Date due matrici A di dimensione nm e B di dimensione mp, la matrice prodotto di A e B, denotata
con C = AB, una matrice i cui elementi c
i j
sono dati da: Matrice
prodotto
c
i j
=
m

k=1
a
i k
b
k j
=a
i 1
b
1j
+a
i 2
b
2j
+. . . +a
i m
b
mj
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 denisce il vettore y = Ax
prodotto della matrice A per il vettore x, il vettore le cui componenti sono date da Prodotto
matrice-
vettore
y
i
=
n

j =1
a
i j
x
j
per i = 2, . . . , n
Dati due vettori x e y si denisce prodotto scalare x
T
y =

n
i =1
x
i
y
i
. Prodotto
scalare tra
vettori
In generale, AB 6=BA.
Una matrice D si dice diagonale se quadrata con d
i j
= 0 per i 6= j . Gli elementi diversi da zero si
Matrice
diagonale
trovano quindi sulla diagonale (detta diagonale principale) che si pu tracciare partendo dallelemento
in alto a sinistra (di posto 11) e arrivando allelemento in basso a destra (di posto nn).
Esempio:
D =
_
_
_
_
1 0 0 0
0 2 0 0
0 0 5 0
0 0 0 1
_
_
_
_
Si chiama matrice identit e si indica con I , una matrice diagonale i cui elementi diagonali valgono 1. Matrice
Identit
Esempio:
I =
_
_
_
_
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
_
_
_
_
Una matrice si dice tridiagonale se gli elementi non nulli si trovano sulla diagonale principale e sugli Matrice
tridiagonale
elementi delle diagonali che si trovano sopra e sotto la diagonale principale.
Esempio:
A =
_
_
_
_
_
_
2 1 0 0 0
1 2 1 0 0
0 1 2 1 0
0 0 1 2 1
0 0 0 1 2
_
_
_
_
_
_
Una matrice si dice triangolare se ha tutti gli elementi nulli ad eccezione di quelli che si trovano tutti
sopra (o tutti sotto) la diagonale principale.
Si denisce matrice triangolare superiore U (U sta per upper) di dimensione n, la matrice per la Matrice
triangolare
superiore
quale, per j =1, 2, . . . , n, si ha
u
i j
=0 per i = j +1, j +2, . . . , n
Si denisce matrice triangolare inferiore L (L sta per lower) di dimensione n, la matrice per la Matrice
triangolare
inferiore
quale, per i =1, 2, . . . , n, si ha
l
i j
=0 per j =i +1, i +2, . . . , n
88
7.2. Elementi di Algebra Lineare
Esempi
U =
_
_
1 2 5.3
0 3.2 4
0 0 10
_
_
L =
_
_
1 0 0
2 21 0
3.4 5.7 4
_
_
Teorema 7.2.2 Date A matrice n m, B matrice ms, C matrice s p, D matrice ms, I
m
e I
s
le matrici
identit, rispettivamente di dimensione m e s, e e due numeri reali, valgono le seguenti propriet:
A(BC) =(AB)C A(B +D) = AB +AD
I
m
B =B BI
s
=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 linversa di una matrice.
Denizione 7.2.2 Data una matrice A di dimensione n, A si dice nonsingolare (o invertibile o regolare) se Matrice
inversa
esiste una matrice, che indichiamo come A
1
di dimensione n tale che
AA
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 (o
non invertibile).
Teorema 7.2.3 Per ogni matrice A di dimensione n nonsingolare si ha:
A
1
unica
A
1
nonsigolare e (A
1
)
1
= A
Se 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
1
b.
Unaltra importante matrice associata ad unassegnata matrice A la sua trasposta.
Denizione 7.2.3 La trasposta di una matrice A di dimensione n m la matrice indicata con A
T
, di di- Trasposta di
una matrice
mensione mn, per la quale la colonna i della trasposta coincide con la riga i della matrice A di partenza:
a
T
i j
=a
j i
.
Esempio:
A =
_
1 2 3
2 5 6

A
T
=
_
_
1 2
2 5
3 6
_
_
Legata alla trasposta di una matrice la seguente denizione.
Denizione 7.2.4 Una matrice quadrata si dice simmetrica se A = A
T
.
Esempio:
A =
_
_
1 4 8
4 2 6
8 6 5
_
_
A
T
=
_
_
1 4 8
4 2 6
8 6 5
_
_
Teorema 7.2.4 Valgono le seguenti propriet (per matrici per cui possibile eseguire le seguenti operazioni):
89
7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
(A
T
)
T
= A (A+B)
T
= A
T
+B
T
(AB)
T
=B
T
A
T
Se esiste A
1
allora (A
1
)
T
=(A
T
)
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 11, allora det (A) =a.
Se A una matrice di dimensione n, si denisce minore M
i j
il determinante della sottomatrice di
dimensione n 1 ottenuta cancellando la i -sima riga e la j -sima colonna da A. Determinante
di una
matrice
Il determinante di A dato dalla formula
det (A) =
n

j =1
(1)
i +j
a
i j
M
i j
(ssato un qualunque i =1, 2, . . . , n)
det (A) =
n

i =1
(1)
i +j
a
i j
M
i j
(ssato un qualunque j =1, 2, . . . , n)
Il calcolo del determinante di una matrice di dimensione n richiede O(n!) moltiplicazioni. Quindi, anche per
valori 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 ha
det (

A) =det (A).
Denotata con

A la matrice ottenuta da A sommando una sua riga per unaltra che stata moltiplicata
per , si ha det (

A) =det (A).
Se B unaltra matrice di dimensione n, si ha det (AB) =det (A)det (B)
det (A
T
) =det (A)
Se esiste A
1
, si ha det (A
1
) =
1
det (A)
Se A una matrice trangolare superiore o trangolare inferiore o diagonale, allora det (A) =

n
i =1
a
i 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 Gauss
1
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) e
pu essere risolto facilmente mediante sostituzione (allindietro o in avanti).
Vediamo nel dettaglio come si risolve un sistema lineare con queste tecniche.
7.3.1 Sostituzione allindietro e in avanti
La matrice A sia nonsingolare e triangolare superiore, cio
A =
_
_
_
_
_
_
_
a
11
a
12
. . . a
1n
a
22
.
.
.
a
2n
.
.
.
.
.
.
a
nn
_
_
_
_
_
_
_
1
Carl Friedrich Gauss fu un matematico e sico tedesco (1777-1855) che ha dato il suo contribuito in maniera signicativa in
numerosi campi: teoria dei numeri, analisi, geometria differenziale, geodesia, magnetismo, astronomia, ottica. Al pari di Eulero, Newton
e 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 allunit di misura della densit di usso magnetico o di induzione magnetica.
90
7.3. Metodo di eliminazione di Gauss
La soluzione del sistema Ax =b pu dunque procedere dal basso verso lalto, a partire dallultima riga. Le
equazioni, infatti, sono
a
11
x
1
+a
12
x
2
+a
13
x
3
+. . . a
1n
x
n
=b
1
a
22
x
2
+a
23
x
3
+. . . a
2n
x
n
=b
2
a
33
x
3
+. . . a
3n
x
n
=b
2
.
.
. =
.
.
.
a
nn
x
n
=b
n
Lultima riga si legge come a
nn
x
n
=b
n
. Quindi possiamo ricavare x
n
=b
n
/a
nn
.
Noto il valore di x
n
, possiamo ricavare x
n1
dalla riga n 1 del sistema:
a
n1n1
x
n1
+a
n1n
x
n
=b
n1
. Si ha x
n1
=
1
a
n1n1
(b
n1
a
n1n
x
n
).
Si procede a ritroso in questo modo arrivando no alla prima equazione che ci permette di calcolare il va-
lore di x
1
. Osserviamo che tutte le divisioni per i coefcienti a
i i
sono possibili in quanto stiamo supponendo
A non singolare e, poich det (A) =

n
i =1
a
i i
6=0, necessariamente ciascun a
i i
6=0.
Possiamo dunque scrivere lalgoritmo di sostituzione allindietro:
Per i =n no a i =1, procedendo allindietro con passo 1
x
i
=
b
i

n
j =i +1
a
i j
x
j
a
i i
Un analogo algoritmo si ricava quando la matrice triangolare inferiore. In tal caso, si parte dalla prima
equazione per ricavare x
1
e poi si va avanti nellequazione successiva.
Si ha lalgoritmo di sostituzione in avanti:
Per i =1 no a i =n, procedendo in avanti con passo 1
x
i
=
b
i

i 1
j =1
a
i j
x
j
a
i 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 applicare
il metodo di sostituzione allindietro.
Per capire come si applica questo metodo consideriamo un semplice esempio di sistema di 3 equazioni
in 3 incognite, Ax =b dove
A =
_
_
2 1 2
4 1 2
1 2 5
_
_
b =
_
_
10
12
20
_
_
Le equazioni del sistema sono, dunque,
2x
1
+x
2
+2x
3
=10
4x
1
+x
2
+2x
3
=12
x
1
+2x
2
+5x
3
=20
91
7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
Al primo passo del metodo, cerchiamo di annullare tutti i coefcienti dellincognita x
1
nella seconda e
terza equazione.
Dividiamo il coefciente 4 che moltiplica x
1
nella seconda equazione con il coefciente 2 che
moltiplica x
1
nella prima equazione. Otteniamo il valore
4
2
=2. Adesso moltiplichiamo per questo
valore (2) la prima equazione, ricavando
2(2x
1
+x
2
+2x
3
=10) =4x
1
+2x
2
+4x
3
=20
Se ora facciamo la sottrazione tra la seconda equazione del sistema e questa che abbiamo ricavato
otteniamo
4x
1
+x
2
+2x
3
=12
4x
1
+2x
2
+4x
3
=20 =
x
2
2x
3
=8
Sostituiamo questa equazione alla seconda del sistema (il sistema rimane equivalente), ricavando
2x
1
+x
2
+2x
3
=10
x
2
2x
3
=8
x
1
+2x
2
+5x
3
=20
Abbiamo eliminato, in questo modo, il coefciente di x
1
nella seconda equazione.
Alla stessa maniera, dividiamo il coefciente di x
1
nella terza equazione (che vale 1) con il coef-
ciente di x
1
nella prima equazione: abbiamo
1
2
. Moltiplichiamo la prima equazione per
1
2
e poi
facciamo la sottrazione tra la terza equazione e la prima moltiplicata per
1
2
:
x
1
+2x
2
+5x
3
=20
1
2
(2x
1
+x
2
+2x
3
=10) x
1
+
1
2
x
2
+x
3
=5 =
3
2
x
2
+4x
3
=15
Sostituiamo questa equazione alla terza del sistema.
A questo punto il sistema
2x
1
+x
2
+2x
3
=10
x
2
2x
3
=8
3
2
x
2
+4x
3
=15
Nella seconda e terza equazione non c pi lincognita x
1
.
Per poter arrivare adunsistema di equazioni triangolare inferiore, dobbiamo eliminare il coefciente di
x
2
nella terza equazione del sistema. Ripetiamo il ragionamento appena fatto, lavorando sulla seconda
e terza equazione.
Consideriamo il coefciente di x
2
della terza equazione (
3
2
) e lo dividiamo per il coefciente
di x
2
della seconda equazione ( che vale 1). Moltiplichiamo la seconda equazione per questo
92
7.3. Metodo di eliminazione di Gauss
coefciente (cio per
3
2
) e poi sottraiamo la terza equazione dalla seconda moltiplicata per
3
2
:
3
2
x
2
+4x
3
=15

3
2
(x
2
2x
3
=8)
3
2
x
2
+3x
3
=12 =
x
3
=3
Sostituiamo questa equazione alla terza del sistema, ricavando il sistema equivalente
2x
1
+x
2
+2x
3
=10
x
2
2x
3
=8
x
3
=3
Con tutte le trasformazioni effettuate, abbiamo trasformato il sistema di partenza in uno equivalente, che
si pu risolvere facilmente mediante sostituzioni allindietro. Dallultima equazione abbiamo x
3
= 3. Sosti-
tuendo questo valore nella seconda equazione otteniamo x
2
6 = 8 da cui x
2
= 2. Inne, sostituendo i
valori di x
3
e x
2
nella prima equazione abbiamo 2x
1
+2+6 =10 da cui x
1
=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 elementi
non nulli). Applichiamo trasformazioni elementari per riga in modo da ridurre il sistema di partenza in uno
equivalente di forma triangolare superiore, che potremo risolvere mediante sostituzione allindietro.
La soluzione del problema Ax = b, infatti, non cambia se moltiplichiamo una riga per una costante, se
sottraiamo il multiplo di una riga da unaltra riga o se facciamo scambi di righe, come abbiamo detto allinizio
della 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 diagonale
principale:
sottraiamo la prima equazione moltiplicata per
a
21
a
11
dalla seconda equazione:
a
21
x
1
+a
22
x
2
+a
23
x
3
+. . . +a
2n
x
n
=b
2

a
21
a
11
(a
11
x
1
+a
12
x
2
+a
13
x
3
+. . . +a
1n
x
n
) =
a
21
a
11
b
1
=
(a
22

a
21
a
11
a
12
)x
2
+(a
23

a
21
a
11
a
13
)x
3
+. . . +(a
2n

a
21
a
11
a
1n
)x
n
=b
2

a
21
a
11
b
1
sottraiamo la prima equazione moltiplicata per
a
31
a
11
dalla terza equazione.
. . .
sottraiamo la prima equazione moltiplicata per
a
n1
a
11
dalla n-sima equazione.
Come risultato di questa operazione avremo una nuova matrice con gli elementi della prima
colonna, eccetto quello di posto 11, tutti uguali a zero.
_
_
_
_
_
_
a
11
a
12
. . . a
1n
0 a
(1)
22
. . . a
(1)
2n
.
.
.
.
.
. . . .
.
.
.
0 a
(1)
n2
. . . a
(1)
nn
_
_
_
_
_
_
_
_
_
_
_
_
x
1
x
2
.
.
.
x
n
_
_
_
_
_
_
=
_
_
_
_
_
_
b
1
b
(1)
2
.
.
.
b
(1)
n
_
_
_
_
_
_
93
7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
Al secondo passo, consideriamo il sistema ridotto che si ha ignorando la prima equazione del sistema
e la prima colonna della nuova matrice che abbiamo ottenuta (che ha tutti 0 al di sotto dellelemento
diagonale).
A questa sottomatrice applichiamo lo stesso procedimento di prima, sottraendo, quindi, la prima
equazione della sottomatrice moltiplicata per
a
(1)
32
a
(1)
22
dalla seconda equazione della sottomatrice, e cos
via.
Dopo questo passo, il sistema sar equivalente a:
_
_
_
_
_
_
_
_
_
a
11
a
12
. . . . . . a
1n
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
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
x
1
x
2
x
3
.
.
.
x
n
_
_
_
_
_
_
_
_
=
_
_
_
_
_
_
_
_
b
1
b
(1)
2
b
(2)
3
.
.
.
b
(1)
n
_
_
_
_
_
_
_
_
Dopo aver applicato questo procedimento n 1 volte, avremo un sistema triangolare superiore
semplice da risolvere utilizzando lalgoritmo di sostituzione allindietro.
_
_
_
_
_
_
_
_
_
a
11
a
12
. . . . . . a
1n
0 a
(1)
22
a
(1)
23
. . . a
(1)
2n
.
.
. 0 a
(2)
33
. . . a
(2)
3n
.
.
.
.
.
. . . . . . .
.
.
.
0 0 . . . 0 a
(n1)
nn
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
x
1
x
2
x
3
.
.
.
x
n
_
_
_
_
_
_
_
_
=
_
_
_
_
_
_
_
_
b
1
b
(1)
2
b
(2)
3
.
.
.
b
(n1)
n
_
_
_
_
_
_
_
_
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 della
diagonale 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 nel
procedimento di sostituzione allindietro.
C, inne, da considerare il fatto che si possono avere grossi errori numerici quando un elemento
pivotale molto piccolo.
Cosa fare in queste circostanze? In che modo applicare leliminazione di Gauss?
Si hanno le cosiddette strategie di pivoting:
pivoting parziale
Mano mano che si va avanti nelleliminazione, per i =1, 2, . . . , n1 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 no alla posizione n, andando
a cercare il coefciente massimo in modulo.
pivoting totale
Nel pivoting totale, invece, la ricerca dellelemento pi grande avviene in tutta la sottomatrice che
si ha considerando le colonne e le righe rispettivamente a destra e sotto lelemento diagonale i -simo.
94
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 lele-
mento pivotale dalla riga e colonna qr al posto i i . Di questo scambio di colonne bisogna conservare
traccia perch vengono scambiate anche le componenti del vettore soluzione, in modo da effettuare lo
scambio inverso una volta risolto il sistema.
Il maggiore sforzo computazionale garantisce maggiore accuratezza e stabilit nei risultati, nel senso che
gli errori di arrotondamento non sono cos amplicati come potrebbe succedere senza ladozione di una
tecnica di pivoting.
Esempio 7.4.1 Consideriamo il sistema
x
1
+x
2
+x
3
=1
x
1
+1.0001x
2
+2x
3
=2
x
1
+2x
2
+2x
3
=1
Lesatta soluzione, corretta a 4 cifre decimali, x =(1, 1.0001, 1.0001)
T
.
Leliminazione di Gauss senza pivoting porta al sistema
x
1
+x
2
+x
3
=1
0.0001x
2
+1x
3
=1
1x
2
+1x
3
=0
e, inne, a
x
1
+x
2
+x
3
=1
0.0001x
2
+1x
3
=1
9999x
3
=10000
Se usiamo unaritmetica in base 10 con 3 cifre decimali, allora la sostituzione allindietro ci dar
x
3
=
10000
9999
=1.000, quadx
2
=
11
0.0001
=0, x
1
=0.
La soluzione completamente sbagliata.
Se, invece, facciamo lo scambio della seconda e terza riga adottando il pivoting parziale, allora avremo il
sistema:
x
1
+x
2
+x
3
=1
1x
2
+1x
3
=0
0.0001x
2
+1x
3
=1
e, inne,
x
1
+x
2
+x
3
=1
1x
2
+1x
3
=0
0.9999x
3
=1
Questa volta si ha (sempre lavorando con 3 cifre decimali) x
3
= 1.000, x
2
= 1.000, x
1
= 1.000, che la
soluzione corretta a 3 cifre decimali.
95
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 nel
prodotto LU di due matrici L, trangolare inferiore, e U, triangolare superiore.
Basta considerare, ad ogni passo, la matrice
M
(k)
=
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
1
0 1
.
.
. 0 1
.
.
.
.
.
. 0 1
.
.
.
.
.
.
.
.
.
a
(k1)
k+1k
a
(k1)
kk
1
.
.
.
.
.
.
.
.
.
a
(k1)
k+2k
a
(k1)
kk
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
a
(k1)
nk
a
(k1)
kk
1
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
Si considera quindi la matrice A
(k)
= M
(k)
A
(k1)
= M
(k)
M
(k1)
. . . M
(1)
A e il vettore b
(k)
=
M
(k)
b
(k1)
=M
(k)
M
(k1)
M
(1)
b.
Dopo n 1 passi, avremo
U = A
(n1)
=M
(n1)
. . . M
(2)
M
(1)
A
conU matrice triangolare superiore. Otteniamo quindi A =LU, con
L =(M
(n1)
M
(2)
M
(1)
)
1
=[M
(1)
]
1
[M
(n2)
]
1
[M
(n1)
]
1
L triangolare inferiore con elementi dati dal prodotto delle matrici M
(k)
generate durante leliminazione
di Gauss.
7.5.1 Fattorizzazione LDU
Leliminazione 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 con
elementi diagonali uguali a 1.
Nelleliminazione di Gauss vista prima, nella U abbiamo inglobato anche la matrice D, per cui abbiamo
una fattorizzazione LU.
La decomposizione LDU assicurata dal teorema LDU. Prima di vedere il teorema, deniamo i minori
principali di una matrice A.
Denizione 7.5.1 Data una matrice A si denisce minore principale di dimensione k (con 1 k n), la Minore
principale
sottomatrice che si ha prendendo le prime k righe e k colonne di A.
_
_
_
a
11
. . . a
1k
.
.
.
.
.
.
a
k1
. . . a
kk
_
_
_
Teorema 7.5.1 (LDU) Nellipotesi 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
7.5. Fattorizzazione triangolare
Qualsiasi matrice non singolare pu essere condotta sotto una forma tale da soddisfare il teorema LDU
mediante opportuni scambi di righe e di colonne (abbiamo visto cosa fare quando un elemento pivotale
nullo). Fare uno scambio di righe o di colonne signica moltiplicare la matrice A con unopportuna matrice
di permutazione.
Una matrice di permutazione P una matrice ottenuta dalla matrice identit operando scambi di righe o
di colonne in modo che la matrice risultante abbia esattamente un unico valore diverso da zero su ogni riga
e 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 =
_
_
1 0 0
0 0 1
0 1 0
_
_
Qualunque sia la matrice A, di dimensione 3, moltiplicandola a sinistra per P si ottiene lo scambio della
seconda e terza riga di A; invece, moltiplicandola a destra per P si ottiene lo scambio della seconda e terza
colonna di A:
PA =
_
_
1 0 0
0 0 1
0 1 0
_
_
_
_
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
_
_
=
_
_
a
11
a
12
a
13
a
31
a
32
a
33
a
21
a
22
a
23
_
_
AP =
_
_
a
11
a
12
a
13
a
21
a
22
a
23
a
31
a
32
a
33
_
_
_
_
1 0 0
0 0 1
0 1 0
_
_
=
_
_
a
11
a
13
a
12
a
21
a
23
a
22
a
31
a
33
a
32
_
_
Quindi, il teorema LDU si puapplicare alla matrice A oadunopportuna matrice PA, se si effettua il pivoting
parziale, 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 nellaU (post-moltiplicando o pre-moltiplicando le L e le
U denite prima per la D).
Nel caso in cui la matrice D viene inglobata nella matrice L, la L ha elementi diagonali l
i i
6=0, mentre
la 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 u
i i
6=0, mentre
la L ha elementi diagonali unitari. Si parla di fattorizzazione di Doolittle.
Scriviamo in forma estesa il prodotto tra matrici, nellipotesi di operare la fattorizzazione di Crout:
_
_
_
_
_
_
a
11
a
12
. . . a
1n
a
21
a
22
. . . a
2n
.
.
.
.
.
.
.
.
.
a
n1
a
n2
. . . a
nn
_
_
_
_
_
_
=
_
_
_
_
_
_
l
11
0 . . . 0
l
21
l
22
. . . 0
.
.
.
.
.
.
.
.
.
l
n1
l
n2
. . . l
nn
_
_
_
_
_
_
_
_
_
_
_
_
1 u
12
. . . u
1n
0 1 . . . u
2n
.
.
.
.
.
.
.
.
.
0 0 . . . 1
_
_
_
_
_
_
Moltiplichiamo la prima riga di L per le colonne di U ed eguagliamo i termini con gli elementi della prima
riga di A. Otteniamo:
l
11
1 =a
11
l
11
u
1k
=a
1k
, k =2, . . . , n
Quindi: l
11
=a
11
e u
1k
=a
1k
/l
11
. 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:
l
i j
=a
i j

j 1

m=1
l
i m
u
mj
i =1, 2, . . . n j =1, 2, . . . , i
u
i j
=
1
l
i i
(a
i j

i 1

m=1
l
i m
u
mj
) i =1, 2, . . . , n 1 j =i +1, . . . n
97
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 LUx =b.
Si pone, dunque, y = Ux, ottenendo il sistema Ly = b. Si ricava facilmente y mediante sostituzione in
avanti e da Ux =y si ricava x mediante sostituzione allindietro.
Lo sforzo computazionale maggiore quindi quello per il calcolo dei coefcienti di L e U.
Nelleliminazione di Gauss noi ricaviamo espressamente solo la U mentre le modiche operate sulla
colonna dei termini noti equivalente al prodotto L
1
b (quindi da LUx =b risolviamoUx =L
1
b).
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 matrici
ottenute 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 lalgoritmo di eliminazione di Gauss sia stabile rispetto ad una crescita
di 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 la Matrice dia-
gonalmente
dominante in
senso stretto
per righe
relazione
|a
i i
| >
n

j =0
j 6=i
|a
i j
| per ogni i =1, 2, . . . , n.
Una matrice A di dimensione n si dice diagonalmente dominante in senso stretto per colonne se vale la Matrice dia-
gonalmente
dominante in
senso stretto
per colonne
relazione
|a
j j
| >
n

i =0
i 6=j
|a
i j
| per ogni j =1, 2, . . . , n.
Esempio 7.5.2
A =
_
_
7 3 1
2 10 2
5 0 6
_
_
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 sulla
prima colonna si ha |7| =|2| +|5|.
Esempio 7.5.3
A =
_
_
6 3 4
3 9 5
4 5 11
_
_
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 per
colonne, perch la relazione che abbiamo sulla prima riga vale sulla prima colonna.
Le denizioni appena date si possono rilassare, denendo le matrici diagonalmente dominanti.
98
7.5. Fattorizzazione triangolare
Una matrice A di dimensione n si dice diagonalmente dominante per righe se vale la relazione
|a
i i
|
n

j =0
j 6=i
|a
i j
| per ogni i =1, 2, . . . , n.
Matrice dia-
gonalmente
dominante
Analoga la denizione di matrice diagonalmente dominante per colonne (basta applicare la denizione
di matrice diagonalmente dominante per righe sulla matrice A
T
)
Si hanno i seguenti teoremi.
Teorema 7.5.2 Se A una matrice diagonalmente dominante e nonsingolare, allora il metodo di eliminazione
di Gauss pu essere implementato senza alcuno scambio di righe e di colonne e i calcoli sono stabili rispetto
alla crescita degli errori di arrotondamento.
Teorema 7.5.3 Se A una matrice diagonalmente dominante in senso stretto (per righe o per colonne), allora
A non singolare. In questo caso il metodo di eliminazione di Gauss pu essere implementato senza alcuno
scambio di righe e di colonne e i calcoli sono stabili rispetto alla crescita degli errori di arrotondamento.
Unaltra importante classe di matrici data dalle matrici denite positive.
Una matrice A di dimensione n si dice
denita positiva se simmetrica e vale x
T
Ax >0 qualunque sia il vettore x 6=0 Matrice
denita
positiva
semidenita positiva se x
T
Ax 0 qualunque sia il vettore x,
indenita altrimenti.
2
Si ha unanaloga denizione per matrici denite negative e semidenite negative. Una matrice A di
dimensione n si dice
denita negativa se simmetrica e vale x
T
Ax <0 qualunque sia il vettore x 6=0, Matrice
denita
negativa
semidenita negativa se x
T
Ax 0 qualunque sia il vettore x.
Dalla denizione di matrice denita positiva, deve essere x
T
Ax >0 qualunque sia il vettore x, vale a dire:
_
x
1
x
2
. . . x
m
_
_
_
_
_
_
_
a
11
a
12
. . . a
1n
a
21
a
22
. . . a
2n
.
.
.
.
.
. . . .
.
.
.
a
n1
a
n2
. . . a
nn
_
_
_
_
_
_
_
_
_
_
_
_
x
1
x
2
.
.
.
x
m
_
_
_
_
_
_
=
_
x
1
x
2
. . . x
m
_
_
_
_
_
_
_

n
j =1
a
1j
x
j

n
j =1
a
2j
x
j
.
.
.

n
j =1
a
nj
x
j
_
_
_
_
_
_
=
n

i =1
n

j =1
a
i j
x
i
x
j
>0
Basarsi sulla denizione per vericare che una matrice sia o meno denita positiva pu essere molto
difcile. Fortunatamente, ci sono molti criteri che ci permettono di dire se una matrice denita positiva
oppure no.
IL seguente risultato ci permette di eliminare certe matrici dalla classe delle matrici denite positive, se
non soddisfano certi requisiti.
Teorema 7.5.4 Se una matrice A di dimensione n denita positiva, allora
A ammette la matrice inversa;
a
i i
>0 per ogni i =1, 2, . . . , n
2
Osserviamo che non tutti gli autori richiedono la simmetria per denire una matrice denita positiva, e distinguono tra matrici
denite positive e matrici simmetriche denite positive.
99
7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
Quindi se una matrice ha elementi a
i i
0, non una matrice denita positiva, perch, se lo fosse, in base al
teorema avrebbe elementi diagonali tutti positivi.
Vediamo ora una condizione necessaria e sufciente per matrici denite positive.
Teorema 7.5.5 Una matrice A simmetrica di dimensione n denita positiva se e solo se tutti i suoi minori
principali hanno determinante positivo.
Teorema 7.5.6 Una matrice A simmetrica di dimensione n con elementi diagonali tutti positivi e
diagonalmente dominante denita positiva.
Anche per matrici simmetriche denite positive, si pu applicare il metodo di eliminazione di Gauss
senza operare scambi di righe e di colonne e i calcoli rimangono stabili rispetto alla crescita degli errori di
arrotondamento. 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 minori
principali singolare, allora A si pu decomporre nel prodotto A = LDL
T
, dove L triangolare inferiore con
elementi diagonali unitari ed univocamente determinata, L
T
la sua trasposta e D matrice diagonale.
Dimostrazione. Intanto valgono le ipotesi del teorema LDU e quindi si pu scrivere in maniera univoca
A = LDU con L matrice triangolare inferiore, D diagonale e U triangolare superiore. Inoltre, poich A
simmetrica, e quindi A = A
T
, si ha pure LDU = (LDU)
T
vale a dire LDU =U
T
D
T
L
T
=U
T
DL
T
. Si deduce,
dalluguaglianza, che U =L
T
e la decomposizione diventa A =LDL
T
. 4
Nel caso particolare in cui A sia simmetrica e denita positiva, da x
T
Ax >0 vale pure
x
T
Ax =x
T
LDL
T
x =(L
T
x)
T
DL
T
x =y
T
Dy >0 con y =L
T
x per ogni x >0.
Essendo A denita positiva, risulta anche D denita positiva. Perci gli elementi di D (che una matrice
diagonale) devono necessariamente essere tutti positivi. In tal caso, si considera la matrice D
1/2
che la
matrice diagonale con elementi dati dalle radici quadrate degli elementi diagonali di D (si prende il valore
positivo della radice quadrata, e il risultato un numero reale in virt del fatto che gli elementi diagonali di
D sono tutti positivi). Si pone, quindi, M =LD
1/2
e si ottiene A = MM
T
: abbiamo il prodotto di una matrice
triangolare inferiore concoefcienti tutti reali per la sua trasposta. Se D nonfosse denita positiva (ma avesse
qualche elemento negativo), allora neanche A sarebbe denita positiva e la matrice M sarebbe non reale.
Quindi se A simmetrica, si ha la decomposizione nel prodotto LL
T
(chiamiamo di nuovo con L la
matrice M) con L reale se e solo se A denita positiva.
I coefcienti della matrice L si trovano facendo il prodotto righe per colonne ed eguagliando i termini ai
corrispondenti elementi di A.
Si ricava:
l
11
=
p
a
11
l
i 1
=a
i 1
/l
11
i =2, 3, . . . , n
l
i i
=
_

_
(a
i i

i 1

k=1
l
2
i k
) i =2, 3, . . . , n
l
i j
=
1
l
i i
(a
i j

j 1

k=1
l
i 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 ufciale ingegnere e mor alla ne della prima guerra mondiale.
100
7.6. Esercizi
7.6 Esercizi
Esercizio 7.6.1 Sia data la matrice
A =
_
_
1 0 2
0 4 8
2 8 29
_
_
Provare che verica le condizioni del teorema LDU e trovare i fattori L e L
T
tali che A =LL
T
.
Svolgimento La matrice A simmetrica e soddisfa le ipotesi del teorema LDU ( infatti |a
11
| =1, det
_
1 0
0 4

=
4 e det (A) =1161664 =36) per cui possibile scrivere la matrice A come A =LL
T
. Si ha, quindi:
_
_
l
11
0 0
l
21
l
22
0
l
31
l
32
l
33
_
_
_
_
l
11
l
21
l
31
0 l
22
l
32
0 0 l
33
_
_
=
_
_
l
2
11
l
11
l
21
l
11
l
31
l
21
l
11
l
2
21
+l
2
22
l
21
l
31
+l
22
l
32
l
31
l
11
l
31
l
21
+l
32
l
22
l
2
31
+l
2
32
+l
2
33
_
_
Devono quindi valere le relazioni:
l
2
11
=1 =l
11
=1
l
21
l
11
=0 =l
21
=0
l
31
l
11
=2 =l
31
=2
l
2
21
+l
2
22
=4 =l
22
=
p
40 =2
l
21
l
31
+l
22
l
32
=8 =l
32
=8/2 =4
l
2
31
+l
2
32
+l
2
33
=29 =l
33
=
_
292
2
4
2
=
p
29416 =
p
9 =3
La matrice L dunque
_
_
1 0 0
0 2 0
2 4 3
_
_
Esercizio 7.6.2 Data la matrice
A =
_
_
0.2 1 0.2
1 6.5 1.75
0 2 2.25
_
_
(a) vericare che A soddisfa le condizioni del teorema LDU;
(b) fattorizzare secondo Crout A =LU (prendendo u
i i
=1);
(c) usare la fattorizzazione per calcolare det (A
2
);
(d) usare la fattorizzazione per risolvere il sistema Ax =b, con b
T
=(2.8 19.25 10.75)
T
.
Svolgimento
(a) La matrice verica le condizioni del teorema LDU in quanto i minori principali costruiti a partire
dallangolo superiore sinistro hanno tutti determinante diverso da zero:
a
11
=0.2 6=0 det
_
0.2 1
1 6.5

=0.3 6=0 det A =0.375 6=0


101
7. METODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI
(b) La fattorizzazione di A come A =LU si costruisce imponendo:
A =
_
_
0.2 1 0.2
1 6.5 1.75
0 2 2.25
_
_
=LU =
_
_
l
11
0 0
l
21
l
22
0
l
31
l
32
l
33
_
_
_
_
1 u
12
u
13
0 1 u
23
0 0 1
_
_
Usando le formule di pag. 97, si ottiene
l
11
=0.2
0.2u
12
=1 =u
12
=5
0.2u
13
=0.2 =u
13
=1
l
21
=1
1 5+l
22
=6.5 =l
22
=1.5
1 1+1.5u
23
=1.75 =u
23
=0.5
l
31
=0
0 5+l
32
=2 =l
32
=2
0 1+2 0.5+l
33
=2.25 =l
33
=1.25
Le matrici L e U sono:
L =
_
_
0.2 0 0
1 1.5 0
0 2 1.25
_
_
U =
_
_
1 5 1
0 1 0.5
0 0 1
_
_
(c) Si ha det A =det LU =det LdetU =det L =0.375. Quindi det (A
2
) =det (A)
2
=0.375
2
=7.11111111.
(d) Da Ax =b si ha LUx =b.
Si pone Ux =y e si hanno i due sistemi da risolvere per sostituzione in avanti e allindietro: Ly =b e
Ux =y.
_
_
0.2 0 0
1 1.5 0
0 2 1.25
_
_
_
_
y
1
y
2
y
3
_
_
=
_
_
2.8
19.25
10.75
_
_
=
_

_
y
1
=2.8/0.2 =14
y
2
=(19.2514)/1.5 =3.5
y
3
=(10.752 3.5)1.25 =3
_
_
1 5 1
0 1 0.5
0 0 1
_
_
_
_
x
1
x
2
x
3
_
_
=
_
_
14
3.5
3
_
_
=
_

_
x
3
=3
x
2
=3.53 0.5 =2
x
1
=1435 2 =1
Quindi x =(1, 2, 3)
T
.
Esercizio 7.6.3 dato il sistema lineare Ax =b dove:
A =
_
_
16 8 4
8 20 4
4 4 12.25
_
_
b =
_
_
20
28
28.25
_
_
(a) Provare che la matrice denita positiva.
(b) Fattorizzare la matrice secondo Cholesky: A =LL
T
.
(c) Usare la fattorizzazione per risolvere il sistema Ax =b e per calcolare det(A
3
).
Soluzione
102
7.6. Esercizi
(a) La matrice simmetrica, denita positiva in quanto gli elementi della diagonale principale sono tutti
positivi e la matrice diagonalmente dominante in senso stretto:
16 >| 8| +|4| =12
20 >| 8| +|4| =12
12.25 >|4| +|4| =8
(b) Ponendo A =LL
T
si ricava:
l
2
11
=16 =l
11
=4
l
21
l
11
=8 =l
21
=2
l
31
l
11
=4 =l
31
=1
l
2
21
+l
2
22
=20 =l
22
=
p
204 =4
l
21
l
31
+l
22
l
32
=4 =l
32
=(4+2)/4 =1.5
l
2
31
+l
2
32
+l
2
33
=12.25 =l
33
=
p
12.2512.25 =
p
9 =3
La matrice L dunque
L =
_
_
4 0 0
2 4 0
1 1.5 3
_
_
(c) Per risolvere il sistema Ax =b, adoperiamo il metodo di sostituzione in avanti e allindietro risolvendo
i sistemi: Ly =b e poi L
T
x =y.
Il primo sistema d:
_
_
4 0 0
2 4 0
1 1.5 3
_
_
_
_
y
1
y
2
y
3
_
_
=
_
_
20
28
28.25
_
_
e otteniamo y
1
=20/4 =5, y
2
=(28+10)/4 =9.5, y
3
=(28.25514.25)/3 =3.
Nel risolvere il sistema L
T
x =y si ha
_
_
4 2 1
0 4 1.5
0 0 3
_
_
_
_
x
1
x
2
x
3
_
_
=
_
_
5
9.5
3
_
_
da cui x
3
=1, x
2
=(9.51.5)/4 =2, x
1
=(51+4)/4 =2, quindi x =(2, 2, 1).
Inoltre, da det(A) = det(LL
T
) = det(L)
2
= (4 4 3)
2
= 48
2
= 2304 e da det(A
3
) = (det(A))
3
si ha
det(A
3
) =2304
3
=12230590464.
103
C
A
P
I
T
O
L
O
8
METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI
Mi spiace ammettere che la materia
che mi piaciuta di meno stata la
matematica. Ci ho pensato su, e
credo che la ragione sia che la
matematica non lascia spazio alle
discussioni. Se fai un errore, non
puoi scamparla.
Malcom X
8.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.2 Metodi iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.3 Norme di vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.4 Norme di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
8.5 Autovalori e autovettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
8.6 Metodi classici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.6.1 Convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.6.2 Controllo della convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.6.3 I metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.6.4 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassamento . . . . . . . . . . . . . . . . 117
8.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
8.1 Introduzione
Lequazione che governa la conduzione del calore in una piastra metallica piana, omogenea e isotropa
prende il nome di equazione di Poisson e si scrive come

2
T
x
2
+

2
T
y
2
=
f (x, y)
cK
H
Si tratta di unequazione alle derivate parziali dove T [
o
C] la temperatura, K
H
[m
2
/s] il coefciente di dif-
fusivit termica, [Kg/m
2
] la densit della piastra, c [Cal /Kg
o
C] il calore specico, f (x, y) [Cal /m
2
s] il
calore aggiunto o sottratto alla piastra per unit di tempo e di area. In letteratura diverse tecniche numeriche
permettono di risolvere il problema (ricordiamo i metodi alle differenze nite e i metodi agli elementi niti),
105
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 di
equazioni lineari del tipo
HT=q
dove H rappresenta la matrice di discretizzazione del metodo, T rappresenta il vettore delle temperature nei
nodi 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 di
avere pochi elementi diversi da zero per ogni riga.
Per risolvere sistemi lineari di questo tipo, si preferisce usare metodi iterativi piuttosto che diretti. In
questo 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 gli
errori di arrotondamento, si ottiene la soluzione esatta del problema in un numero nito (e noto a prio-
ri) di operazioni. Nei metodi iterativi, invece, si parte da unapprossimazione iniziale che viene migliorata,
mediante un procedimento iterativo, no ad ottenere una approssimazione sufcientemente accurata della
soluzione. Lidea di risolvere sistemi lineri con metodi iterativi risale ai tempi di Gauss (1823), ma solo con
lavvento dei computers (negli anni cinquanta) si pu osservare il loro sviluppo, visto che diventa possibile
risolvere 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 la
decomposizione della matrice di partenza nel prodotto LU con L triangolare inferiore e U triangolare supe-
riore) porta allintroduzione del cosiddetto ll-in, cio a matrici L e U con elementi diversi da zero l dove
la matrice di partenza A ha elementi nulli. I metodi diretti diventano quindi proibitivi perch troppo costosi
per quanto riguarda il numero di operazioni aritmetiche e loccupazione di dati che devono essere salvati per
limplementazione numerica del metodo stesso. I metodi iterativi, al contrario, lavorano direttamente sulla
matrice A e, dal momento che A viene coinvolta solo in termini di prodotti matrice-vettore, non c neanche
bisogno 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 prodotto
matrice-vettore).
Quando abbiamo studiato gli zeri di funzione nel Capitolo 4, data unapprossimazione iniziale, si pro-
cedeva nellalgoritmo iterativo no a quando lo scarto tra due approssimazioni successive non diventava
minore di una pressata tolleranza.
Nel caso dei sistemi lineari, lapproccio 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 (un
vettore). Dobbiamo dunque essere capaci di misurare lo scarto tra due vettori in modo da capire quando la
successione dei vettori generati dallalgoritmo tende al vettore soluzione del sistema lineare.
Abbiamo perci bisogno di denire le norme di vettori e di matrici. Nel seguito, tratteremo solo norme di
matrici e vettori denite 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 R
n
lo spazio dei vettori colonna di lunghezza n. La norma di un vettore x R
n
una funzione, k k, Norma
denita in R
n
e a valori in R, che gode delle seguenti propriet:
kxk >0 per ogni x 6=0
kxk =0 se e solo se x =0
kxk =||kxk dove un reale (o complesso) arbitrario
kx+yk kxk+kyk
Le principali norme vettoriali sono: Norme 1, ,
2
Norma assoluta (o norma l
1
), indicata con k k
1
: kxk
1
=

n
i =1
|x
i
|
Norma massima (o norma innito, l

), indicata con k k

: kxk

=max
1i n
|x
i
|
106
8.4. Norme di matrici
Figura 8.1: Vettori in R
2
con norma unitaria nelle norme 1, e 2.
Norma euclidea (o norma l
2
), indicata con k k
2
: kxk
2
=
p
x
T
x =
_

n
i =1
|x
i
|
2
Tra le norme 1, e 2 valgono le seguenti relazioni (che pongono unequivalenza tra esse). Dato un vettore
x R
n
:
kxk

kxk
2

p
nkxk

kxk

kxk
1
nkxk

Esempio 8.3.1 Il vettore x =(1, 5, 20)


T
ha norme:
kxk
1
=|1| +|5| +| 20| =26
kxk

=max(|1|, |5|, | 20|) =20


kxk
2
=
_
(1
2
+5
2
+(20)
2
) =
p
426 =20.639767441
Per la norma euclidea vale la diseguaglianza di Cauchy-Schwarz: Diseguaglianza
di Cauchy-
Schwarz
x
T
y kxk
2
kyk
2
Dati due vettori x e y R
n
, si denisce distanza tra i due vettori la norma della differenza tra i vettori. Distanza tra
vettori
Quindi:
kxyk
1
=
n

i =1
|x
i
y
i
|
kxyk

= max
1i n
|x
i
y
i
|
kxyk
2
=
_
n

i =1
|x
i
y
i
|
2
Il concetto di distanza serve per denire il limite di una successione di vettori.
Data una successione di vettori in R
n
, x
(k)
, per k = 1, 2, . . . , , si dice che la successione converge ad un
vettore x di R
n
e si scrive lim
k
x
(k)
=x se, per ogni >0, esiste un intero m tale che Limite di una
successione
di vettori
kx
(k)
xk < per tutti gli indici k m
8.4 Norme di matrici
Analogamente alla denizione di norma vettoriale, la norma di matrici quadrate di dimensione n una
funzione, che indichiamo con k k che, per tutte le matrici A e B di dimensione n e per tutti i numeri reali (o
complessi) , soddisfa le seguenti propriet:
107
8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI
kAk >0 per ogni A 6=0
kAk =0 se e solo se A =0
kAk =||kAk
kA+Bk kAk+kBk
kABk 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 la
relazione Norma
compatibile
kAxk kAkkxk
Alcune norme su matrici sono generate da norme su vettori: si parla allora di norma naturale o indotta
dalla norma di vettori. In particolare, se k k una norma su vettori in R
n
, allora kAk = max
kxk=1
kAxk la Norma
naturale
norma naturale o indotta dalla norma k k su vettori.
Le norme di matrici indotte dalla norma 1 e dalla norma innito su vettori sono:
Norma 1: kAk
1
=max
j

n
i =1
|a
i j
| (data dal massimo sulla somma delle colonne)
Norma innito: kAk

=max
i

n
j =1
|a
i j
| (data dal massimo sulla somma delle righe)
La norma di matrice indotta dalla norma 2 pi complicata e vedremo in seguito come denita.
facile vedere che le norme naturali sono norme compatibili conla 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 t r (A) la somma traccia di una
matrice
degli elementi della diagonale principale di A, la norma euclidea data da
N(A) =
_
t r (A
T
A) =
_
t r (AA
T
) =
_

n
i =1
j =1
|a
i 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 tali
che
Ax =x
allora un autovalore e x il corrispondente autovettore della matrice A. Autovalore e
autovettore
Scritta in maniera equivalente, la relazione denisce il sistema lineare
(AI )x =0
Poich x 6= 0 e il termine noto del sistema il vettore di tutti zeri, il determinante della matrice del sistema
deve necessariamente essere uguale a zero, cio det (AI ) =0.
Lo sviluppo del determinante porta a un polinomio di grado n nellincognita :

n
t r (A)
n1
+. . . +(1)
n
det (A) =0
Questo polinomio si chiama polinomio caratteristico. Le sue n radici, che chiamiamo
1
,
2
, . . . ,
n
, sono gli Polinomio
caratteristico
n autovalori della matrice A.
Per le propriet dei polinomi vale:
n

i =1

i
=t r (A) =a
11
+a
22
+. . . +a
nn
e
n

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 A
k
(cio A A A k
volte).
108
8.5. Autovalori e autovettori
Figura 8.2: Autovalori e autovettori
Gli autovalori di una matrice A e della sua trasposta A
T
sono gli stessi (ma gli autovettori sono, in
genere, diversi).
Se A e B sono due matrici arbitrarie regolari, allora gli autovalori di AB sono gli stessi di BA.
Se x un autovettore associato alla matrice A, allora Ax = x: la matrice A trasforma il vettore x in un
vettore le cui componenti sono moltiplicate per : se >1, allora A ha leffetto 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 risultante
Ax 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)
sono
linearmente indipendenti.
1
Se A una matrice simmetrica reale denita positiva, allora i suoi autovalori sono tutti reali e positivi.
Introduciamo ora il raggio spettrale di una matrice A . Raggio
spettrale
Denizione 8.5.1 Il raggio spettrale (A) di una matrice A denito da
(A) = max
autovalore di A
||
Quindi il raggio spettrale il massimo, in modulo, degli autovalori di A (ricordiamo che se un
complesso, =+i , con i =
p
1, si ha || =
_

2
+
2
).
Possiamo ora denire la norma 2 su matrici indotta dalla norma 2 su vettori. Si pu, infatti, provare che Norma 2 su
matrici
kAk
2
=
_
(A
T
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 (A
k
)
i j
0 per k , qualunque
sia i , j =1, 2, . . . , n, (consideriamo A A A k volte e gli elementi della matrice risultante tendono a zero per
k ) si dicono matrici convergenti. Diciamo che una matrice A di dimensione n convergente se Matrice
convergente
lim
k
(A
k
)
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 proposizioni
1. A una matrice convergente.
2. lim
k
kA
k
k =0, per qualche norma naturale.
3. lim
k
kA
k
k =0, per tutte le norme naturali.
4. (A) <1.
5. lim
k
A
k
x =0, qualunque sia il vettore x.
1
Dati n vettori linearmente indipendenti di R
n
, u
(1)
, u
(2)
, . . . u
(n)
, ogni vettore di R
n
si pu scrivere come una loro combinazione
lineare. Quindi esistono n coefcienti
1
,
2
, . . . ,
n
per cui x =
1
u
(1)
+
2
u
(2)
+. . .+
n
u
(n)
. Inoltre, per vettori linearmente indipendenti
vale il risultato:
1
u
(1)
+
2
u
(2)
+. . . +
n
u
(n)
=0 se e solo se tutti i coefcienti
i
sono uguali a zero, per i =1, 2, . . . , n.
109
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 su
unidea molto semplice.
Si parte da unapprossimazione iniziale x
(0)
, commettendo unerrore e
(0)
=xx
(0)
. Lerrore 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 il
vettore Ax
(0)
si discosta da b).
Successivamente si denisce il passo x
(1)
come x
(1)
= x
(0)
+p
(0)
, dove ora p
(0)
soluzione del sistema
Mp
(0)
=r
0
, in cui la matrice M pi semplice della A e, allo stesso tempo, M
1
approssima in qualche
modo A
1
.
Il procedimento viene iterato no a convergenza.
Da queste richieste tra loro contradditorie, si sviluppa una strategia che porta alla soluzione esatta x come
limite della successione dei valori approssimati x
(k)
.
Il processo iterativo si legge, infatti, come:
x
(k+1)
=x
(k)
+M
1
(bAx
(k)
) k =0, 1, . . . .
O, equivalentemente,
x
(k+1)
=(I M
1
A)x
(k)
+M
1
b k =0, 1, . . .
Notiamo che, ad ogni passo, non dobbiamo calcolare esplicitamente M
1
, perch risolviamo problemi del
tipo Mp
(k)
=r
(k)
=bAx
(k)
in modo da porre x
(k+1)
=x
(k)
+p
(k)
. La matrice E = I M
1
A detta matrice di
iterazione del metodo. Nel seguito, per semplicit, poniamo q =M
1
b.
Lo schema iterativo appena descritto un metodo stazionario (cio non dipende dalliterazione k) e
pu essere visto come caso particolare di uno schema di punto sso 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) o
equivalentemente 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)
=
bAx
(k)
e lerrore e
(k)
=xx
(k)
. Osserviamo che si ha la relazione r
(k)
= Ae
(k)
. Infatti
Ae
(k)
= A(xx
(k)
) = AxAx
(k)
=bAx
(k)
=r
(k)
Lo schema converge quando la successione x
(k)
converge alla soluzione x per k , ovvero quando
lim
k
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 xx
(k)
. Si ha
x =Ex+q
x
(k)
=Ex
k1
+q
e sottraendo si ricava
e
(k)
=Ee
(k1)
La relazione appena trovata vale, alla stessa maniera, tra lerrore e
(k1)
e lerrore e
(k2)
per cui possiamo
scrivere e
(k1)
=Ee
(k2)
.
Scriviamo queste relazioni dalliterazione k no ad arrivare alliterazione 0.
110
8.6. Metodi classici
e
(k)
=Ee
(k1)
e
(k1)
=Ee
(k2)
e
(k2)
=Ee
(k3)
.
.
. =
.
.
.
e
(2)
=Ee
(1)
e
(1)
=Ee
(0)
Partendo, ora, dalla prima relazione e, andando a sostituire, ogni volta, a secondo membro, la relazione
successiva, si ha:
e
(k)
=Ee
(k1)
=E(Ee
(k2)
) =E
2
e
(k2)
=E
2
(Ee
(k3)
) =E
3
e
(k3)
=. . . =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 . Poich lerrore iniziale arbitrario, si ha che lim
k
e
(k)
=
lim
k
E
k
e
(0)
=0 se e solo se lim
k
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 x
0
al vettore x =Ex+q = A
1
b se e solo se (E) <1.
Questo risultato lo si pu provare facilmente, nel caso in cui la matrice di iterazione E abbia n autovalori
distinti e, quindi, possieda n autovettori linearmente indipendenti, per cui lerrore iniziale e
(0)
si pu scrivere
come e
(0)
=
1
u
(1)
+
2
u
(2)
+. . . +
n
u
(n)
, dove
1
,
2
, . . . ,
n
sono delle costanti, mentre u
(1)
, u
(2)
. . . u
(n)
sono
gli 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 (ricordando
che, se un autovalore associato alla matrice A, con u un autovettore ad esso associato, si ha A
k
u=
k
u)
e
(k)
=E
k
e
(0)
=E
k
(
1
u
(1)
+
2
u
(2)
+. . . +
n
u
(n)
)
=
1
E
k
u
(1)
+
2
E
k
u
(2)
+. . . +
n
E
k
u
(n)
=
1

k
1
u
(1)
+
2

k
2
u
(2)
+. . . +
n

k
n
u
(n)
mettiamo in evidenza
k
1
=
k
1

1
u
(1)
+
2

k
2

k
1
u
(2)
+. . . +
n

k
n

k
1
u
(n)
_
per k si ha

k
i

k
1
0 per i =2, 3, . . . , n

k
1

1
u
(1)
Perci lim
k
e
(k)
=lim
k

k
1

1
u
(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 schema
converge. A tal proposito osserviamo che, in condizioni asintotiche (per k +) vale il seguente risultato
2
ke
(k)
k (E)
k
ke
(0)
k (8.1)
2
Questa relazione vale anche per matrici con autovalori non distinti tra loro.
111
8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI
Scrivendo lequazione (8.1) per literazione k 1 e facendo il rapporto tra le norme degli errori a due passi
successivi si ha:
ke
(k)
k
ke
(k1)
k
(E)
Ricaviamo, quindi, che il metodo iterativo ha convergenza lineare con costante asintotica uguale al raggio
spettrale della matrice di iterazione.
La relazione appena trovata utile per stabilire quanto veloce il metodo iterativo per approssimare la
soluzione del sistema con una certa accuratezza. Ad esempio, vogliamo stabilire a priori quante iterazioni
occorrono per ridurre la norma dellerrore iniziale di un certo fattore, ad esempio 10 (il che vuol dire ridurre
lerrore 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)
k
ke
(0)
k da cui
(E)
k
ke
(0)
k
ke
(0)
k
10
=(E)
k

1
10
Applicando il logaritmo in base 10 ad ambo i membri si ha
k log
10
((E)) 1 =k
1
log
10
((E))
cio occorrono k iterazioni con k dato dal pi piccolo intero che soddisfa la relazione appena scritta. Meno
iterazioni occorrono fare, pi veloce il metodo.
Si denisce perci velocit asintotica di convergenza Velocit
asintotica di
convergenza
R =log
10
((E)) =
log
10
((E
k
))
k
Osserviamo che, essendo (E) <1, nelle ipotesi in cui il metodo converge, log
10
((E)) <0 e, di conseguenza,
R >0. Se vogliamo ridurre lerrore iniziale di una certa quantit , rifacendo i conti come prima, da una parte
vogliamo che sia ke
(k)
k ke
(0)
k, dallaltra sappiamo che ke
(k)
k (E)
k
ke
(0)
k. Uguagliando i termini abbiamo
(E)
k
ke
(0)
k ke
(0)
k =(E)
k

Passando ai logaritmi (di quantit minori di uno) si ha


k log
10
((E)) log
10
() =k log
10
((E)) log
10
() =k
log
10
()
R
Troviamo in questo modo quante iterazioni (il primo intero k che verica la relazione precedente) occorre
fare per poter ridurre lerrore iniziale di .
Se si traccia un graco semilogaritmico del prolo di convergenza dello schema iterativo, ponendo sul-
lasse delle ascisse il numero delle iterazioni e sullasse delle ordinate la norma dellerrore, si pu vedere che
la 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, dalla
relazione (vista a pag. 111)
e
(k)

k
1

1
u
(1)
passando alle norme e ai logaritmi in base 10 si ha
log
10
ke
(k)
k k log
10
|
1
| +costante
La pendenza del graco lopposto della velocit asintotica di convergenza R.
Nel caso in cui non nota la soluzione esatta x, poich ke
(k)
k kx
(k)
x
(k1)
k = kd
(k)
k (valgono le stesse
considerazioni viste per gli schemi iterativi per funzioni non lineari a pag. 53), ritroviamo lo stesso risultato
sul prolo di convergenza semilogaritmico in cui si pone sullasse delle ascisse il numero delle iterazioni e
sullasse delle ordinate la norma degli scarti.
112
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 chiamiamo
D), della matrice costituita dai soli elementi della parte triangolare bassa di A (che chiamiamo L) e dai soli
elementi della parte triangolare alta di A (che denotiamo conU),
A =L +D+U
In questo modo facile ricavare i metodi iterativi di Jacobi, Gauss-Seidel e di rilassamento, che sono i metodi
iterativi classici per la soluzione di sistemi lineari.
Lipotesi da fare che A abbia elementi diagonali diversi da zero (a
i i
6= 0 per i = 1, 2, . . . , n, n, da cui la
matrice diagonale D invertibile).
Se la matrice A simmetrica, denita positiva, necessariamente a
i i
6=0. Altrimenti, poich A non singo-
lare (se cos non fosse non potremmo risolvere il sistema), le equazioni del sistema possono essere riordinate
in modo da avere la matrice risultante con elementi diagonali diversi da zero.
Il metodo di Jacobi
Il metodo di Jacobi
3
(o degli spostamenti simultanei - o rilassamento simultaneo) si ha ponendo M = D
da 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
1
b
x
(k+1)
=D
1
(L +U)x
(k)
+D
1
b
Per ricavare questo schema, si pu partire dal sistema lineare Ax =be 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 linversa della matrice D
x =D
1
(L +U)x+D
1
b
si innesca il metodo iterativo considerando il vettore x a primo membro dellequazione
alliterazione k +1 e quello a destra alliterazione k
x
(k+1)
=D
1
(L +U)x
(k)
+D
1
b
3
Carl Gustav Jacob Jacobi (1804-1851) fu un grande matematico tedesco. Tra i suoi numerosi studi ricordiamo quelli sulle funzioni
ellittiche, sulla teoria dei numeri e sulla meccanica celeste.
113
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 i
1
a
i i

_
_
_
_
b
i

((L+U)x
(k)
)
i
n

j =1, j 6=i
a
i j
x
(k)
j

_
_
_
_
o, equivalentemente,
x
(k+1)
i
=
(D
1
)
i i
1
a
i i

_
_
_
_
b
i

(Lx
(k)
)
i
i 1

j =1
a
i j
x
(k)
j

(Ux
(k)
)
i
n

j =i +1
a
i j
x
(k)
j

_
_
_
_
per i =1, . . . , n
La formula la si pu ricavare direttamente, scrivendo, equazione per equazione, il sistema da risolvere
Ax =b:
a
11
x
1
+a
12
x
2
+a
13
x
3
+. . . +a
1n
x
n
=b
1
a
21
x
1
+a
22
x
2
+a
23
x
3
+. . . +a
2n
x
n
=b
2
.
.
. =
.
.
.
a
i 1
x
1
+a
i 2
x
2
+a
i 3
x
3
+. . . +a
i n
x
n
=b
i
.
.
. =
.
.
.
a
n1
x
1
+a
n2
x
2
+a
n3
x
3
+. . . +a
nn
x
n
=b
n
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:
a
11
x
1
=b
1
(a
12
x
2
+a
13
x
3
+. . . +a
1n
x
n
)
a
22
x
2
=b
2
(a
21
x
1
+a
23
x
3
+. . . +a
2n
x
n
)
.
.
. =
.
.
.
a
i i
x
i
=b
i
(a
i 1
x
1
+a
i 2
x
2
+. . . +a
i i 1
x
i 1
+a
i i +1
x
i +1
+. . . +a
i n
x
n
)
.
.
. =
.
.
.
a
nn
x
n
=b
n
(a
n1
x
1
+a
n2
x
2
+a
n3
x
3
+. . . +a
nn1
x
n1
)
Dividendo li -sima equazione per il coefciente a
i i
, per i =1, 2, . . . , n, ricaviamo
x
1
=
1
a
11
[b
1
(a
12
x
2
+a
13
x
3
+. . . +a
1n
x
n
)]
x
2
=
1
a
22
[b
2
(a
21
x
1
+a
23
x
3
+. . . +a
2n
x
n
)]
.
.
. =
.
.
.
x
i
=
1
a
i i
[b
i
(a
i 1
x
1
+a
i 2
x
2
+. . . +a
i i 1
x
i 1
+a
i i +1
x
i +1
+. . . +a
i n
x
n
)]
.
.
. =
.
.
.
x
n
=
1
a
nn
[b
n
(a
n1
x
1
+a
n2
x
2
+a
n3
x
3
+. . . +a
nn1
x
n1
)]
114
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, la
formula ricorsiva dello schema di Jacobi:
x
(k+1)
1
=
1
a
11
_
b
1

a
12
x
(k)
2
+a
13
x
(k)
3
+. . . +a
1n
x
(k)
n
__
x
(k+1)
2
=
1
a
22
_
b
2

a
21
x
(k)
1
+a
23
x
(k)
3
+. . . +a
2n
x
(k)
n
__
.
.
. =
.
.
.
x
(k+1)
i
=
1
a
i i
_
b
i

a
i 1
x
(k)
1
+a
i 2
x
(k)
2
+. . . +a
i i 1
x
(k)
i 1
+a
i i +1
x
(k)
i +1
+. . . +a
i n
x
(k)
n
__
.
.
. =
.
.
.
x
(k+1)
n
=
1
a
nn
_
b
n

a
n1
x
(k)
1
+a
n2
x
(k)
2
+a
n3
x
(k)
3
+. . . +a
nn1
x
(k)
n1
__
Ritroviamo, dunque, la formula scritta prima in forma compatta.
La formula in funzione del residuo r
(k)
=bAx
(k)
data invece da x
(k+1)
=x
(k)
+D
1
r
(k)
.
Il Metodo di Gauss-Seidel
Nellalgoritmo di Gauss-Seidel
4
si pone M = D +L ottenendo la matrice E
S
= I (D +L)
1
A = I (D +
L)
1
(L +D+U) =(D+L)
1
U. Lo schema iterativo :
x
(k+1)
=E
S
x
(k)
+(D+L)
1
b
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 membroUx
(D+L)x =Ux+b
si moltiplicano ambo i membri per linversa della matrice (D+L)
x =(D+L)
1
Ux+(D+L)
1
b
si innesca il metodo iterativo considerando il vettore x a primo membro dellequazione
alliterazione k +1 e quello a destra alliterazione k
x
(k+1)
=(D+L)
1
Ux
(k)
+(D+L)
1
b
Moltiplicando ambo i membri per (D+L) si ha
(D+L)x
(k+1)
=bUx
(k)
Dx
(k+1)
=bLx
(k+1)
Ux
(k)
da cui
x
(k+1)
=D
1

bLx
(k+1)
Ux
(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
8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI
x
(k+1)
i
=
1
a
i i
_
b
i

i 1

j =1
a
i j
x
(k+1)
j

n

j =i +1
a
i j
x
(k)
j
_
per i =1, . . . , n
Il metodo detto anche degli spostamenti successivi, in quanto il calcolo delle componenti del vettore
x
(k+1)
fatto utilizzando le componenti gi calcolate del vettore stesso. Infatti, per i >1, ragionevole pensare
che 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:
a
11
x
(k+1)
1
=b
1

a
12
x
(k)
2
+a
13
x
(k)
3
+. . . +a
1n
x
(k)
n
_
a
22
x
(k+1)
2
=b
2

a
21
x
(k+1)
1
+a
23
x
(k)
3
+. . . +a
2n
x
(k)
n
_
.
.
. =
.
.
.
a
i i
x
(k+1)
i
=b
i

a
i 1
x
(k+1)
1
+a
i 2
x
(k+1)
2
+. . . +a
i i 1
x
(k+1)
i 1
+a
i i +1
x
(k)
i +1
+. . . +a
i n
x
(k)
n
_
.
.
. =
.
.
.
a
nn
x
(k+1)
n
=b
n

a
n1
x
(k+1)
1
+a
n2
x
(k+1)
2
+a
n3
x
(k+1)
3
+. . . +a
nn1
x
(k+1)
n1
_
Dividendo ambo i membri dellequazione i -sima per a
i i
(per i =1, 2, . . . , n) si ha:
x
(k+1)
1
=
1
a
11
_
b
1

a
12
x
(k)
2
+a
13
x
(k)
3
+. . . +a
1n
x
(k)
n
__
x
(k+1)
2
=
1
a
22
_
b
2

a
21
x
(k+1)
1
+a
23
x
(k)
3
+. . . +a
2n
x
(k)
n
__
.
.
. =
.
.
.
x
(k+1)
i
=
1
a
i i
_
b
i

a
i 1
x
(k+1)
1
+a
i 2
x
(k+1)
2
+. . . a
i i 1
x
(k+1)
i 1
+a
i i +1
x
(k)
i +1
+. . . +a
i n
x
(k)
n
__
.
.
. =
.
.
.
x
(k+1)
n
=
1
a
nn
_
b
n

a
n1
x
(k+1)
1
+a
n2
x
(k+1)
2
+a
n3
x
(k+1)
3
+. . . +a
nn1
x
(k+1)
n1
__
Usando il residuo, lo schema di Gauss-Seidel si scrive come
x
(k+1)
=x
(k)
+(D+L)
1
r
(k)
Il metodo di rilassamento
Ciascuno dei metodi di Jacobi e Gauss-Seidel pu essere anche rilassato tramite un fattore in modo che
la nuova approssimazione x
(k+1)
sia ottenuta come una combinazione di x
(k+1)
e x
(k)
mediante il fattore . In
pratica:
x
(k+1)
(1)x
(k)
+x
(k+1)
Questa operazione viene fatta direttamente nel momento in cui si stabilisce il metodo iterativo con
rilassamento.
Si pu osservare che il metodo di Jacobi rilassato non produce effettivi miglioramenti rispetto al metodo
nonrilassato. Invece, il metodo di Gauss-Seidel rilassato pu produrre unmetodo molto pi veloce intermini
116
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 nellintervallo
]0, 1[ si parla di metodo Sotto-Rilassato, o Under-Relaxation (e in genere usato per ottenere convergenza
nella soluzione di sistemi che non convergono con il metodo di Gauss-Seidel). Per valori di nellintervallo
[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
+

a
i i
_
b
i

i 1

j =1
a
i j
x
(k+1)
j

n

j =i +1
a
i j
x
(k)
j
_
per i =1, . . . , n
La matrice di iterazione del metodo di rilassamento si ricava scrivendo in forma matriciale lalgoritmo
appena descritto
x
(k+1)
=(1)x
(k)
+D
1

bLx
(k+1)
Ux
(k)
_
x
(k+1)
=
_
(1)I D
1
U
_
x
(k)
D
1
Lx
(k+1)
+D
1
b
(I +D
1
L)x
(k+1)
=
_
(1)I D
1
U
_
x
(k)
+D
1
b
Moltiplicando ambo i membri per D, si ricava
(D+L)x
(k+1)
=[(1)DU] x
(k)
+b
La matrice di iterazione del metodo dunque
E =(D+L)
1
[(1)DU]
=(D+L)
1
[(1)D(ADL)]
=(D+L)
1
[(D+L) A]
=
_
I (D+L)
1
A
_
A questo punto, ci si pu chiedere quale sia lottimale nel metodo di rilassamento. Lottimale quello
che fa s che il metodo di rilassamento converga nel minor numero di iterazioni (quindi, l ottimale rende
minimo il raggio spettrale della matrice di iterazione). Vedremo, per particolari matrici A, quando possibile
stabilire 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 matrice
Jacobi E
J
= I D
1
A =D
1
(L +U)
Gauss-Seidel E
S
= I (D+L)
1
A =(D+L)
1
U
rilassamento 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
8. METODI ITERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI
A a diagonalmente dominante (per righe o per colonne) ed irriducibile
5
.
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 denita positiva.
Per quanto riguarda il metodo di rilassamento, condizione necessaria per la convergenza |1| < 1, cio
deve appartenere allintervallo [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 vale
6
det E

= (1 )
n
e,
poich il prodotto degli autovalori di una matrice uguale al determinante della matrice stessa, segue
7
la
relazione (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 denita positiva e un numero reale nellintervallo ]0, 2[, allora il
metodo di rilassamento convergente.
La convergenza del metodo di rilassamento si ha, inoltre, per A simmetrica con elementi diagonali
positivi ed elementi extra-diagonali negativi o nulli, se e solo se A denita 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 , in
corrispondenza di matrici A che godono della cosidetta propriet A e che siano coerentemente ordinate.
Denizione 8.6.1 Una matrice A, di dimensione n, si dice che ha propriet A se esiste una matrice di
permutazione P tale che la matrice PAP
T
abbia la forma
PAP
T
=
_
D
1
A
1
A
2
D
2

dove D
1
e D
2
sono matrici diagonali.
Una matrice con propriet A si dice biciclica.
Equivalentemente, una matrice A, di dimensione n, ha propriet A se linsieme dei numeri naturali
{1, 2, . . . , n} pu essere scomposto in due sottoinsiemi non vuoti e complementari
8
S e T in modo tale che
5
cio non pu essere messa sotto la forma
_
P Q
; R

6
Dalla denizione di E

si ha det E

=det [(D+L)
1
((1)DU)]. Poich il determinante del prodotto di due matrici uguale
al prodotto dei determinanti delle matrici stesse, si ha det E

= det [(D+L)
1
] det [(1)DU)] = det D
1
(1 )
n
det D. Si arriva
a questo risultato, tenendo presente il fatto che il determinante di una matrice triangolare uguale al prodotto degli elementi della
diagonale principale.
7
Infatti, considerando
i
autovalore della matrice E

, per i = 1, 2, . . . , n e (E

) il raggio spettrale, si ha det E

=

n
i =1

n
i =1
(E

) =(E

)
n
da cui segue (1)
n
(E

)
n
, cio (E

) |1|.
8
Due 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 S, i 6 T e,
viceversa, se j T, j 6 S
118
8.6. Metodi classici
i coefcienti non nulli a
i j
6=0 si hanno per i = j oppure per i S e j T oppure per i T e j S.
Esempio 8.6.1 La matrice tridiagonale
A =
_
_
_
_
2 1 0 0
1 2 1 0
0 1 2 1
0 0 1 2
_
_
_
_
ha propriet A (o biciclica): permutando la prima e quarta riga e la prima e quarta colonna, mediante la
matrice di permutazione P =
_
_
_
_
0 0 0 1
0 1 0 0
0 0 1 0
1 0 0 0
_
_
_
_
si ha
PAP
T
=
_
_
_
_
2 0 1 0
0 2 1 1
1 1 2 0
0 1 0 2
_
_
_
_
=D
1
=D
2
=
_
2 0
0 2

Possiamo scegliere S ={1, 3} e T ={2, 4}.


Denizione 8.6.2 Una matrice si dice coerentemente ordinata in relazione ad un vettore di ordinamento q, di
lunghezza n, se per ogni coefciente a
i j
non nullo, con i 6= j , si verica:
se j >i allora q
j
q
i
=1
se j <i allora q
j
q
i
=1
Unaltra denizione di matrice con coerente ordinamento considera la matrice A data non dalla scompo-
sizione A =L +D+U che abbiamo visto no ad ora ma come A =D(L
A
+I +U
A
), (osserviamo che, rispetto
alla prima scomposizione, abbiamo messo in evidenza la matrice diagonale D e quindi le matrici triango-
lari superiore e inferiore sono L
A
= D
1
L e U
A
= D
1
U). Sia D non singolare. Allora la matrice A detta
coerentemente ordinata se gli autovalori della matrice J() =L
A
+
1
U
A
, con 6=0 sono indipendenti dal
parametro .
Le matrici con propriet A (o bicicliche) nella forma A =
_
D
1
A
1
A
2
D
2

(P = I nella denizione 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 verica la relazione (+1)
2
=

2
autovalore di E

;
se autovalore non nullo di E

, allora ogni che verica 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
opt
che rende ottimale il metodo di rilassamento, tale cio che (
opt
) =min
0<<2
(E

). Risulta

opt
=
2
1+
_
1(E
J
)
2
e (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
, si trova, per = 1,
2
=
2
da cui (E
S
) = (E
J
)
2
. Come conseguenza, si ha che il metodo di
Gauss-Seidel ha velocit doppia rispetto al metodo di Jacobi.
119
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 =
_
_
8 2 6
7 5 0
1 0 5
_
_
b =
_
_
30
34
7
_
_
(a) Provare che gli schemi di Jacobi e di Seidel convergono e calcolare la velocit asintontica di
convergenza 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 si
ottengono 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 e
la terza colonna). Non possiamo usare il criterio di matrice diagonalmente dominante per provare la
convergenza dei due metodi. La matrice A biciclica e coerentemente ordinata (si veda lo schema a
croce che individua D
1
=(8) e D
2
=
_
5 0
0 5

):
8 2 6
7 5 0
1 0 5
Quindi se proviamo che lo schema di Jacobi converge, cio che lautovalore di massimo modulo della
matrice di Jacobi reale e in modulo minore di 1, allora, poich per matrici bicicliche e coerentemen-
te ordinate vale (E
J
)
2
= (E
S
), allora anche il metodo di Gauss-Seidel converger alla soluzione (da
(E
J
) <1 segue (E
S
) <1). La matrice di Jacobi E
J
= I D
1
A cio
E
J
=
_
_
0 2/8 6/8
7/5 0 0
1/5 0 0
_
_
=
_
_
0 1/4 3/4
7/5 0 0
1/5 0 0
_
_
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 ((E
S
) =(E
J
)
2
=0.5). Le velocit
di convergenza valgono
R
J
=log
10
((E
J
)) =0.1505149
R
S
=log
10
((E
S
)) =0.301029995 =log
10
((E
J
)
2
) =2R
J
120
8.7. Esercizi
(b)
Lo schema di Jacobi :
_

_
x
(k+1)
1
=
1
8
(302x
(k)
2
6x
(k)
3
)
x
(k+1)
2
=
1
5
(347x
(k)
1
)
x
(k+1)
3
=
1
5
(7x
(k)
1
)
Partendo dal vettore x
(0)
con com-
ponenti tutte nulle, abbiamo
k x
1
(k)
x
2
(k)
x
3
(k)
0 0 0 0
1 3.75 6.8 1.4
2 1.0 1.55 0.65
Lo schema di Seidel :
_

_
x
(k+1)
1
=
1
8
(302x
(k)
2
6x
(k)
3
)
x
(k+1)
2
=
1
5
(347x
(k+1)
1
)
x
(k+1)
3
=
1
5
(7x
(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 0
1 3.75 1.55 0.65
2 2.875 2.775 0.825
Esercizio 8.7.2 Dato il sistema Ax =b con
A =
_
_
5 0 10
0 3 15
2 1
_
_
(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) =
_
_
1/5 0 0
0 1/3 0
0 0 1/
_
_
_
_
0 0 10
0 0 15
2 1 0
_
_
=
_
_
0 0 2
0 0 5
2/ 1/ 0
_
_
Gli autovalori si calcolano imponendo det (E
J
I ) =0, vale a dire

0 2
0 5
2/ 1/

=0 vale a dire
3
+
9

=0
Ricaviamo gli autovalori =0 e =
3
p

.
Perch ci sia convergenza deve dunque essere
3
p

<1 ovvero 3 <


p
. Ricaviamo la relazione >9.
(b) Dalla relazione dell
opt
,
opt
=
2
1+
_
1(E
J
)
2
, valida perch la matrice biciclica e coerentemente
ordinata, si ha:
2
1+
p
19/
=
3
2
=
1
3
=
p
19/=
8
9
=
9

==
81
8
=10.125
Da
opt
=
3
2
=1.5 segue
opt
=
opt
1 =0.5, da cui R =log
10
(
opt
) =0.3010299957.
121
C
A
P
I
T
O
L
O
9
INTEGRAZIONE NUMERICA
Dio non si preoccupa delle nostre
difcolt matematiche. Lui integra
empiricamente.
Albert Einstein
9.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
9.2 Formula dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
9.3 Formule di Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
9.3.1 Formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.3.2 Sullerrore della formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . . . . . . . . 129
9.4 Formule composte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.4.1 Formula composta dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson . . . . . . . . . . . . . . . . . . 134
9.5 Estrapolazione di Richardson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
9.6 Approssimazione di Romberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9.7 Introduzione alle formule di quadratura di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
9.7.1 Propriet delle formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
9.7.2 Formule di Gauss-Legendre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
9.7.3 Altre formule di Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
9.7.4 Applicazione delle formule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
9.7.5 Sulla funzione peso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
9.8 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
9.1 Introduzione
Unautomobile effettua il giro di una pista in 84 secondi. La velocit dellauto viene misurata ogni 6 se-
condi usando unapparecchiatura radar per il controllo della velocit, ricavando i valori che si trovano in
Tabella 9.1.
In base ai dati in possesso, quanto lunga la pista?
Sapendo che la velocit v data da v(t ) =
ds
dt
(dove s rappresenta lo spostamento e t il tempo), per calco-
lare la lunghezza della pista (data dallo spostamento effettuato dallauto), dobbiamo integrare la velocit tra
123
9. INTEGRAZIONE NUMERICA
Tempo 0 6 12 18 24 30 36 42 48 54 60 66 72 78 84
Velocit 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 in
metri al secondo.
il tempo iniziale e quello nale.
_
84
0
v(t )dt =
_
s(84)
s(0)
ds
dt
dt =
_
s(84)
s(0)
ds
Essendo s(0) =0 e s(84) =L la lunghezza della pista, si ha
_
84
0
v(t )dt =
_
s(84)
s(0)
ds =L
Quindi, se riusciamo a risolvere lintegrale in cui la funzione integranda la velocit, per le uguaglianze
date, sapremo dire quanto vale L, essendo
_
84
0
v(t )dt =L
Sfruttando i dati della velocit misurati ogni 6 secondi, dobbiamo essere in grado di poter risolvere
numericamente questo integrale.
In questo Capitolo studieremo come fare. Ci occuperemo, infatti, di approssimare lintegrale denito
I =
_
b
a
f (x)dx
dove f una funzione denita nellintervallo [a, b] (e f pu essere nota oppure data su determinati punti
dellintervallo, come nellesempio appena visto).
Una formula di integrazione numerica (detta anche formula di quadratura numerica) approssima
lintegrale esatto I =
_
b
a
f (x)dx mediante

n
j =0
a
j
f (x
j
):
I =
_
b
a
f (x)dx
n

j =0
a
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 della
formula.
9.2 Formula dei trapezi
Consideriamo la retta che interpola la f negli estremi dellintervallo di integrazione. Per semplicit,
seguiamo lapproccio 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 dellintervallo di integrazione)
dato da
p(x) = f (a) +
f (b) f (a)
b a
(x a)
124
9.3. Formule di Newton-Cotes
Lerrore di interpolazione, utilizzando lespressione del resto di Lagrange dato da
E(x) =
f
00
(
x
)
2
(x a)(x b)
dove
x
un punto dellintervallo [a, b]. Per quanto abbiamo studiato sullinterpolazione, sappiamo che la
funzione f (x) si pu scrivere come somma del polinomio e dellerrore: 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 luguaglianza precedente, integrando ambo i membri,
otteniamo:
_
b
a
f (x)dx =
_
b
a
_
f (a) +
f (b) f (a)
b a
(x a)

dx +
_
b
a
(x a)(x b)
f
00
(
x
)
2
dx
ovvero
_
b
a
f (x)dx =(b a)
f (a) + f (b)
2
+
1
2
_
b
a
(x a)(x b) f
00
(
x
))dx
Poich il prodotto (xa)(xb) ha segno costante in [a, b], per il teorema del Valor Medio del calcolo integrale
(si veda il Teorema 2.5.6) si ha
1
2
_
b
a
(x a)(x b) f
00
(
x
))dx =
1
2
f
00
()
_
b
a
(x a)(x b)dx =
1
2
f
00
()
(b a)
3
3!
dove un punto interno allintervallo [a, b].
La quantit E
i nt
=
1
2
f
00
()
(b a)
3
3!
=
1
12
f
00
()(b a)
3
rappresenta lerrore che si commette approssi-
mando lintegrale di f in [a, b] mediante lintegrale della retta passante per f (a) e f (b), vale a dire, mediante
larea del trapezio sottesa dalla corda passante per f (a) e f (b).
Indicando con M =max
axb
| f
00
(x)| possiamo maggiorare lerrore con la relazione
|E
i nt
| M
(b a)
3
12
La formula dei trapezi approssima lintegrale di f in [a, b] come I
t r ap
dato da
I
t r ap
=
b a
2
[ 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 x
0
, x
1
, . . . , x
n
e costruiamo il polinomio interpolatore di
grado n utilizzando la formula di Lagrange.
Avremo p
n
(x) =

n
i =0
f (x
i
)L
i
(x), dove i polinomi di Lagrange sono dati dalla nota formula
L
i
(x) =
n

j =0
j 6=i
x x
j
x
i
x
j
125
9. INTEGRAZIONE NUMERICA
Figura 9.1: Formula dei trapezi: lintegrale della funzione f (zona tratteggiata in blu) viene approssimata
mediante larea 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
= x
0
+ j h, con j = 0, 1, . . . , n e per un generico
punto x compreso tra x
0
e x
n
vale x =x
0
+sh con 0 s n, s numero reale.
Quindi x x
j
= x
0
+sh (x
0
+ j h) = (s j )h e x
i
x
j
= (i j )h, da cui il polinomio di Lagrange si pu
scrivere come
L
i
(x) =
n

j =0
j 6=i
s j
i j
=L
i
(s)
Da f (x) = p
n
(x) + E(x) dove E(x) lerrore della formula di interpolazione, passando allintegrale,
abbiamo
_
b
a
f (x)dx =
_
b
a
p
n
(x)dx +
_
b
a
E(x)dx
Il primo integrale a secondo membro rappresenta la formula che approssima lintegrale della f mentre il
secondo integrale rappresenta lerrore della formula di quadratura.
La formula di quadratura quindi data dal valore dellintegrale di p
n
:
I =
_
b
a
f (x)dx
_
b
a
n

i =0
f (x
i
)L
i
(x)dx =
n

i =0
f (x
i
)
_
b
a
L
i
(x)dx
La formula di quadratura ha dunque come nodi i punti x
i
e come pesi gli integrali
_
b
a
L
i
(x)dx.
Sia x
0
=a e x
n
=b, tenendo presente che L
i
(x) =L
i
(s) con x =x
0
+sh, da cui dx =hds abbiamo
_
b
a
L
i
(x)dx =
_
x
n
x
0
L
i
(x)dx =
_
n
0
L
i
(s)hds =h
_
n
0
L
i
(s)ds
Allora
I =
_
b
a
f (x)dx h
n

i =0
f (x
i
)
_
n
0
L
i
(s)ds
126
9.3. Formule di Newton-Cotes
Deniamo coefcienti di Newton-Cotes
1
le espressioni
C
(n)
i
=
1
n
_
n
0
L
i
(s)ds i =0, 1, . . . , n
La formula precedente si scrive, quindi, come
I =
_
b
a
f (x)dx nh
n

i =0
f (x
i
)C
(n)
i
=(x
n
x
0
)
n

i =0
f (x
i
)C
(n)
i
(9.1)
Lerrore della formula di quadratura dato da
E
i nt
=
_
b
a
E(x)dx =
_
b
a
f
(n+1)
(
x
)
(n +1)!
(x x
0
)(x x
1
) (x x
n
)dx
Dato unpolinomio di interpolazione di grado n mediante il procedimento di Lagrange dunque possibile
ricavare una formula di quadratura numerica che prende il nome di formula di Newton-Cotes. Per quanto
riguarda lerrore si pu osservare che le formule ottenute con un valore n dispari (cui corrisponde un numero
n +1 pari di punti di appoggio) solo leggermente inferiore alle formule di ordine pari che le precedono
immediatamente (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, lerrore di integrazione sar zero. Nellintervallo [a, b] [0, 1], applicando lequazione (9.1) si ha
1 =
_
1
0
dx =
n

i =0
C
(n)
i
Troviamo che la somma dei coefcienti di Newton-Cotes vale 1.
Per n = 1 (si hanno quindi due punti di appoggio, x
0
e x
1
) i coefcienti di Cotes sono quelli gi ricavati
della formula dei trapezi Formula dei
trapezi
C
(1)
0
=
1
1
_
1
0
L
0
(s)ds =
_
1
0
(s 1)
1
ds =
1
2
C
(1)
1
=
1
1
_
1
0
L
1
(s)ds =
_
1
0
s
1
ds =
1
2
e la formula di integrazione diventa
I =
_
b
a
f (x)dx h
1

i =0
f (x
i
)C
(1)
i
=(x
1
x
0
)
f (x
0
) + f (x
1
)
2
9.3.1 Formula di Cavalieri-Simpson
Considerando n = 2 (quindi 3 punti di appoggio nellintervallo [a, b], x
0
= a, x
1
=
a +b
2
e x
2
= b, i due
estremi dellintervallo e il punto centrale) la formula di quadratura prende il nome di formula di Cavalieri-
Simpson
2
1
Roger Cotes (1682-1716) fu un matematico inglese che lavor molto con Isaac Newton, in particolare per la correzione del suo
famoso libro Principia. Egli invent le formule di quadratura che prendono il suo nome e per primo introdussse quella che oggi
conosciamo come formula di Eulero, per cui e
x
=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 ottica
e 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 deniti,
sebbene questa formula fosse stata gi scoperta 200 anni prima da Keplero e pare fosse usata anche da Cavalieri nel 1639 e poi riscoperta
da James Gregory. I suoi studi riguardano anche lastrologia.
127
9. INTEGRAZIONE NUMERICA
Figura 9.2: Formula di Cavalieri-Simpson: lintegrale della funzione f (zona tratteggiata in blu) viene
approssimata mediante larea della regione sottesa alla parabola passante per f (a), f (c) e f (b) (zona verde).
C
(2)
0
=
1
2
_
2
0
L
0
(s)ds =
1
2
_
2
0
(s 1)(s 2)
(1)(2)
ds =
1
6
C
(2)
1
=
1
2
_
2
0
L
1
(s)ds =
1
2
_
2
0
(s)(s 2)
(1)(1)
ds =
4
6
C
(2)
2
=
1
2
_
2
0
L
2
(s)ds =
1
2
_
2
0
(s)(s 1)
(2)(1)
ds =
1
6
La formula di Cavalieri-Simpson approssima lintegrale della f considerando come nodi x
0
=
a, x
1
=c =
a +b
2
e x
2
=b e come pesi i coefcienti di Cotes C
(2)
0
=
1
6
, C
(2)
1
=
4
6
, C
(2)
2
=
1
6
, ottenendo:
I =
_
b
a
f (x)dx (x
2
x
0
)
2

i =0
f (x
i
)C
(2)
i
=(b a)(
f (a)
6
+
4f (c)
6
+
f (b)
6
)
=
b a
6
( f (a) +4f (c) + f (b))
Con la formula di Cavalieri-Simpson, dunque, lintegrale della f viene approssimato con lintegrale della
parabola passante per i due estremi a e b e per il punto centrale dellintervallo.
Per quanto riguarda lerrore che si commette approssimando lintegrale della f con la formula di
Cavalieri-Simpson, consideriamo, seguendo lapproccio visto per la formula dei trapezi, lintegrale dellerrore
del polinomio di interpolazione di Lagrange.
Per il polinomio di secondo grado p
2
che interpola la f , lerrore dato da E(x) =
f
000
(
x
)
3!
(xa)(xc)(xb).
128
9.3. Formule di Newton-Cotes
Quando facciamo lintegrale, lerrore nellapprossimare lintegrale esatto con la formula di Cavalieri-
Simpson dunque dato da
E
i nt
=
_
b
a
f
000
(
x
)
3!
(x a)(x c)(x b)dx
Questa volta, la funzione (x a)(x c)(x b) cambia segno allinterno dellintervallo [a, b] e non possiamo
pi applicare il teorema del Valor Medio come nella formula dei trapezi. In maniera pi laboriosa, tuttavia, si
ricava per lerrore la seguente formula:
E
i nt
=
f
I V
(u)
90
_
b a
2

5
=
f
I V
(u)
2880
(b a)
5
dove u un opportuno punto dellintervallo ]a, b[.
Osservando i valori dei coefcienti di Newton-Cotes per n =1 e per n =2 si pu vedere come i coefcienti
siano simmetrici e la loro somma vale 1. Questo risultato si pu generalizzare per ogni n.
9.3.2 Sullerrore della formula di Cavalieri-Simpson
Per capire lerrore che si ha nella formula di Cavalieri-Simpson, deduciamo la stessa formula seguendo
unaltra strada.
Per semplicare il discorso, scegliamo lintervallo [a, b] simmetrico rispetto allorigine, quindi del tipo
[t , t ] con t R, sapendo che, se non fosse cos, basta applicare una traslazione dellasse x per ricondursi a
questo caso. Scriviamo il polinomio di interpolazione che passa per i punti t , 0 e t e che interpola anche la
derivata 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 )
t
t
=
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 )x
2
Lerrore di interpolazione per questo polinomio di grado 3 vale
E(x) =
f
(I V )
(
x
)
4!
(x +t )x
2
(x t )
Quindi da f (x) =p(x) +E(x), andando a integrare tra t e t si ha:
_
t
t
f (x)dx =
_
t
t
p(x)dx +
_
t
t
E(x)dx
Nellintegrazione del polinomio p(x) facile vedere che i termini che dipendono da f
0
(0) portano un
contributo nullo. Infatti
_
t
t
_
f
0
(0)
t
(x +t )x
f
0
(0)
t
2
(x +t )x
2

dx =
_
t
t
f
0
(0)
t
_
x
2
+t x
x
3
t
x
2

dx
=
f
0
(0)
t

t
x
2
2

x
4
4t

t
t
=0
129
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
_
t
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 )x
2

dx =
=
2t
6
( f (t ) +4f (0) + f (t ))
Allora lerrore della formula di Cavalieri-Simpson coincide con lintegrale di E(x).
Quindi E
i nt
=
_
t
t
f
(I V )
(
x
)
4!
(x +t )x
2
(x t )dx
La funzione (x +t )x
2
(x t ) =(x
2
t
2
)x
2
non cambia mai segno allinterno dellintervallo [t , t ], quindi si
pu applicare il teorema del Valore Medio del calcolo integrale, per cui
E
i nt
=
f
(I V )
()
24
_
t
t
(x
2
t
2
)x
2
dx =
f
(I V )
()
24

x
5
5
t
2
x
3
3

t
t
=
f
(I V )
()
90
t
5
Considerando che lampiezza dellintervallo h =2t si ha
E
i nt
=
f
(I V )
()
90
(
h
2
)
5
=
f
(I V )
()
2880
h
5
Troviamo la formula dellerrore 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 di
appoggio). Ci sono vari motivi che sconsigliano questa procedura:
i valori dei coefcienti in formule di grado elevato sono difcili 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 grado
elevato.
Conviene dunque utilizzare formule di grado basso ma scomponendo lintervallo di integrazione in pi
sottointervalli e, in ciascuno di essi, applicare la stessa formula.
Sfruttiamo il fatto che se lintervallo [a, b] viene diviso in n sottointervalli in modo che [a, b] = [a, x
1
]
[x
1
, x
2
] [x
2
, x
3
] . . . [x
n1
, b], allora
_
b
a
f (x)dx =
_
x
1
a
f (x)dx +
_
x
2
x
1
f (x)dx +
_
x
3
x
2
f (x)dx +. . . +
_
b
x
n1
f (x)dx
Su ciascuno intervallo [x
i 1
, x
i
] per i =1, 2, . . . , n, approssimiamo lintegrale della f mediante una formula
di quadratura pi semplice, utilizzando pochi punti.
9.4.1 Formula composta dei trapezi
Suddividiamo lintervallo [a, b] in n sottointervalli deniti dai punti dappoggio x
0
, x
1
, . . . , x
n
(per sem-
plicit supponiamo i punti equidistanti con passo h =
b a
n
, in modo che x
0
= a e x
n
= b, x
i
= x
0
+i h,
i =0, . . . , n).
Lintegrale su [a, b] si pu dunque ottenere come somma degli integrali su tali sottointervalli:
_
b
a
f (x)dx =
n

i =1
_
x
i
x
i 1
f (x)dx
130
9.4. Formule composte
Figura 9.3: Formula composta dei trapezi, utilizzando 3 sottointervalli (4 punti).
Ciascuno degli integrali su [x
i 1
, x
i
] viene approssimato utilizzando la formula dei trapezi:
n

i =1
_
x
i
x
i 1
f (x)dx
n

i =1
x
i
x
i 1
2
[ f (x
i 1
) + f (x
i
)] =
n

i =1
h
2
[ f (x
i 1
) + f (x
i
)]
In forma estesa abbiamo
I
h
2
[ f (x
0
) +2f (x
1
) +2f (x
2
) +. . . +2f (x
n1
) + f (x
n
)]
=h[
f (a) + f (b)
2
+ f (x
1
) + f (x
2
) +. . . f (x
n1
)]
Lerrore che si commette dato dalla somma degli errori commessi sui singoli sottointervalli
E
i nt
=
n

i =1
f
00
(
i
)
h
3
12
Supponendo che la derivata seconda della f sia continua e limitata in [a, b] e chiamando con m e M
rispettivamente 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
n

i =1
f
00
(
i
) nM = m

n
i =1
f
00
(
i
)
n
M
Per il teorema del Valor Intermedio (teorema 2.5.3),

n
i =1
f
00
(
i
)
n
un valore assunto dalla funzione in
qualche punto u di [a, b].
Applicando la relazione h =
b a
n
, lerrore diventa
E
i nt
=
n

i =1
f
00
(
i
)
h
3
12
=nf
00
()
h
3
12
=
f
00
()
12
(b a)h
2
=
f
00
()
12
(b a)
3
n
2
131
9. INTEGRAZIONE NUMERICA
Quindi per n lerrore tende a zero come h
2
o, equivalentemente, come
1
n
2
.
Formula composta di Cavalieri-Simpson
Suddividiamo lintervallo [a, b] in n sottointervalli di ampiezza costante uguale a h e su ciascuno di questi
sottointervalli applichiamo la formula di Cavalieri-Simpson. Abbiamo, in questo modo, la formula composta
di Cavalieri-Simpson.
Su ogni intervallino, quindi, dobbiamo considerare gli estremi dellintervallino e il punto centrale di esso.
Siano a
i
e b
i
gli estremi di ciascuna suddivisione e sia c
i
=
a
i
+b
i
2
il punto medio di ciascuna suddivisione
(quindi per i =1, . . . , n). Lestremo superiore b
i
di ciascun intervallino, con i =1, n 1 coincide con lestremo
inferiore dellintervallino successivo: b
i
= a
i +1
. In tal modo, seguendo lo stesso ragionamento fatto per i
trapezi si ha:
_
b
a
f (x)dx =
_
b
1
a
1
f (x)dx +
_
b
2
a
2
f (x)dx +. . . +
_
b
n
a
n
f (x)dx
Applicando la formula di Cavalieri-Simpson su ciascun intervallino risulta:
_
b
i
a
i
f (x)dx
b
i
a
i
6
_
f (a
i
) +4f (c
i
) + f (b
i
)
_
=
h
6
_
f (a
i
) +4f (c
i
) + f (b
i
)
_
In tal modo
_
b
a
f (x)dx
n

i =1
h
6
_
f (a
i
) +4f (c
i
) + f (b
i
)
_
Si ha la formula composta di Cavalieri-Simpson.
Figura 9.4: Formula composta di Cavalieri-Simpson, utilizzando 3 sottointervalli (7 punti).
132
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, facciamo
una numerazione progressiva dei punti di integrazione nel modo seguente:
x
0
=a
x
2i
=x
0
+i h i =0, . . . n nodi estremi dei sottointervalli
x
2i +1
=x
0
+(i +
1
2
)h i =0, . . . , n 1 nodi centrali dei sottointervalli
Quindi i nodi pari corrispondono agli estremi dei sottointervalli, mentre i nodi dispari sono
i punti centrali di ogni sottointervallo. Per la formula di quadratura otteniamo
I =
_
b
a
f (x)dx =
n1

i =0
_
x
2i +2
x
2i
f (x)dx

n1

i =0
h
6
[ f (x
2i
) +4f (x
2i +1
) + f (x
2i +2
)]
=
h
6
[ f (x
0
) +4f (x
1
) +2f (x
2
) +4f (x
3
) +. . . +2f (x
2n2
) +4f (x
2n1
) + f (x
2n
)]
=
h
6
[ f (x
0
) +4
n1

i =0
f (x
2i +1
) +2
n1

i =0
f (x
2i
) + f (x
2n
)]
Per quanto riguarda lerrore, facendo la somma degli errori di integrazione sugli n sottointervalli,
nellipotesi che la derivata quarta sia continua e limitata, si ha
3
:
E
i nt
=
1
90
_
h
2

5
( f
I V
(
1
) + f
I V
(
2
) +. . . + f
I V
(
n
))
=
h
5
2880
n1

i =0
f
I V
(
i
) =
(b a)
5
2880n
5
n1

i =0
f
I V
(
i
)
Si considera quindi il punto tale che
4
f
I V
() =
1
n
n

i =1
f
I V
(
i
)
E
i nt
=
(b a)
5
2880n
4
f
I V
() =
(b a)h
4
2880
f
I V
()
Quindi per n lerrore tende a zero come
1
n
4
o, equivalentemente, come h
4
. Nella formula dei trape-
zi lerrore invece decresce come
1
n
2
. 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 dei
trapezi.
3
Ricordiamo che h =
b a
n
.
4
Si 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
9. INTEGRAZIONE NUMERICA
9.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson
Esempio 9.4.1 Consideriamo f (x) =e
x
. Sia a =0 e b =1.
Allora, per lintegrale esatto e per le formule dei trapezi e di Cavalieri-Simpson, si ha, rispettivamente:
I =
_
1
0
e
x
dx =
_
e
x
_
1
0
=e 1 =1.718281828
I
t r ap
=
1
2
(1+e) =1.859140914
I
CS
=
1
6
(1+4e
1/2
+e) =
1
6
(1+6.594885083+2.718281828) =1.718861152
La formula di Cavalieri-Simpson d il risultato migliore.
Sia ancora f (x) =e
x
ma gli estremi di integrazione siano a =0.9 e b =1. Allora
I =
_
1
0.9
e
x
dx =e e
0.9
=0.2586787173
I I
t r ap
= I
0.1
2
(e
0.9
+e) =2.210
4
I I
CS
= I
0.1
6
(e
0.9
+4e
0.95
+e) =9.010
9
Ora la formula di Cavalieri-Simpson si rivela particolarmente accurata. Ci non deve sorprendere se si va
a vedere la formula dellerrore, con lampiezza dellintervallo che da 1 si ridotta a 0.1, per cui (b a)
5
da 1
vale ora 10
5
.
Considerato che f
00
= f e f
I V
= f , queste derivate possono essere maggiorate dal valore assunto nellestremo
superiore dellintervallo, cio e. Quindi gli errori delle formule dei trapezi e di Cavalieri-Simpson sono
maggiorate da
|E
t r ap
|
e
12
(b a)
3
=2.26510
1
(b a)
3
|E
CS
|
e
2880
(b a)
5
=9.43810
4
(b a)
5
Perci per a =0 e b =1 gli errori sono maggiorati da
|E
t r ap
| =2.26510
1
|E
CS
| =9.43810
4
Invece per a =0.9 e b =1, poich b a =0.1 =10
1
, abbiamo
|E
t r ap
| =2.26510
1
10
3
=2.26510
4
|E
CS
| =9.43810
4
10
5
=9.43810
9
Esempio 9.4.2 Si voglia approssimare lintegrale
a
_
1
0
e
x
2
dx 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 denizione di integrale
_
b
a
f (x)dx =
lim
n

n
i =0
f (a +i h(n)) h(n), con h(n) = (b a)/n, e considerare come approssimazione dellintegrale la somma parziale

n
i =0
f (a +i h(n)) h(n) con un valore di n molto grande. Per esempio, con n =10
7
otteniamo il valore 0.74682420125254.
134
9.4. Formule composte
Suddividiamo lintervallo [0, 1] in 4 sottointervalli. Sia h =1/4 =0.25. Per la formula composta dei trapezi
abbiamo
I
t r ap
=
h
2
[e
0
+2e
h
2
+2e
(2h)
2
+2e
(3h)
2
+e
(4h)
2
]
=0.125[1+2e
0.125
2
+2e
0.5
2
+2e
0.75
2
+e
1
]
=0.742984
Applichiamo ora la formula di Cavalieri-Simpson su soli 2 sottointervalli, in modo da valutare la funzione
negli stessi punti precedenti. Lampiezza di ciascun sottointervallo dunque h =0.5.
I
CS
=
h
6
[e
0
+4e
(h/2)
2
+2e
(h)
2
+4e
(
3
2
h)
2
+e
(2h)
2
]
=
0.25
3
[1+4e
0.125
2
+2e
0.5
2
+4e
0.75
2
+e
1
]
=0.746855
A parit di punti (e non di sottointervalli) la formula di Cavalieri-Simpson pi accurata di quella dei
trapezi.
Invece considerando 4 sottointervalli nella formula di Cavalieri-Simpson dobbiamo considerare anche i
punti interni di ascisse 0.125, 0.375, 0.625, 0.875 e il risultato che otteniamo 0.746826, evidentemente
maggiormente accurato.
Esempio 9.4.3 Riprendiamo lesempio visto allinizio del Capitolo, in cui misurata la velocit di
unautomobile 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 ampiezza
h =6 secondi. Abbiamo (ponendo v
1
=v(0), v
2
=v(6), . . . , v
13
=v(78), v
14
=v(84)):
L =6

v
1
+v
14
2
+v
2
+v
3
+. . . +v
13
_
=3009 metri
Possiamo anche applicare la formula di Cavalieri-Simpson, considerando ora 7 intervalli di ampiezza pari
a h =12 secondi. In tal caso, otteniamo:
L =2(v
1
+4v
2
+2v
3
+4v
4
+2v
5
+. . . +2v
12
+4v
13
+v
14
) =3010 metri
In 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-
lerrore pu essere utile per determinare il numero di sottointervalli su cui applicare una formula composta
di quadratura in modo da ottenere unapprossimazione con un errore minore di una tolleranza pressata.
Esempio 9.4.4 Consideriamo
_
1
0
e
x
2
dx. In quanti sottointervalli bisogna suddividere lintervallo di inte-
grazione per applicare la formula dei trapezi e di Cavalieri-Simpson e ottenere un errore che sia minore di
una tolleranza =10
5
?
Per i trapezi, lerrore maggiorato da
|E
t r ap
|
max
0x1
| f
00
(x)|
12
(b a)
3
n
2
Per Cavalieri-Simpson si ha
|E
CS
|
max
0x1
| f
I V
(x)|
2880
(b a)
5
n
4
135
9. INTEGRAZIONE NUMERICA
Da f (x) =e
x
2
abbiamo, per le derivate:
f
0
(x) =2xe
x
2
f
00
(x) =(2+4x
2
)e
x
2
f
000
(x) =(12x 8x
3
)e
x
2
f
I V
(x) =(1248x
2
+16x
4
)e
x
2
Si trova che il massimo di | f
00
| e | f
I V
| in [0, 1] dato dal loro valore in x =0, quindi abbiamo:
|E
t r ap
|
2
12n
2
=
1
6n
2
|E
CS
|
12
2880n
4
=
1
240n
4
La richiesta dellaccuratezza per lerrore diventa:
|E
t r ap
| 10
5
|E
CS
| 10
5
vale a dire, rispettivamente,
1
6n
2
10
5
1
240n
4
10
5
Per i trapezi, il primo intero n che verica 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 i
risultati:
I
t r ap
=0.74682050480289 I
CS
=0.7468249482544
9.5 Estrapolazione di Richardson
Applichiamo la formula di Cavalieri-Simpson sullintero intervallo [a, b]. Lerrore che si commette, come
sappiamo, vale
E
1
=
f
I V
(
1
)
90
_
b a
2

5
=
f
I V
(
1
)
2880
(b a)
5
Suddividiamo ora lintervallo [a, b] in due sottointervalli e applichiamo la formula composta di Cavalieri-
Simpson. Lerrore che otteniamo vale
E
2
=
f
I V
(
2
)
2880
(b a)
5
2
4
e, supponendo che le derivate quarte della f non siano molto diverse tra loro, si ha E
2

E
1
16
.
Lerrore, quindi, diventa 16 volte pi piccolo passando dalla formula di Cavalieri-Simpson in un intervallo
alla formula applicata in due sottointervalli.
Sia I il valore esatto dellintegrale e Q
1
e Q
2
i due valori approssimati ottenuti considerando la formula
di Cavalieri-Simpson con n = 1 e n = 2 sottointervalli. Sia lerrore, cambiato di segno, che si ha con n = 2,
=E
2
E
1
/16. Possiamo scrivere
I + =Q
2
per n =2
I +16 =Q
1
per n =1
136
9.6. Approssimazione di Romberg
Si pu ricavare dalle due relazioni ottenendo
=
Q
1
Q
2
15
Quindi
I Q
2
+
Q
2
Q
1
15
Utilizzando le due approssimazioni Q
1
e Q
2
possiamo approssimare lintegrale esatto con una maggiore ac-
curatezza mediante la formula appena scritta. Questo procedimento prende il nome di estrapolazione di
Richardson. Pu essere utilizzato per migliorare lapprossimazione di un integrale ma basato sullipotesi
che le derivate quarte della funzione integranda siano circa uguali e, quindi, va usato con cautela.
9.6 Approssimazione di Romberg
Ripetendo lo stesso discorso dellestrapolazione di Richardson a partire dalla formula dei trapezi e in
maniera sistematica, si ha lapprossimazione di Romberg.
Supponiamo luguaglianza delle derivate seconde della funzione integranda f e sia 2
m
il numero di
sottointervalli in cui suddividiamo il dominio di integrazione [a, b].
Applicando la formula dei trapezi su2
m1
sottointervalli e, successivamente, su2
m
sottointervalli, lerrore
diminuisce come 1/4. Chiamando con A
m
e A
m1
i risultati della formula dei trapezi rispettivamente su 2
m
e su 2
m1
sottointervalli e chiamando con lerrore cambiato di segno commesso con 2
m
sottointervalli,
abbiamo:
I + = A
m
I +4 = A
m1
Lintegrale pu essere dunque migliorato con il valore
B
m
= A
m
+
A
m
A
m1
3
.
Per m=1 si ha:
A
0
=
b a
2
[ f (a) + f (b)] la formula dei trapezi applicata su un unico intervallo
A
1
=
b a
2
[
f (a)
2
+ f (
a +b
2
) +
f (b)
2
] la formula dei trapezi su 2 sottointervalli
B
1
=(b a)[
f (a)
6
+
4f (
a +b
2
)
6
) +
f (b)
6
] troviamo la formula di Cavalieri-Simpson!
Si ha dunque che B
1
(e quindi ciascun B
m
) corrisponde al valore ottenuto con la formula di Cavalieri-
Simpson. Lerrore ottenuto con B
m
dunque proporzionale a 1/n
4
. Nel passo successivo, utilizzando i valori
B
m
, otteniamo la nuova approssimazione data da
C
m
=B
m
+
B
m
B
m1
15
per m2
Si pu dimostrare che C
m
coincide con la formula di Newton-Cotes con n =4, dove lerrore proporzionale
a 1/n
6
e alla derivata sesta di f.
La nuova approssimazione data da:
D
m
=C
m
+
C
m
C
m1
63
per m3
137
9. INTEGRAZIONE NUMERICA
Lerrore ora diventa proporzionale a 1/n
8
ma D
m
non pi un risultato delle formule di Newton-Cotes. Il
procedimento pu andare avanti per calcolare E
m
, F
m
, etc tenendo presente che al denominatore dobbiamo
mettere il valore 4(d +1) 1 dove d il valore del denominatore della formula precedente.
Il vantaggio dellapprossimazione di Romberg si vede solo ai primi livelli dellapplicazione (in particolare
passando da A
m
a B
m
). Inoltre, a causa della precisione nita con cui sono eseguiti i calcoli, le formule di
Romberg di ordine elevato diventano inefcaci se il risultato iniziale A
m
gi abbastanza accurato rispetto
alla precisione numerica consentita.
9.7 Introduzione alle formule di quadratura di Gauss
Consideriamo di voler approssimare lintegrale dato da
_
b
a
f (x)w(x) dx
dove [a, b] pu essere nito o innito (per esempio [1, 1], [0, +]). 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, sia
positiva (w(x) 0).
Vogliamo trovare dei coefcienti w
i
, i = 0, . . . n (detti pesi della formula di quadratura) e dei nodi x
i
, i =
0, . . . n (detti nodi di quadratura) nellintervallo [a, b] in modo da approssimare lintegrale mediante
_
b
a
f (x)w(x) dx
n

0=1
w
i
f (x
i
)
Considerando anche lerrore di quadratura:
_
b
a
f (x)w(x) dx =
n

i =0
w
i
f (x
i
) +E
i nt
( f )
Diremo che la formula di quadratura ha un grado di precisione (o esattezza) polinomiale d se E
i nt
( f ) =0
per tutti i polinomi f no al grado d (cio se applichiamo la formula di quadratura per approssimare
_
b
a
f (x)w(x) dx con f polinomio di grado d, lerrore nullo). Osserviamo che ora non stiamo parlando di
formule di quadratura composte quindi n non si riferisce a suddivisioni dellintervallo [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 w
i
=
_
b
a
L
i
(x)w(x) dx
dove L
i
(x) li -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 del
polinomio interpolante? E se s come?
A tal ne consideriamo il polinomio dei nodi F(x) =

n
i =0
(x x
i
), di grado n +1, lo stesso che abbiamo
introdotto nel Capitolo sullinterpolazione.
Vale il seguente teorema.
Teorema 9.7.1 (di W. Gautschi) Dato un intero k con 0 <k n +1, la formula di quadratura
_
b
a
f (x)w(x) dx =
n

i =0
w
i
f (x
i
) +E
i nt
( f )
ha grado di precisione (esattezza) d =n +k se e solo se sono soddisfatte entrambe le condizioni (a) e (b):
138
9.7. Introduzione alle formule di quadratura di Gauss
(a) la formula interpolatoria;
(b) il polinomio dei nodi F(x) soddisfa la relazione
_
b
a
F(x)p(x)w(x) dx = 0 per ogni polinomio p di grado
k 1.
Osserviamo che la condizione in (b):
impone k condizioni sui nodi x
0
, x
1
, x
2
, . . . x
n
. Se fosse k = 0 non ci sarebbero condizioni in pi da
considerare e avremmo d =n (cio esattezza d =n);
fornisce una relazione di ortogonalit: il polinomio F ortogonale ai polinomi di grado k1 rispetto
alla funzione peso w.
5
Nel caso specico, il punto (b) dice che:
_
b
a
F(x)w(x) dx =0
_
b
a
xF(x)w(x) dx =0
_
b
a
x
2
F(x)w(x) dx =0
.
.
.
_
b
a
x
k1
F(x)w(x) dx =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
_
b
a
F(x)p(x)w(x)dx = 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
_
b
a
(F(x))
2
w(x)dx = 0: ma questo un assurdo perch lintegrale 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 che
pu assumere, vale a dire k =n +1. In tal caso d =n +k =n +n +1 =2n +1. Si hanno le cosiddette formule
di Gauss.
A seconda della scelta della funzione peso w e dellintervallo [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 +k
la 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 prodotto
di due polinomi) di grado al pi n +1 +k 1 = n +k. Applichiamo a questo polinomio
prodotto la formula di quadratura (che esatta valendo lipotesi che d = n +k, quindi
E
i nt
(F(x)p(x)) =0). Quindi
_
b
a
F(x)p(x)w(x) dx =
n

i =0
F(x
i
)p(x
i
)w
i
.
Ma F(x
i
) =0 essendo F il polinomio dei nodi. Perci

n
i =0
F(x
i
)p(x
i
)w
i
=0
5
Per denizione, infatti, due funzioni u e v si dicono ortogonali rispetto alla funzione peso w (positiva), se
_
b
a
u(x)v(x)w(x) dx =0.
139
9. INTEGRAZIONE NUMERICA
Di conseguenza
_
b
a
F(x)p(x)w(x) dx =

n
i =0
F(x
i
)p(x
i
)w
i
=0 e quindi il punto (b) provato.
Supponiamo ora che siano vere le condizioni (a) e (b) e dimostriamo che d = n +k (sufcienza). Sia p un
polinomio di grado n+k. Dobbiamo provare che E
i 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 lintegrale, abbiamo
_
b
a
p(x)w(x) dx =
_
b
a
q(x)F(x)w(x) dx +
_
b
a
r (x)w(x) dx
Il primo integrale a secondo membro vale zero a motivo dellipotesi (b) (q(x) un polinomio di grado k 1
e quindi quellintegrale zero). Il secondo integrale, invece, per la (a) pu essere calcolato esattamente
andando ad applicare la formula di quadratura (essendo r di grado n ed essendo la formula interpolatoria
si ha E
i nt
(r ) =0 ). Si ha
_
b
a
p(x)w(x) dx =
_
b
a
r (x)w(x) dx =
n

i =0
r (x
i
)w
i
Ma r (x
i
) =p(x
i
) q(x
i
)F(x
i
) =p(x
i
) (essendo F(x
i
) =0). Quindi
_
b
a
p(x)w(x) dx =
_
b
a
r (x)w(x) dx =
n

i =1
p(x
i
)w
i
Lerrore 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 w
i
=
_
b
a
L
i
(x)w(x) dx.
La condizione (b) permette di calcolare i nodi x
i
della formula (imponendo lortogonalit tra F(x) e i
polinomi di grado k = 0, 1, 2, . . . , n si ricava un sistema di n +1 equazioni nelle incognite dei coefcien-
ti del polinomio F(x). Una volta trovato il polinomio F(x) ricaviamo le radici, che sono appunti i nodi di
integrazione
6
.
9.7.1 Propriet delle formule di Gauss
Scriviamo le formule di Gauss con la notazione
_
b
a
f (x)w(x) dx =
n

i =0
w
i
f (x
i
) +E
G
i nt
( f )
Si ha E
G
i nt
( f ) 0 per f polinomio di grado 2n +1
I nodi x
i
sono reali, distinti e contenuti nellintervallo aperto ]a, b[.
I pesi w
i
sono tutti positivi.
Infatti, per j =0, 1, . . . n si ha 0 <
_
b
a
(L
j
(x))
2
w(x) dx =

n
i =0
w
i
(L
j
(x
i
))
2
(lerrore nullo perch (L
j
(x))
2
un polinomio di grado 2n). Ma L
j
(x
i
) =0 se i 6= j e L
j
(x
i
) =1 se i = j .
Quindi

n
i =0
w
i
(L
j
(x
i
))
2
=w
j
. Abbiamo provato che i pesi sono positivi.
Le formule di Gauss si possono ricavare mediante interpolazione (detta di Hermite) sui nodi x
i
contati
ciascuno come nodo doppio nel senso che su ciascun nodo imponiamo la condizione di interpolazione non
solo 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
_
b
a
f (x)w(x) dx mediante
_
b
a
p(x)w(x) dx, dalla formula che ricaviamo imponiamo che i termini che contengono la derivata prima
siano 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:
_
b
a
f (x)w(x) dx =

n
i =0
w
i
f (x
i
) +

n
i =0
C
i
f
0
(x
i
) +E
G
i nt
(x)
6
Ricordiamo che un polinomio di grado n +1 lo possiamo scrivere come a
n+1
x
n+1
+a
n
x
n
+ +a
0
ma possiamo anche dividere
per il coefciente di grado massimo e scriverlo in forma cosiddetta monica x
n+1
+b
n
x
n
+b
n1
x
n1
+. . . +b
0
, e avere quindi solo n +1
coefcienti (b
0
, b
1
, . . . , b
n
) : le radici dei due polinomi non cambiano.
140
9.7. Introduzione alle formule di quadratura di Gauss
Imponendo C
i
=0 i =0, 1, 2, . . . n, otteniamo n+1 condizioni che ci permettono di ricavare i valori di x
i
(i
nodi di integrazione della formula). Possiamo poi ricavare il valore dei pesi w
i
(che dipendono a loro volta dai
nodi). Nel procedere con linterpolazione sui valori della f e della f
0
, lerrore 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, lerrore nella formula di integrazione (applicando il teorema del Valor Medio in quanto
(F(x))
2
w(x) non cambia segno nellintervallo di integrazione) si pu scrivere come E
G
i nt
E
G
i nt
(x) =
f
(2(n+1))
()
(2(n +1))!
_
b
a
(F(x))
2
w(x) dx
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 lintegrale 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 pesi
2 x
0,1
=0.57735026918962576 w
0
=w
1
=1.0
3 x
0
=0.77459666924148338 w
0
=5/9 =0.5555555556
x
1
=0 w
1
=8/9 =0.8888888889
x
2
=0.77459666924148338 w
2
=5/9 =0.5555555556
4 x
0
=0.86113631159405257 w
0
=0.3478548451374538
x
1
=0.33998104358485626 w
1
=0.6521451548625461
x
2
=0.33998104358485626 w
2
=0.6521451548625461
x
3
=0.86113631159405257 w
3
=0.3478548451374538
I polinomi di Legendre (e, come essi, anche tutti gli altri polinomi le cui radici sono i nodi delle altre
formule di Gauss) hanno la caratteristica di essere polinomi mutuamente ortogonali (nel senso che presi
due polinomi di Legendre, che chiamiamo
n
(x) e
m
(x), rispettivamente di grado n e m, con n 6= m, si ha
_
b
a

n
(x)
m
(x)w(x) dx =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) ai
polinomi di Legendre di grado n 1 e n 2.
9.7.3 Altre formule di Gauss
Con w(x) =
1
_
(1x
2
)
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) =
_
(1x
2
) 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) =(1x)

(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, +] si hanno le formule di Gauss-Laguerre.
Con w(x) =e
x
2
e [a, b] =[, +] si hanno le formule di Gauss-Hermite.
141
9. INTEGRAZIONE NUMERICA
Figura 9.5: Funzioni peso per le formule di quadratura di Gauss-Chebycev di prima e seconda specie (a
sinistra 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 un
intervallo diverso da [1, 1].
Dobbiamo fare un cambio di variabili. Da
_
b
a
f (x) dx dobbiamo passare a
_
1
1
f (t ) dt .
Poniamo x =
b a
2
t +
b +a
2
Per t = 1 si ha x =
b a
2
(1) +
b +a
2
=
b +a +b +a
2
=
2a
2
= a. Quindi per t = 1, si ha x = a (il primo
estremo di un intervallo viene trasformato nel primo estremo dellaltro intervallo).
Per t =1 si ha x =
b a
2
(1) +
b +a
2
=
b a +b +a
2
=
2b
2
=b.
Perci, per t =1, si ha x =b.
Inoltre dx =
b a
2
dt . Con la trasformazione di variabili si ha:
_
b
a
f (x) dx =
_
1
1
f
_
b a
2
t +
b +a
2

b a
2
dt
142
9.8. Esercizi
Applicando la formula di Gauss-Legendre
_
b
a
f (x) dx
b a
2
n

i =0
w
G
i
f (
b a
2
x
i
+
b +a
2
)
9.7.5 Sulla funzione peso
Supponiamo di voler integrare una funzione g(x) in [a, b] (intervallo nito). Supponiamo che la funzio-
ne integranda g abbia una singolarit algebrica agli estremi (con una certa molteplicit), in modo da poter
scrivere 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
2
t +
b +a
2
.
Si ha (b x) =
b a
2
(1t ) e (x a) =
b a
2
(1+t ).
Allora
_
b
a
g(x) dx =
b a
2
_
1
1
f (
b a
2
t +
b +a
2
)
_
b a
2

(1t )

_
b a
2

(1+t )

dt
=
_
b a
2

++1
_
1
1
f (
b a
2
t +
b +a
2
)(1t )

(1+t )

dt
Posso applicare le formule di Gauss-Jacobi e scaricare sulla funzione peso le singolarit della funzione
di partenza.
Sia dato lintegrale
_
1
0
f (x)(1x)
p
dx con f regolare e p intero elevato: allora (1x)
p
una funzione che
ha 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 (su
cui applicare la formula di Gauss-Jacobi) con = p e =0. Si fa lopportuno passaggio di variabili in modo
da integrare sullintervallo [1, 1]. La formula di Gauss incorpora nella funzione peso la parte che riguarda
(1x)
p
.
9.8 Esercizi
Esercizio 9.8.1 Sia dato lintegrale I =
_
0
2
e
x
(x +1) dx.
(a) Approssimare il valore dellintegrale applicando la formula dei trapezi conn =5 suddivisioni inparti
uguali dellintervallo di integrazione.
(b) Trovare una maggiorazione dellerrore commesso e, dopo aver calcolato analiticamente lintegrale
esatto, confrontare tale stima con lerrore esatto.
Svolgimento
(a) Applichiamo la formula dei trapezi con n =5 suddivisioni dellintervallo dato. Vale, dunque, h =0.4. I
punti da considerare e il valore della f (x) =e
x
(x +1), sono:
i x
i
f (x
i
)
0 -2 -7.3890561
1 -1.6 -2.97181945
2 -1.2 -0.664023385
3 -0.8 0.445108186
4 -0.4 0.895094819
5 0 1
143
9. INTEGRAZIONE NUMERICA
La formula dei trapezi
I
t r ap
=h(
f (x
0
) + f (x
5
)
2
+ f (x
1
) + f (x
2
) + f (x
3
) + f (x
4
)) =2.19606715
(b) Per calcolare una maggiorazione dellerrore commesso, dobbiamo calcolare la derivata seconda della
f .
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 nellintervallo di integrazione e a noi interessa la funzione valore
assoluto della f
00
(x), studiamo la funzione g(x) = | f
00
(x)| = e
x
(1x). Si ha che g
0
(x) = e
x
(x 2) < 0
in [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 |E
t r ap
| M
|(b a)
3
|
12 5
2
=0.591124488
Analiticamente, facile calcolare lintegrale esatto (per parti):
I =
_
0
2
f (x) dx =e
x
(x +1)|
0
2
+
_
0
2
e
x
dx =e
x
(x +2)|
0
2
=2
Quindi lerrore esatto, in valore assoluto, : |I I
t r ap
| = 0.196067154, un valore minore della
maggiorazione trovata prima.
Esercizio 9.8.2 Sia dato lintegrale
_
2
0
2
x 4
dx
(a) Dare una sua approssimazione con la formula dei trapezi e n = 4 suddivisioni in parti uguali
dellintervallo di integrazione.
(b) Trovare una maggiorazione dellerrore commesso.
(c) Confrontare lerrore esatto con la stima precedentemente trovata.
(d) Dire in quanti sottointervalli occorre suddividere lintervallo di integrazione per ottenere una
maggiorazione dellerrore minore della tolleranza =10
5
.
Svolgimento
(a) Suddividendo lintervallo di integrazione [0, 2] in n =4 parti si trova un passo h =2/4 =1/2 =0.5.
La formula dei trapezi :
I
T
=
b a
n
(
f (a) + f (b)
2
+ f (x
1
) + f (x
2
) + f (x
3
))
=0.5(
f (0) + f (2)
2
+ f (0.5) + f (1) + f (1.5))
=0.5(
0.51
2
0.5714285710.6666666670.8)
=1.39404762
(b) Consideriamo la formula dellerrore: E =
f
00
()
12
(b a)
3
n
2
Da f (x) =
2
x 4
segue f
0
(x) =
2
(x 4)
2
e f
00
(x) =
4
(x 4)
3
.
Per maggiorare lerrore dobbiamo considerare che vale
|E|
max
0x2
| f
00
(x)|
12
(b a)
3
n
2
, da cui dobbiamo calcolare M =max
0x2
| f
00
(x)|.
144
9.8. Esercizi
La funzione (x4)
3
continua, crescente e sempre negativa nellintervallo [0, 2]. Quindi |
4
(x 4)
3
| =
4
(4x)
3
: osserviamo il cambiamento al denominatore. Poniamo g(x) =
4
(4x)
3
. Risulta g
0
(x) =
12
(4x)
4
>in [0, 2], quindi la g crescente e ha valore massimo per x =2. Perci M =max
0x2
| f
00
(x)| =
| f
00
(2)| =
4
2
3
=1/2 =0.5. Si ha allora la maggiorazione dellerrore |E|
M
12
2
3
4
2
=
1
48
=0.0208333333
(c) Lintegrale esatto si calcola facilmente:
I =
_
2
0
2
x 4
dx =2ln(|x 4|)|
2
0
=2ln(| 2|) 2ln(| 4|) =2ln(1/2) =ln(1/4) 1.386294361
Lerrore esatto commesso con la formula dei trapezi, in valore assoluto, |I I
T
| =0.00775325793
(d) Perch la maggiorazione dellerrore sia minore della tolleranza =10
5
deve essere |E|
M
12
2
3
n
2
10
5
cio n
2

M
12
2
3
10
5
=
10
5
3
=33333.333333. Quindi n >182.574186, vale a dire n =183.
Esercizio 9.8.3 Dato lintegrale
I =
_
0.5
0
1
p
1x
2
dx
(a) si approssimi I con i valori Q
1
e Q
2
ottenuti applicando il metodo di Cavalieri-Simpson prima a tutto
lintervallo e poi suddividendo lintervallo 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 lerrore esatto commesso con
lestrapolazione di Richardson.
Svolgimento
(a) Applichiamo la formula di Cavalieri-Simpson su tutto lintervallo, considerando che lampiezza
dellintervallo b a =0.5 e h =0.25
Q
1
=
0.25
3
( f (0) +4f (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 lintervallo in due parti uguali, abbiamo h = 0.125, da cui i punti: x
0
= a = 0, x
1
=
0.125, x
2
=0.25, x
3
=0.375, e x
4
=b =0.5.
Q
2
=
h
3
( f (x
0
) +4( f (x
1
) +4f (x
3
)) +2f (x
2
) + f (x
4
)) =0.523616326
dove f (0.125) = 1.00790526, f (0.375) = 1.07871978 (essendo gi in possesso degli altri valori, calcolati
per Q
1
)
(b) La formula di estrapolazione di Richardson : Q
3
=Q
2
+
Q
2
Q
1
15
da cui ricaviamo Q
3
=0.5236025101
(c) Analiticamente lintegrale esatto :
I =
_
0.5
0
1
p
1x
2
dx =arcsin(x)|
0.5
0
=/60 =0.523598775
Lerrore esatto commesso con lestrapolazione di Richardson, in valore assoluto, : |I Q
3
| =3.7351
10
6
.
145
9. INTEGRAZIONE NUMERICA
Esercizio 9.8.4 Si calcoli I =
_
5
2
sin(
p
x) dx utilizzando il metodo di Gauss-Legendre con 3 punti di
appoggio (x
1
=
p
(3/5), x
2
=0, x
3
=
p
(3/5); w
1
=w
3
=5/9, w
1
=8/9).
Svolgimento
Applichiamo la formula, ricordandoci che dobbiamo utilizzarla non in [2, 5] ma in [1, 1]. Considerando
che la trasformazione dallintervallo [2, 5] allintervallo [1, 1] porta al cambiamento di variabili x =
b a
2
t +
b +a
2
=
52
2
t +
5+2
2
=
3
2
t +
7
2
si ha dx =
3
2
dt . La formula di Gauss-Legendre deve essere applicata sui nodi
trasformati dati da
3
2
x
i
+
7
2
. Perci abbiamo
I
G
=
3
2
_
w
1
f (
3
2
x
1
+
7
2
) +w
2
f (
3
2
x
2
+
7
2
) +w
3
f (
3
2
x
3
+
7
2
)

=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
C
A
P
I
T
O
L
O
10
EQUAZIONI ALLE DERIVATE ORDINARIE
Luniverso unequazione
differenziale.
Jules Henri Poincar
10.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
10.2 Sulle equazioni differenziali ordinarie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
10.3 Metodo di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
10.4 Metodo di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
10.5 Metodo di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
10.6 Studio dellerrore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
10.7 Errori di troncamento locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
10.8 Convergenza e stabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.8.1 Convergenza di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.8.2 Stabilit di Eulero esplicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.8.3 Convergenza di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
10.8.4 Stabilit di Eulero implicito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10.8.5 Convergenza di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
10.8.6 Stabilit di Crank-Nicolson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.8.7 Sulla stabilit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
10.1 Introduzione
Allinizio del 900, van der Pol
1
studi fenomeni non lineari e propose lequazione differenziale
1
Balthasar van der Pol (1889-1959) fu un sico e matematico olandese. Nel 1916 lavor per un anno con lingegnere John Ambrose
Fleming a Londra (Fleming aveva gi inventato il diodo nel 1904). Si trasfer successivamente a Cambridge e inizi una collaborazione
con John Joseph Thomson al Cavendish Laboratory (Thomson aveva scoperto lelettrone nel 1897). Qui divenne amico di Edward Ap-
pleton che, nel 1947, ricevette il premio Nobel per la sica per i suoi contributi alla conoscenza della ionosfera studi fatti insieme a
van der Pol. La loro collaborazione riguard anche lo studio di fenomeni non lineari usando circuiti triodi per vericare le loro teorie.
Quando van del Pol rientr in Olanda, continu a occuparsi di ottica, elettromagnetismo, onde radio e sica atomica. Il nome di van
der Pol associato con lequazione differenziale che porta il suo nome. Questa equazione apparve per la prima volta sul suo articolo On
relaxation oscillation pubblicato sulla rivista Philosophical Magazine nel 1926.
147
10. EQUAZIONI ALLE DERIVATE ORDINARIE
y
00
(t ) +(y
2
(t ) 1)y
0
(t ) +y(t ) =0
Questa equazione governa lintensit di corrente in un circuito oscillante a triodo e viene utilizzata nello
studio di circuiti che contengono valvole termoioniche, i cosiddetti tubi a vuoto, come il tubo catodico del
televisore o il magnetron nei forni a microonde. La quantit indica lintensit dello smorzamento non
lineare: quanto pi elevato tanto pi il sistema perde energia rapidamente.
Lequazione differenziale del secondo ordine si pu ricondurre ad un sistema di equazioni differenziali
del primo ordine. Ponendo u=(u
1
, u
2
) =(y, y
0
) si ha
_
u
0
1
u
0
2

=
_
u
2
((u
1
)
2
1)u
2
u
1

Come si risolve numericamente un sistema di equazioni differenziali come quello appena scritto? In
questo Capitolo, daremo una piccola introduzione a metodi numerici che permettono di risolvere equazioni
differenziali del primo ordine.
10.2 Sulle equazioni differenziali ordinarie
Vogliamo trovare una funzione y(t ) che soddis la seguente equazione differenziale ordinaria ( ODE:
Ordinary Differential Equation) del primo ordine:
dy
dt
= 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 denita per t 0 e per qualunque y reale. Si ha
y
0
=y +t , t 0
Si verica 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 ununica soluzione allODE. Si parla di problema
a valori iniziali (IVP).
Nel caso in cui y(0) =1 si ricava lunica soluzione y(t ) =t 1+2e
t
.
Problemi in cui abbiamo equazioni alle derivate ordinarie di ordine pi elevato possono essere trasformati
in 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 massa
m per laccelerazione a: F =ma. Questa equazione una ODE del secondo ordine in quanto laccelerazione
a data da a = y
00
, dove y la coordinata della posizione. LODE pu essere riscritta come:
y
00
=F/m
Denendo u
1
= y e u
2
= y
0
si ha il sistema (equivalente allequazione di prima) di due equazioni del primo
ordine di ODE:
_
u
0
1
u
0
2

=
_
u
2
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 u
1
corrisponde alla posizione y dellequazione da cui
siamo partiti. La seconda componente u
2
fornisce la velocit y
0
.
148
10.3. Metodo di Eulero esplicito
Sistemi di
ODE
Sistemi del primo ordine di ODE hanno la forma
y
0
(t ) =f(t , y)
dove y : RR
n
con y =(y
1
y
2
. . . y
n
), f : R
n+1
R
n
e y
0
(t ) =
dy
dt
denota la derivata rispetto a t (per cui la
i -sima componente del vettore derivata data da y
0
i
(t ) =
dy
i
(t )
dt
). La funzione f assegnata e noi vogliamo
determinare il vettore di funzioni y che soddisfa lODE.
Per semplicit noi studieremo il caso di una singola equazione scalare, n = 1. Ma lapproccio del tutto
simile nel caso di sistemi di equazioni del primo ordine.
Sia data lODE
y
0
= f (t , y(t )) a t b
con valore iniziale
y(a) = y
a
.
Per risolvere questa ODE discretizziamo lintervallo [a, b] in n +1 punti, equidistanti per semplicit: t
i
=
a +i h, h =0, 1, . . . , n, con h =(b a)/n.
Il passo di discretizzazione (temporale se t assume il signicato della variabile temporale) dunque h.
Nelle applicazioni pratiche, il passo h variabile (cio i punti non sono equidistanti), tuttavia, per capire
meglio 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(t
i
) il valore esatto della
soluzione calcolata nel punto t
i
.
Indichiamo invece con y
i
il valore approssimato al tempo t
i
che ricaviamo applicando un metodo
numerico che risolve il problema proposto.
10.3 Metodo di Eulero esplicito
Con il metodo di Eulero
2
esplicito applichiamo la formula di Taylor (del secondo ordine) alla funzione
y(t ), di centro t
i
, in modo da poter successivamente approssimare la derivata prima y
0
(t
i
):
y(t ) = y(t
i
) +(t t
i
)y
0
(t
i
) +
(t t
i
)
2
2
y
00
(
i
)
La quantit
(t t
i
)
2
2
y
00
(
i
) il resto della formula di Taylor con
i
un punto opportuno nel segmento di
estremi t e t
i
.
Prendiamo come t il valore t
i
+h vale a dire t
i +1
, da cui si ha t t
i
=t
i +1
t
i
=h. Sostituendo si ottiene:
y(t
i +1
) = y(t
i
) +hy
0
(t
i
) +
h
2
2
y
00
(
i
)
Esplicitando y
0
(t
i
) rispetto agli altri termini si ha:
y
0
(t
i
) =
y(t
i +1
) y(t
i
)
h

h
2
y
00
(
i
)
Ora si sostituisce il valore trovato per y
0
(t
i
) nella ODE y
0
= f (t , y(t )) per t =t
i
:
y(t
i +1
) y(t
i
)
h

h
2
y
00
(
i
) = f (t
i
, y(t
i
))
2
Leonhard 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 equazioni
differenziali, del calcolo delle variazioni. lui che introdusse il simbolo f (x) per indicare le funzioni, e per la base naturale, i per la
radice quadrata di 1, di , il simbolo di sommatoria

e altri ancora.
149
10. EQUAZIONI ALLE DERIVATE ORDINARIE
Trascurando il termine
h
2
y
00
(
i
) non abbiamo pi i valori della soluzione esatta, ma otterremo i valori della
soluzione approssimata. Scriviamo dunque:
y
i +1
y
i
h
= f (t
i
, y
i
)
La formula di Eulero esplicito : y
i +1
= y
i
+hf (t
i
, y
i
).
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 y
0
= y(t
0
) = y(a) = y
a
e si ricava:
y
1
= y
0
+ f (t
0
, y
0
)
y
2
= y
1
+ f (t
1
, y
1
)
.
.
. =
.
.
.
Si arriva alla stessa formula integrando lODE e approssimando lintegrale della f mediante il valore in Un altro
approccio
f (t
0
, y(t
0
)): da y
0
= f (t , y(t )) integrando ambo i membri da t
0
a t , otteniamo
_
t
t
0
dy
dt
dt =
_
t
t
0
f (t , y(t )) dt =
_
y(t )
y
0
dy =
_
t
t
0
f (t , y(t )) dt
Al secondo membro, approssiamo
_
t
t
0
f (t , y(t )) dt mediante il valore (t t
0
) f (t
0
, y(t
0
)) (approssimiamo la f
mediante la retta f (t
0
, y(t
0
))).
Abbiamo:
y(t ) = y
0
+(t t
0
) f (t
0
, y
0
)) +errore della formula di quadratura.
Per t =t
1
, numericamente: y
1
= y
0
+hf (t
0
, y
0
)).
Ai passi successivi: y
i +1
= y
i
+hf (t
i
, y
i
))
Esempio 10.3.1 Supponiamo di applicare il metodo di Eulero esplicito alla ODE y
0
= y con passo h a
partire dal punto iniziale t
0
=0 e avanziamo al tempo t
1
=t
0
+h
y
1
= y
0
+hf (t
0
, y
0
) = y
0
hy
0
=(1h)y
0
Il valore y
1
che otteniamo affetto da errore: y
1
6= y(t
1
) Per esempio, se per t
0
si ha y
0
=1, la soluzione esatta
y(t ) =e
t
. Per h =0.5, si ha y
1
=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 t
i +1
approssimato utilizzando il valore Interpretazione
geometrica
della retta la cui pendenza data da f (t
i
, y
i
): come se ad ogni passo cercassimo di risolvere il problema a
valori iniziali:
y
0
(t ) = f (t , y(t ))
y(t
i
) = y
i
per cui il valore che otteniamo per il tempo t
i +1
tangente alla traiettoria della soluzione di questo IVP.
150
10.4. Metodo di Eulero implicito
Figura 10.1: Interpretazione geometrica del metodo di Eulero esplicito. Si considerato il problema y
0
=y
con y(0) =1 la cui soluzione esatta y(t ) =e
t
. I valori numerici ottenuti dal metodo di Eulero esplicito sono
cerchiati e si trovano sulla linea spezzata che li interpola. La linea spezzata tangente, allinizio di ogni passo,
alla traiettoria che passa per il corrispondente punto, soluzione del problema y
0
=y con y(t
i
) = y
i
.
10.4 Metodo di Eulero implicito
Se applichiamo la formula di Taylor di punto iniziale t
i +1
, abbiamo
y(t ) = y(t
i +1
) +(t t
i +1
)y
0
(t
i +1
) +
(t t
i +1
)
2
2
y
00
(
i
)
Per t =t
i
, si ha t t
i +1
=t
i
t
i +1
=t
i
(t
i
+h) =h. Sostituendo, abbiamo:
y(t
i
) = y(t
i +1
) hy
0
(t
i +1
) +
h
2
2
y
00
(
i
)
Otteniamo quindi
y
0
(t
i +1
) =
y(t
i +1
) y(t
i
)
h
+
h
2
y
00
(
i
)
Andando a sostituire nella ODE al tempo t
i +1
, si ha :
y(t
i +1
) y(t
i
)
h
+
h
2
y
00
(
i
) = f (t
i +1
, y(t
i +1
))
Trascurando il termine del resto di Taylor
h
2
y
00
(
i
) abbiamo:
y
i +1
y
i
h
= f (t
i +1
, y
i +1
))
La formula di Eulero implicito vale y
i +1
= y
i
+hf (t
i +1
, y
i +1
)).
151
10. EQUAZIONI ALLE DERIVATE ORDINARIE
La differenza rispetto alla formula esplicita che la f valutata non pi al tempo t
i
ma al tempo t
i +1
Quindi
il calcolo di y
i +1
dipende implicitamente da y
i +1
stesso! La valutazione di y
i +1
diventa quindi pi laboriosa
e complicata (se si ha unequazione non lineare in y
i +1
, la si risolve tramite un metodo di punto sso o di
Newton-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: y
i +1
= y
i
hy
i +1
ovvero (1+h)y
i +1
= y
i
La soluzione numerica y
i +1
=
y
i
(1+h)
.
Per h =0.5 ricaviamo y
1
=0.66667 contro un valore esatto y(1) 0.60653.
Esempio 10.4.2 Si abbia lequazione y
0
=y
3
con condizione iniziale y(0) =1. Usando il metodo di Eulero
implicito con passo h =0.5, per ricavare y
1
otteniamo lequazione implicita
y
1
= y
0
+hf (t
1
, y
1
) =10.5y
3
1
Questa equazione non lineare in y
1
pu essere risolta mediante metodo di punto sso (x =g(x) =10.5x
3
)
oppure utilizzando il metodo di Newton-Raphson per F(x) =0 con F(x) =x1+0.5x
3
) . Lapprossimazione
iniziale per ottenere y
1
pu essere o la soluzione al passo precedente, y
0
, oppure usare il metodo di Eulero
esplicito, che d y
1
= y
0
0.5y
3
0
=0.5. Otteniamo, come y
1
il valore nale y
1
0.7709.
Esempio 10.4.3 Vogliamo discretizzare il problema di Cauchy
y
0
=y
2
y(0) =1
con passo h =0.1 applicando il metodo di Eulero esplicito per ricavare y
1
e y
2
.
Il metodo di Eulero esplicito :
y
i +1
= y
i
+hf (t
i
, y
i
) = y
i
+h(y
2
i
) = y
i
hy
2
i
Partendo da y
0
=1 si ricava:
y
1
=10.1(1
2
) =0.9
y
2
=0.90.1(0.9
2
) =0.819
Per confronto, calcoliamo la soluzione esatta y(t ) =
1
t +1
, ottenendo:
y(t
1
) = y(0.1) =1/(0.1+1) =0.9090909090
y(t
2
) = y(0.2) =1/(0.2+1) =0.8333333333
Applichiamo ora il metodo di Eulero implicito con lo stesso passo h =0.1.
y
i +1
= y
i
+hf (t
i +1
, y
i +1
) = y
i
hy
2
i +1
Per ricavare y
1
la formula diventa:
y
1
= y
0
+hf (t
1
, y
1
) =10.1(y
2
1
)
152
10.4. Metodo di Eulero implicito
Abbiamo unequazione non lineare in y
1
. Per trovare y
1
, possiamo pensare di applicare lo schema di punto
sso alla funzione g(y) = 1 0.1(y
2
) partendo da y
(0)
= y
0
= 1, in quanto y
1
= g(y
1
) punto sso per la
funzione g. Applichiamo tre passi dello schema di punto sso:
y
(1)
=g(y
(0)
) =10.1(1
2
) =0.9
y
(2)
=g(y
(1)
) =10.1(0.9
2
) =0.919
y
(3)
=g(y
(2)
) =10.1(0.919
2
) =0.9155439
Se prendiamo y
(3)
come approssimazione di y
1
ricaviamo y
1
= 0.9155439 (per confronto, il valore esatto
0.90909090).
Calcoliamo ora y
2
:
y
2
= y
1
+hf (t
2
, y
2
) =0.91554390.1(y
2
2
)
Ora la funzione di punto sso diventa g(y) = 0.9155439 0.1(y
2
). Applichiamo lo schema di punto sso
partendo da y
(0)
= y
1
=0.9155439.
y
(1)
=g(y
(0)
) =0.91554390.1(0.9155439
2
) =0.8317218367
y
(2)
=g(y
(1)
) =0.91554390.1(0.8317218367
2
) =0.8463677786
y
(3)
=g(y
(2)
) =0.91554390.1(0.8463677786
2
) =0.8439100583
Troviamo quindi y
2
=0.8439100583 (valore esatto 0.8333333333).
Vediamo cosa accade in Eulero implicito se il punto iniziale del metodo di punto sso dato da un passo
del metodo di Eulero esplicito.
Per ricavare y
1
, considero come y
(0)
= y
0
+hf (t
0
, y
0
) =10.1 =0.9
In tal caso, lapprossimazione iniziale quella che, nel caso di prima, era il valore y
(1)
.
Applichiamo tre volte lo schema di punto sso:
y
(1)
=g(y
(0)
) =10.1(0.9
2
) =0.919
y
(2)
=g(y
(1)
) =10.1(0.919
2
) =0.9155439
y
(3)
=g(y
(2)
) =10.1(0.9155439
2
) =0.9161779367
Quindi y
1
=0.9161779367.
Al secondo passo, lo schema di punto sso dato dalla funzione g(y) = y
1
h(y
2
) =0.91617793670.1y
2
.
Come approssimazione iniziale prendiamo y
(0)
= y
1
+hf (t
1
, y
1
) =g(y
1
) =0.8322397355. Si ha:
y
(1)
=g(y
(0)
) =0.91617793670.1(0.8322397355
2
) =0.8469156390
y
(2)
=g(y
(1)
) =0.91617793670.1(0.8469156390
2
) =0.8444513267
y
(3)
=g(y
(2)
) =0.91617793670.1(0.84445132672) =0.8448681324
Ricaviamo y
2
=0.8448681324.
153
10. EQUAZIONI ALLE DERIVATE ORDINARIE
10.5 Metodo di Crank-Nicolson
Partiamo dallODE
3
y
0
= f (t , y(t )). Integriamo ambo i membri dellequazione sullintervallo [t
i
, t
i +1
]:
_
y(t
i +1
)
y(t
i
)
dy =
_
t
i +1
t
i
f (t , y(t )) dt =y(t
i +1
) y(t
i
) =
_
t
i +1
t
i
f (t , y(t )) dt
A secondo membro, applichiamo la formula dei trapezi trascurando lerrore di integrazione:
y
i +1
y
i
=
h
2
[ f (t
i
, y
i
) + f (t
i +1
, y
i +1
)]
Si ha la formula di Crank-Nicolson: y
i +1
= y
i
+
h
2
[ f (t
i
, y
i
) + f (t
i +1
, y
i +1
)]
Altro
approccio
La stessa formula la si pu ricavare prendendo la media aritmetica delle formule di Eulero esplicito e
implicito:
y
i +1
y
i
=hf (t
i
, y
i
)
y
i +1
y
i
=hf (t
i +1
, y
i +1
)
sommando e dividendo per 2:
y
i +1
y
i
=
h
2
[ f (t
i
, y
i
) + f (t
i +1
, y
i +1
)] =y
i +1
= y
i
+
h
2
[ f (t
i
, y
i
) + f (t
i +1
, y
i +1
)]
Esempio 10.5.1 Lo stesso esempio di prima (y
0
= y con y(0) = 1) risolto con Crank-Nicolson d: y
i +1
=
y
i
+
h
2
[y
i
y
i +1
)] cio
(1+
h
2
)y
i +1
=(1
h
2
)y
i
=(2+h)y
i +1
=(2h)y
i
=y
i +1
=
_
2h
2+h

y
i
Per h =0.5, confrontiamo i valori ottenuti dai metodi di Eulero esplicito, implicito e Crank-Nicolson, con la
soluzione esatta:
t
i
y(t
i
) y
i
Eul. Espl. y
i
Eul. Impl. y
i
C-N
0.0 1.000000 1.0000000 1.000000 1.000000
0.5 0.606531 0.5000000 0.666667 0.600000
1.0 0.367879 0.2500000 0.444444 0.360000
1.5 0.223130 0.1250000 0.296296 0.216000
2.0 0.135335 0.0625000 0.197531 0.129600
2.5 0.082085 0.0312500 0.131687 0.077760
3.0 0.049787 0.0156250 0.087791 0.046656
3.5 0.030197 0.0078125 0.058528 0.027994
4.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 equazioni
alle 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 del
magnetron. nota, appunto, per il metodo di Crank-Nicolson.
154
10.6. Studio dellerrore
10.6 Studio dellerrore
Nel costruire i metodi (di Eulero esplicito, implicito, Crank-Nicolson) abbiamo trascurato un termine (il
resto della formula di Taylor o lerrore della formula dei trapezi): questo termine che abbiamo trascurato
rappresenta lerrore di troncamento locale. Nel caso di Eulero esplicito avevamo (usando la formula di
Taylor):
y
0
(t
i +1
) =
y(t
i +1
) y(t
i
)
h

h
2
y
00
(
i
) = f (t
i
, y(t
i
))
Per costruire il metodo, abbiamo trascurato il termine del resto, vale a dire la quantit
d
i
=
y(t
i +1
) y(t
i
)
h
f (t
i
, y(t
i
)) =
h
2
y
00
(
i
) =O(h)
Questa quantit ci dice di quanto la soluzione esatta fallisce nel soddisfare la relazione della formula di
Eulero esplicito e rappresenta lerrore di troncamento locale.
Denizione 10.6.1 Si denisce errore totale di troncamento
i
la quantit:

i
= y(t
i
) y
i
.
Ci aspettiamo che sia dello stesso ordine di grandezza dellerrore di troncamento locale.
Denizione 10.6.2 Per effetto dellarrotondamento, al tempo t
i
al posto di y
i
otteniamo il valore arrotondato
y
i
. Si denisce errore totale di arrotondamento la quantit:

i
= y
i
y
i
Denizione 10.6.3 Lerrore globale dello schema numerico dato dal contributo dellerrore totale di
troncamento e dellerrore totale di arrotondamento

i
= y(t
i
) y
i
=
i
+
i
Gli errori di arrotondamento nellapprossimare la derivata prima di una funzione si comportano come
O(
1
h
) (si veda lesempio 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 efcienza sia perch la y e non la y
0
la funzione che dobbiamo approssimare.
Inoltre, nelleseguire i calcoli in doppia precisione (come si fa nei moderni linguaggi di programmazione),
laspetto dovuto allarrotondamento si vede poco rispetto ad altri fenomeni che inuenzano la propagazione
degli errori.
10.7 Errori di troncamento locale
Nel metodo di Eulero esplicito:
d
i
=
y(t
i +1
) y(t
i
)
h
f (t
i
, y(t
i
)) =
h
2
y
00
(
i
) =O(h)
Nel metodo di Eulero implicito:
d
i
=
y(t
i +1
) y(t
i
)
h
f (t
i
, y(t
i +1
)) =
h
2
y
00
(
i
) =O(h)
155
10. EQUAZIONI ALLE DERIVATE ORDINARIE
Nel metodo di Crank-Nicolson (derivando la formula dai trapezi e includendo il termine dellerrore):
y(t
i +1
) y(t
i
) =
h
2
[ f (t
i
, y(t
i
)) + f (t
i +1
, y(t
i +1
))]
f
00
(
i
,
i
)
12
h
3
dove
i
e
i
sono opportuni punti. Ma f = y
0
da cui f
0
= y
00
e f
00
= y
000
.
Perci
y(t
i +1
) y(t
i
) =
h
2
[ f (t
i
, y(t
i
)) + f (t
i +1
, y(t
i +1
))]
y
000
(
i
)
12
h
3
d
i
=
y(t
i +1
) y(t
i
)
h

1
2
[ f (t
i
, y(t
i
)) + f (t
i +1
, y(t
i +1
))] =
y
000
(
i
)
12
h
2
=O(h
2
)
10.8 Convergenza e stabilit
Denizione 10.8.1 Un metodo si dice convergente se lim
h0
i +

i
= 0 cio se lerrore va a zero al tendere del
passo h a zero e di i allinnito in modo che il prodotto i h si mantenga costante (cos t
0
+i h tende ad un valore
di t ssato: studiamo lerrore ssato t ).
Esempio 10.8.1 Vediamo come, ssato un certo istante t , possiamo fare tendere h a zero e far crescere i
allinnito in modo che t
0
+i h sia sempre uguale a t . Sia t
0
=0 e t =0.5:
h i i h
0.5 1 0.5
0.25 2 0.5
0.125 4 0.5
0.0625 8 0.5
.
.
.
.
.
.
.
.
.
2.4414e-4 2048 0.5
Denizione 10.8.2 Unmetodo si dice stabile se lerrore iniziale si mantiene limitato al crescere di i (per i ):
|
i
| M|
0
|
con M costante positiva.
Studieremo la convergenza e la stabilit dei metodi di Eulero esplicito, implicito e Crank-Nicolson
applicati allequazione test y
0
=y (>0 in modo che <0) con condizione iniziale y(0) = y
0
.
La soluzione esatta di questo IVP y(t ) = y
0
e
t
: tende a zero per valori di t crescenti. Ci aspettiamo che
anche 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 allequazione test con =1.
y
1
= y
0
+hf (t
0
, y
0
) = y
0
hy
0
=(1h)y
0
y
2
= y
1
+hf (t
1
, y
1
) = y
1
hy
1
=(1h)y
1
.
.
.
y
i
= y
i 1
+hf (t
i 1
, y
i 1
) = y
i 1
hy
i 1
=(1h)y
i 1
156
10.8. Convergenza e stabilit
Andando a ritroso troviamo una formula che lega y
i
direttamente a y
0
.
y
1
=(1h)y
0
y
2
=(1h)y
1
=(1h)
2
y
0
.
.
.
y
i
=(1h)y
i 1
=(1h)
i
y
0
La soluzione numerica al tempo t
i
data da y
i
=(1h)
i
y
0
. Fissato un tempo t =i h, vediamo se lim
h0
i +

i
=0
cio se lim
h0
i +
y
i
= y(t ).
Osserviamo che: (1h)
i
=(1h)
i h
h
=
_
_
(1h)
1
h
_
_
t
Ricordiamo la propriet per la quale x

=e
ln(x

)
=e
ln(x)
. Perci: (1h)
1
h
=e
ln(1h)
(1/h)
=e
ln(1h)
h
Quando facciamo il limite per h 0 e per i +consideriamo che, per il teorema dell Hpital, vale
lim
h0
ln(1h)
h
= lim
h0
1
1h
=1
Di conseguenza lim
h0
e
ln(1h)
h
=e
1
Allora
lim
h0
i +
y
i
= lim
h0
i +
y
0
(1h)
i
= lim
h0
i +
y
0
_
_
(1h)
1
h
_
_
t
= y
0
e
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 lerrore si mantiene limitato. Sia > 0. Abbiamo
y
i +1
= y
i
hy
i
= (1 h)y
i
, vale a dire y
i +1
= y
0
(1 h)
i +1
. La soluzione esatta di questo problema
y(t ) = y
0
e
t
e tende a zero per valori di t crescenti. Vogliamo che tenda a zero anche la soluzione numerica
(in modo da mantenere limitato lerrore). La soluzione numerica (ssato h e per i grande, cio per valori di t
crescente) tende a zero se |1h| <1 cio per 1 <1h<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 allequazione test diventa:
y
i +1
=
y
i
(1+h)
157
10. EQUAZIONI ALLE DERIVATE ORDINARIE
Quindi
y
1
=
y
0
(1+h)
y
2
=
y
1
(1+h)
=
y
0
(1+h)
2
y
3
=
y
2
(1+h)
=
y
0
(1+h)
3
.
.
.
y
i
=
y
i 1
(1+h)
=
y
0
(1+h)
i
In tal caso
lim
h0
i +
y
i
= lim
h0
i +
y
0
(1+h)
i
= lim
h0
i +
y
0
(1+h)
i
= y
0
_
_
(1+h)
1
h
_
_
i h
= y
0
e
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 y
i
=
y
0
(1+h)
i
, si osserva che, per i +, qualunque sia il va-
lore di h, la soluzione tende a zero in quanto lim
i +
1
(1+h)
i
=0 Si parla di metodo incondizionatamente
stabile.
10.8.5 Convergenza di Crank-Nicolson
Il metodo di Crank-Nicolson applicato allequazione test diventa: y
i +1
= y
i
+
h
2
[y
i
y
i +1
] da cui
y
i +1
=
_
2h
2+h

y
i
Andando a ritroso si ricava
y
i +1
= y
0
_
2h
2+h

i +1
Per vericare che il metodo converge studiamo il limite lim
h0
i +
y
i
. Partiamo dalla relazione
_
2h
2+h

i
=
_
_
_
_
2h
2+h

1
h
_
_
_
i h
=
_
_
_
_
2h
2+h

1
h
_
_
_
t
Ma
_
2h
2+h

1
h
=e
1
h
ln(
2h
2+h
)
158
10.8. Convergenza e stabilit
Nel fare il limite per h 0 e i + della quantit che si trova allesponente, applichiamo lHpital e
ricordiamo che la derivata di
2h
2+h
vale
(2+h) (2h)
(2+h)
2
=
4
(2+h)
2
:
lim
h0
i +
ln(
2h
2+h
)
h
= lim
h0
i +
2+h
2h
4
(2+h)
2
= lim
h0
i +
4
(2+h)(2h)
=
Quindi
lim
h0
i +
y
i
= lim
h0
i +
y
0
_
2h
2+h

i
= lim
h0
i +
y
0
_
_
_
_
2h
2+h

1
h
_
_
_
i h
= y
0
e
t
= y(t )
La convergenza provata.
10.8.6 Stabilit di Crank-Nicolson
Per la stabilit, si vede che la soluzione numerica y
i
= y
0
_
2h
2+h

i
. Per i +, qualunque sia il valore
di h, la soluzione tende a zero in quanto lim
i +
_
2h
2+h

i
=0. Il metodo incondizionatamente stabile.
10.8.7 Sulla stabilit
La stabilit di questi metodi la si pu vericare anche considerando direttamente lerrore
i
, dimostrando
che gli errori al passo i e al passo i +1 vericano la stessa relazione che hanno y
i +1
e y
i
e mostrando che ler-
rore rimane limitato sotto condizione per Eulero esplicito mentre incondizionatamente stabile per gli altri
metodi. In Figura 10.2 si vede come il metodo di Eulero esplicito sia stabile sotto condizione mentre i metodi
di 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 allequazione test. Sappiamo
che y
i +1
= y
i
+hy
i
.
Per la soluzione esatta, sappiamo che vale y(t
i +1
) = y(t
i
) +hy(t
i
) +hd
i
(con d
i
lerrore di troncamento
locale).
Sottraendo la prima equazione dalla seconda abbiamo

i +1
=
i
+h
i
+hd
i
Considerato che d
i
=
h
2
y
00
(
i
) e che, per studiare la stabilit, h ssato mentre i tende a +, il termine hd
i
non inuisce sullandamento dellerrore 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. Dobbiamo
infatti vericare quando
i
tende a zero per i che tende a +. . .
159
10. EQUAZIONI ALLE DERIVATE ORDINARIE
Figura 10.2: Confronto dei metodi di Eulero esplicito, implicito e Crank-Nicolson sullequazione 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 allequazione differenziale
y
0
=2y +1, con y(0) =1 (soluzione esatta y(t ) =
e
2t
+1
2
)
Svolgimento
Per provare la stabilit del metodo dobbiamo vericare che lerrore iniziale si mantiene limitato per valori
crescenti del tempo.
Il metodo di Eulero esplicito applicato allODE del problema diventa
y
i +1
= y
i
+h(2y
i
+1) =(12h)y
i
+h
La soluzione esatta soddisfa unequazione del tipo
y(t
i +1
) = y(t
i
) +h(2y(t
i
) +1) +hd
i
=(12h)y(t
i
) +h +hd
i
Nel calcolare lerrore
i +1
= y(t
i +1
) y
i +1
abbiamo

i +1
=(12h)
i
+hd
i
Il termine hd
i
(d
i
errore locale di troncamento) si pu trascurare. Abbiamo allora
i +1
=(12h)
i
.
Possiamo trovare con facilit che
i +1
=(12h)
i +1

0
o, ancora,
i
=(12h)
i

0
.
Se vogliamo che lerrore rimanga limitato per i la quantit (12h)
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
C
A
P
I
T
O
L
O
11
INTRODUZIONE AL FORTRAN 77
:Almeno hai trovato i les?
: Non so nemmeno come... come
sono fatti?
: Sono dentro il computer.
: Sono dentro il computer?
.
.
.
: Com che i les non escono?
Zoolander
11.1 Introduzione alla programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
11.2 FORTRAN: FORmula TRANslator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
11.3 Problemi e Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
11.4 Elementi di un linguaggio di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
11.5 Prime regole sul FORTRAN77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
11.6 Le variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
11.7 I tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
11.8 Espressioni aritmetiche e funzioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
11.9 I predicati elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
11.10Struttura alternativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
11.11Programma sul metodo di punto sso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
11.12I sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
11.12.1 Le functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
11.12.2 Le subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
11.13Il formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
11.14Files di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
11.15Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
11.16Ciclo do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
11.16.1 I vettori nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
11.16.2 Leggere i dati di input da le . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
11.17Matrici in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
11.17.1 Le matrici nei sottoprogrammi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
11.17.2 Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
161
11. INTRODUZIONE AL FORTRAN 77
11.17.3 Memorizzazione delle matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.17.4 Un programma di esempio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
11.18La formula dei trapezi in FORTRAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
11.19Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
11.1 Introduzione alla programmazione
Prendono il nome di software quei programmi che vengono fatti eseguire al calcolatore e consentono
allhardware 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 specico dellelaboratore e consiste di cifre binarie 0 e 1 che
identicano 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 essere
utilizzati 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 linguaggio
macchina.
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 di
essere utilizzato) da chi programma.
Perci, quando si programma con un linguaggio di alto livello, il programmatore deve conoscere e sapere
bene la grammatica, la sintassi, il vocabolario del linguaggio stesso.
Unovolta scrittoil programma inmodocorretto, occorre fare capire al computer che c unprogramma da
eseguire: bisogna quindi tradurre inlinguaggio macchina il programma scritto conil linguaggio di alto livello:
questo passaggio lo si fa mediante la compilazione. Useremo un comando (unistruzione da scrivere nella
nestra 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 un
programma equivalente scritto in linguaggio macchina e che potr essere eseguito dal calcolatore, detto
programma eseguibile.
Programma sorgente
compi l at ore
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 proprio
computer (anche con sistema operativo Windows).
Unprogramma FORTRANva prima scritto mediante uneditor di testo, salvandolo conunnome che abbia
lestensione .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. Mediante
listruzione
g77 -o prova prova.f
tradurremo in linguaggio macchina il programma prova.f e il risultato sar la creazione di un nuovo le
chiamato prova che potremo eseguire. Analogo il comando
g77 prova.f -o prova
162
11.3. Problemi e Algoritmi
Notiamo lordine dei comandi. Limportante che la scrittura -o sia immediatamente precedente il nome
del le eseguibile!
Possiamo scrivere anche
g77 -o prova.exe prova.f
Possiamo mettere unestensione al le eseguibile, prova.exe, oppure no.
Per eseguire il programma prova, scriveremo da shell listruzione
prova
oppure
./prova
a seconda del calcolatore.
Altri tipi di compilatore sono f77, gfortran.
11.3 Problemi e Algoritmi
Ci sono tante denizioni per problema:
etimologicamente, viene dal verbo greco pro-ballein pro: davanti, ballein: mettere, da cui problema
ha il signicato di ostacolo, promontorio, impedimento;
sul dizionario troviamo: Questione da risolvere partendo da elementi noti mediante il ragionamento, e
per la quale si propongono soluzioni;
1
o ancora quesito con cui si chiede di trovare, mediante un procedimento di calcolo, uno o pi dati
sconosciuti, partendo dai dati noti contenuti...;
2
in senso gurato, invece, per problema si intende Questione, situazione difcile o complessa di cui
si cerca la spiegazione o la soluzione:
3
e questione, situazione, caso difcile da risolvere e che genera
preoccupazione, . . . , complicazione, difcolt, ostacolo;
4
estendendo ancora il signicato, si trova Persona misteriosa, incomprensibile, il cui comportamento
preoccupa o mette in difcolt;
5
. . .
Qualunque sia la denizione che diamo, il tratto comune di avere a che fare con una questione cui vogliamo
dare una risposta o che vogliamo risolvere. Una delle prime cose da considerare quando si cerca di risolvere
un 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 sico, un matematico.
A volte, le stesse parole possono essere usate per dire cose completamente diverse!
C poi il linguaggio articiale, che si presenta sotto forma di termini tecnici (dalla sica, ingegneria, etc) e
notazioni (dallalgebra, dal calcolo, dalla logica).
Termini come temperatura, pressione, massa, espansione isotermica e adiabatica, possono essere usati in
unofcina per riparare il motore di unautomobile, 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 laiuto del linguaggio
naturale e articiale), si pu passare alla fase di soluzione del problema stesso.
Ecco lapproccio dellalgoritmo. Un algoritmo una sequenza di passi che permettono di risolvere tutto Algoritmo
1
Dal Dizionario online della Hoepli http://dizionari.hoepli.it
2
Dal Dizionario online della Garzanti http://www.garzantilinguistica.it
3
Da http://dizionari.hoepli.it
4
Da il Sabatini Colletti Dizionario della Lingua Italiana http://dizionari.corriere.it/dizionario_italiano
5
Da http://dizionari.hoepli.it
163
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 parti
la lista degli ingredienti
la sequenza dei passi da fare per realizzare la ricetta.
Nel realizzare una ricetta si possono avere problemi nel cercare alcuni ingredienti. Una parte dellesecuzione
richieder poco tempo, altre parti richiederanno pi tempo. Alcuni passi non richiedono che si segua un
certo ordine, altri passi richiedono che si mantenga lordine scritto sulla ricetta. . . Le stesse analogie troviamo
in 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,
ortograa. . .
Inoltre, un programma non pu essere ambiguo, in quanto diventa il preciso risultato delle istruzioni in
esse contenute.
Alcune attivit (non di programmazione) possono essere vaghe o ambigue:
studia molto per superare lesame. . . 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 dellesame
da 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 per
ogni studente calcoliamo la media dei suoi voti, c differenza tra i nomi degli studenti (una stringa di
caratteri) 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 determinate
condizioni. . .
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 le
seguenti righe, poi salviamo il le dando il nome prova.f):
program prova
C
C questo e un programma di prova
C
write (
*
,
*
) programma di prova
write (
*
,
*
) questo e un programma di prova
stop
end
6
La parola algoritmo entrata in uso negli anni 50 in sostituzione di algorismo, termine con cui si indicava il processo di calcolo
utilizzando i numeri arabi. Il termine algoritmo deriva dal nome di al-Khwarizmi, importante matematico arabo del nono secolo grazie
al quale lEuropa impar ad usare i numeri arabi, oltre alla notazione in base 10. Le procedure che permettevano di effettuare calcoli in
notazione decimale presero il nome di algorismi o algoritmi. Anche la parola algebra viene da questo matematico e, in particolare, dalla
sua opera Al-mukhtasar 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
11.6. Le variabili
In FORTRAN77 tutte le istruzioni vanno scritte tra la 7-ima e la 72-sima colonna
7
;
le colonne da 1 a 6 hanno un signicato 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 dellalfabeto) se listruzione
scritta sulla riga precedente troppo lunga e va oltre la 72-sima colonna per cui si deve andare a
capo oppure si vuole andare a capo per leggere meglio listruzione. Nella riga in cui si mette un
carattere sulla colonna 6, continua listruzione iniziata nella riga precedente.
Il programma inizia con listruzione program seguito dal nome del programma.
Listruzione stop arresta lesecuzione del programma.
Listruzione end segnala che non vi sono altre righe nel programma.
Con questo programma di esempio, vogliamo far scrivere al computer, sulla nestra di shell in cui eseguiamo
il programma, le due frasi programma di prova e questo e un programma di prova.
Listruzione write(
*
,
*
) programma di prova
rende disponibile allesterno le informazioni contenute tra i due apici, vale a dire la stringa di caratteri
programma 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 il
dispositivo di uscita su cui mostrare la stringa di caratteri il terminale (la nestra di shell da cui eseguiamo
il programma).
Vedremo che ci sono anche altri modi per rendere disponibile loutput del programma non su video ma
su le.
Lapice viene usato per indicare linizio e la ne 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 ar eat r i a
C programma per cal col are l area di un t ri angol o
C dando in input i val ori del l a base e del l al t ezza
i mpl i ci t none
real
*
8 a , b, area
write (
*
,
*
) base a
read (
*
,
*
) a
write (
*
,
*
) base , a
write (
*
,
*
) al t ezza b
read (
*
,
*
) b
write (
*
,
*
) al t ezza , b
area=(a
*
b)
*
0. 5
write (
*
,
*
) area del tri angol o , area
stop
end
Listruzione implicit none dice che nessuna variabile pu essere dichiarata implicitamente: dobbiamo
dichiarare tutte le variabili che utilizziamo allinterno del programma!
Introduciamo tre variabili di tipo reale in doppia precisione, mediante real
*
8 a,b,c.
7
Questo limite dovuto al fatto che no alla ne 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 sso di colonne e righe
(generalmente 80 colonne e 12 righe).
165
11. INTRODUZIONE AL FORTRAN 77
integer variabile intera
real variabile reale in precisione semplice
real*8 variabile reale in doppia precisione
(occupa esattamente 8 byte
di memoria)
double precision variabile reale in doppia precisione
(accuratezza diversa a seconda
della macchina usata)
logical variabile logica
character 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 indica
che lacquisizione dei dati avviene da tastiera.
Prima dellistruzione di read c una write che ci indica quale valore dobbiamo mettere: importante
altrimenti vedremmo che lelaboratore si mette in attesa di un valore e rimane cos no a quando non
lo riceve. Ma se noi non sappiamo che valore dargli, possiamo aspettare anche ore. . . . (vedere cosa
succede togliendo le istruzioni di write!)
Una volta dati i valori di input, si effettua unistruzione di assegnazione: si prende il valore memorizzato
nella variabile a lo si moltiplica per il valore di b e per 0.5 e il risultato viene memorizzato in una nuova
variabile chiamata area. Il simbolo * il simbolo di moltiplicazione.
Quando effettuiamo unassegnazione, il valore contenuto nella variabile a sinistra del segno = viene
perso. Nel nostro caso, in area non era memorizzato nessun valore, ma se avessimo posto in area un
qualche valore iniziale, esso andrebbe perso perch sostituito dalloperazione a*b*0.5. I valori di a e
b 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 terminata
lesecuzione del programma, il valore delle variabili viene perso. Perci ci facciamo stampare il loro
valore prima dellistruzione di stop. torna ad essere incognitoo
11.7 I tipi di dati
Una variabile rappresenta un posto (o locazione) della memoria del calcolatore, contrassegnato da
un nome che identica la variabile, e dove possono essere scritte delle informazioni che lelaboratore 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 essere
solo o vero o falso), complesse, di caratteri (stringhe di caratteri). Si veda la Tabella 11.1 per una sintesi dei
vari tipi di dati.
Le variabili di tipi intero possono variare in un intervallo limitato (tra un minimo e un massimo interi
rappresentabili). La stessa cosa vale per le variabili di tipo reale: esiste un valore minimo e massimo reale
rappresentabile. Questi valori di minimo e massimo dipendono dallelaboratore (si veda il Capitolo 1).
Osserviamo che in FORTRAN una variabile pu essere scritta con i caratteri maiuscoli o minuscoli
senza distizioni: XOLD la stessa cosa di xold o XoLd.
11.8 Espressioni aritmetiche e funzioni elementari
Nel fare le operazioni matematiche, in FORTRANviene data la precedenza (priorit) agli elevamenti a po-
tenza, poi alle moltiplicazioni e divisioni, inne a sottrazione e addizione (si veda Tabella 11.2 per i simboli
166
11.9. I predicati elementari
elevamento a potenza
moltiplicazione
/ divisione
+ addizione
sottrazione
Tabella 11.2: Operazioni aritmetiche
Funzione FORTRAN Signicato
sin(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) e
x
log(x) ln(x)
log10(x) log(x)
sqrt(x)
p
x
Tabella 11.3: Principali funzioni
usati per ciascuna di queste operazioni). Quando due operatori hanno la stessa priorit vengono eseguite
le 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, conviene
mettere sempre le parentesi.
In FORTRAN ci sono gi molte funzioni matematiche che possiamo utilizzare per i nostri programmi. In
Tabella 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 luna di seguito allaltra). Molte volte, infatti, viene eseguita una istruzione piuttosto che
unaltra se certe condizioni sono vere. Oppure vengono ripetute alcune istruzioni ntantoch sono vere de-
terminate condizioni. Gli operatori mostrati in Tabella 11.4 ci serviranno per poter scrivere istruzioni legate
ad una condizione.
Dato P un predicato (vale a dire una proposizione logica che pu assumere solo valore vero o falso) si
hanno 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 o
uguale 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
11. INTRODUZIONE AL FORTRAN 77
Operatore Signicato 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 Signicato 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 maggiore
stretto 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 sua
negazione vera.
(a.le.b).or.(c.ge.b) una proposizione vera perch basta che una delle due proposizioni sia vera per
rendere vero lintero predicato.
(a.le.b).and.(c.ge.b) un predicato falso perch devono essere vere tutte e due le proposizioni che la
compongono 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.
Riassumendo
Negare 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
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 signica disgiungere le negazioni dei due predicati che la compongono.
( .not. ( (P1).or.(P2) ) equivale a scrivere ( .not.(P1) .and. .not.(P2) )
Negare una disgiunzione signica 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 pr edi cat i l ogi ci
C programma di esempio s ul l e proposi zi oni l ogi che
i mpl i ci t none
real
*
8 a , b, c
l ogi cal p1 , p2 , p
write (
*
,
*
) s cr i vi i l val ore di a
read (
*
,
*
) a
write (
*
,
*
) a= , a
write (
*
,
*
) s cr i vi i l val ore di b
read (
*
,
*
) b
write (
*
,
*
) b= , b
write (
*
,
*
) s cr i vi i l val ore di c
read (
*
,
*
) c
write (
*
,
*
) c= , c
p1= ( a . l t . b)
p2=(b. gt . c )
write (
*
,
*
) p1= a . l t . b , p1
write (
*
,
*
) p2= b. gt . c , p2
p= p1. and. p2
write (
*
,
*
) p1 and p2 , p
p= . not . ( p1. and. p2)
write (
*
,
*
) not ( p1 and p2) , p
p= p1. or . p2
write (
*
,
*
) p1 or p2 , p
p= . not . ( p1. or . p2)
write (
*
,
*
) not ( p1 or p2) , p
stop
end
169
11. INTRODUZIONE AL FORTRAN 77
11.10 Struttura alternativa
I programmi in cui le istruzioni devono essere eseguite una di seguito allaltra si dicono a struttura se-
quenziale. Questa struttura pero abbastanza limitata in quanto non permette di risolvere problemi anche
semplici.
Supponiamo di risolvere il problema di trovare le radici di unequazione di secondo grado ax
2
+bx+c =0.
i dati di input sono i coefcienti a, b, c
si calcola il discriminante =b
2
4ac
se <0 allora le radici sono complesse
se =0 allora sappiamo che le radici coincidono
se > 0 allora applichiamo la formula per trovare le due radici. Sappiamo per che si pu verica-
re il fenomeno di cancellazione numerica se b
2
4ac b
2
e quindi possiamo applicare una formula
alternativa. . . Ciclo if
Come fare a scrivere un programma che tenga conto di tutte le condizioni che abbiamo visto prima, che
faccia quindi qualcosa piuttosto che unaltra a seconda che sia vera o falsa una certa condizione? Si ha il
cosidetto ciclo if.
i f ( espressione l ogi ca ) then
{ i st ruzi one 1a }
{ i st ruzi one 2a }
{ . . . . }
el se
{ i st ruzi one 1b }
{ i st ruzi one 2b }
{ . . . . }
end i f
Se vera lespressione logica allora si
eseguono le istruzioni 1a, 2a, . . . .
Altrimenti cio se falsa lespressione
logica allora si eseguono le istruzioni 1b,
2b, . . .
i f ( espressione l ogi ca ) then
{ i st ruzi one 1a }
{ i st ruzi one 2a }
{ . . . . }
end i f
Se vera lespressione logica allora si ese-
guono le istruzioni 1a, 2a, . . . , altrimenti
non si fa nulla.
Ciclo if
struttura pi
generale
i f ( espressione l ogi ca1 ) then
{ i st ruzi one 1a }
{ i st ruzi one 2a }
{ . . . . }
el se i f ( espressione l ogi ca2 ) then
{ i st ruzi one 1b }
{ i st ruzi one 2b }
{ . . . . }
. . . .
el se
{ i st ruzi one 1z }
{ i st ruzi one 2z }
{ . . . . }
end i f
170
11.10. Struttura alternativa
Vediamo un programma che calcola le radici di unequazione di secondo grado.
program r adi ci
i mpl i ci t none
real a , b, c , del ta
real x1 , x2
C cal col o del l e radi ci r e al i di ax
**
2 +bx+c = 0
C x = [b +/ s qr t { b
**
2 4ac } ] / 2a
C
write (
*
,
*
) coef f i ci ent i di un equazione di secondo grado
write (
*
,
*
) a =
read (
*
,
*
) a
write (
*
,
*
) a = , a
write (
*
,
*
) b =
read (
*
,
*
) b
write (
*
,
*
) b = , b
write (
*
,
*
) c =
read (
*
,
*
) c
write (
*
,
*
) c = , c
del ta=b
**
2 4.
*
a
*
c
i f ( del ta . l t . 0) then
write (
*
,
*
) l e r adi ci sono complesse
el se
x1= ( b + sqrt ( del ta ) ) / ( 2.
*
a)
write (
*
,
*
) x1 = , x1
x2= ( b sqrt ( del ta ) ) / ( 2.
*
a)
write (
*
,
*
) x2 = , x2
end i f
stop
end
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 x
1
x
2
= c/a) per evitare il fenomeno di
cancellazione numerica.
i f ( del ta . l t . 0) then
write (
*
,
*
) l e r adi ci sono complesse
el se i f ( del ta . eq . 0 . d0) then
x1= b/( 2. 0d0
*
a)
x2=x1
write (
*
,
*
) l e r adi ci sono: , x1 , x2
el se
x1= ( b + sqrt ( del ta ) ) / ( 2.
*
a)
x2= ( b sqrt ( del ta ) ) / ( 2.
*
a)
write (
*
,
*
) l e r adi ci sono: , x1 , x2
i f ( ab( x1 ) . gt . abs ( x2 ) ) then
x2= c /( x1
*
a)
write (
*
,
*
) x2 con formula al t ernat i va , x2
el se
x1= c /( x2
*
a)
write (
*
,
*
) x1 con formula al t ernat i va , x1
end i f
end i f
Ciclo do
while Il ciclo if non basta per scrivere tutti i nostri programmi. Pensiamo ad un blocco di istruzioni da ripe-
tere molte volte, no a quando vera una determinata condizione. In questo caso, si usa il ciclo do while
(pensiamo allalgoritmo visto per il metodo di bisezione, o allo schema di punto sso).
171
11. INTRODUZIONE AL FORTRAN 77
do while ( espressione l ogi ca )
{ i st ruzi one 1 }
{ i st ruzi one 2 }
{ . . . }
{ i st ruzi one n }
end do
Fintantoch vera lespressione logica
allora esegui istruzione 1, 2, . . . , n.
Le istruzioni 1, 2, . . . vengono ripetute ciclicamente (non una volta sola come nel ciclo if ). Quando si
esegue lultima istruzione posta allinterno del ciclo, si torna allespressione logica e si controlla se vera o
falsa. Se vera, si eseguono di nuovo le istruzioni 1, 2, . . . ,n. Se non vera, si esce dal ciclo while. Occorre
dunque prestare attenzione a non creare cicli inniti!
11.11 Programma sul metodo di punto sso
Consideriamo lalgoritmo dello schema di punto sso
x
n+1
=cos(x
n
)
e proviamo a scrivere un programma FORTRAN che ci permetta di trovare una buona approssimazione del
punto sso (sempre che lo schema converga). I dati di input che dobbiamo dare al programma sono:
lapprossimazione iniziale x
0
la tolleranza con cui vogliamo approssimare il punto sso
il numero massimo di iterazioni entro cui cercare la convergenza dello schema (per evitare cicli inniti).
I dati di output che possiamo chiedere al programma sono:
lapprossimazione x
n+1
ad ogni passo
literazione n
lo scarto ad ogni passo: |x
n+1
x
n
|
una stima della costante asintotica dellerrore M.
Cerchiamo ora di capire come gestire le variabili per x
n
e x
n+1
e per gli scarti ad ogni passo. Con il metodo
di punto sso, si crea una successione di valori: x
0
, x
1
, x
2
, . . . x
n
. . . . Nella teoria, per n che tende allinnito,
la successione pu convergere al punto sso. Nella pratica ci si arresta quando lo scarto (il valore assoluto tra
due iterazioni successive) minore di una certa tolleranza. A priori, tuttavia, non sappiamo quante iterazioni
dobbiamo fare. Potremmo pensare di memorizzare le varie approssimazioni x
n
in un vettore che abbia una
dimensione 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 (x
n+1
dipende dal valore x
n
e basta). Se ci interessano i valori gene-
rati dallalgoritmo, li possiamo scrivere di volta in volta sul video (meglio su un le! vedremo poi come
scrivere dati di output su un le).
Lavoreremo facendo uso di due variabili: xold che corrisponde a x
n
e xnew che corrisponde a x
n+1
. Diamo
in input il valore iniziale x
0
. Dobbiamo effettuare la prima iterazione cio trovare x
1
=cos(x
0
).
Porremo xold=x0 e poi xnew= cos(xold) per literazione iter=1. xnew ha il signicato di x
1
.
Una volta fatta la prima iterazione, il valore di xold=x0 non ci interessa pi. Per iter=iter+1=2,
ci serve calcolare x
2
= cos(x
1
). Proprio perch il valore di xold non serve pi assegniamo a xold il
valore calcolato per x
1
=xnew in modo da poter sfruttare la relazione di prima. Applicheremo di nuovo
la formula xnew= cos(xold) dove ora xnew ha il signicato di x
2
e xold di x
1
.
Alla ne del secondo passo, quindi xnew=x
2
e xold=x
1
Ora x
1
non serve pi. Per iter=iter+1=3, ci serve solo x
2
. Perci faremo xold=xnew,
xnew=cos(xold) e avremo xnew=x
3
. E cos via. . .
172
11.11. Programma sul metodo di punto sso
xold=x0
i t er =0
scartonew=2. 0d0
*
t ol l
do while ( ( scartonew. ge . t ol l ) . and. ( i t er . l e . itmax ) )
i t er = i t er +1
xnew=cos ( xold )
scartonew=abs (xnew xold )
write (
*
,
*
) i t er , xnew
xold=xnew
end do
La variabile scartonew ha il signicato dello scarto x
n
x
n1
| e, difatti, viene di volta in volta aggiornata
come scartonew=abs(xnewxold). 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 proposizione
logica 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 no a quando rimane vera la proposizio-
ne (scartonew.ge.toll) .and. (iter . le. itmax) . Si esce dal ciclo do while quando scartonew < toll oppure
quando iter > itmax.
Sappiamo che, per lo schema di punto sso, vale lim
n
|x
n
|
|x
n1
=M =|g
0
()|. Poich non conosciamo
lerrore, ma possiamo calcolare lo scarto e, per n , vale | x
n
| |x
n
x
n1
|, abbiamo due modi per
stimare M:
1. calcolare il rapporto tra gli scarti a due passi successivi
2. calcolare |g
0
(x
n
)|.
Per calcolare il rapporto tra gli scarti a due passi successivi introduciamo unaltra variabile, che chiamia-
mo scartold, che corrisponde allo scarto |x
n1
x
n2
|. Laggiornamento di scartonew e scartold viene
fatto 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 puntofisso
C programma per i l cal col o del punto f i s s o per g( x)=cos ( x) in [ 0 , pi / 2]
i mpl i ci t none
C
C s i gni f i c at o del l e var i abi l i
C i t e r : i t erazi one del metodo del punto f i s s o
C itmax : numero massimo di i t er azi oni
C t ol l : t ol l eranza pr ef i s s at a per l approssimazione
C del punto f i s s o
C x0 : punto i ni zi al e del l a successi one
C xold : approssimazione al passo n1
C xnew: approssimazione al passo n
C scart ol d : scart o al l i t er at a precedente
C scartonew : val ore assol uto t ra l i t er at a corrent e e quell a al
C passo precedente
C asi nt1 : scartonew / scart ol d approssimazione di M
C asi nt2 : abs(si n (xnew) ) approssimazione di M
integer i t er , itmax
real
*
8 x0 , xold , xnew, scartol d , scartonew , t ol l
real
*
8 asi nt1 , asi nt2
write (
*
,
*
) approssimazione i ni zi al e
read (
*
,
*
) x0
write (
*
,
*
) x0 = , x0
itmax=100
t ol l =1. d10
173
11. INTRODUZIONE AL FORTRAN 77
scartonew=2. 0
*
t ol l
scart ol d=scartonew
i t er = 0
xold=x0
write (
*
,
*
) i t xnew scarto
1 asi nt1 asi nt2
write (
*
,
*
) i t er , xold , scartonew
do while ( ( scartonew. ge . t ol l ) . and. ( i t er . l e . itmax ) )
i t er = i t er +1
xnew=cos ( xold )
scartonew=abs (xnew xold )
asi nt1= scartonew/ scart ol d
asi nt2=abs(si n (xnew) )
write (
*
,
*
) i t er , xnew, scartonew , asi nt1 , asi nt2
xold=xnew
scart ol d=scartonew
end do
stop
end
11.12 I sottoprogrammi
Quando lalgoritmo e il problema sucui stiamo lavorando sono complicati, conviene spezzare il problema
in sottoproblemi in modo da semplicare la programmazione.
Analogamente, al posto di avere un unico programma in FORTRAN, conviene scrivere il programma
facendo 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 lo
schema di punto sso ad unaltra 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 stesse
funzioni) anche su altre parti del programma?
Introduciamo il concetto di function in FORTRAN. Una function del tutto simile al concetto di
funzione scalare, che pu essere denita in un sottoinsieme di R
n
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 le (per semplicit) in cui abbiamo scritto il programma principale sso.f, dopo le istruzioni
stop e end che chiudono il programma principale, dopo aver lasciato qualche riga bianca per mostrare che
nisce il programma principale, andremo a scrivere la nostra prima function Esempio di
function gfun
stop
end
C f i ne del programma pri nci pal e
real
*
8 function gfun( x )
C funzione di punto f i s s o
i mpl i ci t none
174
11.12. I sottoprogrammi
real
*
8 x
gfun=cos ( x )
return
end
La funzione che stiamo scrivendo di tipo real*8 ed la prima cosa che scriviamo per identicarla. C poi
la parola function e poi gfun(x). gfun ha un duplice signicato: il nome della function ma anche
il nome della variabile che contiene il risultato dellesecuzione 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) e
end.
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 allinterno della
function sia nel programma principale, ma pu avere nomi diversi (x, xold). Esempio di
function
dgfun
Per la derivata prima la function la seguente:
real
*
8 function dgfun( x )
C deri vata del l a funzione di punto f i s s o
i mpl i ci t none
real
*
8 x
dgfun= si n ( x )
return
end
Come cambia il programma principale?
Nella dichiarazione delle variabili dobbiamo dichiarare le due function gfun e dgfun
integer i t er , itmax
real
*
8 x0 , xold , xnew, scartol d , scartonew , t ol l
real
*
8 asi nt1 , asi nt2
real
*
8 gfun , dgfun
Unaltra istruzione (opzionale) dire che ci sono due sottoprogrammi esterni al programma principale,
subito dopo la dichiarazione delle variabili:
integer i t er , itmax
real
*
8 x0 , xold , xnew, scartol d , scartonew , t ol l
real
*
8 asi nt1 , asi nt2
real
*
8 gfun , dgfun
external gfun , dgfun
Inne, nel ciclo while, dove abbiamo bisogno della funzione di punto sso e della sua derivata, si ha:
do while ( ( scartonew. ge . t ol l ) . and. ( i t er . l e . itmax ) )
i t er = i t er +1
xnew=gfun( xold )
scartonew=abs (xnew xold )
asi nt1= scartonew/ scart ol d
asi nt2=abs ( dgfun(xnew) )
write (
*
,
*
) i t er , xnew, scartonew , asi nt1 , asi nt2
xold=xnew
scart ol d=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 dei
parametri. Perci deve essere dichiarato il tipo della function (integer, real, real*8, . . . )
175
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 listruzione di implicit none, si dichiarano tutte le variabili che sono
usate allinterno della function, si scrivono tutte le istruzioni che servono (anche cicli if, o while se
occorrono).
La function termina con le istruzioni di return e end.
Vediamo ora un altro esempio per cercare di capire meglio il concetto e luso delle functions.
Esempio 11.12.1 Supponiamo di dover scrivere un semplice programma che, dati in input, due valori a e
b, valuta la funzione f (x) =
p
x
2
+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 esempiousofunzioni
i mpl i ci t none
real
*
8 a , b, c , d
real
*
8 fun
write (
*
,
*
) s cr i vi val ore a
read (
*
,
*
) a
write (
*
,
*
) s cr i vi val ore b
read (
*
,
*
) b
C l a vari abi l e c ha i l val ore del l a funzione fun in a
c=fun( a)
C l a vari abi l e d ha i l val ore del l a funzione fun in b
d=fun(b)
write (
*
,
*
) a = , a , f ( a)= , c
write (
*
,
*
) b = , b, f (b)= , d
return
end
real
*
8 function fun( x )
i mpl i ci t none
real
*
8 x
fun=sqrt ( x
**
2+1. 0) +exp(x )
return
end
Un errore molto comune, nel fare programmi di questo tipo, in cui una function viene chiamata pi volte in
modo sequenziale (cio non allinterno di un ciclo while) quello di scrivere la stessa function tante volte
quante viene chiamata allinterno del programma!!! In questo caso un programma ERRATO sarebbe scritto
in questo modo
program esempiousofunzioni
C ATTENZIONE ! ! ! ! ! ! ! ! !
C QUESTO E UN ESEMPIO DI PROGRAMMA NON CORRETTO! ! ! !
C Durante l a compilazione s i ha i l seguente messaggio di errore :
C Global name fun at ( 1) i s already being used as a FUNCTION at ( 2)
i mpl i ci t none
real
*
8 a , b, c , d
real
*
8 fun
write (
*
,
*
) s cr i vi val ore a
read (
*
,
*
) a
write (
*
,
*
) s cr i vi val ore b
read (
*
,
*
) b
C l a vari abi l e c ha i l val ore del l a funzione fun in a
176
11.12. I sottoprogrammi
c=fun( a)
C l a vari abi l e d ha i l val ore del l a funzione fun in b
d=fun(b)
write (
*
,
*
) a = , a , f ( a)= , c
write (
*
,
*
) b = , b, f (b)= , d
stop
end
real
*
8 function fun( a)
i mpl i ci t none
real
*
8 a
fun=sqrt ( a
**
2+1. 0) +exp(a)
return
end
real
*
8 function fun(b)
i mpl i ci t none
real
*
8 b
fun=sqrt (b
**
2+1. 0) +exp(b)
return
end
La function fun sempre la stessa. Perch riscriverla due volte? Allinterno 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 labbiamo fatta dipendere da una generica variabile scalare
x, ma potremmo farla dipendere anche da una variabile che chiamiamo a o b). Sottolineiamo il fatto che
le variabili da cui dipende la function devono avere lo stesso signicato nel programma principale, ma non
necessariamente gli stessi nomi.
Quello che succede nel programma potrebbe essere descritto sinteticamente nel modo seguente:
programma
.
.
.
.
.
.
.
.
.
c=fun(a)
Il programma chiama la
function fun.
Nella function x =a.
La function restituisce in c
il valore
fun(a).
d=fun(b)
Il programma chiama la
function fun.
Nella function x =b.
La function restituisce in c
il valore
fun(b).
.
.
.
.
.
.
177
11. INTRODUZIONE AL FORTRAN 77
11.12.2 Le subroutines
Possiamo pensare di cambiare ancora il programma per lapprossimazione del punto sso, utilizzando
un diverso approccio: la parte che riguarda le iterazioni dello schema del punto sso la facciamo fare ad un
sottoprogramma che chiameremo, in qualche modo, nel programma principale. Scomporre il programma
principale 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 (e
anzich scrivere righe e righe di istruzioni da eseguire, le scriviamo solo una volta nel sottoprogramma e poi
le richiamiamo dove occorre).
program puntofisso
i mpl i ci t none
integer i t er , itmax
real
*
8 x0 , xnew, t ol l
external i t er pf i s s o
write (
*
,
*
) approssimazione i ni zi al e
read (
*
,
*
) x0
write (
*
,
*
) x0 = , x0
itmax=100
t ol l =1. d10
i t er = 0
cal l i t er pf i s s o ( i t er , itmax , x0 , t ol l , xnew)
write (
*
,
*
) approssimazione f i nal e , xnew
write (
*
,
*
) i t er azi oni ef f et t uat e , i t er
stop
end
Osserviamo che la subroutine chiamata tramite listruzione
call iterpsso( 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 modicati allinterno della subroutine, altri
no.
Nel programma principale non sono dichiarate le variabili che usiamo soltanto allinterno della
subroutine (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). Limportante che si
scriva 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 nella
scrittura!!!!) Esempio di
subroutine:
iterpsso
subroutine i t er pf i s s o ( i t er , itmax , x0 , t ol l , xnew)
C sottoprogramma che implementa l algoritmo del metodo di punto f i s s o
i mpl i ci t none
integer i t er , itmax
real
*
8 x0 , xnew, xold , t ol l , scnew, scold , asi nt1 , asi nt2
real
*
8 gfun , dgfun
external gfun , dgfun
scnew=2. 0
*
t ol l
scold=scnew
xold=x0
write (
*
,
*
) i t xkp1 scarto
1 asi nt1 asi nt2
write (
*
,
*
) i t er , xold , scnew
do while ( ( scnew. ge . t ol l ) . and. ( i t er . l e . itmax ) )
i t er = i t er +1
xnew=gfun( xold )
178
11.12. I sottoprogrammi
scnew=abs (xnew xold )
asi nt1= scnew/scold
asi nt2=abs ( dgfun(xnew) )
write (
*
,
*
) i t er , xnew, scnew, asint1 , asi nt2
xold=xnew
scold=scnew
end do
return
end
Una subroutine inizia con listruzione 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 unprogramma principale (implicit none, dichiarazione
delle variabili, istruzioni, cicli. . . );
la subroutine si chiude con le istruzioni return e end
la subroutine chiamata nel programma principale tramite listruzione
call nomesubroutine(parametri)
Il fatto che noi chiamiamo una subroutine nel programma principale (call) dice che la subroutine non un
programma a s stante. Quando termina lesecuzione di ci che scritto allinterno della subroutine si torna
indietro nel programma principale e si continua lelaborazione da quel punto. Listruzione return fa tornare
al programma principale. Le variabili non devono avere necessariamente lo stesso nome nel programma
principale e nella subroutine. Per esempio, possiamo scrivere:
call iterpsso( iter , itmax,x0,toll , xnew) nel programma principale
subroutine iterpsso(it,itmassime,x0,toll,xnew) nella subroutine.
Limportante che le variabili abbiamo lo stesso signicato (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 iterpsso(itmax,iter,x0, toll , xnew) ma poi nella subroutine scambiamo il ruolo di itmax e di iter,
subroutine iterpsso(it,itmassime,x0,toll,xnew) ,
allinterno della subroutine assegnato a it il valore di itmax, mentre a itmassime assegnato il valore di iter
(che zero allinizio). . . ..
Allinterno della subroutine si possono utilizzare altre variabili oltre a quelle che sono presenti tra i pa-
rametri della stessa. Limportante dichiararle nella subroutine. Tali variabili non passano nel programma
principale 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, considera
le possibili coppie di punti che si possono formare e calcola la corrispondente media geometrica e media
aritmetica. 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_geom
i mpl i ci t none
real
*
8 a , b, c
real
*
8 media1 , media2
write (
*
,
*
) s cr i vi t r e numeri a , b, c
read (
*
,
*
) a , b, c
cal l medie( a , b, media1 , media2)
write (
*
,
*
) coppie di punti : , a , b
write (
*
,
*
) media ari tmeti ca , media1
write (
*
,
*
) media geometrica , media2
179
11. INTRODUZIONE AL FORTRAN 77
cal l medie( a , c , media1 , media2)
write (
*
,
*
) coppie di punti : , a , c
write (
*
,
*
) media ari tmeti ca , media1
write (
*
,
*
) media geometrica , media2
cal l medie(b, c , media1 , media2)
write (
*
,
*
) coppie di punti : , b, c
write (
*
,
*
) media ari tmeti ca , media1
write (
*
,
*
) media geometrica , media2
stop
end
subroutine medie( a , b, media_aritm , media_geom)
i mpl i ci t none
real
*
8 a , b, media_aritm , media_geom
media_aritm= ( a+b)
*
0. 5
media_geom=sqrt ( a
*
b)
return
end
In questo caso la subroutine ha come variabili, nellordine, i due punti di cui calcolare la media aritmetica e
geometrica, 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 il
valore della media aritmetica e della media geometrica, abbiamo usato solo due variabili, rispettivamente
media1 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 valori
delle medie ottenute per le tre coppie di punti, non potremmo sovrascriverli ma dovremmo utilizzare sei va-
riabili distinte. Osserviamo, ancora una volta, che abbiamo ununica subroutine che viene chiamata pi volte
allinterno del programma principale.
11.13 Il formato
Fino ad ora abbiamo stampato i risultati dei nostri programmi su video e senza aver dato nessuna
indicazione su come visualizzare i dati.
Per avere un output elegante e ordinato, conviene usare listruzione format.
Vediamo questa istruzione direttamente allinterno di un programma desempio (quello del punto sso
appena visto nelle le righe di codice relative al ciclo do while, il resto rimane invariato) Programma
di punto sso
con
listruzione
format
do while ( ( scartonew. ge . t ol l ) . and. ( i t er . l e . itmax ) )
i t er = i t er +1
xnew=gfun( xold )
scartonew=abs (xnew xold )
asi nt1= scartonew/ scart ol d
asi nt2=abs ( dgfun(xnew) )
write (
*
, 100) i t er , xnew, scartonew , asi nt1 , asi nt2
xold=xnew
scart ol d=scartonew
end do
100 format (1x , i4 , 1x , f15 . 12 , 1x , e14 . 6 , 1x , 2e13 . 5)
Nellistruzione write, non abbiamo scritto write(
*
,
*
) ma write(
*
,100). Al posto del secondo simbolo *
abbiamo messo un numero (unetichetta).
Questo numero lo si trova scritto alla ne del ciclo while (ma possiamo metterlo ovunque allinterno del
programma dopo la dichiarazione delle variabili e prima della end nale) a partire dalla seconda colonna.
Dopo aver scritto il numero che contraddistingue il formato, abbiamo listruzione 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)
Nellesempio particolare:
180
11.13. Il formato
1x signica: lascia uno spazio bianco sulla riga;
i4 signica: 4 caratteri riservati per la prima variabile che di tipo intero (iter);
f15.12 : scrivi il valore della variabile xnew in formato sso, riservando 15 caratteri per il numero di cui
12 per la parte decimale;
e14.6: scrivi il valore di scartonew in formato esponenziale, riservando 14 caratteri per il numero, di
cui 6 per la mantissa;
2e13.5 : scrivi i 2 numeri successivi asint1 e asint2 nello stesso formato esponenziale, riservando a
ciascuno di essi 13 caratteri di cui 5 per la mantissa.
formato Signicato
i formato intero
e esponenziale
f sso
a alfanumerico
x spazi bianchi
Tabella 11.6: Il formato
formato Esempio
i i5 5 caratteri per un intero
e e14.6 14 caratteri, 6 per la mantissa
e18.10 18 caratteri, 10 per la mantissa
f f14.6 14 caratteri, 6 per le cifre decimali
f15.12 15 caratteri, 12 per le cifre decimali
a a5 una stringa di al pi 5 caratteri
x 1x 1 carattere bianco
3x 3 caratteri bianchi
Tabella 11.7: Esempi di formato
Specicando 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 output
usando un formato, togliere il formato, compilare e rieseguire il programma per vericare se lerrore dipende
dal formato!
Lo stesso formato pu essere utilizzato da pi righe di write se il formato si riferisce a variabili dello
stesso tipo. Le stringhe di caratteri possono essere scritte mediante un formato opportuno.
Vediamo di nuovo il programma di prima:
i t er = 0
xold=x0
write (
*
, 98) i t , xk , scarto , asi nt1 , asi nt2
write (
*
, 99) i t er , xold , scartonew
do while ( ( scartonew. ge . t ol l ) . and. ( i t er . l e . itmax ) )
C t ut t o i nvari ato come prima
write (
*
, 100) i t er , xnew, scartonew , asi nt1 , asi nt2
xold=xnew
scart ol d=scartonew
end do
98 format (1x , a4 , 1x , a15 , 1x , a14 , 1x , 2a13)
99 format (1x , i4 , 1x , f15 . 12 , 1x , e14 . 6)
100 format (1x , i4 , 1x , f15 . 12 , 1x , e14 . 6 , 1x , 2e13 . 5)
181
11. INTRODUZIONE AL FORTRAN 77
stop
end
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 di
risultati messi in colonna luno dopo laltro in maniera ordinata.
11.14 Files di dati
Piuttosto che visualizzarli sulla nestra di shell del computer, conviene salvare i risultati in un le di dati.
Il modo pi semplice per fare questo far s che durante lesecuzione del programma venga generato un le
di scrittura di dati: si apre il le allinterno del programma principale associando ad esso un numero (label)
mediante listruzione open. Per esempio, dopo la dichiarazione delle variabili, scriviamo
open(10, le=rispuntosso.txt)
Le istruzioni di write saranno poi associate a quella label e scritte su quel le.
Quindi, al posto di scrivere write(
*
,98) andremo a scrivere write(10,98) perch dobbiamo scrivere la stampa
dei risultati sul le contrassegnato dalletichetta 10.
Prima di chiudere il programma, chiudiamo il le con listruzione close.
close(10) Esempio di
le di dati
program puntofisso
C programma di punto f i s s o
C t ut t o come prima
C dichiarazione del l e var i abi l i
open(10 , f i l e = ri spunt of i sso . t xt )
write (
*
,
*
) approssimazione i ni zi al e
read (
*
,
*
) x0
write (
*
,
*
) x0 = , x0
C i l programma continua con l e i s t r uzi oni gia vi s t e
C l e uniche modifiche saranno nel l e write :
write (10 , 98) i t , xk , scarto , asi nt1 , asi nt2
write (10 , 99) i t er , xold , scartonew
C ora i l c i c l o do while
C al l interno abbiamo
write (10 , 100) i t er , xnew, scartonew , asi nt1 , asi nt2
C f i ni s c e i l c i c l o do while
C scriviamo i formati
close ( 10)
stop
end
Una volta che il programma stato compilato correttamente ed eseguito, la stampa dei risultati non sar
pi sul video ma verr generato un le (con il nome che abbiamo dato allinterno del programma) sul quale
troveremo i risultati che prima erano sul video.
Se rieseguiamo il programma questo le sar riscritto da capo. Quindi se dobbiamo eseguire il
programma pi volte per diverse simulazioni, il le 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 quasi
simile 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 unallocazione 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
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 x
i
per i =1, 2, . . . n le componenti del vettore
x.
Loutput la variabile medi a =
(

n
i =1
x
i
)
n
Per calcolare la variabile medi a faremo la somma in questo modo (medi a la cosiddetta variabile di
accumulo):
partiamo da medi a =0
quindi facciamo medi a =medi a +x
1
(prima componente della somma)
poi medi a =medi a +x
2
(il risultato x
1
+x
2
)
poi medi a =medi a +x
3
(avremo x
1
+x
2
+x
3
)
e cos via no a medi a =medi a +x
n
(in medi a avremo tutta la somma dei vettori)
Dopo si fa medi a =medi a/n e avremo il risultato nale.
11.16 Ciclo do
Per applicare la formula per ottenere la variabile medi a possiamo pensare a un ciclo do while scritto
come:
media =0. d0
i =0
do while ( i . l e . n)
i =i +1
media = media + x ( i )
end do
media= media/n
Noi non useremo questo approccio ma una struttura equivalente ad essa che prende il nome di ciclo do:
media = 0. d0
do i =1,n
media = media + x ( i )
end do
media= media/n
Programma
sulla media
dei vettori
program mediavettori
C programma che cal col a l a media del l e componenti di un vet t or e
i mpl i ci t none
integer n, i
real
*
8 x ( 20) , media
write (
*
,
*
) lunghezza ef f et t i va del vettore
read (
*
,
*
) n
write (
*
,
*
) lunghezza del vet tore , n
i f (n. gt . 20) then
write (
*
,
*
) n > massimo consentito , n
stop
endi f
do i =1,n
write (
*
,
*
) componente , i , sima del vettore
read (
*
,
*
) x ( i )
end do
do i =1,n
write (
*
,
*
) elemento , i , = , x ( i )
end do
media=0. d0
183
11. INTRODUZIONE AL FORTRAN 77
do i =1,n
media = media + x ( i )
end do
media =media/n
write (
*
,
*
) media , media
stop
end
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 il
momento da tastiera);
Le singole componenti vengono inserite da tastiera tramite unapplicazione del ciclo do;
Facciamo un controllo su n, se pi piccolo o pi grande della dimensione massima. Attenzione: il
ciclo if si pu usare anche per interrompere il programma! Se n > 20 interrompiamo bruscamente il
programma mediante listruzione stop allinterno 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 i ndi ce= val or ei ni zi al e , val oref i nal e , incremento
{ i st r uzi oni }
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. d0
do i =2,n, 2
sommapari=sommapari + x( i )
end do
Lindice i vale i =2, i =2+2 =4, i =4+2 =6. . . .
Attenzione: se valoreiniziale > valorenale e lincremento 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 abel i ndi ce= val i ni zi al e , val f i nal e , incremento
{ i st r uzi oni }
l abel continue
dove label un numero (etichetta) che si trova allinizio del ciclo e poi alla ne per chiuderlo (label
continue). La label dellistruzione 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 function
deve dare un unico valore come output e quindi non pu dare un vettore) e come variabili di input e output
nelle subroutines.
Quando dichiariamo i vettori in un sottoprogramma, possiamo dichiararli con la loro dimensione
effettiva. Vediamo un esempio di function che calcola la norma euclidea di un vettore.
184
11.16. Ciclo do
real
*
8 function norma2(n, x )
i mpl i ci t none
integer n, i
real
*
8 x (n)
norma2=0. d0
do i =1,n
norma2=norma2 + x ( i )
**
2
end do
norma2=dsqrt (norma2)
return
end
Attenzione a come si passano i vettori nelle functions! Abbiamo scritto real
*
8 function norma2(n,x). Nel
programma principale (che qui non abbiamo scritto) la function sar chiamata, ad esempio, tramite le
istruzioni
al 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 nelluso di functions o di subroutines di passare i vettori con la loro
dimensione! 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 i
parametri della function. Si deve scrivere solo x.
11.16.2 Leggere i dati di input da le
chiaro che se un vettore ha molte componenti diventa proibitivo assegnare le componenti del vettore
tramite tastiera. . . possibile leggere i dati di input da un le gi esistente, cui viene associata una label e che
viene aperto allinizio del programma. Ora sono le istruzioni di read che vengono associate alla label del
le di lettura dati. Vediamo il programma di prima come cambia (e nello stesso calcoliamo la media delle
componenti del vettore utilizzando una function).
program mediavettori
C programma che cal col a l a media del l e componenti di un vet t or e
i mpl i ci t none
integer n, i
real
*
8 x ( 20) , media , funmedia
open(10 , f i l e = vettorei nput . dat )
read( 10 ,
*
) n
i f (n. gt . 20) then
write (
*
,
*
) n > massimo consentito , n
stop
endi f
C nel l a ri ga seguente troviamo i l c i c l o do i mpl i ci t o
read( 10 ,
*
) ( x ( i ) , i =1,n)
C analogamente possiamo appl icare i l do e s pl i c i t o
C che ora e commentato
c do i =1,n
c read ( 10 ,
*
) x( i )
c end do
do i =1,n
write (
*
,
*
) elemento , i , = , x ( i )
end do
185
11. INTRODUZIONE AL FORTRAN 77
media= funmedia(n, x )
write (
*
,
*
) media , media
close ( 10)
stop
end
real
*
8 function funmedia(n, x )
i mpl i ci t none
integer i , n
real
*
8 x (n)
funmedia=0. d0
do i =1,n
funmedia = funmedia + x ( i )
end do
funmedia =funmedia/n
return
end
Per la lettura dei dati di input si pu utilizzare sia il ciclo do che abbiamo visto no ad ora sia quello che
chiamato do implicito.
Essenzialmente quando si devono leggere dei dati da un le, il compilatore FORTRAN legger delle
stringhe di caratteri e le convertir in numeri.
Ci sono delle differenze sulle modalit di come avviene la lettura mediante il do esplicito o implicito, ma
non entriamo nei dettagli. Ci che importa ricordare che ci deve essere corrispondenza nellordine in cui le
variabili sono scritte sul le 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 stessa
riga nel le di dati.
Le variabili di tipo reale vanno scritte con il punto decimale. Le variabili di tipo intero vanno scritte senza
il punto decimale.
Le componenti di un vettore vanno scritte o su una riga o in colonna componente per componente, in
maniere del tutto indifferente se usiamo il ciclo do implicito nel programma principale. Vanno scritte in
colonna, se usiamo il ciclo do esplicito. Esempi di le
vettorein-
put.dat
Se usiamo il do implicito per la lettura dei dati del vettore, possiamo scrivere indifferentemente il le dei
dati nei due modi seguenti.
Il primo modo di scrivere sul le di dati, sulla prima riga il valore di n e sulla seconda riga le componenti
del vettore.
4
1. 2. 3. 4.
Il secondo modo di scrivere sulla prima riga il valore di n e sulle righe successive le componenti del
vettore.
4
1.
2.
3.
4.
Se usiamo il ciclo do esplicito per la lettura dei dati di input, il vettore deve essere scritto come vettore
colonna, quindi dobbiamo usare il secondo approccio.
186
11.17. Matrici in FORTRAN
11.17 Matrici in FORTRAN
InFORTRAN, 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 che
fare 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 ) (i
indice 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.
Loutput il vettore y di componenti y(i ) dove y = Ax
Sappiamo che y
i
=(Ax)
i
=

n
j =1
A
i j
x
j
.
Traduciamo il tutto in FORTRAN con il seguente programma. Programma
sul prodotto
matrice-
vettore
program matrvett
C programma per i l cal col o del prodotto di una matrice A per un
C vet t or e x
C dati di input :
C n dimensione e f f e t t i v a del l a matrice ( quadrata) e
C del vet t or e x
C A matrice di dimensione nxn
C x vet t or e di lunghezza n
C dati di output
C y vet t or e di lunghezza n uguale al prodotto Ax
C
i mpl i ci t none
integer i , j , n
real
*
8 A( 20 , 20) , x ( 20) , y( 20)
open(10 , f i l e = matrvett . dat )
open(11 , f i l e = matrvett . r i s )
C l et t ur a del l a dimensione n
read( 10 ,
*
) n
C l et t ur a del l a matrice A
C usiamo un c i c l o do i =1,n e s pl i c i t o e un c i c l o do i mpl i ci t o
C leggiamo g l i elementi che s i trovano sul l a ri ga i sima
C e l a l et t ur a viene f at t a ri ga per ri ga
do i =1,n
read( 10 ,
*
) (A( i , j ) , j =1,n)
end do
C
C l et t ur a del vet t or e x
read( 10 ,
*
) ( x ( i ) , i =1,n)
C s c r i t t ur a dei dati di input sul f i l e dei r i s ul t at i
write ( 11 ,
*
) dimensione , n
write ( 11 ,
*
) matrice A
do i =1,n
write ( 11 ,
*
) (A( i , j ) , j =1,n)
end do
write ( 11 ,
*
) vett ore x
write ( 11 ,
*
) ( x ( i ) , i =1,n)
C prodotto matricevet t or e : l elemento i simo del prodotto
C matricevet t or e e dato dal l a somma per j =1,n di A( i , j )
*
x( j )
do i =1,n
y( i ) = 0. d0
do j =1,n
y( i ) = y( i ) + A( i , j )
*
x ( j )
187
11. INTRODUZIONE AL FORTRAN 77
end do
end do
write ( 11 ,
*
) vett ore y=Ax
write ( 11 ,
*
) ( y( i ) , i =1,n)
stop
end
La matrice stata dichiarata come real
*
8 A(20,20): signica che il programma va bene per matrici che
possono 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 prodotto
matrice-vettore.
Per calcolare le componenti del prodotto matrice-vettore abbiamo prima posto y(i)=0.d0 in modo
da poter fare la somma dei vari termini accumulandoli di volta in volta.
Abbiamo letto i dati di input da le. Ricordiamo che il numero che scriviamo allinterno dellistruzione
che apre il le open(10, file=nomefile.dat) lo scegliamo noi. Se apriamo pi les a ciascun
le deve essere associato un numero diverso, in modo da poter leggere (se il le di lettura) o scrivere
(se il le 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 una
subroutine), allinterno del sottoprogramma si deve necessariamente dichiarare la matrice (o le matrici) con
la 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 = A
T
.
program matrtrasposta
C programma che crea l a matrice B=A^T
C dati di input :
C n dimensione e f f e t t i v a del l a matrice ( quadrata)
C A matrice di dimensione nxn
C dati di output
C B matrice t raspost a di A
C
i mpl i ci t none
integer i , j , n
real
*
8 A( 20 , 20) , B(20 , 20)
open(10 , f i l e = matrice . dat )
open(11 , f i l e = r i st r aspost a . dat )
C l et t ur a del l a dimensione n
read( 10 ,
*
) n
C l et t ur a del l a matrice A
C usiamo un c i c l o do i =1,n e s pl i c i t o e un c i c l o do i mpl i ci t o
C leggiamo g l i elementi che s i trovano sul l a ri ga i sima e
C l a l et t ur a viene f at t a ri ga per ri ga
do i =1,n
read( 10 ,
*
) (A( i , j ) , j =1,n)
end do
write ( 11 ,
*
) dimensione , n
write ( 11 ,
*
) matrice A
do i =1,n
write ( 11 ,
*
) (A( i , j ) , j =1,n)
end do
cal l trasposta (n, A, B)
188
11.17. Matrici in FORTRAN
write ( 11 ,
*
) matrice trasposta B
do i =1,n
write ( 11 ,
*
) (B( i , j ) , j =1,n)
end do
stop
end
subroutine trasposta (n, A, B)
i mpl i ci t none
integer i , j , n
real
*
8 A(20 , n) , B(20 , n)
do i =1,n
do j =1,n
B( i , j )=A( j , i )
end do
end do
return
end
Anche per le matrici, vale la stessa osservazione che abbiamo fatto per i vettori: quando si lavora con
functions 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, in
ciascuno 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 5050. Possiamo andare ad aumentare la dimensione massima delle matrici e dei vettori da 20 a
50, ricompilare il programma ed eseguirlo.
Cosa pu succedere? Se da qualche parte ci siamo dimenticati di correggere il 20 con il 50. . . il codice
dar 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 voler
modicare il programma della trasposta di una matrice), scriveremo
program matrtrasposta
C programma che crea l a matrice B=A^T
C t ut t i g l i al t r i commenti come prima
C
i mpl i ci t none
integer nmax
parameter (nmax=20)
integer i , j , n
real
*
8 A(nmax, nmax) , B(nmax, nmax)
C t ut t o i l r es t o i nal t erat o f i no al l a chiamata del l a subroutine
cal l trasposta (nmax, n, A, B)
subroutine trasposta (nmax, n, A, B)
i mpl i ci t none
integer i , j , n, nmax
real
*
8 A(nmax, n) , B(nmax, n)
do i =1,n
do j =1,n
B( i , j )=A( j , i )
end do
end do
189
11. INTRODUZIONE AL FORTRAN 77
return
end
Parameter
nmax La variabile nmax un parametro che viene denito una volta per tutte mediante listruzione
parameter (nmax=20): allinterno 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 listruzione
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 non
tutte 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 dalla
prima allultima riga, poi tutti gli elementi della seconda colonna dalla prima allultima riga, e cos via . . .
Sia nmax=6, A(nmax,nmax)
Apu avere al pi nmaxrighe per nmaxcolonne. nmax * nmax= 36 celle di memoria sono predisposte
per i valori della matrice, a partire da A(1,1)
1 7 13 19 25 31
2 8 14 20 26 32
3 9 15 21 27 33
4 10 16 22 28 34
5 11 17 23 29 35
6 12 18 24 30 36
Cosa succede se la dimensione effettiva della matrice n < nmax? Allinterno del programma principale
i valori della matrice vengono memorizzati nelle celle di memoria che corrispondono alla sottomatrice di
dimensione n x n.
Sia n=4. Si ha:
1 7 13 19 25 31
2 8 14 20 26 32
3 9 15 21 27 33
4 10 16 22 28 34
5 11 17 23 29 35
6 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 allinterno del sottoprogramma pensata come se fosse nmax=n
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
190
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 non
corretta!!!
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 la
traccia delle matrici C = AB e D =BA.
Scrivere dunque un programma in linguaggio FORTRAN che:
1. legge n, A e B;
2. calcola le matrici C = AB e D =BA 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 due
matrici e quella per la traccia di una matrice. Date due matrici quadrate A e B si ha C = AB con elementi
c
i j
=
n

k=1
a
i k
b
k j
per i , j =1, 2, . . . , n.
Traducendo in pseudo-linguaggio questa formula abbiamo:
1 Per i=1,n
2 Per j=1,n
3 C(i,j)=0 ;
4 C inizializzo a zero i valori della matrice perch devo fare una somma;
5 Per k=1,n
6 C(i,j)= C(i,j) + A(i,k)*B(k,j)
7 Fine-Per
8 Fine-Per
9 Fine-Per
Sar proprio questo che faremo nella subroutine PRODMATR
Invece la traccia di una matrice A data da t r acci a =t r (A) =

n
i =1
a
i i
. Sotto forma di pseudo-algoritmo
abbiamo
1 traccia=0 ;
2 C inizializzo a zero la variabile traccia perch devo fare una somma;
3 Per i=1,n
4 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 anchessa chiamata due volte nel programma
principale.
Unultima 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
11. INTRODUZIONE AL FORTRAN 77
program prodottomatri ci etracci a
i mpl i ci t none
integer nmax
parameter (nmax=20)
integer n, i , j
real
*
8 A(nmax, nmax) , B(nmax, nmax) , C(nmax, nmax) , D(nmax, nmax)
real
*
8 trac , al f a , beta
open(10 , f i l e = input . dat )
read( 10 ,
*
) n
do i =1,n
read( 10 ,
*
) (A( i , j ) , j =1,n)
end do
do i =1,n
read( 10 ,
*
) (B( i , j ) , j =1,n)
end do
cal l prodmatr (nmax, n, A, B, C)
cal l prodmatr (nmax, n, B, A,D)
al f a=t rac (nmax, n, C)
beta=t rac (nmax, n,D)
write (
*
,
*
) t r acci a del l a matrice C , al f a
write (
*
,
*
) t r acci a del l a matrice D , beta
close ( 10)
stop
end
subroutine prodmatr (nmax, n, A, B, C)
i mpl i ci t none
integer nmax, n, i , j , k
real
*
8 A(nmax, n) , B(nmax, n) , C(nmax, n)
do i =1,n
do j =1,n
C( i , j ) =0. d0
do k=1,n
C( i , j )= C( i , j ) + A( i , k)
*
B( k , j )
end do
end do
end do
return
end
real
*
8 function t rac (nmax, n, A)
i mpl i ci t none
integer nmax, n, i
real
*
8 A(nmax, n)
t rac =0. d0
do i =1,n
t rac=t rac+ A( i , i )
end do
return
end
Un esempio di le di input pu essere il seguente:
192
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 (riga
per 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 abbiamo
scritto bene, daremo anche il valore esatto dellintegrale Iex (che avremo precedentemente calcolato con
carta e penna) in modo da calcolare lerrore esatto.
La funzione da approssimare, gli estremi di integrazione, il valore esatto dellintegrale saranno funzione
o variabili del programma:
dati di input:
numero di suddivisioni n
estremi di integrazione a, b
dati di output:
valore approssimato dellintegrale (usiamo per esso la variabile i t r ap)
errore esatto, che chiamiamo er r t r ap.
Il programma sar cos composto:
programma principale
function in cui scriviamo la funzione integranda.
function in cui scriviamo la primitiva della funzione integranda (per calcolare il valore esatto
dellintegrale)
function in cui applichiamo la formula semplice dei trapezi e che chiamiamo trapsemplice.
Tra i dati che ci facciamo stampare sul le di output, conviene farsi stampare una specie di promemoria
sul problema che stiamo risolvendo (formula che stiamo applicando, gli estremi di integrazione a e b, il
valore esatto dellintegrale Iex e, come stringa di caratteri, anche quale la funzione integranda). In tal
modo 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 sullintervallo
[a, a +h], poi su [a +h, a +2h] e cos via, dove h lampiezza dei singoli sottointervalli, che la stessa su
tutti i sottointervalli avendo scelto di suddividere in parti uguali lintervallo [a, b], quindi h =
b a
n
. Su ogni
sottointervallo possiamo applicare la formula semplice dei trapezi in modo da avere il valore nale dellinte-
grale approssimato come somma dei contributi su ciascun sottointervallo. A tal scopo useremo, su ciascun
sottointervallo, una function che applica la formula semplice dei trapezi.
Possiamo quindi fare un ciclo do in modo da applicare la formula semplice allintervallino [x0, x1], do-
ve x0 rappresenta lestremo inferiore e x1 lestremo superiore di ciascun sottointervallo. Ogni volta aggior-
neremo in maniera appropriata i due estremi (tenendo conto che x1 nellintervallo successivo diventa x0:
lestremo superiore di ogni intervallino diventa lestremo inferiore nellintervallino successivo).
193
11. INTRODUZIONE AL FORTRAN 77
Scriviamo sotto forma di pseudocodice, quello che dobbiamo fare:
Dati di input: a, b, n
Dati di output: i t r ap, er r t r ap
1 h (b a)/n ;
2 calcolare Iex ;
3 inizializzare i t r ap: i t r ap 0.d0 ;
4 inizializzare x0 del primo sottointervallo x0 a ;
5 Per i =1, n
6 assegnare il valore di x1: x1 x0+h ;
7 applicare la formula dei trapezi sullintervallino i -simo e sommare il contributo al valore i t r ap:
i t r ap i t r ap +t r apsempl i ce(x0, x1) ;
8 aggiornare x0: x0 x1 ;
9 Fine-Per
10 stampare lintegrale approssimato i t r ap ;
11 calcolare e stampare lerrore esatto er r t r 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 lintegrale
_
0.5
0

p
1x
2
, f (x) =

p
1x
2
. Per scrivere in Fortran, basta
ricordare che =2arcsin(1). Allora la function diventa:
real
*
8 function fun( x )
i mpl i ci t none
real
*
8 x , pi
pi =2
*
asin ( 1 . )
fun= pi / sqrt ( 1. 0d0 x
**
2)
return
end
Per il calcolo del valore esatto dellintegrale, dobbiamo calcolare analiticamente lintegrale (faremo degli
esempi di applicazione delle formule di quadratura conintegrali di cui possibile conoscere lintegrale esatto,
quindi preliminarmente, avremo calcolato a mano lintegrale, 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 dellintegrale mediante listruzione Iex = Fpr i m(b) Fpr i m(a), dove Fpr i m il nome dato alla
function della primitiva. Nellesempio, Fpr i m(x) =arcsin(x) e la function viene costruita di conseguenza.
real
*
8 function Fprim( x )
real
*
8 pi , x
pi =2.
*
asin ( 1 . )
Fprim= pi
*
asin ( x )
return
end
Invece, la functiontrapsemplicenon nientaltroche lapplicazione della formula semplice dei trapezi
sullintervallo di estremi x0 e x1 dati in input alla function stessa. Allinterno della trapsemplice viene
chiamata la function della funzione integranda.
real
*
8 function trapsemplice ( a , b)
real
*
8 a , b, fun
trapsemplice=(ba ) / 2.
*
( fun( a)+fun(b) )
return
end
Proviamo ora ad applicare la formula composta dei trapezi partendo da una sola suddivisione n =1, e poi
raddoppiando ogni volta il numero delle suddivisioni: n =2, n =4, n =8, . . . In tal caso conviene modicare
il 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
11.19. Esercizi
per n =2 e cos via, raddoppiando ogni volta il numero di suddivisioni. In questo modo, conservando i valori
dellerrore esatto tra due suddivisioni successive, possiamo calcolare il rapporto tra lerrore alla suddivisione
n/2 e lerrore alla suddivisione n. Memorizziamo questo rapporto nella variabile r at e e la stampiamo per
ogni suddivisione n > 1. Dai risultati saremo in grado di capire se lerrore decresce come
1
n
2
oppure no e,
quindi, se sono vericate le ipotesi per la formula composta dellerrore 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, abbiamo
Dati di input: a, b
Dati di output: i t r ap, er r t r ap, r at e per ogni suddivisione
1 n 1 ;
2 Fintantoch n <128
3 inizializzare i t r ap: i t r ap 0.d0 ;
4 porre h (b a)/n
5 ; inizializzare x0 del primo sottointervallo: x0 a ;
6 applicare lalgoritmo della formula composta dei trapezi ;
7 stampare i t r ap per quel valore di n ;
8 calcolare lerrore esatto er r t r ap ;
9 Se n >1 allora
10 calcolare il rapporto r at e tra lerrore al passo n/2 e lerrore al passo n
11 altrimenti
12 r at e 1 (non ha signicato per n =1)
13 Fine-Se
14 stampare n, i t r ap, er r t r ap, r at e ;
15 aggiornare una variabile er r t r apol d che memorizza lerrore al passo precedente:
er r t r apol d er r t r ap ;
16 aggiornare n: n 2n ;
17 Fine-Fintantoch
11.19 Esercizi
Esercizio 11.19.1 Scrivere unprogramma FORTRANche, assegnate due matrici Ae Bdi dimensione n30,
esegua il prodotto C=AB; memorizzi in un vettore x gli elementi della diagonale principale di C; calcoli la
norma euclidea di x.
I dati di input siano letti da un le 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 C
i 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 prodottomatrici
i mpl i ci t none
integer nmax
parameter (nmax=30)
195
11. INTRODUZIONE AL FORTRAN 77
integer n, i , j
real
*
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( 20 ,
*
) n
write ( 21 ,
*
) dimensione n , n
write ( 21 ,
*
) matrice A
do i =1,n
read( 20 ,
*
) (A( i , j ) , j =1,n)
write ( 21 ,
*
) (A( i , j ) , j =1,n)
end do
write ( 21 ,
*
) matrice B
do i =1,n
read( 20 ,
*
) (B( i , j ) , j =1,n)
write ( 21 ,
*
) (B( i , j ) , j =1,n)
end do
cal l matrmatr (nmax, n, A, B, C)
do i =1,n
x ( i )= C( i , i )
end do
euc=normaeuc(n, x )
write ( 21 ,
*
) norma eucl idea di x , euc
stop
end
subroutine matrmatr (nmax, n, A, B, C)
i mpl i ci t none
integer nmax, n, i , j , k
real
*
8 A(nmax, n) , B(nmax, n) , C(nmax, n)
do i =1,n
do j =1,n
C( i , j )= 0. d0
do k=1,n
C( i , j )= C( i , j ) + A( i , k)
*
B( k , j )
end do
end do
end do
return
end
real
*
8 function normaeuc(n, x )
i mpl i ci t none
integer n, i
real
*
8 x (n)
normaeuc=0. d0
do i =1,n
normaeuc= normaeuc + x ( i )
**
2
end do
normaeuc= sqrt ( normaeuc)
return
end
196
11.19. Esercizi
Esercizio 11.19.2 Si vuole ricavare unapprossimazione della soluzione del sistema lineare Ax = b
effettuando un passo del metodo del gradiente coniugato, secondo il quale
x
1
=x
0
+
0
r
0
dove

0
=
r
T
0
r
0
r
T
0
Ar
0
e r
0
=bAx
0
.
Il vettore x
0
sia scelto come x
0
= D
1
b dove D la matrice diagonale che si ricava da A prendendo gli
elementi 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 x
0
= D
1
b utilizzando la subroutine DIAGMAT che effettua il prodotto di una
matrice diagonale con un vettore.
5. calcola y = Ax
0
utilizzando la subroutine MATRVETT che fa il prodotto matrice vettore;
6. calcola il vettore r
0
=by;
7. calcola il prodotto z = Ar
0
utilizzando la subroutine MATRVETT;
8. calcola d =r
T
0
r
0
usando la function PSCAL che effettua il prodotto scalare tra due vettori;
9. calcola t =r
T
0
z usando la function PSCAL;
10. calcola
0
=d/t
11. calcola e stampa x
1
=x
0
+
0
r
0
.
Svolgimento Osserviamo che la matrice diagonale D ha tutti gli elementi uguali a zero eccetto quelli
della diagonale principale, che nellesercizio proposto, devono essere uguali agli elementi della diagonale
principale di A. Per risolvere lesercizio, si pu costruire la matrice D mediante le istruzioni
do i =1,n
do j =1,n
D( i , j )=0. 0
i f ( i . eq. j ) then
D( i , j )=A( i , j )
end i f
end do
end do
Oppure, si pu costruire un vettore che rappresenta la diagonale principale della matrice A. Nello
svolgimento, noi seguiamo questa seconda strada e ne terremo conto nelle subroutine INVD e DIAGMAT.
program esgradcon
i mpl i ci t none
integer nmax
parameter (nmax=40)
integer n, i , j
real
*
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 , al f a , pscal
C matrd e i l vet t or e che contiene g l i elementi del l a diagonale pri nci pal e di A
open(10 , f i l e = input . dat )
read( 10 ,
*
) n
do i =1,n
read( 10 ,
*
) (A( i , j ) , j =1,n)
197
11. INTRODUZIONE AL FORTRAN 77
end do
read( 10 ,
*
) (b( i ) , i =1,n)
do i =1,n
matrd( i )= A( i , i )
end do
cal l invd(n, matrd , inversad )
cal l diagmat (n, inversad , b, x0)
cal l matrvett (nmax, n, A, x0 , y)
do i =1,n
r0 ( i )=b( i )y( i )
end do
cal l matrvett (nmax, n, A, r0 , z )
d=pscal (n, r0 , r0 )
t =pscal (n, r0 , z )
al f a=d/ t
do i =1,n
x1( i )=x0( i )+ al f a
*
r0 ( i )
write (
*
,
*
) x1( i )
end do
stop
end
subroutine invd(n, d, dd)
i mpl i ci t none
integer n, i
real
*
8 d(n) , dd(n)
do i =1,n
dd( i ) =1. /d( i )
end do
return
end
subroutine diagmat (n, dd, b, x )
i mpl i ci t none
integer n, i
real
*
8 b(n) , dd(n) , x (n)
do i =1,n
x ( i )= dd( i )
*
b( i )
end do
return
end
subroutine matrvett (nmax, n, A, x , y)
i mpl i ci t none
integer nmax, n, i , j
real
*
8 A(nmax, n) , x (n) , y(n)
do i =1,n
y( i ) =0. d0
do j =1,n
y( i )=y( i )+A( i , j )
*
x ( j )
end do
end do
return
end
real
*
8 function pscal (n, x , y)
198
11.19. Esercizi
i mpl i ci t none
integer n, i
real
*
8 x (n) , y(n)
pscal =0. d0
do i =1,n
pscal =pscal + x ( i )
*
y( i )
end do
return
end
199
A
P
P
E
N
D
I
C
E
A
CENNI SU GNUPLOT
Il matematico sbircia dietro le spalle
di Dio per trasmettere la bellezza
della Sua creazione al resto delle Sue
creature.
Paul Erds
A.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
A.2 Graci di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
A.3 Salvare i graci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
A.4 Graci da les di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
A.5 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
A.6 Print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
A.1 Introduzione
Gnuplot un programma utile per fare graci (sia di funzioni, sia di dati), distribuito gratuitamente per
sistemi operativi Linux, Windows, e altri ancora.
Nel seguito vedremo alcuni comandi essenziali di Gnuplot al ne di poter visualizzare funzioni che di-
pendono da una sola variabile e creare graci 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 modica Marzo 2010, in ambiente Linux.
Per poter lavorare in ambiente Gnuplot, da una nestra di shell digitiamo gnuplot e poi clicchiamo il
tasto di invio. Lambiente gnuplot si presenta come nella Figura A.1
Per uscire dallambiente gnuplot, si digita exit. Per avere un help on-line si digita help.
Tutte le istruzioni per fare e salvare graci, si basano su comandi scritti sulla nestra del gnuplot. Si pos-
sono anche scrivere pi istruzioni da eseguire in un le script che viene poi lanciato in ambiente gnuplot
(vedremo successivamente come).
A.2 Graci di funzioni
Per fare il graco di una funzione, basta scrivere il comando
plot [a:b] f(x)
201
A. CENNI SU GNUPLOT
Figura A.1: Ambiente gnuplot
Figura A.2: Finestra di shell dove si sta lavorando in ambiente gnuplot e graco della funzione cos(x)
nellintervallo [, ].
dove, al posto di a e b scriviamo i valori numerici degli estremi dellintervallo in cui vogliamo visualizzare
la funzione f(x). La funzione f(x) si scrive usando le stesse notazioni del Fortran. Dopo aver scritto il
comando precedente e cliccato il tasto di invio, si apre una nestra con il graco della funzione, come si pu
vedere nella Figura A.2.
Se si scrive semplicemente plot f(x) il graco fatto sullintervallo [10, 10].
Vediamo degli esempi
plot [-pi: pi] cos(x) : fa il graco della funzione cos(x) nellintervallo [, ]. Osserviamo
202
A.2. Graci di funzioni
Figura A.3: Istruzione: plot sin(x) with points pt 5
che pi ha il signicato di .
plot x**2 -2*x+1: fa il graco della parabola x
2
2x +1 nellintervallo [10, 10] (non essendo
stato specicato).
plot [0:3] log(x): fa il graco della funzione ln(x) nellintervallo [0, 3]
Ogni volta, il graco viene sovrascritto, perdendo quello precedente.
Per fare il graco di pi funzioni denite nello stesso intervallo, sulla stessa gura, 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 graci delle due funzioni seno e coseno in due colori
diversi. La legenda, in alto a destra, spiega le diverse funzioni del graco.
plot x, x**2, x**3: abbiamo i graci delle funzioni x, x
2
e x
3
nellintervallo [10, 10].
possibile cambiare lo stile del graco (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 nellinsieme {1, 0, 1, . . . 22}. Si provi a eseguire il
comando test e vedere il graco che viene prodotto per vedere i vari colori e stili.
Per esempio:
plot sin(x) with linespoints, cos(x) with points produce un graco 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 graco con la linea di colore nero.
Si pu variare lo spessore delle linee e dei punti mediante i comandi linewidth (o, in maniera del tutto
equivalente, 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 unampiezza pari 2 volte quella di default (si veda la
Figura A.4).
plot sin(x) with linespoints lw 2 pt 5 : la linea larga 2 lw mentre i punti hanno
dimensione 5 pt (si veda la Figura A.5).
Per fare un graco semilogaritmico o logaritmico, prima di fare il graco, si digita il comando
set logscale: per avere un graco logaritmico
set logscale y: per avere un graco semilogaritmico lungo lasse y.
set logscale x: per avere un graco semilogaritmico lungo lasse x.
203
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
A.3. Salvare i graci
Dopo si scrive la funzione di cui fare il graco in scala logaritmica (o semilogaritmica), mediante il comando
plot.
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 graco che abbia la stessa scala lungo lasse x e y. Il comando da utilizzare il
seguente:
set size ratio -1
Altri comandi utili sono i seguenti:
Per mettere unetichetta sullasse delle x o delle y, si scrive il comando
set xlabel "nome da mettere su asse x"
dove tra apici si scrive letichetta dellasse delle x. Se il graco stato gi fatto, si digita il comando
replot. Analogamente, per scrivere unetichetta sullasse delle y si usa
set ylabel "nome da mettere su assse y"
Si pu cambiare il tipo di formato con cui sono rappresentati i numeri sullasse delle ascisse o delle
ordinate. Il caso interessante da vedere si ha quando si hanno graci semilogaritmi e si vuole usare una
scala esponenziale per visualizzare lasse delle y. Un esempio :
set format y "%4.2e"
Si ha una rappresentazione informato esponenziale condue cifre nella mantissa e una lunghezza totale
del numero pari a quattro: per esempio 1.00e-11.
A.3 Salvare i graci
Per conservare un graco, ad esempio, in formato .gif, dobbiamo cambiare la modalit del terminale. Per
vedere come impostato il terminale nel modo default, si digita listruzione
show terminal.
Come risposta si pu avere
terminal type is wxt 0.
Fatta questa premessa (utile per ritornare a fare i graci senza salvarli su le) si scrivono i seguenti
comandi:
set terminal gif
set output "prova.gif"
plot sin(x)
Il graco di sin(x) viene creato e salvato direttamente sul le prova.gif nella directory in cui stato aperto
il programma gnuplot. Se si vuole salvare un graco in un le .jpeg (o .png o .pdf ), si sostituisce gif con jpeg
(o png o pdf ) nei comandi precedenti
1
(si veda la Figura A.6 per un esempio di graco salvato come .png). Ad
esempio
set terminal png
set output "prova.png"
plot sin(x)
Se stato gi creato un graco, si pu usare il comando replot per salvarlo su le:
plot sin(x)
set terminal gif
set output "prova.gif"
replot
Per ritornare nella modalit di terminale di default si scrive
set terminal wxt 0
1
Osserviamo che, dopo listruzione 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 nel
modo pi semplice possibile.
205
A. CENNI SU GNUPLOT
Figura A.6: Il graco salvato come le prova.png
A.4 Graci da les di dati
A volte c bisogno di fare graci da tabelli di dati (per esempio da les di output generati da programmi
Fortran).
Vediamo con degli esempio come creare tali graci. Supponiamo che nel le dati.dat ci siano due
colonne corrispondenti ai valori sullasse delle x e delle y, rispettivamente, che vogliamo mettere in graco.
Il le 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 graco, dobbiamo caricare il le nellambiente gnuplot e far capire che la prima colonna
corrisponde ai valori da mettere sullasse delle x e la seconda ai valori da mettere sullasse delle y.
Sia il le dati.dat nella directory in cui viene lanciato il programma gnuplot. In ambiente gnuplot si
digita il comando:
plot dati.dat
e viene creato il graco per punti. Se si vuole un graco per linee o per linee e punti basta scrivere
plot dati.datwith lines
oppure
plot dati.dat with linespoints. Osserviamo che sul graco, la legenda mostra il nome del le
206
A.4. Graci da les di dati
Figura A.7: Graco del le 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 graci di funzioni.
Si pu lavorare sul graco cos come stato visto per le funzioni. Se si vuole un graco semilogaritmico
o logaritmico, prima dellistruzione plot si scrivono i comandi che abbiamo visto, set logscale ...
Analogamente a quanto visto nella Sezione precedente, si pu salvare il graco su le.
Se sul le di dati sono scritti dei commenti, le righe devono essere precedute dal simbolo cancelletto #.
Se abbiamo dati salvati su pi les, da inserire nello stesso graco, si opera nel modo seguente. Suppo-
niamo di avere i due les dati1.dat e dati2.dat. Il comando (base) in ambiente gnuplot da lanciare :
plot dati1.dat, dati2.dat.
Per specicare il tipo di linea, la legenda (e tutto quello che abbiamo gi visto per un graco), basta
inserire 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 listruzione molto lunga, siamo andati a capo, mediante luso del backslash \
Si possono avere les in cui abbiamo pi colonne di dati, la prima che corrisponde ai valori dellasse x e
le successive colonne da mettere sullasse y.
Sia dato, ad esempio, il le 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
A. CENNI SU GNUPLOT
Figura A.8: Graco del le 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 graco 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 specichiamo 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 graco risultante.
A.5 Script
A volte, specie se le gure devono essere salvate in un le, conviene scrivere tutte le istruzioni in uno
script, cio in un le in cui le righe di commento sono precedute dal simbolo # mentre sulle altre righe
scriviamo 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 i
programmi Fortran) il le istr.gnu (possiamo dare anche unaltra estensione che ci ricordi gnuplot, per
esempio istr.gp):
set logscale y
set terminal jpeg
208
A.6. Print
set output "logfig.jpeg"
plot [1:20] exp(2)*(1/x)**2
Oppure scriviamo il le 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 nestra 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 nestra di shell (non si possono eseguire altri comandi perch noi non entriamo
nellambiente gnuplot).
Perci questo modo di eseguire uno script utile per generare dei les (.jpeg, .gif, .png). Se invece voglia-
mo generare dei graci su terminale e vogliamo avere il tempo di osservarli, non conviene usare il comando
gnuplot istr.gnu perch non riusciremmo a vedere niente. Invece, in ambiente gnuplot, si pu digitare
il comando
load istr.gnu
Vengono eseguite le istruzioni dello script ma si rimane in ambiente gnuplot. Bisogna dunque stare attenti al
fatto che non vediamo le istruzioni eseguite e che alcuni parametri, se sono stati posti in un certo allinterno
dello script potrebbero creare problemi (per esempio abbiamo messo la scala logaritmica e non labbiamo
tolta).
I due les precedenti vanno bene se eseguiti con il comando gnuplot da una nestra di shell, mentre
meglio modicarli se si vuole eseguirli mediante il comando load, aggiungendo le seguenti ultime 2 righe
per evitare di fare altri graci in scala semilogaritmica e di sovrascriverli sul le 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
Unultima osservazione riguarda luso degli apici nei comandi descritti precedentemente: usare il sim-
bolo 'o il simbolo "pu essere usato indifferentemente l dove abbiamo usato luno o laltro nei comandi di
prima (nomi dei les di dati, legende, titoli,...).
A.6 Print
Gnuplot pu essere usato anche come una calcolatrice: basta scrivere print seguito dalla formula da
valutare.
Esempi
print 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
BIBLIOGRAFIA
[1] ASCHER, U. M. e GREIF, C. (2007), A First Course on Numerical Methods.
[2] BJRK, A. e DAHLQUIST, G. (2008), Numerical Methods in Scientic Computing, Volume II, Siam.
[3] BURDEN, R. L. e FAIRES, J. D. (2004), Numerical Analysis, Brooks-Cole Publishing.
[4] DAHLQUIST, G. e BJRK, A. (2006), Numerical Methods in Scientic Computing, Volume I, Siam.
[5] GAMBOLATI, G. (1994), Lezioni di Metodi Numerici, Cortina, Padova.
[6] GAUTSCHI, W. (1997), Numerical Analysis: An Introduction, Birkuser, Boston.
[7] GIANGRANDI, P. (2010), Dispense del corso di Storia dellInformatica, 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 Innitesimal Approach, Creative Commons Attribution
Non-Commercial-ShareAlike License, http://www.math.wisc.edu/~Keisler/calc.html.
[10] MOORE, H. (2008), MATLABper lingegneria, Pearson Prentice Hall, Italy.
[11] OCONNOR, J. e ROBERTSON, E. F. (ultima visita: febbraio 2012), The MacTutor History of Mathematics
archive, 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, Mountain
View, CA, http://www.computerhistory.org/babbage.
211

Potrebbero piacerti anche