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 .

http://dispense.dmsa.unipd.it/ mazzia@dmsa.unipd.it
Questo lavoro stato rilasciato sotto la licenza C REATIVE C OMMONS ATTRIBUZIONE - N ON COMMERCIALE N ON OPERE DERIVATE 3.0 I TALIA L ICENSE, Per leggere una copia della licenza visita il sito web (http://creativecommons.org/licenses/ by-nc-nd/3.0/it/)
E - MAIL :

SITO DELLE DISPENSE :

Foto di copertina: Pietre... Per ricordare letimologia della parola CALCOLO: dal latino Calculus pietruzza, lapillo a sua volta diminuitivo 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)

I NDICE

Indice 1 Struttura dellelaboratore 1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . 1.2 La preistoria del computer: Babbage e Lovelace 1.3 Gli albori . . . . . . . . . . . . . . . . . . . . . . . 1.4 Architettura del Computer . . . . . . . . . . . . . 1.5 Software e Sistema Operativo . . . . . . . . . . . 1.5.1 Per capire meglio il sistema operativo . . 1.6 Il le system . . . . . . . . . . . . . . . . . . . . . 1.7 Un po di storia sui sistemi operativi . . . . . . . 1.8 Lavorare in ambiente Linux . . . . . . . . . . . . 1.9 Editor di testo . . . . . . . . . . . . . . . . . . . . Richiami di analisi 2.1 Introduzione . . . . . . . . . . . . . . . . . . . . 2.2 Identit trigonometriche . . . . . . . . . . . . . 2.3 Regole su funzione esponenziale e logaritmica 2.4 Derivate e integrali . . . . . . . . . . . . . . . . 2.5 Teoremi utili . . . . . . . . . . . . . . . . . . . .

iii 1 1 2 3 5 6 8 9 9 11 12 13 13 14 14 14 15 19 19 21 22 23 26 27 31 31 34 37 37 38 39 45 47 48 49 50 53

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

Rappresentazione dei numeri nel calcolatore 3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . 3.2 Aritmetica di macchina . . . . . . . . . . . . . . . 3.3 Conversione di base . . . . . . . . . . . . . . . . 3.4 Rappresentazione IEEE dei numeri di macchina 3.5 Precisione numerica . . . . . . . . . . . . . . . . 3.6 Propagazione degli errori . . . . . . . . . . . . . . 3.7 Instabilit e malcondizionamento . . . . . . . . 3.7.1 Instabilit . . . . . . . . . . . . . . . . . . 3.7.2 Malcondizionamento . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

Zeri di funzione 4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Metodo delle Bisezioni . . . . . . . . . . . . . . . . . . . . . . 4.3 Metodo del Punto Fisso . . . . . . . . . . . . . . . . . . . . . . 4.4 Il Metodo di Newton-Raphson . . . . . . . . . . . . . . . . . . 4.5 Convergenza di un metodo iterativo . . . . . . . . . . . . . . 4.6 Complessit computazionale di uno schema . . . . . . . . . 4.7 Il metodo delle secanti . . . . . . . . . . . . . . . . . . . . . . 4.8 Confronto tra i metodi di Newton-Raphson e la Regula Falsi 4.9 Metodo di Newton-Raphson per radici multiple . . . . . . . iii

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

I NDICE

4.10 Controllo sugli scarti e graci di convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.11 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Interpolazione 5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Funzioni base monomiali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.2 Polinomi di Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.3 Formula dellerrore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.4 Differenze divise e formula di Newton . . . . . . . . . . . . . . . . . . . . 5.4 Considerazioni sullinterpolazione polinomiale . . . . . . . . . . . . . . . . . . . 5.4.1 Fenomeno di Runge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.2 Malcondizionamento nellinterpolazione con funzioni base monomiali 5.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Approssimazione 6.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . 6.2 Retta di regressione lineare . . . . . . . . . . . . . . 6.3 Approssimazione polinomiale ai minimi quadrati 6.4 Approssimazioni di tipo esponenziale . . . . . . . 6.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . .

53 55 61 61 62 63 63 65 66 68 71 71 72 73 77 77 78 80 81 82

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

Metodi diretti per la soluzione di sistemi lineari 7.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . 7.2 Elementi di Algebra Lineare . . . . . . . . . . . . . . 7.3 Metodo di eliminazione di Gauss . . . . . . . . . . . 7.3.1 Sostituzione allindietro e in avanti . . . . . 7.3.2 Eliminazione di Gauss: esempio particolare 7.3.3 Eliminazione di Gauss: caso generale . . . . 7.4 Strategie di pivoting . . . . . . . . . . . . . . . . . . . 7.5 Fattorizzazione triangolare . . . . . . . . . . . . . . . 7.5.1 Fattorizzazione LDU . . . . . . . . . . . . . 7.5.2 Fattorizzazione di Gauss senza pivoting . . 7.5.3 Fattorizzazione di Cholesky . . . . . . . . . . 7.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

85 . 85 . 86 . 90 . 90 . 91 . 93 . 94 . 96 . 96 . 98 . 100 . 101 105 105 106 106 107 108 110 110 111 113 117 120

Metodi Iterativi per la soluzione di sistemi lineari 8.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Metodi iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Norme di vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.4 Norme di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.5 Autovalori e autovettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6 Metodi classici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.1 Convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.2 Controllo della convergenza . . . . . . . . . . . . . . . . . . . . 8.6.3 I metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.4 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassamento 8.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

Integrazione numerica 123 9.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 9.2 Formula dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

iv

Indice

9.3

9.4

9.5 9.6 9.7

9.8

Formule di Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 Formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . 9.3.2 Sullerrore della formula di Cavalieri-Simpson . . . . . . . Formule composte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4.1 Formula composta dei trapezi . . . . . . . . . . . . . . . . . 9.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson Estrapolazione di Richardson . . . . . . . . . . . . . . . . . . . . . . Approssimazione di Romberg . . . . . . . . . . . . . . . . . . . . . . Introduzione alle formule di quadratura di Gauss . . . . . . . . . . 9.7.1 Propriet delle formule di Gauss . . . . . . . . . . . . . . . . 9.7.2 Formule di Gauss-Legendre . . . . . . . . . . . . . . . . . . 9.7.3 Altre formule di Gauss . . . . . . . . . . . . . . . . . . . . . . 9.7.4 Applicazione delle formule . . . . . . . . . . . . . . . . . . . 9.7.5 Sulla funzione peso . . . . . . . . . . . . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

125 127 129 130 130 134 136 137 138 140 141 141 142 143 143 147 147 148 149 151 154 155 155 156 156 157 157 158 158 159 159 160 161 162 162 163 164 164 165 166 166 167 170 172 174 174 178 180 182 182 183 v

10 Equazioni alle derivate ordinarie 10.1 Introduzione . . . . . . . . . . . . . . . . 10.2 Sulle equazioni differenziali ordinarie . 10.3 Metodo di Eulero esplicito . . . . . . . . 10.4 Metodo di Eulero implicito . . . . . . . . 10.5 Metodo di Crank-Nicolson . . . . . . . . 10.6 Studio dellerrore . . . . . . . . . . . . . 10.7 Errori di troncamento locale . . . . . . . 10.8 Convergenza e stabilit . . . . . . . . . . 10.8.1 Convergenza di Eulero esplicito 10.8.2 Stabilit di Eulero esplicito . . . 10.8.3 Convergenza di Eulero implicito 10.8.4 Stabilit di Eulero implicito . . . 10.8.5 Convergenza di Crank-Nicolson 10.8.6 Stabilit di Crank-Nicolson . . . 10.8.7 Sulla stabilit . . . . . . . . . . . 10.9 Esercizi . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

11 Introduzione al FORTRAN 77 11.1 Introduzione alla programmazione . . . . . . . 11.2 FORTRAN: FORmula TRANslator . . . . . . . . 11.3 Problemi e Algoritmi . . . . . . . . . . . . . . . 11.4 Elementi di un linguaggio di programmazione 11.5 Prime regole sul FORTRAN77 . . . . . . . . . . 11.6 Le variabili . . . . . . . . . . . . . . . . . . . . . 11.7 I tipi di dati . . . . . . . . . . . . . . . . . . . . . 11.8 Espressioni aritmetiche e funzioni elementari 11.9 I predicati elementari . . . . . . . . . . . . . . . 11.10 Struttura alternativa . . . . . . . . . . . . . . . . 11.11 Programma sul metodo di punto sso . . . . . 11.12 I sottoprogrammi . . . . . . . . . . . . . . . . . 11.12.1 Le functions . . . . . . . . . . . . . . 11.12.2 Le subroutines . . . . . . . . . . . . 11.13 Il formato . . . . . . . . . . . . . . . . . . . . . . 11.14 Files di dati . . . . . . . . . . . . . . . . . . . . . 11.15 Vettori . . . . . . . . . . . . . . . . . . . . . . . . 11.16 Ciclo do . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

I NDICE

11.16.1 I vettori nei sottoprogrammi . 11.16.2 Leggere i dati di input da le . 11.17 Matrici in FORTRAN . . . . . . . . . . 11.17.1 Le matrici nei sottoprogrammi 11.17.2 Parameter . . . . . . . . . . . . 11.17.3 Memorizzazione delle matrici 11.17.4 Un programma di esempio . . 11.18 La formula dei trapezi in FORTRAN . . 11.19 Esercizi . . . . . . . . . . . . . . . . . . A Cenni su Gnuplot A.1 Introduzione . . . . . A.2 Graci di funzioni . . A.3 Salvare i graci . . . . A.4 Graci da les di dati A.5 Script . . . . . . . . . A.6 Print . . . . . . . . . . Bibliograa

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

184 185 187 188 189 190 191 193 195 201 201 201 205 206 208 209 211

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

vi

1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 5 6 8 9 9 11 12

S TRUTTURA DELL ELABORATORE

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 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9

Introduzione . . . . . . . . . . . . . . . . . . . . . La preistoria del computer: Babbage e Lovelace Gli albori . . . . . . . . . . . . . . . . . . . . . . . Architettura del Computer . . . . . . . . . . . . . Software e Sistema Operativo . . . . . . . . . . . 1.5.1 Per capire meglio il sistema operativo . . Il le system . . . . . . . . . . . . . . . . . . . . . Un po di storia sui sistemi operativi . . . . . . . Lavorare in ambiente Linux . . . . . . . . . . . . Editor di testo . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

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: processore, sistema operativo, memoria. Cosa signicano esattamente? E, prima ancora, cosa signica Computer?

CAPITOLO
. . . . . . . . . . . . . . . . . . . .

1. S TRUTTURA DELL ELABORATORE

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

Hardware Software

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 sici che lo compongono. Si chiama, invece, software linsieme delle istruzioni (i programmi) che consentono allhardware di 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 informazioni (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, dallingegneria 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, architetti, 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 Babbage1 era consapevole dellinaccuratezza dei calcoli fatti dalluomo. Nel suo 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

Charles Babbage

calcolatore.

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 Analitica2 . 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 considerare come la prima idea del moderno computer. Anche questo progetto, tuttavia, rimase incompiuto. Solo nel 2002 stato possibile costruire una macchina che rispondesse al progetto di Babbage. Nel 1833, Babbage incontr Ada Lovelace3 , glia del famoso poeta Lord Byron. Lovelace, appena diciassettenne, 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 Lovelace 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.

Ada Lovelace

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 con il transistor (nel 1947) e il circuito integrato (nel 1958). La nuova tecnologia elettromeccanica 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 Shannon4 . 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 assegnata operazione matematica in un circuito elettrico costruito con interruttori e rel di commutazione (quelli usati nelle telecomunicazioni). Nel 1948, il suo articolo A Mathematical Theory of Communication pubblicato 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 Zuse5 costruisce Z1, una macchina costruita e pensata in maniera completamente 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).

1. S TRUTTURA DELL ELABORATORE

von Neumann

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 dallindustria 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, Turing6 si occup di problematiche riguardanti un macchina di calcolo digitale astratta, con una memoria senza limiti, mentre negli USA Eckert e Mauchly7 costruirono lENIAC (Electronic Integrator 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 predecessori 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 Neumann8 . Egli si 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: linvenzione 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 lavori, del 1965 e del 1975, Gordon Moore9 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 integrati, e per la leadership nello sviluppo della memoria del MOS (semiconduttore metal-ossido), del microprocessore e dellindustria dei semiconduttori.

1.4. Architettura del Computer

approssimativamente ogni 24 mesi (legge di Moore). Nel 1971 tre ingegneri della Intel tra cui litaliano Federico Faggin10 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 intero 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 Itanium 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 un canale detto BUS, costituito da un insieme 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 considerata 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. Abbiamo, 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 periodo 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.

1. S TRUTTURA DELL ELABORATORE

RAM

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. . . . 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) = 210 byte = 1024 byte (circa 103 ) 1 Megabyte (MB) = 220 byte (circa 106 ) 1 Gigabyte (GB) 109 byte (un miliardo di byte) 1 Terabyte (TB) 1012 byte (mille miliardi di byte) 1 Petabyte (PB) 1015 byte (un milione di miliardi di byte)

Il computer scambia informazioni con il mondo esterno per mezzo delle periferiche di input/output (monitor, mouse, stampante, web-cam,...). Input 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 computer (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. Levoluzione dei sistemi operativi ha inuenzato anche lo sviluppo dellhardware in quanto per supportare 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 programma (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 problema 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 automatico era una risorsa preziosa a disposizione di pochi utenti. Tutto ci port ad un ripensamento del modo

Cenni storici

1. S TRUTTURA DELL ELABORATORE

Sul software

Memoria cache

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 operazioni 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 ingresso 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) alloperatore del computer e accedeva ai risultati dopo qualche ora se non addirittura dopo giorni e giorni, risultati 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 fu sostituito 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 tastierastampante 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. 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. 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 ingredienti 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 le11 . 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 settore 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.

1. S TRUTTURA DELL ELABORATORE

appositamente per il sistema Unix. In tal modo il sistema operativo diventava facilmente portabile su macchine 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 sviluppare 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 relativamente 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 computer, in quanto la macchina veniva utilizzata da un solo utente e le periferiche collegate erano poche e semplici. 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, lIBM pens 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 appassionati 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 interfaccia 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 comprendere 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 vedere 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 versione 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 utilizzare 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 messa 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 2 3 3

appunti/ calcolonumerico/ fortran/ foto/

4 mail/ 4 movies/ 1 varie/ 57 prova.pdf

Per cambiare directory, si deve digitare cd nome-directory (cd sta per change directory). Esempio: per entrare nella directory foto, scriviamo 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

studente@george:~ $ cd foto

1. S TRUTTURA DELL ELABORATORE

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

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

pwd /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

2
. . . . . . . . . . . . . . . . . . . . . . . . . 13 14 14 14 15

R ICHIAMI DI ANALISI

La teoria attrae la pratica come il magnete attrae il ferro. Carl Friedrich Gauss

2.1 2.2 2.3 2.4 2.5

Introduzione . . . . . . . . . . . . . . . . . . . . Identit trigonometriche . . . . . . . . . . . . . Regole su funzione esponenziale e logaritmica Derivate e integrali . . . . . . . . . . . . . . . . Teoremi utili . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

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 B E Z H I K M Alfa Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu N O P T X o ! Nu Xi Omicron Pi Rho Sigma Tau Upsilon Fi Chi Psi Omega

13

CAPITOLO
. . . . . . . . . .

2. R ICHIAMI DI ANALISI

2.2 Identit trigonometriche


Nel seguito introduciamo alcune formule trigonometriche, con la notazione: sin (x ) seno(x ), cos (x ) coseno(x ), sin (x ) 1 tan (x ) tangente(x ) = , sec (x ) secante(x ) = , cos (x ) cos (x )

cos ( ) = cos ( ) cos ( 2 ) = sin ( ) cos ( 2 + ) = sin ( ) cos ( ) = cos ( ) cos ( + ) = cos ( ) cos ( + ) = cos ( ) cos () sin ( ) sin () sin (2 ) = 2 sin ( ) cos ( ) sin2 ( ) + cos2 ( ) = 1

sin ( ) = sin ( ) sin ( 2 ) = cos ( ) sin ( 2 + ) = cos ( ) sin ( ) = sin ( ) sin ( + ) = sin ( ) sin ( + ) = sin ( ) cos () + cos ( ) sin () cos (2 ) = cos2 ( ) sin2 ( ) tan2 ( ) + 1 = sec2 ( )

2.3 Regole su funzione esponenziale e logaritmica


Assumiano a , b 2 R, con a > 0 e b > 0. Si ha: 1x = 1 a x+y = a x a y a loga (x ) = x a x y = a x /a y loga (x y ) = loga (x ) + loga ( y ) loga (x y ) = y loga (x ) loga (x ) logb (x ) = loga (b )

a x y = (a x ) y a0 = 1 a x b x = (ab )x loga (x / y ) = loga (x ) loga ( y ) loga (a x ) = x b x = a x loga (b )

2.4 Derivate e integrali


Siano f e g due funzioni dipendenti dalla variabile reale x mentre c 2 R sia una costante. Indichiamo la df derivata di f con il simbolo o mediante f 0 . Si ha: dx d (c f ) =cf 0 regola della costante dx d (f + g) d f d g = + regola della somma dx dx dx 0 0 d ( f /g ) f g f g = regola del quoziente dx g2 d (f g) = f g 0 + f 0g regola del prodotto dx r df = r f r 1 f 0 regola della potenza dx

Tra le regole di integrazione, invece, ricordiamo quella di integrazione per parti: Z Z 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 ln(x ) sin (x ) tan (x ) 1 cos (x ) arcsin (x ) arctan (x ) f xr ex sin (x ) tan (x ) 1 cos (x ) 1 cos2 (x ) tan (x ) cos (x ) arcsin (x ) arctan (x ) 1 p 1 x2 R fdx f0 1 x cos (x ) 1 (= sec2 (x )) cos2 (x ) 1 tan (x ) cos (x ) 1 p 1 x2 1 1 + x2 f x 1 ln |x | cos (x ) cot (x ) 1 sin (x ) 1 sin2 (x ) cot (x ) sin (x ) arccos (x ) arccot(x ) 1 1 + x2 f ex cos (x ) cot (x ) 1 sin (x ) arccos (x ) arccot(x ) R f0 ex sin (x ) 1 2 sin (x ) cot (x )

1 p 1 x2 1 1 + x2 fdx

1 sin (x )

x r +1 (r 6= 1) r +1

ln |x | x ln |x | x sin (x ) ln | sin (x )| ln | 1 + cot (x )| sin (x )

ex cos (x ) 1 ln | | cos (x ) ln | 1 + tan (x )| cos (x )

tan (x ) 1 cos (x ) p x arcsin (x ) + 1 x 2 1 x arctan (x ) ln (1 + x 2 ) 2 arcsin (x )

cot (x ) 1 sin (x )

p x arccos (x ) 1 x 2 1 x arccot(x ) ln (1 + x 2 ) 2 arctan (x )

2.5 Teoremi utili


Richiamiamo, nel seguito, teoremi che trovano applicazione nel Calcolo Numerico. Per alcuni diamo anche la dimostrazione. 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 ).
Notazioni usate per le funzioni continue

15

2. R ICHIAMI DI ANALISI

Teorema 2.5.1 (Teorema di Rolle) a Sia f 2 C ([a , b ]) e differenziabile in ]a , b [. Se f (a ) = f (b ) = 0, allora esiste un punto 2]a , b [ tale che f 0 () = 0
a Michel Rolle (1652- 1719) fu un matematico francese. conosciuto per il teorema che porta il suo nome. Si deve a lui p la notazione della radice n -sima per mezzo del simbolo n x .

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

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

Quindi per funzioni continue, un valore compreso tra i due estremi dellinsieme di denizione, un valore 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 estremi 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 2 [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 2]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 2 [a , b ], e con |g 0 (x )| m < 1 per ogni x 2 [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 2 C ([a , b ]) e g integrabile in [a , b ] e g (x ) non cambia segno in [a , b ], allora esiste un punto 2]a , b [ tale che Zb
a

f ( x ) g ( x ) d x = f ()

Zb
a

g (x ) d x

Teorema 2.5.7 (Teorema di Rolle generalizzato) Sia f 2 C ([a , b ]) n volte differenziabile in ]a , b [. Se f si annulla in n + 1 punti distinti x 0 , x 1 , . . . , x n in ]a , b [, allora esiste un punto 2]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 2 C 2 ([a , b ]) e sia x 0 un punto dellintervallo [a , b ]. Allora, per qualunque x 2 [a , b ] si pu scrivere: f (x ) = f (x 0 ) + f 0 (x 0 )(x x 0 ) + (x x 0 )2 00 f ( x ) 2

Per g 1, questo teorema ci d il valore medio della funzione f sullintervallo [a , b ], dato da f () = 1 Rb f (x ) d x ba a

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 ) + dove R n (x ) = f (n +1) (x ) (x x 0 )n +1 (n + 1)! f 00 (x 0 ) f (n ) (x 0 ) ( x x 0 )2 + . . . + ( x x 0 )n + R n 2! n!

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

3
NUMB3RS

R APPRESENTAZIONE 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!

3.1 3.2 3.3 3.4 3.5 3.6 3.7

Introduzione . . . . . . . . . . . . . . . . . . . . . Aritmetica di macchina . . . . . . . . . . . . . . . Conversione di base . . . . . . . . . . . . . . . . Rappresentazione IEEE dei numeri di macchina Precisione numerica . . . . . . . . . . . . . . . . Propagazione degli errori . . . . . . . . . . . . . . Instabilit e malcondizionamento . . . . . . . . 3.7.1 Instabilit . . . . . . . . . . . . . . . . . . 3.7.2 Malcondizionamento . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

19 21 22 23 26 27 31 31 34

3.1 Introduzione
Molte volte, si pensa che i risultati numerici ottenuti da un calcolatore elettronico, specie se sono ottenuti come output di un sosticato software, non contengano errori e, se ne abbiano, siano da ritenersi trascurabili. In realt, quando si esegue un programma al calcolatore, bisogna prima di tutto aver 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. R APPRESENTAZIONE 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 scientico? 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.
Esempio sul disastro del missile Patriot

Il 25 febbraio 1991, durante la prima Guerra del Golfo, un missile Patriot fall lintercettazione di un 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 operativo 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. Difatti, il computer usato per controllare il missile Patriot era basato su unaritmetica a 24 bit. Per i calcoli, il tempo veniva registrato dallorologio interno del sistema in decine di secondi e successivamente moltiplicato 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 binaria infatti 0.0001100110011001100110011001100 . . .. In 24 bit esso veniva registrato come 0.00011001100110011001100 introducendo un errore di 0.0000000000000000000000011001100 . . ., che, in base 10, signica circa 0.000000095. Gli errori di arrotondamento nella conversione del tempo causarono un errore nel calcolo della traiettoria: il tempo di 100 ore calcolato in secondi diede il valore 359999.6567 Figura 3.1: Il disastro del missile invece di 360000, un errore di 0.3433 secondi che port Patriot il Patriot 687 metri fuori della traiettoria del missile Scud! 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 conversione 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, invece, del veicolo spaziale della missione Mars Climate Orbiter Figura 3.2: Lesplosione di non si trova sulla pagina web del prof. Douglas, ma i dettagli della storia si posAriane 5 sono trovare, ad esempio, sul sito http://marsprogram.jpl.nasa.gov/ msp98/orbiter. Il 23 settembre 1999 si perdono le tracce del veicolo spaziale Mars Climate Orbiter. Gli obiettivi di questa missione della NASA erano sia di monitoraggio 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

Lesplosione dellAriane 5

Il disastro del Mars Climate Orbiter

3.2. Aritmetica di macchina

Figura 3.3: La Mars Climate Orbiter

Si era ipotizzato di entrare nellatmosfera di Marte ad una altezza di circa 150 km mentre il veicolo spaziale entr ad una altezza di circa 60 km. Per un errore di conversione delle unit di misura, il velivolo entr nellatmosfera con una traiettoria inferiore 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 informazioni tra il team che lavorava sul veicolo spaziale, che si trovava in Colorado e il team della missione di navigazione, che lavorava in California. Un team usava le unit inglesi (inches, feet, pounds) mentre laltro usava le unit metriche. Lerrore fu nella 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 0 3 3 3 3 = 0.3333333 . . . = + + + + . . . 100 3 100 101 102 103 104 3 1 4 1 5 = 3.14159265358979 . . . = + + + + . . . 100 100 101 102 103 104 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 m 1 N m 1 + . . . + x 1 N + x 0 + x 1 N 1 + x 2 N 2 + . . . x n N n |
parte intera

dove m e n sono interi naturali e x k , k = m , m 1, . . . , n sono interi naturali compresi tra 0 e N 1. In base 10, il numero 726.625, scritto in forma estesa dato dalla forma: 7 102 + 2 101 + 6 + 6 101 + 2 102 + 5 103 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.

{z

}|

parte frazionaria

{z

Esempio

21

3. R APPRESENTAZIONE 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 un esempio.

Esempio 3.3.1 Sia 10001000.010 il numero scritto in base 2. Se lo scriviamo mediante le potenze di 2 si ha: 10001000.010 = 1 27 + 0 26 + 0 25 + 0 24 + 1 23 + 0 22 + 0 21 + 0 20 + |
parte intera

{z

0 21 + 1 22 + 0 22 |
parte frazionaria

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

{z

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 corrispondente 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 procedura 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: Per la parte decimale si ha : : 2 = quoziente resto .625 2 = 1.250 x 1 = 1 725 362 1 x0 .250 2 = 0.50 x 2 = 0 362 181 0 x1 .5 2 = 1.0 x 3 = 1 181 90 1 x2 .0 2 = 0.0 90 45 0 x3 45 22 1 x4 22 11 0 x5 11 5 1 x6 5 2 1 x7 2 1 0 x8 1 0 1 x9 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 Per la parte intera: : 2 = quoziente 1 0 resto 1

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

x0

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

Osserviamo che nella parte decimale si ripetono allinnito le cifre 0011. Il numero in base 2 si scrive quindi come: 1.0 0011 | {z } 0011 | {z } . . .

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 numero 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 rappresentazione in virgola ssa (xed point), ma in genere preferita quella in oating point, e noi ci soffermeremo solo su questa. 1 Riprendiamo lesempio proposto in Sezione 3.2, dove abbiamo scritto in base 10 come 3 3 3 3 3 1 0 = 0.3333333 . . . = + 1 + 2 + 3 + 4 . . . 100 0 3 10 10 10 10 10 Questo un esempio di numero scritto in virgola mobile: un qualunque numero x , in base 10, si pu scrivere sotto la forma x = f 10e dove f rappresenta la mantissa del numero e e 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 101 = 0.125 102 = 0.000125 105 . 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 2e . 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 Ne 1 e Ne 2 . . . e 0 ., dove f 1 , f 2 , . . . , f n , e e Ne 1 , e Ne 2 , . . . , 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. R APPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Un numero in oating point nella rappresentazione IEEE viene scritto come x = (1 + f 1 21 + f 2 22 + . . . + f n 2n ) 2e dove 1+ f 1 21 + f 2 22 +. . .+ f n 2n 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 rispettivamente per il segno della mantissa, e per le cifre dellesponente e della mantissa ogni celletta pu avere il valore 0 o 1): s
segno

e |

e {z

f |

f {z

Abbiamo 1 bit riservato al segno (si ha 0 per il segno + e 1 per il segno ), un numero Ne di bits per lesponente 2e , 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: Singola precisione Doppia precisione s 1 1 Ne 8 11 n 23 52 # totale bits 32 64

|{z}

cifre dellesponente

cifre della mantissa

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 2 effettivo, noi memorizziamo il valore b + e dove b il bias dato b = 0111 | {z. . . 1 }, vale a dire b = 1 + 2 + 2 + . . . +
Ne bits Ne 1 1 2 2Ne 2 + 0 2Ne 1 = = 2Ne 1 1 (si veda la nota per capire perch si ha questo risultato nella somma). 12 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 . . . 10 0111 . . . 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 | {z. . . 1 }: in base 10 b = 12710 , da cui lintervallo [L , U ] = [126, 127].
8 bits In doppia precisione, invece, b = 102310 da cui [L , U ] = [1022, 1023]. Per quanto riguarda la mantissa, sono ad essa riservati n bits. normalizzazione, la precisione di n + 1 bits. Il pi grande numero che si pu rappresentare , quindi1 U 1. | 111 ...1 {z } 2 = ( n n X

Considerando anche l1 della

bits Il pi piccolo numero positivo rappresentabile dato, invece, da:


L L 1. | 000 ...0 {z } 2 = 2

k =0

2k ) 2U =

1 2(n +1) U 2 = (2 2n )2U 2U +1 1 21

n bits Se si vuole rappresentare un numero al di fuori di questo intervallo si ha overow o underow. In singola e doppia precisione abbiamo, per il pi grande e il pi piccolo numero positivo rappresentabile, i seguenti valori:

Massimo Minimo

Singola precisione 3.4 1038 1.2 1038

Doppia precisione 10308 2.2 10308

Esempio 3.4.1 Vogliamo scrivere il numero 5.7510 in formato IEEE in singola precisione. Effettuiamo prima la conversione in base 2: Per la parte intera: Per la parte decimale: 5 2 1 x0 .75 2 = 1.50 x 1 = 1 2 1 0 x1 .5 2 = 1.0 x 2 = 1 1 0 1 x2 .0 2 = 0.0 Quindi 5.7510 = 101.112 = 1.0111 22 . Memorizziamo ora il numero in singola precisione: Per lesponente, essendo p = 2, si ha: (b + p )10 = (127 + 2)10 = 12910 = 100000012 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,


0 |{z}
s

lesponente e la mantissa :
0 0 0 }

1 |

0 {z

1 }

0 |

...
mant i ssa

esponent e

{z

1a che, dati n valori w 1 , w 2 , . . . , w n usiamo la seguente simbologia per indicare la loro somma:
n X

(n +1) 1 1 il risultato di una somma del tipo S = 1 + a + a 2 + . . . + a n e vale S = 1 a . In questo caso, a = = 21 . Osserviamo, inoltre,

i =1

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

25

3. R APPRESENTAZIONE 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 nellesponente 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 1 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 1. 0/1 |{z}
s

1 |

... {z

1 }

0 |

... {z

0 }

esponente

mantissa

I valori 1 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 log 0. A seconda della macchina si ha: NaNS, che produce un segnale di errore 1 1 ... 1 1 0 1 1 ... |
esponente

0 |{z}
s

1 }

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


s

{z

mantissa

{z

3.5 Precisione numerica

|{z}

esponente

{z

mantissa

{z

p Un numero pu avere una rappresentazione nita o innita. Basti pensare al valore di o a 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 . P Sia x = ( 1 x N k )N p il numero esatto (pu avere innite cifre decimali e lo rappresentiamo come k =0 k somma di inniti termini). Pt 1 k p In oating-point esso sar espresso come x = ( k x N )N , esso, cio, sar arrotondato (non =0 k 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 = x k per k = 0, . . . , t 1. Le altre cifre, x t , x t 1 , . . . k sono ignorate. 1 arrotondamento simmetrico: x = ar r (x ) = t r onc (x + N t +1 N p ), aggiungiamo ununit a x t +1 se 2 x t N /2.

Lerrore assoluto |x x | che si commette approssimando il numero x con x sar 2 8 < N 1 t N p | x x | 1 1 t p : N N 2

nel troncamento 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 |x x | , invece, si ha: |x |

Per lerrore relativo

8 1 t nel troncamento |x x | <N 1 1 t : N |x | nellarrotondamento 2 1 Il valore N 1t il numero conosciuto come precisione di macchina. 2 Nel caso della rappresentazione IEEE di un numero, 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 | 2(n +1) . |x | In singola precisione (n = 23), avremo |x x | 224 5.96 108 |x |
Esempio

ci signica che avremo 8 cifre decimali corrette. In doppia precisione (n = 52) avremo |x x | 253 1.11 1016 |x |

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 portare 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 operazioni siano eseguite in modo esatto. Indichiamo con il simbolo o una qualunque delle operazioni elementari {, /, +, } 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 ). Moltiplicazione3

Quindi lerrore nel prodotto dato da e x y = e x + e y Divisione (con y 6= 0)4

x (1 + e x ) y (1 + e y ) = (x y )(1 + e x )(1 + e y ) (x y )(1 + e x + e y )

3 Nei calcoli sono trascurabili le potenze maggiori o uguali a due per e 4 Possiamo scrivere

Si ha e x / y = e x e y : gli errori si accumulano additivamente

x (1 + e x ) x x = (1 + e x )(1 e y + e 2 y + . . .) (1 + e x e y ) y (1 + e y ) y y

centro 0.

x e ey 1 1 = (1 e y + e 2 + . . .) come risultato della formula polinomiale di Taylor della funzione f (e y ) = di y 1 + ey 1 + ey

27

3. R APPRESENTAZIONE 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 + Lerrore e x + y = x y ex + ey) x+y x+y

x y ex + e y , una combinazione lineare che dipende da x e y . x+y x+y x y > 0 =) |e x + y | |e x | + |e y | |x | |y | x y < 0 =) e possono essere molto grandi e, in tal caso, ci sar unamplicazione |x + y | |x + y | notevole dellerrore. Si ha il fenomeno di cancellazione se non si fa attenzione al numero di cifre signicative dei numeri che vengono sommati.
Sulla cancellazione

Supponiamo di avere due numeri molto vicini tra loro, in cui le prime p + 2 cifre della parte frazionaria sono buone mentre le altre sono corrotte. Inoltre, le prime p cifre siano le stesse per entrambi i numeri (usiamo i simboli v v v v v e w w w w w w per esprimere le cifre corrotte): f l (x ) = 1.d 1 d 2 . . . d p b (p +1) b (p +2) v v v v 2e

0 0 e f l ( y ) = 1.d 1 d 2 . . . d p b (p +1) b (p +2) w w w w 2

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 q q q q q sono le cifre corrotte):
00 00 e f l (x y ) = 1.b 1 b 2 q q q q q q 2

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 101 e y = 9.963 103 Facendo la sottrazione di questi due numeri, abbiamo 1.103 101 9.963 103 = 0.1103 0.009963 = 0.100337. Facendo larrotondamento a 4 cifre abbiamo il valore 1.0034 101 . |0.100337 0.10034| Lerrore relativo che commettiamo : 2.99 105 . Questo errore minore della 0.100337 1 precisione di macchina (considerata la base 10 e le 4 cifre) 103 . 2 Tuttavia, se non teniamo conto delle cifre signicative ma tronchiamo i numeri alle prime 4 cifre, abbiamo la sottrazione di 0.1103 0.0099 = 0.1004. |0.100337 0.1004| Questa volta lerrore relativo .63 103 . Lerrore maggiore della precisione di 0.100337 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). p p b b 2 4ac Applicando la formula x 1/2 = abbiamo x 1/2 = 28 783 = 28 27.98213716 = 2a ( 0.01786284073 . Larrotondamento delle due radici in virgola mobile normalizzata a 4 cifre decimali 55.98213716 d: x 1 = 1.7863 102 e x 2 = 5.5982 101 . 28

3.6. Propagazione degli errori

Consideriamo ora la macchina per risolvere lequazione: p a 4 cifre decimali 1 x 1 = 28 783 = 2.8 10 2.7982 101 = 0.0018 101 = 0.018 = 1.8 102 p 1 x 2 = 28 + 783 = 2.8 10 + 2.7982 101 = 5.5982 101 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 101 ) = 1.7863 102 . 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 a b . Abbiamo (a b ) = 15.6 15.7 = 0.1. Quindi (a b )2 = +0.01 = 0.1 101 . Consideriamo ora a 2 2ab + b 2 = 243.36 489.84 + 246.49 = 0.24336 103 0.48984 103 + 0.24649 103 Considerando la macchina a 3 cifre decimali, abbiamo: 0.243 103 0.490 103 + 0.246 103 = 0.1 101 I risultati sono completamente diversi!

Esempio 3.6.4 Consideriamo il problema di approssimare la derivata della funzione f (x ) = sin x nel punto x = 1.2. Supponiamo di non poter valutare direttamente la derivata della f e di volerla approssimare applicando la formula polinomiale di Taylor: h 2 00 h 3 000 h4 I V f (x 0 + h ) = f (x 0 ) + h f 0 (x 0 ) + f (x 0 ) + f (x 0 ) + f (x 0 ) + . . . 2 6 24 Allora f (x 0 + h ) f (x 0 ) h h 2 000 h3 I V f 0 (x 0 ) = ( f 00 (x 0 ) + f (x 0 ) + f (x 0 ) + . . .) h 2 6 24 f (x 0 + h ) f (x 0 ) Approssimiamo, quindi, la f 0 (x 0 ) calcolando . h Lerrore, detto errore di discretizzazione, che si commette f (x 0 + h ) f (x 0 ) h h 2 000 h3 I V | f 0 (x 0 ) | = | f 00 (x 0 ) + f (x 0 ) + f (x 0 ) + . . . | h 2 6 24 Supponendo di conoscere il valore della derivata seconda in x 0 , per piccoli valori di h possiamo dare una stima dellerrore di discretizzazione, f (x 0 + h ) f (x 0 ) h | f 0 (x 0 ) | | f 00 (x 0 )| h 2 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 sin x con la formula che abbiamo ricavato.

29

3. R APPRESENTAZIONE 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 00 | f (x 0 )| (i conti sono fatti in singola precisione): 2 h 1.e-1 1.e-2 1.e-3 1.e-4 1.e-5 1.e-6 errore 4.7167e-2 4.6662e-3 4.6608e-4 4.6603e-5 4.6602e-6 4.6597e-7 h 00 | f ( x 0 )| 2 4.6602e-2 4.6602e-3 4.6602e-4 4.6602e-5 4.6602e-6 4.6602e-7

h 00 | f (1.2)| = 0.46602h. 2 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! Lerrore commesso dallalgoritmo decresce come h e, in particolare, come h 1.e-8 1.e-9 1.e-10 1.e-11 1.e-12 1.e-13 1.e-16 1.e-18 errore 4.3611e-10 5.5947e-8 1.6697e-7 4.6603e-5 1.3006e-4 4.2505e-4 3.6236e-1 3.6236e-1 h 00 | f ( x 0 )| 2 4.6602e-9 4.6602e-10 4.6602e-11 4.6602e-12 4.6602e-13 4.6602e-14 4.6602e-16 4.6602e-19

In Figura 3.4 vediamo come la curva dellerrore inizialmente segue la retta descritta dallerrore di discretizzazione 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 108 , 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 () = 2 cos ( ) sin ( ). 2 2 Vediamo come migliorano le cose inserendo nel graco 3.5 anche la curva dellerrore che otteniamo utilizzando questa espressione trigonometrica. Lerrore continua a diminuire anche quando la formula precedente d un errore crescente. Sempre in Figura 3.5, e in riferimento alla formula non buona, abbiamo considerato la curva dellerrore di arrotondamento in modo da confrontare landamento effettivo dellerrore 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 ) f (x 0 + h ) f (x 0 ) e x0 +h e x0 = + . Maggiorando e x con la precisione di macchina , h h h 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 dellalgoritmo5 e c 0 sia una costante non molto grande. Se invece avviene una crescita di tipo esponenziale
n E n c1 E0

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. R APPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Figura 3.5: Errori di discretizzazione, di arrotondamento, ed errore effettivo approssimando f 0 (x 0 ) con il f (x 0 + h ) f (x 0 ) rapporto incrementale , ed errore che si commette applicando la formula trigonometrica h per cui f (x 0 + h ) f (x 0 ) = sin (x 0 + h ) sin (x 0 ) = 2 cos (2x 0 + h /2) sin (h /2).

Denizione 3.7.1 Un procedimento numerico si dice instabile se gli errori che vi sono associati non rimangono limitati ma crescono no a distruggere completamente la soluzione.

Esempio 3.7.1 Consideriamo lintegrale Z1 xn yn = dx 0 x + 10 per valori di n = 1, 2, . . . , 30. Osserviamo che, poich x 2 [0, 1], la funzione integranda varia pure essa nellintervallo [0, 1] per cui 0 < y n < 1. Analiticamente, si ha: Z1 n Z1 n 1 Z1 x + 10x n 1 x (x + 10) 1 y n + 10 y n 1 = dx = dx = x n 1 dx = x + 10 x + 10 n 0 0 0 Vale ancheZ la relazione 1 1 y0 = dx = ln (11) ln (10). 0 x + 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 10 y n 1 n

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 = 1 10 y 0 1 1 y 2 = 10(1 10 y 0 ) = 10 + (10)2 y 0 2 2 1 1 2 y 3 = 10( 10 + 10 y 0 ) = 103 y 0 + cost ant e 3 2 . . . .. . 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: Da un programma Matlab: n 0 1 2 3 4 ... 7 8 9 10 18 27 30 yn 9.5310e-2 4.6898e-2 3.1021e-2 2.3122e-2 1.8778e-2 .... -3.0229e-1 3.1479e+0 -3.1368e+1 3.1378e+2 3.1377e+10 -3.1377e+19 3.1377e+22 n 0 1 2 3 4 ... 7 8 9 10 18 27 30 yn 9.5310e-2 4.6898e-2 3.1018e-2 2.3154e-2 1.8465e-2 .... 1.1481-2 1.0194e-2 9.1673e-3 8.3270e-3 -9.1694e+1 -9.1699e+9 -9.1699e+13

1 1 ( y n ), partendo da un valore di n molto grande e andando a ritroso, 10 n 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 n0 = 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 n0 = 0 1 1 y n0 1 = 10 n 0 1 1 1 1 1 y n0 2 = ( )= + cost ant e 10 n 0 1 10 n 0 (10)2 n 0 . . . .. . 1 yn = + cost ant e n0 n n (10) 0 n n 0 Se invece, consideriamo y n 1 = Lerrore al passo n dipende, quindi, (in valore assoluto) da 1 . 10n0 n

33

3. R APPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Se richiediamo una tolleranza = 106 , e ssiamo un valore n 1 , per calcolare n 0 dovr essere 1 < cio 10n1 n0 < 10n0 n1 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 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 yn 0.000000 3.84615e-3 3.61538e-3 3.80513e-3 3.96731e-3 4.14872e-3 4.34703e-3 4.56530e-3 4.80663e-3 5.07489e-3 5.37486e-3 5.71251e-3 6.09542e-3 6.53332e-3 7.03898e-3 n 11 10 9 8 7 6 5 4 3 2 1 0 yn 7.62944e-3 8.32797e-3 9.16720e-3 1.01944e-2 1.14806e-2 1.31377e-2 1.53529e-2 1.84647e-2 2.31535e-2 3.10180e-2 4.68982e-2 9.53102e-2

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 algoritmo: 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 quindi 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. 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).

indice di condizionamento

35

3. R APPRESENTAZIONE DEI NUMERI NEL CALCOLATORE

Se utilizziamo gli errori relativi, abbiamo (e sapendo che y = f (x )): y f 0 ( x ) x y f (x ) Moltiplico poi numeratore e denominatore a secondo membro per x y x f 0 (x ) x y f (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 0 x f (x ) (cond f )(x ) = f (x )

Questo numero ci dice quanto grandi sono le perturbazioni relative per y confrontate con le relative perturbazioni di x . x Per x = 0 e y 6= 0, non ha senso considerare lerrore relativo , e si considera lerrore assoluto su x . In tal x caso, si denisce indice di condizionamento la quantit 0 f (x ) (cond f )(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 1 0 x x 1/1 x f (x ) 1 (cond f )(x ) = = = 1/ f (x ) x

Per grande, (cond f )(x ) tende a zero, quindi abbiamo un problema bencondizionato. Se, invece molto 10 piccolo si ha un problema malcondizionato (se = 1010 , si ha f (x ) = x 10 e (cond f )(x ) = 1010 , un valore molto grande).

36

4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 38 39 45 47 48 49 50 53 53 55

Z ERI 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 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11

Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . Metodo delle Bisezioni . . . . . . . . . . . . . . . . . . . . . . Metodo del Punto Fisso . . . . . . . . . . . . . . . . . . . . . . Il Metodo di Newton-Raphson . . . . . . . . . . . . . . . . . . Convergenza di un metodo iterativo . . . . . . . . . . . . . . Complessit computazionale di uno schema . . . . . . . . . Il metodo delle secanti . . . . . . . . . . . . . . . . . . . . . . Confronto tra i metodi di Newton-Raphson e la Regula Falsi Metodo di Newton-Raphson per radici multiple . . . . . . . Controllo sugli scarti e graci di convergenza . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

4.1 Introduzione
Il problema di calcolare la radice quadrata di un numero un problema molto antico. Gi p gli antichi Babilonesi, intorno al 1700 a.C., se lo erano posto e avevano trovato la soluzione: per calcolare 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. p Lalgoritmo si pu schematizzare nel modo seguente: partire da x 0 prossimo a b ; 1 b considerare x 1 = (x 0 + ); 2 x0 1 b generalizzando: x n +1 = (x n + ). 2 xn 37

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . .

4. Z ERI DI FUNZIONE p Per esempio, per calcolare 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 2 x1 = 1 2 (1.5 + 1.5 ) = 1.41666667 2 x2 = 1 2 (1.41666667 + 1.41666667 ) = 1.41421569 2 x3 = 1 2 (1.41421569 + 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 2]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. a1 + b1 Si pone a 1 = a e b 1 = b . Si prende il punto medio dellintervallo [a 1 , b 1 ], c 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 bn an sufcientemente piccola, cio t ol l dove t ol l una certa tolleranza pressata. In tal caso 2 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 | ba . 2n

Da questa relazione, si pu determinare il numero di iterazioni n necessarie per calcolare unapprossimazione della radice entro una certa tolleranza t ol l richiesta. Infatti ba t ol =) | c n | t ol 2n Ma ba ba t ol () 2n =) n 2n t ol log ba 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 indicato con itmax.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Dati di input: a , b, t ol , i t max Dati di output: soluzione approssimata c o messaggio di fallimento vericare che f (a ) f (b ) < 0, altrimenti non si pu implementare il metodo ; n 1 ; c (a + b )/2 ; scar t o |b a |/2 ; Fintantoch n i t max e ( f (c ) 6= 0 e sc ar t o > t ol ) n n + 1 (incrementa n ) ; Se f (a ) f (c ) > 0 allora a c altrimenti b c Fine-Se aggiorna c ; aggiorna sc ar t o ; Fine-Fintantoch Se f (c ) = 0 o scar t o t ol allora c la soluzione approssimata altrimenti n > i t max ; il metodo fallito dopo i t max iterazioni ; 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. Z ERI DI FUNZIONE x 2 x 2 Ad esempio, da f (x ) = sin (x ) = 0, aggiungendo ad ambo i membri x , otteniamo sin (x ) + x = x 2 x 22 da cui poniamo g (x ) = sin (x ) + x . Le radici della f coincidono con i punti ssi della g . 2 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 cos2 (x 0 )! Abbiamo innescato, in questo modo, un procedimento iterativo per cui x n +1 = cos (x n ) = g (x n ). Con la calcolatrice, basta digitare sulla funzione cos ogni 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 5 11 13 14 15 29 30 56 57 58 xn 0.7013687746 0.7356047404 0.7414250866 0.7375068905 0.7401473356 0.7390893414 0.7390822985 0.7390851333 0.7390851332 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 ).

1 Esempio 4.3.2 Consideriamo la funzione g (x ) = x + 2. Partendo da x 0 = 0 si ha 2 n xn 1 x1 = 1 2 0+2 = 2 2 x2 = 1 2 2+2 = 3 3 x3 = 1 2 3 + 2 = 3.5 4 x4 = 1 2 3.5 + 2 = 3.75 5 x5 = 1 2 3.75 + 2 = 3.875 6 x6 = 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 1 1 1 che tende a , si ha, da una parte = limn !1 x n +1 = limn !1 x n + 2 = + 2 da cui, = + 2, cio = 4. 2 2 2

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 2] 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 2 che |x 0 | > 1 allora lo schema iterativo x n +1 = x n diverge a +1. 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 attrazione: 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 2 [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 2 [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 (n 1 )( x n 1 ) . . . .=. .

41

4. Z ERI DI FUNZIONE

1 Figura 4.2: Il metodo di punto sso: esempi con g (x ) = cos (x ) (a sinistra), e g (x ) = x + 2 (a destra) 2

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 (n 1 )| | x 0 | | x 1 | . . . | x n 1 | La relazione appena trovata pu essere semplicata, dividendo ambo i membri per | x 1 | | x 2 | . . . | x n 1 | ottenendo: | x n | = |g 0 (0 )| |g 0 (1 )| |g 0 (2 )| . . . |g 0 (n 1 )|| 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 ) cos (x ) 1 x +2 2 2 x g 0 (x ) sin (x ) 1 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. 1 Nellesempio 4.3.2 g 0 (x ) = qualunque sia x : si ha convergenza. 2 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 ) = x sin (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 ) = 1 cos (x ). Si ha g 0 (0) = 1 1 = 0, g 0 () = 1 (1) = 2 e g 0 (2) = 1 1 = 0. Da queste informazioni, deduciamo che qualunque sia il punto iniziale 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 |x n x n 1 | 1m

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

43

4. Z ERI 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 n 1 ) 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 n 1 | (4.1) Possiamo scrivere x n 1 nel modo seguente aggiungendo e sottraendo x n : x n 1 = x n + x n x n 1 | x n 1 | m | x n 1 | + |x n x n 1 | x n 1 = g () g (x n 1 ) + x n x n 1

(1 m )| x n 1 | |x n x n 1 | 1 | x n 1 | |x n x n 1 | 1m Andando a sostituire questa maggiorazione nella disuguaglianza (4.1), si ha m | x n | |x n x n 1 | 1m Abbiamo una maggiorazione dellerrore che lega lerrore al passo n con il valore assoluto della differenza tra due iterazioni successive |x n x n 1 | (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 n 1 |. 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

1 2 3 4 5 6 7 8 9 10 11 12 13

Dati di input: x 0 , t ol , i t max Dati di output: x n soluzione approssimata o messaggio di fallimento n 1 contatore delle iterazioni; d n 2t ol (una quantit iniziale > t ol ) ; Fintantoch n i t max e d n > t ol incrementa n di 1; applicare lalgoritmo di punto sso x n = g (x n 1 ) ; aggiorna d n ; Fine-Fintantoch Se d n t ol allora x n la soluzione approssimata altrimenti n > i t max ; il metodo fallito dopo i t max iterazioni ; Fine-Se

4.4 Il Metodo di Newton-Raphson


Il metodo di Newton-Raphson1 uno dei metodi pi potenti e pi famosi per risolvere equazioni non lineari. 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, = xn 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. Z ERI DI FUNZIONE

Applicando la formula di Taylor di centro x n , deve essere 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 ) f (x n +1 ) = f (x n + h ) = f (x n ) + f 0 (x n )h + f 00 (h )h 2 /2

Utilizziamo questo valore di h per la nuova approssimazione x n +1 = x n + h ottenendo la formula f (x n ) , f 0 (x n )

x n +1 = 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 applicato 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 (x ) f 00 (x ) |=| | 0 2 f (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 ) f ( + n ) n +1 = n 0 f ( + 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


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

Poich f () = 0, raccogliendo i termini si ricava: n +1 = f 0 () + n f 00 () + . . .

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

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

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 () 2 = A 2 n 2 f 0 () n ponendo A = f 00 () . 2 f 0 ( )

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

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

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 102 , al passo successivo lerrore proporzionale a 104 e poi a 108 no a 1016 in tre sole iterazioni. Generalmente, quindi, il numero delle cifre signicative raddoppia ad ogni passo del metodo. Si parla di convergenza quadratica. Nel caso in cui sia una radice multipla, allora f 0 () = 0 e A = 1: 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.

Sulla convergenza

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 |. che In generale un metodo ha ordine di convergenza p se si possono denire due costanti p 1 e M > 0 tali lim |x n +1 | =M | x n | p

n !1

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 costante asintotica dellerrore e la f 00 ( quella che abbiamo denito come A presa in valore assoluto, cio M = 0 . 2 f () 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 = g 0 ()n

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

47

4. Z ERI DI FUNZIONE

1 (considerando 2 che, ad ogni passo, si riduce della met lintervallo in cui viene cercata lapprossimazione della radice). Il metodo delle bisezioni, invece, pu essere visto come un metodo lineare, con M =

La costante asintotica per lo schema di punto sso vale, dunque, M = |g 0 ()|.

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: 2x n cos (x n ) + 1 x n +1 = x n 2 + sin (x n ) Partendo da x 0 = 0.5 e richiedendo una tolleranza pari a 1010 nei risultati (interrompiamo lalgoritmo quando d n < 1010 ), si ha: n 0 1 2 3 4 5 xn 0.5 0.4730746270E-01 0.5462695134E-03 0.7458221874E-07 0.1395426403E-14 0.7647622253E-17 dn 0.4526925E+00 0.4676119E-01 0.5461949E-03 0.7458222E-07 0.1387779E-14 | f 00 ()| | cos ()| = = 0 2| f ()| 2(|2 + sin ()|)

I valori generati dallalgoritmo tendono a = 0.

Considerando che f 00 (x ) = cos (x ) possiamo valutare la costante asintotica M =

1 = 0.25 4 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: f (x n ) x n +1 = x n 0 x n + ( x n ) f (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 d2 d3 d4 d5 = 0.2282 = 0.2498 = 0.2500 = 0.2495 2 2 2 (d 1 ) (d 2 ) (d 3 ) (d 4 )2

4.6

Complessit computazionale di uno schema

Un altro elemento da considerare per valutare lefcienza numerica di uno schema iterativo la sua complessit 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 f (x n ) x n +1 = x n Cn 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. f (x 1 ) f (x 0 ) Cn = : abbiamo sempre una costante che approssima la derivata f 0 (x 0 ) utilizzando i valori x1 x0 di x 1 e x 0 . Lo schema detto della secante ssa. f (x n ) f (x n 1 ) Cn = . La derivata f 0 (x n ) approssimata utilizzando il rapporto incrementale della f x n x n 1 valutata in x n e x n 1 . Abbiamo il metodo delle secante variabile, che chiameremo nel seguito anche metodo2 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 n 1 ) f (x n ) f (x n 1 )

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 n 1 , f (x n 1 ). Per quanto riguarda laccumulo degli errori di arrotondamento, 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 n 1 f (x n ) x n f (x n 1 ) f (x n ) f (x n 1 )

in quanto in questultima, si pu avere il fenomeno della cancellazione numerica per x n x n 1 e f (x n ) f (x n 1 ) > 0. Per quanto riguarda lordine di convergenza si pu dimostrare che si ha convergenza superlineare poich vale la relazione p p p n +1 = M + 1 n p 1+ 5 dove p = = 1.618 e A la costante asitontica del metodo di Newton-Raphson, da cui 2 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. Z ERI 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 Newton-Raphson Regula Falsi p 2 1.618 s 2 1 E p 2 1.414 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 n 1 | sar minore di t ol . Otteniamo i seguenti risultati per il metodo di Newton-Raphson
n 0 1 2 3 4 5 6 xn 1.3 2.714526871831 2.084760792766 1.944113685369 1.933811265085 1.933753764621 1.933753762827 f (x n ) -0.541058185 1.42796213 0.215754599 0.0137718957 7.60156095E-05 2.37200355E-09 -1.00668172E-16 f 0 (x n ) 0.382501171 2.26744846 1.53401376 1.33676314 1.32199993 1.32191743 dn 1.41452687 0.629766079 0.140647107 0.0103024203 5.7500464E-05 1.79436599E-09
2 d n /d n 1

0.314743565 0.35462739 0.520808008 0.541742396 0.542710632

50

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

Per la Regula Falsi:


n 0 1 2 3 4 5 6 7 8 9 xn 1.3 1.35 2.590702853065 1.735341043061 1.879309845941 1.940687248331 1.933542654410 1.933752971771 1.933753762918 1.933753762827 f (x n ) -0.541058185 -0.520098358 1.15448972 -0.233640901 -0.0698346071 0.00919996444 -0.000279035921 -1.04570967E-06 1.19824825E-10 -1.00668172E-16 f (x n ) f (x n 1 ) x n x n 1 0.419196552 1.34970922 1.62285784 1.1377902 1.28768192 1.32673746 1.3217654 1.32191686 dn
1.618 d n /d n 1

1.24070285 0.85536181 0.143968803 0.0613774024 0.00714459392 0.000210317362 7.91146198E-07 9.0644825E-11

0.603386215 0.185374473 1.41231076 0.653100215 0.623935239 0.704441455 0.676026603

Attraverso gli scarti, abbiamo fatto una stima della costante asintotica dellerrore, considerando che, al 2 1.618 limite per k ! 1, x n ! . Le ultime colonne delle tabelle, infatti, valutano i rapporti d n /d n 1 e d n /d n 1 . Diamo unulteriore stima di tali costanti facendo uso della denizione teorica e considerando x n . | f 00 ()| Per il metodo di Newton-Raphson dobbiamo calcolare M = mentre per la Regula Falsi dobbiamo 2 | f 0 ()| 0.618 considerare il valore M . 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 convergenza 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 precisioneb , richiedendo unaccuratezza dellordine = 108 .
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 . 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.

51

4. Z ERI DI FUNZIONE

Abbiamo le seguenti tabelle. Per Newton-Raphson n 0 1 2 3 . . . n n+1 Per la Regula Falsi: n 0 1 2 3 4 xn 1.1655612 -1.1655612 0.000000024087 -0.000000006462 0.000000000000 f (x n ) 0.919009745 -0.919009745 0.000000024087 -0.000000006462 0.0000000000000 f (x n ) f (x n 1 ) x n x n 1 0.788469732 0.788469732 3.05485912E-08 dn xn 1.1655612 -1.1655612 1.1655612 -1.1655612 . . . 1.1655612 -1.1655612 f (x n ) 0.919009745 -0.919009745 0.919009745 -0.919009745 . . . 0.919009745 -0.919009745 f 0 (x n ) 0.394234866 0.394234866 0.394234866 0.394234866 . . . 0.394234866 0.394234866 dn 2.3311224 2.3311224 2.3311224 . . . 2.3311224 2.3311224

1.1655612 2.38417108E-08 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 propriet 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 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.

Quando NewtonRaphson d risultati scarsi

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 tolleranza 108 , sono necessarie 88 iterazioni per arrivare a = 1.430969081115725849. Vediamo in tabella, come cambia il numero delle iterazioni al variare di x 0 : x0 0.05 0.1 0.5 0.8 1.0 1.4 1.5 2. 3. 10. 20. 100. iterazioni 59 46 18 10 7 4 4 6 8 14 17 24

4.9 Metodo di Newton-Raphson per radici multiple


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 diventa3 : n +1 = r 1 n r

r 1 . Per poter avere un metodo che sia di nuovo a convergenza r quadratica, occorre modicare lalgoritmo, ottenendo la formula di Newton-Raphson modicata, nel modo seguente: da cui la costante asintotica M = f (x n ) f 0 (x n )

x n +1 = x n r

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 generata dallo schema iterativo viene effettuato sullo scarto d n = |x n x n 1 | piuttosto che sullerrore (assoluto) 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 )

(1 M )n +1 Md n +1

3 Il procedimento da seguire del tutto simile a quanto stato fatto nellipotesi in cui f 0 () 6= 0. Come esercizio, si consiglia di provare a ricavare questo risultato.

53

4. Z ERI DI FUNZIONE

Supponendo d n +1 t ol l , vale M M d n +1 t ol l 1M 1M

n +1 Perci, per

M < 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 1M 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 p un metodo, per cui d n Md n 1 . Nel caso in cui p = 1, si ha: d n 1 Md n 2 d n 2 Md n 3 . . . .. . d 2 Md 1 d 1 Md 0 Partendo dalla prima relazione abbiamo: d n Md n 1 M 2 d n 2 M 3 d n 3 . . . M n d 0 Troviamo una relazione tra d n e d 0 . Passando ai logaritmi: log10 (d n ) = n log10 (M ) + log10 (d 0 ) Abbiamo unequazione del tipo y = ax + b dove y = log10 (d n ) e x = n , che rappresenta lequazione della retta nel nostro graco semilogaritmico, e la pendenza della retta vale a = log10 (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 2n . d n Md n 1

Esempio 4.10.1 In Figura 4.8, riportiamo un esempio di graco con i proli di convergenza per i metodi 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. Per x 0 = 1 si ha Per x 0 = 2.5 si ha k x k g (x k ) k xk g (x k ) 0 1 5 0 2.5 2.75 (c) 1 5 9 1 2.75 2.8125 2 9 45 2 2.8125 2.84765625 3 45 1809 3 2.84765625 2.870864868 55

4. Z ERI 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 comportamento 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 + 3 ln (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 3 2x 2 2x + 3 1) + = sempre positivo nellintervallo dato, (la parabola 2x 2 2x + 3 ha discriminante x x 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 0 1 2 3 xk 0.50000000E+00 0.86588831E+00 0.99541173E+00 0.99999643E+00 f (x k ) -0.18294415E+01 -0.41401211E+00 -0.13775443E-01 f 0 (x k ) 0.50000000E+01 0.31964267E+01 0.30046517E+01

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 )|

3 3 e f 00 (x ) = 2 2 . x x 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: dove, nel caso specico, vale f 0 (x ) = 2(x 1) + k 0 1 2 3 xk 0.50000000E+00 0.86588831E+00 0.97291038E+00 0.99920448E+00 f (x k ) -0.18294415E+01 -0.41401211E+00 -0.81656072E-01 f (x n ) f (x n 1 ) x n x n 1 0.38684741E+01 0.31054906E+01

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 (1 x ) 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) + 0 1 = 1

f (1) = sin (1) + 1 1 = 0.8414709848 La derivata prima della f f 0 = cos (x ) + 1: funzione continua e sempre positiva 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 ) = 1 x , da cui x = arcsin (1 x ). Consideriamo perci lo schema del punto sso con g (x ) data da g (x ) = arcsin (1 x ). La derivata di 1 g (x ) g 0 (x ) = p . 1 (1 x )2 Nellintervallo [0, 1] valgono le seguenti disuguaglianze: =) 1 (1 x )2 0 =) 1 (1 x )2 0 =) 0 1 (1 x )2 1 =) p 1 =) 0 1 (1 x )2 1 =) 1 p 1 (1 x )2 0 x 1 =) 0 x 1 =) 1 1 x 0 =)

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. Z ERI DI FUNZIONE

Utilizziamo la notazione M 1 e M 2 per indicare la stima della costante asintotica dellerrore mediante le formule M1 = |x k +1 x k | |x k x k 1 |2 k 0 1 2 3 o M2 = | f 00 (x k )| 2 | f 0 ( x k )| f 0 (x k ) 0.19950042E+01 0.18770618E+01 0.18722750E+01 |x k x k 1 | 0.40108517E+00 0.98756733E-02 0.12586802E-04

Partendo da x 0 = 0.1 si ottengono i seguenti valori: xk 0.1 0.50108517E+00 0.51096084E+00 0.51097343E+00 f (x k ) -0.80016658E+00 -0.18537249E-01 -0.23565955E-04 -0.38737166E-10

(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 : 1 1 + 2x 2 x f 0 (x ) = + 2x 1, che possiamo anche scrivere come f 0 (x ) = : numeratore e denominatore x x 2 sono entrambi sempre positivi nellintervallo dato, (la parabola 2x 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. f (x k ) (c) Il metodo di Newton-Rapshon x k +1 = x k 0 dove f 0 = 1/x + 2x 1. Partendo da x 0 = 1.1, si ricava f (x k ) 0.20531018 x 1 = 1.1 = 1.002654656 2.1090909 58

4.11. Esercizi

(d) Applicando il metodo della Regula Falsi si ha: k xk f (x k )

1 1.002654656 0.5312842078E-02 2 1.000068720 0.1374413812E-03 3 1.000000046 (e) Considerato che la radice esatta = 1, la costante asintotica di convergenza della Regula Falsi si calf 00 () 1 1 cola utilizzando lespressione M = | 0 |0.618 . Da f 0 (x ) = + 2x 1 segue f 0 (1) = 2 e f 00 (x ) = 2 + 2, 2 f () x x 1 0.618 00 da cui f (1) = 1, per cui M = = 0.4245481. 4

f (x k ) f (x k 1 ) x k x k 1 0.2054513650E+01 0.2001364094E+01

59

5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 62 63 63 65 66 68 71 71 72 73

I NTERPOLAZIONE

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 5.2 5.3

5.4

5.5

Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interpolazione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Funzioni base monomiali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.2 Polinomi di Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.3 Formula dellerrore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.4 Differenze divise e formula di Newton . . . . . . . . . . . . . . . . . . . . Considerazioni sullinterpolazione polinomiale . . . . . . . . . . . . . . . . . . . 5.4.1 Fenomeno di Runge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.2 Malcondizionamento nellinterpolazione con funzioni base monomiali Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

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

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . .

5. I NTERPOLAZIONE

Anno Popolazione Anno Popolazione

1861 22176 1936 42398

1871 27300 1951 47516

1881 28952 1961 50624

1901 32963 1971 54137

1911 35842 1981 56557

1921 39397 1991 56778

1931 41043 2001 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 indipendenti1 . 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, un polinomio 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 xi yi 1 1 2 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 , , . . . , si dicono linearmente indipendenti se vale: c (x ) + . . . c (x ) 0 per ogni x se e solo se tutti i n n n 0 1 0 0 coefcienti sono nulli c 0 = . . . = c n = 0.

63

5. I NTERPOLAZIONE

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 xi yi 1 1 2 3 4 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: 8 > < p 2 ( x 0 ) = c 0 + 1c 1 + 1c 2 = 1 > : p 2 ( x 1 ) = c 0 + 2 c 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 : 2 7 c 0 = , c 1 = 4, c 2 = . 3 3 11 Il polinomio p 2 (x ) = (2x 2 + 12x 7)/3. Per x = 3 si ha p 2 (3) = = 3.666666667, valore ben diverso da 3 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 : 8 2 n > p n (x 0 ) = y 0 () c 0 + c 1 x 0 + c 2 x 0 + . . . + cn x0 = y0 > > > > 2 n > p (x ) = y 1 () c 0 + c 1 x 1 + c 2 x 1 + . . . + c n x 1 = y 1 > > < n 1 2 n p n (x 2 ) = y 2 () c 0 + c 1 x 2 + c 2 x 2 + . . . + cn x2 = y2 > > . > . > > . > > > :p (x ) = y () c + c x + c x 2 + . . . + c x n = y n n n 0 1 n 2 n n n n 64

5.3. Interpolazione polinomiale

In forma compatta, sotto forma matriciale2 le equazioni del sistema si possono scrivere come 0 1 2 n 0 1 0 1 1 x0 x0 . . . x0 y0 2 n C c0 B1 x x1 . . . x1 1 B C Bc C B y C B1 x 2 nCB 1C B 1C x2 . . . x2 B CB . C = B . C 2 B. CB . C B . C . . . B. C@ . A @ . A . . . @. . . . A cn yn 2 n 1 xn xn . . . xn

La matrice dei coefcienti una matrice ben nota in letteratura e prende il nome di matrice di Vandermonde.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 , con ascisse distinte x i , esiste un unico polinomio interpolatore p (x ) di grado al pi n 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 in quanto la soluzione del sistema diventa inaccurata4 , 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 ( 0 se i 6= j L j (x i ) = 1 se i = j P 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 A x = b 5 Joseph Louis Lagrange (1736-1813) nacque a Torino (come Giuseppe Luigi Lagrangia) e si trasfer in Francia, a Parigi, dove divenne 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. I NTERPOLAZIONE

I polinomi di Lagrange sono deniti dalla relazione:6 L j (x ) =


n (x x ) Y k ( x x j k) k =0

k 6= j

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


n x x Y k k =0 x j x k

k 6= j

Esempio 5.3.3 Siano date le tre coppie di punti dellesempio precedente (1, 1), (2, 3), (4, 3). I polinomi di Lagrange sono: (x 2)(x 4) (x 2)(x 4) L 0 (x ) = = (1 2)(1 4) 3 (x 1)(x 4) (x 1)(x 4) L 1 (x ) = = (2 1)(2 4) 2 (x 1)(x 2) (x 1)(x 2) L 2 (x ) = = (4 1)(4 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 3 (x 2)(x 4) (x 1)(x 4) + (x 1)(x 2) 3 2 6

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.

Formula dellerrore

5.3.3 Formula dellerrore


Supponiamo, ora, che le ordinate y i siano i valori di una funzione f valutata nei punti di appoggio x i . Conosciamo, 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 ) =
n f (n +1) ((x )) Y (x x i ) (n + 1)! i =0

6 Ricordiamo che, dati n valori w , w , . . . , w usiamo la seguente simbologia per indicare la loro somma e il loro prodotto, rispettin 1 2 vamente: n X

i =1

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

i =1

n Y

wi = w1 w2 w3 . . . wn

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 ) =
k =0 n Y

(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. f (t ) p (t ) Deniamo la quantit S che dipende da t , data da S = e la funzione G (x ) = f (x ) p (x ) SF (x ). F (t ) 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. Maa G (n +1) () = f (n +1) () S (n + 1)! Si ha perci: f (t ) p (t ) f (n +1) () f (n +1) () S (n + 1)! = 0 ovvero =S = F (t ) (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 n f (n +1) ((x )) Y f (x ) p (x ) = (x x i ) (n + 1)! i =0
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. I NTERPOLAZIONE

Differenze divise e formula di Newton

5.3.4 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 un certo j ) allora il cambiamento immediatamente visibile nellintero polinomio di 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 Y

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 n 1 ) 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 f (x 1 ) f (x 0 ) 3 1 Ricaviamo quindi c 1 = = = 2. Chiamiamo questa quantit differenza divisa del primo x1 x0 21 ordine tra x 0 e x 1 e la indichiamo con f [x 0 , x 1 ]. Quindi f (x 1 ) f (x 0 ) f [x 0 , x 1 ] = x1 x0 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 ](4 1) + c 2 (4 1)(4 2) 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 ) x2 x1 f [x 0 , x 1 ] = c 2 (x 2 x 0 ) x2 x1 x2 x1 f (x 2 ) f (x 1 ) f [x 0 , x 1 ] = c 2 (x 2 x 0 ) x2 x1

68

5.3. Interpolazione polinomiale

f (x 2 ) f (x 1 ) = f [x 1 , x 2 ] la differenza divisa del primo ordine tra x 1 e x 2 da cui x2 x1 f [x 1 , x 2 ] f [x 0 , x 1 ] f [x 1 , x 2 ] f [x 0 , x 1 ] = c 2 (x 2 x 0 ) =) c 2 = x2 x0 La quantit chiamata c 2 prende il nome di differenza divisa del secondo ordine e si indica con f [x 1 , x 2 ] f [x 0 , x 1 ] f [x 0 , x 1 , x 2 ] = . x2 x0 4 2 Facendo le opportune sostituzioni si ricava c 2 = = . Quindi, p 2 (x ) = f (x 0 ) + f [x 0 , x 1 ](x x 0 ) + 6 3 2 f [x 0 , x 1 , x 2 ](x x 0 )(x x 1 ) Nellesempio considerato: p 2 (x ) = 1 + 2(x 1) (x 1)(x 2) 3 Ma

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 polinomio 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 ) dato 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 n 1 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 xi

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 n 1 )

Da un punto di vista computazionale i coefcienti si ricavano mediante la tabella delle differenze divise, 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. I NTERPOLAZIONE

xi x0 x1 x2 x3

f [] f (x 0 ) f (x 1 )

f [ , ] f [x 0 , x 1 ]

f [ , , ] f [x 0 , x 1 , x 2 ]

f [ , , , ]

f [ , , , , ]

f [x 1 , x 2 ] f (x 2 ) f [x 2 , x 3 ] f (x 3 ) f [x 3 , x 4 ] x4 . . . f (x 4 ) . . . . . . f [x 2 , x 3 , x 4 ] . . . f [x 1 , x 2 , x 3 ]

f [x 0 , x 1 , x 2 , x 3 ] f [x 0 , x 1 , x 2 , x 3 , x 4 ] f [x 1 , x 2 , x 3 , 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). xi 1 2 4 f [] 1 3 0 3 f [ , ] 2 f [ , , ] 2 3

2 Il polinomio p 2 (x ) si scrive: p 2 (x ) = 1 + 2(x 1) (x 1)(x 2). 3 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. xi 1 2 f [] 1 3 0 4 5 3 1 4 1 3 f [ , ] 2 f [ , , ] 2 3 f [ , , , ]

1 4

1 Il polinomio p 3 (x ) p 3 (x ) = p 2 (x ) + (x 1)(x 2)(x 4). 4

Il concetto di differenza divisa pu essere visto come unestensione del concetto di derivata di una funzione. 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

Derivata k -sima della f

La differenza divisa k -sima e la derivata k -sima di f sono legate tra loro. Si pu provare, infatti, per k 1 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
0 ,x 0 ,...,x 0 ] = f [x| {z }

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 ) + 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 nellapprossimare 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:
n n Y f (n +1) ((x )) Y (x x i ) = f [x 0 , x 1 , . . . , x n , x ] (x x i ) (n + 1)! i =0 i =0

k +1 volte

f (k ) (x 0 ) k!

Formula dellerrore

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 1 e famoso esempio ce lo fa capire. Sia data la funzione di Runge7 f (x ) = e consideriamo il polino1 + x2 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 xi y i = f (x i ) 5 3.846154e 2 0 1. 5 3.846154e 2

Fenomeno di Runge

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 xi y i = f (x i ) 5 3.846154e 2 2.5 1.379310e 1 0 1. 2.5 1.379310e 1 5 3.846154e 2

Con lo stesso procedimento, costruiamo i polinomi di interpolazione di grado 8 e 16. In Figura 5.4 sono riportati 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 interpolazione 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. I NTERPOLAZIONE

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 base 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 xi yi 1010.5 4 1011.5 2.5 1012.5 2.5 1013 2 1014 2 1015 0

Confrontando i vari algoritmi di interpolazione, osserveremo che gli algoritmi di Lagrange e delle differenze 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 Vandermonde; la soluzione del sistema lineare per ricavare i coefcienti del polinomio con funzioni base monomiali; il calcolo dei valori del polinomio. 2 3 La matrice di Vandermonde consiste di colonne che crescono di colonna in colonna - 1, x i , x i , xi , . . ., 5 15 x i . Per questo caso test, si va da 1 a elementi dellordine di 10 . La matrice molto mal condizionata. Perci la soluzione del sistema lineare non pu 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: xi f (x i ) -1 9 0 0 2 0 3 15 4 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. I NTERPOLAZIONE

xi -1 0 2 3 4

f (x i ) 9 0 0 15 84

f ( , ) 09 = 9 0 (1) 00 =0 20 15 0 = 15 32 84 15 = 69 43

f ( , , )

f ( , , , )

f ( , , , , )

0+9 = 3 2 (1) 15 0 =5 30 69 15 = 27 42 53 = 0.5 3 (1) 27 5 11 = 40 2 11/2 1/2 =1 4 (1)

diagonale principale della tabella) p (x ) = 9 9(x + 1) + 3(x + 1)x + 0.5(x + 1)x (x 2) + (x + 1)x (x 2)(x 3) = = x 4 3.5x 3 + 3.5x 2 x

Esercizio 5.5.2 Sia data la tabella seguente: xi f (x i ) 0 1 0.1 0.48 0.8 1.32 1.2 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 : xi 0 0.1 0.8 1.2 f (x i ) 1 0.48 1.32 5.32 f ( , ) 0.48 1 = 5.2 0.1 1.32 0.48 = 1.2 0.7 5.32 1.32 = 10 0.4 1.2 + 5.2 =8 0.8 10 1.2 =8 1.1 88 =0 1.2 f ( , , ) f ( , , , )

74

5.5. Esercizi

(b) I polinomi di Newton di grado 0,1,2 e 3 sono: p 0 (x ) = 1

p 1 (x ) = 1 5.2x

p 2 (x ) = 1 5.2x + 8x (x 0.1) = 8x 2 6x + 1

p 3 (x ) = 1 5.2x + 8x (x 0.1) + 0x (x 0.1)(x 0.8) = 1 5.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
0 p0 (x ) = 0 0 p1 (x ) = 5.2

0 p2 (x ) = 16x 6

0 n p n (0.6) p 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 :

La stima di f (0.6) e f 0 (0.6) :

(x 0.1)(x 0.8) x 2 0.9x + 0.08 = (0.1)(0.8) 0.08 x (x 0.8) x 2 0.8x L 1 (x ) = = 0.1(0.1 0.8) 0.07 2 x (x 0.1) x 0.1x L 2 (x ) = = 0.8(0.8 0.1) 0.56 L 0 (x ) = Il polinomio : p 2 (x ) = 1L 0 (x ) + 0.48L 1 (x ) + 1.32L 2 (x ) =

x 2 0.9x + 0.08 x 2 0.8x x 2 0.1x 0.48 + 1.32 0.08 0.07 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. I NTERPOLAZIONE

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) =9 2! 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 0 2 f 0 (0)=7 2 f 0 (0)=7 0 2 27 2 =25 10 f 0 (1)= 60 1 27 25 7 =18 10 60 25 =35 10 f 00 (0)/2=9

18 9 =9 10 35 18 =17 10

17 9 =8 10

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

6
Platone

A PPROSSIMAZIONE

I numeri governano il mondo.

6.1 6.2 6.3 6.4 6.5

Introduzione . . . . . . . . . . . . . . . . . . . . . . Retta di regressione lineare . . . . . . . . . . . . . . Approssimazione polinomiale ai minimi quadrati Approssimazioni di tipo esponenziale . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

CAPITOLO
. . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

77 78 80 81 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 F 0.00000 1.472481 0.04200 2.418165 0.08000 3.363849 0.11800 4.309533 0.15600 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. A PPROSSIMAZIONE

Figura 6.1: Legge di Hooke: i dati sperimentali xi yi 1 1.2 2 2.3 3 4.5 4 5.1 5 7 6 8.5 7 10.2 8 13.1 9 12.5 10 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 globale1 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 in Figura 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 sperimentale, 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 X 2 (a 0 + a 1 x i ) y i

i =0

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= 0=
n n X 2 @S (a 0 , a 1 ) @ X = (a 0 + a 1 x i ) y i = 2 (a 0 + a 1 x i ) y i @a 0 @a 0 i =0 i =0

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

n n X 2 @S (a 0 , a 1 ) @ X = (a 0 + a 1 x i ) y i = 2 (a 0 + a 1 x i ) y i x i @a 1 @a 1 i =0 i =0

P Pn Pn Pn 2 Introducendo la notazione A 12 = n i =0 x i , A 22 = i =0 x i , b 1 = i =0 y i e b 2 = i =0 x i y i e osservando che la matrice del sistema simmetrica ( A 12 = A 21 ), la soluzione data da: a0 = (n + 1) A 22 A 2 12 A 22 b 1 A 12 b 2 a1 = (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 consideP Pn rando la prima equazione del sistema si ha, per X = n i =0 x i /(n + 1) e Y = i =0 y i /(n + 1) (le coordinate del baricentro dei punti assegnati): a0 + a1 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.

Sul baricentro

79

6. A PPROSSIMAZIONE

xi 1 2 3 4 5 6 7 8 9 10 A 12 = 55

yi 1.2 2.3 4.5 5.1 7 8.5 10.2 13.1 12.5 16.5 b 1 = 80.9

2 xi 1 4 9 16 25 36 49 64 81 100 A 22 = 385

xi y i 1.2 4.6 13.5 20.4 35 51 71.4 104.8 112.5 165 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


In generale, 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 X 2 2 m (a 0 + a 1 x i + a 2 x i + . . . + am xi ) yi

i =0

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 =0 @a j Ricaviamo, quindi 2
n X m (a 0 + a 1 x i + . . . + a m x i y i )x i = 0 j

j = 0, 1, . . . , m

i =0

per j = 0, 1, . . . , m

In forma estesa possiamo scrivere a0


n X

i =0

xi + a1

i =0

Poich queste equazioni si hanno per j = 0, 1 . . . , m , si ha da risolvere un sistema, che, scritto in forma matriciale, : AT Aa = AT b dove A una matrice rettangolare (n + 1) (m + 1), data da 0 1 2 m 1 x0 x0 . . . x0 B1 x 2 mC x1 . . . x1 B C 1 B C A = B. . . . C . . . . @. . . . A 1 xn
2 xn

n X

xi

j +1

+ . . . + am

i =0

n X

xi

j +m

i =0

n X

xi y i

per j = 0, 1, . . . , m

...

m xn

Le equazioni del sistema sono dette equazioni normali. Si pu provare che la matrice Q = A T A simmetrica, denita positiva3 ed non singolare, quindi il sistema ammette soluzione.

6.4 Approssimazioni di tipo esponenziale


Pu capitare che i dati sperimentali abbiano un andamento di tipo esponenziale o ricordino una 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 y (x ) = ax modello esponenziale 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 , Yi = 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 a0 e b = a 1 .

3 Le denizioni di matrice simmetrica e matrice denita positiva sono date nel Capitolo 7.

81

6. A PPROSSIMAZIONE

Nel caso del modello potenza, passando ai logaritmi (qualunque sia la base usata, il risultato non cambia) si ha: log ( y ) = log (a ) + b log (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 ), Yi = 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: xi f (x i ) -1 9 0 0 2 0 3 15 4 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 : ( P Pn (n + 1)a 0 + n i =0 x i a 1 = i =0 y i Pn P Pn n 2 i =0 x i a 0 + i =0 x i a 1 = i =0 x i y i ( 5a 0 + 8a 1 = 108 P4
i =0 x i

dove n + 1 = 5. Poich

= 8,

P4

2 i =0 x i

= 30,

P4

i =0 y i

= 108 e

P4

i =0 x i y i

= 372, si ha il sistema

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. ( P Pn (n + 1)b 0 + n i =0 y i b 1 = i =0 x i Pn Pn Pn 2 i =0 y i b 0 + i =0 y i b 1 = i =0 y i x i ( 5b 0 + 108b 1 = 8 P4
i =0 y i

dove n + 1 = 5. Poich

= 108,

P4

2 i =0 y i

= 7362,

P4

i =0 x i

=8e

P4

i =0 x i y i

= 372, si ha il sistema

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.03960868528 y .

82

6.5. Esercizi

(c) Troviamo il punto di intersezione delle due rette: ( y = 3.069767442 + 11.581395349x x = 0.744452398 + 0.03960868528 y Ricaviamo x = 1.6 e y = 21.6 Se calcoliamo il baricentro dei punti assegnati, troviamo P4 P4 x i 1 + 2 + 3 + 4 y i 9 + 15 + 84 X = i =0 = = 1.6 Y = i =0 = ) = 21.6 5 5 5 5 Il punto di intersezione delle due rette il baricentro dei punti assegnati.

Esercizio 6.5.2 Sono assegnati i seguenti dati sperimentali


xi yi 4.0 102.56 4.2 113.18 4.5 131.2 4.7 142 5.1 168 5.5 196.2 5.9 225 6.3 256.8 6.8 299.51 7.1 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 ) + b log(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 ) 1.386294361 1.435084525 1.504077397 1.547562509 3.931825633 1.704748092 1.774952351 1.840549633 1.916922612 1.960094784 log( y i ) 4.630447993 4.728979472 4.876722876 4.955827058 5.123963980 5.279134547 5.416100402 5.548297572 5.702147806 5.785669634

Calcoliamo la retta di approssimazione ai minimi quadrati, ponendo X i = log(x i ) e Yi = log( y i ). Il sistema da risolvere ( P Pn (n + 1)a 0 + n i =0 X i a 1 = i =0 Yi Pn P Pn n 2 i =0 X i a 0 + i =0 X i a 1 = i =0 X i Yi dove n + 1 = 10. P Pn Pn Pn 2 Si ha n i =0 X i = 16.6995268, i =0 X i = 28.2537116, i =0 Yi = 52.0472913, i =0 X i Yi = 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 a0 = 6.30901637 Invece a 1 = b . Il modello y = ax b diventa quindi y = 6.30901637x 2.013679425 . 83

7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 86 90 90 91 93 94 96 96 98 100 101

M ETODI 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 7.2 7.3

7.4 7.5

7.6

Introduzione . . . . . . . . . . . . . . . . . . . . . . . Elementi di Algebra Lineare . . . . . . . . . . . . . . Metodo di eliminazione di Gauss . . . . . . . . . . . 7.3.1 Sostituzione allindietro e in avanti . . . . . 7.3.2 Eliminazione di Gauss: esempio particolare 7.3.3 Eliminazione di Gauss: caso generale . . . . Strategie di pivoting . . . . . . . . . . . . . . . . . . . Fattorizzazione triangolare . . . . . . . . . . . . . . . 7.5.1 Fattorizzazione LDU . . . . . . . . . . . . . 7.5.2 Fattorizzazione di Gauss senza pivoting . . 7.5.3 Fattorizzazione di Cholesky . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

7.1 Introduzione
Si consideri la capacit C di un conduttore. Dallelettrostatica, sappiamo che vale q = C dove q rappresenta 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 elettrostatico 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

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . . . .

7. M ETODI 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 8 > 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 (7.1) > > . . > . . > > . =. > > > :a x + a x + . . . + a x n1 1 n2 2 nn n = b n 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 sono 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 11 Ba B 21 Ba 31 A = ai j = B B . B . @ . an1 0 a 12 a 22 a 32 . . . an2 a 13 a 23 a 33 . . . an3 ... ... ... ... ... 1 a 1n a 2n C C a 3n C C C . C . . A a nn

Esempio 7.2.1 2 10 5 A= 3 1 0 una matrice 2 3 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 con matrici 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 una matrice 1 n e si parla di vettore colonna se ci si riferisce a una matrice n 1. Per indicare un vettore colonna e un vettore riga si usa, rispettivamente, la notazione 1 x1 Bx C B 2C Bx C 3C x=B B . C B . C @ . A xn 0

Vettori

x = x1

x2

x3

...

xn

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 n m 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 +O = O + A = A ( A + B ) = A + B ( A ) = () A ( A + B ) + C = A + (B + C ) A + ( A ) = A + A = O ( + ) A = A + A 1A = A

87

7. M ETODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

Matrice prodotto

Date due matrici A di dimensione n m e B di dimensione m p , la matrice prodotto di A e B , denotata con C = AB , una matrice i cui elementi c i j sono dati da: ci j =
k =1 m X

ai k bk j = ai 1 b1 j + ai 2 b2 j + . . . + ai m bm j

per i = 1, 2, . . . , n e j = 1, 2, . . . , p . Data una matrice A di dimensione n e un vettore colonna x di lunghezza n , si denisce il vettore y = A x prodotto della matrice A per il vettore x, il vettore le cui componenti sono date da yi =
n X

Prodotto matricevettore

j =1

a i j x j per i = 2, . . . , n

Prodotto scalare tra vettori Matrice diagonale

P Dati due vettori x e y si denisce prodotto scalare xT y = n i =1 x i y i . In generale, AB 6= B A . Una matrice D si dice diagonale se quadrata con d i j = 0 per i 6= j . Gli elementi diversi da zero si 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: 1 B0 D =B @0 0 0 0 2 0 0 0 0 5 0 1 0 0C C 0A 1

Matrice Identit

Si chiama matrice identit e si indica con I , una matrice diagonale i cui elementi diagonali valgono 1. Esempio: 0 1 B0 I =B @0 0 0 1 0 0 0 0 1 0 1 0 0C C 0A 1

Matrice tridiagonale

Una matrice si dice tridiagonale se gli elementi non nulli si trovano sulla diagonale principale e sugli elementi delle diagonali che si trovano sopra e sotto la diagonale principale. Esempio: 0 2 B1 B A=B B0 @0 0 1 2 1 0 0 0 1 2 1 0 0 0 1 2 1 1 0 0C C 0C C 1A 2

Matrice triangolare superiore

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 quale, per j = 1, 2, . . . , n , si ha u i j = 0 per i = j + 1, j + 2, . . . , n

Matrice triangolare inferiore

Si denisce matrice triangolare inferiore L (L sta per lower ) di dimensione n , la matrice per la 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 1 U = @0 0 0 2 3.2 0 1 5.3 4 A 10 1 L=@ 2 3.4 0 0 21 5.7 1 0 0A 4

Teorema 7.2.2 Date A matrice n m, B matrice m s, C matrice s p, D matrice m s, 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 Im B = B B Is = B A (B + D ) = AB + AD ( 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 esiste una matrice, che indichiamo come A 1 di dimensione n tale che A A 1 = A 1 A = I La matrice A 1 si chiama matrice inversa della A. Una matrice che non ha inversa si dice, invece, singolare (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 A x = 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 dimensione m n, per la quale la colonna i della trasposta coincide con la riga i della matrice A di partenza: T ai = aji . j Esempio: 1 A= 2 2 5 3 6 0 1 A T = @2 3 1 2 5A 6
Trasposta di una matrice Matrice inversa

Legata alla trasposta di una matrice la seguente denizione. Denizione 7.2.4 Una matrice quadrata si dice simmetrica se A = A T . Esempio: 0 1 A = @4 8 4 2 6 1 8 6A 5 1 A T = @4 8 0 4 2 6 1 8 6A 5

Teorema 7.2.4 Valgono le seguenti propriet (per matrici per cui possibile eseguire le seguenti operazioni):

89

7. M ETODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

( A T )T = A ( AB )T = B T A T

( A + B )T = A T + B 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 d et ( A ) o | A |. Se A = [a ] una matrice 1 1, allora d et ( 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 . Il determinante di A dato dalla formula d et ( A ) = d et ( A ) =
n X

Determinante di una matrice

j =1 n X

(1)i + j a i j M i j

(ssato un qualunque i = 1, 2, . . . , n ) (ssato un qualunque j = 1, 2, . . . , n )

i =1

(1)i + j a i j M i j

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 d et ( A ) = 0. Se A ha due righe o due colonne con gli stessi elementi, allora d et ( A ) = 0. la matrice ottenuta scambiando due righe di A, si ha d et ( A ) = d et ( A ). Denotata con A Denotata con A la matrice ottenuta da A moltiplicando una sua riga per un numero reale , si ha ) = d et ( A ). d et ( A la matrice ottenuta da A sommando una sua riga per unaltra che stata moltiplicata Denotata con A ) = d et ( A ). per , si ha d et ( A Se B unaltra matrice di dimensione n, si ha d et ( AB ) = d et ( A )d et (B ) d et ( A T ) = d et ( A ) 1 Se esiste A 1 , si ha d et ( A 1 ) = d et ( A ) Q Se A una matrice trangolare superiore o trangolare inferiore o diagonale, allora d et ( 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 A x = b. Nel metodo di eliminazione di Gauss1 il sistema lineare di partenza viene trasformato in uno equivalente di pi facile soluzione in quanto la matrice del nuovo sistema ha forma triangolare (superiore o inferiore) 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 0 1 a 11 a 12 . . . a 1n B C .. B . a 2n C a 22 B C A=B C . .. B C . @ . . A 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 A x = 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 n 1 dalla riga n 1 del sistema: 1 a n 1 n 1 x n 1 + a n 1 n x n = b n 1 . Si ha x n 1 = (b n 1 a n 1 n x n ). a n 1 n 1 Si procede a ritroso in questo modo arrivando no alla prima equazione che ci permette di calcolare il valore di x 1 . Osserviamo che tutte le divisioni per i coefcienti a i i sono possibili in quanto stiamo supponendo Q 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 P bi n j =i +1 a i j x j xi = ai 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 xi = bi Pi 1 ai i
j =1 a i j x j

. =. .

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, A x = b dove 0 1 0 1 2 1 2 10 @ A @ 4 1 2 A= b = 12A 1 2 5 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. M ETODI 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 4 moltiplica x 1 nella prima equazione. Otteniamo il valore = 2. Adesso moltiplichiamo per questo 2 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 1 + 2x 2 + 5x 3 = 20

x 2 2x 3 = 8

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 coef1 1 ciente di x 1 nella prima equazione: abbiamo . Moltiplichiamo la prima equazione per e poi 2 2 1 facciamo la sottrazione tra la terza equazione e la prima moltiplicata per : 2 x 1 + 2x 2 + 5x 3 = 20 1 1 (2x 1 + x 2 + 2x 3 = 10) ()x 1 + x 2 + x 3 = 5 2 2 3 x 2 + 4x 3 = 15 2 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 x 2 + 4x 3 = 15 2

Nella seconda e terza equazione non c pi lincognita x 1 . Per poter arrivare ad un sistema 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. 3 Consideriamo il coefciente di x 2 della terza equazione ( ) e lo dividiamo per il coefciente 2 di x 2 della seconda equazione ( che vale 1). Moltiplichiamo la seconda equazione per questo

92

7.3. Metodo di eliminazione di Gauss

3 3 coefciente (cio per ) e poi sottraiamo la terza equazione dalla seconda moltiplicata per : 2 2 3 x 2 + 4x 3 = 15 2 3 3 (x 2 2x 3 = 8) () x 2 + 3x 3 = 12 = 2 2 x3 = 3 Sostituiamo questa equazione alla terza del sistema, ricavando il sistema equivalente 2x 1 + x 2 + 2x 3 = 10 x3 = 3

x 2 2x 3 = 8

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. Sostituendo 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 A x = 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: a 21 sottraiamo la prima equazione moltiplicata per dalla seconda equazione: a 11
a 21 x 1 + a 22 x 2 + a 23 x 3 + . . . + a 2n x n = b 2 a 21 a 21 (a 11 x 1 + a 12 x 2 + a 13 x 3 + . . . + a 1n x n ) = b1 = a 11 a 11 (a 22 a 21 a 21 a 21 a 21 a 12 )x 2 + (a 23 a 13 )x 3 + . . . + (a 2n a 1n ) x n = b 2 b1 a 11 a 11 a 11 a 11

a 31 sottraiamo la prima equazione moltiplicata per dalla terza equazione. a 11 ... an1 sottraiamo la prima equazione moltiplicata per dalla n -sima equazione. a 11 Come risultato di questa operazione avremo una nuova matrice con gli elementi della prima colonna, eccetto quello di posto 11, tutti uguali a zero. 0 a 11 B 0 B B . B . @ . 0 a 12 (1) a 22 . . . (1) an2 ... ... ... ... 10 1 0 1 a 1n b1 x1 (1) C B C B (1) C a2 n C B x 2 C Bb 2 C CB . C = B . C . CB C B . C . . A@ . . A @ . A (1) (1) xn a nn bn 93

7. M ETODI 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 a (1) equazione della sottomatrice moltiplicata per 32 dalla seconda equazione della sottomatrice, e cos (1) a 22 via. Dopo questo passo, il sistema sar equivalente a: 0 a 11 B 0 B B . B . B . B B . @ . . 0 a 12 (1) a 22 0 . . . 0 ... (1) a 23
(2) a 33 . . . (2) an3

... ... ... ... ...

1 a 1n 0 x 1 0 b 1 1 1 (1) C Bb (1) C a2 n CB x2 C B B 2 C CB C C B C (2) C B x 3 C Bb (2) C a3 = 3 C B C B nC CB . C B . C . C . . . . A@ . A @ . A (1) bn a (2) x n


nn

Dopo aver applicato questo procedimento n 1 volte, avremo un sistema triangolare superiore semplice da risolvere utilizzando lalgoritmo di sostituzione allindietro. 0 a 11 B 0 B B . B . B . B B . @ . . 0 a 12 (1) a 22 0 . . . 0 ... (1) a 23
(2) a 33

... ... ... ... 0

... ...

1 a 1n 0 x 1 0 b 1 1 1 (1) C B b (1) C a2 n CB x2 C B B 2 C CB C C B C (2) C B x 3 C B b (2) C a3 C=B 3 C n C CB . . . CB . C B . C . . A@ . A @ . A (n 1) bn a (n 1) x n


nn

7.4 Strategie di pivoting


(k ) Gli elementi diagonali generati ad ogni passo del metodo di eliminazione a i sono detti elementi i pivotali. Nel descrivere il metodo di eliminazione di Gauss abbiamo supposto, per semplicit, che tutti gli elementi 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 diventi 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, . . . , n 1 a ciascuno stadio si sceglie il pi piccolo intero q tale che (i 1) i 1) |a qi | = max |a ( | ji i j n

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


(i 1) i 1) |a qr | = max |a ( | jk i k , j n

Si opera, quindi, uno scambio non solo di righe ma anche di colonne in modo da portare lelemento 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 10000 11 x3 = = 1.000, quad x 2 = = 0, x 1 = 0. 9999 0.0001 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 0.0001x 2 + 1x 3 = 1 e, inne, x 1 + x 2 +x 3 = 1 1x 2 + 1x 3 = 0 0.9999x 3 = 1 1x 2 + 1x 3 = 0

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. M ETODI 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 0 1 1 B0 1 C B C B. C B. C B. 0 1 C C B . B. C . B. C . . 0 1 B C (k 1) B. . . C a B. . . C k + 1 k B. . . C 1 B C (k 1) (k ) a kk M =B C B C (k 1) B. . . C a . B. . . C k +2 k . . C B . . . (k 1) B C a B C kk B. . . C . . B. . . C . . . . B. . . C B C ( k 1) B. . . C a nk @. . . . . . (k 1) 1A a kk Si considera quindi la matrice A (k ) = M (k ) A (k 1) = M (k ) M (k 1) . . . M (1) A e il vettore b(k ) = M (k ) b(k 1) = M (k ) M (k 1) M (1) b. Dopo n 1 passi, avremo U = A (n 1) = M (n 1) . . . M (2) M (1) A con U matrice triangolare superiore. Otteniamo quindi A = LU , con L = (M (n 1) M (2) M (1) )1 = [M (1) ]1 [M (n 2) ]1 [M (n 1) ]1 L triangolare inferiore con elementi dati dal prodotto delle matrici M (k ) generate durante leliminazione di Gauss.

7.5.1 Fattorizzazione LDU


Leliminazione di Gauss un caso particolare di fattorizzazione LDU , nella quale la matrice A viene decomposta 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 .
Minore principale

Denizione 7.5.1 Data una matrice A si denisce minore principale di dimensione k (con 1 k n), la sottomatrice che si ha prendendo le prime k righe e k colonne di A. 2 a 11 6 . 4 . . ak 1 ... ... 3 a 1k 7 . . . 5 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 permutazione

Esempio 7.5.1 Si consideri la matrice di permutazione P di dimensione 3 data da 0 1 1 0 0 P = @0 0 1A 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: 0 10 1 0 1 0 0 a 11 a 12 a 13 a 11 P A = @0 0 1A @a 21 a 22 a 23 A = @a 31 0 1 0 a 31 a 32 a 33 a 21 0 10 1 0 a 11 a 12 a 13 1 0 0 a 11 AP = @a 21 a 22 a 23 A @0 0 1A = @a 21 a 31 a 32 a 33 0 1 0 a 31 a 12 a 32 a 22 a 13 a 23 a 33 1 a 13 a 33 A a 23 1 a 12 a 22 A a 32

Quindi, il teorema LDU si pu applicare alla matrice A o ad unopportuna matrice P A , se si effettua il pivoting parziale, o a P AQ se si effettua il pivoting totale (e quindi si considerano due matrici di permutazioni P e Q ). In genere, la matrice D viene inglobata nella L o nella U (post-moltiplicando o pre-moltiplicando le L e 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: 0 1 0 10 1 a 11 a 12 . . . a 1n l 11 0 ... 0 1 u 12 . . . u 1n Ba C B B 0 C 1 . . . u 2n C B 21 a 22 . . . a 2n C B l 21 l 22 . . . C B0 C B . C B C B C = . . . . . . . . B . C B C B C . . . . . . @ . . . A @ . . . . A@. . . . A an1 an2 ... a nn l n1 l n2 ... l nn 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 = ai j ui j =
j 1 X

iX 1 1 (a i j l i m um j ) li i m =1

m =1

l i m um j

i = 1, 2, . . . n

j = 1, 2, . . . , i j = i + 1, . . . n 97

i = 1, 2, . . . , n 1

7. M ETODI 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 A x = b equivalente a LU x = b. Si pone, dunque, y = U x, ottenendo il sistema L y = b. Si ricava facilmente y mediante sostituzione in avanti e da U x = 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 LU x = b risolviamo U x = 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 divisioni 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 implementato 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 relazione |a i i | >
n X

Matrice diagonalmente dominante in senso stretto per righe

j =0 j 6=i

|a i j |

per ogni i = 1, 2, . . . , n .

Matrice diagonalmente dominante in senso stretto per colonne

Una matrice A di dimensione n si dice diagonalmente dominante in senso stretto per colonne se vale la relazione |a j j | >
n X

i =0 i 6= j

|a i j |

per ogni

j = 1, 2, . . . , n .

Esempio 7.5.2 0 1 7 3 1 A = @2 10 2A 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 0 1 6 3 4 A=@ 3 9 5 A 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 X

j =0 j 6=i

|a i j |

per ogni i = 1, 2, . . . , n .
Matrice diagonalmente 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 non singolare, 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 xT A x > 0 qualunque sia il vettore x 6= 0 semidenita positiva se xT A x 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 xT A x < 0 qualunque sia il vettore x 6= 0, semidenita negativa se xT A x 0 qualunque sia il vettore x. Dalla denizione di matrice denita positiva, deve essere xT A x > 0 qualunque sia il vettore x, vale a dire: 0 10 1 a 11 a 12 . . . a 1n x1 Ba CB x C a . . . a 22 2n C B 2 C B 21 CB . C x1 x2 . . . xm B . . B . CB C . . . @ . . ... . A@ . . A an1 an2 ... a nn xm = x1 0 Pn 1 j =1 a 1 j x j P B n C n n X B j =1 a 2 j x j C X B C= xm B ai j xi x j > 0 . C . @ A i =1 j =1 . Pn j =1 a n j x j

Matrice denita positiva

Matrice denita negativa

x2

...

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. M ETODI 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 xT A x > 0 vale pure xT A x = xT LDL T x = (L T x)T DL T x = yT D y > 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 = M M T : abbiamo il prodotto di una matrice triangolare inferiore con coefcienti tutti reali per la sua trasposta. Se D non fosse 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 v u iX 1 u l i i = t(a i i l i2k ) i = 2, 3, . . . , n
k =1 j 1 X 1 (a i j li k l j k ) li i k =1

li j =

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 0 1 la matrice 1 0 2 A = @0 4 8 A 2 8 29 Provare che verica le condizioni del teorema LDU e trovare i fattori L e L T tali che A = LL T . 1 0 T 4 e d et ( A ) = 116 16 64 = 36) per cui possibile scrivere la matrice A come A = LL . Si ha, quindi: Svolgimento La matrice A simmetrica e soddisfa le ipotesi del teorema LDU ( infatti |a 11 | = 1, d et 0 l 11 @l 21 l 31 0 l 22 l 32 10 0 l 11 0 A@ 0 l 33 0 l 21 l 22 0 1 0 2 l 31 l 11 l 32 A = @l 21 l 11 l 33 l 31 l 11 l 11 l 21 2 2 l 21 + l 22 l 31 l 21 + l 32 l 22 1 l 11 l 31 l 21 l 31 + l 22 l 32 A 2 2 2 l 31 + l 32 + l 33 0 = 4

Devono quindi valere le relazioni:

La matrice L dunque 0 1 @0 2 0 2 4 1 0 0A 3

l 21 l 31 + l 22 l 32 = 8 =) l 32 = 8/2 = 4 p p p 2 2 2 l 31 + l 32 + l 33 = 29 =) l 33 = 29 22 42 = 29 4 16 = 9 = 3

2 2 l 21 + l 22

l 31 l 11 = 2 =) l 31 = 2 p = 4 =) l 22 = 4 0 = 2

l 21 l 11 = 0 =) l 21 = 0

2 l 11 = 1 =) l 11 = 1

Esercizio 7.6.2 Data la matrice 0 1 0.2 1 0.2 A = @ 1 6.5 1.75A 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 A x = b, con bT = (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 = 0.3 6= 0 6.5 det A = 0.375 6= 0 101

7. M ETODI DIRETTI PER LA SOLUZIONE DI SISTEMI LINEARI

(b) La fattorizzazione di A come A = LU si costruisce imponendo: 0 1 0 10 1 0.2 1 0.2 l 11 0 0 1 u 12 u 13 1 u 23 A A = @ 1 6.5 1.75A = LU = @l 21 l 22 0 A @0 0 2 2.25 l 31 l 32 l 33 0 0 1 Usando le formule di pag. 97, si ottiene l 11 = 0.2

0.2u 12 = 1 =) u 12 = 5 l 21 = 1

0.2u 13 = 0.2 =) u 13 = 1 1 5 + l 22 = 6.5 =) l 22 = 1.5 l 31 = 0

1 1 + 1.5u 23 = 1.75 =) u 23 = 0.5 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 0 0.2 L=@ 1 0 sono: 0 1.5 2 1 0 0 A 1.25 1 U = @0 0 0 5 1 0 1 1 0.5A 1

(c) Si ha det A = det LU = det L det U = det L = 0.375. Quindi det ( A 2 ) = det ( A )2 = 0.3752 = 7.11111111. (d) Da A x = b si ha LU x = b. Si pone U x = y e si hanno i due sistemi da risolvere per sostituzione in avanti e allindietro: L y = b e U x = y. 0 0.2 @1 0 0 1 @0 0 5 1 0 0 1.5 2 8 10 1 0 1 > 0 y1 2.8 < y 1 = 2.8/0.2 = 14 A @ A @ A 0 y 2 = 19.25 =) y 2 = (19.25 14)/1.5 = 3.5 > : 1.25 y 3 10.75 y 3 = (10.75 2 3.5)1.25 = 3

Quindi x = (1, 2, 3)T .

8 10 1 0 1 > 1 x1 14 <x 3 = 3 0.5A @x 2 A = @3.5A =) x 2 = 3.5 3 0.5 = 2 > : 1 x3 3 x 1 = 14 3 5 2 = 1

Esercizio 7.6.3 dato il sistema lineare 0 1 0 Ax = 1 b dove: 16 8 4 20 4 A A = @8 20 b = @ 28 A 4 4 12.25 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 A x = 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 12.25 > |4| + |4| = 8 20 > | 8| + |4| = 12

(b) Ponendo A = LL T si ricava: l 21 l 11 = 8 =) l 21 = 2


2 2 l 21 + l 22 2 l 11 = 16 =) l 11 = 4

2 2 2 l 31 + l 32 + l 33

l 21 l 31 + l 22 l 32 = 4 =) l 32 = (4 + 2)/4 = 1.5 p p = 12.25 =) l 33 = 12.25 1 2.25 = 9 = 3 0 1 0 0A 3

l 31 l 11 = 4 =) l 31 = 1 p = 20 =) l 22 = 20 4 = 4

La matrice L dunque 4 L = @2 1 0 4 1.5

(c) Per risolvere il sistema A x = b, adoperiamo il metodo di sostituzione in avanti e allindietro risolvendo i sistemi: L y = b e poi L T x = y. Il primo sistema d: 0 4 @2 1 0 4 1.5 10 1 0 1 0 y1 20 0A @ y 2 A = @ 28 A 3 y3 28.25

e otteniamo y 1 = 20/4 = 5, y 2 = (28 + 10)/4 = 9.5, y 3 = (28.25 5 14.25)/3 = 3. Nel risolvere il sistema L T x = y si ha 0 4 @0 0 2 4 0 10 1 0 1 1 x1 5 1.5A @x 2 A = @9.5A 3 x3 3

da cui x 3 = 1, x 2 = (9.5 1.5)/4 = 2, x 1 = (5 1 + 4)/4 = 2, quindi x = (2, 2, 1). Inoltre, da det( A ) = det(LL T ) = det(L )2 = (4 4 3)2 = 482 = 2304 e da det( A 3 ) = (det( A ))3 si ha det( A 3 ) = 23043 = 12230590464.

103

8
Malcom X

M ETODI I TERATIVI 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.

8.1 8.2 8.3 8.4 8.5 8.6

8.7

Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Metodi iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Norme di vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Norme di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Autovalori e autovettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . Metodi classici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.1 Convergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.2 Controllo della convergenza . . . . . . . . . . . . . . . . . . . . 8.6.3 I metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.6.4 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassamento Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

105 106 106 107 108 110 110 111 113 117 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 @2 T f (x , y ) + = 2 2 @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 diffusivit termica, [K g /m 2 ] la densit della piastra, c [C al /K g o C ] il calore specico, f (x , y ) [C al /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. M ETODI I TERATIVI 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 priori) 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 problema 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 superiore) 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 memorizzazioni 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 procedeva 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 soluzione 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


Norma

Norme 1, 1, 2

Il concetto di norma generalizza quello di valore assoluto (o modulo) di un numero reale (o complesso). n n Sia R lo spazio dei vettori colonna di lunghezza n . La norma di un vettore x 2 R una funzione, k k, n denita in R 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: P Norma assoluta (o norma l 1 ), indicata con k k1 : kxk1 = n i =1 |x i | Norma massima (o norma innito, l 1 ), indicata con k k1 : kxk1 = max1i n |x i | 106

8.4. Norme di matrici

Figura 8.1: Vettori in R con norma unitaria nelle norme 1, 1 e 2. qP p n 2 Norma euclidea (o norma l 2 ), indicata con k k2 : kxk2 = xT x = i =1 |x i | Tra le norme 1, 1 e 2 valgono le seguenti relazioni (che pongono unequivalenza tra esse). Dato un vettore n x2R : p kxk1 kxk2 n kxk1 kxk1 kxk1 n kxk1

Esempio 8.3.1 Il vettore x = (1, 5, 20)T ha norme: kxk1 = |1| + |5| + | 20| = 26

kxk1 = max (|1|, |5|, | 20|) = 20 p p kxk2 = (12 + 52 + (20)2 ) = 426 = 20.639767441
Diseguaglianza di CauchySchwarz

Per la norma euclidea vale la diseguaglianza di Cauchy-Schwarz: xT y kxk2 kyk2

Dati due vettori x e y 2 R , si denisce distanza tra i due vettori la norma della differenza tra i vettori. Quindi: kx yk1 =
n X

Distanza tra vettori

Il concetto di distanza serve per denire il limite di una successione di vettori. n Data una successione di vettori in R , x(k ) , per k = 1, 2, . . . , 1, si dice che la successione converge ad un n (k ) vettore x di R e si scrive limk !1 x = x se, per ogni > 0, esiste un intero m tale che kx(k ) xk < per tutti gli indici k m

kx yk1 = max |x i y i | 1i n s n X kx yk2 = | x i y i |2


i =1

i =1

|x i y i |

Limite di una successione di vettori

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. M ETODI I TERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

Norma compatibile

k A k > 0 per ogni A 6= 0 k A k = 0 se e solo se A = 0 k A k = ||k A k k A + B k k A k + kB k k AB k k A kkB k Una propriet importante che si richiede alle norme su matrici che siano compatibili con norme vettoriali: la norma k A k di una matrice A si dice compatibile con la norma kxk di un vettore x se vale la relazione k A xk k A kkxk

Norma naturale

traccia di una matrice

Alcune norme su matrici sono generate da norme su vettori: si parla allora di norma naturale o indotta n dalla norma di vettori. In particolare, se k k una norma su vettori in R , allora k A k = maxkxk=1 k A xk la 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: P Norma 1: k A k1 = max j n i j | (data dal massimo sulla somma delle colonne) i =1 |aP Norma innito: k A k1 = maxi 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 con la norma di vettori da cui sono costruite. Una norma di matrici, che non indotta, ma compatibile con la norma 2 la cosiddetta norma euclidea (o di Frobenius). Tenendo presente che, data una matrice A , si chiama traccia della matrice o t r ( A ) la somma degli elementi della diagonale principale di A , la norma euclidea data da N ( A) = p t r ( AT A) = p t r ( A AT ) = rP
n 2 i =1 |a i j | . j =1

8.5 Autovalori e autovettori


che Data una matrice quadrata A di ordine n , se esiste un numero (reale o complesso) e un vettore x 6= 0 tali A x = x
Autovalore e autovettore

allora un autovalore e x il corrispondente autovettore della matrice A . Scritta in maniera equivalente, la relazione denisce il sistema lineare ( A I )x = 0 Poich x 6= 0 e il termine noto del sistema il vettore di tutti zeri, il determinante della matrice del sistema deve necessariamente essere uguale a zero, cio det ( A I ) = 0. Lo sviluppo del determinante porta a un polinomio di grado n nellincognita : n t r ( A )n 1 + . . . + (1)n det ( A ) = 0

Polinomio caratteristico

Questo polinomio si chiama polinomio caratteristico. Le sue n radici, che chiamiamo 1 , 2 , . . . , n , sono gli n autovalori della matrice A . Per le propriet dei polinomi vale:
n X

i =1

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

i =1

n Y

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 B A . Se x un autovettore associato alla matrice A , allora A x = 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 A x 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 . Denizione 8.5.1 Il raggio spettrale ( A ) di una matrice A denito da ( A) =
autovalore di A

Raggio spettrale

max

||

Quindi il raggio spettrale p il massimo, in pmodulo, degli autovalori di A (ricordiamo che se un complesso, = + i , con i = 1, si ha || = 2 + 2 ). Possiamo ora denire la norma 2 su matrici indotta dalla norma 2 su vettori. Si pu, infatti, provare che k A k2 = ( A T A ). Inoltre, per ogni norma naturale, vale il risultato ( A) k Ak Nello studiare i metodi iterativi per risolvere i sistemi lineari, sar di particolare importanza sapere quando le potenze di una matrice tendono alla matrice nulla. Matrici A , per cui ( A k )i j ! 0 per k ! 1, qualunque sia i , j = 1, 2, . . . , n , (consideriamo A A A k volte e gli elementi della matrice risultante tendono a zero per k ! 1) si dicono matrici convergenti. Diciamo che una matrice A di dimensione n convergente se
k !1

Norma 2 su matrici

lim ( A k )i j = 0, i , j = 1, 2, . . . , n

Matrice convergente

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. limk !1 k A k k = 0, per qualche norma naturale. 3. limk !1 k A k k = 0, per tutte le norme naturali. 4. ( A ) < 1. 5. limk !1 A k x = 0, qualunque sia il vettore x.
1 Dati n vettori linearmente indipendenti di , u(1) , u(2) , . . . u(n ) , ogni vettore di 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 .

Rn

Rn

109

8. M ETODI I TERATIVI 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 A x = b si basano su unidea molto semplice. Si parte da unapprossimazione iniziale x(0) , commettendo unerrore e(0) = x x(0) . Lerrore e(0) soluzione del sistema A e(0) = b A x(0) = r(0) , dove r(0) il residuo (ci che resta fuori, ci dice di quanto il vettore A x(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 M p(0) = r0 , 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 (b A x(k ) ) O, equivalentemente, x(k +1) = ( I M 1 A )x(k ) + M 1 b k = 0, 1, . . . . k = 0, 1, . . .

Notiamo che, ad ogni passo, non dobbiamo calcolare esplicitamente M 1 , perch risolviamo problemi del tipo M p(k ) = r(k ) = b A x(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 funzione g tale che x(k +1) = g (x(k ) ) converga alla soluzione del sistema A x = b, data da g (x) = x + M 1 (b A x) o equivalentemente da g (x) = E x(k ) + q.

8.6.1 Convergenza
Per studiare la convergenza di un metodo iterativo, consideriamo, per ogni vettore x(k ) , il residuo r(k ) = b A x(k ) e lerrore e(k ) = x x(k ) . Osserviamo che si ha la relazione r(k ) = A e(k ) . Infatti A e(k ) = A (x x(k ) ) = A x A x(k ) = b A x(k ) = r(k ) Lo schema converge quando la successione x(k ) converge alla soluzione x per k ! 1, ovvero quando limk !1 e(k ) = 0 qualunque sia il vettore iniziale x(0) . Consideriamo lo schema iterativo x(k +1) = E x(k ) + q. facile vedere che per la soluzione esatta x vale la relazione x = E x + q. Consideriamo x x(k ) . Si ha x
(k )

x = Ex+q

e sottraendo si ricava e
(k )

= E xk 1 + q = E e(k 1)

La relazione appena trovata vale, alla stessa maniera, tra lerrore e(k 1) e lerrore e(k 2) per cui possiamo scrivere e(k 1) = E e(k 2) . Scriviamo queste relazioni dalliterazione k no ad arrivare alliterazione 0.

110

8.6. Metodi classici

e(k 1) = E e(k 2) e(k 2) = E e(k 3) e(2) = E e(1) e(1) = E e(0) Partendo, ora, dalla prima relazione e, andando a sostituire, ogni volta, a secondo membro, la relazione successiva, si ha: Osserviamo che E k rappresenta la potenza k della matrice E , cio la E E E k volte. Il metodo converge se e(k ) ! 0 per k ! 1. Poich lerrore iniziale arbitrario, si ha che limk !1 e(k ) = limk !1 E k e(0) = 0 se e solo se limk !1 E k = 0. Per il teorema sulla convergenza di matrici (si veda pag. 109), questo si ha se e solo se (E ) < 1. Si pu dunque stabilire il seguente teorema. Teorema 8.6.1 Lo schema iterativo converge qualunque sia il vettore iniziale x0 al vettore x = E x + 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 decrescente 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 (2) k (n ) = 1 k 1 u + 2 2 u + . . . + n n u

e(k ) = E e(k 1)

. . . .=. .

e(k ) = E e(k 1) = E (E e(k 2) ) = E 2 e(k 2) = E 2 (E e(k 3) ) = E 3 e(k 3) = . . . = E k e(0)

x(k +1) = E x(k ) + q

k 0

mettiamo in evidenza k 1 ! k 2 (2) k n (n ) k (1) = 1 1 u + 2 k u + . . . + n k u 1 1 per k ! 1 si ha


(1) k 1 1 u (1) Perci limk !1 e(k ) = limk !1 k = 0 se e solo se k 1 1 u 1 ! 0 e questo si ha se e solo se |1 | < 1. Ma |1 | = (E ): ritroviamo il risultato visto prima.

k i k 1

! 0 per i = 2, 3, . . . , n

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 ! +1) vale il seguente risultato2
2 Questa relazione vale anche per matrici con autovalori non distinti tra loro.

ke(k ) k (E )k ke(0) k

(8.1)

111

8. M ETODI I TERATIVI 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 1) k ke(k ) 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 . Ma ke(k ) k (E )k ke(0) k da cui 10 (E )k ke(0) k ke(0) k 1 =) (E )k 10 10 1 log10 ( (E ))

Applicando il logaritmo in base 10 ad ambo i membri si ha k log10 ( (E )) 1 =) k

Velocit asintotica di convergenza

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 R = log10 ( (E )) = log10 ( (E k )) k

Osserviamo che, essendo (E ) < 1, nelle ipotesi in cui il metodo converge, log10 ( (E )) < 0 e, di conseguenza, R > 0. Se vogliamo ridurre 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 log10 ( (E )) log10 () =) k log10 ( (E )) log10 () =) k log10 () 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 sullasse 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 semplicit, 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)
(1) e(k ) k 1 1 u

passando alle norme e ai logaritmi in base 10 si ha log10 ke(k ) k k log10 |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(k 1) k = kd(k ) k (valgono le stesse considerazioni viste per gli schemi iterativi per funzioni non lineari a pag. 53), ritroviamo lo stesso 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 con U ), 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 singolare (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 Jacobi3 (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 A x = b e scrivere la matrice A come L +D +U . Si ha (L + D + U )x = b

D x = (L + U )x + b

si porta a secondo membro (L + U )x si moltiplicano ambo i membri per linversa della matrice D si innesca il metodo iterativo considerando il vettore x a primo membro dellequazione alliterazione k + 1 e quello a destra alliterazione k

x = D 1 (L + U )x + D 1 b

(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. M ETODI I TERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

Componente per componente, il metodo di Jacobi si scrive, per i = 1, 2, . . . , n , come 2 3


n X 7 1 6 (k +1) k)7 6b i xi = ai j x ( j 5 ai i 4 j =1, j 6=i * * (D 1 )i i ((L +U )x(k ) )i

o, equivalentemente,

(D 1 )i i (k +1) xi =

n X 7 1 6 k) k)7 6b i ai j x ( ai j x ( 4 5 j j ai i j =1 j =i +1 * * *

(L x(k ) )i iX 1

(U x(k ) )i

per i = 1, . . . , n

La formula la si pu ricavare direttamente, scrivendo, equazione per equazione, il sistema da risolvere A x = 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 . . . . . . ai 1 x1 + ai 2 x2 + ai 3 x3 + . . . + ai n xn = bi a n 1 x 1 + a n 2 x 2 + a n 3 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 n 1 x 1 + a n 2 x 2 + a n 3 x 3 + . . . + a nn 1 x n 1 ) Dividendo li -sima equazione per il coefciente a i i , per i = 1, 2, . . . , n , ricaviamo x1 = x2 = . . .= xi = . . .= xn = 114 1 [b 1 (a 12 x 2 + a 13 x 3 + . . . + a 1n x n )] a 11 1 [b 2 (a 21 x 1 + a 23 x 3 + . . . + a 2n x n )] a 22 . . . 1 [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 )] ai i . . . 1 [b n (a n 1 x 1 + a n 2 x 2 + a n 3 x 3 + . . . + a nn 1 x n 1 )] a nn . . .= . . . . . .= . . . . =. . . =. .

8.6. Metodi classici

Se pensiamo di partire da un vettore inziale x(0) , il vettore x(1) si ottiene dalle equazioni precedenti, ponendo a secondo membro di ciascuna equazione le componenti del vettore x(0) . Si ricava, in tal modo, la formula ricorsiva dello schema di Jacobi: i 1 h (k ) (k ) (k ) b 1 a 12 x 2 + a 13 x 3 + . . . + a 1n x n a 11 i 1 h (k ) (k ) (k ) b 2 a 21 x 1 + a 23 x 3 + . . . + a 2n x n a 22 . . . h i 1 (k ) (k ) (k ) (k ) (k ) bi ai 1 x1 + ai 2 x2 + . . . + a i i 1 x i + a i i +1 x i + . . . + ai n xn 1 + 1 ai i . . . h i 1 (k ) (k ) (k ) (k ) bn an1 x1 + an2 x2 + an3 x3 + . . . + a nn 1 x n 1 a nn

(k +1) x1 = (k +1) x2 =

. . .=
(k +1) xi =

. . .=
(k +1) xn =

Ritroviamo, dunque, la formula scritta prima in forma compatta. La formula in funzione del residuo r(k ) = b A x(k ) data invece da x(k +1) = x(k ) + D 1 r(k ) . Il Metodo di Gauss-Seidel Nellalgoritmo di Gauss-Seidel4 si pone M = D + L ottenendo la matrice E S = I (D + L )1 A = I (D + L ) (L + D + U ) = (D + L )1U . Lo schema iterativo :
1

x(k +1) = E S x(k ) + (D + L )1 b Lo schema di Gauss-Seidel si pu ricavare a partire dal sistema lineare A x = b nel modo seguente: (L + D + U )x = b Ax = b si porta a secondo membro U x si moltiplicano ambo i membri per linversa della matrice (D + L ) si innesca il metodo iterativo considerando il vettore x a primo membro dellequazione alliterazione k + 1 e quello a destra alliterazione k

(D + L )x = U x + b

x = (D + L )1U x + (D + L )1 b

(k +1)

= (D + L )1U x(k ) + (D + L )1 b

Moltiplicando ambo i membri per (D + L ) si ha D x(k +1) = b L x(k +1) U x(k ) da cui x(k +1) = D 1 b L x(k +1) U x(k ) (D + L )x(k +1) = b U x(k )

Componente per componente si ha


4 Philipp Ludwig von Seidel (1821-1896) fu un matematico tedesco. Il suo lavoro pi importante riguarda le aberrazioni ottiche.

115

8. M ETODI I TERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

(k +1) xi

" # iX 1 n X 1 (k +1) (k ) = bi ai j x j ai j x j ai i j =1 j =i +1

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 (k +1) (k +1) (k +1) che i valori gi calcolati x 1 , x2 , . . . , xi possano essere utilizzati per dare una migliore approssimazio1
(k +1) ne del valore x i . Dalle equazioni del sistema, ragionando come per il metodo di Jacobi, possiamo quindi scrivere: (k +1) (k ) (k ) (k ) a 11 x 1 = b 1 a 12 x 2 + a 13 x 3 + . . . + a 1n x n (k +1) (k +1) (k ) (k ) a 22 x 2 = b 2 a 21 x 1 + a 23 x 3 + . . . + a 2n x n

(k +1) (k +1) (k +1) (k +1) (k ) (k ) ai i xi = bi ai 1 x1 + ai 2 x2 + . . . + a i i 1 x i + a i i +1 x i + . . . + ai n xn 1 +1 (k +1) (k +1) (k +1) (k +1) (k +1) a nn x n = bn an1 x1 + an2 x2 + an3 x3 + . . . + a nn 1 x n 1
(k +1) x1 = (k +1) x2 =

. . .= . . .=

. . .

. . .

Dividendo ambo i membri dellequazione i -sima per a i i (per i = 1, 2, . . . , n ) si ha:

. . .=
(k +1) xi =

. . .=
(k +1) xn =

i 1 h (k ) (k ) (k ) b 1 a 12 x 2 + a 13 x 3 + . . . + a 1n x n a 11 i 1 h (k +1) (k ) (k ) b 2 a 21 x 1 + a 23 x 3 + . . . + a 2n x n a 22 . . . h i 1 (k +1) (k +1) (k +1) (k ) (k ) bi ai 1 x1 + ai 2 x2 + . . . a i i 1 x i + a x + . . . + a x i i + 1 i n n 1 i +1 ai i . . . h i 1 (k +1) (k +1) (k +1) (k +1) bn an1 x1 + an2 x2 + an3 x3 + . . . + a nn 1 x n 1 a nn

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 non rilassato. Invece, il metodo di Gauss-Seidel rilassato pu produrre un metodo molto pi veloce in termini 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 " # iX 1 n X ! (k +1) (k ) bi ai j x j ai j x j ai i j =1 j =i +1

(k +1) xi

(k ) = (1 !)x i +

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 b L x(k +1) U x(k ) x(k +1) = (1 !) I !D 1U x(k ) !D 1 L x(k +1) + !D 1 b ( I + !D 1 L )x(k +1) = (1 !) I !D 1U x(k ) + !D 1 b Moltiplicando ambo i membri per D , si ricava (D + !L )x(k +1) = [(1 !)D !U ] x(k ) + !b La matrice di iterazione del metodo dunque E = (D + !L )1 [(1 !)D !U ] = (D + !L )1 [(D + !L ) ! A ] = I !(D + !L )1 A

= (D + !L )1 [(1 !)D !( A D L )]

A questo punto, ci si pu chiedere quale sia l! ottimale nel metodo di rilassamento. L! ottimale 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 A x = 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 Jacobi Gauss-Seidel rilassamento matrice E J = I D 1 A = D 1 (L + U ) E S = I (D + L )1 A = (D + L )1U 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. M ETODI I TERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

A a diagonalmente dominante (per righe o per colonne) ed irriducibile5 . Si ha inoltre, questo risultato: se A simmetrica non singolare con elementi principali reali e positivi, allora il metodo di Gauss-Seidel convergente se e solo se A 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 sovrarilassamento). Difatti il determinante della matrice di iterazione del metodo di rilassamento vale6 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 GaussSeidel, 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 P AP T abbia la forma P AP T = D1 A2 A1 D2

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 complementari8 S e T in modo tale che
Q ; R 6 Dalla denizione di E si ha det E = det [(D + !L )1 ((1 !)D !U )]. 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 !)D !U )] = 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 autovalore della matrice E , per i = 1, 2, . . . , n e (E ) il raggio spettrale, si ha det E = Qn ! ! ! i i =1 i Qn (E ! ) = (E ! )n da cui segue (1 !)n (E ! )n , cio (E ! ) |1 !|. i =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 2 S , i 62 T e, viceversa, se j 2 T , j 62 S
5 cio non pu essere messa sotto la forma P

118

8.6. Metodi classici

i coefcienti non nulli a i j 6= 0 si hanno per i = j oppure per i 2 S e j 2 T oppure per i 2 T e j 2 S . Esempio 8.6.1 La matrice tridiagonale 0 1 2 1 0 0 B1 2 1 0 C C A=B @ 0 1 2 1A 0 0 1 2 ha propriet A (o biciclica): permutando la prima e quarta riga e la prima e quarta colonna, mediante la 0 1 0 0 0 1 B0 1 0 0 C C matrice di permutazione P = B @0 0 1 0A si ha 1 0 0 0 0 1 2 0 1 0 B0 2 1 1C 2 0 T B C P AP = @ =) D 1 = D 2 = 1 1 2 0A 0 2 0 1 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 scomposizione 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 triangolari superiore e inferiore sono L A = D 1 L e U A = D 1U ). Sia D non singolare. Allora la matrice A detta coerentemente ordinata se gli autovalori della matrice J () = L A + 1U A , con 6= 0 sono indipendenti dal parametro . D 1 A1 Le matrici con propriet A (o bicicliche) nella forma A = (P = I nella denizione di propriet A2 D 2 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 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 ) = min0<!<2 (E ! ). Risulta !opt = 1+ p 2 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 propriet A e coerentemente ordinate, nelle ipotesi del teorema di Young, valendo la relazione ( + ! 1)2 = !2 2 , si trova, per ! = 1, 2 = 2 da cui (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. M ETODI I TERATIVI PER LA SOLUZIONE DI SISTEMI LINEARI

8.7 Esercizi

Esercizio 8.7.1 Sia dato il sistema 0 1 0 1 lineare A x = b, dove 8 2 6 30 A = @7 5 0A b = @34A 1 0 5 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 5 0 croce che individua D 1 = (8) e D 2 = ): 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 coerentemente 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 0 E J = @7/5 1/5 0 2/8 0 0 1 0 6/8 0 0 A = @7/5 0 1/5 1/4 0 0 1 3/4 0 A 0

Troviamo gli autovalori della matrice E J imponendo det (E J I ) = 0. 7/5 1/5 1/4 0 3/4 3 1 1 7 3 0 = + 4 5 + 4 5 = 0

3 7 + ), 20 20 p p Una radice = 0, e le altre due sono = 1/2 = 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 Si ha: 0 = det (E J I ) = 3 + ( R J = log10 ( (E J )) = 0.1505149

R S = log10 ( (E S )) = 0.301029995 = log10 ( (E J )2 ) = 2R J

120

8.7. Esercizi

Lo schema di Jacobi : 8 1 Partendo dal vettore x (0) con com> (k +1) (k ) (k ) > x = (30 2 x 6 x ) > 2 3 > 1 ponenti tutte nulle, abbiamo > 8 > > 1 2 3 > k x( x( x( > > k) k) k) < (b) 1 (k +1) (k ) 0 0 0 0 x2 = (34 7x 1 ) > 5 > 1 3.75 6.8 1.4 > > > > 2 1.0 1.55 0.65 > > > 1 > :x (k +1) = (7 x (k ) ) 3 1 5 Lo schema di Seidel : 8 1 Partendo dal vettore x (0) con com> (k +1) (k ) (k ) > x1 = (30 2x 2 6x 3 ) > > ponenti tutte nulle, abbiamo > 8 > > (k ) (k ) (k ) > > k x1 x2 x3 > < 1 (k +1) (k +1) 0 0 0 0 x2 = (34 7x 1 ) > 5 > 1 3.75 1.55 0.65 > > > > 2 2.875 2.775 0.825 > > > (k +1) 1 (k +1) > :x = (7 x ) 3 1 5 Esercizio 8.7.2 Dato 1 il sistema A x = b con 0 5 0 10 A = @0 3 15A 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 0 10 1 0 1 1/5 0 0 0 0 10 0 0 2 1/3 0 A @0 0 15A = @ 0 0 5A E J = D 1 (L + U ) = @ 0 0 0 1/ 2 1 0 2/ 1/ 0 Gli autovalori si calcolano imponendo det (E J I ) = 0, vale a dire 0 2 9 3 0 5 = 0 vale a dire + = 0 2/ 1/

p 3 Perch ci sia convergenza deve dunque essere p < 1 ovvero 3 < . Ricaviamo la relazione > 9. 2 (b) Dalla relazione dell!opt , !opt = , valida perch la matrice biciclica e coerentemente p 1 + 1 (E J )2 ordinata, si ha: 2 3 1 p 8 9 81 = =) = 1 9/ =) = =) = = 10.125 p 2 3 9 8 1 + 1 9/ 3 Da !opt = = 1.5 segue opt = !opt 1 = 0.5, da cui R = log10 (opt ) = 0.3010299957. 2 121

3 Ricaviamo gli autovalori = 0 e = p .

9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 124 125 127 129 130 130 134 136 137 138 140 141 141 142 143 143

I NTEGRAZIONE NUMERICA

Dio non si preoccupa delle nostre difcolt matematiche. Lui integra empiricamente. Albert Einstein

9.1 9.2 9.3

9.4

9.5 9.6 9.7

9.8

Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formula dei trapezi . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formule di Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1 Formula di Cavalieri-Simpson . . . . . . . . . . . . . . . . . 9.3.2 Sullerrore della formula di Cavalieri-Simpson . . . . . . . Formule composte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.4.1 Formula composta dei trapezi . . . . . . . . . . . . . . . . . 9.4.2 Confronti tra la formula dei trapezi e di Cavalieri-Simpson Estrapolazione di Richardson . . . . . . . . . . . . . . . . . . . . . . Approssimazione di Romberg . . . . . . . . . . . . . . . . . . . . . . Introduzione alle formule di quadratura di Gauss . . . . . . . . . . 9.7.1 Propriet delle formule di Gauss . . . . . . . . . . . . . . . . 9.7.2 Formule di Gauss-Legendre . . . . . . . . . . . . . . . . . . 9.7.3 Altre formule di Gauss . . . . . . . . . . . . . . . . . . . . . . 9.7.4 Applicazione delle formule . . . . . . . . . . . . . . . . . . . 9.7.5 Sulla funzione peso . . . . . . . . . . . . . . . . . . . . . . . Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

9.1 Introduzione
Unautomobile effettua il giro di una pista in 84 secondi. La velocit dellauto viene misurata ogni 6 secondi 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? ds Sapendo che la velocit v data da v (t ) = (dove s rappresenta lo spostamento e t il tempo), per calcodt lare la lunghezza della pista (data dallo spostamento effettuato dallauto), dobbiamo integrare la velocit tra 123

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9. I NTEGRAZIONE NUMERICA

Tempo Velocit

0 38

6 41

12 45

18 48

24 45

30 41

36 37

42 33

48 30

54 26

60 24

66 27

72 32

78 35

84 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. Z84


0

v ( t )d t =

Zs (84)
s (0)

ds dt = dt

Zs (84)
s (0)

ds

Essendo s (0) = 0 e s (84) = L la lunghezza della pista, si ha Z84


0

v ( t )d t =

Zs (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 Z84
0

v ( t )d t = 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= Zb
a

f ( x )d x

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 Rb P lintegrale esatto I = a f (x )d x mediante n j =0 a j f (x j ): I= Zb
a

f ( x )d x

j =0

n X

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 b f (a ) f (b ) f (b ) f ( a ) ba

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 ) + 124 f (b ) f ( a ) (x a ) ba

9.3. Formule di Newton-Cotes

Lerrore di interpolazione, utilizzando lespressione del resto di Lagrange dato da E (x ) = f 00 (x ) (x a )(x b ) 2

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 ) f 00 (x ) (x a ) + (x a )(x b ) ba 2

Dovendo integrare la f tra a e b e valendo luguaglianza precedente, integrando ambo i membri, otteniamo: Zb Zb Zb f (b ) f ( a ) f 00 (x ) f ( x )d x = f (a ) + (x a ) d x + (x a )(x b ) dx ba 2 a a a ovvero Zb
a

f ( x )d x = (b a )

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

Zb
a

(x a )(x b ) f 00 (x ))d x

Poich il prodotto (x a )(x b ) ha segno costante in [a , b ], per il teorema del Valor Medio del calcolo integrale (si veda il Teorema 2.5.6) si ha 1 2 Zb
a

(x a )(x b ) f 00 (x ))d x =

1 00 f () 2

Zb
a

1 (b a )3 (x a )(x b )d x = f 00 () 2 3!

dove un punto interno allintervallo [a , b ]. 1 (b a )3 1 La quantit E i nt = f 00 () = f 00 ()(b a )3 rappresenta lerrore che si commette approssi2 3! 12 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 = maxa x b | 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 = ba [ f (a ) + f (b )] 2

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. P 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 ) =
j =0 j 6=i n x x Y j

xi x j 125

9. I NTEGRAZIONE 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 sj Y = L i (s ) j =0 i j j 6=i

Da f (x ) = p n (x ) + E (x ) dove E (x ) lerrore della formula di interpolazione, passando allintegrale, abbiamo Zb Zb Zb f ( x )d x = p n ( x )d x + E ( x )d x


a a a

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= Zb
a

f ( x )d x

Rb La formula di quadratura ha dunque come nodi i punti x i e come pesi gli integrali a L i (x )d x . Sia x 0 = a e x n = b , tenendo presente che L i (x ) = L i (s ) con x = x 0 + sh , da cui d x = hd s abbiamo Zb
a

Zb X n

a i =0

f ( x i )L i ( x )d x =

i =0

n X

f (x i )

Zb
a

L i ( x )d x

L i ( x )d x =

Zx n
x0

L i ( x )d x =

Zn
0

L i (s )hd s = h

Zn
0

L i ( s )d s

Allora I= 126 Zb
a

f ( x )d x h

i =0

n X

f (x i )

Zn
0

L i ( s )d s

9.3. Formule di Newton-Cotes

Deniamo coefcienti di Newton-Cotes1 le espressioni Z 1 n C i(n ) = L i (s )d s i = 0, 1, . . . , n n 0 La formula precedente si scrive, quindi, come I= Zb
a n X n X

f (x )d x nh

i =0

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

i =0

f (x i )C i(n )

(9.1)

Lerrore della formula di quadratura dato da E i nt = Zb


a

E ( x )d x =

Zb
a

f (n +1) (x ) (x x 0 )(x x 1 ) (x x n )d x (n + 1)!

Dato un polinomio 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 NewtonCotes, lerrore di integrazione sar zero. Nellintervallo [a , b ] [0, 1], applicando lequazione (9.1) si ha 1= Z1
0

dx =

i =0

n X

C i(n )

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 Z Z1 1 1 (s 1) 1 L 0 ( s )d s = ds = 1 0 1 2 0 Z1 Z1 1 s 1 (1) C1 = L 1 ( s )d s = ds = 1 0 2 0 1
(1) C0 =

Formula dei trapezi

e la formula di integrazione diventa I= Zb


a

f ( x )d x h

i =0

1 X

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

f (x 0 ) + f (x 1 ) 2

9.3.1 Formula di Cavalieri-Simpson


a +b e x 2 = b , i due 2 estremi dellintervallo e il punto centrale) la formula di quadratura prende il nome di formula di CavalieriSimpson2 Considerando n = 2 (quindi 3 punti di appoggio nellintervallo [a , b ], x 0 = a , x 1 =
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. I NTEGRAZIONE 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).

Z 1 2 L 0 ( s )d s = 2 0 Z 1 2 (2) C1 = L 1 ( s )d s = 2 0 Z2 1 (2) C2 = L 2 ( s )d s = 2 0
(2) C0 =

Z 1 2 (s 1)(s 2) 1 ds = 2 0 (1)(2) 6 Z 1 2 (s )(s 2) 4 ds = 2 0 (1)(1) 6 Z2 1 (s )(s 1) 1 ds = 2 0 (2)(1) 6

La formula di Cavalieri-Simpson approssima lintegrale della f considerando come nodi x 0 = a +b 1 (2) 4 (2) 1 (2) a , x1 = c = e x 2 = b e come pesi i coefcienti di Cotes C 0 = , C1 = , C 2 = , ottenendo: 2 6 6 6 I= Zb
a

f ( x )d x ( x 2 x 0 )

ba = ( f (a ) + 4 f (c ) + f (b )) 6

i =0

2 X

f (x i )C i(2) = (b a )(

f ( a ) 4 f (c ) f (b ) + + ) 6 6 6

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. f 000 (x ) Per il polinomio di secondo grado p 2 che interpola la f , lerrore dato da E (x ) = (x a )(x c )(x b ). 3!

128

9.3. Formule di Newton-Cotes

Quando facciamo lintegrale, lerrore nellapprossimare lintegrale esatto con la formula di CavalieriSimpson dunque dato da E i nt = Zb
a

