Valeriano Comincioli - Analisi Numerica Metodi Modelli Applicazioni

March 6, 2017 | Author: Kevin Stone | Category: N/A
Share Embed Donate


Short Description

Download Valeriano Comincioli - Analisi Numerica Metodi Modelli Applicazioni...

Description

License edgt-5-CLI_20110006666311-TX_20110006666311_9788850310319 granted on March 09 2011 to Alister Petrolini

Analisi numerica: metodi, modelli, applicazioni

Autore: Valeriano Comincioli Professore ordinario di Analisi Numerica Università degli Studi di Pavia Copyright © 2005 – APOGEO srl Socio Unico Giangiacomo Feltrinelli Editore srl Via Natale Battaglia 12 – 20127 Milano (Italy) Telefono: 02-289981 – Telefax: 02-26116334 Email [email protected] U.R.L.http://www.apogeonline.com ISBN 88-503-1031-5 Impaginazione elettronica in LATEΧ a cura dell’Autore Copertina di Enrico Marcandalli

Tutti i diritti sono riservati a norma di legge e a norma delle convenzioni internazionali. Nessuna parte di questo libro può essere riprodotta con sistemi elettronici, meccanici o altri, senza l’autorizzazione scritta dell’Editore. Nomi e marchi citati nel testo sono generalmente depositati o registrati dalle rispettive case produttrici.

Quelli che s’innamoran di pratica sanza scienza, son come il nocchiere, ch’entra in navilio sanza timone o bussola, che mai ha certezza dove si vada. (Leonardo)

dedicato a Lucrezia e Sofia

Introduzione

La Matematica `e uno strumento per modellizzare il mondo reale. In forma schematica, un modello `e una rappresentazione approssimata di un sistema o di un processo, ottenuta sostituendo con semplificazioni, astrazioni ed analogie al fenomeno reale (il prototipo) un fenomeno in un campo pi` u familiare. In particolare, in un modello matematico tale rappresentazione `e fatta in termini di variabili, parametri e relazioni funzionali, che definiscono un problema matematico. Dal momento che lo scopo della costruzione di un modello `e di illuminare mediante la sua analisi gli aspetti incogniti del prototipo, condizione necessaria affinch`e il modello sia utile `e che esso sia risolubile. Il significato preciso di risolubilit` a varia, naturalmente, a secondo del tipo di modello considerato. Per un modello matematico la risolubilit` a significa richiedere, sempre in forma schematica, che il problema matematico, che definisce il modello, sia: • ben posto: esistenza, unicit`a e stabilit` a della soluzione. In un insieme di dati reali, il problema ha una ed una sola soluzione, che varia con continuit`a al variare dei dati. L’eventuale non unicit` a e discontinuit` a della soluzione devono essere spiegate alla luce del prototipo. • ben condizionato: a piccole perturbazioni nei dati corrispondono piccole perturbazioni nei risultati; tali perturbazioni possono essere dovute ad errori sperimentali o ad errori di arrotondamento nella rappresentazione numerica dei dati. Le propriet` a ora evidenziate danno un carattere di affidabilit` a al modello matematico, ma non esauriscono il significato di risolubilit` a. Spesso, infatti, la soluzione del problema matematico non `e data in forma esplicita o direttamente utilizzabile. In questo caso si presenta per il problema matematico una situazione analoga a quella che si ha per il problema reale. Per conoscere, cio`e, il comportamento della soluzione del problema matematico, pu` o essere necessaria l’introduzione di un nuovo modello, che in questo caso si configura come una rappresentazione in dimensione finita, ottenuta mediante una discretizzazione del problema continuo. Il fatto che talvolta il modello discreto possa essere interpretato come un modello costruito a partire direttamente dal prototipo reale, senza, cio`e, il passaggio intermedio del problema continuo, non cambia la sostanza delle considerazioni che seguono. Il modello discreto, o modello numerico, presenta una problematica in parte simile a quella vista per il modello continuo. In particolare, sono ancora propriet` a necessarie l’esistenza, l’unicit`a e la stabilit` a della soluzione discreta. Come esempio di riferimento possiamo assumere la risoluzione di un problema ai limiti per un operatore differenziale lineare su un dominio fissato, che, come `e noto rappresenta un modello matematico di numerosi fenomeni fisici. Come vedremo meglio nel seguito, discretizzando il dominio e sostituendo le derivate con

iv

Introduzione

opportuni rapporti incrementali, si ottiene come modello discreto la risoluzione di un sistema lineare, per il quale l’esistenza e l’unicit` a della soluzione equivalgono alla non singolarit` a della matrice dei coefficienti e la stabilit` a `e data dal condizionamento della matrice stessa. Tuttavia, sapere che il sistema `e ben posto non basta ancora a rendere il modello numerico utile, ossia uno strumento di indagine del problema continuo. Rimangono due questioni da esaminare. La prima riguarda la capacit` a del modello discreto di descrivere il modello continuo o il modello reale. In altre parole, riferendoci come illustrazione all’esempio precedente, si tratta di vedere se la soluzione discreta pu` o essere resa vicina quanto si vuole (in una opportuna distanza) alla soluzione del problema continuo infittendo opportunamente la reticolazione del dominio. In termini pi` u precisi, si tratta di esaminare la convergenza del metodo. Una questione collegata alla convergenza `e la maggiorazione dell’errore, che fornisce un criterio di scelta di un particolare modello. La seconda questione importante riguarda il fatto che anche un modello numerico, in generale, non ha una soluzione esplicita. Nel caso dell’esempio precedente, infatti, `e necessario un ulteriore passo: la scelta di un particolare algoritmo, che risolva effettivamente il sistema lineare. A tale scopo si possono utilizzare differenti idee, ad esempio l’idea della eliminazione (metodo di Gauss) o l’idea dell’iterazione, che fornisce la soluzione come limite di soluzioni di sistemi lineari pi` u semplici. Ciascuna delle idee precedenti pu` o essere realizzata in numerosi modi (algoritmi) diversi. La scelta di un particolare algoritmo avverr` a sia sulla base delle propriet` a della matrice (dimensioni, sparsit` a, condizionamento), che dello strumento di calcolo a disposizione. Ultima fase della modellizzazione `e l’implementazione dell’algoritmo in un particolare linguaggio su un determinato calcolatore. Abbiamo, in questo modo, delineato a grandi tratti l’intero cammino della modellizzazione matematica a partire da un fissato fenomeno reale fino alla costruzione di un particolare programma di calcolo. Nella forma finale il modello matematico diventa un vero strumento di indagine quantitativa, che permette una sperimentazione su calcolatore. In particolare, confrontando i risultati ottenuti mediante il modello matematico con i risultati sperimentali che si riferiscono al fenomeno reale, `e possibile analizzare l’adeguatezza del modello matematico introdotto, dando cos`ı avvio alll’usuale processo iterativo dell’acquisizione della conoscenza. In questo processo di conoscenza sono di competenza dell’Analisi Numerica tutte le successive fasi a partire dalla discretizzazione del problema continuo. Appare evidente, allora, l’importanza fondamentale dell’Analisi Numerica nel processo di modellizzazione del mondo reale. Lo scopo principale del presente libro, che nasce da una pluriennale pratica didattica e da numerose esperienze di ricerca pluridisciplinare nell’ambito della Matematica Applicata, `e di evidenziare, attraverso l’introduzione e l’analisi dei pi` u recenti metodi numerici e lo studio di alcune significative applicazioni, la potenzialit` a del calcolo numerico e quindi, in definitiva, dello strumento matematico. La maggiore difficolt` a incontrata nella stesura del libro `e dovuta alla assoluta impossibilit` a di fotografare un ambiente in piena evoluzione come quello dell’Analisi Numerica attuale. Per ovviare, almeno in parte, a questa difficolt` a si `e, in un certo senso, privilegiato il passato come patrimonio acquisito, dando nel contempo suggerimenti sulle nuove idee ancora in fase di sperimentazione. La bibliografia, volutamente piuttosta ricca, dovrebbe aiutare ad approfondire e a seguire i nuovi orientamenti.

Le considerazioni precedenti, tratte dall’introduzione al libro: Analisi Numerica Metodi Modelli Applicazioni (1995, [95]), inquadrano l’interesse dell’Analisi Numerica nell’ambito della modellizzazione matematica. In questo senso sono tuttora di attualit` a, anche se nel frattempo l’insegnamento dell’Analisi Numerica, come di qualunque altra disciplina, ha subito diversi e importanti cambiamenti, a seguito di innovazioni sostanziali nei corsi di Laurea. Con riferimento in particolare al corso di Laurea in Matematica, lo studio dell’Analisi Numerica, da corso ’riservato’ all’indirizzo applicativo, `e divenuto un corso di base per tutti gli indirizzi. analisi numerica

c V. Comincioli

Introduzione

v

Una conseguenza di tale fatto, di per s`e positivo, `e stata la diminuzione piuttosto drastica del tempo dedicato all’insegnamento del corso e la sua collocazione pi` u anticipata rispetto al passato. Ne consegue l’opportunit` a di rivedere il materiale didattico e il presente libro rappresenta un tentativo in questa direzione. Da un lato vi `e lo sforzo di rendere il testo in buona parte autosufficiente, non richiedendo particolari requisiti, salvo le nozioni elementari di Analisi Matematica e di Geometria. D’altro lato, la trattazione `e resa pi` u concreta e incisiva attraverso l’implementazione dei differenti algoritmi, che permette sia una loro migliore comprensione che una opportuna indagine della loro validit` a e applicabilit` a. Per l’implementazione si `e utilizzato il sistema MATLAB (cfr. link 1), che fornisce sia un linguaggio ad alto livello che un ambiente interattivo. Una introduzione alle sue caratteristiche e al suo utilizzo `e contenuta nel Capitolo 1. In controtendenza rispetto all’orientamento attuale e malgrado la riduzione del tempo dedicato all’insegnamento della materia, si `e cercato di sacrificare il meno possibile lo spettro degli argomenti trattati e il loro approfondimento, nella convinzione che un testo universitario debba essere principalmente uno strumento di riferimento per ampliare le conoscenze e non meramente una raccolta di appunti per le lezioni.

Pavia, maggio 2005

Valeriano Comincioli

Ogni formola matematica letterale o simbolica sar` a tanto pi` u utile, quanto pi` u rapidamente porter` a al risultato numerico richiesto. La matematica moderna ha invece tendenza a divenire sempre pi` u astratta. Molti matematici, se hanno da risolvere numericamente un problema, lo risolvono dapprima in generale e, giunti alla formola simbolica letterale definitiva, dicono: ora basta sostituire alle lettere i numeri dati per ottenere il risultato richiesto, ma vi `e da scommettere che –molti di essi– si troverebbero imbarazzati nel fare il calcolo numerico effettivo. Eppure il calcolo numerico `e l’utensile per mezzo del quale i principii scoperti mediante la ricerca scientifica sono messi in opera in vista di applicazioni pratiche. Ed ad esso debbono ricorrere continuamente il navigatore, il geodeta, il mecccanico, l’elettricista, l’ingegnere, il fisico, ecc. Quindi ogni semplificazione di calcolo appporta a ciascuno di questi studiosi un grande sollievo, ed `e perci` o utilissima. E non `e da credere che i calcoli numerici debbano interessare soltanto i ragionieri o i computisti, e non i matematici. Infatti molte delle semplificazioni apportate ad essi sono il frutto di un profondo studio teorico dell’operazione da eseguirsi, e quindi fattibili soltanto da matematici di indiscusso valore. Ugo Cassina (Calcolo Numerico 1928, [74])

analisi numerica

c V. Comincioli

vi

Introduzione

Les ´equations g´en´erales de la propagation de la chaleur sont aux diff´erences partielles, et, quoique la forme en soit tr´es simple, les m´ethodes connues ne fournissent aucun moyen g´en´eral de les int´egrer; on ne pourrait donc pas en deduire les valeures des temp´eratures apr`es un temp d´et´ermin´e. Cette interpr´etation num´erique des r´esultats du calcul est cepandant n´ecessaires, et c’est un degr´e de perfection qu’il serait tr`es important de donner ` a toutes les applications de l’Analyse aux Sciences naturelles. On peut dire que, tant qu’on ne l’a pas obtenu, les solutions demeurent incompletes ou inutiles, et que la v´erit´e qu’on se proposait de d´ecouvrir n’est pas moins cach´ee dans les formules d’Analyse qu’elle ne l’´etait dans la question physique elle-mˆeme. Nous nous sommes attach´e avec beaucoup de soin et nous sommes parvenu ` a surmonter cette difficult´e dans toutes les questions que nous avons trait´ees et qui contiennent les ´el´ements principaux de la Th´eorie de la chaleur. Il n’y a aucune de ces questions dont la solution ne fournisse des moyens commodes et exacts de trouver les valeurs num´erique des temp´eratures acquises, ou celles des quantit´es de chaleur ´ecoul´ees, lorsqu’on connait les valeurs du temps et celles des coordonn´ees variables. Ainsi l’on ne donnera pas seulment les ´equations differentielles auxquelles doivent satisfaire les fonction qui exprime le valeurs des temp´eratures; on donnera ces fonctions elles-mˆemes sous une forme qui facilite les applications num´ eriques. J. Fourier, Th´ eorie analytique de la chaleur 1822

···∗···

Constructing models for a slice of reality and studying their properties is really what science is about. The models – “the hypotheses,” “the laws of nature,” “the paradigms”–can be of a more or less formal character, but they all have the fundamental property that they try to link observations to some pattern. L. Ljung, T. Glad

···∗···

Someone has recently defined an applied mathematician as an individual enclosed in a small office and engaged in the study of mathematical problems which interest him personally; he waits for someone to stick his head in the door and introduce himself by saying, “I’ve got a problem.” Usually the person coming for help may be a physicist, engineer, meteorologist, statician, or chemist who has suddenly reached a point in his investigation where he encounters a mathematical problem calling for an unusual or nonstandard technique for its solution. It is of considerable importance for the mathematician to be able to provide practical answer to such questions. By a practical answer one does not mean a result which is obtained after months of detailed analysis but, rather, a solution or explanation obtained in a minimum of time. The reply to questions presented to him may require analysis or merely the ability to furnish a reference to where one can find the particular topic discussed. M. Abramowitz

···∗···

The solution of the algebraic eigenvalue problem has for long had a particular fascination for me because it illustrates so well the difference between what might be termed classical mathematics and practical numerical analysis. The eigenvalue problem has deceptively simple formulation and the background theory has been known for many years; yet the determination of accurate solutions presents a wide variety of challenging problems. J. H. Wilkinson, The algebraic eigenvalue problem, 1965

···∗···

Mathematics is not merely the science of number. It is the science of pattern and structure. Mathematically statements can be encoded in numbers, but numbers as such are not an end in themselves. Once we wish to harness computation to understand mathematics, we are compelled to compute numerical results not as an end but as means to reveal the underlying structure. This has a number of important implications for the future of computational algorithms. A. Iserles

analisi numerica

c V. Comincioli

INDICE

Introduzione

iii

1 Idee introduttive 1.1 Analisi numerica . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Scopo dell’analisi numerica . . . . . . . . . . . . 1.1.2 Brevi note storiche . . . . . . . . . . . . . . . . 1.2 Principi di fondo . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Iterazione . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Approssimazione locale . . . . . . . . . . . . . . 1.3 Brevi richiami di analisi funzionale . . . . . . . . . . . . 1.3.1 Spazi lineari . . . . . . . . . . . . . . . . . . . . . 1.3.2 Norme . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Spazi a dimensione infinita . . . . . . . . . . . . 1.3.4 Trasformazioni e operatori . . . . . . . . . . . . . 1.3.5 Importanza della scelta della norma . . . . . . . 1.4 Classificazione dei problemi computazionali . . . . . . . 1.5 Esempi introduttivi di Matlab . . . . . . . . . . . . . . . 1.5.1 Grafica mediante Matlab . . . . . . . . . . . . . 1.5.2 Il problema 3x + 1 . . . . . . . . . . . . . . . . . 1.5.3 Numeri primi . . . . . . . . . . . . . . . . . . . . 1.5.4 Metodo Monte Carlo . . . . . . . . . . . . . . . . 1.5.5 Ricorsione . . . . . . . . . . . . . . . . . . . . . . 1.5.6 Ulteriori esempi illustrativi . . . . . . . . . . . . 1.5.7 Strutture dati: array di celle e array di strutture

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

1 1 1 4 5 5 8 11 11 13 13 15 18 18 20 21 28 29 30 31 37 40

. . . .

43 45 46 46 48

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

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

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

2 Analisi degli errori 2.1 Sorgenti di errore . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Rappresentazione dei numeri sul calcolatore . . . . . . . . . . 2.2.1 Rappresentazione dei numeri in differenti basi . . . . . 2.2.2 Conversione della rappresentazione di un numero reale vii

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

. . . .

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

. . . .

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

. . . .

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

. . . .

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

. . . .

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

. . . .

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

. . . .

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

. . . .

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

. . . .

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

. . . .

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

. . . .

viii

Indice

2.3 2.4

2.2.3 Numeri macchina; sistema floating-point . . . . . 2.2.4 Operazione di arrotondamento . . . . . . . . . . 2.2.5 Aritmetica in virgola mobile . . . . . . . . . . . . 2.2.6 Propagazione degli errori . . . . . . . . . . . . . 2.2.7 Condizionamento di un problema . . . . . . . . . 2.2.8 Errori, accuratezza, e numero di condizionamento 2.2.9 Tecniche di controllo degli errori . . . . . . . . . Complementi e Problemi . . . . . . . . . . . . . . . . . . Esperienze in matlab . . . . . . . . . . . . . . . . . . . . 2.4.1 Propagazione degli errori . . . . . . . . . . . . . 2.4.2 Condizionamento dei polinomi . . . . . . . . . .

3 Elementi di algebra lineare 3.1 Matrici. Definizioni fondamentali . . . . . . . . . . . . 3.1.1 Matrici particolari . . . . . . . . . . . . . . . . 3.1.2 Operazioni su matrici . . . . . . . . . . . . . . 3.1.3 Matrici partizionate . . . . . . . . . . . . . . . 3.1.4 Indipendenza lineare, base e dimensione . . . . 3.1.5 Determinante, inversa e rango . . . . . . . . . . 3.1.6 Matrici elementari . . . . . . . . . . . . . . . . 3.2 Sistemi lineari . . . . . . . . . . . . . . . . . . . . . . . 3.3 Autovalori e trasformazioni per similitudine . . . . . . 3.3.1 Trasformazioni per similitudine . . . . . . . . . 3.3.2 Autovettori a sinistra . . . . . . . . . . . . . . 3.3.3 Riduzione delle matrici . . . . . . . . . . . . . 3.3.4 Fattorizzazione unitaria di una matrice . . . . 3.4 Localizzazione degli autovalori . . . . . . . . . . . . . 3.4.1 Norma di vettore e di matrice . . . . . . . . . . 3.5 I valori singolari e la pseudoinversa . . . . . . . . . . . 3.5.1 Decomposizione in valori singolari SVD . . . . 3.5.2 Applicazioni della SVD . . . . . . . . . . . . . 3.5.3 Pseudoinversa . . . . . . . . . . . . . . . . . . . 3.6 Matrici non negative . . . . . . . . . . . . . . . . . . . 3.6.1 Matrici irriducibili . . . . . . . . . . . . . . . . 3.6.2 Matrici con inverse non negative; M-matrici . . 3.7 Complementi e Problemi . . . . . . . . . . . . . . . . . 3.7.1 Matrici in stechiometria . . . . . . . . . . . . . 3.8 Esperienze con Matlab . . . . . . . . . . . . . . . . . . 3.8.1 Matrix indexing: operazioni su indici di matrici 3.8.2 Matrici particolari . . . . . . . . . . . . . . . . 3.8.3 Operazioni su matrici . . . . . . . . . . . . . . analisi numerica

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

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

. . . . . . . . . . .

51 55 57 61 64 65 70 73 78 79 81

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

83 83 84 85 90 90 94 97 100 102 103 104 105 106 108 110 113 114 118 121 124 125 126 128 132 135 135 140 142

c V. Comincioli

Indice

ix

4 Algebra lineare numerica 4.1 Metodi diretti . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1 Sistemi triangolari . . . . . . . . . . . . . . . . . . . . 4.1.2 Sistemi generali; metodo di Gauss . . . . . . . . . . . 4.1.3 Strategia del pivot . . . . . . . . . . . . . . . . . . . . 4.1.4 Pivoting scalato . . . . . . . . . . . . . . . . . . . . . 4.1.5 Decomposizione LU . . . . . . . . . . . . . . . . . . . 4.1.6 Decomposizione LDMT . . . . . . . . . . . . . . . . . 4.1.7 Metodi di Crout e di Doolittle . . . . . . . . . . . . . 4.1.8 Matrici simmetriche . . . . . . . . . . . . . . . . . . . 4.1.9 Matrici a banda . . . . . . . . . . . . . . . . . . . . . 4.1.10 Matrici sparse . . . . . . . . . . . . . . . . . . . . . . . 4.1.11 Introduzione all’updating . . . . . . . . . . . . . . . . 4.1.12 Fattorizzazione a blocchi . . . . . . . . . . . . . . . . . 4.2 Analisi degli errori; condizionamento e stabilit`a . . . . . . . . 4.2.1 Stabilit` a degli algoritmi . . . . . . . . . . . . . . . . . 4.2.2 Fattorizzazione A = QR . . . . . . . . . . . . . . . . 4.3 Metodi iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Metodi di Jacobi, Gauss-Seidel, rilassamento . . . . . 4.3.2 Metodi iterativi a blocchi . . . . . . . . . . . . . . . . 4.3.3 Studio della convergenza . . . . . . . . . . . . . . . . . 4.3.4 Metodo del gradiente coniugato . . . . . . . . . . . . . 4.3.5 Precondizionamento . . . . . . . . . . . . . . . . . . . 4.4 Complementi e Problemi . . . . . . . . . . . . . . . . . . . . . 4.5 Esperienze in Matlab . . . . . . . . . . . . . . . . . . . . . . . 4.5.1 Decomposizione LU di matrici tridiagonali . . . . . . . 4.5.2 Eliminazione di Gauss con pivoting completo . . . . . 4.5.3 Eliminazione senza pivoting . . . . . . . . . . . . . . . 4.5.4 Effetto del condizionamento sull’algoritmo di soluzione 4.5.5 Minimi quadrati . . . . . . . . . . . . . . . . . . . . . 4.5.6 Metodo qr . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . di un sistema . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lineare . . . . . . . .

147 152 155 156 161 165 166 167 168 169 171 176 179 181 183 193 194 201 201 207 208 213 217 222 236 236 238 239 239 240 241

5 Autovalori e autovettori 5.1 Condizionamento del problema degli autovalori 5.2 Metodo delle potenze . . . . . . . . . . . . . . . 5.2.1 Iterazione inversa . . . . . . . . . . . . . 5.2.2 Deflazione . . . . . . . . . . . . . . . . . 5.2.3 Metodo di Lanczos . . . . . . . . . . . . 5.3 Metodi di trasformazione per similitudine . . . 5.3.1 Metodo di Jacobi . . . . . . . . . . . . . 5.3.2 Metodo di Householder . . . . . . . . . 5.3.3 Metodo di Givens . . . . . . . . . . . . 5.3.4 Matrici non simmetriche . . . . . . . . . 5.3.5 Matrici tridiagonali simmetriche . . . . 5.3.6 Metodo QR . . . . . . . . . . . . . . . .

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

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

245 246 247 250 250 250 253 254 258 259 260 261 263

analisi numerica

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

c V. Comincioli

x

Indice

5.4 5.5 5.6 5.7

Problema degli autovalori generalizzato . . . . . . . . . . Decomposizione SVD . . . . . . . . . . . . . . . . . . . . . Complementi e Problemi . . . . . . . . . . . . . . . . . . . Esperienze in Matlab . . . . . . . . . . . . . . . . . . . . . 5.7.1 Esempio di matrice con autovalori malcondizionati 5.7.2 Esempio di Wilkinson . . . . . . . . . . . . . . . . 5.7.3 Metodo QR . . . . . . . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

265 267 269 275 275 276 277

6 Approssimazione di funzioni 6.1 Interpolazione . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Interpolazione mediante polinomi . . . . . . . . . . . 6.1.2 Errore di troncamento nella interpolazione . . . . . . 6.1.3 Costruzione del polinomio di interpolazione . . . . . 6.1.4 Convergenza del polinomio di interpolazione . . . . . 6.1.5 Problema generale di interpolazione lineare . . . . . 6.1.6 Interpolazione mediante funzioni razionali . . . . . . 6.1.7 Interpolazione inversa . . . . . . . . . . . . . . . . . 6.1.8 Interpolazione mediante spline . . . . . . . . . . . . 6.1.9 Approssimazione di B´ezier . . . . . . . . . . . . . . . 6.2 Problema generale di approssimazione . . . . . . . . . . . . 6.2.1 Norma euclidea. Minimi quadrati . . . . . . . . . . . 6.2.2 Polinomi ortogonali . . . . . . . . . . . . . . . . . . 6.2.3 Norma del massimo. Approssimazione di Chebichev 6.3 Calcolo numerico delle derivate . . . . . . . . . . . . . . . . 6.3.1 Studio dell’errore di troncamento . . . . . . . . . . . 6.3.2 Influenza degli errori di arrotondamento . . . . . . . 6.4 Introduzione alle funzioni Wavelet . . . . . . . . . . . . . . 6.4.1 Dall’analisi di Fourier all’analisi wavelet . . . . . . . 6.4.2 Le wavelets di Haar . . . . . . . . . . . . . . . . . . 6.4.3 Trasformata di Fourier . . . . . . . . . . . . . . . . . 6.4.4 Trasformata wavelet e analisi tempo-frequenza . . . 6.4.5 Formule di inversione . . . . . . . . . . . . . . . . . 6.4.6 Costruzione di wavelets . . . . . . . . . . . . . . . . 6.4.7 Fast wavelet transform (FWT) . . . . . . . . . . . . 6.4.8 Denoising di immagini con wavelet . . . . . . . . . . 6.4.9 Compressione di immagini . . . . . . . . . . . . . . . 6.5 Complementi e Problemi . . . . . . . . . . . . . . . . . . . . 6.6 Esperienze in matlab . . . . . . . . . . . . . . . . . . . . . . 6.6.1 Polinomi . . . . . . . . . . . . . . . . . . . . . . . . . 6.6.2 Polinomio di interpolazione . . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

278 279 280 282 284 291 293 295 297 298 307 313 316 320 325 328 330 330 332 338 346 351 356 360 363 374 377 381 383 399 399 402

7 Equazioni non lineari e ottimizzazione 404 7.1 Caso unidimensionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 7.1.1 Metodo di bisezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 7.1.2 Metodo regula falsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 analisi numerica

c V. Comincioli

Indice

7.2

7.3 7.4

7.5

7.6

7.7 7.8

xi

7.1.3 Metodo di Newton . . . . . . . . . . . . . . . . . . . . . . 7.1.4 Metodo di Newton in pi` u dimensioni . . . . . . . . . . . . 7.1.5 Studio della convergenza del metodo di Newton . . . . . . 7.1.6 Metodo di Newton e radici multiple . . . . . . . . . . . . 7.1.7 Alcune applicazioni del metodo di Newton . . . . . . . . . 7.1.8 Modifiche del metodo di Newton . . . . . . . . . . . . . . 7.1.9 Radici di polinomi . . . . . . . . . . . . . . . . . . . . . . 7.1.10 Sensitivit` a delle radici di un polinomio . . . . . . . . . . . Metodi di punto fisso . . . . . . . . . . . . . . . . . . . . . . . . . 7.2.1 Aspetti computazionali . . . . . . . . . . . . . . . . . . . 7.2.2 Accelerazione della convergenza . . . . . . . . . . . . . . Sistemi dinamici discreti . . . . . . . . . . . . . . . . . . . . . . . Programmazione lineare . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Trasformazione di problemi LP nella prima forma primale 7.4.2 Problema duale . . . . . . . . . . . . . . . . . . . . . . . . 7.4.3 Seconda forma primale . . . . . . . . . . . . . . . . . . . . 7.4.4 Alcuni esempi applicativi . . . . . . . . . . . . . . . . . . 7.4.5 Metodo del simplesso . . . . . . . . . . . . . . . . . . . . 7.4.6 Risoluzione di sistemi lineari inconsistenti . . . . . . . . . Metodi di ottimizzazione . . . . . . . . . . . . . . . . . . . . . . . 7.5.1 Ottimizzazione unidimensionale . . . . . . . . . . . . . . . 7.5.2 Ottimizzazione in pi` u dimensioni . . . . . . . . . . . . . . 7.5.3 Metodo SOR . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.4 Minimi quadrati non lineari . . . . . . . . . . . . . . . . . Introduzione ai problemi di controllo . . . . . . . . . . . . . . . . 7.6.1 Formulazione di un problema di controllo . . . . . . . . . 7.6.2 Forme diverse di un controllo ottimo . . . . . . . . . . . . 7.6.3 Metodo della programmazione dinamica . . . . . . . . . . 7.6.4 Principio del minimo di Pontryagin . . . . . . . . . . . . . Complementi e Problemi . . . . . . . . . . . . . . . . . . . . . . . Esperienze con Matlab . . . . . . . . . . . . . . . . . . . . . . . . 7.8.1 Funzioni matlab per trovare minimi e zeri di una funzione 7.8.2 Applicazioni varie . . . . . . . . . . . . . . . . . . . . . .

8 Integrazione numerica 8.1 Formule di Newton–Cotes . . . . . . . . . . . . . 8.1.1 Convergenza delle formule di quadratura . 8.1.2 Formule composte . . . . . . . . . . . . . 8.2 Formule di Gauss . . . . . . . . . . . . . . . . . . 8.2.1 Formule di Lobatto . . . . . . . . . . . . . 8.2.2 Formule di quadratura di Gauss-Kronrod 8.3 Formule adattive . . . . . . . . . . . . . . . . . . 8.3.1 Formula di Simpson adattiva . . . . . . . 8.4 Formule di estrapolazione . . . . . . . . . . . . . 8.5 Difficolt` a nell’integrazione numerica . . . . . . . analisi numerica

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

412 417 419 422 422 423 427 431 436 443 444 448 450 455 456 457 458 460 462 464 465 471 483 485 488 495 498 499 511 536 570 570 573

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

578 585 588 588 591 593 594 595 596 597 600

c V. Comincioli

xii

Indice

8.6 8.7 8.8

Integrali multipli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 Complementi e Problemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 Esperienze in Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621

9 Equazioni differenziali 9.1 Aspetti introduttivi . . . . . . . . . . . . . . . . . . . . 9.1.1 Definizione di soluzione . . . . . . . . . . . . . . 9.1.2 Curve soluzioni e campi di direzioni . . . . . . . 9.1.3 Problemi ai valori iniziali . . . . . . . . . . . . . 9.2 Alcuni modelli . . . . . . . . . . . . . . . . . . . . . . . 9.3 Metodi numerici . . . . . . . . . . . . . . . . . . . . . . 9.3.1 Metodo di Eulero . . . . . . . . . . . . . . . . . . 9.3.2 Influenza degli errori di arrotondamento . . . . . 9.3.3 Metodi di sviluppo in serie . . . . . . . . . . . . 9.3.4 Metodi di Runge-Kutta . . . . . . . . . . . . . . 9.3.5 Metodo di Eulero implicito e formula dei trapezi 9.3.6 Metodi di Runge-Kutta-Fehlberg . . . . . . . . . 9.3.7 Metodi a pi` u passi . . . . . . . . . . . . . . . . . 9.3.8 Convergenza dei metodi lineari a pi` u passi . . . . 9.3.9 Stabilit` a per passo fissato . . . . . . . . . . . . . 9.3.10 Sistemi di equazioni del primo ordine . . . . . . . 9.3.11 Metodo di Cowell-Numerov . . . . . . . . . . . . 9.4 Equazioni stiff . . . . . . . . . . . . . . . . . . . . . . . . 9.4.1 Metodi numerici . . . . . . . . . . . . . . . . . . 9.4.2 Sistemi altamente oscillatori . . . . . . . . . . . . 9.5 Problemi ai limiti . . . . . . . . . . . . . . . . . . . . . . 9.5.1 Alcuni modelli . . . . . . . . . . . . . . . . . . . 9.5.2 Metodo shooting . . . . . . . . . . . . . . . . . . 9.5.3 Metodo alle differenze . . . . . . . . . . . . . . . 9.5.4 Metodo degli elementi finiti . . . . . . . . . . . . 9.5.5 Problema degli autovalori . . . . . . . . . . . . . 9.6 Equazioni integrali . . . . . . . . . . . . . . . . . . . . . 9.7 Equazioni con ritardo . . . . . . . . . . . . . . . . . . . 9.7.1 Introduzione ai metodi numerici . . . . . . . . . 9.8 Equazioni alle derivate parziali . . . . . . . . . . . . . . 9.8.1 Propagazione delle onde . . . . . . . . . . . . . . 9.8.2 Approssimazione numerica . . . . . . . . . . . . 9.8.3 Equazioni non lineari . . . . . . . . . . . . . . . . 9.8.4 Equazione delle onde . . . . . . . . . . . . . . . . 9.8.5 Equazione della diffusione . . . . . . . . . . . . . 9.8.6 Equazione di Laplace . . . . . . . . . . . . . . . 9.8.7 Metodi spettrali . . . . . . . . . . . . . . . . . . 9.9 Complementi e Problemi . . . . . . . . . . . . . . . . . . 9.10 Esperienze in Matlab . . . . . . . . . . . . . . . . . . . . 9.10.1 Periodo del pendolo non lineare . . . . . . . . . . analisi numerica

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

626 626 628 629 629 633 643 644 650 651 652 657 662 666 669 673 674 675 677 684 685 686 687 690 693 698 707 709 716 719 722 723 725 729 732 738 744 770 773 833 833

c V. Comincioli

Indice

xiii

9.10.2 Problema ai limiti non lineare . . . . . . . . . 9.10.3 Equazioni di Volterra . . . . . . . . . . . . . 9.10.4 Equazioni con ritardo . . . . . . . . . . . . . 9.11 Alcune applicazioni con matlab . . . . . . . . . . . . 9.11.1 Accrescimento di una popolazione strutturata 9.11.2 Studio dell’azione di un farmaco . . . . . . . 9.11.3 Cinetica di un antibiotico . . . . . . . . . . . 9.11.4 Routines fornite da Matlab . . . . . . . . . . 9.11.5 Un esempio di utilizzo . . . . . . . . . . . . . 9.11.6 Equazioni a derivate parziali . . . . . . . . . 9.11.7 Un esempio di applicazione . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

836 838 841 843 844 846 848 850 860 862 864

10 Analisi numerica parallela 10.1 Esempi introduttivi . . . . . . . . . . . . . . . . . . . . . . . 10.2 Sistemi di calcolo paralleli . . . . . . . . . . . . . . . . . . . 10.2.1 Operazioni aritmetiche pipelining . . . . . . . . . . . 10.2.2 Sistemi di calcolo parallelo e loro classificazione . . . 10.3 Modelli e misure di complessit`a . . . . . . . . . . . . . . . . 10.3.1 Elementi di teoria dei grafi . . . . . . . . . . . . . . 10.3.2 Rappresentazione di un algoritmo parallelo mediante 10.3.3 Misure di complessit`a . . . . . . . . . . . . . . . . . 10.3.4 Esempi . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 Parallelizzazione di metodi iterativi . . . . . . . . . . . . . . 10.4.1 Iterazioni di tipo Gauss-Seidel . . . . . . . . . . . . 10.5 Comunicazione nei sistemi paralleli . . . . . . . . . . . . . . 10.5.1 Alcuni tipi di topologie di networks . . . . . . . . . . 10.6 Sincronizzazione negli algoritmi paralleli . . . . . . . . . . . 10.6.1 Algoritmi sincroni . . . . . . . . . . . . . . . . . . . 10.6.2 Algoritmi asincroni . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . un grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

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

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

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

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

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

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

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

865 . 866 . 873 . 873 . 875 . 876 . 877 . 878 . 880 . 883 . 887 . 889 . 892 . 893 . 895 . 896 . 897

A Matlab toolbox A.1 Bioinformatics toolbox . . . A.2 Image Acquisition Toolbox A.2.1 Overview . . . . . . A.2.2 Key Features . . . . A.3 Image Processing Toolbox . A.3.1 Overview . . . . . . A.3.2 Key Features . . . . A.4 Communications Toolbox . A.5 Control System Toolbox . . A.6 Curve Fitting Toolbox . . . A.7 Financial Toolbox . . . . . A.8 Fuzzy Logic Toolbox . . . . A.9 Optimization Toolbox . . . A.10 PDE Toolbox . . . . . . . .

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

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

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

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

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

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

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

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

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

analisi numerica

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

899 899 901 901 901 901 901 901 902 902 902 903 903 904 904

c V. Comincioli

xiv

Indice

A.11 Statistics Toolbox . . . . . . . . . . A.12 Wavelet Toolbox . . . . . . . . . . . A.13 The Symbolic Math Toolboxes . . . A.14 Genetic Algorithm and Direct Search A.14.1 Key features . . . . . . . . . A.15 Distributed Computing Toolbox 1 . A.15.1 Key features . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

904 904 905 905 905 905 905

B Introduzione agli spazi di Sobolev B.1 Richiami sulle distribuzioni . . . . . . . . . . . B.1.1 Derivazione nel senso delle distribuzioni B.2 Spazio di Sobolev H 1 (Ω) . . . . . . . . . . . . . B.2.1 Alcune propriet` a dello spazio H 1 (Ω) . . 1 B.2.2 Funzioni di H (Ω) “nulle” su Γ . . . . . B.2.3 Un risultato di “traccia” . . . . . . . . . B.2.4 Applicazioni del teorema di traccia . . . B.2.5 Un risultato di compattezza . . . . . . . B.3 Spazi di Sobolev H m (Ω) . . . . . . . . . . . . . B.3.1 Risultati di regolarit` a . . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

907 907 909 910 911 912 913 914 914 915 915

C Equazioni differenziali. Tecniche analitiche C.1 Separazione delle variabili . . . . . . . . . . . . . . C.2 Equazione lineare del primo ordine . . . . . . . . . C.3 Equazione di Bernoulli . . . . . . . . . . . . . . . . C.4 Equazione di Riccati . . . . . . . . . . . . . . . . . C.5 Equazione omogenea . . . . . . . . . . . . . . . . . C.6 Equazione esatta . . . . . . . . . . . . . . . . . . . C.7 Equazione di Clairaut . . . . . . . . . . . . . . . . C.8 Equazioni lineari del secondo ordine . . . . . . . . C.8.1 Equazioni lineari non omogenee particolari C.8.2 Sistemi differenziali lineari del primo ordine C.8.3 Equazioni lineari di ordine n . . . . . . . . C.9 Trasformata di Laplace . . . . . . . . . . . . . . . . C.9.1 Propriet` a della trasformata di Laplace . . . C.9.2 Applicazioni della trasformata di Laplace . C.10 Serie di Fourier . . . . . . . . . . . . . . . . . . . . C.10.1 Equazione della diffusione . . . . . . . . . . C.10.2 Equazione delle onde . . . . . . . . . . . . .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

916 916 917 919 920 921 923 924 926 928 929 932 934 938 941 946 950 952

Bibliografia

analisi numerica

. . . . . . . . . . . . . . . Toolbox . . . . . . . . . . . . . . .

955

c V. Comincioli

The mainspring of numerical analysis is the entire aquifer of mathematics, pure and applied.

A. Iserles

CAPITOLO

1 Idee introduttive

In questo capitolo, a carattere introduttivo, si cerca inizialmente di chiarire, attraverso esempi, il significato dell’espressione fare dell’analisi numerica. Successivamente, si evidenziano, in maniera schematica, i principi che fanno da supporto e da filo conduttore ai vari problemi e metodi dell’analisi numerica. In questo obiettivo si inseriscono pure i brevi richiami di analisi funzionale che, oltre fornire un linguaggio unificatore, `e strumento efficace di sviluppo di nuove teorie. Segue, infine, un tentativo di classificazione dei problemi numerici con lo scopo di individuare e caratterizzare i diversi livelli di difficolt` a presenti nella loro risoluzione.

1.1

Analisi numerica

Naturalmente, la questione di che cosa sia l’analisi numerica 1 potrebbe essere trattata in maniera pi` u adeguata alla fine del volume e, soprattutto, dopo aver fatto dell’analisi numerica. Pu` o essere, comunque, di qualche utilit` a, almeno come introduzione, fare alcune considerazioni.

1.1.1

Scopo dell’analisi numerica

Un modo per comprendere il carattere di una disciplina `e di esaminarne gli obiettivi, che possono essere enunciati in forme diverse, ma equivalenti nella sostanza. Ad esempio, si pu`o dire che obiettivo principale dell’analisi numerica `e trovare gli algoritmi che risolvono un problema matematico nel minimo tempo con la massima accuratezza. In altra forma si ha la seguente caratterizzazione arte di dare una risposta numerica ad un problema matematico analisi =⇒ mediante un calcolatore automatico digitale. numerica Analizziamo, in particolare, gli elementi di quest’ultima definizione. 1

o calcolo numerico; calcolo dal latino calculus: pietruzza (da calce, pietra calcare).

1

2

Idee introduttive

Risposta numerica Esempio 1.1 Consideriamo il seguente problema: data l’equazione algebrica P (x) = x2 + 2bx + c = 0 con b, c reali e b2 > c, dimostrare che essa ammette due radici reali. Per la sua risoluzione possiamo seguire i seguenti due differenti metodi. 1. metodo non costruttivo, per riduzione all’assurdo. Supponiamo che non esistano soluzioni reali; allora, essendo P (x) una funzione continua, si ha: P (x) > 0 o P (x) < 0 ∀x ; ma P (−b) = b2 − 2b2 + c < 0,

P (|x|) > 0 per x grande.

2. metodo costruttivo. Come `e ben noto, si ha x2 + 2bx + c = (x + b)2 − b2 + c = 0 da cui x = −b ±

 b2 − c,

oppure x =

−b ∓

c √ b2 − c

Nel secondo metodo, a differenza del primo, si fornisce anche una procedura per il calcolo effettivo (numerico) delle soluzioni, cio`e un algoritmo. Come abbiamo messo in evidenza, la formula risolutiva pu` o essere scritta in due modi diversi, che risultano equivalenti dal punto di vista teorico, ma non dal punto di vista numerico 2 . Naturalmente, l’algoritmo precedente non `e l’unico disponibile; in realt` a esso `e specifico del particolare problema considerato. Pi` u in generale, come vedremo nel seguito, per calcolare le radici di un polinomio o di una funzione non lineare esistono numerosi altri metodi di tipo iterativo: ad esempio, il metodo delle tangenti, delle secanti, ecc.

Necessit` a di una risposta numerica L’esempio precedente `e particolare in quanto la risposta numerica pu` o essere data in forma esplicita. Questa non `e chiaramente la situazione generale. Vediamo, a questo proposito, due esempi. Il primo illustra la impossibilit` a di avere sempre risposte analitiche; il secondo esamina in che senso una soluzione analitica pu` o non essere numerica. Esempio 1.2 Dinamica di una popolazione cellulare. Esaminiamo il modello matematico dell’accrescimento di una popolazione, ad esempio di cellule, nell’ipotesi che il tasso di accrescimento sia una costante λ (modello di Malthus). Indicando con y(t) una misura della quantit` a di cellule all’istante t si ha il seguente sistema dinamico   y (t) = λy(t) y(0) = y0 , y0 > 0 la cui soluzione analitica `e data, come `e noto, da: y(t) = y0 eλt . Consideriamo, ora, il problema di calcolare λ nota la quantit` a di popolazione in due istanti differenti, ad esempio in t = 0 e t = t¯, con t¯ > 0. Il problema equivale, naturalmente, a risolvere la seguente equazione in λ ¯ y0 eλt = y(t¯) 2

Ad esempio, in corrispondenza a b = −90.995, c = −1.82, su un calcolatore in semplice precisione (4 bytes, cfr. il successivo Capitolo 2) si ottiene, con la prima formula x1 = 182 , x2 = −0.01000214, mentre con la seconda: x1 = 181.9611 , x2 = −0.01. La soluzione vera `e data da: x1 = 182, x2 = −0.01. analisi numerica

c V. Comincioli

1.1 Analisi numerica

3

la cui soluzione pu` o essere espressa nella seguente forma analitica

y(t¯) 1 λ = log y0 t¯ Supponendo di poter calcolare la funzione logaritmo, la forma precedente `e di tipo esplicito, in quanto non richiede ulteriori algoritmi. Supponiamo, ora, che l’accrescimento avvenga in presenza di emigrazione o immigrazione con velocit` a d. L’equazione della dinamica del modello si trasforma, allora, nella seguente y  (t) = λy(t) + d per la quale `e ancora possibile calcolare la soluzione analitica y(t). Tuttavia, il problema del calcolo di λ supposti noti: d, y(0), t¯, y(t¯) si trasforma ora nell’equazione non lineare seguente d ¯ ¯ e−λt y(t¯) = − (e−λt − 1) + y0 λ e diversamente dal caso precedente non `e pi` u possibile una esplicitazione in termini di funzioni elementari. Naturalmente il problema si complica ulteriormente se anzich´e il modello di Malthus (valido solo in prima approssimazione) si adottano modelli strutturalmente pi` u significativi, che tengano conto ad esempio dei fenomeni di sovraffollamento, con conseguenti termini non lineari nell’equazione della dinamica o con possibilit` a di effetti non istantanei (equazioni con ritardo).

Esempio 1.3 Problema differenziale ai limiti. L’equazione di Bessel

d2 y dy + (x2 − ν 2 )y = 0 +x (1.1) dx2 dx trova diverse applicazioni in problemi di matematica applicata, in particolare in problemi ai limiti relativi a cilindri circolari retti, o la propagazione di onde elettromagnetiche in conduttori circolari. ` noto che se ν non `e un intero, due soluzioni indipendenti dell’equazione (1.1) sono Jν (x) e J−ν (x) E dove ∞ x (−1)k ( )ν+2k Jν (x) = k! Γ(ν + k + 1) 2 x2

k=0

Si tratta di una soluzione dal punto di vista analitico di tipo esplicita, ma certamente non ancora in forma conveniente per il calcolo numerico. Per renderla tale sono necessarie, in particolare, delle indicazioni sulla rapidit`a di convergenza della serie e delle maggiorazioni dell’errore che si commette approssimando la somma della serie con una particolare somma parziale.

Arte Per risolvere un determinato problema matematico vi possono essere diversi algoritmi. Inoltre lo stesso algoritmo applicato a problemi diversi pu` o comportarsi in maniera diversa. Nei capitoli successivi si esamineranno numerosi esempi di situazioni di questo tipo. Come introduzione suggeriamo, ad esempio, la lettura di Moler, Van Loan [300]. La scelta di un particolare algoritmo per la risoluzione di un determinato problema `e il risultato, come vedremo, di un’analisi del problema e di un’analisi comparativa dei vari algoritmi, sulla base del loro costo e della loro accuratezza. Una componente importante per una scelta ottimale `e l’intuizione affinata dall’esperienza. In questo senso, trovare l’algoritmo che risolva nel minimo tempo e con la massima precisione un problema matematico pu` o essere, a ragione, considerato un’espressione artistica. analisi numerica

c V. Comincioli

4

Idee introduttive

Uso del calcolatore La disponibilit` a di calcolatori programmabili, potenti e affidabili `e tra i maggiori responsabili dello sviluppo del calcolo numerico; essa `e una componente imprescindibile nel progetto di un algoritmo. Legata ad aspetti tecnici in continuo sviluppo (velocit` a, capacit`a di memoria, possibilit`a di uso interattivo, di lavoro in parallelo . . . ), pu` o suggerire nuovi orientamenti, rendere obsoleti alcuni metodi, rivalutarne altri.

Figura 1.1 Collocazione dell’analisi numerica nel processo di matematizzazione di un problema reale.

1.1.2

Brevi note storiche

La storia dell’analisi numerica `e in realt`a quella della matematica, in quanto la matematica nasce per dare una risposta numerica a problemi reali.3 3

Alcuni dati: circa 1650 A.C., in un papiro egiziano (papiro Rhind di Ahmes) un metodo per trovare le radici di una ‘semplice’ equazione (regula falsi ) (cfr. [76], p. 88); metodo di esaustione introdotto da Archimede (287– 212 A.C.) per il calcolo de lunghezze, aree e volumi di figure geometriche (cfr. [128], Ch. 2): quando utilizzato per trovare approssimazioni `e decisamente nello spirito della moderna integrazione numerica ed `e un precursore importante del calcolo di I. Newton e G. Leibniz. Un impulso importante allo sviluppo dei procedimenti numerici `e stata l’introduzione del calcolo da parte di Newton e Leibniz, dal momento che esso ha portato alla costruzione di modelli matematici per lo studio della realt` a fisica, in particolare delle scienze fisiche, ma anche dell’ingegneria, della medicina e dell’economia. Tali modelli non possono usualmente essere risolti in maniera esplicita, e quindi sono necessari metodi numerici per ottenere delle soluzioni approssimate. Newton in particolare ha introdotto per risolvere una variet` a di problemi diversi metodi, alcuni dei quali portano attualmente il suo nome. Seguendo Newton, molti dei ‘giganti’ della matematica del 18-mo e 19-mo secolo hanno dato importanti contributi alla soluzione numerica dei problemi matematici: L. Eulero (1707–1783), J.L. Lagrange (1736–1813) e K.F. Gauss (1777-1855). analisi numerica

c V. Comincioli

1.2 Principi di fondo

5

Durante i secoli questo aspetto `e stato talvolta sovrastato da una concezione pi` u filosofica della matematica, ma ogniqualvolta si `e avuto un avvicinarsi della matematica alle scienze applicate, si `e avuto insieme un risveglio di interesse alla costruzione e allo studio di algoritmi. In effetti, il grande interesse attuale all’analisi numerica `e dovuto da una parte, come gi`a detto, alla disponibilit` a di idonei strumenti di calcolo, ma anche all’idea sempre pi` u convinta, che la Matematica `e un utile strumento per lo studio del mondo reale. In questo senso l’analisi numerica `e un aspetto della matematica applicata. In Figura 1.1 `e delineato in sintesi il cammino della ricerca, a partire dai dati sperimentali , verso la costruzione di teorie e lo sviluppo di modelli . L’analisi numerica si presenta in tale contesto come l’anello decisivo (il linguaggio) per la possibilit`a di una validazione quantitativa di un modello e quindi di una verifica delle teorie. Per notizie riguardanti la storia di alcuni classici metodi numerici si veda, ad esempio, Cassina [74], Goldstine [168], [169], Metropolis et al. [284], Edwards [128], Nash [310], Chabert [76]. In bibliografia sono riportate numerose opere introduttive all’analisi numerica. Per brevit` a, ci limitiamo qui a segnalarne alcune, divenute ormai classiche; in particolare, Dahlquist, Bj¨ orck [105], Forsythe et al. [144], Hamming [189], Henrici [196], Householder [209], Isaacson, Keller [216], Milne [293], Ostrowski [325], Ralston, Rabinowitz [351], Richtmyer, Morton [358], Stoer, Bulirsch [388], Varga [414], Wilkinson [429], [431], Wilkinson, Reinsch [430], Wendroff [422], Young, Gregory [441].

1.2

Principi di fondo

In maniera schematica si possono distinguere nell’analisi numerica i seguenti due aspetti • Metodologia, che tratta, in particolare, la costruzione di algoritmi specifici, la loro efficienza, l’implementazione per un particolare calcolatore. • Analisi, che studia i principi di fondo, le stime degli errori, la convergenza dei metodi.

Il primo `e un aspetto pi` u pratico, mentre il secondo `e pi` u teorico, di base. Nella risoluzione numerica di un problema i due aspetti, in generale ambedue presenti, si integrano a vicenda. In questo paragrafo daremo una breve panoramica dei principi di fondo dell’analisi numerica. Si tratta, in realt` a, di una anticipazione, in quanto essi verranno ripresi e approfonditi nel seguito, ma tale anticipazione pu`o essere utile come filo conduttore di una materia che altrimenti potrebbe sembrare frammentaria.

1.2.1

Iterazione

In modo generale, l’idea dell’iterazione indica la ripetizione di un processo “semplice” per migliorare la stima della soluzione di un problema pi` u “complicato”. Diamo una illustrazione dell’idea mediante due particolari applicazioni. Zero di una funzione Il calcolo dello zero di una funzione f (x), R → R, pu` o essere ricondotto, in vari modi, alla ricerca del punto fisso di una trasformazione g(x); si ponga, ad esempio: g(x) = x + kf (x), k reale = 0. Scelte meno semplici ma pi` u utili di g(x) saranno introdotte nel seguito. analisi numerica

c V. Comincioli

6

Idee introduttive

Il problema si trasforma, allora, nel calcolo del numero reale α tale che α = g(α)

(1.2)

Un’idea per il calcolo del punto fisso α consiste nel cercare di migliorare una stima iniziale x0 , mediante un procedimento iterativo del tipo seguente ed illustrato in Figura 1.2 xν+1 = g(xν ),

ν = 0, 1, 2, · · ·

(1.3)

Naturalmente, affinch´e il procedimento sia utile occorre che siano verificate alcune condizioni. In particolare, la successione xν deve rimanere nel dominio di definizione della funzione g(x) e convergere al punto fisso α. Per essere, poi, conveniente, la convergenza non deve essere troppo lenta. In Figura 1.2 sono rappresentati i quattro possibili comportamenti. In maniera intuitiva si vede che, se la funzione g(x) `e derivabile, si ha convergenza quando `e verificata la condizione u in generale, come vedremo nel seguito, quando la funzione g(x) `e una contrazione). |g (x)| < 1 (pi` u La velocit` a di convergenza dipende da quanto `e piccola la funzione |g (x)| nel punto fisso α (pi` in generale, la costante di contrazione).

Figura 1.2 Metodo iterativo per il calcolo del punto fisso. L’analisi del metodo, per ora soltanto intuitiva, `e servita a mettere in luce alcuni criteri utili per la scelta della funzione g(x). Vale la pena sottolineare che, se il problema di partenza `e la ricerca di uno zero della funzione f (x), la funzione g(x) deve essere scelta. Un altro aspetto di cui tenere conto, in tale scelta, `e il costo (in termini di operazioni elementari) del calcolo di g(x). Il costo complessivo risulta, infatti, dal costo di ogni iterazione per il numero delle iterazioni e quindi `e il risultato sia della velocit`a di convergenza che del costo per ogni valutazione di g(x). Osservazione 1.1 Il metodo (1.3) pu`o essere generalizzato in diverse direzioni. Da un lato si pu`o considerare il punto unito come intersezione di due curve ψ(x), g(x), con ψ(x) non necessariamente data dalla retta y = x, e considerare, quindi, il procedimento iterativo ψ(xν+1 ) = g(xν ),

ν = 0, 1, 2, . . .

Naturalmente la funzione ψ dovr` a, per quanto riguarda il problema del calcolo degli zeri, essere pi` u “semplice” della funzione f (x). analisi numerica

c V. Comincioli

1.2 Principi di fondo

7

Un’altra generalizzazione consiste nel tenere memoria di pi` u termini della successione {xν }, considerando procedimenti a pi` u passi definiti nel modo seguente xν+1 = G(xν , xν−1 , xν−2 , · · · , xν−r+1 ) Per tali metodi si pone il problema di dare r stime iniziali; ma in generale, a parit` a di velocit` a di convergenza essi risultano pi` u “economici”, in termini di numero di operazioni, dei metodi a un passo. Essi realizzano, infatti, un migliore sfruttamento della memoria.

Vediamo, ora, una classica applicazione del procedimento iterativo (1.3). Esempio 1.4 Calcolo della radice quadrata.

o essere scritta nella forma x = g(x) ad esempio nei due modi seguenti L’equazione x2 = c, con c > 0, pu` 1 c x= x+ (1.4) 2 x c x= (1.5) x √ Nel caso dell’equazione (1.4) si ha: g  (α) = 0, mentre per l’equazione (1.5) si ha: g  (α) = −1, ove α = c. Nel primo caso si ha convergenza, mentre nel secondo la successione oscilla alternativamente fra x0 e c/x0 . ` interessante vedere la rapidit` E a di convergenza nel primo caso. Assumendo ad es. c = 2 e x0 = 1.5 mediante il seguente programma in doppia precisione (8 bytes)

c=2.; xt=sqrt(c); x=1.5; while (abs(x-xt)>=1.e-14) x=(x+c/x)/2; [x,xt] end

si ottengono i risultati riportati in Tabella 1.1.

ν 1 2 3 4

xν 1.416666666666667 1.414215686274510 1.414213562374690 1.414213562373095

√ 2 1.414213562373095 1.414213562373095 1.414213562373095 1.414213562373095

Tabella 1.1 Risultati dell’iterazione di Newton. Da essa si ricava l’informazione che la convergenza `e di tipo quadratico, cio`e se xν ha t cifre esatte, o facilmente verificare che il metodo iterativo basato allora xν+1 ha almeno 2t − 1 cifre esatte. Si pu` sulla trasformazione (1.4) non `e altro che il metodo delle tangenti, o metodo di Newton (vedi Figura 1.3) applicato all’equazione: f (x) = x2 − c = 0. Come vedremo nel seguito, la convergenza quadratica `e una caratteristica del metodo di Newton quando le radici sono distinte.

Problema differenziale a valori iniziali Un problema differenziale a valori iniziali del tipo   y (x) =f (x, y) y(x0 )=y0 analisi numerica

(1.6) c V. Comincioli

8

Idee introduttive

Figura 1.3 Illustrazione del metodo di Newton–Raphson. pu` o essere trasformato nella seguente equazione integrale equivalente  x f (t, y(t))dt y(x) = y0 + x0

per la quale `e possibile applicare un procedimento iterativo del tipo visto in precedenza. In effetti, posto, ad esempio: y0 (x) = y0 si costruisce la successione di funzioni {yν (x)} calcolando  x yν+1 (x) = y0 + f (t, yν (t))dt (1.7) x0

Sotto opportune ipotesi di regolarit` a sulla funzione f (x, y) (lipschitziana in y) , si ha che la successione converge alla soluzione del problema a valori iniziali e, quindi, il procedimento pu`o essere di tipo costruttivo. Osserviamo, comunque, che per essere veramente tale `e ancora necessario un metodo numerico per il calcolo dei successivi integrali.

1.2.2

Approssimazione locale

L’idea dell’approssimazione locale consiste nel sostituire ad una funzione complicata, cio`e non calcolabile direttamente, una funzione pi` u semplice. Il significato preciso del termine semplice dipende dal contesto, cio`e dall’uso che di tale funzione viene fatto. Le procedure pi` u comuni per ottenere questo tipo di approssimazione sono basate su uno sviluppo in serie troncato oppure su una operazione di interpolazione. Sviluppo in serie Consideriamo, ad esempio, il problema del calcolo della soluzione del seguente sistema non lineare F (x) = 0

(1.8)

ove F : Rn → Rn . A partire da una stima della soluzione, che indichiamo con x0 , cerchiamo un vettore δ ∈ Rn tale che F (x0 + δ) = 0 analisi numerica

(1.9) c V. Comincioli

1.2 Principi di fondo

9

A tale scopo, supponendo la funzione F (x) sufficientemente regolare, sviluppiamo la funzione F in serie intorno al punto x0 . Arrestandoci al termine di primo grado, si ottiene il seguente problema approssimato F (x0 ) + F  (x0 )δ¯ = 0 che, essendo di tipo lineare, `e in generale pi` u facilmente risolubile del problema originario. Naturalmente, avendo trascurato nello sviluppo in serie i termini di grado superiore al primo, il vettore δ¯ `e, in generale, solo una approssimazione della soluzione del sistema (1.9). Per migliorare ¯ la precisione si pu`o utilizzare la precedente idea dell’iterazione, sostituendo a x0 il valore x0 + δ. Interpolazione L’idea dell’interpolazione consiste nel sostituire ad una funzione f (x) definita su un intervallo (a, b) un polinomio P (x), che assume gli stessi valori della funzione f (x) in punti prefissati dell’intervallo di definizione, detti punti di collocazione. Un’idea pi` u generale consiste, data una suddivisione dell’intervallo, nel sostituire alla funzione f (x) una funzione polinomiale a tratti, cio`e una funzione definita su ogni tratto della suddivisione come un polinomio di un grado prefissato. Come vedremo pi` u dettagliatamente nel seguito, in particolari situazioni, come ad esempio in problemi relativi allo smoothing di dati sperimentali o all’approssimazione di soluzioni di equazioni differenziali, l’interpolazione mediante polinomi a tratti presenta dei vantaggi di migliore adattabilit` a rispetto alla interpolazione con lo stesso polinomio su tutto l’intervallo. La procedura di interpolazione `e di base per costruire numerosi algoritmi. Vediamo alcuni esempi. Esempio 1.5 Approssimazione di un integrale. Per approssimare l’integrale:  I=

b

f (x)dx a

di una funzione f (x), di cui non `e nota una primitiva, si pu` o sostituire alla f (x) una funzione, pi` u semplice rispetto all’operazione di integrazione. Utilizzando l’idea dell’interpolazione, si sostituisce alla funzione f (x) il polinomio interpolatore relativo a un insieme di punti (i nodi) dell’intervallo (a, b) oppure un polinomio a tratti relativo alla suddivisione introdotta dai nodi.

Figura 1.4 Formula dei trapezi. analisi numerica

c V. Comincioli

10

Idee introduttive

Introducendo, ad esempio, una suddivisione dell’intervallo (a, b) in parti uguali, con passo h = (b − a)/n, n , intero ≥ 1, e utilizzando i polinomi a tratti di primo grado, si ottiene come approssimazione la nota formula dei trapezi, illustrata in Figura 1.4 e definita nel modo seguente n−1 1 I T (h) := h (fi + fi+1 ) 2 i=0

(1.10)

Supponendo la funzione f (x) sufficientemente regolare, ad esempio f ∈ C 2 , vedremo successivamente che T (h) − I = O(h2 )

(1.11)

Cio`e, l’errore `e un infinitesimo del secondo ordine per h → 0.

Per avere maggiore accuratezza con meno lavoro di quello richiesto dalla formula dei trapezi, si possono seguire le seguenti due idee 1. approssimare localmente la funzione f (x) mediante polinomi di grado pi` u elevato o scegliere opportunamente i nodi. 2. calcolare la formula dei trapezi per differenti valori di h e allora estrapolare per h = 0.

Esaminiamo, in particolare, la seconda idea. Supponiamo di aver calcolato la formula (1.10) per 2h e h. Allora, ricordando la (1.11), abbiamo i seguenti risultati T (2h) − I k(2h)2 T (h) − I k(h)2 ove k `e indipendente da h. Considerando le equazioni precedenti come un sistema nelle due incognite I, k, si ha in particolare 1 I T (h) + (T (h) − T (2h)) 3 In questo modo, trattando il simbolo di come se fosse un simbolo di uguaglianza, si `e ottenuto per l’integrale un valore “pi` u accurato”. Effettivamente, come vedremo successivamente, ci`o `e vero per h sufficientemente piccolo, cio`e asintoticamente. Il procedimento ora seguito, di cui lasciamo come esercizio l’interpretazione grafica, `e noto come metodo di estrapolazione. Il suo interesse numerico sta nel fatto che per ottenere il nuovo valore non si `e pi` u calcolata la formula (1.10), che, contenendo il calcolo della funzione f (x), rappresenta, in generale, la parte pi` u costosa del procedimento. Naturalmente l’idea non si limita a questo particolare caso, ma trova applicazione, come vedremo, in numerose altre situazioni. Esempio 1.6 Problemi differenziali ai limiti. Consideriamo il seguente problema ai limiti −y  (x) + α(x)y = f (x), y(a) = y(b) = 0 analisi numerica

α(x) ≥ 0 x ∈ (a, b)

(1.12) (1.13) c V. Comincioli

1.3 Brevi richiami di analisi funzionale

11

Vedremo successivamente che una formulazione del problema “equivalente” alla precedente `e la seguente       b b b 1 2 2 z dx + α(x)z dx − zf (x) dx (1.14) min z 2 a a a ove il minimo `e preso su tutte le funzioni z(x) che sono di quadrato sommabile su (a, b) insieme alle derivata prima e nulle in a e b. Un’idea per approssimare la soluzione di (1.12), (1.13) consiste nell’introdurre una reticolazione dell’intervallo (a, b) e nell’approssimare localmente la derivata seconda mediante dei rapporti incrementali. Per il problema nella forma (1.14), si pu` o, invece, approssimare lo spazio di funzioni in cui si cerca il minimo mediante uno spazio di funzioni a dimensione finita (ad esempio lo spazio delle funzioni polinomiali a tratti). Naturalmente, si pone anche qui il problema dell’accuratezza della soluzione approssimata, che nel caso della formulazione in termini di derivate, `e legata alla precisione con cui si approssima la derivata (errore di discretizzazione locale) e nel caso della formulazione (1.14) alla distanza tra lo spazio delle funzioni continue e quello delle funzioni discrete (errore di interpolazione).

1.3

Brevi richiami di analisi funzionale

L’analisi funzionale fornisce insieme uno strumento efficiente per lo sviluppo di nuove teorie e la possibilit` a di estrarre le idee essenziali con un linguaggio preciso ed elegante. Per questo motivo, in questo paragrafo verr` a fatta una rapida rassegna dei principali concetti, rinviando per una pi` u adeguato approfondimento ad esempio a Brezis [60], Milne [294], Yosida [439], Zeidler [442].

1.3.1

Spazi lineari

Definizione 1.1 Sia X = {x, y, z, . . .} un insieme e K = {α, β, γ, . . .} un campo di scalari. Sia definita un’operazione di somma tra due qualunque elementi di X ed un’operazione di moltiplicazione scalare tra ciascun elemento di K e ciascun elemento di X in modo tale che (i) x ∈ X, y ∈ X ⇒ x + y ∈ X (ii) x ∈ X, α ∈ K ⇒ αx ∈ X (iii) x + y = y + x (iv) (x + y) + z = x + (y + z) (v) Esiste un elemento 0 ∈ X tale che x + 0 = x per ogni x ∈ X (vi) Per x ∈ X esiste un unico elemento, chiamato l’opposto di x e denotato con −x, tale che x + (−x) = 0 (vii) α(βx) = (αβ)x (viii) α(x + y) = αx + αy (ix) (α + β)x = αx + βx (x) 1x = x

Allora X `e detto spazio lineare sul campo K. Nel caso in cui K `e il campo dei numeri reali X `e detto uno spazio lineare reale. Nel seguito, salvo avviso contrario, considereremo, in particolare, spazi lineari reali. analisi numerica

c V. Comincioli

12

Idee introduttive

Esempio 1.7 Vi sono numerosi esempi di spazi lineari di interesse nella matematica applicata e nell’analisi numerica (a) Lo spazio Rn dei vettori ad n componenti, con l’usuale definizione di addizione e moltiplicazione per uno scalare. (b) Lo spazio delle funzioni m-volte continuamente differenziabili su un intervallo della retta reale [a, b], denotato con C (m) ([a, b]). L’addizione e la moltiplicazione per uno scalare `e intesa nel senso usuale, cio`e per punti. (c) Lo spazio Lp (Ω) delle funzioni a potenza p-ma sommabile su un insieme misurabile Ω ⊂ Rn , n ≥ 1. (d) Lo spazio lp delle successioni di numeri reali {xi } tali che: ∞

|xi |p < ∞

i=1

(e) Lo spazio dei polinomi Pn di grado ≤ n.

Definizione 1.2 Siano x1 , x2 , . . . xn elementi fissati di un spazio lineare X sul campo K. La somma α1 x1 + α2 x2 + · · · + αn xn con αi ∈ K `e chiamata una combinazione lineare degli elementi xi . Gli elementi xi sono detti linearmente indipendenti se ∀αi ∈ K si ha la seguente implicazione α1 x1 + α2 x2 + · · · + αn xn = 0 ⇒ α1 = α2 = · · · = αn = 0 altrimenti si dicono linearmente dipendenti. Definizione 1.3 Se esistono n elementi x1 , x2 , . . . , xn di uno spazio lineare X linearmente indipendenti, e ogni insieme di n + 1 elementi di X `e linearmente dipendente, allora n `e la dimensione di X, denotata con dim(X). Se per ogni n > 0 esistono n elementi linearmente indipendenti in X, allora X `e detto di dimensione infinita. Definizione 1.4 Un insieme di n elementi x1 , x2 , . . . , xn linearmente indipendenti di uno spazio X `e chiamata una base per X se ogni x ∈ X pu` o essere espresso come una combinazione lineare degli elementi xi , i = 1, 2, . . . , n. Esempio 1.8 {1, x, x2 , . . . , xn } `e una base per lo spazio Pn dei polinomi di grado ≤ n. Esempio 1.9 Lo spazio delle funzioni continue C 0 ([a, b]) ha dimensione infinita. Esempio 1.10 Rn ha come base l’insieme di vettori {e1 , e2 , . . . , en }, ove: ei = ( 0, 0, · · · , 0, 1, 0, ··· , 0 1, 2, · · · , i − 1, i, i + 1, · · · , n

)

Si dimostra facilmente il seguente risultato: Teorema 1.1 Uno spazio lineare X `e di dimensione finita n se e solo se ha una base di n elementi. Inoltre, ogni insieme di elementi x1 , x2 , . . . , xn di X genera uno spazio di dimensione finita, chiamato lo spazio generato da tali elementi e indicato con span(x1 , x2 , . . . , xn ). analisi numerica

c V. Comincioli

1.3 Brevi richiami di analisi funzionale

1.3.2

13

Norme

Analizzando i metodi di approssimazione `e necessario spesso confrontare o misurare la differenza fra le varie risposte. Si tratta, pertanto, di introdurre una distanza tra due punti di uno spazio lineare. Definizione 1.5 Uno spazio lineare X `e detto normato se esiste una applicazione: X → R+ , chiamata norma e indicata usualmente con x, tale che (i) x ≥ 0, per ogni x ∈ X. (ii) x = 0 se e solo se x = 0. (iii) αx = |α| x, per ogni x ∈ X, α ∈ K. (iv) Per ogni x, y ∈ X, vale la disuguaglianza triangolare x + y ≤ x + y

Il numero x − y definisce una distanza tra i punti x e y. Osservazione 1.2 Una seminorma `e un’applicazione: X → R+ , indicata talvolta con |x|, che soddisfa le condizioni (i), (iii), (iv). Si dice che |x| `e non triviale se e solo se |x| > 0 per almeno un elemento x ∈ X.

Osservazione 1.3 Nel linguaggio della matematica astratta l’introduzione di una norma comporta l’introduzione nello spazio lineare di una topologia che permette di generalizzare i concetti geometrici di intorno, convergenza, ecc. Per definire la distanza tra due punti si potrebbe utilizzare la nozione pi` u generale di metrica e considerare gli spazi metrici, anzich´e gli spazi normati. Tuttavia, la maggior parte dei problemi in analisi numerica pu` o essere discussa adeguatamente nel contesto degli spazi lineari normati.

Successivamente si esamineranno in particolare le norme di vettore e di matrice.

1.3.3

Spazi a dimensione infinita

Estendiamo ora l’idea di base ad uno spazio a dimensione infinita. Definizione 1.6 Un insieme di elementi x1 , x2 , . . . di uno spazio normato X `e detto chiuso (o completo) in X se per ogni x ∈ X e  > 0 esiste un n e un insieme di scalari α1 , α2 , . . . , αn tali che n αi xi  ≤  x − i=1

Se l’insieme {xi } `e chiuso in X e linearmente indipendente (cio`e, tutti i sottoinsiemi finiti sono linearmente indipendenti), allora si dice che {xi } `e una base per X. Uno spazio `e detto separabile se possiede una base numerabile (o finita). Sono gli spazi pi` u interessanti dal punto di vista numerico e nel seguito considereremo, in particolare, spazi che verificano tale propriet`a. analisi numerica

c V. Comincioli

14

Idee introduttive

Spazi di Banach e di Hilbert Definizione 1.7 Una successione {xn } in uno spazio lineare normato `e detta successione di Cauchy se lim lim xn+p − xn  = 0

(1.15)

n→∞ p→∞

Definizione 1.8 Uno spazio lineare normato X `e detto completo se ogni successione di Cauchy in X converge a un elemento in X. Uno spazio normato completo `e detto spazio di Banach.  Esercizio 1.1 Dimostrare che ogni spazio lineare normato a dimensione finita `e completo.  Esercizio 1.2 Dimostrare che lo spazio C([a, b]) non `e completo rispetto alla norma  x =

b

1/2 x2 (t) dt

a

Fornire un controesempio.

Definizione 1.9 Sia X uno spazio lineare reale. Su di esso `e definito un prodotto scalare se ad ogni x, y ∈ X `e associato un numero reale, denotato usualmente con (x, y), tale che 1. (x, x) ≥ 0 e se (x, x) = 0 ⇒ x = 0. 2. (x, y) = (y, x). 3. (αx, y) = α(x, y). 4. (x + y, z) = (x, z) + (y, z).

Se si pone x = (x, x)1/2 si ottiene uno spazio normato. Se X risulta completo allora viene detto spazio di Hilbert. Ricordiamo, lasciando la dimostrazione come esercizio, la seguente utile disuguaglianza. Proposizione 1.1 (Cauchy-Schwarz) Dato uno spazio lineare X dotato di un prodotto scalare (·, ·), si ha per ogni x, y ∈ X:  |(x, y)| ≤ (x, x)(y, y) = x y L’angolo θ tra due elementi x, y `e definito da θ = arccos

(x, y) x y

Due elementi x, y sono ortogonali se θ = π/2, cio`e se (x, y) = 0. Un elemento x `e detto ortogonale a un sottospazio Φ di X se (x, φ) = 0 ∀φ ∈ Φ. L’elemento z = (x, y)x/(x, x) `e la proiezione ortogonale di y su x; il vettore y − z `e ortogonale a x. Si lascia come esercizio la dimostrazione della seguente propriet`a. analisi numerica

c V. Comincioli

1.3 Brevi richiami di analisi funzionale

15

Proposizione 1.2 Per ogni x, y in uno spazio dotato di prodotto scalare si ha la seguente uguaglianza, detta legge del parallelogramma x + y2 + x − y2 = 2x2 + 2y2

(1.16)

Se x + y = x + y allora x e y sono linearmente dipendenti e se inoltre x = y, allora x = y.

1.3.4

Trasformazioni e operatori

Sia S1 un sottoinsieme di uno spazio lineare X e S2 un sottoinsieme di uno spazio lineare Y . Una trasformazione da S1 in S2 `e definita assegnando una “regola” che associa ad ogni elemento di S1 un unico elemento di S2 . Chiamiamo operatore la rappresentazione di una trasformazione. L’equazione Tx = y indica che l’operatore T trasforma l’elemento x ∈ S1 in un elemento y ∈ S2 . L’insieme di tutti gli elementi per i quali T `e definito `e il dominio di T , denotato con D(T ). L’insieme degli elementi y = T x per x ∈ D(T ) `e l’immagine o range di T , denotato con R(T ). La trasformazione `e suriettiva su S2 se R(T ) = S2 ; iniettiva se T x1 = T x2 ⇒ x1 = x2 . Per una trasformazione iniettiva `e definita una trasformazione da R(T ) in D(T ) tale che ∀y ∈ R(T ) esiste un unico x con T x = y; l’operatore che rappresenta tale trasformazione `e chiamato l’inverso di T e denotato con T −1 . Le operazioni di addizione di operatori e di moltiplicazione per uno scalare si definiscono in modo ovvio; se T1 e T2 hanno un dominio comune X e α `e uno scalare allora per ogni x ∈ X si ha (T1 + T2 )x = T1 x + T2 x,

∀x ∈ X

(αT )x = α(T x) Se T1 e T2 sono due operatori tali che R(T2 ) `e contenuto in D(T1 ), allora possiamo definire il prodotto T1 T2 ponendo (T1 T2 )x = T1 (T2 x) Naturalmente, non vale in generale la propriet` a commutativa, cio`e, in generale, T1 T2 = T2 T1 . Se un operatore T `e invertibile, allora T −1 T = I,

T T −1 = I,

(I = identit` a)

Per gli operatori che non hanno inversa si pu` o introdurre un un concetto meno restrittivo. Definizione 1.10 Se esiste un operatore TL−1 tale che TL−1 T = I allora esso `e chiamato inverso a sinistra di T . Analogamente TR−1 `e detto inverso a destra se: T TR−1 = I analisi numerica

c V. Comincioli

16

Idee introduttive

Si lascia come esercizio la dimostrazione delle seguenti propriet`a. 1. Se esiste sia l’inverso a sinistra che l’inverso a destra, allora essi coincidono con l’inverso. 2. Se esiste TR−1 , allora T `e suriettiva su Y e l’equazione T x = y ha almeno una soluzione x = TR−1 y. 3. Se esiste TL−1 , allora T `e iniettiva. Se l’equazione T x = y ha una soluzione, allora tale soluzione `e unica, data da x = TL−1 y.

 Esercizio 1.3 Mostrare che l’operatore d/dx : C 1 ([a, b]) → C([a, b]) `e suriettivo ma non iniettivo. Quali sono gli operatori inversi a destra di tale operatore?

Definizione 1.11 Un operatore L `e detto lineare se il suo dominio `e uno spazio lineare e se L(αx + βy) = αLx + βLy per tutti gli x, y ∈ D(L) e tutti gli scalari α, β. Definizione 1.12 Un operatore T : X → Y , con X, Y spazi lineari normati, `e detto limitato se e solo se esiste una costante c < ∞ tale che T x1 − T x2  ≤ cx1 − x2 ,

∀x1 , x2 ∈ X.

(1.17)

Il valore µ(T ) = inf c `e la limitazione dell’operatore T su X. Osservazione 1.4 Per semplicit`a di notazioni qui e nel seguito, quando non si presentano situazioni di equivoco, si utilizza la medesima notazione per indicare sia la norma in X che in Y , anche se le due possono, in generale, essere diverse. Per gli operatori lineari si pu`o dimostrare il seguente risultato. Proposizione 1.3 Sia L un operatore lineare e limitato da X in Y . Allora µ(L) =

Lx Lx = sup x∈X,x=0 x x=1 x sup

(1.18)

L’insieme di tutti gli operatori lineari e limitati da uno spazio lineare X in uno spazio lineare Y `e esso stesso uno spazio lineare, con le definizioni di operazione di addizione e moltiplicazione per uno scalare introdotte in precedenza. Esso viene indicato usualmente L(X, Y ). Per un operatore lineare, anzich´e di limitazione dell’operatore si parla usualmente di norma, definita quindi da L = sup Lx x=1

 Esercizio 1.4 Si consideri l’operatore integrale T : C([0, 1]) → C([0, 1]) definito da 

1

(T x)(t) =

K(t, s)x(s) ds 0

ove K(t, s) `e una funzione continua di t e s. Dimostrare che la norma di operatore indotta dalla norma del massimo `e la seguente  1 T ∞ = max |K(t, s)| ds. 0≤t≤1

1

0

|x(t)| dt `e la seguente  1 |K(t, s)| dt T 1 = max

e che la norma indotta dalla norma 1, cio`e x1 =

0

0≤s≤1

analisi numerica

0

c V. Comincioli

1.3 Brevi richiami di analisi funzionale

17

Definizione 1.13 Un operatore T `e continuo in x se per ogni successione {xn } convergente a x si ha lim T xn − T x = 0 n→∞

Lasciamo come esercizio il seguente risultato. Proposizione 1.4 Un operatore lineare L `e continuo nel dominio di definizione se e solo se `e continuo in 0 e se e solo se esso `e limitato. Per operatori non lineari, invece, si ha che la limitatezza implica la continuit`a ma non il viceversa (dare controesempi). Per una funzione di variabile reale la condizione (1.17) significa la continuit`a di Lipschitz, che `e una condizione pi` u forte della continuit` a ordinaria.  Esercizio 1.5 Se L `e un operatore lineare, mostrare che R(A) `e uno spazio lineare. Mostrare con esempi che questo non `e necessariamente vero per un operatore nonlineare.

Ricordiamo infine il seguente importante risultato. Teorema 1.2 (Banach–Steinhaus) Siano X e Y due spazi di Banach e {Ti }, i ∈ I, una famiglia (non necessariamente numerabile) di operatori lineari e continui da X in Y . Se sup Ti x < ∞

∀x ∈ X

i∈I

allora sup Ti L(X,Y ) < ∞ i∈I

In altre parole esiste una costante c tale che Ti x ≤ c x

∀x ∈ X, ∀i ∈ I

Il risultato precedente `e anche noto come principio della limitatezza uniforme (principle of uniform boundedness): da una stima puntuale si ottiene una stima uniforme.

Figura 1.5 Successione fk (x).

analisi numerica

c V. Comincioli

18

Idee introduttive

1.3.5

Importanza della scelta della norma

Terminiamo questa panoramica di nozioni di analisi funzionale richiamando l’attenzione sull’importanza di un’opportuna scelta della norma in uno spazio lineare. A tale scopo, consideriamo il seguente esempio. Sia k ≥ 1 un numero assegnato, destinato a tendere a +∞. Definiamo per ogni k la seguente funzione sull’intervallo [0, 3] ⎧ 1 2 ⎪ ⎪ k(k2 x − 1), per 2 ≤ x ≤ 2 ⎪ ⎨ k k 2 3 fk (x) = −k(k2 x − 3), per 2 ≤ x ≤ 2 ⎪ ⎪ ⎪ k k ⎩ 0, altrove. Indicando con  · p la norma nello spazio Lp (a, b), si possono dimostrare facilmente i seguenti risultati, che mostrano il diverso comportamento della successione, per k → ∞, a secondo della norma utilizzata  3 1 fk (x)1 := |fk (x)| dx = → 0 k 0  3

1/2 √ 2 2 |fk (x)| dx =√ fk (x)2 := 3 0 fk (x)∞ := max |fk (x)| = k → ∞ x∈[0,3]

1.4

Classificazione dei problemi computazionali

Come ogni classificazione, anche quella che ora presenteremo, non ha lo scopo, del resto impossibile, di catalogare in forma precisa i vari tipi di problemi numerici, quanto piuttosto di fornire un quadro macroscopico di riferimento per quanto riguarda le differenti difficolt` a e quindi le differenti tecniche. In forma schematica e facendo riferimento alle notazioni del paragrafo precedente, possiamo rappresentare un problema numerico nella forma seguente Tx = y

(1.19)

ove x ∈ X, y ∈ Y ; X, Y sono spazi lineari e T `e un operatore : X → Y . Si possono distinguere i seguenti tre tipi di problemi, in ordine crescente di difficolt` a. 1. Il problema diretto. Dato x e T , determinare y. Problemi di questo tipo sono, ad esempio: il calcolo del valore di una funzione assegnata, per un valore fissato della variabile indipendente; il calcolo di un integrale definito. Nel secondo esempio l’input `e la funzione integranda e l’insieme di integrazione mentre T `e l’operatore di integrazione. 2. Il problema inverso. Dato T e y, determinare x. Esempi sono: la risoluzione di un sistema di equazioni; la risoluzione di un problema differenziale a valori iniziali o ai limiti. Nel caso, ad esempio, della risoluzione di un sistema lineare Ax = b, si conosce l’output b, l’operatore A e si vuole conoscere l’input x. analisi numerica

c V. Comincioli

1.4 Classificazione dei problemi computazionali

19

Figura 1.6 Rappresentazione schematica di un problema numerico. ` in sostanza, il problema 3. Problema di identificazione. Dato una famiglia di x e y, trovare T . E, della costruzione di un modello matematico.

` opportuno sottolineare che problema diretto non significa necessariamente assenza di diffiE colt` a numeriche. Nel seguito studieremo ad esempio l’approssimazione di una funzione mediante funzioni pi` u semplici (ad esempio, polinomi ), cio`e calcolabili con un numero finito di operazioni. Tale approssimazione `e la base per la costruzione di algoritmi per il calcolo di funzioni non elementari e per affrontare il problema dell’integrazione e della derivazione. Le questioni numeriche che si pongono per un problema diretto riguardano lo studio degli errori di troncamento e della convergenza, nonch´e della stabilit` a degli algoritmi proposti. Il problema inverso rappresenta, anche per le sue importanti applicazioni, il problema centrale nell’analisi numerica. In alcuni casi particolari esso pu` o essere ricondotto a un problema diretto. Si pensi ad esempio alla formula risolutiva di un sistema lineare mediante il calcolo dell’inversa, oppure alle formule per l’integrazione di particolari equazioni differenziali ordinarie (ad esempio lineari), alle funzioni di Green per certe equazioni differenziali ellittiche. La conoscenza dell’operatore inverso pu` o essere interessante dal punto di vista teorico e, talvolta, anche dal punto di vista pratico, per evidenziare il comportamento qualitativo della soluzione. Tuttavia, dal punto di vista numerico, cio`e per una valutazione quantitativa, essa non `e necessariamente di aiuto. Nel caso, ad esempio, di un sistema lineare il calcolo dell’inversa della matrice non `e sempre lo strumento numerico pi` u adatto per il calcolo della soluzione. Il problema di identificazione, il pi` u ambizioso dei tre tipi di problemi, in generale presenta le pi` u grosse difficolt` a. Analizziamo come esempio una situazione particolare che si inquadra nella teoria dell’approssimazione. Supponiamo che una funzione sia data solo per punti, cio`e in forma tabellare e che si voglia conoscere i valori della funzione in punti diversi da quelli dati. Il problema `e, quindi, quello di approssimare una funzione sulla base della conoscenza di alcuni suoi valori, che possono essere, ad esempio, dati sperimentali . Chiaramente, il problema pu` o non avere soluzione unica, a meno che non si restringa opportunamente la classe delle funzioni ammissibili e si precisi il senso di vicino, mediante la scelta di una particolare norma. Quando gli spazi X e Y sono a dimensione infinita, si pu`o assumere come approssimazione di T una combinazione finita di elementi di una base, ad esempio una combinazione di polinomi. Il problema `e in questo modo ricondotto alla ricerca di un numero finito di parametri (gradi di libert` a ), che usualmente vengono calcolati minimizzando una opportuna misura dello scarto tra i dati del problema e quelli forniti dalla approssimazione di T . Si ha, quindi, in definitiva un problema di programmazione matematica, che sar`a trattato nel seguito. Un approccio, concettualmente simile, ma con evidenti difficolt`a aggiuntive, pu`o essere adottato nella situazione pi` u generale quando, anzich´e una funzione, l’operatore incognito T `e un analisi numerica

c V. Comincioli

20

Idee introduttive

problema differenziale, integrale, alle differenze, ecc. In questo caso l’operatore T , viene stimato con operatori “semplici”, ad esempio lineari. Si costruisce cio`e un modello matematico. Solitamente nel modello sono presenti dei parametri, in generale con un significato fisico, chimico, ecc. La loro funzione `e quella di adattare il modello approssimato ai dati sperimentali. Il loro calcolo comporta, quindi, come abbiamo visto in precedenza, la risoluzione di problemi di ottimizzazione. Una volta calcolati i parametri si tratta di vedere se il modello corrispondente `e adeguato ` questo un punto estremamente a descrivere il fenomeno corrispondente ai dati sperimentali. E delicato del processo di modellizzazione, che comporta, in particolare, una scelta significativa dei dati sperimentali. In definitiva, per quanto riguarda l’aspetto numerico, i problemi di identificazione richiedono la risoluzione (eventualmente iterata) di problemi di tipo diretto o inverso e, in particolare, di problemi di ottimizzazione.

1.5

Esempi introduttivi di Matlab

Condizione indispensabile per imparare ad usare Matlab (link 1) `e poter disporre su calcolatore di una sua versione (meglio se versione 6, o versioni successive). Mediante le istruzioni >> help >> help help >> demo

si possono apprendere rapidamente le nozioni e le istruzioni di base, che saranno quindi supposte note per il seguito. Come un qualunque altro linguaggio, vale sempre il principio che il modo migliore per apprenderlo `e usarlo! In questo libro l’ambiente Matlab `e utilizzato principalmente come strumento ’utile’ per implementare e analizzare i metodi e gli algoritmi numerici. Allo stesso scopo possono, naturalmente, essere utilizzati altri ben noti linguaggi di programmazione (Fortran, C,. . . ). Per comodit` a, in questo capitolo a carattere introduttivo vengono evidenziate, mediante alcune semplici applicazioni, differenti caratteristiche e possibilit`a di Matlab (per una introduzione pi` u organica si veda ad esempio [309]). Ad esempio, il seguente segmento di programma % simbolo utilizzato per commenti u=rand(1,2000000); v=rand(2000000,1);% generazione di due vettori random t=cputime; %inizializza il tempo di cpu tic % altro modo di valutare il tempo di esecuzione p=u*v; % prodotto scalare toc % chiude tic e mostra il tempo impiegato in secondi cputime-t % tempo di esecuzione in secondi ----------t=cputime; tic p=0; for i=1:2000000 % p=p+u(i)*v(i); % prodotto scalare eseguito componente per componente end % toc; cputime-t analisi numerica

c V. Comincioli

1.5 Esempi introduttivi di Matlab

21

evidenzia il fatto che Matlab `e un linguaggio vettoriale: pu` o operare direttamente su matrici e in maniera decisamente pi` u conveniente che componente per componente. Nel seguito vedremo altri esempi illustrativi di tale stile di programmazione.

1.5.1

Grafica mediante Matlab

Un altro aspetto interessante di Matlab `e la possibilit`a di ottenere facilmente dei grafici. Si consideri ad esempio il seguente script, ossia una successione di istruzioni in Matlab (scritte mediante, ad esempio, MATLAB Editor/Debugger, l’editore implementato nel sistema) e salvato come un file matlab, ossia nome.m. % Script File: SinePlot % grafico della funzione sin(2*pi*x) con accuratezza crescente close all % chiude tutte le figure esistenti for n = [4 8 12 16 20 50 100 200 400] x = linspace(0,1,n); % costruisce una suddivisione in n parti uguali di [0,1]; % x vettore riga y = sin(2*pi*x); % y vettore dei valori della funzione in x plot(x,y) % grafico title(sprintf(’Plot di sin(2*pi*x) con n = %3.0f punti ’,n)) pause % arresto momentaneo dell’esecuzione; premere un tasto per ripartire end

Il seguente script per la stessa funzione produce una tabella di valori. % Script File: SineTable clc % Clear command window: annulla i precedenti comandi % sulla finestra dei comandi di Matlab n = 21; x = linspace(0,1,n); y = sin(2*pi*x); disp(’ ’) disp(’ k x(k) sin(x(k))’) disp(’------------------------’) for k=1:21 deg = (k-1)*360/(n-1); disp(sprintf(’ %2.0f %3.0f %6.3f ’,k,deg,y(k))); end disp( ’ ’); disp(’x(k) ` e dato in gradi.’) disp(sprintf(’Un grado = %5.3e radianti’,pi/180))

Ulteriori esemplificazioni sono fornite dai seguenti script. % Script File: Poligoni % grafici di alcuni poligoni regolari close all theta = linspace(0,2*pi,361); c = cos(theta); s = sin(theta); k=0; for lati = [3 4 5 6 8 10 12 18 24] passo = 360/lati; k=k+1; analisi numerica

c V. Comincioli

22

Idee introduttive

subplot(3,3,k) plot(c(1:passo:361),s(1:passo:361)) axis([-1.2 1.2 -1.2 1.2]) axis equal end

La figura (cfr. Figura 1.7) ottenuta pu` o essere salvata in un file di diverso formato (.bmp, .jpg, .ps, .eps,. . . ) e utilizzata per la stampa.

Figura 1.7 Alcuni poligoni regolari.

% grafico(efficiente)di un cerchio close all x = linspace(0,1,200); y = sqrt(1 - x.^2); plot(x,y) axis square equal hold on plot(x,-y); plot(-x,y); plot(-x,-y) hold off

 Esercizio 1.6 Se x=linspace(0,2*pi,100), y=sin(x); z=exp(-x);

scrivere un segmento di programma in matlab per tracciare il grafico della funzione e−x sin(x) sull’intervallo [0, 4π] senza ulteriori calcoli delle due funzioni.

Colore parametrico analisi numerica

c V. Comincioli

1.5 Esempi introduttivi di Matlab

23

co=[’y’ ’g’ ’m’ ’r’]; x=0:0.1:1; A=[]; figure for m=1:3 y=sin(2*m*pi*x); A=[A;y]; col=co(m); h=plot(x,y,col); hold on end figure k=plot(x,A) legend(k,’1’,’2’,’3’,-1) axis square % spirale di Archimede a=1; theta=0:pi/60:2*pi; rho=a*theta; polar(theta,rho); grid title(’spirale di Archimede, \rho= a \theta’) function[xt,yt]=rot2d(t,x,y) % rotazione (con centro l’origine) di un oggetto bidimensionale rappresentato % da due vettori riga x e y. L’angolo di rotazione t ` e dato in gradi. I vettori % trasformati sono dati in xt e yt. t1=t*pi/180; r=[cos(t1) -sin(t1); sin(t1) cos(t1)]; x=[x x(1)]; y=[y y(1)]; hold on; grid on; axis equal fill(x,y,’b’) z=r*[x;y]; xt=z(1,:); yt=z(2,:); fill(xt,yt,’r’) title(sprintf(’rotazione piana di %3.2f gradi’,t)) hold off ---% ad esempio: x=[1 2 3 2]; y=[3 1 2 4]; [xt,yt]=rot2d(75,x,y) %rappresentazione grafica di una funzione f=’(2*x-sqrt(2))*sin(2*x)’; fplot(f,[-1,2]) xlabel(’x’);ylabel(’f(x)’) title(’Rappresentazione grafica di una funzione’) hold on g=’exp(x)*cos(x)’; fplot(g,[-1 2], ’r’) legend(’f(x)=(2x-sqrt(2)) sin(2x)’, ’g(x)=e^x cos(x)’)

Il seguente √ programma visualizza in maniera geometrica il metodo di Newton per l’approssimazione di 2. analisi numerica

c V. Comincioli

24

Idee introduttive

Figura 1.8 Esempio di rappresentazione grafica. % radice2.m % Visualizza 4 iterazioni della costruzione geometrica della radice di due A=2; x(1)=1; for k=1:4 x(k+1)=0.5*(x(k)+A/x(k)); %metodo di Newton subplot(2,2,k); % successivi sottografici xp=[0 x(k) x(k) 0 0]; yp=[0 0 A/x(k) A/x(k) 0]; fill(xp,yp,’y’); % riempimento del rettangolo con colore y(ellow) xlabel(sprintf(’x(%d)=%4.3f’,k,x(k))); axis([0 A 0 A]); % definizione degli assi axis(’square’); % help axis end

I risultati ottenuti sono rappresentati in Figura 1.9. Il seguente script esamina graficamente la bont` a dell’approssimazione di una funzione mediante una funzione razionale fratta. ----------% Script File: ExpPlot % Esamina la funzione % f(x) = ((1 + x/24)/(1 - x/12 + x^2/384))^8 % come una approssimazione di exp(x) sull’intervallo [0,1]. close all x = linspace(0,1,200); num = 1 + x/24; denom = 1 - x/12 + (x/384).*x; quot = num./denom; y = quot.^8; plot(x,y,x,exp(x)) err=norm(y-exp(x),inf) %distanza nella norma del massimo

analisi numerica

c V. Comincioli

1.5 Esempi introduttivi di Matlab

25

Figura 1.9 Costruzione geometrica della radice di 2. Grafica in 3D % illustra le varie possibilit` a di rappresentazione grafica in 3D [x,y]=meshgrid(-2:0.1:2, -2:0.1:2); % x y matrici clf f=’x.*exp(-x.^2-y.^2)’; % definisce la funzione z=f(x,y) z=eval(f); % calcola la funzione in x, y) surf(x,y,z) pause colorbar pause mesh(x,y,z) pause meshc(x,y,z) pause surfc(x,y,z) pause pcolor(x,y,z) pause surf(x,y,z,gradient(z)) pause contour(x,y,z) pause plot3(x,y,z)

% superficie parametrica [r,theta]=meshgrid(0:0.1:2,0:0.1:6*pi) x=r.*cos(theta); y=r.*sin(theta); z=theta; surf(x,y,z) analisi numerica

c V. Comincioli

26

Idee introduttive

function cones(alpha) % 3-D di un cono con semiangolo alpha % provare alpha=0.5236 [X,Y]=meshgrid(-10:0.5:10, -10:0.5:10); Z=-sqrt(X.^2+Y.^2)/tan(alpha); i=find(Z0 i=1+fix(l*rand); xs=x(i); y=[y,xs]; x(i)=[]; l=l-1; end --------function y=rndprm(x) % permutazione random utilizzando una ricorsione %x=[x1 x2 ...] o x=’c1c2...’, xi numeri, ci caratteri [m,n]=size(x); if m> 1 error(’rndprm accetta solo vettori riga’) end if n0 & t=0.5 & t=1; b=1+b; else b=[b 1]; end a=b;

Il parametro di uscita a conta il numero di accessi alla funzione perman. L’istruzione persistent permette di ritenere in memoria la variabile b. Differisce dall’istruzione global per il fatto che le variabili persistent sono note solo alla funzione nella quale sono dichiarate. Media Aritmetica-Geometrica La media aritmetica-geometrica M (a, b) (AGM(a,b), agm(a,b)) di due numeri a e b `e definita nel modo seguente a0 = a, an+1

b0 = b an + bn = , 2

bn+1 =



an bn

function M=arigeo(a,b) % a,b vettori dello stesso ordine while any(abs(a-b) > 1.e-10) an=(a+b)/2; bn=sqrt(a.*b); a=an;b=bn; end M=b; %%%% variante ottimizzata function M=arigeo(a,b) I=find(abs(a-b)>1.e-12); while ~isempty(I) an(I)=(a(I)+b(I))/2; bn(I)=sqrt(a(I).*b(I)); a(I)=an(I);b(I)=bn(I); I=find(abs(a-b)>1.e-12) end M=b;

analisi numerica

c V. Comincioli

40

Idee introduttive

Figura 1.16 Media aritmetica-geometrica M (a, b) per a ≤ a, b ≤ 200. Le successioni an , bn sono monotone e limitate, inoltre si ha an+1 − bn+1 Tenendo conto che



bn <



√  1 an − 2 an bn + bn = (an + bn ) − an bn = 2 2

an si ha 1 an+1 − bn+1 < (an − bn ) 2

La Figura 1.16 mostra M (a, b) per a ≤ a, b ≤ 200. [x,y]=meshgrid(0:01:200,0:01:200); z=arigeo(x,y); [c,h]=contourf(z,20);clabel(c,h);colorbar

Tra i vari risultati interessanti relativi all’algoritmo della media aritmetica-geometrica ricordiamo la possibilit`a di calcolare gli integrali ellittici.

1.5.7

Strutture dati: array di celle e array di strutture

Array di celle Una array di celle (cell array) `e una array nella quale gli elementi sono celle (cells), ossia contenitori di matrici, testi, vettori di numeri complessi, ecc. A(1,1)={rand(2)}; A(1,2)={’text’}; A(2,1)={rand(5)}; A(2,2)={2+3i}; ------analisi numerica

c V. Comincioli

1.5 Esempi introduttivi di Matlab

41

Figura 1.17 cellplot. A = [2x2 double] ’text’ [5x5 double] [2.0000+ A{1,1} ans =0.9501 0.6068 0.2311 0.4860 ------celldisp(A) A{1,1} = 0.9501 0.6068 0.2311 0.4860 A{2,1} = 0.8913 0.4447 0.7621 0.6154 0.4565 0.7919 0.0185 0.9218 0.8214 0.7382 A{1,2} = text A{2,2} = 2.0000 + 3.0000i ------cellplot(A) %cfr. figura

3.0000i]

0.1763 0.4057 0.9355 0.9169 0.4103

0.8936 0.0579 0.3529 0.8132 0.0099

0.1389 0.2028 0.1987 0.6038 0.2722

Array di strutture Il significato di una array di strutture (structure array) `e illustrato dai seguenti esempi A=struct(’d’,16,’m’,23,’s’,47) A = d: 16 m: 23 s: 47 A.d ans = 16 A.m ans = 23 --------s = struct(’strings’,{{’hello’,’yes’}},’lengths’,[5 3]) s = strings: {’hello’ ’yes’} lengths: [5 3] s.lengths ans = 5 3 analisi numerica

c V. Comincioli

42

Idee introduttive

s.lengths(2) ans = 3

Mentre per le array di celle `e possibile accedere ai dati contenuti in base alla posizione che occupano, con le array di strutture `e possibile ai dati anche attraverso i loro nomi. Questa caratteristica consente di creare e utilizzare i database che contengono tipi di dati differenti (per esempio, un elenco di clienti con i loro indirizzi e numeri di telefono). Esempio 1.11 Il seguente m-file fstru calcola il valore, il gradiente e la matrice hessiana della funzione f (x) = (x1 − 1)2 + x1 x2 e li memorizza in una struttura function fx=fstru(x) fx.Value=(x(1)-1).^2+x(1).*x(2); fx.Gradient=[2*(x(1)-1)+x(2); x(1)]; fx.Hessian=[2 1; 1 0];

Ad esempio >> x=[2;1]; >> fx=fstru(x) fx = Value: 3 Gradient: [2x1 double] Hessian: [2x2 double] >> whos Name Size Bytes Class fx 1x1 428 struct array x 2x1 16 double array Grand total is 12 elements using 444 bytes >> fx.Gradient ans =3 2 >> fx.Hessian ans =2 1 1 0

 Esercizio 1.9 Creare una structure array che contiene i fattori di conversione delle unit`a di massa, forza e lunghezza fra sistema metrico SI e quello anglosassone. Utilizzare l’array per calcolare: • il numero di metri in 24 piedi (feet) • il numero di piedi in 65 metri • il numero di libbre (pound) equivalente a 18 newton • il numero di newton equivalente a 5 libbre • il numero di chilogrammi in 6 slug (slug `e l’unit`a di massa che subisce un’accelerazione di 1 piede/sec2 quando `e sottoposta alla forza di una libbra) • il numero di slug in 15 chilogrammi

analisi numerica

c V. Comincioli

Errors, like straws, upon the surface flow; He who would search for pearls must dive below.

John Dryden, All for love, 1677

CAPITOLO

2 Analisi degli errori

In questo capitolo esamineremo in particolare gli errori relativi all’uso di uno strumento di calcolo: la loro origine, la propagazione, e alcune tecniche per la loro valutazione. Ci` o `e in analogia a quanto avviene quando si usa in laboratorio uno strumento di misurazione: le misure ottenute hanno senso soltanto se `e nota la sensibilit` a , cio`e la capacit`a di discriminazione, dello strumento. Un calcolatore numerico `e in grado di rappresentare soltanto un numero finito di cifre; ne consegue la possibilit`a che un numero reale introdotto nel calcolatore venga approssimato; le operazioni elementari eseguite su tali numeri possono, a loro volta, produrre risultati non rappresentabili esattamente nel calcolatore. Pertanto, quando un algoritmo 1 viene eseguito su un calcolatore, si ha in generale una successiva creazione e propagazione di errori. Tali errori sono comunemente chiamati errori di arrotondamento, dal nome di una tecnica usuale per rappresentare i numeri reali sul calcolatore. Il risultato prodotto dall’algoritmo differisce, quindi, in generale dal risultato esatto, cio`e da quel risultato ideale che si potrebbe ottenere operando con tutte le cifre richieste. Senza un’idea, pi` u precisamente una maggiorazione della differenza dei due risultati, il risultato numerico pu` o essere del tutto illusorio. Infatti, esso pu` o dipendere dal numero di cifre usate e/o dall’ordine in cui vengono effettuate le operazioni (cio`e dal particolare algoritmo utilizzato). Nel seguito, per esaminare l’origine degli errori si analizzeranno brevemente alcune tecniche usuali di rappresentazione dei numeri reali su un calcolatore numerico, in modo da definire l’insieme dei cosiddetti numeri macchina. Successivamente si definiranno per tali numeri le operazioni elementari, cio`e le operazioni macchina e si studier` a il loro comportamento rispetto alla propagazione degli errori. Si analizzer` a quindi, pi` u in generale il comportamento, rispetto agli errori, di una successione di operazioni macchina, cio`e di un algoritmo. Importanti, in questo contesto, saranno i concetti di stabilit` a di un algoritmo e di condizionamento di un problema. A queste considerazioni premetteremo alcune notazioni e semplici definizioni ed una classificazione pi` u generale degli errori che si possono commettere quando si modellizza un problema reale. 1

Per il seguito, chiameremo algoritmo una successione finita di operazioni elementari, quale ad esempio la successione di istruzioni in un particolare linguaggio di programmazione, che indica in maniera precisa, senza ambiguit` a, come calcolare la soluzione (output) di un problema a partire da valori iniziali assegnati (input). La parola algoritmo `e derivata dal nome del matematico persiano Abu Ja’far Mohammed ibn Musa al-Khowarizm (c. 825; Khowarizm `e attualmente la citt` a russa di Khiva), autore del libro Kitab al jabr w’al-muqabala, da cui il termine algebra.

43

44

Analisi degli errori

Alcune notazioni Se a e b sono due numeri reali assegnati • a  b significa a “molto pi` u grande di” b; il significato preciso di “molto pi` u grande” dipende dal contesto. • a ≈ b, significa a “approssimativamente uguale a” b; anche qui il significato preciso dipende dal contesto e dalla precisione usata. Simboli di Landau Consideriamo due funzioni f, g definite su un intervallo I della retta reale R, con g(x) = 0 per x ∈ I. 1. Si dice che f `e di ordine “O grande” rispetto a g per x che tende a x0 ∈ I, quando esiste una costante C > 0 e un δ > 0, tali che    f (x)     g(x)  ≤ C per ogni x ∈ I con x = x0 e |x − x0 | < δ. Si scrive f (x) = O(g(x)) per x → x0 . 2. Si dice che f `e di ordine “o piccolo” rispetto a g per x che tende a x0 , quando per ogni costante C > 0 esiste un δ > 0 tale che    f (x)     g(x)  ≤ C per ogni x ∈ I con x = x0 e |x − x0 | < δ. Si scrive f (x) = o(g(x)) per x → x0 . Ad esempio, se f (x) `e una funzione continua sull’intervallo [0, 1] con f (0) = 0, allora f (x)= o(1) per x → 0. Se f (x) `e derivabile con derivata f  (x) continua su [0, 1], e quindi tale che |f  (x)| ≤ C per una costante C conveniente, si ha f (x) = O(x) per x → 0. Ricordiamo alcune propriet`a dei simboli di Landau. (1) f (x) = KO(g(x)) ⇒ f (x) = O(g(x)), per ogni K ∈ R; (2) f (x) = O(g1 (x)) e g1 (x) = O(g2 (x)) ⇒ f (x) = O(g2 (x)); (3) f1 (x) = O(g1 (x)), f2 (x) = O(g2 (x)) ⇒ f1 (x) f2 (x) = O(g1 (x) g2 (x)); (4) f (x) = O(g1 (x) g2 (x)) ⇒ f (x) = g1 (x) O(g2 (x)). Analoghe propriet`a valgono per il simbolo “o”. Se a ˜ `e un valore approssimato del numero reale a, si definisce Errore assoluto la quantit` a a ˜ − a. Errore relativo la quantit` a (˜ a−a)/a, se a = 0. Usualmente l’errore relativo `e dato in percentuale; ad esempio, 5% significa che l’errore relativo `e 0.05. L’errore pu` o essere, naturalmente, sia positivo che negativo. In generale, tuttavia, si `e interessati ad una sua limitazione positiva. La notazione a = a ˜ ± indica allora che |˜ a −a| ≤  e  rappresenta una limitazione dell’errore. Ad esempio, a = 0.7136 ± 0.0013 significa 0.7123 ≤ a ≤ 0.7149. Ricordiamo, tuttavia, che nella valutazione statistica degli errori si utilizza la notazione a = a ˜± per indicare l’errore standard o altre analoghe misure della deviazione dal valore medio. analisi numerica

c V. Comincioli

2.1 Sorgenti di errore

45

Nel caso in cui a rappresenti un vettore o una matrice, come misura dell’errore assoluto, e rispettivamente relativo, si pu`o assumere ˜ a − a, e rispettivamente ˜ a − a/a, ove  ·  rappresenta una opportuna norma di vettore o di matrice. ˜ Se la limitazione dell’errore in a ˜ `e inferiore a 12 10−t , con t intero fissato, allora si dice che a ha t cifre decimali corrette. Ad esempio, 0.001234 ± 0.000004 ha cinque cifre decimali corrette, mentre 0.001234 ± 0.000006 ne ha quattro. Nel primo caso si dice anche che la stima ha tre cifre significative (osserviamo che gli zeri iniziali non sono contati), mentre nel secondo caso si hanno due cifre significative. Il numero delle cifre corrette d` a una idea della grandezza dell’errore assoluto, mentre il numero delle cifre significative fornisce una idea della grandezza dell’errore relativo.

2.1

Sorgenti di errore

I risultati numerici possono essere influenzati da diversi tipi di errori . Pu` o essere di interesse una loro classificazione schematica, anche allo scopo di individuare quali di essi sono di maggior interesse per il seguito. 1. Semplificazioni introdotte nel modello Sono gli errori dovuti al fatto che, ad esempio, il modello `e supposto di tipo lineare, oppure si suppongono “trascurabili” alcune grandezze fisiche. In questo caso si parla di adeguatezza del modello. 2. Errori nei dati I dati di un problema sono il risultato, in generale, di misurazioni, che possono essere influenzate da errori sistematici e/o da errori random. Gli errori sistematici sono gli errori che dipendono dalla sensibilit`a dello strumento di misurazione. Gli errori random, invece, sono dovuti al verificarsi in concomitanza di eventi “imprevedibili”. La conoscenza o, pi` u realisticamente, una stima degli errori nei dati `e importante per il calcolo numerico. Da essa, infatti dipende, come vedremo, la scelta della precisione e dei test di arresto da utilizzare nella implementazione degli algoritmi. Mentre la stima degli errori sistematici non `e di competenza specifica dell’analisi numerica, la stima degli errori random pu` o essere ottenuta mediante opportune tecniche statistiche, in particolare mediante il metodo dei minimi quadrati. 3. Errori di arrotondamento nei dati e nei calcoli Sono gli errori introdotti nella rappresentazione dei numeri sul calcolatore. Essi sono l’oggetto principale di studio del presente capitolo. 4. Errori di troncamento Sono gli errori che si introducono quando un procedimento infinito `e approssimato mediante un procedimento finito. Per esempio, quando una derivata viene approssimata mediante un rapporto incrementale o un integrale mediante una formula di quadratura. Lo studio di questo tipo di errori costituir`a l’oggetto principale dei capitoli successivi. Nell’elenco precedente non sono stati incluse altre ovvie possibili cause di errore: ad esempio, gli errori umani di disattenzione in calcoli manuali, di introduzione dati, nonch´e gli errori che uno strumento di calcolo, software o hardware, pu` o commettere. analisi numerica

c V. Comincioli

46

2.2

Analisi degli errori

Rappresentazione dei numeri sul calcolatore

In questo paragrafo analizzeremo alcune tecniche di rappresentazione dei numeri reali su un calcolatore. Si tratta di un’analisi schematica, ma sufficiente per evidenziare gli aspetti essenziali di interesse per il calcolo numerico.

2.2.1

Rappresentazione dei numeri in differenti basi

In notazione posizionale a base 10 un simbolo come 67041 rappresenta il seguente numero intero 67041 = 6 · 104 + 7 · 103 + 0 · 102 + 4 · 101 + 1 · 100 I simboli 0 1 2 3 4 5 6 7 8 9 sono le cifre arabiche o decimali . Pi` u in generale, nel sistema decimale un numero intero positivo N viene espresso nella seguente forma N = dn 10n + dn−1 10n−1 + · · · + d0 100 e rappresentato con il simbolo N = dn dn−1 · · · d1 d0 ove le cifre dn , dn−1 , · · · , d1 , d0 sono numeri interi compresi tra zero e nove. Non vi `e una ragione intrinseca per usare la base 10. In realt` a, in altre civilt` a si `e fatto uso di basi diverse, ad esempio le basi 12, 20, 60. Nei calcolatori numerici, nei quali le cifre vengono rappresentate mediante stati fisici, `e conveniente rappresentare i numeri in un sistema a base 2, detto sistema binario 2 , nel quale le cifre si riducono ai due simboli 0, 1, detti anche bit (= binary digit). In un sistema avente come base un generico intero β > 1 si ha la rappresentazione N = (dn dn−1 · · · d1 d0 )β = dn β n + dn−1 β n−1 + · · · + d1 β 1 + d0 β 0

(2.1)

u piccolo di 10, per ove di , dette cifre (o digit), sono interi compresi tra 0 e β − 1. Se β `e pi` indicare le di si usano ancora le cifre decimali. In caso contrario, si devono introdurre ulteriori simboli; ad esempio, in base 16 le cifre sono 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F e sono dette ` interessante osservare che se β `e una potenza n-ma di 2, per rappresentare le cifre esadecimali. E cifre in tale base bastano n bits; ad esempio, per β = 24 le quaterne (0000)2 , (0001)2 , (0010)2 , . . ., (1111)2 corrispondono alle cifre esadecimali. Questo permette un immediato passaggio dalla base 2 alla base 2n . La scelta di una particolare base `e legata, in particolare, allo strumento di calcolo, tenendo conto del fatto che pi` u piccola `e la base e pi` u lunga risulta la stringa di cifre per rappresentare lo stesso numero. Al contrario, il numero di cifre necessarie `e pi` u piccolo quanto pi` u `e grande la base. Per un esempio illustrativo si veda la Tabella 2.1. 2 La notazione in base 2 pare essere stata usata per la prima volta nel 1605 da Harriot; tuttavia, la data di origine della numerazione binaria `e comunemente fatta risalire all’anno 1703 nel quale Leibnitz pubblic` o un lavoro completo sull’aritmetica in base 2. L’utilizzo di una base 12 fu suggerito da Pascal (1658). La notazione posizionale oggi utilizzata nella rappresentazione dei numeri `e fatta risalire ai babilonesi, che usavano la base 60, ancora oggi utilizzata nelle misure del tempo e degli angoli. L’introduzione in Europa della notazione posizionale in base 10 `e accreditata agli arabi (intorno agli anni 1000), che perfezionarono una notazione gi` a diffusa in India. La sua diffusione `e merito particolare di Leonardo Pisano (detto Fibonacci) con il suo Liber Abaci (1202).

analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

base 2 4 8

100011111 10133 437

47

base 12 16 32

1BB 11F 8V

Tabella 2.1 Rappresentazione in differenti basi del numero (287)10 . Fissato ora un numero β intero maggiore di 1, rappresentiamo nella base β un numero reale qualunque x. Ricordiamo il seguente importante risultato. Teorema 2.1 Dato un intero β > 1, un numero reale x diverso dallo zero pu` o essere espresso in forma univoca nella seguente forma x = sign(x)(d1 β −1 + d2 β −2 + d3 β −3 + · · · )β p = sign(x)mβ p

(2.2)

ove sign(x) = 1 se x > 0, sign(x) = −1 se x < 0, p `e un numero intero e le cifre d1 , d2 , d3 , . . . verificano le condizioni (i) 0 ≤ di ≤ β − 1 (ii) d1 = 0 e le di non sono tutte uguali a β − 1 a partire da un indice in poi. Il numero m = d1 β −1 + d2 β −2 + d3 β −3 + · · · viene detto comunemente la mantissa di x e β p la parte esponente; il numero p `e detto anche caratteristica di x. Grazie al fatto che d1 = 0, si ha che il numero reale m soddisfa alla seguente condizione 1 ≤m 0. Il numero zero `e rappresentato dal simbolo 0. + 0 1

0 0 1

1 1 10

× 0 1

0 0 0

1 0 1

Tabella 2.2 Addizione e moltiplicazione in base 2. Per le operazioni aritmetiche sui numeri rappresentati in una base β > 1, valgono le stesse regole e propriet` a formali note per l’aritmetica in base 10; naturalmente, si devono usare nuove tavole dell’addizione e della moltiplicazione. In Tabella 2.2 sono riportate come esempio quelle relative alla base β = 2. analisi numerica

c V. Comincioli

48

Analisi degli errori

2.2.2

Conversione della rappresentazione di un numero reale

La conversione di un numero in base β alla forma decimale pu` o essere ottenuta direttamente dall’espressione (2.2) operando in aritmetica decimale. La procedura `e illustrata dal seguente esempio (257)8 = 2 · 82 + 5 · 8 + 7 = (2 × 8 + 5) × 8 + 7 = 17510 Sottolineiamo il modo “nidificato” (nested) con il quale si `e calcolato il valore del polinomio di secondo grado per il valore 8 della variabile indipendente; con tale procedura, nota nel caso di un generico polinomio come algoritmo di Horner-Ruffini 3 , sono richieste solo 2 moltiplicazioni. In modo analogo si procede per un numero frazionario. Si esamini il seguente esempio. (.257)8 = 2 · 8−1 + 5 · 8−2 + 7 · 8−3 =

7 ( + 5)/8 + 2 /8 = (5.875/8 + 2)/8 = 2.734375/8 = (0.341796875)10 8 L’operazione inversa, cio`e il passaggio dalla rappresentazione decimale alla rappresentazione in una generica base β > 1 `e illustrata nei seguenti esempi. Esempio 2.1 Fornire la rappresentazione in base 16 e in base 2 del numero a1 = (0.1)10 . Il risultato pu` o essere ottenuto facilmente ricordando che 0.1 =

∞ 

2−4i + 2−4i−1



i=1

Procedendo comunque in maniera generale, si ha che la rappresentazione in base 16 del numero a1 ha la seguente forma d2 d1 d3 + 2 + 3 + ··· a1 = (0.1)10 = 16 16 16 ove 0 ≤ di < 16. Moltiplicando ambo i membri della relazione precedente per 16, si ottiene 16a1 = (1.6)10 = d1 + da cui d1 = 1 e a2 = (0.6)10 =

d3 d2 + + ··· 16 162

d3 d2 d4 + + + ··· 16 162 163

Iterando la procedura, si ha d4 d3 + 2 + ··· 16 16 e quindi d2 = 9 e a3 = (0.6)10 e il risultato diventa periodico. Pertanto (0.1)10 = (0.19999 · · · )16 . Poich´e (1)16 = (0001)2 e (9)16 = (1001)2 , si avr`a in definitiva 16a2 = (9.6)10 = d2 +

(0.1)10 = (0.19999 · · · )16 = (0.0001 1001 1001 · · · )2 L’esempio evidenzia il fatto importante che un numero reale pu`o avere una rappresentazione finita in una particolare base e infinita in altre. 3

Il metodo `e stato introdotto in maniera indipendente da P. Ruffini (1804) e da W. G. Horner (1819) [208]; in effetti il metodo era noto cinque secoli prima ai cinesi (Ch’in Chiu-Shao: Su-shu Chiu-chang (Nove sezioni di matematica, 1247)), che lo indicarono come metodo celestiale. analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

49

Esempio 2.2 Fornire la rappresentazione in base 8 del numero (375)10 .

Partendo dalla uguaglianza (375)10 = d0 + d1 · 8 + d2 · 82 + · · · e dividendo ambo i membri per 8, si ha 46 +

d0 7 = + d1 + d2 · 8 + · · · 8 8

Uguagliando le parti intere, e rispettivamente le parti frazionarie, si ottiene d0 = 7 e (46)10 = d1 + d2 · 8 + d3 · 82 + · · · Dividendo ancora per 8 si ottiene 5+

6 d1 = + d2 + d3 · 8 + . . . 8 8

da cui d1 = 6 e 5 = d2 + d3 · 8 + d4 · 82 + · · · Infine, dividendo per 8, si ha d2 5 + d3 + d4 · 8 + · · · 0+ = 8 8 e quindi d2 = 5 e d3 = d4 = · · · = 0. Pertanto (375)10 = (d2 d1 d0 )8 = (567)8

Le procedure descritte negli esempi precedenti corrispondono ai seguenti algoritmi generali. Se x `e un numero reale con 0 < x < 1 e rappresentato nel sistema decimale, le prime k cifre di nella rappresentazione in una base β > 1 possono essere calcolate iterativamente nel seguente modo, ove Int(x) significa la parte intera di x. Algoritmo 1.1 Calcolo delle prime k cifre nella rappresentazione in una base β > 1 di un numero x, con 0 < x < 1, rappresentato in base 10 . p = 1; (determinazione dell’esponente) while Int(x) = 0 do x = βx; p=p−1 end; i = 0; (determinazione delle cifre di ) repeat i = i + 1; di = Int(x); x = β(x − di ) until i = k; La rappresentazione in base β di un numero intero positivo x, rappresentato in base decimale, pu` o essere ottenuta col seguente algoritmo, ove mod(x, β) indica il resto della divisione fra gli interi x e β. Algoritmo 1.2 in base 10 .

Rappresentazione in base β > 1 di un numero intero x positivo rappresentato

c0 = x ; i = −1 repeat i =i+1 analisi numerica

c V. Comincioli

50

Analisi degli errori

di = mod(ci , β) ci+1 = Int(ci /β) until ci+1 = 0 k=i Si ha quindi: x = dk β k + dk−1 β k−1 + · · · + d1 β + d0 In definitiva, la rappresentazione in base β di un numero reale positivo x pu` o essere fatta nel modo seguente. Si pone x = x1 + x2 , dove x1 = Int(x), x2 = x − x1 < 1. La rappresentazione si ottiene, allora, applicando ad x2 l’Algoritmo 1.1 e ad x1 l’Algoritmo 1.2. Considerando ad esempio, il numero x = 238.75 si ha x1 = 238, x2 = 0.75, da cui x1 = (EE)16 , x2 = (0.C)16 e, quindi 238.75 = (EE.C)16 . Conversione di un numero da base 10 a base qualunque Calcolo delle prime k cifre nella rappresentazione in base 2 di un numero x, con 0 < x < 1, rappresentato in base 10. function [p,d]=bas10to2(x,k) % in forma normalizzata: d=mantissa; p=caratteristica % =2^p(d(1)*2^(-1)+d(2)*2^(-2)....) % esempio: x=0.1, k=12 p=1; while fix(x)==0 x=2*x; p=p-1; end i=0; while i 1 di un numero intero N positivo rappresentato in base 10. function a=convint(N,B) % funzione che converte un numero da base 10 a base qualunque % a: vettore contenente le cifre del numero convertito %N: numero intero da convertire % B: base in cui si deve convertire k=0; while (N~=0) & (k t; allora x `e un numero macchina ed `e rappresentato esattamente. 2. La caratteristica p non appartiene all’intervallo [L, U ]. Il numero non pu` o essere rappresentato esattamente. Se p < L, come ad esempio 1/8 nell’insieme di Figura 2.1, si dice che si verifica un underflow ; solitamente si assume come valore approssimato del numero x il numero zero. Alcuni compilatori, tuttavia, in presenza di questa situazione danno un avvertimento (warning); in particolari situazioni, infatti, l’introduzione di questi errori pu` o portare a situazioni inaccettabili. Se p > U si verifica un overflow e solitamente non si effettua nessuna approssimazione, ma il sistema di calcolo d` a un avvertimento pi` u drastico, come ad esempio, l’arresto del calcolo. 3. La caratteristica p appartiene all’intervallo [L, U ], ma le cifre di , per i > t, non sono tutte nulle. In questo caso si pone il problema di scegliere un suo rappresentante in F. Tale operazione viene indicata comunemente come operazione di arrotondamento (rounding), anche se in realt` a possono essere utilizzate tecniche di tipo diverso. Osservazione 2.1 (Lo standard 754 IEEE per i numeri Floating Point) Nel 1980, i principali costruttori di elaboratori elettronici, producevano calcolatori che utilizzavano i numeri float, ognuno con un proprio formato numerico e con proprie convenzioni di calcolo; tra questi, ricordiamo l’ANSI Fortran (5 bytes), il formato BCD (esadecimale, 6 Bytes). La necessita di dover scambiare dati tra elaboratori diversi, insieme alla necessit` a di definire uno standard di calcolo per il Floating analisi numerica

c V. Comincioli

54

Analisi degli errori

Point unico e soprattutto esente da errori, port` o all’istituzione da parte di IEEE di una commissione che studiasse una piattaforma di riferimento comune valida per i costruttori di hardware. Nel 1985 divenne operativo lo Standard 754 IEEE per i numeri in virgola mobile, e i maggiori costruttori tra cui Intel, Motorola, SPARC e MIPS adottarono questo standard per i loro processori matematici. Nel seguito ci limiteremo a dare le nozioni di base, rinviando ad esempio a link 12, [326] per un approfondimento. Lo Standard definisce quattro formati numerici, divisi in due gruppi, basic e extended, ognuno dei quali con due lunghezze, single e double. L’organizzazione del formato single precision basic `e mostrato nella Figura 2.3.

σ 0

e

f 8

31

Figura 2.3 Basic format, single precision. I componenti sono il segno σ (un bit), l’esponente e (otto bit), e la frazione f (23 bit); in totale 32 bit. Il valore v di un numero floating point x `e 1. Se e = 255 e f = 0, allora v `e NaN (Not-a-Number). 2. Se e = 255 e f = 0, allora v = (−1)σ ∞. 3. Se 0 < e < 255, allora v = (−1)σ (1.f ) 2e−127 . 4. Se e = 0 e f = 0, allora v = (−1)σ (0.f ) 2−126 (unnormalized, denormalized). 5. Se e = 0 e f = 0, allora v = (−1)σ 0 (zero). Il caso normale `e 3. Ad esempio, i numeri 1, 4.125, e -0.09375 = -3/32 sono memorizzati nel seguente modo 0 | 0 1 1 1 1 1 1 1 | 0 0 0 0 0 0 0 . . . . 0 | 1 0 0 0 0 0 0 1 | 0 0 0 0 1 0 0 . . . . 1 | 0 1 1 1 1 0 1 1 | 1 0 0 0 0 0 0 . . . .

0 0 0

Il pi` u grande e il pi` u piccolo numero positivo rappresentabili sono rispettivamente xmax = 2127 (2 − 2−23 ) ≈ 3.40 · 1038 e xmin 2−126 ≈ 1.18 · 10−38 e la cardinalit` a (numeri normalizzati) `e data da 224 · 254 ≈ 4.26 · 109 Una ragione per l’introduzione dell’entit` a NaN `e di rendere pi` u agevole l’operazione di debugging.5 Quando viene eseguita una operazione non valida (ad esempio 0/0), o quando `e utilizzata una variabile non inizializzata, il risultato dovrebbe essere un NaN, che contiene una informazione. In molti casi, non `e necessario terminare l’esecuzione di un programma quando si esegue una operazione non valida. Per lungo tempo era pratica comune porre il risultato uguale a zero quando l’operazione forniva un underflow. Lo standard IEEE definisce l’opzione ’gradual underflow’ (caso 4). I dettagli del formato extended single precision (utilizzata per l’implementazione delle operazioni) sono lasciati al costruttore, con il vincolo minimale che vi sia un bit segno σ, almeno 32 bit nella frazione e un esponente che deve soddisfare L ≤ e ≤ U, L ≤ −1023, U ≥ 1024 5

“the term bug originated in 1947 at Harward during he days of the Mark computer. The project was proposed and run by strong-willed Howard Aiken who continually emphasized reliability and speed. The electro-mechanical Mark II computer as experiencing inexplicable malfunctions. Finally, a researcher opened the cabinet and there, lodged between two relay contacts, was a dead moth. Grace Hopper, who later became instrumental in the development of COBOL, retrieved the moth and pasted in her logbook, alongside a notation about the ‘bug’ that caused the trouble.” analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

55

Il formato basic double precision `e definito in maniera analoga al formato single precision. Il segno σ `e un bit, l’esponente e 11 bit, e la frazione f `e 52 bit, in totale 64 bit. Si ha xmax = (2 − 2−52 ) 21024 ≈ 1.80 · 10308

xmin = 2−1022 ≈ 2.23 · 10−308

e la cardinalit` a (numeri normalizzati) `e data da 253 · 2046 ≈ 1.84 · 1019 . Le implementazioni dello standard IEEE forniscono le operazioni di addizione, sottrazione, moltiplicazione, divisione e radice quadrata, e le conversioni binario-decimale. Eccetto che per le conversioni, tutte le operazioni forniscono un risultato che `e uguale al numero arrotondato del risultato corretto (ossia, ottenuto con precisione infinita).

2.2.4

Operazione di arrotondamento

Sia x un numero reale positivo dato nella forma (2.2), diverso dallo zero e tale che p ∈ [L, U ]. Denotiamo con fl(x) il numero macchina, cio`e fl(x) ∈ F, che si ottiene in uno dei modi seguenti Troncamento: fl(x) = tronc(x) = β p p Arrotondamento: fl(x) = β tronc

t −i i=1 di β t+1 −i i=1 di β

1 + β −t 2



La definizione si adatta in maniera ovvia quando x `e negativo. Osserviamo che, se dt+1 < β/2 allora le due operazioni danno i medesimi risultati, altrimenti essi differiscono di β p−t . Nell’operazione di arrotondamento si pu`o verificare un overflow ; nell’esempio di Figura 2.1, si ha ad esempio fl(15/4) = 4. Sottolineiamo il fatto che nella sostituzione di x con fl(x) si ha l’origine degli errori di ar` importante, quindi, stabilire una stima, cio`e una maggiorazione della quantit` rotondamento. E a x − fl(x). In questa direzione abbiamo il seguente risultato. Proposizione 2.1 Sia x un numero reale rappresentato in base β  ∞ di β −i β p , d1 = 0, p ∈ [L, U ] x= i=1

Allora, se non si verifica una situazione di overflow, si ha la seguente maggiorazione    fl(x) − x    ≤ kβ 1−t   x

(2.8)

ove si ha k = 1 nel caso del troncamento (chopping)e k = 1/2 nel caso di arrotondamento (rounding). Dimostrazione. Considerando ad esempio il caso dell’arrotondamento, si ha |fl(x) − x| ≤

1 −t p β β 2

Ricordando che, dal fatto che d1 =  0, si ha m ≥ β −1 , si ottiene   1 −t p 1 −t  fl(x) − x    ≤ 2 β β ≤ 2 β = 1 β 1−t   x |m|β p β −1 2 analisi numerica

c V. Comincioli

56

Analisi degli errori

Si osservi che nella situazione di underflow l’errore relativo, che `e del 100% poich´e fl(x) = 0, non soddisfa alla maggiorazione (2.8). La quantit` a eps = kβ 1−t `e detta precisione macchina nel fissato sistema floating point. La sua importanza numerica `e data dalla seguente caratterizzazione: eps `e il pi` u piccolo numero macchina positivo tale che fl(1 + eps) > 1 (2.9) Se, ad esempio, β = 10, t = 8, si ha, nel caso di arrotondamento, eps = 5 · 10−8 , da cui x = 1 + eps = 1.00000005 = 0.100000005 · 101 con x ∈ / F; pertanto fl(x) = 1.0000001 > 1 Al contrario, fl(1.00000004) = 1. In sostanza, su un calcolatore che utilizza una particolare rappresentazione floating point, non ha senso cercare approssimazioni di numeri con precisione relativa inferiore alla corrispondente precisione macchina eps. A partire dalla propriet`a (2.9), `e possibile calcolare eps attraverso software. Osserviamo, infine, che un modo equivalente, e pi` u utile nelle considerazioni che seguiranno, di esprimere (2.8) `e il seguente fl(x) = x(1 + ),

con || ≤ eps

(2.10)

% alcuni risultati relativi relativi al sistema floating point close all;clc % p = pi` u piccolo intero positivo tale che 1+1/2^p = 1. % p=53; 2^(-53)=u (unit roundoff); 2^(-52)=eps (machine precision, epsilon) x=1; p=0; y=1; z=x+y; while x~=z y=y/2; p=p+1; z=x+y; end disp(sprintf(’p = %2.0f pi` u piccolo intero positivo tale che 1+1/2^p = 1.’,p))

>> 2^(-52) ans = 2.2204e-016 >> 2^(-53) ans = 1.1102e-016 --------1==eps+1 ans = 0 >> 1==eps1+1 ans =1 a=1+(eps1+1.e-31); a-1 %=eps per l’arrotondamento %= 0 se eps1+1.e-32 analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

57

Figura 2.4 Unit roundoff e machine precision.

% q = pi` u piccolo intero postivo tale che 1/2^q = 0. %q=1075 x=1; q=0; while x>0 x=x/2; q=q+1; end; disp(sprintf(’q = %2.0f is the smallest positive integer so 1/2^q = 0.’,q)) % r = smallest positive integer so 2^r = inf. x=1; r=0; while x~=inf x=2*x; r=r+1; end disp(sprintf(’r = %4.0f is the smallest positive integer so 2^r = inf.’,r))

2.2.5

Aritmetica in virgola mobile

Sull’insieme dei numeri macchina, che rappresenta una approssimazione dell’insieme dei numeri reali, si devono ridefinire le operazioni aritmetiche. Si tratta, cio`e, di introdurre una aritmetica di macchina. Il risultato di un’operazione aritmetica, anche nel caso in cui gli operandi sono numeri macchina, pu` o non essere un numero macchina per due motivi: si ha una situazione di underflow o di overflow, oppure il risultato ha un numero di cifre superiore alla precisione t. Per il seguito consideriamo in particolare questa seconda eventualit`a. Siano, pertanto, x, y due numeri appartenenti ad un particolare sistema floating point F(β, t, L, U ) e il risultato di un’operazione aritmetica con operandi x, y sia tale che p ∈ [L, U ]. Introduciamo, allora le seguenti definizioni di operazione macchina o operazioni floating point x ⊕ y = fl(x + y), analisi numerica

x  y = fl(x − y),

x  y = fl(x ∗ y),

x  y = fl(x/y) c V. Comincioli

58

Analisi degli errori

Analogamente si procede per la definizione di altre operazioni, che possono essere considerate “elementari”, come, ad esempio, l’operazione di estrazione di radice quadrata, il calcolo delle funzioni trigonometriche, del logaritmo. La definizione data di operazione macchina `e naturalmente semplificata e pu` o non corrispondere a delle situazioni reali, solitamente pi` u sofisticate, ma essa `e, tuttavia, sufficiente per la nostra analisi. L’errore relativo, introdotto da una operazione macchina pu` o essere calcolato utilizzando la maggiorazione (2.8). Indicando con il simbolo  una qualunque delle operazioni macchina precedenti e corrispondente all’operazione aritmetica ◦, si ha x  y = (x ◦ y)(1 + )

con

|| ≤ eps

(2.11)

La formula (2.11) pu` o essere riscritta in modi diversi, alcuni dei quali possono suggerire un’utile interpretazione degli errori di arrotondamento. Si consideri, come esempio, la seguente fl(x + y) = x(1 + ) + y(1 + )

(2.12)

L’equazione (2.12) dice, in sostanza, che l’operazione di somma macchina pu` o essere interpretata come la somma aritmetica esatta dei due numeri: x(1 + ), y(1 + ), che rappresentano delle perturbazioni dei numeri dati x, y. L’osservazione ora fatta rappresenta una prima semplice applicazione di una tecnica pi` u generale per lo studio della propagazione degli errori di arrotondamento. Per l’idea su cui si basa, tale tecnica `e detta analisi all’indietro, o backward analysis, e il suo studio verr` a ripreso successivamente. ` importante osservare che per le operazioni in virgola mobile gran parte delle propriet` E a dell’aritmetica nel campo reale possono non essere pi` u valide. In particolare, ad esempio si ha x ⊕ y = x,

se |y| <

eps |x| β

Inoltre, le operazioni macchina possono non verificare la propriet` a associativa e la propriet` a distributiva. Analizziamo, come esemplificazione, il seguente calcolo eseguito in aritmetica di macchina definita da β = 10, t = 8. Esempio 2.3 Dati i numeri macchina a :=

0.23371258 10−4

b := 0.33678429 102 c := −0.33677811 102 Si ha (I) (a ⊕ b) ⊕ c = 0.33678452 102  0.33677811 102 = 0.64100000 10−3 (II) a ⊕ (b ⊕ c) = 0.23371258 10−4 ⊕ 0.61800000 10−3 = 0.64137126 10−3 Il risultato esatto `e dato da a + b + c = 0.641371258 10−3 . analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

59

Il calcolo (II) fornisce come risultato il numero fl(a + b + c), cio`e un risultato ottimale nell’aritmetica di macchina fissata. Il risultato ottenuto con (I) ha, invece, soltanto tre cifre significative esatte, con un errore relativo ≈ 5.78 10−2. Vediamone le cause. In ambedue i calcoli si `e effettuata una sottrazione di due numeri con lo stesso segno e vicini, cio`e con un certo numero di cifre significative uguali. Nel calcolo (II) ci`o `e avvenuto nell’operazione b ⊕ c, mentre in (I) si `e verificato quando il risultato di (a ⊕ b) `e stato sommato a c. In situazioni di questo genere si verifica una cancellazione, cio`e le cifre comuni spariscono, con conseguente introduzione di quantit` a spurie 6 , ad esempio zeri. Il risultato dell’operazione, avendo un numero di cifre inferiore rispetto agli addendi, `e rappresentabile esattamente, cio`e `e un numero macchina. Tuttavia, mentre nel secondo caso l’operazione `e stata innocua, nel primo ha prodotto un grosso errore. La differenza tra i due casi `e la seguente. Nel secondo la cancellazione `e avvenuta tra i numeri di partenza, che per ipotesi sono supposti non affetti da errore; nel primo caso, invece, uno degli addendi, precisamente il termine a ⊕ b `e un valore arrotondato di a + b. Osserviamo, anche, che i due numeri a e b hanno ordine di grandezza diverso e nella somma il numero a contribuisce soltanto con le prime tre cifre, mentre le altre vanno perse nell’arrotondamento e, quindi, non compaiono pi` u nel risultato finale. Una ` situazione di questo tipo, in cui si verifica una perdita di cifre, `e anche indicata come effetto smearing. E praticamente la perdita di cifre che viene amplificata dall’operazione di cancellazione. Per una panoramica di ’disastri’ causati dagli errori di arrotondamento in situazioni reali (the patriot missile failure, the sinking of the Sleipner A offshore platform, the explosion of the Ariane 5 ), si veda il link 13.

Figura 2.5 Rappresentazione degli errori relativi corrispondenti al calcolo in doppia precisione (eps ≈ 2.2 10−16) di e−10 mediante due diversi algoritmi.

Dall’esempio precedente si ricava, in particolare, il fatto che la propriet` a associativa pu` o non essere valida per l’operazione di somma numerica. Inoltre, l’esempio ha evidenziato nella cancellazione una situazione delicata. A questo proposito possiamo riassumere le considerazioni precedenti osservando che l’operazione di cancellazione non `e una operazione pericolosa in se stessa; lo pu`o diventare quando viene eseguita su numeri arrotondati (pi` u in generale approssimati), in quanto amplifica gli errori contenuti nei dati. Sottolineiamo il fatto che, in sostanza, `e proprio la cancellazione la causa principale di instabilit` a (cio`e dell’amplificazione eccessiva degli 6

Il termine spurio qui sta a significare mancanza di informazione.

analisi numerica

c V. Comincioli

60

Analisi degli errori

errori) negli algoritmi. Come esemplificazione, in Figura 2.5 sono rappresentati gli errori relativi corrispondenti al calcolo di e−10 mediante due differenti algoritmi basati sull’utilizzo del seguente sviluppo in serie x2 x3 x4 ex = 1 + x + + + + ... 2! 3! 4! Pi` u precisamente, nell’algoritmo I si pone nello sviluppo precedente x = −10 e si calcolano per n ≥ 0 le seguenti somme parziali sn = 1 − 10 +

102 10n − · · · + (−1)n 2! n!

Nella figura `e rappresentata quindi la funzione n → |sn − e−10 |/e−10 . I risultati sono ottenuti in doppia precisione, corrispondente alla precisione macchina eps ≈ 2.2 10−16 . Nell’algoritmo II si pone x = 10 e si approssima il valore e−10 , per ogni n ≥ 0, nel seguente modo e−10 ≈

1 = e10 1 + 10 +

1 102 2!

+ ··· +

10n n!

Come si vede, i risultati pi` u accurati sono quelli ottenuti mediante l’algoritmo II, nel quale non sono presenti cancellazioni. I risultati ottenuti mediante l’algoritmo I si stabilizzano per n ≥ 59 sul valore 4.539992976248485 10−5 , mentre il valore esatto a 16 cifre `e dato da 4.539992962303128 10−5 . x=-10; exx(1)=1; ex(1)=1; for i=2:60 ex(i)=ex(i-1)*x/(i-1); exx(i)=(-1)^(i-1)*ex(i); end for i=1:60 sex(i)=sum(ex(1:i)); sexx(i)=1./(sum(exx(1:i))); end ii=1:60; rex=abs((sex-exp(-10))/exp(-10)); rexx=abs((sexx-exp(-10))/exp(-10)); semilogy(ii,rex,ii,rexx)

Come ulteriore esemplificazione, la Figura 2.6 rappresenta il grafico della funzione (x − 1)6 , calcolata in doppia precisione mediante lo sviluppo x6 − 6x5 + 15x4 − 20x3 + 15x2 − 6x + 1. Osserviamo che l’errore relativo, ad esempio nel punto x = 1.005, `e del 25%. --------------% Script File: Zoom % Plots (x-1)^6 vicini a x=1 a differenti scale close all k=0;n=100; for delta = [.1 .01 .008 .007 .005 .003 ] x = linspace(1-delta,1+delta,n)’; y = x.^6 - 6*x.^5 + 15*x.^4 - 20*x.^3 + 15*x.^2 - 6*x + ones(n,1); k = k+1; subplot(2,3,k) plot(x,y,x,zeros(1,n)) axis([1-delta 1+delta -max(abs(y)) max(abs(y))]) end analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

61

Figura 2.6 Grafico della funzione x6 − 6x5 + 15x4 − 20x3 + 15x2 − 6x + 1 calcolata in doppia precisione.  Esercizio 2.6 I seguenti numeri sono dati in un calcolatore a base 10 e precisione t = 4 (a) 0.4523 104,

(b) 0.2115 10−3,

(c) 0.2583 101

Eseguire le seguenti operazioni, e indicare l’errore nel risultato, supponendo di arrotondare 1. (a) + (b) + (c) 2. (a)/(c)

3. (a) − (b) − (c) 4. (a)(b)/(c)

 Esercizio 2.7 Dare esempi che mettano in evidenza il fatto che la maggior parte delle leggi, valide per le operazioni elementari nel campo dei numeri reali, possono non essere pi` u valide nell’aritmetica floating-point.

2.2.6

Propagazione degli errori

Conoscere come gli errori si propagano attraverso i calcoli `e senza dubbio un elemento importante nella valutazione dei risultati ottenuti, ma ugualmente interessante `e il contributo che tale conoscenza pu`o dare alla pianificazione dei calcoli e degli esperimenti. Introduciamo le idee e i risultati principali attraverso alcuni esempi particolari. Se x1 = 4.62 ± 0.02 e x2 = 2.84 ± 0.03, calcoliamo una limitazione dell’errore corrispondente al calcolo di x1 − x2 . Poich´e il massimo valore di x1 `e dato da 4.64 e il minimo valore di x2 `e dato da 2.81, si ha che il massimo valore di x1 − x2 `e dato da 4.64 − 2.81 = 1.83. Procedendo in maniera analoga, si trova che il minimo valore di x1 − x2 `e dato da 4.60 − 2.87 = 1.73. Pertanto si ha 1.73 ≤ x1 − x2 ≤ 1.83, da cui x1 − x2 = 1.78 ± 0.05 Pi` u in generale, se x1 = x ˜1 ± 1 , x2 = x ˜2 , si ha x ˜1 − 1 − (˜ x2 + 2 ) ≤ x1 − x2 ≤ x ˜1 + 1 − (˜ x2 − 2 ) ˜2 − (1 + 2 ) ≤ x1 − x2 ) ≤ x ˜1 − x ˜2 + (1 + 2 ) x ˜1 − x ˜1 − x ˜2 ± (1 + 2 ) x1 − x2 = x analisi numerica

c V. Comincioli

62

Analisi degli errori

In maniera del tutto analoga si ottiene ˜1 + x ˜2 ± (1 + 2 ) x1 + x2 = x Procedendo per induzione, si pu` o dimostrare il seguente risultato per un numero arbitrario di termini. Proposizione 2.2 Nella addizione e nella sottrazione, la limitazione sull’errore assoluto nel risultato `e la somma delle limitazioni sugli errori negli operandi. Naturalmente (e fortunatamente!) la limitazione ottenuta con il procedimento precedente pu`o essere una sovrastima dell’errore attuale, in quanto non si `e tenuto conto di eventuali compensazioni negli errori. Consideriamo ora la propagazione degli errori relativi nel calcolo di y = x1 − x2 , nell’ipotesi che xi = 0 e y = 0. Se ri , i = 1, 2 sono gli errori relativi sui dati, possiamo scrivere x ˜i = xi (1 + ri )

(2.13)

e quindi x ˜1 − x ˜2 = x1 (1 + r1 ) − x2 (1 + r2 ) = (x1 − x2 ) + x1 r1 − x2 r2 da cui

x1 x2 y˜ − y = r1 − r2 y y y

ove y˜ = x ˜1 − x ˜2 . Il risultato ottenuto mostra che gli errori relativi nei dati possono essere ` la situazione della amplificati nel risultato quando si esegue la differenza tra due numeri “vicini”. E cancellazione che abbiamo esaminato nel paragrafo precedente. Quando `e possibile, `e opportuno, quindi, riscrivere le formule in maniera da evitare il verificarsi di cancellazioni. Come semplice illustrazione, si consideri il calcolo della seguente espressione y = sin(1 + x) − sin(1) per |x|  1. Ad esempio, per x = 0.0123 e operando con arrotondamento alla terza cifra, si ottiene il valore y˜ = 0.006, mentre il valore esatto arrotondato alla terza cifra `e dato da 0.00658. Utilizzando note regole trigonometriche, si pu`o riscrivere l’espressione data nel seguente modo, “analiticamente” equivalente x x cos 1 + y = sin 2 2 In questa forma si ottiene come risultato numerico il valore 0.00654. Esaminiamo, infine, la propagazione degli errori relativi nelle operazioni di prodotto e divisione. Dati due numeri x1 , x2 come in (2.13), abbiamo ˜2 = x1 (1 + r1 )x2 (1 + r2 ) = x1 x2 (1 + r1 )(1 + r2 ) x ˜1 x L’errore relativo nel prodotto `e quindi dato da (1 + r1 )(1 + r2 ) − 1 = r1 + r2 + r1 r2 ≈ r1 + r2 , analisi numerica

se |r1 |  1, |r2 |  1 c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

63

Per esempio, se r1 = 0.02, r2 = −0.01, allora l’errore relativo nel prodotto `e 0.0098 ≈ 0.01. Procedendo in maniera analoga, si trova per l’errore relativo nel quoziente x1 /x2 r1 − r2 1 + r1 −1= ≈ r1 − r2 , 1 + r2 1 + r2

se

|r1 |  1, |r2 |  1

o quindi concludere che ρ1 + ρ2 `e Se ρi sono le limitazioni per gli errori relativi nei dati xi , si pu` una limitazione sia di |r1 + r2 | che di |r1 − r2 | e pertanto si ha il seguente risultato. Proposizione 2.3 Nella moltiplicazione e nella divisione la limitazione dell’errore `e maggiorata dalla somma delle limitazioni degli errori negli operandi. Vediamo una interessante applicazione del risultato precedente. Supponiamo che per il calcolo a x1 sia nota con una accuratezza assegnata, mentre x2 dell’espressione y = x1 x2 la quantit` sia da calcolare. Consideriamo, allora, il problema pratico di stimare l’accuratezza con la quale valutare la quantit` a x2 , tenendo presente che, in generale, maggiore accuratezza significa maggiore “difficolt` a” nel calcolo (ad esempio, la richiesta di strumenti pi` u precisi, eccetera). Dal risultato precedente abbiamo la seguente risposta al problema. Dal momento che la limitazione sull’errore relativo in y `e uguale alla somma delle limitazioni sugli errori relativi in x1 e in x2 , non `e conveniente cercare una valutazione di x2 “molto” pi` u accurata di quella di x1 . I risultati precedenti possono essere generalizzati nel seguente modo. Supponiamo di avere un generico problema definito da y = φ(x), con ⎤ ⎡ φ1 (x1 , . . . , xn ) ⎥ ⎢ .. 1 φ : D → Rm , φ(x) = ⎣ ⎦ , φ ∈ C (D) . φm (x1 , . . . , xn ) ˜i − xi (risp. ∆x := x ˜ − x) Sia x ˜ un valore approssimato di x. Indichiamo, allora, con ∆xi := x ˜). L’errore relativo relativo a x ˜i `e l’errore assoluto relativo a x ˜i (rispettivamente relativo a x definito dalla quantit` a x ˜i − xi , se xi = 0 x˜i := xi Se indichiamo con y˜ := φ(˜ x) il risultato corrispondente a x ˜, sviluppando in serie con arresto ai termini del primo ordine, si ha x) − φi (x) ≈ ∆yi := y˜i − yi = φi (˜

n

(˜ xj − xj )

j=1

=

n ∂φi (x) ∆xj , ∂xj

∂φi (x) ∂xj

(2.14)

i = 1, . . . , m

j=1

Le quantit` a ∂φi (x)/∂xj indicano come l’errore sulla componente xj del dato si amplifica sulla componente yi del risultato. Se yi = 0 per i = 1, . . . , m e xj = 0, per j = 1, . . . , n, si ha la seguente formula per gli errori relativi n xj ∂φi (x) y i ≈ x j (2.15) φi (x) ∂xj j=1

I numeri (xj /φi )∂φi /∂xj danno una indicazione sulla amplificazione degli errori relativi e sono chiamati numeri di condizionamento del problema. analisi numerica

c V. Comincioli

64

Analisi degli errori

2.2.7

Condizionamento di un problema

Dato un problema matematico possiamo, in maniera schematica, distinguere, per quanto riguarda la propagazione degli errori , il comportamento del problema e il comportamento di un particolare algoritmo utilizzato per risolvere tale problema. Nel primo caso, facendo l’ipotesi ideale di essere in grado di risolvere esattamente il problema, si `e interessati a vedere come eventuali perturbazioni sui dati del problema si trasmettono sui risultati. Per caratterizzare un problema rispetto a questo tipo di comportamento si utilizza comunemente il termine di condizionamento. Pi` u precisamente, si parla di problema bencondizionato (o malcondizionato) a seconda che nel particolare contesto le perturbazioni sui dati non influenzino (o influenzino) eccessivamente i risultati. Nel caso di un algoritmo, per indicare il suo comportamento rispetto alla propazione degli errori `e pi` u usuale il termine di stabilit` a . Si dir` a quindi algoritmo stabile (o instabile) un algoritmo nel quale la successione delle operazioni non amplifica (o amplifica) eccessivamente gli errori di arrotondamento. La distinzione tra il condizionamento di un problema e la stabilit` a di un algoritmo `e importante perch´e, mentre per un problema bencondizionato `e possibile, in generale, trovare algoritmi stabili, per un problema malcondizionato pu` o essere opportuna una sua riformulazione. Molti problemi importanti nella scienza e nell’ingegneria sono problemi inversi; ossia, dato un sottoinsieme D di uno spazio lineare normato F1 , uno spazio lineare normato G e una trasformazione A : G → F1 , si cerca per un elemento f ∈ D di calcolare u ∈ G tale che Au = f Tale problema `e chiamato ben posto secondo Hadamard (correctement pos´e )7 quando sono soddisfatte le seguenti tre condizioni (1) Esistenza. Per ogni f ∈ D, esiste un elemento u ∈ G tale che Au = f . (2) Unicit` a . Vi `e al pi` u un elemento u tale che tale che Au = f . (3) Continuit` a . La trasformazione f → u `e continua. Un problema che non `e ben posto `e detto mal posto. Esempio 2.4 (Equazione della diffusione all’indietro) Posto I = (0, 1), consideriamo il problema del calcolo di u(x, t) che verifica l’equazione ut = uxx

per (x, t) ∈ I × R

con condizioni ai limiti nulle e condizione iniziale u(·, 0) = f . Sia F1 = G = L2 (I). Posto, per ogni t ∈ R e √ uj (x) = 2 sin(jπx), con j intero positivo ⎧ ⎫ ∞ ⎨ ⎬ 2 2 D = Dt = f ∈ F1 : |(f, uj )|2 e−2j π t < ∞ ⎩ ⎭ j=1

7

Sur les probl`emes aux d´eriv´ees partielles et leur signification physique, Princeton Univ. Bull. 13, 49—52(1902). Si veda anche J. Hadamard, Lectures on the Cauchy Problem in Linear Partial Differential Equations, Dover, New York, 1952. analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

65

allora per ogni f ∈ D St f =

∞ X

(f, uj )e−j

2

π2 t

uj

j=1

`e la soluzione del problema al tempo t. 2 2 Se t < 0, ossia si cerca di risolvere il problema all’indietro, si vede che, poich´e St uj = e−j π t uj per tutti gli interi j, l’operatore St non `e limitato, ossia non esiste una costante M tale che sup

kSf k ≤ M

f ∈D,kf k≤1

Essendo lineare, l’operatore S non `e neppure continuo e il problema della diffusione all’indietro `e mal condizionato.

Illustreremo ora i concetti precedenti mediante alcuni esempi.

2.2.8

Errori, accuratezza, e numero di condizionamento

Per una funzione assegnata f (x), supposta di regolarit`a come richiesta dal contesto e di cui si vuole calcolare lo zero, il valore calcolato f˜(x) differisce usualmente dal valore esatto f˜(x) = f (x) + e(x) L’errore e(x) `e dovuto a differenti sorgenti. Pu`o essere, ad esempio, dovuto agli errori di arrotondamento, nel qual caso esso si comporta in maniera irregolare. Contestualmente, pu`o essere presente un errore di troncamento nel calcolo della funzione f (x). Anche se l’errore e(x) `e incognito, e quindi non `e possibile prevedere esattamente il suo effetto sul calcolo dello zero della funzione f (x), `e ugualmente importante studiare il problema dell’accuratezza con la quale `e possibile calcolare lo zero della funzione approssimata, in quanto tale studio pu`o dare utili indicazioni sugli algoritmi da scegliere nei casi concreti e su quale precisione macchina utilizzare nel calcolo. Sia x∗ uno zero di f , e supponiamo di conoscere una limitazione  sulla grandezza dell’errore, ossia |e(x)| ≤  ⇐⇒ − ≤ e(x) ≤  Se x1 `e un punto per il quale f (x1 ) > , allora ˜ 1 ) = f (x1 ) + e(x1 ) ≥ f (x1 ) −  > 0 f(x ˜ 2 ) `e negativa ˜ 1 ) ha lo stesso segno di f (x1 ). In maniera analoga, se f (x2 ) < −, allora f(x ossia, f(x come f (x2 ), e per il teorema sulle funzioni continue si ha uno zero tra x1 e x2 . Pertanto, quando ˜ |f (x)| >  i valori di f(x) danno informazioni corrette sulla locazione dello zero della funzione. Sia [a, b] l’intorno pi` u grande del punto x∗ per il quale x ∈ [a, b] ⇒ |f (x)| ≤  Dentro l’intervallo [a, b] i valori di f˜(x) non possono dare informazioni utili per il calcolo della radice, in quanto essi possono essere positivi, o negativi, o nulli indipendentemente dal segno di f (x). L’intervallo [a, b] `e un intervallo di incertezza per lo zero x∗ : si conosce che x∗ `e in esso, ma non vi `e possibilit`a (con la precisione utilizzata) di diminuire ulteriormente la sua ampiezza. Un algoritmo `e stabile quando `e in grado di fornire l’intervallo [a, b]. analisi numerica

c

V. Comincioli

66

Analisi degli errori

eps

eps

b

a

a

b

Figura 2.7 Radice mal condizionata e rispettivamente ben condizionata. L’ampiezza dell’intervallo di incertezza dipende dal problema particolare considerato. Quando `e “piccolo”, si dice che il problema `e ben condizionato. Un algoritmo stabile risolver`a quindi accuratamente un problema ben condizionato. Viceversa, quando [a, b] `e “grande” il problema `e mal condizionato. Nessun algoritmo, anche stabile, `e in grado di fornire una soluzione accurata per un problema mal condizionato. L’unica possibilit` a di aumentare l’accuratezza consiste nella diminuzione dell’errore e(x). Un numero che quantifica il grado di mal condizionamento di un problema `e chiamato un numero di condizionamento. Cerchiamo tale numero per il problema della ricerca della radice della funzione f nell’ipotesi che f  (x∗ ) = 0. Dall’approssimazione f (x) ≈ f (x∗ ) + f  (x∗ )(x − x∗ ) = f  (x∗ )(x − x∗ ) si ricava che |f (x)| ≤  quando |f  (x∗ )(x − x∗ )|  . Pertanto  |x − x∗ |   |f (x∗ )|



 [a, b] ≈ x∗ −

  , x∗ +   |f (x∗ )| |f (x∗ )|



Ne segue che il numero 1/|f  (x∗ )| fornisce una indicazione di quanto l’errore `e amplificato nella soluzione, e fornisce quindi un numero di condizionamento del problema della ricerca della radice: quando la derivata `e grande il problema `e bencondizionato, mentre `e piccola il problema `e mal condizionato (per una illustrazione si veda Figura 2.7). Esempio 2.5 Per il calcolo dei seguenti integrali, per n=1,2,. . .  In = analisi numerica

0

1

xn dx x+5 c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

67

si pu` o utilizzare la seguente formula ricorrente In + 5In−1 =

1 n

(2.16)

che risulta dalla seguente osservazione  1 n−1  1  1 n 1 x + 5xn−1 x (x + 5) In + 5In−1 = dx = dx = xn−1 dx = x+5 x+5 n 0 0 0 Osservato che il valore di I0 pu` o essere calcolato analiticamente mediante la formula  5  1 dx I0 = = ln(x + 5) 0 = ln 6 − ln 5 ≈ 0.1823 x + 5 0 si possono calcolare i successivi valori di In , n = 1, 2, . . . ponendo In =

1 − 5In−1 n

Osservando che che la formula ricorrente (2.16) pu`o essere riscritta nella seguente forma In−1 =

1 In − 5n 5

(2.17)

si ha un algoritmo iterativo alternativo. Naturalmente, non `e possibile conoscere il valore esatto di In per n ≥ 1; possiamo, tuttavia, stimare tale valore per n sufficientemente grande osservando che la successione In tende a zero. function [VI, VIN]=cinte(n) % I0=log(6/5); I0n=0; VI(1)=I0; VIN(n+1)=I0n; for i=1:n Iin=(1/(n-i+1)-I0n)/5; I1=1/(i)-5*I0; VI(i+1)=I1; VIN(n-i+1)=Iin; I0=I1; I0n=Iin; end --------function y=fp1(x,n) y=x.^n./(x+5); --------n=26; [vi vin]=cinte(n); for i=1:n+1; Q(i)=quad(@fp1,0,1,[],[],i-1); end [vi’,vin’, Q’,Q’-vi’, Q’-vin’] ans = 0.1823 0.0884 0.0580 0.0431 0.0343

0.1823 0.0884 0.0580 0.0431 0.0343

analisi numerica

0.1823 0.0884 0.0580 0.0431 0.0343

0.0000 -0.0000 0.0000 -0.0000 0.0000

0.0000 -0.0000 0.0000 -0.0000 0.0000

c V. Comincioli

68

0.0285 0.0243 0.0212 0.0188 0.0169 0.0154 0.0141 0.0130 0.0120 0.0112 0.0105 0.0099 0.0094 0.0087 0.0092 0.0042 0.0264 -0.0866 0.4764 -2.3401 11.7405 -58.6639

Analisi degli errori

0.0285 0.0243 0.0212 0.0188 0.0169 0.0154 0.0141 0.0130 0.0120 0.0112 0.0105 0.0099 0.0093 0.0088 0.0084 0.0080 0.0076 0.0073 0.0070 0.0065 0.0077 0

0.0285 0.0243 0.0212 0.0188 0.0169 0.0154 0.0141 0.0130 0.0120 0.0112 0.0105 0.0099 0.0093 0.0088 0.0084 0.0080 0.0076 0.0073 0.0070 0.0067 0.0065 0.0062

-0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0002 -0.0007 0.0038 -0.0188 0.0939 -0.4694 2.3468 -11.7340 58.6701

-0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0002 -0.0012 0.0062

La ragione di quanto ottenuto va ricercata nel fatto che l’errore di arrotondamento  commesso nel calcolo di I0 , che `e dell’ordine di 5 · 10−5 , `e moltiplicato per −5 nel calcolo di I1 , che ha quindi un errore di −5. Allora l’errore in I2 `e 25, e via di seguito. A questi errori vanno aggiunti naturalmente quelli commessi nei vari passi del calcolo.

Figura 2.8 Grafico della funzione x20 /(x + 5). Possiamo, pertanto, concludere che l’algoritmo precedente non `e di interesse pratico, almeno per n grande. Esso rappresenta un esempio di instabilit` a numerica. Nel secondo algoritmo l’errore commesso sul valore I26 , assunto uguale a zero viene successivamente diviso per 5. Si tratta quindi di un algoritmo stabile.

Vediamo ora alcuni esempi di problemi malcondizionati. Esempio 2.6 Calcolo delle radici dell’equazione (x − 2)2 = 10−6 ,

ossia: P (x, α) := x2 − 4x + α = 0, α = 4 − 10−6

Per α = 4, le radici sono coincidenti: x1 = x2 = 2, mentre per α = 4 − 10−6 , che corrisponde a una perturbazione relativa del termine noto di 10−6 , si hanno le radici 2 ± 10−3 . La perturbazione relativa nei dati si `e quindi amplificata nei risultati di un fattore 103 . analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

69

Esempio 2.7 Risoluzione del sistema lineare 

+ +

6x1 61.5x1

61.5x2 630.55x2

= =

7.259 74.4843

(2.18)

Il sistema (2.18) rappresenta il sistema delle equazioni normali corrispondente al seguente problema dei minimi quadrati. Pi` u precisamente, date le coppie di punti τi f (τi )

10.0 1.000

10.1 1.200

10.2 1.25

10.3 1.267

10.4 1.268

10.5 1.274

si cercano x1 , x2 , che minimizzano la funzione $ %2 f (τi ) − x1 − x2 τi i

Ponendo uguali a zero le derivate rispetto a x1 , x2 , si ottiene il sistema (2.18). La soluzione esatta `e data da x1 = −3.44952372, x2 = 0.45457142. Supponendo di rappresentare il sistema in una aritmetica floating-point decimale con t = 4, si ha: fl(630.55) = 630.6, fl(74.4843) = 74.48. La soluzione esatta del sistema cos`ı perturbato `e la seguente x1 = −2.218222217, x2 = 0.3344444 Un errore relativo di 10−4 nei dati ha prodotto un errore relativo dell’ordine dell’unit` a nei risultati. Sottolineiamo che ci`o `e dovuto esclusivamente al problema e non ad un metodo numerico o ad una particolare aritmetica floating-point utilizzata nei calcoli. Il sistema lineare (2.18) `e quindi un esempio di problema malcondizionato. Nel successivo Capitolo 4 introdurremo una misura del condizionamento (numero di condizionamento µ(A)) di una matrice A in corrispondenza alla risoluzione di un sistema lineare. In queso caso si ha µ = 3.105 , ossia un numero molto grande ` interessante osservare che se come base dei polinomi, anzich´e 1, τ , si utilizza la seguente: 1, τ − 10, E si ottiene al contrario un sistema bencondizionato per lo stesso insieme di dati. In questo caso, quindi, una riformulazione opportuna del problema ha migliorato il suo condizionamento.

Esempio 2.8 Approssimazione mediante funzioni esponenziali. Si tratta di un problema importante in diverse applicazioni, in particolare la chimica, la biologia, la fisica, dove si hanno fenomeni corrispondenti a reazioni con costanti di velocit`a differenti. Il seguente esempio, attribuito a Lanczos, mostra come il problema della determinazione numerica, a partire da dati sperimentali, dei parametri di una combinazione di funzioni esponenziali pu` o essere un problema estremamente malcondizionato. Infatti, le seguenti tre funzioni f1 (x) = 0.0951 e−x + 0.8607 e−3x + 1.5576 e−5x f2 (x) = 0.305 e−1.58x + 2.202 e−4.45x f3 (x) = 0.041 e−0.5x + 0.79 e−2.73x + 1.68 e−4.96x nell’intervallo 0 ≤ x ≤ 1.2 danno risultati che coincidono nelle prime due cifre significative; in effetti, si ha max0≤x≤1.2 |f1 (x) − f2 (x)| = 0.0064, max0≤x≤1.2 |f1 (x) − f3 (x)| = 0.0055, max0≤x≤1.2 |f2 (x) − f3 (x)| = 0.0093. Come conseguenza, si ha che se i dati sperimentali sono noti a due cifre, non ha praticamente significato considerare il problema della identificazione dei parametri con questo tipo di funzioni.

analisi numerica

c V. Comincioli

70

Analisi degli errori

 Esercizio 2.8 Studiare la propagazione dell’errore nel calcolo delle seguenti espressioni √ (1) x(x + 3) + 3; (2) (x + 1)2 (x + 1); (3) x2 x; √ √ √ √ x− y x+ y (5) √ √ ; (6) √ √ , x, y > 0 x+ y x− y

 (4) ( x2 + 1 − x)x

 Esercizio 2.9 Dato il sistema lineare



a11 x1 + a12 x2 = b1 a21 x1 + a22 x2 = b2

considerare la soluzione x = [x1 , x2 ]T come funzione dei coefficienti aij ∈ R e dei termini noti bi , i = 1, 2; j = 1, 2. Calcolare quindi i numeri di condizionamento di tale problema, cercando condizioni sufficienti affinch´e il problema sia ben condizionato.

 Esercizio 2.10 Calcolare la distanza focale f di una lente usando la formula 1 1 1 = + f a b ove a = 32 ± 1 mm e b = 46 ± 1 mm. Fornire una stima dell’errore.

2.2.9

Tecniche di controllo degli errori

L’analisi effettuata nei paragrafi precedenti `e un’analisi di tipo in avanti (forward analysis), nel senso che esamina e segue gli errori mentre vengono introdotti e propagati. Essa pu` o essere utilizzata per chiarire i concetti e trattare algoritmi semplici. Tuttavia, per un tipico algoritmo numerico, in cui il numero dei passi intermedi `e in generale alto, tale tipo di analisi pu`o divenire impraticabile. Per questo motivo possono essere utili altre idee. Vediamone le principali. Analisi all’indietro (backward analysis) L’idea deriva dall’osservazione che un’operazione macchina pu` o essere interpretata come una operazione esatta su operandi perturbati. Pi` u in generale, nell’analisi all’indietro (backward analysis), si cerca di trovare le perturbazioni sui dati che riproducano, operando con aritmetica esatta, i risultati calcolati. In sostanza, in questo tipo di analisi gli effetti degli errori di arrotondamento commessi durante il calcolo vengono idealmente trasferiti sui dati iniziali. In questo modo per una stima dell’errore si possono utilizzare i risultati relativi al condizionamento di un problema. Naturalmente, la difficolt` a principale nell’applicazione del metodo consiste nel riuscire a ricavare delle stime significative degli errori. Una applicazione interessante dell’idea verr` a indicata nel seguito a proposito della risoluzione di un sistema lineare con il metodo di eliminazione. Vediamo ora un caso particolare, ma ugualmente interessante. Esempio 2.9 Consideriamo il problema del calcolo di un prodotto di n numeri reali: x1 x2 . . . xn . Si ha fl(x1 x2 · · · xn ) = x1 x2 (1 + 2 )x3 (1 + 3 ) · · · xn (1 + n ) analisi numerica

c V. Comincioli

2.2 Rappresentazione dei numeri sul calcolatore

71

ove |i | ≤ eps, i = 2, 3, . . . , n. Ne segue | fl(x1 x2 · · · xn ) − x1 x2 · · · xn | = |x1 x2 · · · xn | ove  = |(1 + 2 )(1 + 3 ) · · · (1 + n ) − 1| e quindi  ≤ (1 + eps)n−1 − 1. Assumendo ad esempio che (n − 1) eps < 0.1, si ha ((n − 1) eps)2 + ··· (1 + eps)n−1 < e(n−1) eps = ((n − 1) eps) + 2!

(n − 1) eps 2 (n − 1) eps +( ) + ··· < (n − 1) eps 1 + 2 2

0.05 < (n − 1) eps 1 + < 1.06(n − 1) eps 1 − 0.05 e quindi:  < 1.06(n − 1) eps.

Uso delle perturbazioni sperimentali L’idea `e semplice, anche se pu`o essere talvolta eccessivamente costosa: si esegue il calcolo pi` u volte a partire da diversi dati perturbati (ad esempio, generati in forma random) e usando precisioni diverse (semplice, doppia, quadrupla ecc.). Questa analisi pu`o fornire utili informazioni non solo per stimare gli errori, ma anche per capire meglio il problema. Una difficolt` a nell’applicazione dell’idea pu` o consistere nel riuscire a pianificare in maniera ottimale le esperienze, ma questa `e una difficolt`a comune nella validazione di un qualsiasi modello e pu` o essere superata combinando una conoscenza approfondita del problema ad una buona dose di intuizione. Controllo automatico degli errori: aritmetica dell’intervallo Un modo per controllare in maniera automatica, cio`e mediante il calcolatore stesso, gli errori di arrotondamento, consiste nel mantenere solo quelle cifre che sono ritenute significative, utilizzando la cosiddetta aritmetica floating non normalizzata: in pratica non si introducono gli zeri spuri . L’idea presenta alcuni aspetti negativi, quale ad esempio il fatto che, conservando meno cifre, gli errori commessi nelle operazioni, sono in generale pi` u larghi. Per questi motivi, dopo la proposta, che risale al 1962, l’idea non ha avuto molto successo. Per un approfondimento si veda ad esempio Sterbenz [381]. Un’altra idea per controllare automaticamente l’accuratezza dei calcoli `e l’analisi dell’intervallo sviluppata in particolare da Moore [302]. In essa si cerca di fornire una limitazione all’errore assoluto commesso in un algoritmo a causa degli arrotondamenti e degli errori nei dati. Il principio su cui si basa il metodo consiste nell’associare ad un numero reale a, anzich´e un numero macchina, un intervallo definito da numeri macchina, cio`e a → a ˜ := [a , a ],

a , a ∈ F (insieme dei numeri macchina)

Le operazioni macchina sono allora definite come operazioni tra intervalli. Una generica operazione τ tra intervalli si definisce come il pi` u piccolo intervallo, con estremi dati da numeri macchina, ˜ c˜ = a ˜ τ b tale che ˜, b ∈ ˜b} c˜ ⊃ {a τ b| a ∈ a analisi numerica

c V. Comincioli

72

Analisi degli errori

Ad esempio nel caso della somma, si ha [c , c ] = [a , a ]  [b , b ] c := max{t ∈ F | t ≤ a + b }, c := min{t ∈ F | t ≥ a + b } Analogamente per la moltiplicazione (assumendo ad es. a > 0, b > 0) [c , c ] = [a , a ]  [b , b ] c := max{t ∈ F| t ≤ a × b }, c := min{t ∈ F| t ≥ a × b } Tale aritmetica pu`o essere implementata facilmente sul calcolatore, anche se, chiaramente, con un maggiore tempo di calcolo (ma non necessariamente per i calcolatori a pi` u processori). I risultati cos`ı ottenuti, sono degli intervalli, che contengono la soluzione esatta. Tuttavia, affinch´e il metodo sia efficace occorre che l’intervallo ottenuto per i risultati sia il pi` u stretto possibile, altrimenti la stima degli errori `e troppo pessimistica. L’esempio, che segue, illustra questo aspetto del metodo. Esempio 2.10 Il problema `e il calcolo di y = φ(x) = x3 − 3x2 + 3x che risolviamo con due diversi algoritmi. Algoritmo 1. Mediante lo schema di Horner: ((x − 3)x + 3)x si ha u := x − 3; v := u × x; w := v + 3; y := w × x Supponiamo che il valore x sia dato come intervallo:x ∈ x˜ = [0.9, 1.1]. Si ha allora φ(0.9) = 0.999, φ(1.1) = 1.001. Utilizzando l’aritmetica dell’intervallo e mantenendo nel calcolo tutte le cifre significative, si ha y˜ = [0.621, 1.419] che risulta largo rispetto al vero intervallo [0.999, 1.001]. D’altra parte operando in virgola mobile a 2 cifre si ottiene y = 0.99 sia per x = 0.9 che per x = 1.1. Algoritmo 2. Trasformiamo il problema nella forma y = φ(x) = 1 + (x − 1)3 In questo caso l’aritmetica dell’intervallo fornisce la stima y˜ = [0.999, 1.001] che risulta decisamente pi` u significativa di quella ottenuta con l’algoritmo precedente. In aritmetica floating-point a 2 cifre si ottiene y = 1.0 sia per x = 0.9 che per x = 1.1.

L’esempio suggerisce la seguente conclusione. Per una applicazione conveniente della aritmetica dell’intervallo pu` o essere opportuna una ristrutturazione degli algoritmi e quindi, in generale nuovi algoritmi. Per un approfondimento si veda ad esempio Moore [302]. analisi numerica

c V. Comincioli

2.3 Complementi e Problemi

73

Analisi statistica degli errori In questo tipo di analisi si assume che l’errore relativo  causato dall’arrotondamento durante le operazioni elementari, sia una variabile random a valori nell’intervallo [− eps, eps]. Si tratta, chiaramente di una ipotesi di comodo, in analogia a quanto viene fatto per l’esperimento del lancio di una moneta, il cui risultato potrebbe essere “previsto” conoscendo tutte le condizioni fisiche di contorno che hanno dato origine al lancio. Si assume inoltre che gli errori di arrotondamento dovuti alle differenti operazioni siano delle variabili random indipendenti . Indicando con µ il valore medio e con σ2 la varianza della distribuzione, si ha σ2 = E( − E())2 = E(2 ) − (E())2 = µ2 − µ2 Se per semplicit`a assumiamo che la distribuzione sia di tipo uniforme sull’intervallo [− eps, eps], si avr` a  eps 1 1 µ := E() = 0, σ2 = t2 dt = eps2 =: 2 2 eps − eps 3 In realt`a la media e la varianza possono dipendere dal calcolatore particolare usato e quindi dovrebbero essere valutate sperimentalmente. Il risultato x di un algoritmo `e esso stesso una variabile casuale con valore medio µx e varianza σx2 , con σx2 = E(x − E(x))2 = E(x2 ) − (E(x))2 = µx2 − µ2x La varianza d` a un’idea della affidabilit` a del risultato, nel senso che pi` u `e piccola la varianza, pi` u accurato `e il risultato. La stima ottenuta pu` o essere, come nel metodo precedente, troppo pessimistica se l’algoritmo non `e strutturato opportunamente. Per studiare la propagazione degli errori di arrotondamento si possono utilizzare le seguenti formule, che valgono per variabili x, y indipendenti µαx±βy = αµx ± βµy 2 σαx±βy = α2 σx2 + β 2 σy2

µx×y = µx µy 2 σx×y = σx2 σy2 + µ2x σy2 + µ2y σx2

Per una giustificazione di tali formule e per un approfondimento del metodo si rinvia a Sterbenz [381].

2.3

Complementi e Problemi

Problema 2.1 Trovare i numeri di condizionamento delle seguenti funzioni e determinare i valori di x per i quali il calcolo delle corrispondenti funzioni `e malcondizionato. 1) x − 1; 2) exp(x); 3) ln(|x|); 4) sin x; 5) (x2 + 1)1/2 − |x|; analisi numerica

c V. Comincioli

74

Analisi degli errori

Soluzione. Ricordiamo, in particolare, che il numero di condizionamento relativo nel calcolo di una funzione y = f (x), supposta derivabile, `e dato dalla quantit` a cond(f (x)) = x

f  (x) f (x)

In modo equivalente si pu`o scrivere cond(f (x)) = d(ln y)/d(ln x); inoltre, se cond(f (x)) `e il numero di condizionamento di y = f (x), allora il numero di condizionamento della funzione inversa x = f −1 (y) `e dato da 1/ cond(f −1 (y)). Ad esempio, il numero di condizionamento della funzione y = xn `e dato da n, mentre il numero di condizionamento di y 1/n `e 1/n. Il numero di condizionamento relativo alla funzione x − 1 `e dato da |x/(x − 1)|. Ad esempio, per x compresi nell’intervallo (0.999, 1.001) il numero di condizionamento `e maggiore di 1000. Supponiamo, sempre come esemplificazione, che un valore esatto x ¯ = 1.00098 sia introdotto come 1.00100, con un errore relativo, quindi, dell’ordine di 2 × 10−5 . Il risultato nel calcolo di x − 1, in corrispondenza al valore approssimato di x ¯, `e dato da 1.00 × 10−3 , mentre il valore esatto `e dato da 0.98 × 10−3 . Pertanto, nel risultato si ha un errore relativo dell’ordine di 2 × 10−2 . La funzione exp(x) ha come numero di condizionamento x e quindi il suo calcolo `e malcondizionato per |x|  1 e ben condizionato per |x|  1. Il numero di condizionamento di ln |x| `e dato da 1/ ln |x| e quindi il calcolo della funzione `e malcondizionato per |x| ≈ 1. Per la funzione sin x il numero di condizionamento `e x cotg(x) che indica un malcondizionamento per |x| ≈ nπ(n ≥ 1 intero) e |x|  1 e un bencondizionamento per |x| ≈ (n − 1/2)π. Supponiamo ad esempio che x = 3.01 con arrotondamento sulla terza cifra 1. L’errore assoluto `e pertanto minore di 0.005 e l’errore relativo minore di 0.005/x ≈ 0.0016. Poich´e il numero di condizionamento vale −22.7, si ha che l’errore relativo trasmesso dall’operazione `e limitato da 0.038. Per la funzione del caso 5) si trova come numero di condizionamento −x(x2 + 1)−1/2 e pertanto il suo calcolo non `e mai malcondizionato ed `e ben condizionato per |x| ≈ 0.

Problema 2.2 Se f (x) `e il prodotto di k funzioni f1 (x)f2 (x) · · ·fk (x), mostrare che il numero di condizionamento di f (x) `e la somma dei numeri di condizionamento di ogni fattore: cond(f (x)) = k j=1 cond(fj (x)). Soluzione. Se y = f (x), si ha ln |y| =

k j=1

ln |fj (x)|. Allora

d(ln |y|) d(ln |fj (x)|) = = cond(fj (x)) d(ln |x|) j=1 d(ln |x|) j=1 k

cond(f (x)) =

k

Consideriamo la seguente applicazione del risultato precedente. Si vuole calcolare f (x) = (x + 1) (x + 2) · · · (x + 20) nel punto x = −20.1. In questo caso si ha: fj (x) = x + j e cond(fj (x)) = x/(x + j) per j = 1, 2, . . . , 20. Allora 20 20 1 1 = −20.1 = 269.32 cond(f (x)) = x x + j −20.1 +j j=1 j=1

Problema 2.3 Le seguenti espressioni sono calcolate per |x|  1 1) (1 + 2x)−1 − (1 − x)(1 + x)−1 analisi numerica

c V. Comincioli

2.3 Complementi e Problemi

75

2) (1 + x2 )1/2 − (1 − x2 )1/2 3) sin(1 + x) − sin(1)

Riformulare opportunamente le espressioni in modo da evitare il fenomeno della cancellazione. Soluzione. La funzione 1) pu`o essere riscritta nella seguente forma 2x2 (1 + 2x)(1 + x) Ad esempio, per x = 0.0123 e operando con arrotondamento alla terza cifra, si ha nel caso dell’espressione 1) come risultato 0.002. Nella forma modificata si ha 0.000294. Il risultato esatto alla terza cifra significativa `e 0.000292. La funzione 2) pu` o essere pi` u opportunamente riscritta come 2x2 (1 + x2 )1/2 + (1 − x2 )1/2 Infine la funzione 3) pu` o essere trasformata, utilizzando note formule trigonometriche (in particolare il risultato: sin(a + b)− sin(a − b) = 2 sin b cos a) nella seguente funzione 2 sin

x 2

x cos 1 + 2

Operando come in precedenza sul valore x = 0.0123 si ottiene per la funzione nella forma 3) il risultato 0.006, mentre per la funzione trasformata si ha 0.00654 e il risultato esatto arrotondato alla terza cifra `e 0.00658.

Problema 2.4 Data l’equazione quadratica y 2 + 2py − q = 0 considerare il calcolo numerico della radice y = −p +



p2 + q

Soluzione. Consideriamo dapprima il condizionamento del problema, supponendo cio`e che le operazioni indicate siano eseguite esattamente. Consideriamo pertanto la funzione  y = φ(p, q) := −p + p2 + q, p, q ∈ R Utilizzando l’analisi del primo ordine, calcoliamo p ∂φ −y = −1 +  = , 2 ∂p p +q p2 + q

1 ∂φ =  ∂q 2 p2 + q

Per quanto riguarda l’errore relativo abbiamo allora il seguente risultato  −p q p p + p2 + q p +  q = −  p +  q y ≈  p2 + q 2y p2 + q p2 + q 2 p2 + q analisi numerica

c V. Comincioli

76

Analisi degli errori

Dal momento che

    p    ≤ 1,   p2 + q 

   p + p2 + q       ≤ 1, per q > 0  2 p2 + q 

il problema risulta bencondizionato quando q > 0 e malcondizionato quando q ≈ −p2 . Consideriamo ora due algoritmi diversi per il calcolo della funzione y = φ(p, q) nel caso in cui il problema sia bencondizionato. Supporremo quindi p > 0, q > 0. In questo caso per l’errore inerente, definito da   ∆(0) y := |Dφ(x)| |x| + |y| eps (0)

ove ad esempio |x| = [|x1 |, . . . , |xn |]T , abbiamo: y := ∆(0) y/|y| ≤ 3 eps. Supporremo inoltre p  q. Algoritmo 1:

s := p2 t := s√+ q u := t y := −p + u

Dal momento che p  q, si verifica una cancellazione nel calcolo di y = −p + u. Come conseguenza,√l’errore di arrotondamento generato durante il calcolo in aritmetica floating point della radice quadrata fl( t) pu` o essere eccessivamente amplificato. Se poniamo  √ √ √ fl( t) = t(1 + ), || ≤ eps ⇒ ∆u :=  t =  p2 + q abbiamo che il contributo di tale errore all’errore in y `e dato da  p2 + q ∆u  =  y −p + p2 + q 1  = (p p2 + q + p2 + q) = K  q Dal momento che p, q > 0, il fattore di amplificazione K ha la seguente limitazione inferiore K>

2p2 >0 q

che `e grande, per il fatto che, per ipotesi, p  q. In conclusione l’algoritmo proposto non `e , per  tali valori di p, q, numericamente stabile, in quanto l’influenza dell’errore di arrotondamento del termine p2 + q `e (0) superiore in ordine di grandezza all’errore inerente y . Algoritmo 2: s := p2 t := s√+ q u := t v := p + u y := q/v In questo caso il calcolo di v := p + u non causa cancellazione e si pu` o vedere facilmente che il fattore di amplificazione dell’errore di arrotondamento generato nel calcolo di p2 + q risulta in modulo minore di 1 e pertanto l’algoritmo `e numericamente stabile. Consideriamo il seguente esperimento numerico effettuato in precisione macchina eps = 2.2204 E–16 e per p=4.999999999995 E+4, q=1. E–2. algoritmo 1 algoritmo 2 valore esatto analisi numerica

1.00000761449337 E–7 1.00000000000000 E–7 1.00000000000000 E–7 c V. Comincioli

2.3 Complementi e Problemi

77

Problema 2.5 Analizzare la propagazione degli errori di arrotondamento nel calcolo del prodotto scalare di due vettori x, y ∈ Rn s := 0 for k = 1 : n s = s + xk y k end Soluzione. Indicando con fl(xT y) il valore calcolato di xT y, si vuole fornire una stima dell’errore | fl(xT y) − xT y| 

Posto sp = fl

p

 xk yk

k=1

si ha: s1 = x1 y1 (1 + 1 ) con |1 | ≤ eps e per p = 2, . . . n sp = fl(sp−1 + fl(xp yp )) = (sp−1 + xp yp (1 + p ))(1 + p ),

|p |, |p | ≤ eps

Si mostra allora facilmente che n

fl(xT y) = sn =

xk yk (1 + γk )

k=1

⇓ | fl(x y) − x y| ≤ T

T

n

|xk yk | |γk |

k=1

ove (1 + γk ) = (1 + k )

n &

(1 + j ), 1 = 0

j=k

Per fornire una maggiorazione significativa si utilizza il seguente risultato. 'n Proposizione 2.4 Se (1 + α) = k=1 (1 + αk ), con |αk | ≤ eps e n eps ≤ 0.01, allora |α| ≤ 1.01 n eps. Applicando tale risultato, si ottiene | fl(xT y) − xT y| ≤ 1.01 n eps |x|T |y| ove, ad esempio, |y| indica il vettore con componenti |yi |. Si ha quindi che l’errore relativo nel calcolo di fl(xT y) pu` o essere grande quando |xT y|  |x|T |y| Osserviamo che nella pratica un modo usuale di operare consiste nell’utilizzare la doppia precisione per accumulare i prodotti scalari. Pi` u precisamente, se x, y sono due vettori floating point con precisione t, allora nell’algoritmo la somma parziale s `e costruita in un registro che opera in lunghezza 2t. Dal momento che la moltiplicazione di due numeri floating point di lunghezza t pu` o essere memorizzata esattamente in una variabile a doppia precisione, si generano errori di arrotondamento soltanto quando s viene rappresentata in semplice precisione. In questo caso si ha fl(xT y) = xT y(1 + δ),

analisi numerica

δ ≈ eps

c V. Comincioli

78

2.4

Analisi degli errori

Esperienze in matlab

In MATLAB per la rappresentazione dei numeri o delle variabili numeriche si hanno a disposizione diversi tipi di dati. Per default MATLAB utilizza la rappresentazione in floating-point con doppia precisione, ossia con lunghezza 64 bits ed esegue operazioni utilizzando l’aritmetica in doppia precision. Oltre la doppia precisione MATLAB fornisce altri tipi di dati che richiedono meno memoria della doppia, ossia • single – Single-precision floating-point numbers: lunghezza 32 bits • int8 and uint8 – Signed and unsigned integers: lunghezza 8 bits • int16 and uint16 – Signed and unsigned integers: lunghezza 16 bits • int32 and uint32 – Signed and unsigned integers: lunghezza 32 bits x=1;tol=0.00001 while x > tol x=x-0.2 end --------x=1; % ciclo infinito!!! while x ~=0 x=x-0.2 end ---------function x=psqrt(x,n) %n=70 x=0.5; 1.5 for i=1:n x=sqrt(x); end for i=1:n x=x^2; end for i=1:14000 x(i)=1/i; end y=fliplr(x); sum(x)-sum(y) %%i=1:14000 %%x=1./i; ---------% esempio di Kahan % In aritmetica esatta f/e = 0/0: disp(’ ’) echo on h = 1./2.; x = 2./3. - h; y = 3./5. - h; e = (x+x+x) - h; f = (y+y+y+y+y)-h; z = f/e; echo off disp(sprintf(’\nz = %10.5f’,z)) analisi numerica

c V. Comincioli

2.4 Esperienze in matlab

79

>> tan(tan(tan(atan(atan(atan(1e50)))))) ans = 1.633123935319537e+016

Un’equazione pu` o essere semplificata algebricamente, ma pu`o non essere cancellata numericamente! A=[17 5; 1.7 0.5] b=[22; 2.2] A\b ans =-1.0588 8.0000

Il sistema ammette l’ovvia soluzione x1 = x2 = 1!. function y = roundoff(number,decimal_places) % arrotonda uno scalare o una matrice a un numero % specificato di decimali [INeg,JNeg] = find( number 0 per tutti i vettori reali x = 0 (x∗ Ax > 0, ∀x ∈ Cn = 0). Ad esempio, la matrice hermitiana   3 i A= −i 3 `e definita positiva. Infatti, per ogni x = [x1 , x2 ]T = 0 risulta ∗



x Ax = [x1 , x2 ]

3 i −i 3



x1 x2

 = 3x1 x1 −ix1 x2 +ix1 x2 +3x2 x2

= (x1 −ix2 )(x1 +ix2 )+2(x2 −ix1 )(x2 +ix1 ) = |x1 −ix2 |2 +2|x2 −ix1 |2 > 0 Chiamando sottomatrice principale di ordine i di una matrice A la matrice che si ottiene eliminando n−i righe e le corrispondenti n−i colonne, si ha il seguente risultato importante. Proposizione 3.1 Se una matrice A ∈ Cn×n `e definita positiva, anche tutte le sue sottomatrici principali sono definite positive. Da tale risultato si ha, in particolare, che gli elementi aii di una matrice A definita positiva sono reali e positivi. Nel seguito vedremo altre propriet`a delle matrici hermitiane definite positive in relazione alle nozioni di determinante e di autovalore. Ortogonalit` a Quando per due vettori x, y ∈ Rn si ha xT y = 0, si dice che i due vettori sono ortogonali. Se, in aggiunta, si ha xT x = yT y = 1, allora i due vettori sono detti ortonormali. I vettori non nulli x(1) , x(2) , . . . , x(m) sono ortogonali se (x(i) )T x(j) = 0 per i = j. A partire da un insieme di vettori ortogonali si pu` o costruire un insieme di vettori ortonormali ponendo y(i) =  analisi numerica

x(i) (x(i) )T x(i) c V. Comincioli

3.1 Matrici. Definizioni fondamentali

89

Una matrice quadrata Q ∈ Rn×n si dice ortogonale se QT Q = I, ossia se le colonne sono vettori normalizzati e ortogonali (brevemente, ortonormali). Vedremo nel seguito che per una matrice ortogonale si ha pure QQT = I, ossia che pure le righe sono vettori ortonormali. Analogamente, una matrice U ∈ Cn×n `e detta unitaria se U∗ U = I. Rileviamo che una matrice unitaria `e un caso particolare di matrice normale. Le matrici ortogonali (e le matrici unitarie) hanno un ruolo importante nel calcolo numerico. Uno dei motivi di tale importanza `e il seguente risultato. Proposizione 3.2 La moltiplicazione di un vettore mediante una matrice ortogonale Q preserva la lunghezza del vettore, ossia per ogni vettore x ∈ Rn si ha Qx2 = x2

(3.1)

Inoltre, mantiene il prodotto interno (Qx)T (Qy) = xT y per ogni x, y ∈ Rn . La dimostrazione `e immediata, in quanto (Qx)T (Qy) = xT QT Qy = xT I y = xT y e la (3.1) si ottiene prendendo x = y. Nel seguito vedremo due importanti classi di matrici ortogonali, ossia le matrici di rotazione, o di Givens, e le matrici di riflessione, o di Householder. Un esempio semplice di matrice di rotazione `e la seguente.     cos θ sin θ cos θ − sin θ T Q= , Q = − sin θ cos θ sin θ cos θ Il prodotto di tale matrice per un vettore x ha come risultato la rotazione del vettore di un angolo prefissato θ, mentre il prodotto per la matrice QT ruota il vettore di un angolo −θ. Un altro

esempio di matrici ortogonali `e dato dalle matrici di permutazione. Si ha ad esempio     0 1 0 1 P= , PT = 1 0 1 0

(3.2)

In questo caso particolare P coincide con PT , ma in generale le due matrici sono differenti. Il caso (3.2) rappresenta, anche, un esempio semplice di matrice di riflessione. Il vettore Px corrisponde all’immagine speculare di x attraverso la retta x2 = x1 . analisi numerica

c V. Comincioli

90

3.1.3

Elementi di algebra lineare

Matrici partizionate

In particolare nella risoluzione di sistemi lineari, `e utile pensare a una matrice come composta di matrici di ordine inferiore ⎡ ⎤ A11 A12 · · · A1n ⎢ A21 A22 · · · A2n ⎥ ⎢ ⎥ A=⎢ . .. .. .. ⎥ ⎣ .. . . . ⎦ Am1 Am2 · · ·

Amn

ove Aij `e una matrice ∈ Rpi ×qj . Usualmente le matrici diagonali Aii sono quadrate. In questo caso m = n, pi = qi , i = 1, 2, . . . , n. Per matrici partizionate nello stesso modo, le operazioni possono essere eseguite formalmente trattando i blocchi come scalari. Ad esempio C = AB,

Cij =

n

Aik Bkj

k=1

Se Aij = O per i = j, allora A `e chiamata matrice diagonale a blocchi. In modo analogo, si definiscono le matrici tridiagonali a blocchi .

3.1.4

Indipendenza lineare, base e dimensione

Indipendenza lineare I vettori x(1) , x(2) , . . . , x(n) ∈ Rm , con n ≤ m si dicono linearmente indipendenti se dalla condizione n αi x(i) = 0, αi ∈ R i=1

segue che αi = 0, per i = 1, . . . , n. In caso contrario, i vettori assegnati sono linearmente dipendenti . In questo caso il vettore zero pu` o essere scritto come una combinazione lineare non triviale dei vettori dati (cfr. per una illustrazione in R2 la Figura 3.3). Quando i vettori x(i) sono le colonne a·i di una matrice A ∈ Rm×n , si ricava che la dipendenza lineare delle colonne di A `e equivalente alla condizione Az = 0 per un vettore z = 0 (3.3) e che la indipendenza lineare delle colonne di A `e equivalente alla condizione Az = 0 ⇒ z = 0 analisi numerica

(3.4) c V. Comincioli

3.1 Matrici. Definizioni fondamentali

91

Figura 3.3 (a) Vettori linearmente dipendenti. (b) Vettori linearmente indipendenti. Sia S un insieme di vettori dello spazio Rm . Si dice che S `e un sottospazio di Rm se, per ogni scalare α e β x, y ∈ S ⇒ αx + βy ∈ S (3.5) Tale propriet`a implica che ogni sottospazio deve contenere il vettore zero. L’insieme di tutti i vettori che sono combinazioni lineari delle colonne di una matrice A ∈ Rm×n `e chiamato lo spazio colonna, o spazio immagine di A, e sar`a indicato per il seguito con la notazione o essere espresso nella R(A). Lo spazio immagine, che sottolineiamo `e un sottospazio di Rm , pu` seguente forma R(A) = {y ∈ Rm | y = Ax, x ∈ Rn } Base Dato un sottospazio S di Rm , k vettori {x(i) }, i = 1, . . . , k costituiscono una base di S se ogni vettore z ∈ S pu` o essere espresso, in maniera unica, come combinazione lineare dei vettori della base k z= αi x(i) i=1

Una base `e, quindi, un insieme di vettori linearmente indipendenti che genera (span) lo spazio S. I numeri αi sono le coordinate del punto x ∈ Rm rispetto alla base fissata. Una base di Rm particolarmente importante `e la base canonica, formata dai vettori ei = [0, . . . , 0, 1, 0, . . . , 0]T , i

i = 1, 2, . . . , m

che sono le colonne della matrice identit`a di ordine m. Dimensione Si pu` o dimostrare che tutte le basi di un sottospazio hanno lo stesso numero di elementi; tale numero, indicato con dim(S), `e detto dimensione del sottospazio e esprime il numero dei gradi di libert` a del sottospazio. Ad esempio, lo spazio Rm ha dimensione m, e ogni insieme di m vettori linearmente indipendenti di Rm costituisce una base di Rm . Ricordiamo il fatto importante che in un sottospazio di dimensione k, nessun insieme di pi` u di k vettori pu` o essere linearmente indipendente e nessun insieme di meno di k vettori pu` o generare lo spazio. Siano S e T due sottospazi di Rm . La somma X = S + T := {x = s + t | s ∈ S, t ∈ T } analisi numerica

c V. Comincioli

92

Elementi di algebra lineare

e l’intersezione S ∩ T sono ancora sottospazi. Per le loro dimensioni vale la seguente relazione dim(S + T ) = dim S + dim T − dim(S ∩ T ) da cui segue che max{dim S, dim T } ≤ dim(S + T ) ≤ min{dim S + dim T , m} max{0, dim S + dim T − m} ≤ dim(S ∩ T ) ≤ min{dim S, dim T } Se S ∩ T = {0}, il sottospazio X = S + T `e detto somma diretta di S e T e viene usualmente indicato con S ⊕ T . In questo caso si ha dim X = dim S + dim T e gli elementi x di X possono essere espressi univocamente con la somma x = s + t, Proiezione ortogonale

s ∈ S, t ∈ T

Sia S un sottospazio di Rm . Il sottospazio S ⊥ := {u ∈ Rm | uT v = 0 per ogni v ∈ S}

`e detto sottospazio ortogonale a S. Si hanno le seguenti relazioni S ∩ S ⊥ = {0} S ⊕ S ⊥ = Rm dim S ⊥ = m − dim S o essere espresso in maniera univoca come somma Ne segue che ogni vettore x ∈ Rm pu` x = s + t,

s ∈ S, t ∈ S ⊥

(3.6)

Il vettore s `e detto proiezione ortogonale di x su S. Come illustrazione, consideriamo in R3 il sottospazio S generato dal vettore x(1) = [0, 0, 1]T , ossia l’insieme di tutti i vettori con le prime due componenti nulle. La sua dimensione `e 1. Lo spazio S ⊥ `e costituito dai vettori con la terza componente nulla ed `e generato dai vettori x(2) = [1, 0, 0]T e x(3) = [0, 1, 0]T ed ha dimensione 2. La relazione (3.6) `e allora illustrata in Figura 3.4. Se, data una matrice A ∈ Rm×n , indichiamo con N (A), il nucleo della matrice A, o spazio nullo, cio`e l’insieme dei vettori che verificano Ax = 0 N (A) = {x ∈ Rn | Ax = 0} si ha che N (A) e lo spazio R(AT ), cio`e lo spazio generato dalle righe della matrice A, sono sottospazi ortogonali di Rn . Supponiamo, infatti, che w sia un vettore in N (A) e v in R(AT ). Allora, Aw = 0, ed inoltre esiste un vettore x tale che v = AT x. Quindi wT v = wT (AT x) = (wT AT )x = (Aw)T x = 0T x = 0 analisi numerica

c V. Comincioli

3.1 Matrici. Definizioni fondamentali

93

Figura 3.4 Proiezione ortogonale di x su S. Analogamente, si dimostra che lo spazio N (AT ) e lo spazio R(A) sono sottospazi ortogonali di Rm . Come conseguenza si hanno le seguenti relazioni dim(R(AT )) + dim(N (A)) = n

(3.7)

T

dim(R(A)) + dim(N (A )) = m

(3.8)

Il numero dim(R(AT )) viene detto rango di A; tale nozione verr`a riconsiderata nel seguito, ove mostreremo che dim(R(AT )) = dim(R(A)). Basi ortonormali Fra le basi di Rm sono particolarmente importanti le basi ortonormali, nelle ` importante osservare che a partire quali, cio`e, gli elementi della base sono vettori ortonormali. E da una qualunque base `e possibile costruire una base ortonormale, come `e mostrato dal seguente procedimento, noto come procedimento di Gram-Schmidt.2 Proposizione 3.3 (Gram-Schmidt) Se i vettori x(1) , . . . , x(k) ∈ Rm , con k ≤ m, sono k vettori linearmente indipendenti, i vettori y(1) , . . . , y(k) , costruiti nel seguente modo y(1) = 

z(1) = x(1) , z(i) = x(i) −

i−1 $ j=1

z(1) (z(1) )T z(1)

% (y(j) )T x(i) y(j) ,

y(i) = 

z(i) (z(i) )T z(i)

per i = 2, . . . , k, sono ortonormali. 2

Tale procedimento sembra potersi attribuire anche a Laplace e Cauchy (1836). Jorgen Pedersen Gram, nato a Nustrup, Danimarca nel 1850 e morto a Copenaghen nel 1916, ha lavorato nell’ambito del calcolo delle probabilit` a, dell’analisi numerica e della teoria dei numeri. Erhard Schmidt, nato a Dorpat, Germania (ora Tartu, Estonia) nel 1876 e morto a Berlino nel 1959, ha lavorato principalmente nel campo delle equazioni integrali, degli spazi di Hilbert e della topologia. analisi numerica

c V. Comincioli

94

Elementi di algebra lineare

Il risultato, che pu` o essere dimostrato facilmente per induzione, `e alla base della possibilit`a di decomporre una matrice data A ∈ Rm×n , con le colonne linearmente indipendenti, nel prodotto di una matrice ortogonale Q ∈ Rm×m e di una matrice triangolare R ∈ Rm×n . A partire da tale decomposizione `e possibile risolvere in maniera numericamente stabile i sistemi malcondizionati.

3.1.5

Determinante, inversa e rango

Sia A una matrice quadrata di ordine n. Il determinante 3 di A, denotato usualmente con la notazione det(A), `e definito da det(A) := (−1)t(j) a1 j1 a2 j2 · · · an jn (3.9) j

ove t(j) `e il numero di inversioni nella permutazione j = (j1 , j2 , . . . , jn ) e j varia su tutte le n! permutazioni degli interi 1, 2, . . . , n. La formula (3.9) `e l’estensione al caso di n generico delle formule note per matrici di ordine n = 2 e n = 3 n=2:

det(A) = a11 a22 − a12 a21

n=3:

det(A) = a11 a22 a33 + a12 a23 a31 + a13 a21 a32 − a12 a21 a33 − a11 a23 a32 − a13 a22 a31

Osserviamo che il calcolo del determinante mediante la definizione (3.9) richiede la formazione di n! prodotti, ognuno dei quali richiede n−1 moltiplicazioni, per un totale di n! addizioni e (n−1)n! moltiplicazioni. Tuttavia, come vedremo nel capitolo successivo, il determinante di una generica matrice di ordine n pu` o essere ottenuto con un numero di addizioni e di moltiplicazioni dell’ordine di n3 /3. Questo risultato `e possibile grazie all’utilizzo delle seguenti propriet`a del determinante. • Se due colonne (o due righe) sono uguali il valore del determinante `e nullo. • Il valore del determinante rimane immutato se si aggiunge a una riga (colonna) un’altra riga (colonna) moltiplicata per uno scalare. • Il determinante di una matrice triangolare `e uguale al prodotto degli elementi sulla diagonale principale. • Se si scambiano due righe (colonne), il determinante cambia di segno. • Si ha: det(A) = det(AT ), det(A∗ ) = det(A). • det(AB) = det(A) det(B) (regola di Binet). Il determinante di una matrice pu` o essere espresso in maniera ricorsiva mediante la regola di Laplace. Indicata con Aij la sottomatrice quadrata di ordine n − 1 ottenuta dalla matrice A eliminando la i–ma riga e la j–ma colonna, per un qualunque indice di riga i si ha  a11 se n = 1 det(A) = n i+j aij det(Aij ) se n > 1 j=1 (−1) 3 Il termine determinante `e stato introdotto per la prima volta nel 1812 da Cauchy, grazie al quale i determinanti diventarono di uso comune nella ricerca matematica. In precedenza, il concetto di determinante, come grandezza che caratterizza una matrice, fu introdotto da Cramer (1750) e sviluppato da Vandermonde (1771) e da Laplace (1772) (che utilizzava il termine di risultante).

analisi numerica

c V. Comincioli

3.1 Matrici. Definizioni fondamentali

95

Il termine (−1)i+j det(Aij ) `e detto cofattore dell’elemento aij . Si chiamano, inoltre, minori i determinanti delle sottomatrici quadrate che si ottengono fissando in maniera qualunque uno stesso numero di righe e di colonne. Ricordiamo la seguente interessante caratterizzazione, nota come criterio di Sylvester 4 , delle matrici definite positive mediante i determinanti delle sottomatrici principali. Teorema 3.1 (Criterio di Sylvester) Una matrice simmetrica A di ordine n `e definita positiva se e solo se det(Ak ) > 0,

k = 1, 2, . . . , n

ove Ak `e la matrice principale di ordine k, cio`e la matrice formata dalle prime k righe e k colonne della matrice A. Dal risultato precedente si ricava in particolare la seguente maggiorazione. Teorema 3.2 Per una matrice A simmetrica definita positiva di ordine n, si ha |aij |2 < aii ajj ,

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

e quindi il massimo elemento di A si trova sulla diagonale. Ricordiamo, infine, che il determinante di una matrice A `e uguale al volume del parallelepipedo in n dimensioni i cui spigoli corrispondono alle righe della matrice A (cfr. per n = 2 la Figura 3.5). Il risultato `e ovvio quando le righe della matrice sono ortogonali. In tale caso, infatti, il prodotto AAT `e una matrice diagonale con gli elementi sulla diagonale forniti dai quadrati li2 delle lunghezze delle righe. Dalle propriet`a del determinante si ha allora l12 l22 · · · ln2 = det(AAT ) = (det A) (det AT ) = (det A)2 Il segno di det(A) indica l’orientamento dell’insieme delle coordinate. Il caso generale si riconduce al caso ortogonale, applicando alle righe della matrice il procedimento di ortogonalizzazione di Gram–Schmidt.

Figura 3.5 Il det(A) fornisce l’area del parallelogramma. 4

James Joseph Sylvester (1814-1897).

analisi numerica

c V. Comincioli

96

Elementi di algebra lineare

Inversa Una matrice quadrata A di ordine n `e detta non singolare quando per essa si ha det(A) = 0. Una matrice B quadrata di ordine n, `e una inversa di A se AB = BA = I in tal caso si scrive B = A−1 , e la matrice A si dice invertibile. Il determinante fornisce un test per l’invertibilit` a della matrice; si ha, infatti, il seguente importante risultato. Teorema 3.3 Una matrice quadrata `e invertibile se e solo se essa `e non singolare. Ricordiamo che viene chiamata matrice aggiunta di A la matrice adj(A) di ordine n, il cui elemento (i, j)-mo `e dato da (−1)i+j det(Aji ) ove Aji `e la sottomatrice ottenuta da A cancellando la riga j-ma e la colonna i-ma. Mediante la matrice aggiunta si pu`o fornire la seguente formula esplicita (di interesse, usualmente, solo teorico) per l’inversa di una matrice non singolare A−1 =

1 adj(A) det(A)

(3.10)

Rango Il rango di una matrice A ∈ Rm×n pu` o essere definito come l’ordine massimo dei minori non nulli della matrice. Esso viene denotato usualmente con la notazione r = rank(A). Una matrice A `e di rango completo quando rank(A) = min(m, n); in caso contrario viene detta a rango deficiente (rank-deficient). L’importanza della nozione di rango risiede nel fatto che il rango di una matrice A rappresenta il numero massimo delle colonne, e quindi anche delle righe, della matrice A che sono linearmente indipendenti . Il rango di A `e quindi la dimensione di R(A) (e ugualmente di R(AT )), lo spazio lineare generato dalle colonne (rispettivamente, le righe) di A. Si ha il seguente importante risultato (cfr. (3.7)), valido per una matrice rettangolare qualunque rank(A) + dim(N (A)) = n In particolare, quando m = n e A `e una matrice non singolare, allora rank(A) = n, N (A) = {0}.  Esercizio 3.1 Verificare che il determinante della matrice di Vandermonde Vn (x1 , x2 , . . . , xn ) definita ⎡

da

⎢ ⎢ ⎢ Vn = ⎢ ⎢ ⎣ `e dato da

'

1≤j 0. Da (3.35) si ha che esistono due vettori u, v tali che Au2 = σn , v:=

1 Au, σn

u2 = 1 v2 = 1

Definendo la matrice E = −σn vu∗ , si ha (A + E)u = 0, cio`e la matrice A + E `e singolare; inoltre E2 = σn max v2 x=0

analisi numerica

|u∗ x| = σn x2

c V. Comincioli

3.5 I valori singolari e la pseudoinversa

115

Osservazione 3.5 Si consideri ad esempio la seguente matrice 

1/ 0 0 



Il determinante `e uguale a 1, mentre σ1 = 1/, σ2 = . Per  → 0 il rango della matrice tende a 1; come si vede σ2 `e una misura conveniente della deficienza del rango. Un caso pi` u generale `e dato dal seguente esempio di Wilkinson.13 Si consideri la matrice triangolare superiore B di ordine n definita da ⎧ ⎨ 1 se i = j −1 se i < j bij = ⎩ 0 se i > j La matrice ha rango n. Se, tuttavia l’elemento di indici (n, 1) viene perturbato della quantit` a  = −22−n , −4 la matrice diventa di rango n − 1. Il valore singolare σn di B assume il valore 0.917 . . . 10 per n = 15 e 0.296 10−5 per n = 20. Al crescere di n la matrice B `e sempre pi` u vicina ad una matrice di rango n−1. Tale comportamento non si vede dagli elementi sulla diagonale principale, e quindi anche dal determinante, che vale sempre 1. Osserviamo anche che il numero di condizionamento µ2 (A) = σ1 /σn , calcolato, ad esempio, per n = 20, ha il valore ≈ 3.99 106.

Una generica matrice A ∈ Cm×n pu` o essere trasformata con matrici unitarie in una forma diagonale formata dai valori singolari. Teorema 3.14 (SVD) Sia A una matrice arbitraria ∈ Cm×n . Allora esiste una matrice unitaria (ortogonale se A `e reale) U ∈ Cm×m (rispettivamente, ∈ Rm×m ) e una matrice unitaria (ortogonale se A `e reale) V ∈ Cn×n (rispettivamente, ∈ Rn×n ) tali che A = UΣV∗ 

con Σ=

D 0 0 0

(A = UΣVT se A `e reale)

(3.37)

 ,

D = diag(σ1 , σ2 , · · · , σr ),

σ1 ≥ σ2 ≥ · · · ≥ σr > 0.

Il numero r dei valori singolari diversi dallo zero `e il rango della matrice A. La decomposizione (3.37) viene chiamata la SVD (singular value decomposition) della matrice A14 . Il teorema pu`o essere dimostrato per induzione su m e n; si veda ad esempio Golub e Van Loan [172]. Le matrici U, V, hanno il seguente significato. Le colonne di U (rispettivamente di V) rappresentano gli autovettori della matrice AA∗ (rispettivamente di A∗ A). L’interpretazione geometrica dei valori singolari `e la seguente. Supponendo ad esempio che A sia reale, si ha che essa trasforma la sfera unitaria in Rn (definita da x2 = 1), nell’insieme dei 13 James Hardy Wilkinson, nato a Strood, Kent, Inghilterra nel 1919, morto a Londra nel 1986, ha ottenuto importanti risultati nel campo dell’algebra lineare numerica. Ha sviluppato in particolare l’idea della backward error analysis per lo studio della stabilit` a degli algoritmi. 14 La decomposizione ai valori singolari `e stata introdotta indipendentemente da Beltrami (1873) e da Jordan (1874) nel caso di matrici quadrate. La tecnica fu estesa alle matrici rettangolari negli anni ’30 da Eckart e Young. Come tecnica numerica il suo utilizzo risale agli anni ’60. Il termine valore singolare pare sia stato introdotto da Weyl (1949) nello studio di alcune relazioni fra gli autovalori e i valori singolari di una matrice.

analisi numerica

c V. Comincioli

116

Elementi di algebra lineare

vettori y = Ax, che definiscono un ellissoide di dimensione r nello spazio Rm . I valori singolari sono le lunghezze degli assi dell’ellissoide. Il numero di condizionamento `e legato all’eccentricit` a dell’ellissoide. In termini di trasformazioni lineari, la SVD si interpreta nel modo seguente. Per ogni trasformazione lineare A : Rn → Rm , esistono due basi ortonormali v1 , v2 , . . . , vn in Rn e u1 , u2 , . . . , um in Rm tali che Avi = σi ui per i = 1, 2, . . . , r e Avi = 0 per i = r + 1, . . . , n.  Esercizio 3.7 Si dimostri che i valori singolari di A e di A∗ sono uguali.  Esercizio 3.8 Si dimostri che se A `e una matrice ∈ Cn×n allora | det(A)| =

n &

σi

i=1

Un risultato interessante che generalizza il Teorema 3.13, `e il seguente. Teorema 3.15 Sia A una matrice ∈ Cm×n e sia A = UΣV∗ la sua decomposizione in valori singolari, ove σ1 ≥ σ2 ≥ · · · ≥ σr > σr+1 = · · · = σp = 0,

p = min(m, n)

e sia k un intero ≤ r = rank(A). Posto Ak =

k

σi ui vi∗

i=1

si ha min rank(B)=k

A − B2 = A − Ak 2 = σk+1

Il teorema, per la cui dimostrazione si veda ad esempio Golub e Van Loan [172], dice in sostanza che il pi` u piccolo valore singolare positivo di A `e la distanza, nella norma 2, di A dall’insieme di tutte le matrici a rango deficiente. Esso permette, quindi, di stimare l’errore che si commette quando la matrice A, a seguito di approssimazioni, viene sostituita con una matrice di rango k. Esempio 3.1 Supponiamo che gli elementi della seguente matrice ⎡

⎤ 1.02 2.03 4.20 A = ⎣ 0.25 0.51 1.06 ⎦ 1.74 3.46 7.17

corrispondino ai valori di misurazioni sperimentali soggette ad errori di grandezza, ad esempio, inferiori o uguali a 0.015. La matrice A ha la seguente decomposizione in valori singolari ⎡

⎤⎡ ⎤ 0.5015 −0.1871 −0.8447 9.5213 0 0 A = UΣVT = ⎣ 0.1263 0.9817 −0.1424 ⎦ ⎣ 0 0.0071 0 ⎦ 0.8559 −0.0352 0.5160 0 0 0.0023 ⎡ ⎤ 0.2135 −0.9422 0.2582 ⎣ 0.4247 −0.1485 −0.8931 ⎦ 0.8798 0.3003 0.3685 analisi numerica

c V. Comincioli

3.5 I valori singolari e la pseudoinversa

117

Dal punto di vista teorico, la matrice A ha rango 3; comunque, per il Teorema 3.15, vi `e una matrice di rango 2 che dista, nella norma 2, solo di 0.0023 e una matrice di rango 1 che dista solo di 0.0071, e gli elementi di tali matrici sono entro gli errori sperimentali relativi alla matrice A. In conclusione, possiamo soltanto dire che il rango di A `e almeno 1, ed inoltre `e ragionevole sostituire A con la matrice di rango 1 pi` u vicina. ⎡ ⎡ ⎤ ⎤ 1.0193 2.0280 4.2011 0.0007 0.0020 −0.0011 0.0020 ⎦ A1 = σ1 u1 v1T = ⎣ 0.2567 0.5107 1.0580 ⎦ , A−A1 = ⎣ −0.0067 −0.0007 1.7395 3.4610 7.1696 0.0005 −0.0010 0.0004

La capacit`a della decomposizione in valori singolari di fornire informazioni su come ottenere approssimazioni, di rango inferiore, di una matrice assegnata, `e utile in molteplici applicazioni. Segnaliamo, ad esempio, il suo utilizzo negli algoritmi di compressione dei dati, in particolare nella codifica di immagini (trasformata di Karhunen-Loeve. Come esemplificazione e in termini schematici, supponiamo che B sia la matrice che definisce i livelli di grigio (blackness matrix )15 . Mediante la decomposizione in valori singolari si vede se una approssimazione di rango inferiore Br = σ1 u1 v1T + · · · + σr ur vrT pu` o rappresentare adeguatamente l’immagine. In caso affermativo, la matrice Br pu` o essere codificata mediante 2r vettori ui e vi e r numeri σi . Se ad esempio `e adeguato r = 5, per una matrice B di dimensioni 1000 × 1000 sar`a sufficiente memorizzare 2 × 5 × 1000 + 5 = 10 005 valori anzich´e 1 000 000, con un risparmio di quasi il 99%. Osservazione 3.6 Come si `e visto i quadrati dei valori singolari sono, in sostanza, gli autovalori delle

matrici A∗ A, AA∗ . Nel caso particolare in cui la matrice A `e hermitiana e definita positiva, i valori singolari sono anche gli autovalori e gli autovettori sono dati dalle colonne di V. In generale, comunque, non vi `e una relazione semplice tra gli autovalori e i valori singolari. In teoria, si potrebbe pensare di calcolare i valori singolari risolvendo il problema degli autovalori per la o portare a una perdita di accuratezza, come `e illustrato matrice hermitiana A∗ A, ma questa procedura pu` dal seguente esempio. ⎡ ⎤ 1 1 √ A = ⎣  0 ⎦ , || < eps, eps = precisione macchina 0  Come prodotto A∗ A si ha A∗ A = √



1 + 2 1

1 1 + 2



2 + 2 , σ2 = ||. Nell’aritmetica floating-point, con precisione eps,   1 1 fl(A∗ A) = 1 1 √ i cui autovalori sono λ1 = 2, λ2 = 0, e σ2 non concorda, nella precisione macchina usata, con λ2 . Una procedura numerica pi` u stabile consiste nel ridurre, mediante trasformazioni ortogonali di tipo Householder, la matrice A ad una matrice bidiagonale e nell’applicare a questa il metodo QR (algoritmo di Golub e Reinsch).

che ha come valori singolari: σ1 = invece di A∗ A si ha

15

Ogni foto pu` o essere discretizzata decomponendo l’immagine in quadrettini e assegnando un livello di grigio ad ogni quadrettino. Imponendo, ad esempio, una griglia di 1000 × 1000 su una foto e assegnando un livello di grigio da 0 a 10, si ha una matrice blackness di 1 000 000 interi per ogni foto. analisi numerica

c V. Comincioli

118

3.5.2

Elementi di algebra lineare

Applicazioni della SVD

Nel seguito, per semplificare le notazioni, supporremo le dimensioni della matrice tali che m ≥ n; questo del resto corrisponde alla maggior parte delle applicazioni della SVD all’analisi dei dati sperimentali, nelle quali aij rappresenta la i-ma osservazione della variabile j-ma. Supporremo inoltre A reale.

Sistemi lineari generali La decomposizione in valori singolari permette di esaminare in maniera numericamente pi` u conveniente le nozioni di consistenza di un sistema lineare, di unicit`a delle soluzioni, e pi` u in generale di dimensione dello spazio delle soluzioni del sistema. Sia A una matrice ∈ Rm×n , con m ≥ n e rango r, e sia b un vettore dello spazio Rm . Il problema che consideriamo `e la soluzione del sistema lineare Ax = b

(3.38)

Usando la SVD di A, il sistema (3.38) diventa UΣVT x = b da cui Σz = d T

T

ove z = V x e d = U b. Il sistema di equazioni Σz = d `e diagonale e quindi pu` o essere studiato facilmente. Si ha infatti σj zj = dj , 0zj = dj , 0 = dj ,

se j ≤ n e σj =  0 se j ≤ n e σj = 0 se j > n

Il secondo insieme di valori `e vuoto se r = n e il terzo `e vuoto se n = m. Le equazioni risultano consistenti, cio`e esiste una soluzione se e solo se dj = 0 quando σj = 0 o j > n. Se r < n, allora le zj associate con un σj nullo possono assumere un valore arbitrario. Ritornando alle variabili x = Vz, questi valori arbitrari servono a parametrizzare lo spazio di tutte le possibili soluzioni x. o essere scritta Siano uj e vj le colonne di U e V. Allora la decomposizione SVD pu` Avj = σj uj ,

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

Se σj = 0, allora Avj = 0 e vj `e nello spazio nullo di A, cio`e in N (A), mentre se σj = 0, allora uj ∈ R(A). Si pu` o pertanto dare una descrizione completa dello spazio nullo e dello spazio immagine, nel modo seguente. Sia V0 l’insieme delle colonne vj per le quali σj = 0, e V1 le rimanenti colonne vj . Analogamente, sia U1 l’insieme delle colonne uj per le quali σj = 0, e U0 le rimanenti colonne uj , incluse quelle con j > n. Vi sono r colonne in V0 , n − r in V1 e in U1 e m − n + r in U0 . Inoltre 1. V0 `e una base ortonormale per N (A). 2. V1 `e una base ortonormale per N (A)⊥ . 3. U1 `e una base ortonormale per R(A). 4. U0 `e una base ortonormale per R(A)⊥ . Lasciamo come esercizio la esemplificazione dei risultati precedenti relativamente alla seguente matrice ⎡ ⎤ 1 6 11 ⎢ 2 7 12 ⎥ ⎢ ⎥ ⎥ A=⎢ ⎢ 3 8 13 ⎥ ⎣ 4 9 14 ⎦ 5 10 15 analisi numerica

c V. Comincioli

3.5 I valori singolari e la pseudoinversa

119

e ad esempio, b = [5 5 5 5 5]T e b = [4 5 5 5 5]T . La SVD di A `e la seguente ⎤ ⎡ ⎡ ⎤ 35.127 0 0 0.355 −0.689 0.541 0.193 0.265 ⎢ ⎢ 0.399 −0.376 −0.802 −0.113 0.210 ⎥ 0 2.465 0 ⎥ ⎥ ⎢ ⎢ ⎥ ⎢ ⎥ ⎢ 0.160 −0.587 −0.656 ⎥ · ⎢ 0 0 0 ⎥ A = ⎢ 0.443 −0.062 ⎥· ⎣ 0.487 0.251 −0.079 0.742 −0.378 ⎦ ⎣ 0 0 0 ⎦ 0.531 0.564 0.180 −0.235 0.559 0 0 0 ⎡ ⎤ 0.202 0.890 0.408 ⎣ 0.517 0.257 −0.816 ⎦ 0.832 −0.376 0.408

Problema dei minimi quadrati lineari Nel problema dei minimi quadrati lineari, un’estensione del problema precedente, si cerca un vettore x che minimizza la lunghezza euclidea del vettore residuo r = Ax − b

(3.39)

Brevemente, l’origine del problema, che `e anche noto come problema della regressione lineare, `e la seguente. Sono date m coppie di valori i = 1, . . . , m (3.40) (ti , yi∗ ), e si suppone che esista una relazione funzionale t → y(t) tale che yi∗ = y(ti ) Si vuole, quindi, approssimare la funzione y(t) mediante la seguente combinazione lineare di n funzioni φj , con n ≤ m (3.41) y(t) ≈ Φ(t) := x1 φ1 (t) + x2 φ2 (t) + · · · + xn φn (t) Osserviamo che nelle applicazioni i valori yi∗ rappresentano usualmente delle rilevazioni sperimentali corrispondenti a diversi valori della variabile t. La funzione y(t) non `e, quindi, nota a priori e la funzione Φ(t) definita in (3.41) rappresenta una ipotesi, o pi` u precisamente un modello matematico, mediante il quale si vuole conoscere, in particolare, l’andamento del fenomeno, che si sta studiando, per valori della variabile t diversi da ti . Quando, invece, la la funzione y(t) `e nota a priori, la Φ(t) rappresenta una approssimazione di y(t) mediante le funzioni φj (t), che vengono scelte nell’ambito di classi di funzioni “semplici”, quali ad esempio i polinomi algebrici o trigonometrici. I valori xj , j = 1, . . . , n, i cosiddetti parametri del modello matematico, vengono scelti in maniera da minimizzare16 una distanza, opportunamente definita, tra i valori calcolati Φ(ti ) e i dati yi∗ , per i = 1, . . . , m. In particolare, il metodo dei minimi quadrati corrisponde a minimizzare la distanza euclidea. Se introduciamo la matrice A (nota anche come matrice design) di componenti aij = φj (ti )

(3.42)

e indichiamo con b e x i vettori di componenti yi∗ e xj , il problema precedente pu`o essere interpretato come la ricerca di un vettore x ∈ Rn che risolve il seguente problema di minimo minn

x∈R 16

m

ri2

(3.43)

i=1

L’operazione di ricerca ottimale dei parametri `e nota come procedura di fitting.

analisi numerica

c V. Comincioli

120

Elementi di algebra lineare

ove ri rappresentano le componenti del vettore residuo corrispondente al seguente sistema sovradeterminato Ax = b

(3.44)

Il problema pu`o avere pi` u soluzioni quando le funzioni base φi (t) sono linearmente dipendenti sui dati o anche essere la conseguenza di errori sperimentali e di arrotondamento ed `e la ti ; questa situazione pu` causa del possibile malcondizionamento del problema dei minimi quadrati. Un modo per risolvere (3.43) consiste nello scrivere la condizione necessaria per l’esistenza del minimo, cio`e nel porre uguali a zero le derivate di r2 rispetto a xj ; si ottiene in questo modo il seguente sistema lineare (3.45) AT Ax = AT b usualmente chiamato sistema delle equazioni normali. Si tratta di un sistema di n equazioni in n incognite. La matrice dei coefficienti AT A `e simmetrica, e nel caso in cui la caratteristica di A sia n (che corrisponde al caso in cui le funzioni base φi (t) siano linearmente indipendenti), `e pure definita positiva. Per la sua risoluzione si hanno, quindi, a disposizione vari metodi, in particolare, come vedremo pi` u avanti, il metodo di Cholesky. Tuttavia, osservando che il condizionamento della matrice A viene peggiorato 17 nel calcolo di AT A, possono talvolta essere pi` u opportuni, per motivi di stabilit` a numerica, quei metodi che permettono il calcolo della soluzione x, senza la costruzione esplicita della matrice AT A. Una possibilit` a, in questo senso, `e offerta dalla la SVD di A. Infatti, dal momento che le matrici ortogonali conservano la distanza, si ha r2 = UT (AVVT x − b)2 = Σz − d2 ove z = VT x e d = UT b. La SVD quindi, riduce il problema generale dei minimi quadrati a un problema relativo a una matrice diagonale. Il vettore z che fornisce il minimo di r2 `e dato da dj , se σj =  0 σj zj = arbitrari, se σj = 0

zj =

La trasformazione x = Vz risolve il problema originario. Se la matrice A ha rango minore di n, la soluzione non `e unica. In questo caso `e possibile aggiungere un’ulteriore condizione. Si pu`o ad esempio definire come soluzione del problema dei minimi quadrati, il vettore x di minima lunghezza. Tale vettore pu` o essere ottenuto, ponendo zj = 0, se σj = 0 Osservazione 3.7 L’introduzione del metodo dei minimi quadrati `e legata a problemi astronomici, in particolare la determinazione dell’orbita di Cerere, un asteroide tra Marte e Giove. La paternit` a del metodo `e all’origine di una disputa tra Gauss e Legendre. Nel 1805 appare il lavoro Nouvelles m´ethodes pour la determination des orbites des com´etes di A.M. Legendre contenente in un’appendice una descrizione del m´ethode des moindre quarr´es. La chiarezza di tale lavoro insieme ad esempi numerici fanno conoscere il metodo in tutta la comunit` a scientifica. Nonostante il lavoro di Legendre, Gauss chiama, nel suo famoso trattato Theoria motus corporum celestum, pubblicato nel 1809, il metodo come mio principio, di cui ho fatto uso gi` a a partire dal 1795. Legendre, allora, protesta in una lunga lettera a Gauss: je n’ai jamais appell´e ‘principium nostrum’ un principe qu’un autre avait publi´e avant moi. Gauss non rispose mai a Legendre, ma ricord` o ad altri l’esistenza di uno scritto ‘criptato’ nel suo diario del giugno 17, 1798. 17

Si ha, infatti µ2 (AT A) = (µ2 (A))2 .

analisi numerica

c V. Comincioli

3.5 I valori singolari e la pseudoinversa

3.5.3

121

Pseudoinversa

Data una matrice A ∈ Rm×n , viene detta matrice pseudoinversa 18 di A l’unica matrice A+ ∈ Rn×m che verifica le seguenti condizioni 1. AA+ A = A 2. A+ AA+ = A+ 3. AA+ `e simmetrica 4. A+ A `e simmetrica Si verifica, facilmente, che nel caso di una matrice A quadrata e non singolare si ha A+ = A−1 . Inoltre, se A `e rettangolare e di rango n (n ≤ m), allora A+ = (AT A)−1 AT , mentre se m ≤ n e il rango di A `e m, allora A+ = AT (AAT )−1 . Negli altri casi non c’e una procedura semplice per il calcolo della matrice pseudoinversa. Un metodo generale consiste nell’utilizzo della SVD di A. Si ha, infatti A+ = VΣ+ UT

(3.46)

ove la matrice Σ+ `e la pseudoinversa della matrice Σ. Si verifica facilmente che la Σ+ `e la matrice diagonale ∈ Rn×m ad elementi σj+ , con ⎧ ⎪ ⎨ 1 se σj = 0 + σj σj = ⎪ ⎩ 0, se σj = 0 Dimostreremo, ora, che la soluzione del problema dei minimi quadrati pu` o essere espressa nella forma x = A+ b.

Figura 3.10 Soluzione secondo i minimi quadrati. Siano N (A), R(A), rispettivamente lo spazio nullo e lo spazio immagine della matrice A; con N (A)⊥ , R(A)⊥ , indichiamo i corrispondenti spazi lineari ortogonali. 18

Uno studio sistematico del concetto di inversa generalizzata `e stato iniziato da Moore nel 1920. Un nuovo impulso a tale argomento `e dovuto a Penrose nel 1955, da cui anche l’attuale nome di pseudoinversa secondo Moore-Penrose. analisi numerica

c V. Comincioli

122

Elementi di algebra lineare

Indichiamo con P la matrice ∈ Rn×n , che proietta Rn su N (A)⊥ e con P la matrice ∈ Rm×m che proietta Rm su R(A), cio`e P = PT = P2 , Px = 0 T 2 P = P = P , Py = y

⇐⇒ ⇐⇒

x ∈ N (A) y ∈ R(A)

Per ogni b ∈ R(A) vi `e un unico x1 ∈ N (A)⊥ , che soddisfa Ax1 = b, cio`e vi `e una trasformazione univoca f : R(A) → Rn , con Af (b) = b, f (b) ∈ N (A)⊥ , ∀b ∈ R(A) Infatti, dato b ∈ R(A), vi `e un vettore x, che soddisfa b = Ax; quindi b = A(Px + (I − P)x) = APx = Ax1 , dove x1 = Px ∈ N (A)⊥, poich´e (I − P)x ∈ N (A). Inoltre se x1 , x2 ∈ N (A)⊥ , con Ax1 = Ax2 , ne segue che x1 − x2 ∈ N (A) N (A)⊥ = {0}, che implica x1 = x2 . La trasformazione f `e ovviamente lineare. La trasformazione composta f ◦ P : y ∈ Rm → f (Py) ∈ Rn `e definita, dal momento che Py ∈ R(A); essendo, inoltre, lineare, essa `e rappresentata da una matrice ∈ Rn×m . Lasciamo come esercizio la dimostrazione che tale matrice verifica le condizioni di Moore-Penrose, e quindi che essa coincide con la matrice pseudoinversa A+ di A. Osserviamo, anche, che A+ A `e il proiettore ortogonale P e analogamente che AA+ coincide con P. Si pu` o allora dimostrare il seguente risultato. Teorema 3.16 Il vettore x+ = A+ b soddisfa a Ax − b2 ≥ Ax+ − b2 Ax − b2 = Ax+ − b2 ,

e

+

x = x

(3.47) (3.48)

+

⇒ x2 > x 2

ossia il vettore x+ `e, tra le soluzioni del problema dei minimi quadrati, quella di minima lunghezza euclidea. Dimostrazione. 3.10)

Per il fatto che AA+ `e il proiettore ortogonale su R(A) si ha ∀x ∈ Rn (cfr. Figura Ax − b = u − v u := A(x − A+ b) ∈ R(A), v := (I − AA+ )b = b − Ax+ ∈ R(A)⊥

Di conseguenza ∀x ∈ Rn Ax − b22 = u22 + v22 ≥ v22 = Ax+ − b22 e Ax − b2 = Ax+ − b2 ha luogo precisamente se Ax = AA+ b. Per un tale x, poniamo x = x+ + (x − x+ ),

x+ ∈ N (A)⊥

Si ha A(x − x+ ) = Ax − AA+ b = 0, quindi x − x+ ∈ N (A); pertanto x22 = x+ 22 + x − x+ 22 > x+ 22

Regolarizzazione di un sistema lineare Dato il sistema lineare Ax = b, con A ∈ Rm×n e b ∈ Rm , e con soluzione nel senso dei minimi quadrati x+ = A+ b, supponiamo che il termine noto b sia perturbato mediante il vettore δb ∈ Rm . In corrispondenza, si ha da risolvere il sistema A(x+ δx) = b + δb, da cui δx = A+ δb. Si ha, allora, la seguente maggiorazione δx2 ≤ A+ 2 δb2 = σr−1 δb2 analisi numerica

c V. Comincioli

3.5 I valori singolari e la pseudoinversa

123

ove σr rappresenta il minimo valore singolare di A. D’altra parte, dalla relazione x+ = A+ b si ricava AA+ b2 = Ax+ 2 ≤ (cfr. (3.35)) σ1 x+ 2 . In definitiva, si ha la seguente maggiorazione dell’errore relativo δb2 σ1 δx2 ≤ (3.49) x+ 2 σr AA+ b2 La maggiorazione (3.49) suggerisce l’assunzione del quoziente σ1 /σr come numero di condizionamento µ2 (A) della matrice A nei riguardi della soluzione del sistema lineare Ax = b mediante i minimi quadrati. La definizione precedente di numero di condizionamento suggerisce come costruire problemi che approsu precisamente, si simino il problema di minimo dato min Ax − b2 , e che siano meglio condizionati. Pi` pu` o procedere nel seguente modo. Data la decomposizione A = UΣVT , si costruisce la matrice diagonale Σr = diag(η1 , η2 , . . . , ηµ , . . .) ponendo  −1 se σµ ≥ τ σµ ηµ := 0 altrimenti ove τ > 0 `e un parametro da scegliere opportunamente. In altre parole il passaggio da Σ a Σr comporta l’eliminazione dei valori singolari “piccoli”. Di conseguenza, anzich´e considerare la soluzione x+ = A+ b, + + + T + e chiamata la effettiva si considera l’approssimazione x+ r = Ar b, ove Ar := VΣr U . La matrice Ar ` pseudoinversa di A e, per quanto abbiamo detto in precedenza, il corrispondente problema `e meglio condizionato. Si pu` o mostrare che la matrice A+ r verifica le seguenti condizioni + T A+ r A = (Ar A) ,

+ T AA+ r = (AAr ) ,

+ + A+ r AAr = Ar

AA+ r A − A2 ≤ τ L’eliminazione dei valori singolari piccoli `e chiamata una regolarizzazione del problema. Naturalmente, il processo migliora il condizionamento, ma introduce un errore nel metodo. Vi sono altre possibilit`a per regolarizzare un problema malcondizionato. Segnaliamo in particolare un metodo dovuto a Tichonov (1963) che corrisponde a smorzare l’influenza dei valori singolari “piccoli”.

 Esercizio 3.9 Dimostrare che le matrici A e A∗ hanno gli stessi valori singolari.  Esercizio 3.10 Dimostrare che se A ∈ Cn×n , allora | det(A)| =

n &

σi

i=1

 Esercizio 3.11 Dimostrare che A∗ A `e definita positiva se e solo se le colonne di A sono linearmente indipendenti, ossia se A ha rango massimo.

 Esercizio 3.12 Calcolare la SVD e la pseudoinversa delle seguenti matrici 1. un vettore v ∈ Cn , 2. una matrice nulla ∈ Cm×n , 3. una matrice a rango 1, A = xy∗ , x ∈ Cm , y ∈ Cn .

analisi numerica

c V. Comincioli

124

Elementi di algebra lineare

 Esercizio 3.13 Se A ∈ Cm×n ; B ∈ Cn×r , sono due matrici di rango massimo, dimostrare che (AB)+ = B+ A+ Tale relazione pu` o non essere valida quando una delle due matrici non `e di rango massimo. Ad esempio, se ⎡ ⎤   2 2 1 1 A = ⎣ −2 −2 ⎦ , B = −2 3 1 1 allora (AB)+ =

3.6

1 [−2, 2, −1], 3

B+ A+ =

1 [−2, 2, −1] 30

Matrici non negative

Un vettore x ∈ Rn , o una matrice A ∈ Rm×n , `e non negativa se tutte le componenti sono non negative, ossia se xi ≥ 0, i = 1, . . . , n, o aij ≥ 0, i = 1, . . . , m; j = 1, . . . , n. Nel caso in cui le componenti sono tutte strettamente positive, il vettore x o la matrice A `e detta positiva. Per indicare le matrici non negative (positive), si user`a la notazione A ≥ 0 (rispettivamente A > 0). Di conseguenza la notazione x ≥ y, o A ≥ B, significher` a x − y ≥ 0, rispettivamente A − B ≥ 0. Infine, con |A| si indicher` a la matrice che ha come elementi i valori assoluti degli elementi della matrice A. Un esempio importante di matrici non negative `e dato dalle matrici stocastiche o matrici di Markov . Ricordiamo che gli elementi di tali matrici rappresentano delle probabilit`a, e quindi sono non negativi; inoltre, si ha che le somme di tutte le colonne sono uguali a 1, ossia ni=1 aij = 1, j = 1, . . . , n. Per le matrici A di Markov, con A > 0 si ha il seguente importante risultato che introduce l’interesse numerico delle matrici positive. ˆ , con Proposizione 3.10 Se A `e una matrice stocastica positiva, allora esiste un unico vettore positivo x (0) n n (0) ˆ i = 1, tale che per ogni vettore non negativo x con i=1 xi = 1, la successione definita nel i=1 x modo seguente x(k+1) = Ax(k) , k = 0, 1, . . . verifica ˆ, x(k) → x

per k → ∞

La dimostrazione di tale risultato `e basata sul seguente risultato relativo al raggio spettrale ρ(A) delle matrici positive. Proposizione 3.11 (Perron) Sia A una matrice positiva di ordine n. Allora, ρ(A) `e un autovalore semplice di A, e tutti gli altri autovalori sono minori in modulo di ρ(A). Inoltre, `e possibile prendere un autovettore corrispondente a ρ(A) positivo. Da tale risultato si ricava che per le matrici positive l’autovalore di modulo massimo `e sempre reale. Il risultato di Perron pu` o essere esteso alle matrici non negative che hanno la propriet`a della irriducibilit` a , e che analizzeremo nel successivo paragrafo. I risultati di base di Perron e Frobenius sulle matrici non negative risalgono ai primi anni del’900, ma l’argomento ha conosciuto negli ultimi anni un risveglio di interesse, a causa delle molte applicazioni delle matrici non negative nell’analisi numerica, nella probabilit` a e nella statistica, nei modelli economici, e in molti altri tipi di modelli matematici. analisi numerica

c V. Comincioli

3.6 Matrici non negative

3.6.1

125

Matrici irriducibili

Una matrice A ∈ Rn×n `e detta riducibile se vi `e una matrice permutazione P tale che   A11 A12 T PAP = 0 A22

(3.50)

ove A11 e A22 sono sottomatrici quadrate. Una matrice `e irriducibile se essa `e non riducibile. Naturalmente, una matrice ad elementi tutti diversi da zero `e irriducibile; d’altra parte una matrice con tutta una colonna o riga nulla `e riducibile. In effetti, il concetto di riducibilit` a non `e connesso con la grandezza o il segno degli elementi di una matrice, ma dipende solo dalla disposizione degli elementi nulli. Questa idea `e alla base dell’utilizzo del grafo orientato associato alla matrice. Il grafo orientato di una matrice ∈ Rn×n `e ottenuto congiungendo n punti (vertici) P1 , . . . , Pn mediante una linea orientata da Pi a Pj , se aij = 0, per i = j. Ricordiamo che un grafo orientato `e fortemente connesso se per ogni coppia di punti distinti Pi e Pj vi `e un cammino orientato da Pi a Pj . Si ha allora il seguente risultato. Proposizione 3.12 Una matrice A ∈ Rn×n `e irriducibile se e solo se il grafo orientato relativo a A `e fortemente connesso. Ad esempio (cfr. Figura 3.11), la matrice ⎡

2 A=⎣ 1 0 `e irriducibile, mentre sono riducibili le matrici ⎡ ⎤ 1 0 1 B = ⎣ 1 0 2 ⎦, 1 0 0

⎤ 1 0 2 1 ⎦ 1 2 ⎡

0 C=⎣ 1 2

⎤ 0 0 1 1 ⎦ 2 2

Figura 3.11 Grafi relativi alle matrici A,B,C. Per le matrici non negative e irriducibili si ha il seguente risultato che contiene il precedente risultato di Perron come caso particolare. analisi numerica

c V. Comincioli

126

Elementi di algebra lineare

Teorema 3.17 (Perron-Frobenius) Sia A una matrice ∈ Rn×n non negativa e irriducibile. Allora il raggio spettrale ρ(A) `e un autovalore semplice di A e un autovettore associato pu` o essere preso positivo. Inoltre, se A ha almeno una riga con tutti gli elementi diversi dallo zero allora ogni altro autovalore λ di A `e tale che |λ| < ρ(A). Per una dimostrazione si veda ad esempio Ortega [321]; essa sfrutta il seguente interessante risultato. Lemma 3.1 Se B `e una matrice ∈ Rn×n irriducibile non negativa con elementi diagonali positivi, allora Bn−1 > 0. Come illustrazione del risultato di Perron-Frobenius, ⎡ 0 A=⎣ 0 1

si consideri la seguente matrice ⎤ 1 0 0 1 ⎦ 0 0

che, come si verifica facilmente, `e irriducibile. I suo autovalori corrispondono alle radici dell’equazione √ a 1 e (−1 ± i 3)/2. I tre autovalori hanno quindi caratteristica λ3 − 1 = 0, cio`e alle radici cubiche dell’unit` modulo uguale a 1, ma l’autovalore 1 `e semplice e ad esso corrisponde l’autovettore [1, 1, 1]T .

3.6.2

Matrici con inverse non negative; M-matrici

Una matrice A ∈ Rn×n `e ad inversa non negativa se essa `e invertibile e A−1 ≥ 0. Un esempio di condizioni che assicurano che una matrice A `e a inversa non negativa, `e dato dal seguente risultato. Teorema 3.18 Sia A una matrice ∈ Rn×n con elementi diagonali positivi e poniamo D = diag(a11 , . . . , ann ). Supponiamo che B = D − A ≥ 0 e ρ(D−1 B) < 1. Allora esiste A−1 ,con A−1 ≥ 0. Inoltre, se A `e irriducibile, allora A−1 > 0. Per le matrici non negative o ad inversa non negativa vi sono diversi risultati di tipo confronto. Proposizione 3.13 Se A ≥ B sono matrici ∈ Rn×n con inverse non negative, allora A−1 ≤ B−1 . Dimostrazione. Da A−1 (A − B) ≥ 0 si conclude che A−1 B ≤ I. Quindi, (I − A−1 B)B−1 ≥ 0, che `e equivalente a A−1 ≤ B−1 . Proposizione 3.14 Se 0 ≤ A ≤ B, allora ρ(A) ≤ ρ(B) Vediamo ora una classe importante di matrici a inversa positiva. Definizione 3.3 Una matrice A ∈ Rn×n `e una M-matrice se aij ≤ 0, i, j = 1, . . . , n, i = j, e A−1 ≥ 0. Una M-matrice simmetrica `e detta matrice di Stieltjes19 . Posto A = D − B, ove D `e la matrice diagonale costituita dagli elementi sulla diagonale principale di A e B `e la matrice degli elementi fuori dalla diagonale, si ha I = (D − B)A−1 = DA−1 − BA−1 Tale risultato mostra che gli elementi di D sono positivi, in quanto BA−1 ≥ 0. In effetti, si pu` o dimostrare il seguente risultato. 19

Thomas Jan Stieltjes (1856-1894).

analisi numerica

c V. Comincioli

3.6 Matrici non negative

127

Proposizione 3.15 Una matrice reale A di ordine n con elementi fuori dalla diagonale non positivi `e una M-matrice se e solo se A ha elementi positivi sulla diagonale e ρ(D−1 B) < 1. Esempio 3.2 Sia A la seguente matrice tridiagonale ⎡ a1 b 1 ⎢ .. ⎢ c1 a 2 . A=⎢ ⎢ . . .. .. ⎣ cn−1



bn−1 an

⎥ ⎥ ⎥ ⎥ ⎦

(3.51)

ove ai > 0, i = 1, . . . , n,

bi < 0, ci < 0,

i = 1, . . . , n − 1

(3.52)

e a1 + b1 > 0,

an + cn−1 > 0,

ai + bi + ci−1 ≥ 0, i = 2, . . . , n − 1

(3.53)

Matrici di tale forma sono alla base di diversi modelli applicativi (in particolare, come vedremo nel seguito, nella risoluzione di problemi differenziali mediante i metodi alle differenze finite). Si pu` o dimostrare che nelle ipotesi (3.52), (3.53) la matrice (3.51) `e una M-matrice, con A−1 > 0. Come applicazione delle M–matrici esaminiamo la seguente situazione. Supponiamo che in un sistema lineare Ax = b, il vettore b sia dato con approssimazione, ad esempio b1 ≤ b ≤ b2 . Se A `e una M-matrice, si ha allora la seguente stima della soluzione: A−1 b1 ≤ A−1 b = x ≤ A−1 b2 . Una condizione sufficiente affinch´e una matrice sia una M-matrice `e fornita dalla propriet`a di predominanza diagonale, definita nel seguente modo. Definizione 3.4 Una matrice A ∈ Rn×n `e diagonalmente dominante se n

|aij | ≤ |aii |,

i = 1, . . . , n

(3.54)

j=1, j=i

e strettamente diagonalmente dominante se in (3.54) si ha la disuguaglianza stretta per tutti gli indici i. Infine, la matrice `e irriducibilmente diagonalmente dominante se essa `e irriducibile, diagonalmente dominante, e la (3.54) ha luogo con disuguaglianza stretta per almeno un indice i. Relativamente a tale classe di matrici si ha il seguente importante risultato. Teorema 3.19 Una matrice A ∈ Rn×n , strettamente o irriducibilmente diagonalmente dominante, `e invertibile. Dimostrazione. Considerando ad esempio il caso in cui A `e strettamente diagonalmente dominante, supponiamo che esista un x = 0, tale che Ax = 0. Sia |xm | = max1≤j≤n |xj |. Allora |xm | > 0 e la disuguaglianza amj xj | ≤ |xm | |amj | |amm ||xm | = | j=m

j=m

contraddice la stretta dominanza diagonale. In maniera analoga si procede quando A `e irriducibilmente diagonalmente dominante. Abbiamo inoltre la seguente propriet` a. Teorema 3.20 Se una matrice A ∈ Rn×n , strettamente o irriducibilmente diagonalmente dominante, `e tale che aij ≤ 0, i = j e aii > 0, i = 1, . . . , n, allora A `e una M-matrice. analisi numerica

c V. Comincioli

128

Elementi di algebra lineare

Per una dimostrazione si veda ad esempio Ortega [321].

 Esercizio 3.14 Verificare che una matrice tridiagonale `e irriducibile se e solo se gli elementi della sopra- e sotto-diagonale sono diversi dallo zero.

 Esercizio 3.15 Mostrare che se A `e una matrice non negativa e irriducibile, allora An−1 `e positiva.

3.7

Complementi e Problemi

Problema 3.1 Dimostrare che il determinante della matrice tridiagonale ⎡ ⎤ b1 c1 ⎢ a2 b2 c2 ⎥ ⎢ ⎥ ⎢ ⎥ a3 b3 c3 ⎢ ⎥ Jn = ⎢ ⎥ .. .. .. ⎢ ⎥ . . . ⎢ ⎥ ⎣ an−1 bn−1 cn−1 ⎦ an bn pu` o essere calcolato mediante la seguente relazione ricorrente det(J0 ) = 1, det(J1 ) = b1 det(Jn ) = bn det(Jn−1 ) − an cn−1 det(Jn−2 ) Soluzione. Sviluppando secondo l’ultima riga si ottiene det(Jn ) = bn det(Jn−1 ) − an det(∆n ) ove la matrice ∆n `e ottenuta sopprimendo in Jn la riga e la colonna contenente l’elemento an ⎤ ⎡ b 1 c1 ⎥ ⎢ a2 b 2 c2 ⎥ ⎢ ⎥ ⎢ .. ⎥ ⎢ . ∆n = ⎢ ⎥ ⎥ ⎢ b c a n−3 n−3 n−3 ⎥ ⎢ ⎦ ⎣ an−2 bn−2 an−1 cn−1 Sviluppando secondo l’ultima colonna si ottiene det(∆n ) = cn−1 det(Jn−2 ) da cui il risultato richiesto.

Problema 3.2 Se A `e una matrice simmetrica definita positiva, dimostrare che det(A + xxT ) = (xT A−1 x) det(A) + det(A) per ogni vettore x. analisi numerica

c V. Comincioli

3.7 Complementi e Problemi

129

Soluzione. Il caso x = 0 `e ovvio. In caso contrario, poich´e per ipotesi la matrice A `e simmetrica definita positiva, esiste una matrice ortogonale U tale che A = UT ΛU, ove Λ `e la matrice diagonale degli autovalori della matrice A. Posto R = UT Λ1/2 U, si ha det(A + xxT ) = det(A) det(R) det(I + A−1 xxT ) det(R)−1 = det(A) det(I + yyT ),

con y = R−1 x

La matrice yyT `e simmetrica e quindi diagonalizzabile. Essendo di rango uno (con immagine costituita dai vettori proporzionali a y), ha come nucleo un sottospazio di dimensione (n − 1). Dal momento che tr(yyT ) = yT y, si ha che yT y `e un autovalore semplice associato all’autovettore y. Se ne ricava che lo spettro della matrice (I + yyT ) `e formato dai numeri: (1 + yT y, 1, . . . , 1) e quindi det(I + yyT ) = 1 + yT y = 1 + xT R−1 R−1 x = 1 + xT A−1 x

Problema 3.3 Esaminare le seguenti questioni (1) Sia A ∈ Rn×n una matrice con elementi in modulo inferiori a una costante M > 0 assegnata |aij | ≤ M,

1 ≤ i, j ≤ n

Dare una condizione sufficiente su M affinch´e la serie somma (I − A)−1 .

m m≥0 A

sia convergente e abbia come

(2) Mostrare mediante un esempio che la condizione sufficiente trovata al punto (1) non `e una condizione necessaria. (3) Si vuole calcolare l’inversa della matrice ⎡ 0.98 0.02 ⎢ 0.08 0.93 ⎢ ⎢ 0.04 0.01 ⎢ ⎣ 0.02 −0.03 0.07 0.04

⎤ 0 0.04 0 0.08 −0.07 −0.03 ⎥ ⎥ 0.97 −0.07 −0.04 ⎥ ⎥ ⎦ 0 1.03 0 0 −0.08 1.01

scrivendola sotto la forma I − A, ove tutti gli elementi di A sono piccoli, e utilizzando la serie m m≥0 A . Si vuole ottenere ciascun elemento della matrice inversa con un errore inferiore a 0.01. Si vuole quindi conoscere a quale valore di m occorre troncare la serie. Soluzione. Affinch´e la serie

converga e abbia per somma (I − A)−1 `e necessario e sufficiente che ρ(A) < 1, ove ρ(A) indica il raggio spettrale di A. D’altra parte per ogni norma di matrice si ha ρ(A) ≤ A. Considerando ad esempio la norma A∞ , si ha m m≥0 A

|aij | ≤ M,

∀ i, j ⇒ A∞ = max

1≤i≤n

n

|aij | ≤ n M

j=1

Pertanto la condizione M< `e una condizione sufficiente affinch´e la serie analisi numerica

1 n

m m≥0 A

(3.55)

converga e abbia somma (I − A)−1 . c V. Comincioli

130

Elementi di algebra lineare

Un esempio per il quale la serie m≥0 Am converge, ma non `e verificata la condizione (3.55), `e fornito dalle matrici A nil–potenti, cio`e dalle matrici per le quali si ha Ap = 0 per un certo p ≥ 1. Ad esempio per n = 2     M M 1+M M −1 A= ; (I − A) = = I + A (= Am ) −M −M −M 1−M m≥0

Un altro esempio, che lasciamo sviluppare come esercizio, `e fornito dalle matrici diagonali. Nel calcolo richiesto al punto (3) si ha M = 0.08 < 1/5 e quindi la serie m≥0 Am converge. Osservando che, se ap `e un elemento di Ap si ha |ap | ≤ np−1 M p ne deriva che ogni elemento rp di |rp | ≤

m≥p

Am verifica la seguente maggiorazione

(0.4)p−1 0.08 M p np−1 = = 0.13 × (0.4)p−1 < 0.01 1 − nM 0.6

` sufficiente quindi calcolare I + A + A2 + A3 . se p = 4. E

Problema 3.4 Analizzare dal punto di vista della riducibilit` a le seguenti matrici ⎡

0 ⎢ 0 A1 = ⎢ ⎣ 0 1 ⎡ 0 ⎢ 0 A3 = ⎢ ⎣ 0 1

0 0 1 0

1 0 0 0

1 0 0 1

0 1 0 0

⎤ 0 1 ⎥ ⎥ 0 ⎦ 0 ⎤ 0 0 ⎥ ⎥ 1 ⎦ 0



0 ⎢ 0 A2 = ⎢ ⎣ 1 0 ⎡ 1 ⎢ 0 A4 = ⎢ ⎣ 0 1

0 0 0 1

1 0 0 0

1 0 0 0

0 1 0 0

⎤ 0 1 ⎥ ⎥ 0 ⎦ 0 ⎤ 0 0 ⎥ ⎥ 1 ⎦ 0

Soluzione.

Una condizione necessaria e sufficiente affinch´e una matrice A ∈ Rn×n sia irriducibile `e che per ogni coppia ordinata (i, j) di elementi di {1, 2, . . . , n} si possa trovare una successione aik1 , ak1 k2 , . . . , akp j di elementi non nulli di A. Nel caso della matrice A1 consideriamo la successione a13 , a32 , a24 , a41 , a13 , a32 , a24 di elementi uguali a 1. Qualunque sia la coppia (i, j) esiste una sottosuccessione che soddisfa la definizione precedente. Quindi A1 `e irriducibile. Per A2 consideriamo la coppia (1, 2). Si ha che a1k1 = 0 implica k1 = 3 e a3k2 = 0 implica k2 = 1. Quindi non `e possibile trovare una successione a1k1 , ak1 k2 , . . . , akp k2 di elementi diversi dallo zero; pertanto, la matrice A2 `e riducibile. La matrice A3 `e irriducibile in quanto basta considerare la successione a12 , a23 , a34 , a41 , a12 , a23 , a34 di elementi uguali a 1. In modo analogo si vede che la matrice A4 `e irriducibile. In termini della teoria dei grafi si ha che una condizione necessaria e sufficiente affinch´e una matrice A ∈ Rn×n sia irrriducibile `e che il suo grafo associato sia fortemente connesso, cio`e per ogni coppia di nodi (i, j) vi sia un cammino orientato da i a j. Lasciamo come esercizio lo studio dei grafi relativi alle matrici considerate.

analisi numerica

c V. Comincioli

3.7 Complementi e Problemi

131



Problema 3.5 Sia A=

A11 A12 A21 A22



una matrice quadrata decomposta a blocchi. Mostrare che se A11 `e invertibile allora det(A) = det(A11 ) det(A22 − A21 A−1 11 A12 ) Soluzione. Essendo A11 invertibile, si pu`o scrivere 

A=

A11 A21

A12 A22





=

I A21 A−1 11

0 I

 

A11 0

A12 (A22 − A21 A−1 11 A12 )



In questo modo il calcolo `e ricondotto a quello del determinante di matrici triangolari a blocchi. Per tali matrici `e sufficiente sviluppare secondo la colonna contenente il blocco degli zeri.

Problema 3.6 Mostrare che se A ∈ Cm×n `e una matrice di rango r, essa pu` o essere rappresentata nella forma A = BC a di tale rappresentazione. ove B ∈ Cm×r e C ∈ Cr×n , ambedue di rango r. Discutere l’unicit` Soluzione. Possiamo assumere, senza perdita di generalit`a, che la sottomatrice principale A11 di ordine r sia non singolare. In caso contrario, infatti, `e possibile trovare due matrici di permutazione P1 e P2 tali −1 che P1 AP2 abbia tale propriet`a e se P1 AP2 = BC allora A = (P−1 1 B)(CP2 ). Dimostriamo allora la seguente uguaglianza       I A11 A12 A11 A12 = A= A21 A22 A21 A−1 11 In effetti, l’unico punto da dimostrare `e che A21 A−1 11 A12 = A22 . A tale scopo osserviamo che, dal momento che il rango della matrice A `e r e le prime r righe sono indipendenti, le rimanenti m − r righe possono essere rappresentate come combinazioni lineari delle prime. Questo equivale a dire che esiste una matrice Z ∈ C(m−r)×r tale che     Z A11 A12 = A21 A22 da cui si ricavano le uguaglianze: ZA11 = A21 e ZA12 = A22 che esprimono il risultato richiesto. Sottolineiamo che i due fattori trovati sono di rango r, in quanto la prima matrice ha il blocco I di ordine r e la seconda, che ha r righe, include A11 . Per quanto riguarda l’unicit` a della rappresentazione, osserviamo che se B, C sono due fattori di A, allora sono tali anche le due matrici BQ e Q−1 C per ogni matrice Q ∈ Cr×r non singolare. Ricordiamo, comunque, il seguente risultato. Data una particolare decomposizione BC, la pseudoino essere espressa nella seguente forma versa A+ della matrice A pu` A+ = C∗ (CC∗ )−1 (B∗ B)−1 B∗ che non dipende dalla particolare scelta della fattorizzazione A = BC. Ricordiamo che C∗ indica la trasposta coniugata di C. Il vettore x = A+ b rappresenta la soluzione nel senso dei minimi quadrati del sistema sottodeterminato Ax = b.

Problema 3.7 Trovare la pseudoinversa di un vettore colonna. analisi numerica

c V. Comincioli

132

Elementi di algebra lineare

Soluzione. Sia a ∈ Cm un vettore non nullo. Per il calcolo della pseudoinversa A+ della matrice

A = a ∈ Cm×1 , consideriamo la sua decomposizione in valori singolari A = UΣV∗ . A questo proposito, ricordiamo che i quadrati dei valori singolari sono gli autovalori della matrice AA∗ ∈ Cm×m , mentre le colonne della matrice U corrispondono agli autovettori normalizzati della stessa matrice e quelle della matrice V agli autovettori normalizzati della matrice A∗ A. Osserviamo che la matrice aa∗ `e una matrice di ordine m i cui autovalori sono dati da {a∗ a, 0, . . . , 0}. Dal momento che (aa∗ )a = a(a∗ a), si ha che l’autovettore di aa∗ corrispondente a a∗ a `e il vettore a. √ ∗ Questo significa che la prima colonna della matrice unitaria U `e data da a/ a a. Come vedremo, non servono altre informazioni su U. Poich´e [a∗ a] `e una matrice 1 × 1 possiamo assumere V = [1]. Si ha allora ∗  √  √ a∗ a, 0, 0, . . . , 0 , Σ+ = 1/ a∗ a, 0, 0, . . . , 0 Σ= Avremo pertanto A+ = VΣ+ U∗ =

3.7.1

1 ∗ a a∗ a

Matrici in stechiometria

Una reazione chimica `e una trasformazione di certe sostanze (reagenti) in altre sostanze (prodotti di reazione) conservativa rispetto ai tipi di atomi ed ai numeri di atomi di ciascun tipo20 . Una reazione chimica comporta quindi variazioni in quantit` a delle diverse sostanze in rapporti fissati. Assumendo come esempio illustrativo la reazione di ossidazione dell’ammoniaca (NH3 ) con ossigeno molecolare (O2 ) con produzione di ossido di azoto (NO) e acqua (H2 O), per schema stechiometrico della reazione si intende la notazione simbolica 4 NH3 + 5 O2 → 4 NO + 6 H2 O ove i numeri che precedono le formule chimiche, detti numeri (o coefficienti) stechiometrici, sono i minimi interi (positivi) che esprimono nel modo pi` u semplice e comodo possibile l’uguaglianza dei numeri di atomi di ciascun tipo tra l’insieme dei reagenti e quello dei prodotti. I numeri stechiometrici sono tali che i rapporti tra (ad esempio) il primo di essi e ciascuno degli altri tre, ossia: 45 , 44 , 46 , individuano (in valore assoluto) i rapporti fra la variazione in quantit` a di NH3 e le rispettive variazioni di O2 , NO e H2 O. La determinazione dei numeri stechiometrici di uno schema di reazione, chiamata operazione di bilanciamento, pu` o essere ottenuta mediante differenti metodi. Nel seguito illustreremo su un esempio particolare una procedura basata sull’utilizzo dell’algebra lineare.

(i) Dato il seguente schema di reazione non bilanciato Pb (N3 )2 + Cr (MnO4 )2 → Cr2 O3 + MnO2 + Pb3 O4 + NO ove gli atomi di azotidrato di piombo e di permanganato di cromo si combinano dando origine a quattro prodotti: ossido di cromo, diossido di manganese, tetrossido di piombo, e ossido di azoto, si cercano gli interi u, v, w, x, y e z tali che u molecole di azotidrato di piombo pi` u v molecole di permanganato di cromo producono esattamente w molecole di ossido di cromo, x molecole di diossodo di manganese, y molecole di tetrossido di piombo, e z molecole di ossido di azoto, ossia u Pb (N3 )2 + v Cr (MnO4 )2 → w Cr2 O3 + x MnO2 + y Pb3 O4 + z NO

(3.56)

20 e, se alla reazione chimica partecipano specie ioniche, rispetto alla carica elettrica. Esempi di reazioni implicanti specie ioniche sono le reazioni tra sostanze allo stato disciolto in un solvente polare ed in particolare nell’acqua; in effetti in tale ambiente di reazione molti composti inorganici esistono, almeno parzialmente, sotto forma di specie ioniche.

analisi numerica

c V. Comincioli

3.7 Complementi e Problemi

133

A tale scopo, i cinque elementi in gioco nella reazione: Pb, N, Cr, Mn, O, possono essere considerati come vettori linearmente indipendenti dello spazio euclideo R5 . In particolare, essi possono essere associati ai vettori unitari ei , i = 1, . . . 5 nel seguente modo Pb N Cr Mn O La reazione (3.56) pu` o essere allora ⎡ ⎡ ⎤ 1 ⎢ ⎢ 6 ⎥ ⎢ ⎢ ⎥ ⎥+v⎢ 0 u⎢ ⎢ ⎢ ⎥ ⎣ ⎣ 0 ⎦ 0

⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒ ⇐⇒

e1 e2 e3 e4 e5

≡ [1, 0, 0, 0, 0]T ≡ [0, 1, 0, 0, 0]T ≡ [0, 0, 1, 0, 0]T ≡ [0, 0, 0, 1, 0]T ≡ [0, 0, 0, 0, 1]T

descritta dalla seguente equazione vettoriale ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ 0 3 0 0 0 ⎢ 1 ⎢ 0 ⎥ ⎢ 0 ⎥ ⎢ 0 ⎥ 0 ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ 1 ⎥ ⎥ = w⎢ 2 ⎥ + x⎢ 0 ⎥ + y⎢ 0 ⎥ + z⎢ 0 ⎣ 0 ⎣ 0 ⎦ ⎣ 1 ⎦ ⎣ 0 ⎦ 2 ⎦ 4 2 3 8 1

⎤ ⎥ ⎥ ⎥ ⎥ ⎦

(3.57)

che rappresenta un sistema lineare omogeneo di cinque equazioni nelle sei incognite u, v, w, x, y, z. Il problema del bilanciamento `e allora ricondotto a quello della ricerca di opportune soluzioni intere del sistema sottoderminato (3.57). Ponendo per il momento u = 1, si ottiene il seguente sistema ridotto ⎤ ⎤ ⎡ ⎤⎡ ⎡ 1 v 0 0 0 3 0 ⎢ 0 0 0 0 1 ⎥⎢ w ⎥ ⎢ 6 ⎥ ⎥ ⎥ ⎢ ⎥⎢ ⎢ ⎢ −1 2 0 0 0 ⎥ ⎢ x ⎥ = ⎢ 0 ⎥ ⎥ ⎥ ⎢ ⎥⎢ ⎢ ⎣ −2 0 1 0 0 ⎦ ⎣ y ⎦ ⎣ 0 ⎦ 0 z −8 3 2 4 1 che ha come soluzione il vettore [44/15, 22/15, 88/15, 1/3, 6]T . Assumendo allora u = 15, si ottengono i numeri stechiometrici cercati u = 15, v = 44, w = 22, x = 88, y = 5, z = 90 Osserviamo che la risolubilit`a del sistema ridotto corrisponde al fatto che la reazione `e a stechiometria univoca. Il metodo `e illustrato da ulteriori esempi.

(ii) Per bilanciare lo schema di reazione u Ca(H2 PO4 )2 + v Ca(OH)2 → x Ca3 (PO4 )2 + y H2 O posto Ca = e1 ; H = e2 ; P = e3 ; O = e4 si ottiene l’equazione vettoriale



⎡ ⎤ 1 1 ⎢ 4 ⎥ ⎢ 2 ⎥ ⎢ u⎢ ⎣ 2 ⎦+v⎣ 0 8 2





⎤ ⎡ 3 0 ⎥ ⎢ 0 ⎥ ⎢ 2 ⎥ = x⎢ ⎥ ⎢ ⎦ ⎣ 2 ⎦+y⎣ 0 8 1

da cui, posto u = 1 e trascurando la quarta equazione, ⎡ ⎤⎡ 3 0 −1 ⎣ 0 2 −2 ⎦ ⎣ 2 0 0

⎤ ⎥ ⎥ ⎦

il seguente sistema ben posto ⎤ ⎤ ⎡ 1 x y ⎦=⎣ 4 ⎦ 2 v

che ha la soluzione [1, 4, 2]. Pertanto lo schema bilanciato `e il seguente Ca(H2 PO4 )2 + 2 Ca(OH)2 → Ca3 (PO4 )2 + 4 H2 O analisi numerica

c V. Comincioli

134

Elementi di algebra lineare

(iii) Per bilanciare lo schema di reazione u P2 I4 + v P4 + wH2 O → x PH4 I + y H3 PO4 posto P = e1 ; I = e2 ; H = e3 ; O = e4 si ottiene l’equazione vettoriale ⎡ 2 ⎢ 4 u⎢ ⎣ 0 0





⎤ ⎡ 4 ⎥ ⎢ ⎥ ⎢ ⎥+v⎢ 0 ⎥+w⎢ ⎦ ⎣ 0 ⎦ ⎣ 0

da cui, posto u = 1, il seguente sistema ⎡ 1 ⎢ 1 ⎢ ⎣ 4 0

⎡ ⎤ 0 ⎢ 0 ⎥ ⎥ = x⎢ ⎣ 2 ⎦ 1

⎤ ⎡ 1 1 ⎢ 0 1 ⎥ ⎥+y⎢ ⎣ 3 4 ⎦ 0 4

⎤ ⎥ ⎥ ⎦

ben posto ⎤⎡ 1 −4 0 x ⎢ y 0 0 0 ⎥ ⎥⎢ 3 0 −2 ⎦ ⎣ v 4 0 −1 w

⎤ 2 ⎥ ⎢ 4 ⎥ ⎥ ⎥=⎢ ⎦ ⎣ 0 ⎦ 0 ⎤



che ha la soluzione [4.0, 3.2, 1.3, 12.8]. Assumendo u = 10, si ha il seguente schema bilanciato 10 P2 I4 + 13 P4 + 128 H2 O → 40 PH4 I + 32 H3 PO4

(iv) Per bilanciare lo schema di reazione u C2 H5 Cl + v NaPb → x (C2 H5 )4 Pb + y NaCl + z Pb descrittivo del processo industriale di produzione del piombo tetraetile, additivo antidetonante delle benzine, posto C = e1 ; H = e2 ; Cl = e3 ; Na = e4 ; Pb = e5 si ottiene l’equazione vettoriale ⎡ 2 ⎢ 5 ⎢ u⎢ ⎢ 1 ⎣ 0 0





⎥ ⎢ ⎥ ⎢ ⎥+v⎢ ⎥ ⎢ ⎦ ⎣

0 0 0 1 1

da cui, posto u = 1, il seguente sistema ben ⎡ 8 0 ⎢ 20 0 ⎢ ⎢ 0 1 ⎢ ⎣ 0 1 1 0





⎥ ⎢ ⎥ ⎢ ⎥ = x⎢ ⎥ ⎢ ⎦ ⎣

8 20 0 0 1





⎥ ⎢ ⎥ ⎢ ⎥+y⎢ ⎥ ⎢ ⎦ ⎣

0 0 1 1 0





⎥ ⎢ ⎥ ⎢ ⎥+z⎢ ⎥ ⎢ ⎦ ⎣

0 0 0 0 1

⎤ ⎥ ⎥ ⎥ ⎥ ⎦

posto 0 0 0 0 0 0 0 −1 1 −1

⎡ ⎤ 2 x ⎢ 5 ⎥ ⎥⎢ y ⎥ ⎢ ⎥ ⎢ ⎥⎢ ⎥⎣ z ⎦ = ⎢ 1 ⎦ ⎣ 0 v 0 ⎤



⎤ ⎥ ⎥ ⎥ ⎥ ⎦

che ha la soluzione [0.25, 1, 0.75, 1]. Pertanto lo schema bilanciato `e il seguente 4 C2 H5 Cl + 4 NaPb → (C2 H5 )4 Pb + 4 NaCl + 3 Pb analisi numerica

c V. Comincioli

3.8 Esperienze con Matlab

135

(v) Consideriamo, infine, il seguente schema di reazione (non bilanciato) u HClO3 → x HClO4 + y Cl2 + z O2 + t H2 O Posto H = e1 ; Cl = e2 ; O = e3 si ottiene l’equazione vettoriale ⎡

⎡ ⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ ⎤ 1 1 0 0 2 u⎣ 1 ⎦ = x⎣ 1 ⎦ + y⎣ 2 ⎦ + z⎣ 0 ⎦ + t⎣ 0 ⎦ 3 4 0 2 1

Se si pone u = 1, si ottiene il seguente sistema x, y, z, t ⎡ 1 0 0 ⎣ 1 2 0 4 0 2

lineare omogeneo di tre equazioni nelle quattro incognite ⎡ ⎤ x 2 ⎢ y 0 ⎦⎢ ⎣ z 1 t



⎡ ⎤ 1 ⎥ ⎥=⎣ 1 ⎦ ⎦ 3

Essendo la caratteristica della matrice dei coefficienti uguale a 3, le soluzioni costituiscono uno spazio lineare di dimensione 1. Dal punto di vista chimico, significa che nello schema dato sono mascherati due schemi di reazione indipendenti, ciascuno implicante almeno una sostanza in meno che nell’altro. Come esemplificazione, si hanno i seguenti possibili schemi bilanciati 5 HClO3 → 3 HClO4 + Cl2 + O2 + H2 O 8 HClO3 → 4 HClO4 + 2 Cl2 + 3 O2 + 2 H2 O 11 HClO3 → 5 HClO4 + 3 Cl2 + 5 O2 + 3 H2 O

3.8

Esperienze con Matlab

Le matrici sono i dati sui quali opera MAT(trix)LAB(oratory). Vi sono quindi diverse operazioni sulle matrici messe a disposizione gi`a compilate (builded). La loro conoscenza `e importante per massimizzare l’efficienza dell’esecuzione di programmi matlab. In questo paragrafo richiameremo attraverso esemplificazioni alcune di tali operazioni.

3.8.1

Matrix indexing: operazioni su indici di matrici

v=[16 5 9 4 2 11 7 14]; v(3) % estrae il terzo elemento ans = 9 -----v([1 5 6]) % estrae il primo, il quinto e il sesto elemento ans = 16 2 11 -----v(logical([1 0 0 0 1 1 0 0])) % logical subscription ans = 16 2 11 -----v(3:7) % estrae gli elementi dal terzo fino al settimo ans = 9 4 2 11 7 -----analisi numerica

c V. Comincioli

136

Elementi di algebra lineare

m=[-1 2 1 -1] m>0 ans = 0 1 1 0 m(m>0) ans = 2 1 -----v([2 5])= v([5 2]) % scambia tra loro il secondo e il quinto elemento v = 16 2 9 4 5 11 7 14

Pi` u in generale per una matrice a due indici A=rand(3) A = 0.9501 0.4860 0.4565 0.2311 0.8913 0.0185 0.6068 0.7621 0.8214 A([1 3],:)=A([3 1],:) % scambia tra loro la prima e la terza riga A = 0.6068 0.7621 0.8214 0.2311 0.8913 0.0185 0.9501 0.4860 0.4565

Ritornando al vettore v originario v2=v([5:8 1:4]) % estrae e scambia tra loro le due met` a del vettore v2 = 2 11 7 14 16 5 9 4 -----v(end) % estrae l’ultimo elemento ans = 14 -----v(5:end) % estrae gli elementi dal quinto fino all’ultimo. ans = 2 11 7 14 -----v(2:end-1) ans = 5 9 4 2 11 7 -----v(1:2:end) % estrae gli elementi di indice dispari ans = 16 9 2 7 -----v(end:-1:1) % inverte l’ordine degli elementi ans = 14 7 11 2 4 9 5 16 % Il risultato pu` o essere ottenuto (pi` u rapidamente) mediante la % funzione fliplr(v)

v([2 3 4])=[10 15 20] % sostituisce alcuni elementi di v v = 16 10 15 20 2 11 7 14 -----v([2 3 ])=30 % sostituisce il secondo e il terzo elemento con 30 v = 16 30 30 20 2 11 7 14

Matrici a due indici A=magic(4) A = 16 2 5 11 analisi numerica

3 10

13 8 c V. Comincioli

3.8 Esperienze con Matlab

137

9 7 6 12 4 14 15 1 -----A(2,4) % estrae l’elemento nella riga 2 e colonna 4 ans = 8

Pi` u generalmente A(2:4, 1:2) ans =5 11 9 7 4 14 A(3,:) % estrae la terza riga; : ` e una short-hand notazione per 1:end ans = 9 7 6 12 A(:,end) % estrae l’ultima colonna ans =13 8 12 1

Supponiamo che si vogliano estrarre diversi elementi, ad esempio di indici (2,1), (3,2), (4,4). L’espressione A([ 2 3 4], [1 2 4]) non funziona. Infatti A([ 2 3 4], [1 2 4]) ans =5 11 8 9 7 12 4 14 1

Lo scopo pu`o essere ottenuto utilizzando il linear indexing degli elementi della matrice. Ricordando che Matlab memorizza A in un vettore procedendo per colonne, si ha ad esempio A(14) %lo stesso che A(2,4) ans = 8 A([6 12 15]) ans = 11 15 12

Gli indici lineari corrispondenti agli indici (2,1), (3,2), (4,4) possono essere ottenuti nel seguente modo idx=sub2ind(size(A),[2 3 4],[1 2 4]) idx = 2 7 16

e quindi in definitiva gli elementi richiesti sono A(idx) ans = 5

7

1

Per estrarre da una matrice data una particolare diagonale o delle sottomatrici triangolari superiori o inferiori si veda help diag help triu help tril analisi numerica

c V. Comincioli

138

Elementi di algebra lineare

Problema 3.8 Porre alcuni elementi di una matrice a zero. Ad esempio, data la matrice A =

1 5 7

2 5 9

3 6 8

4 5 3

si vuole ottenere la matrice nella quale tutti gli elementi sono posti a zero salvo l’elemento massimo in ogni riga, ossia la matrice 0 0 0

0 0 9

0 6 0

4 0 0

Soluzione. Lo scopo pu`o essere ottenuto nel seguente modo compatto [Y,I]=max(A,[],2) % Y elementi massimi su ogni riga Y = 4 6 9 I = 4 3 2 B=zeros(size(A)); B(sub2ind(size(A),1:length(I), I’))=Y B = 0 0 0 4 0 0 6 0 0 9 0 0

Problema 3.9 Creare una matrice con elementi [2,3; 5,6;8,9; 11,12;...]

Soluzione. x=1:51; x=reshape(x,3,length(x)/3); A=x(2:3,:)’

Costruire matrici con righe uguali

(utili ad esempio nella grafica 3D)

n=5; J = 1:n; J = J(ones(n,1),:) %Tony’s Trick J = 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 analisi numerica

c V. Comincioli

3.8 Esperienze con Matlab

139

-----u=[10 11 12]; u=u(ones(5,1),:) u = 10 11 12 10 11 12 10 11 12 10 11 12 10 11 12

-----A=magic(3) 8 1 6 3 5 7 4 9 2 A(:,ones(1,3)) ans= 8 8 8 3 3 3 4 4 4 >> A(:,ones(1,2)) ans= 8 8 3 3 4 4

logical indexing Per estrarre gli elementi della matrice A=magic(4) che sono maggiori di 12, si pu`o procedere nel seguente modo A(A>12) % equivalente a A(find(A>12)) ans=16 14 15 13 A>12 ans= 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0

Per sostituire tutti gli elementi NaN di una matrice B con zero si usa B(isnan(B))=0

Per eliminare gli elementi ridondanti (uguali) in un vettore, basta osservare che quando un vettore `e sorted (ordinato), gli elementi ridondanti sono adiacenti, e creano un elemento nullo nel vettore diff del vettore dato. x=sort(x(:)); difference=diff([x;max(x)+1]); count=diff(find([1;difference])); y=x(find(difference)); %trova elementi non nulli

Ricordiamo che il numero di volte che si presentano NaN e inf sono calcolati nel seguente modo analisi numerica

c V. Comincioli

140

Elementi di algebra lineare

sum(isnan(x(:))); sum(isinf(x(:)));

Problema 3.10 Come trovare l’indice (di colonna) dell’ultimo elemento non nullo in ogni riga di una matrice assegnata; ossia, data ad esempio la matrice X=[0 9 7 0 0 0 5 0 0 6 0 3 0 0 0 0 0 0 8 0 4 2 1 0]

come ottenere il vettore j =[ 3 6 0 5];

• primo metodo m=size(X,1); % numero delle righe j=zeros(m,1); for i=1:m k=find(X(i,:) ~= 0); if length(k) j(i)=k(end); end end

• secondo metodo m=size(X,1); j=zeros(m,1); for i=1:m k=[0 find(X(i,:) ~=0)]; j(i)=k(end); end

• terzo metodo j=sum(cumsum((X(:,end:-1:1) ~=0),2) ~=0,2)

3.8.2

Matrici particolari

Ricordiamo la costruzione di alcune matrici particolari utilizzate in diversi contesti. analisi numerica

c V. Comincioli

3.8 Esperienze con Matlab

141

Matrice di Hilbert (con interesse nell’ambito dei minimi quadrati ed esempio di matrice malcondizionata per la risoluzione di un sistema lineare) % matrice di Hilbert a_ij =1/(i+j-1) % primo metodo (pi` u efficiente in termini di esecuzione) J = 1:n; J = J(ones(n,1),:); I = J’; E = ones(n,n); H = E./(I+J-1); -----% secondo metodo (pi` u efficiente in termini di memoria) A=zeros(n,n); for i=1:n for j=i:n A(i,j)=1/(i+j-1); A(j,i)=A(i,j); end end

Matrice di Vandermonde

(con interesse nel problema di interpolazione)

% matrice di Vandermonde x=[x1 x2 ... xn] % primo metodo j=[0:n-1]; for i=1:n V(i,j+1)=x(i).^j; end % secondo metodo: x vettore colonna V(:,1)=ones(n,1); for j=2:n V(:,j)=x.*V(:,j-1); end

Matrici tridiagonali tridiagonale.

I seguenti due comandi sono equivalenti e costruiscono una matrice

-triu(tril(ones(4,4),1),-1)+3*eye(4,4) ------diag(ones(3,1),-1)+diag(2*ones(4,1),0)-diag(ones(4,1),1) ans= 2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2

Una costruzione pi` u generale `e fornita dalla seguente funzione function T = tridiag(n, x, y, z) %TRIDIAG matrice tridiagonale (sparsa) % TRIDIAG(X, Y, Z) is the tridiagonal matrix with subdiagonal X, % diagonal Y, and superdiagonal Z. % X and Z must be vectors of dimension one less than Y. analisi numerica

c V. Comincioli

142

Elementi di algebra lineare

% % % % % % % %

Alternatively TRIDIAG(N, C, D, E), where C, D, and E are all scalars, yields the Toeplitz tridiagonal matrix of order N with subdiagonal elements C, diagonal elements D, and superdiagonal elements E. This matrix has eigenvalues (Todd 1977) D + 2*SQRT(C*E)*COS(k*PI/(N+1)), k=1:N. TRIDIAG(N) is the same as TRIDIAG(N,-1,2,-1), which is a symmetric positive definite M-matrix (the negative of the second difference matrix).

% % % % %

References: J. Todd, Basic Numerical Mathematics, Vol. 2: Numerical Algebra, Birkhauser, Basel, and Academic Press, New York, 1977, p. 155. D.E. Rutherford, Some continuant determinants arising in physics and chemistry---II, Proc. Royal Soc. Edin., 63, A (1952), pp. 232-241.

if nargin == 1, x = -1; y = 2; z = -1; end if nargin == 3, z = y; y = x; x = n; end x = x(:); y = y(:); z = z(:); % assicura che i vettori siano colonna. if max( [ size(x) size(y) size(z) ] ) == 1 x = x*ones(n-1,1); z = z*ones(n-1,1); y = y*ones(n,1); else [nx, m] = size(x); [ny, m] = size(y); [nz, m] = size(z); if (ny - nx - 1) | (ny - nz -1) error(’Dimensioni dei vettori non corrette.’) end end % T = diag(x, -1) + diag(y) + diag(z, 1); % per matrici non sparse. n = max(size(y)); T = spdiags([ [x;0] y [0;z] ], -1:1, n, n);

3.8.3

Operazioni su matrici

Data una matrice A di dimensione (m,n) e un vettore x di dimensione, si vuole calcolare il prodotto n y = Ax yi = aij xj , i = 1, 2, . . . , m j=1

In Matlab il prodotto `e eseguito dall’operazione matriciale y=A*x

A solo scopo didattico vediamo differenti modi per implementare il prodotto di matrice per vettore. Un primo modo `e fornito dalla seguente funzione analisi numerica

c V. Comincioli

3.8 Esperienze con Matlab

143

function y = MatVecR0(A,x) % y = MatVecRO(A,x) % Calcola i prodotto matrice-vettore y = A*x (via saxpys, ossia per righe) % A ` e una m-per-n matrice e x ` e un m-vettore colonna [m,n] = size(A); y = zeros(m,1); for i=1:m y(i) = A(i,:)*x; end

Per sviluppare un algoritmo colonna-orientato consideriamo il seguente caso illustrativo ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤   1 2 1·7 2·8 1 2 23 7 y = Ax = ⎣ 3 4 ⎦ = ⎣ 3 · 7 4 · 8 ⎦ = 7 ⎣ 3 ⎦ + 8 ⎣ 4 ⎦ = ⎣ 53 ⎦ 8 5 6 5·7 6·8 5 6 83 In altre parole, y `e una combinazione lineare delle colonne di A con coefficienti dati dagli elementi di x. Allora la precedente funzione pu` o essere riorganizzata nel seguente modo function y = MatVecC0(A,x) % y = MatVecCO(A,x) % calcolo di y = A*x (via saxpy, ossia colonna-orientato) [m,n] = size(A); y = zeros(m,1); for j=1:n y = y + A(:,j)*x(j); end

Prodotto di matrici Se A e B sono due matrici di dimensione rispettivamente (m,p) e (p,n), il prodotto C = AB `e definito da cij =

p

aik bkj

1 ≤ i ≤ m, 1 ≤ j ≤ n

k=1

In altre parole, ogni elemento di C `e il prodotto scalare di una riga di A e una colonna di B. In Matlab il prodotto `e eseguito dall’operazione matriciale C=A*B

Anche qui per motivi didattici segnaliamo i seguenti quattro differenti modi di implementare il prodotto di matrici. function C = MatMatDot(A,B) % C = MatMatDot(A,B) % prodotto matrice-matrice C =A*B (via prodotti scalari) % A: m-per-p, B: p-per-n [m,p] = size(A); [p,n] = size(B); C = zeros(m,n); for j=1:n analisi numerica

c V. Comincioli

144

Elementi di algebra lineare

% Calcola j-ma colonna di C. for i=1:m C(i,j) = A(i,:)*B(:,j); end end -----------------function C = MatMatSax(A,B) % C = MatMatSax(A,B) % prodotto matrice-matrice C = A*B (via saxpys) % A: m-per-p, B: p-per-n [m,p] = size(A); [p,n] = size(B); C = zeros(m,n); for j=1:n % Calcola j-ma colonna di C. for k=1:p C(:,j) = C(:,j) + A(:,k)*B(k,j); end end ------------------function C = MatMatVec(A,B) % C = MatMatVec(A,B) % prodotto matrice-matrice C = A*B (via prodotti matrice-vettori) % A: m-per-p, B: p-per-n [m,p] = size(A); [p,n] = size(B); C = zeros(m,n); for j=1:n % calcola la colonna j-ma di C. C(:,j) = C(:,j) + A*B(:,j); end -----------------function C = MatMatOuter(A,B) % C = MatMatOuter(A,B) % prodotto matrice-matrice C = A*B (via prodotto esterno) % A: m-per-p, B: p-per-n [m,p] = size(A); [p,n] = size(B); C = zeros(m,n); for k=1:p % Aggiunge nel prodotto esterno k-mo C = C + A(:,k)*B(k,:); end

L’ultima modalit` a `e illustrata dal seguente esempio ⎡

⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤   1 2 1  2  10 20 60 80   ⎣ 3 4 ⎦ 10 20 = ⎣ 3 ⎦ 10 20 + ⎣ 4 ⎦ 30 40 = ⎣ 30 60 ⎦ + ⎣ 120 160 ⎦ 30 40 5 6 5 6 50 100 180 240

analisi numerica

c V. Comincioli

3.8 Esperienze con Matlab

145

Matrici sparse Come illustrazione della possibilit` a di operare su matrici sparse, consideriamo il seguente esempio. Esempio 3.3 (Automa cellulare di Fredkin) Un automa cellulare21 `e definito da

• un reticolo di celle elementari interagenti tra loro; • una variabile di stato che assume un certo valore in ogni cella; • un sistema di intorni per le celle (ossia `e specificato un sistema di celle adiacenti); • un insieme di regole che determina lo stato della cella in base al valore attuale della cella stessa e delle celle nell’intorno. Partendo da un istante iniziale t0 = 0 e da una configurazione iniziale (valore degli stati delle celle), l’evoluzione del sistema `e determinata dal calcolo ad ogni istante discreto del tempo t = 1, 2, . . . dello stato delle celle in base alle regole dell’automa cellulare. L’automa cellulare di Fredkin (1970) ha una geometria

Figura 3.12 Automa cellulare di Fredkin: generazione corrispondente alla 95-ma iterazione. (del reticolo di celle) bidimensionale quadrata. L’intorno relativo ad una determinata cella `e composto dalle quattro celle adiacenti nelle direzioni nord, sud, est, ovest: se la cella ha coordinate (i, j) allora si considerano le celle con indici (i − 1, j), (i + 1, j), (i, j − 1), (i, j + 1). Se la somma degli stati delle celle dell’intorno `e zero, oppure `e un numero pari il nuovo stato `e zero altrimenti `e uno. function fredkin(itera) % Versione MATLAB dell’automa cellulare di Edward Fredkin (1970) % Il reticolo e’ quadrato con condizioni al bordo periodiche. % Ogni cella puo’ essere in soli due stati possibili % indicati con 0 e 1. Solo le celle nello stato 1 sono 21

Le prime ricerche su tale tipo di modelli risalgono a Von Neumann e Ulam con l’obiettivo di costruire un sistema semplice capace di riprodursi come un organismo vivente. Uno dei pi` u automi cellulari, il gioco life introdotto da J.H. Conway, `e definito da regole ‘biologiche’: le cellule nascono, vivono o muoiono in dipendenza della densit`a della popolazione locale di cellule. Recentemente gli automi cellulari sono stati utilizzati per modellizzare sistemi fisici (insiemi frattali). analisi numerica

c V. Comincioli

146

Elementi di algebra lineare

% visualizzate. % Regola di transizione: % 1. si calcola la somma dei valori degli stati % nelle quattro celle piu’ vicine (in direzione nord, ovest, % sud, est rispetto alla cella attuale) % --% | n | % ---|--- --% | w | c | e | % --- --- --% | s | % --% 2. se la somma e’ pari il nuovo stato cella cella c % sara’ zero, altrimenti sara’ 1 % itera: numero iterazioni; se omesso vale 110 if nargin < 1, itera=110; end; m = 101; X = sparse(m,m); figure(’Name’,’Evoluzione automa cellulare di Fredkin’,’Color’,’white’,... ’DoubleBuffer’,’on’,’Visible’,’off’,’NumberTitle’,’off’) p = -5:5; kx=floor(m/2); ky=kx; X(kx+p,ky+p)=1; [i,j] = find(X); figure(gcf); plot(i,j,’.’,’Color’,’blue’,’MarkerSize’,12); axis([0 m+1 0 m+1]); axis off % Calcolo somma quattro celle vicine n = [m 1:m-1]; % nord e = [2:m 1]; % est s = [2:m 1]; % sud w = [m 1:m-1]; % ovest for k=1:itera N = X(n,:) + X(s,:) + X(:,e) + X(:,w); X = rem(N,2) ~= 0; [i,j] = find(X); plot(i,j,’.’,’Color’,’blue’,’MarkerSize’,12); axis([0 m+1 0 m+1]); axis off drawnow end

The purpose of numerical analysis is insight, not numbers.

R.W. Hamming, 1962

analisi numerica

c V. Comincioli

The study of mathematics, like the Nile, begins in minuteness, but ends in magnificence.

C. Colton (1820)

CAPITOLO

4 Algebra lineare numerica

Oggetto principale di questo capitolo `e la risoluzione numerica dei sistemi lineari , ossia dei problemi che possono essere formulati nella seguente forma. Problema 4.1 Dato un vettore b ∈ Rm e una matrice A = [aij ], i = 1, 2, . . . , m; j = 1, 2, . . . , n ad elementi reali, si cerca un vettore x ∈ Rn tale che ⎧ a11 x1 + a12 x2 + · · · + a1n xn = b1 ⎪ ⎪ ⎪ ⎪ a21 x1 + a22 x2 + · · · + a2n xn = b2 ⎪ ⎪ ⎪ ⎪ .. .. .. .. ⎨ . . . . (4.1) Ax = b ⇐⇒ x + a x + · · · + a x a ⎪ i1 1 i2 2 in n = bi ⎪ ⎪ ⎪ .. .. .. .. ⎪ ⎪ . . . . ⎪ ⎪ ⎩ am1 x1 +am2 x2 + · · · +amn xn = bm Osserviamo che se Dr e Dc sono due matrici diagonali non singolari, il sistema (4.1) `e equivalente al seguente (4.2) (Dr ADc )(D−1 c x) = Dr b ossia i due sistemi hanno la medesima soluzione. La matrice Dc corrisponde all’introduzione di differenti scale nella misura delle componenti del vettore incognito x, mentre la matrice Dr corrisponde ad una operazione di scalatura dei termini noti. ` opportuno sottolineare che l’equivalenza tra i sistemi (4.2), al variare delle matrici diagonali E o non essere verificata in aritmetica di calcolatore. In altre parole, quando si applica Dc e Dr , pu` lo stesso algoritmo numerico a due differenti formulazioni, i risultati numerici ottenuti possono differire tra loro. Si pone, quindi, il problema della ricerca di matrici di scalatura che siano ottimali, nel senso che la corrispondente soluzione numerica si discosti il meno possibile da quella esatta. Il problema verr` a trattato nel seguito nell’ambito dello studio del condizionamento del sistema lineare (4.1). La risoluzione dei sistemi lineari `e di fondamentale importanza nella matematica applicata. In effetti, come vedremo nei successivi capitoli del presente volume, i sistemi lineari, da una parte costituiscono lo strumento di base per la formulazione di numerosi modelli matematici e dall’altra rappresentano una tappa fondamentale per la risoluzione iterativa dei modelli non lineari. 147

148

Algebra lineare numerica

Rinviando, quindi, agli altri capitoli per ulteriori esemplificazioni significative, esamineremo, ora, alcune situazioni classiche.

Esempio 4.1 Circuiti elettrici. Consideriamo il circuito elettrico illustrato in Figura 4.1. Le resistenze sono indicate in ohm e il voltaggio applicato al generico nodo i `e rappresentato da Vi volt . L’intensit` a di corrente che fluisce dal nodo i al nodo j `e indicata con Iij ampere. Per ottenere la differenza di potenziale tra due nodi, si applicano le seguenti due leggi. (a)

La legge di Ohm, che mette in relazione l’intensit`a di corrente che fluisce in una resistenza con la differenza di potenziale agli estremi

Iij =

Vi − Vj Rij

(b) La legge di Kirchhoff , che stabilisce che la somma algebrica di tutte le correnti che entrano in un nodo deve essere uguale a zero.

Figura 4.1 Un esempio di rete elettrica. Osserviamo che la resistenza R36 `e calcolata mediante la relazione 1 3 1 1 2 ⇒ R36 = = + = R36 1 2 2 3 analisi numerica

c V. Comincioli

Algebra lineare numerica

149

Applicando allora le due leggi precedenti successivamente ai nodi 2, 3, . . . , 7 si ottengono le seguenti equazioni nodo 2 nodo 3 nodo 4 nodo 5 nodo 6 nodo 7

V7 − V2 V3 − V2 + 3 1 V6 − V3 V2 − V3 I23 + I63 + I43 = + 3 2/3 V5 − V4 V3 − V4 + =0 I34 + I54 = 1 2 V6 − V5 V4 − V5 I45 + I65 = + =0 2 1 V3 − V6 V5 − V6 I56 + I36 + I76 = + 1 2/3 V2 − V7 V6 − V7 + I67 + I27 + I87 = 4 1

I32 + I72 + I12 =

da cui il seguente sistema lineare ⎧ 11V2 − 2V3 − 6V7 ⎪ ⎪ ⎪ ⎪ −2V + 17V − 6V − 9V ⎪ 2 3 4 6 ⎪ ⎨ − 2V3 + 3V4 − V5 − V4 + 3V5 − 2V6 ⎪ ⎪ ⎪ ⎪ − 6V − 4V5 +11V6 − V7 ⎪ 3 ⎪ ⎩ − V6 + 9V7 −4V2 con la seguente matrice dei coefficienti ⎡ ⎢ ⎢ ⎢ A=⎢ ⎢ ⎢ ⎣

40 − V2 =0 2 V4 − V3 + =0 1 +

V7 − V6 =0 4 0 − V7 + =0 1

+

= 120 =0 =0 =0 =0 =0

11 −2 0 0 0 −6 −2 17 −6 0 −9 0 0 −2 3 −1 0 0 0 0 −1 3 −2 0 0 −6 0 −4 11 −1 −4 0 0 0 −1 9

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

Si vede facilmente che `e possibile scalare le righe in maniera tale che la matrice che ne risulti sia simmetrica; in altre parole, esiste una opportuna matrice diagonale D tale che D A `e simmetrica. Si pu`o anche vedere che A `e irriducibile e a predominanza diagonale (stretta per almeno una riga) ed `e, pertanto, invertibile. Osservando, inoltre, che gli elementi fuori dalla diagonale hanno tutti lo stesso segno, che risulta contrario a quello degli elementi sulla diagonale, si ha che A `e una M-matrice, ossia la matrice inversa A−1 ha elementi non negativi. Ne segue che la soluzione del sistema `e, come fisicamente ragionevole, non negativa. Nel caso particolare che stiamo considerando, si ottiene, con il metodo di eliminazione che esamineremo nel seguito, la seguente soluzione ⎤ ⎡ ⎡ ⎤ V2 19.3991 ⎢ V3 ⎥ ⎢ 15.7940 ⎥ ⎥ ⎢ ⎢ ⎥ ⎢ V4 ⎥ ⎢ 15.6223 ⎥ ⎥=⎢ ⎥ V=⎢ ⎢ V5 ⎥ ⎢ 15.2790 ⎥ ⎥ ⎢ ⎢ ⎥ ⎣ V6 ⎦ ⎣ 15.1073 ⎦ V7 10.3004

Esempio 4.2 Analisi di strutture. In Figura 4.2 `e mostrato un esempio di struttura statica bidimensionale (un telaio). Le forze F rappresentano tensioni e compressioni agenti sulle aste che compongono analisi numerica

c V. Comincioli

150

Algebra lineare numerica

la struttura. Le reazioni esterne H2 , V2 e V3 sono forze corrispondenti all’interazione della struttura con il supporto. Nell’esempio rappresentato in figura si suppone che il nodo 2 sia vincolato, e quindi possa trasmettere al supporto forze con componenti sia orizzontali che verticali. Si suppone, invece, che il nodo 3 possa scivolare sul supporto, in modo che la struttura possa trasmettere solo forze verticali.

Figura 4.2 Forze in una struttura in condizioni statiche. Consideriamo, ora, il problema del calcolo delle forze Fi , i = 1, 2, 3 e H2 , V1 e V3 , quando nei nodi della struttura vengono applicate delle forze esterne Ei , i = 1, 2, 3. Indichiamo rispettivamente con Ei,h e Ei,v le componenti orizzontali e verticali delle forze Ei . Studiando il sistema in condizioni statiche, si ha che in ciascun nodo la somma delle componenti orizzontali delle forze agenti in quel nodo, e rispettivamente delle componenti verticali, deve essere nulla (legge di equilibrio). Si hanno allora le seguenti relazioni, nella scrittura delle quali si `e seguita la convenzione che le forze dirette verso destra e verso l’alto sono positive.  nodo 1  nodo 2  nodo 3

−F1 cos 30◦ + F3 cos 60◦ + F1,h = 0 −F1 sin 30◦ − F3 sin 60◦ + F1,v = 0 F1 cos 30◦ + F2 + H2 + F2,h = 0 F1 sin 30◦ + V2 + F2,v = 0 −F2 − F3 cos 60◦ + F3,h = 0 F3 sin 60◦ + V3 + F3,v = 0

Si ha, quindi, il seguente sistema lineare ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣

− cos 30◦ − sin 30◦ cos 30◦ sin 30◦ 0 0

0 cos 60◦ 0 − sin 60◦ 1 0 0 0 −1 − cos 60◦ 0 sin 60◦

0 0 1 0 0 0

0 0 0 1 0 0

0 0 0 0 0 1

⎤ ⎡ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣

F1 F2 F3 H2 V2 V3





⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ = ⎢ ⎥ ⎢ ⎥ ⎢ ⎦ ⎣

−F1,h −F1,v −F2,h −F2,v −F3,h −F3,v

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

(4.3)

A differenza della matrice relativa all’esempio precedente, la matrice dei coefficienti del sistema (4.3) non `e a predominanza diagonale. Facciamo, anzi, osservare che il minore principale di ordine 2 `e nullo. Questo fatto comporta, come vedremo nel seguito, l’utilizzo nell’applicazione del metodo di sostituzione di opportune permutazioni delle righe o delle colonne (metodo pivotale). Si pu` o verificare, tuttavia, che il determinante della matrice dei coefficienti `e uguale a 1.0 e quindi che la matrice `e invertibile, con matrice inversa data analisi numerica

c V. Comincioli

Algebra lineare numerica



da

A−1

⎢ ⎢ ⎢ =⎢ ⎢ ⎢ ⎣

151

−0.8660 −0.5000 −0.2500 0.4330 0.5000 −0.8660 1.0000 0. 0.4330 0.2500 −0.4330 0.7500

0. 0. 0. 1.0000 0. 0.

0. 0. 0. 0. −1.0000 0. 0. 0. 0. 0. 1.0000 0. 1.0000 0. 0. 0. 0. 1.0000

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

La conoscenza della matrice inversa permette di calcolare le forze in corrispondenza a differenti carichi esterni. Osserviamo, infatti, che la struttura `e completamente caratterizzata dalla matrice A (detta anche matrice stiffness), mentre, il vettore dei termini noti fornisce il carico dovuto alle forze esterne. Ad esempio, nella situazione illustrata in Figura 4.2, nella quale le forze esterne sono tutte nulle, salvo la forza verticale nel nodo 1 rivolta verso il basso e uguale a -500 (il segno meno segue dalla convenzione fatta in precedenza), si ha come vettore dei termini noti b = [0, 500, 0, 0, 0, 0]T , a cui corrisponde la soluzione ⎤ ⎡ ⎤ ⎡ F1 −250.0000 ⎢ F2 ⎥ ⎢ 216.5064 ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ F3 ⎥ ⎢ ⎢ ⎥ = A−1 b = ⎢ −433.0127 ⎥ ⎥ ⎢ H2 ⎥ ⎢ 0. ⎥ ⎢ ⎥ ⎢ ⎣ V2 ⎦ ⎣ 125.0000 ⎦ 375.0000 V3 Concludiamo, osservando che i singoli elementi della matrice inversa hanno un importante significato applicativo. Ciascuno di essi, infatti, rappresenta la variazione in un’incognita dovuta a una variazione unitaria in uno dei carichi esterni. Ad esempio, l’elemento a−1 21 indica il cambiamento della seconda incognita (F2 ) dovuto a una variazione unitaria nel carico esterno F1,h . In particolare, la presenza di elementi nulli nella matrice inversa significa che certe incognite non sono influenzate dal carico; ad esempio, a−1 13 = 0 significa che F1 non `e influenzata da variazioni nel carico F2,h (come `e naturale, dal momento che il nodo 2 `e vincolato).

Esempio 4.3 Modello economico di Leontief . Consideriamo una economia basata su n industrie, ognuna delle quali produce un singolo prodotto. Per produrre il proprio prodotto, ogni industria ha bisogno, come accade usualmente nella realt`a, di certe quantit`a di prodotti forniti da altre industrie, ed eventualmente anche del proprio prodotto. Si pensi, come esemplificazioni alla industria automobilistica, o a una industria di hardware di calcolatori. Indichiamo con aij l’unit` a di prodotto dell’industria i richiesto per la produzione di unit` a di materiale prodotto dall’industria j. Le costanti aij sono dette i coefficienti tecnici. Indichiamo, inoltre, con a di materiali prodotti dalle n industrie durante un ciclo fissato (ad esempio, un x1 , x2 , . . . , xn le quantit` anno) di produzione. La quantit` a totale di materiale prodotto i viene in parte consumato dalle altre industrie, e in parte va a soddisfare le domande dei consumatori. Si ha, pertanto, il seguente bilancio xi = ai1 x1 + ai2 x2 + · · · + ain xn + di ,

i = 1, 2, . . . , n

ove di `e la domanda per il prodotto i. Introducendo la matrice A=[aij ] e i vettori x, d, di componenti xi , e rispettivamente di , i = 1, 2, . . . , n, il modello di produzione `e descritto dal seguente sistema lineare (I − A)x = d

(4.4)

I metodi numerici per la risoluzione dei sistemi lineari possono essere, in maniera schematica, raggruppati nel modo seguente analisi numerica

c V. Comincioli

152

Algebra lineare numerica

• Metodi diretti , ossia i metodi che, in assenza di errori di arrotondamento, forniscono la soluzione in un numero finito di operazioni. Tali metodi utilizzano, in sostanza, l’idea della eliminazione di Gauss, e pi` u in generale, l’idea della fattorizzazione della matrice A nel prodotto di due matrici pi` u semplici (triangolari o ortogonali). • Metodi iterativi, nei quali la soluzione `e ottenuta come limite di una successione di soluzioni di sistemi lineari pi` u semplici. Nella risposta fornita da un metodo iterativo `e, quindi, presente usualmente un errore di troncamento. Nei metodi iterativi, a differenza che nei metodi diretti, la matrice dei coefficienti non viene modificata. In tali metodi, quindi, `e possibile sfruttare pi` u opportunamente la presenza di elementi nulli nella matrice dei coefficienti. In effetti, i metodi iterativi hanno un particolare interesse per la risoluzione di sistemi a grandi dimensioni e con matrici sparse, ossia matrici per le quali il numero degli elementi che possono essere diversi dallo zero `e proporzionale all’ordine n. Calcolo dell’inversa di una matrice Il calcolo dell’inversa di una matrice A di ordine n e non singolare `e un problema strettamente legato a quello della risoluzione di un sistema lineare. In effetti, dalla conoscenza dell’inversa A−1 si pu`o ottenere la soluzione del sistema lineare corrispondente ad un particolare termine noto b mediante semplicemente il prodotto di una matrice per un vettore, con un numero di operazioni proporzionale a n2 Ax = b ⇒ x = A−1 b D’altra parte, le colonne Xj , j = 1, 2, . . . , n della matrice inversa A−1 possono essere calcolate mediante la risoluzione dei seguenti n sistemi lineari, tutti con la stessa matrice dei coefficienti AXj = ej ⇒ A−1 ≡ [X1 , X2 , . . . , Xn ]

(4.5)

a In . In altre parole, un ove i vettori ej , j = 1, . . . , n sono le colonne della matrice identit` metodo numerico per la risoluzione di un sistema lineare pu`o essere utilizzato anche per il calcolo dell’inversa di una matrice. La risoluzione dei sistemi (4.5) risulta semplificata quando della matrice A si costruisce una fattorizzazione.

4.1

Metodi diretti

Introduciamo l’idea dell’eliminazione attraverso un semplice esempio. L’idea verr`a, poi, generalizzata e discussa nei paragrafi successivi. Esempio 4.4 Consideriamo la risoluzione del seguente sistema ⎧ ⎨

2x1 + 4x2 + 2x3 = 4 4x1 + 7x2 + 7x3 = 13 ⎩ −2x1 − 7x2 + 5x3 = 7

(4.6)

Ricaviamo l’incognita x1 dalla prima equazione e la sostituiamo nelle altre due equazioni. L’operazione pu`o essere ottenuta sottraendo la prima equazione moltiplicata per 2 dalla seconda equazione, e analogamente analisi numerica

c V. Comincioli

4.1 Metodi diretti

153

sottraendo la prima equazione moltiplicata per -1 dalla terza equazione. I fattori 2 e −1 utilizzati nella trasformazione sono detti moltiplicatori. Si ottiene ⎧ ⎨ 2x1 + 4x2 + 2x3 = 4 − x2 + 3x3 = 5 ⎩ − 3x2 + 7x3 = 11 A questo punto si elimina x2 dalla terza equazione sottraendo dalla terza equazione la seconda moltiplicata per 3, e si ottiene la seguente struttura triangolare ⎧ ⎨ 2x1 + 4x2 + 2x3 = 4 − x2 + 3x3 = 5 ⎩ − 2x3 = −4 Nella fase successiva, chiamata sostituzione all’indietro, si calcola x3 dalla terza equazione x3 =

−4 =2 −2

e si sostituisce il valore ottenuto nella seconda equazione e si ottiene per x2 il valore x2 =

5−3×2 5 − 3x3 = =1 −1 −1

e, infine, dalla prima equazione x1 =

4−4×1−2×2 4 − 4x2 − 2x3 = = −2 2 2

e quindi la soluzione del sistema `e data dal vettore x = [−2, 1, 2]T . Introduciamo le seguenti due matrici triangolari ⎡ ⎤ ⎡ ⎤ 2 4 2 1 0 0 3 ⎦, U = ⎣ 0 −1 L=⎣ 2 1 0 ⎦ 0 0 −2 −1 3 1

(4.7)

In particolare, la matrice L ha tutti gli elementi sulla diagonale principale uguali a 1; per tale motivo viene anche indicata come matrice triangolare unitaria. Osserviamo che gli elementi della matrice L che sono al di sotto della diagonale principale corrispondono ai moltiplicatori utilizzati nella operazione di eliminazione. Pi` u precisamente, gli elementi l21 = 2, l31 = −1 nella prima colonna sono i moltiplicatori utilizzati per eliminare l’incognita x1 , mentre l’elemento l32 = 3 `e il moltiplicatore utilizzato per eliminare l’incognita x2 . Facciamo, ora, vedere che tra la matrice A e le matrici U e L sussiste la seguente relazione A = LU

(4.8)

Tale identit` a pu` o essere verificata direttamente eseguendo il prodotto, ma, pi` u significativamente, essa pu` o essere giustificata nel seguente modo. Indichiamo con ai , i = 1, 2, 3 le righe di A e con ui le righe della matrice U. Dal momento che durante l’eliminazione la prima riga non viene mai cambiata, si ha u1 = a1 . Nella prima eliminazione si ha u2 = a2 − 2 a1 = a2 − 2 u1 La terza riga u3 `e ottenuta in due passi, ossia u3 = a3 − (−1 u1 ) − 3 u2 analisi numerica

c V. Comincioli

154

Algebra lineare numerica

Risolvendo le equazioni precedenti rispetto ai vettori ai , si ottiene a1 = a2 =

u1 2 u1 + u2

a3 = −1 u1 + 3 u2 + u3 che mostra l’identit`a (4.8). L’esempio, quindi, mostra che il metodo di eliminazione `e equivalente a fattorizzare una matrice nel prodotto tra una matrice triangolare inferiore con elementi diagonali uguali a 1 e una matrice triangolare superiore. Si pu` o mostrare che tale decomposizione `e unica. Il metodo di eliminazione esposto in precedenza `e per righe. Come mostreremo sempre sull’esempio (4.6), `e possibile implementare il metodo procedendo per colonne, anzich´e per righe. Tali implementazioni hanno interesse per i linguaggi di programmazione che, come il FORTRAN e Matlab, memorizzano le matrici per colonne. Sottraendo dalla seconda colonna la prima moltiplicata per 2 e dalla terza la prima moltiplicata per 1, e successivamente dalla terza colonna la seconda colonna moltiplicata per -3, si ottengono le seguenti trasformazioni ⎡ ⎡ ⎤ ⎤ 2 0 0 2 0 0 ⎣ 4 −1 3 ⎦ → L = ⎣ 4 −1 0 ⎦ −2 −3 7 −2 −3 −2 Usando i moltiplicatori 2, 1 e −3, formiamo la seguente matrice triangolare superiore con elementi uguali a 1 sulla diagonale ⎡ ⎤ 1 2 1 1 −3 ⎦ U1 = ⎣ 0 0 0 1 L’indice 1 indica che la matrice ha elementi sulla diagonale principale uguali a 1. Analogamente a quanto si `e fatto in precedenza, si pu`o mostrare che l’eliminazione per colonne produce la seguente decomposizione A = L U1 mentre, con la notazione ora introdotta l’eliminazione per righe produce la decomposizione A = L1 U. Si pu` o mostrare che introducendo la seguente matrice diagonale ⎡

2 D=⎣ 0 0

⎤ 0 0 −1 0 ⎦ 0 −2

si ha A = L1 U = L1 (D U1 ) = (L1 D)U1 = L U1 = A La fattorizzazione A = L1 (D U1 ) = (L1 D)U1 `e chiamata la fattorizzazione LDU della matrice A. Concludiamo, osservando che a partire dalle decomposizioni precedenti la risoluzione del sistema Ax = b pu` o essere ricondotta a quella di due sistemi pi` u semplici. Ad esempio, se A = L U, si ha  Ax = b ⇐⇒ LUx = b

⇐⇒

Ly = b Ux = y

(4.9)

Pertanto, se le due matrici L, U sono triangolari, la risoluzione del sistema `e ricondotta alla risoluzione successiva di due sistemi con matrici triangolari.

analisi numerica

c V. Comincioli

4.1 Metodi diretti

4.1.1

155

Sistemi triangolari

Un sistema viene detto triangolare, quando la matrice dei coefficienti ha una struttura triangolare, o pi` u in generale quando tale matrice pu`o essere ricondotta a una forma triangolare mediante opportuni scambi di righe e di colonne. Per tali sistemi l’operazione di eliminazione si applica in maniera molto semplice. Consideriamo, in particolare, i sistemi con matrice dei coefficienti triangolare superiore, o inferiore. Siano, quindi, L e U due matrici di ordine n della forma seguente ⎡ ⎤ ⎤ ⎡ l11 0 · · · 0 u11 u12 · · · u1n ⎢ .. ⎥ ⎢ 0 u22 · · · u2n ⎥ ⎢ l21 l22 . . . . ⎥ ⎥ ⎢ ⎥ ; L=⎢ U=⎢ . ⎥ . . . ⎢ ⎥ . . .. .. .. ⎦ .. ⎣ .. .. ⎣ .. . 0 ⎦ 0 ··· 0 unn ln1 ln2 · · · lnn Generalizzando la procedura seguita nell’esempio precedente, abbiamo i seguenti algoritmi. Algoritmo 4.1 (Eliminazione in avanti) Data una matrice triangolare inferiore L ∈ Rn×n non singolare ed un vettore b ∈ Rn , la soluzione del sistema Ly = b `e data da y1 = b1 /l11 For i = 2, . . . , n yi = bi For j = 1, . . . , i − 1 yi = yi − lij yj end j yi = yi /lii end i function y=Ltrisol(L,b) % Ly=b % L triangolare inferiore n=length(b); y=zeros(n,1); y(1)=b(1)/L(1,1); for i=2:n y(i)=(b(i)-L(i,1:i-1)*y(1:i-1))/L(i,i); end

L’algoritmo precedente richiede un numero di operazioni, valutato in flops1 , dato da n i=1

(i − 1) =

1 1 n(n − 1) ≈ n2 2 2

Osserviamo che n2 /2 `e anche l’ordine del numero delle moltiplicazioni necessarie per valutare il prodotto della matrice L per un vettore. Analogamente, per i sistemi triangolari superiori si ha il seguente algoritmo. 1

Il flop `e una unit` a di misura delle operazioni richieste in un algoritmo. Secondo una definizione usuale, un flop corrisponde al numero di operazioni nell’istruzione FORTRAN: A(I,J)=A(I,J)+T*A(I,K). Essa comprende una moltiplicazione e una addizione in aritmetica floating point, alcuni calcoli di indici e alcuni riferimenti alla memoria. Secondo un’altra definizione un flop corrisponde ad una sola operazione floating point. Nel testo viene utilizzata la prima definizione. analisi numerica

c V. Comincioli

156

Algebra lineare numerica

Algoritmo 4.2 (Eliminazione all’indietro) Data una matrice triangolare superiore U ∈ Rn×n , non singolare, ed un vettore y ∈ Rn , la soluzione del sistema Ux = y `e data da xn = yn /unn For i = n − 1, . . . , 1 xi = yi For j = i + 1, . . . , n xi = xi − uij xj end j xi = xi /uii end i

function x=Utrisol(U,y) % Ux=y % U triangolare superiore % n=length(y); x(n)=y(n)/U(n,n); for i=n-1:-1:1 x(i)= (y(i)-U(i,i+1:n)*x(i+1:n))/U(i,i); end

Lasciamo come esercizio la modifica degli algoritmi precedenti nel caso in cui, come `e stato analizzato nell’esempio precedente, la eliminazione venga effettuata per colonne e nel caso in cui le matrici L e U siano memorizzate sotto forma di vettori a una dimensione, ossia, ad esempio per la matrice U nella forma [u11 , u12 , u22 , u13 , u23 . . . u1n , . . . , unn ].

4.1.2

Sistemi generali; metodo di Gauss

Consideriamo il sistema lineare (4.1) nel caso in cui m = n, e nel quale, per motivi di convenienza di scrittura dell’algoritmo, il termine noto `e definito come la colonna (n+1)–ma della matrice dei coefficienti. ⎧ a11 x1 + a12 x2 +· · · + a1n xn =b1 =: a1 n+1 ⎪ ⎪ ⎪ ⎪ a ⎪ 21 x1 + a22 x2 +· · · + a2n xn =b2 =: a2 n+1 ⎪ ⎪ ⎪ .. .. .. .. ⎨ . . . . (4.10) a x + a x +· · · + a x ⎪ i1 1 i2 2 in n =bi =: ai n+1 ⎪ ⎪ ⎪ .. .. .. .. ⎪ ⎪ . . . . ⎪ ⎪ ⎩ an1 x1 +an2 x2 +· · · +ann xn =bn =: an n+1 Supporremo, inoltre, per iniziare che la matrice dei coefficienti A abbia tutti i minori principali diversi dallo zero. Successivamente, introdurremo opportune modifiche per adattare il metodo alla risoluzione di sistemi per i quali l’unica ipotesi richiesta sia la non singolarit`a della matrice A. o eliminare x1 dalle righe 2, 3, . . . , n sottraendo dalla generica riga i-ma Poich´e a11 = 0, si pu` la prima riga moltiplicata per mi1 = analisi numerica

ai1 , a11

i = 2, 3, . . . , n c V. Comincioli

4.1 Metodi diretti

157

In questo modo le equazioni successive si trasformano come segue ⎧ (2) (2) (2) ⎪ ⎨ a22 x2 + · · · +a2n xn = a2 n+1 .. .. . . ··· . = .. ⎪ ⎩ (2) (2) (2) an2 x1 + · · · +ann xn = an n+1 ove (2)

aij = aij − mi1 a1j

(4.11)

i = 2, 3 · · · , n, j = 2, 3, · · · , n + 1

(2)

Si pu` o verificare che, in particolare, a22 = det(A2 )/a11 , ove Ak , per k = 1, 2, . . . , n indica la (2) sottomatrice principale di ordine k della matrice A. Per le ipotesi fatte si ha, quindi, a22 = 0, e si pu`o eliminare nel sistema (4.11) l’incognita x2 . Ripetendo la procedura, al generico passo k-mo, la matrice del sistema (aumentata della colonna dei termini noti) assume la seguente forma ⎤ ⎡ (1) (1) (1) (1) (1) a11 a12 a13 · · · · · · a1n a1 n+1 ⎥ ⎢ ⎥ ⎢ (2) (2) (2) (2) ⎢ a22 a23 · · · · · · a2n a2 n+1 ⎥ ⎥ ⎢ ⎥ ⎢ .. ⎥ ⎢ . ··· ··· ··· ··· ⎥ ⎢ ⎥ ⎢ (k) (k) (k) ⎥ ⎢ a · · · a a ⎢ kk kn kn+1 ⎥ ⎥ ⎢ .. .. .. ⎥ ⎢ 0 . ··· . . ⎥ ⎢ ⎦ ⎣ (k) (k) (k) ann+1 ank · · · ann ove, per uniformit`a di scrittura, si `e posto (1)

aij := aij ,

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

Per k = n, cio`e dopo n − 1 trasformazioni, si ottiene un sistema triangolare, che pu`o essere risolto con l’algoritmo esaminato nel paragrafo precedente. Il determinante della matrice A `e uguale al determinante della matrice triangolare finale, in quanto le successive trasformazioni della matrice (sottrazioni di righe da altre moltiplicate per opportuni fattori) lasciano invariato il determinante. Si ha, pertanto (1) (2)

(n)

det(A) = a11 a22 · · · ann Si ha, in definitiva, la seguente procedura.

Algoritmo 4.3 (Algoritmo di Gauss) Data una matrice A ∈ Rn×n tale che det(Ak ) = 0, k = 1, 2, . . . , n, e quindi in particolare non singolare, ed un vettore ai,n+1 , i = 1, 2, . . . , n, si ha For k = 1, 2, . . . , n − 1 For i = k + 1, . . . , n (k) aik mik = (k) akk analisi numerica

c V. Comincioli

158

Algebra lineare numerica

For j = k + 1, . . . , n + 1 (k+1) (k) (k) aij = aij − mik akj end j end i end k

Nella forma precedente l’algoritmo `e di tipo riga orientato, nel senso che il loop pi` u interno si riferisce all’indice di colonna. Come abbiamo gi`a discusso nell’Esempio 4.4, per alcuni linguaggi di programmazione, in particolare per il FORTRAN, pu` o essere pi` u conveniente una implementazione colonna orientata. Nella implementazione dell’algoritmo di eliminazione, i moltiplicatori mij possono essere memorizzati nello spazio occupato dagli elementi della matrice che diventano successivamente nulli. In questo modo, a seguito delle operazioni di eliminazione, la matrice originaria A `e sostituita dalla struttura descritta in Figura 4.3, ove i moltiplicatori sono memorizzati sotto la diagonale (k) principale nella matrice L, e gli elementi aij formano la matrice triangolare U.

Figura 4.3 Struttura della matrice a seguito delle operazioni di eliminazione.

Numero delle operazioni Per valutare il numero delle operazioni richieste dal procedimento di eliminazione, osserviamo che il generico passo k comporta n−k divisioni e (n−k)(n−k+1) moltiplicazioni e addizioni. In flops il costo totale dell’algoritmo `e, quindi, dell’ordine di n−1

(n − k)(n − k + 1) =

k=1

1 n(n2 − 1) 3

Per la risoluzione del sistema triangolare finale `e richiesto, come abbiamo visto, un numero di flops dell’ordine di 12 n2 ; in definitiva, quindi, il costo in flops per la risoluzione di un sistema o dire lineare `e O( 13 n3 + 12 n2 ). Per valori grandi di n, il termine n3 `e predominante, e quindi si pu` che la riduzione di un sistema lineare con n incognite alla forma triangolare mediante il metodo di eliminazione di Gauss richiede approssimativamente n3 /3 operazioni. Assumendo, ad esempio, che una operazione su un determinato calcolatore richieda 3µs, la Tabella 4.1 fornisce i tempi, per differenti valori di n, per ottenere l’eliminazione di Gauss e la sostituzione all’indietro. Si pu` o dimostrare che per risolvere il sistema lineare Ax = b, con A matrice qualunque, il metodo di Gauss `e ottimale, nel senso che `e il metodo con l’ordine di operazioni (esponente di n) minimo analisi numerica

c V. Comincioli

4.1 Metodi diretti

159

n 100 1000 10000

eliminazione

sostituzione all’indietro

1. 1. 103 1. 106 (≈ 12 giorni)

0.015 1.5 150

Tabella 4.1 Tempo in secondi per il metodo di eliminazione e la sostituzione all’indietro nell’ipotesi che ogni operazione richieda 3µs.

fra tutti i metodi che utilizzano solo combinazioni lineari di righe e di colonne. Recentemente, a partire da un lavoro di Strassen2 , sono stati proposti metodi basati su tecniche diverse, che permettono il calcolo numerico della soluzione di un sistema lineare con un costo computazionale di ordine inferiore. Tali metodi si basano, in sostanza, sull’equivalenza, per quanto riguarda il costo computazionale, del problema della inversione di una matrice di ordine n, e quindi della soluzione di un sistema lineare di ordine n, e del problema della moltiplicazione di due matrici di ordine n. Pi` u precisamente, si pu`o mostrare che se il numero delle operazioni aritmetiche sufficienti a calcolare il prodotto di due matrici di ordine n `e al pi` u knθ , con k, θ costanti positive e 2 ≤ θ ≤ 3, allora per invertire una matrice non singolare di ordine n sono sufficienti hnθ operazioni aritmetiche, con h opportuna costante positiva. Con l’algoritmo proposto da Strassen, per il calcolo del prodotto di due matrici si ha (cfr. l’Esempio successivo) un ordine di operazioni θ = log2 7 = 2.807 . . .; successivamente, sono stati proposti algoritmi con valori di θ minori (segnaliamo in particolare un risultato di Coppersmith, Winograd (1987) con θ < 2.38). Sebbene l’esponente ` da θ sia almeno 2, il pi` u piccolo valore di θ che pu` o essere ottenuto `e attualmente incognito. E θ o essere osservare che nei metodi ora segnalati la costante di proporzionalit` a che moltiplica n pu` molto grande, e quindi, anche se tali schemi sono asintoticamente pi` u veloci del metodo di Gauss, la loro superiorit` a `e osservabile solo per n molto grandi. Per terminare le considerazioni sul costo computazionale del metodo di Gauss, `e opportuno osservare che l’ordine `e O(n3 ) per una matrice generica. In altre parole, l’ordine pu` o essere molto pi` u basso per matrici particolari; si pensi, ovviamente, alle matrici diagonali, triangolari, tridiagonali, cio`e alle matrici con strutture a banda e pi` u in generale alle matrici sparse. Riprenderemo questo argomento nei paragrafi successivi. Esempio 4.5 Algoritmo di Strassen. Date le matrici A, B di ordine n = 2k , con k intero positivo, gli n2 elementi cij della matrice prodotto C = AB possono essere ottenuti dalla formula cij =

n

aip bpj ,

i, j = 1, . . . , n

(4.12)

p=1

mediante n3 moltiplicazioni e n3 − n2 addizioni. Mostreremo ora che `e possibile ottenere gli n2 elementi u di 4.7 nθ operazioni aritmetiche, ove θ = log2 7. cij con non pi` Per n = 2, gli elementi cij dati da c11 = a11 b11 + a12 b21 , c21 = a21 b11 + a22 b21 , 2

c12 = a11 b12 + a12 b22 , c22 = a21 b12 + a22 b22

V. Strassen, Gaussian Elimination is not Optimal , Numer. Math. 13, 1969, 354–356.

analisi numerica

c V. Comincioli

160

Algebra lineare numerica

possono essere calcolati con 7 moltiplicazioni e 18 addizioni mediante le seguenti relazioni s1 s3 s5 s7 c11 c21

= (a11 + a22 )(b11 + b22 ) = a11 (b12 − b22 = (a11 + a12 )b22 = (a12 − a22 )(b21 + b22 ) = s1 + s4 − s5 + s7 = s2 + s4

s2 = (a21 + a22 )b11 s4 = a22 (b21 − b11 ) s6 = (a21 − a11 )(b11 + b12 )

(4.13)

c12 = s3 + s5 c22 = s1 − s2 + s3 + s6

Le formule (4.13) possono essere applicate anche nel caso in cui gli elementi aij , bij , cij sono blocchi di matrici Aij , Bij , Cij , dal momento che non viene utilizzata la propriet`a commutativa della moltiplicazione. Supponendo, allora, k > 1 e partizionando le matrici A, B e C in quattro sottomatrici di ordine n/2       A11 A12 B11 B12 C11 C12 A= , B= , C= A21 A22 B21 B22 C21 C22 le matrici Cij , i, j = 1, 2, possono essere calcolate mediante le formule (4.13) con 7 moltiplicazioni di matrici di ordine n/2. Il procedimento pu` o essere iterato partizionando ogni matrice di ordine n/2 in quattro sottomatrici di ordine n/4. Se indichiamo con pn il numero di moltiplicazioni impiegate dal metodo ora descritto per moltiplicare matrici di ordine n, vale la relazione pn = 7pn/2 da cui, essendo n = 2k e p1 = 1 si ha pn = 7pn/2 = 72 pn/4 = . . . = 7k p1 = nθ ,

θ = log2 7

function C %STRASSEN % % % % %

= strassen(A, B, nmin) algoritmo di moltiplicazione veloce di matrici (Strassen) C = STRASSEN(A, B, NMIN), A e B matrici di dimensione potenza di 2 C = A*B. l’algoritmo e ` usato ricorsivamente fino a che si ha dimensione j e con mji se i < j. For k = 1, . . . , n For p = 1, 2, . . . , k − 1 rp := dp apk wp := akp dp end p k−1 dk := akk − p=1 akp rp For i = k + 1, . . . , n $ % k−1 aik = aik − p=1 aip rp /dk % $ k−1 aki = aki − p=1 wp api /dk end i end k

4.1.7

Metodi di Crout e di Doolittle

Ricordiamo due varianti dell’Algoritmo 4.5, note in letteratura, rispettivamente, come metodo di Doolittle e metodo di Crout 4 e ambedue esempi di schemi compatti . Sia il metodo di Doolittle che il metodo di Crout costruiscono una decomposizione di A della forma A = LU; differiscono per il fatto che nel metodo di Doolittle si richiede lii = 1, i = 1, . . . , n, mentre nel metodo di Crout si pone uii = 1, i = 1, . . . , n. In particolare, quindi, il metodo di Doolittle fornisce la medesima decomposizione del metodo di Gauss. In sostanza, la fattorizzazione di Crout corrisponde alla associazione (LD)U, mentre la fattorizzazione di Doolittle corrisponde a L(DU). Algoritmo 4.6 ( Doolitle) Data una matrice A di ordine n, con i minori principali differenti dallo zero, l’algoritmo fornisce la decomposizione A = LU, con lii = 1. For k = 1, 2 . . . , n For i = k, . . . , n k−1 uki = aki − p=1 lkp upi end i For i = k + 1, . . . , n $ % k−1 lik = aik − p=1 lip upk /ukk end i end k

Considerando, come illustrazione, il caso n = 3 si ha ⎡

a11 ⎣ a21 a31

a12 a22 a32

⎡ ⎤ a13 u11 a23 ⎦ → ⎣ l21 a33 l31

u12 a22 a32

⎡ ⎤ u13 u11 a23 ⎦ → ⎣ l21 a33 l31

u12 u22 l32

⎡ ⎤ u13 u11 u23 ⎦ → ⎣ l21 a33 l31

u12 u22 l32

⎤ u13 u23 ⎦ u33

3

Nella descrizione dell’algoritmo si conviene, come avviene automaticamente in alcuni linguaggi, che quando nella sommatoria e nel loop di iterazione il secondo indice `e minore del primo la sommatoria e il loop non sono eseguiti. 4 Crout, Prescott D., A Short Method for Evaluating Determinants and Solving Systems of Linear Equations with Real or Complex Coefficients, Trans. AIEE, 60:1235–1240 (1941). Doolittle, Myrick Hascall (1830–1913); si veda ad esempio R.W. Farebrother A memoir of the life of M.H. Doolittle, IMA Bulletin, 23 (6/7) 102, 1987. analisi numerica

c V. Comincioli

4.1 Metodi diretti

169

ove, ad esempio u33 = a33 − l31 u13 − l32 u23 . Algoritmo 4.7 (Crout) Data una matrice A di ordine n, con i minori principali differenti dallo zero, l’algoritmo fornisce la decomposizione A = LU, con uii = 1. For k = 1, 2 . . . , n For i = k, . . . , n k−1 lik = aik − p=1 lip upk end i For i = k + 1, . . . , n % $ k−1 uki = aki − p=1 lkp upi /lkk end i end k

Nel caso di n = 3 si ha ⎡

a11 ⎣ a21 a31

a12 a22 a32

⎡ ⎤ a13 l11 a23 ⎦ → ⎣ l21 a33 l31

u12 a22 a32

⎡ ⎤ u13 u11 a23 ⎦ → ⎣ l21 a33 l31

u12 l22 l32

⎡ ⎤ u13 u11 u23 ⎦ → ⎣ l21 a33 l31

u12 u22 l32

⎤ u13 u23 ⎦ l33

ove, ad esempio l33 = a33 − l31 u13 − l32 u23 .

4.1.8

Matrici simmetriche

Quando la matrice A `e simmetrica vi `e una ridondanza nella fattorizzazione LDMT . Si ha, infatti, il seguente risultato. Proposizione 4.2 (Decomposizione LDLT ) Se A = LDMT `e la decomposizione di una matrice A simmetrica non singolare, allora L = M. Dimostrazione.

La matrice M−1 AM−T = M−1 LD `e simmetrica e triangolare inferiore, e quindi diagonale. Dal momento che D `e non singolare, questo implica che anche M−1 L `e diagonale ed avendo gli elementi sulla diagonale principale tutti uguali a 1 si ha M−1 L = I.

Ad esempio, si ha ⎡

⎤ ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ 10 20 30 1 0 0 10 0 0 1 2 3 A = ⎣ 20 45 80 ⎦ = ⎣ 2 1 0 ⎦ ⎣ 0 5 0 ⎦ ⎣ 0 1 4 ⎦ 30 80 171 3 4 1 0 0 1 0 0 1

(4.28)

A partire da tale risultato, l’Algoritmo 4.5 pu`o essere modificato nel seguente modo. Algoritmo 4.8 (Decomposizione LDLT ) Data una matrice simmetrica A, le matrici D, L si calcolano nel modo seguente; gli elementi aij sono sostituiti da lij per i > j. For k = 1, . . . , n For p = 1, . . . , k − 1 rp := dp akp end p k−1 dk := akk − p=1 akp rp If dk = 0 analisi numerica

c V. Comincioli

170

Algebra lineare numerica

then stop else For i = k + 1, . . . , n % $ k−1 aik := aik − p=1 aip rp /dk end i end if end k

Quando applicato alla matrice (4.28), l’algoritmo fornisce la seguente matrice ⎤ ⎡ 10 20 30 A = ⎣ 2 5 80 ⎦ 3 4 1 L’Algoritmo 4.5 diventa particolarmente interessante, quando applicato ad una matrice definita positiva. Si pu` o infatti dimostrare, utilizzando le propriet` a delle matrici simmetriche definite T positive che per esse la fattorizzazione A = LDM esiste e la matrice diagonale D ha elementi positivi. Si pu`o, inoltre, mostrare che l’algoritmo `e stabile nel senso della propagazione degli errori di arrotondamento. Nel caso di matrici simmetriche definite positive, una variante della decomposizione LDLT `e data dal noto metodo di Cholesky, o metodo delle radici quadrate5 Proposizione 4.3 (Decomposizione di Cholesky) Se A `e una matrice simmetrica definita positiva, allora esiste un’unica matrice R triangolare inferiore, con elementi positivi sulla diagonale principale, tale che A = RRT (4.29) Il risultato segue dal fatto che, come abbiamo visto in precedenza, si ha A = LDLT . Poich´e 1/2 1/2 dk > 0, la matrice R = L diag(d1 , . . . , dn ) `e reale, triangolare inferiore con elementi positivi sulla diagonale principale e verifica (4.29). L’unicit` a segue dalla unicit` a della fattorizzazione T LDL . Come esemplificazione, si consideri √     √         √ 2 0 2 − 2 −2 1 0 2 0 1 −1 √ √ √2 = = −2 5 −1 1 0 3 0 1 3 3 − 2 0 Osserviamo che una volta calcolata la decomposizione di Cholesky la soluzione del sistema Ax = b pu` o essere ottenuta risolvendo successivamente i due sistemi triangolari Ry = b e RT x = y. Un modo efficiente per calcolare la matrice di Cholesky R pu` o essere ricavato dal confronto T degli elementi nell’equazione A = RR . Per i ≥ k si ha

⎧ k−1 k ⎨ rik = aik − p=1 rip rkp /rkk , i > k

rip rkp ⇒ aik = ⎩ r = a − k−1 r 2 1/2 p=1 kk kk p=1 kp 5 A. L. Cholesky (1875-1918), ufficiale francese, ha sviluppato tale metodo allo scopo di risolvere le equazioni normali ottenute applicando il metodo dei minimi quadrati nel fitting di dati geodetici. Il metodo `e anche noto come metodo di Banachiewicz (1937). Il metodo non `e mai stato pubblicato da A. Cholesky, ma appare per la prima volta esposto in un lavoro pubblicato da Benoit in Bulletion Geodesique, 2 (1924) 67-77. In realt` a esiste un manoscritto datato 2 dicembre 1910 e conservato all’Ecole Polytechnique, dove Cholesky fu studente nel 1985, nel quale il metodo viene esposto nella forma nota attualmente.

analisi numerica

c V. Comincioli

4.1 Metodi diretti

171

Ne consegue il seguente algoritmo. function R = CholGax(A) % fattorizzazione di Cholesky di una matrice simmetrica % e definita positiva % R triangolare inferiore con A = R*R’. [n,n] = size(A); R = zeros(n,n); s = zeros(n,1); for j=1:n if j==1 s(j:n) = A(j:n,j); else s(j:n) = A(j:n,j) - R(j:n,1:j-1)*R(j,1:j-1)’; end R(j:n,j) = s(j:n)/sqrt(s(j)); end

L’algoritmo richiede n3 /6 flops. La funzione matlab Chol(A) fornisce una matrice triangolare superiore U tale A = UT U, ossia la trasposta della matrice R. La stabilit` a numerica dell’algoritmo segue dal seguente risultato 2 rij



i

2 rip = aii

p=1

che mostra il fatto importante che gli elementi della matrice di Cholesky sono limitati (con costante moltiplicativa uguale a uno) dagli elementi della matrice A.

Figura 4.5 Struttura a banda.

4.1.9

Matrici a banda

Una matrice `e chiamata a banda quando gli elementi che possono essere diversi dallo zero sono concentrati vicino alla diagonale. Pi` u precisamente, si dice che A = [aij ] ha una banda superiore q, se aij = 0 per j > i + q e una banda inferiore p, se aij = 0 per i > j + p (cfr. per una rappresentazione schematica la Figura 4.5). Matrici con struttura a banda hanno origine in molteplici applicazioni, in particolare nell’ambito della discretizzazione dei problemi differenziali con il metodo delle differenze finite o degli elementi finiti, o in modelli di reti. analisi numerica

c V. Comincioli

172

Algebra lineare numerica

Per la risoluzione di sistemi con matrici a banda risultano particolarmente interessanti i metodi di fattorizzazione, in quanto i fattori triangolari L, U, e R nel caso simmetrico, possono essere calcolati in maniera da conservare la struttura a banda. In effetti, con un procedimento di induzione si pu` o dimostrare il seguente risultato, illustrato nella Figura 4.6. Proposizione 4.4 Supponiamo che la matrice A di ordine n abbia la fattorizzazione A = LU. Allora, se A ha una banda superiore q e una banda inferiore p, la matrice U ha banda superiore q e L una banda inferiore p.

Figura 4.6 Decomposizione LU per una matrice a banda. Come illustrazione, si considerino i seguenti passaggi ottenuti mediante il metodo di eliminazione di Gauss in corrispondenza a una matrice a banda, con p = 2 e q = 1. Osserviamo che ad ogni passo del procedimento di eliminazione, si opera su una sottomatrice 3 × 2; in generale, per una matrice a banda (p, q), ad ogni passo si opera una sottomatrice di dimensioni (l + 1) × (u + 1). ⎤ ⎡ ⎤ ⎡ ⎤ ⎡ 2 1 0 0 0 2 1 0 0 0 2 1 0 0 0 ⎢ 0 2 1 0 0 ⎥ ⎢ 0 2 1 0 0 ⎥ ⎢ 4 4 1 0 0 ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎢ 6 5 3 1 0 ⎥ → ⎢ 0 2 3 1 0 ⎥ → ⎢ 0 0 2 1 0 ⎥ → ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎣ 0 0 2 3 1 ⎦ ⎣ 0 6 5 3 1 ⎦ ⎣ 0 6 5 3 1 ⎦ 0 0 6 5 3 0 0 6 5 3 0 0 6 5 3 ⎤ ⎡ ⎤ ⎡ 2 1 0 0 0 2 1 0 0 0 ⎢ 0 2 1 0 0 ⎥ ⎢ 0 2 1 0 0 ⎥ ⎥ ⎢ ⎥ ⎢ ⎢ 0 0 2 1 0 ⎥ →⎢ 0 0 2 1 0 ⎥ ⎥ ⎢ ⎥ ⎢ ⎣ 0 0 0 2 1 ⎦ ⎣ 0 0 0 2 1 ⎦ 0 0 0 0 2 0 0 0 2 3 e, quindi, introducendo la ⎡ 2 1 ⎢ 4 4 ⎢ ⎢ 6 5 ⎢ ⎣ 0 6 0 0

matrice dei moltiplicatori, la seguente ⎤ ⎡ ⎤ ⎡ 0 0 0 2 1 0 0 0 0 ⎥ ⎢ 2 1 0 0 0 ⎥ ⎢ 0 1 0 0 ⎥ ⎥ ⎢ ⎢ ⎢ 3 1 1 0 0 ⎥ ⎢ 0 3 1 0 ⎥ = ⎥ ⎢ ⎥ ⎢ 5 3 1 ⎦ ⎣ 0 3 1 1 0 ⎦ ⎣ 0 6 5 3 0 0 0 3 1 1

fattorizzazione ⎤ 1 0 0 0 2 1 0 0 ⎥ ⎥ 0 2 1 0 ⎥ ⎥ 0 0 2 1 ⎦ 0 0 0 2

Una matrice di ordine n e a banda (p, q) pu` o essere memorizzata in forma compatta in una array rettangolare ABAND di dimensioni (p + q + 1) × n, con la convenzione che aij = ABAND(i-j+q+1,j) analisi numerica

(4.30) c V. Comincioli

4.1 Metodi diretti

173

per tutte le coppie di indici (i, j) che sono interne alla banda. Come esemplificazione, la matrice precedente pu`o essere memorizzata nella seguente forma

ABAND=

∗ a11 a21 a31

a12 a22 a32 a42

a23 a33 a43 a53

a34 a44 a54 ∗

a45 a55 ∗ ∗

∗ 2 4 6

1 4 5 6

1 3 5 6

1 3 5 ∗

1 3 ∗ ∗

sopradiagonale diagonale 1a sottodiagonale 2a sottodiagonale

ove con ∗ si `e indicato le posizioni di memoria che non sono utilizzate (tali posizioni potrebbero essere evitate memorizzando la banda in un unico vettore). Ad eliminazione terminata si ottiene ∗ 2 2 3

1 2 1 3

1 2 1 3

1 2 1 ∗

1 2 ∗ ∗

sopradiagonale di U diagonale di U 1a sottodiagonale di L 2a sottodiagonale di L

Come ulteriore approfondimento della tecnica di memorizzazione (4.30), consideriamo il seguente algoritmo mediante il quale la moltiplicazione di una matrice a banda per un vettore pu`o essere ottenuta mediante circa 2n(p + q + 1) flops. Algoritmo 4.9 (Prodotto di matrice a banda per vettore) Data una matrice A a banda inferiore p e banda superiore q e memorizzata nella forma (4.30), e un vettore x ∈ Rn , il seguente algoritmo calcola z = Ax con un procedimento per colonne. zi = 0, i = 1, 2, . . . , n For j = 1, 2, . . . , n itop = max(1, j − q); ibot = min(n, j + p) iatop = max(1, q + 2 − j); iabot = iatop + ibot − itop For i = itop, . . . , ibot zi := zi + xj ABAND(iatop − itop + i, j) end i end j

Il metodo di eliminazione, che abbiamo visto applicato su un esempio particolare, pu` o essere generalizzato nel seguente modo. Algoritmo 4.10 (Eliminazione di Gauss per matrici a banda) Per una matrice A di ordine n a banda (p, q), la decomposizione A = LU, se esiste, pu`o essere calcolata col seguente algoritmo, nel quale gli elementi aij sono sostituiti da lij se i > j e da uij se i ≤ j. For k = 1, . . . , n − 1 For i = k + 1, . . . , min(k + p, n) aik := aik /akk end i For i = k + 1, . . . , min(k + p, n) For j = k + 1, . . . , min(k + q, n) aij := aij − aik akj end j end i end k analisi numerica

c V. Comincioli

174

Algebra lineare numerica

L’algoritmo precedente richiede un numero di operazioni in flops dato da . npq − 12 pq 2 − 16 p3 + pn se p ≤ q npq − 12 p2 q − 16 q 3 + qn

se p > q

Estensioni immediate si hanno per le decomposizioni LDMT . Per quanto riguarda, poi, la risoluzione dei sistemi triangolari a banda si hanno i seguenti algoritmi. Algoritmo 4.11 (Sistema triangolare a banda inferiore) Sia L una matrice di ordine n triangolare a banda inferiore p e tale che lii = 1, i = 1, 2, . . . , n. Dato b ∈ Rn , il seguente algoritmo calcola la soluzione del sistema Ly = b; il vettore b `e sostituito dalla soluzione y. For i = 1, 2, . . . , n i−1 bi := bi − j=max(1,i−p) lij bj end i

Algoritmo 4.12 (Sistema triangolare a banda superiore) Sia U una matrice di ordine n triangolare a banda superiore q. Dato b ∈ Rn , il seguente algoritmo calcola la soluzione del sistema Ux = b; il vettore b `e sostituito dalla soluzione x. For i = n, n − 1, . . . , 2, 1 % $ uij bj /uii bi := bi − min(i+q,n) j=i+1 end i

Gli algoritmi precedenti richiedono np − p2 /2 (rispettivamente n(q + 1) − q 2 /2 ) flops. L’Algoritmo 4.10 non prevede la tecnica pivotale. In effetti, gli scambi delle righe possono allargare la banda della matrice. Per esempio, se A `e tridiagonale e alla prima eliminazione si scambiano le prime due righe, l’elemento u13 risulta in generale differente dallo zero. L’algoritmo di eliminazione di Gauss per le matrici a banda `e pertanto particolarmente interessante nel caso che non sia richiesta l’operazione di pivoting, cio`e ad esempio per le matrici a predominanza diagonale e le matrici simmetriche definite positive. Rinviando alla bibliografia per una pi` u adeguata trattazione, ci limiteremo ad analizzare alcuni algoritmi per le matrici simmetriche e definite positive. Algoritmo 4.13 ( Algoritmo di Cholesky per matrici a banda) Per una matrice A simmetrica definita positiva e a banda p, il seguente algoritmo calcola una matrice triangolare inferiore R con banda inferiore p tale che A = RRT . Gli elementi rij sostituiscono gli elementi aij (i ≥ j). For i = 1, . . . , n For j = max(1, i − p), . . . , i − 1 % $ aij := aij − j−1 k=max(1,i−p) aik ajk /ajj end j $ %1/2 i−1 aii := aii − k=max(1,i−p) a2ik end i

L’algoritmo richiede (np2 /2)−(p3 /3)+(3/2)(np−p2 ) flops e n radici quadrate. Quindi per p  n, la decomposizione di Cholesky richiede n(p2 + 3p)/2 flops e n radici quadrate. Inoltre, la matrice A pu` o essere memorizzata in una array ABAND di dimensioni n × (p + 1) nella seguente forma analisi numerica

c V. Comincioli

4.1 Metodi diretti

175

(in cui p = 2) ⎡ ⎢ ⎢ ⎢ ⎢ ABAND = ⎢ ⎢ ⎢ ⎣

∗ ∗ a31 a42 .. .

∗ a21 a32 a43 .. .

a11 a22 a33 a44 .. .

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

con

aij = ABAND(i, j − i + p + 1)

an,n−2 an,n−1 ann Per valori piccoli di p le radici quadrate costituiscono una parte consistente del calcolo. In questo caso si preferisce una decomposizione LDLT , nella quale non `e necessario il calcolo delle radici quadrate. Come illustrazione, esplicitiamo il caso di una matrice A tridiagonale simmetrica. Indichiamo con L la matrice bidiagonale triangolare inferiore e con D la matrice diagonale

diag(d1 , . . . , dn ). Dall’uguaglianza A = LDLT si ha a11 =d1 ak,k−1 =ck−1 dk−1 k = 2, 3, . . . , n 2 ak,k =dk + ck−1 dk−1 = dk + ck−1 ak,k−1 k = 2, 3, . . . , n da cui d1 =a11 ck−1 =ak,k−1 /dk−1 dk =akk − ck−1 ak,k−1 per k = 2, . . . , n. Completando con la soluzione dei sistemi Ly=b, Dz=y e LT x = z, si ha il seguente algoritmo che richiede 5n flops. Algoritmo 4.14 (Algoritmo di Cholesky per matrici tridiagonali) Data una matrice A tridiagonale simmetrica definita positiva, con gli elementi della diagonale memorizzati nel vettore [d1 , d2 , . . ., dn ] e gli elementi sopra la diagonale nel vettore [c1 , c2 , . . ., cn ], il seguente algoritmo calcola la soluzione del sistema Ax = b; il vettore x sostituisce il vettore b. For k = 2, . . . , n t := ck−1 , ck−1 := t/dk−1 , dk := dk − tck−1 end k For k = 2, . . . , n bk := bk − ck−1 bk−1 end k bn := bn /dn end k analisi numerica

c V. Comincioli

176

Algebra lineare numerica For k = n − 1, . . . , 1 bk := bk /dk − ck bk+1 end k

4.1.10

Matrici sparse

In termini qualitativi, una matrice `e considerata sparsa quando il suo ordine `e sufficientemente elevato, ma i suoi elementi sono in “predominanza” nulli. Le matrici a banda che abbiamo considerato nel paragrafo precedente sono, quindi, casi particolari di matrici sparse. Ma, pi` u in generale, nelle applicazioni una matrice sparsa pu` o avere gli elementi diversi dallo zero non necessariamente addensati intorno alla diagonale. Per tali matrici si pone da una parte il problema di una loro conveniente rappresentazione in memoria, e dall’altra l’individuazione di opportune strategie nell’applicazione del metodo di eliminazione, in maniera da limitare il pi` u possibile il fenomeno del fill-in. Per fill-in si intende il fatto che un elemento della matrice originariamente nullo diventa diverso dallo zero per effetto della sostituzione. Per la risoluzione dei problemi ora prospettati sono state proposte diverse soluzioni. In questo paragrafo forniremo una breve introduzione, che evidenzia, tuttavia, le difficolt`a di base. Nel seguito considereremo l’applicazione dei metodi iterativi, che rispetto ai metodi diretti hanno il vantaggio di non modificare la matrice. Esempio 4.8 Analizziamo l’applicazione del metodo di eliminazione ad un sistema lineare Ax = b, con A matrice della seguente forma ⎡ ⎢ ⎢ ⎢ A=⎢ ⎢ ⎣

a11 a21 a31 .. .

a12 a22 0 .. .

a13 0 a33 .. .

··· ··· ··· .. .

a1n 0 0 .. .

an1

0

···

0

ann

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

La matrice assegnata `e una particolare matrice sparsa, detta anche matrice bordata (bordered). Si tratta di una matrice completamente nulla, salvo eventualmente la diagonale, la prima riga e la prima colonna. Per la memorizzazione di una matrice di questo tipo sono quindi sufficienti tre vettori. Quando, tuttavia, si applica il metodo di eliminazione nella forma usuale, il primo passo di eliminazione sostituisce coefficienti nulli della matrice con coefficienti, in generale, diversi dallo zero; si verifica cio`e un fill–in. Come esemplificazione, si consideri la seguente trasformazione, ottenuta sottraendo la prima equazione dalle successive ⎡ ⎤ ⎡ ⎤ 2 1 −1 −1 2 1 −1 −1 ⎢ 2 2 ⎢ 0 0 ⎥ 1 1 1 ⎥ ⎢ ⎥ ⇒ ⎢ 0 ⎥ ⎣ 2 0 ⎦ ⎣ 1 0 0 −1 2 1 ⎦ 2 0 0 1 0 −1 1 2 Come si vede, in questo caso tutti gli elementi nulli della matrice originaria dopo la prima eliminazione sono sostituiti da numeri diversi dallo zero. Ricordiamo, anche, che le posizioni degli elementi che si azzerano nella prima colonna sono, nel procedimento di eliminazione, usualmente utilizzati per memorizzare i moltiplicatori, e quindi non sono ulteriormente disponibili. Si conclude, quindi, che procedendo nel modo precedente, anche se per memorizzare la matrice originaria bastano tre vettori, successivamente `e necessaria la memorizzazione di una matrice n × n. Tuttavia, un’osservazione importante per il trattamento delle matrici sparse `e che l’effetto fill–in pu` o dipendere dall’ordinamento delle righe e delle colonne della matrice. Nel sistema lineare tale ordinamento corrisponde all’ordine in cui si considerano le equazioni e le incognite. Nel caso delle matrici bordate si pu`o eliminare completamente il fill-in procedendo nel seguente modo. Si scambiano tra loro la prima e l’ultima equazione (la prima e l’ultima riga della matrice) e successivamente analisi numerica

c V. Comincioli

4.1 Metodi diretti

177

l’incognita x1 con l’incognita xn (la prima e l’ultima colonna). Si ottiene in questo modo la seguente matrice ⎡

ann 0 0

⎢ ⎢ ˆ =⎢ A ⎢ ⎢ ⎣ ··· a1n

0 a22 0 .. .

··· 0 a33 .. .

0 ··· ··· .. .

an1 a21 a31 .. .

a12

a13

···

a11

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

(4.31)

In questo caso per avere una matrice triangolare `e sufficiente sottrarre dall’ultima equazione le precedenti moltiplicate per opportuni coefficienti. Se memorizziamo la matrice mediante tre vettori l, u, d nella forma ⎤ ⎡ 0 0 · · · u1 d1 ⎢ 0 d2 0 · · · u2 ⎥ ⎥ ⎢ ⎥ ⎢ .. . .. d ⎢ 0 . u3 ⎥ 3 ⎥ ⎢ ⎣ ··· ··· ⎦ l2 · · · dn l1 si pu` o fattorizzare la matrice mediante il seguente algoritmo, che sostituisce gli elementi li con i moltiplicatori li /di e sostituisce dn con l’elemento diagonale n–mo della matrice U. for i = 1 : n − 1 li ← li /di dn ← dn − li ui end i

Per matrici sparse di tipo generale la ricerca di un ordinamento ottimale per ridurre il fill–in non `e un problema di facile soluzione. Per un opportuno approfondimento rinviamo ad esempio a George e Liu [159]. Qui ci limiteremo a considerare la tecnica di memorizzazione di una matrice sparsa utilizzata in matlab. Matrici sparse: tecniche di memorizzazione Come gi`a osservato le matrici sparse contengono un numero ‘significativo’ di elementi nulli. Tale caratteristica fornisce vantaggi sia nella memorizzazione che nel tempo di calcolo. La densit` a di una matrice `e il numero di elementi non nulli divisa per il numero totale degli elementi. Per matrici ‘piene’, MATLAB memorizza internamente tutti gli elementi della matrice. Gli elementi nulli e non nulli richiedono la stessa quantit` a di spazio di memoria. Per le matrici sparse, invece, MATLAB memorizza solo gli elementi non nulli e i loro indici. MATLAB utilizza tre arrays per memorizzare internamente una matrice sparsa con elementi reali. Data una matrice m × n con nnz elementi non nulli memorizzata in una array di lunghezza nzmax6 • La prima array contiene tutti gli elementi della array in formato floating-point. La lunghezza di tale array `e uguale a nzmax. 6 Inizialmente, nnz ha lo stesso valore di nzmax per default. Ossia, il numero di elementi non nulli `e uguale al numero delle locazioni di memoria assegnati agli elementi non nulli. Comunque, MATLAB non assegna dinamicamente memoria quando si pongono a zero altri elementi della matrice. Porre uguale a zero alcuni elementi cambia il valore di nnz, ma non quello di nzmax.

analisi numerica

c V. Comincioli

178

Algebra lineare numerica

• La seconda array contiene gli indici di riga (in formato intero) per gli elementi non nulli memorizzati nella precedente array. Tale array ha lunghezza nzmax. • La terza array contiene n interi che indicano l’inizio di ogni colonna nelle due arrays precedenti e un addizionale intero che indica la fine di tali arrays. La lunghezza della terza array `e n+1. Contando 8 bytes per un numero floating-point e 4 bytes per un numero intero, il numero totale di bytes richiesti per memorizzare una matrice sparsa `e 8*nzmax + 4*(nzmax+n+1) Per informazioni sulla occupazione di memoria, utilizzare il comando whos. Per controllare se una matrice `e memorizzata in forma sparsa si ha il seguente comando ISSPARSE True for sparse matrix. ISSPARSE(S) is 1 if the storage class of S is sparse and 0 otherwise. Creazione delle matrici sparse MATLAB non crea automaticamente matrici sparse: la decisione di ritenere che la densit`a `e tale da ottenere vantaggi dalle tecniche per trattare le matrici sparse `e lasciata all’utente. Conversione da matrici piene a matrici sparse S=sparse(A)

>> A=[0 0 0 5 0 2 0 0 1 3 0 0 0 0 4 0] >> S=sparse(A) S = (3,1) (2,2) (3,2) (4,3) (1,4) >> nzmax(S) ans = 5

1 2 3 4 5

Creazione diretta di matrici sparse Da una lista di elementi non nulli si pu` o creare una matrice sparsa usando il seguente comando S=sparse(i,j,s,m,n)

ove i e j sono vettori di indici riga, e rispettivamente colonna, per gli elementi non nulli della matrice. s `e un vettore di valori non nulli i cui indici sono specificati dalle coppie (i, j). m e n sono le dimensioni di riga, e rispettivamente di colonna della matrice risultante. La matrice S dell’esempio precedente pu`o essere generata direttamente nel seguente modo analisi numerica

c V. Comincioli

4.1 Metodi diretti

179

>> S=sparse([3 2 3 4 1], [1 2 2 3 4], [1 2 3 4 5],4,4) S = (3,1) 1 (2,2) 2 (3,2) 3 (4,3) 4 (1,4) 5

Come ulteriore esempio consideriamo la costruzione della matrice tridiagonale con -2 sulla diagonale principale e 1 nelle due sottodiagonali superiore e inferiore (discretizzazione della derivata seconda). >> D=sparse(1:n,1:n,-2*ones(1,n),n,n); >> E=sparse(2:n,1:n-1,ones(1,n-1),n,n); >> S=E+D+E’ S = (1,1) -2 (2,1) 1 (1,2) 1 (2,2) -2 (3,2) 1 (2,3) 1 (3,3) -2 (4,3) 1 (3,4) 1 (4,4) -2 (5,4) 1 (4,5) 1 (5,5) -2 >> F=full(S) F = -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2

4.1.11

Introduzione all’updating

Le tecniche per aggiornare (updating) la fattorizzazione di una matrice hanno un ruolo centrale nell’algebra lineare moderna e nella ottimizzazione. In questo paragrafo forniremo, mediante opportune esemplificazioni, alcune idee di base. Se B `e una matrice di ordine n e u, v sono due vettori in Rn la matrice A definita nel seguente modo (4.32) A = B − uvT `e detta un aggiornamento della matrice B ottenuta mediante la matrice di rango 1 uvT . Come esemplificazione, si consideri la seguente decomposizione ⎤ ⎤ ⎡ ⎤ ⎡ ⎡ 0 0 0 0 0 1 0 0 1 2 2 2 ⎢ ⎢ ⎢ 1 0 0 0 ⎥ 1 0 0 ⎥ 1 0 0 ⎥ ⎥ ⎥+⎢ 1 ⎥=⎢ 0 (4.33) A=⎢ ⎣ ⎦ ⎣ ⎦ ⎣ 1 1 0 0 0 ⎦ 0 0 −1 0 0 −1 0 1 0 0 0 0 0 0 1 1 0 0 1 analisi numerica

c V. Comincioli

180

Algebra lineare numerica

In questo caso la matrice B `e una matrice triangolare, e u = [0, 1, 1, 1]T , v = −[1, 0, 0, 0]T . Nelle applicazioni ha interesse ottenere un modo rapido (ossia, con un numero di operazioni di ordine n2 ) per ottenere una fattorizzazione della matrice A, una volta che sia nota una fattorizzazione di B. In maniera equivalente, si tratta di costruire l’inversa A−1 , a partire dall’inversa di B. Una risposta teorica a tale problema `e fornita dalla seguente formula, nota come formula di Sherman–Morrison A−1 = B−1 + αB−1 uvT B−1 (4.34) ove α = 1/(1 − vT B−1 u). La formula (4.34) pu` o essere utilizzata per risolvere il sistema Ax = b nel seguente modo x = A−1 b =(B−1 + αB−1 uvT B−1 )b B−1 b + αB−1 uvT B−1 b B−1 b + α(vT B−1 b)B−1 u B−1 b + βB−1 u ove β = α(vT V−1 b) = vT B−1 b/(1 − vT B−1 u). Posto y = B−1 b e z = B−1 u si ha x = A−1 b = B−1 b + βB−1 u = y +

vT y z 1 − vT z

In definitiva, la soluzione del sistema Ax = b pu` o essere ottenuta nel seguente modo 1. Si fattorizza B. 2. Si risolvono i sistemi By = b, Bx = u. 3. Si calcola lo scalare β = vT y(1 − vT z). 4. Si pone x = y + βz. Esempio 4.9 La seguente matrice



⎢ ⎢ A=⎢ ⎢ ⎣

3 −1 0 −1 4 −1 0 −1 4 0 0 −1 −1 0 0

⎤ 0 −1 0 0 ⎥ ⎥ −1 0 ⎥ ⎥ 4 −1 ⎦ −1 3

(4.35)

ha origine nell’approssimazione mediante il metodo delle differenze finite dei problemi differenziali del secondo ordine con condizioni periodiche. Essa pu`o essere espressa nella somma A = B − uv, assumendo ⎡ ⎤ ⎡ ⎤ 4 −1 0 0 0 1 ⎢ −1 ⎢ 0 ⎥ 4 −1 0 0 ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ 0 −1 ⎥; ⎢ 0 ⎥ 4 −1 0 u = v = ⎢ ⎥ ⎢ ⎥ ⎣ 0 ⎣ 0 ⎦ 0 −1 4 −1 ⎦ 0 0 0 −1 4 1 ove B `e una matrice tridiagonale. Applicando l’algoritmo precedente, si ha ⎡ ⎤ ⎡ ⎤ ⎡ 0 0.4615 ⎢ 4 ⎥ ⎢ 1.8462 ⎥ ⎢ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ : By = b ⇒ y = ⎢ 2.9231 ⎥ ; Bz = u ⇒ z = ⎢ 9 b=⎢ ⎢ ⎥ ⎢ ⎥ ⎢ ⎣ 0 ⎦ ⎣ 0.8462 ⎦ ⎣ 1 0.4615 analisi numerica

0.2692 0.0769 0.0385 0.0769 0.2692

⎤ ⎥ ⎥ ⎥ ⎥ ⎦

c V. Comincioli

4.1 Metodi diretti

181 ⎡

da cui vT y = 2; β= 1 − vT z

⎢ ⎢ x = y + βz = ⎢ ⎢ ⎣

1 2 3 1 1

⎤ ⎥ ⎥ ⎥ ⎥ ⎦

Osservazione 4.1 La procedura basata sulla formula di Sherman-Morrison pu`o presentare, come si pu` o mostrare attraverso opportune esemplificazioni, problemi di stabilit` a numerica. Procedure pi` u stabili possono essere ottenute utilizzando la decomposizione B=QR in una matrice ortogonale e una matrice triangolare; i fattori della decomposizione della matrice modificata A possono essere ottenuti mediante la modifica diretta dei fattori della decomposizione di B. Il metodo QR sar` a considerato nei paragrafi successivi.

4.1.12

Fattorizzazione a blocchi

Le idee discusse in questo paragrafo possono essere estese alle matrici a blocchi, trattando formalmente i blocchi come gli elementi della matrice. Come esemplificazione, consideriamo la seguente decomposizione a due blocchi   A11 A12 A= (4.36) A21 A22 ove A11 , A22 sono matrici quadrate, dette blocchi diagonali, non necessariamente diagonali. La fattorizzazione LU di A pu` o essere scritta nella seguente forma       L11 U11 U12 A11 A12 = (4.37) A= A21 A22 L21 L22 U22 ove L11 e L22 sono sottomatrici triangolari inferiori e U11 e U22 sono sottomatrici triangolari superiori. Dalla definizione (4.37) si ricavano le seguenti relazioni A11 = L11 U11 L11 U12 = A12 L21 U11 = A21 A22 − L21 U12 = L22 U22

(4.38) (4.39) (4.40) (4.41)

Pertanto, la fattorizzazione (4.36) pu` o essere costruita calcolando successivamente la fattorizzazione della matrice A11 , la formazione delle colonne di U12 e delle righe di L21 mediante una sostituzione in avanti, e infine la fattorizzazione della matrice A22 − L21 U12 . Per ognuna delle fattorizzazioni triangolari richieste si utilizzano le tecniche che abbiamo esaminato in precedenza, con eventuali opportune permutazioni di righe e di colonne. Come nel caso della fattorizzazione LU per punti, si pu` o scegliere alternativamente che la matrice U o la matrice L siano triangolari con elementi sulla diagonale principale uguali a 1. Scegliendo ad esempio la matrice U, si ha la decomposizione       A11 A11 A12 I U12 (4.42) A= = A21 A22 A21 A22 I con A11 U12 = A12 A22 = A22 − A21 U12 analisi numerica

(4.43) (4.44) c V. Comincioli

182

Algebra lineare numerica

Data la decomposizione A = LU, ottenuta nel modo (4.42), si ottiene la soluzione del sistema lineare Ax = b risolvendo successivamente i sistemi lineari  A11 y1 = b1 Ly = b ⇒ A22 y2 = b2 − A21 y1  x2 = y2 Ux = y ⇒ x1 = y1 − U12 x2 Osserviamo che il procedimento precedente richiede che la matrice A11 (il pivot a blocchi) sia non singolare. Il fatto che la matrice A sia non singolare non garantisce la non singolarit`a della matrice A11 , come mostra il seguente semplice esempio ⎤ ⎡ 1 1 1 A = ⎣ 1 1 -1 ⎦ 0 1 1

 Esercizio 4.1 Risolvere il seguente sistema di equazioni

⎧ +x3 =1 ⎨0.5x1 x1 +2x2 −x3 =0 ⎩ +x3 =0 x1

usando il metodo di eliminazione di Gauss e il pivoting parziale.

 Esercizio 4.2 Determinare una matrice di permutazione P tale che la matrice ⎡

⎤ 1 1 0 3 ⎢ 2 1 −1 1 ⎥ ⎥ A=⎢ ⎣ −1 2 3 −1 ⎦ 3 −1 −1 2

ammetta la fattorizzazione PA=LU.

 Esercizio 4.3 Riscrivere l’Algoritmo 4.2 supponendo che la matrice U sia memorizzata sotto forma di vettore di dimensione 1 [u11 , u12 , u22 , u13 , u23 . . .].  Esercizio 4.4 Sia A una matrice non singolare. Estendere il metodo di eliminazione con pivoting parziale per risolvere p > 1 sistemi lineari, corrispondenti a p vettori termini noti diversi. Ricavarne un algoritmo per il calcolo di A−1 .

 Esercizio 4.5 Metodo di Gauss-Jordan. Si considerino le matrici elementari N(y, i) = I + yeTi , con

y ∈ Rn . Dato x ∈ Rn esaminare il calcolo di y in modo che N(y, i)x = ei ; proporre un algoritmo basato sulle trasformazioni precedenti per il calcolo di A−1 con il risultato sostituito alla matrice A.

 Esercizio 4.6 Mostrare che la matrice non singolare 

A=

0 1

1 0



non ha una decomposizione A = LU. Trovare una matrice permutazione P tale che PA abbia una decomposizione LU. analisi numerica

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

183

 Esercizio 4.7 Modificare l’Algoritmo 4.8, supponendo che la matrice simmetrica A sia memorizzata in un vettore di dimensione n(n + 1)/2, nella seguente forma A = [a11 , a21 , a22 , a31 , · · · , an1 , an2 , · · · , ann ]

 Esercizio 4.8 Calcolare il numero delle operazioni richieste per il calcolo dell’inversa di una matrice tridiagonale con il metodo di Gauss, senza scambio di righe. Considerare, quindi, il caso in cui la matrice `e simmetrica.

 Esercizio 4.9 Studiare opportune strategie per la risoluzione del sistema A2 x = b, nell’ipotesi di conoscere la matrice A.

 Esercizio 4.10 Modificare l’Algoritmo 4.13 supponendo che la matrice A sia memorarizzata per diagonali (relative alla banda) in un vettore a una dimensione.

 Esercizio 4.11 Esaminare il caso particolare di sistema a banda Hx = b con H matrice di Hessenberg.  Esercizio 4.12 Implementare l’algoritmo di eliminazione per una matrice a banda di tipo pentadiagonale.

 Esercizio 4.13 Indicare una strategia per il calcolo del seguente vettore x = B−1 (2A + I) (C−1 + A)b senza il calcolo di matrici inverse.

 Esercizio 4.14 Supponendo di avere calcolata la decomposizione LU della matrice A, scrivere un programma, colonna orientato, per risolvere AT x = b.

4.2

Analisi degli errori; condizionamento e stabilit` a

Quando un sistema lineare viene risolto numericamente, ossia mediante un particolare algoritmo implementato su un calcolatore, la soluzione ottenuta differisce usualmente dalla soluzione esatta, cio`e dalla soluzione che si potrebbe ottenere eseguendo le operazioni con una precisione infinita. Dal punto di vista delle applicazioni, `e naturalmente importante fornire una stima dell’errore commesso7 . Con riferimento all’analisi introdotta pi` u in generale nel capitolo precedente, possiamo separare due tipi di contributi nella formazione dell’errore globale. Il primo si riferisce al condizionamento 7 When a problem in pure or in applied mathematics is “solved” by numerical computation, errors, that is, deviations of the numerical “solution” obtained from the true, rigorous one, are unavoidable. Such a “solution” is therefore meaningless, unless there is an estimate of the total error in the above sense, J. Von Neumann, H. H. Goldstine (1947).

analisi numerica

c V. Comincioli

184

Algebra lineare numerica

del problema, ed `e essenzialmente legato con i dati, ossia la matrice A e il termine noto b, ed `e indipendente dall’algoritmo, mentre il secondo riguarda la stabilit`a dell’algoritmo. Nei paragrafi precedenti abbiamo visto, in particolare, che la procedura del pivoting diminuisce l’effetto della propagazione degli errori di arrotondamento e quindi fornisce un algoritmo pi` u stabile; ma anche tale procedura pu` o risultare inefficace, quando il sistema non `e ben condizionato. In questo paragrafo, oltre che precisare il senso del condizionamento per il problema della risoluzione di un sistema lineare, e pi` u in particolare definire una misura di condizionamento, analizzeremo alcuni algoritmi numerici pi` u idonei, rispetto a quelli esaminati nei paragrafi precedenti, a risolvere sistemi lineari mediamente mal condizionati. Per quanto riguarda, invece, i sistemi decisamente mal condizionati, lo studio del malcondizionamento pu`o essere utile per individuare le cause di tale comportamento ed avere quindi suggerimenti per modificare opportunamente il modello. Introduciamo l’analisi del condizionamento mediante un semplice esempio di sistema mal condizionato. Esempio 4.10 Consideriamo il seguente sistema lineare 

2x1 + 3x2 = 5 2x1 + 3.1x2 = 5.1

(4.45)

che ha come soluzione esatta x1 = x2 = 1. Se modifichiamo la matrice dei coefficienti e il termine noto nella seguente maniera         2.000 3.000 2.000 3.000 5.000 5.000 ˜ ˜ A= ⇒ A= ; b= ⇒ b= 2.000 3.100 1.999 3.000 5.100 4.990 ˜x = b ˜ diventa x˜1 = 10, x la soluzione esatta del sistema perturbato A˜ ˜2 = −5. Posto ˜ − x, δx = x si ha

δA1 = 0.0164; A1

˜ − A, δA = A

δb1 = 0.0109; b1

˜ −b δb = b

δx1 = 7.5; x1

δx1 = 1.34 ˜ x1

Si vede, pertanto, che l’errore relativo sui risultati `e di due ordini di grandezza superiore agli errori relativi ` interessante esaminare l’inversa della matrice A; si ha sui dati. E   15.500 −15.000 A−1 = −10.000 10.000 con A−1 1 = 25.5, mentre A1 = 6.1. Come vedremo nel seguito, il numero µ1 (A) := A1 A−1 1 fornisce una indicazione del fattore di amplificazione degli errori nei dati. In questo caso si ha µ1 (A) = 155.55.

Lo studio del condizionamento di un sistema pu` o essere fatto perturbando i dati ed esaminando gli effetti prodotti da tali perturbazioni sulla soluzione. Per semplicit` a, consideriamo separatamente gli effetti prodotti delle variazioni sul termine noto b e quelli sulla matrice A. Sia A una matrice non singolare e siano x e x + δx le rispettive soluzioni dei seguenti due sistemi Ax = b; A(x + δx) = b + δb Sottraendo le due equazioni, si ricava A(δx) = δb ⇒ δx = A−1 δb analisi numerica

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

185

Indicando con  ·  una norma naturale di matrice, ad esempio una delle norme  · 1 ,  · 2 ,  · ∞ , si ha δx = A−1 δb ≤ A−1  δb D’altra parte, si ha b = Ax ≤ A x ⇒

A 1 ≤ x b

da cui

δx δb ≤ A A−1  x b Si pu` o mostrare che per ogni norma naturale fissata esistono dei vettori δb e x tali che A−1 δb = A−1  δb;

(4.46)

Ax = A x

per cui la maggiorazione (4.46) `e stretta. Consideriamo, ora, il caso in cui x e x + δx sono le rispettive soluzioni dei seguenti due sistemi Ax = b,

(A + δA)(x + δx) = b

Con semplici passaggi si ha Ax = b = (A + δA)(x + δx) ⇒ 0 = Aδx + δA(x + δx) ⇒ δx = −A−1 δA(x + δx) da cui

δx = A−1 δA(x + δx) ≤ A−1  δA x + δx

e quindi

δA δx ≤ A A−1  (4.47) x + δx A Modificando opportunamente la procedura precedente, si pu` o mostrare che nel caso in cui la perturbazione δA sia sufficientemente piccola, pi` u precisamente si abbia A−1  δA < 1, allora per la soluzione x + δx del seguente sistema perturbato (A + δA)(x + δx) = b + δb si ha la maggiorazione δx δA/A + δb/b ≤ A A−1  x 1 − A A−1  δA/A

(4.48)

I risultati precedenti portano alla seguente definizione. Definizione 4.1 Se · indica una norma naturale di matrice, il condizionamento di una matrice A non singolare, associato a tale norma e relativo alla risoluzione di un sistema lineare, `e dato dal seguente numero8 µ(A) := A A−1 

(4.49)

a la notazione µp (A). Se la norma utilizzata `e del tipo  · p , si utilizzer` 8

tale definizione `e stata introdotta nel caso delle matrici simmetriche definite positive da Turing nel 1948 nella norma di Frobenius, e da Von Neumann (1947) nella norma 2. analisi numerica

c V. Comincioli

186

Algebra lineare numerica

Indicando con A = δA/A e b = δb/b gli errori relativi corrispondenti rispettivamente alla matrice e al terime noto, e con x = δx/x l’errore relativo indotto sulla soluzione, la maggiorazione (4.48) pu` o essere riscritta nella forma x ≤ µ(A)

A + b 1 − µ(A)A

Ricordiamo le seguenti importanti propriet`a del numero di condizionamento. 1. µ(αA) = µ(A), per ogni matrice A e ogni scalare α = 0. 2. µ(A) ≥ 1, se la norma `e naturale. σmax , ove σmax e σmin sono rispettivamente il massimo e il minimo dei valori singolari σmin della matrice A.

3. µ2 (A) =

4. µ2 (A) = 1 se e solo se A = αQ, ove α `e uno scalare e Q `e una matrice unitaria. Una matrice `e detta bencondizionata relativamente alla risoluzione di un sistema lineare, se il numero di condizionamento non `e “troppo grande”. Le matrici unitarie sono, allora, le matrici meglio condizionate; questo `e, in sostanza, il motivo del loro interesse nel calcolo numerico. Il significato di “troppo grande” `e, in generale, dipendente dal contesto. Vi sono comunque matrici ormai classicamente ritenute malcondizionate, per le quali l’unico rimedio `e la riformulazione del problema. Per le matrici, invece, “mediamente” malcondizionate un rimedio pu`o essere la scelta di un opportuno metodo stabile. Osserviamo che il numero di condizionamento `e una propriet` a che dipende dalla norma scelta. Comunque, due qualunque numeri di condizionamento µα (A), µβ (A) sono equivalenti, nel senso che esistono due costanti c1 , c2 tali che c1 µα (A) ≤ µβ (A) ≤ c2 µα (A),

A ∈ Rn×n

Ad esempio 1 µ2 (A) ≤ µ1 (A) ≤ nµ2 (A) n 1 µ∞ (A) ≤ µ2 (A) ≤ nµ∞ (A) n 1 µ1 (A) ≤ µ∞ (A) ≤ n2 µ1 (A) n2 Matlab ha diverse funzioni per calcolare o stimare il numero di condizionamento cond(A) % cond(A,1) % cond(A,inf)% condest(A) % % rcond(A) % %

norma 2; usa svd(A) norma 1; usa inv(A) norma inf; usa inv(A); stessa che cond(A’,1) stima in norma 1; usa lu(A) opportuna per matrici di grandi dimensioni e sparse stima il reciproco del numero di condizionamento in norma 1; usa lu(A) e un algoritmo sviluppato in LAPACK

analisi numerica

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

187

Allo scopo di chiarire ulteriormente il significato e le propriet` a del numero di condizionamento, analizzeremo alcuni esempi classici. Da tali esempi emerger`a, in particolare, che il reciproco del numero di condizionamento `e uno strumento pi` u adeguato del determinante per misurare quanto un sistema assegnato Ax = b `e vicino ad essere singolare, e quindi difficile o impossibile da risolvere. Esempio 4.11 La seguente matrice ⎡

1 ⎢ 0 ⎢ ⎢ Bn = ⎢ ⎢ 0 ⎢ . ⎣ .. 0

−1 1

−1 −1

0 .. .

1

0

··· ···

··· ··· .. . ..

. ···

⎤ −1 −1 ⎥ ⎥ ⎥ −1 ⎥ ⎥; ⎥ ··· ⎦ 1



B−1 n

1 1 ⎢ 0 1 ⎢ ⎢ =⎢ ⎢ 0 0 ⎢ . . ⎣ .. .. 0 0

2 1 1 ··· ···

··· ··· .. . ..

. ···

⎤ 2n−2 2n−3 ⎥ ⎥ ⎥ n−4 ⎥ 2 ⎥ ⎥ ··· ⎦ 1

ha determinante uguale a 1, ma µ∞ (Bn ) = n2n−1 . L’esempio mostra il fatto importante che una matrice pu` o essere estremamente mal condizionata, senza che il determinante sia piccolo. D’altra parte, una matrice ben condizionata pu` o avere un determinante piccolo. Come esempio, basta considerare la matrice Dn = diag(10−1 , . . . , 10−1 ) ∈ Rn×n per la quale µp (Dn ) = 1 e det(D) = 10−n .

Esempio 4.12 Per  > 0, opportunamente piccolo, consideriamo la matrice  A=

 0

0 1 



Per tale matrice si ha µ1 (A) = (1/)2 . Il sistema lineare Ax = b, con b vettore assegnato, `e equivalente al sistema lineare che si ottiene moltiplicando la seconda equazione per 2 . La matrice dei coefficienti di tale sistema `e la seguente    0 A = 0  che corrisponde ad un opportuno scaling della matrice A e per la quale si ha µ1 (A ) = 1. L’esempio mostra che il condizionamento di una matrice pu`o essere modificato dallo scaling. Si pone, allora, in generale il problema della ricerca di due matrici diagonali D1 , D2 in maniera da minimizzare la quantit` a µ(D1 AD2 ) Si tratta di una operazione di preprocessing. Come esempio di applicazione di tale tecnica si consideri il seguente caso particolare.   a b A= c d con a, b, c, d ∈ R+ e ad = cd. Mediante le matrici  √  abcd 0 D1 = ; 0 cd si ottiene il seguente scaling 

A = D1 AD2 = analisi numerica



D2 =

 a abc/d

 √  abcd 0 0 ac 

abc/d a



c V. Comincioli

188

Algebra lineare numerica

Per i corrispondenti numeri di condizionamento si ottiene max(a + b, c + d) max(b + d, a + c) |ad − bc| √ ad + bc + 2 abcd µ∞ (A ) = |ad − bc| µ∞ (A) =

Scegliendo ad esempio a = 100, b = 0.01, c = 99, d = 0.01 si ha µ∞ (A) ≈ 1.99 106 ;

µ∞ (A ) ≈ 3.97 102

Esempio 4.13 Consideriamo la matrice A e il vettore b definiti da  A=

1.2969 0.8648 0.2161 0.1441



 ;

b=

0.8642 0.1440



La soluzione esatta del sistema Ax = b `e data da [2, −2]T . Calcoliamo il residuo r = Ax − b per x = [0.9911, −0.4870]T ⇒ r = [−10−8 , 10−8 ]T La matrice inversa `e data da −1

A

= −10

per cui

8



0.8648 −0.1441 −1.2969 0.2161



µ∞ (A) ≈ 3.108

L’esempio mostra, in sostanza, che per una matrice malcondizionata il residuo non `e una buona indicazione della precisione della soluzione di un sistema lineare. In effetti si ha δx r ≤ µ(A) x b

Esempio 4.14 Consideriamo la seguente matrice simmetrica ⎡

10 ⎢ 7 ⎢ W=⎣ 8 7

7 5 6 5

⎤ 8 7 6 5 ⎥ ⎥; 10 9 ⎦ 9 10



⎤ 32 ⎢ 23 ⎥ ⎥ b=⎢ ⎣ 33 ⎦ 31

Operando la perturbazione b = b + β, con β = [, −, , −]T , la soluzione del sistema Wx = b + β `e data da x = W−1 b + W−1 β = e + W−1 β ove e = [1, 1, 1, 1]T . La matrice W−1 `e data da ⎡ W−1

⎤ 25 −41 10 −6 ⎢ −41 68 −17 10 ⎥ ⎥ =⎢ ⎣ 10 −17 10 −3 ⎦ −6 10 −3 2

per cui x = [1 + 82, 1 − 136, 1 + 35, 1 − 21]T . Il numero di condizionamento `e dato da µ1 (W) = µ∞ (W) = 4488; analisi numerica

µ2 (W) ≈ 2984 c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

189

Figura 4.7 Equilibrio di forze elastiche. Esempio 4.15 (Equilibrio di forze elastiche). Consideriamo un sistema costituito da tre molle in serie fissate ai due supporti rigidi A e D e collegate tra loro nei punti B e C (cfr. Figura 4.7). a di due forze (stress) applicate orizzontalmente nei punti B e C e che Indichiamo con f1 e f2 l’intensit` supporremo note a priori. Con x1 e x2 indichiamo, poi, gli spostamenti (strain) prodotti dalle due forze. La formulazione del modello matematico `e basata sul principio di equilibrio, in base al quale, se il sistema `e in equilibrio, la somma algebrica delle componenti delle forze deve essere in ogni punto uguale a zero. Nel sistema dato, oltre alle forze esterne fi , si deve tenere conto delle forze di reazione di tipo elastico prodotte dalle molle, che hanno una direzione opposta a quella di x positivo. Se supponiamo che le forze elastiche siano lineari, ossia che il materiale sia di tipo Hooke, e indichiamo con α e β i coefficienti di stiffness, si ha per il sistema illustrato in Figura 4.7 il seguente modello matematico, rappresentato da un sistema lineare nelle incognite x1 , x2  (α + β)x1 − βx2 = f1 (4.50) −βx1 + (α + β)x2 = f2 La matrice A dei coefficienti del sistema (4.50) e la sua inversa hanno la seguente rappresentazione ⎡ A=⎣

α+β

−β

−β

α+β



⎤ ⎦;

A−1

α+β ⎢ α(α + 2β) =⎣ β α(α + 2β)

⎤ β α(α + 2β) ⎥ ⎦ α+β α(α + 2β)

Possiamo facilmente calcolare il condizionamento della matrice nella norma 1 (o equivalentemente nella norma ∞). Si ha β α + 2β =1+2 µ1 (A) = α α da cui si vede che il condizionamento del problema dipende dai valori dei parametri α, β, e, in particolare, dal rapporto β/α. Quando tale rapporto `e grande, ossia quando la molla centrale `e molto pi` u rigida delle adiacenti, il sistema lineare (4.50) `e mal condizionato: a piccole variazioni nei parametri α, β e nelle forze f1 , f2 possono corrispondere grandi variazioni negli spostamenti x1 , x2 . Come esempio illustrativo, si ponga α = 1,

β = 1000



µ1 (A) = 1 + 2000 = 2001

La soluzione esatta corrispondente alle forze f1 = f2 = 1 `e data da x1 = x2 = 1. Operando la seguente perturbazione     1001 −1000 1000 −1000 ˜ = A= ⇒ A −1000 1001 −1000 1001 ˜ x = f , ove il termine noto f = [f1 , f2 ]T `e rimasto con δA1 /A1 ≈ 5. 10−4. La soluzione del sistema A˜ T ˜ = [2.001, 2.000] , con un errore relativo δx1 /˜ inalterato, `e data da x x1 = 0.5001. Lasciamo come esercizio l’estensione delle considerazioni precedenti al caso in cui le tre molle del sistema illustrato in Figura 4.7 possano avere coefficienti di stiffness differenti tra loro.

analisi numerica

c V. Comincioli

190

Algebra lineare numerica

Esempio 4.16 (Matrici di Hilbert ). Le matrici di Hilbert rappresentano un classico esempio di matrici malcondizionate, e che hanno interesse nelle applicazioni. In effetti, esse hanno origine nell’applicazione del metodo dei minimi quadrati, come ora ricorderemo brevemente. Se f (x) `e una funzione continua u n-1 che minimizza il seguente integrale sull’intervallo [0,1], cerchiamo il polinomio pn−1 (x) di grado al pi` 

1$ 0

%2 f (x) − pn−1 (x) dx

(4.51)

Scrivendo il polinomio pn−1 (x) nella forma pn−1 (x) = cn−1 xn−1 + cn−2 xn−2 + · · · + c1 x + c0 si ha che i coefficienti ci del polinomio che minimizza (4.51) sono le soluzioni del seguente sistema lineare n i=0

 ci

1

 xj+i dx =

0

1

xj f (x) dx,

0

La matrice dei coefficienti `e data dalla seguente matrice

1 Hn = (hij ) = , j+i−1

j = 0, 1, . . . , n − 1

i, j = 1, . . . , n

che `e nota come matrice di Hilbert di ordine n. ` possibile verificare che la matrice inversa esatta H−1 (n) ha i seguenti elementi E h−1 ij :=

(−1)i+j (n + i − 1)(n + j − 1) (i + j − 1)[(i − 1)(j − 1)]2 (n − i)(n − j)

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

µ2 (Hn ) 1.9281e+01 5.2406e+02 1.5514e+04 4.7661e+05 1.4951e+07 4.7537e+08 1.5258e+10 4.9315e+11 1.6025e+13 5.2164e+14 1.6682e+16 2.0315e+18

Figura 4.8 Numero di condizionamento della matrice di Hilbert Hn , per n = 2, . . . 13. Esaminiamo il malcondizionamento della matrice di Hilbert, considerando il caso particolare n=3 e usando una aritmetica a tre cifre. ⎡ ⎡ ⎤ ⎤ 1 1/2 1/3 1.00 .500 .333 ˜ 3 = ⎣ .500 .333 .250 ⎦ H3 = ⎣ 1/2 1/3 1/4 ⎦ ⇒ H 1/3 1/4 1/5 .333 .250 .200 ˜ 3 = b, con ˜ 3 si `e indicata la matrice H3 arrotondata a tre cifre. Risolvendo, allora, il sistema H ove con H T b = [1, 0, 0] , mediante il metodo di eliminazione di Gauss con pivoting parziale e con l’aritmetica a tre analisi numerica

License edgt-5-CLI_20110006666311-TX_20110006666311_9788850310319 granted on March 09 2011 to Alister Petrolini

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

cifre, si perviene a risolvere il seguente ⎡ 1.00 ⎣ 0.00 0.00

191

sistema triangolare ⎡ ⎤ ⎡ ⎤ ⎤ .500 .333 1.00 x1 .084 .090 ⎦ ⎣ x2 ⎦ = ⎣ −.333 ⎦ .000 −.004 −.171 x3

˜ = [11.6, −49.6, 42.7]T , mentre, come si verifica Mediante la sostituzione all’indietro, si ricava la soluzione x facilmente, la soluzione esatta `e data da x = [9, −36, 30]T . Naturalmente, la difficolt` a ora rilevata pu` o essere ridotta aumentando opportunamente il numero di cifre utilizzate. Tuttavia, come si vede in Figura 4.8, il numero di condizionamento della matrice Hn aumenta rapidamente al crescere di n. In effetti, si ha la seguente stima µ2 (H(n)) = O(exp(αn)), α costante > 0 In conclusione, operando ad esempio in semplice precisione, le matrici di Hilbert diventano intrattabili gi`a a partire da n ≥ 6, e, pertanto, in tali casi il corrispondente problema di minimi quadrati deve essere opportunamente riformulato (cfr. nel paragrafo successivo il metodo QR). 2 3 4 5 6 7 8 9 n µ2 (Vn ) 7.0e+01 1.1e+03 2.6e+04 7.3e+05 2.4e+07 9.5e+08 4.2e+10 2.1e+12

Tabella 4.2 Numero di condizionamento della matrice di Vandermonde Vn , per n = 2, . . . 9. Sempre nell’ambito dell’approssimazione polinomiale, un secondo problema che pu`o dare origine a sistemi lineari mal condizionati riguarda l’interpolazione polinomiale. Rinviando al successivo Capitolo per maggiori dettagli, ricordiamo brevemente il contesto. Dati n + 1 coppie di punti (xi , yi ), per i = 0, 1, . . . , n e con xi = xj , per i = j, si cerca il polinomio di grado al pi` u n che passa per tali punti, vale a dire che verifica le seguenti condizioni pn (xi ) = yi ,

i = 0, 1, . . . , n

ove pn (x) =

n

ck xk

k=0

Si vede facilmente che il problema precedente `e equivalente alla risoluzione di un sistema lineare nelle n + 1 incognite c = [c0 , c1 , . . . , cn ]T Vn c = y, y = [y0 , y1 , . . . , yn ]T (n + 1) × (n + 1) ha la seguente forma ⎤ x0 x20 · · · xn0 x1 x21 · · · xn1 ⎥ ⎥ .. .. .. ⎥ . . ··· . ⎦ 2 1 xn xn · · · xnn

ove la matrice dei coefficienti Vn , di dimensione ⎡ 1 ⎢ 1 ⎢ Vn = ⎢ . ⎣ ..

(4.52)

ed `e chiamata matrice di Vandermonde 9 . Consideriamo il condizionamento di tale matrice nel caso particolare in cui i punti xi sono equidistanti, ossia xk = x0 + kh, per k = 0, 1, . . . , n. Nella Tabella 4.2 sono riportati i numeri di condizionamento delle matrici Vn , quando x0 = 1 e h = 1. Come si vede, in questo caso il problema dell’interpolazione `e mal condizionato gi` a per valori piccoli di n. Nel successivo Capitolo vedremo altre difficolt`a inerenti alla scelta nell’interpolazione di punti equidistanti e riguardanti la convergenza per n → ∞. 9

Alexandre Th´eophile Vandermonde (1735-1796). Fu tra i primi a dare una organica esposizione della teoria dei determinanti, della quale pu` o essere considerato tra i fondatori. analisi numerica

c V. Comincioli

192

Algebra lineare numerica

Esempio 4.17 Discretizzazione di un problema ai limiti. Nel successivo Capitolo 9 considereremo pi`u in dettaglio la risoluzione numerica di problemi differenziali del seguente tipo ⎧ 2 ⎪ ⎨ d y = −f (x) 0 ≤ x ≤ 1 dx2 ⎪ ⎩ y(0) = y(1) = 0 condizioni ai limiti

(4.53)

che sono alla base della modellizzazione matematica di numerosi fenomeni, quali ad esempio la distribuzione della temperatura e la diffusione di sostanze. Un modo semplice per approssimare la soluzione del problema (4.53) consiste nel suddividere l’intervallo [0, 1] in n intervalli di uguale lunghezza h = 1/n e nell’approssimare la soluzione y(x) nei nodi xk = kh, k = 0, 1, . . . , n mediante la discretizzazione della derivata seconda d2 y/dx2 con una differenza finita centrale, ossia d2 y(xk ) yk−1 − 2yk + yk+1 ≈ dx2 h2 Indicando con y = [y 0 , y 1 , . . . , y n ]T la soluzione approssimata, al problema (4.53) corrisponde il seguente problema discreto ⎧ ⎪ y k−1 − 2yk + yk+1 ⎨ = −f (xk ) k = 1, 2, . . . , n − 1 h2 (4.54) ⎪ ⎩ y = y = 0 condizioni ai limiti 0

1

che corrisponde alla risoluzione del seguente sistema lineare ⎡ ⎤ ⎡ y 1 2 −1 0 ··· 0 y2 .. ⎥ ⎢ ⎢ . ⎢ . ⎢ −1 . . ⎥ 2 −1 y3 ⎢ ⎥ ⎢ ⎢ ⎥ ⎢ . . ⎢ .. .. .. ⎢ 0 −1 ⎥ 0 ⎥ ⎢ . ⎢ ⎢ ⎥ ⎢ . .. . . . . .. . . −1 ⎦ ⎢ ⎣ . ⎣ .. . 0 ··· 0 −1 2 y





⎥ ⎥ ⎥ ⎥ ⎥ = h2 ⎥ ⎥ ⎥ ⎦

⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣

n−1

f (x1 ) f (x2 ) f (x3 ) .. . .. . f (xn−1 )

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

(4.55)

Nella Tabella 4.9 sono riportati i numeri di condizionamento della matrice Bn dei coefficienti del sistema (4.55). Si vede, quindi, che il condizionamento del sistema lineare (4.55) peggiora al crescere del numero

n 4 6 8 10 12 14 16

µ2 (Bn ) 9.4721 19.1957 32.1634 48.3742 67.8274 90.5231 116.4612

Figura 4.9 Numero di condizionamento della matrice tridiagonale Bn corrispondente alla risoluzione di un problema ai limiti mediante il metodo delle differenze finite. Si pu`o dimostrare che µ2 (Bn ) cresce come 1/2n2 . analisi numerica

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

193

di suddivisioni n, o equivalentemente al tendere a zero del passo di discretizzazione h. D’altra parte, come vedremo successivamente, per h → 0 la soluzione discreta converge alla soluzione continua. In altre parole, e in forma schematica, pi` u il problema discreto `e vicino al problema continuo e pi` u crescono le difficolt` a numeriche per la sua soluzione.

4.2.1

Stabilit` a degli algoritmi

Come abbiamo gi`a osservato, l’errore contenuto nella soluzione numerica di un sistema lineare pu` o essere, per comodit` a, scomposto in due componenti: il cosiddetto errore inerente, ossia l’errore legato al condizionamento del problema e indipendente dall’algoritmo utilizzato, e l’errore algoritmico legato alla stabilit`a del particolare algoritmo utilizzato. In questo paragrafo ricorderemo i principali risultati che si riferiscono all’errore algoritmico, cercando, infine, di ottenere, attraverso i risultati ottenuti sul condizionamento nel paragrafo precedente, un’indicazione, ossia una stima, sull’errore totale presente nella soluzione numerica di un sistema lineare. Per analizzare l’errore algoritmico `e particolarmente utile la cosiddetta tecnica dell’analisi ˜ viene considerata come la all’indietro (backward analysis)10 , nella quale la soluzione calcolata x soluzione esatta di un opportuno problema perturbato del tipo (A + δA)˜ x = b + δb ove i termini δA e δb sono legati agli errori commessi durante i calcoli e rappresentano, quindi, il contributo del particolare algoritmo utilizzato. La “grandezza” di tali termini misura, in sostanza, la stabilit`a dell’algoritmo; vale a dire, in maniera per ora formale, un algoritmo risulta pi` u stabile di un altro se i corrrispondenti termini δA e δb sono pi` u “piccoli”. L’interesse della tecnica di backward analysis consiste nel fatto che, una volta nota una stima dei termini δA e δb, per avere ˜ − x `e sufficiente applicare la maggiorazione (4.48) ottenuta una maggiorazione dell’errore δx = x nel paragrafo precedente. Sottolineiamo, comunque, il significato ora diverso dei termini δA e δb; in effetti, mentre nel paragrafo precedenti essi rappresentano perturbazioni reali nei dati del problema, ora essi rappresentano delle perturbazioni virtuali, dovute agli errori commessi durante i calcoli11 . Naturalmente, la difficolt` a principale nell’applicazione dell’idea consiste nell’ottenere delle indicazioni significative, ossia “non troppo pessimistiche” dei termini δA e δb. Trattandosi di dimostrazioni molto tecniche, ci limiteremo all’enunciato e alla discussione di alcuni risultati, rinviando alla bibliografia per maggiori dettagli. Teorema 4.1 Sia A una matrice di ordine n i cui elementi sono numeri macchina, ossia fl(A) ≡ ˜ U ˜ le matrici della fattorizzazione LU ottenute numericamente con il metodo di A, e siano L, Gauss. Si ha allora12 ˜U ˜ =A+E L 10

Introdotta da Givens (1954) e da Wilkinson (1961). The main object of a priori error analysis is to expose the potential instabilities, if any, of an algorithm so that hopefully from the insight thus obtained one might be led to improved algorithms. . . Practical error bounds should usually be determined by some form of a posteriori error analysis since this take full advantage of the statistical distribution of rounding errors and of any special features, such as sparseness, in the matrix , Wilkinson. 11 Come illustrazione dell’idea, si ricordi la definizione dell’operazione macchina fl(x + y) = (x + y) + (x + y)= (x + x) + (y + y), con || ≤ eps: la somma macchina `e interpretabile come la somma esatta dei numeri perturbati x + x, y + y. 12 Con |A| si intende la matrice di elementi |aij | e la relazione A ≤ B significa aij ≤ bij , per i, j = 1, . . . , n. analisi numerica

c V. Comincioli

194

Algebra lineare numerica

con

$ % ˜ |U| ˜ + O(eps2 ) |E| ≤ 2n eps |A| + |L|

ove eps `e la precisione macchina utilizzata e O(eps2 ) indica una matrice i cui elementi sono funzioni di potenze di eps di grado maggiore o uguale al secondo. Teorema 4.2 Sia A una matrice triangolare inferiore di ordine n e b un vettore di ordine n, ˜ la soluzione numerica del sistema Ax = b ottenuta con fl(A) = A e fl(b) = b. Indicata con x mediante l’algoritmo della sostituzione in avanti, esiste una matrice E di ordine n tale che (A + E)˜ x = b,

con |E| ≤ n eps |A| + O(eps2 )

Un analogo risultato si ha quando la matrice A `e triangolare superiore. Combinando, allora, i risultati precedenti si ottiene la seguente valutazione degli errori relativi al metodo di Gauss nella risoluzione del sistema lineare generico Ax = b. Teorema 4.3 Siano A e b una matrice e un vettore di ordine n, con elementi numeri macchina, ˜ la soluzione del sistema Ax = b calcolata nel seguente modo e sia x ˜ U; ˜ 1. calcolo delle matrici L, ˜ = b; ˜ , soluzione numerica del sistema Ly 2. calcolo del vettore y ˜ =y ˜ , soluzione numerica del sistema Ux ˜; 3. calcolo del vettore x Si ha allora (A + δA)˜ x=b

˜ U| ˜ ) + O(eps2 ) con |δA| ≤ 4n eps(|A + |L|

(4.56)

Un aspetto interessante messo in evidenza dal risultato (4.56) `e il fatto che l’errore numerico pu` o ˜ |U|. ˜ L’applicazione essere tanto pi` u elevato quanto pi` u sono grandi gli elementi delle matrici |L|, delle tecniche del pivoting ha, in effetti, come effetto la riduzione della grandezza di tali elementi, e questo `e in sostanza il motivo della loro maggiore stabilit` a. In questo senso, il pivoting totale fornisce l’algoritmo pi` u stabile, ma, come abbiamo visto esso richiede un numero superiore di confronti, e, quindi, il pivoting parziale `e in generale un compromesso pi` u opportuno. Terminiamo, osservando che la stima (4.56) fornisce solo una limitazione superiore all’errore; in altre parole, dal momento che gli errori di segno contrario possono eliminarsi o ridursi in grandezza, l’errore effettivo pu`o essere anche notevolmente inferiore a quello indicato dalla formula. In effetti, il metodo di eliminazione pivotale di Gauss, quando la matrice `e ben condizionata, `e un procedimento stabile. Quando, invece, la matrice non `e ben condizionata, possono essere pi` u opportuni i metodi che utilizzano per la fattorizzazione della matrice le trasformazioni ortogonali, le quali, come abbiamo gi` a osservato, hanno la propriet` a di non peggiorare il condizionamento della matrice di partenza. Tali metodi saranno introdotti nel prossimo paragrafo.

4.2.2

Fattorizzazione A = QR

Data una matrice A ∈ Rm×n , si cerca una matrice ortogonale Q e una matrice triangolare R tale o essere ottenuta con differenti tecniche, in particolare che A = QR.13 Tale decomposizione pu` 13

La R `e da rechts triangular, triangolare superiore in tedesco.

analisi numerica

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

195

mediante l’utilizzo delle matrici elementari di Householder o di Givens, oppure mediante il metodo di ortogonalizzazione di Gram-Schmidt. Incominciamo con il seguente risultato di esistenza, di cui forniremo nel seguito una dimostrazione costruttiva. Teorema 4.4 (Decomposizione QR) Data una matrice A ∈ Rm×n , con m ≥ n e di rango n, esiste un’unica matrice Q ∈ Rm×n con QT Q = D,

D = diag(d1 , · · · , dn ),

dk > 0, k = 1, . . . , n

e una matrice triangolare superiore R, con rkk = 1, k = 1, . . . , n, tali che A = QR

(4.57)

La decomposizione (4.57) viene anche chiamata decomposizione QR non normalizzata. Come decomposizione normalizzata, si intende una decomposizione nella quale Q `e una matrice m × m ortogonale (quindi QT Q = I) e R `e una matrice m × n della forma   T R= 0 ove T `e una matrice n × n triangolare superiore e 0 `e una matrice (m − n) × n di zeri. Mentre la decomposizione (4.57) pu`o essere ottenuta, come vedremo nel seguito, mediante un procedimento di ortogonalizzazione delle colonne di A, la decomposizione normalizzata pu`o essere ottenuta mediante successive moltiplicazioni di matrici di Householder (o di Givens) e la matrice Q cos`ı ottenuta contiene sia una base ortogonale per lo spazio generato dalle colonne di A che una base per lo spazio perpendicolare alle colonne di A. La decomposizione (4.57) pu`o essere utilizzata per risolvere il problema dei minimi quadrati, e quindi in particolare per risolvere i sistemi lineari, nel seguente modo. Ricordiamo che la soluzione del seguente problema di minimo min b − Ax2 ,

x∈Rn

b ∈ Rm

(4.58)

quando la matrice A ha rango n, `e la soluzione del seguente sistema lineare (sistema delle equazioni normali) AT Ax = AT b Utilizzando, allora, la decomposizione (4.57), si ha AT (b − Ax) = RT QT (b − Ax) = RT (QT b − QT QRx) = 0 ⇒

Dy = QT b Rx = y

Sottolineiamo che l’interesse numerico della procedura precedente consiste nel fatto che procedendo in tale modo il sistema delle equazioni normali viene risolto, senza costruire esplicitamente la matrice AT A. Ricordiamo, infatti, che il numero di condizionamento della matrice AT A `e il quadrato di quello della matrice A. Lasciamo come esercizio l’estensione delle considerazioni precedenti al caso in cui sia disponibile una decomposizione QR in forma normalizzata e al caso in cui il rango della matrice A sia minore di n. analisi numerica

c V. Comincioli

196

Algebra lineare numerica

Metodo modificato di Gram-Schmidt Sia A una matrice ∈ Rm×n , con m ≥ n e di rango n. Le colonne di A sono, quindi, vettori linearmente indipendenti. A partire da tali vettori, si pu` o costruire un insieme di vettori ortogonali utilizzando il procedimento di Gram-Schmidt. Dal punto di vista numerico, pi` u precisamente per motivi di stabilit` a, `e, tuttavia, preferibile utilizzare la seguente variante del procedimento classico. Si calcola una successione di matrici A(1) := A, A(2) , · · · , A(n+1) =: Q. Al passo generico k-mo la matrice A(k) ha la seguente forma (k)

A(k) = [q1 , . . . , qk−1 , ak , . . . , an(k) ] (k)

(k)

ove i vettori ak , . . . , an sono per ipotesi ortogonali ai vettori q1 , . . . , qk−1 . Descriviamo, pertanto, il passaggio da A(k) a A(k+1) . (k) (k) (k) In tale passaggio si assume qk = ak e si trasformano i vettori ak+1 , . . . , an in maniera (k+1)

, j = k + 1, . . . , n ortogonali al vettore qk . Il risultato `e ottenuto da ottenere dei vettori aj mediante le seguenti formule (k)

qk = ak ,

dk = qTk qk ,

rkk = 1 (k)

(k+1)

aj

(k)

= aj − rkj qk ,

rkj =

qTk aj dk

, j = k + 1, . . . , n

Con riferimento alla risoluzione del problema dei minimi quadrati (4.58), si trasforma il vettore b allo stesso modo qT b(k) b(k+1) = b(k) − yk qk , yk = k dk Il vettore b(n+1) risulta essere ortogonale allo spazio R(A) e quindi coincide con il vettore residuo r = b − Ax. Pertanto, dopo n passi si ottengono i seguenti risultati Q = [q1 , q2 , . . . , qn ],

R = (rkj ),

y = [y1 , . . . , yn ]T

con QT Q = diag(dk ),

A = QR,

b = Qy + r

Il numero delle operazioni `e approssimativamente dato da 2m

n

(n − k + 1) = mn(n + 1)

k=1

Algoritmo 4.15 (Gram-Schmidt modificato) Data una matrice A ∈ Rm×n con rango n ed un vettore

b ∈ Rm , il seguente algoritmo calcola la fattorizzazione A = QR, con QT Q = D ed il vettore y = D−1 QT b. La soluzione del problema: minx∈Rn Ax − b2 `e ottenuta risolvendo il sistema triangolare Rx = y. La matrice A `e sostituita dalla matrice Q. For k = 1, . . . , n m dk := i=1 a2ik yk := ( m i=1 aik bi )/dk ; rkk := 1 For j = k + 1, . . . , n analisi numerica

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

197

m

rkj := ( i=1 aik aij )/dk For i = 1, . . . , m aij := aij − aik rkj end i end j For i = 1, . . . , m bi = bi − aik yk end i end k

Come esemplificazione, riportiamo l’implementazione dell’algoritmo precedente in MATLAB, che mette in evidenza la vettorialit` a dell’algoritmo. for k=1:n d(k)=norm(a(:,k),2)^2; y(k)=a(:,k)’*b/d(k); r(k,k)=1 for j=k+1:n r(k,j)=a(:,k)’*a(:,j)/d(k); a(:,j)=a(:,j)-a(:,k)*r(k,j); end b=b-a(:,k)*y(k); end x=r\y’ %soluzione del problema dei minimi quadrati

Esempio 4.18 Come semplice esempio illustrativo, consideriamo il seguente problema dei minimi qua⎡

drati min b − Ax2

x∈R2

1 con A = ⎣ 1 0

⎤ 1 0 ⎦, 1



⎤ 1 b=⎣ 0 ⎦ −5

L’algoritmo precedente fornisce i seguenti risultati ⎡ ⎤     1.000 0.500 1.000 0.500 0.500 Q = ⎣ 1.000 −0.500 ⎦ , R = , yT = 0. 1.000 −3.000 0. 1.000 ⎡ ⎤   2.000 2.000 x∗ = , r = b − Ax∗ = ⎣ −2.000 ⎦ −3.000 −2.000 ove x∗ `e il punto di minimo. Il sistema delle equazioni normali in questo caso `e dato da     2 1 1 T T T T A Ax = A b, A A= , A b= 1 2 −4 che ammette, come si verifica facilmente, la medesima soluzione trovata con il metodo precedente. Terminiamo, osservando che mentre il numero di condizionamento µ2 (A), definito come il rapporto tra il massimo valore singolare σmax di A e il minimo valore singolare σmin , `e dato da 1.7321, il numero di condizionamento della matrice AT A `e dato da 3.000, ossia il quadrato del precedente. In effetti, ricordiamo che µ2 (AAT ) = µ2 (A) · µ2 (AT ), e questo `e il motivo dell’interesse della fattorizzazione QR quando la matrice A `e malcondizionata. analisi numerica

c V. Comincioli

198

Algebra lineare numerica

Le propriet` a di stabilit`a che caratterizzano il metodo QR sono ulteriormente evidenziate dalla seguente semplice esemplificazione. Consideriamo la risoluzione del seguente sistema lineare     600 800 200 Ax = b con A = , b= 30001 40002 10001 che risulta estremamente malcondizionato, in quanto µ2 (A) ≈ 2.25 106. Applicando il metodo di eliminazione, con la tecnica del pivot parziale e il metodo QR, si ottengono i seguenti risultati (in aritmetica con precisione macchina eps ≈ 2.22 10−16)     −0.99999999999700 −1.00000000000080 xpivot = , xQR = 0.99999999999775 1.00000000000060

Metodo di Householder Nel metodo di Householder una matrice A di ordine m × n viene trasformata in una matrice triangolare superiore mediante l’applicazione successiva di trasformazioni elementari di Householder (cfr. per la definizione successivo Paragrafo 4.5.6). Cerchiamo di spiegare l’essenza del metodo mediante un esempio schematico. Per m = 6, n = 5, supponiamo di aver gi` a calcolato due matrici di trasformazione H1 , H2 tali che ⎤ ⎡ x x x x x ⎢ 0 x x x x ⎥ ⎥ ⎢ ⎢ 0 0 x x x ⎥ ⎥ ⎢ H2 H1 A = ⎢ ⎥ 0 0 x x x ⎥ ⎢ ⎣ 0 0 x x x ⎦ 0 0 x x x e cerchiamo una matrice di Householder H3 di ordine 4 × 4 tale che ⎡ ⎤ x x ⎢ 0 ⎥ x ⎥ H3 =⎢ ⎣ 0 ⎦ x 0 x Poniamo quindi H3 = diag(I2 , H3 ). Si ha allora ⎡ x ⎢ 0 ⎢ ⎢ 0 H3 H2 H1 A = ⎢ ⎢ 0 ⎢ ⎣ 0 0

x x 0 0 0 0

x x x 0 0 0

x x x x x x

x x x x x x

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

Alla fine Hn Hn−1 · · · H1 A = R `e una matrice triangolare superiore e ponendo Q = H1 · · · Hn si ottiene A = QR. L’algoritmo richiede n2 (m − n/3) flops. Per la risoluzione del problema dei minimi quadrati non occorre formare esplicitamente la matrice Q, ma basta modificare successivamente il vettore b mediante le moltiplicazioni Hk b. analisi numerica

c V. Comincioli

4.2 Analisi degli errori; condizionamento e stabilit` a

199

Esempio 4.19 Consideriamo la seguente matrice ⎡

3 A=⎣ 4 0

⎤ 0 5 ⎦ 4

Il primo passo della fattorizzazione QR costruisce la matrice di Householder H1 che annulla il secondo e il terzo elemento della prima colonna ⎡ ⎤ ⎡ ⎤ −3 −4 0 −5 −4 1 3 0 ⎦ ⇒ A1 = H1 A = ⎣ 0 3 ⎦ H1 = ⎣ −4 5 0 0 5 0 4 Nel secondo passo, si costruisce la matrice di Householder H2 che annulla il terzo elemento nella seconda colonna della matrice A1 , ma lascia invariato il primo elemento ⎡ ⎡ ⎤ ⎤ 5 0 0 −5 −4 1⎣ 0 −3 −4 ⎦ ⇒ R = A2 = H1 A = ⎣ 0 −5 ⎦ H2 = 5 0 −4 3 0 0 Si ha, quindi, R = A2 e A = QR, ove Q = H1 H2 ⎤⎞ ⎡ ⎛ ⎡ ⎤ −15 12 16 −5 −4 1 A = ⎝ ⎣ −20 −9 −12 ⎦⎠ ⎣ 0 −5 ⎦ 25 0 −20 15 0 0

Metodo di Givens Nel metodo di Givens si utilizzano per la riduzione della matrice A alla forma triangolare le matrici di rotazione di Givens. La trasformazioni di Givens permettono rispetto alle trasformazioni di Householder una maggiore selettivit` a . Il loro uso `e quindi interessante per trasformare matrici con particolari strutture sparse. Algoritmo 4.16 (Metodo di Givens) Data una matrice A ∈ Rm×n , il seguente algoritmo calcola la fattorizzazione A = QR con Q ortonormale e R triangolare. La matrice A `e sostituita dalla matrice QT A = R. For q = 2, . . . , m For p = 1, 2, . . . , min(q − 1, n) trovare c = cosθ, s = sin θ tali che −sapp + caqp = 0 A := J(p, q, θ)A b := J(p, q, θ)b end p end q

L’algoritmo richiede 2n2 (m − n/3) flops, circa il doppio di quelle richieste dal metodo di Householder. Esiste, comunque, una versione del metodo, chiamata metodo rapido di Givens, che richiede un numero di operazioni paragonabile a quello delle trasformate di Householder. Per i dettagli di questa variante rinviamo ad esempio a Golub e Van Loan [172].  Esercizio 4.15 Sia Q una matrice ortogonale. Dimostrare che µ2 (QA) = µ2 (A). analisi numerica

c V. Comincioli

200

Algebra lineare numerica

 Esercizio 4.16 Analizzare il condizionamento delle seguenti matrici ⎡

1 A1 = ⎣ 3 1

2 4 1

⎤ −1 0 ⎦, 0



1 A2 = ⎣ 4 7

⎤ 2 3 5 6 ⎦, 8 8



1 0 A3 = ⎣ 0 1 1 1

⎤ 0 0 ⎦ 1

 Esercizio 4.17 La successione di Fibonacci `e generata dalla seguente equazione alle differenze f0 = 0, f1 = 1,

fj = fj−1 + fj−2 ,

j>1

2 Mostrare che fn fn+2 − fn+1 = (−1)n+1 , n = 0, 1, . . .. Trovare allora l’unica soluzione del sistema



fn x1 + fn+1 x2 = fn+2 fn+1 x1 + fn+2 x2 = fn+3

Studiare il malcondizionamento di tale sistema al crescere di n. In particolare, per n = 10 esaminare la variazione della soluzione in corrispondenza alla perturbazione nella seconda equazione f˜n+2 = fn+2 + , con  = 0.018 e rispettivamente  = 0.02.

 Esercizio 4.18 Se A, B sono due matrici simmetriche definite positive, allora µ2 (A + B) ≤ max[µ2 (A), µ2 (B)]

 Esercizio 4.19 Considerare il sistema lineare Ax = b, con  A=

4.1 2.8 9.7 6.6



 ;

b=

4.1 9.7



Calcolare la soluzione esatta e la soluzione perturbata corrispondente a b = [4.11, 9.70]T . Analizzare quindi il condizionamento della matrice.

 Esercizio 4.20 La matrice C = (AT A)−1 , ove rank(A) = n, `e nota in statistica come matrice varianza-covarianza. Sia A = QR la decomposizione ortogonale di A. 1. Mostrare che C = (RT R)−1 . 2. Dare un algoritmo per calcolare c11 , · · · , cnn che richieda n3 /6 flops.   α vT 3. Mostrare che se R = e C1 = (ST S)−1 , allora 0 S   (1 + vT C1 v)/α2 −vT C1 /α T −1 C = (R R) = −C1 v/α C1 4. Usando il risultato precedente dare un algoritmo che sostituisce R con la parte triangolare superiore di C, con n3 /3 flops.

analisi numerica

c V. Comincioli

4.3 Metodi iterativi

4.3

201

Metodi iterativi

Per le matrici di ordine elevato e di tipo sparso, una importante alternativa ai metodi diretti `e costituita dai metodi iterativi, la cui idea di base `e la costruzione, a partire da una stima iniziale x(0) , di una successione convergente di approssimanti {x(k) }, k = 1, 2, . . ., ove ciascun vettore x(k) `e la soluzione di problemi computazionalmente pi` u semplici. Come vedremo successivamente, tale idea costituisce lo strumento fondamentale per la risoluzione dei sistemi non lineari e dei problemi di ottimizzazione. I risultati che analizzeremo in questo paragrafo potrebbero, pertanto, essere inquadrati in tale contesto pi` u generale, ma l’adattamento della teoria al caso particolare dei sistemi lineari permette di ottenere risultati pi` u significativi.

4.3.1

Metodi di Jacobi, Gauss-Seidel, rilassamento

I metodi iterativi corrispondono al seguente schema generale. Data una matrice A ∈ Rn×n , non singolare, si considera una decomposizione (splitting) della matrice A del seguente tipo A = M − N,

det(M) = 0

(4.59)

Per ogni vettore b ∈ Rn si ha allora Ax = b ⇐⇒ Mx = Nx + b da cui il seguente procedimento iterativo Mx(k+1) = Nx(k) + b

(4.60)

che prevede la risoluzione, ad ogni passo dell’iterazione, di un sistema lineare con matrice dei coefficienti M. La seguente matrice B = M−1 N = M−1 (M − A) = I − M−1 A `e detta matrice di iterazione; essa individua un particolare metodo ed il suo studio `e fondamentale per stabilire la convergenza e la rapidit` a di convergenza del corrispondente metodo. Per introdurre i metodi classici di Jacobi e di Gauss-Seidel `e utile considerare la seguente decomposizione della matrice A

A=D−E−F

analisi numerica



c V. Comincioli

202

Algebra lineare numerica

Metodo di Jacobi Il metodo di Jacobi14 si ottiene scegliendo M = D;

N=E+F ⇒

BJ = D−1 (E + F) = I − D−1 A

Algoritmo 4.17 (Metodo di Jacobi) Data una matrice A ∈ Rn×n , con aii = 0, i = 1, 2, . . . , n e un vettore b ∈ Rn , a partire da un vettore di tentativo x(0) ∈ Rn si costruisce la successione {x(k) } mediante le seguenti formule For i = 1, . . . , n $ (k+1) = bi − xi end i

i−1 j=1

(k)

aij xj



n j=i+1

(k) %/

aij xj

aii

L’implementazione del metodo richiede l’utilizzo di due vettori, diciamo xold , xnew ; alla fine di ogni ciclo si pone xnew → xold . Le singole componenti del vettore xnew sono costruite a partire o essere quindi implementato dal vettore xold in maniera indipendente fra loro; l’algoritmo pu` facilmente su calcolatori ad architettura parallela. In linguaggio MATLAB il metodo pu`o essere implementato nel seguente modo M=diag(diag(A));

N=M-A;

x=M\(N*x+b);

Osserviamo che, nella forma precedente, l’algoritmo di Jacobi `e definito solo se aii = 0, i = 1, . . . , n. Tuttavia, se tale ipotesi non `e verificata, ma la matrice A `e non singolare, `e possibile riordinare preliminarmente le equazioni e le incognite del sistema Ax = b, in maniera che il ` da tenere presente, comunque, che la matrice di iterazione, e quindi le metodo risulti definito. E propriet` a di convergenza, dipendono dall’ordinamento di righe e di incognite utilizzato. Esempio 4.20 Consideriamo l’applicazione del metodo di Jacobi al seguente sistema ⎧ ⎨20x1 + 2x2 − x3 = 25 2x1 +13x2 −2x3 = 30 ⎩ x1 + x2 + x3 = 2

(4.61)

che ha come soluzione esatta il vettore x = [1, 2, −1]T . Il metodo di Jacobi corrisponde alla seguente decomposizione della matrice dei coefficienti ⎡ ⎡ ⎤ ⎡ ⎤ ⎤ 20 2 −1 20 0 0 0 −2 1 0 2 ⎦ A = ⎣ 2 13 −2 ⎦ ⇒ M = ⎣ 0 13 0 ⎦ , N = ⎣ −2 1 1 1 0 0 1 −1 −1 0 Partendo dal vettore iniziale x0 = [0, 0, 0]T , si ottengono i risultati contenuti nella Tabella 4.3, che mostrano la convergenza del metodo. Lasciamo come esercizio di verificare che il metodo risulta, invece, divergente 14 Il metodo, introdotto da Jacobi (1845), fu successivamente chiamato metodo delle sostituzioni simultanee (Gei` anche noto come metodo a passo totale (total-step), renger, 1949) e metodo iterativo di Richardson, (Keller, 1958). E dal tedesco Gesamtschrittverfahren. Carl Gustav Jacob Jacobi `e nato a Potsdam nel 1804, Prussia e morto nel 1851 a Berlino. Le sue ricerche pi` u importanti riguardano l’analisi matematica (teoria delle funzioni ellittiche, equazioni differenziali a derivate parziali del primo ordine), la teoria dei numeri, la geometria e la meccanica. Nella memoria De determinantibus functionalibus (1841) studia in particolare il determinante funzionale che ora porta il suo nome Jacobiano. A Jacobi `e pure attribuito il metodo che esameniremo nel seguito per il calcolo approssimato degli autovalori di una matrice simmetrica.

analisi numerica

c V. Comincioli

4.3 Metodi iterativi

203

` quando `e applicato al sistema lineare che si ottiene dal sistema (4.61) scambiando le prime due righe. E 15 importante osservare che nel primo caso il raggio spettrale della matrice di Jacobi `e dato da 0.4490, mentre per il sistema con le due righe permutate il raggio spettrale vale 8.0710. In effetti, come vedremo nel seguito, condizione necessaria e sufficiente per la convergenza di un metodo iterativo `e che il raggio spettrale della matrice di iterazione M−1 N sia strettamente minore di 1.

k 1 2 3 4 5 6 7 8 9 10 11 12 ... 20 21

Jacobi

Gauss-Seidel

5.5577e + 00 3.8038e + 00 7.3203e − 01 8.0164e − 01 2.1970e − 01 1.6726e − 01 5.5982e − 02 3.2669e − 02 1.2908e − 02 5.9462e − 03 2.7599e − 03 9.9184e − 04

4.7308e + 00 8.9364e − 01 2.0355e − 01 5.0545e − 02 1.2269e − 02 2.9954e − 03 7.3022e − 04 1.7808e − 04 4.3426e − 05 1.0590e − 05 2.5824e − 06 6.2974e − 07

1.7859e − 06 9.5681e − 07

Tabella 4.3 Successione degli errori x(k) − x1 forniti dal metodo di Jacobi, e rispettivamente di Gauss-Seidel, applicati al sistema lineare (4.61).

Metodo di Gauss-Seidel Nel metodo di Gauss-Seidel16 si assume M = D − E;

N=F ⇒

BG = (D − E)−1 F = (I − D−1 E)−1 D−1 F

Algoritmo 4.18 (Metodo di Gauss-Seidel) Data una matrice A ∈ Rn×n , con aii = 0, i = 1, 2, . . . , n e un vettore b ∈ Rn , a partire da un vettore di tentativo x(0) ∈ Rn , si costruisce la successione {x(k) } mediante le seguenti formule For i = 1, . . . , n $ (k+1) xi = bi − end i

i−1 j=1

(k+1)

aij xj



n j=i+1

(k) %/

aij xj

aii

15

In MATLAB il raggio spettrale di una matrice A pu` o essere calcolato mediante il comando abs(eig(A)). Suggerito da Gauss in Theoria Motus corporum coelestium in sectionibus conicis solem ambientium (1809), nell’ambito della risoluzione del sistema delle equazioni normali ottenute applicando il metodo dei minimi quadrati. ¨ Sviluppato da P. L. Seidel in Uber ein Verfahren, die Gleichungen, auf welche die Methode der kleinsten Quadrature f¨ uhrt, sowie line¨ are Gleichungen u ¨berhaupt, durch successive Annaherung aufzul¨ osen (1874). Il metodo `e anche noto come metodo delle sostituzioni successive (Geiringer, 1949) e metodo di Liebmann (Frankel, 1950). Philipp Ludwig von Seidel, nato a Zweibrucken, Germania nel 1821 e morto a Monaco nel 1896, ha lavorato oltre che nel campo dell’analisi matematica (concetto di convergenza non uniforme) e del calcolo delle probabilit`a (con applicazioni all’astronomia), su problemi di ottica (introduzione di parametri matematici che descrivono l’aberrazione di una lente: ora noti come Seidel sums: spherical aberration, coma, astigmatism, Petzval curvature, distortion). 16

analisi numerica

c V. Comincioli

204

Algebra lineare numerica

Osserviamo che, a differenza del metodo di Jacobi, per l’implementazione del metodo di GaussSeidel `e sufficiente un unico vettore, in quanto le componenti del vettore iterato sono utilizzate non appena esse sono state calcolate. Il metodo pu`o essere implementato in linguaggio MATLAB nel seguente modo M=tril(A);

N=M-A;

x=M\(N*x+b);

Come si vede dalla Tabella 4.3, il metodo di Gauss-Seidel pu`o avere una convergenza superiore rispetto al metodo di Jacobi. Questa propriet` a non `e, tuttavia, generale, ma dipende dalla classe di matrici a cui si applicano i metodi. In effetti, come vedremo nel seguito, esistono matrici per le quali il metodo di Gauss-Seidel converge ma il metodo di Jacobi diverge, e viceversa matrici per le quali converge il metodo di Jacobi, ma non il metodo di Gauss-Seidel. Quando la matrice A `e simmetrica definita positiva, il metodo di Gauss-Seidel pu`o essere interpretato come un algoritmo per la ricerca del minimo della seguente funzione quadratica F (x) = (Ax, x) − 2(b, x) =

n

aij xi xj − 2

i,j=1

Rinviando per maggiori dettagli ai capitoli una rappresentazione grafica del metodo in scelte della matrice A e del vettore b  2 A= 1

n

xi bi

i=1

successivi, ci limiteremo ora a fornire in Figura 4.10 corrispondenza al caso bidimensionale e alle seguenti 1 2



 ,

b=

3 3



a cui corrisponde la soluzione x = [1, 1]T del sistema Ax = b. Il metodo effettua, in sostanza, successive minimizzazioni unidimensionali lungo le direzioni degli assi. Nella figura sono rappresentate le curve di livello passanti per i successivi punti di minimo, ossia le curve definite da F (x) = F (x), ove x `e il generico punto di minimo. Nel seguito consideremo altri modi pi` u convenienti di definire le direzioni di minimizzazione, in particolare le direzioni coniugate. Metodo di rilassamento Un modo semplice per accelerare la convergenza dei metodi di Jacobi e di Gauss-Seidel consiste nell’introduzione nella matrice di iterazione di un opportuno parametro, noto come parametro di rilassamento. Indicando con ω, con ω > 0, tale parametro e limitandoci al metodo di Gauss-Seidel, si assume

  D 1 − E; N = − 1 D + F ⇒ Bω = (D − ωE)−1 (1 − ω)D + ωF M= ω ω Il corrispondente metodo iterativo `e noto come metodo di rilassamento, o metodo SOR (successive over relaxation); quando ω < 1 il metodo `e anche detto metodo underrelaxation 17 . Algoritmo 4.19 (Metodo SOR) Data una matrice A ∈ Rn×n , con aii = 0, i = 1, 2, . . . , n ed un vettore b ∈ Rn , a partire da un vettore di tentativo x(0) ∈ Rn si costruisce, per ω ∈ R, la successione {x(k) } mediante le seguenti formule 17

Il metodo `e anche noto come metodo accelerato di Liebmann (Frankel, 1950) e metodo di Gauss-Seidel estrapolato (Kahan, 1958). analisi numerica

c V. Comincioli

4.3 Metodi iterativi

205

Figura 4.10 Interpretazione del metodo di Gauss-Seidel come metodo di minimizzazione di una funzione quadratica. I punti indicati sono i successivi punti di minimo lungo gli assi coordinati, ossia i punti i punti (0) (0) (1) (0) (1) (1) (2) (1) (x1 , x2 ), (x1 , x2 ), (x1 , x2 ), (x1 , x2 ), . . . For i = 1, . . . , n $ (k+1/2) = bi − xi (k+1) xi

=

(k+1/2) ωxi

i−1 j=1

(k+1)

aij xj

+ (1 −



n j=i+1

(k) %/

aij xj

aii

(k) ω)xi

end i

La scelta ω = 1 fornisce ancora il metodo di Gauss-Seidel, e in ogni caso il numero di operazioni richieste per effettuare una iterazione `e dello stesso ordine di grandezza di quelle richieste dal metodo di Gauss-Seidel. In linguaggio MATLAB si ha la seguente implementazione M=diag(diag(A))/omega+tril(A,-1);

N=M-A;

x=M\(N*x+b);

Nell’applicazione del metodo SOR `e naturalmente importante la scelta del parametro ω. Tale scelta deve essere tale da rendere pi` u elevata possibile la velocit`a di convergenza del metodo. Come vedremo nel seguito, tale obiettivo `e raggiunto dal valore di ω che minimizza il raggio spettrale della matrice di rilassamento Bω . Il guadagno che si pu`o ottenere `e, tuttavia, dipendente dal numero di condizionamento della matrice di partenza A. Questo aspetto `e messo in rilievo dal seguente esempio. Esempio 4.21 Consideriamo la seguente matrice ⎡

⎤ −4 1 1 1 ⎢ 1 −4 1 1 ⎥ ⎥ A=⎢ ⎣ 1 1 −4 1 ⎦ 1 1 1 −4 analisi numerica

(4.62)

c V. Comincioli

206

Algebra lineare numerica

Nella Figura 4.11 `e rappresentata la funzione ω → ρ(Bω )

(4.63)

ove ρ(·) `e il raggio spettrale, ossia il massimo dei moduli degli autovalori. Il minimo della funzione (4.63) `e ottenuto per ω = 1.22, in corrispondenza al quale assume il valore 0.2974. Il numero di condizionamento della matrice A `e dato da µ2 (A) = 5. Consideriamo, quindi, la matrice ⎡ ⎤ 2 6 9 A = ⎣ 6 21 31 ⎦ (4.64) 9 31 46 per la quale si ha µ2 (A) = 1251.0. Il minimo della funzione (4.63) `e ottenuto per ω = 1.7, nel quale la funzione assume il valore 0.9571. Come si vede, in questo caso il quadagno `e decisamente minore del caso precedente. Con riferimento, in particolare, alla risoluzione dei sistemi lineari ottenuti nella discretizzazione dei problemi differenziali ai limiti (cfr. Esempio 4.17), si ha che l’efficienza del metodo SOR, come tecnica di accelerazione del metodo di Gauss-Seidel, diminuisce all’aumentare del numero di suddivisioni, ossia al diminuire del passo di discretizzazione, e quindi dell’errore di discretizzazione.

Figura 4.11 Rappresentazione della funzione ω → ρ(Bω ), in corrispondenza (prima figura) alla matrice bencondizionata (4.62) e rispettivamente (seconda figura) alla matrice mal condizionata (4.64).

Metodo di rilassamento. Calcolo della funzione ω → ρ(Bω ) ⎡ ⎤ 2 6 9 A = ⎣ 6 21 31 ⎦ 9 31 46

A=[2 6 9 6 21 31 9 31 46] E=-tril(A,-1) F=-triu(A,1) D=diag(diag(A)) i=1; omega=[0:0.01:2]; for om=omega analisi numerica

c V. Comincioli

4.3 Metodi iterativi

207

Bo=inv(D-om*E)*((1-om)*D+om*F); roo(i)=max(abs(eig(Bo))); i=i+1; end plot(omega,roo)

4.3.2

Metodi iterativi a blocchi

In diverse applicazioni, in particolare nella discretizzazione dei problemi alle derivate parziali e nello studio di sistemi di reti, il sistema Ax = b presenta una struttura a blocchi della seguente forma ⎡ ⎤ ⎡ ⎤ ⎡ ⎤ x1 b1 A11 A12 · · · A1p ⎢ A21 A22 · · · A2p ⎥ ⎢ x2 ⎥ ⎢ b2 ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ (4.65) ⎢ .. .. .. ⎥ ⎢ .. ⎥ = ⎢ .. ⎥ ⎣ . . . ⎦ ⎣ . ⎦ ⎣ . ⎦ Ap1 Ap2 · · ·

App

xp

bp

ove A11 , A22 , · · · , App sono matrici quadrate e xi , bi sono vettori dello stesso ordine della matrice Aii , per ogni i = 1, . . . p. A partire dalla seguente decomposizione A =D−E−F ove D = [Aii ], i = 1, . . . , p; −E = [Aij ], i > j; −F = [Aij ], i < j, i metodi considerati nel paragrafo precedente possono essere formulati a blocchi. Tali formulazioni hanno interesse, in particolare, nelle implementazioni su calcolatori ad architettura parallela. Come esemplificazione, le seguenti formule definiscono un particolare metodo SOR a blocchi ⎛ ⎞ p i−1 (k+1) (k+1) (k) (k) = ω ⎝bi − Aij xj − Aij xj ⎠ + (1 − ω)Aii xi (4.66) Aii xi j=1

j=i+1

per il quale `e richiesta, per ogni i, la risoluzione di un sistema lineare, con matrice dei coefficienti o data da Aii . Dal momento che tale matrice `e indipendente dall’indice di iterazione k, si pu` effettuare una fattorizzazione preliminare Aii = Li Ui , e quindi procedere, ad ogni iterazione, alla risoluzione di due sistemi triangolari. Il successivo esempio analizza su due problemi particolari il problema della convergenza dei metodi a blocchi rispetto ai metodi per punti. Esempio 4.22 Consideriamo la seguente matrice reale simmetrica ⎡

5 A=⎣ 2 2

⎤ 2 2 5 3 ⎦ 3 5

e una sua partizione a blocchi in maniera che A = D − E − F, con ⎡ ⎤ ⎡ 5 2 0 0 0 0 D = ⎣ 2 5 0 ⎦, E=⎣ 0 0 0 5 -2 -3

⎤ 0 0 ⎦ 0

e F = ET . Nella Tabella 4.4 sono riportati gli errori ottenuti con il metodo di Gauss–Seidel a blocchi (ossia con il metodo (4.66) con ω = 1) in relazione al sistema lineare Ax = b, con b = [9, 10, 10]T e con valore analisi numerica

c V. Comincioli

208

Algebra lineare numerica

iniziale x(0) = [0, 0, 0]T . Il confronto con i risultati ottenuti con il metodo di Gauss-Seidel per punti mette in evidenza che asintoticamente il metodo per punti converge pi` u rapidamente del metodo per blocchi. In effetti, si trova punti ) = 0.3098, ρ(Bblocchi ) = 0.3904 ρ(BG G

k 0 1 2 3 4 5 6 7 8 9 10 11

G.-S. per punti

G.-S. per blocchi

3.0000e + 00 1.5680e + 00 5.3171e − 01 2.1641e − 01 9.1316e − 02 3.2553e − 02 1.0244e − 02 2.8577e − 03 7.1179e − 04 1.7121e − 04 3.9791e − 05 1.3868e − 05

3.0000e + 00 1.1048e + 00 4.3138e − 01 1.6844e − 01 6.5774e − 02 2.5683e − 02 1.0029e − 02 3.9159e − 03 1.5291e − 03 5.9707e − 04 2.3314e − 04 9.1036e − 05

Tabella 4.4 Errori x(k) − x1 corrispondenti al metodo di Gauss-Seidel per punti e per blocchi, ove x `e la soluzione esatta del sistema lineare Ax = b, con b = [9, 10, 10]T . Consideriamo, ora, la seguente matrice reale simmetrica ⎡ ⎤ 1 0 −1/4 −1/4 ⎢ 0 1 −1/4 −1/4 ⎥ ⎥ A1 = ⎢ ⎣ −1/4 −1/4 1 0 ⎦ −1/4 −1/4 0 1 e la partizione a blocchi definita da A1 = D − E − F, con ⎡ ⎤ ⎡ 1 0 -1/4 0 0 ⎢ 0 ⎥ ⎢ 0 1 -1/4 0 ⎥, E = ⎢ D=⎢ ⎣ -1/4 -1/4 ⎣ 0 0 ⎦ 1 0 0 0 1 1/4

0 0 0 1/4

0 0 0 0

⎤ 0 0 ⎥ ⎥ 0 ⎦

e F = ET . Nella Tabella 4.5 sono riportati gli errori ottenuti con il metodo di Gauss–Seidel a blocchi (ossia con il metodo (4.66) con ω = 1) in relazione al sistema lineare A1 x = b1 , con b = [0.5, 0.5, 0.5, 0.5]T e valore iniziale x(0) = [0, 0, 0, 0]T . Il confronto con i risultati ottenuti con il metodo di Gauss-Seidel per punti mette in evidenza che asintoticamente il metodo per blocchi converge pi` u rapidamente del metodo per punti. In effetti, si trova punti

ρ(BG

4.3.3

) = 0.2500,

ρ(Bblocchi ) = 0.1428 G

Studio della convergenza

Un metodo iterativo della forma (4.60) `e detto convergente se, qualunque sia il vettore iniziale x(0) , la successione {x(k) } `e convergente. Vedremo, ora, che tale propriet` a `e legata agli autovalori analisi numerica

c V. Comincioli

4.3 Metodi iterativi

209

k 0 1 2 3 4 5 6 7 8 9 10 11

G.-S. per punti

G.-S. per blocchi

4.0000e + 00 1.5000e + 00 3.7500e − 01 9.3750e − 02 2.3438e − 02 5.8594e − 03 1.4648e − 03 3.6621e − 04 9.1553e − 05 2.2888e − 05 5.7220e − 06 1.4305e − 06

4.0000e + 00 8.5714e − 01 1.2245e − 01 1.7493e − 02 2.4990e − 03 3.5699e − 04 5.0999e − 05 7.2856e − 06 1.0408e − 06 1.4869e − 07 2.1241e − 08 3.0344e − 09

Tabella 4.5 Errori x(k) − x1 corrispondenti al metodo di Gauss-Seidel per punti e per blocchi, ove x `e la soluzione esatta del sistema lineare A1 x = b1 , con b1 = [0.5, 0.5, 0.5, 0.5]T . della matrice di iterazione B. Considerando, infatti, la decomposizione generale (4.59) e indicando con x la soluzione del sistema Ax = b, si hanno le seguenti relazioni x = Bx + M−1 b x(k+1) = Bx(k) + M−1 b



e(k+1) = Be(k)

(4.67)

ove si `e posto e(k) := x−x(k) . Applicando successivamente la relazione (4.67), si ottiene il seguente risultato e(k) = Bk e(0) Pertanto, il metodo `e convergente quando la successione di potenze Bk converge alla matrice nulla e una condizione necessaria e sufficiente pu`o essere formulata mediante il raggio spettrale della matrice B. Teorema 4.5 (Convergenza) Il metodo iterativo definito dalla matrice di iterazione B converge per ogni x(0) ∈ Rn se e solo se ρ(B) < 1 (4.68) Esempio 4.23 Consideriamo i metodi di Jacobi e di Gauss-Seidel per la matrice ⎡

⎡ ⎤ 1 −2 2 0 2 1 −1 ⎦ , BJ = ⎣ 1 0 A = ⎣ −1 −2 −2 1 2 2

⎡ ⎤ −2 0 2 1 ⎦ , BG = ⎣ 0 2 0 0 8

⎤ −2 −1 ⎦ −6

Il polinomio caratteristico della matrice BJ `e dato da −λ3 e della matrice BG da −λ(λ2 + 4λ− 4), per cui √ ρ(BJ ) = 0; ρ(BG ) = 2(1 + 2) In questo caso, quindi, il metodo di Jacobi converge, mentre il metodo di Gauss-Seidel diverge. Lasciamo come esercizio di verificare, procedendo allo stesso modo, che per la seguente matrice ⎡ ⎤ 2 −1 1 A=⎣ 2 2 2 ⎦ −1 −1 2 analisi numerica

c V. Comincioli

210

Algebra lineare numerica

il metodo di Jacobi diverge, mentre il metodo di Gauss-Seidel converge.

La condizione (4.68), necessaria e sufficiente per la convergenza di un metodo iterativo, non `e in generale di facile verifica. Essa, tuttavia, permette di ottenere delle condizioni sufficienti di pi` u facile verifica, ossia di individuare delle classi di matrici per le quali un particolare metodo `e convergente. Questo aspetto verr` a considerato nel paragrafo successivo. In questo paragrafo, dopo aver ricordato una condizione necessaria per la scelta del parametro ω nel metodo di rilassamento, discuteremo brevemente l’aspetto, importante nelle applicazioni, del controllo della convergenza. Dal Teorema 4.5 si pu` o ricavare facilmente la seguente condizione necessaria per il metodo di rilassamento. Proposizione 4.5 Per ogni matrice A di ordine n il raggio spettrale della matrice del metodo di rilassamento Bω `e maggiore o uguale a |ω − 1|, e pertanto se il metodo `e convergente, si ha necessariamente 0 0 numero piccolo. La matrice Y1 pu` o ad esempio essere la rappresentazione floating point della matrice inversa A−1 . Si ha quindi Y1 − A−1  ≤ c1 = A−1  Ma da cui

Y1 = A−1 (I + AE) ⇒ Y1−1 = (I + AE)−1 A     Y1−1 − A = (I + AE)−1 − I A = (I + AE)−1 I − (I + AE) A

e quindi c2 =

Y1−1 − A ≤ (I + AE)−1  AE A

Una maggiorazione del termine AE pu` o essere ottenuta ponendo AE ≤ A E ≤ A A−1 =  cond(A) e, supponendo  cond(A) < 1, allora (I + AE)−1  ≤

1 1 ≤ 1 − AE 1 −  cond(A)

In conclusione, mentre il primo criterio c1 suggerisce un errore relativo di , con il secondo criterio si ha c2 =

 cond(A) Y1−1 − A ≤ A 1 −  cond(A)

e quindi si ha un fattore che dipende dal condizionamento della matrice A. In modo analogo si verifica che c3 = AY1 − I ≤ A E ≤  cond(A) c4 = Y1 A − I ≤ E A ≤  cond(A) Consideriamo il seguente secondo esempio. Sia Y2 una matrice tale che AY2 − I = F, analisi numerica

F ≤  c V. Comincioli

4.4 Complementi e Problemi

223

Per  piccolo Y2 `e una buona approssimazione a destra dell’inversa di A, poich´e si ha c3 = AY2 − I ≤  Moltiplicando per A−1 si ha

Y2 − A−1 = A−1 F

e quindi

Y2 − A−1  = A−1 F ≤ A−1  F

da cui c1 = In maniera analoga si ha c2 =

Y2 − A−1  ≤ F ≤  A−1 

A − Y2−1   ≤ F (I + F)−1  ≤ A 1−

Per il quarto criterio si ha invece c4 = Y2 A − I = A−1 FA ≤ A−1  F A ≤  cond(A) In questo caso si pu`o concludere che una matrice pu`o essere una buona approssimazione a destra dell’inversa di A, ma non necessariamente una buona approssimazione a sinistra. Si assuma come esemplificazione particolare la seguente matrice     3.03 8.99 3.03 −8.99 A= , A−1 = 0.91 3.03 −0.91 3.03 Si ha

det(A) = 1, A2 = 10, A−1 2 = 10, cond2 (A) = 100

Se poniamo

 B=

3.02 −8.96 −0.94 3.12

 ,

B−1 =



3.12 8.96 0.94 3.02



si ha B − A−1 =



−0.01 0.03 −0.03 0.09



, B − A−1 2 = 0.1, c1 = 0.01

  0.09 −0.03 B−1 − A = , B−1 − A2 = 0.1, c2 = 0.01 0.03 −0.01     0.997 0.001 −0.003 0.001 BA = , BA − I = , c3 = 0.01 −0.009 1.003 −0.009 0.003     0.7 0.9 −0.3 0.9 AB = , AB − I = , c4 = 1 −0.1 1.3 −0.1 0.3 La conseguenza `e che la scelta del criterio buono per valutare la precisione dell’inversa approssimata di una matrice data dipende dal particolare problema considerato. Si pu` o tuttavia dimostrare il seguente risultato generale. Proposizione 4.6 Siano A e A + ∆A due matrici invertibili. Si ha allora ∆A (A + ∆A)−1 − A−1  ≤ cond(A) (A + ∆A)−1  A analisi numerica

c V. Comincioli

224

Algebra lineare numerica

Per la dimostrazione basta considerare l’identit`a (A + ∆A)−1 (A + ∆A) = I da cui, moltiplicando a destra per A−1 , si ottiene (A + ∆A)−1 − A−1 = −(A + ∆A)−1 ∆A A−1 cio`e

(A + ∆A)−1 − A−1  ≤ (A + ∆A)−1  ∆A A−1

che fornisce il risultato richiesto.

Problema 4.2 Discutere il condizionamento ⎡ 11 + α Z = ⎣ 12 + α 14 + α

della matrice

⎤ 10 + α 14 + α 11 + α −13 + α ⎦ 13 + α −66 + α

per quanto riguarda l’inversione o la risoluzione di un sistema lineare. Soluzione. La matrice Z, introdotta da Zielke, `e ottenuta applicando una perturbazione di rango uno: Z = A+αJ, ove J = eeT , con e = [1, 1, 1]T . Abbiamo quindi, utilizzando la formula di Sherman–Morrison Z−1 = A−1 − ⎡

Si ha A−1 da cui

αA−1 eeT A−1 1 + αeT A−1 e

⎤ −557 842 −284 = ⎣ 610 922 311 ⎦ 2 −3 1

eT A−1 = [55, −83, 28],

A−1 e = [1, −1, 0]T ,

eT A−1 e = 0



Pertanto Z−1

⎤ −55α − 557 83α + 842 −28α − 284 = ⎣ 55α + 610 −83α + 922 28α + 311 ⎦ 2 −3 2

Se α `e positivo ed ha un valore elevato, si ha Z∞ = 35 + 3α,

Z−1 ∞ = 1843 + 166α

Il numero di condizionamento della matrice Z `e pertanto µ∞ (Z) = (3α + 35)(166α + 1843) ≈ 498α2 In effetti, se assumiamo

⎡ ⎡ ⎤ ⎤ ⎤ 1 1 3α + 35 b = ⎣ 3α + 10 ⎦ , x = ⎣ 1 ⎦ , δb = ⎣ −1 ⎦ 1 1 3α − 39 ⎡

si trova come perturbazione della soluzione del sistema lineare Z(x + δx) = b + δb analisi numerica

c V. Comincioli

4.4 Complementi e Problemi

225

il seguente vettore



⎤ −166α − 1683 δx = ⎣ 166α + 1843 ⎦ 6

e quindi

/ [δx∞ /x∞ ] [δb∞ /b∞ ] = µ∞ (Z)

Problema 4.3 Data la seguente matrice di ordine n ⎡

1 2 ⎢ 1 2 ⎢ ⎢ .. A=⎢ . ⎢ ⎣ 0

0



⎥ ⎥ ⎥ .. ⎥ . ⎥ 2 ⎦ 1

calcolare A−1 e stimare il numero di condizionamento µ2 (A). Soluzione. Se A = [aij ] `e una generica matrice triangolare non singolare, dalla definizione A−1 A = I si ricavano per gli elementi a ˆij della matrice inversa A−1 le seguenti relazioni a ˆij = 0 per j = 1, . . . , n

a ˆjj =

1 ajj

a ˆij = −

i>j

j r=i+1

air a ˆrj

aii

i = j −1, . . . , 2, 1

Per la matrice particolare assegnata si ha allora, per j = 1, 2, . . . , n a ˆij = 0, i > j; a ˆjj = 1; a ˆij = −2ˆ ai+1,j , i = j − 1, . . . , 2, 1 e quindi

⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣

1 0 .. .

−2 4 1 −2 .. .. . .

· · · (−2)n−3 4 ··· .. .. . . 1

0

⎤ (−2)n−1 (−2)n−2 ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ −2 4 ⎥ ⎥ 1 −2 ⎦ 0 1

(−2)n−2 (−2)n−3

···

Per stimare il numero di condizionamento µ2 (A) possiamo considerare l’errore prodotto sulla soluzione del sistema Ax = b da una perturbazione effettuata su un termine noto b scelto opportunamente. Pi` u precisamente, posto ˜ = [1, 0, . . . , ]T b b = [1, 0, . . . , 0]T ; consideriamo i due sistemi lineari Ax = b; analisi numerica

˜ A˜ x=b c V. Comincioli

226

Algebra lineare numerica

Utilizzando le formule precedenti per il calcolo dell’inversa A−1 , si ottiene ⎤ ⎡ ⎡ 1 1 + (−2)n−1  ⎢ 0 ⎥ ⎢ (−2)n−2  ⎥ ⎢ ⎢ ⎢ .. ⎥ ⎢ .. ⎢ . ⎥ ⎢ −1 −1 ˜ . ˜=A b=⎢ x x=A b=⎢ ⎥ ⎢ 0 ⎥ ⎢ 4 ⎥ ⎢ ⎢ ⎣ 0 ⎦ ⎣ −2 0 

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

Risulta pertanto ˜ 2 x − x =   [(−2)n−1 , (−2)n−2 , · · · , 4, −2, 1]T 2 x2 ˜ 2 b − b eb = = b2 ex =

Utilizziamo ora il risultato di maggiorazione dell’errore ex ≤ µ2 (A) eb per ricavare la seguente limitazione del numero di condizionamento ex ≥ 2n−1 µ2 (A) ≥ eb In realt`a, si vede facilmente che µ2 (A) > 2n . Basta osservare che per la definizione di norma naturale si ha Ax2 A−1 y2 µ2 (A) = A2 A−1 2 ≥ x2 y2 per ogni x, y = 0. Scegliendo in particolare x = y = [0, . . . , 0, 1]T , si ottiene Ax = [0, 0, . . . , 0, 2, 1]T , A−1 y = [(−2)n−1 , . . . , 4, −2, 1]T x2 = 1, Ax2 > 2, A−1 y2 > 2n−1 da cui il risultato richiesto. I risultati precedenti si generalizzano a matrici triangolari ⎡ a b ⎢ a b ⎢ ⎢ .. . A=⎢ . .. ⎢ ⎣ 0

del tipo ⎤ 0 ⎥ ⎥ ⎥ ⎥ ⎥ b ⎦ a

per a = 0. In questo caso le formule per il calcolo dell’inversa diventano ˆjj = a ˆij = 0, i > j; a Si trova quindi

1 b ; a ˆij = − a ˆi+1,j , i = j −1, . . . , 2, 1 a a

 b j  b % n−1 $   µ∞ (A) = A∞ A−1 ∞ = 1 +   a j=0 a

da cui si ricava, in particolare, che     ∞  j b   b   < 1 ⇒ µ∞ (A) < 1 +  b    = |a| + |b| a a a |a| − |b| j=0 e pertanto che la matrice `e ben condizionata se |b|  |a|. analisi numerica

c V. Comincioli

4.4 Complementi e Problemi

227

Problema 4.4 Analizzare il problema della equilibratura della seguente matrice ⎡ ⎤ 1 1 2.e+9 A = ⎣ 2 −1 1.e+9 ⎦ 1 2 0. Soluzione. L’equilibratura di una matrice `e importante, nell’ambito della risoluzione di un sistema lineare Ax = b, per diminuire il numero di condizionamento della matrice. Essa pu` o essere ottenuta mediante operazioni di scaling, cio`e per divisioni delle righe e/o delle colonne per opportuni fattori. Talvolta, le operazioni di scaling sono suggerite dallo studio del modello da cui ha origine il sistema lineare, in particolare dalla considerazione delle unit` a di misura utilizzate. In generale, comunque, non `e immediatamente chiaro il significato dell’operazione di equilibratura. Una definizione usuale chiama matrice equilibrata una matrice per la quale ogni riga e ogni colonna ha una lunghezza di ordine 1. Vediamo, ora, sulla matrice assegnata nel problema, che per la stessa matrice possono esistere diverse forme equilibrate con caratteristiche di condizionamento assai diverse. Una prima equilibratura della matrice A `e ottenuta scalando le colonne per potenze di 10. Come osservazione generale, notiamo che le operazioni di scaling dovrebbero essere effettuate mediante potenze della base di numerazione β, allo scopo di minimizzare gli errori di arrotondamento. Questo aspetto `e particolarmente importante dal momento che i problemi di scaling si pongono in generale per le matrici malcondizionate. In questo caso otteniamo ⎡ ⎤ 0.1 0.1 0.2 A = ⎣ 0.2 −0.1 0.1 ⎦ 0.1 0.2 0. Osserviamo che non sono necessarie ulteriori operazioni di scaling di riga. Per la matrice A si trovano per il determinante e il numero di condizionamento nella norma 2 i seguenti valori µ2 (A ) ≈ 2.614;

det(A ) = 0.009

Per la matrice originaria A si ha µ2 (A) = 1.339 e+9;

det(A) = 9. e+9

La seconda equilibratura che consideriamo `e per righe e fornisce la seguente matrice ⎡ ⎤ 1. e–10 1. e–10 0.2 A = ⎣ 2. e–9 −1. e–9 1.0 ⎦ 0.1 0.2 0. Per la matrice A si ha

µ2 (A ) = 2.583 e+9;

det(A ) = 9. e–11

Il problema generale della equilibratura pu` o essere posto in questo modo. Date due matrici diagonali non singolari D1 e D2 e posto b = D1 b ; x = D2 x il sistema Ax = b `e equivalente al seguente A x = b ,

A = D−1 1 AD2

Si tratta allora di trovare D1 , D2 in maniera che sia minima la quantit` a µ(D−1 1 AD2 ). Poich´e il numero di condizionamento dipende dalla norma rispetto alla quale `e definito, si possono ottenere risultati diversi a secondo della norma utilizzata. Si conoscono, ad esempio, risultati per la norma  · ∞ , dovuti a Bauer, ma tali risultati richiedono in generale la conoscenza della matrice A−1 . analisi numerica

c V. Comincioli

228

Algebra lineare numerica

In realt`a, il problema della equilibratura non ha per il momento soluzioni facilmente praticabili e generali, nel senso che si possano applicare ad arbitrarie matrici e con arbitrarie norme. Nei problemi concreti, tuttavia, come si `e gi`a accennato, una buona equilibratura della matrice `e il risultato della costruzione di un buon modello.

Problema 4.5 Per una qualsiasi matrice A ∈ Cn×n si ha ρ(A) ≤ A2 ove A2 `e la norma spettrale di A. L’uguaglianza `e verificata per le matrici hermitiane. Mostrare con opportuni esempi che nel caso generale l’uguaglianza non `e valida. Soluzione. Si consideri la seguente matrice



A=

α 1 0 α



ove α ∈ C. Si ha ovviamente ρ(A) = |α|. D’altra parte, si trova facilmente che   α ¯ |α|2 A∗ A = α |α|2 + 1 La matrice A∗ A ha gli autovalori 1 |α| + ± 2 2

e quindi



1 A2 = |α| + + 2

0

2

0 |α|2 +

1 |α|2 + 4

1 4

1/2 > |α| = ρ(A)

D’altra parte si pu` o vedere che l’uguaglianza `e pi` u in generale valida per le matrici normali, cio`e per le matrici per le quali AA∗ = A∗ A. Per la dimostrazione basta tenere conto che per le matrici normali si ha la rappresentazione A = U∗ ΛU, con U matrice unitaria e Λ matrice diagonale.

Problema 4.6 Dimostrare che per una matrice A = [aij ] di ordine 2 e non singolare si ha µ2 (A) = σ + (σ − 1) 2

1/2

,

con σ =

2 2 i,j=1 |aij |

2| det(A)|

Soluzione. Indicando con µ1 e µ2 rispettivamente il pi`u piccolo e il pi`u grande valore singolare di A si ha, per definizione µ21 + µ22 = tr(AT A) =

2

|aij |2 ; µ21 µ22 = det(AT A) = | det A|2

i,j=1

I numeri µ21 , µ22 sono quindi le radici del polinomio quadratico z 2 − z tr(AT A) + | det A|2 = 0 Poich´e µ1 ≤ µ2 , si ha allora  2 %2 tr AT A + (tr AT A)2 − 4 | det A|2 $ µ2  = = σ + (σ 2 − 1)1/2 T T 2 2 µ1 tr A A − (tr A A) − 4 | det A| analisi numerica

c V. Comincioli

4.4 Complementi e Problemi

229

Problema 4.7 Dati i seguenti punti P1 ≡ (0, 0); P2 ≡ (4, 0); P3 ≡ (0, 4); P4 ≡ (5, 6) determinare la circonferenza che meglio li approssima nel senso dei minimi quadrati. Soluzione. Dall’equazione generale di una circonferenza x2 + y 2 + ax + by + c = 0 ⇒ ax + by + c = −(x2 + y 2 ) imponendo il passaggio attraverso i quattro punti assegnati, ⎧ 0a + 0b + 1c = ⎪ ⎪ ⎨ 4a + 0b + 1c = 0a + 4b + 1c = ⎪ ⎪ ⎩ 5a + 6b + 1c =

si ottiene il seguente sistema lineare 0 −16 −16 −61

che `e sovradeterminato in quanto la matrice completa, cio`e la matrice del quarto ordine [A, b], formata dalla matrice A dei coefficienti e dal vettore b dei termini noti, ha determinante uguale a −272 e quindi il termine noto non pu` o essere una combinazione lineare delle colonne della matrice dei coefficienti. La soluzione ¯s = [a, b, c] nel senso dei minimi quadrati corrisponde alla soluzione del seguente problema di minimo min3 As − b2 ⇒ AT As = AT b (equazioni normali) s∈R

Anzich´e risolvere direttamente il sistema delle equazioni normali, `e pi` u conveniente dal punto di vista della stabilit` a numerica utilizzare la decomposizione A = QR, nel prodotto di una matrice Q ortonormale (QT Q = I) e di una matrice triangolare R ⎡ ⎤ 0. 0. −0.7817359 ⎢ −0.6246950 −0.5339295 −0.3553345 ⎥ ⎥ Q=⎢ ⎣ 0. 0.7297037 −0.4264014 ⎦ −0.7808688 0.4271436 0.2842676 ⎡ ⎤ −6.403124 −4.685212 −1.405563 ⎦ R = ⎣ 0. 5.481676 0.622917 0. 0. − 1.279204 Tale decomposizione `e ottenuta mediante l’applicazione di successive trasformazioni elementari di Householder. Dalla decomposizione QR si ottiene la soluzione ¯s del problema di minimi quadrati nel sequente modo  AT As = AT b ⇒ RT QT QRs = RT QT b ⇒

y = QT b Rs = y

Nel caso particolare considerato, risolvendo il sistema triangolare si ottiene la soluzione ¯s = [−5.619047, −5.753968, 3.777778]T ; A¯s − b2 = 6.057921 da cui si ricava l’equazione del cerchio richiesto. La soluzione ottenuta `e rappresentata in Figura 4.15.

Problema 4.8 Supponendo di avere risolto il sistema lineare Ax = b mediante la fattorizzazione, con pivoting parziale, PA = LU, studiare una procedura per migliorare l’accuratezza della ¯. soluzione calcolata x analisi numerica

c V. Comincioli

230

Algebra lineare numerica

8 7 6

X

5 4

X

3

O

2 1 0

X

X

-1 -2 -2

0

2

4

6

8

Figura 4.15 Circonferenza che approssima nel senso dei minimi quadrati quattro punti assegnati, indicati in figura con x.

Soluzione. Se si utilizza il seguente procedimento r = b − A¯ x soluzione di Ly = Pr soluzione di Uz = y ¯=x ¯+z x allora in aritmetica esatta si ha ¯ = A¯ x + Az = (b − r) + r = b Ax In aritmetica floating point la procedura fornisce un miglioramento nella soluzione soltanto se si calcola il residuo b − A¯ x in precisione superiore. In pratica, si pu` o, ad esempio, utilizzare una aritmetica a t–cifre (semplice precisione) per il calcolo di PA = LU, x, y e z, e utilizzare una aritmetica a 2t–cifre (doppia precisione), per calcolare b − A¯ x. La procedura `e pertanto la seguente r = b − A¯ x (doppia precisione) soluzione di Ly = Pr soluzione di Uz = y ¯=x ¯+z x La procedura pu` o essere iterata. Per quanto riguarda la convergenza si ha il seguente risultato euristico. Se il numero di condizionamento µ∞ (A) verifica la condizione µ∞ (A) ≈ 10q e eps = 10−d `e la precisione macchina utilizzata, allora dopo k iterazioni la x trovata ha approssimativamente un numero di cifre corrette uguale a min(d, k(d − q)). o dare una soluzione che ha tutte le cifre Approssimativamente, se eps µ∞ (A) ≤ 1 , la procedura pu` (in semplice precisione) esatte. Naturalmente, nel caso di matrici malcondizionate la procedura perde di interesse. Il costo della procedura `e dell’ordine O(n2 ), da confrontare con O(n3 ), che `e il numero di operazioni per ottenere la fattorizzazione PA = LU. Come semplice esempio di applicazione consideriamo il seguente sistema      .986 .579 x1 0.235 = x2 .409 .237 0.107 analisi numerica

c V. Comincioli

4.4 Complementi e Problemi

231

in aritmetica definita dalla base β = 10 e con precisione t = 3. Si ha PA = LU, con P = I e     1.000 0 0.9860 0.5790 L= ; U= 0.4148 1.000 0 −0.0032 La procedura fornisce, a partire dalla soluzione x = 0, la seguente successione       2.11 1.99 2.00 ¯= x , , −3.17 −2.99 −3.00 La soluzione esatta `e [2, −3].

Problema 4.9 Siano A e B due matrici assegnate di ordine n, con A non singolare, e si consideri la risoluzione del seguente sistema lineare  Ax1 + Bx2 = b1 Bx1 + Ax2 = b2 ove x1 , x2 , b1 , b2 ∈ Rn , mediante i seguenti due procedimenti iterativi ⎧ ⎨ Ax(r+1) = b1 − Bx(r) 1 2 (a) ⎩ Ax(r+1) = b − Bx(r) 2 2 1 ⎧ ⎨ Ax(r+1) = b1 − Bx(r) 1 2 (b) ⎩ Ax(r+1) = b − Bx(r+1) 2

2

1

Soluzione. Indicata con x la soluzione del sistema lineare, poniamo (r)

(r)

(r)

e1 = x1 − x1 ;

(r)

e2 = x2 − x2

Per sottrazione si trova nel caso dell’algoritmo (a) la seguente relazione ⎧ ⎨ Ae(r+1) = −Be(r) 1 2 ⎩ Ae(r+1) = −Be(r) 2

1

e nel caso dell’algoritmo (b) la relazione ⎧ ⎨ Ae(r+1) = −Be(r) 1 2 ⎩ Ae(r+1) = −Be(r+1) 2 1 Si ricava allora per l’algoritmo (a) il seguente risultato (r+1)

e2

(r)

(r−1)

= −A−1 Be1 = (A−1 B)2 e2 (r)

Analogo risultato si ottiene per il vettore e1 . La condizione necessaria e sufficiente per la convergenza `e pertanto la seguente ρ(A−1 B) < 1 e la velocit` a di convergenza `e data da ρ(A−1 B). analisi numerica

c V. Comincioli

232

Algebra lineare numerica

Per l’algoritmo (b), procedendo in modo analogo, si ottiene (r+1)

e2

(r)

= (A−1 B)2 e2

Pertanto la condizione necessaria e sufficiente per la convergenza `e la stessa, ma la la velocit` a di convergenza `e questa volta proporzionale a [ρ(A−1 B)]2 . Osserviamo che nel caso n = 1 la condizione di convergenza si riduce alla condizione di predominanza diagonale |a| > |b|. Il risultato precedente dice allora che il metodo di Gauss-Seidel (metodo (b)) ha una velocit`a di convergenza doppia rispetto al metodo di Jacobi (metodo (a)). Come verifica immediata, si consideri il seguente sistema  2x1 + x2 = 1 x1 + 2x2 = −1 (r+1)

Nel caso dell’algoritmo (a) si trova esattamente e2

(r)

(r+1)

= 12 e2 , mentre nel caso (b) si ha: e2

(r)

= 14 e2 .

Problema 4.10 Studiare per la risoluzione del sistema lineare   1 −a x = b, a ∈ R −a 1 il seguente metodo iterativo 

1 0 −ωa 1



 (k+1)

x

=

1−ω ωa 0 1−ω

 x(k) + ωb

con ω parametro opportuno. Soluzione. Si tratta del metodo SOR. Per la convergenza si ha quindi la condizione necessaria 0 < ω < 2. Per cercare condizioni sufficienti, consideriamo la matrice di iterazione   −1    1 0 1−ω ωa 1−ω ωa Lω = = −ωa 1 0 1−ω ωa(1 − ω) ω 2 a2 + 1 − ω Gli autovalori di Lω verificano la seguente equazione di secondo grado λ2 − λ(2(1 − ω) + ω 2 a2 ) + (1 − ω)2 = 0 In particolare per ω = 1 si trovano gli autovalori λ1 = 0, λ2 = |a|2 . Pertanto il metodo di Gauss–Seidel converge quando |a| < 1. Per |a| < 1 la matrice dei coefficienti `e simmetrica e definita positiva e quindi in questo caso il metodo di rilassamento converge per ω ∈ (0, 2). Essendo inoltre la matrice tridiagonale, il parametro ottimale ω ¯ `e dato da 2 ω ¯= 1 + (1 − ρ(L1 ))1/2 e in corrispondenza si ha  1 − 1 − |a|2  ρ(Lω¯ ) = ω ¯ −1= 1 + 1 − |a|2 In Figura 4.16 (a) `e rappresentata la funzione ρ(Lω¯ ) al variare di a ∈ [−1, 1]. In Figura 4.16 (b) `e rappresentata la funzione ω → ρ(Lω ),

ω ∈ (0, 2)

in corrispondenza al valore a = 0.5. Come si vede, il valore del parametro ottimale per tale valore di a `e ≈ 1.07. La figura mostra che `e meglio sovrastimare il parametro ω ¯ , in quanto la derivata sinistra `e infinita. In Figura 4.17 `e rappresentata la funzione ρ(Lω ) per ω ∈ (0, 2), a ∈ (−1, 1). analisi numerica

c V. Comincioli

4.4 Complementi e Problemi

233

1 0.8 0.6 0.4 0.2 0 -1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

1 0.8 0.6 0.4 0.2 0

0

Figura 4.16 (a) Grafico della funzione ρ(Lω¯ ), a ∈ (−1, 1). (b) Grafico della funzione ω → ρ(Lω ), ω ∈ (0, 2), a = 0.5.

Problema 4.11 Sia A ∈ Rn×n una matrice simmetrica definita positiva e, indicati con λi i suoi autovalori, sia M (A) = max {λi } m(A) = min {λi }; 1≤i≤n

1≤i≤n

Studiare al variare del parametro θ il metodo iterativo   x(r+1) = θ (I − A)x(r) + b + (1 − θ)x(r) ,

x(r) ∈ Rn

Soluzione. Il metodo pu`o essere scritto nella seguente forma x(r+1) = (I − θA)x(r) + θb da cui si vede che la condizione necessaria e sufficiente per la convergenza `e ρ(I − θA) < 1 Dal momento che gli autovalori λ(I − θA) della matrice I − θA sono dati da 1 − θλ(A), si ha $ % ρ(I − θA) = max |λ(I − θA)| = max |1 − θm(A)|, |1 − θM (A)| Da uno studio, ad esempio grafico (che `e lasciato come esercizio), si vede che ρ(I − θA) < 1 ⇐⇒ 0 < θ <

2 M (A)

Il valore ottimale θ¯ del parametro che minimizza la funzione θ → ρ(I − θA) `e dato da ¯ (A) − 1 = 1 − θm(A) ¯ θM ⇒ θ¯ = In corrispondenza si ha

analisi numerica

2 m(A) + M (A)

¯ = µ2 (A) − 1 ρ(I − θA) µ2 (A) + 1 c V. Comincioli

234

Algebra lineare numerica

Figura 4.17 Grafico della funzione ρ(Lω ), ω ∈ (0, 2), a ∈ (−1, 1). ove µ2 (A) = A2 A−1 2 = M (A)/m(A), dal momento che la matrice A `e stata supposta simmetrica. La velocit` a V di convergenza ottimale pu` o essere espressa in funzione di µ2 (A) nel seguente modo ¯ = − ln V = − ln ρ(I − θA)

2 µ2 (A) − 1 ≈ µ2 (A) + 1 µ2 (A)

per µ2 (A)  1

Problema 4.12 Studiare la convergenza di un metodo iterativo x(k+1) = Bx(k) + c nel caso in cui la matrice B abbia raggio spettrale ρ(B) = 0. Soluzione. Quando una matrice B di ordine n ha raggio spettrale nullo, significa che il suo polinomio caratteristico `e dato da pB (λ) = λn . Tenendo conto del teorema di Cayley–Hamilton, si ha allora che esiste un intero m ≤ n tale che Bm = 0. Come conseguenza, fissato un valore iniziale x(0) , si avr`a per la successione x(k) x(m) − x = Bm (x(0) − x) = 0 ove x `e il punto unito della trasformazione x → Bx + c. Il metodo iterativo converge quindi in un numero finito di iterazioni.

Problema 4.13 Data una matrice A ∈ Rm×n , con m ≥ n e rank(A) = n, discutere il calcolo numerico della matrice C = (AT A)−1 Soluzione. La matrice C ha, in particolare, una interpretazione statistica, in quanto sotto opportune ipotesi fornisce una stima della matrice di covarianza relativa al vettore soluzione del problema di minimi quadrati minx Ax − b2 . analisi numerica

c V. Comincioli

4.4 Complementi e Problemi

235

Il calcolo numerico della matrice simmetrica C pu` o essere ottenuto in vari modi, utilizzando differenti decomposizioni della matrice A. Segnaliamo in particolare le due seguenti   R T R ∈ Rn×n triangolare superiore Q A= 0   Σ T U AV = Σ ∈ Rn×n diagonale 0 La matrice Q `e di ordine n e ortogonale. Le matrici ortogonali. Ad esempio, per la seguente matrice ⎡ 1 ⎢ 1 A=⎢ ⎣ 1 1 si ha rank(A) = 3 e  A=Q

R 0



U e V sono, rispettivamente, di ordine m e n e sono ⎤ 2 3 4 9 ⎥ ⎥ 8 27 ⎦ 16 81



⎤ −0.5 −0.51287 0.54898 −0.43077 ⎢ −0.5 −0.32637 −0.14059 0.78975 ⎥ ⎥ ;Q = ⎢ ⎣ −0.5 0.04662 −0.74983 −0.43077 ⎦ −0.5 0.79262 0.34144 0.07179 ⎡ ⎤ −2. −15.000 −60.000 10.723 60.985 ⎦ R = ⎣ 0. 0. 0. 7.792

e rispettivamente A = UΣVT , con ⎡ 0.03830 ⎢ 0.10986 U=⎢ ⎣ 0.31982 0.94030 ⎡ 0.01603 V = ⎣ 0.20636 0.97834

⎤ −0.42449 0.79546 −0.43077 −0.59425 0.10527 0.78975 ⎥ ⎥ −0.61561 −0.57719 −0.43077 ⎦ 0.29611 0.15161 0.07179 ⎤ −0.35778 0.93366 −0.91249 −0.35321 ⎦ 0.19833 0.05919

e Σ = diag(87.805, 3.7403, 0.508). A partire dalle decomposizioni precedenti si ottiene AT A = RT R 2

T

(4.86)

A A = VΣ V

T

(4.87)

da cui C = (AT A)−1 = R−1 (R−1 )T T

−1

C = (A A)

= VΣ

−2

V

T

(4.88) (4.89)

Analizziamo in dettaglio il calcolo richiesto dai due procedimenti (4.88), (4.89). Nel primo procedimento si deve invertire la matrice R, memorizzando il risultato in R, e formare la parte triangolare superiore della matrice R−1 (R−1 )T , memorizzando il risultato in R−1 . Il calcolo di R−1 pu` o essere ottenuto nel modo seguente. Indicati con tij gli elementi di R−1 , dalla −1 identit` a R R = I e dal fatto che ambedue le matrici R e R−1 sono triangolari superiori, si ottengono le seguenti equazioni  j 1 se i = j til rlj = δij ≡ 0 se i = j l=i analisi numerica

c V. Comincioli

236

Algebra lineare numerica

per i, j = 1, 2, . . . , n, i ≤ j. Risolvendo rispetto a tij , si ottiene . −1 se j = i rjj tij = j−1 −1 se j > i −rjj l=i til rlj Per sostituire in memoria rij con tij , le formule precedenti possono essere organizzate nel seguente modo equivalente −1 tii = rii

$ tij = −tjj

i = 1, . . . , n j−1

til rlj ,

j = i + 1, . . . , n

%

i = 1, . . . , n − 1

l=i

L’applicazione delle formule precedenti richiede n3 /6+O(n2 ) flops. Anche il calcolo di R−1 (R−1 )T richiede lo stesso numero di operazioni, sicch´e con l’algoritmo ora descritto la matrice di covarianza C pu` o essere ottenuta mediante n3 /3 + O(n2 ) flops. Quando si utilizza la decomposizione in valori singolari gli elementi della matrice C sono dati da n vik vjk cij = 2 σkk k=1

Nel caso in cui la matrice V sia stata ottenuta in una array di dimensione n × n, la matrice VΣ−1 pu` o sostituire V nella memoria; successivamente la parte triangolare superiore di C pu` o sostituire quella corrispondente di VΣ−1 , con l’ausilio di una array di lunghezza n.

4.5 4.5.1

Esperienze in Matlab Decomposizione LU di matrici tridiagonali

function [l,u]=tridilu(a,b,c) % A=diag(b(2:n),-1)+diag(a)+diag(c(1:n-1),1) % L=diag(l(2:n),-1)+diag(ones(n,1)) % U=diag(u)+diag(c(1:n-1),1) n=length(a); l=zeros(n,1); u=zeros(n,1); u(1)=a(1); for i=2:n l(i)=b(i)/u(i-1); u(i)=a(i)-l(i)*c(i-1); end ........... function x=trisolv(a,b,c,f) % Ax=f n=length(f); [l,u]=tridilu(a,b,c); y(1)=f(1); for i=2:n y(i)=f(i)-l(i)*y(i-1); end x(n)=y(n)/u(n); for i=n-1:-1:1 x(i)=(y(i)-c(i)*x(i+1))/u(i); analisi numerica

c V. Comincioli

4.5 Esperienze in Matlab

237

end x=x(:); %% Esempio n=10; a=2*ones(n,1); b=-ones(n,1); c=b; %% A=diag(b(2:n),-1)+diag(a)+diag(c(1:n-1),1); %% xt=rand(n,1); f=A*xt; %% x=trisolv(a,b,c,f) %% Provare A(1,1)=1; det(A); inv(A) [L,U]=lu(A);

Metodo di Cholesky per matrici tridiagonali function [g,h] = CholTrid(d,e) % G = CholTrid(d,e) % fattorizzazione di Cholesky di una matrice tridiagonale % simmetrica definita positiva % d, e: vettori colonna [n,1] % A = diag(d) + diag(e(2:n),-1) + diag(e(2:n),1) % g, h vettori colonna [n,1] % G = diag(g) + diag(h(2:n),-1) soddisfa A = GG^T. n = length(d); g = zeros(n,1); h = zeros(n,1); g(1) = sqrt(d(1)); for i=2:n h(i) = e(i)/g(i-1); g(i) = sqrt(d(i) - h(i)^2); end ------function x = CholTridSol(g,h,b) % x = CholTridSol(g,h,b) % risolve il sistema lineare G*G’x = b, b [n,1] % G = diag(g) + diag(h(2:n),-1). n = length(g); y = zeros(n,1); % risolve Gy = b y(1) = b(1)/g(1); for k=2:n y(k) = (b(k) - h(k)*y(k-1))/g(k); end % risolve G’x = y x = zeros(n,1); x(n) = y(n)/g(n); for k=n-1:-1:1 x(k) = (y(k) - h(k+1)*x(k+1))/g(k); end

Applicazione: problema differenziale ai limiti ------% Script File: BVPdf % -D^2 u + u(x) = 2xsin(x) - 2cos(x) u(0) = u(pi) = 0. % soluzione esatta: u(x) = x*sin(x). % metodo delle differenze finite (Capitolo 9) close all analisi numerica

c V. Comincioli

238

Algebra lineare numerica

n = 100; x = linspace(0,pi,n)’; hx = pi/(n-1); d = 2*ones(n-2,1) + hx^2; e = -ones(n-2,1); [g,h] = CholTrid(d,e); b = hx^2*( 2*x(2:n-1).*sin(x(2:n-1)) - 2*cos(x(2:n-1))); umid = CholTridSol(g,h,b); u = [0;umid;0]; plot(x,u,x,x.*sin(x)) err = norm(u - x.*sin(x),’inf’); title(’Soluzione di -D^2 u + u = 2xsin(x) - 2cos(x), u(0)=u(pi)=0’) xlabel(sprintf(’ n = %3.0f norm(u - xsin(x),’’inf’’) = %10.6f’,n,err))

4.5.2

Eliminazione di Gauss con pivoting completo

function [L, U, P, Q, rho] = gecp(A) %GECP eliminazione di Gauss con pivoting completo % [L, U, P, Q, RHO] = GECP(A) calcola la fattorizzazione P*A*Q = L*U, % L matrice triangolare inferiore con l(i,i)=1 % U matrice triangolare superiore % P e Q matrici di permutazione. % RHO ` e il fattore di accrescimento (growth factor). % Senza parametri di output GECP(A) fornisce la matrice finale % contennte sia L che U. [n, n] = size(A); pp = 1:n; qq = 1:n; if nargout == 5 maxA = norm(A(:), inf); rho = maxA; end for k = 1:n-1 % trova l’elemento di modulo massimo [colmaxima, rowindices] = max( abs(A(k:n, k:n)) ); [biggest, colindex] = max(colmaxima); row = rowindices(colindex)+k-1; col = colindex+k-1; % pone l’elemento di modulo massimo nella posizione pivot. A( [k, row], : ) = A( [row, k], : ); A( :, [k, col] ) = A( :, [col, k] ); pp( [k, row] ) = pp( [row, k] ); qq( [k, col] ) = qq( [col, k] ); if A(k,k) == 0 break end A(k+1:n,k) = A(k+1:n,k)/A(k,k);

% Moltiplicatori

% eliminazione i = k+1:n; A(i,i) = A(i,i) - A(i,k) * A(k,i); if nargout == 5, rho = max( rho, max(max(abs(A(i,i)))) ); end analisi numerica

c V. Comincioli

4.5 Esperienze in Matlab

239

end if nargout = 3, P = eye(n); P = P(pp,:); end if nargout >= 4, Q = eye(n); Q = Q(:,qq); end if nargout == 5, rho = rho/maxA; end

4.5.3

Eliminazione senza pivoting

function [L,U] = GE1(A) % [L,U] = GE(A) L(i,i)=1 % A = LU. [n,n] = size(A); for k=1:n-1 A(k+1:n,k) = A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n) = A(k+1:n,k+1:n) - A(k+1:n,k)*A(k,k+1:n); end L = eye(n,n) + tril(A,-1); U = triu(A); ----% esempio di uso [L,U]=GE1(A); y=LTriSol(L,b); x=UTriSol(U,y); n=100; x=ones(n,1); A=diag(6*ones(n,1))+diag(ones(n-1,1),1)+diag(8*ones(n-1,1),-1); [L,U]=GE1(A); b=A*x; y=L\b; xx=U\y; norm(x-xx,inf) ans = 3.5182e+013

4.5.4

Effetto del condizionamento sull’algoritmo di soluzione di un sistema lineare

%script condA %effetto del condizionamento sull’algoritmo di soluzione di un sistema %lineare: Gauss A\b, svd, QR clear all A=[1 1 1 1 ; 1 2 3 4; 2 2 1 1; 4 5 4 5] pause b=[10 30 13 46]’ analisi numerica

c V. Comincioli

240

Algebra lineare numerica

pause xe =[1 2 3 4]’; format long for k=2:8 f=10^(2-2*k); A(4,1)=4+f; b(4)=46+f; c(k-1)=cond(A); disp(’cond(A)’) disp(cond(A)) disp(’soluzione numerica’) x=A\b; disp(x) pause er(k-1)=norm((x-xe),1)/norm(xe,1); end disp(’errore relativo’) disp(er’) subplot(2,1,1), semilogy(c), title(’condizionamento’) subplot(2,1,2),semilogy(er),title(’errore relativo’) pause [U,S,V]=svd(A); xs=V*pinv(S)*U’*b; disp(’soluzione mediante svd’) disp(xs) pause [Q,R]=qr(A); xq=R\(Q’*b); disp(’soluzione QR’) disp(xq) %un numero di condizionamento di A grande non implica necessariamente % un sistema lineare Ax=b mal condizionato; ` e importante anche la direzione di b % rispetto agli autovalori U di AA’ A=[780 563 913 659]; cond(A) b=[-6.4956; -7.6031]; bs=[-6.4994; -7.5999]; re1=norm(b-bs); b2=[-7.6031; 6.4956]; b2s=[-7.6064; 6.4918]; rel2=norm(b2-b2s); x=A\b; xs=A\bs; relx=norm(x-xs); x2=A\b2; x2s=A\b2s; relx2=norm(x2-x2s);

4.5.5

Minimi quadrati

%% script miniqua analisi numerica

c V. Comincioli

4.5 Esperienze in Matlab

241

% minimi quadrati % dati sperimentali t=[0.0 0.3 0.8 1.1 1.6 2.3]’; y=[0.82 0.72 0.63 0.60 0.55 0.50]’; % modello y(t)=x1+x2exp(-t) E=[ones(size(t)) exp(-t)]; x=E\y; tt=[0:0.1:2.5]’; yy=[ones(size(tt)) exp(-tt)]*x; plot(tt,yy,’-’,t,y,’o’) % ET=E’*E % ET\(E’*y) % [U,S,V]=svd(E) % x=V*pinv(S)*U’*y % [Q,R]=qr(E) % c=Q’*y % b=c(1:2) % RR=R(1:2, :) % x=RR\b

4.5.6

Metodo qr

function [Q, R] = cgs(A) %CGS fattorizzazione QR con metodo classico Gram-Schmidt. % A = Q*R % A matrice m-per-n di rango completo, % Q matrice ortonormale m-per-n % R matrice triangolare superiore n-per-n. [m, n] = size(A); Q = zeros(m,n); R = zeros(n); R(1,1) = norm(A(:,1)); Q(:,1) = A(:,1)/R(1,1); for j=2:n R(1:j-1,j) = Q(:,1:j-1)’*A(:,j); temp = A(:,j) - Q(:,1:j-1)*R(1:j-1,j); R(j,j) = norm(temp); Q(:,j) = temp/R(j,j); end ----------function [Q, R] = mgs(A) %MGS fattorizzazione QR con metodo Gram-Schmidt modificato % A matrice m-per-n di rango completo, % Q matrice ortonormale m-per-n % R matrice triangolare superiore n-per-n. [m, n] = size(A); Q = zeros(m,n); R = zeros(n); for k=1:n R(k,k) = norm(A(:,k)); Q(:,k) = A(:,k)/R(k,k); R(k,k+1:n) = Q(:,k)’*A(:,k+1:n); A(:,k+1:n) = A(:,k+1:n) - Q(:,k)*R(k,k+1:n); end

analisi numerica

c V. Comincioli

242

Algebra lineare numerica

Matrici di Householder Definizione 4.4 Se v ∈ Rn , la matrice n × n H(v) := I −

2 vv v v

`e chiamata matrice di Householder corrispondente al vettore v. Osserviamo che v v (ricordiamo che con notazione matlab v = vT ) `e uno scalare, mentre vv `e una matrice n × n con elemento (i, j) dato da vi vj . Si dimostra facilmente che H(v) `e simmetrica e ortogonale. Si ha infatti

 2 2 2 H(v) = I −  vv = I −  (vv ) = I −  vv = H(v) vv vv vv e inoltre 

H(v) H(v) =



2 I −  vv vv



2 I −  vv vv



2 2 = I −  vv −  vv + vv vv



2 v v

2

vv vv

Dal momento che v v ∈ R, vv vv = v(v v)v = (v v)vv , si ha 4 H(v)H(v) = I −  vv + vv 



2 v v

2

(v v)vv = I

E’ importante rilevare che il prodotto della matrice H(v) per un vettore pu`o essere ottenuto senza costruire esplicitamente la matrice H(v). Si ha infatti la seguente formula veloce (fast formula)

2 2   vw v H(v)w = w −  v(v w) = w − vv v v Se si memorizza la quantit` a α = 2/v v la formula richiede 4n flops (2n − 1 per v w, 1 per α(v w),  n per (αv w)v, n per w − (αv w)v), mentre calcolando H(v) esplicitamente il prodotto H(v)w richiede n × (2n − 1) = O(2n2 ). Le matrici di Householder possono essere utilizzate per creare zeri in vettori (preservando la lunghezza euclidea del vettore). Pi` u precisamente, per ogni u ∈ Rn , posto σ = ±u (norma euclidea) e ⎤ ⎡ u1 + σ ⎢ u2 ⎥ ⎥ ⎢ v = u + σe(1) = ⎢ ⎥ .. ⎦ ⎣ . un allora H(v)u = −σe(1) ossia 0 nella seconda, . . . , n-ma posizione. Per evitare ‘cancellazioni’ si assume σ = sign(u1 )u. Per dimostrare il risultato, osservato che v u = (u + σe(1) ) u = u u + σu e(1) = σ 2 + σu1 analisi numerica

c V. Comincioli

4.5 Esperienze in Matlab

e

243

v v = (u + σe(1) ) (u + σe(1) ) = u u + 2σu1 + σ 2 = 2σ 2 + 2σu1 = 2σ(σ + u1 )

si ha



H(v)u = u −

2 v v







v(v u) = u −

2 2 (σ + σu1 ) = u − v = u − (u + σe(1) ) = −σe(1) 2σ(σ + u1 )

Esempio 4.29 Se u = [−2, −1, 2], trovare v tale che



⎤ x H(v)u = ⎣ 0 ⎦ 0

per x ∈ R. Successivamente calcolare H(v)w per w = [1, 0, 1] .  2 Dal momento che u = (−2) + (−1)2 + 22 = 3, posto σ = −3 (poich´e u1 < 0) si assume v = [−2 − 3, −1, 2] = [−5, −1, 2]. Allora il risultato precedente mostra che H(v)u = [3, 0, 0] . Si ha ora α = 2/v v = 2/(2σ(σ + u1 )) = 2/(2 × (−3) × (−5) = 1/15 e ⎡ ⎤ 1 v w = [−5, −1, 2] ⎣ 0 ⎦ = −3 1 Usando la fast formula, si ha allora H(v)w = w −

⎡ ⎡ ⎤ ⎤ ⎡ ⎤

1 −5 0 1 1 × (−3) v = ⎣ 0 ⎦ + ⎣ −1 ⎦ = ⎣ −1/5 ⎦ 15 5 1 2 7/5

Pi` u in generale, nelle applicazioni `e dato un vettore     ˇ u vettore di ordine k = u= ˜ u vettore di ordine n − k e si cerca un vettore v tale che



⎤ ⎡ ⎤ ˇ u vettore di ordine k ⎦ H(v)u = ⎣ x ⎦ = ⎣ scalare 0 vettore di ordine n − k − 1

ossia le componenti del vettore u al di sotto della componente k-ma sono azzerate. Ignorando ˇ e lavorando ˜ si tratta di trovare il vettore v ˜ di ordine n − k tale che u  solo con il vettore u x ˜ per definire il vettore di Householder v di ordine n, ossia H(˜ v)˜ u= . Si utilizza quindi v 0   0 v= e quindi ˜ v 

 

     2 2 0 0 0 Ik Ik  ˜ ]= [ 0 v − = H(v) = I − ˜ ˜v ˜ In−k H(˜ v) v 0 v v v v v Per calcolare H(v)w si scrive

 w=

analisi numerica

ˇ w ˜ w



c V. Comincioli

244

Algebra lineare numerica



e allora H(v)w =

I 0 0 H(˜ v)

 

ˇ w ˜ w



 =

ˇ w ˜ H(˜ v)w



Osserviamo infine che se A `e una matrice di ordine n, per calcolare H(v)A si pu`o utilizzare la fast formula applicata alle colonne di A; ossia, se a:,k indica la k-ma colonna di A si ha H(v)A = [H(v)a:,1 , H(v)a:,2 , . . . , H(v)a:,n ] Fattorizzazione QR Se A ∈ Rm×n la fattorizzazione QR di A consiste nel trovare una matrice ortogonale Q di ordine m × m e una matrice triangolare superiore R di ordine m × n tali che A = QR Tale decomposizione `e unica, a meno di cambiamento di segno in una colonna di Q e nella corrispondente riga di R. L’algoritmo `e descritto dalla seguente implementazione in matlab function [Q,A]=mnqr(A) % input A matrice (m,n) % output Q matrice ortogonale (m,m) % A matrice (m,n) triangolare (= matrice R) [m,n]=size(A); Kmax=min([m-1,n]); Q=eye(m); for k=1:Kmax uk=A(k:end,k); s=sqrt(uk’*uk)*sign(uk(1)); vk=uk;vk(1)=uk(1)+s; alpha=1/(s*vk(1)); A(k:end,k)=[-s;zeros(m-k,1)]; vkA=alpha*(vk’*A(k:end,k+1:end)); A(k:end,k+1:end)=A(k:end,k+1:end)-vk*vkA; vkQ=Q(:,k:end)*(alpha*vk); Q(:,k:end)=Q(:,k:end)-vkQ*vk’; end

The mathematical software provides one of the best means of technology transfer.

P.T. Boggs, 1981

analisi numerica

c V. Comincioli

Much of quantum mechanics boils down to looking for functions that are eigenfunctions of a given operator.

P. W. Atkins

CAPITOLO

5 Autovalori e autovettori

Data una matrice A di ordine n, viene detto autovalore di A un numero λ ∈ C per il quale il seguente sistema omogeneo Ax = λx (5.1) ammette soluzioni x = 0. Tali soluzioni sono dette gli autovettori di A, corrispondenti all’autovalore λ. In sostanza, un vettore non nullo x `e un autovettore quando nella trasformazione lineare x → Ax esso viene trasformato in un multiplo di x. Le nozioni di autovalore e di autovettore sono importanti in diverse applicazioni. Segnaliamo, in particolare, il loro interesse nello studio della stabilit` a delle strutture, in questioni di statistica, nello studio di sistemi dinamici e della propagazione dei segnali , e in chimica-fisica nel calcolo degli orbitali molecolari. Il problema del calcolo degli autovalori `e, in sostanza, un problema di tipo nonlineare, in quanto esso equivale alla ricerca delle radici della seguente equazione algebrica in λ, detta equazione caratteristica det(A − λI) = 0 (5.2) Per la sua risoluzione, si potrebbero, quindi, utilizzare una delle tecniche che analizzeremo nel seguito per l’approssimazione degli zeri di una funzione non lineare. Tuttavia, la procedura matematica – costruzione del polinomio caratteristico, calcolo delle sue radici, e la risoluzione delle equazioni omogenee (5.1) – non `e, in generale, una procedura numerica conveniente, sia per costo che per stabilit`a. Lo scopo principale di questo capitolo `e, in effetti, quello di fornire metodi numerici alternativi. Il risultato alla base di tali metodi `e l’invarianza dello spettro di A, ossia dell’insieme degli autovalori di A, rispetto alle trasformazioni simili. Mediante una scelta opportuna di tali trasformazioni, la matrice di partenza viene ridotta ad una matrice di forma pi` u semplice per quanto riguarda il calcolo degli autovalori, ad esempio una matrice diagonale o triangolare. I vari metodi differiscono tra loro per la diversa scelta e implementazione delle successive trasformazioni. 245

246

5.1

Autovalori e autovettori

Condizionamento del problema degli autovalori

Data una matrice A, per condizionamento degli autovalori si intende l’analisi di come si propagano sugli autovalori le perturbazioni (corrispondenti, ad esempio, agli errori di arrotondamento, o agli errori sperimentali) presenti negli elementi della matrice. Si tratta di un’analisi che prescinde dagli algoritmi utilizzati, ma che `e indispensabile per la scelta dell’algoritmo pi` u idoneo, nel senso che se il problema dato risulta essere malcondizionato, per la sua risoluzione saranno opportuni metodi stabili. Constatiamo attraverso un esempio la possibilit`a che una matrice possa essere malcondizionata per quanto riguarda il calcolo dei suoi autovalori. Esempio 5.1 Gli autovalori della seguente matrice  A=

101 110 −90 −98

 (5.3)

˜ 1 ≈ 1. + 9.9499 i, λ ˜ 2 ≈ 1. − 9.9499 i per la matrice sono dati da λ1 = 2 e λ2 = 1, e diventano λ   100 110 ˜ A= −90 −98 ottenuta sostituendo all’elemento a11 = 101 il valore a ˜11 = 100.

Per studiare il problema del condizionamento, in particolare per introdurre, analogamente a quanto abbiamo visto per la risoluzione dei sistemi lineari, una misura del condizionamento, consideriamo per semplicit`a il caso di matrici diagonalizzabili, per le quali cio`e esista una matrice P non singolare, tale che P−1 AP = diag[λ1 , λ2 , . . . , λn ] ≡: D Le colonne di P sono gli autovettori di A, corrispondenti agli autovalori λ1 , . . . , λn . Ad esempio, per la matrice (5.3) si ha       101 110 −11 10 1 0 9 10 = −90 −98 10 −9 0 2 10 11 Ricordiamo, allora, il seguente risultato. Teorema 5.1 (Bauer-Fike) Sia A una matrice diagonalizzabile e A + E una perturbazione di A, con E ∈ Rn×n . Se ξ `e un autovalore di A + E, allora esiste almeno un autovalore λ di A tale che |λ − ξ| ≤ K(A) E

(5.4)

ove K(A) = P P−1  e  ·  indica una qualsiasi delle norme di matrice  · p , con p = 1, 2, ∞. Il numero K(A) pu` o essere, quindi, assunto come numero di condizionamento (assoluto) del problema degli autovalori della matrice A. Per la matrice (5.3) si ha, in effetti, K(A) = 441, calcolato nella norma 1. Ricordando che le matrici normali (ad esempio le matrici simmetriche, skew-simmetriche, ortogonali o unitarie) sono diagonalizzabili mediante matrici P ortogonali, dal teorema precedente si ricava il seguente risultato. analisi numerica

c V. Comincioli

5.2 Metodo delle potenze

247

Corollario 5.1 Se A `e una matrice normale e se A + E `e una qualunque perturbazione di A, allora per ogni autovalore ξ di A + E esiste almeno un autovalore λ di A tale che |λ − ξ| ≤ E2

(5.5)

dal momento che P2 = 1 se P `e ortogonale. Il risultato (5.5) mostra che piccole perturbazioni (in senso assoluto) sulla matrice A portano pure a piccole perturbazioni sugli autovalori. Pertanto per le matrici normali, in particolare quindi per le matrici simmetriche o unitarie, il calcolo degli autovalori `e un problema bencondizionato, mentre, come evidenziato dall’esempio precedente, per una matrice generale il problema pu`o essere malcondizionato. In effetti, il calcolo numerico degli autovalori di una matrice non simmetrica, o unitaria, `e, in generale, un problema delicato. In matlab il condizionamento degli autovalori pu` o essere stimato dall’istruzione condeig.

5.2

Metodo delle potenze

Il metodo delle potenze `e un metodo di tipo iterativo utile, in particolare, quando `e richiesto il calcolo dell’autovalore di modulo massimo o, pi` u in generale, di un autovalore vicino ad un valore prefissato1 . Per introdurre l’idea del metodo, consideriamo, per semplicit` a, il caso di una matrice A di ordine n che abbia n autovettori x1 , x2 , . . . , xn linearmente indipendenti e gli autovalori λ1 , λ2 , . . . , λn tali che |λ1 | > |λ2 | ≥ · · · ≥ |λn | Supponiamo, cio`e, che l’autovalore di modulo massimo abbia molteplicit`a algebrica 1 e che non esistano altri autovalori con lo stesso modulo. Per le opportune estensioni del metodo rinviamo alla bibliografia. Fissato un vettore z0 ∈ Cn , con z0 = 0, si genera la successione di vettori {yk }, k = 1, 2, . . . mediante la seguente procedura ricorrente y0 = z0 yk = Ayk−1 ,

k = 1, 2, . . .

Esaminiamo il comportamento della successione {yk } per k → ∞. Nelle ipotesi fatte su A, il vettore z0 ha la seguente rappresentazione z0 =

n

αi xi

i=1

Supponendo che z0 sia tale che α1 = 0, si ha k

yk = A z0 =

n i=1

αi λki xi

 =

λk1

α1 x1 +

n i=2

αi

λi λ1



k xi

(5.6)

1

Il metodo delle potenze, che utilizza le propriet` a asintotiche delle potenze di matrici, `e stato suggerito nel 1913 da M¨ untz. analisi numerica

c V. Comincioli

248

Autovalori e autovettori

Dal momento che |λi /λ1 | < 1, i ≥ 2, la direzione del vettore yk tende a quella di x1 . Inoltre, il quoziente di Rayleigh di yk , definito da σk =

(Ayk , yk ) (yk , yk )

tende all’autovalore λ1 . Nella forma precedente l’algoritmo pu`o presentare problemi di underflow o overflow dovuti al o tendere a zero o all’infinito; `e necessaria, quindi, una operazione di scaling. Tale fatto che λk1 pu` operazione pu` o essere effettuata utilizzando a priori diversi tipi di norma di vettore. Se si considera ad esempio la norma euclidea, si ottiene il seguente algoritmo. Si costruisce una successione di vettori tk , con tk 2 = 1, mediante le relazioni tk =

yk , yk 2 σk =

yk+1 = Atk ,

k = 0, 1, 2, . . .

(Atk , tk ) = (tk , yk+1 ) (tk , tk )

Da (5.6) si vede che gli errori di troncamento relativi a tk e σk tendono a zero come |λ2 /λ1 |k (convergenza lineare). Lasciamo come esercizio mostrare che se la matrice A `e simmetrica, allora la convergenza `e come |λ2 /λ1 |2k (convergenza quadratica). % metodo delle potenze norma 2 rand(’seed’,1); A=rand(5); l=sort(abs(eig(A))); l=flipud(l) uu=rand(length(A),1); u=uu; for k=1:10 u=u/norm(u); v=A*u; lam(k)= u’*v; u=v; end -----% metodo delle potenze norma massimo u=uu; for k=1:10 [umax,i]=max(abs(u)); u=u/umax; v=A*u; lamm(k)=v(i)/u(i); u=v; end format long [lam(:) lamm(:)]

Osservazione 5.1 Il metodo delle potenze `e convergente anche nel caso in cui l’autovalore di modulo massimo abbia molteplicit` a algebrica maggiore di 1, cio`e λ1 = λ2 = · · · = λr , con |λ1 | = |λ2 | = . . . = |λr | > |λr+1 | ≥ . . . ≥ |λn | analisi numerica

c V. Comincioli

5.2 Metodo delle potenze

249

Quando, invece, l’autovalore di modulo massimo non `e unico, i risultati di convergenza precedenti non sono pi` u applicabili. In certi casi, tuttavia, `e ancora possibile determinare delle relazioni che permettono il calcolo degli autovalori dominanti. Si consideri, come esercizio, il caso di una matrice A con autovalori reali λ1 = −λ2 > 0 e λ1 > |λ3 | ≥ |λ4 | ≥ · · · ≥ |λn | e con n autovettori linearmente indipendenti. In questo caso si pu` o vedere che λ21 `e approssimato dalla successione (A2 yk )j /(yk )j , ove (yk )j `e una componente di yk diversa dallo zero.

Esempio di applicazione: Ricerche su Web L’importanza di un determinato sito Web pu` o essere misurata calcolando il numero dei siti che vi puntano. Indicando con x1 , x2 , . . . , xn l’importanza dei siti in una determinata area, si ha che l’importanza di un sito `e proporzionale alla somma dei valori di importanza dei siti che lo puntano. Se k `e il fattore di proporzionalit` a e se A `e la matrice n × n con elementi aij uguali a 1 se il sito web j ha un link al sito web i e uguali a zero in caso contrario, si ha xi = k

n

aij xj ,

i = 1, . . . , n

j=1

Si tratta quindi di trovare un autovettore con elementi positivi e il sito pi` u importante `e quello che corrisponde alla componente maggiore di tale autovettore. In questo modo, quando si esegue una ricerca in rete, si pu` o ricevere una lista di siti in ordine di importanza decrescente, con ai primi posti i siti pi` u visitati e pi` u interessanti per ogni argomento. Questa `e, ad esempio, l’idea utilizzata nel motore di ricerca Google 2 , nel quale viene utlizzato il metodo delle potenze. Metodo di Bernoulli Ad ogni polinomio pu` o essere associata una matrice (nella forma di Frobenius, o companion matrix, cfr. Appendice A), che ha come autovalori gli zeri del polinomio. L’applicazione del metodo delle potenze alla matrice companion equivale al metodo di Bernoulli per il calcolo della radice di modulo massimo del polinomio. Ricordiamo che il metodo di Bernoulli 3 per un polinomio P (x) = a0 xn +a1 xn−1 +· · ·+an , con a0 = 0, consiste nel generare una successione {zk } nel seguente modo. Si assegnano arbitrariamente n valori z0 , z1 , . . . , zn−1 ; quindi si calcola zn+k = −

1$ a1 zn+k−1 + a2 zn+k−2 + · · · + an zk ) a0

Si pu` o dimostrare che, quando la radice di modulo massimo λ1 `e unica, allora lim

zn+k

k→∞ zn+k−1

= λ1

2 L’idea di Google (il nome deriva da “googol”, termine che indica il numero 10100 ) `e stata introdotta nel 1995 da due studenti di informatica di Stanford, Sergey Brin e Larry Page. Per una descrizione pi` u dettagliata si vedano i links 5, 6, 7, 8. 3 descritto da Daniel Bernoulli nel 1728, noto anche come metodo dei momenti.

analisi numerica

c V. Comincioli

250

5.2.1

Autovalori e autovettori

Iterazione inversa

Quando il metodo delle potenze `e applicato alla matrice A−1 , esso fornisce, nel caso in cui si u in generale, abbia 0 < |λn | < |λn−1 |, una approssimazione dell’autovalore di modulo minimo. Pi` la successione yk , (A − λ∗ I)yk+1 = tk , k = 0, 1, 2, . . . tk = yk 2 corrisponde4 all’applicazione del metodo delle potenze alla matrice (A − λ∗ I)−1 , che ha come autovalori 1/(λi − λ∗ ). In questo caso la successione converge all’autovalore pi` u vicino a λ∗ . Osserviamo che il calcolo della successione {yk } richiede la risoluzione, ad ogni iterazione, di un sistema lineare. Poich´e tuttavia la matrice `e sempre la stessa, si pu`o effettuare la decomposizione LU della matrice A − λ∗ I e quindi risolvere, ad ogni iterazione, due sistemi triangolari.

5.2.2

Deflazione

Con il termine deflazione si intende l’operazione di eliminazione dell’autovalore λ1 , una volta che sia stata ottenuta una sua approssimazione. In pratica, essa consiste nella costruzione di una matrice A che abbia gli stessi autovalori di A salvo λ1 . Si tratta di una operazione numericamente delicata, in quanto `e necessario limitare la propagazione degli errori che derivano dal fatto che o dell’autovalore λ1 si conosce solo, in generale, un valore approssimato. Una procedura stabile pu` essere ottenuta nel modo seguente. Mediante le trasformazioni di Householder si costruisce una matrice non singolare P tale che Px1 = e1 , ove con e1 si `e indicato il primo vettore unitario e con x1 un autovettore corrispondente a λ1 . Allora, da Ax1 = λ1 x1 si ha PAP−1 Px1 = λ1 Px1 ⇒ (PAP−1 ) e1 = λ1 e1 La matrice PAP−1 ha gli stessi autovalori di A e quindi deve avere la seguente forma   λ1 bT −1 PAP = 0 A La matrice A `e la matrice cercata.

5.2.3

Metodo di Lanczos

Il metodo di Lanczos5 `e una tecnica particolarmente conveniente per matrici simmetriche (o hermitiane) sparse e di grandi dimensioni . Il metodo genera una successione di matrici tridiagonali Tj , di dimensioni j × j, con la propriet` a che gli autovalori estremali (ossia gli autovalori “pi` u” positivi, e rispettivamente “pi` u” negativi) di Tj convergono monotonamente ai corrispondenti autovalori estremali di A. In questo modo `e possibile avere informazioni sugli autovalori, calcolando gli autovalori di matrici tridiagonali di ordine relativamente basso. Si presuppone, naturalmente, che il calcolo degli autovalori di una matrice tridiagonale sia un problema pi` u semplice (per tale problema cfr. paragrafi successivi). 4 Tale estensione del metodo delle potenze `e stata proposta da Wielandt nel 1944 ed `e nota come metodo di iterazione inversa. 5 C. Lanczos, An iteration Method for the Solution of the Eigenvalue Problem of Linear Differential and Integral Operators, J. Res. Nat. Bur. Stand., 45, 1950.

analisi numerica

c V. Comincioli

5.2 Metodo delle potenze

251

Data una matrice simmetrica A, si costruisce una matrice ortogonale Q con la propriet`a che Q−1 AQ = T

(5.7)

con T matrice simmetrica tridiagonale. Tale obiettivo `e comune allo schema di Householder che analizzeremo nei successivi paragrafi. La differenza tra i due metodi consiste nella procedura utilizzata per raggiungere l’obiettivo. Mentre, come vedremo, nel metodo di Householder la matrice T `e ottenuta mediante successive premoltiplicazioni e postmoltiplicazioni di matrici elementari di tipo riflessione, ossia matrici di Householder, (o alternativamente, nel metodo di Givens con metodi di rotazione), nello schema di Lanczos le colonne di Q e gli elementi di T sono ottenuti mediante una procedura ricorrente. Moltiplicando (5.7) per Q, si ottiene AQ = QT, e quindi ogni colonna della matrice AQ `e uguale alla corrispondente colonna della matrice QT. Se qj denota la colonna j-ma di Q, la colonna j-ma di AQ `e data da Aqj . Scritta la matrice T nella seguente forma ⎤ ⎡ d1 u1 ⎥ ⎢ u1 d2 u2 ⎥ ⎢ ⎥ ⎢ . . . . . . T=⎢ ⎥ . . . ⎥ ⎢ ⎣ un−2 dn−1 un−1 ⎦ un−1 dn la colonna j-ma di QT pu` o essere espressa nella seguente forma uj−1 qj−1 + dj qj + uj qj+1 Uguagliando, quindi, la colonna j-ma di AQ alla colonna j-ma di QT, si ottiene Aqj = uj−1 qj−1 + dj qj + uj qj+1

(5.8)

Assumendo, per convenzione, come vettore q0 il vettore nullo, la relazione precedente `e valida anche per j = 1. Dal momento che Q `e una matrice ortogonale, si ha qTj qj−1 = qTj qj+1 = 0,

qTj qj = 1

Premoltiplicando (5.8) per qTj , si ottiene dj = qTj Aqj Definendo i vettori rj nel seguente modo rj = Aqj − dj qj − uj−1 qj−1 la relazione (5.8) implica che uj qj+1 = rj . Prendendo la norma euclidea, si ha |uj | qj+1 2 = rj 2 da cui si vede che uj `e ± la lunghezza euclidea di rj . Risolvendo l’identit`a uj qj+1 = rj , si ottiene qj+1 = rj /uj . Le formule precedenti per dj , uj e qj+1 costituiscono il metodo di Lanczos per ridurre una matrice simmetrica A di ordine n a una matrice tridiagonale. In conclusione, partendo da un vettore arbitrario, non nullo, q1 , il metodo pu` o essere riassunto nel seguente modo analisi numerica

c V. Comincioli

252

Autovalori e autovettori

q0 = 0, r = q1 , u0 = r2 for j = 1, . . . , n qj = r/uj−1 , dj = qTj Aqj r = (A − dj I)qj − uj−1 qj−1 uj = r2 end j Quando uj−1 = 0, e quindi l’algoritmo precedente non `e in grado di procedere, si definisce qj arbitrariamente come un vettore di lunghezza unitaria e ortogonale ai vettori q1 , . . . , qj−1 . Si pu` o vedere facilmente che i vettori qj giacciono nello spazio generato dai vettori q1 , Aq1 , . . . , Aj−1 q1 . Tale spazio, indicato usualmente con la notazione Kj (q1 ), `e chiamato lo spazio j-mo di Krylov 6 associato con q1 . In sostanza, il metodo di Lanczos genera una base ortonormale per gli spazi di Krylov. Chiariamo, ora, come il metodo di Lanczos possa essere utilizzato per calcolare alcuni degli autovalori estremi, ad esempio l’autovalore dominante, di una matrice simmetrica A. Per ogni j fissato, j = 1, 2 . . . , n, consideriamo la matrice Tj che ha come diagonale gli elementi d1 , d2 , . . . , dj e con elementi sopra la diagonale u1 , u2 , . . . , uj calcolati con l’algoritmo precedente. (j) Si pu` o mostrare che gli autovalori estremi (in particolare, quindi, l’autovalore dominante λmax ) di u rapida che nel metodo delle potenze) agli autovalori estremi della Tj convergono (in maniera pi` matrice A. Sfruttando tale risultato, `e possibile ottenere delle approssimazioni degli autovalori estremi di A, risolvendo successivamente il problema del calcolo degli autovalori estremi di matrici tridiagonali di dimensione crescente. Esempio 5.2 Come illustrazione, consideriamo l’applicazione del metodo di Lanczos alla seguente matrice simmetrica

⎡ ⎢ ⎢ A=⎢ ⎢ ⎣

1 2 1 2 0

2 1 2 −1 3

1 2 2 −1 0 3 3 1 1 0

0 3 1 0 4

⎤ ⎥ ⎥ ⎥ ⎥ ⎦

(5.9)

con q1 = [1, 1, 1, 1, 1]T . Si ottengono successivamente i seguenti risultati, ove con Λj sono indicati gli autovalori della matrice Tj . j = 1 T1 = [6.600000];  6.600000 j = 2 T2 = 1.019803 ⎡ 6.600000 j = 3 T3 = ⎣ 1.019803 0 ⎡ 6.600000 ⎢ 1.019803 j = 4 T4 = ⎢ ⎣ 0 0

1.019803 3.053846

 ;

⎤ 1.019803 0 3.053846 3.179771 ⎦ ; 3.179771 −2.229559

⎤ 1.019803 0. 0 ⎥ 3.053846 3.179771 0 ⎥; 3.179774 −2.229559 1.101277 ⎦ 0 1.101277 −1.210630

Λ1 = [ 6.600000]   6.872357 Λ2 = 2.781488 ⎡ ⎤ 6.969281 Λ3 = ⎣ 4.195147 ⎦ −3.740141 ⎡ ⎤ 6.971348 ⎢ 4.234288 ⎥ ⎥ Λ4 = ⎢ ⎣ −0.905203 ⎦ −4.086778

6

Nikolai Mitrofanovich Krylov, nato a San Pietroburgo, Russia nel 1879 e morto a Mosca, USSR nel 1955, `e autore di numerosi lavori nel campo dell’interpolazione e della soluzione numerica di equazioni differenziali. analisi numerica

c V. Comincioli

5.3 Metodi di trasformazione per similitudine

253

Per j = 5 si ottiene r ≈ 1. 10−12. Gli autovalori della matrice A sono dati da ⎡ ⎤ −0.987573459 ⎢ 0.872074485 ⎥ ⎢ ⎥ ⎥ Λ(A) = ⎢ ⎢ −4.090499422 ⎥ ⎣ 4.234642665 ⎦ 6.971355730 Come confronto, applicando alla matrice (5.9) il metodo delle potenze a partire dal vettore iniziale q1 si ottengono i risultati contenuti nella Tabella 5.1. k 1 2 3 4 5 6 7 8 9 10

σk 6.82511 6.91577 6.95064 6.96369 6.96853 6.97031 6.97097 6.97121 6.97130 6.97134

0.40179 0.36137 0.34681 0.32959 0.32364 0.31716 0.31484 0.31246 0.31157 0.31079

0.46875 0.50787 0.50894 0.52216 0.52202 0.52649 0.52642 0.52798 0.52797 0.52852

tk 0.46875 0.41997 0.41448 0.39588 0.39275 0.38584 0.38450 0.38198 0.38144 0.38053

0.33482 0.30277 0.25658 0.24223 0.22495 0.21932 0.21299 0.21083 0.20853 0.20771

0.53572 0.58601 0.61891 0.63507 0.64643 0.65210 0.65615 0.65820 0.65967 0.66043

Tabella 5.1 Risultati ottenuti mediante il metodo delle potenze per la matrice (5.9).

5.3

Metodi di trasformazione per similitudine

Le trasformazioni per similitudine mediante matrici ortogonali, o unitarie, rappresentano la base per la costruzione di diversi metodi efficienti per il calcolo degli autovalori e degli autovettori. In termini schematici, tali metodi cercano di trasformare una matrice A in un’altra matrice con gli stessi autovalori, ma per la quale il problema del calcolo degli autovalori sia pi` u semplice. Pi` u precisamente, a partire dalla matrice A1 ≡ A, si costruisce una successione {Ak }, k = 2, 3, . . . mediante il seguente procedimento Ak = QTk Ak−1 Qk ,

QTk Qk = I,

k = 2, 3, . . .

(5.10)

Si vede facilmente che le matrici Ak sono simili a A, e quindi dal punto di vista teorico hanno lo stesso insieme di autovalori, e che i corrispondenti autovettori sono legati dalla relazione x = Q2 Q3 · · · Qk xk ove x e xk sono rispettivamente un autovettore della matrice A e della matrice Ak corrispondenti al medesimo autovalore. Una propriet`a importante dal punto di vista numerico `e il fatto che la trasformazione (5.10) preserva la simmetria. Le trasformazioni ortogonali utilizzate in pratica sono le trasformazioni di Givens (rotazioni) e le trasformazioni di Householder (riflessioni). La Figura 5.1 riassume l’esposizione dei paragrafi successivi, rappresentando, in maniera schematica, le varie procedure numeriche corrispondenti al tipo di trasformazione utilizzato e al tipo di matrice. analisi numerica

c V. Comincioli

254

Autovalori e autovettori

Figura 5.1 Schema dei metodi basati su trasformazioni per similitudine. Il simbolo O(n) indica che il metodo prevede un numero di iterazioni dell’ordine di n, mentre ∞ significa che il risultato `e ottenuto, in generale, come limite.

Il metodo di Jacobi, basato sulle trasformazioni di tipo rotazione, trasforma una matrice simmetrica (o hermitiana) in una matrice diagonale. Il risultato `e ottenuto come limite di una successione. Alternativamente, mediante le trasformazioni di Householder o di Givens si pu`o ridurre la matrice di partenza ad una matrice tridiagonale (quasi-triangolare, o di Hessenberg, nel caso di matrici non simmetriche). Tale risultato pu`o essere ottenuto mediante un numero finito di iterazioni, proporzionale all’ordine n della matrice. Alla matrice nella forma ridotta, tridiagonale o di Hessenberg, si pu`o applicare il metodo QR, mediante il quale si ottiene, come limite di una successione, una matrice diagonale nel caso simmetrico, e rispettivamente triangolare nel caso non simmetrico. Rispetto al metodo di Jacobi, il metodo QR presenta una superiore rapidit`a di convergenza, ma richiede ad ogni iterazione un costo superiore in termini di operazioni, dal momento che prevede ad ogni iterazione la decomposizione QR delle successive matrici. Tale costo si riduce, ovviamente, quando la matrice `e sparsa. Questo `e, in effetti, il motivo per il quale, prima di applicare il metodo QR, si preferisce ridurre la matrice alla forma tridiagonale, o rispettivamente di Hessenberg.

5.3.1

Metodo di Jacobi

Il metodo di Jacobi , noto anche come metodo di Jacobi-Von Neumann7 , `e uno dei metodi pi` u noti ed utilizzati per il calcolo di tutti gli autovalori di matrici simmetriche (o pi` u in generale, ` un metodo del tipo (5.10) e utilizza trasformazioni di tipo hermitiane) di piccole dimensioni. E rotazione. L’idea di base `e quella di annullare, ad ogni iterazione, un elemento fuori dalla diagonale principale. Come matrice limite dell’iterazione, si ottiene allora una matrice diagonale, che fornisce direttamente gli autovalori, mentre il limite del prodotto Q2 , Q3 , · · · Qk fornisce la corrispondente matrice degli autovettori. 7

C. G. J. J. Jacobi (1804-1851), J. Von Neumann (1903-1957).

analisi numerica

c V. Comincioli

5.3 Metodi di trasformazione per similitudine

255

Esporremo il metodo nel caso di una matrice A simmetrica. Posto A1 = A, si costruisce per k = 2, 3, . . . la successione di matrici Ak = GTk Ak−1 Gk ove Gk (p, q) `e una matrice di rotazione di un opportuno angolo θ nel piano di due vettori di (k−1) (k) della matrice Ak−1 e gli elementi aij base p, q scelti convenientemente. Tra gli elementi aij della matrice trasformata Ak si hanno (cfr. Appendice A) le seguenti relazioni, ove si `e posto c = cos θ, s = sin θ (k)

per i = p, q, j = p, q

(k−1)

aij = aij (k)

(k−1)

per j = p, q

apj = capj

per j = p, q

(k) aqj (k) apq (k) app (k) aqq

= = = =

(5.11) (k−1)

− saqj

(5.12)

(k−1) (k−1) sapj + caqj (k−1) (k−1) (k−1) c s(apq − aqq ) + (c2 − s2 )apq (k−1) (k−1) (k−1) c2 app + s2 aqq − 2csapq (k−1) (k−1) (k−1) s2 app + c2 aqq + 2c sapq

(5.13) (5.14) (5.15) (5.16)

1 Ricordiamo che c s = cos θ sin θ = sin 2θ e c2 − s2 =cos2 θ − sin2 θ =cos 2θ. 2 Alla generica iterazione k-ma l’angolo θ viene determinato in maniera da ottenere

ossia tale che

(k) (k) apq = aqp =0

(5.17)

% $ (k−1) (k−1) (k−1) = −2 cos 2θapq sin 2θ app − aqq

(5.18)

L’angolo θ `e allora determinato dalle seguenti relazioni ⎧ π (k−1) (k−1) ⎪ θ= se app = aqq ⎪ ⎨ 4 ⎪ ⎪ ⎩ tan 2θ =

(k−1)

2apq

π , |θ| < (k−1) (k−1) 4 aqq − app

(k−1)

se app

(k−1)

= aqq

(5.19)

La condizione |θ| < π/4 determina completamente il valore di θ a partire da quello di tan 2θ. In realt`a, non `e nemmeno necessario calcolare esplicitamente l’angolo θ, in quanto nelle formule precedenti intervengono solo le funzioni trigonometriche, o pi` u precisamente relazioni in funzione di t = tan θ. In effetti, poich´e |θ| < π/4, si ha cos θ > 0 e quindi 1 =√ 1 + t2 1+ t s = sin θ = cos θ tan θ = √ 1 + t2 c = cos θ = √

1

tan2 θ

Osserviamo, inoltre, che (k) (k−1) (k−1) (k−1) (k−1) − app = app (cos2 θ − 1) − apq sin 2θ + aqq sin2 θ app % 2 $ (k−1) (k−1) (k−1) sin θ − apq − app sin 2θ = aqq

analisi numerica

c V. Comincioli

256

Autovalori e autovettori

da cui, ricordando (5.17) (k) (k−1) (k−1) = app − apq tan θ app

(5.20)

(k) (k−1) (k−1) = aqq + apq tan θ aqq

(5.21)

Allo stesso modo, si dimostra che

Per determinare t = tan θ a partire da tan 2θ, si ha la seguente relazione trigonometrica tan 2θ =

2t 1 − t2

da cui

(k−1)

t2 + 2t cot 2θ − 1 = 0, ove per la (5.19)

cot 2θ = ν =

aqq

(k−1)

− app (k−1)

(5.22)

2apq

Poich´e t = tan θ verifica |t| < 1 per |θ| < π/4 e il prodotto delle radici di (5.22) `e uguale a −1, `e necessario prendere la radice di modulo minimo. Si ha, quindi ⎧ sign(ν) ⎨ √ t= se ν = 0 2 (5.23) |ν| + 1 + ν ⎩ t=1 se ν = 0 Successivamente, si calcola 1 ; s = ct 1 + t2 In definitiva, le formule che definiscono l’algoritmo diventano le seguenti c= √

i = p, q, j = p, q

(k)

(k−1)

aij = aij (k)

(k−1)

− saqj

(k)

(k−1)

+ caqj

j = p, q

apj = capj

j = p, q

aqj = sapj

(k−1) (k−1)

(k) (k−1) (k−1) app = app − tapq (k) (k−1) (k−1) aqq = aqq + tapq

Si vede facilmente che il numero di moltiplicazioni per rotazione `e approssimativamente dato da 4n. Un’osservazione interessante `e che le formule precedenti possono essere eseguite in parallelo. o diventare non nullo all’iterazione k; per esempio, Naturalmente, un elemento nullo di Ak−1 pu` (k−1) (k−1) (k) (k−1) = 0 e aqj = 0, allora apj = −aqj sin θ. Si tratta, quindi, in generale per j = p, q, se apj di un metodo non a terminazione finita. Per la scelta della coppia di indici (p, q) ad ogni iterazione, vi sono diverse idee, tra le quali esamineremo le due seguenti. Metodo di Jacobi classico Il metodo di Jacobi classico consiste nello scegliere (p, q), con p < q in maniera che (k−1)

(k−1) |apq | = max |aij i=j

|

(5.24)

Corrispondentemente a questa scelta, si ha il seguente risultato di convergenza. analisi numerica

c V. Comincioli

5.3 Metodi di trasformazione per similitudine

257

Teorema 5.2 Se A `e una matrice simmetrica di ordine n, allora il metodo di Jacobi converge. Pi` u precisamente, gli elementi non diagonali di A convergono a zero, mentre ogni elemento (k) diagonale aii converge verso un autovalore di A. Dimostrazione. La dimostrazione della convergenza `e basata sulla seguente disuguaglianza, valida per la coppia di indici (p, q) definita in (5.24) $ (k−1) %2 S(Ak−1 ) , ≥ apq n(n − 1) Si ha allora

ove S(Ak−1 ) =



(k−1) 2

|arj

|

r,j r=j

%2 $ S(Ak−1 ) S(Ak ) = S(Ak−1 ) − 2 a(k−1) = γS(Ak−1 ) ≤ S(Ak−1 ) − 2 pq n(n − 1)

ove γ = 1 − 2/(n(n − 1)) < 1, per n ≥ 2. Applicando in maniera ricorrente la maggiorazione precedente, si ha S(Ak ) ≤ γ k S(A1 ) (k)

da cui S(Ak ) → 0. Per dimostrare poi che ogni elemento diagonale aii converge verso un autovalore di A si utilizza il Teorema di Gerschgorin.

Quando la matrice hermitiana A ha autovalori distinti λi , i = 1, 2, . . . , n, si pu` o mostrare che da un certo passo k in poi si ha 2S(Ak−1 )2 S(Ak+N ) ≤ δ2 ove N = n(n − 1)/2 e δ = mini=j |λi − λj |. Tale risultato mostra che nelle ipotesi fatte il metodo di Jacobi ha convergenza quadratica. Metodo con soglia Si fissa un valore s > 0. Si scelgono allora le coppie (p, q) nell’ordine naturale (1, 2), (1, 3), . . . , (1, n), (2, 3), . . . ma si effettua la rotazione soltanto se |apq | ≥ s. Il valore della soglia pu` o essere ridefinito ad ogni rotazione. Nella implementazione riportata nel seguito si utilizza la seguente strategia. Nelle prime tre iterazioni si esegue la rotazione se |apq | `e maggiore della soglia s = 0.2S0 /n2 , ove S0 `e la somma dei moduli degli elementi fuori della diagonale. Dopo quattro iterazioni si evita la rotazione quando |apq | `e piccolo rispetto agli elementi sulla diagonale |app | e |aqq |. function [V,D]=jacobi1(A,epsilon) % A matrice simmetrica % epsilon tolleranza % V colonne: autovettori % D diagonale: autovettori D=A; [n,n]=size(A); V=eye(n); state=1; % calcolo elemento a(p,q) [m1 p]=max(abs(D-diag(diag(D)))); [m2 q]=max(m1); analisi numerica

c V. Comincioli

258

Autovalori e autovettori

p=p(q); while (state==1) t=D(p,q)/(D(q,q)-D(p,p)); c=1/sqrt(t^2+1); s=c*t; R=[c s;-s c]; D([p q],:)=R’*D([p q],:); D(:,[p q])=D(:,[p q])*R; V(:,[p q])=V(:,[p q])*R; [m1 p]=max(abs(D-diag(diag(D)))); [m2 q]=max(m1); p=p(q); if (abs(D(p,q)) j + 1, j = 1, 2, . . . , n − 2. ⎡

∗ ∗ ∗ ⎢ ∗ ∗ ∗ ⎢ ⎢ ∗ ∗ ⎢ ⎢ ∗ H=⎢ ⎢ ⎢ ⎢ ⎢ ⎣

∗ ∗ ∗ ∗ ∗

∗ ∗ ∗ ∗ ∗ ∗

∗ ∗ ∗ ∗ ∗ ∗ ∗

∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗

∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

Figura 5.2 Matrice di Hessenberg. analisi numerica

c V. Comincioli

5.3 Metodi di trasformazione per similitudine

261

5 Il costo per il metodo di Householder `e di circa n3 , mentre `e di circa il doppio per quello di 3 Givens. La trasformazione nella forma di Hessenberg `e preliminare alla applicazione del metodo QR, che come vedremo pi` u avanti conserva tale struttura.

5.3.5

Matrici tridiagonali simmetriche

Come abbiamo visto, l’applicazione dei metodi di Lanczos, di Householder e di Givens prevede come fase terminale la ricerca degli autovalori e degli autovettori di una matrice tridiagonale simmetrica. In questo paragrafo incominceremo ad analizzare una prima tecnica per risolvere tale problema. Essa si basa sulla risoluzione dell’equazione caratteristica e presenta interesse quando si devono calcolare determinati autovalori, quali, ad esempio, gli autovalori di modulo massimo o di modulo minimo, o quelli contenuti in un particolare intervallo. Il metodo QR, che esamineremo nel paragrafo successivo `e, invece, in generale pi` u conveniente quando sono richiesti tutti gli autovalori della matrice. Sia A una matrice tridiagonale reale simmetrica, ossia della forma ⎡

a1 ⎢ b1 ⎢ ⎢ A=⎢ ⎢ ⎣

b1 a2 .. .

⎤ b2 .. .

..

. bn−2 an−1 bn−1 bn−1 an

⎥ ⎥ ⎥ ⎥ ⎥ ⎦

Tale matrice risulta (cfr. Appendice A) irriducibile quando bi = 0 per i = 1, 2, . . . , n − 1. Viceversa, quando almeno uno degli elementi bi `e nullo la matrice `e riducibile ed ha la seguente decomposizione a blocchi ⎤ ⎡ A11 0 ⎥ ⎢ A22 ⎥ ⎢ A=⎢ ⎥ .. ⎦ ⎣ . 0

Arr

ove Aii , i = 1, 2, . . . , r, sono matrici tridiagonali di ordine inferiore a n. In questo caso, quindi, il problema del calcolo degli autovalori di A si riduce a quello delle matrici Aii . Possiamo, pertanto, supporre, senza perdita di generalit`a, che la matrice A sia irriducibile. Il polinomio caratteristico di una matrice simmetrica tridiagonale e irriducibile pu` o essere calcolato mediante una opportuna iterazione, grazie al seguente risultato. Lemma 5.1 Data una matrice A tridiagonale simmetrica e irriducibile, indichiamo con Ak la sua sottomatrice principale di ordine k e con pk (λ) il corrispondente polinomio caratteristico. Posto, allora p0 (λ) = 1; p1 (λ) = a1 − λ si ha per k ≥ 2 pk (λ) = (ak − λ) pk−1 (λ) − b2k−1 pk−2 (λ) analisi numerica

(5.25) c V. Comincioli

262

Autovalori e autovettori

Per la dimostrazione basta sviluppare il determinante di ogni matrice Ak − λIk rispetto all’ultima riga. Le radici del polinomio caratteristico pn (λ), che sono tutte reali, in quanto la matrice `e simmetrica, possono essere approssimate mediante un procedimento di bisezione. Se pn (α) pn (β) < 0 e α < β, la seguente iterazione while |α − β| > (|α| + |β|) λ = (α + β)/2 if pn (λ) pn (α) < 0 β=λ else α=λ end end

termina quando si `e ottenuta una approssimazione di una autovalore della matrice A con un errore relativo inferiore a una precisione prefissata . Si possono, inoltre, dimostrare le seguenti propriet` a. Lemma 5.2 Le radici del polinomio pk (λ) sono semplici e reali e i polinomi successivi pk (λ) e pk−1 (λ) non hanno radici comuni. Inoltre, le radici di pk−1 (λ) separano strettamente le radici di pk (λ). Esempio 5.3 Come illustrazione, consideriamo la seguente matrice ⎡ ⎢ ⎢ ⎢ A=⎢ ⎢ ⎢ ⎣

2 1 0 0 0 0

1 2 1 0 0 0

0 1 2 1 0 0

0 0 1 2 1 0

0 0 0 1 2 1

0 0 0 0 1 2



⎤ ⎥ ⎥ ⎥ ⎥, ⎥ ⎥ ⎦

⎢ ⎢ ⎢ Λ(A) = ⎢ ⎢ ⎢ ⎣

3.24697960371747 2.44504186791263 3.80193773580484 1.55495813208737 0.75302039628253 0.19806226419516

⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦

(5.26)

ove Λ(A) indica gli autovalori esatti della matrice A. Dal Lemma 5.1 si ricava la seguente successione p0 (λ) = 1, p1 (λ) = 2 − λ p2 (λ) = λ2 − 4λ + 3 p3 (λ) = −λ3 + 6λ2 − 10λ + 4 p4 (λ) = λ4 − 8λ3 + 21λ2 − 20λ + 5 p5 (λ) = −λ5 + 10λ4 − 36λ3 + 56λ2 − 35λ + 6 p6 (λ) = λ6 − 12λ5 + 55λ4 − 120λ3 + 126λ2 − 56λ + 7 In particolare, il polinomio p6 (λ) fornisce il polinomio caratteristico della matrice A. I polinomi pk sono rappresentati in Figura 5.3, nella quale si possono verificare i risultati precedenti.

Una successione di polinomi che verificano le propriet` a del Lemma 5.2 `e detta una successione di Sturm. Si ha come conseguenza il seguente risultato. analisi numerica

c V. Comincioli

5.3 Metodi di trasformazione per similitudine

263

Figura 5.3 Rappresentazione della successione dei polinomi pk (λ) corrispondenti alla matrice (5.26). Teorema 5.3 Sia A una matrice tridiagonale simmetrica e irriducibile. Il numero C(µ) delle concordanze di segno nella successione p0 (µ), p1 (µ), . . . , pn (µ) `e uguale al numero degli autovalori di A strettamente maggiori di µ. Quando pk (µ) = 0, si definisce come segno quello dell’opposto di pk−1 (µ) che `e non nullo. Pertanto, il numero degli autovalori di A compresi in ]a, b], ove a < b `e uguale a C(a) − C(b). Il risultato, incorporato opportunamente nell’algoritmo della bisezione esaminato in precedenza, permette di ottenere una conveniente approssimazione degli autovalori di modulo massimo o minimo, o pi` u in generale degli autovalori contenuti in un fissato intervallo.

5.3.6

Metodo QR

Il metodo QR8 `e uno dei metodi numerici pi` u interessanti per il calcolo degli autovalori. Tuttavia, applicato ad una matrice generale, ha un costo elevato dal momento che richiede ad ogni iterazione la decomposizione di una matrice nel prodotto di una matrice ortogonale Q e di una matrice triangolare R. Per tale motivo, come abbiamo gi` a osservato in precedenza, il metodo `e applicato a matrici gi`a ridotte a forma tridiagonale (caso simmetrico) e di Hessenberg (caso generale). Pur essendo l’idea del metodo semplice, la sua implementazione richiede particolari accorgimenti. Qui ci limiteremo a fornire le idee di base, rinviando, per una implementazione opportuna alla bibliografia specializzata (ad esempio funzione eig di Matlab). Data una matrice A di ordine n, mediante l’applicazione dell’algoritmo di Householder o di Givens si ottiene la seguente decomposizione A1 = A = Q1 R1 ove Q1 `e una matrice unitaria e R1 `e una matrice triangolare superiore. 8

sviluppato da J. G. F. Francis, The QR Transformation: A Unitary Analogue to the LR Transformation, Comp. J.,4, 1961, rappresenta uno sviluppo del metodo LR di Rutishauser (1958), nel quale si utilizza una decomposizione della matrice in matrici triangolari. analisi numerica

c V. Comincioli

264

Autovalori e autovettori

Si calcola poi A2 = R1 Q1 Tenendo presente che A2 = R1 Q1 = (QT1 Q1 )(R1 Q1 ) = QT1 A1 Q1 , si ha che A2 `e una matrice simile alla matrice A1 . Il procedimento viene quindi iterato, per k ≥ 2 for k = 1, 2, . . . A = QR A = RQ end k

Ak = Qk Rk ⇒ Ak+1 = Rk Qk = QTk Ak Qk

Esempio 5.4 Data la seguente matrice  A= 

si ha A = Q1 R 1 = da cui

1 2

2 1

−0.4472 −0.8944 −0.8944 0.4472



 

−2.2361 −1.7889 0 −1.3416





 2.6000 1.2000 1.2000 −0.6000     −0.9080 −0.4191 −2.8636 −0.8381 = Q2 R2 = −0.4191 0.9080 0 −1.0476

A2 = R1 Q1 =

La matrice Ak per k = 11 `e data da  A11 =

3.0000 0.0001 0.0001 −1.0000



Come ulteriore esemplificazione, consideriamo l’applicazione del metodo alla matrice (5.26). Dopo 20 iterazioni si ottiene la seguente matrice ⎤ ⎡ 3.798685 0.042360 0. 0. 0. 0. ⎥ ⎢ 0.042360 3.250143 0.008426 0. 0. 0. ⎥ ⎢ ⎥ ⎢ 0. 0.008426 2.445130 0.000364 0. 0. ⎥ ⎢ A20 = ⎢ ⎥ 0. 0. 0.000364 1.554958 0.000001 0. ⎥ ⎢ ⎦ ⎣ 0. 0. 0. 0.000001 0.753020 0. 0. 0. 0. 0. 0.000000 0.198062 i cui autovalori sono dati da   Λ(A20 ) = 3.80193 3.24697 2.44504 1.55495 0.75302 0.19806 Nei due esempi considerati, nei quali la matrice `e simmetrica, si osserva la convergenza del metodo a una matrice diagonale. Tale convergenza pu` o essere, in effetti, dimostrata in condizioni abbastanza generali per le quali, comunque, rinviamo alla bibliografia, limitandoci ad osservare analisi numerica

c V. Comincioli

5.4 Problema degli autovalori generalizzato

265

che, utilizzando una opportuna tecnica di traslazione degli autovalori9 , la convergenza `e di ordine 3. Osserviamo, infine, che quando il metodo `e applicato a una matrice non simmetrica, il limite `e, in generale, una matrice triangolare.

5.4

Problema degli autovalori generalizzato

In numerose applicazioni ha interesse la seguente estensione del problema degli autovalori. Date due matrici A e B di ordine n, si cercano i valori λ ∈ C per i quali il seguente sistema omogeneo Ax = λBx

(5.27)

ammette soluzioni x non identicamente nulle10 . L’insieme di tutte le matrici della forma A − λB, con λ ∈ C, `e detto un pencil. Gli autovalori del pencil sono, allora, elementi dell’insieme λ(A, B) definito da λ(A, B) := {z ∈ C | det(A − zB) = 0} Se λ ∈ λ(A, B), un vettore x soluzione del sistema (5.27) `e chiamato un autovettore di A − λB. Un aspetto importante da sottolineare `e che il problema generalizzato ha n autovalori se e solo se il rango della matrice B `e n. In caso contrario, l’insieme λ(A, B) pu` o essere sia finito che vuoto o infinito, come mostrato nei seguenti esempi     1 2 1 0 A= ; B= ⇒ λ(A, B) = {1} 0 3 0 0     1 2 0 0 ; B= A= ⇒ λ(A, B) = {∅} 0 3 1 0     1 2 1 0 A= ; B= ⇒ λ(A, B) = {C} 0 0 0 0 Osserviamo, inoltre, che se 0 = λ ∈ λ(A, B), allora (1/λ) ∈ λ(B, A). Inoltre, se B `e non singolare, allora, λ(A, B) = λ(B−1 A, I). L’ultima osservazione suggerisce un metodo per risolvere il problema generalizzato quando B `e non singolare. • Si risolve il sistema BC = A, ossia si calcola B−1 A; • si utilizza il metodo QR per calcolare gli autovalori di C. Attraverso opportune esemplificazioni, si pu`o mostrare che tale procedura `e numericamente instabile, e quindi non opportuna, quando la matrice B `e malcondizionata. Algoritmi stabili per il problema generalizzato degli autovalori si basano sul seguente risultato che `e una estensione del classico teorema di decomposizione di Schur (cfr. Appendice A). 9

In maniera schematica, si esegue ad ogni passo la decomposizione Ak − sk I = Qk Rk e si pone Ak+1 = a scelte opportunamente ad ogni passo, e vicine al valore di un autovalore della Rk Qk + sk I, ove sk sono quantit` matrice A; tenendo presente che la matrice Ak converge ad una matrice triangolare, una possibile scelta consiste (k) nell’assumere come sk l’elemento ann della matrice Ak . 10 Nello studio della stabilit` a di strutture, la matrice A dipende dalle propriet` a del materiale ed `e nota come stiffness matrix , mentre la matrice B dipende dal carico ed `e detta mass matrix . analisi numerica

c V. Comincioli

266

Autovalori e autovettori

Proposizione 5.1 Se A e B sono matrici in Cn×n , allora esistono due matrici unitarie Q e Z tali che Q∗ AZ = T e Q∗ BZ = S sono triangolari superiori. Se per un valore di k, tkk e skk sono ambedue nulli, allora λ(A, B) = C. Altrimenti, λ(A, B) = {tii /sii : sii = 0} Le matrici Q e Z possono essere costruite mediante una opportuna generalizzazione del metodo QR, nota come metodo QZ. Un caso di pencil particolarmente importante corrisponde a A matrice simmetrica e B simmetrica definita positiva (symmetric definite pencil). Questa propriet` a si mantiene quando si operano trasformazioni di congruenza, ossia A − λB simmetrica definita



(XT AX) − λ(XT BX) simmetrica definita

Osserviamo che, al contrario, la matrice B−1 A non `e in generale simmetrica. Il risultato precedente pu`o essere utilizzato nel seguente modo. Si calcola la decomposizione di Cholesky della matrice B B = LLT con L matrice triangolare non singolare. La matrice B−1 A `e simile alla matrice G = L−1 A(L−1 )T . Infatti LT (B−1 A)(LT )−1 = LT (LT )−1 L−1 A(L−1 )T = L−1 A(L−1 )T = G Il problema del calcolo degli autovalori della matrice B−1 A `e in questo modo ricondotto al calcolo degli autovalori della matrice simmetrica G. Il calcolo di G pu` o essere effettuato nel seguente modo. Si calcola F = A(L−1 )T risolvendo il sistema triangolare FLT = A e successivamente si ottiene G risolvendo il sistema LG = F. Dal momento che G `e simmetrica, `e sufficiente calcolare gli elementi sotto la diagonale di G e allora basta calcolare in F gli elementi fik , k ≤ i. Il calcolo di G da A e B richiede circa 2 3 n moltiplicazioni. 3 Esempio 5.5 Se     A=

229 163 163 116

,

B=

81 59 59 43

allora A − λB `e un pencil simmetrico definito, in quanto gli autovalori di B sono dati da [123.9839, 0.0161]. La decomposizione LLT di Cholesky della matrice B fornisce     9.0000 0 0.1111 0 L= con L−1 = 6.5556 0.1571 −4.6355 6.3640 Si ha pertanto −1

G=L

−1 T

A(L

) =



2.827160 −2.688751 −2.688751 1.672839



che ha come autovalori [4.999999, −0.499999]. Osserviamo, anche, che posto   3 −5 X= −4 7 si ha XT AX = diag(5, −1) e XT BX = diag(1, 2), da cui la conferma del risultato precedente.

analisi numerica

c V. Comincioli

5.5 Decomposizione SVD

5.5

267

Decomposizione SVD

Sia A una matrice ∈ Rm×n . Senza perdita di generalit`a possiamo assumere m ≥ n (altrimenti, si o, allora, essere scritta nella forma sostituisce A con AT ). La decomposizione SVD pu`   Σ (5.28) A=U VT , Σ = diag(σ1 , . . . , σn ), σ1 ≥ σ2 ≥ · · · ≥ σn ≥ 0 0 ove U `e una matrice ortogonale di ordine m e V una matrice ortogonale di ordine n. Sappiamo che i valori singolari sono tali che σi2 sono gli autovalori della matrice AT A. In teoria, quindi, essi potrebbero essere calcolati risolvendo il problema degli autovalori per la matrice simmetrica AT A; ma questa procedura pu`o introdurre una perdita di accuratezza durante il calcolo della matrice AT A. Una procedura pi` u opportuna per calcolare la SVD `e stata introdotta da Golub e Kahan (1965). In tale procedura, il primo passo consiste nel ridurre, mediante un algoritmo basato sulle trasformazioni di Householder, la matrice A ad una forma bidiagonale B. Successivamente, si applica alla matrice tridiagonale BT B un metodo QR con shift. Pi` u in dettaglio, mediante il metodo di Householder si calcola una matrice m × m di Householder P1 in modo da annullare gli elementi della sottodiagonale della prima colonna di A. La matrice A = P1 A `e illustrata nel seguente schema, nel quale m = 5, n = 4 e gli elementi che cambiano sono indicati con il simbolo ∗ ⎤ ⎤ ⎡ ⎡ ∗ ∗ ∗ ∗ x x x x ⎢ 0 ∗ ∗ ∗ ⎥ ⎢ x x x x ⎥ ⎥ ⎥ ⎢ ⎢ ⎥ → P1 A = A = ⎢ 0 ∗ ∗ ∗ ⎥ x x x x A=⎢ ⎥ ⎥ ⎢ ⎢ ⎣ 0 ∗ ∗ ∗ ⎦ ⎣ x x x x ⎦ 0 ∗ ∗ ∗ x x x x Si determina, quindi, una matrice di Householder Q1 di ordine n della seguente forma   1 0T Q1 = ˜ 0 Q ⎡

in maniera che

⎢ ⎢ A =⎢ ⎢ ⎣ 

x 0 0 0 0

x x x x x

x x x x x

x x x x x





⎥ ⎢ ⎥ ⎢ ⎥ → A Q1 = A = ⎢ ⎥ ⎢ ⎦ ⎣

x 0 0 0 0

∗ ∗ ∗ ∗ ∗

0 ∗ ∗ ∗ ∗

0 ∗ ∗ ∗ ∗

⎤ ⎥ ⎥ ⎥ ⎥ ⎦

La matrice A ha quindi nulli gli elementi della prima riga che hanno indice di colonna maggiore o uguale a 3 e gli elementi della prima colonna che hanno indice di riga maggiore o uguale a 2. Ripetendo il procedimento per n − 2 volte, cio`e annullando alternativamente gli elementi delle colonne e delle righe, si arriva a una matrice bidiagonale.  Esercizio 5.1 Esaminare il condizionamento del problema del calcolo degli autovalori della seguente 

matrice A= analisi numerica

1 0

1 1



c V. Comincioli

268

Autovalori e autovettori

calcolando gli autovalori λi () e gli autovettori xi () delle seguenti matrici perturbate       1 1 1 1 1 1+ , ,  1 0 1+ 0 1 con  > 0 e piccolo.

 Esercizio 5.2 Si applichi il metodo delle potenze alla seguente matrice ⎡

2 ⎢ 1 A=⎢ ⎣ 3 4

⎤ 1 3 4 −3 1 5 ⎥ ⎥ 1 6 −2 ⎦ 5 −2 −1

con vettore iniziale z0 = [1, 1, 1, 1]T . Spiegare il comportamento nella convergenza del metodo.

 Esercizio 5.3 Trasformare la seguente matrice ⎡

⎤ 4 −1 −1 0 ⎢ −1 4 0 −1 ⎥ ⎥ A=⎢ ⎣ −1 0 4 −1 ⎦ 0 −1 −1 4

in forma tridiagonale con i metodi di Lanczos, di Householder e di Givens.

 Esercizio 5.4 Sia A = QR, Q∗ Q = I, R triangolare superiore, A = RQ Mostrare che 1. se A `e una matrice di Hessenberg, allora anche A `e una matrice di Hessenberg; 2. se A `e tridiagonale hermitiana, pure A `e tridiagonale hermitiana.

 Esercizio 5.5 Date due matrici di ordine n A e B, considerare il problema degli autovalori (AB)x = λx. Se B `e simmetrica e definita positiva e LLT `e la corrispondente fattorizzazione di Cholesky, mostrare che le matrici AB e LT AL hanno gli stessi autovalori. Esaminare la relazione tra gli autovettori di AB e gli autovettori di LT AL.  Esercizio 5.6 Le matrici come la seguente



x0 X3 = ⎣ x2 x1

x1 x0 x2

⎤ x2 x1 ⎦ x0

sono dette matrici circolanti e hanno interesse in diverse applicazioni (trasformata di Fourier). Trovare tutti gli autovalori e i corrispondenti autovettori di X3 . Usare tali risultati per costruire una matrice U tale che U−1 X3 U sia diagonale. Generalizzare i risultati ottenuti al caso di matrici circolanti generali.

analisi numerica

c V. Comincioli

5.6 Complementi e Problemi

5.6

269

Complementi e Problemi

Problema 5.1 Considerare il seguente procedimento per il calcolo del polinomio caratteristico di una matrice A ∈ Rn×n e, nel caso in cui det(A) = 0, dell’inversa A−1 . ⎧ ⎪ A1 = A, r1 = tr A1 , B1 = A1 − r1 I ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ r2 = 12 tr A2 , B2 = A2 − r2 I ⎪ ⎪ A2 = B1 A, ⎨ A3 = B2 A, r3 = 13 tr A3 , B3 = A3 − r3 I ⎪ ⎪ ⎪ . . . ⎪ .. .. ⎪ .. ⎪ ⎪ ⎪ ⎪ ⎩ rn = n1 tr An , Bn = An − rn I An = Bn−1 A, Si ha Bn = 0, An = rn I, Bn−1 A = rn I e (−1)n [λn − r1 λn−1 − r2 λn−2 · · · − rn ] `e il polinomio caratteristico p(λ) di A. Inoltre, quando A `e non singolare si ha A−1 =

1 Bn−1 rn

(5.29)

Soluzione. Supponiamo che p(λ) = det(A − λI) = (−1)n [λn − a1 λn−1 − a2 λn−2 · · · − an ] sia il polinomio caratteristico di A. Si vede allora che a1 = λi = tr A = tr A1 = r1 . Procedendo per induzione, supponiamo di avere dimostrato che a1 = r1 , · · · , ak−1 = rk−1 e verifichiamo che ak = rk . In effetti si ha: Ak = Bk−1 A = (Ak−1 − rk−1 I)A = Ak−1 A − rk−1 A. Sostituendo Ak−1 con Ak−2 A − rk−2 A, eccetera, si ottiene Ak = Ak − r1 Ak−1 − r2 Ak−2 − · · · − rk−1 A = Ak − a1 Ak−1 − a2 Ak−2 − · · · − ak−1 A per ipotesi Quindi tr Ak = tr Ak − a1 tr Ak−1 − · · · − ak−1 tr A = Sk − a1 Sk−1 − · · · − ak−1 S = kak (relazione di Newton, con Si = λi ), da cui rk = ak . Applicando il teorema di Cayley–Hamilton si ha Bn = An − r1 An−1 − · · · − rn I = 0 da cui An − rn I = 0,

Bn−1 A = An = rn I

Se la matrice A `e non singolare si ha det(A) = p(0) = (−1)n−1 rn = 0 e quindi il risultato (5.29).

Problema 5.2 Analizzare il seguente metodo per il calcolo del polinomio caratteristico di una matrice A ∈ Rn×n . Dato un generico vettore y0 ∈ Rn , si considera il seguente sistema lineare, nelle incognite a1 , a2 , . . . , an a1 An−1 y0 + · · · + an−1 Ay0 + an Iy0 = −An y0 Il polinomio caratteristico relativo alla matrice A `e allora dato da p(λ) = λn + a1 λn−1 + · · · + an−1 λ + an = 0 analisi numerica

c V. Comincioli

270

Autovalori e autovettori

Soluzione. Il metodo proposto, noto come metodo di Krylov , `e basato sul teorema di Cayley–Hamilton. Ricordiamo che tale teorema stabilisce che la matrice definita da An + a1 An−1 + · · · + an−1 A + an I `e la matrice nulla. Per ottenere il risultato richiesto basta allora moltiplicare la precedente matrice per il vettore y0 . Consideriamo, come applicazione del metodo, il calcolo del polinomio caratteristico della seguente matrice ⎤ ⎡ −1 2 0 10 0 ⎢ 4 1 1 1 0 ⎥ ⎥ ⎢ ⎢ 1 3 9 7 ⎥ A=⎢ 0 ⎥ ⎣ 3 −1 −1 2 0 ⎦ 0 1 0 0 1 Si ottengono i seguenti vettori ⎤ ⎤ ⎡ ⎡ 1 −1 ⎢ 0 ⎥ ⎢ 4 ⎥ ⎥ ⎥ ⎢ ⎢ 2 ⎥ ⎥ ⎢ y0 = ⎢ 0 ⎥ , y1 = Ay0 = ⎢ ⎢ 0 ⎥ , y2 = A y0 ⎣ 0 ⎦ ⎣ 3 ⎦ 0 0 ⎤ ⎡ ⎡ −43 1231 ⎢ 189 ⎥ ⎢ 213 ⎥ ⎢ ⎢ 4 ⎥ ⎢ y3 = A3 y0 = ⎢ ⎢ 115 ⎥ , y4 = A y0 = ⎢ 1312 ⎣ 81 ⎦ ⎣ −271 7 196

⎡ ⎢ ⎢ =⎢ ⎢ ⎣ ⎤

39 3 31 −1 4

⎤ ⎥ ⎥ ⎥, ⎥ ⎦ ⎡

⎥ ⎢ ⎥ ⎢ ⎥ , y5 = A5 y0 = ⎢ ⎥ ⎢ ⎦ ⎣

−3515 6178 3082 1626 409

⎤ ⎥ ⎥ ⎥ ⎥ ⎦

Si considera quindi la matrice C = [y4 , y3 , y2 , y1 , y0 ] e il vettore b = −y5 . Il numero di condizionamento della matrice `e dato da µ2 (C) = 1.39 × 104 Tale numero dipende naturalmente anche dal particolare y0 scelto. Partendo ad esempio da y0 = [1, 1, 1, 1, 1]T si ottiene, come numero di condizionamento, della matrice il valore 2.360 103. La soluzione del sistema Ca = b fornisce i coefficienti del polinomio caratteristico. Si ottengono i seguenti valori a = [−6., −19., 225., −496., 813.] Il metodo di Krylov, pur essendo concettualmente semplice, pu`o presentare dal punto di vista numerico alcuni inconvenienti. Come si vede dalla valutazione del numero di condizionamento, la matrice dei coefficienti pu` o essere malcondizionata. La ragione `e nel fatto che i vettori An y0 tendono ad essere, per n crescente, numericamente linearmente dipendenti. D’altra parte, per particolari scelte di y0 la matrice pu`o essere singolare. Consideriamo, come semplice esempio di una situazione di questo tipo la matrice   1 1 A= 0 2 Se poniamo y0 = [α, β]T , si ottiene y1 = Ay0 = [α + β, 2β]T e quindi la matrice dei coefficienti [Ay0 , Iy0 ] `e data da   α+β α 2β β analisi numerica

c V. Comincioli

5.6 Complementi e Problemi

271

Il determinante si annulla quando: β 2 − αβ = 0, cio`e per β = 0 e β = α. Per le scelte corrispondenti u in generale, i vettori {y0 , Ay0 , . . . , An−1 y0 } di y0 il metodo diventa inapplicabile. Osserviamo che, pi` risultano linearmente dipendenti quando y0 `e combinazione lineare di al pi` u (n − 1) autovettori di A, cio`e y0 = c2 u2 + c3 u3 + · · · + cn un ove uk `e un autovettore corrispondente all’autovalore λk . Un altro possibile inconveniente numerico del metodo di Krylov deriva dal fatto che i coefficienti ai , calcolati risolvendo il sistema lineare, sono, in generale, affetti da errori di arrotondamento. Gli effetti di tali errori possono essere significativi, dal momento che, come abbiamo visto, il sistema pu`o essere malcondizionato. Di conseguenza il calcolo degli autovalori mediante la risoluzione dell’equazione caratteristica pu` o portare a risultati inaccettabili.

Problema 5.3 Data la seguente matrice circolante ⎡ a0 a1 a2 ⎢ a3 a0 a1 A=⎢ ⎣ a2 a3 a0 a1 a2 a3

⎤ a3 a2 ⎥ ⎥ a1 ⎦ a0

mostrare che esiste una matrice B tale che A = a0 I + a1 B + a2 B2 + a3 B3 A partire quindi dagli autovalori e autovettori di B, determinare gli autovalori e gli autovettori di A. Soluzione. Osserviamo che si pu`o scrivere ⎡

a0 ⎢ a3 A=⎢ ⎣ a2 a1

a1 a0 a3 a2

a2 a1 a0 a3

⎤ ⎡ a3 ⎢ a2 ⎥ ⎥ = a0 I + a1 ⎢ ⎦ ⎣ a1 a0 ⎡ 0 0 ⎢ 0 0 a2 ⎢ ⎣ 1 0 0 1

Il risultato richiesto si ottiene allora ponendo



0 ⎢ 0 ⎢ B=⎣ 0 1

1 0 0 0

0 1 0 0

0 0 0 1

1 0 0 0

1 0 0 0

0 1 0 0

⎤ 0 0 ⎥ ⎥+ 1 ⎦ 0 ⎡ 0 ⎢ 1 ⎥ ⎥ + a3 ⎢ ⎣ 0 ⎦ 0 0 1 0 0 ⎤

0 0 1 0

0 0 0 1

⎤ 1 0 ⎥ ⎥ 0 ⎦ 0

⎤ 0 0 ⎥ ⎥ 1 ⎦ 0

Se x `e un autovettore di B corrispondente a un autovettore λB di B, e quindi Bx = λB x, segue che B2 x = λ2B x, da cui

B3 x = λ3B x

Ax = (a0 I + a1 B + a2 B2 + a3 B3 )x = (a0 + a1 λB + a2 λ2B + a3 λ3B )x

e quindi x `e un autovettore di A che corrisponde all’autovalore λA = a0 + a1 λB + a2 λ2B + a3 λ3B . D’altra parte si vede facilmente che gli autovalori di B sono soluzioni di λ4 − 1 = 0, cio`e 1, i, −1 − i. In definitiva si hanno per A i seguenti autovalori a0 +a1 +a2 +a3 ; a0 +ia1 −a2 −ia3 ; a0 −a1 +a2 −a3 ; a0 −ia1 −a2 +ia3 analisi numerica

c V. Comincioli

272

Autovalori e autovettori

Problema 5.4 Mostrare, mediante esempi, che se αi e βi sono gli autovalori rispettivamente della matrice A e della matrice B non `e in generale vero che gli autovalori di AB e di A + B sono αi βi e αi + βi , indipendentemente dall’ordine assunto. Dare condizioni su A e su B affinch´e questo sia vero. Soluzione. Ad esempio le matrici



A=

0 0

1 0



 ;

B=

0 1

0 0



hanno entrambe gli autovalori 0, 0, ma la somma A+B ha gli autovalori ±1 e il prodotto AB gli autovalori 1, 0. Una condizione sufficiente `e che B sia un polinomio nella matrice A. Ricordiamo, infatti, che gli autovalori della matrice p(A), con p polinomio generico assegnato, sono dati da p(α), se α sono gli autovalori di A.

Problema 5.5 Date due matrici A e B quadrate dello stesso ordine, dimostrare che le due matrici AB e BA hanno lo stesso polinomio caratteristico. Soluzione. Nel caso in cui una delle due matrici `e non singolare, ad esempio A, si ha che le due matrici AB e BA sono simili, dal momento che BA = A−1 (AB)A e quindi hanno lo stesso polinomio caratteristico. In caso contrario, si pu` o utilizzare un ragionamento di continuit`a. Infatti, supposta A singolare, esiste un ¯ > 0 tale che le matrici (A + I) sono invertibili per 0 < || < ¯ . Per quanto ora visto, si ha che le matrici (A + I)B e B(A + I) hanno lo stesso polinomio caratteristico. Essendo i coefficienti del polinomio caratteristico funzioni continue di , si ha pAB (λ) = lim p(A+I)B (λ) = lim pB(A+I) (λ) = pBA (λ), ∀λ ∈ C →0

→0

Problema 5.6 Analizzare il problema di autovalori generalizzato: Ax = λBx quando A, B sono matrici triangolari di ordine 2. Soluzione. Posto

 A=

a11 0

a12 a22



 ,

B=

b11 0

b12 b22



il problema di autovalori generalizzato ha soluzioni per   a11 − λb11 a12 − λb12 det = (a11 − λb11 ) (a22 − λb22 ) = 0 0 a22 − λb22 Pertanto, se b11 e b22 sono ambedue differenti da zero, cio`e la matrice B `e non singolare, allora esistono due autovalori, dati rispettivamente da λ1 = a11 /b11 e λ2 = a22 /b22 . Consideriamo ora i casi in cui uno degli elementi diagonali della matrice B siano nulli. (a) Se a11 = b11 = 0, allora det(A − λB) = 0 per ogni λ. Quindi ogni λ `e autovalore. Lo stesso risultato si ha quando a22 = b22 = 0. analisi numerica

c V. Comincioli

5.6 Complementi e Problemi

273

(b) Se b11 = b22 = 0, allora det(A − λB) = a11 a22 , che non `e mai nullo se ambedue gli elementi a11 , a22 sono differenti da zero. (c) Se b11 = 0, allora det(A − λB) = a11 (a22 − λb22 ), che si annulla solo per λ = a22 /b22 . Se b22 = 0, ma sia a22 che b11 sono differenti da zero, allora vi `e un unico autovalore. Sottolineiamo che in tutti i casi considerati la matrice B `e singolare. In caso contrario il problema sarebbe equivalente al problema di autovalori B−1 Ax − λx = 0 e vi sarebbero in C due autovalori.

Problema 5.7 Date due matrici quadrate A e B, con B matrice simmetrica e definita positiva, considerare il problema di autovalori (AB)x = λx Soluzione. Sia LLT la fattorizzazione di Cholesky della matrice B. Mostriamo allora che gli autovalori

della matrice AB sono gli stessi della matrice LT AL, che risulta simmetrica nel caso in cui anche A sia simmetrica. Si ha, infatti LT (AB)L−T = LT ALLT L−T = LT AL

` sufficiente allora ricordare che le trasformazioni per similitudine lasciano invariato lo spettro della matrice. E Se y `e un autovettore della matrice LT AL, allora il corrispondente autovettore di AB `e dato da x = L−T y.

Problema 5.8 Sia A una matrice hermitiana definita positiva con autovalori λ1 ≥ λ2 ≥ . . . λn > 0. Mostrare che per ogni vettore x = 0 `e verificata la seguente disuguaglianza, nota come disuguaglianza di Kantorovich  2 (µ2 (A))1/2 + (µ2 (A))−1/2 (Ax, x)(A−1 x, x) ≤ 1≤ 4 x42 ove µ2 (A) `e il numero di condizionamento di A rispetto alla norma spettrale, e quindi µ2 (A) = λ1 /λn . Soluzione. Poich´e la matrice A `e hermitiana, esiste una matrice unitaria U tale che U∗ AU = D, ove D `e la matrice diagonale formata dagli autovalori λi di A. Poniamo y = U∗ x, per x = 0, e quindi y = 0, essendo x2 = y2 . Abbiamo n (Ax, x) = (UDU∗ x, x) = (DU∗ x, U∗ x) = (Dy, y) = λi |yi |2 i=1

e (A−1 x, x) = (D−1 y, y) =

n |yi |2 i=1

Pertanto

Posto αi = |yi |2 /(

(Ax, x)(A−1 x, x) = (x, x)2 n j=1

|yj |2 ), si ha αi ≥ 0 e

n i=1

n i=1

λi

λi |yi |2  n

n 2 i=1 |yi | /λi 2 2 i=1 |yi |

αi = 1. Con queste notazioni si ha

n n (Ax, x)(A−1 x, x) αi = α λ i i 2 (x, x) λ i=1 i=1 i

analisi numerica

c V. Comincioli

274

Autovalori e autovettori

Siano {Mi } i punti di coordinate (λi , 1/λi ) per 1 ≤ i ≤ n. Tali punti quindi sono su un ramo di iperbole equilatera. Consideriamo ora il punto n M= αi Mi i=1

che risulta una combinazione lineare convessa dei punti Mi . La sua ordinata ni=1 αi /λi `e minore di quella ¯ del punto M ¯ = n αi λi situata sul segmento di retta che congiunge M1 a Mn ed `e ¯ di ascissa λ y(λ) i=1 ¯ maggiore di 1/λ. Quindi n n ¯% $ 1 αi ¯ ¯ y(λ) ¯ =λ ¯ λn + λ1 − λ λ¯ ≤ αi λi ≤λ λ λn λ1 λ i=1 i=1 i

Ora il valore max

¯ λn ≤λ≤λ 1

¯ ¯ n + λ1 − λ) λ(λ λn λ1

¯ = (λn + λ1 )/2 e vale (λn + λ1 )2 /(4λn λ1 ). Si `e pertanto dimostrato che `e ottenuto per λ 1 (Ax, x)(A−1 x, x) ≤ 1≤ x42 4 ≤

Problema 5.9 Data la matrice

0

λ1 + λn

0

λn λ1

2

2 1 (µ2 (A))1/2 + (µ2 (A))−1/2 4



⎤ 4 1 2 A=⎣ 1 3 1 ⎦ 1 0 10

localizzarne gli autovalori mediante il teorema di Gershgorin. Soluzione. Consideriamo nel piano complesso C i seguenti cerchi (cfr. Figura 5.4) C1 := {z ∈ C | |z − 4| ≤ 3}; C3 := {z ∈ C | |z − 10| ≤ 1}

C2 := {z ∈ C | |z − 3| ≤ 2}

Gli autovalori di A appartengono alla unione ∪3i=1 Ci . Poich´e C1 e C2 sono disgiunti da C3 , vi sono esattamente due autovalori appartenenti all’unione di C1 , C2 e uno a C3 . Inoltre, dal momento che ρ(A) = max1≤i≤3 |λi |, si ha 9 ≤ ρ(A) ≤ 11. In effetti gli autovalori son dati da: λ1 = 4.2895;

λ2 = 2.3664;

λ3 = 10.3441

Problema 5.10 Studiare il condizionamento del problema del calcolo degli autovettori della seguente matrice   1 +  cos(2/) − sin(2/) A() = − sin(2/) 1 −  cos(2/) per  > 0 e tendente a zero. analisi numerica

c V. Comincioli

5.7 Esperienze in Matlab

275

6

4

2

0

X

X

X

-2

-4

-6 0

2

4

6

8

10

12

Figura 5.4 Cerchi di Gershgorin e rappresentazione degli autovalori (x). Soluzione. Si verifica direttamente che gli autovalori della matrice A() sono λ1,2 = 1± e gli autovettori corrispondenti, normalizzati a 1, sono rispettivamente $ 1% 1 p(1) () = cos , − sin ;  

$ 1% 1 p(2) () = sin , cos ;  

Esaminiamo ora il limite degli autovettori p(i) () per  → 0, tenendo conto che lim A() = I

→0

Ora per  = 2/(π(1 + 2k)), k ≥ 1 la prima componente di p(1) () vale zero mentre per  = 1/(2πk) vale ±1. La successione degli autovettori p(1) () non ha pertanto limite. Analoga osservazione per p(2) (). La conclusione `e che per  piccolo il problema del calcolo degli autovettori della matrice A() `e malcondizionato.

5.7

Esperienze in Matlab

5.7.1

Esempio di matrice con autovalori malcondizionati

function %FRANK % % % % % % % % %

F = frank(n, k) Frank matrix---ill conditioned eigenvalues. F = FRANK(N, K) is the Frank matrix of order N. It is upper Hessenberg with determinant 1. K = 0 is the default; if K = 1 the elements are reflected about the anti-diagonal (1,N)--(N,1). F has all positive eigenvalues and they occur in reciprocal pairs (so that 1 is an eigenvalue if N is odd). The eigenvalues of F may be obtained in terms of the zeros of the Hermite polynomials. The FLOOR(N/2) smallest eigenvalues of F are ill conditioned, the more so for bigger N.

%

DET(FRANK(N)’) comes out far from 1 for large N---see Frank (1958)

analisi numerica

c V. Comincioli

276

% % % % % % % % % % % % % % % % % % % % % % % %

Autovalori e autovettori

and Wilkinson (1960) for discussions. This version incorporates improvements suggested by W. Kahan. References: W.L. Frank, Computing eigenvalues of complex matrices by determinant evaluation and by methods of Danilewski and Wielandt, J. Soc. Indust. Appl. Math., 6 (1958), pp. 378-392 (see pp. 385, 388). G.H. Golub and J.H. Wilkinson, Ill-conditioned eigensystems and the computation of the Jordan canonical form, SIAM Review, 18 (1976), pp. 578-619 (Section 13). H. Rutishauser, On test matrices, Programmation en Mathematiques Numeriques, Editions Centre Nat. Recherche Sci., Paris, 165, 1966, pp. 349-365. Section 9. J.H. Wilkinson, Error analysis of floating-point computation, Numer. Math., 2 (1960), pp. 319-340 (Section 8). J.H. Wilkinson, The Algebraic Eigenvalue Problem, Oxford University Press, 1965 (pp. 92-93). The next two references give details of the eigensystem, as does Rutishauser (see above). P.J. Eberlein, A note on the matrices denoted by B_n, SIAM J. Appl. Math., 20 (1971), pp. 87-92. J.M. Varah, A generalization of the Frank matrix, SIAM J. Sci. Stat. Comput., 7 (1986), pp. 835-839.

if nargin == 1, k = 0; end p = n:-1:1; F = triu( p( ones(n,1), :) - diag( ones(n-1,1), -1), -1 ); if k ~= 0 F = F(p,p)’; end %%%%% calcolare condeig(F)

5.7.2

Esempio di Wilkinson



1 1 ⎢ 1 2 1 ⎢ ⎢ 1 3 ⎢ Wn = ⎢ .. ⎢ . ⎢ ⎣

⎤ ⎥ ⎥ ⎥ 1 ⎥ ⎥ .. .. ⎥ . . ⎥ 1 n−1 1 ⎦ 1 n

n=25; on=ones(n-1,1); A=diag(on,-1)+diag(1:n)+diag(on,1); condeig(A) % numeri di condizionamento dei singoli autovalori; % trattandosi di una matrice simmetrica sono tutti uguali a 1 lam=eig(A);lam0=roots(poly(A)); [sort(lam) sort(lam0)] 0.2538 0.2538 1.7893 1.7893 analisi numerica

c V. Comincioli

5.7 Esperienze in Matlab

2.9611 3.9960 4.9998 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 20.0000 21.0002 22.0040 23.0389 24.2107 25.7462

2.9611 3.9960 4.9998 6.0000 6.9992 8.0173 8.8615 10.0632 10.0632 11.7836 11.7836 13.8498 13.8498 16.2448 16.2448 18.8233 18.8233 21.2999 21.2999 23.3489 23.3489 24.5680 25.7268

277

+ + + + + + +

0.7519i 0.7519i 1.7022i 1.7022i 2.5227i 2.5227i 3.0285i 3.0285i 3.0247i 3.0247i 2.4125i 2.4125i 1.2901i 1.2901i

Osserviamo che la funzione roots `e basata sulla costruzione della matrice companion corrispondente al polinomio caratteristico della matrice A e quindi nell’applicazione di eig a tale matrice. Pertanto, la differenza nei risultati ottenuti `e dovuta unicamente all’effetto degli errori di arrotondamento.

5.7.3

Metodo QR

%%%%%provaqr dimostrazione del metodo qr per autovalori a=2*ones(n,1); b=-ones(n,1); c=b; A=diag(b(2:n),-1)+diag(a)+diag(c(1:n-1),1) sum(abs(diag(A,-1))) for k=1:20 [Q,R]=qr(A); A=R*Q; end sum(abs(diag(A,-1))) [diag(A), eig(A)]

The concrete problems form in their variety the core and soul of mathematics.

H. Weyl

analisi numerica

c V. Comincioli

Prediction is difficult, especially of the future.

Niels Bohr

CAPITOLO

6 Approssimazione di funzioni

Il problema dell’approssimazione di funzioni, di importanza fondamentale nella matematica applicata, consiste nella sostituzione di una funzione complicata con una pi` u semplice, scelta nell’ambito di una classe fissata di funzioni a dimensione finita. Per chiarire il senso di tale affermazione, esaminiamo due situazioni in cui si pu` o presentare la necessit`a di un’operazione di questo tipo. • Della funzione da approssimare f (x) non `e nota una espressione analitica, ma di essa si conoscono alcuni valori yi in corrispondenza ad un insieme di punti xi , i = 0, . . . , n, e si vuole avere ` il caso di una funzione assegnata indicazioni sul comportamento della funzione in altri punti. E sotto forma di tabella finita, corrispondente, ad esempio, ad un insieme di dati sperimentali . In questo caso approssimare la funzione f (x) significa fornire un modello rappresentativo del fenomeno che ha dato origine ai dati sperimentali. In tale senso, quello che vedremo in questo capitolo costituisce una introduzione alla modellizzazione matematica. • La funzione `e nota in forma analitica, ma la sua sostituzione con funzioni pi` u semplici `e richiesta per il suo calcolo numerico su calcolatore, oppure per rendere pi` u agevoli certe operazioni funzionali, quali ad esempio l’integrazione o la derivazione. Naturalmente, il problema pu`o essere affrontato con differenti tecniche, che per essere adeguate devono tenere conto della situazione specifica. Importante in questo senso `e la scelta della distanza con la quale si vuole approssimare e che misura l’errore. Ad esempio, per approssimare dati sperimentali affetti da variabilit` a statistica, pu`o essere opportuna una distanza di tipo minimi quadrati , definita dalla somma dei quadrati degli errori nei singoli nodi xi ; se invece il numero dei dati `e piccolo e i dati non sono affetti da errori casuali, pu` o essere adeguata una operazione di interpolazione, basata sulla richiesta che la funzione approssimante passi esattamente per i punti (xi , yi ) assegnati. Infine, quando si approssima la funzione f (x) allo scopo di avere una procedura di calcolo da utilizzare su calcolatore, si richiede che l’approssimazione presenti un errore distribuito in maniera uniforme su un determinato intervallo; in questo caso una distanza appropriata `e rappresentata dalla cosiddetta norma del massimo, definita come il massimo del modulo della differenza tra la funzione e la sua approssimante per tutti i punti dell’intervallo. In questo capitolo esamineremo dapprima la tecnica dell’interpolazione (o collocazione), che costituisce, in particolare, la base di partenza per la costruzione di diversi metodi numerici per 278

6.1 Interpolazione

279

il calcolo di integrali definiti e per l’approssimazione della soluzione di equazioni differenziali. Successivamente, daremo una introduzione alle idee di base nell’approssimazione polinomiale nel senso dei minimi quadrati e nella norma del massimo (nota anche come miglior approssimazione).

6.1

Interpolazione

In maniera schematica, la procedura di interpolazione1 `e definita nel modo seguente. Dati i valori fi = f (xi ) di una funzione f (x) nei punti x1 , x2 , . . . , xn+1 dell’asse reale, si cerca una funzione P (x) tale che P (xi ) = fi , i = 1, 2, . . . , n + 1 Si dice allora che la funzione P (x) interpola f (x) nei punti (o nodi ) xi , i = 1, . . . , n + 1. Quando la funzione di interpolazione P (x) `e utilizzata per stimare il valore della funzione f (x) al di fuori dell’intervallo formato dai punti xi , si parla solitamente di una operazione di estrapolazione. Come funzioni interpolanti P (x) possono essere utilizzati differenti tipi di funzioni; ad esempio, i polinomi algebrici, i polinomi trigonometrici, le funzioni razionali, ecc. Nel seguito, ci limiteremo, per brevit` a, alla considerazione dei polinomi algebrici e alle funzioni che sono costruite a partire dai polinomi, in particolare le funzioni polinomiali a tratti, o funzioni spline. In effetti, l’insieme dei polinomi algebrici costituisce, per ragioni sia storiche che pratiche, la pi` u importante classe di funzioni interpolanti. Essi hanno in particolare il vantaggio di essere facilmente calcolabili; inoltre, per essi possono essere eseguite agevolmente le operazioni di somma, moltiplicazione, integrazione e derivazione. Naturalmente, le ragioni precedenti non sono sufficienti per far ritenere i polinomi una “buona classe” di funzioni approssimanti. A tale scopo occorre anche che i polinomi siano in grado di “descrivere” adeguatamente funzioni anche non “troppo” regolari. Una risposta positiva a questo requisito `e fornita dal seguente importante risultato, che in sostanza assicura la possibilit`a di approssimare mediante un polinomio di grado conveniente una qualsiasi funzione continua f (x) su un intervallo limitato e chiuso. Teorema 6.1 (Weierstrass) Se f (x) `e una generica funzione continua sull’intervallo limitato e chiuso [a, b], per ogni  > 0 esiste un polinomio Pn (x) di grado n(), cio`e di grado dipendente da , tale che max |f (x) − Pn (x)| <  x∈[a, b]

Osserviamo, comunque, che il teorema di Weierstrass2 assicura l’esistenza del polinomio appros1

Indicata in forma espressiva come la scienza of reading between the lines of a mathematical table da G. Robinson, che insieme a E. Whittaker pubblic` o nel 1924 quello che pu` o essere considerato il primo testo dell’analisi numerica moderna. 2 ¨ Karl Weierstrass (1815-1897) diede una dimostrazione non costruttiva del teorema nel lavoro Uber die analytische Darstellbarkeit sogenannter willk¨ urlicher Funktionen reeller Argumente (Sitzg. ber. Kgl. Preuss. Akad. d. Wiss. Berlin, 1885). Weierstrass `e considerato uno dei fondatori della moderna teoria delle funzioni; in particolare, diede notevole impulso allo studio delle serie di potenze e alle applicazioni della matematica alla risoluzione di problemi in fisica e astronomia. Altre interessanti dimostrazioni del teorema di approssimazione furono date da E. Landau (1908) e H. Lebesgue (1908); ricordiamo anche una sua generalizzazione agli spazi topologici dovuta a M. H. Stone (1948). Una approssimazione costruttiva venne data, nell’ambito della teoria della probabilit` a, da S. H. Bernstein (D´emonstration du th´eor`eme de Weierstrass fonde´e sur le calcul des probabilit´es, 1912) utilizzando la particolare successione di polinomi (detti poi polinomi di Bernstein) che analizzeremo nel seguito del capitolo (cfr. paragrafo 6.1.9). analisi numerica

c V. Comincioli

280

Approssimazione di funzioni

simante, ma non implica che tale polinomio sia un particolare polinomio di interpolazione. In sostanza, mentre `e confortante sapere che `e possibile approssimare una funzione continua f (x) con una fissata accuratezza mediante un polinomio, non `e garantito che tale polinomio possa essere ottenuto con un algoritmo conveniente.

6.1.1

Interpolazione mediante polinomi

Consideriamo il seguente esempio introduttivo. Esempio 6.1 Determinare il polinomio di secondo grado che interpola i seguenti valori xi fi

0.2 0.3456

0.8 0.5867

1.2 0.2151

Se scriviamo il polinomio nella seguente forma P (x) = c0 + c1 (x − 0.2) + c2 (x − 0.2)(x − 0.8) le condizioni P (xi ) = fi forniscono il sistema lineare c0 = 0.3456 c0 +c1 (0.8 − 0.2) = 0.5867 c0 +c1 (1.2 − 0.2)+c2 (1.2 − 0.2)(1.2 − 0.8) = 0.2151 Trattandosi di un sistema di tipo triangolare, la soluzione `e calcolata con una semplice sostituzione in avanti e si ottengono i valori c0 = 0.3456;

c1 = 0.4018;

c2 = −1.3308

da cui il polinomio (cfr. Figura 6.1) P (x) = 0.3456 + 0.4018(x − 0.2) − 1.3308(x − 0.2)(x − 0.8) Osserviamo che i primi due termini del polinomio P (x) sono l’equazione della retta che interpola f nei punti x = 0.2 e x = 0.8. Come si vede, il polinomio interpolatore di secondo grado `e ottenuto semplicemente aggiungendo al polinomio interpolatore di primo grado un opportuno polinomio di secondo grado.

Il risultato di base per l’interpolazione polinomiale `e il seguente teorema. Teorema 6.2 (Esistenza e unicit` a) Siano x1 , x2 , . . . , xn+1 n + 1 punti distinti arbitrari. Per ogni insieme di valori f1 , f2 , . . . , fn+1 esiste uno ed un solo polinomio Pn (x) di grado ≤ n tale che Pn (xi ) = fi ,

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

Dimostrazione. Incominciamo a dimostrare l’unicit`a . Ragionando per assurdo, supponiamo che esistano due differenti polinomi Pn (x) e Qn (x) di grado ≤ n che verificano le condizioni Pn (xi ) = fi Qn (xi ) = fi

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

Questo significa che il polinomio Pn (x) − Qn (x), di grado minore o uguale a n, ha n + 1 zeri distinti, corrispondenti ai nodi x1 , x2 , . . . , xn+1 . In base al teorema fondamentale dell’algebra, tale polinomio deve essere identicamente nullo, cio`e Pn (x) ≡ Qn (x). analisi numerica

c V. Comincioli

6.1 Interpolazione

281

Figura 6.1 Con linea continua `e rappresentato il polinomio interpolatore di secondo grado relativo ai punti (0.2, 0.3456), (0.8, 0.5867), (1.2, 0.2151) e con linea tratteggiata il polinomio interpolatore di primo grado relativo ai punti (0.2, 0.3456), (0.8, 0.5867). L’esistenza pu` o essere dimostrata in differenti maniere. Ci limitiamo a segnalare le due seguenti, di interesse costruttivo, cio`e algoritmico (cfr. successivo paragrafo 6.1.3). Riprendendo l’idea suggerita dall’Esempio 6.1, si pu` o procedere per induzione su n nel modo seguente. Per n = 1 si verifica direttamente che il polinomio di interpolazione `e dato da P1 (x) = f1 +

f2 − f1 (x − x1 ) x2 − x1

Assumendo, ora, che Pk−1 (x) sia un polinomio di grado ≤ k − 1 tale che Pk−1 (xi ) = fi ,

i = 1, 2, . . . , k

mostriamo che esiste un polinomio Pk , di grado ≤ k interpolante f nei nodi x1 , x2 , . . . , xk+1 . Poniamo Pk (x) = Pk−1 (x) + c(x − x1 )(x − x2 ) · · · (x − xk ) Il polinomio Pk (x) ha grado ≤ k. Inoltre Pk (xi ) = fi ,

i = 1, 2, . . . , k

o determinare c in maniera che Poich´e i punti x1 , x2 , . . . , xk+1 sono distinti, si pu` Pk (xk+1 ) = fk+1 ⇒ c =

fk+1 − Pk−1 (xk+1 ) (xk+1 − x1 )(xk+1 − x2 ) · · · (xk+1 − xk )

Allora, Pk `e il polinomio di grado ≤ k che interpola f in x1 , x2 , . . . , xk+1 . Un secondo modo di dimostrare l’esistenza consiste nel fornire una rappresentazione esplicita del polinomio di interpolazione. A tale scopo consideriamo i seguenti polinomi di grado n Li (x) =

(x − x1 ) · · · (x − xi−1 )(x − xi+1 ) · · · (x − xn+1 ) (xi − x1 ) · · · (xi − xi−1 )(xi − xi+1 ) · · · (xi − xn+1 )

(6.1)

per i = 1, 2, . . . , n + 1. Tali polinomi sono i particolari polinomi di interpolazione che assumono il valore zero nei punti xj , con j = i, e il valore 1 nel punto xi (per un esempio si veda Figura 6.2). Si verifica, allora, analisi numerica

c V. Comincioli

282

Approssimazione di funzioni

facilmente la seguente rappresentazione del polinomio di interpolazione Pn (x), detta rappresentazione di Lagrange 3 n+1 Pn (x) = fi Li (x) (6.2) i=1

Figura 6.2 Polinomi di Lagrange Li (x) relativi a 5 punti equidistanti sull’intervallo [0, 1]. function v = polyinterp(x,y,u) %POLYINTERP interpolazione polinomiale % v = POLYINTERP(x,y,u) calcola v(j) = P(u(j)) ove P ` e % polinomio di grado d = length(x)-1 con P(x(i)) = y(i). % Utilizza la rappresentazione di Lagrange n = length(x); v = zeros(size(u)); for k = 1:n w = ones(size(u)); for j = [1:k-1 k+1:n] w = (u-x(j))./(x(k)-x(j)).*w; end v = v + w*y(k); end

6.1.2

Errore di troncamento nella interpolazione

Nei nodi xi il polinomio di interpolazione assume, per definizione, i valori fi e pertanto in tali punti l’errore `e nullo, almeno se si prescinde dagli errori di arrotondamento. Lo studio dell’errore ha quindi senso per valori di x = xi e quando fi = f (xi ), con f (x) funzione assegnata su 3

La formula di rappresentazione (6.2) appare, in effetti, in un lavoro di Lagrange del 1795, ma era stata precedentemente utilizzata da Eulero (1755) e Waring (1779). Lo studio delle formule di interpolazione prende soa di costruire tabelle di valori delle funzioni stanzialmente avvio a partire dal 17◦ secolo, a seguito della necessit` trigonometriche e dei logaritmi. Lo sviluppo della teoria `e legata, in particolare, ai nomi di T. Harriot (1611), H. Briggs (1617), I. Newton (1642-1727), J. Gregory (1638-1675), B. Taylor (1685-1731), C. Maclaurin (1698-1746), J. Stirling (1692-1770) e K. F. Gauss (1777-1855). analisi numerica

c V. Comincioli

6.1 Interpolazione

283

un determinato intervallo. Si chiama allora errore di troncamento di interpolazione la quantit` a E(x) := f (x) − Pn (x), e una sua stima `e importante per un corretto utilizzo pratico del polinomio di interpolazione. Si intuisce, comunque, che una tale stima non `e ottenibile con la sola conoscenza della funzione f (x) nei nodi xi ; ad esempio, per una funzione discontinua l’errore di troncamento pu` o essere arbitrariamente grande. In effetti, la regolarit`a della funzione f (x) pu` o essere opportunamente utilizzata per fornire una rappresentazione dell’errore, dalla quale, almeno in teoria, `e possibile ricavare una maggiorazione dell’errore e una indicazione sul suo comportamento al variare del numero e della collocazione dei nodi xi . Importante in questo senso `e il seguente risultato che ricordiamo senza dimostrazione, che `e comunque una semplice conseguenza del Teorema di Rolle. Teorema 6.3 (Rappresentazione dell’errore di interpolazione) Sia f (x) una funzione con n + 1 derivate continue in un intervallo I = [a, b] contenente i punti xi , i = 1, 2, . . . , n + 1. Se Pn (x) `e il polinomio di interpolazione della funzione f (x) nei punti {xi }, allora per ogni x ∈ [a, b] esiste un punto ξ = ξ(x) ∈ (a, b), tale che E(x) := f (x) − P (x) =

f (n+1) (ξ) (x − x1 )(x − x2 ) · · · (x − xn+1 ) (n + 1)!

(6.3)

La formula (6.3) mette in evidenza il fatto importante che l’errore di interpolazione dipende sia dal comportamento della derivata di ordine n+1 della funzione interpolata, sia dalla scelta, attraverso il polinomio π(x) := (x − x1 )(x − x2 ) · · · (x − xn+1 ), dei nodi xi e del punto di valutazione x del polinomio interpolatore. Illustreremo il risultato mediante un esempio.

Figura 6.3 Illustrazione della dipendenza dalla derivata seconda dell’errore di troncamento nella interpolazione lineare.

Esempio 6.2 Se f (x) `e due volte continuamente derivabile ed `e approssimata per x1 ≤ x ≤ x2 = x1 + h mediante una interpolazione lineare nei punti (x1 , f1 ) e (x2 , f2 ), dalla rappresentazione (6.3) si ha |f (x)−P1 (x)| = analisi numerica

f  (ξ(x)) f  (ξ(x1 +sh)) 2 (x−x1 )(x−x2 ) ⇒ |f (x)−P1 (x)| = h s(s−1) 2! 2!

(6.4)

c V. Comincioli

284

Approssimazione di funzioni

ove si `e posto x = x1 + sh. Tenendo conto che max0≤s≤1 |s (s − 1)| = 14 , si ha quindi |f (x) − P1 (x)| ≤

h2 8

max

x1 ≤x≤x1 +h

|f  (x)|

(6.5)

La Figura 6.3 evidenzia in maniera grafica l’importanza per l’errore di troncamento del comportamento della derivata seconda. √ Come esemplificazione, consideriamo la funzione f (x); = x, per x > 0. Utilizziamo il √polinomio di interpolazione di primo grado corrispondente ai punti (0.25, 0.5), (0.49, 0.7) per calcolare 0.35. Dalla rappresentazione di Lagrange si ha P1 (x) = 0.5

x − x2 x − x1 0.5 0.7 (x − x2 ) + (x − x1 ) + 0.7 =− x1 − x2 x2 − x1 0.24 0.24

√ da cui P1 ( 0.35) = 0.583, √ con un errore pari a 0.008274644. Tenendo conto che il modulo della derivata  x3 ) assume il valore massimo nel primo estremo x1 , la stima (6.5) fornisce la seconda f (x) = −1/(4 √ 2 3 limitazione h /(16 0.25 ) = 0.0288.

6.1.3

Costruzione del polinomio di interpolazione

Nel Teorema 6.2 sono stati introdotti due differenti modi per costruire il polinomio di interpolazione relativo ai nodi x1 , x2 , . . . , xn+1 . Analizzeremo, ora, tali procedure dal punto di vista computazionale. Incominciamo a ricordare che la rappresentazione di Lagrange (6.2) `e la base per la costruzione di formule di quadratura e di schemi alle differenze per l’approssimazione della soluzione di equazioni differenziali ed ha quindi un indubbio interesse teorico. Dal punto di vista pratico, ossia per il calcolo effettivo del polinomio di interpolazione, essa pu` o risultare vantaggiosa quando si considera la costruzione di polinomi di interpolazione relativi allo stesso insieme di nodi xi e a differenti dati fi . In tale caso, infatti, i polinomi Li (x), che dipendono solo dai punti xi , possono essere calcolati a priori una sola volta. Al contrario, quando si costruiscono polinomi di interpolazione di grado crescente, cio`e si aggiungono ulteriori punti per migliorare la precisione, i polinomi Li (x) devono essere successivamente ricostruiti. In tali situazioni risultono allora pi` u convenienti altre procedure. In particolare, esamineremo un algoritmo basato sulla rappresentazione di Newton, e utile per fornire i coefficienti del polinomio, e l’algoritmo di Neville, che fornisce il valore del polinomio in un punto particolare. A scopo didattico esaminiamo dapprima una costruzione pi` u diretta, ma in generale meno conveniente. Essa consiste, come illustrato nelle successive implementazioni, nella risoluzione del sistema lineare aventi come incognite i coefficienti del polinomio interpolatore. % % % % % % % %

function a = InterpV(x,y) a = InverpV(x,y) Calcola la matrice dei coefficienti (matrice di Vandermonde) x e y sono due vettori colonna di ordine n e x ha componenti distinte a ` e un vettore colonna di ordine n tale che se p(x) = a(1) + a(2)x + ... a(n)x^(n-1) allora p(x(i)) = y(i), i=1:n

analisi numerica

c V. Comincioli

6.1 Interpolazione

285

n = length(x); V = ones(n,n); for j=2:n % costruisce la colonna j. V(:,j) = x.*V(:,j-1); end a = V\y; ---------

% % % % % % %

function pVal = HornerV(a,z) pVal = HornerV(a,z) calcola il polinomio interpolante in z (vettore di ordine m) pVal e ` un vettore dello stesso ordine di z con la propriet` a che se p(x) = a(1) + .. +a(n)x^(n-1) allora pVal(i) = p(z(i))

,

i=1:m.

n = length(a); m = length(z); pVal = a(n)*ones(size(z)); for k=n-1:-1:1 pVal = z.*pVal + a(k); end

% Script File: ShowV % grafico del polinomio di interpolazione di terzo grado in 4 punti random % della funzione sin(x) su [0,2pi]. % Usa il metodo di Vandermonde. close all x0 = linspace(0,2*pi,100)’; y0 = sin(x0); for eg=1:4 x = 2*pi*sort(rand(4,1)); y = sin(x); a = InterpV(x,y); pVal = HornerV(a,x0); subplot(2,2,eg) plot(x0,y0,x0,pVal,’--’,x,y,’*’) axis([0 2*pi -2 2]) end

Polinomio di interpolazione di Newton Un polinomio di grado n ≥ 1 pu` o essere scritto in differenti forme tra loro equivalenti. In particolare, dati i punti xi , i = 1, 2, . . . , n + 1, si chiama rappresentazione di Newton la seguente forma P (x) = c0 + c1 (x − x1 ) + c2 (x − x1 )(x − x2 ) + · · · + cn (x − x1 )(x − x2 ) · · · (x − xn )

(6.6)

A partire da tale rappresentazione, il valore di P (x) in un particolare punto x = z pu` o essere ottenuto mediante l’algoritmo di Horner-Ruffini, adattato nel seguente modo. Mettendo in evidenza analisi numerica

c V. Comincioli

286

Approssimazione di funzioni

Figura 6.4 Interpolazione della funzione sin(x) con un polinomio di terzo grado in quattro punti scelti random su [0, 2π].

i fattori comuni, si ha P=C(N)

P (x) = c0 +(x−x1 )(c1 +(x−x2 )(c2 +· · ·+cn (x−xn ) · · · )) ⇐⇒ DO 2 I=N,1,-1 2 P=P*(Z-X(I))+C(I-1)

Quando P (x) `e il polinomio di interpolazione corrispondente ai punti (xi , fi ), i = 1, 2, . . . , n + 1, i coefficienti ci possono essere calcolati dalle condizioni P (xi ) = fi con una procedura iterativa che introdurremo nel caso n = 2, ossia = f1 c0 c0 + c1 (x2 − x1 ) = f2 c0 + c1 (x3 − x1 ) + c2 (x3 − x1 )(x3 − x2 ) = f3 da cui, mediante sostituzione f2 − f1 x2 − x1 x3 − x1 f2 − f1 f3 − f1 (f2 − f1 ) − f3 − f1 − x2 − x1 x − x1 x2 − x1 c2 = = 3 (x3 − x1 )(x3 − x2 ) x3 − x2 c0 = f1 ,

c1 =

Dalle relazioni precedenti si vede che i coefficienti c1 , c2 sono delle approssimazioni rispettivamente della derivata prima e seconda, ossia hanno un significato di “rapporti incrementali”; inoltre, il coefficiente c2 pu` o essere facilmente calcolato quando si conoscono i rapporti incrementali di ordine inferiore. La procedura pu`o essere generalizzata nel modo seguente. Indicando, per k = 1, 2, . . . , n, con Pk (x) il polinomio di grado non superiore a k che interpola i punti (xi , fi ), i = 1, 2, . . . , k + 1, si ha P0 (x) = c0 Pk (x) = Pk−1 (x) + ck (x − x1 )(x − x2 ) · · · (x − xk ), analisi numerica

k = 1, . . . , n c V. Comincioli

6.1 Interpolazione

287

da cui si vede che il valore di ciascun coefficiente ck dipende solo dai valori di f nei punti ` naturale, pertanto, introdurre la seguente notazione x1 , x2 , . . . , xk+1 . E ck = f [x1 , x2 , . . . , xk+1 ]

(6.7)

Per il calcolo ricorsivo dei coefficienti ck , osserviamo che alternativamente Pk (x) pu` o essere espresso nella seguente forma (1)

Pk (x) = Pk−1 (x) + (1)

% x − x1 $ (2) (1) Pk−1 (x) − Pk−1 (x) xk+1 − x1

(6.8)

(2)

ove Pk−1 (rispettivamente Pk−1 ) `e il polinomio di grado ≤ k − 1 che interpola f nei punti x1 , x2 , . . . , xk (rispettivamente nei punti x2 , x3 , . . . , xk+1 ). In effetti, a secondo membro della relazione (6.8) si ha un polinomio di grado ≤ k che assume, come si verifica facilmente, gli stessi valori del polinomio a primo membro nei punti x1 , . . . , xk+1 . Uguagliando i coefficienti del termine xk nei due polinomi, rispettivamente a primo e secondo membro della uguaglianza (6.8), si ottiene la seguente relazione ricorrente f [x1 , x2 , . . . , xk+1 ] =

f [x2 , x3 , . . . , xk+1 ] − f [x1 , x2 , . . . , xk ] xk+1 − x1

Per tale motivo il coefficiente f [x1 , x2 , . . . , xk ] `e anche chiamato differenza divisa di ordine k. Osserviamo che il valore di f [x1 , x2 , . . . , xk ] non cambia se gli argomenti x1 , x2 , . . . , xk sono assegnati in ordine differente, cio`e la dipendenza dagli argomenti `e simmetrica. Quando la funzione f `e dotata di derivate continue fino all’ordine k, si pu` o dimostrare che esiste un numero ξ nell’intervallo formato dai punti x1 , x2 , . . . , xk+1 tale che f [x1 , x2 , . . . , xk+1 ] =

f (k) (ξ) k!

Il calcolo delle differenze divise `e visualizzato, ad esempio per n = 3, nella seguente tabella x1 f1 f [x1 , x2 ] x2 f 2

f [x1 , x2 , x3 ] f [x2 , x3 ]

x3 f 3

f [x1 , x2 , x3 , x4 ] f [x2 , x3 , x4 ]

f [x3 , x4 ] x4 f 4 A partire dalla rappresentazione (6.6), il polinomio di interpolazione Pn (x) relativo ai punti (xi , fi ), i = 1, . . . , n + 1 `e allora fornito dalla seguente espressione P (x) =f1 + f [x1 , x2 ] (x − x1 ) + f [x1 , x2 , x3 ] (x − x1 )(x − x2 ) + · · · +f [x1 , x2 , . . . , xn+1 ] (x − x1 )(x − x2 ) · · · (x − xn )

analisi numerica

c V. Comincioli

288

Approssimazione di funzioni

function c = InterpN(x,y) % c = InterpN(x,y) % Polinomio interpolante di Newton % x: n-vectore colonna con componenti distinte % y: n-vectore colonna. % c n-vectore colonna tale che se % % p(x) = c(1) + c(2)(x-x(1))+...+ c(n)(x-x(1))...(x-x(n-1)) % allora % p(x(i)) = y(i), i=1:n. % c(k)=f[x_1,...x_k] n = length(x); for k = 1:n-1 y(k+1:n) = (y(k+1:n)-y(k:n-1)) ./ (x(k+1:n) - x(1:n-k)); end c = y; -------% % % % % % % %

function pVal = HornerN(c,x,z) pVal = HornerN(c,x,z) Calcola il polinomio interpolante di Newton per i valori z c e x sono n-vectori e z ` e un m-vectore. pVal e ` il vettore della stessa dimensione di z tale che se p(x) = c(1) + c(2)(x-x(1))+ ... + c(n)(x-x(1))...(x-x(n-1)) allora pval(i) = p(z(i)) , i=1:m.

n = length(c); pVal = c(n)*ones(size(z)); for k=n-1:-1:1 pVal = (z-x(k)).*pVal + c(k); end

Esempio 6.3 Determinare il polinomio di terzo grado che interpola i valori x f

0 1

2 5

-2 3

7 2

Si ottiene la seguente tabella 0 1

5−1 =2 2−0

2 5 1 3−5 = −2 − 2 2 −2 3 1 2−3 =− 7+2 9

3 1/2 − 2 = −2 − 0 4 −1/9 − 1/2 11 =− 7−2 90

−11/90 − 3/4 157 =− 7−0 1260

7 2 da cui il polinomio di interpolazione 157 3 x(x − 2)(x + 2) P3 (x) = 1 + 2x + x(x − 2) − 4 1260

analisi numerica

c V. Comincioli

6.1 Interpolazione

289

Algoritmo di Neville Dalla relazione (6.8) si vede che il polinomio Pk , di grado ≤ k, che interpola f nei punti o essere calcolato usando due polinomi di interpolazione Pk−1 di grado ≤ k − 1. x1 , x2 , . . . , xk+1 pu` o essere pensato come il risultato della interpolazione lineare Pi` u precisamente, si ha che Pk (x) pu` (1) (2) tra i due “punti” (x1 , Pk−1 (x)) e (x2 , Pk−1 (x)). Il metodo di Neville, a partire da tale osservazione, calcola il valore del polinomio di interpolazione mediante successive interpolazioni lineari. Per descrivere il metodo introduciamo alcune opportune notazioni. Se P12 (x) indica il polinomio di grado ≤ 1, che interpola f in x1 e x2 , si ha    x − x1 f1  x − x1 1   (f2 − f1 ) = P12 (x) = f1 + x2 − x1 x2 − x1  x − x2 f2  Analogamente se P123 (x) `e il polinomio, di grado ≤ 2, che interpola f nei punti x1 , x2 e x3 , si ha    x − x1 P12 (x)  1   P123 (x) = x3 − x1  x − x3 P23 (x)  Pi` u in generale, se Pi1 i2 ...ik+1 (x) `e il polinomio, di grado ≤ k, che soddisfa Pi1 i2 ...ik+1 (xij ) = fij ,

j = 1, 2, . . . , k + 1

esso pu`o essere calcolato nella seguente maniera ricorsiva Pi (x) = fi

  x − xi1 1  Pi1 i2 ...ik+1 (x) = xik+1 − xi1  x − xik+1

 Pi1 i2 ...ik  Pi2 i3 ...ik+1 

L’algoritmo di Neville segue, allora, ad esempio per n = 3, il seguente schema. x − x1

x1

f1 = P1 (x)

x − x2

x2

f2 = P2 (x)

P12 (x) P123 (x) P23 (x)

x − x3

x3

f3 = P3 (x)

x − x4

x4

f4 = P4 (x)

P1234 (x) P234 (x)

P34 (x)

L’implementazione dell’algoritmo, che lasciamo come esercizio, pu` o essere effettuata in maniera del tutto analoga a quanto visto nel paragrafo precedente nel caso del polinomio di Newton. Esempio 6.4 Calcolare il valore per x = 3 del polinomio di interpolazione relativo ai punti (2, 0), (0, −8), (4, 8), (5, 27). Si ha il seguente schema. 3−x 1

x 2

f (x) 0 1 −2

3

0

4

analisi numerica

5

=4 1 2

3 −1

−8 8

−1 −2

4 4

=4 1 3

1 5 8 27

1 −1

=4

8 1 1

-2

0 −8

-8 1 4

-1

1 3

3 −2

4 −11

1 −2

4 −5

=1

= −5

= −11

27 c V. Comincioli

290

Approssimazione di funzioni

I valori assegnati fi corrispondono ai valori assunti dalla funzione (x − 2)3 , e quindi il valore dell’interpolazione nel punto x = 3 `e uguale a (3 − 2)3 = 1.

Punti di interpolazione equidistanti Quando i punti di interpolazione sono equidistanti, le formule di interpolazione possono essere opportunamente semplificate. A tale scopo introduciamo l’operatore alle differenze ∆, definito u come l’operatore che trasforma la successione y = {yn } nella successione ∆y = {yn+1 − yn }. Pi` semplicemente, si scrive ∆yn = yn+1 − yn . Gli operatori alle differenze di ordine superiore ∆k sono definiti in maniera ricorsiva ∆k y = ∆k−1 (∆y) La quantit` a ∆k yn `e una combinazione lineare di yn , yn+1 , . . . , yn+k . Supponiamo, ora, che i punti di interpolazione xi siano equidistanti xi = x1 + (i − 1)h, ove h `e il passo di tabulazione. uguaglianza

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

Si pu` o dimostrare, ad esempio per induzione, la seguente

∆k f 1 hk k! Introducendo la nuova variabile s mediante la posizione x = x1 + s h, e usando la rappresentazione di Newton del polinomio di interpolazione, si ha



s s 2 Pn (x1 + s h) = f1 + s∆f1 + ∆ f1 + · · · + ∆n f 1 2 n f [x1 , x2 , . . . , xk+1 ] =

ove le differenze ∆i f1 , i = 1, 2, . . . , s possono essere calcolate mediante solo operazioni di somma. Esempio 6.5 A partire dai punti di interpolazione x f (x)

0.5 0.4794

0.6 0.5646

0.7 0.6442

si ottiene il seguente schema alle differenze x 0.5

f (x) 0.4794

0.6

0.5646



∆2

852 -56 796 0.7

0.6442

ove le differenze sono date in unit` a di 10−4 . In questo caso h = 0.1, x1 = 0.5 e il polinomio di interpolazione di Newton `e il seguente P2 (x1 + s h) = 0.4794 + 0.0852s +

analisi numerica

s(s − 1) (−0.0056) 2

c V. Comincioli

6.1 Interpolazione

6.1.4

291

Convergenza del polinomio di interpolazione

La rappresentazione (6.3) pone le basi per lo studio di un’altra importante questione relativa all’errore di troncamento. Dal punto di vista pratico, `e essenziale poter ridurre tale errore inferiore a una quantit` a prefissata, scegliendo convenientemente il numero e la posizione dei nodi xi . Dal punto di vista matematico, questo significa studiare la convergenza del metodo di approssimazione. In maniera pi` u precisa, il problema si pone nella seguente forma. Data una funzione f (x) definita su un intervallo [a, b], e sufficientemente regolare, consideriamo, per ogni n intero ≥ 1, una suddivisione dell’intervallo [a, b] mediante i punti a ≤ x1 < x2 < · · · < xn+1 ≤ b e sia Pn (x) il polinomio di interpolazione nei nodi (xi , f (xi )), i = 1, 2, . . . , n + 1. Lo studio della convergenza u riguarda allora l’analisi dell’errore f (x) − Pn (x), per x ∈ [a, b] e al tendere di n all’infinito (pi` precisamente, al tendere a zero dell’ampiezza degli intervallini della suddivisione). Contrariamente all’intuizione (supportata anche dal Teorema di Weierstrass), la risposta a tale questione non `e sempre positiva; ossia, anche se la funzione f (x) ammette derivate di ogni ordine su [a, b], la successione {Pn (x)} dei valori assunti dal polinomio di interpolazione di grado n in un punto x ∈ [a, b] pu` o non convergere a f (x), per n → ∞. In Figura 6.5, `e illustrato un classico controesempio, noto come esempio di Runge 4 . Si considera la funzione f (x) =

1 1 + 25x2

(6.9)

sull’intervallo [−1, 1], interpolata mediante i polinomi Pn (x) nei punti equidistanti 2 xn,i = −1 + (i − 1) , i = 1, . . . , n + 1 n Come si vede in figura, l’errore `e piccolo nei punti vicini all’origine, ma grande vicino agli estremi −1 e +1. In effetti, si pu`o dimostrare che $ % lim max |f (x) − Pn (x)| = ∞ n→∞ −1≤x≤1

Pi` u in generale, si pu` o mostrare (Bernstein e Faber, 1914) che per una scelta arbitraria dei punti di interpolazione in [a, b], `e possibile costruire una funzione continua su [a, b] per cui il procedimento di interpolazione sui nodi fissati `e tale che maxa≤x≤b |f (x) − Pn (x)| → ∞. Come risultato significativo di convergenza, ricordiamo che per ogni funzione f (x) sufficientemente regolare, ad esempio dotata di derivata seconda continua, `e possibile trovare un insieme di punti di interpolazione per i quali il polinomio di interpolazione converge uniformemente. Sempre in Figura 6.5 `e indicato il comportamento del polinomio di interpolazione, per n = 10, relativo ai punti

2i − 1 π ∗ , i = 1, . . . , n + 1 xn,i = cos n+1 2 che corrispondono agli zeri del polinomio di Chebichev di grado n+1 relativo all’intervallo [−1, 1]. Tali polinomi verranno introdotti e analizzati sucessivamente (cfr. paragrafo 6.2.2). 4

C. D. T. Runge (1856-1927) tenne per primo la cattedra di matematica applicata nell’Universit` a di G¨ ottingen; i suoi interessi principali riguardarono lo studio dei problemi matematici in fisica, geodesia e astronomia e in generale l’applicazione dei metodi numerici alle scienze applicate (“The value of a mathematical discipline depends on its applicability to the natural sciences”, 1880). L’esempio esaminato nel testo `e contenuto in un lavoro del 1901; S. N. Bernstein (1912) dimostr` o che l’interpolazione della funzione f (x) = |x| su nodi equidistanti dell’intervallo [−1, 1] diverge per ogni x = −1, 0, 1. analisi numerica

c V. Comincioli

292

Approssimazione di funzioni

Figura 6.5 Esempio di Runge; polinomio di interpolazione di grado 10 rispettivamente in punti equidistanti (−−) e negli zeri del polinomio di Chebichev (−.).

Figura 6.6 Zeri del polinomio di Chebichev T8 .

---------------%RungeEg % Script File: RungeEg % Per n = 7:2:15, si determina il grafico dei polinomi di interpolazione della % funzione f f(x) = 1/(1+25x^2) on [-1,1]’ close all x = linspace(-1,1,100)’; %f=inline(’1./(1+25*x.^2)’); y = ones(100,1)./(1 + 25*x.^2); %y=feval(f,x) i=0; for n=7:2:21 figure i=i+1; xE = linspace(-1,1,n)’; yE = ones(n,1)./(1+25*xE.^2);%=feval(f,xE) analisi numerica

c V. Comincioli

6.1 Interpolazione

293

cE=InterpN(xE,yE); pVE = HornerN(cE,xE,x); plot(x,y,x,pVE,xE,yE,’*’) title(sprintf(’numero punti (n = %2.0f)’,n)) err(i)=norm(y-pVE,inf); pause end err’ n=21; xche=(cos(((2*(0:(n-1))+1)*pi)./(21*2)))’; yche=ones(n,1)./(1+25*xche.^2); %=feval(f,xche); cxche=InterpN(xche,yche); pVche=HornerN(cxche,xche,x); plot(x,y,x,pVche,xche,yche,’*’) title(sprintf(’punti di Chebichev (n = %2.0f)’,n)) plot(xche,0*xche,’*’)

6.1.5

Problema generale di interpolazione lineare

Il problema di interpolazione polinomiale pu` o essere generalizzato nel seguente modo. Sia V uno spazio lineare su R di dimensione n. Indichiamo con V ∗ il corrispondente spazio duale, cio`e l’insieme dei funzionali lineari su V . Assegnati n elementi L1 , L2 , . . . , Ln in V ∗ e dato l’insieme di numeri reali yi , i = 1, 2, . . . , n, si cerca l’elemento v ∈ V tale che: Li v = y i ,

i = 1, 2, . . . , n

(6.10)

Si tratta di un quadro generale in cui rientrano come casi particolari diverse situazioni significative. L’interpolazione polinomiale, ad esempio, corrisponde al caso particolare in cui V = Pn−1 e Li v = v(xi ), ove xi `e un insieme di n punti distinti. Come ulteriore esempio significativo (per altri esempi si vedano gli esercizi proposti) si consideri l’interpolazione trigonometrica. In questo caso lo spazio V `e generato dalle funzioni 1, cos x, sin x, cos 2x, sin 2x, . . . , cos nx, sin nx, per x ∈ [−π, π). La dimensione di tale spazio `e 2n + 1 e come funzionali Li si possono assumere, per v ∈ V : Li v = v(xi ), ove xi sono 2n + 1 punti distinti in [−π, π). Per la risolubilit` a del problema di interpolazione (6.10), si ha il seguente importante risultato, la cui dimostrazione `e lasciata come esercizio. Teorema 6.4 Il problema di interpolazione (6.10) ha una ed una sola soluzione se i funzionali Li sono linearmente indipendenti in V ∗ ; se v1 , v2 , . . . , vn `e una base in V , tale condizione `e equivalente alla seguente:    L1 v1 · · · L1 vn     ..  = 0 (6.11) det(Li vj ) =  ... .    Ln v1 · · · Ln vn  ove det(Li vj ) `e il cosiddetto determinante generalizzato di Haar. La soluzione del problema dell’interpolazione `e data allora da: v = a1 v1 + a2 v2 + · · · + an vn analisi numerica

c V. Comincioli

294

Approssimazione di funzioni

ove i coefficienti ai sono determinati come soluzioni del seguente sistema lineare: (Li v1 )a1 + (Li v2 )a2 + · · · + (Li vn )an = yi ,

i = 1, 2, . . . , n

Nel caso dell’interpolazione polinomiale, scegliendo vi = xi−1 , il determinante di Haar `e un determinante di Vandermonde. Lasciamo verificare come esercizio, come caso particolare dell’interpolazione trigonometrica, che assunto come spazio V lo spazio X generato dalle funzioni 1, cos x, sin x e posto: L1 v = v(−π/2), L2 v = v(0), L3 v = v(π/2) il corrispondente determinante di Haar `e diverso dallo zero e quindi `e unico il polinomio v(x) = a0 + a1 cos x + a2 sin x, che assume valori assegnati nei punti −π/2, 0, π/2. Osservazione 6.1 Come esempio di problema di interpolazione non risolubile, si consideri la seguente situazione. Si cerca un polinomio di secondo grado con valori assegnati nei punti −1, 1 e con la derivata assegnata nel punto 0. Posto L1 v = v(−1), L2 v = v(1), L3 v = v  (0), e vi = xi−1 , si ha    1 −1 1    1 1  = 0 det(Li vj ) =  1  0 1 0  e il problema di interpolazione pu` o non avere soluzione e per particolari dati pu` o avere un’infinit` a di soluzioni.

Nel caso in cui, come nell’interpolazione polinomiale e trigonometrica, lo spazio V `e generato da un insieme di funzioni f1 (x), f2 (x), . . . , fn (x), definite su un sottinsieme S di Rm , la condizione det(fi (xj )) = 0

(6.12)

viene detta condizione di unisolvenza delle funzioni su S; un insieme unisolvente di funzioni n e continue `e noto anche come sistema di Chebichev . Una combinazione lineare i=1 ai fi (x) ` chiamata un polinomio generalizzato. Un insieme di funzioni costituisce un sistema di Chebichev se e solo se, come avviene per i polinomi algebrici, il polinomio generalizzato corrispondente con pi` u di n − 1 zeri distinti in S `e identicamente nullo. L’unisolvenza significa che il problema dell’interpolazione: n

ai fi (xj ) = yj ,

j = 1, 2, . . . , n

i=1

`e risolubile in maniera univoca. Ad esempio, i polinomi trigonometrici sono unisolventi su [−π, π), ma non su [−π, π]. I polinomi algebrici sono unisolventi su ogni intervallo limitato della retta reale ma in pi` u dimensioni, salvo il caso banale di una griglia rettangolare, la situazione `e pi` u compli2 cata. Per un controesempio si consideri il caso dei polinomi di primo grado in R e un insieme di tre punti allineati. Per una pi` u adeguata trattazione della interpolazione in pi` u dimensioni, si veda ad esempio Prenter [341], Raviart, Thomas [352].  Esercizio 6.1 Dimostrare che esiste un unico polinomio p(x) ∈ P2 tale che  p(0) = y1 ,

p(1) = y2 ,

0

1

p(t) dt = y3

per y1 , y2 , y3 arbitrari. analisi numerica

c V. Comincioli

6.1 Interpolazione

295

 Esercizio 6.2 Trovare un polinomio p ∈ P3 , tale che p(0) = 1,

p (0) = 1,

p(1) = −1,

p (0) = 0

 Esercizio 6.3 Il polinomio p(x) = −0.02x3 + 0.2x2 − 0.4x + 1.28 `e il polinomio di interpolazione rela-

tivo ai quattro punti (1, 1.06), (2, 1.12), (3, 1.34), (5, 1.78), mentre il polinomio p¯(x) = −0.029166667x3 + 0.275x2 − 0.570833333x+ 1.375 `e il polinomio di interpolazione relativo ai punti (1, 1.05), (2, 1.10), (3, 1.35), (5, 1.75). Esaminare la variazione dei coefficienti in corrispondenza alla variazione delle ordinate; confrontare p (4) con p (4), p(5.5) con p(5.5) e gli integrali dei due polinomi sull’intervallo (1, 4). Trarre suggerimenti sul condizionamento del problema di interpolazione.

 Esercizio 6.4 Studiare il problema dell’interpolazione in Pn relativo ai funzionali: 

Li v =

1

ti−1 v(t) dt

0

 Esercizio 6.5 Trovare il polinomio: p(x, y) = a0 + a1 x + a2 y + a3 xy tale che p(0, 0) = f00 , p(1, 0) = f10 , p(0, 1) = f01 , p(1, 1) = f11 .

 Esercizio 6.6 Dimostrare che per i polinomi di Lagrange Li (x) si ha: n

 Li (x)(xi − x) = j

i=0

1, se j = 0 0, se j = 1, 2, . . . , n

∀x ∈ R

 Esercizio 6.7 Data una funzione f ∈ C 0 ([a, b]) e k + 1 punti distinti xi di [a, b], dimostrare che esiste un unico polinomio p ∈ P2k+1 tale che:

p(xi ) = f (xi ),

p (xi ) = 0,

i = 0, 1, . . . , k

Tale polinomio `e detto polinomio di interpolazione di Fej´er-Hermite.

6.1.6

Interpolazione mediante funzioni razionali

Per ogni coppia di interi n, m, si considera l’insieme delle funzioni definite da: Rn,m (x) ≡

Pn (x) a0 + a1 x + · · · + an xn ≡ Qm (x) b0 + b1 x + · · · + bm xm

Tali funzioni hanno n + m + 1 gradi di libert` a , corrispondenti al numero dei coefficienti dei due polinomi, che risultano determinati a meno di un fattore comune diverso dallo zero. Si pu` o formulare un problema di interpolazione di tipo Lagrange richiedendo che, assegnati i punti (xi , yi ), i = 0, 1, . . . , n + m, siano verificate le condizioni: Rn,m (xi ) = yi ,

i = 0, 1, . . . , n + m

(6.13)

Esaminiamo la questione della risolubilit` a . A questo proposito vediamo con un esempio che il problema (6.13) pu` o non avere soluzione anche se i punti xi sono distinti. analisi numerica

c V. Comincioli

296

Approssimazione di funzioni

Esempio 6.6 Si cerca la funzione R1,1 che passa per i punti (0, 1), (1, 2), (2, 2), cio`e si cercano i coefficienti a0 , a1 , b0 , b1 , tali che: a0 + a1 xi = yi , i = 0, 1, 2 b0 + b1 xi o passare per i tre punti; allo stesso modo se b1 = 0 si ha una Ora se b1 = 0, si ha una retta, che non pu` iperbole equilatera che ancora non contiene i tre punti dati. Una condizione necessaria per (6.13) `e che i coefficienti ar , bs di Rn,m risolvano il sistema lineare: Pn (xi ) − yi Qm (xi ) = 0

(6.14)

Nell’esempio precedente, risolvendo tale sistema si ottiene a0 = b0 = 0, a1 = 2, b1 = 1, da cui R1,1 = 2x/x. Il punto x = 0 `e quindi una radice del polinomio al denominatore Q1 ; questa `e in sostanza la ragione della non risolubilit` a del precedente problema particolare. In situazioni del genere si parla di punti inaccessibili. Il problema (6.13) `e risolubile se non vi sono punti inaccessibili e in questo caso la soluzione pu`o essere ottenuta risolvendo il sistema lineare omogeneo (6.14). Esistono, comunque, algoritmi pi` u convenienti del tipo differenze divise, frazioni continue, Neville (cfr. ad esempio Stoer, Bulirsch [388]). Naturalmente, in maniera del tutto analoga, si definisce il problema di interpolazione di tipo Hermite, includendo nelle condizioni anche i valori di alcune derivate. Nel caso particolare di un solo punto si ottengono al variare di n, m gli elementi di una matrice, detta matrice di Pad´e . In corrispondenza a m = 0, si ha lo sviluppo in serie di Mac Laurin. Esempio 6.7 Se come funzione f (x) si assume la funzione e−x , imponendo la coincidenza in x = 0 di successive derivate si hanno ad esempio le seguenti approssimanti: 2−x , derivata prima e seconda 2+x 12 − 6x + x2 = , fino alla derivata quarta 12 + 6x + x2 120 − 60x + 12x2 − x3 = , fino alla derivata sesta 120 + 60x + 12x2 + x3

P1,1 = P2,2 P3,3

Segnaliamo una interessante applicazione delle approssimanti di Pad´e alla approssimazione della soluzione delle equazioni differenziali. Consideriamo il problema a valori iniziali   y (x) = −λy, λ ∈ C, (λ) > 0 (6.15) y(0) = 1 a, di un problema modello per illustrare che ha, come `e noto, la soluzione y = e−λx ; si tratta, in realt` situazioni pi` u generali. Introdotta sull’asse delle x una suddivisione con passo h > 0 e supposta nota la funzione y in un punto x, cerchiamo il valore y(x + h). Dall’espressione analitica della soluzione si ha y(x + h) = e−λh y(x).  x+h Integrando ora l’equazione differenziale (6.15) tra x e x + h, si ottiene y(x + h) − y(x) = −λ x y(t) dt. Se l’integrale viene ad esempio approssimato con la regola dei trapezi e si indica con y¯ la soluzione cos`ı ottenuta si ha, con facili passaggi: 2 − λh y¯(x) y¯(x + h) = 2 + λh Si vede cio`e che l’applicazione della formula dei trapezi equivale alla approssimazione della funzione esponenziale mediante un particolare elemento della matrice di Pad´e. Questa formula `e interessante numericamente nel caso in cui (λ) `e “grande” ( Cfr. Capitolo 9). analisi numerica

c V. Comincioli

6.1 Interpolazione

297

 Esercizio 6.8 Analizzare il seguente algoritmo per il calcolo della funzione razionale Rn,m (x). La funzione viene trasformata in una frazione continua, rappresentata dal seguente schema: Rn,m = Q1 (x) +

1 1 Q2 (x) + . Q3 (x) + .

(6.16) .

+

1 Qk (x)

Sia P0 = Pn e P1 = Qm e supponiamo n ≥ m; in caso contrario si pone Rn,m = 1/(Qm /Pn ) e si procede a convertire Qm /Pn a una frazione continua. Dividiamo P0 per P1 , ottenendo il quoziente Q1 e resto P2 , ove il grado di P2 `e strettamente minore di quello del polinomio P1 . Allora: P0 = P1 Q1 + P2 e Rn,m =

P0 1 = Q1 + P1 P1 /P2

Si applica poi la stessa procedura a P1 /P2 e, in generale, a Pi /Pi+1 , ove: Pi = Pi+1 Qi+1 + Pi+2 Dopo un numero finito di passi si ottiene un polinomio Pk di grado zero; allora: Pk−1 = Pk Qk . Per valutare Rn,m mediante (6.16) si deve calcolare ciascun Qi e fare una divisione; poich´e si pu`o fare in modo che il coefficiente di grado massimo di ogni Qi sia uguale all’unit` a il calcolo di Qi (x) per x fissato richiede un numero di moltiplicazioni pari al grado meno uno. In totale quindi sono richieste n − k + 1 moltiplicazioni, k − 1 divisioni e n + k + 1 addizioni. Confrontare con altri possibili algoritmi.

6.1.7

Interpolazione inversa

` noto che in tali condizioni Sia f ∈ C 0 ([a, b]), con f (a) · f (b) < 0 e f strettamente monotona. E l’equazione: f (x) = 0 ha una ed una sola soluzione x = α in [a, b]. Poich´e nelle condizioni fatte esiste la funzione inversa f −1 , la soluzione `e data in maniera esplicita da: α = f −1 (0) Il risultato cos`ı ottenuto non `e, in generale, di immediato utilizzo. Possiamo pensare, tuttavia, di approssimare la funzione inversa mediante una interpolazione. Pi` u precisamente, dato un insieme di punti x0 , x1 , . . . , xn ∈ [a, b], siano y0 , y1 , . . . , yn i corrispondenti valori di f (x), cio`e yi = f (xi ); ne segue che xi = f −1 (yi ). Il metodo dell’interpolazione inversa consiste nell’interpolare la funzione inversa f −1 (y) usando i punti (yi , xi ). Osserviamo che per le ipotesi fatte su f i punti yi sono distinti. Se indichiamo con p(y) il polinomio di interpolazione cos`ı ottenuto, il valore: xn+1 := p(0) o aggiungere la coppia rappresenta una approssimazione della radice α. Se f (xn+1 ) = 0, si pu` o essere iterato. Se si desidera tenere costante (yn+1 , xn+1 ) ai dati per costruire p e il processo pu` o essere rimosso (per esempio, quello con il grado di p, uno dei punti (yk , xk ), (k = 0, 1, . . . , n) pu` il pi` u grande |yk |). Se si utilizza l’interpolazione lineare, il processo precedente `e noto come metodo regula falsi . Vediamo un’altra applicazione, che pu` o essere considerata come un’estensione del metodo di Newton. analisi numerica

c V. Comincioli

298

Approssimazione di funzioni

Supponiamo che, in aggiunta alle ipotesi precedenti, si abbia f ∈ C 1 ([a, b]). La derivata f −1 nei punti yk pu` o essere calcolata mediante la formula: (f −1 ) (yk ) =

1 f  (x

k)

Indicando con p(y) il polinomio di di Hermite di terzo grado relativamente ai due punti (y0 , y1 ), si ha 

1  1 2x0 2x1 1 1 2 2 x0 y1 + x1 y0 − y0 y1 × y1 + y0 + − x2 = p(0) = (y1 − y0 )2 f0 y1 − y0 f1 y1 − y0 Iterando, si ottiene il cosiddetto metodo iterativo di interpolazione inversa a due punti di Hermite. Il suo ordine di √ convergenza `e dato dalla radice pi` u grande dell’equazione x2 = 2x + 2, cio`e dal numero r = 1 + 3 = 2.73... Esempio 6.8 Applicando il metodo precedente alla funzione f (x) = e−x − x, si ottengono i seguenti risultati.

0 1 2 3

xn 0.2 0.7 0.5671657 0.5671432

f (xn ) 0.618730 −0.203414 −3.519 E −5 −2.38 E −13

 Esercizio 6.9 Trovare, mediante l’interpolazione di Hermite, la soluzione delle seguenti equazioni: f (x) = x2 − 4 = 0, 1 3

f (x) = x − 2 = 0,

6.1.8

x0 = 1, x1 = 10;

f (x) = cos x − x = 0,

x0 = 0, x1 = 1

al variare comunque dei punti di partenza.

Interpolazione mediante spline

Nel paragrafo precedente abbiamo visto (cfr. in particolare l’esempio di Runge (6.9)) che all’aumento del numero dei punti utilizzati nell’interpolazione non sempre corrisponde una migliore approssimazione della funzione interpolata. Il motivo `e essenzialmente dovuto al comportamento altamente oscillatorio dei polinomi di grado elevato. Un modo per ovviare a questo inconveniente consiste nel suddividere l’intervallo, in cui si vuole approssimare la funzione, in un certo numero di sottointervalli, interpolando quindi la funzione su ciascun sottointervallo con polinomi di grado basso. Si ottiene in questo modo una approssimazione polinomiale a tratti, che rispetto alla approssimazione polinomiale su tutto l’intervallo presenta una minore regolarit` a, ma che permette, in generale, una migliore descrizione della funzione, con vantaggi in particolare nella grafica e nell’approssimazione delle soluzioni di problemi ai limiti per equazioni differenziali. Assumendo di aver suddiviso l’intervallo di definizione [a, b] della funzione da approssimare f (x) mediante i punti a ≤ x1 < x2 < . . . < xn ≤ b, e utilizzando, ad esempio, una interpolazione lineare su ogni sottointervallo [xi , xi+1 ], si ottiene come funzione approssimante una curva poligonale, la cui derivata pu` o essere discontinua nei nodi interni x2 , x3 , . . . , xn−1 (cfr. per una esemplificazione la Figura 6.7). analisi numerica

c V. Comincioli

6.1 Interpolazione

299

1.5

1 x

X

0.5 x

0

X O

o

O

o

O

o

O X

-0.5 X x

-1

-1.5

X 0

1

2

3

4

5

6

Figura 6.7 Interpolazione lineare a tratti della funzione sin x sull’intervallo [0, 6] relativa a una suddivisione uniforme di ampiezza h = 1. Se il grado del polinomio utilizzato `e maggiore di uno, la regolarit` a della funzione approssimante pu` o essere migliorata imponendo nei nodi interni la continuit` a anche di un numero opportuno di derivate. Ad esempio, come vedremo nel seguito, utilizzando un polinomio di terzo grado, `e possibile ottenere una funzione approssimante continua, insieme alla derivata prima e seconda. u in generale, una funzione s(x) `e chiamata spline di Tale funzione `e chiamata spline5 cubica. Pi` ordine p, se s(x) `e definita come un polinomio di grado p su ciascun sottointervallo ed `e continua su tutto l’intervallo insieme alle prime p − 1 derivate. Quando s(xi ) = f (xi ), per i = 1, 2, . . . , n, la funzione s `e detta una spline interpolante. Per il seguito considereremo esclusivamente spline interpolanti, e quindi, per brevit`a, si tralascer`a il termine interpolante. In Figura 6.8 `e rappresentata una esemplificazione di una situazione nella quale l’uso di una spline cubica pare pi` u opportuno di un polinomio di interpolazione; pi` u precisamente, `e rappresentato il seguente polinomio di sesto grado P (x) = −0.0064+5.0295x+0.0169x2 −20.1005x3 −0.0486x4 +16.0767x5 +0.0436x6 e la spline cubica che interpolano i seguenti punti xi fi

−1 −1

−0.96 −0.151

−0.86 0.894

−0.79 0.986

0.22 0.895

0.5 0.5

0.930 −0.306

Nel seguito esamineremo pi` u in dettaglio il caso delle spline di primo ordine, ossia le funzioni lineari a tratti, e le spline cubiche. 5

Spline era il nome utilizzato dai disegnatori per indicare un nastro elastico, vincolato a passare, senza discontinuit` a e punti angolosi, attraverso una serie di punti prefissati. Il nastro assume la configurazione corrispondente al minimo dell’energia potenziale causata dalla deformazione del materiale, e quindi la configurazione di curvatura minima, compatibilmente con i vincoli. Tale configurazione pu` o essere modellizzata matematicamente mediante una spline cubica interpolante (cfr. Teorema 6.5). analisi numerica

c V. Comincioli

300

Approssimazione di funzioni

1.5 1 1

o o

o

0.5

o

0 o o

-0.5 2 -1 o

-1.5 -1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Figura 6.8 (1) Spline cubica interpolante i punti (o); (2) polinomio di interpolazione di Lagrange. Spline lineari Dati i punti x1 < x2 < . . . < xn , chiamati nodi , una spline lineare `e una funzione s(x) con le seguenti propriet` a • s(x) `e continua su [x1 , xn ]; • s(x) `e un segmento di retta su ogni sottointervallo [xi , xi+1 ]. Pertanto, su ogni sottointervallo si ha la rappresentazione s(x) = ai (x − xi ) + bi ,

xi ≤ x ≤ xi+1

e i coefficienti da determinare (i cosiddetti gradi di libert` a ) sono in numero di 2(n − 1). La continuit` a fornisce n − 2 condizioni e i rimanenti n gradi di libert`a possono essere determinati dalle condizioni di interpolazione s(xi ) = fi , i = 1, 2, . . . , n. Si ottiene, quindi ai =

fi+1 − fi , xi+1 − xi

bi = fi

Un modo alternativo (di interesse in diverse applicazioni) di rappresentare la funzione s(x) `e il seguente n s(x) = fi ψi (x) i=1

ove le funzioni ψi (x) sono particolari funzioni spline lineari con la propriet` a (cfr. Figura 6.9)  0 i = j ψi (xj ) = 1 i=j Le funzioni ψi (x) costituiscono una base per lo spazio di tutte le spline lineari corrispondenti ad un insieme assegnato di nodi. Esse sono anche chiamate B-spline lineari. analisi numerica

c V. Comincioli

6.1 Interpolazione

301

Figura 6.9 Funzioni base per le splines lineari. Se i valori interpolati fi sono i valori di una funzione f (x) nei punti xi e tale funzione ha la derivata seconda continua, l’errore nell’approssimazione di f con le spline lineari ha la seguente rappresentazione f (x) − s(x) =

f  (ξi ) (x − xi )(x − xi+1 ), 2

xi ≤ x ≤ xi+1

da cui, se M `e una limitazione superiore di |f  (x)| su [x1 , xn ], si ha |f (x) − s(x)| ≤

h2 M 8

ove h = maxi |xi+1 − xi |. Implementazione delle spline lineari function [a,b] = pwL(x,y) % [a,b] = pwL(x,y) % x, y vettori colonna di ordine n. % si assume: x(1) < x(2) < ... < x(n). % % a e b vettori di ordine (n-1) tali che per i=1:n-1, la retta % L(z) = a(i) + b(i)z passa attraverso i punti (x(i),y(i)) and % (x(i+1),y(i+1)). n = length(x); a = y(1:n-1); b = diff(y) ./ diff(x); function i = Locate(x,z,g) % i = Locate(x,z,g) % Localizza z nella partizione x. % % x ` e un vettore colonna di ordine n con % x(1) < x(2) 0 e Ln+1 (x) > 0, poich´ n n Ln+1 (x) 1 1 d $ Ln+1 (x) % = = − > 0, 0 e j−1 qj (x) 1 d $ qj (x) % (n) (n) = < 0, x ∈]xj−1 , xj ] > 0, (n) qj (x) dx q (x) j x − x i=0 i

analisi numerica

c V. Comincioli

608

Integrazione numerica

Si conclude quindi in maniera analoga. L’algoritmo precedente, che pu`o essere utilizzato per una famiglia qualunque di polinomi ortogonali, permette di approssimare le n + 1 radici del polinomio Ln+1 (x) e quindi di calcolare i nodi della formula di Gauss–Legendre. Per il calcolo dei polinomi e della derivata prima si possono utilizzare le seguenti relazioni 2n + 1 n xLn (x) − Ln−1 , L0 = 1, L1 = x n+1 n+1 (x2 − 1)Ln+1 (x) = (n + 1)(xLn+1 (x) − Ln (x))

Ln+1 (x) =

Come semplice esemplificazione numerica, per n = 2 si ottengono i seguenti risultati. k 0 1 2 3 4

(2)

(2)

x2

1. 0.7802746566 0.7746580511 0.7745966765 0.7745966692

x1 0.7745966692 0.2142776190 0.0381621786 0.0017115006 3.76498 E–6

Problema 8.4 Determinare il valore del seguente integrale  1 I := x(1 + x2 )1/2 dx 0

mediante la procedura di Romberg. Soluzione. Nel caso di un integrale generale 

b

f (x) dx a

indichiamo con Tm,0 la formula composta del trapezio relativa a 2m + 1 punti sull’intervallo [a, b], cio`e Tm,0 =

 b − a1 1 f0 + f1 + · · · + f2m −1 + f2m m 2 2 2

per m = 0, 1, . . . e fi = f (a+i(b−a)/2m ). Il calcolo dei valori Tm,0 pu` o essere fatto in maniera conveniente, osservando che il calcolo di Tm,0 utilizza tutti i valori della funzione f (x) gi` a utilizzati per il calcolo di Tm−1,0 . Il metodo di Romberg consiste nell’applicazione dell’idea della estrapolazione ai valori Tm,0 . Si calcolano quindi i valori Tm,n , n ≥ 0 mediante la formula Tm,n+1 =

4n+1 Tm,n − Tm−1,n 4n+1 − 1

Il fatto importante dal punto di vista computazionale `e che il calcolo di Tm,n non richiede ulteriori valutazioni della funzione integranda f . Il supporto teorico fornisce l’informazione che asintoticamente, cio`e per h = (b − a)/2m sufficientemente piccolo, si quadagna in precisione aumentando n. Verifichiamo tale risultato sull’esempio richiesto dal problema, tenendo conto che il valore esatto dell’integrale `e dato da I = 0.60947570824873 Applicando la formula precedente si ottengono i seguenti risultati. analisi numerica

c V. Comincioli

8.7 Complementi e Problemi h 4 2 1 0.5 0.25 0.125 0.0625 0.03125

Dh –0.102225 0.245647 0.454648 0.518069 0.534691 0.538896 0.539950 0.540214

609 C1 h2 1.440806 0.360201 0.090050 0.022512 0.005628 0.001407 3.5175 E-4 8.79398 E–5

Eh 0.642527 0.29465 0.08565 0.02223 0.00561 0.00140 3.5169 E–4 8.7935 E–5

o(h2 ) –0.798278 –0.065546 –0.004396 –2.7973 E–4 –1.7568 E–5 –1.9886 E–6 –6.8696 E–8 –4.2938 E–9

(Dh −D2h )/3 0.115957 0.069668 0.02114 0.00554 0.001401 3.514159 E–4 8.791836 E–5

Tabella 8.4 Risultati ottenuti mediante la formula delle differenze centrali nell’approssimazione della derivata prima della funzione y = sin x nel punto x = 1. m\n 0 1 2 3

0 0.707106781186 0.633061887780 0.615329469290 0.610936600531

1

2

3

0.608380256645 0.609418663127 0.609472310945

0.609487890226 0.609475887466

0.609475696946

Problema 8.5 Analizzare l’applicazione dell’idea dell’estrapolazione al limite nel caso della formula f (a + h) − f (a − h) ≈ f  (a) Dh (f ) := 2h Soluzione. Supponendo che la funzione f (x) sia continua con le derivate fino al terzo ordine in un intorno del punto a, si ha la seguente maggiorazione dell’errore di discretizzazione D(f ) := f  = Dh (f ) −

1 2  h f (ξ(h)), 6

ξ(h) opportuno ∈ (a − h, a + h)

Poich´e ξ(h) → a per h → 0 e f  (x) `e continua, si ha f  (ξ(h)) → f  (a)

per h → 0

e la funzione

[f  (ξ(h)) − f  (a)]h2 6 2 tende a zero pi` u rapidamente di h . Abbiamo pertanto h →

D(f ) = Dh (f ) + C1 h2 + o(h2 )

(8.25)

ove la costante C1 = −f  (a)/6 non dipende da h. Analizziamo il seguente particolare esempio numerico. f (x) := sin x;

a = 1; ⇒

D(f ) = 0.540302305 C1 = 0.0900503843

Nella Tabella 8.4 sono riportati i valori di Dh (f ), dell’errore Eh (f ) = D(f ) − Dh (f ) e delle componenti dell’errore C1 h2 e o(h2 ), ottenuti in doppia precisione in corrispondenza a valori decrescenti di h. I risultati mostrano che la quantit`a C1 h2 diventa rapidamente la componente dominante nell’errore; il termine o(h2 ) tende a zero, per h → 0, pi` u rapidamente. Si pu` o utilizzare questo risultato nel seguente modo. Scrivendo la (8.25) per 2h si ha Df = D2h (f ) + 4C1 h2 + o(h2 ) analisi numerica

c V. Comincioli

610

Integrazione numerica

Per sottrazione con la (8.25) si ha 0 = Dh (f ) − D2h (f ) − 3C1 h2 + o(h2 ) da cui

Dh (f ) − D2h (f ) + o(h2 ) 3 Il risultato suggerisce di assumere, per h sufficientemente piccolo, il seguente numero, riportato in Tabella 8.4 Dh (f ) − D2h (f ) 3 C1 h2 =

come stima della componente C1 h2 , che nel caso generale non `e evidentemente nota a priori. Dai risultati riportati in Tabella si vede, comunque, l’importanza dell’affermazione “per h sufficientemente piccolo”. Possiamo pertanto concludere che il seguente valore Dh1 (f ) = Dh (f ) +

Dh (f ) − D2h (f ) 3

per h sufficientemente piccolo, dovrebbe essere una migliore stima della derivata. Questo processo, consistente nel ricavare da due approssimazioni di ordine inferiore una approssimazione di ordine superiore, senza ulteriori calcoli espliciti della funzione f , `e usualmente detto metodo di estrapolazione al limite e trova applicazione generale nell’ambito di approssimazioni analoghe a quella considerata in precedenza. Terminiamo l’analisi del caso particolare, precisando in che senso Dh1 (f ) `e una migliore approssimazione di Dh (f ). Supponendo la funzione f sufficientemente regolare, si ha f  (a)h3 f  (a)h2 ± 2 6 f (iv) h4 f (v) h4 + ± + o(h5 ) 24 120

f (a ± h) = f (a) ± f  (a)h +

Per sottrazione si ha Dh (f ) = f  (a) + da cui

f  (a)h2 f (v) h4 + + o(h4 ) 6 120

D(f ) = Dh (f ) + C1 h2 + C2 h4 + o(h4 )

con

−f  (a) −f (v) (a) , C2 = 6 120 costanti indipendenti da h. Scrivendo la precedente relazione per 2h e sottraendo opportunamente le due relazioni, si ottiene facilmente il seguente risultato C1 =

D(f ) = Dh1 (f ) + C21 h4 + o(h4 ),

C21 = −4 C2 =

f (v) (a) 30

dal quale si ricava che, mentre D(f ) − Dh (f ) tende a zero, per h → 0, come h2 , la differenza D(f ) − Dh1 (f ) tende a zero come h4 .

Problema 8.6 Indicare un procedimento numerico per approssimare il seguente integrale generalizzato  +∞ 2 e−x dx I := 0

con un numero di cifre prefissato. analisi numerica

c V. Comincioli

8.7 Complementi e Problemi

611

1.4 1.2 1 0.8 0.6 0.4 0.2 0 -0.5

0

0.5

1

1.5

2

2.5

3

Figura 8.5 Grafico delle funzioni: exp(−x) e exp(−x2 ). 2

Soluzione. L’integrale dato, che esiste finito in quanto e−x `e un infinitesimo di ordine superiore a uno per x → ∞, pu` o essere stimato nel seguente modo. Per b > 1 scriviamo  b 2 I = I1 + I2 , I1 = e−x dx, 0

 I2 =



2

e−x dx,

b

Si calcola quindi I1 mediante una formula di quadratura, mentre I2 `e maggiorato (cfr. Figura 8.5) nel seguente modo  ∞ I2 ≤ e−x dx = e−b b

Supponendo, ad esempio, di utilizzare per approssimare I1 la formula del trapezio a passo costante h = b/n I1 ≈ I1h :=

n−1 2 2% h$ 1 + e−b + 2 e−(hi) 2 i=1

si commette un errore E1 (b) = I1 − I1h , maggiorabile, nel caso di una generica funzione integranda f (x), nel seguente modo b 2 h , ove M ≥ |f  (x)|, ∀x ∈ [0, b] |E1 | ≤ M 12 Nel caso particolare si verifica facilmente che |f  (x)| ≤ 2. Supponiamo ora di volere una approssimazione di I con s cifre esatte. Prendendo come tale approssimazione il valore di I1h , si ha come errore complessivo b E(b) := I − I1h = E1 (b) + I2 ⇒ |E(b)| ≤ e−b + h2 =: S(b, h) 6 In definitiva, si tratta di trovare il numero b e successivamente il numero h in maniera che S(b, h) ≤ I˜ 10−s ove con I˜ si `e indicata una stima dell’ordine di grandezza dell’integrale I. Osserviamo che un modo alternativo per approssimare I consiste nell’utilizzo delle formule di quadratura di tipo Gauss–Hermite (cfr. Problema 8.8). analisi numerica

c V. Comincioli

612

Integrazione numerica

Problema 8.7 Esaminare il calcolo numerico del seguente integrale 

1

sin



x dx

0

Soluzione. La difficolt`a inerente al calcolo numerico dell’integrale proposto `e nel fatto√che la√derivata prima della funzione integranda presenta un punto di infinito in x = 0. Il fatto che sin x ≈ piccoli suggerisce la seguente procedura di sottrazione della singolarit`a 

1

√ sin x dx =

0



1

0

√  √ sin x − x dx +



1

x per x

√ x dx

0

L’idea consiste nel calcolare numericamente il primo integrale e analiticamente il secondo. In effetti per la funzione integranda del primo integrale si ha √ √ % cos x − 1 d $ √ √ → 0 per x → 0 sin x − x = dx 2 x Osserviamo che vi pu`o essere√una cancellazione, con conseguente perdita di precisione, nel valutare la √ nuova funzione integranda sin x − x vicino allo zero. Tuttavia, questo effetto non `e importante perch´e la funzione integranda tende a zero e ha un piccolo effetto sul valore dell’integrale. Utilizzando la formula di quadratura adattiva QUAD di MATLAB (basata sull’utilizzo ricorsivo delle √ formule di Newton–Cotes), per il calcolo dell’integrale di sin x con una precisione richiesta di 10−3 , sono utilizzate (cfr. Figura √ 8.6)√177 valutazioni della funzione integranda, contro le 33 valutazioni per il calcolo dell’integrale di sin x − x.

0.8

. .

0.7 .

0.6 0.5 0.4 .. ... ... 0.3 .. .. . .. .. .. . . 0.2 .... .. .. .. .. .. . . 0.1 .. . ... ... .... .

0

0

0.1

..

..

..

. ..

..

..

0.2

..

.

.

.

. . . .

0.3

.

.

.

.

.

.

.

.

.

.

. . . . . . .

0.4

0.5

0.6

0.7

0.8

0.9

1



Figura 8.6 Valutazioni della funzione sin( x) in una formula di quadratura adattiva. Un modo alternativo `e fornito dalla seguente procedura. Indichiamo, pi` u in generale con f (x) una funzione integranda che presenta un punto singolare (della funzione o delle derivate) nel punto c dell’intervallo di integrazione [a, b]. Supponiamo che si possa scrivere f (x) = S(x)g(x) analisi numerica

c V. Comincioli

8.7 Complementi e Problemi

613

ove S(x) rappresenti la parte singolare di f (x) e g(x) sia regolare. Si pone allora   (x − c)n (n) f2 (x) = S(x) g(c) + (x − c)g  (c) + · · · + g (c) n! f1 (x) = f (x) − f2 (x)

Nell’esempio considerato si pu` o porre √ √ √ sin x f (x) = sin x = x √ x Se si assume c = 0, n = 0 si riottiene la decomposizione gi`a considerata in precedenza. Per n = 1 si ottiene f2 (x) =

√ $ x% x 1− ; 6

√ f1 (x) = sin x − f2 (x)

In questo modo la funzione f2 (x) pu` o essere integrata analiticamente, mentre la funzione f1 (x) `e diventata regolare e pu` o essere quindi integrata numericamente. Sottolineiamo che nel caso generale la procedura ora descritta diventa conveniente solo quando la f2 (x) `e integrabile analiticamente. Come ulteriore applicazione si consideri il seguente integrale 

1 0

ex √ dx x

per il quale si pu` o porre 1 f1 (x) = √ ; x

f2 (x) =

ex − 1 √ x

√ x Il primo integrale √ `e elementare e il secondo non ha singolarit`a. Comunque la funzione (e − 1)/ x si comporta come x vicino allo zero e quindi ha una singolarit` a nella prima derivata. Si dimostra allora migliore la seguente scelta 1+x ex − 1 − x √ f2 (x) = f1 (x) = √ ; x x √ Ritornando alla funzione sin x, segnaliamo infine la posibilit` a di eliminare la singolarit` a attraverso una sostituzione di variabile. Se poniamo t2 = x, si ottiene 

1

2t sin t dt 0

Ad esempio la formula adattiva di Simpson QUAD di MATLAB richiede 17 valutazioni per ottenere il risultato con una precisione richiesta di 10−3 .

Problema 8.8 Calcolare il seguente integrale 



I=

2

x2 e−x dx

−∞

mediante la formula di Gauss–Hermite a due punti. analisi numerica

c V. Comincioli

614

Integrazione numerica

0.7 0.65 0.6 0.55 0.5 0.45 0.4 0.35 0.3 0

1

2

3

4

5

6

7

8

9

10

Figura 8.7 Grafico della funzione 0.5 + 0.5(1 − e−0.05x ) sin x2 . Soluzione. Il polinomio di Hermite di grado 2 `e 4x2 − 2 e quindi i nodi della formula sono dati da √ ±1/ 2. Il peso della formula `e dato da 0.8862269255. La formula richiesta fornisce quindi il seguente valore

(−0.7071067811)2(0.8862269255) + (0.7071067811)2(0.8862269255) = = 0.8862269255 √ che corrisponde al valore esatto π/2, ottenuto mediante integrazione per parti. Il risultato `e conseguenza del fatto che la formula a 2–nodi (n = 1) `e esatta per i polinomi fino al grado 3.

Problema 8.9 Analizzare il calcolo numerico del seguente integrale  10 (0.5 + 0.5(1 − e−0.05x ) sin x2 ) dx 1

Soluzione. La funzione integranda presenta una oscillazione sempre pi`u spiccata avvicinandosi al secondo estremo (cfr. Figura 8.7). Una formula a passo costante pu` o, evidentemente, rivelarsi non conveniente. Infatti, vicino al punto x = 10 il passo deve essere opportunamente piccolo per non perdere le informazioni della funzione, mentre, viceversa, tale passo pu`o essere eccessivamente piccolo vicino al primo estremo. Si tratta quindi di una funzione per la quale `e utile impiegare formule adattive. In Figura 8.8 sono rappresentati i punti di valutazione della funzione integranda, quando, ad esempio, si utilizza la routine adattiva QUAD di MATLAB. Per un errore richiesto di 1.E–8 sono utilizzate 1137 valutazioni, a cui corrisponde il valore dell’integrale 5.003827601673. Un modo alternativo di affrontare il problema consiste nel sostituire alla funzione integranda una opportuna media. Nei problemi applicati, questo equivale, in sostanza, all’introduzione di un modello opportuno, che evidenzi il comportamento medio del fenomeno studiato.

Problema 8.10 Sia E un operatore differenziale lineare di ordine n ≥ 1 definito da E(u) =

n r=0

analisi numerica

ar (x)

dn−r u dxn−r c V. Comincioli

8.7 Complementi e Problemi

615

0.65 .. ... .. . .. . . . . . . . . . . . . .

..... .. . . .. . . . ... ... . . .. .. . . .. . . . . . . ....... . . . .. .. .. . . . . . . . . 0.55 . . . . . . . . . . . . . . . . . . . . . . . .. ............ . . ... ... . .. . . . . . . . . .. . .. . . . .. . . . ... . . .. ... . . . . . . . . .... .. . . . 0.5 ............. .. . . . . . . . . .. . . . . . . .. . . . . . . . .. . . . . . . . . . . .. . . .. .. . . . . .. .. . .. . . . . ... .. . . . .. . . ...... 0.45 . . . . . . . . . . . . . . . . . . . . . . .. .. . . . . . . ... . . .. . . . . . .. .. .. .... .. .. . ..

0.6

0

1

2

3

4

5

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

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

. .

.

. .

.

. .

.

. .

.

. .

.

. .

.

. .

.

. . ..

.

6

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

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

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

7

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

8

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

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

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

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

. . . .

. .

. . . .. .

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

9

.

10

Figura 8.8 Punti valutazione nella formula di quadratura adattiva. ove ar (x), r = 0, 1, . . . , n sono funzioni dotate di derivata (n − r)–ma continua nell’intervallo limitato e chiuso [a, b]. Data una generica funzione f (x) definita e continua insieme con le derivate fino all’ordine n (n ≥ 1) in [a, b] e una funzione fissata g(x) (funzione peso) sommabile su [a, b], costruire una formula di quadratura del tipo 

m n−1

b

f (x)g(x) dx = a

Ahi f (h) (xi ) + R

h=0 i=1

ove a ≡ x0 ≤ x1 < x2 < . . . < xm ≤ b ≡ xm+1 `e una suddivisione fissata dell’intervallo [a, b], esatta per ogni funzione f che sia un integrale, su ogni intervallo [xi , xi+1 ], dell’equazione differenziale E(f ) = 0 Soluzione. Lo strumento di base `e la formula di Green.

Nelle ipotesi fatte sull’operatore E si pu` o definire il corrispondente operatore aggiunto E ∗ E ∗ (v) :=

n

(−1)n−r

r=0

dn−r (ar v) dxn−r

Per funzioni u, v dotate di derivata n–ma continua si ha che E(u), E ∗ (v) sono funzioni continue su [a, b]. Consideriamo, allora, il seguente risultato ∗

vE(u) − uE (v) = =

n−1

 dn−r u dn−r (ar v)  ar v n−r − (−1)n−r u = dx dxn−r r=0

n−1 r=0

=

analisi numerica

d dx

d dx

n−1 h=0

n−r−1 h=0

(−1)n−r−h−1

dh u dn−r−h−1 (ar v) = dxh dxn−r−h−1

n−h−1 n−h−1−r dh u (ar v) n−h−1−r d (−1) h n−h−1−r dx r=0 dx

c V. Comincioli

616

Integrazione numerica

Il risultato utilizza la seguente formula v

r−1 r dh u dr−h−1 v d dr u r d v − (−1) u = (−1)r−h−1 h r r dx dx dx dx dxr−h−1 h=0

che si dimostra facilmente per induzione su r. Se introduciamo gli operatori Ek , k = 1, . . . , n definiti da k

Ek (u) =

ar (x)

r=0

dk−r u dxk−r

(En ≡ E)

e i loro aggiunti Ek∗ (v) =

k

(−1)k−r

r=0

dk−r (ar v) dxk−r

(En∗ ≡ E ∗ )

si pu` o scrivere vE(u) − uE ∗ (v) =

n−1 d dh u ∗ E (v) dx dxh n−h−1 h=0

Integrando tale identit` a su (a, b) si ricava la seguente formula di Green  a

b

b n−1  dh u  ∗ E (v) vE(u) − uE ∗ (v) dx = dxh n−h−1 a

(8.26)

h=0

Per costruire la formula di quadratura richiesta supponiamo il coefficiente a0 (x) diverso dallo zero su [a, b] e consideriamo m − 1 integrali φi (x), i = 1, . . . , m − 1 dell’equazione differenziale lineare non omogenea aggiunta E ∗ (φ) = g Costruiamo inoltre gli integrali particolari φ0 (x), φm (x) individuati dalle condizioni iniziali (j)

φ0 (a) = 0, j = 0, . . . , n − 1;

φ(j) m (b) = 0, j = 0, . . . , n − 1

Applichiamo quindi la formula di Green (8.26) ad ogni intervallo (xi , xi+1 ), i = 0, 1, . . . , m, ponendo u = f, v = φi . Si ottiene in tal modo per i = 0, 1, . . . , m 

xi+1

f g dx = −

xi

n−1 6 h=0

7xi+1  ∗ (φi ) + f (h) En−h−1 xi

xi+1

φi E(f ) dx xi

Sommando rispetto ad i e tenendo conto della definizione di φ0 , φm , si ottiene 

b

f g dx = a

m n−1

m  ∗  f (h) (xi ) En−h−1 (φi − φi−1 ) x=xi +

h=0 i=1

i=0



xi+1

φi E(f ) dx xi

Il primo termine del secondo membro fornisce la formula di quadratura richiesta, che utilizza quindi i valori della funzione f e delle sue prime n − 1 derivate nei nodi x1 , x2 , . . . , xm . Riassumendo, si ha  ∗  Ahi = En−h−1 (φi − φi−1 ) x=xi ; h = 0, 1, . . . , n − 1, i = 1, 2, . . . , m m  xi+1 R= φi E(f ) dx i=0

analisi numerica

xi

c V. Comincioli

8.7 Complementi e Problemi

617

Osserviamo che le formule di quadratura di tipo classico sono di questa forma. Il procedimento, utilizzando la formula di Green, fornisce, senza alcun procedimento di interpolazione, contemporaneamente la formula di quadratura e il resto. Vediamo alcune semplici applicazioni. Assumiamo d a+b d ; E= ⇒ E∗ = − g ≡ 1; m = 1; x1 = 2 dx dx In questo caso abbiamo E0 = 1, E0∗ = 1 e abbiamo da considerare l’equazione differenziale −dφ/dx = 1 e di essa i due integrali particolari φ0 = −(x − a), φ1 = −(x − b). Con questi elementi si ricava allora la formula delle tangenti con la seguente espressione del resto  b  (a+b)/2 (x − a)f  (x) dx − (x − b)f  (x) dx R=− (a+b)/2

a

Osserviamo che la medesima formula si pu`o ottenere con le seguenti scelte d2 a+b d2 ; E = 2 ⇒ E∗ = 2 2 dx dx ∗ ∗ e quindi E0 = 1, E1 = d/dx e E0 = 1, E1 = −d/dx. Si considera, pertanto, l’equazione differenziale d2 φ/dx2 = 1 e di essa i due integrali φ0 = (x − a)2 /2, φ1 = (x − b)2 /2. Si ottiene allora come resto   1 b 1 (a+b)/2 (x − a)2 f  (x) dx + (x − b)2 f  (x) dx R= 2 a 2 (a+b)/2 g ≡ 1; m = 1; x1 =

Le due differenti formulazioni permettono una valutazione del resto della formula di quadratura in differenti ipotesi di regolarit` a della funzione integranda f . Anche la formula di Cavalieri–Simpson pu` o essere ottenuta considerando diversi tipi di operatori, a secondo della regolarit`a richiesta alla funzione integranda f . Ci limiteremo a segnalare la seguente situazione a+b , x3 = b g ≡ 1; m = 3, x1 = a, x2 = 2 d4 d4 n = 4, E = 4 ; E ∗ = 4 dx dx Abbiamo allora E0 = 1, E0∗ = 1,

d d2 d3 , E2 = 2 , E3 = 3 dx dx dx 2 d d d3 E1∗ = − , E2∗ = 2 , E3∗ = − 3 dx dx dx

E1 =

Si considera, quindi, l’equazione differenziale d4 φ/dx4 = 1 e di questa i due integrali 1 a + 2b 1 2a + b (x − a)3 (x − ), φ2 = (x − b)3 (x − ) 24 3 24 3 Come resto si ottiene, allora  (a+b)/2 a + 2b (4) 1 )f (x) dx + (x − a)3 (x − R= 24 a 3  b 1 2a + b (4) )f (x) dx + (x − b)3 (x − 24 (a+b)/2 3 φ1 =

Supponendo |f (4) | ≤ M4 su [a, b] si ricava la limitazione |R| ≤ analisi numerica

1 (b − a)5 M4 2880 c V. Comincioli

618

Integrazione numerica

Problema 8.11 Dimostrare che la seguente formula di quadratura 





  P1 + P2 1 P2 + P3 P3 + P1 f (x, y) dxdy ≈ mis(T ) f +f +f 3 2 2 2 T ove Pi sono i vertici di un triangolo T , `e esatta per i polinomi di grado 2 (formula dei punti medi). Soluzione. Ogni punto P = (x, y) del piano pu`o essere espresso in maniera univoca mediante la relazione P = λ1 P1 + λ2 P2 + λ3 P3 ,

λ1 + λ2 + λ3 = 1

Le variabili λi sono le coordinate baricentriche di P e sono determinate come soluzioni del seguente sistema lineare, non singolare quando il triangolo T `e non degenere ⎧ ⎨λ1 x1 +λ2 x2 +λ3 x3 =x λ1 y1 +λ2 y2 +λ3 y3 =y ⎩ λ1 +λ2 +λ3 = 1 ove Pi = (xi , yi ), i = 1, 2, 3 e P = (x, y). I punti interni del triangolo T sono caratterizzati dalle condizioni λi > 0,

i = 1, 2, 3

Il baricentro corrisponde a λ1 = λ2 = λ3 = 1/3. Il lato P2 P3 ha come equazione λ1 = 0 e analoghe equazioni si hanno per gli altri lati. Se la funzione f (x, y) `e una funzione affine f (P ) = aT P + b, allora si ha f (P ) = λ1 f (P1 ) + λ2 f (P2 ) + λ3 f (P3 ) che rappresenta la formula di interpolazione lineare su griglie triangolari. Per la interpolazione quadratica a si utilizzano oltre i nodi Pi i punti di mezzo dei lati 12 (Pi + Pj ), i = j. Posto, per brevit` 1 ∆ij = f (Pi ) + u(Pj ) − 2f ( (Pi + Pj )), 2

i = j

si vede facilmente che la formula di interpolazione f (P ) ≈ λ1 f (P1 ) + λ2 f (P2 ) + λ3 f (P3 ) − 2(λ2 λ3 ∆23 + λ3 λ1 ∆31 + λ1 λ2 ∆12 ) `e esatta per i polinomi di secondo grado. Per dimostrare allora che la formula di quadratura assegnata `e esatta per i polinomi di secondo grado si pu` o procedere in questo modo.  Osservato che per ragioni di simmetria T λi dxdy assume lo stesso valore per i = 1, 2, 3 e lo stesso si ha per le varie combinazioni di T λi λj dxdy, per un polinomio di secondo grado si ha  T

f (x, y) dxdy = a(f (P1 ) + f (P2 ) + f (P3 )) − 2b(∆23 + ∆31 + ∆12 ) = (a − 4b)(f (P1 ) + f (P2 ) + f (P3 )) + 





 P2 + P3 P3 + P1 P1 + P2 +4b f +f +f 2 2 2

λ1 dxdy,

a= T

analisi numerica





ove

b=

λ1 λ2 dxdy T

c V. Comincioli

8.7 Complementi e Problemi

619

Per il calcolo di questi ultimi integrali operiamo un cambiamento di variabili, assumendo come variabili di integrazione λ1 , λ2 . Tenendo conto della relazione λ3 = 1 − λ1 − λ2 , si ha x = λ1 (x1 − x3 ) + λ2 (x2 − x3 ) + x3 y = λ1 (y1 − y3 ) + λ2 (y2 − y3 ) + y3 Il determinante della jacobiana della trasformazione `e = 2 mis(T ), e quindi  1

1−λ1

a= 0

 1

0 1−λ1

b= 0

0

 λ1 · 2 mis(T )dλ1 dλ2 = 2 mis(T )

1

λ1 (1 − λ1 )dλ1 =

0



λ1 λ2 · 2 mis(T )dλ1 dλ2 = 2 mis(T )

1

0

λ1

mis(T ) 3

(1 − λ1 )2 mis(T ) dλ1 = 2 12

da cui il risultato richiesto.

Problema 8.12 Approssimare numericamente il seguente integrale doppio  e(y/x) dx dy R

ove R (cfr. Figura 8.9) `e la regione di piano definita dalle relazioni R := {(x, y)| 0.1 ≤ x ≤ 0.5, x3 ≤ y ≤ x2 }

0.25

0.2

0.15

0.1 R 0.05

0 0

0.1

0.2

0.3

0.4

0.5

0.6

Figura 8.9 Regione R = {0.1 ≤ x ≤ 0.5; x3 ≤ y ≤ x2 }. Soluzione. Osservato che la regione R `e semplice, ad esempio rispetto alle parallele all’asse y, si pu`o ridurre il calcolo dell’integrale doppio a due integrazioni semplici successive   e R

analisi numerica

(y/x)





0.5

dx dy =

x2

dx 0.1

e(y/x) dy

x3

c V. Comincioli

620

Integrazione numerica

Se per l’approssimazione degli integrali semplici si utilizza la formula di Cavalieri-Simpson, si ottiene il seguente algoritmo, che descriviamo nel caso di un generico integrale 



b

d(x)

dx a

f (x, y) dy c(x)

Incominciamo dalla applicazione della formula di Cavalieri-Simpson semplice. Posto h=

b−a ; 2

k(x) =

d(x) − c(x) 2

si ha  b



 k(x)  f (x, c(x))+4f (x,c(x)+k(x))+f (x,d(x)) dx = 3 a c(x) a    h k(a) f (a, c(a)) + 4f (a, c(a) + k(a)) + f (a, d(a)) + 3 3 4k(a + h)  f (a + h, c(a + h)) + 4f (a + h, c(a + h) + k(a + h)) + 3  k(b)   f (a + h, d(a + h)) + f (b, c(b)) + 4f (b, c(b) + k(b)) + f (b, d(b)) 3 d(x)

b

f (x, y) dydx ≈

La descrizione dell’algoritmo nel caso dell’applicazione della formula composta di Cavalieri-Simpson `e fornita nel seguente programma in linguaggio MATLAB. a=input(’a=’); b=input(’b=’); n=input(’n=’); % 2*n numero intervalli su [a,b] m=input(’m=’); % 2*m numero intervalli su [c(x),d(x)] j1=0.; j2=0.; j3=0.; hx=(b-a)/(2*n); % passo di suddisione in x for i=0:2*n x=a+i*hx; hy=(d(x)-c(x))/(2*m); % passo di suddivisione in y k1=f([x,c(x)])+f([x,d(x)]); k2=0; % k2 termini della formula di indice pari k3=0; % k3 termini della formula di indice dispari for j=1:2*m-1 y=c(x)+j*hy; z=f([x,y]); if rem(j,2)==0 k2=k2+z; else k3=k3+z ; end end l=(k1+2*k2+4*k3)*hy/3; if i==0 | i==2*n % se i=0 o i=2*n termini estremi j1=j1+l; % della formula elseif rem(i,2)== 0 j2=j2+l; % j2 termini pari else j3=j3+l; % j3 termini dispari analisi numerica

c V. Comincioli

8.8 Esperienze in Matlab

621

end end j=(j1+2*j2+4*j3)*hx/3 function y=c(x) y=x^3; function y=d(x) y=x^2; function z=f(w) % funzione integranda; x=w(1), y=w(2) z=exp(w(2)/w(1));

Per l’integrale assegnato si ottengono i risultati in Tabella 8.5, ove flops indica il numero di operazioni floating point utilizzate per ogni scelta di m, n e I˜ il valore fornito dalla formula.

n 1 2 4 2 5 8 5 8

m 1 1 1 2 2 2 5 5

I˜ 0.033245458983 0.033301579844 0.033305342946 0.033301549562 0.033305463255 0.033305552101 0.033305461281 0.033305550127

flops 99 159 279 219 471 723 867 1335

Tabella 8.5 La tabella mostra come la precisione del risultato dipende dal numero delle suddivisioni nelle due variabili e come in corrispondenza varia il costo della formula. Nella procedura precedente si `e fissato il numero 2∗m degli intervalli della suddivisione di [c(x), d(x)] in maniera indipendente da x. In questo modo `e l’ampiezza dell’intervallo (d(x) − c(x))/(2 ∗ m) che varia con x. Viceversa, si potrebbe fissare l’ampiezza dell’intervallo. Lasciamo come esercizio la modifica in questo senso dell’algoritmo precedente, tenendo presente la difficolt`a, procedendo in questo modo, di descrivere esattamente il dominio di integrazione. Naturalmente, un modo alternativo di procedere consiste, ad esempio, nel reticolare il dominio di integrazione mediante una opportuna triangolazione e applicare su ogni triangolo la formula di quadratura analizzata nel precedente Problema 8.11, con correzioni opportune per i triangoli che hanno i vertici sulla frontiera del dominio.

8.8

Esperienze in Matlab

function f = funz(x) % sintassi f=funz(x) % esempio di funzione rapidamente oscillante % f = cos(10*x).*exp(sin(x)); -----fplot(@funz,[0 5])

analisi numerica

c V. Comincioli

622

Integrazione numerica

% Script File: ShowNCIdea % Illustra l’idea alla base del metodo di Newton-Cotes close all % Genera una funzione e la sua interpolante x = linspace(0,2); y = exp(-x).*sin(2*pi*x); x0 = linspace(0,2,8); y0 = exp(-x0).*sin(2*pi*x0); c = InterpN(x0,y0); pvals = HornerN(c,x0,x); % grafico della funzione subplot(2,2,1) plot(x,y,x,zeros(1,100),’.’) title(’f(x)’); axis([0 2 -.5 1]) % grafico dell’interpolante subplot(2,2,2) plot(x,y,x,pvals,x0,y0,’*’,x,zeros(1,100),’.’) title(’funzione’); axis([0 2 -.5 1]) % integrale della funzione subplot(2,2,3) plot(x,y) fill(x,y,[.5 .5 .5]) title(’Integrale of f(x)’); axis([0 2 -.5 1]) % integrale dell’interpolante subplot(2,2,4) plot(x,pvals) fill(x,pvals,[.5 .5 .5]) title(’Integrale dell’interpolante’); axis([0 2 -.5 1])

% % % % % % %

function numI = QNC(fname,a,b,m) numI = QNC(fname,a,b,m) Integra una funzione f(x), definita dalla stringa fname su [a, b] f definita su [a,b] ha come output un vettore colonna se x ` e un vettore colonna m intero con 2 b + 1 e r ≥ rc =

σ(σ + b + 3) σ−b−1

La Figura 9.10 corrisponde ai valori b = 8/3, σ = 10 e r = 28. Come valori iniziali si sono assunti i valori y1 = −8, y2 = 8 e y3 = r − 1. I risultati, ottenuti numericamente sull’intervallo (0, 20), mostrano l’assenza di soluzioni periodiche; tuttavia, le traiettorie rimangono limitate. In questo caso si dice che il comportamento delle soluzioni del sistema `e di tipo caotico. In effetti, a piccoli cambiamenti nelle condizioni iniziali corrispondono grandi e imprevedibili variazioni nelle orbite. In altre parole, comunque siano esatte ` le misurazioni delle condizioni iniziali, non `e possibile stimare il valore della soluzione in tempi successivi. E opportuno, tuttavia, tenere presente che il modello di Lorenz rappresenta il risultato di una semplificazione della realt`a.

analisi numerica

c V. Comincioli

9.3 Metodi numerici

9.3

643

Metodi numerici

In questo paragrafo introdurremo, attraverso opportuni esempi, le idee che sono alla base dell’approssimazione numerica del problema a valori iniziali ⎧ ⎨ y  (t) = f (t, y)

(9.28)

⎩y(t ) = y 0 0

ove la funzione f (t, y) `e supposta continua e lipschitziana in y (cfr. (9.8)). I metodi che analizzeremo hanno in comune la seguente idea di partenza. Si discretizza l’intervallo di integrazione (t0 , T ) mediante i nodi ti+1 = ti +hi , i = 0, 1, . . . , n − 1, ove hi sono detti passi della discretizzazione. Nel seguito, per motivi di semplicit` a, supporremo che tali passi siano costanti, cio`e a, nelle applicazioni `e usualmente necessario, per ottenehi = h, i = 0, 1, . . . , n − 1. In realt` re la soluzione approssimata al minimo costo, variare opportunamente il passo in funzione del comportamento della soluzione. In corrispondenza all’insieme dei nodi {ti }, un particolare metodo genera una sequenza di valori {ηi }. Tali valori definiscono la soluzione discreta e rappresentano le approssimazioni dei valori y(ti ) della soluzione del problema continuo. I vari metodi differiscono tra loro per il modo particolare con il quale vengono calcolati i valori ηi . Incominceremo dall’idea che abbiamo gi` a utilizzato in precedenza per introdurre il piano delle velocit` a (cfr. Figura 9.1), cio`e dall’approssimazione locale della curva soluzione mediante la tangente. Il metodo che ne risulta `e noto come metodo di Eulero 12 . Data la sua semplicit`a, ci servir`a anche per introdurre in maniera pi` u elementare i vari concetti.

Figura 9.11 Metodo di Eulero. Errore di troncamento locale l(t2 ) = z(t2 ) − η2 ; errore globale e(t2 ) = y(t2 ) − η2 .

12

Il metodo `e descritto da Eulero (1768) in Institutiones Calculi Integralis (Sectio Secunda, Caput VII).

analisi numerica

c V. Comincioli

644

9.3.1

Equazioni differenziali

Metodo di Eulero

Il metodo `e illustrato in forma grafica in Figura 9.11. L’equazione della tangente alla curva soluzione y(t) nel punto (t0 , y0 ) `e data da y = y0 + f (t0 , y0 )(t − t0 ) e fornisce per t = t0 + h il valore η1 = y0 + hf (t0 , y0 ) Si considera, allora, la tangente nel punto (t1 , η1 ) alla curva soluzione dell’equazione differenziale che passa per il punto (t1 , η1 ). Osserviamo che tale curva, che indicheremo, per maggiore chiarezza, con z(t), differisce in generale dalla y(t), in quanto quest’ultima `e individuata dal passaggio per il punto (t0 , y0 ). Per t = t2 l’equazione della tangente fornisce il valore η2 = η1 + hf (t1 , η1 ) Procedendo in maniera analoga, si ottiene il seguente algoritmo, che fornisce la soluzione approssimata del problema a valori iniziali (9.28) in punti equidistanti sull’intervallo (t0 , T ). Algoritmo 9.1 (Metodo di Eulero) Input : t0 , y0 , T e il numero n delle suddivisioni dell’intervallo (t0 , T ). Output : soluzione approssimata ηi . set h = (T − t0 )/n η0 = y0 do i = 0, . . . , n − 1 ηi+1 = ηi + hf (ti , ηi ) ti+1 = ti + h end do

In particolare, il valore ηn rappresenta una approssimazione della soluzione y(t) per t = tn ≡ T . % Script File: Illustrazione Eulero_esplicito % Grafici di una famiglia di soluzioni di y’(t) = -5y(t) close all t= linspace(-.1,.8); y = exp(-5*t); plot(t,y); axis([-.1 .8 -0.5 2]); hold on plot(t,zeros(size(t))) tc = 0; yc = 1; plot(tc,yc,’*’); for k=0:8 title(sprintf(’k=%1.0f, Click t(%1.0f)’,k,k+1)) [tnew,z] = ginput(1); hc = tnew-tc; fc = -5*yc; % ynew = yc + hc*fc; % plot([tc tnew],[yc ynew],’--’,tnew,ynew,’o’) tc = tnew; yc = ynew; end title(’Otto passi del metodo di Eulero (y’’=-5y, y(0)=1) ’) hold off analisi numerica

c V. Comincioli

9.3 Metodi numerici

645

Esempio 9.4 Come esempio illustrativo, si consideri il problema ⎧ ⎨y  (t) = y(t) sin 4t ⎩ y(0) = 1 che ha come soluzione esatta la funzione y = e(1−cos(4t))/4 . In Figura 9.12 sono riportati i risultati ottenuti mediante il metodo di Eulero sull’intervallo (0, 4) in corrispondenza a due valori del passo h. Pi` u precisamente, nella figura sono rappresentate le funzioni lineari a tratti che si ottengono interpolando i valori ηi forniti dal metodo di Eulero.

1.7 1.6 1.5 1.4 h=0.1 1.3 1.2 1.1 1 h=0.2

0.9 0.8

0

0.5

1

1.5

2

2.5

3

3.5

4

Figura 9.12 Risultati ottenuti con il metodo di Eulero per il problema a valori iniziali y  = y sin(4t), y(0) = 1, in corrispondenza a h = 0.2 e h = 0.1. A tratto continuo `e rappresentata la soluzione analitica.

Come si vede dall’esempio precedente, l’approssimazione migliora al diminuire del passo h. In effetti, dal punto di vista delle applicazioni `e importante che l’approssimazione possa essere migliorata fin che si vuole scegliendo opportunamente il passo h. In forma schematica, se questo avviene, si dice che lo schema `e convergente. Analizzeremo, ora, pi` u in dettaglio questo aspetto fondamentale. Studio della convergenza Per ogni ti , i = 0, 1, . . . , n, definiamo errore globale in ti la differenza tra la soluzione esatta e la soluzione calcolata mediante il metodo numerico, ossia la quantit`a e(ti , h) := y(ti ) − ηi La convergenza riguarda il comportamento della funzione h → e(ti , h) al tendere a zero di h. Considerato, ad esempio, il punto t = T , per h → 0 si ha n → ∞, e lo schema verr`a detto convergente nel punto T quando lim e(tn , h) = 0 ⇐⇒

h→0

analisi numerica

lim ηn = y(T )

n→∞

c V. Comincioli

646

Equazioni differenziali

Un altro aspetto importante nello studio della convergenza riguarda l’analisi della rapidit` a di convergenza rispetto ad h. Tale analisi, oltre che fornire indicazioni sulla scelta di un particolare passo per ottenere una accuratezza desiderata, `e anche alla base per l’utilizzo di formule di estrapolazione (analoghe a quelle esaminate nel capitolo precedente nell’ambito delle formule di quadratura). Analizzeremo, ora, la questione della convergenza nel caso specifico del metodo di Eulero, ma le idee, come vedremo, sono di validit`a pi` u generale. Osserviamo in Figura 9.11 il comportamento della soluzione approssimata rispetto alla soluzione continua nel punto t2 , che rappresenta, in realt` a, la situazione in un generico punto ti per i > 1. Nell’errore globale y(t2 ) − η2 si individuano due contributi. Il primo `e l’errore introdotto dal metodo, dovuto al fatto che la soluzione passante dal punto (t1 , η1 ) `e stata sostituita dalla tangente. Questo errore, definito ad ogni avanzamento del passo, dalla quantit` a li (h, f ) := z(ti+1 ) − [ηi + hf (ti , ηi )] `e chiamato errore di troncamento locale. La quantit` a τi (h, f ) :=

z(ti + h) − z(ti ) li (h, f ) = − f (ti , z(ti )) h h

chiamata errore di discretizzazione locale, fornisce una misura di come l’equazione alle differenze, corrispondente al metodo numerico, approssima l’equazione differenziale data. Quando l’errore di discretizzazione locale tende a zero per h → 0, si dice che il metodo `e consistente. Dal momento che nelle ipotesi fatte su f la soluzione y dell’equazione differenziale risulta derivabile, ne segue che il metodo di Eulero `e un metodo consistente. In effetti, tale risultato equivale a dire che il rapporto incrementale tende alla derivata. Si pu` o ulteriormente precisare tale convergenza, quando la funzione f `e pi` u regolare, ad esempio derivabile in t e y. Si ha, allora, che la soluzione z `e dotata di derivata seconda e quindi vale il seguente sviluppo in serie z(ti + h) = z(ti ) + hz  (ti ) +

h2  z (ti + θi h) 2

(9.29)

ove θi `e un opportuno valore in (0, 1). Ricordando che z  (ti ) = f (ti , z(ti )), si ha pertanto li (h, f ) := z(ti+1 ) − [ηi + hf (ti , ηi )] =

h2  z (ti + θi h) 2

(9.30)

da cui |τi (h, f )| ≤ M h

(9.31)

u in generale, quando l’errore con M ≥ |z  (t)| = |ft (t, y) + f (t, y)fy (t, y)|, t ∈ [t0 , T ], y ∈ R. Pi` di discretizzazione di un metodo tende a zero come hr , cio`e τ (f, h) = O(hr ), si dice che il metodo `e di ordine r . In particolare, quindi, il metodo di Eulero `e un metodo del primo ordine. Sottolineiamo che la precisazione sull’ordine del metodo ha richiesto un supplemento di regolarit`a della soluzione; quindi, se la regolarit`a non `e quella richiesta, la precisione dell’approssimazione pu`o essere inferiore. Il secondo contributo all’errore globale y(ti+1 ) − ηi+1 `e dovuto al fatto che la tangente `e considerata nel punto (ti , ηi ), anzich´e nel punto (ti , y(ti )) della soluzione del problema assegnato (9.28). Tale contributo non `e locale, in quanto esso rappresenta l’accumulo di tutti gli errori di analisi numerica

c V. Comincioli

9.3 Metodi numerici

647

troncamento locale commessi in precedenza. La Figura 9.11 suggerisce, anche, che l’entit` a di tale contributo dipende dal condizionamento del problema, cio`e da come l’errore y(t1 ) − η1 si propaga nell’errore y(t2 ) − z(t2 ). Quando h tende a zero, il numero degli errori di troncamento locale tende all’infinito. Non `e, quindi, evidente a priori che la consistenza di un metodo, cio`e la convergenza a zero dei singoli errori locali, comporti necessariamente la convergenza a zero dell’errore globale. In realt`a, affinch´e si abbia la convergenza, occorre che l’accumulo degli errori di troncamento locale si mantenga limitato quando h tende a zero. Quando questo avviene, si dice che il metodo `e stabile. La denominazione sottolinea il fatto che per un metodo stabile le perturbazioni sui risultati numerici, corrispondenti a delle perturbazioni sui dati, si mantengono limitate, non “esplodono”, per h che tende a zero. Dimostreremo, ora, che il metodo di Eulero `e un metodo stabile; pi` u precisamente, dimostreremo che il metodo `e convergente. Verificheremo, quindi, sull’esempio particolare del metodo di Eulero, il seguente risultato di validit` a pi` u generale convergenza = stabilit`a + consistenza

Nel seguito segnaleremo esempi di metodi consistenti, ma non stabili, e non convergenti. Per dimostrare la stabilit` a utilizzeremo il seguente risultato sulle equazioni alle differenze. Lemma 9.1 Se α e β sono numeri reali positivi e {wi }ki=0 `e una successione con w0 ≥ −β/α e wi+1 ≤ (1 + α)wi + β

per ogni i = 0, 1, 2, . . . , k − 1

allora wi+1 ≤ e(i+1)α

$β % β + w0 − α α

(9.32)

(9.33)

Dimostrazione. Per ogni i fissato, dalla disuguaglianza (9.32) si ha wi+1 ≤ (1 + α)wi + β ≤ (1 + α)[(1 + α)wi−1 + β] + β .. . ≤ (1 + α)i+1 w0 + [1 + (1 + α) + (1 + α)2 + · · · + (1 + α)i ] β i

Utilizzando la formula per il calcolo della somma della serie geometrica j=0 (1 + α)j di ragione (1 + α), si ha $β % β (1 + α)i+1 − 1 β = (1 + α)i+1 + w0 − wi+1 ≤ (1 + α)i+1 w0 + α α α Per concludere, `e sufficiente tenere conto che per ogni x ≥ −1 si ha 0 ≤ 1 + x ≤ ex come si dimostra facilmente per sviluppo in serie della funzione ex .

Teorema 9.2 (Convergenza del metodo di Eulero) Sia y(t) la soluzione del problema (9.28), con f (t, y) continua e lipschitziana in y con costante L. Se ηi , per i = 0, 1, . . . , n, con h = (T − t0 )/n, indica la soluzione ottenuta con il metodo di Eulero, si ha la seguente maggiorazione dell’errore |y(ti ) − ηi | ≤ analisi numerica

eL|ti −t0 | − 1 |τ (h, f )| L

(9.34) c V. Comincioli

648

Equazioni differenziali

ove τ (h, f ) = max0≤i≤n τi (h, f ). In particolare, quando la soluzione y(t) ammette la derivata seconda e |y  (t)| ≤ M , allora |y(ti ) − ηi | ≤

eL|ti −t0 | − 1 hM L 2

(9.35)

Dimostrazione. Per la soluzione y(t) del problema (9.28) si ha (cfr. (9.29)) y(ti+1 ) = y(ti ) + h f (ti , y(ti )) + h τi

(9.36)

Per sottrazione dalla relazione ηi+1 = ηi + hf (ti , ηi ), che definisce il metodo di Eulero, si ha yi+1 − ηi+1 = yi − ηi + h [f (ti , yi ) − f (ti , ηi )] + h τi da cui, dalla propriet` a di lipschitzianit` a della f |yi+1 − ηi+1 | ≤ |yi − ηi | (1 + |h|L) + |h| |τ | ove |τ | ≥ |τi |. Con riferimento al Lemma 9.1, con wj = |yj − ηj | per j = 0, 1, . . . , n e α = |h|L e β = |h||τ |, si ha, quando η0 = y0 ei|h|L − 1 |τ | |yi − ηi | ≤ L da cui il risultato richiesto, tenendo conto che ih = ti − t0 .

La maggiorazione (9.34) mostra che per il metodo di Eulero l’errore globale `e maggiorato dall’errore locale, moltiplicato per la quantit` a (eL|ti −t0 | − 1)/L, che risulta indipendente dal passo h. Questo `e, in sostanza, il senso della stabilit`a del metodo. La maggiorazione (9.35) indica, inoltre, che, quando la soluzione y(t) ha la derivata seconda, l’errore globale tende a zero linearmente con h. In questo caso la maggiorazione potrebbe essere utilizzata per indicare il valore del passo h necessario per ottenere una approssimazione ηi tale che |y(xi ) − ηi | ≤ , con  prefissato. Tuttavia, tale possibilit` a `e solo teorica, in quanto presuppone la conoscenza di una buona stima di M , cio`e di una limitazione stretta delle funzioni f, fx e fy nella regione di integrazione. Un’altra ragione che rende, in generale, non utilizzabile da un punto di vista pratico la maggiorazione (9.35) deriva dal fatto che in alcuni casi essa non `e stretta. Come illustrazione, si consideri il seguente problema a valori iniziali y  (t) = −y(t) + t + 1,

0 ≤ t ≤ 1, y(0) = 1

che ha la soluzione esatta y(t) = t + e−t , e quindi y  (t) = e−t e |y  (t)| ≤ e−0 = 1, per t ∈ [0, 1]. Essendo, inoltre, fy = −1, la funzione f (t, y) `e una funzione lipschitziana con costante L = 1. La maggiorazione (9.35) diventa pertanto |yi − ηi | ≤ 0.5 h (eti − 1) In Figura 9.13 sono indicati sia l’errore vero che l’errore stimato mediante la maggiorazione precedente per h = 0.1 e sull’intervallo [0, 1]. Mentre l’errore stimato cresce in maniera esponenziale, l’errore attuale rimane praticamente limitato. La ragione di tale comportamento `e da attribuire al fatto che la derivata fy `e negativa, e come abbiamo gi`a osservato, per un problema di questo tipo gli errori, per t che aumenta, tendono a smorzarsi. analisi numerica

c V. Comincioli

9.3 Metodi numerici

649

0.09 0.08 0.07 0.06

errore stimato

0.05 0.04 0.03 errore attuale

0.02 0.01 0 0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

ti 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.

attuale 0.004837 0.008730 0.011818 0.014220 0.016040 0.017370 0.018288 0.018861 0.019149 0.019201

stimato 0.005258 0.011070 0.017492 0.024591 0.032436 0.041105 0.050687 0.061277 0.072980 0.085914

Figura 9.13 Errore attuale e errore stimato relativi al metodo di Eulero per il problema a valori iniziali y  = −y + t + 1; y(0) = 1.

Una semplice strategia di cambiamento del passo Un aspetto importante nelle applicazioni `e la possibilit`a di stimare la precisione ottenuta durante il calcolo. Nella pratica, infatti, `e assegnata una tolleranza , e si vuole che la soluzione numerica approssimi la soluzione del problema continuo a meno di ; pi` u precisamente, si vuole che |yi −ηi | ≈ a, dal , nel caso che si desideri controllare l’errore assoluto e ≈ |yi | per l’errore relativo. In realt` momento che in generale non `e facile stimare l’errore globale, ci si limita a controllare l’errore di troncamento locale. Per il metodo di Eulero l’errore di troncamento locale `e, come abbiamo visto (cfr. (9.30)), proporzionale a h2 y  . Si vede, quindi, che per controllare l’errore locale mediante una opportuna scelta del passo h `e necessario avere una stima della derivata seconda. Per ottenere tale stima si pu` o, ad esempio, utilizzare il seguente algoritmo.  = f (ti−1 , ηi−1 ), ηi = f (ti , ηi ) e di volere (1) Supponiamo di avere calcolato ηi−1 , ηi , e quindi ηi−1 a  assegnata. calcolare la soluzione nel punto ti+1 con un errore locale minore di una quantit`  a Una stima di y `e fornita dalla quantit`  ηi−1,i :=

 ηi − ηi−1 ti − ti−1

e, quindi, si sceglier` a h = ti−1 − ti in maniera che  | |ηi−1,i

h2 ≤ ⇒ h≤ 2

3

2  |ηi−1,i |

Nell’applicazione pratica h `e scelto, “prudentemente”, minore di tale valore, ad esempio 0.9 di esso. Inoltre, si introduce un intervallo [hmin , hmax ] nel quale `e permessa la variazione del passo. In definitiva, si ha la seguente formula   3 % $ 2 , hmax , hmin h = max min 0.9  |ηi−1,i | Per controllare l’errore relativo si sostituisce  con  |ηi |. analisi numerica

c V. Comincioli

650

Equazioni differenziali

(2) Si calcola il valore ηi+1 nel punto ti+1 mediante il metodo di Eulero. (3) Si utilizzano le informazioni, ora aggiornate, nel punto ti+1 per verificare se il passo utilizzato `e corretto; ricordiamo, infatti, che la stima di y  ha utilizzato punti precedenti a ti+1 . Si calcola, quindi η  − ηi  := i+1 ηi,i+1 ti+1 − ti  e si controlla se la quantit` a |yi,i+1 | h2 /2 `e sufficientemente piccola. In caso contrario, si deve u piccolo. tornare indietro al punto ti e usare un passo pi`

Nella forma precedente il metodo di Eulero diventa un metodo adattivo, cio`e un metodo in grado di scegliere il passo in base al comportamento della soluzione del problema particolare trattato. L’idea, ora vista per il metodo di Eulero, pu` o essere opportunamente adattata, come vedremo nel seguito, ai metodi di ordine superiore, sfruttando, quando possibile, anche la possibilit`a di cambiare, oltre che il passo, anche l’ordine del metodo. Osserviamo, per concludere, che le strategie pi` u comuni per il cambiamento del passo sono solo parzialmente basate su un fondamento teorico. Molto spesso esse sono una opportuna combinazione di teoria, empirismo e intuizione.

9.3.2

Influenza degli errori di arrotondamento

Quando il metodo numerico `e implementato su calcolatore, anzich´e la successione ηi si ottiene una successione di numeri macchina η˜i , corrispondenti alla seguente iterazione η˜i+1 = η˜i + hf (ti , η˜i ) + ρi

i = 0, 1, . . . , n − 1

(9.37)

ove ρi sono gli errori locali di arrotondamento. Se poniamo ρ(h) =

max |ρi |

0≤i≤n−1

si ha che ρ(h) non decresce, in generale, per h → 0. Per vedere l’effetto degli errori di arrotondamento, si sottrae la (9.37) dalla equazione (9.36) e si ottiene e˜i+1 = e˜i + h[f (ti , yi ) − f (ti , η˜i )] + hτi − ρi ove e˜i = y(ti ) − η˜i . Procedendo come in Teorema 9.2, si ottiene la seguente limitazione dell’errore |˜ ei | ≤ eL|ti −t0 | |y0 − η˜0 | +

 eL|ti −t0 | − 1   ρ(h)  τ (h) + L h

(9.38)

Tale limitazione indica che al di sotto di un valore h∗ l’errore totale pu`o aumentare. Il valore h∗ dipende, in particolare, da ρ(h), e quindi dalla precisione macchina utilizzata. Tenendo presente che il metodo di Eulero `e un metodo del primo ordine, per avere un errore locale, ad esempio, dell’ordine di 10−4 , `e necessario un passo h ≈ 10−4 . D’altra parte, con una precisione macchina eps ≈ 1. 10−7 (semplice precisione) si ha eps /h ≈ 1. 10−3 . Si vede quindi che in semplice precisione per un passo h dell’ordine indicato gli errori di arrotondamento possono prevalere sull’errore di troncamento locale. Questa `e in sostanza una delle motivazioni per introdurre i metodi di ordine ` superiore, con i quali `e possibile ottenere la medesima precisione, utilizzando passi pi` u grandi. E opportuno, comunque, osservare che la limitazione (9.38) si riferisce alla situazione peggiore. In pratica, gli errori di arrotondamento, variando in segno e grandezza, possono compensarsi. analisi numerica

c V. Comincioli

9.3 Metodi numerici

9.3.3

651

Metodi di sviluppo in serie

Il metodo di Eulero corrisponde ad approssimare in ogni punto ti la soluzione mediante la tangente, cio`e mediante lo sviluppo in serie della funzione arrestato al termine di primo grado. Quando la funzione f (t, y) `e sufficientemente regolare, si possono ottenere metodi di ordine superiore al primo utilizzando uno sviluppo in serie di grado superiore. Il punto di partenza di tali metodi `e, pertanto, il seguente sviluppo in serie y(ti+1 ) = y(ti ) + h ∆(ti , yi ; h, f )

(9.39)

ove si `e posto

h  h2 y (t) + y  (t) + · · · 2 3! Le derivate in tale sviluppo non sono note esplicitamente, in quanto non `e nota la soluzione. Comunque, esse possono essere ottenute derivando successivamente l’equazione y  (t) = f (t, y(t)). Si ha, ad esempio ∆(t, y; h, f ) = y  (t) +

y  = f  = ft + fy y  = ft + fy f y  = f  = ftt + fty f + fyt f + fyy f 2 + fy ft + fy2 f = ftt + 2fty f + fyy f 2 + ft fy + fy2 f ` In maniera analoga, si pu` o esprimere ogni derivata di y in termini di f (t, y) e delle sue derivate parziali. E, comunque, evidente che, salvo per funzioni f particolari, ad esempio per le funzioni lineari in y, le derivate di ordine superiore possono avere espressioni complicate. Da (9.39) si pu` o ottenere, per ogni intero p fissato, un particolare metodo numerico, troncando la serie ai primi p termini. Si ha quindi ηi+1 = ηi + h Φ(ti , ηi ; h, f ) ove Φ(t, η; h, f ) = f (t, η) +

i = 0, 1, . . .

h  hp−1 (p−1) f (t, η) + · · · + f (t, η) 2 p!

Per p = 1 si riottiene il metodo di Eulero, mentre per p = 2 si ha il seguente metodo del secondo ordine   h ηi+1 = ηi + h f (ti , ηi ) + (ft (ti , ηi ) + fy (ti , ηi )f (ti , ηi )) 2 Esempio 9.5 Consideriamo la risoluzione numerica del seguente problema y =

1 y − − y2 t2 t

con la condizione iniziale y(1) = −1. Si verifica facilmente che la soluzione esatta `e data da y = −1/t.

h

e(1)

e(1) (hi+1 )/e(1) (hi )

e(2)

e(2) (hi+1 )/e(2) (hi )

1/16

-0.035862

1/32

-0.018075

0.5040

0.000463

0.246

1/64

-0.009075

0.5020

0.000115

0.248

1/128

-0.004547

0.5010

0.000028

0.249

0.001877

Tabella 9.1 Metodi di sviluppo in serie, con p = 1 e p = 2, per il calcolo della soluzione in t = 2 del problema a valori iniziali y  = 1/t2 − y/t − y 2 , con la condizione y(1) = −1.

analisi numerica

c V. Comincioli

652

Equazioni differenziali

Nella Tabella 9.1 sono riportati i risultati ottenuti in t = 2 mediante il metodo di sviluppo in serie per p = 1 e p = 2 e per successivi valori di h. Pi` u precisamente, con e(1) , rispettivamente e(2) , `e indicato l’errore globale ottenuto con il metodo corrispondente a p = 1, rispettivamente p = 2. In questo caso si ha f (t, y) =

y 1 − − y2; t2 t

f  (t, y) = −

y 2 y + 2 − 2yy  − t3 t t

Si vede che in corrispondenza al dimezzarsi del passo h l’errore per p = 1 `e approssimativamente diviso per 2, mentre `e diviso per 4 per p = 2. Tale comportamento dell’errore `e rappresentato in Figura 9.14, che riporta in scala logaritmica i valori assoluti degli errori.

10 -1 log errore

10 -2

ordine 1

10 -3 ordine 2 10 -4

log h

10 -5 -3 10

10 -2

10 -1

Figura 9.14 Convergenza dei metodi di sviluppo in serie per p = 1 e p = 2.

 Esercizio 9.3 Mostrare che il metodo di sviluppo in serie di ordine p applicato al problema y  = λy, ¯ i y0 , ove h ¯ = hλ e y(0) = y0 genera la successione ηi = ρ(h)

¯2 ¯p ¯ =1+h ¯ + h + ···+ h ρ(h) 2! p! ¯ < 1 se e solo se −2 < h ¯ < 0. Per p = 2, mostrare che |ρ(h)|

9.3.4

Metodi di Runge-Kutta

Come `e gi`a stato osservato, l’utilit`a pratica dei metodi di sviluppo in serie `e limitata dalla necessit`a di calcolare le derivate della funzione f (t, y). I metodi di Runge-Kutta 13 evitano tale inconveniente approssimando le derivate mediante opportuni valori della funzione f (t, y) nell’intervallo (ti , ti+1 ). Altri metodi, che esamineremo nel seguito, utilizzano, per approssimare le derivate di f , i valori della soluzione approssimata ηj in opportuni punti precedenti tj , j = i, i − 1, . . . , i − r della reticolazione. Per tale motivi quest’ultimi vengono chiamati metodi a pi` u passi, mentre i metodi 13

introdotti da Runge nel 1895 e successivamente sviluppati da Heun (1900) e da Kutta (1901).

analisi numerica

c V. Comincioli

9.3 Metodi numerici

653

ricavati dallo sviluppo in serie che abbiamo visto nel paragrafo precedente e i metodi di RungeKutta che esamineremo in questo paragrafo sono chiamati metodi a un passo. Rinviando al seguito per una discussione pi` u appropriata, si pu` o dire, in maniera schematica, che a parit`a di ordine un metodo a pi` u passi, sfruttando meglio la memoria, `e meno costoso di un metodo a un passo. D’altra parte, un metodo a un passo `e, in generale, di pi` u facile implementazione e richiede, diversamente dai metodi a pi` u passi, la conoscenza solo del valore iniziale η0 . Introduciamo l’idea dei metodi Runge-Kutta mediante l’analisi di un caso particolare. Riprendendo le notazioni del paragrafo precedente, poniamo Φ(t, y; h) = c1 f (t, y) + c2 f (t + ha2 , y + h b21 f (t, y)) ove c1 , c2 , a2 e b21 sono costanti da determinare in maniera che tra i seguenti sviluppi in serie   Φ(t, y; h) = (c1 +c2 )f (t, y)+hc2 a2 ft (t, y)+b21 fy (t, y)f (t, y) +O(h2 )  1  ∆(t, y; h) = f (t, y) + h ft (t, y) + fy (t, y)f (t, y) + O(h2 ) 2 si abbia la coincidenza del massimo numero di coefficienti di potenze di h. Si ottiene facilmente il sistema di equazioni 1 1 c1 + c2 = 1, c2 a2 = , c2 b21 = 2 2 per il quale, indicato con α un parametro = 0, si ha il seguente insieme di soluzioni c1 = 1 − α,

c2 = α,

a2 = b21 =

1 2α

e la corrispondente famiglia di metodi h h ,y + f (t, y)) 2α 2α In particolare, per α = 1/2 si ottiene il seguente metodo, noto anche come metodo di Heun Φ(t, y; h) = (1 − α)f (t, y) + αf (t +

ηi+1 = ηi +

 h f (ti , ηi ) + f (ti + h, ηi + hf (ti , ηi )) 2

e per α = 1 il metodo di Eulero modificato   1 1 ηi+1 = ηi + h f (ti + h, ηi + hf (ti , ηi )) 2 2 Ambedue i metodi utilizzano due valutazioni della funzione f . Come esemplificazione, il metodo di Heun `e illustrato in Figura 9.15. Il procedimento sviluppato in precedenza in un caso particolare pu`o essere esteso in modo da utilizzare un qualsiasi numero m di valutazioni della funzione f . In questo modo si ottiene il seguente metodo generale di Runge–Kutta esplicito a m-stadi ηi+1 = ηi + h Φ(ti , ηi ; h) m cr kr , k1 = f (t, y) Φ(t, η; h) := r=1

kr = f (t + har , y + h

r−1

(9.40)

brs ks ), r = 2, . . . , m

s=1

analisi numerica

c V. Comincioli

654

10

Equazioni differenziali

Y=Y0 T=T0 DO 10 I=1,N YP1=F(T,Y) T=T+H YS=Y+H*YP1 YP2=F(T,YS) Y=Y+0.5*H*(YP1+YP2) CONTINUE

1

2

3

Figura 9.15 Illustrazione del metodo di Heun. La retta (1) ha coefficiente angolare dato dalla media tra il coefficiente angolare della tangente nel punto (ti , ηi ), rappresentata dalla retta (3) e quello della retta (2), che rappresenta la tangente alla curva soluzione del problema a valori iniziali assegnato passante per il punto (ti+1 , ηi + hf (ti , ηi )).

Un modo usuale di rappresentare il metodo (9.40) `e sotto forma di tableau, noto anche come Butcher array e illustrato in Tabella 9.2. 0 a2 a3 .. . am

b21 b31 .. .

b32 .. .

bm1 c1

bm2 c2

.. . ··· ···

bm m−1 cm−1

cm

Tabella 9.2 Tableau relativo a un generico metodo Runge–Kutta esplicito. Esempi corrispondenti ad alcuni valori di m sono indicati in Tabella 9.3; in particolare, tra i metodi corrispondenti a m = 4 si trova uno dei metodi pi` u noti per approssimare la soluzione dei problemi a valori iniziali, definito dalle seguenti formule h (k1 + 2k2 + 2k3 + k4 ) 6 1 1 k1 = f (ti , ηi ), k2 = f (ti + h, ηi + hk1 ) 2 2 1 1 k3 = f (ti + h, ηi + hk2 ), k4 = f (ti + h, ηi + hk3 ) 2 2 ηi+1 = ηi +

Tale metodo `e di ordine 4, ossia, se la funzione f `e sufficientemente regolare, per il corrispondente errore locale si ha τ (x, y) = O(h4 ). Il risultato `e a priori prevedibile, dal momento che nel caso particolare in cui la funzione f `e indipendente dalla variabile y, la formula si riduce alla formula di integrazione di Simpson. Esempio 9.6 Nella Tabella 9.4 sono messi a confronto, a parit`a di costo, i risultati ottenuti mediante alcuni metodi di Runge–Kutta per il seguente problema y  = −y + 1;

x ∈ [0, 1];

y(0) = 0

che ha come soluzione y = 1 − e−t . I risultati chiariscono in maniera evidente il significato dell’ordine di un metodo. analisi numerica

c V. Comincioli

9.3 Metodi numerici

655

RK ordine 2

Heun ordine 3

RK ordine 4 0

0 1 2

1 2

0

1

1 2

1 2

1 2

0

1 2

1

0

0

1

1 6

1 3

1 3

0 1 3

1 3

2 3

0

2 3

1 4

0

1 6

3 4

Tabella 9.3 Esempi di metodi di Runge-Kutta espliciti. metodo

metodo

metodo

valore

Eulero

Eulero modificato

Runge–Kutta 4

esatto

t

h=0.025

h=.05

h=.1

.1

.09631

.09512

.0951625

.095162582

.2

.18334

.18119

.1812691

.181269247

.3

.26200

.25908

.2591815

.259181779

.4

.33307

.32956

.3296797

.329679954

.5

.39731

.39333

.3934690

.393469340

Tabella 9.4 Confronto tra metodi di Runge–Kutta di differente ordine e a parit` a di costo. function [tn1,yn1,fn1] = RKpasso(fname,tn,yn,fn,h,k) % % % % % % % %

Sintassi [tn1,yn1,fn1] = RKpasso(fname,tn,yn,fn,h,p) fname stringa che contiene il nome di una funzione della forma f(t,y) con t scalare e y vettore colonna. h passo di discretizzazione. k ordine del metodo Runge-Kutta utilizzato, 1 0.02 i moduli di tali componenti tendono all’infinito, per i → ∞. Un risultato decisamente migliore si ottiene con il metodo di Eulero implicito, che ha come soluzione la seguente successione c1 c2 (1) + ηi = (1 − hλ1 )i (1 − hλ2 )i c1 c2 (2) ηi = − (1 − hλ1 )i (1 − hλ2 )i che tende a zero, qualunque sia la scelta di h > 0. Con tale metodo `e quindi possibile scegliere il passo in base solo all’accuratezza richiesta; in particolare, come si rileva dalla figura, `e opportuno scegliere un passo inferiore a 0.02 nella fase transiente, ma successivamente l’ampiezza del passo pu` o essere convenientemente elevata. In maniera schematica un’equazione differenziale `e stiff se la soluzione cercata varia lentamente, ma vi sono soluzioni ‘vicine’ che variano rapidamente, in maniera che il metodo numerico (se non scelto opportunamente!) deve usare passi ‘piccoli’ per ottenere risultati soddisfacenti. La stiffness `e una questione di efficienza. Se il tempo di esecuzione non `e un problema, allora la stiffness non `e una questione di rilevanza. I metodi non stiff possono risolvere problemi stiff: solamente lo fanno richiedendo pi` u tempo. Consideriamo un semplice esempio illustrativo. Quando si accende un fiammifero, la sfera della fiamma cresce rapidamente fino a raggiungere una dimensione critica, quando la quantit`a di ossigeno che `e consumata nell’interno della sfera bilancia la quantit` a di ossigeno disponibile sulla superfice. Un semplice modello matematico del fenomeno `e il seguente dy = y2 − y3, dt y(0) = δ analisi numerica

0 < t < 2/δ

c V. Comincioli

680

Equazioni differenziali

ove y(t) rappresenta il raggio della sfera. I termini y 2 e y 3 corrispondono all’area della superficie della sfera e rispettivamente il volume. Il valore δ, corrispondente al raggio iniziale `e il parametro critico. Il valore y¯ = 1 rappresenta il valore stazionario. Ogni soluzione vicino a tale valore aumenta o decresce rapidamente verso tale soluzione.

Figura 9.25 Soluzioni del modello del fiammifero ottenute mediante ode45 e ode23s. Si pu` o sperimentare l’efficienza dei metodi stiff rispetto ai metodi non stiff mediante il seguente programma delta=0.0001; F=inline(’y.^2-y.^3’,’t’,’y’); opts=odeset(’RelTol’,1.e-4); ode45(F,[0 2/delta], delta,opts); %ode23s(F, [0 2/delta],delta,opts);

In Figura 9.25 sono riportate le soluzioni ottenute rispettivamente con un metodo non stiff (ode45) e un metodo stiff (ode23s). A parit`a di precisione richiesta il primo metodo impiega 12161 valutazioni (6.033 sec) mentre il secondo richiede 100 valutazioni (0.172 sec). Come ulteriore esempio si consideri la seguente equazione (Curtiss-Hirschfelder ) y  = −50(y − cos t),

0 ≤ t ≤ 10,

y(0) = 1

che ha la seguente soluzione y(t) =

2500 50 1 −50t cos t + sin t + e 2501 2501 2501

che approssima una curva periodica con una velocit`a esponenziale. function dydt=curtiss(t,y) dydt=[-50*(y(1)-cos(t))]; %%% ode45(@curtiss,[0 1/50],[1]); ode15s(@curtiss,[0 1/50],[1]);

analisi numerica

c V. Comincioli

9.4 Equazioni stiff

681

Modello di Van der Pol L’uso dei modelli matematici per studiare l’attivit` a elettrica del cuore ha una lunga storia. Il primo modello, proposto da Van der Pol (1928) rappresentava il ritmo cardiaco attraverso il comportamento di un circuito elettrico contenente un elemento non lineare (una ‘triode valve’ la cui resistenza dipende dalla corrente applicata). Matematicamente, il circuito `e descritto dall’equazione differenziale    y1 = y y1 = y2 2 y¨ − µ (1 − y ) y˙ + y = 0 (µ > 0), y2 = y  y2 = µ(1 − y12 )y2 − y1

Figura 9.26 Soluzioni del modello di Van der Pol per µ = 1 (ode45) e µ = 1000 (ode15s). function dydt = fvdpm(t,y,mu) %fvdpm calcola van der Pol ODEs per mu dydt = [y(2); mu*(1-y(1)^2)*y(2)-y(1)]; -------mu=1; [t,y]=ode45(@fvdpm,[0 20],[2 0],[],mu); plot(y(:,1),y(:,2))

Per valori non negativi di µ la soluzione dell’equazione dell’equazione di Van der Pol con y(0) = 2, y  (0) = 0 `e periodica. Al crescere di µ aumenta la stiffness del problema. In Figura 9.26 sono rappresentate le soluzioni per µ = 1 e µ = 1000, ottenute rispettivamente con ode45 e ode15s. Mediante le istruzioni ode15s(@fvdpm,[0 3000],[2 0],[],1000); ode45(@fvdpm,[0 3000],[2 0],[],1000);

si vede l’evoluzione dei singoli metodi ed `e possibile arrestare l’esecuzione. Osserviamo che per il sistema linearizzato, il rapporto tra le parti reali degli autovalori `e approssimativamente 103 per µ = 1 e 107 per µ = 1000. Tale risultato mostra un aumento della stiffness al crescere del parametro µ. L’esempio precedente suggerisce una definizione generale di sistema stiff e indica la strada da seguire per ricercare metodi numerici opportuni. Rinviando al seguito la seconda questione, vediamo dapprima analisi numerica

c V. Comincioli

682

Equazioni differenziali

come pu` o essere formalizzata la definizione di stiffness nel caso di un problema a valori iniziali per un sistema di equazioni non lineari y = f (t, y),

t ∈ (t0 , T )

(9.77)

y(t0 ) = y0

(9.78)

ove y = [y1 , y2 , . . . , yn ]T , f = [f1 , f2 , . . . , fn ]T , n ≥ 1. Per determinare se tale problema `e di tipo stiff, `e ¯ dell’equazione (9.77) nell’intorno della soluzione particolare necessario conoscere la natura delle soluzioni y y(t). In tale intorno, l’equazione (9.77) pu`o essere approssimata dalla seguente equazione lineare, ottenuta per sviluppo in serie e detta equazione variazionale % $ ¯ − y(t) − f (t, y(t)) = 0 ¯ − J y y ove J indica la matrice Jacobiana fy = [∂fi /∂yj ], i, j = 1, 2, . . . , n, calcolata in (t, y(t)). Indichiamo con λi (t), i = 1, 2, . . . , n gli autovalori locali (che supporremo distinti) della matrice Jacobiana J. Allora, le ¯ in un intorno della soluzione esatta y(t) sono della forma soluzioni y ¯ ≈ y(t) + y

n

ci eλi t ξ i

i=1

ove ci sono costanti arbitrarie e ξ sono gli autovalori di J. Le autofunzioni eλi t caratterizzano quindi la risposta locale del sistema a piccole variazioni o perturbazioni intorno a y(t). Supporremo che il sistema sia localmente stabile, ossia tale che (λi ) < 0, i = 1, 2, . . . , n. I valori 1/ (−λi ) sono chiamate le costanti di tempo locali e sono alla base della seguente definizione di stiffness. Definizione 9.3 (stiffness) Il problema a valori iniziali (9.77), (9.78) `e detto stiff in un intervallo I ⊂ [t0 , T ] se, per t ∈ I 1.

(λi ) < 0;

/ 2. S(t) := maxi=1,...,n (−λi ) mini=1,...,n (−λi )  1 ove λi sono gli autovalori della matrice Jacobiana J corrispondente alla soluzione y calcolata in t. Il rapporto S(t) pu` o essere assunto come una misura di quanto il sistema dato `e stiff. In realt`a, la presenza o no di stiffness in un sistema differenziale `e una questione abbastanza delicata, non sempre riconducibile allo schema contenuto nella definizione precedente. In effetti, si possono costruire problemi per i quali S(t) `e grande, ma che possono essere risolti con metodi classici senza altre restrizioni sul passo, oltre quelle imposte dalla accuratezza richiesta. Rinviando ad esempio a Lambert [252] per una discussione pi` u 21 approfondita , ci limiteremo a fornire alcuni esempi di problemi, comunemente ritenuti stiff.

Esempio 9.14 (Sistemi di reazioni chimiche) Consideriamo il seguente modello di reazioni chimiche, caratterizzato da velocit`a di reazione molto diverse fra loro A B+B B+C

0.04

−→ 3·107

−→ 104

−→

B

(lenta)

C +B

(molto rapida)

A+C

(rapida)

(9.79)

21

If a numerical method with a finite region of absolute stability, applied to a system with any initial conditions, is forced to use in a certain interval of integration a step-length which is excessively small in relation to the smoothness of the exact solution in that interval, then the system is said to be stiff in that interval (Lambert, 1990). analisi numerica

c V. Comincioli

9.4 Equazioni stiff

683

A tale modello, introdotto da Robertson22 e divenuto successivamente un noto problema test su cui sperimentare gli algoritmi per le equazioni stiff, corrisponde il seguente sistema differenziale, per un particolare insieme di condizioni iniziali A:

y1 = −0.04y1+104 y2 y3

B:

y2 y3

C:

y1 (0) = 1

4

= 0.04y1 −10 y2 y3 −3 · 3·

=

107 y22 107 y22

(9.80)

y2 (0) = 0 y3 (0) = 0

ove yi (t), i = 1, 2, 3 indicano le concentrazioni delle sostanze A, B, C al tempo t. La matrice jacobiana J ha un autovalore λ3 uguale a zero (dal momento che 3i=1 yi = 0, e quindi 3i=1 y1 (t) = 1) e due autovalori λ1 (t), λ2 (t) reali negativi che dipendono dalla soluzione e quindi variano nel tempo. Si pu` o mostrare che sull’intervallo (0, 100) il rapporto di stiffness S(t), calcolato a partire dai due autovalori λ1 , λ2 , varia da O(104 ) a O(105 ). Il comportamento della soluzione `e rappresentato in Figura 9.27. Si osserva che la soluzione y2 (t) raggiunge rapidamente una posizione quasi-stazionaria in vicinanza a y2 = 0, ossia, ponendo y1 = 1, y3 = 0, 0.04 ≈ 3 · 107 y22 , da cui y2 ≈ 3.65 · 10−5 . Successivamente, molto lentamente la soluzione y2 ritorna al valore zero; in effetti, si vede facilmente che per t → ∞ si ha y1 (t) → 0, y2 (t) → 0 e y3 (t) → 1. Lasciamo come esercizio il confronto tra i risultati ottenuti mediante il metodo di Eulero esplicito e rispettivamente il metodo di Eulero implicito, con utilizzo del metodo di Newton per la risoluzione ad ogni passo del sistema non lineare. 4 x10

-5

4 x10

y2(t)

3

3

2

2

1

1

0 0

0.1

0.2

0.3

y1(t)

1

0 0

0.01

0.99

0.005

0.1

y2(t) transiente

0.005

0.2

0.3

0 0

0.01

0.015

0.02

y3(t)

0.015

0.995

0.985 0

-5

0.1

0.2

0.3

Figura 9.27 Rappresentazione della soluzione del sistema differenziale (9.80).

Esempio 9.15 (Un esempio dalla biochimica) Consideriamo il seguente modello di cinetica degli enzimi (Henri 1902) e ∗ + s∗

k1 → c∗ k2 p∗ + e∗ ← → k−1

che rappresenta una reazione tra un enzima (e∗ ) e un substrato (s∗ ) con la formazione di un complesso enzima-substrato (c∗ ), che pu` o reagire per formare il prodotto (p∗ ) o dissociarsi. Dalla legge massa-azione, 22

When the equations represent the behaviour of a system containing a number of fast and slow reactions, a forward integration of these equations becomes difficult (H. H. Robertson, 1966). analisi numerica

c V. Comincioli

684

Equazioni differenziali

si ottiene il seguente modello differenziale ds∗ dt de∗ dt dc∗ dt dp∗ dt

= −k1 s∗ e∗ + k−1 c∗ = −k1 s∗ e∗ + (k−1 + k2 )c∗ = k1 s∗ e∗ − (k−1 + k2 )c∗ = k2 c∗

Le condizioni sperimentali all’inizio della reazione (t = 0) sono s∗ = s∗ (0), e∗ = e∗ (0), c∗ = p∗ = 0. Dal o eliminare momento che dal sistema differenziale si ha de∗ /dt + dc∗ /dt = 0, e quindi e∗ + c∗ = e∗ (0), si pu` la variabile e∗ , ottenendo il seguente sistema ridotto ds∗ = −k1 e∗ (0)s∗ + (k1 s∗ + k−1 )c∗ dt∗ dc∗ = k1 e∗ (0)s∗ − (k1 s∗ + k−1 + k2 )c∗ dt∗ Nella Tabella 9.9 sono riportati rapporti di stiffness S(0) corrispondenti ad alcuni valori, sperimentalmente importanti, delle costanti di velocit` a e dei valori iniziali.

caso 1 2 3 4

k1 1.0E + 05 1.0E + 05 1.0E + 05 1.0E + 05

k−1 1.0E + 00 1.0E + 00 1.0E + 00 1.0E + 00

k2 1.0E + 00 1.0E + 00 1.0E − 03 1.0E − 02

e∗ (0)/s∗ (0) 1.0E − 03 1.0E + 00 1.0E + 00 1.0E − 03

S(0) 1. E + 08 4. E + 05 4. E + 08 1. E + 10

Tabella 9.9 Rapporti di stiffness, per t = 0, nella cinetica degli enzimi.

9.4.1

Metodi numerici

Lo scopo di questo paragrafo `e quello di fornire una breve panoramica dei metodi disponibili per la risoluzione di sistemi stiff della forma y˙ = f (t, y),

y(t0 ) = y0

(9.81)

con y ∈ Rn , t0 , y0 asssegnati e f funzione assegnata a valori in Rn . Le considerazioni sviluppate nei paragrafi precedenti portano alla conclusione che i metodi convenienti per l’approssimazione dei sistemi stiff vanno ricercati tra quelli con un’ampia zona di stabilit` a a passo fisso. Metodi con tale propriet`a possono essere costruiti utilizzando differenti idee. Per brevit` a, ci limiteremo a segnalare i metodi che rientrano nelle due classi di metodi considerati in precedenza. Per una pi` u ampia descrizione dello stato dell’arte, si veda in particolare Hairer, Wanner [185], Lambert [252].

Formule BDF Le formule alle differenze all’indietro (BDF), introdotte nell’Esempio 9.10, sono particolari metodi a pi` u passi della seguente forma ηi =

r

αj η i−j + h β0 η˙ i

j=1

analisi numerica

c V. Comincioli

9.4 Equazioni stiff

685

ove per brevit` a si `e posto η˙ i = f (t, η i ) e ove r, numero di passi utilizzati, corrisponde anche all’ordine del metodo. Quando il passo utilizzato varia ad ogni passo, i coefficienti αj e β0 dipendono dai rapporti hi /hi−1 , . . . , hi /hi−r+1 . Il caso r = 1 corrisponde al metodo di Eulero implicito per il quale, come abbiamo visto, non vi sono vincoli di stabilit` a. La stessa propriet` a `e soddisfatta dal metodo che si ottiene per r = 2, e anche dai metodi corrispondenti a r = 3, 4, 5, 6 se applicati a sistemi con autovalori reali. Nel caso, invece, in cui il sistema (la matrice jacobiana) ha autovalori complessi (e quindi le soluzioni hanno componenti ad andamento oscillatorio) la zona di stabilit` a nel piano complesso si riduce all’aumentare di r da 3 a 6. Ricordiamo che per r > 6 i metodi BDF non sono utilizzabili, in quanto non convergenti. A partire dalle prime implementazioni delle formule BDF da parte di Gear (DIFSUB, 1968; STIFF, 1969), diverse altre versioni sono state successivamente sviluppate allo scopo di sfruttare meglio le nuove architetture dei calcolatori e la struttura (in particolare la presenza di sparsit` a) dei problemi.

Metodi Runge-Kutta Come abbiamo gi`a osservato in precedenza, i metodi di Runge-Kutta espliciti non sono appropriati per la risoluzione dei problemi stiff. Essi sono stati, tuttavia, generalizzati in forme opportune. Abbiamo gi` a discusso i Runge-Kutta impliciti. Segnaliamo un’altra interessante generalizzazione, costituita dai cosiddetti metodi di Rosenbrock, in breve ROW. In maniera schematica, tali metodi utilizzano, oltre i valori della f , anche i valori della jacobiana ∂f /∂y, ossia le derivate seconde della funzione y.

9.4.2

Sistemi altamente oscillatori

Consideriamo, come introduzione al tipo di problemi che esamineremo in questo paragrafo, il seguente problema modello (9.82) y  (t) + λ2 y(t) = λ2 sin t, t ∈ (0, T ) e la seguente famiglia di soluzioni y(t) = c sin λt +

sin t 1 − 1/λ2

(9.83)

rappresentata in Figura 9.28 per valori particolari di c e di λ. Si vede che per λ sufficientemente grande la soluzione consiste di un’onda portante ad alta frequenza c sin λt, modulata da un’onda lenta sin t/(1−1/λ2).

4 3 2 1 0 -1 -2 -3 -4 0

t 2

4

6

8

10

12

14

16

Figura 9.28 Rappresentazione di una soluzione dell’equazione differenziale (9.82), insieme alla soluzione particolare sin t/(1 − 1/λ2 ).

analisi numerica

c V. Comincioli

686

Equazioni differenziali

Per questo tipo di problemi il calcolo della soluzione in un punto particolare `e un problema malcondizionato (quanto pi` u `e grande λ). Mentre nei problemi stiff che abbiamo analizzato nel paragrafo precedente il cambiamento rapido nelle soluzioni `e un fenomeno transitorio, nei problemi altamente oscillatori i cambiamenti rapidi sono un aspetto permanente. Le prestazioni dei metodi stiff possono quindi degradare notevolmente, a seguito della necessit`a di assumere frequentemente passi piccoli. D’altra parte, i metodi classici a un passo o a pi` u passi sono basati sui valori della funzione e delle derivate, ossia su funzionali instabili della soluzione. L’idea per ottenere algoritmi convenienti pu` o essere quindi quella di abbandonare l’obiettivo di ottenere informazioni sulla soluzione di tipo puntuale e introdurre in alternativa opportuni funzionali pi` u stabili, quale ad esempio una media o uno smoothing della soluzione (cfr. ad esempio [335], [218]).

9.5

Problemi ai limiti

Il tipo di problemi che analizzeremo in questo paragrafo `e illustrato dal seguente problema particolare. Dato un intervallo [a, b], una funzione f (x, y, y  ) e due valori α, β, si cerca una funzione y(x) tale che y  (x) = f (x, y(x), y  (x)), y(a) = α,

a
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF