ANNAMARIA MAZZIA
APPUNTI DI CALCOLO NUMERICO
C R E AT AT I V E C O M M O N S L I C E N S E
pubblicato con creative commons license da Annamaria Mazzia, Dipartimento di Ingegneria
Civile Edile e Ambientale (DICEA), Università degli Studi di Padova, anno 2018 utilizzando uno stile latex ( personalizzato ) reperibile su tufte - latex . googlecode. com co m
Questo lavoro è stato rilasciato sotto la licenza C reative C ommons A ttribuzione- N on commerciale derivate 3 . 0 I talia L icense, -N on opere derivate Per leggere una copia della licenza visita il sito web (http://creativecommons.org/licenses/by-nc-nd/ 3.0/it/)
Il pacchetto Latex utilizzato ha la Licenza Apache, Version 2.0. (http://www.apache.org/licenses/ LICENSE-2.0) . Dispensa aggiornata in Febbraio 2018
Indice
1
Introduzione al Calcolo Numerico
2
Struttura dell’elaboratore
3
Richiami di analisi
4
Rappresentazione dei numeri nel calcolatore
5
Zeri di funzione
7
11
23 29
49
6
Interpolazione
7
Approssimazione
81 105
8
Integrazione numerica
9
Metodi diretti per la soluzione di sistemi lineari
10
Metodi iterativi per la soluzione di sistemi lineari
11
Differenziazione numerica numerica ed equazioni alle derivate ordinarie Bibliografia
205
113 137 161 185
Istruzioni per l’uso Il matematico sbircia dietrole spalledi Dio per trasmettere la bellezza della Sua creazione
L e pagine che seguono sono una dispensa di Calcolo Numerico, aggiornata di anno in anno e pensata per il corso di Calcolo Numerico
degli studenti di Ingegneria dell’Università di Padova, in particolare per quelli dell’area industriale e, nello specifico, del corso di laurea triennale in Ingegneria dell’Energia. Ogni capitolo spiega, spero con molti dettagli, i vari punti del programma di Calcolo Numerico, con esempi, dimostrazioni, approfondimenti ed esercizi. Le parti introdotte dalla figura della lente di ingrandimento e la scritta “Dettagli” sono parti di approfondimento che non fanno parte
esplicita del programma del corso ma che possono essere utili per comprendere meglio un determinato argomento. Di queste parti, quindi, è suggerita una attenta lettura. Alla fine di ogni capitolo sono presenti esercizi svolti. Qualche studente potrebbe dire che non ci sono molti esercizi svolti. In effetti, il numero di esercizi proposti per ogni capitolo è essenziale, va da tre a sei, per due motivi: molti esercizi vengono svolti in aula durante le lezioni e si suppone che uno studente segua il corso e quindi partecipi alla soluzione degli esercizi proposti a lezione; inoltre, come raccolta
a parte (una dispensa parallela a questa) viene offerta un’ampia collezione di esercizi (per un totale di oltre centocinquanta!) presi dai
temi d’esame degli anni passati e, per ciascuno di questi esercizi, è data anche una soluzione sintetica. Oltre agli esercizi, alla fine di ogni capitolo vi è una sezione intitolata Domande di riepilogo in cui sono proposte domande di comprensione degli argomenti trattati nel capitolo stesso. Soffermarsi a rispondere a queste domande permette di prepararsi con maggiore
cura alla parte teorica del compito d’esame. Buon lavoro e buono studio!! Padova, Febbraio 2018 Annamaria Mazzia P.S. Per migliorare sempre più queste dispense, se avete dubbi su alcune parti o trovate errori, di stampa e non, potete gentilmente segnalarmi le vostre perplessità all’indirizzo email: annamaria.mazzia CHIOCCIOLA unipd.it
al resto delle Sue creature. Paul Erdös
1 Introduzione al merico
Calcolo Nu-
I l calcolo numerico è una disciplina che riguarda lo studio e lo sviluppo di algoritmi numerici (cioè di procedimenti di calcolo) utili
per risolvere problemi matematici che si incontrano in vari campi delle scienze e dell’ingegneria (e non solo). Facciamo subito degli esempi. 1.0.1
Il sistema GPS Il sistema GPS (Global Positioning System) permette di determinare la posizione di un ricevitore utilizzando le distanze misurate rispetto a punti dalle coordinate note. Questi punti dalle coordinate note sono
i satelliti, che trasmettono un segnale in direzione della terra. Un ricevitore GPS misura il tempo richiesto da un segnale per propagarsi da un satellite GPS fino al ricevitore stesso. Poichè il segnale viaggia alla velocità della luce, l’intervallo di tempo può essere convertito in distanza moltiplicandolo per la velocità della luce. In assenza di errori (nell’ipotesi, quindi, di sincronizzazione perfetta
tra l’orologio presente nel ricevitore e quello nel satellite, mancanza di ionosfera e troposfera, che, invece, rallentano l’arrivo del segnale, ...), una misura di questo tipo ci permette di avere informazioni sulla
posizione del ricevitore: esso deve trovarsi in qualche punto della superficie della sfera centrata nel satellite e con raggio uguale alla distanza misurata. Se, contemporaneamente, un secondo satellite invia un segnale allo stesso ricevitore, allora il ricevitore deve trovarsi anche da qualche parte sulla superficie sferica con centro nel secondo
satellite e raggio dato da questa seconda distanza misurata. Le due superfici sferiche, quindi, si intersecano e sulla circonferenza generata
dalla loro intersezione si troverà il nostro ricevitore. Un terza e simultanea misura, data da un terzo satellite, dà una terza superficie sferica che interseca le altre due in soli due punti: uno di questi punti
può essere eliminato subito perchè non si trova sulla terra e rimane quindi un solo punto, che permette di identificare la posizione del ricevitore. Quanto abbiamo appena detto vale in linea teorica, in condizioni ideali. Infatti, in genere, l’orologio atomico presente nel ricevitore GPS e gli orologi presenti nei satelliti non sono sincronizzati
Quando puoi misurare ciò di cui stai parlando, ed esprimerlo in numeri, puoi affermare di saperne qualcosa; se però non puoi misurarlo, se non puoi esprimerlo con numeri, la tua conoscenza sarà povera cosa e insoddisfacente: forse un inizio di conoscenza, ma non abbastanza da far progredire il tuo pensiero fino allo stadio di scienza, qualsiasi possa essere l’argomento. Lord William T. Kelvin
8
annamaria mazzia
perfettamente. Gli stessi orologi nei satelliti sono sincronizzati l’uno con l’altro con un certo errore che, per quanto piccolo non può essere
trascurato. Le misure osservate, inoltre, sono affette da errori anche di altra natura, come gli effetti della ionosfera e troposfera, l’errore di misura
Un errore di tempo in termini di millisecondi può dare un errore nella posizione di circa 300 chilometri e questo, chiaramente, è un errore troppo grande!
del ricevitore stesso, errori di orbita ... Nella pratica, dunque non bastano le distanze prese rispetto a tre satelliti, ma ne occorrono molte di più, per cercare di individuare le coordinate del ricevitore, tenendo
in conto il fatto che le misure sono affette da errore. Il problema da risolvere per ottenere la posizione del ricevitore diventa dunque un problema di tipo numerico, in particolare di approssimazione ai minimi quadrati non lineari.
Noi studieremo il problema più semplice, quello di approssimazione lineare ai minimi quadrati.
1.0.2
Analisi di processi chimici La cattura di anidride carbonica con l’utilizzo di sorbenti solidi in un reattore di assorbimento è un esempio di un problema di analisi dei processi chimici di separazione, di miscelazione e dei reattori chimici. Tale analisi si basa sulle equazioni di bilancio di materia e di energia totale, cioè la somma dell’energia interna e dell’energia meccanica. Da un punto di vista matematico, questi bilanci sono rappresentati da un sistema di equazioni alle derivate ordinarie, in cui la variabile indipendente è data dal tempo. In condizioni di stazionarietà (eliminando quindi la dipendenza dal tempo), queste equazioni si traducono in un sistema algebrico di equazioni non lineari in più variabili la cui soluzione va cercata numericamente. Una strada da usare può essere data dal metodo di Newton per sistemi non lineari.
Noi studieremo il metodo di Newton per equazioni non lineari.
1.0.3
Mini e micro turbine idrauliche L’energia idroelettrica è una delle principali fonti di energia rinnovabile. Oltre ai grandi impianti idroelettrici, sta ottenendo un forte impulso un sistema più flessibile di distribuzione con la costruzione di impianti mini e micro idroelettrici che utilizzano turbine di piccole dimensioni. Per avere la maggiore efficienza è indispensabile utilizzare un regolatore di portata all’interno della turbina in modo da mantenere un carico adeguato in funzione della portata. Dal momento che i sistemi di regolazione efficienti per mini e micro turbine hanno un costo elevato, si cercano sistemi di regolazione efficienti ma a costi inferiori: come soluzione è stato proposto di usare una turbina
di tipo Cross-Flow munita di un sistema di regolazione semplice in grado di funzionare con un’efficienza quasi costante in un ampio intervallo di portate da turbinare. Per rendere valida questa proposta,
e prima ancora di passare alla costruzione della turbina, si utilizza una procedura fluidodinamica di tipo computazionale: analisi idrodinamica, metodi numerici e programmi di tipo numerico permettono
appunti di calcolo numerico
di stabilire come dimensionare le variabili in gioco nel problema in modo da poter avere la turbina che risponda ai requisiti richiesti. 1.0.4
Laura e Petrarca Ebbene sì, il Calcolo Numerico è andato a intrufolarsi anche tra le poesie del Petrarca! È stato sviluppato un modello matematico sul Canzoniere: un sistema di equazioni differenziali che esprime i sentimenti di Laura e Petrarca e la cui soluzione va cercata numericamente
(ad esempio utilizzando MATLAB). Si rimanda i più curiosi alle seguenti pagine e articoli reperibili in rete: http://areeweb.polito.it/didattica/polymath/htmlS/Interventi/ Articoli/Petrarca/Petrarca.html http://hrcak.srce.hr/file/69204
1.1
Si parte! In tutti gli esempi che abbiamo visto, si parte da un problema, che può essere un fenomeno osservato nei vari settori dell’ingegneria (chimica,
civile, informatica, dell’energia, meccanica ...) ma anche in biologia, chimica, fisica, economia (e, abbiamo visto, anche in letteratura). Il fenomeno da studiare viene tradotto in modello matematico. Dal momento che il modello matematico è difficile da risolvere o non può essere affatto risolto analiticamente, occorre passare al Calcolo Numerico. Si applica, cioè, un metodo numerico che risolva il problema matematico e arrivi ad una soluzione numerica che sia efficiente, accurata ed affidabile. Il Calcolo Numerico sviluppa i diversi metodi in modo da dire sotto quali ipotesi essi possano dare risultati buoni, quando possono
essere usati e per quali tipi di problemi. Gli algoritmi numerici vanno poi sviluppati per essere implementati al calcolatore: tutto ciò ha portato allo sviluppo di linguaggi o am bienti di programmazione (Fortran, C++, MATLAB, Octave,...). Infatti solo con l’aiuto del calcolatore si riesce a dare una risposta esauriente
e completa ai problemi che il Calcolo Numerico può risolvere. Perciò, in un corso di Calcolo Numerico, si cerca di combinare gli elementi della teoria degli algoritmi numerici per risolvere determinati problemi matematici insieme alla conoscenza di un linguaggio di programmazione che permetta di risolvere numericamente quei problemi al calcolatore. È importante, quindi, partire dalla struttura di un calcolatore e dalla rappresentazione dei numeri al calcolatore, per poi passare allo studio di metodi numerici per la soluzione di diversi problemi. Vedremo, in particolare, la ricerca degli zeri di funzione, problemi di interpolazione e approssimazione di dati, metodi diretti e iterativi
per la soluzione di sistemi lineari, formule di quadratura numerica,
9
Per avere un quadro più preciso si rimanda a https://iris.unipa.it/retrieve/ handle/10447/100694/131679/ Articolo_H2O_Tucciarelli.pdf
10 annamaria mazzia
problemi di differenziazione numerica e metodi per la soluzione di equazioni differenziali. Per ciascuno di essi presenteremo degli esempi che derivano da fenomeni osservati in diversi settori scientifici e che vengono tradotti
in problemi matematici, da risolvere, appunto, con le più opportune tecniche numeriche. In questo modo, impareremo i metodi di base e gli strumenti di analisi e di programmazione, in modo da essere pronti per affrontare
i problemi più complicati che ci riserverà il futuro.
2 Struttura dell’elaboratore 2.1
Introduzione
I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L’insieme dei due costituisce una forza incalcolabile. Albert Einstein
S e dobbiamo comprare un computer, abbiamo solo l’imbarazzo della scelta tra i tanti disponibili sul mercato. Ma in base a quali criteri scegliamo un computer? Le caratteristiche fondamentali di un computer si possono riassumere in poche parole-chiave: processore, sistema operativo, memoria. Cosa significano esattamente? E, prima ancora, cosa significa Computer?
Figura 2.1: Stralci di volantini pubblicitari per l’acquisto di un computer.
Definizione 2 .1.1 Computer = elaboratore elettronico digitale Dispositivo elettronico che elabora le informazioni, immesse sotto forma di dati numerici, secondo una sequenza di istruzioni preordinate ( programma).
Elaboratore: macchina capace di immagazzinare ed elaborare dati in base ad una serie di istruzioni (programmi) memorizzate sul
computer elettronico: utilizza componenti elettroniche per elaborare le
informazioni digitale: elabora e memorizza segnali digitali basati su cifre
binarie: 0 e 1
In generale, un computer esegue operazioni logiche e aritmetiche e ha una memoria per conservare i dati. Un programma contiene le
informazioni relative alle operazioni da eseguire. Si definisce hardware la struttura fisica del computer cioè i i suoi
componenti elettronici e i dispositivi fisici che lo compongono. Si chiama, invece, software l’insieme delle istruzioni (i programmi)
che consentono all’hardware di svolgere i propri compiti Attraverso un computer, elaboriamo dati (numeri, suoni, video, fotografie) in modo da ottenere informazioni (lettere, tabelle, risultati di procedimenti numerici. . . ). Alcune di queste informazioni possono
diventare dati da elaborare di nuovo al computer.
Un sistema operativo, come Windows, Mac, Linux, è un tipo di software; programmi applicativi come Word, Excel, LaTex sono dei software.
12 annamaria mazzia
2.2
La preistoria del computer : Babbage e Lovelace La seconda metà del diciannovesimo secolo fu un tempo di grande fermento in numerosi campi, dall’ingegneria ai trasporti, dalla comu-
nicazione all’architettura... Furono scoperti nuovi materiali, la forza animale fu sostituita dalla forza motrice, le navi a vapore iniziarono a competere con quelle a vela, la rete ferroviaria si espanse sempre più, il telegrafo elettrico rivoluzionò le comunicazioni... In questo contesto, ingegneri, architetti, matematici, astronomi, marinai, banchieri, agenti
assicurativi... – chiunque avesse a che fare con il calcolo – si basava su tavole di calcolo per eseguire i calcoli meno banali. Tuttavia, si sa, gli uomini possono sbagliare e il timore che su quelle tavole ci fossero
degli errori era giustificato: un errore non trovato poteva diventare un disastro nelle numerose applicazioni in cui le tavole di calcolo venivano usate! Già nel 1812 Charles Babbage era consapevole dell’inaccuratezza dei calcoli fatti dall’uomo. Nel suo lavoro, Babbage doveva verificare
l’esattezza di tavole di calcolo che sarebbero state usate da banchieri come da marinai. Le navi avrebbero identificato la loro posizione in mare mediante quelle tavole! Eliminare il rischio dell’errore umano divenne per lui un desiderio sempre più grande. Il suo desiderio di creare una macchina per eseguire calcoli si concretizzò in due progetti, quello della Macchina alle Differenze e quello della Macchina Analitica. La Macchina alle Differenze doveva
calcolare in modo automatico funzioni polinomiali ma non venne mai completata per il suo costo eccessivamente elevato. La Macchina Analitica, invece, doveva essere una macchina di calcolo programma bile, e si può considerare come la prima idea del moderno computer.
Anche questo progetto, tuttavia, rimase incompiuto. Nel 1833, Babbage incontrò Ada Lovelace , figlia del famoso poeta
Lord Byron. Lovelace, appena diciassettenne, aveva parecchie conoscenze matematiche, inusuali per l’epoca, e si entusiasmò talmente tanto per il progetto di Babbage, da intuire altre potenzialità della macchina stessa, come la capacità dei numeri di poter rappresentare altre entità quali le lettere dell’alfabeto o le note musicali, e che dalla
manipolazione dei numeri la macchina avrebbe esteso la propria potenza oltre il mondo della matematica. Sempre la Lovelace intuì che la soluzione dei problemi matematici si sarebbe effettuata attraverso delle procedure di calcolo (quelli che noi chiamiamo programmi). Alla luce degli sviluppi che si sono avuti nel ventesimo secolo, la visione di Babbage e della Lovelace appare profetica. 2.3
Gli albori Il 1800 si chiude con una grande invenzione: nel 1896, Guglielmo Marconi inventa la radio. Il 1900 si apre con altre importanti invenzioni: il triodo, il registratore magnetico, la televisione, fino ad
Charles Babbage (1791-1871), inventore e matematico inglese, è senza dubbio il primo ad avere avuto il concetto del moderno calcolatore.
Babbage stesso scrisse che, mentre era seduto nella stanza della Società Analitica, a Cambridge, lavorando, mezzo addormentato, su una tavola dei logaritmi, arrivò un altro membro della società che gli chiese cosa stesse sognando. E lui rispose : – Sto pensando che tutte queste tavole – riferendosi alle tavole dei logaritmi – potrebbero essere calcolate da una macchina!
Nel 1821, Babbage e il suo amico e astronomo John Herschel stanno controllando delle tabelle calcolate a mano. Errore dopo errore, Babbage esclama : – Volesse Dio che questi calcoli venissero eseguiti da una macchina a vapore!
Osserviamo che l’invenzione del telaio meccanico a schede, in cui il tipo di tessuto veniva scelto (o programmato) in base a delle schede inserite nella macchina, è un precursore del progetto di Babbage.
Solo nel 2002 è stato possibile costruire una macchina che rispondesse al progetto di Babbage.
Augusta Ada Lovelace (1815-1852) fu la figlia del famoso poeta Lord Byron. I genitori si separono subito dopo la sua nascita e la bambina crebbe insieme alla madre (Lord Byron partì dall’Inghilterra senza farvi più ritorno e morì in Grecia quando Ada aveva otto anni). Poichè la madre era appassionata di matematica e non voleva che la figlia seguisse la strada del padre, incoraggiò la figlia in questa direzione, impartendole un’istruzione legata alla matematica e alla musica. Nel 1835 sposò William King, di dieci anni più anziano. Nel 1838 il marito ricevette il titolo nobiliare di Conte di Lovelace. Ebbero tre figli. La Lovelace morì di cancro a soli 37 anni.
appunti di calcolo numerico
arrivare intorno alla metà del 1900 con il transistor (nel 1947) e il circuito integrato (nel 1958). La nuova tecnologia elettromeccanica ed elettronica si rivelò decisiva per lo sviluppo dei computer, grazie allo studio sistematico della teoria dei circuiti elettrici. Il più noto tra gli studiosi di questa teoria fu l’americano Claude Shannon. Il suo contributo fondamentale fu quello di elaborare un metodo sistematico per progettare reti logiche capaci di eseguire le operazioni logico-aritmetiche desiderate: detto più semplicemente, egli mostrò
13
Claude Shannon (1916-2002) fu fisico e matematico del MIT.
come trasformare una assegnata operazione matematica in un circuito elettrico costruito con interruttori e relè di commutazione (quelli usati
nelle telecomunicazioni). Il lavoro di Shannon diede l’avvio allo studio delle tecniche indispensabili per progettare in modo sistematico tutti i circuiti logici di base necessari per realizzare i circuiti di calcolo dei futuri computer. Da un punto di vista propriamente ”pratico“ invece, la nascita e lo
sviluppo dei calcolatori elettronici inizia nel 1938: il tedesco Konrad Zuse costruisce Z1, una macchina costruita e pensata in maniera completamente meccanica, tutta da migliorare, ma che può essere considerata come il primo calcolatore. Zuse passa subito al progetto Z2, dove l’aritmetica meccanica è sostituita da relè elettromeccanici. L’inizio della seconda guerra mondiale interrompe bruscamente il
Nel 1948, l’articolo di Shannon, A Mathe- matical Theory of Communication , pubblicato sulla rivista The Bell System Technical Journal getta le basi teoriche dell’informatica. Per prima volta viene usato il termine bit come abbreviazione di binary digit, termine suggeritogli dal chimico e statistico J. W. Tukey. Konrad Zuse, ingegnere civile (1910-1995).
lavoro di Zuse, che viene chiamato alle armi, ma riesce a persuadere l’Istituto di Ricerca Aerodinamica del Terzo Reich a continuare i suoi studi. Completa quindi la costruzione dello Z 2 e inizia a lavorare sullo
Z3, che è il primo computer che Zuse costruisce per essere usato e non per verificare le proprie idee. Lo Z 3 ha non solo l’unità aritmetica
ma anche la memoria realizzata con relè elettromeccanici, ben 2600. Z3 fu la prima macchina di calcolo programmabile e venne usata dall’industria aerea per risolvere sistemi di equazioni e altri sistemi matematici ricavati da problemi di vibrazione degli apparecchi aerei messi sotto stress. Quando Zuse propose di passare all’uso di un computer basato su valvole elettroniche, la proposta fu respinta perchè i tedeschi si consideravano così vicini alla vittoria della guerra che ulteriori sforzi
nella ricerca non apparivano necessari. Il lavoro di Zuse, comunque, andò avanti con la costruzione dello Z4, di S1 e S2. E, soprattutto, fu completamente indipendente dai lavori di John Eckert e John Mauchly negli Stati Uniti e di A. Turing in Inghilterra. Eckert e Mauchly costruirono l’ENIAC (Electronic Integrator and Computer). L’ENIAC fu costruito, con progetto di Eckert, in piena seconda guerra mondiale, a partire dal 1943, presso il Ballistic Research Laboratory e fu completato nel febbraio del 1946. La macchina era pensata per compiere operazioni di carattere generale, ma fu costruita con lo scopo preciso di compilare tabelle per le traiettorie di bombe. L’ENIAC conteneva circa 18 . 000 valvole termoioniche e misurava circa 2 metri e mezzo di altezza per 24 metri
di lunghezza! La macchina era più di mille volte veloce di tutti i predecessori elettromeccanici costruiti fino a quel momento e poteva eseguire 5000 addizioni al secondo. Le sue operazioni erano controlla-
Figura 2.2:
L’ENIAC. Foto presa da
http://www.computerhistory.org/ revolution/birth-of-the-computer/ 4/78/316, copyright dell’Università di Pennsylvania.
Alan Turing (1912-1954), matematico inglese, si interessò di logica matematica e di teoria della probabilità. Introdusse il concetto di una macchina astratta, detta macchina di Turing , e pose questioni riguardanti l’intelligenza artificiale. Si occupò di problematiche riguardanti un macchina di calcolo digitale astratta, con una memoria senza limiti.
John Presper Eckert (1919-1995) e John William Mauchly (1907-1980) lavorarono a quello che si può considerare il vero primo calcolatore elettronico.
14 annamaria mazzia
te da un programma che veniva inserito dall’esterno mediante nastri
perforati. Intanto, nel 1944 aveva iniziato a collaborare nella costruzione dell’ENIAC, John von Neumann. Egli si accorse che l’architettura della macchina andava rivista e che la programmazione del computer
mediante un numero enorme di cavi e interruttori rendeva lenta e poco flessibile la programmazione stessa. Sostenne, quindi, che il pro-
gramma non dovesse essere rigidamente predisposto nell’hardware tramite interruttori e cavi e neanche letto mediante nastri perforati, ma risiedesse in una memoria su cui poter scrivere e accedere velocemente insieme ai dati da elaborare. Von Neumann per primo descrisse l’architettura dei calcolatori in termini logico-funzionale,
John von Neumann (1903-1957) ungherese, studiò prima a Berlino, poi a Zurigo e infine a Budapest, dove ricevette il dottorato in matematica. Nel 1930 si trasferì alla Università di Princeton dove insegnò matematica. Il suo nome è legato a studi in diversi settori: teoria dei giochi, matematica applicata, logica... Occupa un ruolo fondamentale nello sviluppo dei calcolatori elettronici. Ricevette numerosi premi e riconoscimenti in tutto il mondo.
secondo uno schema astratto non legato ai dispositivi fisici utilizzati per le varie operazioni. E il suo schema, sostanzialmente invariato, è
l’architettura adottata dai calcolatori dei nostri giorni! Prima di von Neumann, il calcolatore veniva controllato mediante
programmi non modificabili, registrati su nastro perforato o cablati in una configurazione di cavetti e interruttori. Con von Neumann si presenta un’architettura di riferimento precisa. Il primo calcolatore costruito seguendo l’architettura di von Neumann entrò in funzione nel 1948 all’Università di Manchester e venne
chiamato Manchester Mark I. Inizia, in tal modo, una nuova fase per i calcolatori: i programmi che controllano le operazioni da svolgere risiedono nella memoria del calcolatore insieme ai dati e possono essere modificati dinamicamente
nel corso dell’elaborazione. Dal 1948 fino ai nostri giorni, lo sviluppo dei calcolatori elettronici ha avuto ritmi esponenziali: l’invenzione del circuito integrato (chip)
alla fine degli anni cinquanta permise non solo di ridurre via via lo spazio fisico occupato dai computer ma anche di ottenere computer sempre più potenti tanto che, in due suoi lavori, del 1965 e del 1975, Gordon Moore stabilì che il numero dei transistor inseribili su un chip raddoppia approssimativamente ogni 24 mesi (legge di Moore). Nel 1971 tre ingegneri della Intel tra cui l’italiano Federico Faggin inventarono il microprocessore, vale a dire un’intera CPU in un singolo circuito integrato: su una piastrina di 4 × 3 millimetri riuscirono a inserire 2250 transistor, che formavano il cuore di un intero computer: questo microprocessore fu chiamato Intel 4004 ed era capace di eseguire 60 . 000 operazioni al secondo. Se pensiamo che il processore Intel Pentium 4 introdotto nel 2000 ha . 42 000. 000 processori e l’Intel Itanium 2 (con 9 MB di cache) introdotto nel 2004 ha 592 . 000. 000 transistors, ci accorgiamo di come la legge di
Moore, dal 1968 ad oggi, sia stata rispettata. 2.4
Architettura del Computer L’architettura del Computer si può riassumere in tre unità:
Gordon Moore è nato nel 1929 in California. Di lui basti ricordare che ha stabilito la legge di Moore, è co-fondatore della Intel Corporation e nel 2008 ha ricevuto la medaglia d’onore dell’IEEE per il suo pioneristico contributo nei processi dei circuiti integrati, e per la leadership nello sviluppo della memoria del MOS (semiconduttore metalossido), del microprocessore e dell’industria dei semiconduttori.
Federico Faggin è nato nel 1940 a Vicenza e si è laureato in fisica all’Università di Padova. Nel 1968 si è trasferito prima a Palo Alto presso la Fairchild Semiconductor e poi nel 1970 nella Intel. Oggi è presidente e CEO (Chief Executive Officer) della Foveon.
appunti di calcolo numerico
15
il processore, che fornisce la capacità di elaborazione delle
informazioni; la memoria (centrale e di massa) i dispositivi di input/output, che comunicano attraverso un
canale detto BUS, costituito da un insieme di linee elettriche digitali. Il processore è composto da blocchi con funzionalità diverse: CPU (Central Processing Unit), unità centrale di elaborazione
cache varie interfacce Se il processore è integrato su un unico chip prende il nome di microprocessore. Sia la CPU sia gran parte dei dispositivi che servono
per l’attività della CPU sono realizzati con la tecnologia dei circuiti integrati, che possono essere disposti in una singola scheda detta scheda madre. Questa scheda può essere dunque considerata la parte
più importante del computer. La CPU esegue tutte le operazioni di elaborazione numerica e di controllo e rappresenta la parte centrale del computer. Ogni elaboratore contiene un circuito di temporizzazione (clock) che genera un riferimento temporale comune per tutti gli elementi del sistema. Un ciclo-macchina è il tempo richiesto per svolgere un’operazione
elementare (ed è un multiplo del periodo del clock). La velocità di elaborazione di un processore dipende dalla frequenza del clock. I processori attuali hanno valori di frequenza del clock che variano tra gli 8 MHz e i 3500 MHz (1 MHz = 1 milione di istruzioni al secondo).
La memoria serve per conservare le istruzioni da eseguire e per scrivere/leggere i dati elaborati. Si suddivide in memoria principale e memoria secondaria. La memoria principale (o di lavoro) è la memoria in grado di conservare dinamicamente dati e programmi che il processore sta utilizzando. A sua volta la memoria principale può essere di due tipi: memoria di sola lettura (read-only memory): ROM. Viene scrit-
ta una volta per tutte dal produttore del sistema e contiene programmi e informazioni specifiche per il sistema; è utilizzata per me-
morizzare parametri di configurazione del sistema, utili all’avvio del computer; memoria per scrittura-lettura (random access memory): RAM.
Serve alla CPU per lavorare con i programmi inseriti dall’utente. Poichè la RAM conserva i dati solo fino a quando il computer rimane acceso (infatti è detta memoria di tipo volatile, perchè se ne perde il contenuto quando la macchina viene spenta), per conservare
dati e programmi per tempi lunghi e a sistema spento, si utilizza la
La CPU si suddivide in
unità logico-aritmetica (ALU), che svolge tutti i calcoli logici ed aritmetici;
unità floating-point (FPU) (Floating Point Unit), che consente di eseguire le operazioni su numeri reali;
unità di controllo (CU), che sovrintende all’elaborazione dei dati e alle operazioni di input e output;
registri, cioè memoria locale per memorizzare dati e lo stato di avanzamento delle istruzioni. Abbiamo, ad esempio, il registro di Program Counter, di Program Status Word, il registro Istruzioni, Indirizzi Memoria...
16 annamaria mazzia
memoria di massa (o secondaria) – dischi come l’Hard Disk, CDROM,
DVD, pendrive USB.... La RAM può essere pensata come una sequenza di celle (locazioni), ognuna identificata da un indirizzo e capace di contenere informazioni binarie. L’unità minima indirizzabile della memoria è detta parola (word) e può variare da macchina a macchina. In genere una parola vale un byte, cioè 8 bit.
Il computer scambia informazioni con il “mondo esterno” per
Bit è l’unità elementare di informazione. Per
mezzo delle periferiche di input/output (monitor, mouse, stampante,
esempio: 0/1, sì/no. 1 byte = 8 bit 1 Kilobyte (KB) = 210 byte = 1024 byte (circa 103 ) 1 Megabyte (MB) = 220 byte (circa 106 ) 1 Gigabyte (GB) 10 9 byte (un miliardo di
web-cam,...). Input è l’inserimento di dati nel computer per l’elaborazione. Output è il trasferimento di dati dal computer a dispositivi che permettono all’utente di vedere/ascoltare i risultati dell’elaborazione.
2.5
Software e Sistema Operativo
≈ 1 Terabyte (TB) ≈ 1012 byte (mille miliardi di byte) 1 Petabyte (PB) ≈ 10 15 byte (un milione di byte)
miliardi di byte)
Un software è una sequenza di istruzioni per eseguire le varie elaborazioni sui dati. Ci sono diverse categorie di software: software per il
sistema operativo, software di base, software di tipo applicativo. Il sistema operativo è costituito dall’insieme dei programmi essenziali per far funzionare la macchina. Esso utilizza piccoli programmi
già presenti nel calcolatore per accedere ai singoli dispositivi fisici. Questi programmi prendono il nome di Device Driver e sono memorizzati nel BIOS (Basic Input Output System). Il BIOS si trova nella ROM del Computer. Il sistema operativo, da una parte, permette di rendere fruibile all’utente le molteplici risorse del computer (gestione della memoria,
Figura 2.3: Dispositivi di input e output.
della stampante, della tastiera,...); dall’altra rende il computer uno strumento amichevole e utile per affrontare le molteplici attività che gli si richiedono. I compiti affidati al sistema operativo sono molteplici: agire da intermediario tra l’utente e l’harware del computer controllare e coordinare l’utilizzo dell’hardware tra i programmi
applicativi fornire gli strumenti per l’uso corretto delle risorse di tipo hard-
ware e software del sistema nascondere i dettagli legati alla gestione delle risorse del sistema. I primi sistemi operativi iniziarono a vedersi intorno alla metà degli
anni cinquanta quando si cominciò a individuare una serie di programmi standard di comune utilizzo indipendenti dall’applicazione specifica richiesta al computer. L’evoluzione dei sistemi operativi ha influenzato anche lo sviluppo
dell’hardware in quanto per supportare certe funzioni del sistema operativo sono necessari meccanismi hardware ad hoc (basti pensare alla gestione della memoria o delle interruzioni).
I primi computer come lo Z3 di Zuse o l’ENIAC non avevano sistema operativo. Per inserire un programma (scritto in linguaggio macchina) bisognava azionare un gruppo di interruttori o modificare collegamenti tramite opportuni cavi e spinotti. Ci rendiamo conto, quindi, di quanto fosse difficile usare il computer per risolvere problemi mediante l’esecuzione di un programma perchè oltre alla competenza specifica del problema da risolvere, si richiedeva una grande conoscenza tecnica della macchina su cui si doveva lavorare. Il programma doveva contenere non solo le istruzioni per la risoluzione del problema (per esempio un sistema di equazioni) ma anche le istruzioni per gestire le unità di input e output e delle altre periferiche collegate al computer. Infine, poteva essere eseguito un solo programma alla volta.
appunti di calcolo numerico
17
Considerando gli elevatissimi costi per la realizzazione e la gestione
dei primi computer, il calcolo automatico era una risorsa preziosa a disposizione di pochi utenti. Tutto ciò portò ad un ripensamento del
modo di utilizzare i computer e nacquero le prime idee di sistema operativo. Per prima cosa si pensò di creare delle librerie con le istruzioni necessarie per eseguire le operazioni più comuni legate alla gestione delle periferiche del computer (ingresso e uscita dei dati, accesso alla
memoria,...). Ulteriori progressi si ebbero quando il sistema operativo iniziò a sfruttare anche il disco fisso ed ebbe inizio la cosiddetta multiprogrammazione, in base alla quale nella memoria centrale venivano tenuti attivi contemporaneamente alcuni processi e i loro dati pronti per essere eseguiti. Ad ogni momento, uno solo di questi processi veniva eseguito, tuttavia, quando il processo in esecuzione richiedeva
un’istruzione di ingresso o di uscita, esso veniva sospeso attivando le unità periferiche necessarie per l’esecuzione dell’istruzione data. Questa tecnica richiedeva una elevata capacità della memoria centrale
e solo pochi sistemi potevano funzionare in modo adeguato. Uno dei primi sistemi che iniziò ad utilizzare la multiprogrammazione fu il sistema OS/ 360 realizzato per i computer IBM 360 . Questo
sistema operativo fu importante per due motivi: si cercò di realizzare un sistema operativo uniforme e compatibile
per macchine IBM molto diverse tra loro per quanto riguarda l’hardware sottostante: fino a quel momento ogni macchina aveva il proprio sistema operativo, che cambiava da macchina a macchina! lo sviluppo di questo sistema operativo fu molto delicato e com-
plesso e aprì lo studio delle problematiche relative all’ingegneria del software. Nonostante questi progressi, la multiprogrammazione non permetteva molta interattività tra utente e computer: di fatto l’utente consegnava i dati e il programma da eseguire (un pacco di schede perforate) all’operatore del computer e accedeva ai risultati dopo qualche
ora se non addirittura dopo giorni e giorni, risultati che riceveva in forma cartacea ad esecuzione avvenuta (non c’era ancora il monitor per la visualizzazione su video dei risultati). Alla fine del 1950 si introdusse il concetto di time-sharing che permetteva l’esecuzione di più processi in modo da poter soddisfare
le esigenze di più utenti contemporaneamente. Con il time-sharing si assegna, infatti, un piccolo intervallo di tempo a ciascun processo dando l’impressione che ciascun processo vada avanti parallelamente
agli altri. Gli sviluppi del sistema operativo ottenuti da allora fino ad oggi si possono così riassumere: il sistema operativo fornisce funzioni di base per la gestione delle risorse, quali: uso del processore (multitasking: l’uso della CPU è permesso ad un programma alla volta per brevi intervalli di tempo, quindi l’utente può eseguire più programmi contemporaneamente)
Figura 2.4: Schede perforate a 80 e a 96 colonne. Foto presa da http://compvter.blogspot.it/2010/ 09/punch-card-ibm-96-colonne.html
Per risolvere i problemi legati all’uso delle schede, queste furono sostituite da appositi terminali collegati al computer e furono cambiate le modalità di gestione dell’unità centrale modificando i sistemi operativi esistenti. Si arrivò all’interazione con il computer non più mediante schede perforate bensì tramite
tastiera-stampante o tramite tastiera-monitor.
18 annamaria mazzia Immaginiamo un ristorante con un capocuoco, il suo aiutante, una cucina, i camerieri e i clienti. I clienti scelgono un piatto dal menu, un cameriere prende l’ordine e lo porta al capo-cuoco. Il capo-cuoco riceve l’ordine e assegna al suo aiutante il compito di preparare il piatto. L’aiutante si dedicherà alla preparazione del piatto, compito che potrà richiedere più attività. Il capo-cuoco, intanto, supervisiona la preparazione dei piatti e gestisce le risorse (limitate) dei posti nel
uso della memoria centrale (memoria virtuale) riconoscimento e gestione degli utenti (multiutenza) gestione delle periferiche (drivers) file system
interfaccia grafico. Il software di base (o general purpose) può avere funzioni varie: editor di testo, elaborazione di testi, fogli elettronici, posta elettronica,
internet.
il capo-cuoco rappresenta il sistema operativo, i clienti sono gli utenti,
Il software applicativo è costituito da programmi che hanno obiettivi specifici come intrattenimento, controllo di sistemi, progettazione
(CAD), risoluzione di problemi matematici. Per migliorare le prestazioni di un computer si inserisce una memoria intermedia tra CPU e RAM, detta cache. Si trova all’interno del processore. È più veloce della RAM ma anche più costosa.
le ricette associate ai piatti corrispondono ai programmi, gli ingredienti sono l’input del programma, il piatto è l’output del programma, il menu e il cameriere sono l’interfaccia verso il sistema operativo, l’aiutante corrisponde al processore (CPU) (Se abbiamo più processori, ci
Il file system
2.6
ristorante.
sono più aiutanti), la cucina corrisponde al computer,
Il sistema operativo gestisce le informazioni su dispositivi di memoria
secondaria (dischi). La gestione delle informazioni avviene mediante file Un file costi-
tuisce un insieme di informazioni della stessa natura e logicamente correlate. In genere un file contiene un programma (programma sorgente o programma eseguibile), oppure una sequenza di dati. L’informazione è rappresentata da files, organizzati in maniera gerarchica (pensiamo ad una struttura ad albero) in directories (cartelle). Una directory è un file che svolge il ruolo di ”raccoglitore“.
I files possono contenere dati (abbiamo i cosiddetti files di testo) oppure programmi (i files di applicazioni). Un file è caratterizzato da: posizione (path, o percorso): sequenza delle directories che
portano al file dir1 / dir2 / . . . / . . . / nome: individua univocamente il file all’interno della cartella (o
directory) estensione: la parte del nome del file che segue l’ultimo punto
. (dati.txt to.jpeg )
prova.f
matrice.dat
welcome.html
pentole, fornelli etc, sono le parti che compongono il computer.
L’aiuto cuoco, quindi, rappresenta la CPU mentre il tavolo da lavoro , su cui appoggia gli ingredienti e la ricetta per preparare il piatto, rappresenta la memoria centrale . Prima di iniziare a lavorare, il cuoco deve svolgere alcune mansioni (sempre le stesse ogni volta: pulire il tavolo, controllare lo stato di pentole, tegami, coltelli. . . , ricevere le ordinazioni). Supponiamo che queste mansioni siano incisesu un pezzodel tavolo da lavoro: corrispondono alla memoria ROM (quella che non può essere alterata). La RAM invece è la parte del tavolo che può essere alterata a piacimento (spostare pentole, tegami, ingredienti).
Quando il ristorante chiude, il tavolo deve essere pulito e sgombro altrimenti si rovina tutto quello che vi rimane, ad eccezione di ciò che vi è stato inciso. Perciò il cuoco conserva in dispense e frigoriferi i vari ingredienti rimasti e gli utensili da lavoro: le dispense e i frigoriferi rappresentano i dischi (Hard Disk, CDROM, pen drive USB ...) per immagazzinare i dati.
fo-
dimensione: quantità di informazione contenuta nel file
altre informazioni (data di creazione, data di ultima modifica, permessi di scrittura, lettura. . . ) . L’intera gestione dei file è a carico di un componente del sistema operativo detto file system.
File in inglese significa archivio. Il termine compare nei primi anni cinquanta e inizialmente si riferisce a un pacco di schede contenente informazioni omogenee. È il sistema operativo a realizzare il concetto astratto di file nella gestione dei dispositivi di memoria di massa.
appunti di calcolo numerico
2.7
19
Un po’ di storia sui sistemi operativi Tra i numerosi sistemi operativi, il sistema Unix è quello che ha maggiormente influenzato questo settore dell’informatica. Il sistema
Unix venne sviluppato sul finire degli anni sessanta nei laboratori della AT & T. La filosofia di base era di realizzare un sistema semplice
rispetto agli altri in uso e adatto per la ricerca e lo sviluppo. La prima versione fu scritta in linguaggio Assembly e dipendeva dal tipo di macchina su cui si doveva applicare. Successivamente venne scritto in larga parte in un linguaggio di alto livello, il C, progettato appositamente per il sistema Unix. In tal modo il sistema operativo diventava facilmente portabile su macchine di tipo diverso senza dipendere eccessivamente dalle caratteristiche dell’hardware su cui veniva fatto funzionare. Diversamente dalle abitudini del tempo, l’azienda AT & T distribuì Unix nelle università e rese disponibili i codici sorgenti utilizzati per realizzarlo. Questo portò ad una sua ulteriore innovazione grazie a tutti i ricercatori delle università che iniziarono a sperimentarlo. Quando furono messi in commercio i primi microcomputer (a partire dal 1975), fu necessario sviluppare sistemi operativi appositamente progettati per sfruttare le poche risorse disponibili essendo le risorse
di calcolo di tali macchine molto limitate. Inoltre, queste macchine erano pensate più per gli appassionati che per il personale tecnico esperto e quindi era importante creare un sistema operativo che fosse d’uso relativamente semplice. In questo campo si distinsero Bill Gates e Paul Allen, che iniziarono la loro attività scrivendo il linguaggio di
programmazione Basic per il micromputer Altair. Nel 1975 crearono una ditta... la Microsoft. Un altro microcomputer, popolare nei primi anni ottanta, fu l’Apple
sviluppato da Steve Wozniak e Steve Jobs. Per questa macchina svilupparono un sistema più semplice ed efficiente di quello usato per l’Altair, che si ispirava vagamente al sistema Unix. I microcomputer iniziarono ad avere un grosso successo tanto che all’inizio degli anni ottanta, l’IBM pensò di entrare in questo settore (prima si era solo occupata di grandi computer e di software), introducendo il personal computer, IBM PC, realizzando in tal modo una macchina che servisse non solo per gli appassionati e per giocare (uno dei fattori che aveva determinato il successo dei microcomputer)
ma anche come strumento di studio, per i professionisti e per la gestione di piccole aziende. L’IBM incaricò Bill Gates di realizzare un sistema operativo per il nuovo personal computer. Il successo dell’IBM PC portò al successo anche di Bill Gates: i profitti della Microsoft iniziarono a crescere in modo esponenziale. Il sistema realizzato dalla Microsoft prese il nome di MS-Dos e divenne il sistema operativo più diffuso al mondo grazie
alla standardizzazione dei personal computer lanciato dall’IBM. Il sistema MS-Dos non era facile da usare perchè l’utente interagiva
con il computer solo attraverso comandi testuali la cui sintassi non
I sistemi operativi per i microcomputer dovevano essere più semplici di quelli impiegati per i grandi computer, in quanto la macchina veniva utilizzata da un solo utente e le periferiche collegate erano poche e semplici. Il problema maggiore ero quello di gestire i file su floppy disk (gli antenati dei CD-ROM e dei DVD, in uso fino ad una decina di anni fa) o su nastri magnetici e mettere a disposizione dell’utente un linguaggio di programmazione semplice, come il Basic. Tuttavia, il confine tra linguaggio di programmazione e sistema operativo non era ancora ben definito e, una volta avviato, il sistema era pronto per ricevere sia comandi del sistema operativo, sia istruzioni in linguaggio Basic.
20 annamaria mazzia
era così semplice da ricordare (qualche anno più tardi fu lanciata sul
mercato una versione più amichevole). Nel 1984, invece, dalla Apple fu prodotto il personal computer Macintosh che adottava un tipo di interfaccia grafico progettato per interagire in modo semplice e intuitivo con l’utente. Le novità della Apple furono molto apprezzate e la Microsoft, per colmare questa lacuna, lanciò un altro sistema operativo basato su interfaccia grafica: nel 1985 nacque il primo Windows 1.0 che trovò pochi consensi perchè troppo lento e instabile. Nel 1986, con la comparsa di nuovi microprocessori, il sistema Windows cominciò a funzionare in modo adeguato tanto che le versioni di Windows 3.1 e di Windows 95 portarono al sopravvento del sistema operativo Windows rispetto al Macintosh. Accanto a questi sistemi operativi, e forse anche per ridurre lo strapotere della Microsoft, si deve vedere la strada percorsa da un
Il Macintosh utilizzava un interfaccia grafico chiamato GUI (Graphic User Interface) composto da icone, finestre, menù... Gli oggetti dell’ambiente operativo erano rappresentati con simboli grafici di facile intuizione senza dover comprendere a fondo tutti i tecnicismi informatici. L’interfaccia GUI non era un’invezione della Apple perchè era stata già sperimentata nel corso degli anni settanta dalla Xerox, che però non aveva intuito le potenzialità di questo lavoro, lasciandone invece la fortuna e il successo alla Apple che, insieme ad esso, introdusse il mouse.
informatico di Helsinki (data di nascita 1969), Linus Benedict Torvalds,
che ha introdotto il sistema Linux. Nel 1991 fu completata la prima versione del sistema, che fu chiamata Linux e venne messa a disposizione di tutti. Torvalds si riservò
il compito di coordinare i diversi miglioramenti via via introdotti dagli altri sviluppatori. Linux si è dimostrato e si dimostra tuttora un valido sistema operativo, affidabile, sicuro e di buone prestazioni, in grado di gestire
situazioni multiutente e multitasking. Ed è il sistema operativo di riferimento del corso di Calcolo Numerico. 2.8
Lavorare in ambiente Linux Una volta entrati nel sistema (tramite login e password), si apre l’ambiente grafico e di qui possiamo lavorare (per esempio, aprire una finestra di editor, lavorare in Office, navigare in Internet ....). Per aprire nuove directories (cartelle), per spostare files, per eseguire programmi, ... è bene lavorare tramite una finestra di terminale o shell. La finestra di terminale (shell) mostra il prompt dei comandi. Un esempio di prompt è la login dell’utente (ad esempio studente) + chiocciola + nome della macchina su cui si sta lavorando (ad esem-
pio george) + attuale directory di lavoro (se non compare nessun nome, è perchè ci troviamo nella home directory, la directory principale dell’utente) + un simbolo (% o $, a seconda della macchina): studente@george:~ $
Vediamo ora alcuni comandi essenziali (comandi da scrivere dopo il prompt, in una finestra di terminale – dopodichè si clicca il tasto di Invio): ls mostra
l’elenco dei files e delle directories contenuti nella directory attuale ( ls sta per "list").
Durante gli studi universitari, Torvalds si era interessato di sistemi operativi e aveva studiato una versione semplificata di Unix, chiamata Minix. Questo sistema poteva funzionare su personal computer e veniva distributo con i programmi sorgenti disponibili. Torvalds migliorò il sistema Minix, in modo da poterlo utilizzare come alternativa a Windows, nella logica di non realizzare profitti (cioè non diventare milionario) ma di realizzare un sistema utilizzabile gratuitamente da tutti e migliorabile con il contributo di tutti (la filosofia dell’open source).
Tra le tante distribuzioni attualmente in uso ricordiamo: Debian, Ubuntu, Fedora, Gentoo, Slackware.. .
appunti di calcolo numerico
Esempio: studente@george:~$ls Un volta cliccato Invio, compare l’elenco
Per cambiare directory, si deve digitare
delle directories presenti nello spazio di lavoro disponibile per l’utente studente sulla macchina george, ad esempio (i numeri a sinistra delle directories o files sono indicatori
cd nome-directory
(cd sta per "change directory"). Il comando
cd .. fa
dello spazio che occupano in memoria): 5 appunti/ 4 mail/ 2 calcolo/ 4 movies/ 3 fortran/ 1 varie/ 3 foto/ 57 prova.pdf Esempio: per entrare nella directory foto, scriviamo studente@george: ~$cd foto Una volta cliccato il tasto di Invio, si è entrati nella directory foto: studente@george:~/foto $
tornare nella directory precedente.
Per creare una nuova directory: (mkdir sta per "make directory").
21
mkdir nomedirectory
Per copiare un file dentro una directory: cp nomefile nomedirectory ( cp sta per "copy"). Per trasferire un file in una directory mv nomefile nomedirectory ( mv sta per "move"). Per rinominare un file (o una directory): mv nomevecchio nomenuovo . Per cancellare un file si usa il comando
Esempio: siamo nella directory foto, che è una sottodirectory della home di studente.
rm nomefile.
Per cancellare una directory, dobbiamo prima cancellare tutti i files della directory e poi usare il comando rmdir nomedirectory.
Con il comando pwd si ha: studente@george:~/ foto $pwd studente@george:~/ foto $/home/studente/foto
Per sapere in quale directory ci troviamo, si usa il comando pwd . Esempio Abbiamo due directory chiamate uno e due e il file prova.f nella directory uno. Vogliamo copiare il file dalla directory uno alla
directory due. Se ci troviamo nella home, cioè nell’ambiente di partenza, dobbiamo scrivere cp uno/prova.f due studente@george:~ $ cp uno/prova.f due
Se ora passiamo nella directory
due e
facciamo
ls, vedremo il file
prova.f studente@george:~ $ cd due studente@george:~/due $ ls total 1 1 prova.f
Se siamo nella directory uno, dobbiamo scrivere cp prova.f ../due
per ottenere lo stesso risultato.
Riassumendo
Se siamo nella directory due, dobbiamo scrivere cp ../uno/prova.f (il punto finale serve per copiare il file prova.f nella directory .
ls : lista dei files e delle directory
in cui ci troviamo). Con cp abbiamo due file identici, quello nella directory uno e quello copiato nella directory due. Possiamo anche scrivere cp prova.f prova2.f: in questo modo
mkdir:
creiamo il file prova2.f nella stessa directory in cui si trova prova.f.
rmdir: per cancellare directories
cd : per cambiare directory
per creare una nuova directory
cp: per copiare files mv: per trasferire o rinominare files rm: per cancellare files
Se vogliamo trasferire il file dalla directory uno alla directory due (in questo modo avremo solo un file alla fine del procedimento), dobbiamo usare il comando mv.
22 annamaria mazzia
2.9
Editor di testo Se vogliamo scrivere su un file un documento di testo, abbiamo bisogno di un editor di testo. Sotto Linux ne troviamo diversi: vi, emacs, kedit, gedit, nedit.... I più semplici da utilizzare sono kedit e gedit. Sotto Linux esiste anche il pacchetto Office (del tutto simile all’equivalente Microsoft) per scrivere documenti in word, creare tabelle, etc. . . . Anche il programma Gnumeric è molto utile per creare tabelle.
Per visualizzare grafici, invece, c’è il pacchetto Gnuplot.
3 Richiami di analisi 3.1
La teoria attrae la pratica pratica come il magnete
L’alfabeto greco
attrae il ferro. Carl Friedrich Gauss
Q uando si descrivono teoremi, si danno definizioni o, semplicemente, si discute di matematica, è abbastanza usuale prendere in prestito lettere dell’alfabeto greco. È importante, quindi, saperle riconoscere e chiamarle in maniera corretta (si veda tabella a lato). 3.2
Radici di un polinomio di secondo grado
A B Γ ∆ E Z H Θ I K Λ M
α β γ δ ζ η θ ι κ λ µ
Alfa Beta Gamma Delta Epsilon Zeta Eta Theta Iota Kappa Lambda Mu
N Ξ O Π P Σ T Υ Φ X Ψ Ω
ν ξ
o
π ρ σ τ υ φ χ ψ ω
Dato il polinomio ax 0 ), le radici del a x2 + bx + c con a , b, c ∈ R (a = 0), polinomio (cioè quei valori di x per cui ax 0) si trovano a x2 + bx + c = 0) applicando la formula
√ − b + b2 − 4ac , x1 = 2a
√ − b − b2 − 4ac x2 = 2a
Se b 2 − 4ac > 0 le radici sono reali e distinte, se b2 − 4ac = 0 le due radici coincidono (il polinomio si può b anche scrivere come ( x + )2 ) 2a se b 2 − 4ac < 0 non ci sono radici reali. Inoltre, si ha x 1 + x2 = 3.3
− ba e x 1 x2 = ac
Identit dentità à trigonometr trigonometriche iche Nel seguito introduciamo alcune formule trigonometriche, con la notazione: sin (x ) ≡ seno( x ), cos ( x) ≡ coseno( x ), sin ( x) 1 , sec ( x ) ≡ secante ( x ) = , tan ( x) ≡ tangente (x ) = cos ( x) cos ( x)
Figura 3.1: I tre casi delle radici di un polinomio di grado 2: radici reali e distinte (in alto),
radici reali e coincidenti (al centro), nessuna radice reale (in basso).
Nu Xi Omicron Pi Rho Sigma Tau Upsilon Fi Chi Psi Omega
24 annamari annamaria a mazzia mazzia
cos (−θ ) = cos (θ ) cos ( π 2 − θ ) = sin (θ ) cos ( π 2 + θ ) = − sin (θ ) cos (π − θ ) = − cos (θ ) cos (π + + θ ) = − cos (θ ) cos (θ + φ) = cos (θ ) cos (φ) − sin (θ ) sin (φ) sin (2θ ) = 2 sin sin (θ ) cos (θ ) sin2 (θ ) + cos2 (θ ) = 1 3.4
sin (−θ ) = − sin (θ ) sin ( π 2 − θ ) = cos (θ ) sin ( π 2 + θ ) = cos (θ ) sin (π − θ ) = sin (θ ) sin (π + + θ ) = − sin ( θ ) sin (θ + φ) = sin (θ ) cos (φ) + cos (θ ) sin (φ) cos (2θ ) = cos2 (θ ) − sin2 (θ ) tan2 (θ ) + 1 = sec2 (θ )
Regole su funzione esponenziale e logaritmica Assumiano a , b ∈ R, con a > 0 e b > 0. Si ha: 1x = 1 a x+ y = a x a y aloga ( x) = x a x− y = a x / a y loga ( xy ) = log a ( x) + loga ( y) loga ( x y ) = y loga ( x) loga ( x ) logb ( x ) = loga (b)
3.5
axy = ( ax ) y a0 = 1 ax b x = (ab ) x loga ( x / y) = log a ( x ) − loga ( y) loga ( ax ) = x b x = a x loga ( b)
Derivate e integrali Siano f e g due funzioni dipendenti dalla variabile reale x mentre d f c ∈ R sia una costante. Indichiamo la derivata di f con il simbolo dx o mediante f . Valgono le seguenti regole: d ( c f ) = c f d x d ( f + d f d g + g) regola della somma: = + d x d x d x d ( f / g) f g − f g regola del quoziente: = d x g2 regola della costante:
d ( f g) = f g + f g d x d f r regola della potenza: = r f r −1 f d x regola del prodotto:
Tra le regole di integrazione, invece, ricordiamo quella di integrazione
per parti:
f g d x = f g −
f g d x
appunti appunti di calcolo calcolo numerico numerico
Diamo ora una tabella delle derivate e degli integrali delle funzioni
più note (per gli integrali lasciamo fuori la costante di integrazione).. Usi ne) Usiamo amo la simbol simbologia ogia arcsin arcsin( x) ≡ arcoseno(x ), arccos(x ) ≡ arcocoseno( x), cot ( x ) ≡ cotangente ( x ), arctan ( x) ≡ arcotangente( x ), arccot(x ) ≡, arcocotangente( x). f
ln( x) sin ( x) tan ( x) 1 cos (x ) arcsin ( x) arctan (x )
f 1 x cos ( x) 1 (= sec 2 ( x)) cos2 ( x) 1 tan ( x ) cos ( x) 1 √ 1 − x2 1 1 + x2
f
ex cos ( x)
ex
cot ( x) 1 sin (x ) arccos (x ) arccot(x )
f d x
f
x r +1
xr
r + 1
ex sin ( x)
(r = 1 )
ex
tan ( x) 1 cos (x )
ln |
1 tan (x ) cos (x )
1 + tan ( x)| cos ( x)
x −1
ln | x|
ln | x | cos ( x) cot ( x)
x ln | x | − x sin ( x)
1
1 cos ( x)
√
x arcsin (x ) + 1 − x2 1 arctan (x ) x arctan ( x) − ln (1 + x2 ) 2 1 √ 1 − x2 arcsin (x)
f d x
1 sin ( x )
tan ( x )
arcsin ( x)
− sin (x) − sin21(x) − cot (x) sin1(x) − √ 1 1− x2 − 1 +1 x2
f
− cos (x) 1 ln | | cos ( x)
cos2 ( x)
3.6
f
ln | sin (x )| ln |
1 + cot ( x)| sin ( x)
sin2 ( x)
− cot (x)
cot ( x) sin ( x)
− sin1(x)
arccos (x )
x arccos ( x) − 1 − x2 1 xarccot( x) − ln (1 + x2 ) 2 arctan (x )
arccot(x ) 1 1 + x2
Teoremi utili Richiamiamo, nel seguito, teoremi che trovano applicazione nel Calcolo Numerico. Per alcuni diamo anche la dimostrazione. Utilizzeremo, inoltre, le seguenti notazioni per funzioni di una sola variabile definite in un insieme X ⊂ ⊂ R. L’insieme delle funzioni continue continue in X verrà denotato con il simbolo C (X ). L’insieme delle funzioni continue in X , che hanno le prime n derivate pure esse continue, sarà indicato con C n ( X ).
√
25
26 annamari annamaria a mazzia mazzia
Teorema 3 .6.1 (Teorema di Rolle) Sia f C ([ a, b]) e differenziabile in
∈ ∈
] a , b[ . Se f ( a) = f (b) = 0, allora esiste un punto ξ ]a, b[ tale che f (ξ ) = 0
∈ ∈
Michel Rolle (1652- 1719) fu un matematico francese. francese. È conosciuto conosciuto per il teorema che porta il suo nome. Si deve a lui la notazione della radice n -sima per mezzo del simbolo simbolo
√ n x.
C([ a, b]) e diffef (b) − f ( a) ∈]a, b[ tale che renziabile in ] a, b[, allora esiste un punto ξ ∈ che f (ξ ) = b−a Teorema 3 .6.2 (Teorema del Valor Medio) Sia f
∈
Teorema 3 .6.3 (Teorema del Valore Intermedio) Sia f
∈ C([ a, b]) e
sia K un valore compreso tra f (a) e f (b). Allora esiste almeno un punto ∈]a, b[ tale che f (ξ ) = K. ξ ∈ Quindi, per funzioni continue, un valore compreso tra i due estremi
Figura 3.2: Teorema di Rolle:
f (c) = 0
dell’insieme di definizione è un valore assunto dalla funzione stessa (in uno o più punti). Come conseguenza di questo teorema, se f ( a ) f (b) < 0 (la funzione assume segno opposto agli estremi dell’intervallo [ a, b]) allora esiste almeno un punto ξ tale che f (ξ ) = 0, 0 , cioè esiste almeno una radice dell’equazione f (x ) = 0 nell’intervallo [ a, b]. Teorema 3 .6.4 (Esistenza del punto fisso) Data una funzione g defini-
ta in [ a, b], continua e tale che a ≤ g( x) ≤ b per ogni x ∈ [ a, b], allora g ammette almeno un punto fisso, cioè almeno un punto ξ per per cui vale la relazione g(ξ ) = ξ .
Dire che una funzione funzione g ammette almeno un Dimostrazione. punto fisso, vuol dire che esiste almeno un punto ξ nel suo insieme di definizione, tale che g (ξ ) = ξ . Dalle ipotesi del teorema, i valori della funzione g sono contenuti nell’intervallo [ a, b] e, in particolare a ≤ g(a) ≤ b e a ≤ g(b) ≤ b. Definiamo, perciò, la funzione continua Φ(x ) mediante la relazione Φ( x ) = g ( x )
Figu Figura ra 3.3: 3.3: Teore eorema ma del del Valor alor Medi Medio: o: f b f a ( ) ( ) f (c) =
−
b−a
−x
Allora Φ( a) = g ( a) a > 0 e Φ( b) = g ( b) b < 0. Per il Teorema del Valore Intermedio esiste almeno un punto ξ ]a , b[ tale che Φ(ξ ) = 0 , vale a dire g (ξ ) ξ = 0, 0, cioè g (ξ ) = ξ . Esiste almeno un punto fisso
Figura 3.4: Teorema del Valore Intermedio:
per la funzione g .
f (c) = K
−
−
− ∈ ∈
Teorema 3 .6.5 (Esistenza e unicità del punto fisso) Data una funzio-
ne g di classe C 1 in [ a, b], con a ≤ g( x) ≤ b per ogni x ∈ [a, b], e con | g g (x)| ≤ m < 1 per ogni x ∈ [a, b] allora esiste ed è unico il punto fisso della g in tale intervallo. Dimostrazione. L’esistenza di almeno un punto fisso è assicurata assicurata dal teorema precedente (le ipotesi del teorema precedente ci sono tutte). tutte). Supponiamo, Supponiamo, allora, che esistano due punti fissi ξ e η , con = η , per la funzione g . Si ha ξ
|ξ − η| = | g g(ξ ) − g(η)|
appunti appunti di calcolo calcolo numerico numerico
27
Applicando il teorema del Valor Medio, esiste un punto c compreso tra ξ e η per cui
| g g(ξ ) − g(η)| = | g g (c)(ξ − η )| ≤ | g g (c)||ξ − η| Ma per ipotesi | g g (c)| ≤ m 1 da cui |ξ − η| ≤ m|ξ − η| |ξ − η | <
<
Si arriva ad una contraddizione. L’assurdo ’assurdo deriva deriva dall’aver dall’aver supposto ξ = η . Quindi ξ = η e il punto fisso è unico.
Teorema 3 .6.6 (Teorema del Valor Medio del Calcolo Integrale) Se f
C([ a, b]) e g è integrabile in [ a, b] e g( x) non cambia segno in [ a, b], allora ∈]a, b[ tale che esiste un punto ξ ∈ b
a
f (x ) g( x) d x = f (ξ )
b
a
∈ ∈
g( x) d x
Per g ≡ 1, questo teorema ci dà il valore valore medio della funzione f 1 b sull’intervallo [ a, b], dato da f (ξ ) = f ( x ) d x a b−a
Teorema 3 .6.7 (Teorema di Rolle generalizzato) Sia f
∈ C([ a, b]) n
volte differenziabile in ] a, b[. Se f si annulla annulla in n + 1 punti distinti x 0 , x1 , . . . , xn in ] a, b[, allora esiste un punto ξ ∈ derivata n-sima n-sima della f si ∈]a, b[ in cui la derivata ( ) n annulla: f (ξ ) = 0. Teorema 3 .6.8 (Formula di Taylor) Sia f
C2 ([ a, b]) e sia x
∈ ∈ 0 un punto dell’intervallo [ a, b]. Allora, per qualunque x ∈ [ a, b] si può scrivere: ( x − x0 )2 f (x ) = f (x0 ) + f (x0 )( x − x0 ) + f (ξ x )
Brook Taylor (1685 - 1731) fu un matematico inglese che sviluppò quello che oggi è chiamato calcolo delle differenze finite. L’importanza del suo lavoro e, soprattutto, della formula conosciuta oggi con il suo nome, venne riconosciuta solo nel 1772 da Lagrange.
2
dove ξ x è un opportuno punto di [ a, b] che si trova sul segmento individuato da x 0 e x.
La formula appena scritta si dice formula di Taylor di centro x 0 nel punto x . La formula di Taylor appena scritta si può generalizzare se la funzione f è derivabile n + 1 volte. Si ha così la formula polinomiale di Taylor di centro x 0 : f ( x) = f ( x0 ) + f ( x0 )( x − x0 ) +
f ( x0 ) f (n) ( x0 ) ( x − x0 ) 2 + . . . + ( x − x0 )n + R n 2! n!
dove Rn ( x ) =
f (n+1) (ξ x ) ( x − x0 ) n + 1 (n + 1)!
con ξ x un opportuno punto di [ a, b] che si trova sul segmento individuato da x 0 e x .
4 Rappresent appresentazione azione dei numeri nel calcolatore 4.1
Disastri numerici!
Esistono Esistono 10 tipi di persone: quelli che capiscono i numeri binari e quelli che non li capiscono. Umorismo in rete
M olte volte , si pensa che i risultati numerici ottenuti da un calcolatore elettronico, specie se sono ottenuti come output di un sofisticato
software, non contengano errori e, se ne abbiano, siano da ritenersi trascurabili. In realtà, quando si esegue un programma al calcolatore,
bisogna prima di tutto aver aver verificato che sia stato scritto correttamente (il programma deve, cioè, tradurre correttamente il problema matematico che si vuole risolvere). Inoltre, bisogna tener conto che i risultati numerici sono sempre affetti da un certo tipo di errore, che può essere, per esempio, di arrotondamento o di troncamento: π è è un numero con infinite cifre decimali ma il calcolatore lo può vedere solo come un numero con finite cifre decimali..., molte formule non possono essere usate così come sono ma devono essere in qualche modo semplificate (basti pensare ad una somma di infiniti termini). Non tenere conto di questi fattori può portare a risultati davvero disastrosi, come può essere verificato andando a controllare la pagina web dedicata ai disastri dovuti a uno scorretto calcolo numerico: http://www.ima.umn.edu/~arnold/ http://www.ima. umn.edu/~arnold/disasters/disast disasters/disasters.html ers.html
Vediamo alcuni di questi disastri numerici. Il disastro del missile Patriot nel 1991. Il 25 febbraio 1991, durante la prima Guerra del Golfo, un missile Patriot fallì l’intercettazione di un
missile Scud iracheno. Questo errore costò la vita di 28 soldati, un centinaio di feriti e la distruzione distruzione di un capannone americano. americano. La causa del disastro disastro fu dovuto ad errori di arrotondamento nel sistema operativo del
La pagina web è del prof. Douglas Douglas N. Arnold, dell’Università del Minnesota, e viene introdotta con la seguente frase (traducendo): Stai seguendo con attenzione il tuo corso di analisi numerica o di calcolo scientifico? Se non lo stai facendo, potrebbe costarti un ca- ro errore. errore. Nel seguito, seguito, ci sono esempi dal- la vita reale di ciò che può succedere quan- do gli algoritmi numerici non sono applicati correttamente.
Patriot: ad ogni secondo che passava si introduceva un ritardo infini-
tesimo che comportava un errore nella valutazione della traiettoria del missile Scud. Col passare delle ore il ritardo accumulato accumulato fu tale da far intercettare una posizione del tutto diversa da quella in cui si trovava il missile da abbattere. Difatti, il computer usato per controllare il missile Patriot era basato su un’aritmetica a 24 bit. Per i calcoli, il tempo veniva veniva registrato registrato dall’orologio dall’orologio interno del sistema sistema in decimi di secondi e successivamente moltiplicato per 1/10 per
Figura 4.1: Il disastro del missile Patriot. La foto è presa dal sito del prof. Douglas.
30 annamaria mazzia
ottenere i secondi, utilizzando 24 bit in virgola fissa. Il numero 1/10 in base 2 ha infinite cifre decimali: la sua espansione binaria è infatti 0.0001100110011001100110011001100 . . . . In 24 bit esso veniva registrato come 0.00011001100110011001100 introducendo un errore di 0.0000000000000000000000011001100 . . . , che, in base 10 , significa circa 0.000000095. Gli errori di arrotondamento nella conversione del tempo causarono un errore nel calcolo della traiettoria: il tempo di 100 ore calcolato
in secondi diede il valore 359999.6567 invece di 360000 , un errore di 0.3433 secondi che portò il Patriot 687 metri fuori della traiettoria del
missile Scud! L’esplosione dell’Ariane 5 nel 1996. Il 4 giugno 1996, dopo una spesa di 7 miliardi di dollari, e dopo appena 40 secondi dal suo lancio, esplose il razzo Ariane 5, nella Guiana Francese. Il razzo e il suo carico erano valutati per oltre 500 milioni di dollari. Perciò il costo totale della missione era stato di oltre 7 miliardi e mezzo di dollari. Fu scoperto che l’errore era nel software e, in particolare, nella componente del Sistema di Riferimento Inerziale, che era stato preso dal software dell’Ariane 4 . Certe parti del software dell’Ariane 5 erano state aggiornate rispetto al software dell’Ariane 4 ,
ma non si era aggiornato quanto preso dal software dell’Ariane 4 . In particolare, il fallimento dell’Ariane 5 è dovuto ad un errore di conversione da un sistema a 64 bit a virgola mobile ad uno a 16 bit a
virgola fissa.
Figura 4.2: L’esplosione di Ariane 5. Foto tratta da http://personal.victoria.ac. nz/stephen_ marshall/SE/Failures/ SE_ Ariane.html
La velocità orizzontale del razzo rispetto alla piattaforma misurato
in 64 bit era un numero più grande del massimo consentito nell’aritmetica a 16 bit. Si ebbe quindi un errore di overflow che causò l’arresto del software di controllo del volo 37 secondi dopo il lancio del razzo. Dopo 3 secondi il razzo si distrusse. Il disastro del veicolo spaziale Mars Climate Orbiter nel 1999. Il disastro, invece, del veicolo spaziale della missione Mars Climate Orbiter non si trova sulla pagina web del prof. Douglas, ma i dettagli della storia
si possono trovare, ad esempio, sul sito nasa.gov/msp98/orbiter.
http://marsprogram.jpl.
Il 23 settembre 1999 si perdono le tracce del veicolo spaziale Mars
Climate Orbiter. Gli obiettivi di questa missione della NASA erano sia di monitoraggio dei cambiamenti climatici sia di supporto per la missione Mars Polar Lander. I costi della Climate Orbiter e della Polar Lander erano di un totale di oltre 320 milioni di dollari. Si era ipotizzato di entrare nell’atmosfera di Marte ad una altezza
di circa 150 km mentre il veicolo spaziale entrò ad una altezza di circa 60 km. Per un errore di conversione delle unità di misura, il velivolo entrò nell’atmosfera con una traiettoria inferiore rispetto a quella pianificata. La velocità del mezzo era molto elevata e portò alla distruzione non solo del veicolo spaziale ma anche della stessa Polar
Lander.
Figura 4.3: La Mars Climate Orbiter. Foto tratta da http://www.visionlearning. com/blog/2012/09/21/ tragedies-in-science-the-crash-of-the-marsclimate-orbiter/, copyright della NASA/JPL.
appunti di calcolo numerico
31
Diversi furono i motivi che portarono al fallimento di questa missione. Il principale è dovuto all’errore nel trasferimento di informazioni tra il team che lavorava sul veicolo spaziale, che si trovava in Colorado
e il team della missione di navigazione, che lavorava in California. Un team usava le unità inglesi (inches, feet, pounds) mentre l’altro usava le unità metriche. L’errore fu nella mancata conversione delle unità di misura tra unità inglesi e unità metriche! 4.2
Aritmetica di macchina Un qualunque numero reale può essere rappresentato accuratamente
da una sequenza di infinite cifre decimali. Ad esempio: 1 = 0.3333333. . . = 3
0 3 3 3 3 + 1 + 2 + 3 + 4 . . . 0 10 10 10 10 10
π = 3.14159265358979 . . . =
×
Si osservi che la notazione di usare la virgola per esprimere la parte decimale di un numero non è una notazione internazionale. Noi useremo sempre il punto decimale per dire che le cifre che seguono rappresentano la
100
3 1 4 1 5 + 1 + 2 + 3 + 4 . . . 0 10 10 10 10 10
parte decimale del numero.
×
100
Osserviamo che abbiamo scritto 1/3 e π in base 10, usando, quindi,
le cifre 0, 1, 2, . . . , 9 per poterli rappresentare. In genere, un numero reale x può essere rappresentato in base N come x = x m N m + xm−1 N m−1 + . . . + x1 N + x0 + x−1 N −1 + x−2 N −2 + . . . x−n N −n
parte intera
dove m e n sono interi naturali e x k , k = m , m
parte frazionaria
− 1 , . . . , −n sono interi
naturali compresi tra 0 e N − 1. Tuttavia, i calcolatori hanno una memoria finita per poter rappresentare i numeri. Ciò significa che solo una sequenza finita di cifre possono essere usate. Inoltre, i calcolatori lavorano in base binaria, quindi ogni numero può essere rappresentato mediante una sequenza
di 0 e 1 . Avendo in mente questi due fattori, possiamo ora capire la rappresentazione dei numeri al calcolatore, per cui ad ogni numero reale x è associato il numero di macchina denotato come f l ( x), in rappresentazione floating point – virgola mobile. 4.3
Conversione di base Nel seguito, non affronteremo gli aspetti teorici del passaggio da una
base ad un altra per rappresentare lo stesso numero, ma vedremo l’implementazione pratica per convertire un numero dalla base 10 alla base 2 e viceversa.
In base 10, il numero 72.65, scritto in forma estesa è dato dalla forma:
7 × 101 + 2 × 100 + 6 × 10−1 + 5 × 10−2
32 annamaria mazzia
Il passaggio di un numero dalla rappresentazione in base 2 alla rappresentazione in base 10 è semplice, in quanto si tratta di scrivere il numero come combinazione delle opportune potenze di 2. Vediamo un esempio. Esempio Sia 10001000.010 il numero scritto in base 2.
Se lo scriviamo mediante le potenze di 2 si ha:
10001000.010 = = 1 27 + 0 26 + 0 25 + 0 24 + 1 23 + 0 22 + 0 21 + 0 20 + 0 2−1 + 1 2−2 + 0 2−2
·
·
·
·
·
·
·
·
parte intera
= 27 + 23 + 2−2 = 128 + 8 + 0.25 = 136.25
Questo è quindi lo stesso numero ma rappresentato in base 10 .
Il passaggio di un numero dalla rappresentazione in base 10 a quella in base 2 si effettua, invece, in due passi. Si prende la parte intera del numero e la si divide per 2: se il resto della divisione è zero, allora la corrispondente cifra binaria sarà
0; se il resto è diverso da zero, la corrispondente cifra binaria sarà 1. Si ripete la procedura sul risultato avuto dalla divisione, fino a quando si arriva a 1 . In tal modo, calcoliamo le cifre binarie a partire da x 0 (il primo resto ottenuto) e andando avanti con indice crescente. Si prende la parte frazionaria del numero e la si moltiplica per 2 . Se il risultato dell’operazione ha la parte intera diversa da zero, allora
la corrispondente cifra binaria vale 1, altrimenti vale 0. Si ripete la procedura sulla parte frazionaria del risultato appena ottenuto e si continua fino a quando si arriva allo zero (o se si vede che c’è una periodicità nei risultati). Le cifre binarie vengono costruite da x −1 con indice decrescente. Esempio Vogliamo convertire il numero 725.625 dalla base 10
nella base 2. Per la parte intera si ha: Per la parte decimale si ha : quoziente resto .625 × 2 = 1 .250 x−1 = 1 725:2 = 362 1 x0 = 1 .250 × 2 = 0 .50 x−2 = 0 x1 = 0 362:2= 181 0 .5 × 2 = 1 .0 x−3 = 1 x2 = 1 181:2= 90 1 .0 × 2 = 0 .0 90:2= 45 0 x3 = 0 x4 = 1 45:2= 22 1 x5 = 0 22:2= 11 0 11:2= 5 1 x6 = 1 x7 = 1 5:2= 2 1 x8 = 0 2:2= 1 0 1:2= 0 1 x9 = 1 In base 2 il numero diventa 1011010101.101.
·
·
parte frazionaria
·
appunti di calcolo numerico
33
Osserviamo che un numero può avere una rappresentazione finita
in base 10 e infinita in base 2. Vediamo in dettaglio un esempio: Esempio Scriviamo il numero
base 2. Per la parte intera: : 2 = quoziente resto 1
0
1
x0
11 , che è 1.1 in base 10, nella 10
Per la parte decimale: .1 × 2 = 0 .2 x−1 = 0 .2 × 2 = 0 .4 x−2 = 0 .4 × 2 = 0 .8 x−3 = 0 .8 × 2 = 1 .6 x−3 = 1 .6 × 2 = 1 .2 x−4 = 1 .2 × 2 = 0 .4 x−5 = 0 .4 × 2 = 0 .8 x−6 = 0 .8 × 2 = 1 .6 x−7 = 1 .6 × 2 = 1 .2 x−8 = 1 .2 × 2 = 0 .4 x−9 = 0
Osserviamo che nella parte decimale si ripetono all’infinito le cifre 0011. Il numero in base 2 si scrive quindi come: 1.0 0011 0011 . . .
4.4
Rappresentazione IEEE dei numeri di macchina Lo sviluppo dei calcolatori ha promosso e sviluppato l’uso del sistema
binario, in cui ciascun numero è rappresentato da una successione di cifre binarie (0 e 1 ). Ma come avviene la rappresentazione di un numero nel calcolatore? Come rappresentare un numero a infinite cifre in maniera accurata utilizzando solo un numero finito di cifre? Lo standard IEEE , oggi utilizzato dalla maggior parte dei calcola-
tori, è dato dalla rappresentazione in virgola mobile (floating point).
IEEE è la sigla dell’Institute of Electrical and Electronics Engineers
Esiste anche un tipo di rappresentazione in virgola fissa (fixed point), ma in genere è preferita quella in floating point, e noi ci soffermeremo
solo su questa. Riprendiamo l’esempio proposto in Sezione 4.2, dove abbiamo 1 scritto in base 10 come 3 1 = 0.3333333. . . = 3
0 3 3 3 3 + 1 + 2 + 3 + 4 . . . 0 10 10 10 10 10
×
100
Questo è un esempio di numero scritto in virgola mobile: un qualunque numero x , in base 10, si può scrivere sotto la forma x = f 10e dove f rappresenta la parte frazionaria, detta mantissa, del numero e e è l’esponente (intero) della base con cui stiamo rappresentando il numero stesso, che dà informazioni sulla parte intera del numero. Ci sono diverse rappresentazioni in virgola mobile, tutte equivalenti tra loro. Si parla di virgola mobile normalizzata quando la mantissa ha una singola cifra di valore diverso da zero a sinistra della
virgola.
12.5 = 1.25 × 101 = 0.125 × 102 = 0.000125 × 105 sono tutte rappresentazioni equivalenti dello stesso numero.
La rappresentazione in virgola mobile normalizzata, se stiamo lavorando in base 10 , esprimerà la mantissa del numero come x.qualcosa con x è una cifra diversa da zero. Invece, in base 2, la mantissa sarà del tipo
1.qualcosa .
34 annamaria mazzia
La rappresentazione in virgola mobile normalizzata in base 2 è quella utilizzata nello standard IEEE: i numeri si possono scrivere nella forma x = f 2e . Al calcolatore, tuttavia, non possiamo rappresentare numeri con una mantissa a infinite cifre, perciò f = 1. f −1 f −2 . . . f −n e e = e Ne −1 e Ne −2 . . . e0 ., dove f −1 , f −2 , . . . , f −n , e e Ne −1 , e Ne −2 , . . . , e0
±
±
sono le cifre che caratterizzano rispettivamente la mantissa e l’esponente del numero in virgola mobile normalizzata in base 2, e quindi possono valere 1 o 0. Abbiamo n cifre per la mantissa (in realtà sono n + 1 ma poichè la rappresentazione è normalizzata f 0 = 1) e Ne per l’esponente. Nel sistema binario, le cifre vengono chiamate bits ( binary digits): quindi n bits sono riservati per la mantissa, Ne per l’esponente. Un numero in floating point nella rappresentazione IEEE viene scritto come x = ±(1 + f −1 2−1 + f −2 2−2 + . . . + f −n 2−n ) × 2e
dove 1 + f −1 2−1 + f −2 2−2 + . . . + f −n 2−n è la mantissa, normalizzata, cui sono riservati un numero n di bits, e è la potenza della base 2 cui sono riservati un numero Ne di bits ed è limitato a variare in un determinato intervallo [ L, U ].
Il primo 1 della mantissa (che corrisponde a f 0 ) non viene messo in memoria ma c’è. La rappresentazione in virgola mobile può essere
schematizzata nel modo seguente (s, e ed f rappresentano i bits riservati rispettivamente per il segno della mantissa, e per le cifre dell’esponente e della mantissa – ogni celletta può avere il valore 0 o 1): s
e
segno
e
e e
e
···
e
f
f
cifre dell’esponente
f
f
f
f
···
cifre della mantissa
Abbiamo 1 bit riservato al segno (si ha 0 per il segno + e 1 per il segno −), un numero Ne di bits per l’esponente 2 e , e un numero n di bits per la mantissa La scelta del numero di bits da riservare all’esponente e alla mantissa si basa su un compromesso tra la dimensione dell’esponente (e quindi il più piccolo e il più grande numero rappresentabile) e la dimensione della mantissa (e quindi la precisione del numero rappresantibile, più o meno cifre decimali). Nel sistema IEEE, la rappresentazione in singola precisione è a 32
bits mentre quella in doppia precisione è a 64 bits. La suddivisione dei bits tra esponente e mantissa viene ripartita nel modo seguente: s
Ne
n
# totale bits
Singola precisione 1 Doppia precisione 1
8 11
23 52
32 64
Riservare, nell’ordine, i bits per il segno, per l’esponente e infine per la mantissa, ha una sua spiegazione. Se, ad esempio, noi vogliamo confrontare due date per stabilire quale viene prima e quale dopo, partiamo dall’anno, poi vediamo il mese e infine il giorno. Allo stesso modo, se dobbiamo confrontare due numeri, prima andiamo a vedere l’esponente e poi la mantissa. Perciò, viene memorizzato prima l’esponente e poi la mantissa. Per il segno del numero, invece, la scelta è fatta per analogia alla rappresentazione dei numeri interi, dove il primo bit è riservato al segno.
appunti di calcolo numerico
35
Gli esponenti possono essere sia positivi sia negativi ma si preferisce memorizzarli come interi positivi (senza segno). Abbiamo dunque bisogno di una tecnica che permetta di rappresentare esponenti negativi come interi positivi. La tecnica utilizzata nello standard
IEEE è chiamata di biasing (distorsione): un numero positivo (detto bias) viene aggiunto all’esponente (sia esso positivo o negativo) in modo che il risultato finale sia sempre positivo. Ed è questo valore che viene memorizzato per rappresentare l’esponente. L’esponente viene quindi rappresentato in forma biased (parziale, influenzata da un altro numero): se e è l’esponente effettivo, noi memorizziamo il valore b + e dove b è il bias dato b = 0111 . . . 1, vale a dire Ne bits 1 2Ne −1 − b = 1 + 2 + 22 + . . . + 2Ne −2 + 0 · 2Ne −1 = = 2 Ne −1 − 1 1−2 Il vantaggio di usare la rappresentazione biased, cioè di memorizzare il valore dell’esponente senza segno, rende più semplice il confronto degli esponenti (quando serve) perchè su di essi si possono applicare istruzioni di confronto come per i numeri interi. Questa semplificazione non si ha, invece, in altri tipi di memorizzazione.
Esempio Cerchiamo di capire perchè b ha questo valore, con-
siderando la rappresentazione in singola precisione. Il più grande esponente che può essere rappresentato in singola precisione è dato da 11111111 che, in base 10 vale 255. La metà di 255 è 127 (con resto 1). Questo valore è proprio quello assegnato al bias (infatti 127 in base 2 si scrive come 01111111) e ci permette di ottenere valori sempre positivi per l’esponente che viene effettivamente memorizzato. Dal momento che (in base 10) deve valere la relazione 0 ≤ b + e ≤ 255 (noi memorizziamo il valore b + e sia che e sia positivo sia che sia negativo), troviamo che e può variare tra −127 e + 128. Tuttavia, per e = −127 si ha b + e = 0 e per e = 128 si ha b + e = 255, questi due valori dell’esponente sono riservati per i numeri speciali (zero, infinito e Not-a-Number), quindi, e potrà variare nell’intervallo [ 126,127 ].
−
In generale, quindi, si ha 0 b + e 1111...1 (il valore massimo è dato dal numero in base 2 formato da Ne cifre uguali a 1). Per trovare il limite superiore e inferiore entro cui può variare e , dobbiamo tener conto del fatto che, nella rappresentazione IEEE, i valori 0 e 1111. . .1 sono riservati per rappresentare numeri speciali quali lo zero, infinito
≤
≤
e il Not-a-Number. Di conseguenza, la relazione di prima va scritta con le disuguaglianze strette: 0 < b + e < 1111. . .1. Ciò significa che il massimo esponente che si può rappresentare è dato da 1111. . .1 − 1 che, in base 2 , vale 1111. . . 10. Da b + e ≤ 1111...10 si ha pure e ≤ 1111...10 − b = 1111 . . . 10 − 0111...1 = 0111. . . 1 = b . Il limite superiore per e , che indichiamo con U vale proprio b . Per il limite inferiore abbiamo: 0 < b + e cioè 1 ≤ b + e (si noti che siamo passati da < a ≤) da cui 1 − b ≤ e, ovvero, −(b − 1) ≤ e.
Si arriva a questo risultato perché abbiamo una somma del tipo S = 1 + a + a2 + . . . +
an e vale S = 1 a = = 2−1 . 2
1 − a (n+ 1) . In questo caso, 1−a
36 annamaria mazzia
Il limite inferiore è L = −(b − 1). In singola precisione, b = 0111. . .1 : in base 10 b = 127 10 , da cui 8 bits l’intervallo [ L, U ] = [−126, 127]. In doppia precisione, invece, b = 102310 da cui [ L, U ] = [−1022, 1023 ]. Per quanto riguarda la mantissa, sono ad essa riservati n bits. Considerando anche l’1 della normalizzazione, la precisione è di n + 1 bits. Il più grande numero che si può rappresentare è, quindi
n
1.111...1 ×2U = ( ∑ 2−k ) × 2U = k =0 n bits
1 − 2−(n+1) U 2 = (2 − 2−n )2U ≈ 2U +1 1 − 2 −1
Il più piccolo numero positivo rappresentabile è dato, invece, da:
Dati n valori w1 , w2 , . . . , wn con la seguente simbologia si indica la loro somma: n
∑ wk = w 1 + w2 + w3 + . . . wn
k=1
.
In singola e doppia precisione abbiamo, per il più grande e il più piccolo numero positivo rappresentabile, i seguenti valori:
1.000...0 ×2L = 2 L n bits
Se si vuole rappresentare un numero al di fuori di questo intervallo
Massimo Minimo
si ha overflow o underflow. Esempio Vogliamo scrivere il numero 5.7510 in formato IEEE
in singola precisione. Effettuiamo prima la conversione in base 2 : Per la parte intera: Per la parte decimale: 5 2 1 x0 .75 × 2 = 1 .50 x−1 = 1 2 1 0 x1 .5 × 2 = 1 .0 x−2 = 1 .0 × 2 = 0 .0 1 0 1 x2 Quindi 5.7510 = 101.112 = 1.0111 × 22 . Memorizziamo ora il numero in singola precisione: Per l’esponente, essendo e = 2, si ha: (b + e)10 = (127 + 2)10 = 12910 = 10000001 2
Per la mantissa, m = 23 e si deve trascurare l’1 della normalizzazione, quindi memorizzeremo le cifre 0111 e poi avremo tutti 0. 0
1
1
1
0
0
0
... 0
0
0
0
0
0
0
0
0
0
Il segno è positivo, quindi s = 0 Perciò la memorizzazione, considerati i bits per il segno, l’esponen-
te e la mantissa è: 0
1
s
0
0
0
0
0
esponente
0
1
0
1
1
1
0
... 0
0
0
0
mantissa
Consideriamo, ora, la rappresentazione dei numeri speciali. Per convenzione si pone uguale a 0 la rappresentazione che vede tutti zero sia nel segno, sia nell’esponente che nella mantissa (non dimentichiamo che il valore 1 della normalizzazione non è messo in memoria ma c’è e quindi non potremmo mai avere il valore 0 , perciò
lo si pone per convenzione).
0
Singola precisione 3.4 1038 1.2 10−38
≈ × ≈ ×
Doppia precisione
≈ 10308 −308 ≈ 2.2 × 10
appunti di calcolo numerico
37
Per i valori ±∞ si considerano tutti 1 nello spazio dedicato all’esponente, tutti 0 nello spazio dedicato alla mantissa e 0 o 1 per il segno, a seconda che sia + o −∞. 0 / 1
1
1
... 1 1 0 0 0
1
s
esponente
...
0
mantissa
0
I valori ± ∞ si hanno se si fa una divisione per zero o si fa un calcolo che comporta overflow. Si ha invece il Not-a-Number (NaN) come risultato di operazioni non definite, come 0/0 o log 0. A seconda della macchina si ha: 0
NaNS, che produce un segnale di errore 1 1 1 ... 1 1 0 1 1 ... 1
s
esponente
1
mantissa
NaNQ, con il quale il calcolo continua comunque... 0 1 1 1 ... 1 1 1 0 0 ... 0 0
s
4.5
esponente
mantissa
Precisione numerica Un numero può avere una rappresentazione finita o infinita. Basti √ pensare al valore di π o a 2 in base 10 . Abbiamo anche visto che un numero può avere rappresentazione finita in una base ma infinita in un’altra. Quando rappresentiamo un numero al calcolatore è possibile memorizzare solo un certo numero di cifre: in che modo lo esprimiamo? Per lasciare maggiore generalità al discorso, consideriamo una base
N .
−k p Sia x = ±(∑ ∞ k=0 x −k N ) N il numero "esatto" (può avere infinite cifre decimali e lo rappresentiamo come somma di infiniti termini). 1 ∗ −k p∗ In floating-point esso sarà espresso come x ∗ = ±( ∑ tk− =0 x−k N ) N , esso, cioè, sarà arrotondato (non possiamo avere infinite cifre decimali
e, difatti, la somma considera solo t termini). Ci sono due modi per arrotondare un numero
∗ = x−k per troncamento: x∗ = tronc( x), dove p∗ = p e x− k k = 0, . . . , t − 1. Le altre cifre, x −t , x−t−1 , . . . sono ignorate. 1 2
arrotondamento simmetrico: x ∗ = arr ( x) = tronc( x + N −t+1 N p ),
aggiungiamo un’unità a x −t+1 se x −t ≥ N /2.
| − x∗ | che si commette approssimando il nume-
L’errore assoluto x
ro x con x ∗ sarà
Evitiamo di effettuare tutti i passaggi che portano alle formule dell’errore assoluto e relativo, che sono il risultato di maggiorazioni di serie geometriche.
38 annamaria mazzia
| − ∗| ≤ x
x
nel troncamento N 1−t N p 1 1−t p N N nell’arrotondamento 2
Per l’errore relativo (in valore assoluto)
| − ∗| ≤ || x
x
x
| x − x∗ | , invece, si ha: |x|
N 1−t nel troncamento 1 1−t nell’arrotondamento N 2
1 1− t N è il numero conosciuto come precisione di macchina . 2 Nel caso della rappresentazione IEEE di un numero, si ha t − 1 = n , (ricordiamo che nella rappresentazione IEEE si memorizza il Il valore
numero normalizzato), da cui l’errore di arrotondamento relativo che
| x − x∗ | ≤ 2−(n+1). si commette è |x| In singola precisione (n = 23), avremo |x − x∗ | ≤ 2−24 ≈ 5.96 × 10−8 |x|
ciò significa che avremo 8 cifre decimali corrette. In doppia precisione (n = 52) avremo
|x − x∗ | ≤ 2−53 ≈ 1.11 × 10−16 |x| ciò significa che avremo 16 cifre decimali corrette. 4.6
Cifre significative Prima di vedere come si propagano gli errori nelle operazioni elementari di moltiplicazione, divisione, addizione e sottrazione, vediamo il
concetto di cifre significative. Le cifre significative sono quelle che danno un’informazione effet-
tiva sul valore del numero, indipendentemente dalla parte esponenziale. Esempio Supponiamo di dover calcolare l’errore assoluto e
relativo per approssimare un certo numero x mediante x∗ , per i seguenti casi: 1.
x = 0.6000 × 101 , x ∗ = 0.6100 × 101 ;
2.
x = 0.6000 × 10−3 , x ∗ = 0.6100 × 10−3 ;
3.
x = 0.6000 × 104 , x ∗ = 0.6100 × 104 ;
appunti di calcolo numerico
39
Nel primo caso, abbiamo |x − x ∗ | = 0.1 mentre l’errore relativo vale 0.166666 × 10−1 Nel secondo caso, l’errore assoluto vale 1 × 10−5 e l’errore relativo 0.166666 × 10−1 . Nell’ultimo caso, l’errore assoluto è 1 × 102 e quello relativo 0.166666 × 10−1 . L’errore relativo rimane sempre lo stesso, mentre quello assoluto cambia per i tre casi esaminati. Come misura di accuratezza, l’errore assoluto può portare a conclusioni fuorvianti, mentre l’errore relativo ci dà informazioni più significative perché tiene conto della dimensione del valore.
Abbiamo quindi la seguente definizione (per numeri in base 10 ). Definizione 4 .6.1 Si dice che un numero x ∗ approssima x con t cifre
significative se t è il più grande intero positivo per il quale
|x − x∗ | ≤ 5 × 10−t |x| Se il numero x è rappresentato al calcolatore in floating point, mediante la rappresentazione data da f l (x ), sappiamo che vale |x − f l (x)| ≤ 1 N 1−t (N la base, t il numero di cifre per la man|x | 2 tissa): se consideriamo la base dieci, questa maggiorazione si scrive proprio come
Nell’esempio precedente, i tre numeri sono rappresentati con due cifre significative dal momento che 0.166666 10−1 5 10−2 e 0.166666
× 10−1
>
×
≤ ×
5 × 10−3 .
|x − x∗ | ≤ 0.5 × 101−t = 5 × 10−t |x| Quest’ultima maggiorazione, con t il più grande intero positivo per il quale è verificata la relazione scritta, dà quindi la definizione di cifre
significative per un numero espresso in floating point. 4.7
Propagazione degli errori Se scriviamo il numero in virgola mobile normalizzata, le cifre significative sono date, quindi, dalle cifre della parte frazionaria. La bontà delle cifre va diminuendo procedendo da sinistra verso destra e questo può portare ad una perdita di cifre significative, come possia-
mo vedere studiando la propagazione degli errori nelle operazioni elementari. Supponiamo che i numeri su cui lavoriamo siano affetti da errore (di arrotondamento), mentre le operazioni siano eseguite in modo esatto. Indichiamo con il simbolo o una qualunque delle operazioni elementari {×, /, +, −} e con f l ( x) il numero x rappresentato in floating point e arrotondato, quindi f l ( x) = x(1 + e x ) dove ex è l’errore di arrotondamento relativo, cambiato di segno. Allora f l ( x o y ) = f l ( x) o f l ( y) = x (1 + ex ) o y(1 + e y ). Moltiplicazione
x − f l ( x) si ha xe x = x − f l ( x) x da cui f l ( x) = x (1 + ex ), dove ora ex viene
Da e x =
considerato cambiato di segno.
Nei calcoli sono trascurabili le potenze maggiori o uguali a due per e x e e y
40 annamaria mazzia
x(1 + ex ) × y(1 + e y ) = ( x × y)(1 + ex )( 1 + e y ) ≈ ( x × y)(1 + ex + e y )
Quindi l’errore nel prodotto è dato da e xy = e x + e y Divisione (con y = 0)
x (1 + ex ) x x = (1 + ex )(1 − e y + e y2 + . . . ) ≈ (1 + ex − e y ) y(1 + e y ) y y Abbiamo scritto
Si ha e x/ y = e x − e y : gli errori si accumulano additivamente
. . .) come risultato della formula polinomiale 1 di Taylor della funzione f (e y ) = di 1 + e y centro 0.
Somma algebrica (addizione o sottrazione, a seconda del segno di x e y ) x(1 + ex ) + y(1 + e y ) = x + y + xe x + ye y = (x + y)( 1 + L’errore è e x+ y =
dipende da x e y .
x x + y
ex +
x x + y
ex +
y
e) x + y y
y
e , una combinazione lineare che x + y y
0 =⇒ |ex+ y | ≤ |ex | + |e y | |x| e | y| possono essere molto grandi e, in – xy < 0 =⇒ |x + y| |x + y| tal caso, ci sarà un’amplificazione notevole dell’errore. Si ha il fenomeno di cancellazione se non si fa attenzione al numero di cifre significative dei numeri che vengono sommati. – xy
>
Ricordiamo, infine, che in aritmetica di macchina non valgono più
la proprietà distributiva o associativa del prodotto. un sistema decimale a 4 cifre, normalizzando i numeri, abbiamo x = 1.103 · 10−1 e y = 9.963 · 10−3 Facendo la sottrazione di questi due numeri, abbiamo 1.103 · 10−1 − 9.963 · 10−3 = 0.1103 − 0.009963 = 0.100337 . Facendo l’arrotondamento a 4 cifre abbiamo il valore 1.0034 · 10−1 . |0.100337 − 0.10034| ≈ 2.99 × L’errore relativo che commettiamo è: 0.100337 10−5 . Questo errore è minore della precisione di macchina (considera1 ta la base 10 e le 4 cifre) · 10−3 . 2 Tuttavia, se non teniamo conto delle cifre significative ma tronchia-
mo i numeri alle prime 4 cifre, abbiamo la sottrazione di 0.1103 − 0.0099 = 0.1004. | 0.100337 − 0.1004| ≈ .63 × 10−3. Questa volta l’errore relativo è 0.100337 L’errore è maggiore della precisione di macchina.
Esempio Sia da risolvere l’equazione ax 2 + bx + c = 0 con a = 1, b = 56 e c = 1, quindi x 2 56x + 1 = 0, in una macchina a 4
cifre decimali (normalizzata).
−
Supponiamo di avere due numeri molto vicini tra loro, in cui le prime p + 2 cifre della parte frazionaria sono buone mentre le altre sono corrotte . Inoltre, le prime p cifre siano le stesse per entrambi i numeri (usiamo i simboli
vvv e www per esprimere le cifre corrotte): f l ( x ) = 1. d−1 d−2 . . . b−( p+1) b−( p+2) vvv × 2e
e f l ( y) = 1. d−1 d−2 . . . b− ( p+1) b−( p+2) www × 2 Quando andiamo a fare la sottrazione le prime p cifre buone si annullano. Da p + 2 cifre buone, ne abbiamo ora solo 2 e tutte le altre sono quelle corrotte. Con la normalizzazione il risultato diventa del tipo (ora qqqqq sono le cifre corrotte):
Esempio Sia x = 0.1103 e y = 0.009963. Se consideriamo
−
1 = (1 − e y + e y2 + 1 + e y
b− qqqqqq × 2e f l ( x − y) = 1. b− 1 2
appunti di calcolo numerico
Applicando la formula x 1/2 =
41
−b ± √ b2 − 4 ac abbiamo x1/2 =
2a √ 0.01786284073 28 ± 783 = 28 ± 27.98213716 = . L’arrotonda55.98213716 mento delle due radici in virgola mobile normalizzata a 4 cifre decimali dà: x 1 = 1.7863 · 10−2 e x 2 = 5.5982 · 101 . Consideriamo ora la macchina a 4 cifre decimali per risolvere l’equazione:
√
x1 = 28 − 783 = 2.8 · 101 − 2.7982 · 101 = 0.0018 · 101 = 0.018 = 1.8 · 10−2
√
x2 = 28 + 783 = 2.8 · 101 + 2.7982 · 101 = 5.5982 · 101
La radice x 2 è arrotondata correttamente, mentre la variabile x 1 no, per effetto della cancellazione. Per ricavare x 1 con l’arrotondamento corretto, applichiamo la formula x1 x2 = c/ a, che, nel nostro caso, vale x1 x2 = 1 da cui x1 = 1/ x2 = 1/ (5.5982 · 101 ) = 1.7863 · 10−2 . Abbiamo fatto un’operazione che non risente del fenomeno di cancellazione numerica!
Esempio Vediamo come non valga più la relazione ( a
− b )2 =
a2 − 2ab + b2 . Sia a = 15.6 e b = 15.7 e la macchina sia a 3 cifre decimali (a − b) = ( a − b)∗ + ea−b . Abbiamo ( a − b)∗ = 15.6 − 15.7 = −0.1. Quindi ( a − b)2 = +0.01 = 0.1 · 10−1 . Consideriamo ora a2 − 2ab + b2 = 243.36 − 489.84 + 246.49 = 0.24336 · 103 − 0.48984 · 103 + 0.24649 · 103 Considerando la macchina a 3 cifre decimali, abbiamo: 0.243 · 103 − 0.490 · 103 + 0.246 · 103 = −0.1 · 101 I risultati sono completamente diversi!
Esempio Consideriamo il problema di approssimare la deriva-
ta della funzione f (x ) = sin x nel punto x = 1.2. Supponiamo di non poter valutare direttamente la derivata della f e di volerla approssimare applicando la formula polinomiale di Taylor: f ( x0 + h) =
h 2 h 3 h 4 IV f ( x0 ) + h f (x0 ) + f (x0 ) + f (x0 ) + f (x0 ) + . . .
2
6
24
Allora f (x0 ) =
f (x0 + h) − f ( x0 ) h h 2 h 3 − ( f ( x0 ) + f (x0 ) + f IV ( x0 ) + . . . ) 2 6 24 h
f ( x0 + h) − f ( x0 ) Approssimiamo, quindi, la f ( x0 ) calcolando . h L’errore, detto errore di discretizzazione, che si commette è 2
3
| f (x0 ) − f (x0 + hh) − f (x0 ) | = | h2 f (x0 ) + h6 f (x0 ) + h24 f IV (x0 ) + . . . |
Questa volta lavoriamo su una macchina non normalizzata, per cui scriviamo la parte frazionaria come 0.qualcosa . Per esercizio, si ripeta l’esempio lavorando su una macchina a 2 cifre decimali normalizzata e su una macchina a 3 cifre decimali normalizzata. Cosa si osserva?
42 annamaria mazzia
Supponendo di conoscere il valore della derivata seconda in x 0 , per piccoli valori di h possiamo dare una stima dell’errore di discretizzazione, | f (x0 ) − f (x0 + hh) − f (x0 ) | ≈ h2 | f (x0 )| Ci aspettiamo, anche senza conoscere il valore di f (x0 ) (purchè diverso da 0 ) che l’errore di discretizzazione diminuisca proporzionalmente con il passo h , al decrescere di h . Nel nostro caso, in cui f (x ) = sin ( x), noi conosciamo il valore esatto della derivata in 1 .2, cos (1.2) = 0.362357754476674... e possiamo dunque calcolare l’errore esatto che commettiamo approssimando
la derivata di sin x con la formula che abbiamo ricavato. Per h = 0.1 non abbiamo un’approssimazione accurata. Ci aspettiamo che diminuendo il passo h l’errore che commettiamo diminuisca. Riportiamo, nella tabella a lato, gli errori della formula (in valore h assoluto) e confrontiamoli con l’errore di discretizzazione | f ( x0 )| 2 (i conti sono fatti in singola precisione): L’errore commesso dallo schema decresce come h e, in particolare, h come | f (1.2)| = 0.46602 h. 2 Possiamo pensare di ottenere un’accuratezza grande quanto vogliamo a condizione di prendere valori di h sempre più piccoli. In realtà, per valori di h molto piccoli, gli errori iniziano ad aumentare! h h errore | f (x0 )| 2 1.e-8 4.3611e-10 4.6602e-9 1.e-9 5.5947e-8 4.6602e-10 1.e-10 1.6697e-7 4.6602e-11 1.e-11 4.6603e-5 4.6602e-12 1.e-12 1.3006e-4 4.6602e-13 1.e-13 4.2505e-4 4.6602e-14 1.e-16 3.6236e-1 4.6602e-16 1.e-18 3.6236e-1 4.6602e-19 In Figura 4 .4 vediamo come la curva dell’errore inizialmente segue la retta descritta dall’errore di discretizzazione ma poi si allontana da essa. Perchè questo diverso comportamento per valori di h molto piccoli? Dobbiamo tenere presente che l’errore che noi valutiamo non è semplicemente l’errore di discretizzazione ma la somma dell’errore di discretizzazione e dell’errore di arrotondamento! Per valori di h grandi, l’errore di discretizzazione descresce al diminuire di h e domina sull’errore di arrotondamento. Ma quando l’errore di discretizzazione diventa molto piccolo, per valori di h minori di 10 −8 , allora l’errore di arrotondamento inizia a dominare e ad aumentare sempre più al diminuire di h. Questo è un motivo per cui si deve cercare di far prevalere l’errore di discretizzazione in un procedimento numerico. Nell’errore di arrotondamento, per h via via più piccoli, si verifica un errore di cancellazione: f ( x0 + h) è praticamente uguale a f ( x0 ) per h molto piccoli! per cui l’errore che
h
errore
1.e-1 1.e-2 1.e-3 1.e-4 1.e-5 1.e-6
4.7167e-2 4.6662e-3 4.6608e-4 4.6603e-5 4.6602e-6 4.6597e-7
h | f (x0 )| 2
4.6602e-2 4.6602e-3 4.6602e-4 4.6602e-5 4.6602e-6 4.6602e-7
Figura 4.4: In alto: errore di discretizzazione f (x0 + h) f ( x0 ) ed effettivo ( f ( x0 ) ). h In basso: errori di discretizzazione, di arrotondamento, ed errore effettivo (con f ( x0 ) f ( x0 + h) f ( x0 ) ), ed errore dalla for-
≈
h
−
−
≈
mula trigonometrica per cui sin ( x0 + h) sin ( x0 ) = 2cos (2x0 + h/2) sin ( h/2 ). I grafici sono in scala logaritmica.
−
appunti di calcolo numerico
43
calcoliamo è | f (x0 ) − 0| = f ( x0 ) = 0.3623577544.... Una strategia per evitare la cancellazione è di scrivere diversamente la differenza f ( x0 + h) − f (x0 ). Nel caso di f (x ) = sin (x ) ricorriamo alla formula φ + ψ φ−ψ trigonometrica per cui sin (φ) − sin (ψ) = 2cos ( ) sin ( ). 2 2 Vediamo come migliorano le cose inserendo nel grafico 4.4 anche la curva dell’errore che otteniamo utilizzando questa espressione trigonometrica. L’errore continua a diminuire anche quando la formula precedente dà un errore crescente. Sempre in Figura 4 .4, e in riferimento alla formula “non buona”, abbiamo considerato la curva
dell’errore di arrotondamento in modo da confrontare l’andamento effettivo dell’errore con un limite superiore "teorico" dell’errore computazionale totale dato dalla somme degli errori di discretizzazione e di arrotondamento. La rappresentazione di f ( x) è affetta da errore per cui avremo: f ( x) = f ∗ (x ) + e x . L’errore di arrotondamento è f ( x0 + h) f (x0 ) f ∗ ( x0 + h) f ∗ (x0 ) e x0 +h ex0 . Maggioran= + h h h do e x con la precisione di macchina , l’errore di arrotondamento è dato da 2/h: per h piccoli è l’errore che predomina!
−
−
−
4.8
4.8.1
Instabilità e malcondizionamento Instabilità In generale è impossibile evitare un accumulo lineare degli errori di arrotondamento durante un calcolo, ed è accettabile che ci sia una crescita lineare moderata, del tipo En ≈ c0 nE0
dove En misura l’errore in valore assoluto dell’n-sima operazione dell’algoritmo e c 0 rappresenta una costante non molto grande. Se invece avviene una crescita di tipo esponenziale En ≈ cn1 E0
1, allora l’algoritmo è instabile. Algoritmi del genere devono essere evitati! con c1
>
Definizione 4 .8.1 Un procedimento numerico si dice instabile se gli errori
che vi sono associati non rimangono limitati ma crescono fino a distruggere completamente la soluzione.
Per algoritmo intendiamo un procedimento di calcolo. In particolare, un algoritmo è una sequenza di passi che permettono di risolvere tutto o parte di un problema. Per curiosità, la parola algoritmo è entrata in uso negli anni ’50 in sostituzione di algorismo , termine con cui si indicava il processo di calcolo utilizzando i numeri arabi. Il termine algoritmo deriva dal nome di “al-Khwarizmi”, importante matematico arabo del nono secolo grazie al quale l’Europa imparò ad usare i numeri arabi, oltre alla notazione in base 10. Le procedure che permettevano di effettuare calcoli in notazione decimale presero il nome di algorismi o algoritmi .
Esempio Consideriamo l’integrale
xn dx 0 x + 10 per valori di n = 1,2,...,30. Osserviamo che, poichè x ∈ [0, 1], la funzione integranda varia pure essa nell’intervallo [0, 1] per cui 0 < yn < 1. yn =
1
Nel medioevo (e forse anche per qualche studente di oggi!!!), si pensava che algoritmo derivasse dal greco algiros (panico, dolore) e arithmos (numero)!
44 annamaria mazzia
Analiticamente, si ha: yn + 10 yn−1 =
1 x n + 10x n−1
0
x + 10
d x =
1 x n−1 ( x + 10)
0
x + 10
dx =
1
0
xn−1 dx =
1 n
Vale anche la relazione y0 =
1
0
1 d x = ln (11) − ln (10). x + 10
Possiamo pensare, quindi, di calcolare numericamente il valore di
yn attraverso il seguente algoritmo: 1.
valutare y 0 = ln (11) − ln (10)
2.
per n = 1, 2,. . . , 30 valutare y n =
1 − 10 yn−1 n
Questa formula ricorsiva darebbe l’esatto valore se non fossero presenti errori di arrotondamento che ci allontanano completamente
dalla soluzione vera. L’errore si moltiplica esponenzialmente. Infatti y1 = 1 − 10 y0 1 1 y2 = − 10(1 − 10 y0 ) = − 10 + (−10)2 y0 2 2 1 1 y3 = − 10( − 10 + 102 y0 ) = −103 y0 + costante 3 2 .. .. . . yn = (−10)n y0 + costanten L’errore che si commette applicando questo algoritmo (tenendo conto
che noi non avremo i valori y n esatti ma dei valori approssimati y ∗n , dovuti all’arrotondamento) sarà del tipo y n − y∗n ≈ (−10)n ( y0 − y0∗ ) cioè En ≈ (−10)n E0 . L’algoritmo, quindi, presenta un errore E n con crescita di tipo esponenziale. Difatti, numericamente, otteniamo valori che via via si allontanano dall’intervallo di ammissibilità [ 0, 1].
I risultati che ricaviamo sono riportati nelle tabelle a lato (osserviamo che sono leggermente diversi a seconda dal linguaggio usato, proprio per effetto dell’instabilità). 1 1 Se invece, consideriamo y n−1 = ( − yn ), partendo da un valore 10 n di n molto grande e andando a ritroso, l’errore diminuisce. Infatti: yn0 = 0 1 1 yn0 −1 = 10 n0 1 1 1 1 1 − yn0 −2 = ( )= + costante 10 n0 − 1 10 n0 (−10)2 n0 .. .. . . 1 + costanten0 −n yn = (−10)n0 −n n0
1 L’errore al passo n dipende, quindi, (in valore assoluto) da n0 −n 10 (dal momento che n0 − n > 0, l’errore decresce per n che tende a
Da un programma in Fortran:
n 0 1 2 3 4 ... 7 8 9 10 18 27 30
yn 9.53 10e-2 4.68 98e-2 3.10 21e-2 2.31 22e-2 1.87 78e-2 .... -3.02 29e-1 3.14 79e+0 -3.13 68e+1 3.1378e+2 3.1377e+10 -3.1377e+19 3.1377e+22
Da un programma Matlab:
n 0 1 2 3 4 ... 7 8 9 10 18 27 30
yn 9.53 10e-2 4.68 98e-2 3.10 18e-2 2.31 54e-2 1.84 65e-2 .... 1.1481-2 1.01 94e-2 9.16 73e-3 8.3270e-3 -9.1694e+1 -9.1699e+9 -9.1699e+13
appunti di calcolo numerico
zero). Perciò, dato un valore di accuratezza > 0 e fissato un intero n1 è possibile determinare l’intero n 0 tale che, partendo da y n0 = 0 e andando a ritroso, gli integrali y n saranno valutati con un errore in valore assoluto minore di per 0 < n ≤ n 1 . Se richiediamo una tolleranza = 10 −6 , e fissiamo un valore n 1 , per calcolare n 0 dovrà essere 1 10n0 −n1
<
cioè 10n1 −n0
<
Passando al logaritmo in base 10 : n1 − n0 < log =⇒ n0 > n1 − log
Fissato n 1 = 20 si ricava n 0 = 26. Questa volta i calcoli danno gli stessi risultati sia in Matlab sia in Fortran: n 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12
yn 0.000000 3.84615e-3 3.61538e-3 3.80513e-3 3.96731e-3 4.14872e-3 4.34703e-3 4.56530e-3 4.80663e-3 5.07489e-3 5.37486e-3 5.71251e-3 6.09542e-3 6.53332e-3 7.03898e-3
n 11 10 9 8 7 6 5 4 3 2 1 0
yn 7.62944e-3 8.32797e-3 9.16720e-3 1.01944e-2 1.14806e-2 1.31377e-2 1.53529e-2 1.84647e-2 2.31535e-2 3.10180e-2 4.68982e-2 9.53102e-2
Osserviamo come il valore y 0 coincida con il valore teorico noto.
L’esempio appena visto ci porta a dare alcune considerazioni sui criteri su cui si deve basare un algoritmo: un algoritmo deve essere accurato, efficiente e robusto, accurato nel senso che bisogna essere in grado di sapere la grandezza dell’errore che si commette nell’algoritmo stesso; efficiente in termini di velocità di esecuzione e di richiesta di spazio di memoria per le variabili utilizzate; robusto nel dare il risultato corretto entro un livello di tolleranza dell’errore che sia accettabile. 4.8.2
Malcondizionamento Definizione 4 .8.2 Un problema si dice malcondizionato se a piccole varia-
zioni nei dati di input del problema corrispondono forti variazioni nei dati di output.
45
46 annamaria mazzia
Quando il problema è molto sensibile alle variazioni dei dati di input,
producendo risultati molto diversi tra loro, allora nessun algoritmo, per quanto robusto e stabile, potrà dare una soluzione robusta al problema stesso. Esempio Il problema del calcolo delle radici di un polinomio
p(x ) di grado n è un esempio di problema malcondizionato. Sia p ( x) = a 0 + a1 x + a2 x2 + . . . + an xn . I dati di input del problema sono i coefficienti a 0 , a1 , . . . , an . I dati di output sono le radici del polinomio. Si può provare che a piccole variazioni sui dati iniziali, corrispondono grandi variazioni sui risultati. Vediamo il caso del polinomio p(x ) = ( x − 1)( x − 2) · · · (x − 10). Chiaramente, tale polinomio ha radici 1,2,...,10. Se perturbiamo il polinomio variando il coefficiente a 9 del valore di 0.00001, considerando quindi il polinomio p (x ) + 0.00001 x9 , le radici corrispondenti si discostano di poco da quelle del polinomio di par-
Figura 4.5: Esempio: malcondizionamento
tenza, come si può notare in Figura 4 .5. Ma se variamo il coefficiente a9 del valore 0 .0001, considerando cioè il polinomio p ( x ) + 0.0001 x9
allora le radici corrispondenti a x 7 , x8 , x9 , x10 non saranno più reali ma avranno anche una parte immaginaria. La piccola variazione sui dati di ingresso, quindi, provoca una grande variazione sui dati in uscita, proprio perchè il problema è malcondizionato.
Una quantità che misura il grado di sensibilità di un problema – fornendoci indicazioni sul fatto che a piccole variazioni sui dati di ingresso del problema ci possono essere piccole o grandi variazioni sui dati di uscita – si chiama indice di condizionamento (o numero di
condizionamento) del problema. Diamo la definizione nel caso in cui il nostro problema si possa identificare come una funzione f : R −→ R. Il valore y = f ( x) è il valore di uscita del problema f . Vogliamo vedere cosa succede se il dato di ingresso non è più x ma x + ∆ x. ∆ x rappresenta quindi una perturbazione sul dato iniziale. Assumiamo x = 0, y = 0. Applichiamo la formula di Taylor di centro x . Si ha: f (x + ∆ x ) = f (x ) + f ( x)∆ x + O(∆ x2 ) ≈ f (x ) + f ( x)∆ x La variazione sul dato d’uscita è data dalla differenza f ( x + ∆ x) f ( x). Chiamiamo questa differenza con ∆ y. Quindi ∆ y = f ( x + f ( x)∆ x (utilizziamo il risultato ottenuto dalla formula ∆ x ) f ( x )
−
−
di Taylor).
≈
Se utilizziamo gli errori relativi, abbiamo (e sapendo che y = f ( x)): ∆ y
y
≈
f ( x)∆ x f ( x)
Moltiplicando numeratore e denominatore a secondo membro per x
y
≈
(condf )( x) =
si ricava ∆ y
Come esempio, consideriamo f ( x) = x 1/ α , con x > 0 e α > 0. Calcoliamo l’indice di condizionamento applicando la formula (poichè abbiamo supposto x > 0, si ha f ( x) = 0). Risulta
x f (x ) ∆ x f ( x) x
x f ( x) f (x )
=
1 x x1/α−1 α
x1/α
=
Per α grande, ( condf )( x) tende a zero, quindi abbiamo un problema bencondizionato. Se, invece α è molto piccolo si ha un problema malcondizionato (se α = 10−10 , si 10 ha f ( x ) = x 10 e ( condf )( x) = 10 10 , un valore molto grande).
1 α
appunti di calcolo numerico
0, questa uguaglianza approssimata (abbiamo Al limite per ∆ x usato il simbolo ) diventa una vera uguaglianza. Questo suggerisce
≈
→
di definire l’indice di condizionamento di f mediante la formula
x f ( x) (condf )( x ) = f (x )
Questo numero ci dice quanto grandi sono le perturbazioni relative
per y confrontate con le relative perturbazioni di x . ∆x Per x = 0 e y ,e = 0 , non ha senso considerare l’errore relativo x si considera l’errore assoluto su x . In tal caso, si definisce indice di condizionamento la quantità
f (x ) (condf )( x ) = f (x )
Per x = y = 0 si considera invece l’errore assoluto sia per x che per y , dimodochè l’indice di condizionamento diventa (condf )( x ) = f ( x)
|
4.9
|
Domande di riepilogo 1. Spiegare, con degli esempi, il passaggio dalla base 2 alla base 10 e dalla base 10 alla base 2 . 2. In
che modo vengono rappresentati i numeri in virgola mobile normalizzata, nello standard IEEE? Che cosa rappresenta il bias?
3. Cosa significa fenomeno di cancellazione numerica ? Spiegare e fornire
un esempio. 4. Definire
un algoritmo stabile e fare un esempio mostrando un algoritmo stabile e uno instabile.
5.
Cosa vuol dire che un problema è malcondizionato? Dare un esempio.
6.
Come è definito l’indice di condizionamento di una funzione f ?
47
5 Zeri di funzione 5.1
Partiamo da alcuni problemi ...
N el progettare una pompa centrifuga, o turbopompa, occorre tener presenti diversi elementi. Ne elenchiamo solo alcuni: il rendimento della macchina (maggiore è il rendimento più competitiva è la macchina); il dimensionamento dell’albero e del mozzo, che dovrà garantire una rigidezza torsionale sufficiente per permettere una trasmissio-
Non so come il mondo potrà giudicarmi ma a me sembra soltanto di essere un bambino che gioca sulla spiaggia, e di essermi divertito a trovare ogni tanto un sasso o una conchiglia più bella del solito, mentre l’oceano della verità giaceva insondato davanti a me. Isaac Newton
Non entriamo nei dettagli: questo problema sarà affrontato con la dovuta competenza in uno dei corsi del terzo anno di Ingegneria dell’Energia, con indirizzo elettrico. L’esempio vuole mostrare come il Calcolo Numerico possa essere di aiuto per risolvere problemi pratici e specifici dell’Ingegneria.
ne di energia in totale sicurezza; il dimensionamento della bocca di aspirazione, in modo da ottimizzare il comportamento a cavitazione e per rendere massimo il suo rendimento. Considerando più in dettaglio quest’ultimo punto e indicando con
D0 il diametro della bocca di aspirazione, per rendere massimo il suo rendimento, occorre calcolare il valore di D 0 che rende minima la velocità relativa (che chiamiamo w 2 ) in ingresso, perchè limitare l’energia cinetica nella sezione di ingresso vuol dire limitare le perdite.
La velocità w 2 si può scrivere come w2 =
ω2 D02 24 Q2 k2m 2 )2 + 4 πη v2 ξ 22 ( D02 − D M
dove Q è la portata volumetrica della pompa, k m è un numero tipico di macchina, η v rappresenta il rendimento volumetrico, ξ 2 è un coefficiente di ostruzione, D M il diametro del mozzo, ω è la velocità di
rotazione. Se è solo D 0 la nostra incognita, per rendere minimo w 2 dobbiamo fare la derivata di w 2 rispetto a D 0 e cercare il valore di D 0 che rende nulla tale derivata: in tal modo troviamo il valore di D 0 che rende minima la velocità. Si dovrà risolvere la seguente equazione:
D0 = 27 ·
Q2
2
km · · 2 2 π ω η2 ξ 2 v 2
Assegnata una funzione, tra i punti che annullano la sua derivata possiamo trovare i punti
1
2 D M 1− 2 D0
2
Osserviamo come a destra del segno di uguaglianza abbiamo una funzione complicata e non è possibile trovare per via analitica quel
di massimo e di minimo. In tal caso si trova un solo punto e si può dimostrare che è punto di minimo.
50 annamaria mazzia
valore di D0 che soddisfa l’equazione. Allora in che modo possiamo risolvere il problema? Se chiamiamo con g( D0 ) la funzione complicata che leggiamo nell’equazione precedente, potremo applicare lo schema di punto fisso
a tale funzione g , oppure potremo applicare un metodo per trovare quel valore di D 0 che annulla la funzione f ( D0 ) = g ( D0 ) − D0 . Consideriamo ora un’altro problema, quello di calcolare la radice quadrata di un numero. Già gli antichi Babilonesi, intorno al 1700 √ a.C., avevano trovato la soluzione: per calcolare b, partivano da un certo valore x che si avvicinava alla soluzione, dividevano b per questo numero, e facevano poi la media, iterando il procedimento. L’algoritmo si può schematizzare nel modo seguente: partire da x 0 prossimo a
√ b;
1 b considerare x 1 = (x0 + ); 2 x0 1 b generalizzando: xn+1 = ( xn + ). 2 xn Il metodo usato dai Babilonesi non è altro che il metodo di NewtonRaphson (che vedremo più avanti) per trovare gli zeri della funzione f ( x) = x 2 b.
−
Abbiamo visto ora due esempi, uno specifico dell’Ingegneria e
Per
per √ 2 ≈ esempio, 1.41421356237310,
calcolare sapendo che il valore che dobbiamo approssimare è compreso tra 1 e 2 , possiamo partire da x0 = 1.5 , ottenendo: x0 = 1.5
2 ) = 1.41666667 1.5 2 x2 = 12 (1.41666667 + ) = 1.41421569 1.41666667 2 x3 = 12 (1.41421569 + ) = 1.41421356 1.41421569 x1 = 12 (1.5 +
uno tipico della Matematica, in cui dobbiamo risolvere un’equazione del tipo g ( x) = x o f ( x ) = 0. Siamo pronti per passare allo studio
di metodi numerici che ci permettano di risolvere questi due tipi di equazioni. 5.2
Metodo delle Bisezioni Sia data una funzione f continua in un intervallo [ a, b], con f (a) e f (b) che assumono valori di segno opposto. Allora, per il teorema del Valore Intermedio (si veda il Teorema 3 .6.3 con K = 0), esiste almeno un punto ξ ∈] a, b[ tale che f (ξ ) = 0. Assumiamo, per semplicità che ci sia una sola radice ξ nell’intervallo ] a, b[. Il metodo delle bisezioni (detto anche metodo dicotomico) si chiama così perchè, ad ogni passo, viene dimezzato l’intervallo precedente, cercando in tal modo di racchiudere la radice ξ in sottointervalli
sempre più piccoli. Si pone a 0 = a e b0 = b . Si prende il punto medio dell’intervallo a + b0 . [a0 , b0 ], c 0 = 0
2 Se f (c0 ) = 0 allora abbiamo trovato la radice dell’equazione, altrimenti si va a controllare il segno di f (c0 ). – Se f (c0 ) e f ( a0 ) hanno lo stesso segno, allora ξ si trova nel-
l’intervallo ] c0 , b0 [ (applicando di nuovo il teorema del Valore Intermedio). In tal caso porremo a 1 = c 0 e b1 = b0 .
Nel caso ci sia più di una radice, la procedura che ora descriviamo vale sempre, e ci permette di calcolare una di queste radici.
appunti di calcolo numerico
– Se, invece, f (c0 ) e f (b0 ) hanno lo stesso segno, allora ξ si trova
nell’intervallo ] a0 , c0 [ In tal caso porremo a 1 = a 0 e b1 = c 0 . Riapplichiamo questa procedura appena descritta sul sottointervallo [ a1 , b1 ] Fermiamo il procedimento ad una certa iterazione n, se f (cn ) = 0 o se l’ampiezza del sottointervallo è sufficientemente piccola, cioè
bn − an ≤ tol dove tol è una certa tolleranza prefissata. In tal caso 2 assumiamo c n come approssimazione della radice ξ .
Osserviamo che, ad ogni passo, viene dimezzato l’intervallo in cui si trova la radice ξ , da cui
|ξ − cn | ≤ b2n−+1a . Da questa relazione, si può determinare il numero di iterazioni n necessarie per calcolare un’approssimazione della radice ξ entro una
certa tolleranza tol richiesta. Infatti b−a 2n + 1
≤ tol =⇒ |ξ − cn | ≤ tol
Ma b−a 2n + 1
≤ tol ⇐⇒ 2n ≥ b2−tola =⇒ n ≥
−
b a 2tol . log(2)
log
L’algoritmo di bisezione può essere descritto sotto forma di pseudo-
codice. Se il metodo non converge (perchè, ad esempio, la funzione che abbiamo scelto non assume segno opposto agli estremi dell’inter-
vallo), il procedimento iterativo potrebbe entrare in stallo (pensiamo ad un programma da fare eseguire al calcolatore) e quindi conviene introdurre un numero massimo di iterazioni, che viene indicato con itmax. Si intende che il metodo converge quando l’ampiezza del nuovo intervallo diventa minore di una tolleranza tol prefissata.
Figura 5.1: Metodo delle Bisezioni
51
52 annamaria mazzia
Dati di input: a, b, tol , itmax Dati di output: soluzione approssimata c o messaggio di
fallimento 1 verificare che f ( a ) f (b ) < 0, altrimenti non si può implementare il metodo ; 2 n ←− 1 ; 3 c ←− ( a + b) /2 ; 4 ampiezza intervallo ←− | b − a| /2 ; 5 Fintantochè n ≤ itmax e ( f ( c) = 0 e ampiezza intervallo > tol) n ←− n + 1 (incrementa n ) ; 6 7 Se f ( a) f (c) > 0 allora a ←− c 8 9
altrimenti
10
b ←− c
11 12 13
Fine-Se
aggiorna c ; aggiorna ampiezza intervallo ;
14 Fine-Fintantochè 15
Se f ( c) = 0 o ampiezza intervallo
16
c è la soluzione approssimata
≤ tol allora
17 altrimenti 18 19
n > itmax ; il metodo è fallito dopo itmax iterazioni ;
20 Fine-Se
5.3
Metodo del Punto Fisso
x
2
−
sin (x ) = Un esempio. Da f ( x) = 2 0, aggiungendo ad ambo i membri x , ottenia-
Il problema f ( x) = 0 può essere reso equivalente alla ricerca del punto fisso di una opportuna funzione g (vale a dire del problema g( x) = x ).
x 2
2
− −
sin ( x) + x = x . Se poniamo x 2 g( x) = sin ( x ) + x, le radici della 2 f coincidono con i punti fissi della g . mo
Definizione 5 .3.1 Data una funzione g, si definisce punto fisso della g, quel punto ξ che soddisfa la relazione g (ξ ) = ξ
Una funzione può ammettere uno o più punti fissi o non ammetterne affatto. Un modo per calcolare un punto fisso di una funzione g è dato da iterazioni successive sulla funzione g stessa. Figura 5.2: Radici di f ( x) =
Esempio Supponiamo che la funzione g sia g ( x ) = cos ( x ). Prendiamo come
sin ( x ).
x 2
2
x 2
2
−
valore iniziale x 0 = 1. Con una calcolatrice, andiamo a calcolare (in modalità radianti!) il suo coseno: ricaviamo x 1 = cos (x0 ) = g ( x0 ) = 0.54030230. Successivamente, calcoliamo il coseno di x1 , ottenendo x2 = cos (x1 ) = 0.857553216. Osserviamo che x2 = cos ( x1 ) = cos (cos ( x0 )) e non cos 2 (x0 )! Abbiamo innescato, in questo modo, un procedimento iterativo per cui xn+1 = cos ( xn ) = g(xn ). Con Figura 5.3: Punti fissi di g ( x) =
sin ( x ) + x.
−
appunti di calcolo numerico
la calcolatrice, basta digitare sulla funzione cos ogni volta in modo da avere i nuovi valori della successione x n+1 . I primi numeri che otteniamo non sono molto importanti. Quelli importanti sono quelli che si hanno dopo 15, 30 o 100 passi. Nel nostro caso, abbiamo i valori riportati nella Tabella a lato. Perchè i valori di x tendono a 0 .7390851332? Cosa ha di speciale questo numero? Il valore 0.7390851332 è un punto fisso per la funzione cos ( x).
Esempio
Consideriamo la funzione g ( x) =
n 5 11 13 14 15 29 30 56 57 58
53
xn 0.7013687746 0.7356047404 0.7414250866 0.7375068905 0.7401473356 0.7390893414 0.7390822985 0.7390851333 0.7390851332 0.7390851332
1 x + 2. Partendo da x 0 = 0 si ha 2
n
xn 1 x1 = 12 · 0 + 2 = 2 2 x2 = 12 · 2 + 2 = 3 3 x3 = 12 · 3 + 2 = 3.5 4 x4 = 12 · 3.5 + 2 = 3.75 5 x5 = 12 · 3.75 + 2 = 3.875 6 x6 = 12 · 3.875 + 2 = 3.9375 I numeri 2, 3, 3.5, 3.75, 3.875, 3.9375 sembrano avvicinarsi a ξ = 4. Difatti, per valori crescenti di n, per xn che tende a ξ , si ha, da 1 1 una parte ξ = limn→∞ xn+1 = limn→∞ xn + 2 = ξ + 2 da cui, 2 2 1 ξ = ξ + 2, cioè ξ = 4. 2
Figura 5.4: Punto fisso di g ( x) = 1/2 x + 2.
Scopriamo quindi che se l’iterazione x n+1 = g ( xn ) converge a ξ , ξ
è punto fisso per la funzione g . Da un punto di vista geometrico, i grafici di y = x (bisettrice del primo e terzo quadrante) e di y = g ( x) si intersecano in ξ . Tuttavia, non sempre questo schema iterativo, applicato a funzioni
che ammettono uno o più punti fissi, converge. Vediamo con un esempio. Esempio Sia g ( x) = x 2 . Analiticamente troviamo due punti fissi per questa funzione. Dovendo essere ξ = ξ 2 , si ricava ξ 2 ξ = 0, vale a dire ξ ( ξ 1) = 0: quindi ξ = 0 e ξ = 1 sono i due punti fissi per questa
−
−
funzione. Partendo da x0 = 0.5, si ha la successione di valori 0.25, 0.0625, 0.00390625, rapidamente il metodo converge a ξ = 0 Se si prende come punto iniziale un valore x 0 ∈] − 1, 1[, la successione converge a ξ = 0. Le sole successioni che convergono a ξ = 1 sono le ovvie successioni generate da x 0 = ±1. Se si prende come punto iniziale x 0 tale che | x0 | > 1 allora lo schema iterativo x n+1 = x 2n diverge a + ∞. Partendo da x 0 = 2, si ha 4, 16, 256, 65536...
Questo esempio è significativo per capire come ciascun punto fisso ξ abbia un proprio bacino di attrazione : se si prende x0 in questo bacino,
Figura 5.5: Punti fissi di g ( x ) = x 2 .
54 annamaria mazzia
allora i valori x n tendono a ξ . Un punto fisso può dunque attirare o respingere i valori x n prodotti dallo schema iterativo. Prima di passare a studiare quando lo schema di punto fisso converge, ricordiamo che una funzione può ammettere più di un punto fisso, ammetterne uno solo o non ammetterne affatto. Ci sono due teoremi (3.6.4 e 3 .6.5) che ci dicono quando una funzione può ammettere punti fissi. Il primo assicura l’esistenza di almeno un punto fisso (ciò vuol dire che vi possono essere più punti fissi) quando la funzione g , definita e continua in [ a , b], è tale che a g ( x) b per ogni x [ a, b]. Il secondo teorema aggiunge, a queste ipotesi, quelle m < 1 per ogni x [ a, b]: in che g sia di classe C 1 e, inoltre, g ( x)
∈
≤
|
|≤
≤
∈
tal caso esiste un unico punto fisso. Possiamo ora provare un teorema di convergenza per lo schema iterativo del punto fisso. Teorema 5 .3.1 A partire da un punto iniziale x0 , lo schema iterativo x n+1 = g( xn ) converge al punto fisso ξ di g se g ( x) < 1 in un intorno di ξ .
|
È importante osservare che, data una funzione che ammette punto fisso, le ipotesi dei due teoremi 3.6.4 e 3.6.5 possono essere rilassate dall’intervallo [ a , b ] ad un intorno del punto fisso.
|
Dimostrazione. Dalle relazioni ξ = g ( ξ )
xn+1 = g ( xn )
sottraendo membro a membro e, applicando il teorema del Valore Medio 3 .6.2 (con ξ n un opportuno punto del segmento che congiunge ξ a x n ), otteniamo: ξ
− xn+1 = g (ξ ) − g(xn ) = g (ξ n )(ξ − xn )
Possiamo scrivere questa relazione per n = 0, 1, . . . ottenendo
− x1 = g (ξ 0 )(ξ − x0 ) ξ − x2 = g (ξ 1 )( ξ − x1 ) ξ − x3 = g (ξ 2 )( ξ − x2 ) ξ
.. .. . = . ξ − xn = g (ξ n−1 )( ξ − xn−1 ) Moltiplicando, ora, membro a membro e prendendo i valori assoluti,
abbiamo:
|ξ − x1 | · |ξ − x2 | · . . . · |ξ − xn | = | g (ξ 0 )| · | g (ξ 1 )| · | g (ξ 2 )| · . . . · | g (ξ n−1 )| · |ξ − x0 | · |ξ − x1 | · . . . · |ξ − xn−1 | La relazione appena trovata può essere semplificata, dividendo ambo i membri per |ξ − x1 | · |ξ − x2 | · . . . · |ξ − xn−1 | ottenendo:
|ξ − xn | = | g (ξ 0 )| · | g (ξ 1 )| · | g (ξ 2 )| · · . . . · | g (ξ n−1 )|| ξ − x0 | Assumiamo, ora che | g (xi )| ≤ m per i = 0, 1, . . . , n − 1. Abbiamo
dunque una relazione che lega l’errore assoluto al passo n con l’errore
assoluto iniziale.
|ξ − xn | ≤ mn |ξ − x0 |
appunti di calcolo numerico
55
Perchè il metodo converga, l’errore deve tendere a zero per n che tende all’infinito. Se m < 1 è assicurata la convergenza (quindi, se in un intorno del punto fisso, la derivata prima è minore di 1 , lo schema
converge). Se invece m > 1 in un intorno del punto fisso, lo schema non può convergere al punto fisso. Se vale m = 1 nulla si può dire a priori, ma bisogna vedere caso per caso cosa succede nell’intorno del punto fisso. Negli esempi precedenti: g( x) g ( x ) cos ( x) − sin ( x) 1 1 x + 2 2 2 2x x2
Nel primo caso (con g (x ) = cos (x )) si ha − sin (0.7390851332) = −0.673612, perciò in un intorno del punto fisso la derivata è minore di 1 in valore assoluto e si ha convergenza. 1 1 Nell’esempio in cui g (x ) = x + 2, risulta g ( x) = qualunque 2 2 sia x : si ha convergenza. Nel terzo caso ( g ( x ) = x 2 ), g ( x) = 2 x da cui g (0) = 0 e g (1) = 2 . In un intorno del primo punto fisso, vale m < 1, in un intorno del secondo punto fisso m > 1 e non si potrà mai avere convergenza ad esso. Il bacino di attrazione si ha quindi se vale m < 1. Da un punto di vista grafico, le iterazioni dello schema di punto fisso si possono vedere sotto forma di ragnatela. Le iterazioni, infatti, si muovono avanti e indietro tra il grafico della y = g ( x) e il grafico della bisettrice y = x . L’esempio con g ( x) = cos ( x), è rappresentato in Figura 5.6 : partendo da (x0 , x0 ) sulla retta y = x, applicando l’algoritmo si ha x 1 = g ( x0 ). Perciò:
Figura 5.6: Il metodo di punto fisso con
g( x) = cos (x ).
Figura 5.7: Il metodo di punto fisso con e
1 g( x) = x + 2 2
da ( x0 , x0 ) si va su o giù fino a raggiungere ( x0 , x1 ) sulla curva g; da ( x0 , x1 ) si arriva a ( x1 , x1 ) sulla bisettrice y = x . Questi due passi vengono ripetuti per tutte le altre iterazioni. Da x1 si arriva sulla curva a g( x1 ). Ora l’altezza è x2 . Da qui si va sulla bisettrice al punto ( x2 , x2 ). E così via. Lo scopo delle iterazioni, infatti, è di arrivare al punto (ξ , ξ ) ≈ 0.7390851332 che è il punto di intersezione tra il grafico di g e la bisettrice y = x. Osserviamo che, per questo esempio, i valori della successione si avvicinano a ξ muovendosi a destra e a sinistra rispetto ad esso. Si parla di convergenza oscillante. 1 Nell’esempio con g ( x) = x + 2, si devono intersecare due linee 2 rette. Notiamo, anche dalla Figura 5 .7, che i valori delle iterazioni si trovano tutti da un lato rispetto al punto fisso: si parla di convergenza
monotona. In generale, quando 0
≤ g (x)
1 in un intorno del punto fisso, si ha convergenza monotona. Se, invece, −1 < g ( x) < 0 in un intorno del punto fisso, si ha convergenza oscillante. <
Figura 5.8: Il metodo di punto fisso: esempio con g ( x ) = x 2 . Si noti la convergenza monotona a ξ = 0 (in alto) e la divergenza monotona da ξ = 1 (in basso)
56 annamaria mazzia
Analogamente, in Figura 5 .8, si possono ritrovare le conclusioni già viste dell’esempio in cui g (x ) = x 2 : si ha convergenza monotona verso ξ = 0 partendo da un punto iniziale in valore assoluto minore di uno, e divergenza monotona a infinito, partendo da | x0 | > 1. Esempio
Consideriamo ora g (x ) = x − sin (x ) nell’intervallo [ 0, 2π ]. Data la periodicità della funzione seno, g ammette più di un punto fisso. Infatti da ξ = ξ − sin (ξ ) si ha 0 = sin (ξ ) da cui ξ = 0, ξ = π e ξ = 2 π . Studiamo ora la derivata prima g (x ) = 1 − cos ( x). Si ha g (0) = 1 − 1 = 0, g (π ) = 1 − (−1) = 2 e g (2π ) = 1 − 1 = 0. Da queste informazioni, deduciamo che qualunque sia il punto iniziale x 0 la successione generata dallo schema del punto fisso non potrà mai convergere a π , come si vede anche dalla Figura 5 .9.
Nel caso in cui il metodo di punto fisso converge, si possono ricavare maggiorazioni per l’errore che si commette approssimando ξ
mediante x n . Vale infatti la disuguaglianza |ξ − xn | ≤ 1 −m m |xn − xn−1 |
Figura 5.9: Il metodo di punto fisso: esempio con g ( x) = x sin ( x ). ξ = 0 e ξ = 2 π sono punti fissi attrattivi, al contrario di ξ = π in cui g (ξ ) = g (π ) = 2
−
(5.1)
dove m , come prima, è una maggiorazione di | g ( x)|. Dimostrazione della relazione precedente. Proviamo questo risultato, scrivendo l’errore all’iterazione n come ξ − xn = g (ξ ) − g(xn−1 ) Applicando il teorema del valor medio e considerando, come prima,
| g (x)| ≤ m < 1 in un intorno del punto fisso, si ha: |ξ − xn | ≤ m|ξ − xn−1 | (5.2) Possiamo scrivere ξ − xn−1 nel modo seguente aggiungendo e sottraendo x n :
− xn−1 = ξ − xn + xn − xn−1 ξ − xn−1 = g (ξ ) − g ( xn−1 ) + xn − xn−1 |ξ − xn−1 | ≤ m|ξ − xn−1 | + |xn − xn−1 | (1 − m)|ξ − xn−1 | ≤ | xn − xn−1 | |ξ − xn−1 | ≤ 1 −1 m |xn − xn−1 | ξ
Andando a sostituire questa maggiorazione nella disuguaglianza (5.2),
troviamo il risultato espresso nell’equazione ( 5.1). Errore e scarto. La disuguaglianza (5.1) fornisce una maggiorazione dell’errore al passo n tramite il valore assoluto della differenza tra due iterazioni successive | xn − xn−1 |. Quest’ultima quantità prende il nome di scarto e viene indicata con il simbolo d n . Generalmente, per vedere se il metodo di punto fisso converge al punto fisso entro una certa tolleranza prestabilita, il controllo da fare
è proprio sullo scarto d n . Sfruttiamo questo fatto per vedere come
dn = xn xn−1 rappresenta lo scarto all’iterazione n .
| −
|
appunti di calcolo numerico
57
implementare l’algoritmo dello schema di punto fisso (sotto forma di
pseudo-codice): Dati di input: x 0 , tol , itmax Dati di output: x n soluzione approssimata o messaggio di
fallimento 1 n ←− 0 contatore delle iterazioni; 2 d n ←− 2tol (una quantità iniziale > tol ) ; 3 Fintantochè n ≤ itmax e d n > tol 4 incrementa n di 1; 5 applicare l’algoritmo di punto fisso x n = g ( xn−1 ) ; 6 aggiorna d n ; 7 Fine-Fintantochè 8 9
Se dn
≤ tol allora
xn è la soluzione approssimata
10 altrimenti 11 12
n > itmax ; il metodo è fallito dopo itmax iterazioni ;
13 Fine-Se
5.4
Il Metodo di N ewton-Raphson Il metodo di Newton-Raphson è uno dei metodi più potenti e più famosi per risolvere equazioni non lineari. Ci sono diversi approcci per introdurre questo metodo – tra questi c’è anche quello di vedere il metodo di Newton-Raphson come un particolare schema di punto
fisso, come vedremo in seguito. Supponiamo ora che la derivata prima e seconda di f esistano e siano continue e assumiamo che la derivata prima f sia valutabile con sufficiente facilità. Lo schema di Newton-Raphson è uno schema iterativo che produce
una successione di approssimazioni x 0 , x 1 , . . . , xn della radice della funzione f . Sia x n l’iterata corrente. Applicando la formula di Taylor di centro xn si ha: f (x ) = f (xn ) + f ( xn )( x − xn ) + f (ξ x )( x − xn )2 /2
dove ξ x è un punto (che non conosciamo) compreso tra x e x n . Sia x = ξ , dove ξ è radice di f , f (ξ ) = 0. Se f fosse lineare, avremmo f ≡ 0 e quindi potremmo trovare la radice risolvendo direttamente 0 = f (ξ ) = f ( xn ) + f (xn )( ξ − xn ) Supponendo f ( xn ) = 0, otterremmo, con semplici passaggi, ξ = x n
− f f ((xxnn))
In questo caso, partendo da un qualunque valore iniziale x 0 , in una sola iterazione otterremo il valore della radice ξ .
Il metodo fu descritto da Isaac Newton in due suoi scritti del 1669 e del 1671, anche se era riferito solo a polinomi (in particolare a x 3 2x 5 = 0). Il metodo di Newton fu pubblicato per la prima volta nel 1685. Nel 1690 Joseph Raphson ne pubblicò una descrizione semplificata in termini di approssimazioni successive x n piuttosto che di sequenze di polinomi. Fu solo nel 1740 che Thomas Simpson descrisse il metodo di Newton come un metodo iterativo per risolvere equazioni non lineari (e non solo polinomi) e diede una versione generalizzata per sistemi
− −
di due equazioni.
Isaac Newton (1643-1727), inglese, fu fisico, matematico, astronomo, alchimista, inventore, filosofo naturalista. È visto come uno dei più grandi scienzati nella storia dell’umanità.
Su Joseph Raphson (1648-1715) non si hanno molti dettagli. Pare che Newton stesso gli permettesse di vedere e studiare i suoi scritti matematici. Il suo lavoro del 1690 "Analysis aequationum universalis" gli valse l’ingresso nella Royal Society, nel 1691 benchè fosse uno studente (si laureò nel 1692) piuttosto anziano (aveva 43 anni).
Osserviamo che
y( x) = f ( xn ) + f ( xn )( x − xn ) altro non è che l’equazione della retta tangente alla f nel punto (x n , f ( x n )).
58 annamaria mazzia
Per una funzione non lineare, il discorso da fare è molto simile. La nuova approssimazione x n+1 vogliamo che sia uguale al valore xn più una certa quantità h che ci permetta di arrivare alla soluzione desiderata. Applicando la formula di Taylor di centro x n , deve essere f (xn+1 ) = f (xn + h) = f (xn ) + f ( xn )h + f (ξ h )h2 /2 Vogliamo che sia f ( xn+1 ) = 0 , da cui, trascurando il termine in h 2 e considerando f ( xn ) = 0, ricaviamo
h =
− f f ((xxnn))
Utilizziamo questo valore di h per la nuova approssimazione xn+1 = x n + h ottenendo la formula f ( x ) xn+1 = x n − n , f ( xn )
n = 0, 1, 2, . . .
Trascurando il termine f (ξ h )h2 /2 nella formula di Taylor, abbiamo una linearizzazione della f in un intorno di x n : approssimiamo, cioè la funzione f con la retta tangente a ( xn , f ( xn )) . Se ci troviamo vicino ad una radice della f , quindi, ci aspettiamo che il procedimento che stiamo applicando ci avvicini molto rapidamente alla radice stessa!
( 5.3)
L’interpretazione geometrica del metodo di Newton è che x n+1 è l’intercetta, sull’asse delle x , della tangente della f a x n (vedi figura 5.10). Figura 5.10: Il metodo di Newton-Raphson applicato alla funzione f ( x ) = ( x/2 )2 sin ( x ) con x0 = 1.3
−
Lo schema di Newton-Raphson si può vedere come un caso particolare dello schema del punto fisso applicato alla funzione g (x ) = x − f ( x)/ f ( x). Perchè lo schema del punto fisso converga, deve essere | g (x )| < 1 in un intorno di ξ . Nel caso specifico abbiamo:
2 | g (x)| = |1 − f (x) f − ( f x()x2) f (x) | = | f ( f x)( f x)(2x) | Supponendo f ( ξ ) = 0 (che è il caso in cui la radice non è multipla), si ha g (ξ ) = 0, poichè al numeratore f (ξ ) = 0 (essendo ξ radice della f ). Per continuità, allora, vale g ( x) < 1 in un intorno di ξ .
|
|
|
|
appunti di calcolo numerico
59
Pertanto il metodo di Newton-Raphson è generalmente convergente. Per vedere come si riduce l’errore via via che le approssimazioni si avvicinano a ξ , consideriamo l’errore cambiato di segno n , per cui xn = ξ + n . Sostituendo in ( 5.3) abbiamo n+1 + ξ = n + ξ n+1 = n
Cosa vuol dire quel generalmente? Vuol dire: quasi sempre, tranne alcuni casi particolari (che vedremo in seguito).
− f f ((ξ ξ ++ nn))
− f f ((ξ ξ ++ nn))
Applicando la formula polinomiale di Taylor sia su f sia su f di centro ξ , si ha: n+1 = n
2
+ . . . − f (ξ ) + f (nξ f ) (+ξ ) +n f n( f ξ ) (+ξ .)/2 ..
Poichè f (ξ ) = 0, raccogliendo i termini si ricava: n f (ξ ) + 2n f ( ξ ) n f ( ξ ) 2n f (ξ ) /2 + . . . 2n f ( ξ )/2 + . . . = n+1 = f (ξ ) + n f (ξ ) + . . . f (ξ ) + n f (ξ ) + . . .
−
−
Trascurando i termini n f (ξ ) + . . . al denominatore e le potenze maggiori o uguali a 3n al numeratore si trova: f (ξ ) 2 f (ξ ) 2 . n+1 = = A n ponendo A = 2 f (ξ ) n 2 f (ξ ) L’ultima relazione che abbiamo ottenuto ci dice che l’errore al passo n + 1 è proporzionale, secondo il fattore A , al quadrato dell’errore al
passo precedente. Si parla di convergenza quadratica. Nel caso in cui ξ sia una radice multipla, allora f (ξ ) = 0 e A = ∞: se il metodo converge, la convergenza non sarà più quadratica ma avremo una convergenza di tipo lineare, come vedremo meglio in seguito. Se in ξ vi è un punto di flesso non orizzontale, per cui f (ξ ) = 0, f (ξ ) = 0, f (ξ ) = 0 , allora A = 0 e ci aspettiamo una convergenza superiore a quella quadratica. 5.5
Convergenza di un metodo iterativo Quando si parla di un metodo iterativo, ci sono due cose fondamentali da vedere: se il metodo converge alla soluzione, in che modo si riduce
l’errore ad ogni passo e secondo quale fattore? Si parla di ordine di convergenze e di fattore di convergenza. Vediamo la definizione più usata. Definizione 5 .5.1 Un metodo ha ordine di convergenza p se si possono
definire due costanti p ≥ 1 e M > 0 tali che
lim
n →∞
|xn+1 − ξ | = M |xn − ξ | p
La costante M prende il nome di costante asintotica dell’errore o fattore di convergenza.
Se partiamo da un errore iniziale dell’ordine di 10 −2 , al passo successivo l’errore è proporzionale a 10−4 e poi a 10−8 fino a 10−16 in tre sole iterazioni. Generalmente, quindi, il numero delle cifre significative raddoppia ad ogni passo del metodo.
60 annamaria mazzia
In maniera alternativa, un metodo iterativo si dice: linearmente convergente se esiste
Nel caso del metodo di Newton-Raphson, generalmente vale p = 2 e la costante asintotica dell’errore è quella che abbiamo f (ξ ) definito come A presa in valore assoluto, cioè M = . 2 f (ξ )
una costante M
1 tale che, per n
|xn+1 − ξ | ≤ M |xn − ξ | a convergenza quadratica se esiste una costante M tale che, per n
Nel metodo del punto fisso, nell’ipotesi in cui g (ξ ) = 0, la convergenza è lineare. Infatti, considerando l’errore cambiato di segno, la relazione xn+1 = g(xn ) si può scrivere, in modo equivalente, come
sufficientemente grande, vale
|xn+1 − ξ | ≤ M |xn − ξ |2 a convergenza superlineare se esiste 0 una successione di costanti Mn tale che, per n sufficientemente grande,
→
vale
ξ + n+1 = g (ξ + n )
|xn+1 − ξ | ≤ M n |xn − ξ |.
e, applicando la formula (polinomiale) di Taylor si ha ξ + n+1 = g (ξ ) + n g (ξ ) + . . . ξ + n+1 = ξ + n g (ξ ) + . . . n+1 = n g (ξ ) + . . . e, al limite per n → ∞ n+1 = g (ξ ) n La costante asintotica per lo schema di punto fisso, nel caso generale vale, dunque, M = | g (ξ )|. Se invece | g ( ξ )| = 0 , il metodo converge sempre ma con ordine di convergenza maggiore di uno.
Ricordiamo che, se il metodo di punto fisso converge linearmente, deve essere g (ξ ) < 1. Infatti, se un metodo è lineare, affinchè l’errore al passo n + 1 decresca di M rispetto all’errore al passo n, deve essere
Il metodo delle bisezioni può essere visto come un metodo lineare,
Per esercizio, si ricavi ordine di convergenza e costante asintotica se g (ξ ) = 0 e g (ξ ) == 0.
1 con M = (considerando che, ad ogni passo, si riduce della metà 2 l’intervallo in cui viene cercata l’approssimazione della radice).
5.6
<
sufficientemente grande, vale
|
|
M < 1.
Errore e scarto nel metodo di Newton-Raphson Come per lo schema di punto fisso, quando implementiamo il metodo di Newton-Raphson, non potendo misurare l’errore n (la radice ξ è incognita), usiamo lo scarto dn come misura della bontà dell’approssimazione della radice. Esempio Consideriamo l’equazione f ( x ) = 2 x cos ( x) + 1 = 0 che ammette come unica radice ξ = 0. Poichè f ( x ) = 2 + sin ( x), il metodo di Newton-Raphson diventa:
−
xn+1 = x n −
2 xn − cos ( xn ) + 1 2 + sin (xn )
Partendo da x 0 = 0.5 e richiedendo una tolleranza pari a 10 −10 nei
risultati (interrompiamo l’algoritmo quando d n < 10−10 ), si ha:
Figura 5.11: Radice della funzione f ( x) = 2x cos ( x) + 1.
−
appunti di calcolo numerico
n 0 1 2 3 4 5
xn 0.5 0.4730746270E-01 0.5462695134E-03 0.7458221874E-07 0.1395426403E-14 0.7647622253E-17
61
dn 0.4526925E+00 0.4676119E-01 0.5461949E-03 0.7458222E-07 0.1387779E-14
I valori generati dall’algoritmo tendono a ξ = 0. Considerando che f ( x) = cos ( x) possiamo valutare la costante f (ξ )| | | cos (ξ )| = 1 = 0.25 asintotica M = = 2| f (ξ )| 2(|2 + sin (ξ )|) 4
Da un punto di vista teorico, considerando la radice ξ e l’approssimazione xn e applicando il teorema del valor medio, possiamo scrivere f (ξ ) − f (xn ) = f (ξ n )( ξ − xn ) dove ξ n è un punto, che non conosciamo, compreso tra ξ e x n . Per x n vicino a ξ possiamo considerare ξ n xn , da cui ricaviamo (essendo f (ξ ) = 0):
≈
− f (xn ) ≈ f (xn )(ξ − xn ) Sostituendo questa espressione nell’iterazione di Newton-Raphson si
ha: f ( x ) xn+1 = x n − n ≈ xn + ( ξ − xn ) f ( xn )
vale a dire xn+1 − xn ≈ ξ − xn cioè
Nell’ esempio appena visto
dn+1 ≈ n .
Ma in condizioni di convergenza, d n+1 la maggiorazione n < dn .
<
dn da cui, per l’errore, vale
Perciò gli scarti sono molto vicini agli errori e possono essere utilizzati sia per controllare il numero di iterazioni da effettuare per approssimare la radice entro una certa tolleranza sia per approssimare
M applicando la formula M
≈ ddn+2 1 .
d2
(d 1 )2
d3
(d 2 )2
= 0.2282 = 0.2498
d4 = 0.2500 (d 3 )2 d5 = 0.2495 (d 4 )2 Abbiamo una stima di M usando gli scarti.
n
Una volta stimato M , si può anche avere una stima più accurata dell’errore all’ultimo passo (cioè al passo n + 1). Da una parte, infatti, d vale en+1 ≈ dn+2 , dall’altra M ≈ n+2 2 . Se siamo arrivati fino ( d n +1 ) all’iterazione n + 1 non abbiamo lo scarto d n+2 ma, avendo stimato M, possiamo approssimare e n+1 tramite la formula e n+1 ≈ dn+2 ≈ M (dn+1 )2 . Esempio
Consideriamo l’equazione f (x ) = 0 con f ( x) = x3 + x. Si vede subito che l’unica radice reale di f è ξ = 0. Dal momento che f (x ) = 3x2 + 1 e f ( x) = 6x, risulta che f (0) = 1 = 0 mentre
Figura 5.12: Radice della funzione f ( x) = x3 + x.
62 annamaria mazzia
f (0) = 0: la radice ξ = 0 è un punto di flesso non orizzontale. Questo è un caso particolare in cui il metodo di Newton-Raphson converge non con ordine p = 2 bensì con ordine di convergenza cubico, p = 3. Applichiamo il metodo di Newton-Raphson, partendo da x 0 = 5 e arrestando le iterazioni quando lo scarto diventa minore di 10 −10 . Vengono eseguite 9 iterazioni e, per gli scarti, abbiamo: n 1 2 3 4 5 6 7 8 9
5.
dn 1.7105e+00 1.1620e+00 8.0644e-01 5.8158e-01 4.3318e-01 2.6142e-01 4.4651e-02 1.7912e-04 1.1494e-11
Proviamo a vedere, sperimentalmente, quale può essere l’ordine di convergenza e la costante asintotica. Mettiamo in tabella i rapporti dn dn (convergenza lineare?) (convergenza quadratica?) e d n −1 ( d n −1 ) 2 dn (convergenza cubica?). Sappiamo già che non può esserci ( d n −1 ) 3 convergenza quadratica. Per i vari rapporti degli scarti, si ha: n 2 3 4 5 6 7 8 9
dn d n− 1 6.7934e-01 6.9399e-01 7.2117e-01 7.4484e-01 6.0348e-01 1.7081e-01 4.0115e-03 6.4168e-08
dn
dn
( d n −1 ) 2
( d n −1 ) 3
3.9715e-01 5.9723e-01 8.9426e-01 1.2807e+00 1.3931e+00 6.5339e-01 8.9840e-02 3.5824e-04
dn
( d n −1 ) 3
2.3218e-01 5.1395e-01 1.1089e+00 2.2021e+00 3.2160e+00 2.4994e+00 2.0120e+00 2.0000e+00
Vediamo un esempio che ci permette di capire meglio il significato di metodo generalmente convergente (e che il metodo di Newton-Raphson
non converge proprio sempre!).
Attenzione: in questo esempio, una volta accertata che la convergenza non è quadratica, non potremmo neanche pensare ad una convergenza di tipo lineare perchè, se avese simo lim n→+∞ n = M = 0, avrem-
zero (ciò che invece abbiamo).
tendono a 2: ciò dice che la convergenza
Ancora esempi sul metodo di Newton-Raphson
ulteriormente sui risultati!
è cubica e che la costante asintotica vale 2.
5.7
Abbiamo detto che il metodo di NewtonRaphson ha, in genere, ordine 2. Ma se noi, ipotizzando ordine 2, troviamo una costante asintotica M nulla o che tende a zero, deve suonare un campanello di allarme! La costante asintotica di un metodo iterativo non può mai valere zero. Quindi l’ordine non è quello che ci aspettiamo ma bisogna indagare
en− 1 en e mo limn→+∞ = lim n→+∞ n · 2 e e ( n− 1 ) n −1 1 1 = M limn→+∞ = +∞ e non e n −1 e n− 1
I rapporti che indicano convergenza lineare e quadratica tendono a zero, mentre i rapporti
Figura 5.13: Grafico di convergenza del metodo di Newton-Raphson applicato alla funzione f ( x) = x3 + x , partendo da x 0 =
Allo stesso risultato si arriva anche per via teorica (sapendo qual è la radice), applicando lo sviluppo di Taylor alla formula dell’errore dell’algoritmo di Newton-Raphson. e considerando che la radice è un punto di flesso non orizzontale.
appunti di calcolo numerico
Esempio
√ −√ −
per x ≥ 0 . x per x < 0 La radice di questa funzione è ξ = 0. 1 √ Per la derivata prima, si ha f (x ) = 2 1x √ 2 −x Se partiamo da x 0 > 0 abbiamo Si consideri f (x ) =
√ x0 x1 = x 0 − 1 √ 2 x0
x
= x 0
per x ≥ 0 per x < 0
. Figura 5.14: Esempio in cui il metodo di Newton-Raphson oscilla tra due valori.
− 2x0 = −x0
Se partiamo da x 0 < 0 abbiamo
√ −x − 0 x1 = x 0 − = x 0 + 2(− x0 ) = − x0 . 1 √ 2 − x0 Il metodo di Newton applicato alla funzione f , diventa quindi: xn+1 =
− xn ,
n = 0,1,2,. . .
Qualunque sia il valore iniziale x0 = 0 , si ha x1 =
−x0, x2 = −x1 = x 0
... i valori generati dal metodo di Newton-Raphsono si alternano tra x0 e − x0 e non si avrà mai convergenza alla radice ξ = 0.
Da un punto di vista pratico occorre prestare molta attenzione anche alla scelta del punto iniziale per il metodo di Newton-Raphson. Dal momento che la formula richiede una divisione per f ( xn ), occorre
evitare di prendere un punto iniziale in cui la f abbia una tangente quasi orizzontale (e quindi il corrispondente valore di f sia un valore vicino allo zero). In tal caso, infatti, ci si può allontanare dalla radice
e il metodo può non convergere o convergerà molto lentamente. Esempio
Consideriamo f (x ) = x 5 − 6, per la quale f ( x) = 5 x4 . Se partiamo da un punto iniziale prossimo allo zero, poichè la tangente alla f è quasi orizzontale, non si riesce ad avere convergenza se non dopo molte iterazioni: partendo da x0 = 0.01 e richiedendo una tolleranza 10 −8 , sono necessarie 88 iterazioni per arrivare a ξ = 1.430969081115725849 . Vediamo in tabella, come cambia il numero delle iterazioni al variare di x 0 : x0 iterazioni
0.05 59
63
0 .1 46
0 .5 18
0 .8 10
1 .0 7
1 .4 4
1 .5 4
2. 6
3. 8
10. 14
Figura 5.15: La funzione f ( x ) = x 5
20. 17
100. 24
−6
64 annamaria mazzia
5.8
Il metodo delle secanti o Regula Falsi La conoscenza della derivata prima della f per applicare il metodo di Newton-Raphson potrebbe essere semplice ma a volte potrebbe rivelarsi un’operazione molto costosa e alquanto complicata. Il metodo delle secanti è una variante del metodo di NewtonRaphson dove, al posto della derivata prima, si considera una sua approssimazione. Scriviamo la formula ricorsiva f ( xn ) xn+1 = x n − Cn Per C n = f ( xn ) abbiamo la formula di Newton-Raphson, che possiamo anche chiamare della tangente variabile perchè è il coefficiente angolare della retta tangente a ( xn , f ( xn )) che interseca l’asse delle x in x n+1 . Ci possono essere altre scelte per Cn : Cn = f ( x0 ): il valore di C n è costante e dà vita al metodo della tangente fissa. f ( x1 ) − f (x0 ) : abbiamo sempre una costante che approssix1 − x0 ma la derivata f (x0 ) utilizzando i valori di x 1 e x 0 . Lo schema è detto della secante fissa. f ( xn ) − f ( xn−1 ) . La derivata f (xn ) è approssimata utiCn = x n − x n −1 lizzando il rapporto incrementale della f valutata in xn e xn−1 . Abbiamo il metodo delle secante variabile, che chiameremo nel seguito anche metodo della Regula Falsi. Cn =
In forma estesa, l’iterazione n + 1 della Regula Falsi si scrive come:
xn+1 = x n −
f ( xn )( xn − xn−1 ) f ( xn ) − f ( xn−1 )
Attenzione! In letteratura viene descritto un altro metodo (simile ma non lo stesso) con il nome della Regula Falsi o Falsa Posizione che genera i valori x n+1 in modo che la radice ξ sia sempre compresa tra le iterazioni successive.
Notiamo che, per innescare il metodo occorrono due valori iniziali,
x0 e x 1 . Ma è richiesta solo la valutazione della funzione f a ciascun passo (nessuna conoscenza della derivata prima). Da un punto di vista geometrico, nel metodo delle secanti il valore
xn+1 è dato dall’intercetta sull’asse delle x della retta passante per xn , f ( xn ) e x n−1 , f ( xn−1 ). Per quanto riguarda l’ordine di convergenza si può dimostrare che
si ha convergenza superlineare poichè vale la relazione p p n+1 = M p + 1 n
√
1 + 5 f (ξ ) dove p = è la costante asitontica del = 1.618 e M = 2 2 f (ξ ) metodo di Newton-Raphson, da cui n+1 = M 0.618 1.618 n
Per quanto riguarda l’accumulo degli errori di arrotondamento, conviene utilizzare la formula così come è stata scritta in quanto è più "sicura" rispetto alla forma compatta in cui vengono raccolti i termini, data da
xn+1 =
xn−1 f ( xn ) − xn f ( xn−1 ) f ( xn ) − f ( xn−1 )
in quanto in quest’ultima, si può avere il fenomeno della cancellazione numerica per xn xn−1 e f ( xn ) f ( xn−1 ) > 0.
≈
Il valore p = 1.618 è la cosidetta sezione aurea, un numero molto importante nelle arti e nella matematica (e il nome aureo deriva da alcune sue proprietà che hanno da sempre affascinato l’uomo). Il valore di p rappresenta il punto fisso della funzione g ( x) = 1 + x.
√
appunti di calcolo numerico
65
Figura 5.16: Il metodo della Regula Falsi applicato alla funzione f ( x ) = ( x/2 )2 sin ( x ) con x0 = 1.3 e x1 = 1.35
−
5.9
Complessità computazionale di uno schema Un altro elemento da considerare per valutare l’efficienza numerica di uno schema iterativo è la sua complessità computazionale. Un metodo, infatti, può avere un elevato ordine di convergenza ma avere anche un costo computazionale molto elevato. Viceversa, un metodo può avere un basso ordine di convergenza ma essere anche semplice
computazionalmente e, quindi, molto vantaggioso da questo punto di vista. Si definisce indice di efficienza E dello schema iterativo la quantità E = p 1/s
dove s indica il numero delle funzioni coinvolte ad ogni iterazione (per esempio: solo f , oppure f e f , e così via), mentre p è l’ordine di convergenza del metodo. Sebbene il metodo di Newton-Raphson abbia ordine di convergenza più elevato della Regula Falsi, quest’ultimo è computazionalmente
più efficiente. Si ha infatti Metodo p Newton-Raphson 2 Regula Falsi 1.618 5.10
s
E √ 2 ≈ 1.414 2 1 1.618
Confronto tra Newton-Raphson e Regula Falsi
Esempio
Consideriamo la funzione f ( x) = 0 con f (x ) = ( x/2)2 − sin ( x). La derivata prima è f (x ) = ( x/2) − cos ( x) Consideriamo come x0 = 1.3 per entrambi i metodi e x 1 = 1.35 per la Regula Falsi. Come Figura 5.17: Radici della funzione f ( x ) = ( x /2)2 sin ( x )
−
66 annamaria mazzia
criterio di arresto, consideriamo una tolleranza tol = 1.e − 8, cioè andremo avanti con le iterazioni fino a quando troveremo che lo scarto dn = | xn − xn−1 | sarà minore di tol . Otteniamo i seguenti risultati per il metodo di Newton-Raphson n 0 1 2 3 4 5 6
xn 1.3 2.714526871831 2.084760792766 1.944113685369 1.933811265085 1.933753764621 1.933753762827
f ( xn ) -5.410581854E-01 1.427962127E+00 2.157545986E-01 1.377189572E-02 7.60156095E-05 2.37200355E-09 -1.00668172E-16
f ( xn ) 0.382501171 2.26744846 1.53401376 1.33676314 1.32199993 1.32191743
dn /d2n−1
dn 1.41452687E+00 6.29766079E-01 1.40647107E-01 1.03024203E-02 5.75004640E-05 1.79436599E-09
0.314743565 0.354627390 0.520808008 0.541742396 0.542710632
Per la Regula Falsi si ha: n
xn
f ( xn )
0 1 2 3 4 5 6 7 8 9
1.3 1.35 2.590702853065 1.735341043061 1.879309845941 1.940687248331 1.933542654410 1.933752971771 1.933753762918 1.933753762827
-5.41058185E-01 -5.20098358E-01 1.15448972E+00 -2.33640901E-01 -6.98346071E-02 9.19996444E-03 -2.79035921E-03 -1.04570967E-06 1.19824825E-10 -1.00668172E-16
f ( xn ) − f ( xn−1 ) x n − x n −1 0.419196552 1.34970922 1.62285784 1.13779020 1.28768192 1.32673746 1.32176540 1.32191686
dn /d1.618 n−1
dn
1.24070285E+00 8.55361810E-01 1.43968803E-01 6.13774024E-02 7.14459392E-03 2.10317362E-04 7.91146198E-07 9.06448250E-11
0.603386215 0.185374473 1.412310765 0.653100215 0.623935239 0.704441455 0.676026603
Attraverso gli scarti, abbiamo fatto una stima della costante asintotica dell’errore, considerando che, al limite per k → ∞, x n → ξ . Le ultime colonne delle tabelle, infatti, valutano i rapporti dn /d2n−1 e dn /d1.618 n−1 . Diamo un’ulteriore stima di tali costanti facendo uso della definizione teorica e considerando ξ ≈ xn . | f (ξ )| Per il metodo di Newton-Raphson dobbiamo calcolare M = 2| f (ξ )| 0.618 mentre per la Regula Falsi dobbiamo considerare il valore M . Poichè f ( x) = 1/2 + sin (x ), abbiamo, per ξ ≈ x6 (di NewtonRaphson) o, equivalentemente per ξ ≈ x9 (della Regula Falsi), in pratica ξ ≈ 1.933753762827, f (ξ ) = 1.32191743 e f (ξ ) = 1.4348509. Otteniamo quindi: M ≈ 0.542715784 e M 0.618 ≈ 0.685434221
5.11
Metodo di Newton-Raphson per radici multiple Il metodo di Newton-Raphson non si comporta come ci si aspetta se viene applicato per approssimare una radice ξ per cui vale f (ξ ) = 0 . In tal caso, la radice non è una radice semplice ma è una radice multipla. Definizione 5 .11.1 Data un’equazione f ( x) = 0, una radice ξ si dice multipla con molteplicità r se vale: f (ξ ) = f (ξ ) = . . . = f r−1 (ξ ) = 0
Un conto è dire che una radice è multipla, cioè la stessa radice si ripete per un certo numero di volte. Un conto è dire che una funzione ha molteplici radici (distinte, diverse tra loro).
appunti appunti di calcolo calcolo numerico numerico
67
e f r (ξ ) = 0. Ciò signi significa fica che che la funzion funzionee f ( x) può essere scritta come r f ( x) = ( x − ξ ) q( x ), dove q (x ) è una funzione per cui vale q (ξ ) = 0 o limx→ξ q ( x ) = 0 . Esempio
0. Si tratta di trovare le Consideriamo l’equazione x 2 − 8x + 16 = 0. radici di un polinomio polinomio di grado 2 grado 2.. L’equazione che abbiamo scritta si può riscrivere, riscrivere, in modo del tutto equivalente equivalente,, come ( x − 4)2 = 0. 0 . Troviamo una radice, da contarsi due volte, cioè ξ = 4 è 4 è una radice 2 doppia, o con molteplicità r = 2. 2. Da f ( x) = x − 8x + 16 = ( x − 4)2 ricaviamo f ( x) = 2x − 8 = 2( x − 4) e f ( x ) = 2. Risulta, quindi: f (4) = f (4) = 0, mentre f (4) = 0.
Figura 5.18: Radice doppia di f ( x) = x 2 8x + 16.
−
Quando si ha una radice multipla, il metodo di Newton-Raphson diventa diventa un metodo del primo ordine in quanto la formula che lega l’errore al passo n + 1 con l’errore al passo n diventa: n+1 =
r−1 r n
Il procedimento da seguire per arrivare a questo risultato è del tutto simile a quanto è stato fatto nell’ipotesi in cui f (ξ ) = 0. Si consiglia
di ricavare questo risultato come esercizio.
r−1
da cui la costante asintotica è M = . Per poter avere avere un metodo r che sia di nuovo a convergenza convergenza quadratica, quadratica, occorre occorre modificare modificare l’algol’algoritmo, ottenendo la formula di Newton-Raphson modificata, nel modo
seguente: f ( x ) xn+1 = x n − r n f ( xn )
Da un punto di vista geometrico, la nuova approssimazione x n+1 è dato dall’intercetta con l’asse delle ascisse della retta data da y = f (xn )( x − xn ) + r f (xn ) (retta che è parallela alla retta tangente alla f in x n ) Esempio
Riprendiamo Riprendiamo la funzione funzione f (x ) = x2 − 8x + 16 (di 16 (di cui sappiamo che ξ = 4 è 4 è una radice doppia). Applicando il metodo di Newton x 2 − 8xn + 16 Raphson, abbiamo x n+1 = x n − n . La stessa stessa formula si 2xn − 8 x n − 4 xn + 4 ( x − 4 )2 può riscrivere come x n+1 = x n − n . = x n − = 2( x n − 4 ) 2 2 La convergen convergenza za è lineare: se facciamo il rapporto tra gli scarti otteniamo un valore che tende a 0.5. Modificando l’algoritmo tenendo conto della molteplicità della ( x n − 4)2 radice, otteniamo: xn+1 = xn − 2 = x n − ( x n − 4 ) = 4. 2 ( x n − 4) Qualunque sia il punto iniziale, arriviamo alla radice in una sola iterazione! La funzione che abbiamo preso in esame è particolare, essendo un polinomio di grado 2 , perciò abbiamo una sola iterazione per arrivare
a convergenza.
Per esercizio si dimostri che, data la funzione
f ( x) = ( x − ξ )2 = 0 , il metodo di NewtonRaphson modificato converge a ξ in in una sola iterazione qualunque sia il punto x 0 iniziale.
68 annamari annamaria a mazzia mazzia
Figura 5.19: Prima iterazione dello schema di Newton-Raphson e dello schema diNewtonRaphson modificato per approssimare la radice doppia della funzione f ( x) = x 2 8x + 16 = ( x 4)2 .
−
Osserviamo Osserviamo che, in caso di una radice multipla, anche il metodo della Regula Falsi converge alla radice in modo lineare e non più superlineare come ci si aspetta.
5.12
Controllo sugli scarti e grafici di convergenza Da un punto di vista pratico, il controllo per verificare la convergenza o meno della successione di valori xn−1 , xn , xn+1 , generata dallo schema iterativo viene effettuato sugli scarti d n = |xn − xn−1 | piuttosto che sugli errori (assoluti) (assoluti) n = |ξ − xn |, poichè, se avessimo informazioni sugli errori, conosceremmo anche il valore di ξ (che, in
generale, non è noto). Fissata una certa tolleranza tol to l , arrestiamo lo schema iterativo quando d n < tol t ol (o quando d n+1 < tol a seconda della notazione usata). Nel caso del metodo di Newton-Raphson a convergenza quadratica,
abbiamo visto che il controllo sullo scarto va bene (si veda quanto detto a pag. 61 ). Vediamo cosa succede succede per metodi lineari. Sia tol la tolleranza richiesta per approssimare ξ approssimare ξ utilizzando utilizzando gli scarti. Sappiamo che, per n grande e se il metodo converge, vale la relazione n+1 M n dove M < 1, M = 0, è la costante asintotica.
≈
Riscriviamo la precedente formula come:
|ξ − xn+1 | ≈ M |ξ − xn | = M |ξ − xn + xn+1 − xn+1 | ≤ M (|ξ − xn+1 | + |xn+1 − xn |)
−
appunti appunti di calcolo calcolo numerico numerico
69
Quindi
≤ M (n+1 + dn+1 ) vale a dire ( 1 − M)n+1 ≤ Md M dn+1 Se siamo arrivati ad un indice n per cui d n+1 ≤ tol , allora vale n +1
n +1
≤ 1 −M M dn+1 ≤ 1 −M M tol M 1 − M
1 (vale a dire per M < 1/2), se dn+1 ≤ tol anche n+1 ≤ tol . Se, invece, M ≥ 1/2 , allora l’errore può essere un po’ più grande della tolleranza richiesta. Per quanto riguarda il metodo della secante variabile, poichè è superlineare, superlineare, in base alla definizione definizione alternativa alternativa che abbiamo dato, si può dire che n+1 ≈ Mn+1 n con M n+1 → 0: si può vedere come Perciò, per
<
M < 1 si può riscrive1 − M re come M < 1 − M da cui 2 M < 1 ovvero M < 1/2. Se tol = 10−10 e M = 0.8 (maggiore di 1/2 ), l’error l’erroree sarà sarà minore minore o uguale uguale a 4 · 10−10 . La disequazione
un caso limite di convergenza lineare con fattore di convergenza che
tende a zero, e quindi il controllo dello scarto permette un buon controllo dell’errore. Quando si implementa un metodo iterativo, si può fare il grafico semilogaritmico di convergenza del metodo, ponendo sull’asse delle ascisse i valori delle iterazioni e sull’asse delle ordinate i logaritmi (in
base 10 ) degli scarti. Asintoticamente, infatti, nella definizione di ordine di convergenza
di un metodo, metodo, possiamo sostiture sostiture l’errore con lo scarto da cui d n ≈ p Md n−1 . Nel caso in cui p = 1, si ha: dn ≈ Md M dn−1 dn−1 ≈ Md M dn−2 dn−2 ≈ Md M dn−3 .. .. . . d2 ≈ Md M d1 d1 ≈ Md M d0
Partendo dalla prima relazione abbiamo: dn ≈ Md n−1 ≈ M 2 dn−2 ≈ M 3 dn−3 ≈ . . . ≈ M n d0
Troviamo una relazione tra d n e d 0. Passando ai logaritmi: log10 (dn ) = n log10 ( M ) + log10 (d0 ) Abbiamo un’equazione del tipo y = ax + b dove y = log10 (dn ) e rappresenta l’equazione l’equazione della retta retta nel nostro nostro grafico x = n, che rappresenta semilogaritmico, e la pendenza della retta vale a = log10 ( M ). Dalla pendenza della retta possiamo dunque risalire al valore della costante
asintotica M .
Figura 5.20: Grafico con i profili di convergenconvergenza per i metodi di Newton-Raphson, secante variabile e punto fisso per trovare lo zero della funzione f ( x ) = x + ln ( x ) (e applicando lo schema di punto fisso alla funzione g( x) = e −x ).
Nel caso in cui p = 1 il discorso si fa più complicato (e non staremo qui ad analizzarlo
nei dettagli).
70 annamari annamaria a mazzia mazzia
5.13
Osservazioni sull’ordine di convergenza di un me todo itera iterativo tivo
Abbiamo visto che, in generale, uno schema iterativo ha un certo ordine di convergenza, ma ci sono delle eccezioni: ad esempio, il metodo di Newton-Raphson in genere è di ordine p = 2 ma se la radice è multipla allora il metodo diventa lineare, e se la radice è un punto di flesso non orizzontale il metodo ha convergenza cubica; analogamente nello schema di punto fisso, se g (ξ ) = 0 allora il metodo non è più lineare... Se non abbiamo sufficienti informazioni sulla radice o sul punto fisso che vogliamo approssimare, come facciamo a capire qual è l’ordine
di convergen convergenza za del metodo iterativ iterativo? o? Una strada strada è vedere vedere se l’approssimazione della costante asintotica usando gli scarti o la formula
Se stiamo applicando il metodo di NewtonRaphson e stimando M tramite la formula dn+1 /d2n o tramite tramite la formula formula teorica teorica f ( xn )/(2 f ( xn ) troviamo dei valori che tendono ad un limite ben preciso diverso da zero e da infinito, allora significa che il metodo ha ordine p = 2 e che la stima che stiamo facendo è corretta. Ma se, seguendo questa strada, troviamo dei valori di M che tendono a zero o a infinito, significa significa che l’ordine del metodo non è p = 2!
|
|
"teorica" che vale per l’ordine p che ci aspettiamo, abbia senso (cioè non tenda nè a zero nè a infinito ma ad un valore limite ben preciso – si veda l’esempio descritto a pag. 65 ). Ma se l’approssimazione della costante asintotica non va bene, c’è una strada più pratica da seguire
per capire qual è l’ordine di convergenza del metodo? Riprendiamo la definizione di ordine di convergenza di uno schema iterativo: lim
n →∞
|xn+1 − ξ | = M |xn − ξ | p p
Utilizzando Utilizzando gli scarti come approssimazion approssimazionee dell’errore dell’errore possiamo possiamo dire che, se p è l’ordine di convergenza, allora, al limite per n che tende all’infinito, si ha
|xn+1 − xn | → M |xn − xn−1 | p p
ovvero
Deve essere p positivo.
d n +1 → M . (dn ) p
Partendo dall’iterazione 1 (lo scarto d 0 ha un significato fittizio e non lo usiamo) fino ad arrivare all’iterazione n + 1, 1, abbiamo le seguenti
approssimazioni per M : d2 ≈ M , (d1 ) p
d3 ≈ M , (d2 ) p
d4 ≈ M , (d3 ) p
...
dn ( d n −1
) p
≈ M ,
d n +1 ≈ M (dn ) p
Supponiamo di non conoscere quale sia il valore di p. Allora non possiamo andare a calcolare quei rapporti tra gli scarti che abbiamo appena scritto! Sappiamo però che quei rapporti tendono allo stesso valore di M (la costante asintotica). asintotica). Perciò possiamo possiamo eguagliarli a due a due in modo da poter avere avere una relazione che ci permetta di ricavare p : d2 ≈ M (d1 ) p d3 ≈ M (d2 ) p .. . dn p ≈ M
( d n −1 )
≈ (dd23) p =⇒ (dd12) p ≈ (dd23) p ≈ (dd34) p =⇒ (dd23) p ≈ (dd34) p ≈
.. . d n +1 dn d n +1 ≈ =⇒ p p (d n ) ( d n −1 ) (dn ) p
≥
1 e M numero reale
appunti di calcolo numerico
Da d2 d3
d2 d3 ricaviamo facilmente ≈ p ( d1 ) (d2 ) p
≈
( d1 ) p = (d2 ) p
p
d1 d2
d oppure, passando ai reciproci, si ha 3 d2
p
≈ d2 d1
Passando ai logaritmi si ha d log 2 d3
d2 d3 d log 1 d2
log
≈ d p log 1 d2
da cui
p≈
d3 d2 d log 2 d1
log In modo equivalente, p
≈
Lavorando allo stesso modo sugli altri rapporti tra gli scarti abbiamo:
d3 d4 , d2 log d3
log p ≈
dn d n+ 1 d log n 1 dn
log ...
p≈
In modo equivalente p
Man mano che ci stiamo avvicinando a convergenza il valore di p tenderà ad un valore ben preciso, l’ordine di convergenza del metodo.
E, una volta trovato p, possiamo stimare M usando la formula del rapporto tra gli scarti. Esempio
Riprendiamo l’esempio di pag. 65 in cui abbiamo confrontato gli schemi di Newton-Raphson e della Regula Falsi. Andiamo a rivedere i valori degli scarti e a stimare il valore di p usando la formula appena
scritta. n 1 2 3 4 5 6 7 8 9
dn (N-R) 1.41452687E+00 6.29766079E-01 1.40647107E-01 1.03024203E-02 5.75004640E-05 1.79436599E-09
p (N-R)
1.8526 1.7436 1.9849 1.9997
dn (R-F) 5.E-02 1.24070285E+00 8.55361810E-01 1.43968803E-01 6.13774024E-02 7.14459392E-03 2.10317362E-04 7.91146198E-07 9.06448250E-11
p (R-F)
-0.11581 4.7913 0.47845 2.5226 1.6392 1.5836 1.6254
Osserviamo che per poter iniziare a stimare il valore approssimato di p dobbiamo avere fatto almeno tre iterazioni in modo da poter dn d applicare la formula p ≈ log /log n−1 . d n +1 dn
Dalla tabella, si può notare che, per il metodo di Newton Raphson, a parte un’iniziale oscillazione, il valore di p tende a 2 . Per il metodo della Regula Falsi invece si vede all’inizio un valore negativo (dovuto
alla scelta dei due valori iniziali x0 e x1 ), successivamente ci sono forti oscillazioni, infine, quando si sta arrivando a convergenza, si hanno i valori di p = 1.6392, 1.5836, 1.6254 . Ricordiamo che in questo caso p = 1.618 e l’approssimazione finale che otteniamo è abbastanza buona.
≈
dn+1 dn dn log d n −1
log
−
71
72 annamaria mazzia
Se, all’ultima iterazione, il valore dello scarto fosse zero o molto prossimo a zero (dell’ordine di 10−16 , la precisione di macchina) allora non conviene usare quest’ultimo valore per stimare l’ordine di
convergenza (non possiamo fare log0 o una divisione per zero – a seconda di come stiamo applicando la formula per p ). In casi simili conviene fermarsi alla stima del penultimo passo di iterazione.
5.14
Esercizi
Esercizio 5 .14.1 Si vuole risolvere l’equazione x = g ( x) con lo schema
del punto fisso; sapendo che g( x) = x 2 − 5x + 9 (a) calcolare analiticamente il valore del punto fisso; (b) determinare il fattore di convergenza M dello schema del punto fisso; (c) calcolare le approssimazioni x1 , x2 e x3 partendo prima da x 0 = 1 e poi da x 0 = 2.5 e giustificandone il diverso comportamento. Svolgimento
(a) ξ è punto fisso della funzione g se verifica g (ξ ) = ξ . Imponiamo dunque la condizione g (ξ ) = ξ . Ricaviamo ξ 2 − 5ξ + 9 = ξ , ovvero ξ 2 − 6ξ + 9 = 0, cioè ( ξ − 3)2 = 0, da cui ξ = 3 è punto fisso della g . (b) Il fattore di convergenza è M = g (ξ ). Poichè g ( x) = 2 x − 5, si ha g (ξ ) = g (3) = 1. Osserviamo che, a priori, non si può dire se lo schema del punto fisso converge o meno proprio perchè nel punto fisso la derivata prima vale esattamente 1, ma bisogna vedere caso per caso a seconda del punto iniziale da cui si fa partire il metodo. Per x 0 = 1 si ha k
Figura 5.21: Esercizio sullo schema di punto fisso
Per x 0 = 2.5 si ha xk
g ( xk )
k
xk g(xk ) 0 1 5 0 2 .5 2.75 (c) 1 5 9 1 2.75 2.8125 2 9 45 2 2.8125 2.84765625 3 45 1809 3 2.84765625 2 .870864868 Per x 0 = 1 il metodo non converge, mentre per x 0 = 2.5 il metodo converge. La diversità di comportamento si giustifica graficamente, come si può vedere dalla Figura 5 .21, osservando che per x 0 = 1 i
valori ottenuti dallo schema si allontanano sempre più dal punto fisso. Nel secondo caso, al contrario, i valori si avvicinano con monotonia al punto fisso.
appunti di calcolo numerico
Esercizio 5 .14.2 Si vuole risolvere l’equazione f ( x) = 0 con f ( x) =
(x
− 1)2 + 3 ln (x), nell’intervallo [0.5,2] con gli schemi di Newton-
Raphson e della Regula Falsi.
(a) Dimostrare esistenza e unicità della soluzione nell’intervallo considerato. (b) Calcolare le approssimazioni x 1 , x2 e x3 con lo schema di NewtonRaphson, partendo da x 0 = 0.5 ; (c) Calcolare le approssimazioni x2 e x3 con lo schema della RegulaFalsi partendo da x0 = 0.5 e x1 calcolato al punto b). Stimare, inoltre il fattore di convergenza del metodo di Newton-Raphson assumendo ξ ≈ x3 . Svolgimento
(a) La funzione ammette valori opposti all’estremo dell’intervallo. Infatti f (0.5) = −1.82944154 e f (2) = 3.07944154. Quindi, per il teorema del valor intermedio, esiste almeno una radice. Inoltre 3 2x2 − 2x + 3 è sempre positivo nell’inter f ( x) = 2( x − 1) + = x x vallo dato, (la parabola 2 x2 − 2x + 3 ha discriminante negativo e quindi è sempre positiva). Perciò, da f ( x) > 0 concludiamo che la f è crescente. Di qui l’unicità della radice. (b) Partendo da x 0 = 0.5, il metodo di Newton-Raphson fornisce i seguenti valori: k 0 1 2 3
xk 0.50000000E+00 0.86588831E+00 0.99541173E+00 0.99999643E+00
f ( xk ) -0.18294415E+01 -0.41401211E+00 -0.13775443E-01
f ( xk ) 0.50000000E+01 0.31964267E+01 0.30046517E+01
Dalla tabella sembra che i valori della successione tendano a 1. E, infatti, si vede facilmente che f (1) = 0 e quindi 1 è il valore che stiamo cercando. Per stimare la costante asintotica dell’errore del metodo di Newton-Raphson assumendo ξ ≈ x3 , occorre usare la formula M ≈
| f (x3 )| 2| f ( x3 )|
3 dove, nel caso specifico, vale f (x ) = 2(x − 1) + e f (x ) = x 3 2− 2. x Usando il valore trovato per x 3 si ricava M ≈ 0.16667004 E + 00.
73
74 annamaria mazzia
(c) Partendo da x 0 e x 1 del metodo di Newton-Raphson, la Regula Falsi dà: k
xk
f (xk )
0 1 2 3
0.50000000E+00 0.86588831E+00 0.97291038E+00 0.99920448E+00
-0.18294415E+01 -0.41401211E+00 -0.81656072E-01
f ( xn ) − f ( xn−1 ) x n − x n −1 0.38684741E+01 0.31054906E+01
Esercizio 5 .14.3 Provare, anche solo graficamente, che l’equazione
f (x ) = sin (x ) + x − 1 = 0 ammette una sola radice ξ nell’intervallo [ 0, 1]. (a) Dire se lo schema del punto fisso con g ( x) = arcsin (1 − x) può convergere. (b) Partendo da x0 = 0.1 calcolare le approssimazioni x 1 , x2 e x3 con lo schema di Newton-Raphson; (c) Dare una stima del fattore di convergenza. Svolgimento
Graficamente, da f ( x) = 0 si ha sin ( x) = 1 − x. Se si studia l’intersezione delle due curve, sin ( x ) e 1 − x nell’intervallo [ 0, 1], si può osservare una sola intersezione, cioè una sola radice della f (fare il grafico delle due funzioni). Analiticamente, la funzione f ( x) assume valori di segno opposto agli estremi dell’intervallo dato: f (0) = sin (0) + 0 − 1 = −1 f (1) = sin (1) + 1 − 1 = 0.8414709848
La derivata prima della f è f = cos ( x) + 1: è funzione continua e sempre positiva nell’intervallo [0, 1]. Quindi f è una funzione crescente e interseca l’asse delle x solo una volta in [ 0, 1], vale a dire ammette un’unica radice. (a) Da f ( x) = 0 si ha sin ( x) + x − 1 = 0 o, equivalentemente, sin ( x) = 1 − x, da cui x = arcsin (1 − x).
Consideriamo perciò lo schema del punto fisso con g (x ) data da 1 g( x) = arcsin (1 − x). La derivata di g (x ) è g (x ) = . 1 − (1 − x )2 Nell’intervallo [ 0, 1] valgono le seguenti disuguaglianze:
0 ≤ x ≤ 1 =⇒ 0 ≥ −x ≥ −1 =⇒ 1 ≥ 1 − x ≥ 0 =⇒ =⇒ 1 ≥ (1 − x)2 ≥ 0 =⇒ −1 ≤ −(1 − x )2 ≤ 0 =⇒ 0 ≤ 1 − (1 − x)2 ≤ 1 =⇒ 1 =⇒ 0 ≤ 1 − (1 − x )2 ≤ 1 =⇒ 1 ≤ 1 − ( 1 − x )2
appunti di calcolo numerico
Perciò g ( x) è sempre maggiore di 1 e lo schema del punto fisso non può convergere. (b) Da f (x ) = sin (x ) + x − 1 si ha f ( x) = cos ( x) + 1 e f ( x) = − sin (x). Il metodo di Newton-Raphson è: xk+1 = x k −
sin ( x) + x − 1 . cos ( x) + 1
Utilizziamo la notazione M1 e M2 per indicare la stima della costante asintotica dell’errore mediante le formule M1 =
| x k +1 − x k | | x k − x k −1 | 2
o
M2 =
| f (xk )| 2| f (xk )|
Partendo da x 0 = 0.1 si ottengono i seguenti valori: k 0 1 2 3
xk 0.1 0.50108517E+00 0.51096084E+00 0.51097343E+00
f (xk ) -0.80016658E+00 -0.18537249E-01 -0.23565955E-04 -0.38737166E-10
f ( xk ) 0.19950042E+01 0.18770618E+01 0.18722750E+01 -
| x k − x k −1 |
-
0.40108517E+00 0.98756733E-02 0.12586802E-04
(c) La stima del fattore di convergenza è dato da M1 = 0.12905712E+00 o da M 2 = 0 .13059731E+00, a seconda della strada scelta per dare la stima.
Esercizio 5 .14.4 Data l’equazione f ( x) = ln ( x) + x 2
− x = 0,
(a) si provi, anche solo graficamente, che l’equazione ammette l’unica radice ξ = 1 nell’intervallo [ 0.7, 2.3] ; (b) si applichino due iterazioni del metodo dicotomico (o delle bisezioni) a partire dall’intervallo dato, chiamando con x 0 l’ultimo valore ottenuto con tale metodo; (c) a partire da x0 del punto (b) si calcoli l’approssimazione x 1 con il metodo di Newton-Raphson; (d) a partire da x0 e x1 del punto (c) si calcolino le approssimazioni x 2 e x3 con il metodo della Regula Falsi; (e) considerata la radice esatta ξ = 1, si calcoli la costante asintotica di convergenza del metodo della Regula Falsi. Svolgimento
(a) Da f (x ) = 0 si ricava ln ( x ) = x − x2 , per cui graficamente si può vedere che le due curve si intersecano in un solo punto, che vale ξ = 1.
75
76 annamaria mazzia
Analiticamente, invece, la funzione f (x ) assume valori di segno opposto agli estremi dell’intervallo dato: f (0.7) = −0.566674943938732 f (2.3) = 3.8229091229351 Inoltre f è continua, quindi ammette almeno una radice nell’intervallo dato. La derivata prima è: f ( x) =
1 + 2x − 1, che possiamo x
1 + 2x2 x anche scrivere come f ( x) = : numeratore e denominax tore sono entrambi sempre positivi nell’intervallo dato, (la parabola 2x2 x + 1 ha discriminante negativo ∆ = 7, di conseguenza, per ogni x reale si ha 2 x2 x + 1 > 0). Da f (x ) > 0 per ogni x
−
−
−
−
segue che f è crescente e, quindi, ammette un’unica radice. (b) Applichiamo il metodo delle bisezioni a partire dall’intervallo dato (utilizziamo la notazione x s per indicare l’estremo sinistro dell’intervallo, x d per indicare l’estremo destro dell’intervallo, x c , il punto medio dell’intervallo considerato):
iter. 1 2
xs 0 .7 0 .7
segno -0.566674944 -0.566674944 f (xs )
xd 2 .3 1 .5
segno 3.822909123 + + 1.155465108 f (xd )
xc 1.5 1.1
Il valore x 0 è dunque x 0 = 1.1. f ( x ) (c) Il metodo di Newton-Rapshon è x k+1 = xk − k dove f = f ( xk ) 0.20531018 1/ x + 2x − 1. Partendo da x0 = 1.1, si ricava x1 = 1.1 − = 2.1090909 1.002654656
(d) Applicando il metodo della Regula Falsi si ha: k
xk
f ( xk )
1 2 3
1.002654656 1.000068720 1.000000046
0.5312842078E-02 0.1374413812E-03
f (xk ) − f ( xk−1 ) xk − xk−1 0.2054513650E+01 0.2001364094E+01
(e) Considerato che la radice esatta è ξ = 1, la costante asintotica di convergenza della Regula Falsi si calcola utilizzando l’espres1 f (ξ ) 0.618 sione M = | | . Da f (x ) = + 2x − 1 segue f (1) = 2 x 2 f (ξ ) 1 1 0.618 e f ( x) = − 2 + 2, da cui f (1) = 1, per cui M = = 4 x 0.4245481.
f ( xc ) 1.155465108 0.205310180
appunti di calcolo numerico
Esercizio 5 .14.5 Data la funzione
f (x ) = ln (3 + 2x − x2 ) − x
(a) dimostrare esistenza della soluzione ξ dell’equazione f ( x) = 0 nell’intervallo [ 0,2.5 ] ; (b) approssimare ξ con il metodo di Newton Raphson, a partire dal punto iniziale x0 = 1, arrestandosi quando il valore assoluto dello scarto è inferiore a 10 −3 . Usando gli scarti, stimare la costante asintotica M e l’errore finale.
Svolgimento
(a) La funzione è continua e assume segni opposti agli estremi dell’intervallo. f (0) = 1.09861228866811 > 0 f (2.5) = −1.94038421206458 Quindi esiste almeno una radice.
<
0.
Osserviamo che in questo esercizio è richiesta solo l’esistenza e non esistenza e unicità della radice.
(b) Per applicare il metodo di Newton-Raphson, consideriamo la derivata prima della f : 2 − 2x − 1. Si ha: f ( x) = 3 + 2x − x2 k
xk
0 1 2 3
1.00000000000000 0.1386294361E+01 0.1354628119E+01 0.1354392386E+01
f ( xk−1 ) 0.3862943611E+00 -0.3801950159E-01 -0.2788886518E-03
f (xk−1 )
dk
-0.1000000000E+01 0.3862944E+00 -0.1200631922E+01 0.3166624E-01 -0.1183069825E+01 0.2357330E-03
Ci fermiamo alla terza iterazione, perchè lo scarto è diventato minore della tolleranza 10 −3 richiesta. Usando gli scarti, la stima per la costante asintotica vale
| x 3 − x2 | = | x2 − x 1 | 2
0.2350863. Per una stima dell’errore commesso, si può utilizzare il fatto che, per il metodo di Newton-Raphson vale e k < d k e, quindi, dire che e3 ≤ 0.2357330 E − 03. Se si vuole essere particolarmente precisi, dalla relazione d k+1 ≈ e k (ricavata nell’Esemd pio 5 .6), e considerando che k+2 1 ≈ M , abbiamo e 3 ≈ d4 ≈ Md23 = dk 0.2350863 · (0.2357330 E − 03)2 = 1.306375 E − 08.
77
78 annamaria mazzia
Esercizio 5 .14.6 Si vuole risolvere l’equazione x = g ( x) con lo schema
del punto fisso. Sapendo che g (x ) = x 2 − 8x + 20.25 calcolarne analiticamente il punto fisso e determinare: (a) il fattore di convergenza M1 dello schema del punto fisso e successivamente le approssimanti x1 , x2 , x3 usando prima x 0 = 4 e poi x0 = 5.5 , giustificandone il diverso comportamento. Risolvere quindi f ( x) = 0 ove f ( x) = g(x ) − x con lo schema di Newton-Raphson; calcolare (b) il fattore di convergenza M2 dello schema di Newton-Raphson e le approssimanti x1 , x2 , x3 ottenute con lo schema partendo da x 0 = 4 (c) le approssimanti x1 , x2 , x3 ottenute con lo schema di NewtonRapshon modificato e x 0 = 4.
Svolgimento Da g ( x) = x si ha x 2
grado x 2
− 8x + 20.25 = x . Risolvendo
l’equazione di secondo − 9x + 20.25 = 0 si trova la radice doppia (con molteplicità r = 2) ξ = 4.5.
(a) Conoscendo il punto fisso, possiamo calcolare M 1 = | g (4.5)| = 1. A priori non possiamo dire nulla sulla convergenza dello schema. Partendo da x 0 = 4 e applicando lo schema troviamo x 1 = 4.25, x2 = 4.3125, x 3 = 4.34765625. Si vede che lo schema va a convergenza. Partendo da x 0 = 5.5 si ha x 1 = 6.5, x 2 = 10.5, x 3 = 46.5. Il metodo
sta divergendo. Il diverso comportamento è dovuto proprio al fatto che g (ξ ) = 1. Consideriamo ora f ( x) = g (x ) − x = x 2 − 9x + 20.25. Sappiamo già che questo polinomio ha una radice doppia e f ( x) può essere riscritta come f ( x) = ( x − 4.5)2 (quindi f ( x) = 2( x − 4.5)). (b) Se pensiamo che il metodo di Newton-Raphson abbia conver| f (ξ ) | genza quadratica, ci accorgiamo che la formula M2 = 2| f (ξ ) non può essere applicata perché f (ξ ) = f (4.5) = 0 (e dovrebbe suonare un campanello di allarme). Se però ci ricordiamo che il punto fisso che abbiamo appena calcolato è una radice doppia per
la f , allora sappiamo che il metodo sarà a convergenza lineare e che vale M2 = (r − 1)/r con r = 2 la molteplicità della radice. Quindi M 2 = 0.5. Il metodo di Newton-Raphson è x n+1 = x n ( xn 4.5) /2. Partendo da x 0 = 4 si ha x 1 = 4.25 , x 2 = 4.375, x 3 = 4.4375 (si vede bene
−
come la convergenza sia lineare.)
−
appunti di calcolo numerico
(c) Il metodo di Newton-Raphson modificato diventa x n+1 = x n − 2( xn − 4.5)/2 = x n − (xn − 4.5) = 4.5
Partendo da x 0 = 4 otteniamo x 1 = x 2 = x 3 = 4.5, cioè arriviamo a convergenza in una sola iterazione.
5.15
Domande di riepilogo 1.
Cosa significa che ξ è uno zero di una funzione f ?
2. Nell’applicare
il metodo delle bisezioni ad una funzione f (x ) in un certo intervallo [ a , b], quante iterazioni occorre fare per ricavare un’approssimazione di una radice della f a meno di una tolleranza tol? Ricavare la formula spiegando tutti i passaggi.
3. Data una funzione y = g ( x ), cosa è un punto fisso della g ? Come
si può riconoscere, graficamente, se una funzione g ha un punto fisso? 4. Qual
è lo schema iterativo del metodo di punto fisso? Quali
sono le ipotesi che devono valere perchè lo schema di punto fisso, applicato ad una funzione g , converga ad un punto fisso ξ della g ?
Dimostrare. 5.
Dato un metodo iterativo (per approssimare le radici o il punto fisso di una funzione), che significa che il metodo ha ordine di con-
vergenza p ? Qual è la costante asintotica o fattore di convergenza associato a p ? 6. Si
ricavi l’ordine di convergenza e la costante asintotica per lo schema di punto fisso applicato ad una funzione g ( x) con punto fisso ξ per il quale g (ξ ) = 0.
7. Si
ricavi l’ordine di convergenza e la costante asintotica per lo schema di punto fisso applicato ad una funzione g ( x) con punto fisso ξ per il quale g (ξ ) = 0 e g (ξ ) = 0.
8.
Qual è la formula del metodo di Newton-Raphson e come si può ricavare la formula partendo dalla formula di Taylor?
9.
Qual è la formula del metodo di Newton-Raphson e come si può ricavare la formula partendo da una rappresentazione grafica?
10. Il metodo di Newton-Raphson
si può vedere come un caso particolare di schema di punto fisso? Che cosa si può dedurre? Perché diciamo che lo schema di Newton-Raphson è generalmente convergente?
11. Si ricavi
l’ordine di convergenza e la costante asintotica del metodo di Newton-Raphson, nel caso generale. Quale ipotesi viene fatta?
79
80 annamaria mazzia
12. Si ricavi l’ordine di convergenza e la costante asintotica del meto-
do di Newton-Raphson nel caso in cui la radice ξ ha molteplicità 2. 13. Cosa
significa che ξ è una radice con molteplicità r (r intero maggiore o uguale a 2 ) per una funzione f ?
14. Se
una radice ξ ha molteplicità r cosa succede al metodo di Newton-Raphson? Cosa si deve fare per ripristinare l’ordine di convergenza?
15. Si ricavi l’ordine di convergenza e la costante asintotica del meto-
do di Newton-Raphson nel caso in cui la radice ξ è un punto di flesso non orizzontale e f (ξ ) = 0. 16. Descrivere
geometricamente il metodo delle secanti variabili (detto anche Regula Falsi).
17.
In genere che ordine ha il metodo delle secanti variabili e qual è la costante asintotica? (Dire solo i valori: non abbiamo dimostrato nessun teorema.)
18.
Se si applica il metodo delle secanti variabili per approssimare una radice con molteplicità r, che ordine di convergenza ha il metodo? (Dire solo che cosa succede.)
19.
Qual è la definizione di scarto all’iterazione n ?
20.
Qual è l’indice di efficienza di un metodo iterativo?
21.
Nel fare un grafico di convergenza in scala logaritmica sull’asse delle ordinate (sull’asse delle ascisse si pongono gli indici delle iterazioni e sull’asse delle ordinate i logaritmi degli scarti), per un
metodo a convergenza lineare, cosa si può dire sulla pendenza della retta e perché? 22.
Se non si conosce l’ordine di convergenza di un metodo e lo si vuole ricavare facendo riferimento esclusivamente ai valori degli scarti, quale formula va applicata? Da dove si ricava?
6 Interpolazione Un problema reale
6.1
I termistori (o termoresistenze) sono apparecchi che misurano la temperatura, basati sul principio che un materiale termoresistente mostra una variazione nella resistenza elettrica al variare della temperatura. Perciò, misurando la resistenza di un materiale termistore, si puo’ determinare la temperatura. In genere, i termistori sono fatti di materiali semiconduttori (manganese, nickel, cobalto, etc.). E si
Non vi è alcuna incompatibilità fra l’esatto e il poetico. Il numero è nell’arte come nella scienza. L’algebra è nell’astronomia e l’astronomia confina con la poesia. L’anima dell’uomo ha tre chiavi che aprono tutto: la cifra, la lettera, la nota. Sapere, pensare, sognare. Victor Hugo
classificano secondo due tipi: i termoresistori NTC (coefficienti a tem-
peratura negativa) e termoresistori PTC (coefficienti a temperatura positiva). Nei primi, i più usati, la resistenza decresce con l’aumentare
della temperatura, nei secondi la resistenza aumenta all’aumentare della temperatura. I termistori possono essere utilizzati per misurare la temperatura, a motivo della loro alta sensibilità e della loro veloce
risposta alle variazioni di temperatura. Quando viene preparato un termistore, l’industria che li prepara fornisce una curva della resistenza al variare della temperatura, data
da 1 = a 0 + a1 ln ( R) + a2 (ln ( R)) 2 + a3 (ln ( R)) 3 T nota come equazione di Steinhart-Hart e nella quale T è la temperatu-
ra (in Kelvin), R è la resistenza (in Ohm), mentre a 0 , a 1 , a 2 e a 3 sono le costanti della curva di calibrazione. Facendo un cambiamento di 1 variabile e, precisamente, ponendo y = e x = ln ( R), la curva di T calibrazione diventa il polinomio
R Ohm 1101.0 911.3 636.0 451.1
y = a 0 + a1 x + a2 x2 + a3 x3 Se si riescono a calcolare le costanti a 0 , a 1 , a 2 e a 3 , allora si può usare
la curva di calibrazione per trovare la temperatura al variare della resistenza. Supponiamo di essere in possesso dei dati espressi in Tabella 6 .1 per un determinato termistore. Come possiamo usare questi valori
T
oC
25.113 30.131 40.120 50.128
Tabella 6.1: Valori di Resistenza e Temperatura di un termistore.
per trovare le costanti della curva di calibrazione? Per prima cosa, si
passa dai valori della temperatura in gradi Celsius ai gradi Kelvin, mediante la formula K = o C + 273.15, poi dai valori R e T , passiamo alle variabili x e y (costruendo la nuova Tabella, riportata di lato).
x = ln ( R) 7.004 0 6.814 9 6.455 2 6.111 7
y = 1/ T ×10−−33 ×10−3 ×10−3 ×10
3.352 7 3.297 3 3.192 1 3.093 3
Tabella 6.2: Tabella con le nuove variabili x e
y.
82 annamaria mazzia
Successivamente, cerchiamo una funzione (nell’esempio che stiamo considerando, un polinomio di grado 3) che passi esattamente per i dati
assegnati (detti anche punti di appoggio), in modo da ricavare le costanti incognite: questo procedimento prende il nome di interpolazione ed è il soggetto di questo Capitolo. In particolare, dato l’insieme dei punti ( xi , yi ), i = 0, 1, . . . , n, dove yi è il valore assunto da una funzione f in xi o il valore di un dato sperimentale, cerchiamo una funzione v ( x) che, in maniera ragionevole si addica all’insieme dei dati. Se i dati sono accurati, ha senso richiedere che la funzione interpoli i dati (cioè passi esattamente per le coppie di punti): v ( xi ) = y i . 6.2
Figura 6.1: I valori x e y della Tabella messi in grafico.
Le ascisse xi sono dette anche nodi di interpolazione.
Interpolazione Una funzione di interpolazione v ( x ) serve per vari scopi. Possiamo usare la v ( x) per trovare valori approssimati y in punti
x diversi da quelli assegnati x 0 , x1 , . . . xn . Se x si trova all’interno dell’intervallo che contiene le ascisse dei dati assegnati si parla di interpolazione. Se invece x si trova all’esterno dell’intervallo si parla di estrapolazione.
Figura 6.2: Il polinomio che passa esattamente per i dati x e y assegnati è y = 3.0091 10−3 4.5307 10−4 x +
×
−
×
1.0853 × 10−4 x2 − 5.26 × 10−6 x3 .
Se le coppie di dati assegnati si riferiscono ad una funzione f ( x ), la funzione di interpolazione può essere utile per approssimare le
derivate o gli integrali della f . Assumiamo che la funzione v di interpolazione sia una combinazione lineare di funzioni base di un qualche appropriato spazio di funzioni, cioè si possa scrivere come v( x) = c 0 φ0 (x ) + . . . + cn φn (x )
dove c i , i = 0, 1, . . . , n sono i coefficienti incogniti (o parametri) da determinare in base ai dati in possesso, mentre φ i sono le funzioni base che assumiamo linearmente indipendenti. Esempi di interpolazione sono dati dall’interpolazione polinomiale,
dall’interpolazione polinomiale a tratti, dall’interpolazione trigonometrica. Noi ci limitiamo a studiare l’interpolazione polinomiale e a vedere dei cenni di interpolazione polinomiale a tratti. Consideriamo, per prima, l’interpolazione polinomiale: date n + 1 coppie di punti ( xi , yi ), per i = 0 , 1 , . . . , n, andremo a cercare un polinomio p ( x ) di grado n per cui p ( xi ) = y i . Parleremo, dunque, di polinomio di interpolazione p ( x) ( v( x) ≡ p ( x)). Il processo di interpolazione si basa su due stadi: costruire la funzione interpolante, cioè determinare i coefficienti c0 , c 1 , . . . , cn per un’assegnata base φ 0 , φ1 , . . . , φn ;
valutare la funzione interpolante in un assegnato punto x .
Le funzioni φ0 , φ1 , . . . , φn si dicono linearmente indipendenti se c0 φ0 ( x ) + . . . cn φn ( x) 0 per ogni x = 0 se e solo se tutti i coefficienti sono nulli c0 = . . . = c n = 0.
≡
Il primo punto è fatto una volta per tutte, una volta fissata la base e noto l’insieme dei punti da interpolare. Il secondo punto può essere applicato tutte le volte che si vuole valutare la funzione interpolante.
appunti di calcolo numerico
6.3
83
Interpolazione polinomiale L’interpolazione polinomiale è il tipo di interpolazione più semplice. I polinomi, infatti, sono facili da costruire e da valutare, sono facili da sommare e moltiplicare (e il risultato è sempre un polinomio) e sono
altrettanto facili da differenziare e integrare (e il risultato è sempre un polinomio). Sia p (x ) = p n ( x) un polinomio di grado n dato da pn (x ) = c 0 + c1 x + . . . + cn xn Date n + 1 coppie di punti ( x0 , y0 ), ( x1 , y1 ), . . ., ( xn , yn ), vogliamo trovare gli n + 1 coefficienti c0 , c1 , . . . cn tali che p ( xi ) = y i , i = 0, . . . , n.
Assumiamo, inoltre, che le ascisse delle coppie dei punti siano distinte, cioè x i = x j , per i = j . 6.3.1
Ricordiamo che, un polinomio di grado n ha n + 1 coefficienti e che, date n + 1 coppie di punti, il polinomio interpolatore sarà di grado
n.
Funzioni base monomiali Utilizziamo come funzioni base i monomi x 0 , x1 , x2 , . . . , xn .
In questo caso, le funzioni base φi ( x ) sono date da φi ( x ) = x i , per i = 0, 1 , . . . , n.
Esempio Sia n + 1 = 2: abbiamo quindi due coppie di dati
xi 1 2 yi 1 3 Cerchiamo quindi un polinomio di primo grado (una retta) che passi per i punti assegnati, della forma p (x ) = p 1 ( x) = c0 + c1 x. Le condizioni di interpolazione diventano: p1 ( x0 ) = y 0 ⇐⇒ c0 + 1c1 = 1 p1 ( x1 ) = y 1 ⇐⇒ c0 + 2c1 = 3 Abbiamo due equazioni in due incognite c 0 e c 1 . Risolvendo il sistema 2 2 otteniamo c 1 = 2 e c 0 = 1, quindi p 1 ( x) = 2 x 1.
×
−
−
Esempio Consideriamo adesso un ulteriore coppia di punti
per cui i dati che abbiamo sono n + 1 = 3 e xi 1 2 4 yi 1 3 3 Il problema è ora diverso rispetto a quello appena risolto, perchè la terza coppia di punti specifica una valore y 2 ben diverso da quello predetto da p 1 in x 2 = 4 . Difatti p 1 ( x2 ) = 7 , nell’esempio precedente, mentre ora al valore di x 2 = 4 deve corrispondere y 2 = 3. Cerchiamo il polinomio di grado 2, quindi, della forma p 2 (x ) = c0 + c1 x + c2 x2 che passa attraverso i punti dati. Le condizioni di interpolazione adesso sono:
p2 (x0 ) = c 0 + 1c1 + 1c2 = 1 p2 (x1 ) = c 0 + 2c1 + 4c2 = 3 p2 (x2 ) = c 0 + 4c1 + 16c2 = 3
84 annamaria mazzia
Abbiamo un sistema lineare di 3 equazioni in 3 incognite, la cui 7 2 soluzione è: c 0 = − , c1 = 4, c2 = − . 3 3 Il polinomio è p2 ( x) = (−2x2 + 12 x − 7)/3. Per x = 3 si ha 11 p2 (3) = = 3.666666667 , valore ben diverso da p 1 (3) = 5 . Del resto 3 le curve che abbiamo ottenuto coincidono solo nei punti d’appoggio comuni a entrambe, una è una retta, l’altra è un polinomio di secondo
grado (si veda Figura 6 .3).
Figura 6.3: Interpolazione lineare e quadratica
Generalizzando gli esempi precedenti, date n + 1 coppie di punti, il polinomio di interpolazione di grado n sarà costruito risolvendo un sistema lineare di n equazioni nelle n incognite c 0 , c1 , . . . , cn :
pn ( x0 ) = y 0 ⇐⇒ c0 + c1 x0 + c2 x02 + . . . + cn x0n = y 0 pn ( x1 ) = y 1 ⇐⇒ c0 + c1 x1 + c2 x12 + . . . + cn x1n = y 1 pn ( x2 ) = y 2 ⇐⇒ c0 + c1 x2 + c2 x22 + . . . + cn x2n = y 2 .. .. . . pn ( xn ) = y n ⇐⇒ c0 + c1 xn + c2 x2n + . . . + cn xnn = y n
In forma compatta, sotto forma matriciale le equazioni del sistema si
Questo argomento verrà approfondito nel
possono scrivere come
Capitolo 9, dove rimandiamo per i dettagli.
1 x0 x02 . . . x0n c0 y0 2 n 1 x 1 x1 . . . x 1 c1 y1 c2 = y2 1 x2 x22 . . . x2n .. .. .. .. .. .. . . . . . . 2 n 1 xn xn . . . xn cn yn La matrice dei coefficienti è una matrice ben nota in letteratura e prende il nome di matrice di Vandermonde. È una matrice con determinante diverso da zero, e quindi il sistema ammette una ed una sola soluzione. Osserviamo che la prima colonna ha tutti gli elementi uguali a 1 , la seconda colonna ha le ascisse dei punti di appoggio, la
terza colonna ha i quadrati di esse, e così via.
Alexandre-Theophile Vandermonde, (17351796), abbandonò una carriera da violinista per dedicarsi alla matematica quando aveva 35 anni. Si occupò di vari problemi di algebra, di topologia, calcolo combinatoriale, e teoria dei determinanti.
Perciò, date n + 1 coppie di punti di appoggio ( xi , yi ), i = 0, . . . , n,
con ascisse distinte x i , esiste un unico polinomio interpolatore p( x) di grado al più n tale che p ( xi ) = y i , i = 0, . . . , n. Tuttavia, la matrice di Vandermonde non ha buone proprietà: difatti è una matrice malcondizionata, e questo lo si osserva al crescere di n in quanto la soluzione del sistema diventa inaccurata, qualunque
metodo venga utilizzato per risolverlo. Questo approccio ci è servito per dimostrare che il polinomio di interpolazione esiste ed è unico, ma non è utile nella pratica a causa del malcondizionamento. Sarebbe preferibile, quindi, poter usare funzioni base diverse dai monomi in modo da evitare il malcondizio-
namento, avere meno operazioni dal punto di vista computazionale e poter manipolare in maniera più efficiente le funzioni basi φi in vista di una loro applicazione nella differenziazione e integrazione numerica.
Una matrice A è malcondizionata quando, a piccole variazioni sui coefficienti della matrice, corrispondono grandi variazioni nella soluzione del sistema lineare A x = b
appunti di calcolo numerico
6.3.2
85
Polinomi di Lagrange Scriviamo il polinomio p (x ) con i coefficienti c i uguali alle ordinate dei punti d’appoggio y i , c i ≡ yi : p( x) = p n (x ) = y 0 φ0 ( x) + . . . yn φn ( x)
Così facendo i coefficienti c i non sono incognite! Bisogna ora capire come scrivere le funzioni di base φi ( x ).
Una base di funzioni che ci permette una simile rappresentazione
è data dai polinomi di Lagrange. I polinomi di Lagrange L j ( x), per j = 0, 1, . . . , n sono polinomi di grado n che, nei nodi x i , soddisfano la relazione L j ( xi ) =
Joseph Louis Lagrange (1736-1813) nacque a Torino (come Giuseppe Luigi Lagrangia) e si trasferì in Francia, a Parigi, dove divenne cittadino francese adottando la traduzione francese del suo nome. Matematico e astronomo, diede un importante contributo alla meccanica classica e celeste e alla teoria dei
0 se i = j 1 se i = j
In questo modo, il polinomio pn ( x) = ∑ jn=0 L j (x ) · y j è tale che pn ( xi ) = y i cioè soddisfa la condizione di interpolazione, per ogni i = 0, . . . , n. I polinomi di Lagrange sono definiti dalla relazione:
numeri.
Ricordiamo che, dati n valori w1 , w2 , . . . , wn usiamo la seguente simbologia per indicare la loro somma e il loro prodotto, rispettiva-
n (x − x ) k L j ( x) = ∏ x x − ( k) k=0 j
mente:
= j k
n
In forma estesa abbiamo n x−x (x − x0 ) · · · ( x − x j −1 )( x − x j+1 ) · · · (x − xn ) k L j ( x) = =∏ (x j − x0 ) · · · (x j − x j −1 )( x j − x j +1 ) · · · ( x j − xn ) k=0 x j − xk
∑ wi = w1 + w2 + w3 + . . . + wn
i=1 n
∏ wi = w1 · w2 · w3 · . . . · wn .
i=1
= j k
Esempio Siano date le tre coppie di punti dell’esempio prece-
dente ( 1, 1), ( 2, 3), ( 4, 3). I polinomi di Lagrange sono: (x (1 (x L1 ( x ) = (2 (x L2 ( x ) = (4
L0 ( x ) =
− 2)( x − 4) = (x − 2)( x − 4) − 2)(1 − 4) 3 − 1)( x − 4) = − (x − 1)( x − 4) − 1)(2 − 4) 2 − 1)( x − 2) = (x − 1)( x − 2) − 1)(4 − 2) 6
Figura 6.4: Polinomi di Lagrange L0 ( x), L1 ( x), L 2 ( x), con x 0 = 1 , x 1 = 2 , x 2 = 4 . Si osservi, per ciascuno di essi, la proprietà per la quale L j ( xi ) = 1 se i = j e L j ( xi ) = 0 se i = j .
Il polinomio si scrive, quindi, come
1 3 3 p2 ( x) = L 0 ( x) · 1 + L1 ( x) · 3 + L2 ( x ) · 3 = ( x − 2)( x − 4) − ( x − 1)( x − 4) + ( x − 1)( x − 2) 3 2 6 Raccogliendo i termini ritroviamo p2 ( x) = ( 2x2 + 12x 7)/3, lo
−
−
stesso polinomio ottenuto con le funzioni base monomiali, e ciò è dovuto all’unicità del polinomio interpolatore.
6.3.3
Formula dell’errore Supponiamo, ora, che le ordinate y i siano i valori di una funzione f continua in un intervallo [ a, b] (e con le derivate fino all’ordine n + 1
86 annamaria mazzia
continue) valutata nei punti di appoggio x i . Per ipotesi, i punti x i siano distinti tra loro. Conosciamo, quindi, una funzione f e di questa funzione vogliamo fare l’interpolazione sostituendola mediante un polinomio di grado n tale che p (xi ) = f ( xi ) = y i , i = 0, . . . , n. In queste ipotesi, l’errore che si commette interpolando la funzione f con un polinomio p ( x) di grado n vale
f (x ) − p( x) =
f (n+1) (ξ ( x)) n ( x − xi ) (n + 1)! ∏ i =0
dove ξ ( x) è un punto, che non conosciamo e che dipende da x , che si trova all’interno dell’intervallo [ a , b]. La formula che abbiamo scritto
per l’errore è anche chiamata formula del resto di Lagrange. Dimostrazione della formula del resto di Lagrange. Proviamo questo risultato introducendo il polinomio F ( x) di grado n + 1 che si annulla nelle n + 1 ascisse dei dati assegnati. n
F ( x ) = ∏ ( x − xk ) k=0
Consideriamo, inoltre, un punto t distinto dai punti di appoggio e compreso nell’intervallo individuato dai valori minimo e massimo delle ascisse dei punti di appoggio. f (t) − p(t) Definiamo la quantità S che dipende da t , data da S = F (t ) e la funzione G ( x) = f (x ) − p( x) − SF ( x). La funzione G si annulla non solo negli n + 1 punti d’appoggio poichè G ( xi ) = f (xi ) − p(xi ) − SF ( xi ) = 0 per i = 0, . . . , n ma anche in t a causa di come è stato definito S . Si annulla, quindi, in n + 2 punti. Per il teorema di Rolle, la derivata prima si annulla n + 1 volte nell’intervallo (individuato dalle ascisse dei punti di appoggio). Applicando ripetutamente il teorema di Rolle sulle derivate successive, si arriva alla derivata n + 1-sima di G , che si annulla almeno 1 volta nell’intervallo. Sia ξ il punto in cui G (n+1) (ξ ) = 0. Ma G(n+1) (ξ ) = f (n+1) (ξ ) − S(n + 1)!
Si ha perciò: f (t ) − p(t) f (n+1) (ξ ) = S = F (t ) (n + 1)! Considerando, ora, x al posto di t , e scrivendo ξ come funzione di x (in quanto il valore di ξ dipende da x ) e scrivendo in forma estesa il polinomio F (x ), otteniamo
f (n+1) (ξ ) − S(n + 1)! = 0
ovvero
f (n+1) (ξ ( x)) n f (x ) − p( x) = ( x − xk ) (n + 1)! k∏ =0 Il resto normalmente è incognito ma se conosciamo la f e una maggiorazione della f (n+1) , e abbiamo un limite superiore per
allora possiamo maggiorare l’errore di interpolazione.
n
| ∏ ( x − x k )|, k =0
La derivata n + 1-sima di un polinomio di grado n è una quantità nulla, mentre la derivata n + 1-sima di un polinomio di grado n + 1, quale è F ( x ), vale ( n + 1)!.
appunti di calcolo numerico
6.3.4
87
Differenze divise e formula di Newton Uno dei punti forti della rappresentazione di Lagrange è che se alcuni dati cambiano (ad esempio il valore di y j per un certo j ) allora il cambiamento è immediatamente visibile nell’intero polinomio di interpolazione. Uno dei punti deboli, invece, è la procedura per valutare p n (x ). Con la formula di Newton, al contrario, abbiamo un utile compromesso. Le funzioni base che ora consideriamo sono φ j ( x) =
j −1
∏ ( x − xi )
j = 0, 1, . . . , n
i =0
Questa volta, scriveremo il polinomio di interpolazione come: p(x ) = c 0 + c1 ( x − x0 ) + c2 ( x − x0 )( x − x1 ) + . . . + cn ( x − x0 )( x − x1 ) · . . . ( x − xn−1 )
dove c 0 , c 1 . . . cn sono delle costanti da definire in modo opportuno. Vediamo in che modo con l’esempio che segue. Esempio Consideriamo sempre le tre coppie di punti degli
esempi precedenti, ( 1, 1), ( 2, 3) e ( 4, 3). Per costruire p 2 (x ) abbiamo bisogno di φ0 , φ 1 e φ 2 :
Questo esempio ci permette di capire come si costruiscono i coefficienti c 0 , c1 , ....
φ0 ( x ) = 1
− x0 ) = ( x − 1 ) φ2 ( x ) = ( x − x0 )( x − x1 ) = ( x − 1)( x − 2) φ1 ( x ) = ( x
La condizione di interpolazione in x 0 = 1 porta a: f ( x0 ) = 1 = p 2 ( x0 ) = p 2 (1) = c 0 φ0 (1) + c1 φ1 (1) + c2 φ2 (1) = c 0 · 1 + c1 · 0 + c2 · 0
Quindi c 1 = 1 = f ( x0 ). In x 1 = 2 abbiamo: f ( x1 ) = 3 = p 2 ( x1 ) = p 2 (3) = f (x0 ) + c1 φ1 (2) + c2 φ2 (2) = f ( x0 ) + c1 · 1 + c2 · 0
3−1 f ( x1 ) − f ( x0 ) Ricaviamo quindi c1 = = = 2. Chiamiamo 2−1 x 1 − x0 questa quantità differenza divisa del primo ordine tra x 0 e x 1 e la indichiamo con f [ x0 , x1 ]. Quindi c1 = f [ x0 , x1 ] =
f ( x1 ) − f ( x0 ) x 1 − x0
Infine, f (x2 ) = 3 = p 2 (x2 ) = p 2 (4) = f ( x0 ) + f [ x0 , x1 ]φ1 (4) + c2 φ2 (4) = f ( x0 ) + f [ x0 , x1 ]( 4 − 1) + c2 (4 − 1)(4 − 2)
Per ottenere una formula per c 2 che abbia carattere generale, riscriviamo l’equazione precedente utilizzando i simboli x 0 , x 1 , x 2 per le ascisse. In x 1 si ha f (x1 ) = p 2 ( x1 ) = f ( x0 ) + f [ x0 , x1 ]( x1 − x0 ).
88 annamaria mazzia
In x2 si ha f ( x2 ) = p2 ( x2 ) = f (x0 ) + f [ x0 , x1 ]( x2 − x0 ) + c2 ( x2 − x0 )( x2 − x1 ). Sottraendo membro a membro la prima equazione dalla seconda si ricava: f (x2 ) − f ( x1 ) = f [ x0 , x1 ] [(x2 − x0 ) − (x1 − x0 )] + c2 ( x2 − x0 )( x2 − x1 ) vale a dire f (x2 ) − f ( x1 ) = f [ x0 , x1 ]( x2 − x1 ) + c2 (x2 − x0 )( x2 − x1 )
Quindi f (x2 ) − f ( x1 ) − f [ x0 , x1 ]( x2 − x1 ) = c 2 (x2 − x0 )( x2 − x1 ) f ( x2 ) − f ( x1 ) x − x1 − f [ x0 , x1 ] 2 = c 2 (x2 − x0 ) x2 − x1 x2 − x 1 f ( x2 ) − f (x1 ) − f [x0 , x1 ] = c2 (x2 − x0 ) x2 − x1 f ( x2 ) − f (x1 ) Ma = f [ x1 , x2 ] è la differenza divisa del primo ordine x2 − x1 tra x 1 e x 2 da cui f [x1 , x2 ] − f [ x0 , x1 ] = c 2 (x2 − x0 )
⇒ c2 =
=
f [ x1 , x2 ] − f [ x0 , x1 ] x2 − x0
La quantità chiamata c2 prende il nome di differenza divisa del secondo ordine e si indica con f [x0 , x1 , x2 ] =
f [ x1 , x2 ] − f [ x0 , x1 ] . x 2 − x0
4 2 Facendo le opportune sostituzioni si ricava c 2 = − = − . Quin6 3 di, p2 (x ) = f (x0 ) + f [ x0 , x1 ]( x − x0 ) + f [ x0 , x1 , x2 ]( x − x0 )( x − x1 ) 2 Nell’esempio considerato: p2 ( x) = 1 + 2( x − 1) − ( x − 1)( x − 2) 3
Da questo esempio, si può vedere come la rappresentazione secondo Newton sia di tipo ricorsivo: il polinomio p1 ( x) = f (x0 ) + f [ x0 , x1 ]( x − x0 ) (che si ha arrestandosi ai primi due passi del procedimento appena effettuato) è un polinomio, in tal caso una retta, che interpola i dati ( x0 , y0 ), e ( x1 , y1 ). Il polinomio p 2 ( x ) è dato dalla somma di p1 (x ) e del termine f [ x0 , x1 , x2 ]( x − x0 )( x − x1 ). Quindi, una volta determinato il polinomio p n−1 che interpola i primi n dati, possiamo usare questa rappresentazione per costruire p n che interpola i dati precedenti cui si aggiunge la coppia ( xn , yn ). Il coefficiente c j del polinomio interpolatore di Newton si chiama differenza divisa di ordine j e viene indicata con f [ x0 , x1 , . . . , x j ]. Perciò: f [x0 ] = c 0 , f [ x0 , x1 ] = c 1 , . . . , f [ x0 , x1 , . . . , xn ] = c n La notazione utilizzata ci permette di capire anche da quali coppie
di punti dipende il coefficiente c j .
Date le stesse coppie di punti, cambia il modo per arrivare al polinomio di interpolazione, usando come funzioni base i monomi, o i polinomi di Lagrange e ora la formulazione di Newton, ma il polinomio finale è sempre lo stesso essendo unico il polinomio interpolatore.
appunti di calcolo numerico
89
Dati i punti x 0 , x1 , . . . , xn , per indici i e j arbitrari con 0 ≤ i ≤ j ≤ n, si ha f [ xi ] = f (xi ) f [ xi+1 , . . . x j ] − f [ xi , . . . , x j−1 ] f [ xi , . . . , x j ] = x j − xi
La formula interpolatoria alle differenze divise di Newton è dunque data da pn (x ) = f [ x0 ] + f [ x0 , x1 ]( x − x0 ) + f [ x0 , x1 , x2 ]( x − x0 )( x − x1 ) + . . . + f [ x0 , x1 , . . . , xn ]( x − x0 )( x − x1 ) · · · ( x − xn−1 )
Da un punto di vista computazionale i coefficienti si ricavano mediante la tabella delle differenze divise, tenendo presente che per calcolare f [ x0 , x1 , . . . , xn ] dobbiamo aver calcolato tutte le differenze divise f [ x j−k , . . . , x j ], con 0 ≤ k ≤ j ≤ n. xi x0
f [· ] f ( x0 )
f [·, · ] f [ x0 , x1 ] =
x1
f [ x2 ] − f [ x1 ] x2 − x1
f ( x2 )
f [ x3 ] − f [ x2 ] x3 − x2
.. .
...
,x ,x f [ x0 ,x1 ,x2 ] = f [x1 2 x33]− − x0
f [ x1 , x2 , x3 , x4 ] = ,x ,x f [ x1 ,x2 ,x3 ] = f [x2 3 x44]− − x1
.. .
f [ x4 ] − f [ x3 ] x4 − x3
.. .
.. .
I coefficienti della diagonale principale sono i coefficienti c j del polinomio interpolatore di Newton. Esempio Costruiamo la tabella delle differenze divise per i
dati ( 1, 1), ( 2, 3) e ( 4, 3).
f [ x0 , x1 , x2 , x3 , x4 ] = ,x ,x ,x − ,x ,x ,x = f [ x1 2 3 x44]− f x0[ x0 1 2 3 ]
f [ x2 , x3 , x4 ] = f [ x3 , x4 ] − f [ x2 , x3 ] = x4 − x2 f [ x3 , x4 ] =
f ( x4 )
f [ x0 , x1 , x2 , x3 ] = f [ x1 , x2 , x3 ] = f [ x2 , x3 ] − f [ x1 , x2 ] = x3 − x1
f ( x3 )
x4
f [ ·, ·, · , ·, ·]
f [ x0 , x1 , x2 ] = f [ x1 , x2 ] − f [ x0 , x1 ] = x2 − x0
f [ x2 , x3 ] = x3
f [·, · , ·, ·]
f [ x1 ] − f [ x0 ] x1 − x0
f ( x1 )
f [ x1 , x2 ] = x2
f [· , ·, ·]
.. .
90 annamaria mazzia
xi 1
f [·] 1
2
3
4
2 ).
3
f [·, ·]
3−1 = 2 2−1 3−3 = 0 4−2
f [·, ·, ·]
0−2 2 =− 4−1 3
2 Il polinomio p 2 ( x) si scrive: p2 ( x) = 1 + 2( x − 1) − ( x − 1)( x − 3 Se vogliamo aggiungere altri dati, per esempio, la coppia (5, 4),
dobbiamo aggiungere una riga alla tabella della differenza divisa e un termine al polinomio che abbiamo già ricavato per ottenere quello di
grado superiore interpolante tutti i dati che abbiamo a disposizione. xi 1
f [·] 1
2
3
4 5
3 4
f [·, ·]
3−1 = 2 2−1 3−3 = 0 4−2 4−3 = 1 5−4
f [·, ·, ·]
0−2 2 =− 4−1 3 1−0 1 = 5−2 3
f [·, ·, ·, ·]
1 −2 − 3 1 3 = 5−1 4
1 Il polinomio p 3 (x ) è p 3 ( x) = p 2 ( x) + (x − 1)( x − 2)( x − 4). 4
Differenze divise e derivate. La differenza divisa k -sima e la derivata k-sima di f sono legate tra loro. Si può provare, infatti, per k ≥ 1 che vale la relazione f (k) (ξ ) k! dove ξ è un punto appartente all’interno dell’intervallo individuato dai nodi x 0 , . . . , xk . Quando i punti coincidono, si ha f [x0 , x1 , . . . , xk ] =
f [x0 ,x0 ,...,x0 ] =
k+1 volte
f (k) ( x0 ) k!
Questa formula serve per calcolare il polinomio di interpolazione che
interpola non solo una certa funzione f ma anche le sue derivate in alcuni punti assegnati (si veda l’esercizio 6 .6.3 a fine Capitolo). Relazione tra differenze divise ed errore di interpolazione. Se al polinomio pn ( x) aggiungiamo la coppia di dati ( x, f ( x)) si ha pn+1 (x ) = f (x ) = p n ( x) + f [ x0 , x1 , . . . , xn , x]( x − x0 )( x − x1 ) · . . . (x − xn ).
Il concetto di differenza divisa può essere visto come un’estensione del concetto di derivata di una funzione. Si ha, infatti, che, per f derivabile, la differenza divisa del primo ordine f [ x0 , x1 ] può essere vista come un rapporto incrementale e quindi, al limite per x1 x0 , si ha f (x0 ). Il discorso si estende
→
alle differenze divise di ordine superiore.
appunti di calcolo numerico
91
L’ultima differenza divisa non si può calcolare, poichè dipende da x (che è la nostra variabile), ma ci è utile per capire quanto vale l’errore che commettiamo nell’approssimare f (x ) mediante il polinomio interpolatore, applicando la rappresentazione di Newton. Inoltre, dato
che il polinomio interpolatore è unico (fissate le coppie di dati del problema), anche l’errore che si commette è lo stesso, qualunque sia la strategia utilizzata per arrivare ad esso. Quindi possiamo eguagliare l’errore trovato utilizzando i polinomi di Lagrange con l’errore trovato
nella rappresentazione di Newton, ottenendo: n f (n+1) (ξ ( x)) n − , , . . . , , ( ) = [ ] x x f x x x x n 0 1 i ∏( x − xi ) (n + 1)! ∏ i =0 i =0
6.4
6.4.1
Considerazioni sull’interpolazione polinomiale Fenomeno di Runge Data una funzione f , si pensa che il polinomio di interpolazione possa approssimare bene la funzione, soprattutto se si aumenta il numero dei punti di appoggio. In realtà questo non è sempre vero e un semplice e famoso esempio ce lo fa capire. Sia data la funzione di
1 e consideriamo il polinomio di interpolazione di 1 + x2 questa funzione per valori crescenti di n prendendo punti di appoggio equidistanti nell’intervallo [ −5, 5]. Partiamo da n + 1 = 2 con i punti equidistanti x 0 = −5, x 1 = 0 e x 2 = 5. Si ha la tabella Runge f ( x) =
xi −5 yi = f ( xi ) 3.846154 e − 2
Carl Runge (1856-1927) fu un matematico tedesco. Fu studente di Weierstrass, Kirchhoff, Helmholtz. Iniziò poi a collaborare con Kronecker e poi si dedicò in particolare allo studio della soluzione numerica di equazioni algebriche e alla spettroscopia.
0 5 1. 3.846154 e − 2
Costruiamo quindi il polinomio di interpolazione p 2 ( x ) (utilizzando uno degli approcci proposti, monomiale, Lagrange o Newton, i risultati non cambiano). Raddoppiamo il numero dei punti aggiungendo un punto tra x 0 e x 1 e uno tra x 1 e x 2 . Abbiamo n + 1 = 5 e i valori
della tabella xi −5 yi = f ( xi ) 3.846154 e − 2
−2.5
0 1.379310e − 1 1.
2.5 5 1.379310 e − 1 3.846154e − 2
Con lo stesso procedimento, costruiamo i polinomi di interpolazione
di grado 8 e 16. In Figura 6 .5 sono riportati i grafici della funzione di Runge (in nero) e dei polinomi interpolanti di grado 2, 4 e 8. Si può osservare che solo in un sottointervallo di [ −5, 5] al crescere di n, i polinomi convergono alla funzione. Agli estremi dell’intervallo [−5, 5] si hanno oscillazioni che aumentano sempre più al crescere di n. Con n = 16 si ha il polinomio riportato in Figura 6 .6 (in alto), che non permette di distinguere il profilo della funzione di Runge a causa
delle oscillazioni molto forti. Solo se restringiamo il grafico in un intorno dell’origine, possiamo vedere come il profilo del polinomio p16 si avvicini bene alla funzione – si veda la Figura 6 .6 (in basso)!
92 annamaria mazzia
Figura 6.5: Funzione di Runge e polinomi interpolanti di grado 2, 4 e 8.
L’esempio di Runge è utile per capire che la scelta dei nodi equidistanti non si rivela sempre la scelta giusta e che occorrono altre strategie nella scelta dei nodi per ottenere migliori risultati. Nell’ef (n+1) (ξ ( x)) sempio di Runge, infatti, il rapporto , che compare nella (n + 1)! formula dell’errore, cresce, al crescere di n , agli estremi dell’intervallo di interpolazione, perciò aumentando il grado del polinomio di interpolazione, aumenta l’errore! Per indagare ulteriormente su questo
problema, si rimanda alla letteratura specializzata del settore. 6.4.2
Malcondizionamento nell’interpolazione con funzioni base monomiali
All’inizio di questo Capitolo, abbiamo introdotto il polinomio di interpolazione mediante funzioni base monomiali: utilizzando questa
strada, i coefficienti del polinomio si ricavano risolvendo un sistema lineare la cui matrice, di Vandermonde, è malcondizionata. A causa del malcondizionamento, questo approccio può portare a risultati errati! Vediamo di capire il malcondizionamento mediante un esempio. Si voglia studiare l’interpolazione dei seguenti dati xi 1010.5 yi 4
1011.5 2 .5
1012.5 2 .5
1013 2
1014 2
Figura 6.6: Funzione di Runge e polinomio interpolante di grado 16 su tutto l’intervallo [ 5, 5] (in alto) e in un sottointervallo ristretto
−
(in basso)
1015 0
Confrontando i vari algoritmi di interpolazione, osserveremo che gli algoritmi di Lagrange e delle differenze divise di Newton danno buoni risultati. Al contrario, il metodo che porta alla costruzione della
matrice di Vandermonde dà risultati disastrosi, come si può vedere in Figura 6 .7. Eppure, dal punto di vista teorico i risultati dovrebbero
essere identici.
Figura 6.7: Effetti del malcondizionamento
appunti di calcolo numerico
93
Perchè si hanno questi risultati? Bisogna tener conto di tre aspetti:
il calcolo della matrice di Vandermonde; la soluzione del sistema lineare per ricavare i coefficienti del polinomio con funzioni base monomiali; il calcolo dei valori del polinomio. La matrice di Vandermonde consiste di colonne i cui valori crescono di colonna in colonna - 1, xi , x2i , x3i , . . ., x5i . Per questo caso test, si va da 1 a elementi dell’ordine di 10 15 . La matrice è molto mal condizionata. Perciò la soluzione del sistema lineare non può dare risultati affidabili e il vettore che fornisce i coefficienti del polinomio
interpolatore è completamente errato. Ciò porta anche al fenomeno della cancellazione numerica nel calcolo del polinomio di interpolazione, per cui si ha una significativa perdita di accuratezza e il grafico
risultante presenta un profilo altamente oscillante. 6.5
Interpolazione polinomiale a tratti Abbiamo visto, nell’esempio di Runge, che l’interpolazione polinomiale con nodi equidistanti non porta a una buona interpolazione, in quanto l’errore, che dipende dalla derivata f n+1 (x ), aumenta al crescere di n . Nel caso dell’esempio di Runge, una diversa scelta di nodi può portare a buoni risultati, ma resta il fatto che se il rapporto f n+1 (x ) aumenta al crescere di n , anche l’errore rimane elevato. (n + 1)!
Aumentando il numero dei punti di appoggio, il polinomio di interpolazione porta forti e irragionevoli oscillazioni al di fuori dell’intervallo dei nodi, come si può vedere nell’esempio mostrato in Figura 6 .8. A volte, se la funzione da interpolare è continua a tratti, il termine dell’errore può essere ancora grande anche all’interno dell’intervallo
dei nodi. In Figura 6.9, sono messi a confronto il polinomio di interpolazione di grado n = 5 che interpola la funzione f ( x) = |x| + 1 prendendo 6 punti equidistanti nell’intervallo [−1, 1] e il polinomio di interpolazione della funzione f ( x) = e x nello stesso intervallo e con gli stessi punti. Mentre nel caso della funzione f ( x) = e x il polinomio di interpolazione, nell’intervallo dei nodi, si sovrappone alla funzione interpolata, per la funzione f ( x) = | x| + 1 l’errore è ben evidente.
Figura 6.8: Interpolazione della funzione
f ( x) = exp( x) con n = 20 (in alto) e n = 40 (in basso). I nodi di interpolazione sono nell’intervallo [ 0, 1].
Figura 6.9: Interpolazione della funzione
f ( x) = | x| + 1 (a sinistra) e della funzione f ( x) = e x (a destra) con n = 5 nell’intervallo [ −1, 1]
Se, in alcuni casi, la scelta dei nodi, fatta in maniera opportuna, può
risolvere determinati problemi che si incontrano nell’interpolazione,
94 annamaria mazzia
altre volte il polinomio di interpolazione produce risultati comunque
non buoni, indipendentemente dalla scelta dei nodi. La domanda, allora, è la seguente: come possiamo ridurre il termine dell’errore senza aumentare il grado n nell’interpolazione e, tuttavia, mantenendo un numero elevato di nodi? La risposta viene dall’interpolazione polinomiale a tratti. Supponiamo di voler costruire una curva che interpola dei dati che si trovano all’interno di un certo intervallo [ a , b]. Prenderemo dei punti all’interno di questo intervallo, in modo che il primo e l’ultimo punto coincidano con a e b rispettivamente: a = x1 < x2 < . . . < xm = b . Chiamiamo questi punti nodi o punti di appoggio . A ciascun nodo è associato il valore y i da interpolare. In questo modo abbiamo m nodi in [ a, b] e possiamo considerare gli m 1 sottointervalli dati da [ x1 , x2 ], [ x2 , x3 ], . . . fino ad arrivare a [ xm−1 , xm ] (da cui il generico sottointervallo è dato da [ xi , xi+1 ] con i = 1, 2, . . . , m 1). Su ciascun
−
−
sottointervallo andremo a costruire un polinomio di interpolazione di grado basso (considereremo n = 1 e n = 3), che chiamamo s i (x ). La funzione di interpolazione "globale" sarà una curva v ( x) continua (in alcuni casi anche di classe C 1 o C 2 ) che soddisfa la relazione v( x) = s i ( x),
Come si può notare, abbiamo cambiato la numerazione dei nodi (non più da x 0 a x n ma da x 1 a x m ) per evitare confusioni con quanto detto prima sull’interpolazione polinomiale. Inoltre i nodi sono ordinati in modo crescente, ordine non necessario quando si fa l’interpolazione polinomiale.
xi ≤ x ≤ xi+1 , i = 1, 2, . . . , m − 1.
Ci sono diversi tipi di interpolazione polinomiale a tratti. Noi ne consideriamo solamente due: l’interpolazione lineare a tratti e le spline cubiche. 6.5.1
Interpolazione lineare a tratti Il caso più semplice da considerare è prendere, su ciascun sottointervallo [ xi , xi+1 ] un polinomio di interpolazione lineare (grado n = 1), quindi una retta. Allora la funzione v ( x) sarà continua (ma non avrà
le derivate continue) in tutto l’intervallo. Nell’intervallo [ xi , xi+1 ], il polinomio di interpolazione si ( x) si può costruire facilmente applicando, ad esempio, la formula delle differenze divise di Newton, da cui s i ( x) = y i + f [ xi , xi+1 ]( x − xi ). Globalmente avremo v ( x) tale che v(x ) = s i ( x ) = y i + f [ xi , xi+1 ]( x − xi ),
xi ≤ x ≤ xi+1 ,
i = 1, 2, . . . , m − 1.
Un esempio di interpolazione lineare a tratti si ha in Figura 6.10. Il grande vantaggio di usare questo tipo di interpolazione è la sua semplicità e facilità. Tuttavia spesso questo tipo di interpolazione non è sufficiente perchè non è abbastanza regolare (c’è discontinuità nelle derivate ai punti di appoggio) e in molte applicazioni, invece, serve che ci sia continuità anche nelle derivate. Per avere maggiore continuità (vogliamo ad esempio che la funzione di interpolazione v(x ) sia di classe C 1 o C 2 ), si deve aumentare il grado del polinomio si ( x ) su ciascun sottointervallo. La scelta più diffusa è quella di usare polinomi cubici. Tra i polinomi cubici c’è l’interpolazione cubica di Hermite a tratti (che non descriviamo) e l’interpolazione spline cubica
(che vedremo più nei dettagli).
appunti di calcolo numerico
95
Figura 6.10: Esempio di interpolazione lineare a tratti
6.5.2
Interpolazione spline cubica Su ciascun sottointervallo, consideriamo un polinomio di terzo grado (n = 3), da cui la funzione globale v (x ) sarà:
v(x ) = s i ( x ) = a i + bi ( x − xi ) + ci (x − xi )2 + di ( x − xi )3 ,
xi ≤ x ≤ xi+1 , i = 1, 2, . . . m − 1
Quindi su ciascun sottointervallo abbiamo un polinomio cubico, che dipende da quattro coefficienti ( ai , bi , ci , di ). Per ora, questi coefficienti sono incogniti, e poichè abbiamo 4 incognite su m − 1 sottointervalli, abbiamo un totale di 4 (m − 1) incognite. Come determinare queste
incognite? Imponendo non solo le condizioni di interpolazione (ricordiamo che noi abbiamo non solo le ascisse x i ma anche le ordinate y i e la condizione di interpolazione si legge come v ( xi ) = y i ), ma anche
la continuità della derivata prima e della derivata seconda nei punti di raccordo tra un sottointervallo e il successivo. Abbiamo quindi le seguenti condizioni da imporre: si (xi ) = y i , si ( xi+1 ) = y i+1 , si ( xi+1 ) = s i+1 (xi+1 ), si ( xi+1 ) = s i+1 (xi+1 ),
i = 1, 2, . . . , m − 1 i = 1, 2, . . . , m − 1 i = 1, 2, . . . , m − 2 i = 1, 2 , . . . , m − 2
Osserviamo che le condizioni di continuità delle derivate prime e seconde le possiamo imporre solo nei punti interni, e non in x 1 e x m , il primo e l’ultimo punto. Le condizioni che abbiamo appena scritto sono 2 (m − 1) + 2(m − 2) = 4 (m − 1) − 2. Abbiamo 2 condizioni in meno rispetto alle 4 ( m − 1) incognite che dobbiamo determinare! Le due condizioni che mancano vengono imposte su punti estremi x 1 e x m e, in base alle condizioni imposte si hanno le cosiddette spline naturali, complete e not-a-knot. Nelle spline naturali si richiede s1 ( x1 ) = sm−1 ( xm ) = 0. Nelle spline complete, vengono specificati i valori delle derivate prime per s 1 ( x1 ) e per s m−1 (xm ). Invece per le spline not-a-knot si richiede la continuità della derivata terza di s 1 e di s m−1 in x 2 e in x m−1
Da un punto di vista storico, il termine spline deriva da un sottile e flessibile strumento per disegnare curve, fatto di legno o metallo, utilizzato prima dell’avvento dei computer, soprattutto nell’industria navale. Per poter passare per determinati punti, la spline era tenuta ferma da alcuni pesi, mentre alle estremità non aveva costrizioni (quindi derivata seconda nulla, come accade nelle spline naturali). La spline naturale minimizza l’energia di tensione tra tutte le funzioni che sono costrette a passare per quei punti e con la stessa continuità.
96 annamaria mazzia
Figura 6.11: Esempio di interpolazione spline cubica
rispettivamente: poichè la derivata terza è una costante (stiamo lavorando con polinomi cubici), questa condizione fa sì che s 1 = s 2 e che sm−2 = s m−1 e, in questo modo, il primo e l’ultimo nodo non sono
attivi.
Costruzione della spline cubica naturale. Tratteremo ora il caso delle spline cubiche naturali, per la loro semplicità di implementazione, cercando di capire come si ricavano i coefficienti incogniti. Poniamo h i = xi+1 − xi , i = 1, . . . , m − 1: hi rappresenta l’ampiezza del sottointervallo i -simo [ xi , xi+1 ]. Dalla relazione di interpolazione s i ( xi ) = y i si ricava facilmente ai = y i ,
i = 1, 2, . . . , m − 1
Dall’altra relazione di interpolazione s i (xi+1 ) = y i+1 si ricava ai + bi hi + ci h2i + di h3i = y i+1
cioè (sostituendo il valore per a i ): yi + bi hi + ci h2i + di h3i = y i+1 ,
i = 1, 2, . . . , m − 1
(6.1)
Useremo l’equazione (6.1) successivamente. Per usare le altre relazioni, scriviamo la derivata prima e seconda di s i . Si ha, per i = 1, 2, . . . , m − 1 si ( x) = bi + 2ci (x − xi ) + 3di ( x − xi )2 si ( x) = 2 ci + 6di ( x − xi )
2
A questo punto, dalla relazione si ( xi+1 ) = s i+1 ( xi+1 ) , i = 1, 2 , . . . , m 2 ricaviamo (osserviamo che a destra dobbiamo valutare s i+1 ( xi+1 ):
−
bi + 2ci hi + 3di h2i = bi+1 ,
i = 1, 2, . . . , m − 2
(6.2)
Dalla relazione s i ( xi+1 ) = s i+1 ( xi+1 ), i = 1, 2, . . . , m − 2 ricaviamo 2ci + 6di hi = 2 ci+1 , che si semplifica in ci + 3di hi = c i+1 ,
i = 1, 2, . . . , m − 2 i = 1, 2, . . . , m − 2
Osserviamo che, dalla relazione s i ( xi ) = 2ci si ricava il significato geometrico dei s ( xi ) coefficienti ci = i .
appunti di calcolo numerico
97
Da quest’ultima otteniamo di =
c i +1 − c i , 3hi
i = 1, 2, . . . , m − 2
(6.3)
Adesso i coefficienti d i sono in funzione dei coefficienti c i . Sostituiamo
il valore di d i appena ricavato nell’equazione (6.1) e ricaviamo b i in funzione dei coefficienti c i . abbiamo Dividiamo tutto per h i e per compattare i termini utilizziamo le differenze divise dove
yi + bi hi + ci h2i + di h3i = y i+1 c c bi hi + ci h2i + ( i+1 i )h3i = y i+1 yi 3hi c c bi + ci hi + ( i+1 i )hi = f [ xi , xi+1 ]
− −
servono.
−
3
Otteniamo, per bi , la relazione bi = f [ xi , xi+1 ] −
( 2ci + ci+1 )hi
3
,
i = 1, . . . , m − 1
(6.4)
Sostituiamo ora i valori per b i e per d i nell’equazione (6.2): bi + 2ci hi + 3di h2i = bi+1 , i = 1, 2, . . . , m − 2 f [ xi , xi+1 ] −
(2ci + ci+1 )hi
3
c + 2ci hi + 3 i+1
− ci h2 = f [xi+1 , xi+2 ] − (2ci+1 + ci+2 )hi+1
3hi
i
3
Raccogliamo i termini in h i a sinistra.
f [xi , xi+1 ] +
( ci + 2ci+1 )hi
3
= f [ xi+1 , xi+2 ]
− ( 2ci+1 + c3 i+2 )hi+1 Moltiplichiamo ambo i membri per 3 e portiamo le differenze divise a destra.
ci hi + 2ci+1 (hi + hi+1 ) + ci+2 hi+1 = 3( f [ xi+1 , xi+2 ] − f [ xi , xi+1 ]) (6.5)
Questa equazione si ha per i = 1, . . . , m − 2, quindi abbiamo un sistema di m − 2 equazioni, ma le incognite c i che abbiamo introdotto sono m : c 1 , c2 , . . . , cm . Aggiungiamo, allora, le condizioni per le spline naturali: deve essere s 1 (x1 ) = s m−1 ( xm ) = 0. Si ha s1 (x1 ) = 2 c1 = 0 sm−1 ( xm ) = 2 cm−1 + 6dm−1 hm−1 = 0 c da cui c 1 = 0 e, d m−1 = − m−1 . Di conseguenza, ponendo c m = 3 hm−1 0 possiamo estendere all’indice i = m − 1 la relazione (6.3) per i c −c coefficienti d i : d m−1 = m m−1 . 3 h m −1 Con la posizione c 1 = cm = 0 le equazioni ( 6.5), per i = 1 e per i = m − 2 si semplificano, rispettivamente, in
2c2 (h1 + h2 ) + c3 h2 = 3( f [ x2 , x3 ] − f [ x1 , x2 ]) , (6.6) cm−2 hm−2 + 2cm−1 (hm−2 + hm−1 ) =3( f [ xm−1 , xm ] − f [ xm−2 , xm−1 ]) , (6.7)
Il procedimento seguito fino a questo punto è valido qualunque sia il tipo di spline che vogliamo generare.
Aggiungendo le due condizioni che mancano, il procedimento si distingue da spline a spline.
98 annamaria mazzia
Perciò il sistema da risolvere per trovare i coefficienti c 2 , c3 , . . . , cm−1 , mettendo insieme le equazioni (6.5), (6.6),(6.7), è dato da Ac = ψ dove
−
2(h1 + h2 ) h2 0
A =
0 .. .
c =
cm
h m −3 0
··· ψ =
1
0 .. .
···
2(h2 + h3 ) h3 2(h3 + h4 ) h3 .. .. . .
0
c2 c3 .. .
0
h2
0 h4 .. .
... 0
2(hm−3 + hm−2 ) h m −2 2(hm−2 + hm−1 ) h m −2
3( f [ x2 , x3 ] − f [ x1 , x2 ]) 3( f [ x3 , x4 ] − f [ x2 , x3 ]) .. . 3( f [ xm−1 , xm ] − f [ xm−2 , xm−1 ])
Una volta ricavati i coefficienti c i , usando le equazioni ( 6.3) e ( 6.4), per i = 1, . . . , m − 1, si trovano tutti i coefficienti delle cubiche s i . Ricapitolando, per trovare i coefficienti delle spline cubiche naturali si deve: 1. risolvere
il sistema Ac = ψ che, risolto, fornisce i coefficienti c2 , c3 , . . . , cm−1 delle spline;
2.
aggiungere al vettore c , i valori c 1 = c m = 0
3.
applicare, per i = 1, . . . , m − 1 le relazioni ai = y i bi = f [ xi , xi+1 ] − c −c di = i+1 i 3hi
6.5.3
( 2ci + ci+1 )hi
3
Curve parametriche Supponiamo di avere un insieme di punti in cui le ascisse possono ripetersi e in cui si vuole che i punti vengano messi insieme per formare una particolare curva. In Figura 6.12 vediamo un esempio di punti e di curva che vogliamo ottenere: in questo caso andiamo a unire i punti nell’ordine considerato mediante segmenti di retta. Questa curva, tuttavia, non può essere espressa come funzione di x o di y perchè non è una funzione (ad ogni valore di x non corrisponde un solo valore sull’asse delle ordinate, come deve accadere per funzioni del tipo y = f ( x)). Ci troviamo di fronte ad un esempio di curva. Possiamo pensare alla curva come il percorso di una particella che si muove in funzione del tempo t e, di conseguenza, le coordinate
Figura 6.12: Esempio di curva parametrica.
appunti di calcolo numerico
99
della particella sono funzioni di t ( x = x (t), y = y (t)) . Abbiamo le cosiddette equazioni parametriche di una curva. Per poter costruire la curva di interpolazione, come nell’esempio proposto, dobbiamo, quindi, parametrizzare le coordinate ( xi , yi ), i = 1, 2, . . . , m. Dobbiamo cercare, quindi dei valori t1 , t2 , . . . tm tali che xi è il risultato di una certa funzione x al tempo t i mentre y i è il risultato di una certa funzione y allo stesso tempo t i . Dobbiamo dunque avere una rappresentazione del tipo: (t1 , x1 ), (t2 , x2 ) . . . ( tm , xm ) (t1 , y1 ), ( t2 , y2 ) . . . (tm , ym ) In tal caso, possiamo approssimare la curva x mediante le condizioni di interpolazione x ( ti ) = x i mentre la curva y dovrà verificare y (ti ) =
yi .
Se abbiamo m punti a disposizione, possiamo fissare i valori ti i come ti = i, per i = 1 , 2 , . . . , m (si può anche scegliere ti = ): m l’importante è avere dei valori crescenti per la variabile t . La curva in forma parametrica è dunque espressa da ( x(t), y(t)) . Per costruire x (t) e y (t) usiamo le tecniche di interpolazione a tratti (per esempio di interpolazione lineare a tratti o di spline cubiche a tratti) in modo da ottenere il risultato finale. In figura 6 .13 vediamo un esempio di interpolazione spline a tratti con gli stessi nodi usati per ottenere la curva di figura 6 .12. 6.6
Figura 6.13: Esempio di curva parametrica con interpolazione spline cubica a tratti (stessi nodi della figura 6.12).
Esercizi
Esercizio 6 .6.1 Sia data la tabella seguente:
xi f ( xi )
-1
0
2
3
4
9
0
0
15
84
(a) Scrivere la tabella delle differenze divise. (b) Trovare il polinomio interpolatore (con la formula di Newton) di grado non superiore a 4 .
Svolgimento
(a) La tabella delle differenza divise è: (b) Il polinomio di Newton di grado 4 che interpola i dati assegnati è dunque (prendendo i valori della diagonale principale della tabella)
p( x) = 9 − 9( x + 1) + 3( x + 1) x + 0.5(x + 1) x( x − 2) + ( x + 1) x( x − 2)( x − 3) = = x 4 − 3.5 x3 + 3.5x2 − x
100
annamaria mazzia
f (·, ·)
f (·, ·, ·)
f (·, ·, ·, ·)
xi -1
f (xi ) 9
0
0
0−9 = −9 0 − ( − 1)
2
0
0−0 = 0 2−0
0 + 9 = 3 2 − ( −1 )
3
15
15 − 0 = 15 3−2
15 − 0 = 5 3−0
5−3 = 0.5 3 − ( −1 )
4
84
84 − 15 = 69 4−3
69 − 15 = 27 4−2
27 − 5 11 = 4−0 2
Esercizio 6 .6.2 Sia data la tabella seguente:
xi f ( xi )
0
0.1
0 .8
1 .2
1
0.48
1.32
5.32
(a) Scrivere la tabella delle differenze divise. (b) Usando i quattro punti in successione, scrivere i polinomi interpolanti (di Newton) pn ( x) di grado non superiore ad n (con n=0,1,2,3); commentare il risultato. (c) Usando pn ( x) stimare, per ogni n, f (0.6) e f (0.6). (d) scrivere il polinomio p2 (x ) con la formula di Lagrange.
Svolgimento
(a) La tabella delle differenza divise è: f (·, ·)
f (·, ·, ·)
xi
f ( xi )
0
1
0.1
0.48
0.48 − 1 = −5.2 0.1
0.8
1.32
1.32 − 0.48 = 1.2 0.7
1.2 + 5.2 = 8 0.8
1.2
5.32
5.32 − 1.32 = 10 0.4
10 − 1.2 = 8 1.1
f (·, ·, ·, ·)
8−8 = 0 1.2
f (·, ·, ·, ·, ·)
11/2 − 1/2 = 1 4 − ( −1 )
appunti di calcolo numerico
(b) I polinomi di Newton di grado 0 ,1,2 e 3 sono: p0 ( x) = 1 p1 ( x) = 1 − 5.2 x p2 ( x) = 1 − 5.2 x + 8x (x − 0.1) = 8 x2 − 6x + 1 p3 ( x) = 1 − 5.2 x + 8x (x − 0.1) + 0x (x − 0.1)( x − 0.8) = 1 − 5.2 x + 8x ( x − 0.1) = p 2 ( x) Il polinomio p 3 ( x) coincide con p 2 ( x ) in quanto p 2 ( x3 ) = p 2 (1.2) = f (1.2) = f ( x3 ) cioè il polinomio di grado 2 interpola non solo i dati ( x0 , f ( x0 )) , ( x1 , f ( x1 )) e ( x2 , f (x2 )) ma anche ( x3 , f ( x3 )).
(c) Per le derivate di p n ( x), n = 0 ,1,2 si ha p0 ( x) = 0 p1 ( x) = −5.2 p2 ( x) = 16 x − 6
La stima di f (0.6) e f (0.6) è: n
pn (0.6)
pn (0.6)
0 1 2
1 -2.12 0.28
0 -5.2 3. 6
(d) I polimoni di Lagrange per ricavare il polinomio p2 sono dati considerando i valori x 0 , x 1 e x 2 : x2 0.9 x + 0.08 ( x 0.1)( x 0.8) = L0 ( x ) = 0.08 ( 0.1)( 0.8) x (x 0.8) x2 0.8 x L1 ( x ) = = 0.1(0.1 0.8) 0.07 x (x 0.1) x2 0.1 x L2 ( x ) = = 0.8(0.8 0.1) 0.56
− −
− − − −
− −
−
− − −
Il polinomio è: p2 ( x) = 1 L0 ( x) + 0.48 L1 (x ) + 1.32 L2 ( x) x2 − 0.9 x + 0.08 x2 − 0.8 x x2 − 0.1 x 0.48 − = + 1.32 0.08 0.07 0.56 2 2 = 12.5 ( x − 0.9x + 0.08) − 6.857142857( x − 0.8 x) + 2.357142857 ( x2 − 0.1 x)
e raccogliendo i termini p2 ( x) = 8 x2 − 6x + 1
Esercizio 6 .6.3 Trovare il polinomio di grado non superiore a 4 che
interpola i dati seguenti: f (0) = 2, f (0) = 7, 18, f (1) = 27 f (1) = 60. Stimare f (0.2) e f (0.2).
f (0) =
101
102
annamaria mazzia
Svolgimento Costruiamo la tabella delle differenze divise tenendo presente che
le derivate di una funzione f si possono avere come limite delle differenze divise: f [0, 0] =
f (0) = 7
f (0) f [0,0,0] = = 9 2!
f [1, 1] = f (1) = 60
Tenendo conto di queste relazioni tra differenze divise e derivate, nella tabella delle differenze divise, dobbiamo ripetere per tre volte l’ascissa 0 e due volte l’ascissa 1. Si ottiene: 0
2
f (0)=7 0
f (0)/2=9
2
f (0)=7 0
1
2
27
27 − 2 = 25 1−0 f (1)= 60
1
25 − 7 = 18 1−0 60 − 25 =35 1−0
18 − 9 = 9 1−0 35 − 18 =17 1−0
17 − 9 = 8 1−0
27
Il polinomio è dunque p ( x ) = 2 + 7x + 9x2 + 9x3 + 8x3 ( x
a dire
− 1), vale
p( x) = 8 x4 + x3 + 9x2 + 7x + 2.
La stima di f (0.2) è data da: f (0.2) ≈ p (0.2) = 3.7808. Per stimare f (0.2) dobbiamo prima calcolare la derivata prima di p. Si ha p ( x) = 32 x3 + 3x2 + 18x + 7,
da cui f (0.2) ≈ p (0.2) = 12.056.
Esercizio 6 .6.4 Sia data la tabella seguente di dati sperimentali
xi f ( xi )
0.4
1
2.8
3 .8
17.62
23.5
92.98
165.18
(a) Costruire la tabella delle differenze divise. (b) Usando i quattro punti in successione, scrivere i polinomi di interpolazione di Newton p n di grado n = 0,1,2,3. Commentare il risultato. Svolgimento
La tabella delle differenze divise è:
appunti di calcolo numerico
f (·, ·)
f (·, ·, ·)
xi 0.4
f ( xi ) 17.62
1.
23.5
23.5 − 17.62 = 9.8 1 − 0.4
2.8
92.98
92.98 − 23.5 38.6 − 9.8 = 38.6 = 12 2.8 − 1 2.8 − 0.4
3.8
165.18
165.18 − 92.98 72.2 − 38.6 = 72.2 = 12 3.8 − 2.8 3.8 − 1
f (·, ·, ·, ·)
12 − 12 = 0 3.8 − 0.4
I polinomi da costruire sono p0 (x ) = 17.62 p1 (x ) = p 0 ( x) + 9.8( x − 0.4) = 17.62 + 9.8(x − 0.4) = 9.8 x + 13.7 p2 (x ) = p 1 ( x) + 12( x − 0.4)( x − 1) = .... = 12 x2 − 7x + 18.5 p3 (x ) = p 2 ( x) + 0(x − 0.4)( x − 1)( x − 2.8) = p 2 (x ) Il polinomio p 3 coincide con il polinomio p 2 perchè il punto ( 3.8, 165.18 )
appartiene già al polinomio p 2 . 6.7
Domande di riepilogo 1. Date
n + 1 coppie di punti da interpolare, di che grado è il polinomio di interpolazione?
2. Se si cerca di ricavare i coefficienti del polinomio di interpolazione
scritto come p ( x) = a 0 + a1 x + a2 x2 + . . . + an xn , utlizzando come
funzioni base i monomi 1, x , . . ., x n , si deve risolvere un sistema lineare in cui la matrice dei coefficienti ha un nome ben preciso. Come si chiama questa matrice e quali caratteristiche ha? 3.
Come si definiscono i polinomi di Lagrange? Dati n + 1 nodi x0 , x1 , . . . , xn , quanti polinomi di Lagrange possiamo costruire? Che caratteristica ha ciascun polinomio di Lagrange? Provare a fare il grafico di questi polinomi per n = 3 e per n = 4.
4. I polinomi di Lagrange sono utilizzati per costruire il polinomio di
interpolazione. Che forma assume il polinomio di interpolazione utilizzando i polinomi di Lagrange? 5. Data
una funzione f e date le coppie di punti ( xi , f (xi )) , i = 0 , 1 , . . . , n, si può costruire il polinomio che interpola queste n + 1 coppie di punti. Preso un generico punto x compreso nell’inter-
vallo individuato dalle ascisse di interpolazione, qual è la formula dell’errore che si commette sostituendo a f ( x) il valore del polino-
mio valutato in x ? Quali sono le ipotesi che devono valere perché valga questa formula dell’errore?
103
104
annamaria mazzia
6. Spiegare
come si costruisce la tabella delle differenze divise di Newton e a cosa serve.
7. Quali
sono i vantaggi dell’approccio delle differenze divise nel costruire il polinomio di interpolazione?
8. Che relazione c’è tra differenze divise e derivate di una funzione? 9.
L’approccio delle differenze divise di Newton serve anche se si vogliono interpolare non sono i valori di una certa funzione f ma anche valori delle sue derivate. Spiegare con un esempio come si deve procedere e per quale motivo.
10.
Spiegare il fenomeno di Runge nell’interpolazione polinomiale.
11. Ci possono essere casi in cui la matrice di Vandermonde è molto
malcondizionata. In questo caso, tutti gli approcci per arrivare allo
stesso polinomio di interpolazione vanno bene o no? E perché? 12. Che differenza c’è tra interpolazione polinomiale e interpolazione
polinomiale a tratti? 13.
Spiegare come si arriva a costruire la funzione di interpolazione lineare a tratti.
14. Spiegare cosa è una spline e quali sono le condizioni che vanno
imposte per ottenere i coefficienti delle spline. 15.
Quanti tipi di spline abbiamo?
16.
Come si può ottenere una curva parametrica?
7 Approssimazione 7.1
I numeri governano il mondo. Platone
Perchè approssimare dati ?
La
legge di
H ooke stabilisce che l’allungamento subito da una
molla, costruita con materiale uniforme, è direttamente proporzionale alla forza applicata: F( x) = kx dove k è la costante di proporzionalità,
detta costante elastica, e x rappresenta l’allungamento della molla. Supponiamo di voler determinare k per una molla che, quando è a riposo, esercita una forza di 1.4724811 N . Se applichiamo una forza pari a 2.418165 N si misura un allungamento pari a 0.042 m. Siano effettuate diverse misure, ricavando i dati mostrati in Tabella. x F
0.00000 1.472481
0.04200 2.418165
0.08000 3.363849
0.11800 4.309533
0.15600 5.255217
I dati raccolti non giacciono esattamente su una linea retta. Per approssimare la costante elastica k , potremmo prendere una qualunque coppia di dati e fare il rapporto tra la forza e l’allungamento. In questo modo, tuttavia, non terremmo conto di tutte le misure effettuate. È più ragionevole trovare la linea retta che meglio approssima tutti i dati sperimentali e utilizzarla per approssimare il valore di k . Questo tipo di approssimazione sarà l’argomento di questo Capitolo. A differenza dell’interpolazione, in cui si cerca una funzione che passi esattamente per i dati assegnati, nell’approssimazione si cerca una funzione (più semplice di quella data, se vi è una funzione di partenza) che approssimi al meglio i dati assegnati, senza passare esattamente per questi.
Tabella 7.1: Dati sperimentali per la legge di Hooke
Figura 7.1:
Legge di Hooke:
i dati
sperimentali
Alcuni dei motivi che spingono a cercare una funzione di approssi-
mazione piuttosto che di interpolazione sono questi: i dati a disposizione sono affetti da errore; siamo interessati a vedere l’andamento dei dati su lunga scala, in
una visione globale vogliamo che la funzione dipenda da pochi parametri, sebbene questi siano determinati considerando tutti i dati a disposizione. Nel seguito studieremo l’approssimazione ai minimi quadrati.
Se si hanno a disposizione n = 100 dati, anche molto accurati, una funzione interpolante può dare una buona idea "localmente", mentre una funzione approssimante data da una retta fornisce una migliore idea del comportamento su lunga scala dei dati.
106
7.2
annamaria mazzia
Retta di regressione lineare Supponiamo di avere i 10 dati sperimentali della Tabella 7 .2 ( abbiamo quindi le coppie di dati ( xi , yi ) con i = 1, . . . , n, dove n = 10).
xi yi
1 1.2
2 2.3
3 4.5
4 5.1
5 7
6 8 .5
7 10.2
8 13.1
9 12.5
10 16.5
Tabella 7.2: Dati sperimentali
La Figura 7.2 (a sinistra) mostra il grafico delle coppie di punti: appare evidente che la relazione tra x e y è di tipo lineare. Il motivo per cui i dati non sono esattamente su una retta è dovuto ad errori nei dati. Non ha senso, quindi, cercare una funzione che passi esatta-
mente per i dati assegnati (come accade nell’interpolazione), perchè una funzione del genere introdurrebbe oscillazioni prive di significato fisico: lo vediamo andando a costruire il polinomio di interpolazione di grado 9 che passa esattamente per i dati e che vediamo in Figura 7 .2
(a destra). Figura 7.2: Dati sperimentali (a sinistra) della Tabella precedente e polinomio di interpolazione (a destra).
Cerchiamo allora una retta (funzione lineare, poichè abbiamo visto che i dati hanno una relazione di tipo lineare) che meglio approssima i dati senza dover passare esattamente per essi. Sia p 1 ( x) = a 0 + a1 x la retta che andiamo cercando (dobbiamo quindi capire come trovare i due coefficienti a 0 e a 1 ). Allora p 1 ( xi ) = a 0 + a1 xi , per i = 1, . . . , n rappresenta il valore sulla retta che deve approssimare il valore yi dato dal problema. Per ogni dato sperimentale, per i = 1, . . . , n, possiamo
misurare lo scarto che scaturisce dall’approssimare yi mediante a0 + a1 xi . Nell’approccio ai minimi quadrati, si cerca di minimizzare la somma dei quadrati degli scarti, cioè la somma dei quadrati delle differenze tra i valori assegnati y i e i valori corrispondenti p 1 ( xi ) sulla retta. Introduciamo, quindi la funzione che dipende dai coefficienti incogniti a 0 e a 1 . n
S( a0 , a1 ) = ∑ [(a0 + a1 xi ) − yi ]2 i =1
Per minimizzare questa funzione, occorre porre le derivate parziali della S rispetto ad a 0 e a 1 uguali a zero. Si pone dunque
In questo caso, lo scarto sul dato i -simo rappresenta la differenza tra il valore dato y i e il valore approssimato dal polinomio, a0 + a1 xi , vale a dire y i ( a0 + a1 xi ).
−
Per funzioni f ( x) di una variabile reale, i punti di massimo o minimo si trovano tra i punti critici della f , per i quali f ( x) = 0, studiando il segno della f . Analogo procedimento si segue per funzioni di due variabili. Per la funzione S (a0 , a1 ) che stiamo studiando, si può provare che i valori ( a0 , a1 ) che annullano le derivate parziali della S rappresentano i valori che minimizzano la S stessa. Questo argomento viene approfondito nei corsi di Analisi Matematica.
appunti di calcolo numerico
107
n ∂S( a0 , a1 ) ∂ n 2 2 a a x y = + ) = [( ] 0 1 i i ∑ [(a0 + a1 xi ) yi ] Data una funzione f ( x, y) che dipende da ∂ a0 ∂ a0 i∑ =1 i= 1 ∂ f due variabili, il simbolo rappresenta la n x ∂ ∂S( a0 , a1 ) ∂ n 2 0 = = [(a0 + a1 xi ) yi ] = 2 ∑ [(a0 + a1 xi ) yi ] xi derivata parziale della f rispetto alla variabile ∂ a1 ∂ a1 i∑ x, che altro non è che la derivata della fun=1 i= 1
0 =
−
−
−
−
Queste equazioni si semplificano nel sistema delle cosiddette equazioni normali:
na 0 + a1 ∑ in=1 xi = ∑ ni=1 yi a0 ∑ in=1 xi + a1 ∑ in=1 x2i = ∑ ni=1 xi yi
zione g ( x) = f ( x , y) considerando y come ∂ f una costante. Viceversa, con il simbolo si ∂ y indica la derivata parziale della f rispetto alla variabile y, che, per definizione, è la derivata della funzione h ( y) = f ( x, y), dove ora x è considerata costante. L’argomento viene trattato nei dettagli in Analisi Matematica 2.
Introducendo la notazione A12 = ∑ in=1 xi , A22 = ∑ ni=1 xi2 , b1 = n n ∑ i=1 yi e b2 = ∑ i=1 xi yi e osservando che la matrice del sistema è simmetrica ( A12 = A 21 ), la soluzione è data da: a0 =
A22 b1 − A12 b2 nA 22 − A212
a1 =
nb2 − A12 b1 nA22 − A212
Nell’esempio proposto, per calcolare la retta di approssimazione ai minimi quadrati, dobbiamo calcolare i coefficienti delle equazioni normali. In Tabella 7 .3 poniamo i valori che servono per risolvere il sistema: la soluzione è a 0 = −0.87333333 e a 1 = 1.62969697. La retta è rappresentata in Figura 7 .3. La retta che abbiamo appena costruito è la retta che minimizza gli scarti verticali, supponendo affetti da errore le ordinate delle coppie di punti a disposizione. Essa prende pure il nome di retta di regressione lineare sugli scarti verticali.
Osserviamo che il baricentro dei punti assegnati giace sulla retta ai minimi quadrati, in quanto considerando la prima equazione del sistema si ha, per X = ∑ ni=1 xi /n e Y = ∑ in=1 yi /n (le coordinate del baricentro dei punti assegnati):
xi
yi
x2i
1 2 3 4 5 6 7 8 9 10
1.2 2.3 4.5 5.1 7 8.5 10.2 13.1 12.5 16.5
1 4 9 16 25 36 49 64 81 100
A12 = 55 b1 = 80.9 A22 = 385 b2 = 579.4 Tabella 7.3: Tabella per il calcolo della retta di approssimazione ai minimi quadrati
a0 + a1 X = Y
Se invece sono affetti da errore le ascisse delle coppie di punti, si può cercare la retta che minimizza gli scarti orizzontali, detta anche retta di regressione lineare sugli scarti orizzontali, (basta scambiare
il ruolo delle x con quello delle y per ricavare, con lo stesso procedimento, la retta p 1 ( y) = b0 + b1 y). Il baricentro dei punti assegnati giace anche su questa retta, da cui possiamo concludere che esso è il punto di intersezione delle due rette che minimizzano gli scarti verticali e orizzontali. 7.3
Approssimazione polinomiale ai minimi quadrati In generale, avendo a disposizione n coppie di punti, il problema di approssimazione si può ricondurre alla ricerca di un polinomio di approssimazione di grado m , pm ( x) = a 0 + a1 x + a2 x2 + . . . + am xm con m < (n − 1). Quando n − 1 = m il polinomio d’approssimazione coincide con quello d’interpolazione.
xi yi 1.2 4.6 13.5 20.4 35 51 71.4 104.8 112.5 165
Figura 7.3: Retta di approssimazione sugli scarti verticali.
108
annamaria mazzia
La funzione da minimizzare è n
S( a0 , a1 , . . . , am ) = ∑ (a0 + a1 xi + a2 xi2 + . . . + am xim ) − yi i =1
2
La procedura seguita per la retta viene generalizzata. Questa volta bisogna porre uguali a zero le m + 1 derivate parziali della S rispetto ai coefficienti del polinomio p m . ∂S = 0 ∂a j
j = 0, 1, . . . , m
Ricaviamo, quindi n
2 ∑ (a0 + a1 xi + . . . + am xim − yi ) x ji = 0
per j = 0, 1, . . . , m
i =1
In forma estesa possiamo scrivere n
n
n
n
i =1
i =1
i =1
i =1
a0 ∑ x ji + a1 ∑ x ji +1 + . . . + am ∑ x ji +m = ∑ x ji yi
per j = 0, 1, . . . , m
Poichè queste equazioni si hanno per j = 0, 1 . . . , m, si ha da risolvere un sistema, che, scritto in forma matriciale, è: AT Aa = A T b
dove A è una matrice rettangolare n × (m + 1), data da A =
1 x1 x12 . . . x1m 1 x2 x22 . . . x2m .. .. .. .. . . . . 2 1 xn xn . . . xnm
Le equazioni del sistema sono dette equazioni normali. Si può provare che la matrice Q = A T A è simmetrica, definita positiva ed è non singolare, quindi il sistema ammette soluzione. 7.4
Approssimazioni di tipo esponenziale e potenza Può capitare che i dati sperimentali abbiano un andamento di tipo esponenziale o ricordino una funzione potenza della variabile x . Allora si può richiedere che la funzione approssimante abbia una delle forme seguenti (a seconda della rappresentazione, si ha un diverso modello): y( x) = ae bx y(x ) = ax b
modello esponenziale modello potenza
con a e b opportune costanti. Per ottenere i valori incogniti di a e b si passa ai logaritmi, trasformando il modello di partenza nell’equazione
di una retta i cui coefficienti possono essere ricavati applicando la procedura di minimizzazione ai minimi quadrati. Da questi, si ritorna
poi ai valori a e b della funzione di partenza. Vediamo nei dettagli come fare.
Le definizioni di matrice simmetrica e matrice definita positiva sono date nel Capitolo 9.
appunti di calcolo numerico
Nel caso del modello esponenziale, passando ai logaritmi (in base naturale) si ha: ln ( y) = ln ( a) + bx Ponendo X = x , Y = ln ( y), a0 = ln ( a) e a1 = b , si ha un’equazione del tipo Y = a 0 + a1 X . Quindi, dalle coppie di dati ( xi , yi ) i = 1, . . . , n, si deve passare alle coppie ( X i = xi , Y i = ln ( yi )) e su queste coppie si costruisce la retta di approssimazione ai minimi quadrati con la procedura che abbiamo studiato in Sezione 7 .2. Una volta ricavati i coefficienti a 0 e a 1 , si ha a = e a0 e b = a 1 . Nel caso del modello potenza, passando ai logaritmi (qualunque
sia la base usata, il risultato non cambia) si ha: log ( y) = log ( a) + b log (x ) Ponendo X = log ( x), Y = log ( y), a0 = log (a) e a1 = b, si ha un’equazione del tipo Y = a 0 + a1 X . Quindi, dalle coppie di dati (xi , yi ) i = 1, . . . , n, si deve passare alle coppie (X i = log ( xi ), Y i = log ( yi )) e su queste coppie si costruisce la retta di approssimazione ai minimi quadrati. Una volta ricavati i coefficienti a0 e a1 , si ha b = a1 mentre, con gli opportuni passaggi, si trova il valore di a . 7.5
Esercizi
Esercizio 7 .5.1 Sia data la tabella seguente:
xi f ( xi )
-1
0
2
3
4
9
0
0
15
84
(a) Trovare la retta ai minimi quadrati che minimizza la somma dei quadrati degli scarti verticali. (b) Trovare la retta ai minimi quadrati che minimizza la somma dei quadrati degli scarti orizzontali. (c) Calcolare il punto di intersezione delle due rette e dire di che punto si tratta. Svolgimento
(a) Il sistema da risolvere per ottenere la retta di approssimazione ai minimi quadrati è:
na 0 + ∑ in=1 xi a1 = ∑ ni=1 yi n n n ∑ i=1 xi a0 + ∑ i=1 x2i a1 = ∑ i=1 xi yi
109
110
annamaria mazzia
dove n = 5. Poichè ∑ 5i=1 xi = 8, 5 ∑ i=1 xi yi = 372, si ha il sistema
5 ∑ i=1 x2i =
30,
5 ∑ i=1 yi =
108 e
5a0 + 8a1 = 108 8a0 + 30a1 = 372
La soluzione è a0 = 3.069767442, a1 = 11.581395349. La retta ai minimi quadrati che minimizza gli scarti verticali è: y = 3.069767442 + 11.581395349 x. (b) Ricaviamo la retta di approssimazione che minimizza gli scarti orizzontali.
nb0 + ∑ ni=1 yi b1 = ∑ ni=1 xi n n n ∑ i=1 yi b0 + ∑ i=1 y2i b1 = ∑ i=1 yi xi
dove n = 5. Poichè ∑ 5i=1 yi = 108, 5 ∑ i=1 xi yi = 372, si ha il sistema
5 5 ∑ i=1 y2i = 7362, ∑ i=1 xi = 8 e
5b0 + 108b1 = 8 108b0 + 7362b1 = 372
La soluzione è b0 = 0.744452398, b1 = 0.03960868528. La retta ai minimi quadrati che minimizza gli scarti orizzontali è: x = 0.744452398 + 0.03960868528 y. (c) Troviamo il punto di intersezione delle due rette:
y = 3.069767442 + 11.581395349 x x = 0.744452398 + 0.03960868528 y
Ricaviamo x = 1.6 e y = 21.6 Se calcoliamo il baricentro dei punti assegnati, troviamo X =
5 ∑ i=1 x i =
5
−1 + 2 + 3 + 4 = 1.6
Y =
5
5 ∑ i=1 yi =
5
9 + 15 + 84 ) = 21.6 5
Il punto di intersezione delle due rette è il baricentro dei punti assegnati.
Esercizio 7 .5.2 Sono assegnati i seguenti dati sperimentali
xi yi
4.0 102.56
4.2 113.18
4.5 131.2
4.7 142
5.1 168
5.5 196.2
5.9 225
6.3 256.8
6.8 299.51
Costruire la curva di approssimazione ai minimi quadrati della forma ax b . Svolgimento Per trovare la curva di approssimazione del tipo y = ax b , dobbiamo
prima passare ai logaritmi: log( y) = log ( ax b ) = log ( a) + b log( x)
7.1 325.6
appunti di calcolo numerico
In questo modo ci riconduciamo ad una retta di approssimazione ai minimi quadrati sui logaritmi dei punti assegnati. Consideriamo il logaritmo naturale (ma i risultati non cambiano con i logaritmi in un’altra base). I dati su cui lavorare sono dunque: ln( xi ) 1.386294361 1.435084525 1.504077397 1.547562509 3.931825633 1.704748092 1.774952351 1.840549633 1.916922612 1.960094784
ln( yi ) 4 .630447993 4 .728979472 4 .876722876 4 .955827058 5 .123963980 5 .279134547 5 .416100402 5 .548297572 5 .702147806 5 .785669634
Calcoliamo la retta di approssimazione ai minimi quadrati, ponendo X i = ln ( xi ) e Y i = ln ( yi ). Il sistema da risolvere è
na 0 + ∑ ni=1 X i a1 = ∑ ni=1 Y i n n n ∑ i=1 X i a0 + ∑ i=1 X i2 a1 = ∑ i=1 X i Y i
dove n = 10. Si ha ∑ ni=1 X i = 16.6995268, ∑ ni=1 X i2 = 28.2537116, 52.0472913, ∑ ni=1 X i Y i = 87.6541085 Il sistema da risolvere diventa
n ∑ i=1 Y i =
10a0 + 16.6995268 a1 = 52.0472913 16.6995268a0 + 28.2537116 a1 = 87.6541085
che ha come soluzione a 0 = 1.84197978 e a 1 = 2.013679425. Ora a0 = ln(a) da cui a = e a0 = 6.30901637 Invece a1 = b. Il modello y = ax b diventa quindi y = 6.30901637 x2.013679425.
Esercizio 7 .5.3 Sia data la tabella seguente di dati sperimentali
xi f ( xi )
0.2
1
2.4
3 .4
15.02
15.5
40.98
78.38
Trovare la curva di approssimazione ai minimi quadrati y = cx d che minimizza gli scarti verticali.
Svolgimento
Per la curva di approssimazione y = cxd si passa ai logaritmi, in modo da ricondursi all’equazione della retta log y = log c + d log x. Si pone poi Y = log y e X = log x; a 0 = log c e a 1 = d . Considerando i logaritmi naturali si ha X i = [ −1.609437912434 0.0 0.8754687373539 1.223775431622 ]
111
112
annamaria mazzia
Y i = [ 2.70938264633 2.7408400239 3.7130841428 4.36156879277 ]
Il sistema da risolvere è
4a0 + 0.48980625654 a1 = 13.52487560584 0.48980625654a0 + 4.854362211106 a1 = 4.22768666781
Risolvendo si trova a0 = 3.3155400568494 da cui c = 27.537261656285 e a1 = d = 0.53636590986 . La curva è y = 27.537261656285 x0.53636590986.
7.6
Domande di riepilogo 1. Che differenza si ha tra interpolazione e approssimazione di dati? 2. Se si vogliono approssimare n coppie di dati attraverso una retta
di approssimazione che minimizza gli scarti verticali, va minimizzata una certa funzione S . Qual è questa funzione e come viene costruita? 3.
Quali sono le derivate parziali di questa funzione S e per quale motivo vengono poste uguali a zero?
4. Qual è il sistema di equazioni da risolvere per ricavare i coefficienti
della retta di approssimazione che minimizza gli scarti verticali? 5. Qual è il sistema di equazioni da risolvere per ricavare i coefficienti
della retta di approssimazione che minimizza gli scarti orizzontali? 6. Che
proprietà possiede il baricentro delle coppie di punti che vengono approssimati tramite una retta di approssimazione?
7. Che
procedimento va fatto per ricondursi al caso della retta di approssimazione se si vogliono approssimare i dati attraverso un modello esponenziale del tipo y = ae xb ?
8. Che
procedimento va fatto per ricondursi al caso della retta di approssimazione se si vogliono approssimare i dati attraverso un modello potenza del tipo y = ax b ?
9. Che
procedimento va fatto per ricondursi al caso della retta di approssimazione se si vogliono approssimare i dati attraverso un modello del tipo y = a + bx m , con m intero maggiore o uguale a 2 ?
8 Integrazione numerica 8.1
Integrazione numerica e ... farmaci Per molti farmaci, il profilo di rilascio del principio attivo dipende sia dalle caratteristiche chimico-fisiche del principio attivo sia dalle carat-
teristiche tecnologiche della formulazione. In tal modo il rilascio del farmaco può essere accelerato o ritardato (pensiamo alle compresse gastroresistenti), e può avvenire in particolari siti dell’organismo. È
Ad una festa matematica si incontrano diverse funzioni come x 2 , 3 sin ( x), 4 2 + x e molte altre... Ad un certo punto x2 vede in un angolino, mogia mogia, la funzione ln (5x sin (x2 /2)) , e le chie7cos (ex + ln ( 10sin (2x3 ))) de:" Perchè te ne stai qui tutta sola e triste?". Lei risponde: " Sai, io non mi INTEGRO facil-
√
mente!" Umorismo in rete
importante dunque il polimero che incapsula il farmaco. Supponiamo
di avere un farmaco incapsulato in un polimero che viene rilasciato lentamente nel sistema sanguigno del paziente. In particolare, in una capsula ci siano 100 µ g di farmaco a rilascio controllato. Il farmaco sia rilasciato alla velocità di 8 e−0.1t µ g/h dove t rappresenta il tempo in
ore. Possiamo chiederci: quanto farmaco rimane ancora all’interno della
capsula dopo 24 ore? Indicando con m0 il farmaco all’istante iniziale t0 , in cui viene assunto il medicinale (quindi m 0 = 100 µ g) e con m f ciò che rimane all’istante finale t f = 24 ore, possiamo dire che vale la seguente relazione t f dm (t ) m f − m0 = − dt dt t0 Abbiamo messo il segno meno all’integrale in quanto sappiamo che
la quantità di farmaco all’istante finale è inferiore a quella dell’istante iniziale e quindi la velocità di rilascio (che è stata data come velocità
positiva) va intesa, invece, con il segno negativo. Sostituendo le quantità note, si ha m f − 100 =
24
− 0
8e−0.1t dt
L’integrale può essere calcolato facilmente e si ha 8 −0.1·24 0 m f = 100 − − e ) = 100 + 80(e−2.4 − 1) = 100 − 72.743 = 27.257 −0.1 (e Quindi rimangono ancora circa 27 µ g di farmaco dop 24 ore. Supponiamo ora che, per lo stesso problema, la velocità di rilascio 2 sia di 8e−0.1t µ g/h. Ciò che rimane nella capsula dopo un certo istante
di tempo t f sarà m f = 100
t f
− t0
2
8e−0.1t dt
114
annamaria mazzia
Rispetto al primo esempio, questo integrale non può essere calcolato
analiticamente! Ciò non significa che il problema non possa essere risolto. Ma dovrà essere affrontato per via numerica. Ed è proprio quello che faremo in questo capitolo. Ci occuperemo,
infatti, di approssimare numericamente l’integrale definito I =
b
a
f (x )dx
dove f è una funzione definita nell’intervallo [ a, b]. Una formula di integrazione numerica (detta anche formula di quadratura numerica) approssima l’integrale esatto I = ab f ( x)dx mediante una sommatoria data da ∑ jn=0 a j f (x j ):
La funzione f può essere nota, come nell’esempio appena visto, oppure assegnata su determinati punti dell’intervallo, come
I =
b
a
vedremo alla fine del capitolo.
n
f (x )dx ≈ ∑ a j f ( x j ) j=0
dove x j , j = 0, . . . , n sono le ascisse o punti di appoggio della formula
di quadratura e a j sono i pesi della formula. In questo Capitolo studieremo i metodi più semplici da applicare.
Formula dei trapezi
8.2
Consideriamo la retta che interpola la f negli estremi dell’intervallo di integrazione. Per semplicità, costruiamo la retta partendo dalla tabella delle differenze divise di Newton: a f (a) f (b) − f ( a) b f (b) b−a Il polinomio di interpolazione (retta) che interpola la f in a e in b (gli estremi dell’intervallo di integrazione) è dato da f (b) − f ( a) ( x − a) b−a L’errore di interpolazione, utilizzando l’espressione del resto di Lagrange (e, quindi, considerando valide le ipotesi, per questo caso, di f continua fino alla derivata seconda) è dato da p( x) = f (a) +
E( x ) =
f (ξ x ) ( x − a)( x − b) 2
dove ξ x è un punto incognito dell’intervallo [ a, b] che varia al variare
di x. Per quanto abbiamo studiato sull’interpolazione, sappiamo che la funzione f (x ) si può scrivere come somma del polinomio e dell’errore: f ( x) = p ( x) + E( x). Nel nostro caso, abbiamo f (b) − f ( a) f (ξ x ) (x − a) + ( x − a)( x − b) 2 b−a Dovendo integrare la f tra a e b e valendo l’uguaglianza precedente, integrando ambo i membri, otteniamo: f (x ) = f (a) +
b
a
f ( x)dx =
b
a
f (b) − f (a) f ( a) + ( x − a) dx + b−a
b
a
(x
− a)( x − b) f (2ξ x ) dx
appunti di calcolo numerico
115
ovvero b
a
f (a) + f (b) 1 f (x )dx = (b − a) + 2 2
b
a
(x
− a)( x − b) f (ξ x ))dx
Poichè il prodotto (x − a)( x − b) ha segno costante in [a, b], per il
teorema del Valor Medio del calcolo integrale (si veda il Teorema 3.6.6)
si ha 1 2
b
1 ( x − a)( x − b) f (ξ x )) dx = f (ξ ) 2
a
b
a
1 (b − a)3 ( x − a)( x − b)dx = − f (ξ ) 2 3!
dove ξ è un punto interno all’intervallo [ a, b], incognito ma che non dipende più da x ! Possiamo dunque scrivere, b
a
f (a) + f (b) 1 (b − a)3 f (x )dx = (b − a) − 2 f (ξ ) 3! 2
L’integrale della funzione f può essere visto, dunque, come la somma f (a) + f (b) di due termini, il primo dato da (b a) che riusciamo
−
2 1 ( b − a )3 facilmente a calcolare e il secondo dato da − f (ξ ) il cui 2 3! valore dipende da un punto ξ che non conosciamo. Perciò, noi possiamo approssimare l’integrale utilizzando il primo
termine della somma, cioè calcolando l’integrale della retta passante per f ( a) e f (b). L’errore che commetteremo sarà dato dal termine che non possiamo calcolare, vale a dire dalla quantità Eint = − 112 f (ξ )(b − a)3. Indicando con M = max a≤x≤b | f ( x )| possiamo maggiorare l’errore mediante la relazione
|Eint | ≤ M (b −12a)
3
La formula dei trapezi approssima l’integrale di f in [ a, b] mediante l’integrale della retta passante passante per i punti ( a, f ( a)) e ( b, f (b)) : I =
8.3
b
a
f (x )dx ≈ I trap =
b−a [ f (a) + f (b)] 2
Formule di N ewton-Cotes Se, al posto di una retta, prendiamo come funzione interpolante la f un polinomio di grado più elevato, otterremo altre formule di quadrature. Supponiamo di poter valutare la f in n + 1 punti x0 , x1 , . . . , xn e costruiamo il polinomio interpolatore di grado n utilizzando la formula di Lagrange.
Se la funzione f ( x) 0 si può vedere facilmente che l’integrale della retta che passa per i punti ( a, f ( a)) e ( b, f (b )), altro non è che l’area del trapezio sottesa alla corda passante per f ( a) e f (b). Da qui il nome della
≥
formula come formula dei t rapezi.
116
annamaria mazzia
Figura 8.1: Formula dei trapezi: l’integrale della funzione f (zona tratteggiata in blu) viene approssimata mediante l’area del trapezio sotteso alla retta di interpolazione per f ( a ) e f (b) (zona verde).
Avremo pn ( x) = ∑ ni=0 f (xi ) Li (x ), dove i polinomi di Lagrange sono dati dalla nota formula n
x − x j j=0 xi − x j
Li ( x ) = ∏ =i j
x j = x 0 + jh, con j = 0, 1, . . . , n e per un generico punto x compreso tra x 0 e x n vale x = x 0 + sh con 0 ≤ s ≤ n, s numero reale. Quindi x − x j = x 0 + sh − (x0 + jh ) = ( s − j)h e x i − x j = (i − j)h, da cui il polinomio di Lagrange si può scrivere come n
s − j = L i (s) j=0 i − j
Li ( x ) = ∏ =i j
Scrivere il polinomio di Lagrange in funzione di s e non di x ci “libera” dall’intervallo [ a, b] in cui dobbiamo integrare e tiene conto soltanto
del grado del polinomio che viene considerato. Infatti, tenendo conto che, f ( x) = p n ( x ) + E( x) dove E( x) è l’errore della formula di interpolazione, passando all’integrale, abbiamo b
a
f (x )dx =
b
a
pn ( x)dx +
b
a
E(x )dx
Il primo integrale a secondo membro rappresenta la formula che approssima l’integrale della f mentre il secondo integrale rappresenta l’errore della formula di quadratura. La formula di quadratura è quindi data dal valore dell’integrale di
pn : I =
b
a
f (x )dx
b n
≈ ∑ a i =0
n
f (xi ) Li ( x)dx = ∑ f ( xi ) i =0
b
a
Li (x )dx
La formula di quadratura ha dunque come nodi i punti x i e come pesi gli integrali ab Li ( x)dx .
appunti di calcolo numerico
117
Gli estremi a e b variano al variare dell’integrale da approssimare,
ma se vogliamo utilizzare un polinomio di grado n , allora, ponendo, x0 = a e x n = b e tenendo presente che L i (x ) = L i (s) con x = x 0 + sh, b possiamo fare un cambiamento di variabile negli integrali a Li ( x)dx . Dal momento che dx = hds abbiamo
b
a
Li ( x)dx =
xn
x0
Li ( x)dx =
n
0
Li (s)hds = h
n
0
Li (s)ds
La traccia dell’intervallo di integrazione è in h , mentre l’integrale da fare non dipende ora dall’intervallo [ a, b]. Questo permette di calcolare una volta per sempre questi integrali e dare una formula di
integrazione numerica. Infatti I =
b
a
n
f (x )dx ≈ h ∑ f ( xi ) i =0
n
0
Roger Cotes (1682-1716) fu un matematico inglese che lavorò molto con Isaac Newton, in particolare per la correzione del suo famoso libro "Principia". Egli inventò le formule di quadratura che prendono il suo nome e per primo introdussse quella che oggi conosciamo come formula di Eulero, per cui e x = cos ( x ) + i sin ( x) nel campo complesso.
Li (s)ds
Definiamo coefficienti di Newton-Cotes le espressioni ( n)
Ci
n
1 = n
0
i = 0, 1, . . . , n
Li (s)ds
La formula precedente si scrive, quindi, come I =
b
a
n
( n)
f (x )dx ≈ nh ∑ f ( xi )Ci
= (xn
i =0
n
− x0 ) ∑ f (xi )Ci(n)
(8.1)
i =0
L’errore della formula di quadratura è dato da b
Eint =
a
E( x)dx =
b f (n+1) (ξ x )
a
(n + 1)!
(x
− x0 )( x − x1 ) · · · (x − xn )dx
Dato un polinomio di interpolazione di grado n mediante il procedimento di Lagrange è dunque possibile ricavare una formula di quadratura numerica che prende il nome di formula di Newton-Cotes. Per quanto riguarda l’errore si può osservare che le formule ottenute con un valore n dispari (cui corrisponde un numero n + 1 pari di punti di appoggio) è solo leggermente inferiore alle formule di ordine
pari che le precedono immediatamente (cui corrisponde un numero dispari di punti di appoggio). Per questo motivo le formule di ordine pari sono le più usate. Osserviamo che per f ( x) ≡ 1, qualunque sia il grado del polinomio utilizzato nelle formule di Newton-Cotes, l’errore di integrazione sarà zero. Applicando l’equazione (8.1) nell’intervallo [ a, b] [0, 1] si ha
≡
1 =
1
0
n
dx = ∑ Ci(n) i =0
Troviamo che la somma dei coefficienti di Newton-Cotes vale 1 . Formula di Newton-Cotes con n = 1 . Per n = 1 (ci sono due punti di appoggio, x 0 e x 1 ) i coefficienti di Cotes sono quelli già ricavati nella formula dei trapezi
118
annamaria mazzia
1 C0 = 1 1 C1(1) = 1 ( 1)
1
0
1
0
L0 (s)ds = L1 (s)ds =
1 (s
0
1
0
− 1) ds = 1 −1 2
1 s ds = 1 2
e la formula di integrazione diventa, appunto, la formula dei trapezi I = 8.3.1
b
a
1
f (x )dx ≈ h ∑ f ( xi )Ci(1) = ( x1 − x0 ) i =0
f ( x0 ) + f (x1 ) 2
Formula di Cavalieri-Simpson Considerando n = 2 (quindi 3 punti di appoggio nell’intervallo [ a , b], a + b x0 = a , x 1 = e x 2 = b , i due estremi dell’intervallo e il punto
2 centrale) la formula di quadratura prende il nome di formula di Cavalieri-Simpson 1 C0 = 2 1 C1(2) = 2 1 C2(2) = 2 ( 2)
2
1 L0 (s)ds = 2 0 2 1 L1 (s)ds = 2 0 2 1 L2 (s)ds = 2 0
2 (s
− 1)(s − 2) ds = 1 6 (−1)( −2) 0 2 (s )( s − 2) 4 ds = 6 0 (1)( −1) 2 (s )( s − 1) 1 ds =
0
(2)( 1)
Bonaventura Francesco Cavalieri (15981647) fu un matematico italiano. Studiò teologia e geometria. Lavorò su problemi di ottica e di cinematica. È famoso soprattutto per il cosiddetto principio di Cavalieri.
Thomas Simpson (1710-1761) fu un matematico britannico, inventore della formula di quadratura per il calcolo di integrali definiti, sebbene questa formula fosse stata già scoperta 200 anni prima da Keplero e pare fosse usata anche da Cavalieri nel 1639 e poi riscoperta da James Gregory. I suoi studi
6
riguardano anche l’astrologia.
La formula di Cavalieri-Simpson approssima l’integrale della f cona + b siderando come nodi x0 = a, x1 = c = e x 2 = b e come pesi i 2 1 4 1 coefficienti di Cotes C0(2) = , C1(2) = , C2(2) = , ottenendo: 6 6 6 I =
b
a
2
f ( x)dx ≈ I CS = ( x2 − x0 ) ∑ f (xi )Ci(2) = (b − a)( i= 0
=
f (a) 4 f (c) f (b) + + ) 6 6 6
b−a ( f (a) + 4 f (c) + f (b)) 6
Con la formula di Cavalieri-Simpson, dunque, l’integrale della f viene approssimato con l’integrale della parabola passante per i due estremi a e b e per il punto centrale dell’intervallo. Per quanto riguarda l’errore che si commette approssimando l’integrale della f con la formula di Cavalieri-Simpson, consideriamo, seguendo l’approccio visto per la formula dei trapezi, l’integrale dell’errore del polinomio di interpolazione di Lagrange. Per il polinomio di secondo grado p 2 che interpola la f , l’errore è f (ξ x ) dato da E (x ) = ( x − a)( x − c)( x − b). 3!
Osserviamo che i valori dei coefficienti di Newton-Cotes sia per n = 1 che per n = 2 sono simmetrici. Questo risultato va generalizzato a qualunque scelta di n: i coefficienti di Newton-Cotes sono simmetrici.
appunti di calcolo numerico
119
Figura 8.2: Formula di Cavalieri-Simpson: l’integrale della funzione f (zona tratteggiata in blu) viene approssimata mediante l’area della regione sottesa alla parabola passante per f ( a), f (c) e f (b) (zona verde).
Quando facciamo l’integrale, l’errore nell’approssimare l’integrale
esatto con la formula di Cavalieri-Simpson è dunque dato da Eint =
b f ( ξ x )
a
3!
(x
− a)( x − c)( x − b)dx
Questa volta, la funzione ( x a)( x c)( x b) cambia segno all’interno dell’intervallo [ a, b] e non possiamo più applicare il teorema del Valor Medio come nella formula dei trapezi. In maniera più laboriosa,
−
−
−
tuttavia, si ricava per l’errore la seguente formula: f IV (u) Eint = − 90
− b
a
2
5
IV
=
(u ) − f 2880 ( b − a)5
dove u è un opportuno punto dell’intervallo ] a, b[.
8.3.2
Sull’errore della formula di Cavalieri-Simpson Per capire l’errore che si ha nella formula di Cavalieri-Simpson, deduciamo la stessa formula seguendo un’altra strada. Per semplificare il discorso, scegliamo l’intervallo [ a , b] simmetrico rispetto all’origine, quindi del tipo [−t, t] con t ∈ R, sapendo che, se non fosse così, basta applicare una traslazione dell’asse x per ricondursi a questo caso. Scriviamo il polinomio di interpolazione che passa per i punti −t, 0 e t e che interpola anche la derivata prima della f in 0. Mediante la tabella delle differenza divise, il punto 0 va contato due volte e si ha:
120
annamaria mazzia
−t
0
f (−t)
f (0) − f (−t) t
f (0)
f (0) − f (−t ) t f (0) − f (0) + f (− t) t 0 = f (0) f (0) t t2 f (t) − f (0) − f (0) f (t) − f (0) f (t) − f (0) − t f (0) f (t) − 2t f (0) − f (−t) t t f (t) = t t 2 t3 t2 Il polinomio di interpolazione è, dunque f (0) − f (−t) t f (0) − f (0) + f (−t) f (t) − 2t f (0) − f (− t) ( x + t) + ( + ) + ( x + t ) x2 p(x ) = f (−t ) + x t x t t2 2 t3 L’errore di interpolazione per questo polinomio di grado 3 vale f (0) −
f ( IV ) (ξ x ) ( x + t) x2 (x − t) 4! Quindi da f (x ) = p(x ) + E( x), andando a integrare tra −t e t si ha: E( x ) =
t
−t
f ( x)dx =
t
−t
p(x )dx +
t
−t
E( x)dx
Nell’integrazione del polinomio p ( x) è facile vedere che i termini che dipendono da f (0) portano un contributo nullo. Infatti t f (0) t f (0) f (0) x 3 ( x + t) x − 2 ( x + t) x2 dx = x2 + tx − − x2 dx t t −t t −t t t f (0) x2 x 4 t − = = 0 2 4 t −t t Gli integrali degli altri termini del polinomio p (x ) portano alla for-
mula di Cavalieri-Simpson. Infatti (omettendo i passaggi matematici e ricordando che l’ampiezza dell’intervallo su cui stiamo lavorando è h = 2 t) si ha
t
f (0) − f (−t) f (−t) − f (0) f (t) − f (−t) f (−t) + x t x ( x + t) + ( + ) + ( x + t)x2 dx = 2 3 t 2t t −t 2t = ( f (−t) + 4 f (0) + f (t)) 6 h = ( f (−t) + 4 f (0) + f (t)) 6 Allora l’errore della formula di Cavalieri-Simpson coincide con l’integrale di E ( x). f ( IV ) (ξ x ) Quindi Eint = −t t ( x + t)x2 ( x − t )dx 4! La funzione ( x + t) x2 (x − t) = ( x2 − t2 )x2 non cambia mai segno all’interno dell’intervallo [ −t, t], quindi si può applicare il teorema del Valore Medio del calcolo integrale, per cui
t
f ( IV ) (ξ ) t 2 2 2 f ( IV ) (ξ ) x5 2 x3 f ( IV ) (ξ ) 5 − ( x − t ) x dx = =− Eint = t t 24 24 5 3 −t 90 −t Considerando che l’ampiezza dell’intervallo è h = 2t si ha
h f ( IV ) (ξ ) 5 h − 90 2 2880 Troviamo la formula dell’errore per Cavalieri-Simpson. Eint =
( IV ) ( ξ )
− f
( )5 =
appunti di calcolo numerico
8.4
Formule composte Le formule di Newton-Cotes non vanno bene su intervalli molto ampi
perchè per avere risultati più accurati dovremmo utilizzare formule di grado elevato (in modo da utilizzare un numero elevato di punti di appoggio). Ci sono vari motivi che sconsigliano questa procedura:
i valori dei coefficienti in formule di grado elevato sono difficili da ottenere; le formule di Newton-Cotes, essendo basate su polinomi di interpolazione con nodi equidistanti, danno risultati inaccurati su intervalli ampi a causa della natura oscillatoria dei polinomi di grado elevato. Conviene dunque utilizzare formule di grado basso ma scomponendo l’intervallo di integrazione in più sottointervalli e, in ciascuno
di essi, applicare la stessa formula. Sfruttiamo il fatto che se l’intervallo [ a, b] viene diviso in n sottointervalli in modo che [ a, b] = [ a, x1 ] [ x1 , x2 ] [ x2 , x3 ] . . . [ xn−1 , b],
∪
allora b
a
f ( x)dx =
x1
a
f ( x)dx +
x2
x1
f (x )dx +
∪
x3
x2
∪ ∪
f ( x)dx + . . . +
b
x n −1
f ( x )dx
Su ciascuno intervallo [ xi−1 , xi ] per i = 1, 2, . . . , n, approssimiamo l’integrale della f mediante una formula di quadratura più semplice, utilizzando pochi punti. 8.4.1
Formula composta dei trapezi Suddividiamo l’intervallo [ a, b] in n sottointervalli definiti dai punti d’appoggio x 0 , x 1 , . . . , xn (per semplicità supponiamo i punti equidib−a stanti con passo h = , in modo che x 0 = a e x n = b , x i = x 0 + ih, n i = 0, . . . , n). L’integrale su [ a, b] si può dunque ottenere come somma degli integrali su tali sottointervalli: b
a
f (x )dx =
n
xi
∑
i = 1 x i −1
f (x )dx
Ciascuno degli integrali su [ xi−1 , xi ] viene approssimato utilizzan-
do la formula dei trapezi: n
xi
∑
i = 1 x i −1
n
n h x i − x i −1 [ f ( xi−1 ) + f (xi )] = ∑ [ f ( xi−1 ) + f (xi )] 2 i= 1 i= 1 2
f ( x )dx ≈ ∑
In forma estesa abbiamo h I ≈ [ f ( x0 ) + 2 f ( x1 ) + 2 f ( x2 ) + . . . + 2 f ( xn−1 ) + f ( xn )] 2 f ( a) + f (b) = h [ + f (x1 ) + f ( x2 ) + . . . f ( xn−1 )] 2
121
122
annamaria mazzia
Figura 8.3: Formula composta dei trapezi, utilizzando 3 sottointervalli (4 punti).
8.4.2
Errore nella formula composta dei trapezi L’errore che si commette nella formula composta dei trapezi è dato dalla somma degli errori commessi sui singoli sottointervalli n n h3 h3 Eint = ∑ − f (ξ i ) = − ∑ f (ξ i ) 12 12 i =1
i =1
Supponendo che la derivata seconda della f sia continua e limitata in [ a, b] e chiamando con m e M rispettivamente il minimo e il massimo di f in [ a, b], si ha: m ≤ f (ξ i ) ≤ M
i = 1, . . . , n
Considerando la somma di queste diseguaglianze, per i = 1, . . . , n si
ricava n
nm ≤ ∑ f (ξ i ) ≤ nM i =1
⇒ m≤
=
n ∑ i=1 f (ξ i )
n
≤ M n ∑ i=1 f (ξ i )
Per il teorema del Valor Intermedio (teorema 3 .6.3), è n un valore assunto dalla funzione in qualche punto ξ di [ a, b], vale a dire, esiste un punto ξ che non conosciamo, all’interno dell’intervallo [ a, b] tale che
f (ξ ) =
n ∑ i=1 f (ξ i )
n
n
ovvero ∑ f (ξ i ) = n f (ξ ). i =1
Sostituendo la relazione appena trovata nella formula dell’errore e
ricordando che h =
b−a , si ricava n
n
h3 Eint = − ∑ f (ξ i ) i =1
12
h3 = −n f (ξ )
f (ξ ) f (ξ ) (b − a)3 2 =− (b − a) h = − 12 12 12 n2
appunti di calcolo numerico
Quindi per n → 1 mente, come 2 . n 8.4.3
∞ l’errore
tende a zero
come h 2
o, equivalente-
123
Da nh 3 si ha n (b a)/nh 2 = ( b a )h2 o, in alternativa, nh3 = n(b a)3 /n3 = ( b a )3 / n 2 .
−
−
−
−
Formula composta di Cavalieri-Simpson Suddividiamo l’intervallo [ a, b] in n sottointervalli di ampiezza costante uguale a h e su ciascuno di questi sottointervalli applichiamo la formula di Cavalieri-Simpson. Abbiamo, in questo modo, la formula
composta di Cavalieri-Simpson. Su ogni intervallino, quindi, dobbiamo considerare gli estremi dell’intervallino e il punto centrale di esso. a + b Siano a i e bi gli estremi di ciascuna suddivisione e sia c i = i i 2 il punto medio di ciascuna suddivisione (per i = 1, . . . , n). In tal modo, seguendo lo stesso ragionamento fatto per i trapezi si ha: b
a
f (x )dx =
b1
a1
f ( x)dx +
b2
a2
f (x )dx + . . . +
bn
an
L’estremo superiore b i di ciascun intervallino, con i = 1, n 1 coincide con l’estremo inferiore dell’intervallino successivo: bi = a i+1 .
−
f (x )dx
Applicando la formula di Cavalieri-Simpson su ciascun intervallino
risulta: bi
ai
f (x )dx ≈
bi − ai h ( f ( ai ) + 4 f (ci ) + f (bi )) = ( f ( ai ) + 4 f (ci ) + f (bi )) 6 6
In tal modo b
a
n h f (x )dx ≈ ∑ ( f (ai ) + 4 f (ci ) + f (bi )) i= 1 6
Se gli intervallini non sono uniformi, la formula va scritta considerando il valore hi per ciascun intervallino.
Si ha la formula composta di Cavalieri-Simpson. Figura 8.4: Formula composta di CavalieriSimpson, utilizzando 3 sottointervalli (7 punti).
124
annamaria mazzia
Formula composta di Cavalieri-Simpson in forma compatta. Possiamo vedere la formula composta di Cavalieri-Simpson anche in una forma compatta. Considerando che, su ogni sottointervallo, dobbiamo prendere il punto medio, facciamo una numerazione progressiva dei punti
di integrazione nel modo seguente: x0 = a x2i = x 0 + ih i = 0, . . . n 1 x2i+1 = x 0 + ( i + )h i = 0, . . . , n − 1 2 Per la formula di quadratura otteniamo I =
b
a
f (x )dx =
n −1
x2i+2
∑
i=0 x2i n −1 h
I nodi pari corrispondono agli estremi dei sottointervalli, mentre i nodi dispari sono i punti centrali di ogni sottointervallo.
f ( x)dx
≈ ∑ 6 [ f (x2i ) + 4 f (x2i+1 ) + f (x2i+2 )] i =0
h [ f ( x0 ) + 4 f ( x1 ) + 2 f ( x2 ) + 4 f ( x3 ) + . . . + 2 f ( x2n−2 ) + 4 f ( x2n−1 ) + f ( x2n )] 6 n −1 n −1 h = [ f ( x0 ) + 4 ∑ f ( x2i+1 ) + 2 ∑ f ( x2i ) + f ( x2n )] 6 i =0 i =0 =
8.4.4
Errore nella formula composta di Cavalieri-Simpson Per quanto riguarda l’errore nella formula composta di CavalieriSimpson, sarà dato dall somma degli errori di integrazione sugli n sottointervalli. Nell’ipotesi che la derivata quarta sia continua e limitata, si ha: 1 h 5 IV Eint = − ( f (ξ 1 ) + f IV (ξ 2 ) + . . . + f IV (ξ n )) 90 2 h5 n−1 IV (b − a)5 n−1 IV f (ξ i ) = − f (ξ i ) =− 2880 i∑ 2880n5 i∑ =0 =0
b−a . n
Si considera quindi il punto ξ tale che f IV (ξ ) =
Per arrivare a questi risultati, il ragionamento è del tutto analogo a quanto è stato fatto sulla derivata seconda nella formula composta dei trapezi. Questa volta, però, si deve considerare la derivata quarta. Per esercizio, si consiglia di ripetere tutti i passaggi per
1 n IV f (ξ i ) n i∑ =1
Allora Eint =
Ricordiamo che stiamo considerando sottointervalli della stessa ampiezza h =
arrivare al risultato.
a)5
b− − (2880 n4
Quindi per n
f IV (ξ ) = −
(b
−
a) h4
2880
f IV (ξ )
→ ∞ l’errore tende a zero come n14 o, equivalentemente,
come h 4 . Nella formula dei trapezi l’errore invece decresce come
1 . n2
Ci aspettiamo quindi che il maggiore sforzo computazionale dia una
maggiore accuratezza nei risultati quando si applica la formula di Cavalieri-Simpson rispetto alla formula dei trapezi.
appunti di calcolo numerico
8.4.5
Confronti tra la formula dei trapezi e di CavalieriSimpson
Esempio Consideriamo f ( x) = e x . Sia a = 0 e b = 1.
Allora, per l’integrale esatto e per le formule dei trapezi e di Cavalieri-Simpson, si ha, rispettivamente: I =
1
0
ex dx = [ ex ]10 = e − 1 = 1.718281828
1 I trap = (1 + e) = 1.859140914 2 1 1 I C−S = (1 + 4e1/2 + e) = (1 + 6.594885083 + 2.718281828 ) = 1.718861152 6 6 La formula di Cavalieri-Simpson dà il risultato migliore. Sia ancora f ( x ) = e x ma gli estremi di integrazione siano a = 0.9 e b = 1. Allora I =
1
0.9
ex dx = e − e0.9 = 0.2586787173
0.1 0.9 (e + e) = −2.2 × 10−4 2 0.1 I − I C−S = I − (e0.9 + 4e0.95 + e) = −9.0 × 10−9 6 I − I trap = I −
Ora la formula di Cavalieri-Simpson si rivela particolarmente accurata. Ciò non deve sorprendere se si va a vedere la formula dell’errore, con l’ampiezza dell’intervallo che da 1 si è ridotta a 0.1, per cui ( b a)5 da 1 vale ora 10−5 . Considerato che f = f e f IV = f , queste derivate possono essere maggiorate dal valore assunto nell’estremo superiore dell’intervallo, cioè e . Quindi gli errori delle formule dei trapezi e di
−
Cavalieri-Simpson sono maggiorate da
|Etrap | ≤ 12e (b − a)3 = 2.265 × 10−1 (b − a)3 e |EC−S | ≤ 2880 (b − a)5 = 9.438 × 10−4 (b − a)5 Perciò per a = 0 e b = 1 gli errori sono maggiorati da
|Etrap | ≤ 2.265 × 10−1 |EC−S | ≤ 9.438 × 10−4 Invece per a = 0.9 e b = 1, poichè b − a = 0.1 = 10 −1 , abbiamo
|Etrap | ≤ 2.265 × 10−1 · 10−3 = 2.265 × 10−4 |EC−S | ≤ 9.438 × 10−4 · 10−5 = 9.438 × 10−9
125
126
annamaria mazzia
Esempio Si voglia approssimare l’integrale 1
− 0
e
x2 dx
È un integrale che non può essere risolto analiticamente. Se si vuole calcolare una sua approssimazione senza fare uso di formule di quadrature, possiamo, ad esempio, pensare di applicare la b definizione di integrale a f ( x )dx = n limn→∞ ∑ i=0 f ( a + ih(n)) h(n), con h(n) = (b a)/n, e considerare come approssimazione dell’integrale la somma parziale ∑ ni=0 f ( a + ih (n)) h(n) con un valore di n molto grande. Per esempio, con n = 107 otteniamo il valore
≈ 0.746824.
Suddividiamo l’intervallo [ 0, 1] in 4 sottointervalli. Sia h = 1/4 = 0.25. Per la formula composta dei trapezi abbiamo
−
0.74682420125254.
Applichiamo ora la formula di Cavalieri-Simpson su soli 2 sottointer-
valli, in modo da valutare la funzione negli stessi punti precedenti. L’ampiezza di ciascun sottointervallo è dunque h = 0.5. 3 2 2 2 2 h I C−S = [e0 + 4e−(h/2) + 2e−(h) + 4e−( 2 h) + e−(2h) ] 6 2 2 2 0.25 = [1 + 4e−0.125 + 2e−0.5 + 4e−0.75 + e−1 ] 3 = 0.746855
A parità di punti (e non di sottointervalli) la formula di CavalieriSimpson è più accurata di quella dei trapezi. Invece considerando 4 sottointervalli nella formula di CavalieriSimpson dobbiamo considerare anche i punti interni di ascisse 0.125, 0.375, 0.625, 0.875 e il risultato che otteniamo è 0 .746826 , evidentemente maggiormente
accurato.
Se la funzione integranda ha le derivate che sono facili da determinare e da maggiorare, la formula dell’errore può essere utile per determinare il numero di sottointervalli su cui applicare una formula composta di quadratura in modo da ottenere un’approssimazione con
un errore minore di una tolleranza prefissata. 1
2
Esempio Consideriamo 0 e−x dx . In quanti sottointervalli
bisogna suddividere l’intervallo di integrazione per applicare la formula dei trapezi e di Cavalieri-Simpson e ottenere un errore che sia minore di una tolleranza = 10 −5 ? Per i trapezi, l’errore è maggiorato da
|Etrap | ≤ max0≤x≤121 | f (x)| (b −n2a)
3
Per Cavalieri-Simpson si ha
≤1 | f IV (x)| (b − a)5 |EC−S | ≤ max0≤x2880 n4
·
·
2 2 2 2 h I t rap = [e0 + 2e−h + 2e−(2h) + 2e−(3h) + e−(4h) ] 2 2 2 2 = 0.125[1 + 2e−0.125 + 2e−0.5 + 2e−0.75 + e−1 ] = 0.742984
appunti di calcolo numerico
2
Da f ( x) = e −x abbiamo, per le derivate: f (x ) = −2xe −x
2
f (x ) = (−2 + 4x2 )e−x
2
f (x ) = (12x − 8x3 )e−x
2
f IV (x ) = (12 − 48x2 + 16x4 )e−x
2
Si trova che il massimo di | f | e | f IV | in [ 0, 1] è dato dal loro valore in x = 0, quindi abbiamo:
|Etrap | ≤ 122n2 = 61n2
12 1 |EC−S | ≤ 2880 = n4 240n4
La richiesta dell’accuratezza per l’errore diventa:
|Etrap | ≤ 10−5
|EC−S | ≤ 10−5
vale a dire, rispettivamente, 1 ≤ 10−5 6 n2
1 ≤ 10−5 240n4
Per i trapezi, il primo intero n che verifica la disuguaglianza è n = 130, per Cavalieri-Simpson si ha, invece, n = 5. Applicando le formule su 130 intervalli per i trapezi e su 5 intervalli
per Cavalieri-Simpson, otteniamo i risultati: I t rap = 0.74682050480289
I C−S = 0.7468249482544
8.5
Estrapolazione di Richardson Applichiamo la formula di Cavalieri-Simpson sull’intero intervallo [ a, b]. L’errore che si commette, come sappiamo, vale f IV (ξ 1 ) E1 = − 90
− b
a
2
5
IV
=
(ξ 1 ) − f 2880 (b − a)5
Suddividiamo ora l’intervallo [ a, b] in due sottointervalli e applichiamo la formula composta di Cavalieri-Simpson. L’errore che otteniamo
vale f IV (ξ 2 ) (b − a)5 E2 = − 2880 24 e, supponendo che le derivate quarte della f non siano molto diverse
tra loro, si ha E2 ≈
E1 . 16
127
128
annamaria mazzia
L’errore, quindi, diventa 16 volte più piccolo passando dalla formula di Cavalieri-Simpson in un intervallo alla formula applicata in due sottointervalli. Sia I il valore esatto dell’integrale e Q 1 e Q 2 i due valori approssimati ottenuti considerando la formula di Cavalieri-Simpson con n = 1 e n = 2 sottointervalli. Sia l’errore, cambiato di segno, che si ha con n = 2, = − E2 ≈ −E1 /16. Possiamo scrivere I + = Q 2 per n = 2 I + 16 = Q 1 per n = 1
Si può ricavare dalle due relazioni ottenendo =
Q 1 − Q2 15
Quindi I ≈ Q2 +
Q 2 − Q1 15
Utilizzando le due approssimazioni Q 1 e Q 2 possiamo approssimare l’integrale esatto con una maggiore accuratezza mediante la formula appena scritta. Questo procedimento prende il nome di estrapolazione di Richardson. Può essere utilizzato per migliorare l’approssimazione di un integrale ma è basato sull’ipotesi che le derivate quarte
della funzione integranda siano circa uguali e, quindi, va usato con cautela. 8.6
Si può dimostrare che la nuova approssimazione ottenuta coincide con la formula di Newton-Cotes con n = 4, dove l’errore è proporzionale a 1/ n6 e alla derivata sesta di f.
Integrare dati tabulati
A volte non si conosce la funzione da integrare ma si hanno a disposizione solo dei dati che rappresentano valori discreti di una funzione non nota. In questi casi, non si può applicare una formula di quadratura su sottointervalli della stessa ampiezza ma bisogna tener
conto dei dati a disposizione. Vediamo un esempio, supponendo di voler determinare la distanza percorsa da un veicolo di cui si conosce la velocità in alcuni istanti di
tempo. In particolare, si hanno i dati che vediamo in Tabella 8 .6. ds Sapendo che la velocità v è data da v( t) = (dove s rappresenta lo dt spostamento e t il tempo), per calcolare la distanza percorsa dobbiamo integrare la velocità tra il tempo iniziale e quello finale. In questo esempio, dobbiamo anche avere unità di misure omogenee perciò il tempo in minuti va trasformato in ore in modo che ci sia consistenza
con la velocità espressa in chilometri orari: a tale scopo basterà dividere per 60 gli istanti di tempo. Tra le formule che abbiamo studiato, applicheremo la formula composta dei trapezi, considerando i sottointervalli non uniformi che vengono generati prendendo istanti di tempo successivi ( [1, 2],
t
v
1 2 3.25 4.5 6 7.2 7.5 8 9.2 10
20 40 45 58 65 70 70 68 60 52
Tabella 8.1: Il tempo ( t) è espresso in minuti e la velocità (v) è data in chilometri all’ora.
appunti di calcolo numerico
129
[2,3.25], [ 3.25, 4.5]...) e applicando su ciascuno di essi la formula dei
trapezi. Abbiamo il seguente risultato: 10
1
In questo problema gli istanti di tempo ci permettono di applicare solo la formula dei trapezi e non quella di Cavalieri-Simpson. Per applicare la formula di Cavalieri-Simpson do-
− 1) (20 + 40) + ( 3.25 − 2) (40 + 45) 60 2 60 2 ( 4.5 − 3.25) (45 + 58) ( 6 − 4.5) (58 + 65) + + 60 2 60 2 ( 7.2 − 6) (65 + 70) ( 7.5 − 7.2) (70 + 70) + + 60 2 60 2 ( 8 − 7.5) (70 + 68) ( 9.2 − 8) (68 + 60) + + 60 2 60 2 ( 10 − 9.2) (60 + 52) +
v(t)dt ≈
(2
60 = 8.29750.
vremmo poter considerare tre istanti succes-
sivi di tempo alla volta, in cui il punto centrale sia il punto medio del sottointervallo: ad esempio se abbiamo un intervallo con i punti [1,1.5,2,3,4,4.2,4.4], allora possiamo suddividerlo nei sottointervalli [ 1, 2] con punto medio 1.5, [2, 4] con punto medio 3 e [ 4,4.4] con punto medio 4.2. E potremo applicare la formula di Cavalieri-Simpson su ciascuno di questi sottointervalli.
2
Sono stati percorsi circa 8.2975 km. Vediamo un altro esempio. Esempio Un’automobile effettua il giro di una pista in 84
secondi. La velocità dell’auto viene misurata ogni 6 secondi usando un’apparecchiatura radar per il controllo della velocità, ricavando i valori che si trovano in Tabella 8 .6. In base ai dati in possesso, quanto è lunga la pista? Come nell’esempio precedente, si tratta di integrare la velocità tra
il tempo iniziale e quello finale. Se applichiamo la formula composta dei trapezi sui 14 intervalli di ampiezza h = 6 secondi che ricaviamo dalla tabella (ponendo v1 = v (0), v 2 = v (6), . . . , v 13 = v (78), v 14 = v (84)), abbiamo:
L = 6
t
v
0 6 12 18 24 30 36 42 48 54 60 66 72 78 84
38 41 45 48 45 41 37 33 30 26 24 27 32 35 37
Tabella 8.2: Dati della velocità misurati ogni 6 secondi. Il tempo ( t) è espresso in secondi
v1 + v14 + v2 + v3 + . . . + v13 = 3009 metri 2
e la velocità (v) è data in metri al secondo.
Possiamo anche applicare la formula di Cavalieri-Simpson, considerando ora 7 intervalli di ampiezza pari a h = 12 secondi. In tal caso, otteniamo:
L = 2 (v1 + 4v2 + 2v3 + 4v4 + 2v5 + . . . + 2v12 + 4v13 + v14 ) = 3010 metri
In questo caso entrambi i risultati sono accettabili.
130
8.7
annamaria mazzia
Esercizi
Esercizio 8 .7.1 Sia dato l’integrale I =
0
−2
e−x ( x + 1) dx.
(a) Approssimare il valore dell’integrale applicando la formula dei tra pezi con n = 5 suddivisioni in parti uguali dell’intervallo di integrazione. (b) Trovare una maggiorazione dell’errore commesso e, dopo aver calcolato analiticamente l’integrale esatto, confrontare tale stima con l’errore esatto. Svolgimento
(a) Applichiamo la formula dei trapezi con n = 5 suddivisioni dell’intervallo dato. Vale, dunque, h = 0.4. I punti da considerare e il valore della f ( x) = e −x ( x + 1), sono: i 0 1 2 3 4 5
xi -2 -1.6 -1.2 -0.8 -0.4 0
f (xi ) -7.3890561 -2.97181945 -0.664023385 0.445108186 0.895094819 1
La formula dei trapezi è I t rap = h (
f ( x0 ) + f ( x5 ) + f ( x1 ) + f ( x2 ) + f ( x3 ) + f ( x4 )) = −2.19606715 2
(b) Per calcolare una maggiorazione dell’errore commesso, dobbiamo calcolare la derivata seconda della f . Da f ( x) = e −x (x + 1) segue f ( x) = −e−x (x + 1) + e−x = −e−x x e f ( x) = e −x x − e−x = e −x ( x − 1). Poichè f ( x) è sempre negativa nell’intervallo di integrazione e a noi interessa la funzione valore assoluto della f ( x), studiamo la funzione g (x ) = | f (x )| = e −x (1 − x ). Si ha che g (x ) = e −x (x − 2) < 0 in [−2, 0], quindi g è decrescente e ha valore massimo per x = − 2. Si ha dunque che M = max | f (x )| = | f (−2)| = 22.1671682968 |(b − a)3 | = 0.591124488 Quindi | Etrap | ≤ M 12 · 52 Analiticamente, è facile calcolare l’integrale esatto (per parti): I =
0
−2
f ( x) d x = −e−x ( x + 1)|0−2 +
0
−2
e−x d x =
−e−x (x + 2)|0−2 = −2
Quindi l’errore esatto, in valore assoluto, è: I I trap = 0.196067154 ,
| −
|
un valore minore della maggiorazione trovata prima.
appunti di calcolo numerico
Esercizio 8 .7.2 Sia dato l’integrale 2
2
dx x−4 (a) Dare una sua approssimazione con la formula dei trapezi e n = 4 suddivisioni in parti uguali dell’intervallo di integrazione. 0
(b) Trovare una maggiorazione dell’errore commesso. (c) Confrontare l’errore esatto con la stima precedentemente trovata. (d) Dire in quanti sottointervalli occorre suddividere l’intervallo di integrazione per ottenere una maggiorazione dell’errore minore della tolleranza = 10 −5 .
Svolgimento
(a) Suddividendo l’intervallo di integrazione [ 0, 2] in n = 4 parti si trova un passo h = 2/4 = 1/2 = 0.5. La formula dei trapezi è: b − a f (a) + f (b) ( + f ( x1 ) + f ( x2 ) + f (x3 )) n 2 f (0) + f (2) = 0.5 ( + f (0.5) + f (1) + f (1.5)) 2 −0.5 − 1 − 0.571428571 − 0.666666667 − 0.8) = 0.5 ( 2 = −1.39404762
I T =
f (ξ ) (b − a)3 12 n2 2 −2 e f (x) = 4 . Da f (x ) = segue f ( x) = x−4 ( x − 4 )2 ( x − 4 )3 Per maggiorare l’errore dobbiamo considerare che vale 3 |E| ≤ max0≤x≤122 | f (x)| (b −n2a) , da cui dobbiamo calcolare M = max0≤x≤2 | f ( x)|.
(b) Consideriamo la formula dell’errore: E = −
La funzione ( x − 4)3 è continua, crescente e sempre negativa nel4 4 l’intervallo [0, 2]. Quindi | | : osserviamo il = 3 ( x − 4) (4 − x )3 4 cambiamento al denominatore. Poniamo g(x ) = . Ri(4 − x )3 12 sulta g ( x) = > 0 in [ 0, 2 ], quindi la g è crescente e (4 − x )4 ha valore massimo per x = 2. Perciò M = max0≤x≤2 | f ( x)| = | f (2)| = 243 = 1/2 = 0.5. Si ha allora la maggiorazione dell’errore 1 M 23 |E| ≤ 12 = = 0.0208333333 2 48 4 (c) L’integrale esatto si calcola facilmente:
131
132
annamaria mazzia
2
2
dx = 2 ln (| x − 4|)|20 = 2 ln (| − 2|) − 2 ln (| − 4|) = 2 ln (1/2 ) = ln (1/4 ) − 1.386294361 x − 4 0 L’errore esatto commesso con la formula dei trapezi, in valore assoluto, è | I − I T | = 0.00775325793
I =
(d) Perchè la maggiorazione dell’errore sia minore della tolleranza M 23 M − 5 10−5 cioè n 2 ≥ 23 105 = ≤ = 10 deve essere | E| ≤ 2 12 n 12 105 = 33333.333333. Quindi n > 182.574186, vale a dire n = 183. 3
Esercizio 8 .7.3 Dato l’integrale
I =
0.5
0
√ 1 1− x2 dx
(a) si approssimi I con i valori Q1 e Q2 ottenuti applicando il metodo di Cavalieri-Simpson prima a tutto l’intervallo e poi suddividendo l’intervallo in due parti uguali; (b) si approssimi I usando la formula di estrapolazione di Richardson; (c) dopo aver calcolato analiticamente il valore esatto di I, determinare l’errore esatto commesso con l’estrapolazione di Richardson.
Svolgimento
(a) Applichiamo la formula di Cavalieri-Simpson su tutto l’intervallo, considerando che l’ampiezza dell’intervallo è b − a = 0.5
0.5 ( f (0) + 4 f (0.25) + f (0.5)) = 0.523823565 6 Si ha, infatti, f (0) = 1, f (0.25) = 1.03279556 e f (0.5) = 1.15470054 . Suddividendo l’intervallo in due parti uguali, abbiamo h = 0.25, da cui i punti: x0 = a = 0, x1 = 0.125, x2 = 0.25, x3 = 0.375, e x4 = b = 0.5. Q1 =
h Q2 = ( f (x0 ) + 4( f ( x1 ) + 4 f (x3 )) + 2 f ( x2 ) + f ( x4 )) = 0.523616326 6 dove f (0.125) = 1.00790526, f (0.375) = 1.07871978 (essendo già in possesso degli altri valori, calcolati per Q 1 )
(b) La formula di estrapolazione di Richardson è: I R = Q 2 + da cui ricaviamo I R = 0.5236025101
Q2 − Q1 15
(c) Analiticamente l’integrale esatto è: I =
0.5
0
√ 1 1− x2 dx = arcsin (x)|0.5 0 = π /6 − 0 = 0.523598775
L’errore esatto commesso con l’estrapolazione di Richardson, in valore assoluto, è: | I − I R | = 3.7351 · 10−6 .
appunti di calcolo numerico
Esercizio 8 .7.4 È data la seguente tabella di dati sperimentali
xi yi
1
2
3
4
5
6
7
3 .1
5
6 .2
8 .6
9 .8
11.4
12.9
dove i valori y i approssimano il valore di una certa funzione f nei punti xi . Calcolare il valore approssimato di I = 17 f (x )dx impiegando la formula di Cavalieri-Simpson composta applicata su tutti i valori della tabella (vale a dire considerando le n = 3 suddivisioni dell’intervallo [1, 7] individuate dalla tabella).
Svolgimento
In questo esercizio, non sappiamo chi sia la funzione f ma abbiamo solo dei dati sperimentali. Perciò dobbiamo applicare la formula
di Cavalieri-Simpson utilizzando solo i dati a disposizione. D’altro canto, le ascisse dei punti, assegnati nell’intervallo [ 1, 7] ci permettono di avere n = 3 suddivisioni dell’intervallo su cui applicare la formula di Cavalieri-Simpson: la suddivisione [1, 3] (con punto centrale 2), la suddivisione [3, 5] (con punto centrale 4) e infine la suddivisione [ 5, 7] con punto centrale 6. Applicando la formula di Cavalieri-Simpson composta su questi n = 3 si ottiene come valore I = 49.333333333333333333.
Esercizio 8 .7.5 Sia da calcolare il seguente integrale:
I =
2
1
1 + 6x2 − 10x4 dx
(a) si approssimi I con la formula di Cavalieri-Simpson applicata su n = 1 e n = 2 suddivisioni in parti uguali dell’intervallo di integrazione; (b) dare una maggiorazione dell’errore commesso nei due casi confrontandolo poi con l’errore esatto; (c) applicare il metodo di estrapolazione di Richardson e spiegare l’errore che si ottiene.
Svolgimento
(a) Per n = 1 suddivisione dell’intervallo di integrazione, la formula di Cavalieri-Simpson è quella semplice: i punti da considerare sono gli estremi 1 e 2 e il punto centrale 1.5. Si ricava il valore I n1 = −47.083333333333329. Per n = 2 suddivisioni dell’intervallo, si hanno i sottointervalli [1,1.5] e [1.5,2 ] che hanno rispettivamente, come punti centrali, i valori 1.25 e 1.75. L’ampiezza della singola suddivisione vale
133
134
annamaria mazzia
0.5. Applicando la formula di Cavalieri-Simpson composta di ha I n2 = −47.005208333333329. (b) Per avere una maggiorazione dell’errore commesso, abbiamo bisogno della derivata quarta. Si ha f (x ) = 12 x − 40x3 , f (x ) = 12 − 120x2 , f ( x ) = −240x e f (iv ) (x ) = −240. La derivata quarta è costante. Il massimo di | f (iv) ( x)| vale 240. In questo caso la maggiorazione dell’errore, in valore assoluto, coincide esattamente
con l’errore vero (proprio perché la derivata quarta è costante!). Quindi En1 = 240/2880 = 8.3333333 E 24 ) = 5.2083333 E 003.
| |
−
− 002 e |En2 | = 240/(2880 ·
Quindi, nel calcolare l’errore vero come | I − I n | ci aspettiamo di trovare gli stessi risultati. Infatti, l’integrale esatto vale I = 2 2 4 3 52 1 1 + 6x − 10 x dx = | x + 2x − 2 x |1 = −47.
Se calcoliamo, ora, | I − I n1 | e | I − I n2 | ritroviamo gli stessi valori trovati prima.
(c) Se applichiamo la formula di estrapolazione di Richardson otteniamo I Rich = I n2 + ( I n2 − I n1 ) /15 = −47. Con Richardson otteniamo il valore esatto dell’integrale, dal momento che la relazione che ora lega il rapporto tra gli errori (tra n = 1 e n = 2 suddivisioni) e che porta alla formula di Richardson è una eguaglianza esatta, |En1 | = 4|En2 |!
Domande di riepilogo
8.8
1. Come si ricava la formula dei trapezi e quale significato geometrico
ha? 2.
Come si ricava l’errore nella formula dei trapezi?
3.
Come sono legate le formule della famiglia di Newton-Cotes all’interpolazione secondo Lagrange? Come si ricavano le formule della famiglia di Newton-Cotes? Cosa sono i coefficienti di Newton-Cotes?
4.
Spiegare la formula di Cavalieri-Simpson e il suo errore.
5.
Cosa significa “formula composta”? Quali formule composte abbiamo studiato?
6.
Spiegare la formula dei trapezi composta.
7.
Ricavare la formula dell’errore quando si applica la formula dei trapezi composta. Quali ipotesi occorre fare?
8.
Spiegare la formula di Cavalieri-Simpson composta.
9. Ricavare
la formula dell’errore quando si applica la formula di Cavalieri-Simpson composta. Quali ipotesi occorre fare?
appunti di calcolo numerico
10.
Cosa succede se si fa il rapporto tra gli errori passando da una formula composta con n suddivisioni in parti uguali dell’intervallo di integrazione ad una formula con 2n suddivisioni in parti uguali? Quali ipotesi devono essere verificate? Esaminare il caso in cui la formula composta è data dai trapezi e poi quello in cui si applica la formula composta di Cavalieri-Simpson.
11.
Spiegare l’estrapolazione di Richardson.
12. Quando l’estrapolazione di Richardson dà il valore esatto dell’in-
tegrale? 13. Mostrare che il procedimento di estrapolazione di Richardson se
applicato alla formula dei trapezi produce la formula di Cavalieri-
Simpson.
135
9 Metodi diretti per la soluzione di sistemi lineari 9.1
Un esempio di sistema lineare
All’inizio e alla fine abbiamo il mistero. Potremmo dire che abbiamo il disegno di Dio. A questo mistero la matematica si avvicina, senza penetrarlo. Ennio De Giorgi
S i consideri la capacità C di un conduttore. Dall’elettrostatica, sappiamo che vale q = C φ dove q rappresenta la carica del conduttore e φ il suo potenziale elettrostatico, quando il conduttore è isolato. Nel
caso in cui il conduttore non sia isolato, la situazione cambia. Supponiamo di avere 4 conduttori in equilibrio elettrostatico all’interno di una cavità collegata a terra (a terra il potenziale elettrostatico vale
zero). Supponendo di collegare i conduttori 2, 3 e 4 a terra, si ha φ2 = φ 3 = φ 4 = 0 e φ 1 = 0. Il conduttore 1 induce carica sugli altri conduttori, per cui, per ciascun conduttore vale, rispettivamente: q1 = C11 φ1 q2 = C21 φ1 q3 = C31 φ1 q4 = C41 φ1
Si ripete lo stesso discorso supponendo φ 2 = 0 e tutti gli altri potenziali nulli. Poi sia φ 3 = 0 e gli altri potenziali nulli. Infine φ 4 = 0 e tutti gli altri nulli. La sovrapposizione dei 4 stati considerati corrisponde alla situazione in cui φ1 , φ2 , φ3 , φ4 sono tutti diversi da zero. Si ha perciò:
q1 = C11 φ1 + C12 φ2 + C13 φ3 + C14 φ4 q2 = C21 φ1 + C22 φ2 + C23 φ3 + C24 φ4 q3 = C31 φ1 + C32 φ2 + C33 φ3 + C34 φ4 q4 = C41 φ1 + C42 φ2 + C43 φ3 + C44 φ4
I coefficienti C ii si chiamano coefficienti di capacità, mentre i coefficienti Cij , con j = i si chiamano coefficienti di induzione. Si può presentare il problema inverso: note le cariche q i , si vuole determinare il valore dei φi . Si deve quindi risolvere un sistema lineare di 4 equazioni in 4 incognite.
138
annamaria mazzia
In questo Capitolo studieremo metodi diretti per la soluzione di sistemi lineari del tipo
a11 x1 + a12 x2 + . . . + a1n xn a21 x1 + a22 x2 + . . . + a2n xn a31 x1 + a32 x2 + . . . + a3n xn .. . an1 x1 + an2 x2 + . . . + ann xn
= b1 = b2 = b3
(9.1)
. = .. = bn
dove a ij , per i , j = 1, 2, . . . , n e b i , per i = 1, 2, . . . , n sono assegnati e le incognite da determinare sono x1 , x2 , . . . , xn . I metodi diretti sono metodi che risolvono il problema in un numero fissato di passi,
introducendo un errore dovuto solo all’arrotondamento. 9.2
Elementi di Algebra Lineare Sia dato un sistema lineare come in ( 9.1). Per poterlo semplificare, possiamo eseguire le seguenti operazioni (trasformazioni elementari):
L’i-sima equazione del sistema può essere moltiplicata per una qualunque costante λ = 0 e l’equazione risultante può essere usata
al posto di quella di partenza: la soluzione del sistema non cambia.
L’equazione j-sima, moltiplicata per una qualunque costante λ = 0 e sommata all’equazione i -sima, può essere usata al posto dell’equazione i -sima di partenza: la soluzione del sistema non cambia. Le equazioni i -sima e j -sima possono essere scambiate: la soluzione del sistema non cambia. In questa maniera, un sistema lineare può essere trasformato in uno di più facile soluzione, come vedremo nell’algoritmo di eliminazione
di Gauss. Definizione 9 .2.1 Si definisce matrice n
× m una griglia rettangolare (o
array) di elementi disposti su n righe e m colonne.
Generalmente, una matrice si denota con una lettera maiuscola, per esempio A , mentre i suoi valori si indicano con la corrispondente lettera minuscola e i pedici che si riferiscono alla riga e colonna in cui si trova quel valore, per esempio a ij si riferisce all’elemento di riga i e
colonna j della matrice A .
A = aij =
a11 a12 a21 a22 a31 a32 .. .. . . an1 an2
a13 a23 a33 .. . a n3
. . . a1 n . . . a2 n . . . a3 n . . . . .. . . . ann
Poichè le operazioni da fare coinvolgono i coefficienti a ij e bi , conviene scrivere il sistema di equazioni lineari utilizzando una forma compatta mediante matrici e vettori.
appunti di calcolo numerico
Per indicare che una matrice A ha n righe e m colonne, diremo che
A ha dimensione n × m. Quando lavoreremo con matrici quadrate di n righe e n colonne, parleremo di dimensione n della matrice per indicare che il numero di righe è uguale al numero di colonne e vale
n.
I vettori si possono vedere come un caso particolare delle matrici. Si parla di vettore riga se ci riferiamo a una matrice 1 × n e si parla di vettore colonna se ci si riferisce a una matrice n × 1. Per indicare un vettore colonna e un vettore riga si usa, rispettiva-
mente, la notazione
x =
x1 x2 x3 .. . xn
x = x1
x2 x3 . . . xn
Vediamo, nel seguito, alcune importanti definizioni e proprietà delle matrici. Due matrici A e B , di dimensione n × m, sono uguali se hanno lo stesso numero di righe e di colonne, e, inoltre, vale, a ij = b ij per i, = 1, 2, . . . , n e j = 1, 2 , . . . , m. Date due matrici A e B , entrambe n × m, si definisce la matrice somma di A e B la matrice n × m A + B i cui elementi sono dati da a ij + bij , per i , = 1, 2, . . . , n e j = 1, 2, . . . , m. Se A è una matrice n × m e λ è un numero reale, la moltiplicazione scalare di λ per A , denotata con λ A, è una matrice n × m i cui elementi sono λ aij per i , = 1, 2, . . . , n e j = 1, 2, . . . , m. Indichiamo con O la matrice cosiddetta nulla, i cui elementi sono
tutti uguali a zero. Data la matrice A, n × m, indichiamo con − A la matrice i cui elementi sono − aij . Teorema 9 .2.1 Date A, B e C tre matrici n
valgono le seguenti proprietà: A + B = B + A A + O = O + A = A λ( A + B) = λ A + λ B λ(µ A) = (λµ ) A
× m, e λ e µ due numeri reali,
( A + B) + C = A + ( B + C) A + ( A) = A + A = O (λ + µ) A = λ A + µ A 1 A = A
−
−
139
Esempio:
2 A = 3
10 1
5 0
è una matrice 2 3 con elementi a 11 = 2 , a12 = 10, a 13 = 5, a 21 = 3, a22 = 1 e a23 = 0 .
×
140
annamaria mazzia
Date due matrici A di dimensione n m e B di dimensione m p, la matrice prodotto di A e B , denotata con C = AB, è una matrice
×
×
i cui elementi c ij sono dati da: m
cij = ∑ aik bkj = a i1 b1 j + ai2 b2 j + . . . + aim bmj k =1
per i = 1, 2, . . . , n e j = 1, 2, . . . , p.
Data una matrice A di dimensione n e un vettore colonna x di lunghezza n , si definisce il vettore y = A x prodotto della matrice A per il vettore x , il vettore le cui componenti sono date da n
yi = ∑ aij x j per i = 2, . . . , n j=1
.
Dati due vettori x e y si definisce prodotto scalare x T y = ∑ in=1 xi yi
In generale, AB = B A. Una matrice D si dice diagonale se è quadrata con d ij = 0 per i = j . Gli elementi diversi da zero si trovano quindi sulla diagonale (detta diagonale principale) che si può tracciare partendo dall’elemento in alto a sinistra (di posto 11) e arrivando all’elemento in basso a destra (di posto nn ).
Esempio:
D =
I =
Una matrice si dice tridiagonale se gli elementi non nulli si trovano sulla diagonale principale e sugli elementi delle diagonali
0 2 0 0
0 0 5 0
0 0 0 −1
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Esempio di matrice tridiagonale:
che si trovano sopra e sotto la diagonale principale. Una matrice si dice triangolare se ha tutti gli elementi nulli ad eccezione di quelli che si trovano tutti sopra (o tutti sotto) la diagonale principale.
1 0 0 0
Esempio:
Si chiama matrice identità e si indica con I , una matrice diagonale
i cui elementi diagonali valgono 1 .
A =
−
2 1 0 0 0
1 −2 1 0 0
0 1 −2 1 0
0 0 1 −2 1
– Si definisce matrice triangolare superiore U ( U sta per upper) di
dimensione n , la matrice per la quale, per j = 1, 2, . . . , n, si ha uij = 0 per i = j + 1, j + 2, . . . , n – Si definisce matrice triangolare inferiore L ( L sta per lower) di
dimensione n , la matrice per la quale, per i = 1, 2, . . . , n, si ha lij = 0 per j = i + 1, i + 2, . . . , n Teorema 9 .2.2 Date A matrice n
× m, B matrice m × s, C matrice s × p,
D matrice m × s, I m e I s le matrici identità, rispettivamente di dimensione m e s, e λ e µ due numeri reali, valgono le seguenti proprietà:
Esempi:
U =
L =
− 1 0 0
−2 3.2 0
1 2 3.4
5.3 −4 10 0 −21 5.7
0 0 −4
0 0 0 1 −2
appunti di calcolo numerico
A( BC ) = ( AB )C I m B = B BI s = B
141
A( B + D) = AB + AD λ( AB ) = ( λ A ) B = A (λ B).
A questo punto, il sistema lineare (9.1) può essere scritto in forma
matriciale come Ax = b
Collegata alla soluzione di un sistema lineare è l’inversa di una matrice. Definizione 9 .2.2 Data una matrice A di dimensione n, A si dice nonsin-
golare (o invertibile o regolare) se esiste una matrice, che indichiamo come A−1 di dimensione n tale che AA−1 = A −1 A = I La matrice A −1 si chiama matrice inversa della A. Una matrice che non ha inversa si dice, invece, singolare (o non invertibile). Teorema 9 .2.3 Per ogni matrice A di dimensione n nonsingolare si ha:
A−1 è unica A−1 è nonsigolare e ( A−1 )−1 = A Se B è non singolare, di dimensione n, allora ( AB )−1 = B −1 A−1
Dato il sistema A x = b , se A è nonsingolare, si ha x = A −1 b. Un’altra importante matrice associata ad un’assegnata matrice A è
la sua trasposta. Definizione 9 .2.3 La trasposta di una matrice A di dimensione n
A T , di dimensione m
×m è
× n, per la quale la colonna i la matrice indicata con della trasposta coincide con la riga i della matrice A di partenza: a ijT = a ji .
Esempio:
Legata alla trasposta di una matrice è la seguente definizione. Definizione 9 .2.4 Una matrice quadrata si dice simmetrica se
A = A T .
Teorema 9 .2.4 Valgono le seguenti proprietà (per matrici per cui è possi-
bile eseguire le seguenti operazioni): ( AT )T = A ( AB )T = B T A T
1 A = 2
Il determinante di una matrice permette di stabilire esistenza e unicità della soluzione nei sistemi lineari. Data una matrice quadrata A, il suo determinante si indica mediante la notazione det( A) o A .
| |
Se A = [ a] è una matrice 1 × 1, det( A) = a . Se A è una matrice di dimensione n, si definisce minore Mij il determinante della sottomatrice di dimensione n − 1 ottenuta cancellando la i -sima riga e la j -sima colonna da A .
3 6
Esempio:
A =
( A + B)T = A T + B T Se esiste A−1 allora ( A−1 )T = ( AT )−1
2 5
1 4 8
4 2 6
8 6 5
AT =
AT =
1 2 3
2 5 6
1 4 8
4 2 6
8 6 5
142
annamaria mazzia
Il determinante di A è dato dalla formula n
det ( A) = ∑ (−1)i+ j aij Mij
(fissato un qualunque i = 1, 2, . . . , n)
det ( A) = ∑ (−1)i+ j aij Mij
(fissato un qualunque j = 1, 2, . . . , n)
j=1 n i =1
Il calcolo del determinante di una matrice di dimensione n richiede O (n!) moltiplicazioni. Quindi, anche per valori piccoli di n , le operazioni da fare diventano proibitive. Teorema 9 .2.5 Sia assegnata A una matrice quadrata di dimensione n.
Se una riga o una colonna di A ha elementi tutti nulli, det ( A) = 0. Se A ha due righe o due colonne con gli stessi elementi, det ( A) = 0. Denotata con A˜ la matrice ottenuta scambiando due righe di A, si ha det ( A˜ ) = −det ( A). Denotata con A˜ la matrice ottenuta da A moltiplicando una sua riga per un numero reale λ , si ha det ( A˜ ) = λ det ( A). Denotata con A˜ la matrice ottenuta da A sommando una sua riga per ˜ ) = det( A). un’altra che è stata moltiplicata per λ , si ha det ( A Se B è un’altra matrice di dimensione n, si ha det( AB ) = det( A)det ( B) det ( AT ) = det( A) Se esiste A−1 , si ha det ( A−1 ) =
1 det ( A)
Se A è una matrice triangolare superiore o triangolare inferiore o dia gonale, allora det ( A) = ∏ni=1 aii 9.3
Metodo di eliminazione di Gauss Ritorniamo al sistema di equazioni ( 9.1), che possiamo scrivere in forma matriciale come A x = b . Nel metodo di eliminazione di Gauss il sistema lineare di partenza viene trasformato in uno equivalente di più facile soluzione in quanto la matrice del nuovo sistema ha forma triangolare (superiore o inferiore) e può essere risolto facilmente mediante sostituzione (all’indietro
o in avanti). Vediamo nel dettaglio come si risolve un sistema lineare di forma triangolare, utilizzando queste tecniche.
Carl Friedrich Gauss fu un matematico e fisico tedesco (1777-1855) che ha dato il suo contribuito in maniera significativa in numerosi campi: teoria dei numeri, analisi, geometria differenziale, geodesia, magnetismo, astronomia, ottica. Al pari di Eulero, Newton e Archimede è considerato uno dei più grandi matematici della storia.
In suo onore è stato dato il suo nome a una nave di ricerca tedesca, a una m ontagna (Gaussberg) in Antartide, a un cratere sulla luna, e all’unità di misura della densità di flusso magnetico o di induzione magnetica.
appunti di calcolo numerico
9.3.1
Sostituzione all’indietro e in avanti La matrice A sia nonsingolare e triangolare superiore, cioè
A =
a11 a12 . . . a1n . a22 . . a2n . . . .. . ann
La soluzione del sistema A x = b può dunque procedere dal basso
verso l’alto, a partire dall’ultima riga. Le equazioni, infatti, sono
− −
a11 x1 + a12 x2 + a13 x3 + . . . . . . + a1n xn a22 x2 + a23 x3 + . . . . . . + a2n xn a33 x3 + . . . . . . + a3n xn .. .
= b1
an 1 n 1 xn−1 + an−1 n xn ann xn
= b n−1
= b2 = b2
.
= .. = b n
L’ultima riga si legge come a nn xn = b n . Quindi possiamo ricavare xn = bn / ann . Noto il valore di x n , possiamo ricavare x n−1 dalla riga n − 1 del 1 sistema ottenendo x n−1 = − a x ). (b a n −1 n −1 n −1 n −1 n n Si procede a ritroso in questo modo arrivando fino alla prima equazione che ci permette di calcolare il valore di x 1 . Osserviamo che tutte le divisioni per i coefficienti a ii sono possibili in quanto stiamo supponendo A non singolare e, poichè, in questo caso, det ( A) = n = 0, necessariamente ciascun a ii = 0. ∏i=1 aii
Possiamo dunque scrivere l’ algoritmo di sostituzione all’indietro:
Per i = n fino a i = 1, procedendo all’indietro con passo −1 bi − ∑ jn=i+1 aij x j xi = aii
Un analogo algoritmo si ricava quando la matrice è triangolare inferiore. In tal caso, si parte dalla prima equazione per ricavare x 1 e poi si va avanti nell’equazione successiva. Si ha l’algoritmo di sostituzione in avanti: Per i = 1 fino a i = n , procedendo in avanti con passo 1 1 bi − ∑ ji− =1 aij x j xi = aii
9.3.2
Eliminazione di Gauss: esempio particolare Il metodo di eliminazione di Gauss trasforma il sistema di partenza in uno ad esso equivalente ma più facile da risolvere, perchè la
143
144
annamaria mazzia
matrice del sistema è di forma triangolare superiore, in modo da poter applicare il metodo di sostituzione all’indietro. Per capire come si applica questo metodo consideriamo un semplice esempio di sistema di 3 equazioni in 3 incognite, Ax = b dove A =
2 1 2 4 1 2 1 2 5
b =
10 12 20
Le equazioni del sistema sono, dunque,
2x1 + x2 + 2x3 = 10 4x1 + x2 + 2x3 = 12 x1 + 2x2 + 5x3 = 20
Al primo passo del metodo, cerchiamo di annullare tutti i coeffi-
cienti dell’incognita x 1 nella seconda e terza equazione. – Dividiamo il coefficiente 4 che moltiplica x 1 nella seconda equa-
zione con il coefficiente 2 che moltiplica x1 nella prima equa4 zione. Otteniamo il valore = 2. Adesso moltiplichiamo per 2 questo valore (2) la prima equazione, ricavando 2 (2x1 + x2 + 2x3 = 10 ) =⇒ 4x1 + 2x2 + 4x3 = 20 Se ora facciamo la sottrazione tra la seconda equazione del sistema e questa che abbiamo ricavato otteniamo 4x1 + x2 + 2x3 = 12 4x1 + 2x2 + 4x3 = 20
−
=
−x2 − 2x3 = −8 Sostituiamo questa equazione alla seconda del sistema (il sistema rimane equivalente), ricavando
−
2x1 + x2 + 2x3 = 10 x2 − 2x3 = −8 x1 + 2x2 + 5x3 = 20
Abbiamo eliminato, in questo modo, il coefficiente di x 1 nella seconda equazione. – Alla stessa maniera, dividiamo il coefficiente di x 1 nella terza equazione (che vale 1) con il coefficiente di x 1 nella prima equa-
1 1 zione: abbiamo . Moltiplichiamo la prima equazione per 2 2 e poi facciamo la sottrazione tra la terza equazione e la prima
appunti di calcolo numerico
1 moltiplicata per : 2 x1 + 2x2 + 5x3 = 20 −
x1 + 2x2 + 5x3 = 20 − 1 1 = ( 2x1 + x2 + 2x3 = 10 ) ⇐⇒ x1 + x2 + x3 = 5 2 2
3 x + 4x3 = 15 2 2 Sostituiamo questa equazione alla terza del sistema. – A questo punto il sistema è
−
2x1 + x2 + 2x3 = 10 x2 − 2x3 = −8 3 x + 4x3 = 15 2 2
Nella seconda e terza equazione non c’è più l’incognita x 1 . Per poter arrivare ad un sistema di equazioni triangolare superio-
re, dobbiamo eliminare il coefficiente di x 2 nella terza equazione del sistema. Ripetiamo il ragionamento appena fatto, lavorando sulla seconda e terza equazione. 3 2 lo dividiamo per il coefficiente di x 2 della seconda equazione ( che vale −1). Moltiplichiamo la seconda equazione per questo 3 coefficiente (cioè per − ) e poi sottraiamo la terza equazione 2 3 dalla seconda moltiplicata per − : 2 3 3 x2 + 4x3 = 15 − x + 4x3 = 15 − 2 2 2 − 32 ( −x2 − 2x3 = −8) ⇐⇒ 32 x2 + 3x3 = 12 =
– Consideriamo il coefficiente di x 2 della terza equazione ( ) e
x3 = 3 – Sostituiamo questa equazione alla terza del sistema, ricavando
il sistema equivalente
−
2x1 + x2 + 2x3 = 10 x2 − 2x3 = −8 x3 = 3
Con tutte le trasformazioni effettuate, abbiamo trasformato il sistema di partenza in uno equivalente, che si può risolvere facilmente mediante sostituzioni all’indietro. Dall’ultima equazione abbiamo x3 = 3. Sostituendo questo valore nella seconda equazione otteniamo −x2 − 6 = −8 da cui x 2 = 2. Infine, sostituendo i valori di x 3 e x 2 nella prima equazione abbiamo 2 x1 + 2 + 6 = 10 da cui x 1 = 1.
145
146
9.3.3
annamaria mazzia
Eliminazione di Gauss: caso generale Vediamo ora il caso generale, in cui il sistema di n equazioni ha la matrice dei coefficienti A piena (o densa, cioè abbia quasi tutti gli elementi non nulli). Applichiamo trasformazioni elementari per riga in modo da ridurre il sistema di partenza in uno equivalente di forma
triangolare superiore, che potremo risolvere mediante sostituzioni all’indietro. La soluzione del problema A x = b , infatti, non cambia se moltiplichiamo una riga per una costante, se sottraiamo il multiplo di una riga da un’altra riga o se facciamo scambi di righe, come abbiamo detto all’inizio della Sezione 9 .2. Supponiamo, per il momento, che tutti gli elementi della diagonale
principale di A siano non nulli. Al primo passo vogliamo eliminare gli elementi della prima colonna al di sotto della diagonale principale: a – sottraiamo la prima equazione moltiplicata per 21 dalla secona11
da equazione:
a21 x1 + a22 x2 + a23 x3 + . . . + a2n xn = b2 − a21 a ( a11 x1 + a12 x2 + a13 x3 + . . . + a1n xn ) = 21 b1 = a11 a11 ( a22
− aa2111 a12 )x2 + ( a23 − aa2111 a13 )x3 + . . . + ( a2n − aa2111 a1n )xn = b2 − aa2111 b1
a – sottraiamo la prima equazione moltiplicata per 31 dalla terza a11
equazione. – ...
a – sottraiamo la prima equazione moltiplicata per n1 dalla n-sima a11
equazione.
Come risultato di questa operazione avremo una nuova matrice con gli elementi della prima colonna, eccetto quello di posto 11, tutti uguali a zero.
a11 a12 (1) 0 a22 .. .. . . (1) 0 an2
. . . a1 n . . . a2(1n) . . . . .. . . . a(nn1)
x1 x2 .. . xn
=
b1 b2(1) .. . bn(1)
Al secondo passo, consideriamo il sistema ridotto che si ha igno-
rando la prima equazione del sistema e la prima colonna della nuova matrice che abbiamo ottenuta (che ha tutti 0 al di sotto dell’elemento diagonale).
appunti di calcolo numerico
147
A questa sottomatrice applichiamo lo stesso procedimento di prima,
sottraendo, quindi, la prima equazione della sottomatrice molti( 1) a32 plicata per (1) dalla seconda equazione della sottomatrice, e così a22 via. Dopo questo passo, il sistema sarà equivalente a:
a11 a12 (1) 0 a22 .. . 0 .. .. . . 0 0
. . . . . . a1 n a(231) . . . a2(1n) a(332) . . . a3(2n) .. . . . . . .. a(n23) . . . a(nn2)
x1 x2 x3 .. . xn
=
b1 b2(1) b3(2) .. . bn(1)
Dopo aver applicato questo procedimento n − 1 volte, avremo
un sistema triangolare superiore semplice da risolvere utilizzando
l’algoritmo di sostituzione all’indietro.
9.4
a11 a12 . . . (1) 0 a22 a(231) .. . 0 a(332) .. .. . . ... 0 0 ...
−
. .. ...
a 1n a(21n)
...
a(32n) .. .
... 0 a(nnn
1)
x1 x2 x3 .. . xn
=
b1 b2(1) b3(2) .. . bn(n−1)
Strategie di pivoting Gli elementi diagonali aii(k) generati ad ogni passo del metodo di eliminazione sono detti elementi pivotali. Nel descrivere il metodo di eliminazione di Gauss abbiamo supposto, per semplicità, che tutti gli elementi diagonali fossero diversi da zero. Ma una matrice può essere non singolare senza che gli elementi
della diagonale principale siano tutti diversi da zero. Inoltre, andando avanti nel procedimento di eliminazione, può succedere che un elemento pivotale diventi nullo – e quindi la corrispondente incognita non può essere eliminata attraverso quella equazione nel procedimento di sostituzione all’indietro. C’è, infine, da considerare il fatto che si possono avere grossi errori
numerici quando un elemento pivotale è molto piccolo. Cosa fare in queste circostanze? In che modo applicare l’eliminazione di Gauss? Si hanno le cosiddette strategie di pivoting: pivoting parziale
Mano mano che si va avanti nell’eliminazione, per i = 1, 2, . . . , n
1 a ciascuno stadio si sceglie il più piccolo intero q tale che
|a(qii−1) | = imax | a ji(i−1) | ≤ j≤n e si scambiano le righe i e q .
−
Si opera, dunque, un controllo sulla colonna i-sima dalla posizione i fino alla posizione n , andando a cercare il coefficiente massimo in modulo.
148
annamaria mazzia
pivoting totale
Nel pivoting totale, invece, la ricerca dell’elemento più grande in tutta la sottomatrice che si ha considerando le colonne e le righe rispettivamente a destra e sotto l’elemento diagonale i -simo. Si vanno quindi a cercare i più piccoli interi q e r tali che (i 1 )
|aqr−
( i 1)
| = i≤max | a jk− k, j≤n
scambio inverso una volta risolto il sistema.
|
Il maggiore sforzo computazionale garantisce maggiore accuratez-
za e stabilità nei risultati, nel senso che gli errori di arrotondamento non sono così amplificati come potrebbe succedere senza l’adozione di una tecnica di pivoting. Esempio Consideriamo il sistema
x1 + x2 + x3 = 1 x1 + 1.0001 x2 + 2x3 = 2 x1 + 2x2 + 2x3 = 1
L’esatta soluzione, corretta a 4 cifre decimali, è x = (1, 1.0001, 1.0001 ) T . L’eliminazione di Gauss senza pivoting porta, applicando il primo
−
passo del metodo, al sistema
−
x1 + x2 + x3 = 1 0.0001x2 + 1x3 = 1 1x2 + 1x3 = 0
e, infine, a x1 + x2 + x3 = 1 0.0001x2 + 1x3 = 1 9999x3 = −10000
Se risolviamo il sistema utilizzando un’aritmetica in base 10 con cifre decimali, la sostituzione all’indietro ci darà 1−1 = 0, 0.0001 La soluzione è completamente sbagliata. x3 =
−10000 = 1.000, −9999
x2 =
3
x1 = 0.
Se, invece, facciamo lo scambio della seconda e terza riga adottando
il pivoting parziale, allora avremo il sistema:
x1 + x2 + x3 = 1 1x2 + 1x3 = 0 0.0001x2 + 1x3 = 1
e, infine, x1 + x2 + x3 = 1 1x2 + 1x3 = 0 0.9999x3 = 1
Con il pivoting totale, si opera uno scambio non solo di righe ma anche di colonne in modo da portarel’elemento pivotale dalla riga e colonna qr al posto ii . Di questo scambio di colonne bisogna conservare traccia perchè vengono scambiate anche le componenti del vettore soluzione, in modo da effettuare lo
appunti di calcolo numerico
149
Questa volta si ha (sempre lavorando con 3 cifre decimali) x 3 = 1.000, x2 = 1.000, x1 = 1.000, che è la soluzione corretta a 3 cifre decimali.
−
9.5
Fattorizzazione triangolare Il metodo di eliminazione di Gauss, visto in forma matriciale, decom-
pone la matrice A nel prodotto LU di due matrici, la L triangolare inferiore, e la U triangolare superiore. Ad ogni passo, infatti, il metodo di eliminazione può essere visto introducendo la matrice
M(k) =
1 0 .. . .. . .. .
1 0 1 .. . 0 .. .. . .
1 a(kk+11k) ( k 1)
− − − 1 akk a(kk+−21k) .. .. .. ... . . . − ( k − 1) a .. . .. .
.. . .. .
.. . .. .
kk
.. .
..
.
( k 1)
−
an k−
a(kkk−1)
1
Le matrici intermedie che vengono generate sono date da A(k) = M (k) A(k−1) = M (k) M(k−1) . . . M(1) A mentre il vettore termine noto è dato da b (k) = M (k) b(k−1) = M (k) M(k−1) · · · M(1) b. Dopo n − 1 passi, avremo un sistema la cui matrice finale è triangolare superiore (possiamo chiamare questa matrice U ): U = A (n−1) = M (n−1) . . . M(2) M(1) A Per ritornare alla matrice di partenza A , possiamo moltiplicare ambo
i membri dell’uguaglianza appena scritta con la matrice data da L = ( M (n−1) · · · M(2) M(1) )−1 = [ M(1) ]−1 · · · [ M(n−2) ]−1 [ M(n−1) ]−1 L è triangolare inferiore con elementi dati dal prodotto delle matrici M (k) generate durante l’eliminazione di Gauss. Otteniamo quindi A = LU . 9.5.1
Fattorizzazione LDU L’eliminazione di Gauss è un caso particolare di fattorizzazione LDU ,
nella quale la matrice A viene decomposta nel prodotto di 3 matrici, la L che è triangolare inferiore con elementi sulla diagonale principale (elementi diagonali) uguali a 1 , la D che è una matrice diagonale e la U che è una triangolare superiore con elementi diagonali uguali a 1 .
Si parla di fattorizzazione in quanto la matrice A viene decomposta nel prodotto di tre matrici (fattori).
150
annamaria mazzia
Nell’eliminazione di Gauss vista prima, nella U abbiamo inglobato
anche la matrice D , per cui abbiamo una fattorizzazione LU . La decomposizione LDU è assicurata dal teorema LDU . Prima di vedere il teorema, definiamo i minori principali di una matrice A . Definizione 9 .5.1 Data una matrice A si definisce minore principale di
dimensione k (con 1 ≤ k ≤ n), la sottomatrice che si ha prendendo le prime k righe e k colonne di A.
a11 . . . a1k .. .. . . ak1 . . . akk
Teorema 9 .5.1 ( LDU ) Nell’ipotesi che tutti i minori principali di A, (per
i = 1, 2, . . . , n) siano non-singolari, allora la matrice A è decomponibile in maniera univoca nel prodotto A = LDU
Qualsiasi matrice non singolare può essere condotta sotto una forma tale da soddisfare il teorema LDU mediante opportuni scambi di righe e di colonne (abbiamo visto cosa fare quando un elemento pivotale è nullo). Fare uno scambio di righe o di colonne significa moltiplicare la matrice A con un’opportuna matrice di permutazione. Una matrice di permutazione P è una matrice ottenuta dalla matrice identità operando scambi di righe o di colonne in modo che la matrice risultante abbia esattamente un unico valore diverso da zero
su ogni riga e colonna, e tale valore sia uguale a 1 . Esempio Si consideri la matrice di permutazione P di dimen-
sione 3 data da P =
1 0 0 0 0 1 0 1 0
Qualunque sia la matrice A, di dimensione 3, moltiplicandola a sinistra per P si ottiene lo scambio della seconda e terza riga di A; invece, moltiplicandola a destra per P si ottiene lo scambio della seconda e terza colonna di A :
PA =
AP =
1 0 0 0 0 1 0 1 0
a11 a12 a13 a21 a22 a23 = a31 a32 a33
a11 a12 a13 a21 a22 a23 a31 a32 a33
1 0 0 0 0 1 = 0 1 0
a11 a12 a13 a31 a32 a33 a21 a22 a23
a11 a13 a12 a21 a23 a22 a31 a33 a32
Quindi, il teorema LDU si può applicare alla matrice A o ad un’opportuna matrice PA, se si effettua il pivoting parziale, o a PAQ
appunti di calcolo numerico
151
se si effettua il pivoting totale (e quindi si considerano due matrici di
permutazioni P e Q ). In genere, la matrice D viene inglobata nella L o nella U (postmoltiplicando o pre-moltiplicando le L e le U definite prima per la D). Nel caso in cui la matrice D viene inglobata nella matrice L , la L ha elementi diagonali l ii = 0, mentre la U ha elementi diagonali unitari. Si parla di fattorizzazione di Crout.
Nel caso in cui la matrice D viene inglobata nella matrice U , la = 0 , mentre la L ha elementi diagonali U ha elementi diagonali u ii unitari. Si parla di fattorizzazione di Doolittle. Scriviamo in forma estesa il prodotto tra matrici, nell’ipotesi di operare la fattorizzazione di Crout:
a11 a12 . . . a1n a21 a22 . . . a2n .. .. .. . . . an1 an2 . . . ann
=
l11 0 . . . 0 l21 l22 . . . 0 .. .. .. . . . ln1 ln2 . . . lnn
1 u12 . . . u1n 0 1 . . . u 2n .. .. .. . . . 0 0 ... 1
Moltiplichiamo la prima riga di L per le colonne di U ed eguaglia-
mo i termini con gli elementi della prima riga di A . Otteniamo: l11 · 1 = a 11 l11 · u1k = a 1k , k = 2, . . . , n Quindi: l11 = a 11 e u 1k = a 1k /l11 . Abbiamo ricavato gli elementi della prima riga di L e U . Moltiplicando le successive righe di L per le colonne di U ed uguagliando i termini ai corrispondenti termini di A , abbiamo: j−1
lij = a ij − ∑ lim umj
i = 1, 2, . . . n j = 1, 2, . . . , i
m =1
i−1 1 uij = ( aij − ∑ lim umj ) lii m =1
i = 1, 2, . . . , n − 1 j = i + 1, . . . n
Si calcolano prima gli elementi della riga i -sima di L e poi quelli della riga i -sima di U , per i = 1, 2, . . . , n. Trovate le matrici L e U , il sistema di partenza A x = b è equivalente a LU x = b . Si pone, dunque, y = U x, ottenendo il sistema L y = b . Si ricava facilmente y mediante sostituzione in avanti e da U x = y si ricava x
mediante sostituzione all’indietro. Lo sforzo computazionale maggiore è quindi quello per il calcolo dei coefficienti di L e U . 9.5.2
Fattorizzazione di Gauss senza pivoting Abbiamo visto che, a volte, il metodo di eliminazione di Gauss richiede scambi di righe per evitare divisioni per zero. Allo stesso modo, il
Nell’eliminazione di Gauss noi ricaviamo espressamente solo la U mentre le modifiche operate sulla colonna dei termini noti è equivalente al prodotto L −1 b (quindi da LU x = b risolviamo U x = L −1 b).
152
annamaria mazzia
teorema di fattorizzazione LDU vale su matrici A non singolari o su
matrici ottenute da A mediante moltiplicazioni a sinistra o a destra con opportune matrici di permutazione. Ci chiediamo se esistono matrici per le quali il metodo di elimina-
zione di Gauss possa essere implementato senza scambi di righe e per le quali l’algoritmo di eliminazione di Gauss sia stabile rispetto ad una crescita di errori di arrotondamento. Vediamo, nel seguito, alcune speciali classi di matrici per cui valgono le nostre richieste. Definizione 9 .5.2 Una matrice A di dimensione n si dice diagonalmente
dominante in senso stretto per righe se vale la relazione
|aii |
n
per ogni i = 1, 2, . . . , n.
∑ |aij |
>
j=0 =i j
Definizione 9 .5.3 Una matrice A di dimensione n si dice diagonalmente
dominante in senso stretto per colonne se vale la relazione
|a jj |
n
per ogni j = 1, 2, . . . , n.
∑ |aij |
>
i =0 = j i
Esempio
A =
7 3 2 10 5 0
1 −2 6
A è una matrice diagonalmente dominante in senso stretto per righe poichè vale:|7| > |3| + |1| = 4, |10| > |2| + | − 2| = 4 e |6| > |5| + |0|. Non è diagonalmente dominante in senso stretto per colonne in quanto sulla prima colonna si ha |7| = |2| + |5|.
Esempio
A =
−
6 3 −4 3 9 5 4 5 11
A non è diagonalmente dominante in senso stretto per righe poichè, sulla prima riga si ha |6| < |3| + | − 4| = 7. Essendo simmetrica, la matrice non può essere neanche diagonalmente dominante in senso stretto per colonne, perchè la relazione che abbiamo sulla prima riga
vale sulla prima colonna.
Le definizioni appena date si possono rilassare, definendo le matrici
diagonalmente dominanti. Una matrice A di dimensione n si dice diagonalmente dominante per righe se vale la relazione n
|aii | ≥ ∑ |aij | j=0 =i j
per ogni i = 1, 2 , . . . , n.
appunti di calcolo numerico
153
Analoga è la definizione di matrice diagonalmente dominante per colonne (basta applicare la definizione di matrice diagonalmente
dominante per righe sulla matrice A T ) Si hanno i seguenti teoremi. Teorema 9 .5.2 Se A è una matrice diagonalmente dominante e non sin-
golare, allora il metodo di eliminazione di Gauss può essere implementato senza alcuno scambio di righe e di colonne e i calcoli sono stabili rispetto alla crescita degli errori di arrotondamento. Teorema 9 .5.3 Se A è una matrice diagonalmente dominante in senso
stretto (per righe o per colonne), allora A è non singolare. In questo caso il metodo di eliminazione di Gauss può essere implementato senza alcuno scambio di righe e di colonne e i calcoli sono stabili rispetto alla crescita degli errori di arrotondamento.
Un’altra importante classe di matrici è data dalle matrici definite positive. Definizione 9 .5.4 Una matrice A di dimensione n si dice
definita positiva se è simmetrica e vale xT Ax = 0 vettore x
>
0 qualunque sia il
semidefinita positiva se x T Ax ≥ 0 qualunque sia il vettore x , indefinita altrimenti.
Si ha un’analoga definizione per matrici definite negative e semidefinite negative. Definizione 9 .5.5 Una matrice A di dimensione n si dice
definita negativa se è simmetrica e vale x T Ax vettore x = 0 ,
<
Osserviamo che non tutti gli autori richiedono la simmetria per definire una matrice definita positiva, e distinguono tra matrici definite positive e matrici simmetriche definite positive.
0 qualunque sia il
semidefinita negativa se x T Ax ≤ 0 qualunque sia il vettore x . Dalla definizione di matrice definita positiva, deve essere x T A x > 0 qualunque sia il vettore x , vale a dire:
x 1 x2 . . . x m
= x1
x2 . . . x m
a11 a12 a21 a22 .. .. . . an1 an2
. . . a 1n . . . a 2n . . . . .. . . . ann
n ∑ j =1 a1 j x j n ∑ j =1 a2 j x j
.. . n ∑ j=1 anj x j
n
=
x1 x2 .. . xm
n
∑ ∑ aij xi x j > 0
i=1 j=1
Il seguente risultato ci permette di eliminare certe matrici dalla classe delle matrici definite positive, se non soddisfano certi requisiti.
Basarsi sulla definizione per verificare che una matrice sia o meno definita positiva può essere molto difficile. Fortunatamente, ci sono molti criteri che ci permettono di dire se una matrice è definita positiva oppure no.
154
annamaria mazzia
Teorema 9 .5.4 Se una matrice A di dimensione n è definita positiva, allora
A ammette la matrice inversa; aii
>
0 per ogni i = 1, 2, . . . , n
Quindi se una matrice ha elementi a ii
≤ 0, non è una matrice definita
positiva, perché, se lo fosse, in base al teorema avrebbe elementi diagonali tutti positivi. Vediamo ora dei teoremi importanti per capire se una matrice è definita positiva.
Teorema 9 .5.5 Una matrice A simmetrica di dimensione n è definita posi-
tiva se e solo se tutti i suoi minori principali hanno determinante positivo. Teorema 9 .5.6 Una matrice A simmetrica di dimensione n con elementi
diagonali tutti positivi e diagonalmente dominante è definita positiva. Anche per matrici simmetriche definite positive, si può applicare il
metodo di eliminazione di Gauss senza operare scambi di righe e di colonne e i calcoli rimangono stabili rispetto alla crescita degli errori di arrotondamento. Questo risultato ci serve per la fattorizzazione di
Cholesky. 9.5.3
Fattorizzazione di Cholesky Nel caso in cui la matrice A sia simmetrica, il teorema LDU si presenta
nel seguente modo Teorema 9 .5.7 ( LDU per matrici simmetriche) Se A è una matrice sim-
metrica e nessuno dei suoi minori principali è singolare, allora A si può decomporre nel prodotto A = LDLT , dove L è triangolare inferiore con elementi diagonali unitari ed è univocamente determinata, L T è la sua trasposta e D è matrice diagonale. Dimostrazione. Intanto valgono le ipotesi del teorema LDU e quindi si può scrivere in maniera univoca A = LDU con L matrice triangolare inferiore, D diagonale e U triangolare superiore. Inoltre, poichè A è simmetrica, e quindi A = A T , si ha pure LDU = ( LDU ) T vale a dire LDU = U T D T LT = U T DL T . Si deduce, dall’uguaglianza, che U = L T e la decomposizione diventa A = LDL T . Proposizione 9 .5.1 (Fattorizzazione di Cholesky) Nel caso particolare in cui A sia simmetrica e definita positiva, da x T Ax > 0 vale pure xT Ax = x T LDLT x = ( LT x) T DL T x = y T Dy
>
0 con y = L T x per ogni x > 0.
Essendo A è definita positiva, risulta anche D definita positiva. Perciò
gli elementi di D (che è una matrice diagonale) devono necessariamente essere tutti positivi. In tal caso, si considera la matrice D 1/2 che è la matrice diagonale con elementi dati dalle radici quadrate degli elementi diagonali di D (si prende il valore positivo della radice
appunti di calcolo numerico
155
quadrata, e il risultato è un numero reale in virtù del fatto che gli elementi diagonali di D sono tutti positivi). Si pone, quindi, M = LD1/2 e si ottiene A = M M T : abbiamo il prodotto di una matrice triangolare
inferiore con coefficienti tutti reali per la sua trasposta. Se D non fosse definita positiva (ma avesse qualche elemento negativo), allora neanche A sarebbe definita positiva e la matrice M sarebbe non reale. Quindi se A è simmetrica, si ha la decomposizione nel prodotto LL T (chiamiamo di nuovo con L la matrice M ) con L reale se e solo se A è definita positiva. I coefficienti della matrice L si trovano facendo il prodotto righe per colonne ed eguagliando i termini ai corrispondenti elementi di A . Si ricava:
√
l11 = a11 li1 = a i1 /l11 lii = lij =
i = 2, 3, . . . , n
− − (aii
i 1
∑ lik2 )
i = 2, 3, . . . , n
k =1
j−1 1 ( aij − ∑ lik l jk ) l jj k =1
j = 2, . . . , n i = j + 1, . . . , n
. Tale fattorizzazione prende il nome di fattorizzazione di Cholesky.
9.6
André-Louis Cholesky (1875-1918) fu un matematico francese. Fu ufficiale ingegnere e morì alla fine della prima guerra mondiale.
Esercizi
Esercizio 9 .6.1 Sia data la matrice
1 0 2 A = 0 4 8 2 8 29 Provare che verifica le condizioni del teorema LDU e trovare i fattori L e LT tali che A = LLT .
Svolgimento La matrice A è simmetrica e soddisfa le ipotesi del teorema LDU (
1 0 = 4 e det( A ) = 116 − 16 − 64 = 36) per 0 4 cui è possibile scrivere la matrice A come A = LL T . Si ha, quindi: infatti | a11 | = 1, det
l11 0 0 l21 l22 0 l31 l32 l33
l11 l21 l31 0 l22 l32 = 0 0 l33
2 l11 l11 l21 l11 l31 2 2 l21 l11 l21 + l22 l21 l31 + l22 l32 2 + l 2 + l2 l31 l11 l31 l21 + l32 l22 l31 32 33
156
annamaria mazzia
Devono quindi valere le relazioni: 2 = 1 =⇒ l = 1 l11 11 l21 l11 = 0 =⇒ l21 = 0 l31 l11 = 2 =⇒ l31 = 2 √ 2 + l 2 = 4 =⇒ l = 4 − 0 = 2 l21 22 22 l21 l31 + l22 l32 = 8 =⇒ l32 = 8/2 = 4
2 + l 2 + l 2 = 29 =⇒ l = l31 33 32 33
− 29
√
22 − 42 = 29 − 4 − 16 =
√ 9
= 3
La matrice L è dunque
1 0 0 0 2 0 2 4 3
Esercizio 9 .6.2 Data la matrice
A =
0.2 1 0.2 1 6.5 1.75 0 2 2.25
(a) verificare che A soddisfa le condizioni del teorema LDU; (b) fattorizzare secondo Crout A = LU (prendendo uii = 1); (c) usare la fattorizzazione per calcolare det ( A−2 ) ; (d) usare la fattorizzazione per risolvere il sistema A x = b , con b T = (2.8 19.25 10.75 )T .
Svolgimento
(a) La matrice verifica le condizioni del teorema LDU in quanto i minori principali costruiti a partire dall’angolo superiore sinistro hanno tutti determinante diverso da zero: =0 a11 = 0.2
det
0.2 1 = 0.3 =0 1 6.5
det A = 0.375 = 0
(b) La fattorizzazione di A come A = LU si costruisce imponendo:
A =
0.2 1 0.2 1 6.5 1.75 = LU = 0 2 2.25
l11 0 0 l21 l22 0 l31 l32 l33
1 u12 u13 0 1 u23 0 0 1
appunti di calcolo numerico
Usando le formule di pag. 151 , si ottiene l11 = 0.2 0.2u12 = 1 =⇒ u12 = 5 0.2u13 = 0.2 =⇒ u13 = 1 l21 = 1 1 · 5 + l22 = 6.5 =⇒ l22 = 1.5 1 · 1 + 1.5u23 = 1.75 =⇒ u23 = 0.5 l31 = 0 0 · 5 + l32 = 2 =⇒ l32 = 2 0 · 1 + 2 · 0.5 + l33 = 2.25 =⇒ l33 = 1.25
Le matrici L e U sono: L =
0.2 0 0 1 1.5 0 0 2 1.25
U =
1 5 1 0 1 0.5 0 0 1
(c) Si ha det A = det LU = det L det U = det L = 0.375. Quindi det ( A−2 ) = det ( A)−2 = 0.375 −2 = 7.11111111. (d) Da A x = b si ha LU x = b . Si pone U x = y e si hanno i due sistemi da risolvere per sostituzione in avanti e all’indietro: Ly = b e U x = y .
0.2 0 0 1 1.5 0 0 2 1.25
y1 y2 = y3
1 5 1 0 1 0.5 0 0 1
2.8 19.25 = 10.75
x1 x2 = x3
Quindi x = (1, 2, 3)T .
⇒ ⇒
14 3.5 = 3
y1 = 2.8/0.2 = 14 y2 = (19.25 − 14)/1.5 = 3.5 y3 = (10.75 − 2 · 3.5)1.25 = 3
x3 = 3 x2 = 3.5 − 3 · 0.5 = 2 x1 = 14 − 3 − 5 · 2 = 1
Esercizio 9 .6.3 Sia data la matrice
A =
2 0 1
0.5 0.5 1 −1 −0.5 10.5
(a) Calcolare A∞ (norma massima per righe), A1 (norma massima per colonne) e norma F( A) (norma di Frobenius). (b) Fattorizzare la matrice A nel prodotto LU (con l ii = 1). (c) Utilizzando la fattorizzazione trovata, risolvere il sistema lineare Ax = b con b = [4.5, − 1, 31.5] T , e calcolare il determinante di A 2 .
157
158
annamaria mazzia
Svolgimento
(a) Applicando le definizioni per le diverse norme abbiamo: A∞ = max (3,2,12) = 12, A1 = max (3,2,12) = 12, √ √ F( A) = 4 + 0.25 + 0.25 + 1 + 1 + 1 + 0.25 + 110.25 = 118 = 10.862780491. (b) Per la fattorizzazione nel prodotto LU con l ii = 1, imponendo l’uguaglianza LU = A si ha:
1
0 1
l21 l31 l32
vale a dire
0 0 1
u11 u12 u13 0 u22 u23 = 0 0 u33
2 0 1
0.5 0.5 1 −1 −0.5 10.5
u11 u12 u13 = l21 u11 l21 u12 + u22 l21 u13 + u23 l31 u11 l31 u12 + l32 u22 l31 u13 + l32 u23 + u33
2 0 1
0.5 0.5 1 −1 −0.5 10.5
Uguagliando i termini e sostituendo i valori dei coefficienti via via
che vengono ricavati si ha: u11 = 2 u12 = 0.5 u13 = 0.5 l21 = 0 u22 = 1 u23 = −1
Inoltre l31 2 = 1 =⇒ l31 = 0.5 0.5 · 0.5 + l32 = −0.5 =⇒ l32 = u33 = 9.5
−0.75
Quindi le due matrici sono
L =
1 0 0.5
0 0 1 0 −0.75 1
U =
2 0.5 0.5 0 1 −1 0 0 9.5
(c) Per risolvere il sistema, applichiamo i seguenti passaggi: Ax = Ux = y . b =⇒ LU x = b =⇒ Ly = b
⇒ ⇒
Ly = b =
Ux = y =
1 0 0.5
− ⇒ − − − ⇒ 0 0 1 0 0.75 1
2 0.5 0.5 0 1 1 0 0 9.5
y1 y2 = y3
x1 x2 = x3
4.5 1 = 31.5
4.5 1 = 28.5
y1 = 4.5 y2 = −1 y3 = 28.5
x3 = 3 x2 = 2 x1 = 1
⇒ x =
=
Per il determinante, risulta: det ( A) = det ( L) · det (U ) = 1 · (2 · 1 · 9.5) = 19, da cui det( A2 ) = (det ( A)) 2 = 192 = 361.
1 2 3
appunti di calcolo numerico
Esercizio 9 .6.4 È dato il sistema lineare A x = b dove:
A =
−
16 −8 4 8 20 4 4 4 12.25
b =
20 28 28.25
(a) Provare che la matrice è definita positiva.
(b) Fattorizzare la matrice secondo Cholesky: A = LLT . (c) Usare la fattorizzazione per risolvere il sistema Ax = b e per calcolare det( A3 ).
Svolgimento
(a) La matrice è simmetrica, definita positiva in quanto gli elementi della diagonale principale sono tutti positivi e la matrice è diagonalmente dominante in senso stretto: 16 > | − 8| + |4| = 12 20 > | − 8| + |4| = 12 12.25 > |4| + |4| = 8 (b) Ponendo A = LLT si ricava: 2 = 16 =⇒ l = 4 l11 11 l21 l11 = −8 =⇒ l21 = −2 l31 l11 = 4 =⇒ l31 = 1 √ 2 + l 2 = 20 =⇒ l = 20 − 4 = 4 l21 22 22 l21 l31 + l22 l32 = 4 =⇒ l32 = (4 + 2)/4 = 1.5
2 + l2 + l2 = 12.25 =⇒ l = l31 33 32 33
√ 12.25 − 1 − 2.25 = √ 9 = 3
La matrice L è dunque L =
−
4 0 0 2 4 0 1 1.5 3
(c) Per risolvere il sistema Ax = b, adoperiamo il metodo di sostituzione in avanti e all’indietro risolvendo i sistemi: Ly = b e poi LT x = y . Il primo sistema dà:
−
4 0 0 2 4 0 1 1.5 3
y1 y2 = y3
20 28 28.25
e otteniamo y 1 = 20/4 = 5, y 2 = (28 + 10)/4 = 9.5, y 3 = (28.25 − 5 − 14.25)/3 = 3.
159
160
annamaria mazzia
Nel risolvere il sistema L T x = y si ha
4 0 0
−2 4 0
1 1.5 3
x1 x2 = x3
5 9.5 3
da cui x3 = 1, x2 = (9.5 − 1.5)/4 = 2, x1 = (5 − 1 + 4)/4 = 2, quindi x = (2, 2, 1 ). Inoltre, da det ( A) = det( LL T ) = det( L)2 = (4 · 4 · 3)2 = 482 = 2304 e da det( A3 ) = (det( A)) 3 si ha det( A3 ) = 23043 = 12230590464 . 9.7
Domande di riepilogo 1.
Quale è la definizione di una matrice e di un vettore?
2.
Che differenza c’è tra matrici diagonali, tridiagonali, triangolari?
3.
Cosa significa che una matrice è non singolare?
4.
Come si definisce il determinante di una matrice?
5.
Che cosa significa “sistema di equazioni lineari”?
6.
Descrivere il procedimento di sostituzione in avanti e all’indietro. Su quali matrici può essere applicato?
7.
Descrivere il metodo di eliminazione di Gauss.
8.
A cosa servono le strategie di pivoting?
9.
Enunciare e spiegare il teorema LDU .
10. Spieare le differenze tra fattorizzazione di Crout e fattorizzazione
di Doolittle. 11. Per quali matrici la fattorizzazione LDU è stabile rispetto ad una
crescita degli errori di arrotondamento e, quindi, viene fatta senza
applicare tecniche di pivoting? 12. Come diventa il teorema di fattorizzazione LDU quando è appli-
cato a matrici simmetriche? 13. Sotto
quali ipotesi si parla di fattorizzazione di Cholesky e di cosa si tratta?
10 Metodi iterativi per la soluzione di sistemi lineari 10.1
Da un ’equazione alle derivate parziali ad un siste ma lineare
Mi spiace ammettere che la materia che mi è piaciuta di meno è stata la matematica. Ci ho pensato su, e credo che la ragione sia che la matematica non lascia spazio alle discussioni. Se fai un errore, non puoi scamparla. Malcom X
L’ equazione che governa la conduzione del calore in una piastra metallica piana, omogenea e isotropa prende il nome di equazione di
Poisson e si scrive come ∂2 T ∂ 2 T f ( x, y) + = ρcK H ∂ x2 ∂ y2
In letteratura diverse tecniche numeriche permettono di risolvere il problema (ricordiamo i metodi alle differenze finite e i metodi agli elementi finiti), in determinati punti (detti nodi) della piastra. Qualunque sia il metodo utilizzato, si arriva ad un sistema di equazioni lineari del tipo H T = q
dove H rappresenta la matrice di discretizzazione del metodo, T rappresenta il vettore delle temperature nei nodi e q è il vettore dei termini noti che deriva dal metodo applicato. La matrice H puó avere una dimensione molto elevata ma ha la caratteristica di essere sparsa, cioè di avere pochi elementi diversi da
zero per ogni riga. Per risolvere sistemi lineari di questo tipo, si preferisce usare metodi iterativi piuttosto che diretti. In questo Capitolo presentiamo
alcuni dei metodi iterativi per la risoluzione di sistemi lineari. 10.2
Metodi iterativi Per risolvere un sistema di equazioni lineari Ax = b , applicando un metodo diretto, e trascurando gli errori di arrotondamento, si ottiene la soluzione esatta del problema in un numero finito (e noto a priori) di operazioni. Nei metodi iterativi, invece, si parte da un’approssimazione iniziale che viene migliorata, mediante un procedimento iterati-
Si tratta di un’equazione alle derivate parziali dove T [ o C] è la temperatura, K H [ m2 /s] è il coefficiente di diffusività termica, ρ [ Kg /m2 ] è la densità della piastra, c [ Cal /Kg o C] è il calore specifico, f ( x, y) [Cal /m2 s] è il calore aggiunto o sottratto alla piastra per unità di tempo e di area.
162
annamaria mazzia
vo, fino ad ottenere una approssimazione sufficientemente accurata della soluzione. Quando abbiamo studiato gli zeri di funzione nel Capitolo 5 , data un’approssimazione iniziale, si procedeva nell’algoritmo iterativo fino a quando lo scarto tra due approssimazioni successive non diventava
minore di una prefissata tolleranza. Nel caso dei sistemi lineari, l’approccio è simile. Si parte da un vettore iniziale che approssima la soluzione del sistema e, mediante un
certo procedimento ricorsivo, si calcola una nuova approssimazione (un vettore). Dobbiamo dunque essere capaci di misurare lo scarto tra due vettori in modo da capire quando la successione dei vettori generati dall’algoritmo tende al vettore soluzione del sistema lineare. Abbiamo perciò bisogno di definire le norme di vettori e di matrici.
Nel seguito, tratteremo solo norme di matrici e vettori definite nello spazio dei numeri reali (e non complessi). 10.3
Norme di vettori Il concetto di norma generalizza quello di valore assoluto (o modulo)
di un numero reale (o complesso). Sia Rn lo spazio dei vettori colonna di lunghezza n . La norma di un vettore x
∈ Rn è una funzione, · , definita in Rn e a valori in R,
che gode delle seguenti proprietà:
x 0 per ogni x = 0 x = 0 se e solo se x = 0 αx = |α|x dove α è un reale (o complesso) arbitrario x + y ≤ x + y >
Le principali norme vettoriali sono:
· 1: x1 = ∑ ni=1 |xi | Norma massima (o norma infinito, l ), indicata con · : x = max1≤i≤n |xi | √ Norma euclidea (o norma l2 ), indicata con · 2 : x2 = x T x = n ∑ i=1 | xi |2 Norma assoluta (o norma l1 ), indicata con ∞
∞
∞
Tra le norme 1, ∞ e 2 valgono le seguenti relazioni (che pongono un’equivalenza tra esse). Dato un vettore x ∈ Rn :
x ≤ x2 ≤ √ nx x ≤ x1 ≤ nx ∞ ∞
∞
∞
Esempio Il vettore x = (1,5,
−20)T ha norme:
x1 = |1| + |5| + | − 20| = 26 x = max (|1|, |5|, | − 20|) = 20 √ x2 = (12 + 52 + (−20)2 ) = 426 = 20.639767441 ∞
L’idea di risolvere sistemi lineri con metodi iterativi risale ai tempi di Gauss (1823), ma solo con l’avvento dei computers (negli anni cinquanta) si può osservare il loro sviluppo, visto che diventa possibile risolvere sistemi lineari dove la matrice A è sparsa e di grandi dimensioni – un particolare tipo di problema improponibile per i metodi diretti. Difatti, nei metodi diretti, il processo di eliminazione di Gauss (o la decomposizione della matrice di partenza nel prodotto LU con L triangolare inferiore e U triangolare superiore) porta all’introduzione del cosiddetto fill-in , cioè a matrici L e U con elementi diversi da zero là dove la matrice di partenza A ha elementi nulli. I metodi diretti diventano quindi proibitivi perchè troppo costosi per quanto riguarda il numero di operazioni aritmetiche e l’occupazione di dati che devono essere salvati per l’implementazione numerica del metodo stesso. I metodi iterativi, al contrario, lavorano direttamente sulla matrice A e, dal momento che A viene coinvolta solo in termini di prodotti matrice-vettore, non c’è neanche bisogno di memorizzare tutta la matrice (in genere, quando la matrice è sparsa, si lavora su memorizzazioni in forma compatta delle matrici, memorizzando solo gli elementi non nulli che servono per il prodotto matrice-vettore).
appunti di calcolo numerico
163
2
Figura 10.1: Vettori in R con norma unitaria nelle norme 1, ∞ e 2.
Per la norma euclidea vale la diseguaglianza di Cauchy-Schwarz xT y
≤ x 2 y 2
Dati due vettori x e y ∈ Rn , si definisce distanza tra i due vettori la norma della differenza tra i vettori. Quindi: n
x − y1 = ∑ |xi − yi | i =1 x − y = 1max |x − y | ≤i ≤n i i ∞
n
x − y2 =
∑ | xi − yi |2
i =1
Il concetto di distanza serve per definire il limite di una successione di vettori. Data una successione di vettori in Rn , x (k) , per k = 1, 2, . . . , ∞, si dice che la successione converge ad un vettore x di Rn e si scrive limk→∞ x (k) = x se, per ogni > 0, esiste un intero m tale che
x( k) − x 10.4
<
per tutti gli indici k
≥m
Norme di matrici Analogamente alla definizione di norma vettoriale, la norma di matrici
quadrate di dimensione n è una funzione, che indichiamo con · che, per tutte le matrici A e B di dimensione n e per tutti i numeri reali (o complessi) α , soddisfa le seguenti proprietà:
A 0 per ogni A = 0 A = 0 se e solo se A = 0 α A = |α| A A + B ≤ A + B AB ≤ A B >
Una proprietà importante che si richiede alle norme su matrici è che siano compatibili con norme vettoriali.
164
annamaria mazzia
Definizione 10 .4.1 La norma A di una matrice A si dice compatibile con la norma x di un vettore x se vale la relazione
Ax ≤ A x
Alcune norme su matrici sono generate da norme su vettori: si parla allora di norma naturale o indotta dalla norma di vettori. Definizione 10 .4.2 Se
· è una norma su vettori in
n
, si definisce come norma naturale o indotta su matrici la norma data da A = maxx=1 Ax. R
Le norme di matrici indotte dalla norma 1 e dalla norma infinito su vettori sono: Norma 1 : A 1 = max j ∑ ni=1 aij (data dal massimo sulla somma
| |
delle colonne)
somma delle righe)
n ∞ = max i ∑ j =1
|aij | (data dal massimo sulla
La norma di matrice indotta dalla norma 2 è più complicata e vedremo
in seguito come è definita. Una norma di matrici, che non è indotta, ma compatibile con la norma 2 è la cosiddetta norma euclidea (o di Frobenius). Tenendo presente che, data una matrice A , si chiama traccia della matrice o tr ( A) la somma degli elementi della diagonale principale di A, la norma euclidea (o di Frobenius) è data da
tr ( AT A) =
tr ( AAT ) =
n ∑ i=1 j=1
|aij |2.
Tra le norme naturali su matrici e le norme di vettori da cui sono generate, è facile provare la seguente proposizione. Proposizione 10 .4.1 Le norme naturali su matrici sono norme compatibili
con le norme di vettori da cui sono costruite. Dimostrazione.
Dalla definizione alternativa che abbiamo dato
di norma naturale (e chiamando il generico vettore con il simbolo x ), segue per un vettore x diverso dal vettore nullo,
Ax ≤ max Ax = A x x=0 x
da cui
Ax ≤ A x Se invece il vettore x è il vettore nullo, la relazione di compatibilità è
ovvia. 10.5
Autovalori e autovettori Data una matrice quadrata A di ordine n , se esiste un numero (reale o complesso) λ e un vettore x = 0 tali che
Ax = λ x
y A = max Ax = max A y y =0 x=1 da cui
Norma infinito: A
N ( A) =
Una definizione alternativa a quella che abbiamo dato per la norma naturale su matrici Ay è data da A = maxy=0 . Infatti, y preso un qualunque vettore y = 0, si può considerare il vettore x = y/ y che ha norma unitaria. Allora (sfruttando le proprietà delle norme su vettori e considerando la relazione che lega x a y ) abbiamo
Ay A = max y =0 y
appunti di calcolo numerico
allora λ è un autovalore e x il corrispondente autovettore della matrice A . Scritta in maniera equivalente, la relazione definisce il sistema lineare ( A
− λ I )x = 0 Poichè x = 0 e il termine noto del sistema è il vettore di tutti zeri, il
determinante della matrice del sistema deve necessariamente essere uguale a zero, cioè det ( A − λ I ) = 0. Lo sviluppo del determinante porta a un polinomio di grado n nell’incognita λ : λn
− tr( A)λn−1 + . . . + (−1)n det ( A) = 0
Questo polinomio si chiama polinomio caratteristico. Le sue n radici, che chiamiamo λ 1 , λ2 , . . . , λn , sono gli n autovalori della matrice A .
Per le proprietà dei polinomi vale: n
∑ λi = tr ( A) = a 11 + a22 + . . . + ann
i =1
e
n
∏ λi = det ( A) i =1
Alcune proprietà sugli autovalori e autovettori sono le seguenti: Se λ è autovalore della matrice A, allora λ k è autovalore della matrice potenza A k (cioè A · A · · · A k volte). Se λ è autovalore della matrice A, e A è regolare, allora λ−1 è autovalore della matrice inversa A −1 . Gli autovalori di una matrice A e della sua trasposta A T sono gli
stessi (ma gli autovettori sono, in genere, diversi). Se A e B sono due matrici arbitrarie regolari, allora gli autovalori
di AB sono gli stessi di B A. Se x è un autovettore associato alla matrice A , allora A x = λ x: la matrice A trasforma il vettore x in un vettore le cui componenti sono moltiplicate per λ: se λ > 1, allora A ha l’effetto di allungare x di un fattore λ; se invece 0 < λ < 1, allora x si restringe di un fattore λ; gli effetti sono simili, ma il verso del vettore risultante A x è opposto, quando λ < 0. I quattro casi che si possono presentare sono illustrati in Figura 10 .2. Figura 10.2: Autovalori e autovettori
Una strada per localizzare gli autovalori di una matrice è data dal
teorema dei cerchi di Gershgorin.
165
166
annamaria mazzia
Teorema 10 .5.1 Data una matrice A di dimensione n
× n, ciascun auto-
valore di A giace nell’unione dei cerchi C1 , C2 , . . . , C n dove Ci rappresenta la circonferenza di centro aii e raggio r i = ∑ j=i | aij | (il raggio è uguale alla somma degli elementi della restante riga di A presi in valore assoluto). Dimostrazione. Sia x autovettore di A associato all’autovalore λ . Sia x i la componente con valore massimo di x . Allora da A x = λ x si ha (λ
− aii )xi = ∑ aij x j =i j
Ovvero, dividendo tutto per x i e considerando i valori assoluti:
|λ − aii | = | ∑ aij xx ji | ≤ ∑ |aij | xx ji =i =i j j
Nell’ipotesi che x i è la componente massima dell’autovettore abbiamo
|λ − aii | ≤ ∑ |aij | = ri =i j
Quindi l’autovalore λ si trova all’interno della circonferenza di centro aii e raggio r i . Non sapendo, a priori, chi sia questo indice i, possiamo concludere che ogni autovalore si trova nell’unione dei cerchi C1 , C2 ,
. . . , Cn . Altre proprietà da tenere presenti sono le seguenti: Se tutti gli n autovalori di una matrice A sono distinti, allora gli n autovettori u (1) , u(2) , . . . u(n) sono linearmente indipendenti.
Se A è una matrice simmetrica reale definita positiva, allora i suoi autovalori sono tutti reali e positivi.
n
Dati n vettori linearmente indipendenti di R , n u(1) , u(2) , . . . u(n) , ogni vettore di R sipuò scrivere come una loro combinazione lineare. Quindi esistono n coefficienti α 1 , α2 , . . . , α n per cui x = α 1 u (1) + α2 u(2) + . . . + αn u(n) . Inoltre, per vettori linearmente indipendenti vale il risultato: α1 u(1) + α 2 u (2) + . . . + αn u (n) = 0 se e solo se tutti i coefficienti α i sono uguali a zero, per i = 1 , 2, . . . , n.
Introduciamo ora il raggio spettrale di una matrice A Definizione 10 .5.1 Il raggio spettrale ρ( A) di una matrice A è definito
da ρ( A ) =
max
λ autovalore di A
| λ|
Quindi il raggio spettrale è il massimo, in modulo, degli autovalori
di A . Possiamo ora definire la norma 2 su matrici indotta dalla norma 2
su vettori. Si può, infatti, provare che
A2 =
ρ( A T A).
Inoltre, per ogni norma naturale, vale il risultato ρ( A )
≤ A
Matrici convergenti. Nello studiare i metodi iterativi per risolvere i sistemi lineari, sarà di particolare importanza sapere quando le potenze di una matrice tendono alla matrice nulla. Matrici A , per cui ( Ak )ij → 0 per k → ∞, qualunque sia i , j = 1, 2, . . . , n, (consideriamo
Se λ è un numero complesso, si può scrivere come λ = α + i β, con α e β numeri reali e i = 1 la cosiddetta unità immaginaria. Per il modulo si ha λ = α2 + β 2 .
√ −
||
appunti di calcolo numerico
167
A · A · · · A k volte e gli elementi della matrice risultante tendono a zero per k → ∞) si dicono matrici convergenti. Diciamo che una matrice A di dimensione n è convergente se
lim ( Ak )ij = 0, i , j = 1, 2, . . . , n
k →∞
Si ha il seguente teorema. Teorema 10 .5.2 Data una matrice A di dimensione n, sono equivalenti le
seguenti proposizioni 1.
A è una matrice convergente.
2.
limk→∞ Ak = 0, per qualche norma naturale.
3.
limk→∞ Ak = 0, per tutte le norme naturali.
4. ρ( A) 5.
10.6
<
1.
limk→∞ A k x = 0 , qualunque sia il vettore x .
Metodi "classici" I metodi iterativi "classici" per la risoluzione di un sistema di equazioni lineari del tipo A x = b si basano su un’idea molto semplice. Si parte da un’approssimazione iniziale x (0) , commettendo un’errore e (0) = x x(0) . L’errore e (0) è soluzione del sistema A e(0) = b Ax(0) = r (0) , dove r (0) è il residuo (ciò che resta fuori, ci dice di quanto il vettore A x(0) si discosta da b ).
−
−
Successivamente si definisce il vettore x (1) come x (1) = x (0) + p(0) , dove ora p (0) è soluzione del sistema M p(0) = r 0 , in cui la matrice M è più semplice della A e, allo stesso tempo, M −1 approssima in
qualche modo A −1 .
Il procedimento viene iterato fino a convergenza. Da queste richieste tra loro contradditorie, si sviluppa una strategia che porta alla soluzione esatta x come limite della successione dei valori approssimati x (k) . Il processo iterativo si legge, infatti, come: x(k+1) = x (k) + M −1 (b
− Ax(k) )
k = 0, 1, . . . .
O, equivalentemente, x(k+1) = ( I M−1 A) x(k) + M −1 b
−
k = 0, 1 , . . .
Notiamo che, ad ogni passo, non dobbiamo calcolare esplicitamente M −1 , perchè risolviamo problemi del tipo M p(k) = r (k) = b − Ax(k) in modo da porre x (k+1) = x(k) + p (k) . La matrice E = I − M−1 A è detta matrice di iterazione del metodo. Nel seguito, per semplicità, poniamo q = M −1 b.
Lo schema iterativo appena descritto è un metodo stazionario (cioè non dipende dall’iterazione k ) e può essere visto come caso particolare di uno schema di punto fisso per equazioni nonlineari: la funzione g tale che x(k+1) = g(x(k) ) converga alla soluzione del sistema Ax = b, è data da g(x) = x + M −1 (b Ax) o equivalentemente da g(x) = E x + q.
−
168
10.6.1
annamaria mazzia
Convergenza Per studiare la convergenza di un metodo iterativo, consideriamo, per ogni vettore x (k) , il residuo r (k) = b Ax(k) e l’errore e (k) = x x(k) . Osserviamo che si ha la relazione r (k) = A e(k) . Infatti
−
−
Ae(k) = A (x − x(k) ) = A x − Ax(k) = b − Ax(k) = r (k) Lo schema converge quando la successione x (k) converge alla soluzione x per k ∞, ovvero quando lim k→∞ e (k) = 0 qualunque sia il vettore iniziale x (0) . Consideriamo lo schema iterativo x (k+1) = E x(k) + q. È facile vedere che per la soluzione esatta x vale la relazione x = E x + q. Consideriamo x x(k) . Si ha
→
−
Il vettore soluzione x è punto fisso della funzione vettoriale g (x) = Ex + q . Infatti ponendo E = I M−1 A e q = M−1 b si ha E x + q = ( I M−1 A)x + M −1 b = x M−1 Ax + M −1 b. Dal momento che x è il vettore soluzione si ha A x = b perciò la
−
−
relazione precedente diventa Ex + q = x M−1 b + M −1 b = x. Il vettore soluzione è punto fisso!
x = E x + q x(k) = E xk−1 + q
e sottraendo si ricava e(k) = E e(k−1)
La relazione appena trovata vale, alla stessa maniera, tra l’errore e(k−1) e l’errore e (k −2) per cui possiamo scrivere e (k−1) = E e(k−2) . Scriviamo queste relazioni dall’iterazione k fino ad arrivare all’iterazione 0. e(k) = E e(k−1) e(k−1) = E e(k−2) e(k−2) = E e(k−3)
.. .. . = . e(2) = E e(1) e(1) = E e(0)
Partendo, ora, dalla prima relazione e, andando a sostituire, ogni volta, a secondo membro, la relazione successiva, si ha: e(k) = E e(k−1) = E ( Ee(k−2) ) = E 2 e(k−2) = E 2 ( Ee(k−3) ) = E 3 e(k−3) = . . . = E k e(0)
Osserviamo che E k rappresenta la potenza k della matrice E , cioè la E · E · · · E k volte. Il metodo converge se e (k) → 0 per k → ∞. Poichè l’errore iniziale è arbitrario, si ha che lim k→∞ e (k) = lim k→∞ Ek e(0) = 0 se e solo se limk→∞ E k = 0. Per il teorema sulla convergenza di matrici (si veda pag. 167), questo si ha se e solo se ρ ( E) < 1. Si può dunque stabilire il seguente teorema. Teorema 10 .6.1 Lo schema iterativo x(k+1) = E x(k) + q
k≥0
−
−
appunti appunti di calcolo calcolo numerico numerico
169 169
converge qualunque sia il vettore iniziale x0 al vettore x = E x + q = A −1 b se e solo se ρ (E) < 1.
Questo risultato lo si può provare facilmente, nel caso in cui la matrice di iterazione iterazione E abbia n autovalori distinti e, quindi, possieda n autovettori autovettori linearmente indipendenti, indipendenti, per cui l’errore l’errore iniziale 0 0 1 2 ( ) ( ) ( ) ( ) e si può scrivere come e = α1 u + α 2 u + . . . + α n u(n) , dove α1 , α2 , . . . , αn sono delle costanti, mentre u(1) , u(2) . . . u(n) sono gli autovettori associati, rispettivamente, a λ 1 , λ 2 , . . . , λn . SupponiaSupponiamo che gli autovalori siano in ordine decrescente in modulo, cioè: |λ1 | > | λ2 | > . . . > | λn |, per cui ρ(E) = | λ1 |. In tal tal caso caso si può scrivere e(k) = E k e(0) = E k (α1 u(1) + α2 u(2) + . . . + αn u(n) )
Ricordiamo che, se λ è un autovalore associato alla matrice A , con u un autovettore ad esso associato, si ha A k u = λ k u).
= α 1 Ek u(1) + α2 Ek u(2) + . . . + α n Ek u(n) = α 1 λ1k u(1) + α2 λ2k u(2) + . . . + α n λkn u(n)
mettiamo in evidenza λ 1k = λ 1k
λ2k (2) λkn (n) ( 1) . . . + + + α1 u α2 k u α n k u λ1 λ1
per k → ∞ si ha
λki
λ1k
→ 0 per i = 2, 2, 3, 3, . . . , n
≈ λ1k α1 u(1) Perciò limk→∞ e (k) = limk→∞ λ1k α1 u(1) = 0 se e solo se λ1k → 0 e questo si ha se e solo se | λ1 | < 1. Ma | λ1 | = ρ(E): ritroviamo il risultato visto prima. 10.6.2
Controllo della convergenza Oltre a sapere che lo schema iterativo converge, è importante conoscere quanto velocemente lo schema converge. A tal proposito osserviamo che, in condizioni asintotiche (per k + ∞) vale il seguente seguente
risultato
→
Questa relazione vale anche per matrici con autovalori non distinti tra loro.
e(k) ≈ ρ(E)k e(0) Scrivendo l’equazione (10.1) per l’iterazione k
(10.1)
− 1 e facendo il rapporto
tra le norme degli errori a due passi successivi si ha:
e(k) ≈ ρ(E) e ( k −1 ) Ricaviamo, quindi, che il metodo iterativo ha convergenza lineare con costante asintotica uguale al raggio spettrale della matrice di iterazione. La relazione appena trovata è utile per stabilire quanto veloce è il metodo iterativo per approssimare la soluzione del sistema con una certa accuratezza. accuratezza. Ad esempio, vogliamo vogliamo stabilire stabilire a priori quante iterazioni occorrono per ridurre la norma dell’errore iniziale di un
170 170
annamari annamaria a mazzia mazzia
certo fattore, ad esempio 10 (il che vuol dire ridurre l’errore di un ordine di grandezza). Vogliamo dunque capire quale deve essere il valore di k per cui e(k) =
e(0) . Ma e(k) ≈ ρ(E)k e(0) da cui 10
(0 )
≈ e10 =⇒ ρ(E)k ≈ 101
ρ( E)k e(0)
Applicando il logaritmo in base 10 ad ambo i membri membri si ha k log10 ( ρ( E)) ≈ −1 =⇒ k ≈ −
1 log10 ( ρ( E))
cioè occorrono k iterazioni con k dato dal più piccolo intero che soddisfa la relazione appena scritta. Meno iterazioni occorrono fare, più veloce è il metodo. Si definisce perciò velocità asintotica di convergenza R = − log10 ( ρ(E)) =
− log10 ( ρ(Ek )) k
Osserviamo che, essendo ρ( E) < 1, nelle ipotesi in cui il metodo converge, log10 ( ρ( E)) < 0 e, di conseguenza, R > 0. Se vogliamo ridurre l’errore iniziale di una certa quantità quantità ,, rifacendo i conti come prima, dobbiamo cercare l’intero k che renda valida la disuguaglianza e(k) e(0) , sapendo che e(k) ρ ( E)k e(0) .
≤
Ma allora deve valere la relazione
≈
ρ( E)k e(0)
≤ e(0) =⇒ ρ(E)k ≤
Passando ai logaritmi (di quantità minori di uno) si ha k log10 ( ρ(E)) ≤ log10 () =⇒ −k log10 ( ρ( E)) ≥ − log10 () =⇒ k ≥
− log10 ()
Troviamo in questo modo quante iterazioni (il primo intero k che verifica la relazione precedente) occorre fare per poter ridurre l’errore iniziale di .
Grafico di convergenza e velocità asintotica di convergenza. Se ssii traccia un grafico semilogaritmico del profilo di convergenza dello schema iterativo, iterativo, ponendo ponendo sull’asse delle ascisse ascisse il numero delle iterazioni e sull’asse delle ordinate la norma dell’errore, si può vedere che la velocità asintotica di convergenza è legata alla pendenza della retta. Infatti, riconducendoci, per semplicità, al caso in cui la matrice
di iterazione iterazione abbia n autovalori distinti tra loro e ordinati in senso crescente, dalla relazione (vista a pag. 169 ) e( k)
≈ λ1k α1 u(1)
passando alle norme e ai logaritmi in base 10 si ha log10 e(k) ≈ k log10 |λ1 | + costante La pendenza del grafico è l’opposto della velocità asintotica di convergenza R .
R
appunti appunti di calcolo calcolo numerico numerico
171 171
Nel caso in cui non è nota la soluzione esatta x , poichè e(k) ≈ x(k) − x(k−1) = d(k) (valgono le stesse considerazioni viste per gli schemi iterativi per funzioni non lineari a pag. 68 ), ritroviamo lo stesso risultato sul profilo di convergenza semilogaritmico in cui si pone sull’asse delle ascisse il numero delle iterazioni e sull’asse delle
ordinate la norma degli scarti. 10.6.3
I metodi Si scriva la matrice A come somma della matrice che ha i soli elementi
diagonali diagonali di A (che chiamiamo D ), della matrice costituita dai soli elementi della parte triangolare bassa di A (che chiamiamo L ) e dai soli elementi della parte triangolare alta di A (che denotiamo con U ), ), A = L + D + U
Attenzione a non confondere la fattorizzazio L DU ) dalla scomne di una matrice ( A = LDU posizione della matrice A nella somma delle matrici L , D e U , A = L + D + U . Abbiamo indicato con gli stessi simboli matrici che sono diverse tra loro a seconda che si faccia fattorizzazione o scomposizione!!!
Figura 10.3: La matrice A come somma delle matrici L , D e U .
In questo modo è facile ricavare i metodi iterativi di Jacobi, Gauss-
Seidel e di rilassamento, che sono i metodi iterativi classici per la soluzione di sistemi lineari. L’ipotesi da fare è che A abbia elementi diagonali diversi da zero (aii = 0 per i = 1 , 2 , . . . , n, n, da cui la matrice diagonale D è invertibile). Se la matrice A è simmetrica, definita positiva, necessariamente Altrimenti, nti, poichè poichè A è non singolare (se così non fosse aii = 0. Altrime non potremmo risolvere il sistema), le equazioni del sistema possono essere riordinate in modo da avere la matrice risultante con elementi
diagonali diversi da zero. 10.6.4
Il metodo di Jacobi Il metodo di Jacobi (o degli spostamenti simultanei - o rilassamento simultaneo) si ha ponendo M = D da cui la matrice di iterazione diventa E J = I − D−1 A = I − D −1 ( L + D + U ) = − D−1 ( L + U ). Scrivendo lo schema iterativo per Jacobi, si ha, in forma matriciale: x(k+1) = E J x(k) + D −1 b x ( k + 1) =
−D−1 ( L + U )x(k) + D−1 b
Carl Gustav Jacob Jacobi (1804-1851) fu un grande matematico tedesco. Tra i suoi numerosi studi ricordiamo quelli sulle funzioni ellittiche, sulla teoria dei numeri e sulla meccanica celeste.
172 172
annamari annamaria a mazzia mazzia
Per ricavare questo schema, si può partire dal sistema lineare A x = b e scrivere la matrice A come L + D + U . Si ha
( L + D + U )x = b
si porta a secondo membro ( L + U )x D x = −( L + U )x + b si moltiplicano ambo i membri per l’inversa della matrice D x = − D−1 ( L + U ) x + D −1 b si innesca il metodo iterativo considerando il vettore x a primo membro all’iterazione k + 1 a secondo membro all’iterazione k x ( k +1 ) =
−D−1 (L + U )x(k) + D−1 b
Componente per componente, il metodo di Jacobi si scrive, per i = 1 , 2 , . . . , n, come ( D−1 )ii
xi(k+1) =
1 aii
⇑
− bi
(( L+U )x(k) )i
n
(k) ∑ aij x j
=i j =1, j j
⇑
o, equivalentemente,
( D −1 )ii
xi(k+1) =
1 aii
⇑
− −
( L x ( k) ) i
bi
i 1
(U x(k) )i
n
(k) (k) ∑ aij x j − ∑ aij x j
j=1
j=i+1
⇑
⇑
per i = 1, 1, . . . , n
La formula la si può ricavare direttamente, scrivendo, equazione per equazione, il sistema da risolvere A x = b : a11 x1 + a12 x2 + a13 x3 + . . . + a1n xn = b1 a21 x1 + a22 x2 + a23 x3 + . . . + a2n xn = b2 .. . . = .. ai1 x1 + ai2 x2 + ai3 x3 + . . . + ain xn = b i .. . . = .. an1 x1 + an2 x2 + an3 x3 + . . . + ann xn = b n Dalla prima equazione “isoliamo” la prima incognita rispetto a tutte
le altre; dalla seconda equazione “isoliamo” “isoliamo” la seconda seconda incognita e
appunti di calcolo numerico
173
così via per le altre equazioni, ottenendo: a11 x1 = b1 − ( a12 x2 + a13 x3 + . . . + a1n xn ) a22 x2 = b2 − ( a21 x1 + a23 x3 + . . . + a2n xn ) .. .. . = . aii xi = b i − (ai1 x1 + ai2 x2 + . . . + aii −1 xi−1 + aii +1 xi+1 + . . . + ain xn ) .. .. . = . ann xn = b n − (an1 x1 + an2 x2 + an3 x3 + . . . + ann−1 xn−1 ) Dividendo l’i-sima equazione per il coefficiente a ii , per i = 1, 2, . . . , n,
ricaviamo 1 x1 = [b − ( a12 x2 + a13 x3 + . . . + a1n xn )] a11 1 1 x2 = [b − ( a21 x1 + a23 x3 + . . . + a2n xn )] a22 2 .. .. . = . 1 [b − ( ai1 x1 + ai2 x2 + . . . + aii −1 xi−1 + aii +1 xi+1 + . . . + ain xn )] aii i .. .. . = . 1 xn = [b − ( an1 x1 + an2 x2 + an3 x3 + . . . + ann−1 xn−1 )] ann n xi =
Se pensiamo di partire da un vettore iniziale x(0) , il vettore x(1) si ottiene dalle equazioni precedenti, ponendo a secondo membro di ciascuna equazione le componenti del vettore x(0) . Si ricava, in tal modo, la formula ricorsiva dello schema di Jacobi: 1 b − a12 x2(k) + a13 x3(k) + . . . + a1n xn(k) a11 1 1 x2(k+1) = b2 − a21 x1(k) + a23 x3(k) + . . . + a2n xn(k) a22 .. .. . = . 1 xi(k+1) = b − ai1 x1(k) + ai2 x2(k) + . . . + aii −1 xi(−k)1 + aii +1 xi(+k)1 + . . . + ain xn(k) aii i .. .. . = . x1(k+1) =
( k + 1)
xn
1 bn − an1 x1(k) + an2 x2(k) + an3 x3(k) + . . . + ann−1 xn(k−) 1 = ann
Ritroviamo, dunque, la formula che prima avevamo scritta in modo compatto. Il metodo di Jacobi può essere scritto in modo equivalente in funzione del residuo r (k) = b − Ax(k) mediante la formula x (k+1) = x(k) + D −1 r(k) . 10.6.5
Il Metodo di Gauss-Seidel Nell’algoritmo di Gauss-Seidel si pone M = D + L ottenendo la
Philipp Ludwig von Seidel (1821-1896) fu un matematico tedesco. Il suo lavoro più importante riguarda le aberrazioni ottiche.
174
annamaria mazzia
matrice ES = I ( D + L) −1 A = I L)−1 U . Lo schema iterativo è:
−
− (D + L)−1 (L + D + U ) = −(D +
x(k+1) = E S x(k ) + ( D + L)−1 b
Lo schema di Gauss-Seidel si può ricavare a partire dal sistema lineare Ax = b nel modo seguente:
Ax = b ( L + D + U )x = b si porta a secondo membro U x ( D + L)x = −U x + b si moltiplicano ambo i membri per l’inversa della matrice ( D + L) x = −( D + L)−1 U x + ( D + L)−1 b si innesca il metodo iterativo considerando il vettore x a primo membro all’iterazione k + 1 a secondo membro all’iterazione k x ( k +1 ) =
−(D + L)−1U x(k) + ( D + L)−1 b
Moltiplicando ambo i membri per ( D + L) si ha ( D + L)x(k+1) = b
− U x(k) D x(k+1) = b − Lx(k+1) − U x(k)
da cui x
( k + 1)
= D −1
− b
Lx
( k + 1)
− U x
( k)
Componente per componente si ha
( k + 1)
xi
i −1 n 1 bi − ∑ aij x j(k+1) − ∑ aij x j(k) = aii j =1 j=i+1
per i = 1, . . . , n
Il metodo è detto anche degli spostamenti successivi, in quanto il calcolo delle componenti del vettore x(k+1) è fatto utilizzando le componenti già calcolate del vettore stesso. Infatti, per i > 1, è ( k + 1) ( k + 1) ( k + 1) ragionevole pensare che i valori già calcolati x 1 , x 2 , . . . , xi−1 possano essere utilizzati per dare una migliore approssimazione del valore x i(k+1) . Dalle equazioni del sistema, ragionando come per il metodo di Jacobi, possiamo quindi scrivere: ( k + 1)
a11 x1
( k + 1)
a22 x2
= b1 = b2
.. . = ( k + 1)
aii xi
= bi
.. . = ann xn(k+1) = bn
− − − −
(k )
( k)
(k )
a12 x2 + a13 x3 + . . . + a1n xn ( k + 1)
a21 x1
( k)
a i1 x1
.. .
( k)
+ a23 x3 + . . . + a2n xn
.. . ( k + 1)
( k +1 )
+ ai2 x2
( k +1 )
+ . . . + aii −1 xi−1
(k ) (k ) + aii +1 xi+1 + . . . + ain xn
an1 x1(k+1) + an2 x2(k+1) + an3 x3(k+1) + . . . + ann−1 x(nk−+11)
appunti di calcolo numerico
175
Dividendo ambo i membri dell’equazione i-sima per aii (per i = 1 , 2 , . . . , n) si ha: 1 b1 − a12 x2(k) + a13 x3(k) + . . . + a1n xn(k) a11 1 x2(k+1) = b2 − a21 x1(k+1) + a23 x3(k) + . . . + a2n x(nk) a22 .. .. . = . 1 xi(k+1) = bi − ai1 x1(k+1) + ai2 x2(k+1) + . . . aii −1 xi(−k+1 1) + aii +1 xi(+k)1 + . . . + ain xn(k) aii .. .. . = .
x1(k+1) =
xn(k+1) =
1 bn − an1 x1(k+1) + an2 x2(k+1) + an3 x3(k+1) + . . . + ann−1 x(nk−+11) ann
Usando il residuo, lo schema di Gauss-Seidel si scrive come
x(k+1) = x (k) + ( D + L)−1 r(k)
10.6.6
Il metodo di rilassamento Ciascuno dei metodi di Jacobi e Gauss-Seidel può essere anche rilassato tramite un fattore ω in modo che la nuova approssimazione ( k +1 ) xR sia ottenuta come una combinazione di x (k+1) e x (k) mediante il fattore ω . In particolare: ( k + 1)
xR
←− (1 − ω)x(k) + ωx(k+1)
Abbiamo usato in pedice la notazione R per indicare il vettore ottenuto con il rilassa(k +1) mento x R . Poi abbandoneremo questa notazione.
Questa operazione viene fatta direttamente nel momento in cui si stabilisce il metodo iterativo con rilassamento. Si può osservare che il metodo di Jacobi rilassato non produce effettivi miglioramenti rispetto al metodo non rilassato. Invece, il metodo di Gauss-Seidel rilassato può produrre un metodo molto più veloce in termini di convergenza e, quindi, preferibile rispetto al metodo senza rilassamento. Come metodo di rilassamento, dunque, consideriamo il metodo di rilassamento ottenuto da Gauss-Seidel. Per scelte di ω nell’intervallo ] 0, 1[ si parla di metodo Sotto-Rilassato, o
Under-Relaxation (e in genere è usato per ottenere convergenza nella soluzione di sistemi che non convergono con il metodo di GaussSeidel). Per valori di ω nell’intervallo [ 1, 2[ si ha, invece, il metodo noto come metodo di sovra-rilassamento o SOR (Successive OverRelaxation) – usato per accelerare la convergenza in sistemi che sono convergenti con il metodo di Gauss-Seidel. Lo schema di rilassamento, applicato al metodo di Gauss-Seidel, è
dato da
( k + 1)
xi
= (1
(k )
− ω ) xi
+
ω
aii
i−1
( k +1 )
bi − ∑ aij x j j=1
n
−
( k)
∑ aij x j
j =i+1
per i = 1, . . . , n
176
annamaria mazzia
La matrice di iterazione del metodo di rilassamento si ricava scrivendo in forma matriciale l’algoritmo appena descritto
x ( k + 1) = ( 1 x ( k + 1) =
( I + ω D−1 L)x(k+1) =
− ω)x(k) + ω D−1 b − Lx(k+1) − U x(k) (1 − ω) I − ω D−1 U x(k) − ω D−1 Lx(k+1) + ω D−1 b (1 − ω) I − ω D−1 U x(k) + ω D−1 b
Moltiplicando ambo i membri per D , si ricava ( D + ω L)x(k+1) = [( 1
− ω)D − ωU ] x(k) + ωb
La matrice di iterazione del metodo è dunque E = ( D + ω L)−1 [(1 − ω) D − ωU ] = ( D + ω L)−1 [(1 − ω) D − ω( A − D − L)] = ( D + ω L)−1 [( D + ω L) − ω A ]
−
= I
ω ( D + ω L) −1 A
A questo punto, ci si può chiedere quale sia l’ ω ottimale nel metodo di rilassamento. L’ω ottimale è quello che fa sì che il metodo di rilassamento converga nel minor numero di iterazioni (quindi, l’ω ottimale rende minimo il raggio spettrale della matrice di iterazione). Per particolari matrici A , sarà possibile stabilire a priori l’ω ottimale per risolvere il sistema lineare A x = b .
10.6.7
Convergenza dei metodi di J acobi, Gauss-Seidel, rilassamento Le matrici di iterazione dei tre metodi appena descritti sono scritte in
Tabella 10 .1 metodo Jacobi Gauss-Seidel rilassamento
matrice E J = I − D−1 A = − D−1 ( L + U ) ES = I − ( D + L)−1 A = −( D + L)−1 U Eω = I − ω( D + ω L)−1 A
Perchè ci sia convergenza, il raggio spettrale della matrice di iterazione deve essere minore di uno. Per i metodi di Jacobi e di Gauss-Seidel si può provare la convergen-
za del metodo, se la matrice A ha una delle seguenti caratteristiche:
Tabella 10.1: Matrici di iterazione dei metodi di Jacobi, Gauss-Seidel, rilassamento
Se la matrice A è diagonalmente dominante in sensostretto, la convergenza del metodo di Jacobi si può provare applicando il teorema di Gershgorin. Infatti gli autovalori della matrice E J , per il teorema di Gershgorin verificano la relazione, per i = 1, . . . , n
| |≤ λ
A è diagonalmente dominante in senso stretto A è a diagonalmente dominante (per righe o per colonne) ed è irriducibile.
Si ha inoltre, questo risultato: se A è simmetrica non singolare con elementi principali reali e positivi, allora il metodo di Gauss-Seidel è convergente se e solo se
A è definita positiva.
aij ∑ a . j =i ii
D’altra parte, se A è diagonalmente dominante in senso stretto aii > ∑ j=i aij da cui
aij aii
| |
| |
1 ovvero gli autovalori dellamatrice E J sono minori di 1, da cui concludiamo che ρ ( E J ) < 1. ∑ j =i
<
Una matrice si dice irriducibile se non può essere messa sotto la forma di matrice riducibile, vale a dire, non può essere scritta come
P
∅
Q . Un esempio di matrice riducibile R
è
A =
10 2 0 0
−2 −1 0 0
3 2 1 1
4 6 −1 1
appunti di calcolo numerico
177
Per quanto riguarda il metodo di rilassamento, condizione necessaria per la convergenza è ω 1 < 1, cioè ω deve appartenere all’intervallo [ 0, 2] ( per 0 < ω < 1 si ha sotto-rilassamento e per 1 ω < 2
| − |
≤
si ha sovra-rilassamento). Difatti il determinante della matrice di iterazione del metodo di rilassamento vale det Eω = (1 − ω )n e, poichè il prodotto degli autovalori di una matrice è uguale al determinante della matrice stessa, segue la relazione ρ(Eω ) ≥ | 1 − ω|. Quindi, se |1 − ω | > 1, sicuramente il metodo di rilassamento non convergerà. Perciò, condizione necessaria per la convergenza è |1 − ω| < 1. Molto importante è il seguente teorema (che non dimostriamo). Teorema 10 .6.2 (Ostrowski-Reich) Se A è definita positiva e ω è un
numero reale nell’intervallo ]0, 2[, allora il metodo di rilassamento è conver gente.
La convergenza del metodo di rilassamento si ha, inoltre, per A simmetrica con elementi diagonali positivi ed elementi extradiagonali negativi o nulli, se e solo se A è definita positiva. Un altro interessante teorema mette in relazione il metodo di rilassamento con i metodi di Jacobi e di Gauss-Seidel, sia per quanto riguarda la convergenza, sia per quanto riguarda il valore ottimale del parametro ω, in corrispondenza di matrici A che godono della cosidetta proprietà A e che siano coerentemente ordinate.
Dalla definizione di Eω si ha det Eω = det [( D + ω L)−1 ((1 − ω ) D − ωU )].
Poichè il determinante del prodotto di due matrici è uguale al prodotto dei determinanti delle matrici stesse, si ha det Eω = det [( D + ω L)−1 ] det [( 1 ω) D ωU )]. Consideriamo ora il fatto che il determinante di una matrice triangolare è uguale al prodotto degli elementi della diagonale principale. Per il primo determinante abbiamo det [( D + ω L)−1 ] = (det ( D + ω L)) −1 . Ora la matrice D + ω L è triangolare e il suo determinante coincide con il prodotto degli elementi della diagonale, vale a dire con det D. Si ha quindi: det [( D + ω L)−1 ] = (det D)−1 . Per il determinante det [( 1 ω ) D ω U )] (di una matrice che è sempre triangolare), gli elementi della diagonale principale sono gli elementi della matrice diagonale D ciascuno dei quali moltiplicati per (1 ω ). Perciò: det [( 1 ω ) D ωU ) ] = (1 ω )n det D. Arriviamo perciò al risultato: det Eω = (det D )−1 (1 ω )n det D = (1 ω )n . Inoltre, considerando λi autovalori della matrice Eω , per i = 1 , 2 , . . . , n e ρ( Eω ) il raggio spettrale, si ha det Eω = n n ∏i=1 λ i ∏i=1 ρ ( Eω ) = ρ ( Eω )n da cui segue (1 ω )n ρ( Eω )n , cioè ρ(Eω ) 1 ω.
−
−
−
−
|
− −
− −
|≤ | − ≥| − |
−
−
|
|
| ≤
Definizione 10 .6.1 Una matrice A, di dimensione n, si dice che ha pro prietà A se esiste una matrice di permutazione P tale che la matrice PAPT
abbia la forma PAP T =
D1 A 1 dove D1 e D2 sono matrici diagonali. A2 D2
Una matrice con proprietà A può essere anche chiamata matrice biciclica. In modo equivalente, si può dire che una matrice A , di dimensione n, ha proprietà A se l’insieme dei numeri naturali {1 , 2 , . . . , n} può essere scomposto in due sottoinsiemi non vuoti e complementari S e T in modo tale che i coefficienti non nulli a ij = 0 si hanno se gli indici i e j sono coincidenti tra loro, cioè i = j , oppure se gli indici i e j non appartengono allo stesso insieme S o T , vale a dire che se l’indice i ∈ S allora j ∈ T , oppure se i ∈ T allora j ∈ S. Esempio La matrice tridiagonale
A =
−
2 1 0 0
−1
0 2 −1 −1 2 0 −1
0 0 −1 2
ha proprietà A (o biciclica): permutando la prima e quarta riga e la prima e quarta colonna, mediante la matrice di permutazione
Due insiemi S e T non vuoti si dicono complementari di V = 1 , 2 , . . . , n se S = ∅ , T = ∅ , S T = V e, inoltre, se i S , i
{ } ∈ ∈ T e, viceversa, se j ∈ T , j ∈S
∪
178
P =
annamaria mazzia
0 0 0 1
0 1 0 0
PAPT =
0 0 1 0
1 0 0 0
−
2 0 1 0
si ha
0 2 −1 −1
−1 0 −1 −1 2 0
0 2
⇒ =
D1 = D2 =
2 0 0 2
Usando l’altra definizione, basta scegliere come insiemi S e T , gli insiemi S = {1, 3} e T = {2, 4}.
Definizione 10 .6.2 Una matrice si dice coerentemente ordinata in relazione ad un vettore di ordinamento q , di lunghezza n, se per ogni coefficiente
aij non nullo, con i = j, si verifica:
Considerando la matrice dell’esempio precedente, si può prendere il vettore di ordinamento q = ( q1 , q2 , q3 , q4 ) = ( 1,2,3,4). Si verifica infatti, per a12 , q2 q1 = 2 1 = 1 ; per a21 , q 1 q2 = 1 2 = 1 e così via per gli altri elementi non nulli. Quindi la matrice è
−
−
−
−
−
coerentemente ordinata.
se j > i allora q j − qi = 1 se j < i allora q j − qi = −1 Un’altra definizione di matrice con coerente ordinamento considera la matrice A data non dalla scomposizione A = L + D + U che abbiamo visto fino ad ora ma come A = D ( L A + I + U A ), (osserviamo
che, rispetto alla prima scomposizione, abbiamo messo in evidenza la matrice diagonale D e quindi le matrici triangolari superiore e inferiore sono L A = D−1 L e U A = D−1 U ). Sia D non singolare. Allora la matrice A è detta coerentemente ordinata se gli autovalori della matrice J (α) = α L A + α−1 U A , con α = 0 sono indipendenti dal parametro α . Le matrici con proprietà A (o bicicliche) che sono già nella forma D1 A 1 (senza dover fare permutazioni di righe o colonne) A = A2 D2 sono coerentemente ordinate. Le matrici tridiagonali sono un altro esempio di matrici bicicliche e coerentemente ordinate. Fatta questa premessa sulle matrici bicicliche e coerentemente
La matrice A =
2 0 1
0 −3 2
1 5 è bicicli3
ca e coerentemente ordinata. Infatti si ri-
−
0 , la 3 1 matrice D 2 = 3 , mentre A1 = e 5 A2 = 1 2 . conosce la matrice D1 =
−
1 1 0
2 3 5
2 0
0 2 è tridiago6
ordinate, possiamo dare il seguente risultato (che non dimostriamo).
La matrice A =
Teorema 10 .6.3 (Young) Se A è una matrice con proprietà A e coerente ordinamento e 0 < ω < 2, allora:
nale (gli elementi non nulli sono sulla diagonale principale e sulle diagonali immediatamente sopra e sotto la diagonale principale).
se µ è autovalore della matrice di iterazione di Jacobi E J , ogni λ che verifica la relazione ( λ + ω − 1)2 = λω 2 µ2 è autovalore di E ω ;
Quindi è biciclica e coerentemente ordinata.
se λ è autovalore non nullo di E ω , allora ogni µ che verifica la relazione precedente è autovalore di E J ; se gli autovalori di E J sono reali e il metodo di Jacobi converge ( ρ( E J ) < 1), esiste uno ed uno solo ωopt che rende ottimale il metodo di rilassamento, tale cioè che ρ (ωopt ) = min0<ω <2 ρ(Eω ). Risulta ωopt =
2 1 +
−
1 ρ( E J )2
e
ρ( Eωopt ) = ω opt
−1
appunti di calcolo numerico
Per ω = 1 il metodo di rilassamento coincide con il metodo di Gauss-Seidel. Allora, per matrici con proprietà A e coerentemente ordinate, nelle ipotesi del teorema di Young, valendo la relazione (λ + ω − 1)2 = λω 2 µ2 , si trova, per ω = 1, λ 2 = λµ 2 da cui ρ (ES ) = ρ( E J )2 . Come conseguenza, si ha che il metodo di Gauss-Seidel ha velocità doppia rispetto al metodo di Jacobi. 10.7
Esercizi
Esercizio 10 .7.1 Sia dato il sistema lineare A x = b , dove
A =
8 2 6 7 5 0 1 0 5
30 34 7
b =
(a) Provare che gli schemi di Jacobi e di Seidel convergono e calcolare la velocità asintontica di convergenza di entrambi gli schemi. (b) A partire dallo stesso vettore iniziale x (0) = (0 0 0)T , calcolare le approssimazioni x (1) e x (2) che si ottengono applicando lo schema di Jacobi e lo schema di Seidel. Svolgimento
(a) la matrice A non è diagonalmente dominante nè per righe nè per colonne (vedasi la seconda riga e la terza colonna). Non possiamo usare il criterio di matrice diagonalmente dominante per
provare la convergenza dei due metodi. La matrice A è biciclica e coerentemente ordinata (si veda lo schema a croce che individua 5 0 ): D1 = (8) e D 2 = 0 5
8 7 1
2 5 0
6 0 5
Quindi se proviamo che lo schema di Jacobi converge, cioè che l’autovalore di massimo modulo della matrice di Jacobi è reale e in modulo minore di 1, allora, poichè per matrici bicicliche e coerentemente ordinate vale ρ ( E J )2 = ρ ( ES ), allora anche il metodo di Gauss-Seidel convergerà alla soluzione (da ρ( E J ) < 1 segue ρ( ES ) < 1). La matrice di Jacobi è E J = I − D−1 A cioè E J =
− −
0 7/5 1/5
−2/8 −6/8 0 0
0 0
− − =
0 7/5 1/5
−1/4 −3/4 0 0
0 0
Troviamo gli autovalori della matrice E J imponendo det ( E J
0.
− µ I ) =
179
180
annamaria mazzia
− −−
µ
7/5 1/5
−1/4 −3/4 −µ 0 = −µ3 + 34 · 15 µ + 14 · 75 µ = 0 0 −µ
3 7 + )µ, 20 20 √ √ Una radice è µ = 0, e le altre due sono µ = ± 1/2 = ± 0.5 = 0.707106781. Si ha: 0 = det ( E J − µ I ) = −µ3 + (
Gli autovalori sono tutti reali e quello di massimo modulo è µ = 0.707106781 < 1. C’è, dunque, convergenza per i metodi di Jacobi e di Gauss-Seidel ( ρ(ES ) = ρ (E J )2 = 0.5). Le velocità di convergenza valgono
R J = − log10 ( ρ(E J )) = 0.1505149 RS = − log10 ( ρ(ES )) = 0.301029995 = − log10 ( ρ( E J )2 ) = 2 R J
Lo schema di Jacobi è:
(b)
1 x1(k+1) = (30 − 2x2(k) − 6x3(k) ) 8
Partendo dal vettore x(0) con componenti tutte nulle, abbiamo
1 x2(k+1) = (34 − 7x1(k) ) 5
1 x3(k+1) = (7 − x1(k) ) 5 Lo schema di Seidel è: ( k + 1)
x1
1 (k ) (k ) = (30 − 2x2 − 6x3 ) 8
1 x2(k+1) = (34 − 7x1(k+1) ) 5 1 x3(k+1) = (7 − x1(k+1) ) 5
k
x1(k)
x2(k)
x(3k)
0 1 2
0 3.75 1.0
0 6. 8 1.55
0 1 .4 0.65
Partendo dal vettore x(0) con componenti tutte nulle, abbiamo
k
x1(k)
x2(k)
x3(k)
0 1 2
0 3.75 2.875
0 1.55 2.775
0 0.65 0.825
Esercizio 10 .7.2 Dato il sistema A x = b con
A =
5 0 10 0 3 15 2 1 α
(a) dire per quali valori di α il metodo di Jacobi converge. (b) trovare il valore di α in corrispondenza del quale il metodo SOR ha un valore di omega ottimo ωopt = 3/2. Per tale valore trovare la velocità asintotica di convergenza del metodo SOR.
Svolgimento
appunti di calcolo numerico
(a) La matrice dipende dal parametro α quindi a priori non possiamo dire se Jacobi converge o meno. Scriviamo la matrice di iterazione del metodo di Jacobi come E J = − D−1 ( L + U ) =
−
1/5 0 0 0 1/3 0 0 0 1/ α
−
0 0 10 0 0 15 = 2 1 0
0 0 2/α
0 0 −1/α
Gli autovalori si calcolano imponendo det ( E J − µ I ) = 0, vale a dire
− −
µ
0
0 2/ α
−µ −1/α
−2 −5 −µ
= 0 vale a dire
− µ3 + 9αµ = 0
3 Ricaviamo gli autovalori µ = 0 e µ = ± √ . α
Perchè ci sia convergenza deve dunque essere
√
3 < α. Ricaviamo la relazione α > 9. (b) Dalla relazione dell’ωopt , ω opt =
√ 3α
2 1 +
−
1 ρ( E J )2
<
1 ovvero
, valida perchè
la matrice è biciclica e coerentemente ordinata e dal momento che gli autovalori della matrice di Jacobi sono reali e, in valore assoluto,
minori di uno, si ha: 2 3 1 √ −8 = − 9 =⇒ α = 81 = 10.125 √ = =⇒ = 1 − 9/ α =⇒ 3 9 8 α 1 + 1 − 9/α 2 3 Da ωopt = = 1.5 segue λopt = ωopt − 1 = 0.5, da cui R = − log10 (λopt )2 = 0.3010299957.
Esercizio 10 .7.3 Dato il sistema lineare Ax = b dove:
A =
6 1 3 1 8 2 4 3 10
b =
9 3 14
(a) Dall’esame della matrice, dire se il metodo di Gauss–Seidel converge. (b) Partendo dal vettore iniziale x(0) = (0,0,0)T , calcolare x(1) , x(2) , x(3) con il metodo di Gauss–Seidel. 1.
Stimare la costante asintotica dell’errore M e quindi la velocità di convergenza R.
Svolgimento
(a) La matrice è diagonalmente dominante in senso stretto (per righe e per colonne), quindi il metodo di Gauss-Seidel converge.
−2 −5 0
181
182
annamaria mazzia
(b) Lo schema di Seidel è:
1 x1(k+1) = (9 − x2(k) − 3x3(k) ) 6 1 x2(k+1) = (3 − x1(k+1) − 2x3(k) ) 8 x3(k+1) =
1 ( k + 1) − 3x2(k+1) ) (14 − 4x1 10
Partendo dal vettore iniziale assegnato abbiamo: k = 1
k = 2
k = 3
x1 =
x2 =
x3 =
1.50000000000000 0.187500000000000 0.743750000000000
1.09687500000000 5.195312499999999 E − 002 0.945664062500000 1.01850911458333 1.127034505208335 E − 002 0.989215250651042
Per stimare M (che è la costante asintotica dell’errore e, in questo caso, il raggio spettrale della matrice di iterazione) basta fare il rapporto tra le norme dei vettori degli scarti d 3 e d 2 . Ora:
d2 = x 2 − x1 =
− −
0.403125000000000 0.135546875000000 0.201914062500000
e
d3 = x 3 − x2 =
− −
7.836588541666667 E − 002 4.068277994791664 E − 002 4.355118815104175 E − 002
La scelta della norma vettoriale da utilizzare è indifferente (abbia-
mo studiato norme vettoriali equivalenti e quindi il risultato che otterremo andrà bene qualunque sia la norma vettoriale che appli-
cheremo). Se scegliamo, ad esempio, di usare la norma euclidea dei vettori, abbiamo M = 0.209119. Se invece usiamo la norma infinito abbiamo M = 0.194396. La velocità di convergenza R può essere quindi stimanta applicando la formula R = − log10 ( M) e abbiamo il valore 0.679607 o 0.711313 a seconda che consideriamo la stima di M ottenuta mediante la norma euclidea o la norma infinito.
Domande di riepilogo
10.8 1.
Quale è la definizione di norma di vettori?
2.
Quali sono le prinicipali norme che abbiamo studiato?
appunti di calcolo numerico
3.
Come si definiscono le norme su matrici?
4. Cosa
significa che una norma su matrici è compatibile con una norma su vettori?
5. Cosa significa che
una norma su matrici è indotta da una norma
su vettori? 6.
Definire le norme 1 e infinito.
7.
Dare la definizione di norma di Frobenius.
8.
Cosa è la traccia di una matrice?
9.
Come si definiscono gli autovalori e autovettori di una matrice?
10.
Una matrice di dimensione n , quanti autovalori possiede?
11. Che relazione c’è tra gli autovalori di una matrice e la sua traccia
e determinante? 12.
Cosa è il raggio spettrale di una matrice?
13.
Come si definisce la norma 2 su vettori?
14.
Che relazione esiste tra il raggio spettrale di una matrice e una norma naturale su matrice?
15. Come si possono definire i metodi iterativi classici per risolvere
sistemi lineari? In quale forma possono essere scritti? 16.
Che differenza c’è tra un metodo diretto e un metodo iterativo per la soluzione di sistemi lineari?
17.
Che cosa significa che una matrice è sparsa?
18.
Definire il residuo.
19. Mettere in relazione un metodo iterativo con lo schema di punto
fisso. 20. Qual è il teorema generale di convergenza per i metodi iterativi
classici? Quale caso particolare abbiamo dimostrato? 21. Come
si definisce la velocità asintotica di convergenza e a cosa
serve? 22.
In un grafico di convergenza in scala semilogaritmica sull’asse delle ordinate, in cui sull’asse delle ascisse si pone il numero delle iterazioni effettuate e sull’asse delle ordinate i logaritmi della norma del vettore degli scarti ad ogni iterazione, cosa rappresenta
la pendenza della retta del profilo di convergenza? 23.
Che ordine di convergenza hanno i metodi iterativi classici?
24. Come si definisce la costante asintotica di convergenza e in quale
modo può essere stimata?
183
184
annamaria mazzia
25. Descrivere il metodo di Jacobi, partendo dal sistema da risolvere
e scomponendo la matrice del sistema nelle tre matrici L, D, U . (Queste tre matrici sono le stesse della fattorizzazione LDU ?) 26.
Come si scrive la matrice di iterazione del metodo di Jacobi?
27.
Descrivere il metodo di Gauss-Seidel, partendo dal sistema da risolvere e scomponendo la matrice del sistema nelle tre matrici L , D, U .
28. Come
si scrive la matrice di iterazione del metodo di Gauss-
Seidel? 29.
Cosa significa effettuare un rilassamento tramite un fattore ω?
Quale dei due metodi che abbiamo studiato viene rilassato? Come diventa lo schema iterativo? Quale è la matrice di iterazione che si
ricava? 30.
Quali sono i teoremi di convergenza per i metodi di Jacobi e di Gauss-Seidel che abbiamo enunciato?
31. Per
quali valori di ω è certo che il metodo di rilassamento non può convergere? Per quale motivo?
32. Quale è la condizione necessaria (ma non sufficiente) di conver-
genza per il metodo di rilassamento? Per quale motivo? 33. Quali
teoremi abbiamo visto che assicurano la convergenza del metodo di rilassamento?
34.
Cosa significa che una matrice è biciclica o con proprietà A?
35.
Cosa significa che una matrice è coerentemente ordinata?
36. Abbiamo
studiato alcune matrici che sono sia bicicliche sia coerentemente ordinate: quali sono?
37.
Cosa assicura il teorema di Young e sotto quali ipotesi?
11 Differenziazione numerica ed equazioni alle derivate ordinarie 11.1
L’universo è un’equazione differenziale. Jules Henri Poincarè
Un esempio
A ll ’ inizio del ’ 90 0, van der Pol studiò fenomeni non lineari e propose l’equazione differenziale y (t) + ( y2 (t) − 1) y (t) + y(t) = 0
Questa equazione governa l’intensità di corrente in un circuito oscillante a triodo e viene utilizzata nello studio di circuiti che contengono valvole termoioniche, i cosiddetti tubi a vuoto, come il tubo catodico
del televisore o il magnetron nei forni a microonde. La quantità indica l’intensità dello smorzamento non lineare: quanto più è elevato tanto più il sistema perde energia rapidamente. L’equazione differenziale del secondo ordine si può ricondurre ad un sistema di equazioni differenziali del primo ordine. Ponendo u = (u1 , u2 ) = ( y, y ) si ha
u1 = u2
u2
−((u1 )2 − 1)u2 − u1
Come si risolve numericamente un sistema di equazioni differenziali come quello appena scritto? In questo Capitolo, daremo una piccola introduzione ad alcune tecniche di differenziazione numerica
e ad alcuni metodi numerici che permettono di risolvere equazioni differenziali del primo ordine. 11.2
Differenziazione numerica Dall’analisi matematica, sappiamo come si calcolano le derivate di una
funzione. Tuttavia è utile conoscere anche delle tecniche numeriche di differenziazione, sia perchè, molte volte, la funzione non è nota in maniera esplicita ma solo per punti, sia perchè, a volte, la funzione è
troppo complicata!
Balthasar van der Pol (1889-1959) fu un fisico e matematico olandese. Nel 1916 lavorò per un anno con l’ingegnere John Ambrose Fleming a Londra (Fleming aveva già inventato il diodo nel 1904). Si trasferì successivamente a Cambridge e iniziò una collaborazione con John Joseph Thomson al Cavendish Laboratory (Thomson aveva scoperto l’elettrone nel 1897). Qui divenne amico di Edward Appleton che, nel 1947, ricevette il premio Nobel per la fisica per i suoi contributi alla conoscenza della ionosfera – studi fatti insieme a van der Pol. La loro collaborazione riguardò anche lo studio di fenomeni non lineari usando circuiti triodi per verificare le loro teorie. Quando van del Pol rientrò in Olanda, continuò a occuparsi di ottica, elettromagnetismo, onde radio e fisica atomica. Il nome di van der Pol è associato con l’equazione differenziale che porta il suo nome. Questa equazione apparve per la prima volta sul suo articolo On relaxation oscillation pubblicato sulla rivista Philosophical Magazine nel 1926.
186
annamaria mazzia
Dall’analisi, sappiamo che, assegnata una funzione y = f ( x) e dato un punto x 0 nel suo insieme di definizione, la derivata f ( x0 è data
da f ( x0 + h) − f (x0 ) h h →0
f ( x0 ) = lim
Per ottenere una formula che approssima la derivata prima di f (x0 ), useremo nodi equidistanti in un intorno di x 0 : x0 − h, x0 , x0 + h, . . . con h una quantità positiva sufficientemente piccola. Consideriamo la f sufficientemente regolare per applicare la formula di Taylor ( f continua e limitata insieme alle sue derivate, fino ad un ordine sufficientemente elevato). La formula di Taylor della funzione f di centro x 0 , se ci fermiamo alla derivata seconda, è data da f (x ) = f (x0 ) + f (x0 )( x − x0 ) +
( x
− x0 )2 f (ξ ) 2
dove ξ è un punto, che non conosciamo, nell’intervallo di estremi x e
x0 . Prendiamo come x il valore x = x0 − h: la formula di Taylor si legge come f (x0 − h) = f ( x0 ) − h f ( x0 ) +
h 2 f (ξ ) 2
Portiamo a primo membro f (x0 ), ottenendo f ( x0 ) =
f ( x0 ) − f (x0 − h) h + f (ξ ) 2 h
h2 f (ξ ) abbiamo una formula che approsSe trascuriamo il termine 2 sima f ( x0 ) e che si chiama backward difference formula, formula delle differenze all’indietro (stiamo usando infatti il punto x 0 − h).
La backward difference formula è data da f ( x0 ) − f (x0 − h) f ( x0 ) = h Questa formula richiede la conoscenza del valore della f in due punti x0 e x 0 h ed è del primo ordine (trascuriamo, infatti, un termine che
−
h dipende da h : f (ξ )). 2
Se, invece, applichiamo la formula di Taylor a x = x 0 + h abbiamo
la forward difference formula, formula delle differenze in avanti: f (x0 + h) = f ( x0 ) + h f ( x0 ) +
h 2 f (ξ ) 2
da cui f ( x0 ) =
f ( x0 + h) − f ( x0 ) h − 2 f (ξ ) h
f ( x0 + h) − f ( x0 ) La forward formula è f ( x0 ) = h
appunti di calcolo numerico
L’errore è sempre del primo ordine. Una formula di grado più elevato si ottiene considerando tre punti x0 h, x0 , x0 + h. Prendiamo le formule di Taylor di centro x 0 h e x0 + h scritte fino alla derivata terza di f ,
−
−
h 2 h 3 f ( x0 ) + f (ξ 1 ) 2 6 2 h h 3 f (x0 − h) = f ( x0 ) − h f ( x0 ) + f ( x0 ) − f (ξ 2 ) 2 6 f (x0 + h) = f ( x0 ) + h f ( x0 ) +
Sottraendo membro a membro abbiamo h 3 f (x0 + h) − f ( x0 − h) = 2 h f ( x0 ) + ( f (ξ 1 ) + f (ξ 2 )) 6 Ora le due derivate terze nei due punti ξ 1 e ξ 2 (che non conosciamo)
sono comprese tra un valore minimo e un valore massimo, da cui f (ξ 1 ) + f (ξ 2 ) anche il loro valore medio è compreso tra il minimo 2 e il massimo della funzione f stessa (si veda il Teorema del Valore Intermedio), cioè esiste ξ (compreso tra ξ 1 e ξ 2 e, quindi, tra x 0 − h e f (ξ 1 ) + f (ξ 2 ) . Sostituendo abbiamo x0 + h) per cui f (ξ ) = 2 h 3 f (x0 + h) − f ( x0 − h) = 2 h f ( x0 ) + 2 f (ξ ) 6
Risolviamo ora per f ( x0 ), ottenendo f ( x0 ) =
f ( x0 + h) − f ( x0 − h) h 2 − 6 f (ξ ) 2h
Se trascuriamo il termine che dipende da h 2 otteniamo un’approssimazione di f ( x0 ). f ( x0 + h) − f (x0 − h) La formula centrata è data da f ( x0 ) = 2h
Il termine che trascuriamo per ottenere le formule di differenziazione numerica, cioè l’errore di discretizzazione, prende il nome di errore di troncamento. La formula centrata valuta il valore della f in soli due punti, come è stato fatto per le formule backward e forward ma ha un ordine di accuratezza più elevato. Formule più accurate si possono ottenere usando più punti nell’intorno di x 0 e considerando espansioni di Taylor che coinvolgono derivate di ordine più elevato. Ad esempio, prendendo i punti x 0 − 2h, x0 − h, x 0 + h e x 0 + 2h si può ricavare f (x0 ) =
1 h 4 ( f ( x0 − 2h) − 8 f ( x0 − h) + 8 f ( x0 + h) − f (x0 + 2h)) + f (v) (ξ ) 12h 30
Da questa, otteniamo la formula detta a 5 punti perchè, oltre al punto in cui vogliamo approssimare la derivata, ne consideriamo altri
quattro.
187
188
annamaria mazzia
La formula a 5 punti è data da f (x0 ) ≈
1 ( f ( x0 − 2h) − 8 f ( x0 − h) + 8 f ( x0 + h) − f (x0 + 2h)) 12h
L’errore di troncamento dipende da h 4 . Nell’applicare queste formule, dobbiamo ricordarci che, oltre all’errore di troncamento dovuto al tipo di approssimazione fatto, c’è anche
l’errore di arrotondamento. Nell’esempio di pag. 41 , avevamo visto come, per piccoli valori di h , il fenomeno di cancellazione numerica portava a crescite degli errori. La scelta di h dovrebbe, perciò, dipendere, dall’ordine dell’errore
Altre tecniche di differenziazione numerica sono basate sull’interpolazione polinomiale di Lagrange (se p( x) approssima f ( x) allora p ( x) approssima f ( x)) o su un procedimento di estrapolazione di Richardson (simile a quello che abbiamo visto per le formule di integrazione numerica). Il discorso si estende, inoltre, per approssimare derivate di ordine superiore.
di troncamento (che conosciamo) e da una maggiorazione sul termine
d’errore d’arrotondamento (valore che in genere non conosciamo). Per evitare che domini l’errore di arrotondamento (che può portare al
fenomeno di cancellazione numerica) è importante non prendere h troppo vicino alla precisione di macchina. Esempio Riprendiamo l’esempio di pag. 41 per confrontare le
diverse formule che abbiamo introdotto. Dobbiamo derivare f (x ) = sin (x ) in x 0 = 1.2. Per confrontare le diverse formule, partiamo da h = 1 e lo riduciamo fino ad arrivare a h = 10 −12 . In Figura 11.1, in un grafico semilogaritmico, confrontiamo gli errori assoluti ottenuti dalle varie formule: da un certo punto in poi, prevale l’errore di arrotondamento.
Figura 11.1: Grafico semilogaritmico che mette a confronto l’errore esatto al variare di h [10−12 , 1] delle formule forward,
∈
backward, centrata e a 5 punti.
11.3
Sulle equazioni differenziali ordinarie Passiamo ora a studiare le equazioni differenziali ordinarie. Vogliamo trovare una funzione y (t) che soddisfi la seguente equazione differenziale ordinaria del primo ordine: d y = f (t, y ), dt
Ordinary Differential Equation.
a≤t≤b
La funzione f (t, y) è assegnata. Ci riferiamo a t come alla variabile indipendente. Dobbiamo trovare quella funzione y = y (t) tale che la d y(t) sua derivata prima y = y (t) = coincida con f (t, y(t)) . dt Esempio Sia f ( t, y ) = y + t definita per t
−
que y reale. Si ha y = − y + t,
Una abbreviazione per indicare un’equazione differenziale ordinaria è data dalla sigla ODE:
≥ 0 e per qualun-
t≥0
Si verifica che, per qualunque scalare α la funzione y (t) = t − 1 +
αe−t soddisfa la ODE.
Se, inoltre, è assegnato un valore iniziale, per esempio y (0) = 1, allora, dovendo essere −1 + α = y (0) = 1, risulta α = 2. Assegnare
appunti di calcolo numerico
un valore iniziale determina un’unica soluzione all’ODE. Si parla di problema a valori iniziali (IVP). Nel caso in cui y (0) = 1 si ricava l’unica soluzione y (t) = t − 1 + 2e−t .
Problemi in cui abbiamo equazioni alle derivate ordinarie di ordine più elevato possono essere trasformati in sistemi equivalenti di equazioni del primo ordine. Esempio La seconda legge del moto di Newton dice che la
forza F è uguale al prodotto della massa m per l’accelerazione a: F = ma . Questa equazione è una ODE del secondo ordine in quanto l’accelerazione a è data da a = y , dove y è la coordinata della F posizione. L’ODE può essere riscritta come: y = . Definendo m u1 = y e u 2 = y si ha il sistema (equivalente all’equazione di prima) di due equazioni del primo ordine di ODE:
u1 = u2
u2 F/m
Per risolvere il sistema, possiamo usare metodi che vanno bene per risolvere equazioni differenziali del primo ordine. La prima componente della soluzione u 1 corrisponde alla posizione y dell’equazione da cui siamo partiti. La seconda componente u 2 fornisce la velocità y .
Sistemi del primo ordine di ODE hanno la forma y ( t) = f ( t, y)
dove y : R −→ Rn con y = ( y1 y2 . . . yn ), f : Rn+1 −→ Rn e y (t ) = dy denota la derivata rispetto a t (per cui la i -sima componente del dt dy (t) vettore derivata è data da y i (t) = i ). La funzione f è assegnata e dt
noi vogliamo determinare il vettore di funzioni y che soddisfa l’ODE.
Per semplicità noi studieremo il caso di una singola equazione scalare, n = 1 . Ma l’approccio è del tutto simile nel caso di sistemi di equazioni del primo ordine. Sia data l’ODE y = f (t, y(t))
a≤t≤b
con valore iniziale y( a) = y a .
Per risolvere questa ODE discretizziamo l’intervallo [ a, b] in n + 1 punti, equidistanti per semplicità: ti = a + ih , h = 0, 1, . . . , n, con h = (b − a)/n. Il passo di discretizzazione (temporale se t assume il significato della variabile temporale) è dunque h . Nelle applicazioni pratiche,
189
190
annamaria mazzia
il passo h è variabile (cioè i punti non sono equidistanti), tuttavia, per capire meglio come funzionano i metodi, noi useremo sempre un
passo h costante. Sia y (t) la soluzione esatta del nostro problema a valori iniziali. Allora y (ti ) è il valore esatto della soluzione calcolata nel punto t i . Indichiamo invece con y i il valore approssimato al tempo t i che ricaviamo applicando un metodo numerico che risolve il problema proposto. 11.4
Metodo di Eulero esplicito Con il metodo di Eulero esplicito applichiamo la formula di Taylor (del secondo ordine) alla funzione y (t), di centro t i , in modo da poter successivamente approssimare la derivata prima y (ti ): ( t − ti )2 y(t) = y (ti ) + ( t − ti ) y (ti ) + y (ξ i ) 2 ( t − ti )2 y (ξ i ) è il resto della formula di Taylor con ξ i un La quantità 2 punto opportuno nel segmento di estremi t e t i . Prendiamo come t il valore ti + h vale a dire ti+1 , da cui si ha t − ti = t i+1 − ti = h . Sostituendo si ottiene: h 2 y(ti+1 ) = y (ti ) + hy (ti ) + y (ξ i ) 2 Esplicitando y (ti ) rispetto agli altri termini si ha: y(t ) − y(ti ) h − 2 y (ξ i ) y (ti ) = i+1 h Ora si sostituisce il valore trovato per y (ti ) nella ODE y = f (t, y(t)) per t = t i : y(ti+1 ) − y(ti ) h − 2 y (ξ i ) = f (ti , y(ti )) h h Trascurando il termine y (ξ i ) non abbiamo più i valori della so2 luzione esatta, ma otterremo i valori della soluzione approssimata. Scriviamo dunque: yi+1 − yi = f (ti , yi ) h La formula di Eulero esplicito è: y i+1 = y i + h f (ti , yi ). La formula è di tipo esplicito perchè per passare dal livello i al livello i + 1 sfruttiamo i dati che già conosciamo del livello i . Si parte infatti da y 0 = y (t0 ) = y ( a) = y a e si ricava: y1 = y 0 + f (t0 , y0 ) y2 = y 1 + f (t1 , y1 ) .. .. . = .
Leonhard Euler (1707-1783) fu un matematico svizzero. Fu studente di Johann Bernoulli che comprese le sue grandi potenzialità e favorì i suoi studi. Eulero è noto soprattutto per i suoi contributi nel campo della geometria, della teoria dei numeri, delle equazioni differenziali, del calcolo delle variazioni. È lui che introdusse il simbolo f ( x ) per indicare le funzioni, e per la base naturale, i per la radice quadrata di 1, di π , il simbolo di
−
sommatoria ∑ e altri ancora.
appunti di calcolo numerico
191
Si arriva alla stessa formula integrando l’ODE e approssimando l’integrale della f mediante il valore in f (t0 , y (t0 )): da y = f (t, y( t)) integrando ambo i membri da t 0 a t , otteniamo t
t0
dy dt = dt
t
t0
y ( t)
⇒
f (t, y(t)) dt =
y0
dy =
t
t0
f (t, y(t)) dt
t
Al secondo membro, approssimiamo t0 f (t, y (t)) dt mediante il valore ( t t0 ) f ( t0 , y (t0 )) (approssimiamo la f mediante la retta f (t0 , y (t0 ))).
−
Abbiamo:
y(t) = y 0 + ( t − t0 ) f (t0 , y0 )) + errore della formula di quadratura.
Per t = t 1 , numericamente: y 1 = y0 + h f (t0 , y0 )) . Ai passi successivi: y i+1 = y i + h f (ti , yi )) Esempio Supponiamo di applicare il metodo di Eulero esplicito alla ODE y = y con passo h a partire dal punto iniziale t 0 = 0 e
−
avanziamo al tempo t 1 = t 0 + h y1 = y 0 + h f (t0 , y0 ) = y 0 − hy0 = (1 − h) y0 Il valore y 1 che otteniamo è affetto da errore: y 1 = y ( t1 ) Per esempio, se per t 0 si ha y 0 = 1, la soluzione esatta è y (t) = e −t . Per h = 0.5, si ha y 1 = 0.5 mentre y (0.5) = e −0.5 0.60653
≈
Figura 11.2: Interpretazione geometrica del metodo di Eulero esplicito. Si è considerato il problema y = y con y (0) = 1 la cui soluzione esatta è y (t ) = e −t . I valori numerici ottenuti dal metodo di Eulero esplicito sono cerchiati e si trovano sulla linea spezzata che li interpola. La linea spezzata è tangente, all’inizio di ogni passo, alla traiettoria che passa per il corrispondente punto, soluzione del problema y = y con y (ti ) = y i .
−
−
Da un punto di vista geometrico (si veda la Figura 11.2), il valore in t i+1 è approssimato utilizzando il valore della retta la cui pendenza è data da f (ti , yi ): è come se ad ogni passo cercassimo di risolvere il
192
annamaria mazzia
problema a valori iniziali: y (t) = f (t, y(t)) y(ti ) = y i
per cui il valore che otteniamo per il tempo ti+1 è tangente alla traiettoria della soluzione di questo IVP. 11.5
Metodo di Eulero implicito Se applichiamo la formula di Taylor di punto iniziale t i+1 , abbiamo y(t) = y (ti+1 ) + ( t − ti+1 ) y (ti+1 ) + Per t = t i , si ha t
abbiamo:
( t
− ti+1 )2 y (ξ i ) 2
− ti+1 = ti − ti+1 = t i − (ti + h) = −h. Sostituendo,
h 2 y(ti ) = y (ti+1 ) − hy (ti+1 ) + y (ξ i ) 2
Otteniamo quindi y (ti+1 ) =
y(ti+1 ) − y(ti ) h + y (ξ i ) 2 h
Andando a sostituire nella ODE al tempo t i+1 , si ha : y(ti+1 ) − y(ti ) h + y (ξ i ) = f (ti+1 , y(ti+1 )) 2 h h Trascurando il termine del resto di Taylor y (ξ i ) abbiamo: 2 yi+1 − yi = f (ti+1 , yi+1 )) h
La formula di Eulero implicito vale y i+1 = y i + h f (ti+1 , yi+1 )) . La differenza rispetto alla formula esplicita è che la f è valutata non più al tempo t i ma al tempo t i+1 Quindi il calcolo di y i+1 dipende implicitamente da y i+1 stesso! La valutazione di y i+1 diventa quindi più laboriosa e complicata (se si ha un’equazione non lineare in y i+1 , la si risolve tramite un metodo di punto fisso o di Newton-Raphson).
In termini di accuratezza si hanno risultati migliori. Esempio Consideriamo sempre y = y con y (0) = 1 (solu-
zione esatta y (t) = e −t ).
−
Il metodo di Eulero implicito diventa: yi+1 = yi − hy i+1 ovvero (1 + h) yi+1 = y i yi La soluzione numerica è y i+1 = . (1 + h) Per h = 0.5 ricaviamo y 1 = 0.66667 contro un valore esatto y (1) ≈ 0.60653.
appunti di calcolo numerico
Esempio Si abbia l’equazione y = y3 con condizione iniziale
−
y(0) = 1. Usando il metodo di Eulero implicito con passo h = 0.5, per ricavare y 1 otteniamo l’equazione implicita y1 = y 0 + h f (t1 , y1 ) = 1 − 0.5 y31
Questa equazione non lineare in y 1 può essere risolta mediante metodo di punto fisso ( x = g( x) = 1 − 0.5 x3 ) oppure utilizzando il metodo di Newton-Raphson per F ( x ) = 0 con F ( x) = x − 1 + 0.5x3 ) . L’approssimazione iniziale per ottenere y 1 può essere o la soluzione al passo precedente, y 0 , oppure usare il metodo di Eulero esplicito, che dà y 1 = y0 − 0.5 y30 = 0.5. Otteniamo, come y 1 il valore finale y1 ≈ 0.7709.
Esempio Vogliamo discretizzare il problema a valori iniziali
y = − y2 y(0) = 1 con passo h = 0.1 applicando il metodo di Eulero esplicito per ricavare
y1 e y 2 . Il metodo di Eulero esplicito è: yi+1 = y i + h f (ti , yi ) = y i + h(− y2i ) = y i − hy2i
Partendo da y 0 = 1 si ricava: y1 = 1 − 0.1(12 ) = 0.9 y2 = 0.9 − 0.1(0.92 ) = 0.819 Per confronto, calcoliamo la soluzione esatta y (t) =
1 t + 1
, ottenendo:
y(t1 ) = y (0.1) = 1/ (0.1 + 1) = 0.9090909090 y(t2 ) = y (0.2) = 1/ (0.2 + 1) = 0.8333333333
Applichiamo ora il metodo di Eulero implicito con lo stesso passo h = 0.1. yi+1 = y i + h f (ti+1 , yi+1 ) = y i − hy2i+1
Per ricavare y 1 la formula diventa: y1 = y 0 + h f (t1 , y1 ) = 1 − 0.1( y21 )
Abbiamo un’equazione non lineare in y 1 . Per trovare y 1 , possiamo pensare di applicare lo schema di punto fisso alla funzione g ( y) = 1 − 0.1( y2 ) partendo da y (0) = y 0 = 1, in quanto y 1 = g ( y1 ) è punto fisso per la funzione g . Applichiamo tre passi dello schema di punto fisso: y(1) = g ( y(0) ) = 1 − 0.1(12 ) = 0.9
y(2) = g ( y(1) ) = 1 − 0.1(0.92 ) = 0.919
y(3) = g ( y(2) ) = 1 − 0.1(0.9192 ) = 0.9155439
193
194
annamaria mazzia
Se prendiamo y(3) come approssimazione di y1 ricaviamo y1 = 0.9155439 (per confronto, il valore esatto è 0.90909090). Calcoliamo ora y 2 : y2 = y 1 + h f (t2 , y2 ) = 0.9155439 − 0.1( y22 ) La funzione di punto fisso diventa g ( y ) = 0.9155439 0.1( y2 ). Applichiamo lo schema di punto fisso partendo da y (0) = y 1 = 0.9155439.
−
y(1) = g ( y(0) ) = 0.9155439 − 0.1(0.91554392 ) = 0.8317218367
y(2) = g ( y(1) ) = 0.9155439 − 0.1(0.83172183672 ) = 0.8463677786 y(3) = g ( y(2) ) = 0.9155439 − 0.1(0.84636777862 ) = 0.8439100583
Troviamo quindi y 2 = 0.8439100583 (valore esatto 0.8333333333). Vediamo, adesso, cosa accade in Eulero implicito se il punto iniziale
del metodo di punto fisso è dato da un passo del metodo di Eulero esplicito. Per ricavare y 1 , considero come y (0) = y 0 + h f (t0 , y0 ) = 1 − 0.1 = 0.9. In tal caso, l’approssimazione iniziale è quella che, nel caso di prima, era il valore y (1) . Applichiamo tre volte lo schema di punto fisso: y(1) = g ( y(0) ) = 1 − 0.1(0.92 ) = 0.919
y(2) = g ( y(1) ) = 1 − 0.1(0.9192 ) = 0.9155439
y(3) = g ( y(2) ) = 1 − 0.1(0.91554392 ) = 0.9161779367
Quindi y 1 = 0.9161779367. Al secondo passo, lo schema di punto fisso è dato dalla funzione g( y) = y 1 − h( y2 ) = 0.9161779367 − 0.1 y2 . Come approssimazione iniziale prendiamo y (0) = y 1 + h f ( t1 , y1 ) = g( y1 ) = 0.8322397355. Si ha: y(1) = g ( y(0) ) = 0.9161779367 − 0.1(0.83223973552 ) = 0.8469156390 y(2) = g ( y(1) ) = 0.9161779367 − 0.1(0.84691563902 ) = 0.8444513267
y(3) = g ( y(2) ) = 0.9161779367 − 0.1(0.844451326722 ) = 0.8448681324
Ricaviamo y 2 = 0.8448681324.
John Crank (1916-2006) è stato un matematico inglese che si è dedicato soprattutto allo studio di soluzioni numeriche di equazioni alle derivate parziali, in particolare di problemi
di conduzione del calore. È noto soprattutto
Metodo di Crank-Nicolson
11.6
per il lavoro svolto con Phyllis Nicolson.
Partiamo dall’ODE y = f (t , y(t)) . Integriamo ambo i membri dell’equazione sull’intervallo [ ti , ti+1 ]: y (ti +1 )
y (ti )
d y =
t i +1
ti
f (t, y(t)) d t =⇒ y(ti+1 ) − y(ti ) =
t i +1
ti
f (t , y(t)) d t
A secondo membro, applichiamo la formula dei trapezi trascuran-
do l’errore di integrazione: h yi+1 − yi = [ f (ti , yi ) + f (ti+1 , yi+1 )] 2
Phyllis Nicolson (1917-1968) è stata una matematica inglese. Negli anni della seconda guerra mondiale lavorò sulla teoria del magnetron. È nota, appunto, per il metodo di Crank-Nicolson.
appunti di calcolo numerico
h Si ha la formula di Crank-Nicolson: y i+1 = y i + [ f (ti , yi ) + f (ti+1 , yi+1 )] 2
La stessa formula la si può ricavare prendendo la media aritmetica delle formule di Eulero esplicito e implicito: yi+1 − yi = h f (ti , yi ) yi+1 − yi = h f (ti+1 , yi+1 )
sommando e dividendo per 2 : h h yi+1 − yi = [ f (ti , yi ) + f (ti+1 , yi+1 )] =⇒ yi+1 = y i + [ f (ti , yi ) + f (ti+1 , yi+1 )] 2 2 Esempio Lo stesso esempio di prima ( y = y con y (0) = 1)
− h yi + [− yi − yi+1 )] da cui 2
risolto con Crank-Nicolson dà yi+1 = ricaviamo 2−h h h (1 + ) yi+1 = (1 − ) yi =⇒ (2 + h) yi+1 = (2 − h) yi =⇒ yi+1 = y 2 2 2 + h i Per h = 0.5, confrontiamo i valori ottenuti dai metodi di Eulero esplicito, implicito e Crank-Nicolson, con la soluzione esatta: ti y ( ti ) yi Eul. Espl. yi Eul. Impl. yi C-N 0.0 1.000000 1.0000000 1.000000 1.000000 0.5 0.606531 0.5000000 0.666667 0.600000 1.0 0.367879 0.2500000 0.444444 0.360000 1.5 0.223130 0.1250000 0.296296 0.216000 2.0 0.135335 0.0625000 0.197531 0.129600 2.5 0.082085 0.0312500 0.131687 0.077760 3.0 0.049787 0.0156250 0.087791 0.046656 3.5 0.030197 0.0078125 0.058528 0.027994 4.0 0.018316 0.0039062 0.039018 0.016796
11.7
Studio dell’errore Nel costruire i metodi (di Eulero esplicito, implicito, Crank-Nicolson)
abbiamo trascurato un termine (il resto della formula di Taylor o l’errore della formula dei trapezi): questo termine che abbiamo trascurato rappresenta l’errore di troncamento locale. Nel caso di Eulero
esplicito avevamo (usando la formula di Taylor): y(ti+1 ) − y(ti ) h − 2 y (ξ i ) = f (ti , y(ti )) h Per costruire il metodo, abbiamo trascurato il termine del resto, vale a dire la quantità y (ti+1 ) =
di =
y(ti+1 ) − y(ti ) h f (ti , y(ti )) = y (ξ i ) = O (h) − 2 h
195
196
annamaria mazzia
Questa quantità ci dice di quanto la soluzione esatta “fallisce” nel soddisfare la relazione della formula di Eulero esplicito e rappresenta
l’errore di troncamento locale. Definizione 11 .7.1 Si definisce errore totale di troncamento ε i la quantità:
ε i = y ( ti ) yi .
−
Ci aspettiamo che sia dello stesso ordine di grandezza dell’errore di troncamento locale. Definizione 11 .7.2 Per effetto dell’arrotondamento, al tempo ti al posto di
yi otteniamo il valore arrotondato y i . Si definisce errore totale di arrotondamento la quantità: εi = y i − yi Definizione 11 .7.3 L’errore globale dello schema numerico è dato dal con-
tributo dell’errore totale di troncamento e dell’errore totale di arrotondamento i = y ( ti ) − yi = ε i + εi
Gli errori di arrotondamento nell’approssimare la derivata prima 1 di una funzione si comportano come O ( ) (si veda l’esempio fatto h sulla propagazione degli errori a pag. 41). Tuttavia questo aspetto diventa secondario nella risoluzione delle ODE sia perchè il passo h nelle applicazioni non è mai troppo (esageratamente) piccolo per ragioni di efficienza sia perchè è la y e non la y la funzione che dobbiamo approssimare. Inoltre, nell’eseguire i calcoli in doppia precisione (come si fa nei moderni linguaggi di programmazione), l’aspetto dovuto all’arrotondamento si vede poco rispetto ad altri fenomeni che influenzano la propagazione degli errori. 11.8
Errori di troncamento locale Nel metodo di Eulero esplicito: di =
y(ti+1 ) − y(ti ) h − f (ti , y(ti )) = y (ξ i ) = O (h) 2 h
Nel metodo di Eulero implicito: di =
y(ti+1 ) − y(ti ) h − f (ti+1 , y(ti+1 )) = − y (ξ i ) = O (h) h 2
Nel metodo di Crank-Nicolson (derivando la formula dai trapezi
e includendo il termine dell’errore): h f (ξ i , τ i ) 3 y(ti+1 ) − y(ti ) = [ f (ti , y(ti )) + f (ti+1 , y(ti+1 ))] − h 2 12
dove ξ i e τ i sono opportuni punti. Ma f = y da cui f = y e f = y .
appunti di calcolo numerico
Perciò h y (ξ i ) 3 y(ti+1 ) − y(ti ) = [ f (ti , y(ti )) + f (ti+1 , y(ti+1 ))] − h 2 12 di = 11.9
y(ti+1 ) − y(ti ) 1 y (ξ i ) 2 − [ f (ti , y (ti )) + f (ti+1 , y (ti+1 ))] = − h = O (h2 ) 2 12 h
Convergenza e stabilità Definizione 11 .9.1 Un metodo si dice convergente se lim h →0 i = 0 i →+ ∞
cioè se l’errore va a zero al tendere del passo h a zero e di i all’infinito in modo che il prodotto ih si mantenga costante (così t 0 + ih tende ad un valore di t fissato: studiamo l’errore fissato t).
Esempio Vediamo come, fissato un certo istante t , possiamo
fare tendere h a zero e far crescere i all’infinito in modo che t 0 + ih sia sempre uguale a t . Sia t 0 = 0 e t = 0.5: h i ih 0.5 1 0 .5 0.25 2 0 .5 0.125 4 0 .5 0.0625 8 0 .5 .. .. .. . . . 2.4414e-4
2048
0 .5
Definizione 11 .9.2 Un metodo si dice stabile se l’errore iniziale si mantie-
ne limitato al crescere di i (per i → ∞):
|i | ≤ M |0 | con M costante positiva. Studieremo la convergenza e la stabilità dei metodi di Eulero esplicito,
implicito e Crank-Nicolson applicati all’equazione test y =
−λ y
prendendo λ y(0) = y 0 .
>
0 (in modo che − λ
<
0) con condizione iniziale
La soluzione esatta di questo IVP è y ( t) = y 0 e−λt : tende a zero per valori di t crescenti. Ci aspettiamo che anche la soluzione numerica si
comporti in maniera simile.
197
198
11.9.1
annamaria mazzia
Convergenza di Eulero esplicito Per semplicità, applichiamo la formula del metodo di Eulero esplicito all’equazione test con λ = 1.
y1 = y 0 + h f (t0 , y0 ) = y 0 − hy 0 = (1 − h) y0 y2 = y 1 + h f (t1 , y1 ) = y 1 − hy 1 = (1 − h) y1 .. . yi = y i−1 + h f (ti−1 , yi−1 ) = y i−1 − hyi−1 = (1 − h) yi−1
Andando a ritroso troviamo una formula che lega y i direttamente a y0 . y1 = (1 − h) y0 y2 = (1 − h) y1 = (1 − h)2 y0 .. . yi = (1 − h) yi−1 = (1 − h)i y0
La soluzione numerica al tempo t i è data da y i = (1 − h)i y0 . Fissato un tempo t = ih , vediamo se lim i = 0 cioè se lim yi = y (t). h→0 i →+ ∞
h →0 i →+ ∞
1 ih Osserviamo che: (1 − h)i = (1 − h) h = (1 − h) h
t
1 ln (1 − h) 1/h ( ) h Perciò: (1 − h) h = e ln (1−h) = e Quando facciamo il limite per h → 0 e per i → +∞ consideriamo che, per il teorema dell’ Hôpital, facendo la derivata rispetto alla variabile λ , vale ln (1 − h) −1 = −1 = lim h h →0 h →0 1 − h lim
ln (1 − h) h Di conseguenza limh→0 e = e −1 Allora lim yi = lim y0 (1 − h)i = lim y0
h →0
i →+ ∞
h→0
i → +∞
h →0
i →+ ∞
1 (1 − h ) h
t
= y 0 e−t = y (t)
In questo modo abbiamo provato che il metodo converge. Il discorso si ripete in maniera del tutto simile, per λ = 1. 11.9.2
Stabilità di Eulero esplicito Per quanto riguarda la stabilità, dobbiamo provare che l’errore si mantiene limitato. Sia λ > 0. Abbiamo y i+1 = y i − hλ yi = (1 − hλ) yi , vale a dire y i+1 = y 0 (1 − hλ)i+1 . La soluzione esatta di questo problema è y(t) = y0 e−λt e
Ricordiamo la proprietà per la quale α
xα = e ln (x ) = e α ln (x) .
appunti di calcolo numerico
tende a zero per valori di t crescenti. Vogliamo che tenda a zero anche la soluzione numerica (in modo da mantenere limitato l’errore).
La soluzione numerica (fissato h e per i grande, cioè per valori di t crescente) tende a zero se |1 − hλ| < 1 cioè per −1 < 1 − hλ < 1 ⇐⇒ 2 0 < hλ < 2 ⇐⇒ h < . λ Il metodo di Eulero esplicito è stabile sotto condizione. 11.9.3
Convergenza di Eulero implicito Il metodo di Eulero implicito applicato all’equazione test diventa: yi+1 =
yi (1 + hλ)
Quindi y0 (1 + hλ) y1 y0 y2 = = (1 + hλ) (1 + hλ)2 y2 y0 y3 = = (1 + hλ) (1 + hλ)3 .. . y i −1 y0 = yi = (1 + hλ) (1 + hλ)i y1 =
In tal caso y0 = lim y0 (1 + hλ)−i = y 0 i h→0 (1 + hλ) h →0
lim yi = lim
h →0 i →+ ∞
i → +∞
i →+ ∞
1 −ih (1 + hλ) h = y 0 e−tλ = y (t )
(i passaggi sono del tutto simili a quelli visti per Eulero esplicito). Abbiamo provato la convergenza. 11.9.4
Stabilità di Eulero implicito Per la stabilità, dalla soluzione numerica yi =
y0 (1 + λ h)i
, si osser-
va che, per i → +∞, qualunque sia il valore di h, la soluzione 1 tende a zero in quanto lim i→+∞ = 0 Si parla di metodo (1 + λ h)i incondizionatamente stabile. 11.9.5
Convergenza di Crank-Nicolson Il metodo di Crank-Nicolson applicato all’equazione test diventa: h λ yi+1 = y i + [− yi − yi+1 ] da cui 2 yi+1 =
−
2 hλ y 2 + hλ i
199
200
annamaria mazzia
Andando a ritroso si ricava yi+1 = y 0
− 2 hλ 2 + hλ
i +1
Per verificare che il metodo converge studiamo il limite lim yi . h →0 i →+ ∞
Partiamo dalla relazione 1 2 hλ h 2 + hλ
− − − 2 hλ 2 + hλ
Ma
i
=
ih
=
1 2 hλ h 2 + hλ
−
t
1 1 2 − hλ ) ln ( 2 hλ h = e h 2 + hλ 2 + hλ Nel fare il limite per h → 0 e i → +∞ della quantità che si trova all’esponente, applichiamo l’Hôpital e ricordiamo che la derivata 2 − hλ − λ(2 + hλ) − (2 − hλ)λ = di , rispetto alla variabile λ , vale 2 + hλ (2 + hλ)2 −4 λ : (2 + hλ)2 lim
ln (
h→0
i →+ ∞
2 − hλ ) −4 λ 2 + hλ = lim 2 + hλ −4λ = lim = −λ 2 h h→0 2 − h λ (2 + hλ) h→0 (2 + hλ)(2 − hλ) i →+ ∞
i →+ ∞
Quindi lim yi = lim y0
h→0
i →+ ∞
h →0
i →+ ∞
− 2 hλ 2 + hλ
i
= lim y0 h →0
i →+ ∞
La convergenza è provata. 11.9.6
1 2 hλ h 2 + hλ
−
ih
= y 0 e−tλ = y (t )
Stabilità di Crank-Nicolson
Per la stabilità, si vede che la soluzione numerica è yi = y 0 Per i
− 2 λh 2 + λh
i
.
→ +∞, qualunque sia il valore di h, la soluzione tende a zero in 2 − λh i quanto limi→+ = 0. Il metodo è incondizionatamente ∞
stabile.
11.9.7
2 + λh
Sulla stabilità La stabilità di questi metodi la si può verificare anche considerando direttamente l’errore i , dimostrando che gli errori al passo i e al passo i + 1 verificano la stessa relazione che hanno yi e yi+1 e mostrando che l’errore rimane limitato sotto condizione per Eulero esplicito mentre è incondizionatamente stabile per gli altri metodi. In Figura 11 .3 si
appunti di calcolo numerico
201
vede come il metodo di Eulero esplicito sia stabile sotto condizione mentre i metodi di Eulero implicito e Crank-Nicolson sono stabili qualunque passo di discretizzazione venga utilizzato. Esempio Consideriamo il metodo di Eulero esplicito e applichiamolo all’equazione test. Sappiamo che y i+1 = y i + hλ yi . Per la soluzione esatta, sappiamo che vale y(ti+1 ) = y (ti ) + hλ y (ti ) +
hd i (con d i l’errore di troncamento locale). Sottraendo la prima equazione dalla seconda abbiamo i+1 = i + hλ i + hd i
h
Considerato che d i = y ( ξ i ) e che, per studiare la stabilità, h è fis2 sato mentre i tende a + ∞, il termine hd i non influisce sull’andamento
dell’errore e possiamo trascurarlo. Si ha allora la relazione: i+1 = i + hλ i
Ricaviamo i = 0 (1 + hλ)i . Il ragionamento da fare è lo stesso che abbiamo fatto in precedenza e troviamo gli stessi risultati. Dobbiamo infatti verificare quando i tende a zero per i che tende a + ∞. . .
Figura 11.3: Confronto dei metodi di Eulero esplicito, implicito e Crank-Nicolson sull’equazione test y = y, prendendo come h il valore h = 2 (a sinistra) e h = 0.5 (a destra).
−
11.10
Esercizi
Esercizio 11 .10.1 Studiare la stabilità del metodo di Eulero esplici-
to applicato all’equazione differenziale y = e−2t + 1 (soluzione esatta y(t) = ) 2
−2 y + 1, con y (0) = 1
Svolgimento Per provare la stabilità del metodo dobbiamo verificare che l’errore
iniziale si mantiene limitato per valori crescenti del tempo. Il metodo di Eulero esplicito applicato all’ODE del problema diventa yi+1 = y i + h(−2 yi + 1) = (1 − 2h) yi + h
202
annamaria mazzia
La soluzione esatta soddisfa un’equazione del tipo y(ti+1 ) = y (ti ) + h(−2 y(ti ) + 1) + hdi = (1 − 2h) y(ti ) + h + hdi
Nel calcolare l’errore i+1 = y (ti+1 ) − yi+1 abbiamo i+1 = (1
− 2h)i + hdi
Il termine hd i (di errore locale di troncamento) si può trascurare. Abbiamo allora i+1 = (1 − 2h)i . Possiamo trovare con facilità che i+1 = (1 − 2h)i+1 0 o, ancora, i = (1 − 2h)i 0 . Se vogliamo che l’errore rimanga limitato per i → ∞ la quantità (1 − 2h)i non deve crescere. Quindi deve essere |1 − 2h| < 1, vale a dire −1 < 1 − 2h < 1 cioè 2h < 2, quindi h < 1: stabilità sotto condizione. 11.11
Domande di riepilogo 1.
A cosa servono le formule di differenziazione numerica?
2. Ricavare la formula delle differenze all’indietro e il corrispondente
errore di discretizzazione. 3. Ricavare la formula delle differenze in avanti e il corrispondente
errore di discretizzazione. 4.
Ricavare la formula delle differenze centrali e il corrispondente errore di discretizzazione.
5. Ricavare
il metodo di Eulero esplicito per la soluzione di un problema a valori iniziali.
6. Ricavare
il metodo di Eulero implicito per la soluzione di un problema a valori iniziali.
7.
Scrivere la formula del metodo di Crank-Nicolson.
8.
Quali errori vanno considerati nelle formule numeriche per risolvere equazioni alle derivate ordinarie?
9. Cosa significa che un metodo per risolvere equazioni alle derivate
ordinarie è un metodo convergente? 10. Cosa significa che un metodo per risolvere equazioni alle derivate
ordinarie è un metodo stabile? 11.
Per studiare convergenza e stabilità di un metodo numerico per risolvere equazioni alle derivate ordinarie, si prende in esame la cosiddetta equazione test: di che cosa si tratta?
12.
Dimostrare la convergenza del metodo di Eulero esplicito.
appunti di calcolo numerico
13. Per
quale motivo il metodo di Eulero esplicito è stabile sotto condizione? Dimostrare.
14. I metodi di Eulero implicito e di Crank-Nicolson sono stabili sotto
condizione oppure no?
203
Bibliografia Uri M. Ascher and Chen Greif. A First Course on Numerical Methods . SIAM, Philadelphia, 2011. Ake Björk and Germund Dahlquist. Numerical Methods in Scientific Computing, Volume II . Siam, 2008. Richard L. Burden and J. Douglas Faires. Numerical Analysis. Brooks-
Cole Publishing, 2004. Germund Dahlquist and Ake Björk. Numerical Methods in Scientific Computing, Volume I . Siam, 2006. G. Gambolati. Lezioni di Metodi Numerici. Cortina, Padova, 1994. Walter Gautschi. Numerical Analysis: An Introduction. Birkäuser, Boston, 1997. Paolo Giangrandi. Dispense del corso di Storia dell’Informatica. Università degli Studi di Udine, Italia, 2010. Paolo Giangrandi. Museo on line - Breve storia degli Strumenti di Calcolo. Tecnoteca, http://www.tecnoteca.it/museo/, ultima visita: febbraio 2015. Michael T. Heath. Scientific Computing, An Introductory Survey. McGraw-Hill, 2002. Autar K. Kaw, Egwu E. Kalu, and Duc Nguyen. Numerical Methods With Applications. Dedicated Website for book, http://http://nm. mathforcollege.com/topics/textbook_index.html, ultima visita: febbraio 2015. H. Jerome Keisler. Elementary Calculus, An Infinitesimal Approach. Crea-
tive Commons Attribution Non-Commercial-ShareAlike License, http://www.math.wisc.edu/~keisler/calc.html, 2009. Richard B. Langley. The mathematics of gps. GPS World, 2 (8):55–59, 1991. J. O’Connor and E. F. Robertson. The MacTutor History of Mathematics
archive. University of St Andrews Scotland, http://www-history. mcs.st-and.ac.uk/, ultima visita: febbraio 2015.
Gilbert Strang. Calculus. Wellesley-Cambridge Press, 1991.