f 000 (x ) (x a )(x c )(x b )d x 3!

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 ) b a 5 f I V (u ) = (b a )5 90 2 2880

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 2 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 ) f (0) f (t ) 0 f (0) t f (0) f (t ) f 0 (0) t f 0 (0) f (0) + f (t ) t 0 0 f (0) f (0) = t t2 f (t ) f (0) f 0 (0) f (t ) f (0) f (t ) f (0) t f 0 (0) f (t ) 2t f 0 (0) f (t ) t t f (t ) = 2 t t t 2t 3 Il polinomio di interpolazione , dunque p ( x ) = f ( t ) + f (0) f (t ) t f 0 (0) f (0) + f (t ) f (t ) 2t f 0 (0) f (t ) (x + t ) + ( x + t ) x + (x + t )x 2 t t2 2t 3

Lerrore di interpolazione per questo polinomio di grado 3 vale E (x ) = Zt f ( I V ) ( x ) (x + t )x 2 (x t ) 4! Zt Zt

Quindi da f (x ) = p (x ) + E (x ), andando a integrare tra t e t si ha:


t

f ( x )d x =

p ( x )d x +

E ( x )d x

Nellintegrazione del polinomio p (x ) facile vedere che i termini che dipendono da f 0 (0) portano un contributo nullo. Infatti Zt 0 Zt 0 f (0) f 0 (0) f (0) 2 x3 (x + t )x 2 (x + t )x 2 d x = x +tx x2 d x t t t t t t 2 0 4 t f (0) x x = t =0 t 2 4 t t 129

9. I NTEGRAZIONE NUMERICA

Gli integrali degli altri termini del polinomio p (x ) portano alla formula di Cavalieri-Simpson. (omettendo i passaggi matematici) si ha Zt
t

Infatti

2t ( f (t ) + 4 f (0) + f (t )) 6

f (0) f (t ) f (t ) f (0) f ( t ) f ( t ) 2 f ( t ) + (x + t ) + (x + t )x + (x + t )x d x = t t2 2t 3

Allora lerrore della formula di Cavalieri-Simpson coincide con lintegrale di E (x ). R t f ( I V ) ( x ) Quindi E i nt = t ( x + t ) x 2 ( x t )d x 4! 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 f ( I V ) () 24 Zt t f ( I V ) () x 5 x3 f ( I V ) ( ) 5 t2 = t 24 5 3 t 90

E i nt =

(x 2 t 2 )x 2 d x =

Considerando che lampiezza dellintervallo h = 2t si ha E i nt = f ( I V ) () h 5 f ( I V ) () 5 ( ) = h 90 2 2880

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 accurati 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 n 1 , b ], allora Zb
a

f ( x )d x =

Zx 1
a

f ( x )d x +

Zx 2
x1

f ( x )d x +

Zx 3
x2

f ( x )d x + . . . +

Zb

x n 1

f ( x )d x

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 semba plicit supponiamo i punti equidistanti con passo h = , in modo che x 0 = a e x n = b , x i = x 0 + i h , n i = 0, . . . , n ). Lintegrale su [a , b ] si pu dunque ottenere come somma degli integrali su tali sottointervalli: Zb
a

f ( x )d x =

i =1 x i 1

n Zx i X

f ( x )d x

130

9.4. Formule composte

Figura 9.3: Formula composta dei trapezi, utilizzando 3 sottointervalli (4 punti).

In forma estesa abbiamo I

Ciascuno degli integrali su [x i 1 , x i ] viene approssimato utilizzando la formula dei trapezi: n Zx i n x x n h X X X i i 1 f ( x )d x [ f (x i 1 ) + f (x i )] = [ f (x i 1 ) + f (x i )] 2 i =1 x i 1 i =1 i =1 2 h [ f (x 0 ) + 2 f (x 1 ) + 2 f (x 2 ) + . . . + 2 f (x n 1 ) + f (x n )] 2 f ( a ) + f (b ) = h[ + f (x 1 ) + f (x 2 ) + . . . f (x n 1 )] 2

Lerrore che si commette dato dalla somma degli errori commessi sui singoli sottointervalli E i nt =
n X

i =1

f 00 (i )

h3 12

Supponendo che la derivata seconda della f sia continua e limitata in [a , b ] e chiamando con m e 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 Pn n X f 00 (i ) 00 nm f (i ) nM =) m i =1 M n i =1 Pn f 00 (i ) Per il teorema del Valor Intermedio (teorema 2.5.3), i =1 un valore assunto dalla funzione in n qualche punto u di [a , b ]. ba Applicando la relazione h = , lerrore diventa n E i nt =
n X

i =1

f 00 (i )

h3 h3 f 00 () f 00 () (b a )3 = n f 00 () = (b a )h 2 = 12 12 12 12 n2 131

9. I NTEGRAZIONE NUMERICA

Quindi per n ! 1 lerrore tende a zero come h 2 o, equivalentemente, come Formula composta di Cavalieri-Simpson

1 . n2

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. ai + bi Siano a i e b i gli estremi di ciascuna suddivisione e sia c i = il punto medio di ciascuna suddivisione 2 (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: Zb
a

f ( x )d x =

Zb 1
a1

f ( x )d x +

Zb 2
a2

f ( x )d x + . . . +

Zbn
an

f ( x )d x

Applicando la formula di Cavalieri-Simpson su ciascun intervallino risulta: Zb i


ai

f ( x )d x

In tal modo Zb n h X f ( x )d x f ( a i ) + 4 f (c i ) + f (b i ) 6 a i =1

h bi ai f ( a i ) + 4 f (c i ) + f (b i ) = f ( a i ) + 4 f (c i ) + f (b i ) 6 6

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: x0 = a x 2i = x 0 + i h i = 0, . . . n nodi estremi dei sottointervalli 1 x 2i +1 = x 0 + (i + )h i = 0, . . . , n 1 nodi centrali dei sottointervalli 2

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 Zb n 1 Zx 2i +2 X I= f ( x )d x = f ( x )d x
a

h [ f (x 0 ) + 4 f (x 1 ) + 2 f (x 2 ) + 4 f (x 3 ) + . . . + 2 f (x 2n 2 ) + 4 f (x 2n 1 ) + f (x 2n )] 6 n 1 n 1 X X h = [ f (x 0 ) + 4 f (x 2i +1 ) + 2 f (x 2i ) + f (x 2n )] 6 i =0 i =0 Per quanto riguarda lerrore, facendo la somma degli errori di integrazione sugli n sottointervalli, nellipotesi che la derivata quarta sia continua e limitata, si ha3 : E i nt 1 h 5 IV = ( f (1 ) + f I V (2 ) + . . . + f I V (n )) 90 2 1 1 X X h5 n (b a )5 n = f I V (i ) = f I V (i ) 2880 i =0 2880n 5 i =0

n 1 X i =0

i =0 x 2i

h [ f (x 2i ) + 4 f (x 2i +1 ) + f (x 2i +2 )] 6

Si considera quindi il punto tale che4 f I V ( ) = E i nt =


n 1X f I V (i ) n i =1

(b a )5 I V (b a )h 4 I V f ( ) = f ( ) 2880n 4 2880 1 Quindi per n ! 1 lerrore tende a zero come 4 o, equivalentemente, come h 4 . Nella formula dei trapen 1 zi lerrore invece decresce come 2 . Ci aspettiamo quindi che il maggiore sforzo computazionale dia una n maggiore accuratezza nei risultati quando si applica la formula di Cavalieri-Simpson rispetto alla formula dei trapezi.
3 Ricordiamo che h = b a .

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. I NTEGRAZIONE 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: Z1 1 I= e x d x = e x 0 = e 1 = 1.718281828
0

1 I t r ap = (1 + e ) = 1.859140914 2 1 1 IC S = (1 + 4e 1/2 + e ) = (1 + 6.594885083 + 2.718281828) = 1.718861152 6 6 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 Z1 I= e x d x = e e 0.9 = 0.2586787173
0.9

0.1 0.9 (e + e ) = 2.2 104 2 0.1 0.9 I IC S = I (e + 4e 0.95 + e ) = 9.0 109 6 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 105 . 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 (b a )3 = 2.265 101 (b a )3 |E t r ap | 12 e |EC S | (b a )5 = 9.438 104 (b a )5 2880 I I t r ap = I Perci per a = 0 e b = 1 gli errori sono maggiorati da |E t r ap | = 2.265 101 |EC S | = 9.438 104

Invece per a = 0.9 e b = 1, poich b a = 0.1 = 101 , abbiamo |E t r ap | = 2.265 101 103 = 2.265 104 |EC S | = 9.438 104 105 = 9.438 109

Esempio 9.4.2 Si voglia approssimare lintegrale a Z1 2 e x d x 0.746824.


0
a un integrale che non pu essere risolto analiticamente. Se si vuole calcolare una sua approssimazione senRb za fare uso di formule di quadrature, possiamo, ad esempio, pensare di applicare la denizione di integrale a f (x )d x = P limn !1 n f ( a + i h ( n )) h ( n ), con h ( n ) = ( b a )/ n , e considerare come approssimazione dellintegrale la somma parziale i = 0 Pn 7 otteniamo il valore 0.74682420125254. f ( a + i h ( n )) h ( n ) con un valore di n molto grande. Per esempio, con n = 10 i =0

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 2 2 2 2 h I t r ap = [e 0 + 2e h + 2e (2h ) + 2e (3h ) + e (4h ) ] 2 = 0.125[1 + 2e 0.125 + 2e 0.5 + 2e 0.75 + e 1 ] = 0.742984
2 2 2

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. 3 2 2 2 2 h IC S = [e 0 + 4e (h /2) + 2e (h ) + 4e ( 2 h ) + e (2h ) ] 6 2 2 2 0.25 = [1 + 4e 0.125 + 2e 0.5 + 4e 0.75 + e 1 ] 3 = 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)): v +v 1 14 L=6 + v 2 + v 3 + . . . + v 13 = 3009 metri 2 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 dellerrore 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.

R1 2 Esempio 9.4.4 Consideriamo 0 e x d x. In quanti sottointervalli bisogna suddividere lintervallo di integrazione per applicare la formula dei trapezi e di Cavalieri-Simpson e ottenere un errore che sia minore di una tolleranza = 105 ? Per i trapezi, lerrore maggiorato da max0x 1 | f 00 (x )| (b a )3 |E t r ap | 12 n2 Per Cavalieri-Simpson si ha max0x 1 | f I V (x )| (b a )5 |EC S | 2880 n4

135

9. I NTEGRAZIONE NUMERICA

Da f (x ) = e x abbiamo, per le derivate: f 00 (x ) = (2 + 4x 2 )e x f 0 (x ) = 2xe x


2 2 2 2

f I V (x ) = (12 48x 2 + 16x 4 )e x

f 000 (x ) = (12x 8x 3 )e x

Si trova che il massimo di | f 00 | e | f I V | in [0, 1] dato dal loro valore in x = 0, quindi abbiamo: 2 1 12 1 |E t r ap | = |EC S | = 2 2 4 12n 6n 2880n 240n 4 La richiesta dellaccuratezza per lerrore diventa: |E t r ap | 105 |EC S | 105 vale a dire, rispettivamente, 1 1 105 105 6n 2 240n 4

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 IC S = 0.7468249482544

9.5 Estrapolazione di Richardson


Applichiamo la formula di Cavalieri-Simpson sullintero intervallo [a , b ]. Lerrore che si commette, come sappiamo, vale E1 = f I V ( 1 ) b a 5 f I V (1 ) = (b a )5 90 2 2880

Suddividiamo ora lintervallo [a , b ] in due sottointervalli e applichiamo la formula composta di CavalieriSimpson. Lerrore che otteniamo vale E2 = f I V (2 ) (b a )5 2880 24

E1 . 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 e, supponendo che le derivate quarte della f non siano molto diverse tra loro, si ha E 2 I + 16 = Q 1 per n = 1 I + = Q 2 per n = 2

136

9.6. Approssimazione di Romberg

Si pu ricavare dalle due relazioni ottenendo = Quindi I Q2 + Q2 Q1 15 Q1 Q2 15

Utilizzando le due approssimazioni Q 1 e Q 2 possiamo approssimare lintegrale esatto con una maggiore accuratezza 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 2m il numero di sottointervalli in cui suddividiamo il dominio di integrazione [a , b ]. Applicando la formula dei trapezi su 2m 1 sottointervalli e, successivamente, su 2m sottointervalli, lerrore diminuisce come 1/4. Chiamando con A m e A m 1 i risultati della formula dei trapezi rispettivamente su 2m e su 2m 1 sottointervalli e chiamando con lerrore cambiato di segno commesso con 2m sottointervalli, abbiamo: I + = Am

I + 4 = A m 1 Lintegrale pu essere dunque migliorato con il valore Bm = Am + A m A m 1 . 3

Per m = 1 si ha: ba [ f (a ) + f (b )] la formula dei trapezi applicata su un unico intervallo 2 b a f (a ) a +b f (b ) A1 = [ +f( )+ ] la formula dei trapezi su 2 sottointervalli 2 2 2 2 a +b f (a ) 4 f ( 2 ) f (b ) B 1 = (b a )[ + )+ ] troviamo la formula di Cavalieri-Simpson! 6 6 6 A0 = Si ha dunque che B 1 (e quindi ciascun B m ) corrisponde al valore ottenuto con la formula di CavalieriSimpson. 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 Cm = Bm + B m B m 1 per m 2 15

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: Dm = Cm + C m C m 1 per m 3 63 137

9. I NTEGRAZIONE 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 Zb f (x )w (x ) d x
a

dove [a , b ] pu essere nito o innito (per esempio [1, 1], [0, +1]). Abbiamo due funzioni, la f (x ) e la w (x ), e vogliamo integrare il prodotto di queste due funzioni. La funzione w (x ), che chiamiamo funzione peso, 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 Zb n X f (x )w (x ) d x w i f (x i )
a

Considerando anche lerrore di quadratura: Zb n X f (x )w (x ) d x = w i f (x i ) + E i nt ( f )


a i =0

0=1

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 Rb a f (x )w (x ) d x 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 CavalieriSimpson: n = 2) Diremo che la formula di quadratura interpolatoria se vale d = n . Le formule interpolatorie sono ottenute 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 coRb struire i pesi dobbiamo tenere conto anche della funzione w e quindi i pesi saranno w i = a L i (x )w (x ) d x 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 NewtonCotes). possibile ricavare formule di quadratura che abbiano un grado di precisione d maggiore del grado del polinomio interpolante? E se s come? Q 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 Zb n X f (x )w (x ) d x = w i f (x i ) + E i nt ( f )
a i =0

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; Rb (b) il polinomio dei nodi F (x ) soddisfa la relazione a F (x )p (x )w (x ) d x = 0 per ogni polinomio p di grado k 1. Osserviamo che la condizione in (b): impone k condizioni sui nodi 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 k 1 rispetto alla funzione peso w . 5 Nel caso specico, il punto (b) dice che: Zb Zb
a Zb a a

F (x )w (x ) d x = 0 xF (x )w (x ) d x = 0 x 2 F (x )w (x ) d x = 0 . . . x k 1 F (x )w (x ) d x = 0

Zb
a

fa s che k non possa essere maggiore o uguale a n + 2. Se fosse infatti k = n + 2, il punto (b) sarebbe: Rb (b) il polinomio dei nodi F (x ) soddisfa la relazione a F (x )p (x )w (x )d x = 0 per ogni polinomio p di grado k 1 = n + 1. Allora, si potrebbe prendere come polinomio p (x ) esattamente F (x ) (che ha grado n + 1) e, per la Rb (b) sarebbe a (F (x ))2 w (x )d x = 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 Zb n X F (x )p (x )w (x ) d x = F (x i )p (x i )w i . a i =0 P Ma F (x i ) = 0 essendo F il polinomio dei nodi. Perci n i =0 F (x i )p (x i )w i = 0
R 5 Per denizione, infatti, due funzioni u e v si dicono ortogonali rispetto alla funzione peso w (positiva), se b u (x )v (x )w (x ) d x = 0. a

139

9. I NTEGRAZIONE NUMERICA

Rb P Di conseguenza a F (x )p (x )w (x ) d x = 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 Zb Zb Zb p (x )w (x ) d x = q ( x )F ( x ) w ( x ) d x + r (x )w (x ) d x 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 Zb Zb n X p (x )w (x ) d x = r (x )w (x ) d x = r (x i )w i
a a a a a

Ma r (x i ) = p (x i ) q (x i )F (x i ) = p (x i ) (essendo F (x i ) = 0). Quindi Zb Zb n X p (x )w (x ) d x = r (x )w (x ) d x = p (x i )w i


a a

i =0

Lerrore dunque zero e la dimostrazione completata. 4

i =1

Da un punto di vista teorico la condizione (a) del teorema permette di calcolare i pesi delle formule di Gauss: Rb essendo la formula interpolatoria si ha w i = a L i (x )w (x ) d x . 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 coefcienti del polinomio F (x ). Una volta trovato il polinomio F (x ) ricaviamo le radici, che sono appunti i nodi di integrazione6 .

9.7.1 Propriet delle formule di Gauss


Scriviamo le formule di Gauss con la notazione Zb n X G f (x )w (x ) d x = w i f (x i ) + E i nt ( f )
a i =0 G Si ha E i ( f ) 0 per f polinomio di grado 2n + 1 nt

6 Ricordiamo che un polinomio di grado n + 1 lo possiamo scrivere come a n +1 + a x n + + a ma possiamo anche dividere n n +1 x 0 per il coefciente di grado massimo e scriverlo in forma cosiddetta monica x n +1 + b n x n + b n 1 x n 1 + . . . + b 0 , e avere quindi solo n + 1 coefcienti (b 0 , b 1 , . . . , b n ) : le radici dei due polinomi non cambiano.

I nodi x i sono reali, distinti e contenuti nellintervallo aperto ]a , b [. I pesi w i sono tutti positivi. Rb P 2 Infatti, per j = 0, 1, . . . n si ha 0 < a (L j (x ))2 w (x ) d x = n i =0 w i (L j (x i )) 2 (lerrore nullo perch (L j (x )) un polinomio di grado 2n ). Ma L j (x i ) = 0 se i 6= j e L j (x i ) = 1 se i = j . P 2 Quindi n i =0 w i (L j (x i )) = 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 interpoRb lazione p (x ) (che interpola quindi per ogni nodo sia la f sia la f 0 ) e approssimato a f (x )w (x ) d x mediante Rb a p (x )w (x ) d x , 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: Rb Pn Pn 0 G a f (x )w (x ) d x = i =0 w i f (x i ) + i =0 C i f (x i ) + E i nt (x )

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 f (2(n +1)) (x ) si pu scrivere come E = (F (x ))2 (poich ogni nodo contato due volte, e supponendo che la f (2(n + 1))! sia derivabile 2(n + 1) volte e sia continua). Di conseguenza, lerrore nella formula di integrazione (applicando il teorema del Valor Medio in quanto G (F (x ))2 w (x ) non cambia segno nellintervallo di integrazione) si pu scrivere come E i nt
G Ei nt (x ) =

f (2(n +1)) () (2(n + 1))!

Zb
a

(F (x ))2 w (x ) d x

9.7.2 Formule di Gauss-Legendre


A seconda della funzione peso, si ha una particolare formula di Gauss. In genere i nodi di integrazione sono calcolati su intervalli canonici (spetta a noi fare il cambio di variabili se 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 2 3 nodi x 0,1 = 0.57735026918962576 x 0 = 0.77459666924148338 x1 = 0 x 2 = 0.77459666924148338 x 0 = 0.86113631159405257 x 1 = 0.33998104358485626 x 2 = 0.33998104358485626 x 3 = 0.86113631159405257 pesi w 0 = w 1 = 1.0 w 0 = 5/9 = 0.5555555556 w 1 = 8/9 = 0.8888888889 w 2 = 5/9 = 0.5555555556 w 0 = 0.3478548451374538 w 1 = 0.6521451548625461 w 2 = 0.6521451548625461 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 Rb a !n (x )!m (x )w (x ) d x = 0). I polinomi di Legendre (e, come essi, i polinomi delle altre formule di Gauss), si ricavano mediante formule 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 ) = p e [a , b ] = [1, 1] si hanno le formule di Gauss-Chebychev (prima specie) in (1 x 2 ) quanto i nodi di integrazione sono le radici dei cosiddetti polinomi di Chebychev di prima specie. p Con w (x ) = (1 x 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 ) = (1 x ) (1 + x ) (per > 1 e > 1) e [a , b ] = [1, 1] si hanno le formule di Gauss-Jacobi. Con w (x ) = x e x (per > 1) e [a , b ] = [0, +1] si hanno le formule di Gauss-Laguerre. 2 Con w (x ) = e x e [a , b ] = [1, +1] si hanno le formule di Gauss-Hermite. 1

141

9. I NTEGRAZIONE 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]. Rb R1 Dobbiamo fare un cambio di variabili. Da a f (x ) d x dobbiamo passare a 1 f (t ) d t . ba b+a Poniamo x = t+ 2 2 ba b + a b + a + b + a 2a Per t = 1 si ha x = (1) + = = = a . Quindi per t = 1, si ha x = a (il primo 2 2 2 2 estremo di un intervallo viene trasformato nel primo estremo dellaltro intervallo). ba b + a b a + b + a 2b Per t = 1 si ha x = (1) + = = = b. 2 2 2 2 Perci, per t = 1, si ha x = b . ba Inoltre d x = d t . Con la trasformazione di variabili si ha: 2 Zb Z1 ba b+a ba f (x ) d x = f t+ dt 2 2 2 a 1

142

9.8. Esercizi

Applicando la formula di Gauss-Legendre Zb


a

f (x ) d x

n ba X ba b+a wG f ( xi + ) 2 i =0 i 2 2

9.7.5 Sulla funzione peso


Supponiamo di voler integrare una funzione g (x ) in [a , b ] (intervallo nito). Supponiamo che la funzione 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 = ba b+a t+ . 2 2 ba ba Si ha (b x ) = (1 t ) e (x a ) = (1 + t ). 2 2 Allora Rb b a R1 ba b+a ba ba g ( x ) d x = f ( t + ) (1 t ) (1 + t ) d t a 1 2 2 2 2 2 ++1 R1 ba ba b+a = t+ )(1 t ) (1 + t ) d t 1 f ( 2 2 2 Posso applicare le formule di Gauss-Jacobi e scaricare sulla funzione peso le singolarit della funzione di partenza. R1 Sia dato lintegrale 0 f (x )(1 x )p d x con f regolare e p intero elevato: allora (1 x )p una funzione che ha valori vicini a zero. La funzione da integrare quasi discontinua e le formule classiche (Trapezi o CavalieriSimpson) 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 (1 x )p .

9.8 Esercizi

Esercizio 9.8.1 Sia dato lintegrale I =

(a) Approssimare il valore dellintegrale applicando la formula dei trapezi con n = 5 suddivisioni in parti uguali dellintervallo di integrazione. (b) Trovare una maggiorazione dellerrore commesso e, dopo aver calcolato analiticamente lintegrale esatto, confrontare tale stima con lerrore esatto.

Z0

e x (x + 1) dx.

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 xi 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. I NTEGRAZIONE NUMERICA

La formula dei trapezi I t r ap = h ( f (x 0 ) + f (x 5 ) + f (x 1 ) + f (x 2 ) + f (x 3 ) + f (x 4 )) = 2.19606715 2

(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 (1 x ). 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 | (b a )3 | Quindi |E t r ap | M = 0.591124488 12 52 Analiticamente, facile calcolare lintegrale esatto (per parti): I= Z0 f (x ) dx = e x (x + 1)|0 2 + Z0 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 Z2 2 dx x 4 0 (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 = 105 .

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 : IT = b a f ( a ) + f (b ) ( + f (x 1 ) + f (x 2 ) + f (x 3 )) n 2 f (0) + f (2) = 0.5( + f (0.5) + f (1) + f (1.5)) 2 0.5 1 = 0.5( 0.571428571 0.666666667 0.8) 2 = 1.39404762

(b) Consideriamo la formula dellerrore: E =

f 00 () (b a )3 12 n2 2 2 4 0 00 Da f (x ) = segue f (x ) = e f (x ) = . x 4 (x 4)2 (x 4)3 Per maggiorare lerrore dobbiamo considerare che vale max0x 2 | f 00 (x )| (b a )3 |E | , da cui dobbiamo calcolare M = max0x 2 | f 00 (x )|. 12 n2

144

9.8. Esercizi

4 4 : osserviamo il cambiamento al denominatore. Poniamo g (x ) = . Risulta g 0 (x ) = (4 x )3 (4 x )3 12 > in [0, 2], quindi la g crescente e ha valore massimo per x = 2. Perci M = max0x 2 | f 00 (x )| = (4 x )4 4 M 23 1 | f 00 (2)| = 3 = 1/2 = 0.5. Si ha allora la maggiorazione dellerrore |E | = = 0.0208333333 2 2 12 4 48 (c) Lintegrale esatto si calcola facilmente: Z2
0

La funzione (x 4)3 continua, crescente e sempre negativa nellintervallo [0, 2]. Quindi |

4 |= (x 4)3

I=

2 d x = 2 ln (|x 4|)|2 0 = 2 ln (| 2|) 2 ln (| 4|) = 2 ln (1/2) = ln (1/4) 1.386294361 x 4

Lerrore esatto commesso con la formula dei trapezi, in valore assoluto, | I I T | = 0.00775325793 M 23 (d) Perch la maggiorazione dellerrore sia minore della tolleranza = 105 deve essere |E | 105 12 n 2 M 3 5 105 cio n 2 2 10 = = 33333.333333. Quindi n > 182.574186, vale a dire n = 183. 12 3

Esercizio 9.8.3 Dato lintegrale Z0.5 1 I= dx p 0 1 x2 (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 Q1 = 0.25 ( f (0) + 4 f (0.25) + f (0.5)) = 0.523823565 3

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. Q2 = h ( f (x 0 ) + 4( f (x 1 ) + 4 f (x 3 )) + 2 f (x 2 ) + f (x 4 )) = 0.523616326 3

dove f (0.125) = 1.00790526, f (0.375) = 1.07871978 (essendo gi in possesso degli altri valori, calcolati per Q 1 ) Q2 Q1 (b) La formula di estrapolazione di Richardson : Q 3 = Q 2 + da cui ricaviamo Q 3 = 0.5236025101 15 (c) Analiticamente lintegrale esatto : I= Z0.5
0

1 d x = arcsin (x )|0.5 p 0 = /6 0 = 0.523598775 1 x2

Lerrore esatto commesso con lestrapolazione di Richardson, in valore assoluto, : | I Q 3 | = 3.7351 106 . 145

9. I NTEGRAZIONE NUMERICA

R5 p Esercizio 9.8.4 Si ( x ) d x utilizzando il metodo di Gauss-Legendre con 3 punti di p calcoli I = 2 sinp appoggio (x 1 = (3/5), x 2 = 0, x 3 = (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 ba che la trasformazione dallintervallo [2, 5] allintervallo [1, 1] porta al cambiamento di variabili x = t+ 2 b +a 52 5+2 3 7 3 = t+ = t + si ha d x = d t . La formula di Gauss-Legendre deve essere applicata sui nodi 2 2 2 2 2 2 3 7 trasformati dati da x i + . Perci abbiamo 2 2 3 3 7 3 7 3 7 IG = w 1 f ( x1 + ) + w 2 f ( x2 + ) + w 3 f ( x3 + ) 2 2 2 2 2 2 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

10
Jules Henri Poincar

E QUAZIONI ALLE DERIVATE ORDINARIE

Luniverso unequazione differenziale.

10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8

Introduzione . . . . . . . . . . . . . . . . Sulle equazioni differenziali ordinarie . Metodo di Eulero esplicito . . . . . . . . Metodo di Eulero implicito . . . . . . . . Metodo di Crank-Nicolson . . . . . . . . Studio dellerrore . . . . . . . . . . . . . Errori di troncamento locale . . . . . . . Convergenza e stabilit . . . . . . . . . . 10.8.1 Convergenza di Eulero esplicito 10.8.2 Stabilit di Eulero esplicito . . . 10.8.3 Convergenza di Eulero implicito 10.8.4 Stabilit di Eulero implicito . . . 10.8.5 Convergenza di Crank-Nicolson 10.8.6 Stabilit di Crank-Nicolson . . . 10.8.7 Sulla stabilit . . . . . . . . . . . 10.9 Esercizi . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

147 148 149 151 154 155 155 156 156 157 157 158 158 159 159 160

10.1 Introduzione
Allinizio del 900, van der Pol1 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 Appleton 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. E QUAZIONI 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 0 u1 u2 = 0 u2 ((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 = f (t , y ), dt a t b

La funzione f (t , y ) assegnata. Ci riferiamo a t come alla variabile indipendente. Dobbiamo trovare quella d y (t ) funzione y = y (t ) tale che la sua derivata prima y 0 = y 0 (t ) = coincida con f (t , y (t )). dt

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: 0 u1 u2 0 = u2 F /m Per risolvere il sistema, possiamo usare metodi che vanno bene per risolvere equazioni differenziali del primo 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 del primo ordine di ODE hanno la forma y0 (t ) = f(t , y) dy denota la derivata rispetto a t (per cui la dt d y ( t ) i i -sima componente del vettore derivata data da y i0 (t ) = ). La funzione f assegnata e noi vogliamo dt 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 dove y : R ! R con y = ( y 1 y 2 . . . y n ), f : R
n n +1

Sistemi di ODE

! R e y0 (t ) =

y 0 = f (t , y (t )) con valore iniziale y (a ) = y a .

a t b

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 Eulero2 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 ) + La quantit (t t i )2 00 y (i ) 2

(t t i )2 00 y (i ) il resto della formula di Taylor con i un punto opportuno nel segmento di 2 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 ) + h y 0 (t i ) + h 2 00 y (i ) 2

Esplicitando y 0 (t i ) rispetto agli altri termini si ha: y 0 (t i ) = y (t i +1 ) y (t i ) h 00 y (i ) h 2

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 00 y (i ) = f (t i , y (t i )) h 2


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 P radice quadrata di 1, di , il simbolo di sommatoria e altri ancora.

149

10. E QUAZIONI ALLE DERIVATE ORDINARIE

Trascurando il termine

h 00 y (i ) non abbiamo pi i valori della soluzione esatta, ma otterremo i valori della 2 soluzione approssimata. Scriviamo dunque: y i +1 y i = f (t i , y i ) h La formula di Eulero esplicito : y i +1 = y i + h f (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 ) . . . .=. .

Un altro approccio

Si arriva alla stessa formula integrando lODE e approssimando lintegrale della f mediante il valore in f (t 0 , y (t 0 )): da y 0 = f (t , y (t )) integrando ambo i membri da t 0 a t , otteniamo Zt
t0

dy dt = dt

Zt
t0

f (t , y (t )) d t =)

Z y (t )
y0

dy =

Zt
t0

f (t , y (t )) d t

Rt Al secondo membro, approssiamo t0 f (t , y (t )) d t 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 + h f (t 0 , y 0 )). Ai passi successivi: y i +1 = y i + h f (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 + h f (t 0 , y 0 ) = y 0 h y 0 = (1 h ) 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
Interpretazione geometrica

Da un punto di vista geometrico (si veda la Figura 10.1), il valore in t i +1 approssimato utilizzando il valore 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 00 y (i ) 2

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 ) h y 0 (t i +1 ) + Otteniamo quindi y 0 (t i +1 ) = y (t i +1 ) y (t i ) h 00 + y (i ) h 2 h 2 00 y ( i ) 2

Andando a sostituire nella ODE al tempo t i +1 , si ha : y (t i +1 ) y (t i ) h 00 + y (i ) = f (t i +1 , y (t i +1 )) h 2 Trascurando il termine del resto di Taylor y i +1 y i = f (t i +1 , y i +1 )) h La formula di Eulero implicito vale y i +1 = y i + h f (t i +1 , y i +1 )). 151 h 00 y (i ) abbiamo: 2

10. E QUAZIONI 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 h y i +1 ovvero (1 + h ) y i +1 = y i yi La soluzione numerica y i +1 = . (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 3 y 1 = y 0 + h f (t 1 , y 1 ) = 1 0.5 y 1 Questa equazione non lineare in y 1 pu essere risolta mediante metodo di punto sso (x = g (x ) = 1 0.5x 3 ) oppure utilizzando il metodo di Newton-Raphson per F (x ) = 0 con F (x ) = x 1 + 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 3 esplicito, che d y 1 = y 0 0.5 y 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 + h f (t i , y i ) = y i + h ( y i2 ) = y i h y i2 Partendo da y 0 = 1 si ricava: y 1 = 1 0.1(12 ) = 0.9 y 2 = 0.9 0.1(0.92 ) = 0.819 Per confronto, calcoliamo la soluzione esatta y (t ) = 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 + h f (t i +1 , y i +1 ) = y i h y i2+1 Per ricavare y 1 la formula diventa: 2 y 1 = y 0 + h f (t 1 , y 1 ) = 1 0.1( y 1 ) 1 , ottenendo: t +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) ) = 1 0.1(12 ) = 0.9 y (2) = g ( y (1) ) = 1 0.1(0.92 ) = 0.919 y (3) = g ( y (2) ) = 1 0.1(0.9192 ) = 0.9155439 Se prendiamo y (3) come approssimazione di y 1 ricaviamo y 1 = 0.9155439 (per confronto, il valore esatto 0.90909090). Calcoliamo ora y 2 : 2 y 2 = y 1 + h f (t 2 , y 2 ) = 0.9155439 0.1( y 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.9155439 0.1(0.91554392 ) = 0.8317218367 y (2) = g ( y (1) ) = 0.9155439 0.1(0.83172183672 ) = 0.8463677786 y (3) = g ( y (2) ) = 0.9155439 0.1(0.84636777862 ) = 0.8439100583 Troviamo quindi 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 + h f (t 0 , y 0 ) = 1 0.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) ) = 1 0.1(0.92 ) = 0.919 y (2) = g ( y (1) ) = 1 0.1(0.9192 ) = 0.9155439 y (3) = g ( y (2) ) = 1 0.1(0.91554392 ) = 0.9161779367 Quindi y 1 = 0.9161779367. Al secondo passo, lo schema di punto sso dato dalla funzione g ( y ) = y 1 h ( y 2 ) = 0.9161779367 0.1 y 2 . Come approssimazione iniziale prendiamo y (0) = y 1 + h f (t 1 , y 1 ) = g ( y 1 ) = 0.8322397355. Si ha: y (1) = g ( y (0) ) = 0.9161779367 0.1(0.83223973552 ) = 0.8469156390 y (2) = g ( y (1) ) = 0.9161779367 0.1(0.84691563902 ) = 0.8444513267 y (3) = g ( y (2) ) = 0.9161779367 0.1(0.84445132672) = 0.8448681324 Ricaviamo y 2 = 0.8448681324.

153

10. E QUAZIONI 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 ]: Z y (ti +1 ) Zti +1 Zti +1 dy = f (t , y (t )) dt =) y (t i +1 ) y (t i ) = f (t , y (t )) dt
y (t i ) ti ti

A secondo membro, applichiamo la formula dei trapezi trascurando lerrore di integrazione: y i +1 y i = h [ f (t i , y i ) + f (t i +1 , y i +1 )] 2 h [ f (t i , y i ) + f (t i +1 , y i +1 )] 2

Si ha la formula di Crank-Nicolson: y i +1 = y i +
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 = h f (t i , y i )

y i +1 y i = h f (t i +1 , y i +1 ) sommando e dividendo per 2:

y i +1 y i =

h h [ f (t i , y i ) + f (t i +1 , y i +1 )] =) y i +1 = y i + [ f (t i , y i ) + f (t i +1 , y i +1 )] 2 2

Esempio 10.5.1 Lo stesso esempio di prima (y 0 = y con y (0) = 1) risolto con Crank-Nicolson d: y i +1 = h y i + [ y i y i +1 )] cio 2 h h 2h (1 + ) y i +1 = (1 ) y i =) (2 + h ) y i +1 = (2 h ) y i =) y i +1 = yi 2 2 2+h Per h = 0.5, confrontiamo i valori ottenuti dai metodi di Eulero esplicito, implicito e Crank-Nicolson, con la soluzione esatta: ti 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 (t i +1 ) y (t i ) h 00 y 0 (t i +1 ) = y (i ) = f (t i , y (t i )) h 2 Per costruire il metodo, abbiamo trascurato il termine del resto, vale a dire la quantit di = y (t i +1 ) y (t i ) h f (t i , y (t i )) = y 00 (i ) = O (h ) h 2

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 1 O ( ) (si veda lesempio fatto sulla propagazione degli errori a pag. 29). Tuttavia questo aspetto diventa seh condario nella risoluzione delle ODE sia perch il passo h nelle applicazioni non mai troppo (esageratamente) 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: di = Nel metodo di Eulero implicito: di = y (t i +1 ) y (t i ) h f (t i , y (t i +1 )) = y 00 (i ) = O (h ) h 2 y (t i +1 ) y (t i ) h f (t i , y (t i )) = y 00 (i ) = O (h ) h 2

155

10. E QUAZIONI 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 f 00 (i , i ) 3 [ f (t i , y (t i )) + f (t i +1 , y (t i +1 ))] h 2 12

dove i e i sono opportuni punti. Ma f = y 0 da cui f 0 = y 00 e f 00 = y 000 . Perci h y 000 (i ) 3 y (t i +1 ) y (t i ) = [ f (t i , y (t i )) + f (t i +1 , y (t i +1 ))] h 2 12 y (t i +1 ) y (t i ) 1 y 000 (i ) 2 di = [ f (t i , y (t i )) + f (t i +1 , y (t i +1 ))] = h = O (h 2 ) h 2 12

10.8 Convergenza e stabilit


Denizione 10.8.1 Un metodo si dice convergente se lim 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 ).
h !0 i i !+1

= 0 cio se lerrore va a zero al tendere del

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 ih 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 Un metodo si dice stabile se lerrore iniziale si mantiene limitato al crescere di i (per i ! 1): |i | M |0 | con M costante positiva. Studieremo la convergenza e la stabilit dei metodi di Eulero esplicito, implicito e Crank-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 + h f (t 0 , y 0 ) = y 0 h y 0 = (1 h ) y 0 y 2 = y 1 + h f (t 1 , y 1 ) = y 1 h y 1 = (1 h ) y 1 . . . y i = y i 1 + h f (t i 1 , y i 1 ) = y i 1 h y i 1 = (1 h ) 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 = (1 h ) y 0 . . .

y 2 = (1 h ) y 1 = (1 h )2 y 0 y i = (1 h ) y i 1 = (1 h )i y 0 La soluzione numerica al tempo t i data da y i = (1 h )i y 0 . Fissato un tempo t = i h , vediamo se lim i = 0 cio se lim y i = y (t ). ih 2 1 3t Osserviamo che: (1 h )i = (1 h ) h = 4(1 h ) h 5
h !0 i !+1 h !0 i !+1

1 ln (1 h ) (1/h ) h Ricordiamo la propriet per la quale x = e ln (x ) = e ln (x ) . Perci: (1 h ) h = e ln (1h ) =e Quando facciamo il limite per h ! 0 e per i ! +1 consideriamo che, per il teorema dell Hpital, vale ln (1 h ) 1 = lim = 1 h !0 h !0 1 h h lim ln (1 h ) h Di conseguenza limh !0 e = e 1 Allora
h !0 i !+1 h !0 i !+1

In questo modo abbiamo provato che il metodo converge. Il discorso si ripete in maniera del tutto simile, per 6= 1.

1 3t lim y i = lim y 0 (1 h )i = lim y 0 4(1 h ) h 5 = y 0 e t = y (t )


h !0 i !+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 h y 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 2 crescente) tende a zero se |1 h | < 1 cio per 1 < 1 h < 1 () 0 < h < 2 () h < . 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 = yi (1 + h )

157

10. E QUAZIONI ALLE DERIVATE ORDINARIE

Quindi y0 (1 + h ) y1 y0 y2 = = (1 + h ) (1 + h )2 y2 y0 y3 = = (1 + h ) (1 + h )3 . . . y i 1 y0 yi = = (1 + h ) (1 + h )i y1 = In tal caso y0 = lim y 0 (1 + h )i


h !0 i !+1

h !0 i !+1

lim y i = lim

h !0 (1 + h )i i !+1

(i passaggi sono del tutto simili a quelli visti per Eulero esplicito). Abbiamo provato la convergenza.

1 3i h = y 0 4(1 + h ) h 5 = y 0 e t = y ( t )

10.8.4 Stabilit di Eulero implicito


Per la stabilit, dalla soluzionei numerica y i = stabile. y0 (1 + h )i 1 , si osserva che, per i ! +1, qualunque sia il va= 0 Si parla di metodo incondizionatamente

lore di h , la soluzione tende a zero in quanto limi !+1

(1 + h )i

10.8.5 Convergenza di Crank-Nicolson


Il metodo di Crank-Nicolson applicato allequazione test diventa: y i +1 = y i + y i +1 = Andando a ritroso si ricava y i +1 = y 0 2 h yi 2 + h 2 h 2 + h i +1 h [ y i y i +1 ] da cui 2

Per vericare che il metodo converge studiamo il limite lim y i . Partiamo dalla relazione
h !0 i !+1

Ma

2 h 2 + h

2 3i h 2 3t 1 1 2 h 2 h 6 6 h7 h7 =4 5 =4 5 2 + h 2 + h 1 2 h 1 ln ( ) 2 h h h 2 + h =e 2 + h

158

10.8. Convergenza e stabilit

Nel fare il limite per h ! 0 e i ! +1 della quantit che si trova allesponente, applichiamo lHpital e 2 h (2 + h ) (2 h ) 4 ricordiamo che la derivata di vale = : 2 + h (2 + h )2 (2 + h )2 ln (
h !0 i !+1

lim

2 h ) 4 2 + h = lim 2 + h 4 = lim = h !0 2 h (2 + h )2 h !0 (2 + h )(2 h ) h


i !+1 i !+1

Quindi lim y i = lim y 0


h !0 i !+1

h !0 i !+1

2 h 2 + h

La convergenza provata.

2 3i h 1 6 2 h h 7 t = lim y 0 4 = y (t ) 5 = y0e h !0 2 + h
i !+1

10.8.6 Stabilit di Crank-Nicolson


2 h i Per la stabilit, si vede che la soluzione numerica y i = y 0 . Per i ! +1, qualunque sia il valore 2 + h i 2 h di h , la soluzione tende a zero in quanto limi !+1 = 0. Il metodo incondizionatamente stabile. 2 + h

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 lerrore 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 + h y i . Per la soluzione esatta, sappiamo che vale y (t i +1 ) = y (t i ) + h y (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 h Considerato che d i = y 00 (i ) e che, per studiare la stabilit, h ssato mentre i tende a +1, il termine hd i 2 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 +1. . .

159

10. E QUAZIONI 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 e 2t + 1 y 0 = 2 y + 1, con y (0) = 1 (soluzione esatta y (t ) = ) 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 (2 y i + 1) = (1 2h ) y i + h La soluzione esatta soddisfa unequazione del tipo

y (t i +1 ) = y (t i ) + h (2 y (t i ) + 1) + hd i = (1 2h ) y (t i ) + h + hd i Nel calcolare lerrore i +1 = y (t i +1 ) y i +1 abbiamo i +1 = (1 2h )i + hd i Il termine hd i (d i errore locale di troncamento) si pu trascurare. Abbiamo allora i +1 = (1 2h )i . Possiamo trovare con facilit che i +1 = (1 2h )i +1 0 o, ancora, i = (1 2h )i 0 . Se vogliamo che lerrore rimanga limitato per i ! 1 la quantit (1 2h )i non deve crescere. Quindi deve essere |1 2h | < 1, vale a dire 1 < 1 2h < 1 cio 2h < 2, quindi h < 1: stabilit sotto condizione.

160

11
Zoolander

I NTRODUZIONE 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?

11.1 Introduzione alla programmazione . . . . . . . 11.2 FORTRAN: FORmula TRANslator . . . . . . . . 11.3 Problemi e Algoritmi . . . . . . . . . . . . . . . 11.4 Elementi di un linguaggio di programmazione 11.5 Prime regole sul FORTRAN77 . . . . . . . . . . 11.6 Le variabili . . . . . . . . . . . . . . . . . . . . . 11.7 I tipi di dati . . . . . . . . . . . . . . . . . . . . . 11.8 Espressioni aritmetiche e funzioni elementari 11.9 I predicati elementari . . . . . . . . . . . . . . . 11.10 Struttura alternativa . . . . . . . . . . . . . . . . 11.11 Programma sul metodo di punto sso . . . . . 11.12 I sottoprogrammi . . . . . . . . . . . . . . . . . 11.12.1 Le functions . . . . . . . . . . . . . . 11.12.2 Le subroutines . . . . . . . . . . . . 11.13 Il formato . . . . . . . . . . . . . . . . . . . . . . 11.14 Files di dati . . . . . . . . . . . . . . . . . . . . . 11.15 Vettori . . . . . . . . . . . . . . . . . . . . . . . . 11.16 Ciclo do . . . . . . . . . . . . . . . . . . . . . . . 11.16.1 I vettori nei sottoprogrammi . . . . . . 11.16.2 Leggere i dati di input da le . . . . . . 11.17 Matrici in FORTRAN . . . . . . . . . . . . . . . 11.17.1 Le matrici nei sottoprogrammi . . . . . 11.17.2 Parameter . . . . . . . . . . . . . . . . . 161

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

CAPITOLO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

162 162 163 164 164 165 166 166 167 170 172 174 174 178 180 182 182 183 184 185 187 188 189

11. I NTRODUZIONE AL FORTRAN 77

11.17.3 Memorizzazione delle matrici 11.17.4 Un programma di esempio . . 11.18 La formula dei trapezi in FORTRAN . . 11.19 Esercizi . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

190 191 193 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 parole 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. Uno volta scritto il programma in modo corretto, occorre fare capire al computer che c un programma da eseguire: bisogna quindi tradurre in linguaggio macchina il programma scritto con il linguaggio di alto livello: questo passaggio lo si fa mediante la compilazione. Useremo un comando (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 ! Programma eseguibile

compi l at or e

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 parte 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). Un programma FORTRAN va prima scritto mediante un editor di testo, salvandolo con un nome che abbia lestensione .f, per esempio prova.f. Poi va tradotto in linguaggio macchina in modo da poterlo eseguire 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
1 Dal Dizionario online della Hoepli http://dizionari.hoepli.it 3 Da http://dizionari.hoepli.it 5 Da http://dizionari.hoepli.it 2 Dal Dizionario online della Garzanti http://www.garzantilinguistica.it 4 Da il Sabatini Colletti Dizionario della Lingua Italiana http://dizionari.corriere.it/dizionario_italiano

Algoritmo

163

11. I NTRODUZIONE 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 risolvere 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 colonna7 ; 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 stampare e dobbiamo usare gli apici due volte:
write (*,*) questo e un programma di prova

11.6 Le variabili
Scriviamo ora un programma pi complicato
program a r e a t r i a C programma per c a l c o l a r e l area di un t r i a n g o l o C dando in input i v a l o r i d e l l a base e d e l l a l t e z z a i m p l i ci t none real * 8 a , b , area write ( * , * ) base a read ( * , * ) a write ( * , * ) base , a write ( * , * ) a l t e z z a b read ( * , * ) b write ( * , * ) a l t e z z a , b area =( a * b ) * 0 . 5 write ( * , * ) area del triangolo , 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 perforate, 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. I NTRODUZIONE AL FORTRAN 77

integer real real*8 double precision logical character

variabile intera variabile reale in precisione semplice variabile reale in doppia precisione (occupa esattamente 8 byte di memoria) variabile reale in doppia precisione (accuratezza diversa a seconda della macchina usata) variabile logica 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 questo 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 FORTRAN viene data la precedenza (priorit) agli elevamenti a potenza, 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

sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) exp(x) log(x) log10(x) sqrt(x)

Signicato sin (x ) cos (x ) tan (x ) asi n (x ) acos (x ) at an (x ) ex ln (x ) log (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 abbastanza 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 istruzioni 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 determinate 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. I NTRODUZIONE AL FORTRAN 77

Operatore .GT. .GE. .LT. .LE. .EQ. .NE.

Signicato > >= < <= == =

Esempio (a.gt.b) (a.ge.b) (a.lt.b) (a.le.b) (a.eq.b) (a.ne.b)

Valore Vero se a > b Falso se a b Vero se a b Falso se a < b Vero se a < b Falso se a b Vero se a b Falso se a > b Vero se a = b Falso se a 6= 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 .NOT. .AND. .OR.

Signicato negazione congiunzione & disgiunzione inclusiva |

Esempio .not.(P) (P1).and.(P2) (P1).or.(P2)

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 p r e d i c a t i l o g i c i C programma di esempio s u l l e proposizioni l o g i c h e i m p l i ci t none real * 8 a , b , c l o g i c a l p1 , p2 , p write ( * , * ) s c r i v i i l valore di a read ( * , * ) a write ( * , * ) a= , a write ( * , * ) s c r i v i i l valore di b read ( * , * ) b write ( * , * ) b= , b write ( * , * ) s c r i v i i l valore 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. I NTRODUZIONE AL FORTRAN 77

11.10 Struttura alternativa


I programmi in cui le istruzioni devono essere eseguite una di seguito allaltra si dicono a struttura sequenziale. 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 vericare il fenomeno di cancellazione numerica se b 2 4ac b 2 e quindi possiamo applicare una formula alternativa. . . 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.

Ciclo if

i f ( espressione { istruzione { istruzione { .... el se { istruzione { istruzione { .... end i f

l o g i c a ) then 1a } 2a } } 1b } 2b } }

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 o g i c a ) then { i s t r u z i o n e 1a } { i s t r u z i o n e 2a } { .... } end i f

Se vera lespressione logica allora si eseguono le istruzioni 1a, 2a, . . . , altrimenti non si fa nulla.

Ciclo if struttura pi generale

i f ( espressione l o gica1 ) then { i s t r u z i o n e 1a } { i s t r u z i o n e 2a } { .... } el se i f ( espressione l o gica2 ) then { i s t r u z i o n e 1b } { i s t r u z i o n e 2b } { .... } .... el se { i s t r u z i o n e 1z } { i s t r u z i o n e 2z } { .... } end i f

170

11.10. Struttura alternativa

Vediamo un programma che calcola le radici di unequazione di secondo grado.


program r a d i c i i m p l i ci t none real a , b , c , d e l t a real x1 , x2 c a l c o l o d e l l e r a d i c i r e a l i di ax ** 2 +bx+c = 0 x = [ b +/ s q r t { b ** 2 4ac } ] / 2a write ( * , * ) c o e f f i c i e n t 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 d e l t a =b ** 2 4 . * a * c i f ( d e l t a . l t . 0 ) then write ( * , * ) l e r a d i c i sono complesse else x1= ( b + s q r t ( d e l t a ) ) / ( 2 . * a ) write ( * , * ) x1 = , x1 x2= ( b s q r t ( d e l t a ) ) / ( 2 . * a ) write ( * , * ) x2 = , x2 end i f stop end

C C C

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 ( d e l t a . l t . 0 ) then write ( * , * ) l e r a d i c i sono complesse e l s e i f ( d e l t a . eq . 0 . d0 ) then x1= b / ( 2 . 0 d0 * a ) x2=x1 write ( * , * ) l e r a d i c i sono : , x1 , x2 else x1= ( b + s q r t ( d e l t a ) ) / ( 2 . * a ) x2= ( b s q r t ( d e l t a ) ) / ( 2 . * a ) write ( * , * ) l e r a d i c i sono : , x1 , x2 i f ( ab ( x1 ) . gt . abs ( x2 ) ) then x2= c / ( x1 * a ) write ( * , * ) x2 con formula a l t e r n a t i v a , x2 else x1= c / ( x2 * a ) write ( * , * ) x1 con formula a l t e r n a t i v a , x1 end i f end i f

Il ciclo if non basta per scrivere tutti i nostri programmi. Pensiamo ad un blocco di istruzioni da ripetere 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).

Ciclo do while

171

11. I NTRODUZIONE AL FORTRAN 77

do while ( espressione l o g i c a ) { istruzione 1 } { istruzione 2 } { ... } { istruzione 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 generati 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 e r =0 scartonew =2.0d0 * t o l l do while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) ) i t e r = i t e r +1 xnew=cos ( xold ) scartonew=abs (xnew xold ) write ( * , * ) i t e r , xnew xold=xnew end do

La variabile scartonew ha il signicato dello scarto x n x n 1 | 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 quantit 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 proposizione (scartonew.ge.toll) .and. (iter . le .itmax) . Si esce dal ciclo do while quando scartonew < toll oppure quando iter > itmax. | x n | Sappiamo che, per lo schema di punto sso, vale limn !1 = M = |g 0 ()|. Poich non conosciamo | x n 1 lerrore, ma possiamo calcolare lo scarto e, per n ! 1, vale | x n | |x n x n 1 |, 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 chiamiamo scartold, che corrisponde allo scarto |x n 1 x n 2 |. 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.
C C C C C C C C C C C C C C C program puntofisso programma per i l c a l c o l o del punto f i s s o per g ( x )= cos ( x ) i m p l i ci t none in [ 0 , pi / 2 ]

significato delle variabili i t e r : i t e r a z i o n e del metodo del punto f i s s o itmax : numero massimo di i t e r a z i o n i t o l l : t o l l e r a n z a p r e f i s s a t a per l approssimazione del punto f i s s o x0 : punto i n i z i a l e d e l l a s u c c e s s i o n e xold : approssimazione al passo n1 xnew : approssimazione al passo n s c a r t o l d : s c a r t o a l l i t e r a t a precedente scartonew : valore a s s o l u t o t r a l i t e r a t a c o r r e n t e e quella al passo precedente asint1 : scartonew / s c a r t o l d approssimazione di M asint2 : abs( sin (xnew ) ) approssimazione di M integer i t e r , itmax real * 8 x0 , xold , xnew , scartold , scartonew , t o l l real * 8 asint1 , asi nt2 write ( * , * ) approssimazione i n i z i a l e read ( * , * ) x0 write ( * , * ) x0 = , x0 itmax=100 t o l l =1.d10

173

11. I NTRODUZIONE AL FORTRAN 77

scartonew =2.0 * t o l l s c a r t o l d =scartonew iter = 0 xold=x0 write ( * , * ) i t xnew scarto 1 a s i nt1 asint2 write ( * , * ) i t e r , xold , scartonew do while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) ) i t e r = i t e r +1 xnew=cos ( xold ) scartonew=abs (xnew xold ) asi nt 1 = scartonew / s c a r t o l d asi nt 2 =abs( sin (xnew ) ) write ( * , * ) i t e r , xnew , scartonew , asint1 , as i nt2 xold=xnew s c a r t o l d =scartonew end do stop end

11.12 I sottoprogrammi
Quando lalgoritmo e il problema su cui 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 n funzione scalare, che pu essere denita in un sottoinsieme di R 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
stop end f i n e del programma p r i n c i p a l e

Esempio di function gfun

real * 8 function gfun ( x ) funzione di punto f i s s o i m p li 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). Per la derivata prima la function la seguente:
real * 8 function dgfun ( x ) C derivata d e l l a funzione di punto f i s s o i m p l i c i t none real * 8 x dgfun= sin ( x ) return end

Esempio di function dgfun

Come cambia il programma principale? Nella dichiarazione delle variabili dobbiamo dichiarare le due function gfun e dgfun
integer i t e r , itmax real * 8 x0 , xold , xnew , scartold , scartonew , t o l l real * 8 asint1 , 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 e r , itmax real * 8 x0 , xold , xnew , scartold , scartonew , t o l l real * 8 asint1 , 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 o l l ) . and . ( i t e r . l e . itmax ) ) i t e r = i t e r +1 xnew=gfun ( xold ) scartonew=abs (xnew xold ) a s i n t 1 = scartonew / s c a r t o l d a s i n t 2 =abs ( dgfun (xnew ) ) write ( * , * ) i t e r , xnew , scartonew , asint1 , asi nt2 xold=xnew s c a r t o l 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. I NTRODUZIONE 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 p di dover scrivere un semplice programma che, dati in input, due valori a e b, valuta la funzione f (x ) = 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 m p li ci t none real * 8 a , b , c , d real * 8 fun write ( * , * ) s c r i v i valore a read ( * , * ) a write ( * , * ) s c r i v i valore b read ( * , * ) b C la v a r i a b i l e c ha i l valore d e l l a c=fun ( a ) C la v a r i a b i l e d ha i l valore d e l l a d=fun ( b ) write ( * , * ) a = , a , f ( a )= write ( * , * ) b = , b , f (b)= return end real * 8 function fun ( x ) i m p li ci t none real * 8 x fun= s q r t ( x * * 2 + 1 . 0 ) +exp( x ) return end

funzione fun in a funzione fun in b , , c d

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 la compilazione s i ha i l seguente messaggio di e r r o r e : C Global name fun at ( 1 ) i s already being used as a FUNCTION at ( 2 ) i m p li ci t none real * 8 a , b , c , d real * 8 fun write ( * , * ) s c r i v i valore a read ( * , * ) a write ( * , * ) s c r i v i valore b read ( * , * ) b C la v a r i a b i l e c ha i l valore d e l l a funzione fun in a

176

11.12. I sottoprogrammi

c=fun ( a ) C la v a r i a b i l e d ha i l valore d e l 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 m p l i ci t none real * 8 a fun= s q r t ( a * * 2 + 1 . 0 ) +exp( a ) return end real * 8 function fun ( b ) i m p l i ci t none real * 8 b fun= s q r t ( 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 . . . . . . . . . Il programma chiama la function fun. Nella function x = a . La function restituisce in c il valore fun(a). Il programma chiama la function fun. Nella function x = b . La function restituisce in c il valore fun(b).

c=fun(a) !

d=fun(b) !

. . . . . .

177

11. I NTRODUZIONE 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 implementare 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 m p li ci t none integer i t e r , itmax real * 8 x0 , xnew , t o l l external i t e r p f i s s o write ( * , * ) approssimazione i n i z i a l e read ( * , * ) x0 write ( * , * ) x0 = , x0 itmax=100 t o l l =1.d10 iter = 0 c a l l i t e r p f i s s o ( i t e r , itmax , x0 , t o l l , xnew) write ( * , * ) approssimazione f i n a l e , xnew write ( * , * ) i t e r a z i o n i e f f e t t u a t e , i t e r stop end

Osserviamo che la subroutine chiamata tramite listruzione


call iterpsso( iter ,itmax,x0,toll,xnew)

Esempio di subroutine: iterpsso

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 principale 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 complete (senza che pezzi di subroutine o di functions o di programma principale si intersechino tra di loro nella scrittura!!!!)
subroutine i t e r p f i s s o ( i t e r , itmax , x0 , t o l l , xnew) C sottoprogramma che implementa l algoritmo del metodo di punto f i s s o i m p li ci t none integer i t e r , itmax real * 8 x0 , xnew , xold , t o l l , scnew , scold , asint1 , asint2 real * 8 gfun , dgfun external gfun , dgfun scnew=2.0 * t o l l scold=scnew xold=x0 write ( * , * ) i t xkp1 scarto 1 asint1 asint2 write ( * , * ) i t e r , xold , scnew do while ( ( scnew . ge . t o l l ) . and . ( i t e r . l e . itmax ) ) i t e r = i t e r +1 xnew=gfun ( xold )

178

11.12. I sottoprogrammi

scnew=abs (xnew xold ) a s i n t 1 = scnew/ scold a s i n t 2 =abs ( dgfun (xnew ) ) write ( * , * ) i t e r , 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 un programma 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 stessa valenza di variabile) e devono essere messe nello stesso ordine: se nel programma principale scriviamo 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 parametri 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 m p l i ci t none real * 8 a , b , c real * 8 media1 , media2 write ( * , * ) s c r i v i t r e numeri a , b , c read ( * , * ) a , b , c c a l l medie ( a , b , media1 , media2 ) write ( * , * ) coppie di punti : , a , b write ( * , * ) media ari tme ti ca , media1 write ( * , * ) media geometrica , media2

179

11. I NTRODUZIONE AL FORTRAN 77

c a l l medie ( a , c , media1 , media2 ) write ( * , * ) coppie di punti : write ( * , * ) media ari tme ti ca write ( * , * ) media geometrica c a l l medie ( b , c , media1 , media2 ) write ( * , * ) coppie di punti : write ( * , * ) media ari tme ti ca write ( * , * ) media geometrica stop end

, a,c , media1 , media2 , b, c , media1 , media2

subroutine medie ( a , b , media_aritm , media_geom) i m p li ci t none real * 8 a , b , media_aritm , media_geom media_aritm= ( a+b ) * 0 . 5 media_geom= s q r t ( 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 programma 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 persi 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 variabili 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)
do while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) ) i t e r = i t e r +1 xnew=gfun ( xold ) scartonew=abs (xnew xold ) asi n t 1 = scartonew / s c a r t o l d asi n t 2 =abs ( dgfun (xnew ) ) write ( * , 1 0 0 ) i t e r , xnew , scartonew , asint1 , asint2 xold=xnew s c a r t o l d =scartonew end do 100 format (1 x , i4 , 1 x , f15 . 1 2 , 1 x , e14 . 6 , 1x , 2e13 . 5 )

Programma di punto sso con listruzione format

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 parentesi, 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 i e f a x Signicato formato intero esponenziale sso alfanumerico spazi bianchi

Tabella 11.6: Il formato

formato i e f a x

Esempio i5 5 caratteri per un intero e14.6 14 caratteri, 6 per la mantissa e18.10 18 caratteri, 10 per la mantissa f14.6 14 caratteri, 6 per le cifre decimali f15.12 15 caratteri, 12 per le cifre decimali a5 una stringa di al pi 5 caratteri 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 stampati 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:
iter = 0 xold=x0 write ( * , 9 8 ) i t , xk , scarto , asint1 , asint2 write ( * , 9 9 ) i t e r , xold , scartonew do while ( ( scartonew . ge . t o l l ) . and . ( i t e r . l e . itmax ) ) C t u t t o in vari ato come prima write ( * , 1 0 0 ) i t e r , xnew , scartonew , asint1 , asint2 xold=xnew s c a r t o l d =scartonew end do 98 format (1 x , a4 , 1 x , a15 , 1 x , a14 , 1 x , 2 a13 ) 99 format (1 x , i4 , 1 x , f15 . 1 2 , 1 x , e14 . 6 ) 100 format (1 x , i4 , 1 x , f15 . 1 2 , 1 x , e14 . 6 , 1x , 2e13 . 5 )

181

11. I NTRODUZIONE AL FORTRAN 77

stop end

Per le stringhe stato usato un formato riservando a ciascuna stringa lo stesso numero di caratteri riservati 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 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.
Esempio di le di dati

open(10, le=rispuntosso.txt)

close(10) program puntofisso C programma di punto f i s s o C t u t t o come prima C dichiarazione d e l l e v a r i a b i l i open ( 1 0 , f i l e = r i s p u n t o f i s s o . t x t ) write ( * , * ) approssimazione i n i z i a l e read ( * , * ) x0 write ( * , * ) x0 = , x0 C i l programma continua con l e i s t r u z i o n i gia v i s t e C l e uniche modifiche saranno n e l l e write : write ( 1 0 , 9 8 ) i t , xk , scarto , asint1 , asint2 write ( 1 0 , 9 9 ) i t e r , xold , scartonew C ora i l c i c l o do while C a l l interno abbiamo write (10 ,100) i t e r , xnew , scartonew , asint1 , asint2 C f i n i s c e i l c i c l o do while C scriviamo i formati close ( 1 0 ) 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. P ( n xi ) Loutput la variabile med i a = i =1 n Per calcolare la variabile med i a faremo la somma in questo modo (med i a la cosiddetta variabile di accumulo): partiamo da med i a = 0 quindi facciamo med i a = med i a + x 1 (prima componente della somma) poi med i a = med i a + x 2 (il risultato x 1 + x 2 ) poi med i a = med i a + x 3 (avremo x 1 + x 2 + x 3 ) e cos via no a med i a = med i a + x n (in med i a avremo tutta la somma dei vettori) Dopo si fa med i a = med i a /n e avremo il risultato nale.

11.16 Ciclo do
Per applicare la formula per ottenere la variabile med i 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 program mediavettori C programma che c a l c o l a la media d e l l e componenti di un v e t t o r e i m p l i ci t none integer n , i real * 8 x ( 2 0 ) , media write ( * , * ) lunghezza e f f e t t i v a del v e t t o r e read ( * , * ) n write ( * , * ) lunghezza del v e t t o r e , n i f (n . gt . 2 0 ) then write ( * , * ) n > massimo consentito , n stop endif 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
Programma sulla media dei vettori

183

11. I NTRODUZIONE 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 indice= v a l o r e i n i z i a l e , v a l o r e f i n a l e , incremento { istruzioni } 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 a b e l indice= v a l i n i z i a l e , v a l f i n a l e , incremento { istruzioni } l a b e l 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 m p l i c i 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
a l f a =norma2(n , x ) beta=norma2(n , y )

In questo caso, nel programma principale calcoliamo la norma dei vettori x e y e il valore di queste norme assegnato alle variabili alfa e beta. Attenzione! Un errore frequente 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: 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.
real*8 function norma2(n,x(n))

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 c a l c o l a la media d e l l e componenti di un v e t t o r e i m p l i ci t none integer n , i real * 8 x ( 2 0 ) , media , funmedia open ( 1 0 , f i l e = vettoreinput . dat ) read ( 1 0 , * ) n i f (n . gt . 2 0 ) then write ( * , * ) n > massimo consentito , n stop endif C n e l l a r i g a seguente troviamo i l c i c l o do i m p l i c i t o read ( 1 0 , * ) ( x ( i ) , i =1 ,n) C analogamente possiamo applicare i l do e s p l i c i t o C che ora e commentato c do i =1 ,n c read ( 1 0 , * ) x ( i ) c end do do i =1 ,n write ( * , * ) elemento , i , = , x ( i ) end do

185

11. I NTRODUZIONE AL FORTRAN 77

media= funmedia (n , x ) write ( * , * ) media , media close ( 1 0 ) stop end real * 8 function funmedia (n , x ) i m p li 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

Esempi di le vettoreinput.dat

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. 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


In FORTRAN, le matrici vanno dichiarate dando una dimensione massima sia sulle righe sia sulle colonne. Possiamo lavorare sia su matrici rettangolari, sia su matrici quadrate. Per semplicit, poich noi avremo a 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 = A x P Sappiamo che y i = ( Ax )i = n j =1 A i j x j . Traduciamo il tutto in FORTRAN con il seguente programma.
C C C C C C C C C C program matrvett programma per i l c a l c o l o del prodotto di una matrice A per un vettore x dati di input : n dimensione e f f e t t i v a d e l l a matrice ( quadrata ) e del v e t t o r e x A matrice di dimensione nxn x v e t t o r e di lunghezza n dati di output y v e t t o r e di lunghezza n uguale al prodotto Ax i m p l i ci t none integer i , j , n real * 8 A( 2 0 , 2 0 ) , x ( 2 0 ) , y ( 2 0 ) open ( 1 0 , f i l e = matrvett . dat ) open ( 1 1 , f i l e = matrvett . r i s ) l e t t u r a d e l l a dimensione n read ( 1 0 , * ) n l e t t u r a d e l l a matrice A usiamo un c i c l o do i =1 ,n e s p l i c i t o e un c i c l o do i m p l i c i t o leggiamo g l i elementi che s i trovano s u l l a r i g a i sima e la l e t t u r a viene f a t t a r i g a per r i g a do i =1 ,n read ( 1 0 , * ) (A( i , j ) , j =1 ,n) end do

Programma sul prodotto matricevettore

C C C C C

C C

l e t t u r a del v e t t o r e x read ( 1 0 , * ) ( x ( i ) , i =1 ,n) C s c r i t t u r a dei dati di input s u l f i l e dei r i s u l t a t i write ( 1 1 , * ) dimensione , n write ( 1 1 , * ) matrice A do i =1 ,n write ( 1 1 , * ) (A( i , j ) , j =1 ,n) end do write ( 1 1 , * ) v e t t o r e x write ( 1 1 , * ) ( x ( i ) , i =1 ,n) C prodotto matrice v e t t o r e : l elemento i simo del prodotto C matrice v e t t o r e e dato dalla somma per j =1 ,n di A( i , j ) * x ( j ) do i =1 ,n y ( i ) = 0 . d0 do j =1 ,n y ( i ) = y ( i ) + A( i , j ) * x ( j )

187

11. I NTRODUZIONE AL FORTRAN 77

end do end do write ( 1 1 , * ) v e t t o r e y=Ax write ( 1 1 , * ) ( 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 .
C C C C C C C program matrtrasposta programma che crea la matrice B=A^T dati di input : n dimensione e f f e t t i v a d e l l a matrice ( quadrata ) A matrice di dimensione nxn dati di output B matrice t r a s p o s t a di A i m p li ci t none integer i , j , n real * 8 A( 2 0 , 2 0 ) , B( 2 0 , 2 0 ) open ( 1 0 , f i l e = matrice . dat ) open ( 1 1 , f i l e = r i s t r a s p o s t a . dat ) C l e t t u r a d e l l a dimensione n read ( 1 0 , * ) n C l e t t u r a d e l l a matrice A C usiamo un c i c l o do i =1 ,n e s p l i c i t o e un c i c l o do i m p l i c i t o C leggiamo g l i elementi che s i trovano s u l l a r i g a i sima e C la l e t t u r a viene f a t t a r i g a per r i g a do i =1 ,n read ( 1 0 , * ) (A( i , j ) , j =1 ,n) end do write ( 1 1 , * ) dimensione , n write ( 1 1 , * ) matrice A do i =1 ,n write ( 1 1 , * ) (A( i , j ) , j =1 ,n) end do c a l l trasposta (n , A , B)

188

11.17. Matrici in FORTRAN

write ( 1 1 , * ) matrice trasposta B do i =1 ,n write ( 1 1 , * ) (B( i , j ) , j =1 ,n) end do stop end subroutine trasposta (n , A , B) i m p l i ci t none integer i , j , n real * 8 A( 2 0 ,n ) , B( 2 0 ,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 dimensione 50 50. 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 parameter per indicare la dimensione massima delle matrici. Nel programma principale (supponiamo di voler modicare il programma della trasposta di una matrice), scriveremo
C C C program matrtrasposta programma che crea la matrice B=A^T t u t t i g l i a l t r i commenti come prima i m p l i ci t none integer nmax parameter (nmax=20) integer i , j , n real * 8 A(nmax, nmax) , B(nmax, nmax) t u t t o i l r e s t o i n a l t e r a t o f i n o a l l a chiamata d e l l a subroutine c a l l trasposta (nmax, n , A , B) subroutine trasposta (nmax, n , A , B) i m p l 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. I NTRODUZIONE 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 eseguirlo 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) A pu avere al pi nmax righe per nmax colonne. nmax * nmax = 36 celle di memoria sono predisposte per i valori della matrice, a partire da A(1,1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Se nel sottoprogramma si dichiara correttamente la matrice A

real*8 A(nmax,n) real*8 A(n, n)


1 2 3 4 190 5 6 7 8

allora anche il passaggio della matrice avviene correttamente. Se nel sottoprogramma si dichiara invece allora la locazione di memoria allinterno del sottoprogramma pensata come se fosse nmax=n 9 10 11 12 13 14 15 16

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 = B A. Scrivere dunque un programma in linguaggio FORTRAN che: 1. legge n , A e B ; 2. calcola le matrici C = AB e D = B A servendosi della subroutine PRODMATR che esegue il prodotto di due matrici quadrate; 3. calcola (la traccia della matrice C ) e (la traccia della matrice D) servendosi della function TRAC che calcola la traccia di una matrice; 4. stampa i risultati ottenuti.

Per scrivere questo programma dobbiamo innanzitutto ricordarci la formula per fare il prodotto di due matrici e quella per la traccia di una matrice. Date due matrici quadrate A e B si ha C = AB con elementi ci j =
k =1 n X

a i k b k j per i , j = 1, 2, . . . , n .

Traducendo in pseudo-linguaggio questa formula abbiamo:


1 2 3 4 5 6 7 8 9

Per i=1,n Per j=1,n C(i,j)=0 ; C inizializzo a zero i valori della matrice perch devo fare una somma; Per k=1,n C(i,j)= C(i,j) + A(i,k)*B(k,j) Fine-Per Fine-Per Fine-Per

Sar proprio questo che faremo nella subroutine PRODMATR P 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 parametri) 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. I NTRODUZIONE AL FORTRAN 77

program prodottomatricietraccia i m p li 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 , a l f a , beta open ( 1 0 , f i l e = input . dat ) read ( 1 0 , * ) n do i =1 ,n read ( 1 0 , * ) (A( i , j ) , j =1 ,n) end do do i =1 ,n read ( 1 0 , * ) (B( i , j ) , j =1 ,n) end do c a l l prodmatr (nmax, n , A , B ,C) c a l l prodmatr (nmax, n , B , A ,D) a l f a = t r a c (nmax, n ,C) beta= t r a c (nmax, n ,D) write ( * , * ) t r a c c i a d e l l a matrice C , a l f a write ( * , * ) t r a c c i a d e l l a matrice D , beta close ( 1 0 ) stop end subroutine prodmatr (nmax, n , A , B ,C) i m p li 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 r a c (nmax, n , A) i m p li ci t none integer nmax, n , i real * 8 A(nmax, n) t r a c =0.d0 do i =1 ,n t r a c = t r a c + 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. 2. 6. 0. 1. 3. 0. 0. -7. 0. 2. 9. 5. 1. 3. 5. 3. 6. 8. 10. 2. 4. 6. 8. 1.

0. 1. -1. 4.

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 ba tutti i sottointervalli avendo scelto di suddividere in parti uguali lintervallo [a , b ], quindi h = . Su ogni n sottointervallo possiamo applicare la formula semplice dei trapezi in modo da avere il valore nale dellintegrale 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 [x 0, x 1], dove x 0 rappresenta lestremo inferiore e x 1 lestremo superiore di ciascun sottointervallo. Ogni volta aggiorneremo in maniera appropriata i due estremi (tenendo conto che x 1 nellintervallo successivo diventa x 0: lestremo superiore di ogni intervallino diventa lestremo inferiore nellintervallino successivo).

193

11. I NTRODUZIONE AL FORTRAN 77

1 2 3 4 5 6 7

8 9 10 11

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 h (b a )/n ; calcolare Iex ; inizializzare i t r ap : i t r ap 0.d 0 ; inizializzare x 0 del primo sottointervallo x 0 a ; Per i = 1, n assegnare il valore di x 1: x 1 x 0 + h ; 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 (x 0, x 1) ; aggiornare x 0: x 0 x 1 ; Fine-Per stampare lintegrale approssimato i t r ap ; 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. R0.5 Per esempio, per calcolare lintegrale 0 p , f (x ) = p . Per scrivere in Fortran, basta 2 1x 1 x2 ricordare che = 2 arcsin (1). Allora la function diventa:
real * 8 function fun ( x ) i m p l i c i t none real * 8 x , pi pi =2 * asin ( 1 . ) fun= pi / s q r t ( 1 . 0 d0 x * * 2 ) return end

Per il calcolo del valore esatto dellintegrale, dobbiamo calcolare analiticamente lintegrale (faremo degli esempi di applicazione delle formule di quadratura con integrali di cui possibile conoscere lintegrale esatto, quindi preliminarmente, avremo calcolato a mano lintegrale, andando a cercare una primitiva della funzione integranda). Conviene allora utilizzare una function per la primitiva, in modo da poter assegnare il valore esatto dellintegrale mediante listruzione Iex = F pr i m (b ) F pr i m (a ), dove F pr i m il nome dato alla function della primitiva. Nellesempio, F pr 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 function trapsemplice non nientaltro che lapplicazione della formula semplice dei trapezi sullintervallo di estremi x 0 e x 1 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 introducendo 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 1 ogni suddivisione n > 1. Dai risultati saremo in grado di capire se lerrore decresce come 2 oppure no e, n 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 pseudocodice, 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.d 0 ; 4 porre h (b a )/n 5 ; inizializzare x 0 del primo sottointervallo: x 0 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 un programma FORTRAN che, assegnate due matrici A e B di dimensione n 30, esegua il prodotto C=AB; memorizzi in un vettore x gli elementi della diagonale principale di C; calcoli la norma euclidea di x. I dati di input siano letti da un le chiamato input.dat. Scrivere, perci, un programma che: a) b) c) d) e) legge la dimensione n, le matrici A e B e stampa i dati letti con commento; calcola la matrice C=AB servendosi della subroutine MATRMATR; salva gli elementi Ci i in un vettore chiamato x; calcola la norma euclidea di x servendosi della function NORMAEUC; stampa la norma euclidea di x.

(mettere a punto la subroutine MATRMATR e la function NORMAEUC.)

Svolgimento
program prodottomatrici i m p l i ci t none integer nmax parameter (nmax=30)

195

11. I NTRODUZIONE 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 ( 2 0 , f i l e = input . dat ) open ( 2 1 , f i l e = output . dat ) read ( 2 0 , * ) n write ( 2 1 , * ) dimensione n , n write ( 2 1 , * ) matrice A do i =1 ,n read ( 2 0 , * ) (A( i , j ) , j =1 ,n) write ( 2 1 , * ) (A( i , j ) , j =1 ,n) end do write ( 2 1 , * ) matrice B do i =1 ,n read ( 2 0 , * ) (B( i , j ) , j =1 ,n) write ( 2 1 , * ) (B( i , j ) , j =1 ,n) end do c a l l matrmatr (nmax, n , A , B ,C) do i =1 ,n x ( i )= C( i , i ) end do euc=normaeuc (n , x ) write ( 2 1 , * ) norma euclidea di x , euc stop end subroutine matrmatr (nmax, n , A , B ,C) i m p li 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 m p li 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= s q r t ( normaeuc ) return end

196

11.19. Esercizi

Esercizio 11.19.2 Si vuole ricavare unapprossimazione della soluzione del sistema lineare A x = b effettuando un passo del metodo del gradiente coniugato, secondo il quale x1 = x0 + 0 r0 dove rT r0 0 = T0 e r0 = b A x0 . r 0 A r0 Il vettore x0 sia scelto come x0 = 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 x0 = D 1 b utilizzando la subroutine DIAGMAT che effettua il prodotto di una matrice diagonale con un vettore. 5. calcola y = A x0 utilizzando la subroutine MATRVETT che fa il prodotto matrice vettore; 6. calcola il vettore r0 = b y; 7. calcola il prodotto z = A r0 utilizzando la subroutine MATRVETT; 8. calcola d = rT 0 r0 usando la function PSCAL che effettua il prodotto scalare tra due vettori; 9. calcola t = rT 0 z usando la function PSCAL; 10. calcola 0 = d /t 11. calcola e stampa x1 = x0 + 0 r0 . 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 m p l 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 , a l f a , pscal C matrd e i l v e t t o r e che contiene g l i elementi d e l l a diagonale p r i n c i p a l e di A open ( 1 0 , f i l e = input . dat ) read ( 1 0 , * ) n do i =1 ,n read ( 1 0 , * ) (A( i , j ) , j =1 ,n)

197

11. I NTRODUZIONE AL FORTRAN 77

end do read ( 1 0 , * ) (b( i ) , i =1 ,n) do i =1 ,n matrd ( i )= A( i , i ) end do c a l l invd (n , matrd , inversad ) c a l l diagmat (n , inversad , b , x0 ) c a l l matrvett (nmax, n , A , x0 , y ) do i =1 ,n r0 ( i )=b ( i ) y ( i ) end do c a l l matrvett (nmax, n , A , r0 , z ) d=pscal (n , r0 , r0 ) t =pscal (n , r0 , z ) a l f a =d/ t do i =1 ,n x1 ( i )= x0 ( i )+ a l f a * r0 ( i ) write ( * , * ) x1 ( i ) end do stop end subroutine invd (n , d , dd) i m p li 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 m p li 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 m p li 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 m p li 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
Paul Erds

C ENNI SU G NUPLOT

Il matematico sbircia dietro le spalle di Dio per trasmettere la bellezza della Sua creazione al resto delle Sue creature.

A.1 A.2 A.3 A.4 A.5 A.6

Introduzione . . . . . Graci di funzioni . . Salvare i graci . . . . Graci da les di dati Script . . . . . . . . . Print . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

APPENDICE
. . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

201 201 205 206 208 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 dipendono 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 possono 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


plot [a:b] f(x)
Per fare il graco di una funzione, basta scrivere il comando

201

A. C ENNI SU G NUPLOT

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 comando: 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. C ENNI SU G NUPLOT

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: 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 logscale y plot [0.1:10] x**2

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 in formato esponenziale con due 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 precedenti1 (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 set terminal wxt 0
Per ritornare nella modalit di terminale di default si scrive

1 Osserviamo che, dopo listruzione set terminal gif o set terminal jpeg, sulla riga dei comandi di gnuplot viene lasciato un messaggio con le possibili opzioni che possono essere usate. Ignoriamo questo messaggio, perch vogliamo usare gnuplot nel modo pi semplice possibile.

205

A. C ENNI SU G NUPLOT

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 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000

1.5403 3.5839 8.0100 15.3464 25.2837 36.9602 49.7539 63.8545 80.0889 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 plot

dati.dat

e viene creato il graco per punti. Se si vuole un graco per linee o per linee e punti basta scrivere

dati.dat with 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

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. Supponiamo 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:

dati.dat

title "nuova legenda"

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 0.00000 0.31416 0.62832 0.94248 1.25664 1.57080

y sin(x) 0.00000 0.30902 0.58779 0.80902 0.95106 1.00000

z cos(x) 1.00000 0.95106 0.80902 0.58779 0.30902 0.00000


207

A. C ENNI SU G NUPLOT

Figura A.8: Graco del le multi.dat mediante le istruzioni che personalizzano la legenda.

1.88496 2.19911 2.51327 2.82743 3.14159 plot

0.95106 0.80902 0.58779 0.30902 0.00000 multi.dat

-0.30902 -0.58779 -0.80902 -0.95106 -1.00000 using 1:2, multi.dat using 1:3 multi.dat using 1:3 with

Si pu procedere in vari modi:

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, 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" gnuplot istr.gnu
Un modo per eseguire queste istruzioni scrivere, da una nestra di shell (non in ambiente gnuplot):

In tal modo gnuplot esegue solamente le istruzioni contenute nello script istr.gnu, e, una volta eseguite, 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 vogliamo 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 simbolo '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

B IBLIOGRAFIA

[1] [2] [3] [4] [5] [6] [7] [8] [9]

A SCHER , U. M. e G REIF, C. (2007), A First Course on Numerical Methods. B JRK , A. e D AHLQUIST, G. (2008), Numerical Methods in Scientic Computing, Volume II, Siam. B URDEN , R. L. e FAIRES , J. D. (2004), Numerical Analysis, Brooks-Cole Publishing. D AHLQUIST, G. e B JRK , A. (2006), Numerical Methods in Scientic Computing, Volume I, Siam. G AMBOLATI , G. (1994), Lezioni di Metodi Numerici, Cortina, Padova. G AUTSCHI , W. (1997), Numerical Analysis: An Introduction, Birkuser, Boston. G IANGRANDI , P. (2010), Dispense del corso di Storia dellInformatica, Universit degli Studi di Udine, Italia. G IANGRANDI , P. (ultima visita: febbraio 2012), Museo on line - Breve storia degli Strumenti di Calcolo, Tecnoteca, http://www.tecnoteca.it/museo/. K EISLER , H. J. (2009), Elementary Calculus, An Innitesimal Approach, Creative Commons Attribution Non-Commercial-ShareAlike License, http://www.math.wisc.edu/~Keisler/calc.html.

[10] M OORE , H. (2008), MATLAB per lingegneria, Pearson Prentice Hall, Italy. [11] OC ONNOR , J. e R OBERTSON , 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] S ARTORETTO, F. e P UTTI , M. (2008), Introduzione alla Programmazione per Elaborazioni Numeriche., Edizioni Libreria Progetto, Padova. [13] S TRANG , G. (1991), Calculus, Wellesley-Cambridge Press. [14] S WADE , D. (ultima visita: febbraio 2012), The Babbage Engine, Computer History Museum, Mountain View, CA, http://www.computerhistory.org/babbage.

211