You are on page 1of 206

ANNAMARIA MAZZIA

APPUNTI DI
CALCOLO NUMERICO

C R E 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

Questo lavoro è stato rilasciato sotto la licenza Creative Commons Attribuzione- Non commerciale
-Non opere derivate 3.0 Italia License,
Per leggere una copia della licenza visita il sito web (http://creativecommons.org/licenses/by-nc-nd/
3.0/it/)

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 7

2 Struttura dell’elaboratore 11

3 Richiami di analisi 23

4 Rappresentazione dei numeri nel calcolatore 29

5 Zeri di funzione 49

6 Interpolazione 81

7 Approssimazione 105

8 Integrazione numerica 113

9 Metodi diretti per la soluzione di sistemi lineari 137

10 Metodi iterativi per la soluzione di sistemi lineari 161

11 Differenziazione numerica ed equazioni alle derivate ordinarie 185

Bibliografia 205
Istruzioni per l’uso

Il matematico sbircia dietro le spalle di Dio per


trasmettere la bellezza della Sua creazione
Le pagine che seguono sono una dispensa di Calcolo Numerico, al resto delle Sue creature.
Paul Erdös
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, appro-
fondimenti 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 inti-
tolata 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
1 Introduzione al Calcolo Nu-
merico

Quando puoi misurare ciò di cui stai parlando,


ed esprimerlo in numeri, puoi affermare di sa-
perne qualcosa; se però non puoi misurarlo,
Il calcolo numerico è una disciplina che riguarda lo studio e lo
se non puoi esprimerlo con numeri, la tua
sviluppo di algoritmi numerici (cioè di procedimenti di calcolo) utili conoscenza sarà povera cosa e insoddisfa-
per risolvere problemi matematici che si incontrano in vari campi cente: forse un inizio di conoscenza, ma non
abbastanza da far progredire il tuo pensiero
delle scienze e dell’ingegneria (e non solo). fino allo stadio di scienza, qualsiasi possa
Facciamo subito degli esempi. essere l’argomento.
Lord William T. Kelvin

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
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. Un errore di tempo in termini di millisecondi
può dare un errore nella posizione di circa
Le misure osservate, inoltre, sono affette da errori anche di altra
300 chilometri e questo, chiaramente, è un
natura, come gli effetti della ionosfera e troposfera, l’errore di misura 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 rinno-


vabile. 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 pic-
cole 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 mo-
mento 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 idrodi-
namica, metodi numerici e programmi di tipo numerico permettono
appunti di calcolo numerico 9

di stabilire come dimensionare le variabili in gioco nel problema in


modo da poter avere la turbina che risponda ai requisiti richiesti. Per avere un quadro più preciso si rimanda
a https://iris.unipa.it/retrieve/
handle/10447/100694/131679/
Articolo_H2O_Tucciarelli.pdf
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 senti-
menti 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 implemen-
tati 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 determi-
nati 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,
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

I computer sono incredibilmente veloci, accu-


2.1 Introduzione rati e stupidi. Gli uomini sono incredibilmente
lenti, inaccurati e intelligenti. L’insieme dei
due costituisce una forza incalcolabile.
Albert Einstein

Se 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 riassu-
Figura 2.1: Stralci di volantini pubblicitari per
mere in poche parole-chiave: processore, sistema operativo, memo- l’acquisto di un computer.
ria. Cosa significano esattamente? E, prima ancora, cosa significa
Computer?

Definizione 2.1.1 Computer = elaboratore elettronico digitale


Dispositivo elettronico che elabora le informazioni, immesse sot-
to forma di dati numerici, secondo una sequenza di istruzioni
preordinate (programma).

x Elaboratore: macchina capace di immagazzinare ed elaborare


dati in base ad una serie di istruzioni (programmi) memorizzate sul
computer

x elettronico: utilizza componenti elettroniche per elaborare le


informazioni

x 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 Un sistema operativo, come Windows, Mac,
Linux, è un tipo di software; programmi ap-
Attraverso un computer, elaboriamo dati (numeri, suoni, video,
plicativi come Word, Excel, LaTex sono dei
fotografie) in modo da ottenere informazioni (lettere, tabelle, risultati software.
di procedimenti numerici. . . ). Alcune di queste informazioni possono
diventare dati da elaborare di nuovo al computer.
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 Charles Babbage (1791-1871), inventore e
matematico inglese, è senza dubbio il pri-
dei calcoli fatti dall’uomo. Nel suo lavoro, Babbage doveva verificare
mo ad avere avuto il concetto del moderno
l’esattezza di tavole di calcolo che sarebbero state usate da banchieri calcolatore.
come da marinai. Le navi avrebbero identificato la loro posizione in
mare mediante quelle tavole! Eliminare il rischio dell’errore umano Babbage stesso scrisse che, mentre era se-
duto nella stanza della Società Analitica, a
divenne per lui un desiderio sempre più grande.
Cambridge, lavorando, mezzo addormenta-
Il suo desiderio di creare una macchina per eseguire calcoli si to, su una tavola dei logaritmi, arrivò un altro
concretizzò in due progetti, quello della Macchina alle Differenze e membro della società che gli chiese cosa
stesse sognando. E lui rispose : – Sto pen-
quello della Macchina Analitica. La Macchina alle Differenze doveva sando che tutte queste tavole – riferendosi
calcolare in modo automatico funzioni polinomiali ma non venne alle tavole dei logaritmi – potrebbero essere
calcolate da una macchina!
mai completata per il suo costo eccessivamente elevato. La Macchina
Nel 1821, Babbage e il suo amico e astro-
Analitica, invece, doveva essere una macchina di calcolo programma- nomo John Herschel stanno controllando del-
bile, e si può considerare come la prima idea del moderno computer. le tabelle calcolate a mano. Errore dopo
errore, Babbage esclama : – Volesse Dio
Anche questo progetto, tuttavia, rimase incompiuto. che questi calcoli venissero eseguiti da una
Nel 1833, Babbage incontrò Ada Lovelace , figlia del famoso poeta macchina a vapore!
Lord Byron. Lovelace, appena diciassettenne, aveva parecchie cono- Osserviamo che l’invenzione del telaio mec-
canico a schede, in cui il tipo di tessuto veniva
scenze matematiche, inusuali per l’epoca, e si entusiasmò talmente scelto (o programmato) in base a delle sche-
tanto per il progetto di Babbage, da intuire altre potenzialità della de inserite nella macchina, è un precursore
del progetto di Babbage.
macchina stessa, come la capacità dei numeri di poter rappresentare
Solo nel 2002 è stato possibile costruire
altre entità quali le lettere dell’alfabeto o le note musicali, e che dalla una macchina che rispondesse al progetto di
manipolazione dei numeri la macchina avrebbe esteso la propria po- Babbage.

tenza oltre il mondo della matematica. Sempre la Lovelace intuì che Augusta Ada Lovelace (1815-1852) fu la fi-
la soluzione dei problemi matematici si sarebbe effettuata attraverso glia del famoso poeta Lord Byron. I genitori
si separono subito dopo la sua nascita e la
delle procedure di calcolo (quelli che noi chiamiamo programmi). bambina crebbe insieme alla madre (Lord
Alla luce degli sviluppi che si sono avuti nel ventesimo secolo, la Byron partì dall’Inghilterra senza farvi più ri-
torno e morì in Grecia quando Ada aveva otto
visione di Babbage e della Lovelace appare profetica.
anni). Poichè la madre era appassionata di
matematica e non voleva che la figlia seguis-
se la strada del padre, incoraggiò la figlia in
2.3 Gli albori 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
Il 1800 si chiude con una grande invenzione: nel 1896, Guglielmo nobiliare di Conte di Lovelace. Ebbero tre figli.
Marconi inventa la radio. Il 1900 si apre con altre importanti in- La Lovelace morì di cancro a soli 37 anni.

venzioni: il triodo, il registratore magnetico, la televisione, fino ad


appunti di calcolo numerico 13

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 Claude Shannon (1916-2002) fu fisico e
matematico del MIT.
suo contributo fondamentale fu quello di elaborare un metodo siste-
matico per progettare reti logiche capaci di eseguire le operazioni
logico-aritmetiche desiderate: detto più semplicemente, egli mostrò
come trasformare una assegnata operazione matematica in un circuito
elettrico costruito con interruttori e relè di commutazione (quelli usati
nelle telecomunicazioni). Nel 1948, l’articolo di Shannon, A Mathe-
matical Theory of Communication, pubblica-
Il lavoro di Shannon diede l’avvio allo studio delle tecniche indi-
to sulla rivista The Bell System Technical
spensabili per progettare in modo sistematico tutti i circuiti logici di Journal getta le basi teoriche dell’informa-
base necessari per realizzare i circuiti di calcolo dei futuri computer. tica. Per prima volta viene usato il termine
bit come abbreviazione di binary digit, termi-
Da un punto di vista propriamente ”pratico“ invece, la nascita e lo ne suggeritogli dal chimico e statistico J. W.
sviluppo dei calcolatori elettronici inizia nel 1938: il tedesco Konrad Tukey.
Zuse costruisce Z1, una macchina costruita e pensata in maniera Konrad Zuse, ingegnere civile (1910-1995).
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
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 Z2 e inizia a lavorare sullo
Z3, che è il primo computer che Zuse costruisce per essere usato e
non per verificare le proprie idee. Lo Z3 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
Figura 2.2: L’ENIAC. Foto presa da
lavori di John Eckert e John Mauchly negli Stati Uniti e di A. Turing http://www.computerhistory.org/
in Inghilterra. Eckert e Mauchly costruirono l’ENIAC (Electronic revolution/birth-of-the-computer/
Integrator and Computer). L’ENIAC fu costruito, con progetto di 4/78/316, copyright dell’Università di
Pennsylvania.
Eckert, in piena seconda guerra mondiale, a partire dal 1943, pres- Alan Turing (1912-1954), matematico inglese,
so il Ballistic Research Laboratory e fu completato nel febbraio del si interessò di logica matematica e di teoria
della probabilità. Introdusse il concetto di una
1946. La macchina era pensata per compiere operazioni di carattere
macchina astratta, detta macchina di Turing,
generale, ma fu costruita con lo scopo preciso di compilare tabelle e pose questioni riguardanti l’intelligenza arti-
per le traiettorie di bombe. L’ENIAC conteneva circa 18. 000 valvole ficiale. Si occupò di problematiche riguardanti
un macchina di calcolo digitale astratta, con
termoioniche e misurava circa 2 metri e mezzo di altezza per 24 metri una memoria senza limiti.
di lunghezza! La macchina era più di mille volte veloce di tutti i John Presper Eckert (1919-1995) e John
William Mauchly (1907-1980) lavorarono a
predecessori elettromeccanici costruiti fino a quel momento e poteva
quello che si può considerare il vero primo
eseguire 5000 addizioni al secondo. Le sue operazioni erano controlla- 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 John von Neumann (1903-1957) ungherese,
studiò prima a Berlino, poi a Zurigo e infine
della macchina andava rivista e che la programmazione del computer
a Budapest, dove ricevette il dottorato in ma-
mediante un numero enorme di cavi e interruttori rendeva lenta e tematica. Nel 1930 si trasferì alla Università
poco flessibile la programmazione stessa. Sostenne, quindi, che il pro- di Princeton dove insegnò matematica. Il suo
nome è legato a studi in diversi settori: teo-
gramma non dovesse essere rigidamente predisposto nell’hardware ria dei giochi, matematica applicata, logica...
tramite interruttori e cavi e neanche letto mediante nastri perforati, Occupa un ruolo fondamentale nello sviluppo
dei calcolatori elettronici. Ricevette numerosi
ma risiedesse in una memoria su cui poter scrivere e accedere ve-
premi e riconoscimenti in tutto il mondo.
locemente insieme ai dati da elaborare. Von Neumann per primo
descrisse l’architettura dei calcolatori in termini logico-funzionale,
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 Neu-
mann 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 Gordon Moore è nato nel 1929 in Califor-
nia. Di lui basti ricordare che ha stabilito
su un chip raddoppia approssimativamente ogni 24 mesi (legge di
la legge di Moore, è co-fondatore della Intel
Moore). Nel 1971 tre ingegneri della Intel tra cui l’italiano Federico Corporation e nel 2008 ha ricevuto la me-
Faggin inventarono il microprocessore, vale a dire un’intera CPU in daglia d’onore dell’IEEE per il suo pioneri-
stico contributo nei processi dei circuiti inte-
un singolo circuito integrato: su una piastrina di 4 × 3 millimetri grati, e per la leadership nello sviluppo del-
riuscirono a inserire 2250 transistor, che formavano il cuore di un la memoria del MOS (semiconduttore metal-
ossido), del microprocessore e dell’industria
intero computer: questo microprocessore fu chiamato Intel 4004 ed
dei semiconduttori.
era capace di eseguire 60. 000 operazioni al secondo. Federico Faggin è nato nel 1940 a Vicenza
Se pensiamo che il processore Intel Pentium 4 introdotto nel 2000 ha e si è laureato in fisica all’Università di Pado-
va. Nel 1968 si è trasferito prima a Palo Alto
42 000. 000 processori e l’Intel Itanium 2 (con 9MB di cache) introdotto
.
presso la Fairchild Semiconductor e poi nel
nel 2004 ha 592. 000. 000 transistors, ci accorgiamo di come la legge di 1970 nella Intel. Oggi è presidente e CEO
(Chief Executive Officer) della Foveon.
Moore, dal 1968 ad oggi, sia stata rispettata.

2.4 Architettura del Computer

L’architettura del Computer si può riassumere in tre unità:


appunti di calcolo numerico 15

x il processore, che fornisce la capacità di elaborazione delle


informazioni;

x la memoria (centrale e di massa)

x 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:

x CPU (Central Processing Unit), unità centrale di elaborazione


x cache
x 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. La CPU si suddivide in
Ogni elaboratore contiene un circuito di temporizzazione (clock) x unità logico-aritmetica (ALU), che svol-
ge tutti i calcoli logici ed aritmetici;
che genera un riferimento temporale comune per tutti gli elementi
del sistema. x unità floating-point (FPU) (Floating
Point Unit), che consente di eseguire le
Un ciclo-macchina è il tempo richiesto per svolgere un’operazione operazioni su numeri reali;
elementare (ed è un multiplo del periodo del clock). La velocità di x unità di controllo (CU), che sovrintende
elaborazione di un processore dipende dalla frequenza del clock. I all’elaborazione dei dati e alle operazioni
di input e output;
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).
x registri, cioè memoria locale per me-
morizzare dati e lo stato di avanzamento
La memoria serve per conservare le istruzioni da eseguire e per delle istruzioni. Abbiamo, ad esempio, il
registro di Program Counter, di Program
scrivere/leggere i dati elaborati. Si suddivide in memoria principale
Status Word, il registro Istruzioni, Indirizzi
e memoria secondaria. Memoria. . .
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:

x memoria di sola lettura (read-only memory): ROM. Viene scrit-


ta una volta per tutte dal produttore del sistema e contiene pro-
grammi e informazioni specifiche per il sistema; è utilizzata per me-
morizzare parametri di configurazione del sistema, utili all’avvio
del computer;

x 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
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 (loca-
zioni), 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
esempio: 0/1, sì/no.
mezzo delle periferiche di input/output (monitor, mouse, stampante,
1 byte = 8 bit
web-cam,...). 1 Kilobyte (KB) = 210 byte = 1024 byte (circa
Input è l’inserimento di dati nel computer per l’elaborazione. 103 )
1 Megabyte (MB) = 220 byte (circa 106 )
Output è il trasferimento di dati dal computer a dispositivi che 1 Gigabyte (GB) ≈ 109 byte (un miliardo di
permettono all’utente di vedere/ascoltare i risultati dell’elaborazione. byte)
1 Terabyte (TB) ≈ 1012 byte (mille miliardi di
byte)
2.5 Software e Sistema Operativo 1 Petabyte (PB) ≈ 1015 byte (un milione di
miliardi di byte)

Un software è una sequenza di istruzioni per eseguire le varie elabo-


razioni 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 essen-
ziali 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 me-
morizzati 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:

x agire da intermediario tra l’utente e l’harware del computer


x controllare e coordinare l’utilizzo dell’hardware tra i programmi
applicativi

x fornire gli strumenti per l’uso corretto delle risorse di tipo hard-
I primi computer come lo Z3 di Zuse o l’E-
ware e software del sistema
NIAC non avevano sistema operativo. Per

x nascondere i dettagli legati alla gestione delle risorse del sistema.


inserire un programma (scritto in linguaggio
macchina) bisognava azionare un gruppo di
interruttori o modificare collegamenti tramite
I primi sistemi operativi iniziarono a vedersi intorno alla metà degli
opportuni cavi e spinotti. Ci rendiamo con-
anni cinquanta quando si cominciò a individuare una serie di pro- to, quindi, di quanto fosse difficile usare il
grammi standard di comune utilizzo indipendenti dall’applicazione computer per risolvere problemi mediante l’e-
secuzione di un programma perchè oltre alla
specifica richiesta al computer. competenza specifica del problema da risol-
L’evoluzione dei sistemi operativi ha influenzato anche lo sviluppo vere, si richiedeva una grande conoscenza
tecnica della macchina su cui si doveva la-
dell’hardware in quanto per supportare certe funzioni del sistema
vorare. Il programma doveva contenere non
operativo sono necessari meccanismi hardware ad hoc (basti pensare solo le istruzioni per la risoluzione del proble-
alla gestione della memoria o delle interruzioni). ma (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 multipro-
grammazione, 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 multiprogramma-
zione fu il sistema OS/360 realizzato per i computer IBM 360. Questo
sistema operativo fu importante per due motivi:
x 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!

x 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 per-
metteva molta interattività tra utente e computer: di fatto l’utente
consegnava i dati e il programma da eseguire (un pacco di schede per-
Figura 2.4: Schede perforate a 80
forate) all’operatore del computer e accedeva ai risultati dopo qualche e a 96 colonne. Foto presa da
ora se non addirittura dopo giorni e giorni, risultati che riceveva in http://compvter.blogspot.it/2010/
forma cartacea ad esecuzione avvenuta (non c’era ancora il monitor 09/punch-card-ibm-96-colonne.html

per la visualizzazione su video dei risultati). Per risolvere i problemi legati all’uso delle
schede, queste furono sostituite da appositi
Alla fine del 1950 si introdusse il concetto di time-sharing che
terminali collegati al computer e furono cam-
permetteva l’esecuzione di più processi in modo da poter soddisfare biate le modalità di gestione dell’unità cen-
le esigenze di più utenti contemporaneamente. Con il time-sharing trale modificando i sistemi operativi esistenti.
Si arrivò all’interazione con il computer non
si assegna, infatti, un piccolo intervallo di tempo a ciascun processo più mediante schede perforate bensì tramite
dando l’impressione che ciascun processo vada avanti parallelamente tastiera-stampante o tramite tastiera-monitor.
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:
x 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)
18 annamaria mazzia

Immaginiamo un ristorante con un capo-

x uso della memoria centrale (memoria virtuale) cuoco, il suo aiutante, una cucina, i came-
rieri e i clienti. I clienti scelgono un piatto

x riconoscimento e gestione degli utenti (multiutenza) dal menu, un cameriere prende l’ordine e lo
porta al capo-cuoco. Il capo-cuoco riceve

x gestione delle periferiche (drivers) l’ordine e assegna al suo aiutante il compito


di preparare il piatto. L’aiutante si dediche-

x file system rà alla preparazione del piatto, compito che


potrà richiedere più attività. Il capo-cuoco, in-

x interfaccia grafico. tanto, supervisiona la preparazione dei piatti


e gestisce le risorse (limitate) dei posti nel
ristorante.
Il software di base (o general purpose) può avere funzioni varie:
editor di testo, elaborazione di testi, fogli elettronici, posta elettronica,
x il capo-cuoco rappresenta il sistema
operativo,
internet. x i clienti sono gli utenti,
Il software applicativo è costituito da programmi che hanno obiet- x le ricette associate ai piatti corrispon-
tivi specifici come intrattenimento, controllo di sistemi, progettazione dono ai programmi,

(CAD), risoluzione di problemi matematici. x gli ingredienti sono l’input del pro-
gramma,
Per migliorare le prestazioni di un computer si inserisce una me-
moria intermedia tra CPU e RAM, detta cache. Si trova all’interno x il piatto è l’output del programma,
del processore. È più veloce della RAM ma anche più costosa. x il menu e il cameriere sono l’interfac-
cia verso il sistema operativo,

x l’aiutante corrisponde al processore


2.6 Il file system (CPU) (Se abbiamo più processori, ci
sono più aiutanti),

x la cucina corrisponde al computer,

Il sistema operativo gestisce le informazioni su dispositivi di memoria x pentole, fornelli etc, sono le parti che
compongono il computer.
secondaria (dischi). L’aiuto cuoco, quindi, rappresenta la CPU
La gestione delle informazioni avviene mediante file Un file costi- mentre il tavolo da lavoro, su cui appoggia
gli ingredienti e la ricetta per preparare il piat-
tuisce un insieme di informazioni della stessa natura e logicamente
to, rappresenta la memoria centrale. Prima
correlate. In genere un file contiene un programma (programma di iniziare a lavorare, il cuoco deve svolge-
sorgente o programma eseguibile), oppure una sequenza di dati. re alcune mansioni (sempre le stesse ogni
volta: pulire il tavolo, controllare lo stato di
L’informazione è rappresentata da files, organizzati in maniera ge- pentole, tegami, coltelli. . . , ricevere le ordi-
rarchica (pensiamo ad una struttura ad albero) in directories (cartelle). nazioni). Supponiamo che queste mansioni
siano incise su un pezzo del tavolo da lavo-
Una directory è un file che svolge il ruolo di ”raccoglitore“.
ro: corrispondono alla memoria ROM (quella
I files possono contenere dati (abbiamo i cosiddetti files di testo) che non può essere alterata). La RAM invece
oppure programmi (i files di applicazioni). è la parte del tavolo che può essere alte-
rata a piacimento (spostare pentole, tegami,
Un file è caratterizzato da: ingredienti).

x posizione (path, o percorso): sequenza delle directories che


Quando il ristorante chiude, il tavolo deve
essere pulito e sgombro altrimenti si rovina
portano al file tutto quello che vi rimane, ad eccezione di
ciò che vi è stato inciso. Perciò il cuoco con-
dir1 / dir2 / . . . / . . . /
serva in dispense e frigoriferi i vari ingre-

x nome: individua univocamente il file all’interno della cartella (o


dienti rimasti e gli utensili da lavoro: le di-
spense e i frigoriferi rappresentano i dischi
directory) (Hard Disk, CDROM, pen drive USB . . . ) per

x
immagazzinare i dati.
estensione: la parte del nome del file che segue l’ultimo punto
. (dati.txt prova.f matrice.dat welcome.html fo-
to.jpeg )

x dimensione: quantità di informazione contenuta nel file

x altre informazioni (data di creazione, data di ultima modifica,


permessi di scrittura, lettura. . . )
File in inglese significa archivio. Il termine
. compare nei primi anni cinquanta e inizial-
mente si riferisce a un pacco di schede con-
L’intera gestione dei file è a carico di un componente del sistema tenente informazioni omogenee. È il sistema
operativo detto file system. operativo a realizzare il concetto astratto di
file nella gestione dei dispositivi di memoria
di massa.
appunti di calcolo numerico 19

2.7 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 parti-
re 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 I sistemi operativi per i microcomputer dove-
vano essere più semplici di quelli impiegati
per l’Altair, che si ispirava vagamente al sistema Unix.
per i grandi computer, in quanto la macchina
I microcomputer iniziarono ad avere un grosso successo tanto veniva utilizzata da un solo utente e le peri-
che all’inizio degli anni ottanta, l’IBM pensò di entrare in questo feriche collegate erano poche e semplici. Il
problema maggiore ero quello di gestire i file
settore (prima si era solo occupata di grandi computer e di software), su floppy disk (gli antenati dei CD-ROM e dei
introducendo il personal computer, IBM PC, realizzando in tal modo DVD, in uso fino ad una decina di anni fa) o
su nastri magnetici e mettere a disposizione
una macchina che servisse non solo per gli appassionati e per giocare
dell’utente un linguaggio di programmazione
(uno dei fattori che aveva determinato il successo dei microcomputer) semplice, come il Basic. Tuttavia, il confine
ma anche come strumento di studio, per i professionisti e per la tra linguaggio di programmazione e sistema
operativo non era ancora ben definito e, una
gestione di piccole aziende. volta avviato, il sistema era pronto per rice-
L’IBM incaricò Bill Gates di realizzare un sistema operativo per il vere sia comandi del sistema operativo, sia
istruzioni in linguaggio Basic.
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
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. Il Macintosh utilizzava un interfaccia grafico
chiamato GUI (Graphic User Interface) com-
Le novità della Apple furono molto apprezzate e la Microsoft,
posto da icone, finestre, menù... Gli oggetti
per colmare questa lacuna, lanciò un altro sistema operativo basato dell’ambiente operativo erano rappresentati
su interfaccia grafica: nel 1985 nacque il primo Windows 1.0 che con simboli grafici di facile intuizione senza
dover comprendere a fondo tutti i tecnicismi
trovò pochi consensi perchè troppo lento e instabile. Nel 1986, con informatici. L’interfaccia GUI non era un’inve-
la comparsa di nuovi microprocessori, il sistema Windows cominciò zione della Apple perchè era stata già spe-
rimentata nel corso degli anni settanta dalla
a funzionare in modo adeguato tanto che le versioni di Windows
Xerox, che però non aveva intuito le poten-
3.1 e di Windows 95 portarono al sopravvento del sistema operativo zialità di questo lavoro, lasciandone invece la
Windows rispetto al Macintosh. fortuna e il successo alla Apple che, insieme
ad esso, introdusse il mouse.
Accanto a questi sistemi operativi, e forse anche per ridurre lo
strapotere della Microsoft, si deve vedere la strada percorsa da un
informatico di Helsinki (data di nascita 1969), Linus Benedict Torvalds,
che ha introdotto il sistema Linux. Durante gli studi universitari, Torvalds si era
interessato di sistemi operativi e aveva studia-
Nel 1991 fu completata la prima versione del sistema, che fu chia-
to una versione semplificata di Unix, chiama-
mata Linux e venne messa a disposizione di tutti. Torvalds si riservò ta Minix. Questo sistema poteva funzionare
il compito di coordinare i diversi miglioramenti via via introdotti su personal computer e veniva distributo con
i programmi sorgenti disponibili. Torvalds mi-
dagli altri sviluppatori. gliorò il sistema Minix, in modo da poterlo
Linux si è dimostrato e si dimostra tuttora un valido sistema utilizzare come alternativa a Windows, nel-
la logica di non realizzare profitti (cioè non
operativo, affidabile, sicuro e di buone prestazioni, in grado di gestire
diventare milionario) ma di realizzare un si-
situazioni multiutente e multitasking. stema utilizzabile gratuitamente da tutti e mi-
Ed è il sistema operativo di riferimento del corso di Calcolo gliorabile con il contributo di tutti (la filosofia
dell’open source).
Numerico.
Tra le tante distribuzioni attualmente in uso
ricordiamo: Debian, Ubuntu, Fedora, Gentoo,
Slackware. . .
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):

x ls mostra l’elenco dei files e delle directories contenuti nella


directory attuale ( ls sta per "list").
appunti di calcolo numerico 21

Esempio: studente@george:~$ls

x Per cambiare directory, si deve digitare Un volta cliccato Invio, compare l’elenco
delle directories presenti nello spazio di la-
cd nome-directory voro disponibile per l’utente studente sulla
macchina george, ad esempio (i numeri a
(cd sta per "change directory"). sinistra delle directories o files sono indicatori

x Il comando cd .. fa tornare nella directory precedente. dello spazio che occupano in memoria):
5 appunti/ 4 mail/

x Per creare una nuova directory: mkdir nomedirectory 2


3
calcolo/
fortran/
4 movies/
1 varie/
(mkdir sta per "make directory"). 3 foto/ 57 prova.pdf

x Per copiare un file dentro una directory:


Esempio: per entrare nella directory foto,
scriviamo
studente@george: ~$cd foto
cp nomefile nomedirectory (cp sta per "copy").
Una volta cliccato il tasto di Invio, si è

x Per trasferire un file in una directory entrati nella directory foto:


studente@george:~/foto $
mv nomefile nomedirectory (mv sta per "move").

x Per rinominare un file (o una directory):


mv nomevecchio nomenuovo .

x Per cancellare un file si usa il comando rm nomefile.


Esempio: siamo nella directory foto, che
è una sottodirectory della home di studente.

x Per cancellare una directory, dobbiamo prima cancellare tutti i


Con il comando pwd si ha:
studente@george:~/ foto $pwd
files della directory e poi usare il comando studente@george:~/ foto
$/home/studente/foto
rmdir nomedirectory.

x 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, dobbia-
mo 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 x ls : lista dei files e delle directory

. (il punto finale serve per copiare il file prova.f nella directory x cd : per cambiare directory

in cui ci troviamo). x mkdir: per creare una nuova directory

Con cp abbiamo due file identici, quello nella directory uno e x cp: per copiare files

quello copiato nella directory due. x mv: per trasferire o rinominare files

Possiamo anche scrivere cp prova.f prova2.f: in questo modo x rm: per cancellare files

creiamo il file prova2.f nella stessa directory in cui si trova prova.f. x rmdir: per cancellare directories

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’e-
quivalente 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

La teoria attrae la pratica come il magnete


3.1 L’alfabeto greco attrae il ferro.
Carl Friedrich Gauss

Quando si descrivono teoremi, si danno definizioni o, sempli- A α Alfa N ν Nu


B β Beta Ξ ξ Xi
cemente, si discute di matematica, è abbastanza usuale prendere in Γ γ Gamma O o Omicron
prestito lettere dell’alfabeto greco. ∆ δ Delta Π π Pi
È importante, quindi, saperle riconoscere e chiamarle in maniera E e Epsilon P ρ Rho
Z ζ Zeta Σ σ Sigma
corretta (si veda tabella a lato). H η Eta T τ Tau
Θ θ Theta Υ υ Upsilon
I ι Iota Φ φ Fi
K Kappa X Chi
3.2 Radici di un polinomio di secondo grado Λ
κ
λ Lambda Ψ
χ
ψ Psi
M µ Mu Ω ω Omega

Dato il polinomio ax2 + bx + c con a, b, c ∈ R (a 6= 0), le radici del


polinomio (cioè quei valori di x per cui ax2 + bx + c = 0) si trovano
applicando la formula
√ √
−b + b2 − 4ac −b − b2 − 4ac
x1 = , x2 =
2a 2a

x Se b2 − 4ac > 0 le radici sono reali e distinte,

x se b2 − 4ac = 0 le due radici coincidono (il polinomio si può


b
anche scrivere come ( x + )2 )
2a

x se b 2 − 4ac < 0 non ci sono radici reali.


b c
Inoltre, si ha x1 + x2 = − e x1 x2 =
a a

3.3 Identità trigonometriche

Nel seguito introduciamo alcune formule trigonometriche, con la


notazione:

x sin (x) ≡ seno(x), cos (x) ≡ coseno(x),


Figura 3.1: I tre casi delle radici di un polino-

x tan ( x ) ≡ tangente( x ) =
sin ( x )
cos ( x )
, sec ( x ) ≡ secante( x ) =
1
cos ( x )
,
mio di grado 2: radici reali e distinte (in alto),
radici reali e coincidenti (al centro), nessuna
radice reale (in basso).
24 annamaria mazzia

cos (−θ ) = cos (θ ) sin (−θ ) = − sin (θ )


cos ( π2 − θ ) = sin (θ ) sin ( π2 − θ ) = cos (θ )
cos ( π2 + θ ) = − sin (θ ) sin ( π2 + θ ) = cos (θ )
cos (π − θ ) = − cos (θ ) sin (π − θ ) = sin (θ )
cos (π + θ ) = − cos (θ ) sin (π + θ ) = − sin (θ )
cos (θ + φ) = cos (θ ) cos (φ) − sin (θ ) sin (φ) sin (θ + φ) = sin (θ ) cos (φ) + cos (θ ) sin (φ)
sin (2θ ) = 2 sin (θ ) cos (θ ) cos (2θ ) = cos2 (θ ) − sin2 (θ )
sin2 (θ ) + cos2 (θ ) = 1 tan2 (θ ) + 1 = sec2 (θ )

3.4 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 ay a xy = ( a x )y
aloga ( x) = x a0 = 1
a x−y = a x /ay a x b x = ( ab) x
loga ( xy) = loga ( x ) + loga (y) loga ( x/y) = loga ( x ) − loga (y)
loga ( x y ) = y loga ( x ) loga ( a x ) = x
loga ( x )
logb ( x ) = b x = a x loga (b)
loga (b)

3.5 Derivate e integrali

Siano f e g due funzioni dipendenti dalla variabile reale x mentre


df
c ∈ R sia una costante. Indichiamo la derivata di f con il simbolo
dx
o mediante f 0 . Valgono le seguenti regole:

x regola della costante: dd(cxf ) = c f 0

x regola della somma: d (df +x g) = dd xf + dd xg


x regola del quoziente: d (df /g ) f g− fg 0 0
= 2
x g

x regola del prodotto:


d ( f g)
dx
= f g0 + f 0 g

x regola della potenza:


d fr
dx
= r f r −1 f 0

Tra le regole di integrazione, invece, ricordiamo quella di integrazione


per parti:
Z Z
f g0 dx = f g − f 0 g dx
appunti di calcolo numerico 25

Diamo ora una tabella delle derivate e degli integrali delle funzioni
più note (per gli integrali lasciamo fuori la costante di integrazio-
ne). Usiamo la simbologia arcsin( x ) ≡ arcoseno( x ), arccos( x ) ≡
arcocoseno( x ), cot( x ) ≡ cotangente ( x ), arctan( x ) ≡ arcotangente( x ),
arccot( x ) ≡, arcocotangente( x ).

f f0 f f0
1
ln( x ) ex ex
x
sin ( x ) cos ( x ) cos ( x ) − sin ( x )
1 1
tan ( x ) 2
(= sec2 ( x )) cot ( x ) − 2
cos ( x ) sin ( x )
1 1 1 1
tan ( x ) − cot ( x )
cos ( x ) cos ( x ) sin ( x ) sin ( x )
1 1
arcsin ( x ) √ arccos ( x ) −√
1 − x2 1 − x2
1 1
arctan ( x ) arccot( x ) −
1 + x2 1 + x2
R R
f fd x f fd x
x r +1
xr (r 6 = 1) x −1 ln | x |
r+1

ex ex ln | x | x ln | x | − x
sin ( x ) − cos ( x ) cos ( x ) sin ( x )
1
tan ( x ) ln | | cot ( x ) ln | sin ( x )|
cos ( x )

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

1 1
tan ( x ) − cot ( x )
cos2 (x) 2
sin ( x )

tan ( x ) 1 cot ( x ) 1

cos ( x ) cos ( x ) sin ( x ) sin ( x )
√ √
arcsin ( x ) x arcsin ( x ) + 1 − x2 arccos ( x ) x arccos ( x ) − 1 − x2
1 1
arctan ( x ) x arctan ( x ) − ln (1 + x2 ) arccot( x ) xarccot( x ) − ln (1 + x2 )
2 2
1 1
√ arcsin ( x ) arctan ( x )
1 − x2 1 + x2

3.6 Teoremi utili

Richiamiamo, nel seguito, teoremi che trovano applicazione nel Cal-


colo 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 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 ).
26 annamaria mazzia

Michel Rolle (1652- 1719) fu un matematico


francese. È conosciuto per il teorema che
Teorema 3.6.1 (Teorema di Rolle) Sia f ∈ C ([ a, b]) e differenziabile in
porta il suo nome. Si deve a lui la notazione
] a, b[. della radice n-sima per mezzo del simbolo

Se f ( a) = f (b) = 0, allora esiste un punto ξ ∈] a, b[ tale che f 0 (ξ ) = 0
n
x.

Teorema 3.6.2 (Teorema del Valor Medio) Sia f ∈ C ([ a, b]) e diffe-


f (b) − f ( a)
renziabile in ] a, b[, allora esiste un punto ξ ∈] a, b[ tale che f 0 (ξ ) =
b−a

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 0 (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, 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 cui vale la
relazione g(ξ ) = ξ.
Figura 3.3: Teorema del Valor Medio:
f (b) − f ( a)
Dimostrazione. Dire che una funzione g ammette almeno un f 0 (c) =
b−a
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 ) − x

Allora Φ( a) = g( a) − a > 0 e Φ(b) = g(b) − b < 0. Per il Teorema del


Valore Intermedio esiste almeno un punto ξ ∈] a, b[ tale che Φ(ξ ) = 0,
vale a dire g(ξ ) − ξ = 0, cioè g(ξ ) = ξ. Esiste almeno un punto fisso Figura 3.4: Teorema del Valore Intermedio:
per la funzione g. 4 f (c) = K

Teorema 3.6.5 (Esistenza e unicità del punto fisso) Data una funzio-
ne g di classe C1 in [ a, b], con a ≤ g( x ) ≤ b per ogni x ∈ [ a, b], e con
| g0 ( 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


dal teorema precedente (le ipotesi del teorema precedente ci sono
tutte). Supponiamo, allora, che esistano due punti fissi ξ e η, con
ξ 6= η, per la funzione g. Si ha

|ξ − η | = | g(ξ ) − g(η )|
appunti di calcolo numerico 27

Applicando il teorema del Valor Medio, esiste un punto c compreso


tra ξ e η per cui

| g(ξ ) − g(η )| = | g0 (c)(ξ − η )| ≤ | g0 (c)||ξ − η |

Ma per ipotesi | g0 (c)| ≤ m < 1 da cui

|ξ − η | ≤ m|ξ − η | < |ξ − η |

Si arriva ad una contraddizione. L’assurdo deriva dall’aver supposto


ξ 6= η. Quindi ξ = η e il punto fisso è unico. 4

Teorema 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
esiste un punto ξ ∈] a, b[ tale che
Z b Z b
f ( x ) g( x ) d x = f (ξ ) g( x ) d x
a a

Per g ≡ 1, questo teorema ci dà il valore medio della funzione f


1 Rb
sull’intervallo [ a, b], dato da f (ξ ) = f (x) d x
b−a a
Teorema 3.6.7 (Teorema di Rolle generalizzato) Sia f ∈ C ([ a, b]) n
volte differenziabile in ] a, b[. Se f si annulla in n + 1 punti distinti x0 , x1 , . . . , xn
in ] a, b[, allora esiste un punto ξ ∈] a, b[ in cui la derivata n-sima della f si
annulla: f (n) (ξ ) = 0.
Brook Taylor (1685 - 1731) fu un matematico
Teorema 3.6.8 (Formula di Taylor) Sia f ∈ C2 ([ a, b]) e sia x0 un punto inglese che sviluppò quello che oggi è chia-
mato calcolo delle differenze finite. L’impor-
dell’intervallo [ a, b]. Allora, per qualunque x ∈ [ a, b] si può scrivere: tanza del suo lavoro e, soprattutto, della for-
mula conosciuta oggi con il suo nome, venne
( x − x0 )2 00
f ( x ) = f ( x0 ) + f 0 ( x0 )( x − x0 ) + f (ξ x ) riconosciuta solo nel 1772 da Lagrange.
2
dove ξ x è un opportuno punto di [ a, b] che si trova sul segmento indivi-
duato da x0 e x.

La formula appena scritta si dice formula di Taylor di centro x0 nel


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

f 00 ( x0 ) f ( n ) ( x0 )
f ( x ) = f ( x0 ) + f 0 ( x0 )( x − x0 ) + ( x − x0 )2 + . . . + ( x − x0 ) n + R n
2! n!
dove

f ( n +1) ( ξ x )
Rn ( x ) = ( x − x 0 ) n +1
( n + 1) !

con ξ x un opportuno punto di [ a, b] che si trova sul segmento indivi-


duato da x0 e x.
4 Rappresentazione dei numeri nel
calcolatore

Esistono 10 tipi di persone: quelli che ca-


4.1 Disastri numerici! piscono i numeri binari e quelli che non li
capiscono.
Umorismo in rete

Molte volte, si pensa che i risultati numerici ottenuti da un calcola-


tore 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 verificato che sia stato scritto corretta-
mente (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 pagi-
na web dedicata ai disastri dovuti a uno scorretto calcolo numerico:
http://www.ima.umn.edu/~arnold/disasters/disasters.html La pagina web è del prof. Douglas N. Ar-
nold, dell’Università del Minnesota, e viene
Vediamo alcuni di questi disastri numerici.
introdotta con la seguente frase (traducendo):
Stai seguendo con attenzione il tuo corso di
Il disastro del missile Patriot nel 1991. Il 25 febbraio 1991, durante la analisi numerica o di calcolo scientifico? Se
non lo stai facendo, potrebbe costarti un ca-
prima Guerra del Golfo, un missile Patriot fallì l’intercettazione di un ro errore. Nel seguito, ci sono esempi dal-
missile Scud iracheno. la vita reale di ciò che può succedere quan-
do gli algoritmi numerici non sono applicati
Questo errore costò la vita di 28 soldati, un centinaio di feriti e correttamente.
la distruzione di un capannone americano. La causa del disastro
fu dovuto ad errori di arrotondamento nel sistema operativo del
Patriot: ad ogni secondo che passava si introduceva un ritardo infini-
tesimo che comportava un errore nella valutazione della traiettoria
del missile Scud. Col passare delle ore il ritardo accumulato fu tale
da far intercettare una posizione del tutto diversa da quella in cui
si trovava il missile da abbattere. Difatti, il computer usato per con-
trollare il missile Patriot era basato su un’aritmetica a 24 bit. Per i
calcoli, il tempo veniva registrato dall’orologio interno del sistema Figura 4.1: Il disastro del missile Patriot. La
in decimi di secondi e successivamente moltiplicato per 1/10 per 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 è in-
fatti 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 causaro-
no 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. Figura 4.2: L’esplosione di Ariane 5. Foto
In particolare, il fallimento dell’Ariane 5 è dovuto ad un errore di tratta da http://personal.victoria.ac.
nz/stephen_marshall/SE/Failures/
conversione da un sistema a 64 bit a virgola mobile ad uno a 16 bit a SE_Ariane.html
virgola fissa.
La velocità orizzontale del razzo rispetto alla piattaforma misurato
in 64 bit era un numero più grande del massimo consentito nell’a-
ritmetica 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 http://marsprogram.jpl.
nasa.gov/msp98/orbiter.
Il 23 settembre 1999 si perdono le tracce del veicolo spaziale Mars
Climate Orbiter. Gli obiettivi di questa missione della NASA erano
sia di monitoraggio dei cambiamenti climatici sia di supporto per
la missione Mars Polar Lander. I costi della Climate Orbiter e della
Polar Lander erano di un totale di oltre 320 milioni di dollari.
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
Figura 4.3: La Mars Climate Orbiter. Foto
circa 60 km. Per un errore di conversione delle unità di misura, il tratta da http://www.visionlearning.
velivolo entrò nell’atmosfera con una traiettoria inferiore rispetto a com/blog/2012/09/21/
tragedies-in-science-the-crash-of-the-mars-
quella pianificata. La velocità del mezzo era molto elevata e portò alla
climate-orbiter/, copyright della
distruzione non solo del veicolo spaziale ma anche della stessa Polar NASA/JPL.
Lander.
appunti di calcolo numerico 31

Diversi furono i motivi che portarono al fallimento di questa missio-


ne. 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: Si osservi che la notazione di usare la virgola
per esprimere la parte decimale di un nume-
ro non è una notazione internazionale. Noi
useremo sempre il punto decimale per dire
 
1 0 3 3 3 3
= 0.3333333 . . . = + + + + . . . × 100 che le cifre che seguono rappresentano la
3 100 101 102 103 104 parte decimale del numero.

 
3 1 4 1 5
π = 3.14159265358979 . . . = + 1 + 2 + 3 + 4 . . . × 100
100 10 10 10 10

Osserviamo che abbiamo scritto 1/3 e π in base 10, usando, quindi,


le cifre 0, 1, 2, . . . , 9 per poterli rappresentare.
In genere, un numero reale x può essere rappresentato in base N
come

x = x m N m + x m −1 N m −1 + . . . + x 1 N + x 0 + x −1 N −1 + x −2 N −2 + . . . x − n N − n

| {z } | {z }
parte intera parte frazionaria

dove m e n sono interi naturali e xk , k = m, m − 1, . . . , −n sono interi


naturali compresi tra 0 e N − 1. In base 10, il numero 72.65, scritto in forma
Tuttavia, i calcolatori hanno una memoria finita per poter rappre- estesa è dato dalla forma:
sentare i numeri. Ciò significa che solo una sequenza finita di cifre
7 × 101 + 2 × 100 + 6 × 10−1 + 5 × 10−2
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 rap-
presentazione 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.
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

| {z } | {z }
parte intera parte frazionaria

= 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.
GSi 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 x0 (il primo resto ottenuto) e andando avanti con indice crescente.
GSi 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
362:2= 181 0 x1 = 0
.5 × 2 = 1.0 x −3 = 1
181:2= 90 1 x2 = 1
.0 × 2 = 0.0
90:2= 45 0 x3 = 0
45:2= 22 1 x4 = 1
22:2= 11 0 x5 = 0
11:2= 5 1 x6 = 1
5:2= 2 1 x7 = 1
2:2= 1 0 x8 = 0
1:2= 0 1 x9 = 1
In base 2 il numero diventa 1011010101.101.
_
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:

11
Esempio Scriviamo il numero , che è 1.1 in base 10, nella
10
base 2.
Per la parte intera:
Per la parte decimale:
: 2 = quoziente resto
.1 × 2 = 0.2 x−1 = 0
1 0 1 x0
.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
|{z} 0011
0011. Il numero in base 2 si scrive quindi come: 1.0 0011 |{z} . . .
_

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- IEEE è la sigla dell’Institute of Electrical and
Electronics Engineers
tori, è dato dalla rappresentazione in virgola mobile (floating point).
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 3 3 3 3
= 0.3333333 . . . = + + + + . . . × 100
3 100 101 102 103 104

Questo è un esempio di numero scritto in virgola mobile: un qua-


lunque 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 12.5 = 1.25 × 101 = 0.125 × 102 =
0.000125 × 105 sono tutte rappresentazioni
e è l’esponente (intero) della base con cui stiamo rappresentando il
equivalenti dello stesso numero.
numero stesso, che dà informazioni sulla parte intera del numero.
Ci sono diverse rappresentazioni in virgola mobile, tutte equiva-
lenti tra loro. Si parla di virgola mobile normalizzata quando la La rappresentazione in virgola mobile nor-
malizzata, se stiamo lavorando in base 10,
mantissa ha una singola cifra di valore diverso da zero a sinistra della
esprimerà la mantissa del numero come
virgola. 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 nel-
la 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’espo-
nente 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

x 1+ f −1 2
−1
+ f −2 2−2 + . . . + f −n 2−n è la mantissa, normaliz-
zata, cui sono riservati un numero n di bits,

x 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 e e e e ··· e f f f f f ··· f
|{z} | {z } | {z }
segno cifre dell’esponente 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 2e , e un numero n di
bits per la mantissa Riservare, nell’ordine, i bits per il segno, per
l’esponente e infine per la mantissa, ha una
La scelta del numero di bits da riservare all’esponente e alla man-
sua spiegazione. Se, ad esempio, noi voglia-
tissa si basa su un compromesso tra la dimensione dell’esponente mo confrontare due date per stabilire quale
(e quindi il più piccolo e il più grande numero rappresentabile) e viene prima e quale dopo, partiamo dall’anno,
poi vediamo il mese e infine il giorno. Allo
la dimensione della mantissa (e quindi la precisione del numero stesso modo, se dobbiamo confrontare due
rappresantibile, più o meno cifre decimali). numeri, prima andiamo a vedere l’esponente
e poi la mantissa. Perciò, viene memorizzato
Nel sistema IEEE, la rappresentazione in singola precisione è a 32
prima l’esponente e poi la mantissa. Per il se-
bits mentre quella in doppia precisione è a 64 bits. La suddivisione gno del numero, invece, la scelta è fatta per
dei bits tra esponente e mantissa viene ripartita nel modo seguente: analogia alla rappresentazione dei numeri
interi, dove il primo bit è riservato al segno.
s Ne n # totale bits
Singola precisione 1 8 23 32
Doppia precisione 1 11 52 64
appunti di calcolo numerico 35

Gli esponenti possono essere sia positivi sia negativi ma si pre-


ferisce memorizzarli come interi positivi (senza segno). Abbiamo
dunque bisogno di una tecnica che permetta di rappresentare espo-
nenti 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’esponen-
te viene quindi rappresentato in forma biased (parziale, influenzata
da un altro numero): se e è l’esponente effettivo, noi memorizzia-
mo il valore b + e dove b è il bias dato b = 0111 | {z. . . 1}, vale a dire
Ne bits
1 − 2 Ne−1
b = 1 + 2 + 22 + . . . + 2 Ne−2 + 0 · 2 Ne−1 = = 2 Ne−1 − 1 Si arriva a questo risultato perché abbiamo
1−2 una somma del tipo S = 1 + a + a2 + . . . +
Il vantaggio di usare la rappresentazione biased, cioè di memorizza- 1 − a ( n +1)
an e vale S = . In questo caso,
re il valore dell’esponente senza segno, rende più semplice il con- 1−a
1
fronto degli esponenti (quando serve) perchè su di essi si possono a= = 2−1 .
2
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 disugua-
glianze 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.
36 annamaria mazzia

Il limite inferiore è L = −(b − 1).


In singola precisione, b = 0111
| {z. . . 1}: in base 10 b = 12710 , 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 Dati n valori w1 , w2 , . . . , wn con la
seguente simbologia si indica la loro somma:
n
1 − 2−(n+1) U
. . . 1} ×2U = ( ∑ 2−k ) × 2U =
n
1. 111 2 = (2 − 2−n )2U ≈ 2U +1 ∑ w k = w1 + w2 + w3 + . . . w n
| {z
k =0
1 − 2−1 k =1
n bits .

Il più piccolo numero positivo rappresentabile è dato, invece, da: In singola e doppia precisione abbiamo, per
il più grande e il più piccolo numero positivo
rappresentabile, i seguenti valori:
1. 000
| {z. . . 0} ×2 L = 2 L
bits n Singola precisione Doppia precisione
Se si vuole rappresentare un numero al di fuori di questo intervallo Massimo ≈ 3.4 × 1038 ≈ 10308
Minimo ≈ 1.2 × 10−38 ≈ 2.2 × 10−308
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
1 0 1 x2 .0 × 2 = 0.0
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 = 100000012

Per la mantissa, m = 23 e si deve trascurare l’1 della norma-


lizzazione, 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 0 0 0 0 0 0 1 0 1 1 1 0 ... 0 0 0 0 0
|{z} | {z } | {z }
s esponente 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).
appunti di calcolo numerico 37

Per i valori ±∞ si considerano tutti 1 nello spazio dedicato all’e-


sponente, tutti 0 nello spazio dedicato alla mantissa e 0 o 1 per il
segno, a seconda che sia + o −∞.

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


|{z} | {z } | {z }
s esponente mantissa

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:

NaNS, che produce un segnale di errore


0 1 1 1 ... 1 1 0 1 1 ... 1 1
|{z} | {z } | {z }
s esponente mantissa

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


0 1 1 1 ... 1 1 1 0 0 ... 0 0
|{z} | {z } | {z }
s esponente mantissa

4.5 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 me-
morizzare solo un certo numero di cifre: in che modo lo esprimiamo?
Per lasciare maggiore generalità al discorso, consideriamo una base
N.
Sia x = ±(∑∞ −k p
k =0 x−k N ) N il numero "esatto" (può avere infinite
cifre decimali e lo rappresentiamo come somma di infiniti termini).
In floating-point esso sarà espresso come x ∗ = ±(∑tk− 1 ∗ −k p∗
=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 troncamento: x ∗ = tronc( x ), dove p∗ = p e x− ∗ = x


k −k per
k = 0, . . . , t − 1. Le altre cifre, x−t , x−t−1 , . . . sono ignorate.

x 1
arrotondamento simmetrico: x ∗ = arr ( x ) = tronc( x + N −t+1 N p ),
2
aggiungiamo un’unità a x−t+1 se x−t ≥ N/2.

L’errore assoluto | x − x ∗ | che si commette approssimando il nume-


ro x con x ∗ sarà Evitiamo di effettuare tutti i passaggi che por-
tano alle formule dell’errore assoluto e rela-
tivo, che sono il risultato di maggiorazioni di
serie geometriche.
38 annamaria mazzia


 N 1− t N p nel troncamento
|x − x∗ | ≤ 1
 N 1− t N p nell’arrotondamento
2

|x − x∗ |
Per l’errore relativo (in valore assoluto) , invece, si ha:
|x|

|x − x∗ |  N 1− t nel troncamento
≤ 1
|x|  N 1− t nell’arrotondamento
2
1 1− t
Il valore 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
numero normalizzato), da cui l’errore di arrotondamento relativo che
|x − x∗ |
si commette è ≤ 2−(n+1) .
|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 elemen-


tari 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 esponen-
ziale.

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’er-
rore 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|
Nell’esempio precedente, i tre numeri sono
Se il numero x è rappresentato al calcolatore in floating point, rappresentati con due cifre significative dal
mediante la rappresentazione data da f l ( x ), sappiamo che vale momento che 0.166666 × 10−1 ≤ 5 × 10−2
e 0.166666 × 10−1 > 5 × 10−3 .
| 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

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


gnificative 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 + ex ) dove ex è x − f l (x)
Da e x = si ha xe x = x − f l ( x )
x
l’errore di arrotondamento relativo, cambiato di segno. da cui f l ( x ) = x (1 + e x ), dove ora e x viene
Allora f l ( x o y) = f l ( x ) o f l (y) = x (1 + ex ) o y(1 + ey ). considerato cambiato di segno.

x Moltiplicazione Nei calcoli sono trascurabili le potenze


maggiori o uguali a due per e x e ey
40 annamaria mazzia

x (1 + ex ) × y(1 + ey ) = ( x × y)(1 + ex )(1 + ey ) ≈ ( x × y)(1 + ex + ey )

Quindi l’errore nel prodotto è dato da exy = ex + ey

x Divisione (con y 6= 0)
x (1 + e x ) x x
= (1 + ex )(1 − ey + e2y + . . .) ≈ (1 + ex − ey )
y (1 + e y ) y y
1
Abbiamo scritto = (1 − ey + e2y +
1 + ey
Si ha ex/y = ex − ey : gli errori si accumulano additivamente . . .) come risultato della formula polinomiale
1
x Somma algebrica (addizione o sottrazione, a seconda del segno
di Taylor della funzione f (ey ) =

centro 0.
1 + ey
di

di x e y)

x y
x (1 + ex ) + y(1 + ey ) = x + y + xex + yey = ( x + y)(1 + ex + ey )
x+y x+y
x y
L’errore è ex+y = ex + ey , una combinazione lineare che
x+y x+y Supponiamo di avere due numeri molto vicini
dipende da x e y. 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 stes-
– xy > 0 =⇒ |ex+y | ≤ |ex | + |ey |
se per entrambi i numeri (usiamo i simboli
|x| |y| vvv e www per esprimere le cifre corrotte):
– xy < 0 =⇒ e possono essere molto grandi e, in
| x + y| | x + y| f l ( x ) = 1.d−1 d−2 . . . b−( p+1) b−( p+2) vvv × 2e
tal caso, ci sarà un’amplificazione notevole dell’errore. Si ha
0 0 e
il fenomeno di cancellazione se non si fa attenzione al numero di
f l (y) = 1.d−1 d−2 . . . b−( p+1) b−( p+2) www × 2
Quando andiamo a fare la sottrazione le pri-
cifre significative dei numeri che vengono sommati. me p cifre buone si annullano. Da p + 2 cifre
buone, ne abbiamo ora solo 2 e tutte le altre
Ricordiamo, infine, che in aritmetica di macchina non valgono più sono quelle corrotte. Con la normalizzazione
la proprietà distributiva o associativa del prodotto. il risultato diventa del tipo (ora qqqqq sono le
cifre corrotte):
00 00 e
f l ( x − y) = 1.b− 1 b−2 qqqqqq × 2
Esempio Sia x = 0.1103 e y = 0.009963. Se consideriamo
un sistema decimale a 4 cifre, normalizzando i numeri, abbiamo
x = 1.103 · 10−1 e y = 9.963 · 10−3
Facendo la sottrazione di questi due numeri, abbiamo 1.103 · 10−1 −
9.963 · 10−3 = 0.1103 − 0.009963 = 0.100337. Facendo l’arrotondamen-
to a 4 cifre abbiamo il valore 1.0034 · 10−1 .
|0.100337 − 0.10034|
L’errore relativo che commettiamo è: ≈ 2.99 ×
0.100337
− 5
10 . Questo errore è minore della precisione di macchina (considera-
1
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|
Questa volta l’errore relativo è ≈ .63 × 10−3 .
0.100337
L’errore è maggiore della precisione di macchina.
_

Esempio Sia da risolvere l’equazione ax2 + bx + c = 0 con


a = 1, b = −56 e c = 1, quindi x2 − 56x + 1 = 0, in una macchina a 4
cifre decimali (normalizzata).
appunti di calcolo numerico 41


−b ± b2 − 4ac
Applicando la formula x1/2 = abbiamo x1/2 =
 2a
√ 0.01786284073
28 ± 783 = 28 ± 27.98213716 = . L’arrotonda-
55.98213716
mento delle due radici in virgola mobile normalizzata a 4 cifre
decimali dà: x1 = 1.7863 · 10−2 e x2 = 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 x2 è arrotondata correttamente, mentre la variabile x1 no,


per effetto della cancellazione.
Per ricavare x1 con l’arrotondamento corretto, applichiamo la for-
mula 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 Questa volta lavoriamo su una macchina non
( a − b) = ( a − b)∗ + ea−b . Abbiamo ( a − b)∗ = 15.6 − 15.7 = −0.1. normalizzata, per cui scriviamo la parte fra-
zionaria come 0.qualcosa. Per esercizio, si
Quindi ( a − b)2 = +0.01 = 0.1 · 10−1 . ripeta l’esempio lavorando su una macchina
Consideriamo ora a2 − 2ab + b2 = 243.36 − 489.84 + 246.49 = a 2 cifre decimali normalizzata e su una mac-
china a 3 cifre decimali normalizzata. Cosa
0.24336 · 103 − 0.48984 · 103 + 0.24649 · 103 si osserva?
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:

h2 00 h3 h4 IV
f ( x0 + h ) = f ( x0 ) + h f 0 ( x0 ) + f ( x0 ) + f 000 ( x0 ) + f ( x0 ) + . . .
2 6 24

Allora

f ( x0 + h ) − f ( x0 ) h h2 h3
f 0 ( x0 ) = − ( f 00 ( x0 ) + f 000 ( x0 ) + f IV ( x0 ) + . . .)
h 2 6 24

f ( x0 + h ) − f ( x0 )
Approssimiamo, quindi, la f 0 ( x0 ) calcolando .
h
L’errore, detto errore di discretizzazione, che si commette è

f ( x0 + h ) − f ( x0 ) h h2 h3
| f 0 ( x0 ) − | = | f 00 ( x0 ) + f 000 ( x0 ) + f IV ( x0 ) + . . . |
h 2 6 24
42 annamaria mazzia

Supponendo di conoscere il valore della derivata seconda in x0 ,


per piccoli valori di h possiamo dare una stima dell’errore di discre-
tizzazione,
f ( x0 + h ) − f ( x0 ) h
| f 0 ( x0 ) − | ≈ | f 00 ( x0 )|
h 2
Ci aspettiamo, anche senza conoscere il valore di f 00 ( x0 ) (purchè
diverso da 0) che l’errore di discretizzazione diminuisca proporzio-
nalmente 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 possia-
mo 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 aspettia-
mo che diminuendo il passo h l’errore che commettiamo diminuisca.
Riportiamo, nella tabella a lato, gli errori della formula (in valore h 00
h errore | f ( x0 )|
h 2
assoluto) e confrontiamoli con l’errore di discretizzazione | f 00 ( x0 )| 1.e-1 4.7167e-2 4.6602e-2
2 1.e-2 4.6662e-3 4.6602e-3
(i conti sono fatti in singola precisione):
1.e-3 4.6608e-4 4.6602e-4
L’errore commesso dallo schema decresce come h e, in particolare, 1.e-4 4.6603e-5 4.6602e-5
h 1.e-5 4.6602e-6 4.6602e-6
come | f 00 (1.2)| = 0.46602h. 1.e-6 4.6597e-7 4.6602e-7
2
Possiamo pensare di ottenere un’accuratezza grande quanto vo-
gliamo a condizione di prendere valori di h sempre più piccoli. In
realtà, per valori di h molto piccoli, gli errori iniziano ad aumentare!
h 00
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 di- Figura 4.4: In alto: errore di discretizzazione
f ( x0 + h ) − f ( x0 )
scretizzazione diventa molto piccolo, per valori di h minori di 10−8 , ed effettivo ( f 0 ( x0 ) ≈
h
).
In basso: errori di discretizzazione, di arroton-
allora l’errore di arrotondamento inizia a dominare e ad aumenta-
damento, ed errore effettivo (con f 0 ( x0 ) ≈
re sempre più al diminuire di h. Questo è un motivo per cui si f ( x0 + h ) − f ( x0 )
), ed errore dalla for-
deve cercare di far prevalere l’errore di discretizzazione in un pro- h
mula trigonometrica per cui sin ( x0 + h) −
cedimento numerico. Nell’errore di arrotondamento, per h via via sin ( x0 ) = 2 cos (2x0 + h/2) sin (h/2). I
più piccoli, si verifica un errore di cancellazione: f ( x0 + h) è pra- grafici sono in scala logaritmica.

ticamente uguale a f ( x0 ) per h molto piccoli! per cui l’errore che


appunti di calcolo numerico 43

calcoliamo è | f 0 ( x0 ) − 0| = f 0 ( x0 ) = 0.3623577544.... Una strategia


per evitare la cancellazione è di scrivere diversamente la differenza
f ( x0 + h) − f ( x0 ). Nel caso di f ( x ) = sin ( x ) ricorriamo alla formula
φ+ψ φ−ψ
trigonometrica per cui sin (φ) − sin (ψ) = 2 cos ( ) 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 for-
mula 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 com-
putazionale 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 ) + ex . L’errore di arrotondamento è
f ( x0 + h ) − f ( x0 ) f ∗ ( x0 + h ) − f ∗ ( x0 ) e x + h − e x0
= + 0 . Maggioran-
h h h
do ex con la precisione di macchina e, l’errore di arrotondamento è
dato da 2e/h: per h piccoli è l’errore che predomina!
_

4.8 Instabilità e malcondizionamento

4.8.1 Instabilità

In generale è impossibile evitare un accumulo lineare degli errori di


arrotondamento durante un calcolo, ed è accettabile che ci sia una
crescita lineare moderata, del tipo

En ≈ c0 nE0

dove En misura l’errore in valore assoluto dell’n-sima operazione


dell’algoritmo e c0 rappresenta una costante non molto grande. Per algoritmo intendiamo un procedimento di
calcolo. In particolare, un algoritmo è una se-
Se invece avviene una crescita di tipo esponenziale
quenza di passi che permettono di risolvere
tutto o parte di un problema. Per curiosità, la
En ≈ c1n E0
parola algoritmo è entrata in uso negli anni
’50 in sostituzione di algorismo, termine con
con c1 > 1, allora l’algoritmo è instabile. Algoritmi del genere devono cui si indicava il processo di calcolo utilizzan-
essere evitati! do i numeri arabi. Il termine algoritmo deriva
dal nome di “al-Khwarizmi”, importante mate-
Definizione 4.8.1 Un procedimento numerico si dice instabile se gli errori matico arabo del nono secolo grazie al quale
l’Europa imparò ad usare i numeri arabi, oltre
che vi sono associati non rimangono limitati ma crescono fino a distruggere
alla notazione in base 10. Le procedure che
completamente la soluzione. permettevano di effettuare calcoli in notazio-
ne decimale presero il nome di algorismi o
algoritmi.
Esempio Consideriamo l’integrale Nel medioevo (e forse anche per qualche
studente di oggi!!!), si pensava che algoritmo
xn
Z 1 derivasse dal greco algiros (panico, dolore) e
yn = dx arithmos (numero)!
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.
44 annamaria mazzia

Analiticamente, si ha:

x + 10x n−1
Z 1 n Z 1 n −1 Z 1
x ( x + 10) 1
yn + 10yn−1 = dx = dx = x n−1 dx =
0 x + 10 0 x + 10 0 n
Vale anche la relazione
Z 1
1
y0 = dx = ln (11) − ln (10).
0 x + 10
Possiamo pensare, quindi, di calcolare numericamente il valore di
yn attraverso il seguente algoritmo:

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


1
2. per n = 1, 2, . . . , 30 valutare yn = − 10yn−1
n
Da un programma in Fortran:
Questa formula ricorsiva darebbe l’esatto valore se non fossero
presenti errori di arrotondamento che ci allontanano completamente n yn
0 9.5310e-2
dalla soluzione vera. L’errore si moltiplica esponenzialmente. Infatti 1 4.6898e-2
2 3.1021e-2
y1 = 1 − 10y0 3 2.3122e-2
4 1.8778e-2
1 1
y2 = − 10(1 − 10y0 ) = − 10 + (−10)2 y0 ... ....
2 2 7 -3.0229e-1
1 1 8 3.1479e+0
y3 = − 10( − 10 + 10 y0 ) = −103 y0 + costante
2
9 -3.1368e+1
3 2
10 3.1378e+2
.. .. 18 3.1377e+10
. .
27 -3.1377e+19
yn = (−10)n y0 + costanten 30 3.1377e+22

Da un programma Matlab:
L’errore che si commette applicando questo algoritmo (tenendo conto
che noi non avremo i valori yn esatti ma dei valori approssimati y∗n , n yn
0 9.5310e-2
dovuti all’arrotondamento) sarà del tipo yn − y∗n ≈ (−10)n (y0 − y0∗ ) 1 4.6898e-2
cioè En ≈ (−10)n E0 . L’algoritmo, quindi, presenta un errore En con 2 3.1018e-2
3 2.3154e-2
crescita di tipo esponenziale. Difatti, numericamente, otteniamo valori
4 1.8465e-2
che via via si allontanano dall’intervallo di ammissibilità [0, 1]. ... ....
I risultati che ricaviamo sono riportati nelle tabelle a lato (osser- 7 1.1481-2
8 1.0194e-2
viamo che sono leggermente diversi a seconda dal linguaggio usato, 9 9.1673e-3
proprio per effetto dell’instabilità). 10 8.3270e-3
1 1 18 -9.1694e+1
Se invece, consideriamo yn−1 = ( − yn ), partendo da un valore 27 -9.1699e+9
10 n 30 -9.1699e+13
di n molto grande e andando a ritroso, l’errore diminuisce. Infatti:

y n0 = 0
1 1
y n0 −1 =
10 n0
1 1 1 1 1
y n0 −2 = ( − )= + costante
10 n0 − 1 10 n0 (−10)2 n0
.. ..
. .
1
yn = + costanten0 −n
(−10)n0 −n n0
1
L’errore al passo n dipende, quindi, (in valore assoluto) da
10n0 −n
(dal momento che n0 − n > 0, l’errore decresce per n che tende a
appunti di calcolo numerico 45

zero). Perciò, dato un valore di accuratezza e > 0 e fissato un intero


n1 è possibile determinare l’intero n0 tale che, partendo da yn0 = 0
e andando a ritroso, gli integrali yn saranno valutati con un errore
in valore assoluto minore di e per 0 < n ≤ n1 . Se richiediamo una
tolleranza e = 10−6 , e fissiamo un valore n1 , per calcolare n0 dovrà
essere
1
< e cioè 10n1 −n0 < e
10n0 −n1
Passando al logaritmo in base 10:

n1 − n0 < log e =⇒ n0 > n1 − log e

Fissato n1 = 20 si ricava n0 = 26.


Questa volta i calcoli danno gli stessi risultati sia in Matlab sia in
Fortran:

n yn n yn
26 0.000000 11 7.62944e-3
25 3.84615e-3 10 8.32797e-3
24 3.61538e-3 9 9.16720e-3
23 3.80513e-3 8 1.01944e-2
22 3.96731e-3 7 1.14806e-2
21 4.14872e-3 6 1.31377e-2
20 4.34703e-3 5 1.53529e-2
19 4.56530e-3 4 1.84647e-2
18 4.80663e-3 3 2.31535e-2
17 5.07489e-3 2 3.10180e-2
16 5.37486e-3 1 4.68982e-2
15 5.71251e-3 0 9.53102e-2
14 6.09542e-3
13 6.53332e-3
12 7.03898e-3

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


_
L’esempio appena visto ci porta a dare alcune considerazioni sui
criteri su cui si deve basare un 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’al-
goritmo 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.
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 ) = a0 + a1 x + a2 x2 + . . . + an x n . I dati di input del proble-
ma sono i coefficienti a0 , a1 , . . . , an . I dati di output sono le radici del
polinomio.
Si può provare che a piccole variazioni sui dati iniziali, corrispon-
dono 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 a9 del valore di
0.00001, considerando quindi il polinomio p( x ) + 0.00001x9 , le radici Figura 4.5: Esempio: malcondizionamento
corrispondenti si discostano di poco da quelle del polinomio di par-
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.0001x9
allora le radici corrispondenti a x7 , 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 6= 0, y 6= 0.
Applichiamo la formula di Taylor di centro x. Si ha:

f ( x + ∆x ) = f ( x ) + f 0 ( x )∆x + O(∆x2 ) ≈ f ( x ) + f 0 ( x )∆x

La variazione sul dato d’uscita è data dalla differenza f ( x + ∆x ) −


f ( x ). Chiamiamo questa differenza con ∆y. Quindi ∆y = f ( x +
∆x ) − f ( x ) ≈ f 0 ( x )∆x (utilizziamo il risultato ottenuto dalla formula
di Taylor).
Se utilizziamo gli errori relativi, abbiamo (e sapendo che y = f ( x )): Come esempio, consideriamo f ( x ) = x1/α ,
con x > 0 e α > 0. Calcoliamo l’indi-
∆y f 0 ( x )∆x ce di condizionamento applicando la formu-
≈ la (poichè abbiamo supposto x > 0, si ha
y f (x) f ( x ) 6= 0). Risulta

Moltiplicando numeratore e denominatore a secondo membro per x 1 1/α−1



x f ( x ) x α x
0
1
si ricava (cond f )( x ) = = =

f ( x ) x1/α α

∆y x f 0 ( x ) ∆x
≈ Per α grande, (cond f )( x ) tende a zero, quin-
y f (x) x di abbiamo un problema bencondizionato.
Se, invece α è molto piccolo si ha un pro-
blema malcondizionato (se α = 10−10 , si
10
ha f ( x ) = x10 e (cond f )( x ) = 1010 , un
valore molto grande).
appunti di calcolo numerico 47

Al limite per ∆x → 0, questa uguaglianza approssimata (abbiamo


usato il simbolo ≈) diventa una vera uguaglianza. Questo suggerisce
di definire l’indice di condizionamento di f mediante la formula

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

Questo numero ci dice quanto grandi sono le perturbazioni relative


per y confrontate con le relative perturbazioni di x.
∆x
Per x = 0 e y 6= 0, non ha senso considerare l’errore relativo ,e
x
si considera l’errore assoluto su x. In tal caso, si definisce indice di
condizionamento la quantità

0
f (x)
(cond f )( 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

(cond f )( x ) = | f 0 ( 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 ?


5 Zeri di funzione

Non so come il mondo potrà giudicarmi ma


5.1 Partiamo da alcuni problemi... a me sembra soltanto di essere un bambino
che gioca sulla spiaggia, e di essermi diverti-
to a trovare ogni tanto un sasso o una conchi-
glia più bella del solito, mentre l’oceano della
verità giaceva insondato davanti a me.
Isaac Newton
Nel progettare una pompa centrifuga, o turbopompa, occorre
tener presenti diversi elementi. Ne elenchiamo solo alcuni: Non entriamo nei dettagli: questo problema

x
sarà affrontato con la dovuta competenza in
il rendimento della macchina (maggiore è il rendimento più uno dei corsi del terzo anno di Ingegneria
dell’Energia, con indirizzo elettrico. L’esem-
competitiva è la macchina); pio vuole mostrare come il Calcolo Numerico

x il dimensionamento dell’albero e del mozzo, che dovrà garantire


possa essere di aiuto per risolvere problemi
pratici e specifici dell’Ingegneria.
una rigidezza torsionale sufficiente per permettere una trasmissio-
ne di energia in totale sicurezza;

x il dimensionamento della bocca di aspirazione, in modo da otti-


mizzare 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 D0 che rende minima
la velocità relativa (che chiamiamo w2 ) in ingresso, perchè limitare
l’energia cinetica nella sezione di ingresso vuol dire limitare le perdite.
La velocità w2 si può scrivere come
s
24 Q2 k2m ω 2 D02
w2 = +
πηv2 ξ 22 ( D02 − D2M )2 4

dove Q è la portata volumetrica della pompa, k m è un numero tipico


di macchina, ηv rappresenta il rendimento volumetrico, ξ 2 è un coef-
ficiente di ostruzione, D M il diametro del mozzo, ω è la velocità di
rotazione. Se è solo D0 la nostra incognita, per rendere minimo w2
dobbiamo fare la derivata di w2 rispetto a D0 e cercare il valore di D0
che rende nulla tale derivata: in tal modo troviamo il valore di D0 che
rende minima la velocità. Si dovrà risolvere la seguente equazione: Assegnata una funzione, tra i punti che annul-
lano la sua derivata possiamo trovare i punti
" #
di massimo e di minimo. In tal caso si trova
7 Q2 k2m 1
D0 = 2 · 2 2 · 2 2 · " #2 un solo punto e si può dimostrare che è punto
π ω ηv ξ 2 D2M di minimo.
1− 2
D0

Osserviamo come a destra del segno di uguaglianza abbiamo una


funzione complicata e non è possibile trovare per via analitica quel
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 D0 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:

x

partire da x0 prossimo a b;

x considerare x
Per
√ esempio, per calcolare
1 b
1 = ( x0 + ); 2 ≈ 1.41421356237310, sapendo
2 x0 che il valore che dobbiamo approssimare

x
è compreso tra 1 e 2, possiamo partire da
1 b x0 = 1.5, ottenendo:
generalizzando: xn+1 = ( x n + ).
2 xn x0 = 1.5
2
Il metodo usato dai Babilonesi non è altro che il metodo di Newton- x1 = 21 (1.5 + ) = 1.41666667
1.5
2
Raphson (che vedremo più avanti) per trovare gli zeri della funzione 1
x2 = 2 (1.41666667 + ) = 1.41421569
1.41666667
f ( x ) = x2 − b. x3 = 12 (1.41421569 +
2
) = 1.41421356
1.41421569
Abbiamo visto ora due esempi, uno specifico dell’Ingegneria e
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’inter-
vallo ] a, b[. Nel caso ci sia più di una radice, la proce-
dura che ora descriviamo vale sempre, e ci
Il metodo delle bisezioni (detto anche metodo dicotomico) si chia-
permette di calcolare una di queste radici.
ma così perchè, ad ogni passo, viene dimezzato l’intervallo preceden-
te, cercando in tal modo di racchiudere la radice ξ in sottointervalli
sempre più piccoli.

x Si pone a0 = a e b0 = b. Si prende il punto medio dell’intervallo


a + b0
[ a0 , b0 ], c0 = 0 .
2
x 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 a1 = c0 e b1 = b0 .
appunti di calcolo numerico 51

– Se, invece, f (c0 ) e f (b0 ) hanno lo stesso segno, allora ξ si trova


nell’intervallo ] a0 , c0 [ In tal caso porremo a1 = a0 e b1 = c0 .

x Riapplichiamo questa procedura appena descritta sul sottointer-


vallo [ a1 , b1 ]

x Fermiamo il procedimento ad una certa iterazione n, se f (cn ) = 0


o se l’ampiezza del sottointervallo è sufficientemente piccola, cioè
bn − a n
≤ tol dove tol è una certa tolleranza prefissata. In tal caso
2
assumiamo cn come approssimazione della radice ξ.

Osserviamo che, ad ogni passo, viene dimezzato l’intervallo in cui


si trova la radice ξ, da cui Figura 5.1: Metodo delle Bisezioni

b−a
|ξ − cn | ≤ .
2n +1
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
≤ tol =⇒ |ξ − cn | ≤ tol
2n +1
Ma
b−a
 
log
b−a b−a 2tol
≤ tol ⇐⇒ 2n ≥ =⇒ n ≥ .
2n +1 2tol log(2)

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 convie-
ne 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.
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) 6= 0 e ampiezza intervallo > tol)
6 n ←− n + 1 (incrementa n) ;
7 Se f ( a) f (c) > 0 allora
8 a ←− c
9 altrimenti
10 b ←− c
11 Fine-Se
12 aggiorna c ;
13 aggiorna ampiezza intervallo ;
14 Fine-Fintantochè
15 Se f (c) = 0 o ampiezza intervallo ≤ tol allora
16 c è la soluzione approssimata
17 altrimenti
18 n > itmax ;
19 il metodo è fallito dopo itmax iterazioni ;
20 Fine-Se

5.3 Metodo del Punto Fisso  x 2


Un esempio. Da f ( x ) = − sin ( x ) =
2
0, aggiungendo ad ambo i membri x, ottenia-
 x 2
Il problema f ( x ) = 0 può essere reso equivalente alla ricerca del mo − sin ( x ) + x = x. Se poniamo
2  
punto fisso di una opportuna funzione g (vale a dire del problema x 2
g( x ) = − sin ( x ) + x, le radici della
2
g( x ) = x). f coincidono con i punti fissi della g.

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 ammet-
terne affatto.
Un modo per calcolare un punto fisso di una funzione g è dato da
iterazioni successive sulla funzione g stessa.
 x 2
Figura 5.2: Radici di f ( x ) = −
2
Esempio sin ( x ).
Supponiamo che la funzione g sia g( x ) = cos ( x ). Prendiamo come
valore iniziale x0 = 1. Con una calcolatrice, andiamo a calcolare (in
modalità radianti!) il suo coseno: ricaviamo x1 = cos ( x0 ) = g( x0 ) =
0.54030230. Successivamente, calcoliamo il coseno di x1 , ottenen-
do x2 = cos ( x1 ) = 0.857553216. Osserviamo che x2 = cos ( x1 ) =
cos (cos ( x0 )) e non cos2 ( x0 )! Abbiamo innescato, in questo modo,
un procedimento iterativo per cui xn+1 = cos ( xn ) = g( xn ). Con

 x 2
Figura 5.3: Punti fissi di g( x ) = −
2
sin ( x ) + x.
appunti di calcolo numerico 53

la calcolatrice, basta digitare sulla funzione cos ogni volta in modo


n xn
da avere i nuovi valori della successione xn+1 . I primi numeri che 5 0.7013687746
otteniamo non sono molto importanti. Quelli importanti sono quelli 11 0.7356047404
13 0.7414250866
che si hanno dopo 15, 30 o 100 passi. Nel nostro caso, abbiamo i
14 0.7375068905
valori riportati nella Tabella a lato. 15 0.7401473356
Perchè i valori di x tendono a 0.7390851332? Cosa ha di speciale 29 0.7390893414
30 0.7390822985
questo numero? Il valore 0.7390851332 è un punto fisso per la funzione 56 0.7390851333
cos ( x ). 57 0.7390851332
58 0.7390851332
_

Esempio
1
Consideriamo la funzione g( x ) = x + 2. Partendo da x0 = 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 Figura 5.4: Punto fisso di g( x ) = 1/2x + 2.

5 x5 = 12 · 3.75 + 2 = 3.875
6 x6 = 21 · 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
_
Scopriamo quindi che se l’iterazione xn+1 = g( xn ) converge a ξ, ξ
è punto fisso per la funzione g.
Da un punto di vista geometrico, i grafici di y = x (bisettrice del
primo e terzo quadrante) e di y = g( x ) si intersecano in ξ.
Tuttavia, non sempre questo schema iterativo, applicato a funzioni
che ammettono uno o più punti fissi, converge. Vediamo con un
esempio.

Esempio
Sia g( x ) = x2 . Analiticamente troviamo due punti fissi per questa
funzione. Dovendo essere ξ = ξ 2 , si ricava ξ 2 − ξ = 0, vale a dire
ξ (ξ − 1) = 0: quindi ξ = 0 e ξ = 1 sono i due punti fissi per 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 x0 ∈] − 1, 1[, la succes-
sione converge a ξ = 0. Le sole successioni che convergono a ξ = 1
sono le ovvie successioni generate da x0 = ±1. Se si prende come
Figura 5.5: Punti fissi di g( x ) = x2 .
punto iniziale x0 tale che | x0 | > 1 allora lo schema iterativo xn+1 = xn2
diverge a +∞. Partendo da x0 = 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,
54 annamaria mazzia

allora i valori xn tendono a ξ. Un punto fisso può dunque attirare o


respingere i valori xn prodotti dallo schema iterativo.
Prima di passare a studiare quando lo schema di punto fisso
converge, ricordiamo che una funzione può ammettere più di un
punto fisso, ammetterne uno solo o non ammetterne affatto. Ci
sono due teoremi (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
che g sia di classe C1 e, inoltre, | g0 ( x )| ≤ m < 1 per ogni x ∈ [ a, b]: in
tal caso esiste un unico punto fisso. È importante osservare che, data una fun-
zione che ammette punto fisso, le ipotesi dei
Possiamo ora provare un teorema di convergenza per lo schema
due teoremi 3.6.4 e 3.6.5 possono essere ri-
iterativo del punto fisso. lassate dall’intervallo [ a, b] ad un intorno del
punto fisso.
Teorema 5.3.1 A partire da un punto iniziale x0 , lo schema iterativo xn+1 =
g( xn ) converge al punto fisso ξ di g se | g0 ( x )| < 1 in un intorno di ξ.

Dimostrazione. Dalle relazioni

ξ = g(ξ )
x n +1 = g ( x n )

sottraendo membro a membro e, applicando il teorema del Valore


Medio 3.6.2 (con ξ n un opportuno punto del segmento che congiunge
ξ a xn ), otteniamo:

ξ − xn+1 = g(ξ ) − g( xn ) = g0 (ξ n )(ξ − xn )

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

ξ − x1 = g0 (ξ 0 )(ξ − x0 )
ξ − x2 = g0 (ξ 1 )(ξ − x1 )
ξ − x3 = g0 (ξ 2 )(ξ − x2 )
.. ..
.=.
ξ − xn = g0 (ξ n−1 )(ξ − xn−1 )

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


abbiamo:

| ξ − x1 | · | ξ − x2 | · . . . · | ξ − x n | =
| g0 (ξ 0 )| · | g0 (ξ 1 )| · | g0 (ξ 2 )| · . . . · | g0 (ξ n−1 )| · |ξ − x0 | · |ξ − x1 | · . . . · |ξ − xn−1 |

La relazione appena trovata può essere semplificata, dividendo


ambo i membri per |ξ − x1 | · |ξ − x2 | · . . . · |ξ − xn−1 | ottenendo:

|ξ − xn | = | g0 (ξ 0 )| · | g0 (ξ 1 )| · | g0 (ξ 2 )| · · . . . · | g0 (ξ n−1 )||ξ − x0 |

Assumiamo, ora che | g0 ( 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.

| ξ − x n | ≤ m n | ξ − 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. 4
Negli esempi precedenti:
g( x ) g0 ( x )
cos ( x ) − sin ( x )
1 1 Figura 5.6: Il metodo di punto fisso con
x+2 g( x ) = cos ( x ).
2 2
x 2 2x
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 g0 ( x ) = qualunque
2 2
sia x: si ha convergenza.
Nel terzo caso (g( x ) = x2 ), g0 ( x ) = 2x da cui g0 (0) = 0 e g0 (1) = 2.
In un intorno del primo punto fisso, vale m < 1, in un intorno del Figura 5.7: Il metodo di punto fisso con e
1
secondo punto fisso m > 1 e non si potrà mai avere convergenza ad g( x ) =
2
x+2
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 x1 = g( x0 ). Perciò:

x da ( x0 , x0 ) si va su o giù fino a raggiungere ( x0 , x1 ) sulla curva


g;

x 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 Figura 5.8: Il metodo di punto fisso: esem-
pio con g( x ) = x2 . Si noti la convergenza
di intersezione tra il grafico di g e la bisettrice y = x. Osserviamo monotona a ξ = 0 (in alto) e la divergenza
che, per questo esempio, i valori della successione si avvicinano monotona da ξ = 1 (in basso)
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 ≤ g0 ( x ) < 1 in un intorno del punto fisso, si
ha convergenza monotona. Se, invece, −1 < g0 ( x ) < 0 in un intorno
del punto fisso, si ha convergenza oscillante.
56 annamaria mazzia

Analogamente, in Figura 5.8, si possono ritrovare le conclusioni


già viste dell’esempio in cui g( x ) = x2 : si ha convergenza monotona
verso ξ = 0 partendo da un punto iniziale in valore assoluto minore
di uno, e divergenza monotona a infinito, partendo da | x0 | > 1.

Esempio
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 g0 ( x ) = 1 − cos ( x ). Si ha g0 (0) =
1 − 1 = 0, g0 (π ) = 1 − (−1) = 2 e g0 (2π ) = 1 − 1 = 0. Da queste
informazioni, deduciamo che qualunque sia il punto iniziale x0 la
successione generata dallo schema del punto fisso non potrà mai
convergere a π, come si vede anche dalla Figura 5.9.
_
Figura 5.9: Il metodo di punto fisso: esempio
Nel caso in cui il metodo di punto fisso converge, si possono
con g( x ) = x − sin ( x ). ξ = 0 e ξ = 2π
ricavare maggiorazioni per l’errore che si commette approssimando ξ sono punti fissi attrattivi, al contrario di ξ = π
mediante xn . Vale infatti la disuguaglianza in cui g0 (ξ ) = g0 (π ) = 2

m
|ξ − xn | ≤ | x n − x n −1 | (5.1)
1−m
dove m, come prima, è una maggiorazione di | g0 ( 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,
0
| g ( x )| ≤ m < 1 in un intorno del punto fisso, si ha:

| ξ − x n | ≤ m | ξ − x n −1 | (5.2)

Possiamo scrivere ξ − xn−1 nel modo seguente aggiungendo e sot-


traendo xn :

ξ − x n −1 = ξ − x n + x n − x n −1
ξ − x n −1 = g ( ξ ) − g ( x n −1 ) + x n − x n −1
| ξ − x n −1 | ≤ m | ξ − x n −1 | + | x n − x n −1 |
(1 − m)|ξ − xn−1 | ≤ | xn − xn−1 |
1
| ξ − x n −1 | ≤ | x n − x n −1 |
1−m
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 dn . dn = | xn − xn−1 | rappresenta lo scarto
all’iterazione 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 dn . Sfruttiamo questo fatto per vedere come
appunti di calcolo numerico 57

implementare l’algoritmo dello schema di punto fisso (sotto forma di


pseudo-codice):
Dati di input: x0 , tol, itmax
Dati di output: xn 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 xn = g( xn−1 ) ;
6 aggiorna dn ;
7 Fine-Fintantochè
8 Se dn ≤ tol allora
9 xn è la soluzione approssimata
10 altrimenti
11 n > itmax ;
12 il metodo è fallito dopo itmax iterazioni ;
13 Fine-Se

5.4 Il Metodo di Newton-Raphson

Il metodo di Newton-Raphson è uno dei metodi più potenti e più Il metodo fu descritto da Isaac Newton in
due suoi scritti del 1669 e del 1671, anche
famosi per risolvere equazioni non lineari. Ci sono diversi approcci
se era riferito solo a polinomi (in particolare
per introdurre questo metodo – tra questi c’è anche quello di vedere a x3 − 2x − 5 = 0). Il metodo di Newton fu
il metodo di Newton-Raphson come un particolare schema di punto pubblicato per la prima volta nel 1685. Nel
1690 Joseph Raphson ne pubblicò una de-
fisso, come vedremo in seguito. scrizione semplificata in termini di approssi-
Supponiamo ora che la derivata prima e seconda di f esistano e mazioni successive xn piuttosto che di se-
siano continue e assumiamo che la derivata prima f 0 sia valutabile quenze di polinomi. Fu solo nel 1740 che
Thomas Simpson descrisse il metodo di New-
con sufficiente facilità. ton come un metodo iterativo per risolvere
Lo schema di Newton-Raphson è uno schema iterativo che produce equazioni non lineari (e non solo polinomi) e
diede una versione generalizzata per sistemi
una successione di approssimazioni x0 , x1 , . . . , xn della radice della di due equazioni.
funzione f . Isaac Newton (1643-1727), inglese, fu fisi-
co, matematico, astronomo, alchimista, inven-
Sia xn l’iterata corrente. Applicando la formula di Taylor di centro
tore, filosofo naturalista. È visto come uno dei
xn si ha: più grandi scienzati nella storia dell’umanità.
Su Joseph Raphson (1648-1715) non si
f ( x ) = f ( xn ) + f 0 ( xn )( x − xn ) + f 00 (ξ x )( x − xn )2 /2 hanno molti dettagli. Pare che Newton stes-
so gli permettesse di vedere e studiare i suoi
dove ξ x è un punto (che non conosciamo) compreso tra x e xn . scritti matematici. Il suo lavoro del 1690 "Ana-
lysis aequationum universalis" gli valse l’in-
Sia x = ξ, dove ξ è radice di f , f (ξ ) = 0. Se f fosse lineare,
gresso nella Royal Society, nel 1691 ben-
avremmo f 00 ≡ 0 e quindi potremmo trovare la radice risolvendo chè fosse uno studente (si laureò nel 1692)
direttamente piuttosto anziano (aveva 43 anni).

0 = f (ξ ) = f ( xn ) + f 0 ( xn )(ξ − xn )
Osserviamo che
Supponendo f 0 ( xn ) 6= 0, otterremmo, con semplici passaggi,
y( x ) = f ( xn ) + f 0 ( xn )( x − xn )
f ( xn ) altro non è che l’equazione della retta
ξ = xn −
f 0 ( xn ) tangente alla f nel punto ( xn , f ( xn )).

In questo caso, partendo da un qualunque valore iniziale x0 , in una


sola iterazione otterremo il valore della radice ξ.
58 annamaria mazzia

Per una funzione non lineare, il discorso da fare è molto simile.


La nuova approssimazione xn+1 vogliamo che sia uguale al valore
xn più una certa quantità h che ci permetta di arrivare alla soluzione
desiderata.
Applicando la formula di Taylor di centro xn , deve essere

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

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


e considerando f 0 ( xn ) 6= 0, ricaviamo Trascurando il termine f 00 (ξ h ) h2 /2 nella for-
mula di Taylor, abbiamo una linearizzazione
f ( xn ) della f in un intorno di xn : approssimiamo,
h=− cioè la funzione f con la retta tangente a
f 0 ( xn )
( xn , f ( xn )). Se ci troviamo vicino ad una ra-
dice della f , quindi, ci aspettiamo che il pro-
Utilizziamo questo valore di h per la nuova approssimazione
cedimento che stiamo applicando ci avvicini
xn+1 = xn + h ottenendo la formula molto rapidamente alla radice stessa!

f ( xn )
x n +1 = x n − , n = 0, 1, 2, . . . (5.3)
f 0 ( xn )

L’interpretazione geometrica del metodo di Newton è che xn+1 è


l’intercetta, sull’asse delle x, della tangente della f a xn (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 par-


ticolare dello schema del punto fisso applicato alla funzione g( x ) =
x − f ( x )/ f 0 ( x ). Perchè lo schema del punto fisso converga, deve
essere | g0 ( x )| < 1 in un intorno di ξ. Nel caso specifico abbiamo:

f 0 ( x )2 − f ( x ) f 00 ( x ) f ( x ) f 00 ( x )
| g0 ( x )| = |1 − | = | |
f 0 ( x )2 f 0 ( x )2

Supponendo f 0 (ξ ) 6= 0 (che è il caso in cui la radice non è multipla),


si ha | g0 (ξ )| = 0, poichè al numeratore f (ξ ) = 0 (essendo ξ radice
della f ). Per continuità, allora, vale | g0 ( x )| < 1 in un intorno di ξ.
appunti di calcolo numerico 59

Pertanto il metodo di Newton-Raphson è generalmente convergente.


Cosa vuol dire quel generalmente? Vuol
dire: quasi sempre, tranne alcuni casi
Per vedere come si riduce l’errore via via che le approssimazioni si
particolari (che vedremo in seguito).
avvicinano a ξ, consideriamo l’errore cambiato di segno en , per cui
xn = ξ + en . Sostituendo in (5.3) abbiamo
f ( ξ + en )
e n +1 + ξ = e n + ξ −
f 0 ( ξ + en )
f ( ξ + en )
e n +1 = en − 0
f ( ξ + en )
Applicando la formula polinomiale di Taylor sia su f sia su f 0 di
centro ξ, si ha:
f (ξ ) + en f 0 (ξ ) + en2 f 00 (ξ )/2 + . . .
e n +1 = e n −
f 0 (ξ ) + en f 00 (ξ ) + . . .
Poichè f (ξ ) = 0, raccogliendo i termini si ricava:

en f 0 (ξ ) + en2 f 00 (ξ ) − en f 0 (ξ ) − en2 f 00 (ξ )/2 + . . . en2 f 00 (ξ )/2 + . . .


e n +1 = =
f 0 (ξ ) + en f 00 (ξ ) + . . . f 0 (ξ ) + en f 00 (ξ ) + . . .
Trascurando i termini en f 00 (ξ ) + . . . al denominatore e le potenze
maggiori o uguali a en3 al numeratore si trova:
f 00 (ξ ) 2 f 00 (ξ )
e n +1 = e = Aen2 ponendo A = .
2 f 0 (ξ ) n 2 f 0 (ξ )
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. Se partiamo da un errore iniziale dell’ordine
di 10−2 , al passo successivo l’errore è pro-
Nel caso in cui ξ sia una radice multipla, allora f 0 (ξ ) = 0 e A = ∞:
porzionale a 10−4 e poi a 10−8 fino a 10−16
se il metodo converge, la convergenza non sarà più quadratica ma in tre sole iterazioni. Generalmente, quindi, il
avremo una convergenza di tipo lineare, come vedremo meglio in numero delle cifre significative raddoppia ad
ogni passo del metodo.
seguito.
Se in ξ vi è un punto di flesso non orizzontale, per cui f (ξ ) =
0, f 0 (ξ ) 6= 0, f 00 (ξ ) = 0, allora A = 0 e 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
| x n +1 − ξ |
lim =M
n→∞ | xn − ξ | p
La costante M prende il nome di costante asintotica dell’errore o fattore
di convergenza.
60 annamaria mazzia

In maniera alternativa, un metodo iterativo si


dice:

x Nel caso del metodo di Newton-Raphson, generalmente vale


x linearmente convergente se esiste
una costante M < 1 tale che, per n
p = 2 e la costante asintotica dell’errore è quella che abbiamo sufficientemente grande, vale
f 00 (ξ )

definito come A presa in valore assoluto, cioè M = 0
. | x n +1 − ξ | ≤ M | x n − ξ |

x
2 f (ξ )
a convergenza quadratica se esi-
ste una costante M tale che, per n
x Nel metodo del punto fisso, nell’ipotesi in cui g0 (ξ ) 6= 0, la sufficientemente grande, vale

convergenza è lineare. Infatti, considerando l’errore cambiato | x n +1 − ξ | ≤ M | x n − ξ | 2


di segno, la relazione xn+1 = g( xn ) si può scrivere, in modo x a convergenza superlineare se esiste
equivalente, come una successione di costanti Mn → 0
tale che, per n sufficientemente grande,
vale
ξ + e n +1 = g ( ξ + e n )
| x n + 1 − ξ | ≤ Mn | x n − ξ | .
e, applicando la formula (polinomiale) di Taylor si ha
ξ + e n +1 = g ( ξ ) + e n g 0 ( ξ ) + . . .
ξ + e n +1 = ξ + e n g 0 ( ξ ) + . . .
en+1 = en g0 (ξ ) + . . . e, al limite per n → ∞
e n +1 = g 0 ( ξ ) e n

La costante asintotica per lo schema di punto fisso, nel caso Ricordiamo che, se il metodo di punto
generale vale, dunque, M = | g0 (ξ )|. fisso converge linearmente, deve essere
| g0 (ξ )| < 1. Infatti, se un metodo è lineare,
Se invece | g0 (ξ )| = 0, il metodo converge sempre ma con ordine di affinchè l’errore al passo n + 1 decresca di
convergenza maggiore di uno. M rispetto all’errore al passo n, deve essere
M < 1.
Per esercizio, si ricavi ordine di convergen-

x Il metodo delle bisezioni può essere visto come un metodo lineare,


1
za e costante asintotica se g0 (ξ ) = 0 e
g00 (ξ ) 6== 0.
con M = (considerando che, ad ogni passo, si riduce della metà
2
l’intervallo in cui viene cercata l’approssimazione della radice).

5.6 Errore e scarto nel metodo di Newton-Raphson

Come per lo schema di punto fisso, quando implementiamo il me-


todo di Newton-Raphson, non potendo misurare l’errore en (la ra-
dice ξ è incognita), usiamo lo scarto dn come misura della bontà
dell’approssimazione della radice.

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

2xn − cos ( xn ) + 1
x n +1 = x n − Figura 5.11: Radice della funzione f ( x ) =
2 + sin ( xn ) 2x − cos ( x ) + 1.

Partendo da x0 = 0.5 e richiedendo una tolleranza pari a 10−10 nei


risultati (interrompiamo l’algoritmo quando dn < 10−10 ), si ha:
appunti di calcolo numerico 61

n xn dn
0 0.5
1 0.4730746270E-01 0.4526925E+00
2 0.5462695134E-03 0.4676119E-01
3 0.7458221874E-07 0.5461949E-03
4 0.1395426403E-14 0.7458222E-07
5 0.7647622253E-17 0.1387779E-14

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


Considerando che f 00 ( x ) = cos ( x ) possiamo valutare la costante
| f 00 (ξ )| | cos (ξ )| 1
asintotica M = = = = 0.25
2| f 0 (ξ )| 2(|2 + sin (ξ )|) 4
_
Da un punto di vista teorico, considerando la radice ξ e l’appros-
simazione xn e applicando il teorema del valor medio, possiamo
scrivere

f (ξ ) − f ( xn ) = f 0 (ξ n )(ξ − xn )

dove ξ n è un punto, che non conosciamo, compreso tra ξ e xn . Per xn


vicino a ξ possiamo considerare ξ n ≈ xn , da cui ricaviamo (essendo
f (ξ ) = 0):

− f ( xn ) ≈ f 0 ( xn )(ξ − xn )

Sostituendo questa espressione nell’iterazione di Newton-Raphson si


ha:
f ( xn )
x n +1 = x n − ≈ xn + (ξ − xn )
f 0 ( xn )

vale a dire
Nell’ esempio appena visto
d2
x n +1 − x n ≈ ξ − x n cioè d n +1 ≈ e n . = 0.2282
( d1 )2
d3
Ma in condizioni di convergenza, dn+1 < dn da cui, per l’errore, vale = 0.2498
( d2 )2
la maggiorazione en < dn . d4
= 0.2500
Perciò gli scarti sono molto vicini agli errori e possono essere ( d3 )2
utilizzati sia per controllare il numero di iterazioni da effettuare per d5
= 0.2495
( d4 )2
approssimare la radice entro una certa tolleranza sia per approssimare
d 1 Abbiamo una stima di M usando gli scarti.
M applicando la formula M ≈ n+ .
d2n
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 n +2
vale en+1 ≈ dn+2 , dall’altra M ≈ . Se siamo arrivati fino
( d n +1 )2
all’iterazione n + 1 non abbiamo lo scarto dn+2 ma, avendo stimato
M, possiamo approssimare en+1 tramite la formula en+1 ≈ dn+2 ≈
M ( d n +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
Figura 5.12: Radice della funzione f ( x ) =
f 0 ( x ) = 3x2 + 1 e f 00 ( x ) = 6x, risulta che f 0 (0) = 1 6= 0 mentre x3 + x.
62 annamaria mazzia

f 00 (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 x0 = 5
e arrestando le iterazioni quando lo scarto diventa minore di 10−10 .
Figura 5.13: Grafico di convergenza del me-
Vengono eseguite 9 iterazioni e, per gli scarti, abbiamo: todo di Newton-Raphson applicato alla fun-
zione f ( x ) = x3 + x, partendo da x0 =
n dn 5.

1 1.7105e+00
2 1.1620e+00
3 8.0644e-01
4 5.8158e-01
5 4.3318e-01
6 2.6142e-01
7 4.4651e-02
8 1.7912e-04
9 1.1494e-11
Abbiamo detto che il metodo di Newton-
Proviamo a vedere, sperimentalmente, quale può essere l’ordine di Raphson ha, in genere, ordine 2. Ma se noi,
convergenza e la costante asintotica. Mettiamo in tabella i rapporti ipotizzando ordine 2, troviamo una costante
dn dn asintotica M nulla o che tende a zero, deve
(convergenza lineare?) (convergenza quadratica?) e suonare un campanello di allarme! La costan-
d n −1 ( d n −1 )2 te asintotica di un metodo iterativo non può
dn mai valere zero. Quindi l’ordine non è quel-
(convergenza cubica?). Sappiamo già che non può esserci
( d n −1 )3 lo che ci aspettiamo ma bisogna indagare
convergenza quadratica. ulteriormente sui risultati!
Attenzione: in questo esempio, una volta
Per i vari rapporti degli scarti, si ha: accertata che la convergenza non è quadrati-
ca, non potremmo neanche pensare ad una
dn dn dn convergenza di tipo lineare perchè, se aves-
n en
d n −1 ( d n −1 )2 ( d n −1 )3 simo limn→+∞
e n −1
= M 6= 0, avrem-
2 6.7934e-01 3.9715e-01 2.3218e-01 en en
mo limn→+∞ = limn→+∞ ·
( e n −1 )2 e n −1
3 6.9399e-01 5.9723e-01 5.1395e-01 1 1
= M limn→+∞ = +∞ e non
4 7.2117e-01 8.9426e-01 1.1089e+00 e n −1 e n −1
zero (ciò che invece abbiamo).
5 7.4484e-01 1.2807e+00 2.2021e+00
6 6.0348e-01 1.3931e+00 3.2160e+00
7 1.7081e-01 6.5339e-01 2.4994e+00
8 4.0115e-03 8.9840e-02 2.0120e+00
9 6.4168e-08 3.5824e-04 2.0000e+00
Allo stesso risultato si arriva anche per via
I rapporti che indicano convergenza lineare e quadratica tendono a ze- teorica (sapendo qual è la radice), applican-
dn do lo sviluppo di Taylor alla formula dell’errore
ro, mentre i rapporti tendono a 2: ciò dice che la convergenza
( d n −1 )3 dell’algoritmo di Newton-Raphson. e consi-
derando che la radice è un punto di flesso
è cubica e che la costante asintotica vale 2.
non orizzontale.
_

5.7 Ancora esempi sul metodo di Newton-Raphson

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!).
appunti di calcolo numerico 63

Esempio
√ x

per x ≥ 0
Si consideri f ( x ) = √ .
− − x per x < 0
La radice di questa funzione è ξ = 0.
 √ 1
per x ≥ 0

2 x

0
Per la derivata prima, si ha f ( x ) = .
1
 √ per x < 0


2 −x Figura 5.14: Esempio in cui il metodo di
Se partiamo da x0 > 0 abbiamo Newton-Raphson oscilla tra due valori.

x0
x1 = x0 − = x0 − 2x0 = − x0
1

2 x0

Se partiamo da x0 < 0 abbiamo



− − x0
x1 = x0 − = x0 + 2(− x0 ) = − x0 .
1

2 − x0

Il metodo di Newton applicato alla funzione f , diventa quindi:

x n +1 = − x n , n = 0, 1, 2, . . .

Qualunque sia il valore iniziale x0 6= 0, si ha x1 = − x0 , x2 = − x1 = x0


... 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 0 ( xn ), occorre
evitare di prendere un punto iniziale in cui la f abbia una tangente
quasi orizzontale (e quindi il corrispondente valore di f 0 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 ) = x5 − 6, per la quale f 0 ( x ) = 5x4 .
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 richieden-
Figura 5.15: La funzione f ( x ) = x5 − 6
do una tolleranza 10−8 , sono necessarie 88 iterazioni per arrivare a
ξ = 1.430969081115725849. Vediamo in tabella, come cambia il nume-
ro delle iterazioni al variare di x0 :

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

_
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 Newton-
Raphson dove, al posto della derivata prima, si considera una sua
approssimazione.
Scriviamo la formula ricorsiva
f ( xn )
x n +1 = x n −
Cn
Per Cn = f 0 ( xn ) abbiamo la formula di Newton-Raphson, che pos-
siamo anche chiamare della tangente variabile perchè è il coefficiente
angolare della retta tangente a ( xn , f ( xn )) che interseca l’asse delle x
in xn+1 .
Ci possono essere altre scelte per Cn :

x Cn = f 0 ( x0 ): il valore di Cn è costante e dà vita al metodo della


tangente fissa.

x Cn =
f ( x1 ) − f ( x0 )
x1 − x0
: abbiamo sempre una costante che approssi-
ma la derivata f 0 ( x0 ) utilizzando i valori di x1 e x0 . Lo schema è
detto della secante fissa.

x Cn =
f ( x n ) − f ( x n −1 )
x n − x n −1
. La derivata f 0 ( xn ) è approssimata uti-
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. Attenzione! In letteratura viene descritto un
altro metodo (simile ma non lo stesso) con
In forma estesa, l’iterazione n + 1 della Regula Falsi si scrive come: il nome della Regula Falsi o Falsa Posizione
che genera i valori xn+1 in modo che la ra-
dice ξ sia sempre compresa tra le iterazioni
f ( xn )( xn − xn−1 ) successive.
x n +1 = x n −
f ( x n ) − f ( x n −1 )

Notiamo che, per innescare il metodo occorrono due valori iniziali,


x0 e x1 . Ma è richiesta solo la valutazione della funzione f a ciascun
passo (nessuna conoscenza della derivata prima). Per quanto riguarda l’accumulo degli errori
di arrotondamento, conviene utilizzare la for-
Da un punto di vista geometrico, nel metodo delle secanti il valore
mula così come è stata scritta in quanto è più
xn+1 è dato dall’intercetta sull’asse delle x della retta passante per "sicura" rispetto alla forma compatta in cui
x n , f ( x n ) e x n −1 , f ( x n −1 ). vengono raccolti i termini, data da

Per quanto riguarda l’ordine di convergenza si può dimostrare che x n −1 f ( x n ) − x n f ( x n −1 )


x n +1 =
f ( x n ) − f ( x n −1 )
si ha convergenza superlineare poichè vale la relazione
in quanto in quest’ultima, si può avere il fe-
p
nomeno della cancellazione numerica per
e n +1 = M p + 1 e n
p xn ≈ xn−1 e f ( xn ) f ( xn−1 ) > 0.
√ 00
1+ 5 f (ξ )
dove p = = 1.618 e M = 0 è la costante asitontica del Il valore p = 1.618 è la cosidetta sezione
2 2 f (ξ ) aurea, un numero molto importante nelle arti
metodo di Newton-Raphson, da cui e nella matematica (e il nome aureo deriva da
alcune sue proprietà che hanno da sempre
en+1 = M0.618 en1.618 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 = p1/s

dove s indica il numero delle funzioni coinvolte ad ogni iterazione


(per esempio: solo f , oppure f e f 0 , e così via), mentre p è l’ordine di
convergenza del metodo.
Sebbene il metodo di Newton-Raphson abbia ordine di convergen-
za più elevato della Regula Falsi, quest’ultimo è computazionalmente
più efficiente. Si ha infatti

Metodo p s E

Newton-Raphson 2 2 2 ≈ 1.414
Regula Falsi 1.618 1 1.618

5.10 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 0 ( x ) = ( x/2) − cos ( x ) Consideriamo come
x0 = 1.3 per entrambi i metodi e x1 = 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 xn f ( xn ) f 0 ( xn ) dn dn /d2n−1
0 1.3 -5.410581854E-01 0.382501171
1 2.714526871831 1.427962127E+00 2.26744846 1.41452687E+00
2 2.084760792766 2.157545986E-01 1.53401376 6.29766079E-01 0.314743565
3 1.944113685369 1.377189572E-02 1.33676314 1.40647107E-01 0.354627390
4 1.933811265085 7.60156095E-05 1.32199993 1.03024203E-02 0.520808008
5 1.933753764621 2.37200355E-09 1.32191743 5.75004640E-05 0.541742396
6 1.933753762827 -1.00668172E-16 1.79436599E-09 0.542710632

Per la Regula Falsi si ha:

f ( x n ) − f ( x n −1 )
n xn f ( xn ) dn dn /d1.618
n −1
x n − x n −1
0 1.3 -5.41058185E-01
1 1.35 -5.20098358E-01 0.419196552
2 2.590702853065 1.15448972E+00 1.34970922 1.24070285E+00
3 1.735341043061 -2.33640901E-01 1.62285784 8.55361810E-01 0.603386215
4 1.879309845941 -6.98346071E-02 1.13779020 1.43968803E-01 0.185374473
5 1.940687248331 9.19996444E-03 1.28768192 6.13774024E-02 1.412310765
6 1.933542654410 -2.79035921E-03 1.32673746 7.14459392E-03 0.653100215
7 1.933752971771 -1.04570967E-06 1.32176540 2.10317362E-04 0.623935239
8 1.933753762918 1.19824825E-10 1.32191686 7.91146198E-07 0.704441455
9 1.933753762827 -1.00668172E-16 9.06448250E-11 0.676026603

Attraverso gli scarti, abbiamo fatto una stima della costante asin-
totica dell’errore, considerando che, al limite per k → ∞, xn → ξ. 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 defini-
zione teorica e considerando ξ ≈ xn .
| f 00 (ξ )|
Per il metodo di Newton-Raphson dobbiamo calcolare M =
2| f 0 (ξ )|
mentre per la Regula Falsi dobbiamo considerare il valore M 0.618 .
Poichè f 00 ( x ) = 1/2 + sin ( x ), abbiamo, per ξ ≈ x6 (di Newton-
Raphson) o, equivalentemente per ξ ≈ x9 (della Regula Falsi), in
pratica ξ ≈ 1.933753762827, f 0 (ξ ) = 1.32191743 e f 00 (ξ ) = 1.4348509.
Otteniamo quindi: M ≈ 0.542715784 e M0.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 (ξ ) = 0.
In tal caso, la radice non è una radice semplice ma è una radice
multipla. Un conto è dire che una radice è multipla,
cioè la stessa radice si ripete per un certo
Definizione 5.11.1 Data un’equazione f ( x ) = 0, una radice ξ si dice numero di volte. Un conto è dire che una
funzione ha molteplici radici (distinte, diverse
multipla con molteplicità r se vale: f (ξ ) = f 0 (ξ ) = . . . = f r−1 (ξ ) = 0 tra loro).
appunti di calcolo numerico 67

e f r (ξ ) 6= 0. Ciò significa che la funzione f ( x ) può essere scritta come


f ( x ) = ( x − ξ )r q( x ), dove q( x ) è una funzione per cui vale q(ξ ) 6= 0 o
limx→ξ q( x ) 6= 0.

Esempio
Consideriamo l’equazione x2 − 8x + 16 = 0. Si tratta di trovare le
radici di un polinomio di grado 2. L’equazione che abbiamo scritta
si può riscrivere, in modo del tutto equivalente, come ( x − 4)2 = 0.
Figura 5.18: Radice doppia di f ( x ) = x2 −
Troviamo una radice, da contarsi due volte, cioè ξ = 4 è una radice 8x + 16.
doppia, o con molteplicità r = 2. Da f ( x ) = x2 − 8x + 16 = ( x − 4)2
ricaviamo f 0 ( x ) = 2x − 8 = 2( x − 4) e f 00 ( x ) = 2. Risulta, quindi:
f (4) = f 0 (4) = 0, mentre f 00 (4) 6= 0.
_
Quando si ha una radice multipla, il metodo di Newton-Raphson
diventa un metodo del primo ordine in quanto la formula che lega
l’errore al passo n + 1 con l’errore al passo n diventa: Il procedimento da seguire per arrivare a que-
sto risultato è del tutto simile a quanto è stato
r−1 fatto nell’ipotesi in cui f 0 (ξ ) 6= 0. Si consiglia
e n +1 = en di ricavare questo risultato come esercizio.
r
r−1
da cui la costante asintotica è M = . Per poter avere un metodo
r
che sia di nuovo a convergenza quadratica, occorre modificare l’algo-
ritmo, ottenendo la formula di Newton-Raphson modificata, nel modo
seguente:

f ( xn )
x n +1 = x n − r
f 0 ( xn )

Da un punto di vista geometrico, la nuova approssimazione xn+1 è


dato dall’intercetta con l’asse delle ascisse della retta data da y =
f 0 ( xn )( x − xn ) + r f ( xn ) (retta che è parallela alla retta tangente alla f
in xn )

Esempio
Riprendiamo la funzione f ( x ) = x2 − 8x + 16 (di cui sappiamo
che ξ = 4 è una radice doppia). Applicando il metodo di Newton-
x2 − 8xn + 16
Raphson, abbiamo xn+1 = xn − n . La stessa formula si
2xn − 8
( x n − 4)2 xn − 4 xn + 4
può riscrivere come xn+1 = xn − = xn − = .
2( x n − 4) 2 2
La convergenza è 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 = xn − ( xn − 4) = 4.
2( x n − 4)
Qualunque sia il punto iniziale, arriviamo alla radice in una sola
iterazione! Per esercizio si dimostri che, data la funzione
La funzione che abbiamo preso in esame è particolare, essendo un f ( x ) = ( x − ξ )2 = 0, il metodo di Newton-
Raphson modificato converge a ξ in una sola
polinomio di grado 2, perciò abbiamo una sola iterazione per arrivare iterazione qualunque sia il punto x0 iniziale.
a convergenza.
68 annamaria mazzia

Figura 5.19: Prima iterazione dello schema di


Newton-Raphson e dello schema diNewton-
Raphson modificato per approssimare la radi-
ce doppia della funzione f ( x ) = x2 − 8x +
16 = ( x − 4)2 .

_
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 conver-


genza o meno della successione di valori xn−1 , xn , xn+1 , generata
dallo schema iterativo viene effettuato sugli scarti dn = | xn − xn−1 |
piuttosto che sugli errori (assoluti) en = |ξ − xn |, poichè, se avessimo
informazioni sugli errori, conosceremmo anche il valore di ξ (che, in
generale, non è noto). Fissata una certa tolleranza tol, arrestiamo lo
schema iterativo quando dn < tol (o quando dn+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 per metodi lineari. Sia tol la tolleranza
richiesta per approssimare ξ utilizzando gli scarti. Sappiamo che, per
n grande e se il metodo converge, vale la relazione en+1 ≈ Men dove
M < 1, M 6= 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 di calcolo numerico 69

Quindi

en+1 ≤ M(en+1 + dn+1 ) vale a dire (1 − M )en+1 ≤ Mdn+1

Se siamo arrivati ad un indice n per cui dn+1 ≤ tol, allora vale

M M
e n +1 ≤ d ≤ tol
1 − M n +1 1−M

M M
Perciò, per < 1 (vale a dire per M < 1/2), se dn+1 ≤ tol anche La disequazione < 1 si può riscrive-
1−M 1−M
en+1 ≤ tol. Se, invece, M ≥ 1/2, allora l’errore può essere un po’ più re come M < 1 − M da cui 2M < 1 ovvero
M < 1/2.
grande della tolleranza richiesta.
Se tol = 10−10 e M = 0.8 (maggiore
Per quanto riguarda il metodo della secante variabile, poichè è di 1/2), l’errore sarà minore o uguale a
superlineare, in base alla definizione alternativa che abbiamo dato, 4 · 10−10 .

si può dire che en+1 ≈ Mn+1 en con Mn+1 → 0: si può vedere come
un caso limite di convergenza lineare con fattore di convergenza che
tende a zero, e quindi il controllo dello scarto permette un buon
controllo 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, possiamo sostiture l’errore con lo scarto da cui dn ≈
p
Mdn−1 .
Nel caso in cui p = 1, si ha:

dn ≈ Mdn−1
dn−1 ≈ Mdn−2
dn−2 ≈ Mdn−3
.. ..
. .
d2 ≈ Md1
d1 ≈ Md0

Partendo dalla prima relazione abbiamo:

dn ≈ Mdn−1 ≈ M2 dn−2 ≈ M3 dn−3 ≈ . . . ≈ Mn d0 Figura 5.20: Grafico con i profili di convergen-


za per i metodi di Newton-Raphson, secan-
te variabile e punto fisso per trovare lo zero
Troviamo una relazione tra dn e d0 . Passando ai logaritmi: della funzione f ( x ) = x + ln ( x ) (e appli-
cando lo schema di punto fisso alla funzione
g( x ) = e− x ).
log10 (dn ) = n log10 ( M ) + log10 (d0 )

Abbiamo un’equazione del tipo y = ax + b dove y = log10 (dn ) e


x = n, che rappresenta l’equazione della retta nel nostro grafico Nel caso in cui p 6= 1 il discorso si fa più
complicato (e non staremo qui ad analizzarlo
semilogaritmico, e la pendenza della retta vale a = log10 ( M ). Dalla
nei dettagli).
pendenza della retta possiamo dunque risalire al valore della costante
asintotica M.
70 annamaria mazzia

5.13 Osservazioni sull’ordine di convergenza di un me-


todo iterativo

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 è Se stiamo applicando il metodo di Newton-
Raphson e stimando M tramite la formu-
un punto di flesso non orizzontale il metodo ha convergenza cubica; la dn+1 /d2n o tramite la formula teorica
analogamente nello schema di punto fisso, se g0 (ξ ) = 0 allora il | f 00 ( xn )/(2 f 0 ( xn )| troviamo dei valori che
metodo non è più lineare... tendono ad un limite ben preciso diverso da
zero e da infinito, allora significa che il meto-
Se non abbiamo sufficienti informazioni sulla radice o sul punto fis- do ha ordine p = 2 e che la stima che stiamo
so che vogliamo approssimare, come facciamo a capire qual è l’ordine facendo è corretta. Ma se, seguendo questa
strada, troviamo dei valori di M che tendono
di convergenza del metodo iterativo? Una strada è vedere se l’ap- a zero o a infinito, significa che l’ordine del
prossimazione della costante asintotica usando gli scarti o la formula 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:
| x n +1 − ξ |
lim =M
n→∞ | xn − ξ | p
Utilizzando gli scarti come approssimazione dell’errore possiamo Deve essere p ≥ 1 e M numero reale
positivo.
dire che, se p è l’ordine di convergenza, allora, al limite per n che
tende all’infinito, si ha
| x n +1 − x n | d n +1
→M ovvero → M.
| x n − x n −1 | p (dn ) p
Partendo dall’iterazione 1 (lo scarto d0 ha un significato fittizio e non
lo usiamo) fino ad arrivare all’iterazione n + 1, abbiamo le seguenti
approssimazioni per M:
d2 d3 d4 dn d n +1
≈ M, ≈ M, ≈ M, ... ≈ M, ≈M
( d1 ) p ( d2 ) p ( d3 ) p ( d n −1 ) p (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). Perciò possiamo eguagliarli a
due a due in modo da poter avere una relazione che ci permetta di
ricavare p:
d2 d3 d2 d3
p ≈M≈ p =⇒ p ≈
( d1 ) ( d2 ) ( d1 ) ( d2 ) p
d3 d4 d3 d4
≈M≈ =⇒ ≈
( d2 ) p ( d3 ) p ( d2 ) p ( d3 ) p
.. ..
. .
dn d dn d
≈ M ≈ n+1p =⇒ ≈ n+1p
( d n −1 ) p (dn ) ( d n −1 ) p (dn )
appunti di calcolo numerico 71

d2 d3
Da ≈ ricaviamo facilmente
( d1 ) p ( d2 ) p
 p  p
d2 (d ) p d1 d3 d2
≈ 1 p = oppure, passando ai reciproci, si ha ≈
d3 ( d2 ) d2 d2 d1

Passando ai logaritmi si ha
 
d2
    log  
d2 d1 d d3
log ≈ p log da cui p≈  3 log
d
d3 d2 d1 In modo equivalente, p ≈  2
log d2
d2 log
d1

Lavorando allo stesso modo sugli altri rapporti tra gli scarti abbiamo:
 
d n +1
    log
d3 dn d
log log In modo equivalente p ≈  n 
dn
d d n +1 log
p≈  4, ... p≈   d n −1
d2 d n −1
log log
d3 dn
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 dn (N-R) p (N-R) dn (R-F) p (R-F)
1 1.41452687E+00 5.E-02
2 6.29766079E-01 1.24070285E+00
3 1.40647107E-01 1.8526 8.55361810E-01 -0.11581
4 1.03024203E-02 1.7436 1.43968803E-01 4.7913
5 5.75004640E-05 1.9849 6.13774024E-02 0.47845
6 1.79436599E-09 1.9997 7.14459392E-03 2.5226
7 2.10317362E-04 1.6392
8 7.91146198E-07 1.5836
9 9.06448250E-11 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 n −1
applicare la formula p ≈ log / log .
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.
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 log 0 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 ) = x2 − 5x + 9

(a) calcolare analiticamente il valore del punto fisso;

(b) determinare il fattore di convergenza M dello schema del punto


fisso;

(c) calcolare le approssimazioni x1 , x2 e x3 partendo prima da x0 = 1


e poi da x0 = 2.5 e giustificandone il diverso comportamento.

Svolgimento

(a) ξ è punto fisso della funzione g se verifica g(ξ ) = ξ.


Imponiamo dunque la condizione g(ξ ) = ξ. Ricaviamo ξ 2 − 5ξ +
9 = ξ, ovvero ξ 2 − 6ξ + 9 = 0, cioè (ξ − 3)2 = 0, da cui ξ = 3 è
punto fisso della g.

(b) Il fattore di convergenza è M = g0 (ξ ).


Poichè g0 ( x ) = 2x − 5, si ha g0 (ξ ) = g0 (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 Figura 5.21: Esercizio sullo schema di punto
seconda del punto iniziale da cui si fa partire il metodo. fisso

Per x0 = 1 si ha Per x0 = 2.5 si ha

k xk g( xk ) k xk g( xk )
(c) 0 1 5 0 2.5 2.75
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 x0 = 1 il metodo non converge, mentre per x0 = 2.5 il metodo
converge. La diversità di comportamento si giustifica graficamente,
come si può vedere dalla Figura 5.21, osservando che per x0 = 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 73

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 x1 , x2 e x3 con lo schema di Newton-


Raphson, partendo da x0 = 0.5;

(c) Calcolare le approssimazioni x2 e x3 con lo schema della Regula-


Falsi partendo da x0 = 0.5 e x1 calcolato al punto b).

Stimare, inoltre il fattore di convergenza del metodo di Newton-Raphson


assumendo ξ ≈ x3 .

Svolgimento

(a) La funzione ammette valori opposti all’estremo dell’intervallo.


Infatti f (0.5) = −1.82944154 e f (2) = 3.07944154. Quindi, per il
teorema del valor intermedio, esiste almeno una radice. Inoltre
3 2x2 − 2x + 3
f 0 ( x ) = 2( x − 1) + = è sempre positivo nell’inter-
x x
2
vallo dato, (la parabola 2x − 2x + 3 ha discriminante negativo e
quindi è sempre positiva). Perciò, da f 0 ( x ) > 0 concludiamo che la
f è crescente. Di qui l’unicità della radice.

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


seguenti valori:

k xk f ( xk ) f 0 ( xk )
0 0.50000000E+00 -0.18294415E+01 0.50000000E+01
1 0.86588831E+00 -0.41401211E+00 0.31964267E+01
2 0.99541173E+00 -0.13775443E-01 0.30046517E+01
3 0.99999643E+00

Dalla tabella sembra che i valori della successione tendano a 1. E,


infatti, si vede facilmente che f (1) = 0 e quindi 1 è il valore che
stiamo cercando. Per stimare la costante asintotica dell’errore del
metodo di Newton-Raphson assumendo ξ ≈ x3 , occorre usare la
formula
| f 00 ( x3 )|
M≈
2| f 0 ( x3 )|

3
dove, nel caso specifico, vale f 0 ( x ) = 2( x − 1) + e f 00 ( x ) =
x
3
2− 2.
x
Usando il valore trovato per x3 si ricava M ≈ 0.16667004E + 00.
74 annamaria mazzia

(c) Partendo da x0 e x1 del metodo di Newton-Raphson, la Regula


Falsi dà:

f ( x n ) − f ( x n −1 )
k xk f ( xk )
x n − x n −1
0 0.50000000E+00 -0.18294415E+01 -
1 0.86588831E+00 -0.41401211E+00 0.38684741E+01
2 0.97291038E+00 -0.81656072E-01 0.31054906E+01
3 0.99920448E+00

Esercizio 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 x1 , 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 0 = 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 ) è g0 ( x ) = p .
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
q
=⇒ 0 ≤ 1 − (1 − x )2 ≤ 1 =⇒ 1 ≤ p
1 − (1 − x )2
appunti di calcolo numerico 75

Perciò g0 ( x ) è sempre maggiore di 1 e lo schema del punto fisso


non può convergere.

(b) Da f ( x ) = sin ( x ) + x − 1 si ha f 0 ( x ) = cos ( x ) + 1 e f 00 ( x ) =


− sin ( x ). Il metodo di Newton-Raphson è:

sin ( x ) + x − 1
x k +1 = x k − .
cos ( x ) + 1

Utilizziamo la notazione M1 e M2 per indicare la stima della


costante asintotica dell’errore mediante le formule
| x k +1 − x k | | f 00 ( xk )|
M1 = o M2 =
| x k − x k −1 | 2 2| f 0 ( xk )|

Partendo da x0 = 0.1 si ottengono i seguenti valori:

k xk f ( xk ) f 0 ( xk ) | x k − x k −1 |
0 0.1 -0.80016658E+00 0.19950042E+01 -
1 0.50108517E+00 -0.18537249E-01 0.18770618E+01 0.40108517E+00
2 0.51096084E+00 -0.23565955E-04 0.18722750E+01 0.98756733E-02
3 0.51097343E+00 -0.38737166E-10 - 0.12586802E-04

(c) La stima del fattore di convergenza è dato da M1 = 0.12905712E+00


o da M2 = 0.13059731E+00, a seconda della strada scelta per dare
la stima.

Esercizio 5.14.4 Data l’equazione f ( x ) = ln ( x ) + x2 − x = 0,

(a) si provi, anche solo graficamente, che l’equazione ammette l’unica


radice ξ = 1 nell’intervallo [0.7, 2.3];

(b) si applichino due iterazioni del metodo dicotomico (o delle bisezio-


ni) a partire dall’intervallo dato, chiamando con x0 l’ultimo valore
ottenuto con tale metodo;

(c) a partire da x0 del punto (b) si calcoli l’approssimazione x1 con il


metodo di Newton-Raphson;

(d) a partire da x0 e x1 del punto (c) si calcolino le approssimazioni x2


e x3 con il metodo della Regula Falsi;

(e) considerata la radice esatta ξ = 1, si calcoli la costante asintotica di


convergenza del metodo della Regula Falsi.

Svolgimento

(a) Da f ( x ) = 0 si ricava ln ( x ) = x − x2 , per cui graficamente si può


vedere che le due curve si intersecano in un solo punto, che vale
ξ = 1.
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’inter-


1
vallo dato. La derivata prima è: f 0 ( x ) = + 2x − 1, che possiamo
x
0 1 + 2x2 − x
anche scrivere come f ( x ) = : numeratore e denomina-
x
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 2x2 − x + 1 > 0). Da f 0 ( x ) > 0 per ogni x
segue che f è crescente e, quindi, ammette un’unica radice.

(b) Applichiamo il metodo delle bisezioni a partire dall’intervallo


dato (utilizziamo la notazione xs per indicare l’estremo sinistro
dell’intervallo, xd per indicare l’estremo destro dell’intervallo, xc ,
il punto medio dell’intervallo considerato):

iter. xs f ( xs ) segno xd f ( xd ) segno xc f ( xc )


1 0.7 -0.566674944 - 2.3 3.822909123 + 1.5 1.155465108
2 0.7 -0.566674944 - 1.5 1.155465108 + 1.1 0.205310180

Il valore x0 è dunque x0 = 1.1.

f ( xk )
(c) Il metodo di Newton-Rapshon è xk+1 = xk − dove f 0 =
f 0 ( 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:

f ( x k ) − f ( x k −1 )
k xk f ( xk )
x k − x k −1
1 1.002654656 0.5312842078E-02 0.2054513650E+01
2 1.000068720 0.1374413812E-03 0.2001364094E+01
3 1.000000046

(e) Considerato che la radice esatta è ξ = 1, la costante asintotica


di convergenza della Regula Falsi si calcola utilizzando l’espres-
f 00 (ξ ) 0.618 1
sione M = | 0 | . Da f 0 ( x ) = + 2x − 1 segue f 0 (1) = 2
2 f (ξ ) x
1 1 0.618
e f 00 ( x ) = − 2 + 2, da cui f 00 (1) = 1, per cui M = =
x 4
0.4245481.
appunti di calcolo numerico 77

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


to 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 < 0.


Quindi esiste almeno una radice.

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
f 0 (x) = − 1. Si ha:
3 + 2x − x2

k xk f ( x k −1 ) f 0 ( x k −1 ) dk
0 1.00000000000000
1 0.1386294361E+01 0.3862943611E+00 -0.1000000000E+01 0.3862944E+00
2 0.1354628119E+01 -0.3801950159E-01 -0.1200631922E+01 0.3166624E-01
3 0.1354392386E+01 -0.2788886518E-03 -0.1183069825E+01 0.2357330E-03

Ci fermiamo alla terza iterazione, perchè lo scarto è diventato


minore della tolleranza 10−3 richiesta.

| x3 − x2 |
Usando gli scarti, la stima per la costante asintotica vale =
| x2 − x1 |2
0.2350863. Per una stima dell’errore commesso, si può utilizza-
re il fatto che, per il metodo di Newton-Raphson vale ek < dk e,
quindi, dire che e3 ≤ 0.2357330E − 03. Se si vuole essere parti-
colarmente precisi, dalla relazione dk+1 ≈ ek (ricavata nell’Esem-
d
pio 5.6), e considerando che k+2 1 ≈ M, abbiamo e3 ≈ d4 ≈ Md23 =
dk
2
0.2350863 · (0.2357330E − 03) = 1.306375E − 08.
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 ) = x2 − 8x + 20.25 calcolarne analiticamente il punto
fisso e determinare:

(a) il fattore di convergenza M1 dello schema del punto fisso e succes-


sivamente le approssimanti x1 , x2 , x3 usando prima x0 = 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 x0 = 4

(c) le approssimanti x1 , x2 , x3 ottenute con lo schema di Newton-


Rapshon modificato e x0 = 4.

Svolgimento Da g( x ) = x si ha x2 − 8x + 20.25 = x. Risolvendo


l’equazione di secondo grado x2 − 9x + 20.25 = 0 si trova la radice
doppia (con molteplicità r = 2) ξ = 4.5.

(a) Conoscendo il punto fisso, possiamo calcolare M1 = | g0 (4.5)| = 1.


A priori non possiamo dire nulla sulla convergenza dello schema.
Partendo da x0 = 4 e applicando lo schema troviamo x1 = 4.25,
x2 = 4.3125, x3 = 4.34765625. Si vede che lo schema va a conver-
genza.
Partendo da x0 = 5.5 si ha x1 = 6.5, x2 = 10.5, x3 = 46.5. Il metodo
sta divergendo.
Il diverso comportamento è dovuto proprio al fatto che g0 (ξ ) = 1.
Consideriamo ora f ( x ) = g( x ) − x = x2 − 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 0 ( x ) = 2( x − 4.5)).

(b) Se pensiamo che il metodo di Newton-Raphson abbia conver-


| f 00 (ξ )
genza quadratica, ci accorgiamo che la formula M2 = |
2| f 0 ( ξ )
non può essere applicata perché f 0 (ξ ) = f 0 (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 M2 = 0.5.
Il metodo di Newton-Raphson è xn+1 = xn − ( xn − 4.5)/2. Parten-
do da x0 = 4 si ha x1 = 4.25 , x2 = 4.375, x3 = 4.4375 (si vede bene
come la convergenza sia lineare.)
appunti di calcolo numerico 79

(c) Il metodo di Newton-Raphson modificato diventa xn+1 = xn −


2( xn − 4.5)/2 = xn − ( xn − 4.5) = 4.5
Partendo da x0 = 4 otteniamo x1 = x2 = x3 = 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 g0 (ξ ) 6= 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 g0 (ξ ) = 0 e g00 (ξ ) 6= 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 par-


ticolare di schema di punto fisso? Che cosa si può dedurre? Per-
ché diciamo che lo schema di Newton-Raphson è generalmente
convergente?

11. Si ricavi l’ordine di convergenza e la costante asintotica del me-


todo di Newton-Raphson, nel caso generale. Quale ipotesi viene
fatta?
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 000 (ξ ) 6= 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

Non vi è alcuna incompatibilità fra l’esatto


6.1 Un problema reale e il poetico. Il numero è nell’arte come nella
scienza. L’algebra è nell’astronomia e l’astro-
nomia confina con la poesia. L’anima dell’uo-
mo ha tre chiavi che aprono tutto: la cifra, la
lettera, la nota. Sapere, pensare, sognare.
Victor Hugo
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 tem-
peratura. 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
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
= a0 + 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 a0 , a1 , a2 e a3 sono
le costanti della curva di calibrazione. Facendo un cambiamento di
1
variabile e, precisamente, ponendo y = e x = ln ( R), la curva di R T
T oC
calibrazione diventa il polinomio Ohm
1101.0 25.113
911.3 30.131
y = a0 + a1 x + a2 x 2 + a3 x 3 636.0 40.120
451.1 50.128
Se si riescono a calcolare le costanti a0 , a1 , a2 e a3 , allora si può usare Tabella 6.1: Valori di Resistenza e Tempera-
tura di un termistore.
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
per trovare le costanti della curva di calibrazione? Per prima cosa, si
passa dai valori della temperatura in gradi Celsius ai gradi Kelvin, x = ln ( R) y = 1/T
mediante la formula K =o C + 273.15, poi dai valori R e T, passiamo 7.0040 3.3527×10−3
6.8149 3.2973×10−3
alle variabili x e y (costruendo la nuova Tabella, riportata di lato). 6.4552 3.1921×10−3
6.1117 3.0933×10−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 co-
stanti 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
Figura 6.1: I valori x e y della Tabella messi
ragionevole si addica all’insieme dei dati. Se i dati sono accurati, ha in grafico.
senso richiedere che la funzione interpoli i dati (cioè passi esattamente Le ascisse xi sono dette anche nodi di
interpolazione.
per le coppie di punti): v( xi ) = yi .

6.2 Interpolazione

Una funzione di interpolazione v( x ) serve per vari scopi.

x Possiamo usare la v( x ) per trovare valori approssimati y in punti


x diversi da quelli assegnati x0 , x1 , . . . xn . Se x si trova all’interno Figura 6.2: Il polinomio che passa esat-
dell’intervallo che contiene le ascisse dei dati assegnati si parla di tamente per i dati x e y assegnati è
y = 3.0091 × 10−3 − 4.5307 × 10−4 x +
interpolazione. Se invece x si trova all’esterno dell’intervallo si 1.0853 × 10−4 x2 − 5.26 × 10−6 x3 .
parla di estrapolazione.

x 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 combina-


zione lineare di funzioni base di un qualche appropriato spazio di
funzioni, cioè si possa scrivere come

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

dove ci , i = 0, 1, . . . , n sono i coefficienti incogniti (o parametri) da


determinare in base ai dati in possesso, mentre φi sono le funzioni
base che assumiamo linearmente indipendenti. Le funzioni φ0 , φ1 , . . . , φn si dico-
no linearmente indipendenti se
Esempi di interpolazione sono dati dall’interpolazione polinomiale,
c0 φ0 ( x ) + . . . cn φn ( x ) ≡ 0 per ogni
dall’interpolazione polinomiale a tratti, dall’interpolazione trigono- x 6= 0 se e solo se tutti i coefficienti sono
metrica. Noi ci limitiamo a studiare l’interpolazione polinomiale e a nulli c0 = . . . = cn = 0.

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 ) = yi . Parleremo, dunque, di
polinomio di interpolazione p( x ) (v( x ) ≡ p( x )).
Il processo di interpolazione si basa su due stadi: Il primo punto è fatto una volta per tutte, una
volta fissata la base e noto l’insieme dei punti

x costruire la funzione interpolante, cioè determinare i coefficienti da interpolare. Il secondo punto può essere
applicato tutte le volte che si vuole valutare
c0 , c1 , . . . , cn per un’assegnata base φ0 , φ1 , . . . , φn ; la funzione interpolante.

x valutare la funzione interpolante in un assegnato punto x.


appunti di calcolo numerico 83

6.3 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 ) = pn ( x ) un polinomio di grado n dato da
p n ( x ) = c0 + c1 x + . . . + c n x n
Date n + 1 coppie di punti ( x0 , y0 ), ( x1 , y1 ), . . ., ( xn , yn ), vogliamo Ricordiamo che, un polinomio di grado n ha
n + 1 coefficienti e che, date n + 1 coppie di
trovare gli n + 1 coefficienti c0 , c1 , . . . cn tali che p( xi ) = yi , i = 0, . . . , n.
punti, il polinomio interpolatore sarà di grado
Assumiamo, inoltre, che le ascisse delle coppie dei punti siano n.
distinte, cioè xi 6= x j , per i 6= j.

6.3.1 Funzioni base monomiali

Utilizziamo come funzioni base i monomi x0 , x1 , x2 , . . . , x n . In questo caso, le funzioni base φi ( x ) sono
date da φi ( x ) = xi , 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 ) = p1 ( x ) = c0 + c1 x.
Le condizioni di interpolazione diventano:
p1 ( x0 ) = y0 ⇐⇒ c0 + 1c1 = 1
p1 ( x1 ) = y1 ⇐⇒ c0 + 2c1 = 3
Abbiamo due equazioni in due incognite c0 e c1 . Risolvendo il sistema
2 × 2 otteniamo c1 = 2 e c0 = −1, quindi p1 ( x ) = 2x − 1.
_

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 y2 ben diverso da quello
predetto da p1 in x2 = 4. Difatti p1 ( x2 ) = 7, nell’esempio precedente,
mentre ora al valore di x2 = 4 deve corrispondere y2 = 3.
Cerchiamo il polinomio di grado 2, quindi, della forma p2 ( x ) =
c0 + c1 x + c2 x2 che passa attraverso i punti dati.
Le condizioni di interpolazione adesso sono:

 p2 ( x0 ) = c0 + 1c1 + 1c2 = 1


p2 ( x1 ) = c0 + 2c1 + 4c2 = 3


p2 ( x2 ) = c0 + 4c1 + 16c2 = 3

84 annamaria mazzia

Abbiamo un sistema lineare di 3 equazioni in 3 incognite, la cui


7 2
soluzione è: c0 = − , c1 = 4, c2 = − .
3 3
Il polinomio è p2 ( x ) = (−2x2 + 12x − 7)/3. Per x = 3 si ha
11
p2 (3) = = 3.666666667, valore ben diverso da p1 (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 quadrati-
_ ca
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 c0 , c1 , . . . , cn :



 pn ( x0 ) = y0 ⇐⇒ c0 + c1 x0 + c2 x02 + . . . + cn x0n = y0

p ( x ) = y1 ⇐⇒ c0 + c1 x1 + c2 x12 + . . . + cn x1n = y1

 n 1



pn ( x2 ) = y2 ⇐⇒ c0 + c1 x2 + c2 x22 + . . . + cn x2n = y2
... ..




 .

pn ( xn ) = yn ⇐⇒ c0 + c1 xn + c2 xn2 + . . . + cn xnn = yn

In forma compatta, sotto forma matriciale le equazioni del sistema si Questo argomento verrà approfondito nel
Capitolo 9, dove rimandiamo per i dettagli.
possono scrivere come
1 x0 x02 . . . x0n
    
c0 y0
1 x x 2 . . . xn   c  y 
 1 1 1   1  1
1 x2 x22 . . . x2n   c2  =  y2 
    
 .. .. .. ..   ..   .. 
    
. . . .  .   . 
1 xn xn . . . xnn
2 cn yn
La matrice dei coefficienti è una matrice ben nota in letteratura
e prende il nome di matrice di Vandermonde. È una matrice con Alexandre-Theophile Vandermonde, (1735-
1796), abbandonò una carriera da violinista
determinante diverso da zero, e quindi il sistema ammette una ed una
per dedicarsi alla matematica quando aveva
sola soluzione. Osserviamo che la prima colonna ha tutti gli elementi 35 anni. Si occupò di vari problemi di algebra,
uguali a 1, la seconda colonna ha le ascisse dei punti di appoggio, la di topologia, calcolo combinatoriale, e teoria
dei determinanti.
terza colonna ha i quadrati di esse, e così via.

Perciò, date n + 1 coppie di punti di appoggio ( xi , yi ), i = 0, . . . , n,


con ascisse distinte xi , esiste un unico polinomio interpolatore
p( x ) di grado al più n tale che p( xi ) = yi , i = 0, . . . , n.

Tuttavia, la matrice di Vandermonde non ha buone proprietà:


difatti è una matrice malcondizionata, e questo lo si osserva al crescere
di n in quanto la soluzione del sistema diventa inaccurata, qualunque Una matrice A è malcondizionata quando,
a piccole variazioni sui coefficienti della ma-
metodo venga utilizzato per risolverlo.
trice, corrispondono grandi variazioni nella
Questo approccio ci è servito per dimostrare che il polinomio di soluzione del sistema lineare Ax = b
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.
appunti di calcolo numerico 85

6.3.2 Polinomi di Lagrange

Scriviamo il polinomio p( x ) con i coefficienti ci uguali alle ordinate


dei punti d’appoggio yi , ci ≡ yi : Così facendo i coefficienti ci non sono inco-
gnite! Bisogna ora capire come scrivere le
p( x ) = pn ( x ) = y0 φ0 ( x ) + . . . yn φn ( x ) 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 xi , soddisfano la relazione Joseph Louis Lagrange (1736-1813) nacque
 a Torino (come Giuseppe Luigi Lagrangia)
0 se i 6= j e si trasferì in Francia, a Parigi, dove diven-
L j ( xi ) = ne cittadino francese adottando la traduzione
1 se i = j francese del suo nome. Matematico e astro-
nomo, diede un importante contributo alla
In questo modo, il polinomio pn ( x ) = ∑nj=0 L j ( x ) · y j è tale che meccanica classica e celeste e alla teoria dei
numeri.
pn ( xi ) = yi cioè soddisfa la condizione di interpolazione, per ogni
i = 0, . . . , n.
I polinomi di Lagrange sono definiti dalla relazione: Ricordiamo che, dati n valori w1 , w2 , . . . , wn
usiamo la seguente simbologia per indicare
n
(x − x )
∏ (x j − xkk )
la loro somma e il loro prodotto, rispettiva-
L j (x) = mente:
k =0
k6= j n
∑ w i = w1 + w2 + w3 + . . . + w n
In forma estesa abbiamo i =1
n
( x − x0 ) · · · ( x − x j−1 )( x − x j+1 ) · · · ( x − xn ) n
x − xk ∏ w i = w1 · w2 · w3 · . . . · w n
( x j − x0 ) · · · ( x j − x j−1 )( x j − x j+1 ) · · · ( x j − xn ) k∏
L j (x) = = i =1
x
=0 j
− xk .
k6= j

Esempio Siano date le tre coppie di punti dell’esempio prece-


dente (1, 1), (2, 3), (4, 3). I polinomi di Lagrange sono:

( x − 2)( x − 4) ( x − 2)( x − 4)
L0 ( x ) = =
(1 − 2)(1 − 4) 3
Figura 6.4: Polinomi di Lagrange L0 ( x ),
( x − 1)( x − 4) ( x − 1)( x − 4) L1 ( x ), L2 ( x ), con x0 = 1, x1 = 2, x2 = 4.
L1 ( x ) = =−
(2 − 1)(2 − 4) 2 Si osservi, per ciascuno di essi, la proprie-
tà per la quale L j ( xi ) = 1 se i = j e
( x − 1)( x − 2) ( x − 1)( x − 2) L j ( xi ) = 0 se i 6= j.
L2 ( x ) = =
(4 − 1)(4 − 2) 6
Il polinomio si scrive, quindi, come
1 3 3
p2 ( x ) = L0 ( 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 yi 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 xi . Per ipotesi, i punti xi


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 ) = yi , i = 0, . . . , n.
In queste ipotesi, l’errore che si commette interpolando la funzione
f con un polinomio p( x ) di grado n vale
n
f (n+1) (ξ ( x ))
f ( x ) − p( x ) =
( n + 1) ! ∏ ( x − xi )
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 ri-


sultato 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). Ap-
plicando 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 La derivata n + 1-sima di un polinomio di gra-
do n è una quantità nulla, mentre la derivata
G ( n +1) ( ξ ) = f ( n +1) ( ξ ) − S ( n + 1 ) ! n + 1-sima di un polinomio di grado n + 1,
quale è F ( x ), vale (n + 1)!.
Si ha perciò:
f (t) − p(t) f ( n +1) ( ξ )
f ( n +1) ( ξ ) − S ( n + 1 ) ! = 0 ovvero =S=
F (t) ( n + 1) !
Considerando, ora, x al posto di t, e scrivendo ξ come funzione di x
(in quanto il valore di ξ dipende da x) e scrivendo in forma estesa il
polinomio F ( x ), otteniamo
n
f (n+1) (ξ ( x ))
f ( x ) − p( x ) =
( n + 1) ! ∏ ( x − xk )
k =0

Il resto normalmente è incognito ma se conosciamo la f e una maggio-


n
razione della f (n+1) , e abbiamo un limite superiore per | ∏ ( x − xk )|,
k =0
allora possiamo maggiorare l’errore di interpolazione.
appunti di calcolo numerico 87

6.3.4 Differenze divise e formula di Newton

Uno dei punti forti della rappresentazione di Lagrange è che se


alcuni dati cambiano (ad esempio il valore di y j per un certo j) allora
il cambiamento è immediatamente visibile nell’intero polinomio di
interpolazione. Uno dei punti deboli, invece, è la procedura per
valutare pn ( x ). Con la formula di Newton, al contrario, abbiamo un
utile compromesso.
Le funzioni base che ora consideriamo sono
j −1
φj ( x ) = ∏ ( x − xi ) j = 0, 1, . . . , n
i =0

Questa volta, scriveremo il polinomio di interpolazione come:

p( x ) = c0 + c1 ( x − x0 ) + c2 ( x − x0 )( x − x1 ) + . . . + cn ( x − x0 )( x − x1 ) · . . . ( x − xn−1 )

dove c0 , c1 . . . cn sono delle costanti da definire in modo opportuno.


Vediamo in che modo con l’esempio che segue.

Esempio Consideriamo sempre le tre coppie di punti degli Questo esempio ci permette di capire come
si costruiscono i coefficienti c0 , c1 , ....
esempi precedenti, (1, 1), (2, 3) e (4, 3).
Per costruire p2 ( x ) abbiamo bisogno di φ0 , φ1 e φ2 :

φ0 ( x ) = 1
φ1 ( x ) = ( x − x0 ) = ( x − 1)
φ2 ( x ) = ( x − x0 )( x − x1 ) = ( x − 1)( x − 2)

La condizione di interpolazione in x0 = 1 porta a:

f ( x0 ) = 1 = p2 ( x0 ) = p2 (1) = c0 φ0 (1) + c1 φ1 (1) + c2 φ2 (1) = c0 · 1 + c1 · 0 + c2 · 0

Quindi c1 = 1 = f ( x0 ).
In x1 = 2 abbiamo:

f ( x1 ) = 3 = p2 ( x1 ) = p2 (3) = f ( x0 ) + c1 φ1 (2) + c2 φ2 (2) = f ( x0 ) + c1 · 1 + c2 · 0

f ( x1 ) − f ( x0 ) 3−1
Ricaviamo quindi c1 = = = 2. Chiamiamo
x1 − x0 2−1
questa quantità differenza divisa del primo ordine tra x0 e x1 e la
indichiamo con f [ x0 , x1 ]. Quindi

f ( x1 ) − f ( x0 )
c1 = f [ x0 , x1 ] =
x1 − x0

Infine,

f ( x2 ) = 3 = p2 ( x2 ) = p2 (4) = f ( x0 ) + f [ x0 , x1 ]φ1 (4) + c2 φ2 (4)


= f ( x0 ) + f [ x0 , x1 ](4 − 1) + c2 (4 − 1)(4 − 2)

Per ottenere una formula per c2 che abbia carattere generale, riscri-
viamo l’equazione precedente utilizzando i simboli x0 , x1 , x2 per le
ascisse. In x1 si ha f ( x1 ) = p2 ( 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 ) = c2 ( x2 − x0 )( x2 − x1 )
f ( x2 ) − f ( x1 ) x − x1
− f [ x0 , x1 ] 2 = c2 ( x2 − x0 )
x2 − x1 x2 − x1
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 x1 e x2 da cui

f [ x1 , x2 ] − f [ x0 , x1 ]
f [ x1 , x2 ] − f [ x0 , x1 ] = c2 ( x2 − x0 ) =⇒ c2 =
x2 − x0

La quantità chiamata c2 prende il nome di differenza divisa del


secondo ordine e si indica con

f [ x1 , x2 ] − f [ x0 , x1 ]
f [ x0 , x1 , x2 ] = .
x2 − x0

4 2
Facendo le opportune sostituzioni si ricava c2 = − = − . Quin-
6 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
_ Date le stesse coppie di punti, cambia il
modo per arrivare al polinomio di interpola-
Da questo esempio, si può vedere come la rappresentazione se-
zione, usando come funzioni base i mono-
condo Newton sia di tipo ricorsivo: il polinomio p1 ( x ) = f ( x0 ) + mi, o i polinomi di Lagrange e ora la formu-
f [ x0 , x1 ]( x − x0 ) (che si ha arrestandosi ai primi due passi del pro- lazione di Newton, ma il polinomio finale è
sempre lo stesso essendo unico il polinomio
cedimento appena effettuato) è un polinomio, in tal caso una retta, interpolatore.
che interpola i dati ( x0 , y0 ), e ( x1 , y1 ). Il polinomio p2 ( x ) è dato dalla
somma di p1 ( x ) e del termine f [ x0 , x1 , x2 ]( x − x0 )( x − x1 ). Quindi,
una volta determinato il polinomio pn−1 che interpola i primi n dati,
possiamo usare questa rappresentazione per costruire pn 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 ] = c0 , f [ x0 , x1 ] = c1 , . . . , f [ x0 , x1 , . . . , x n ] = c n

La notazione utilizzata ci permette di capire anche da quali coppie


di punti dipende il coefficiente c j .
appunti di calcolo numerico 89

Dati i punti x0 , x1 , . . . , xn , per indici i e j arbitrari con 0 ≤ i ≤


j ≤ n, si ha

f [ xi ] = f ( xi )
f [ x i +1 , . . . x j ] − f [ x i , . . . , x j −1 ]
f [ xi , . . . , x j ] =
x j − xi

La formula interpolatoria alle differenze divise di Newton è dun-


que 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 f [·] f [·, ·] f [·, ·, ·] f [·, ·, ·, ·] f [·, ·, ·, ·, ·]


x0 f ( x0 )

f [ x1 ] − f [ x0 ]
f [ x0 , x1 ] =
x1 − x0

x1 f ( x1 ) f [ x0 , x1 , x2 ] =
f [ x1 , x2 ] − f [ x0 , x1 ]
=
x2 − x0

f [ x2 ] − f [ x1 ]
f [ x1 , x2 ] = f [ x0 , x1 , x2 , x3 ] =
x2 − x1
f [ x1 ,x2 ,x3 ]− f [ x0 ,x1 ,x2 ]
= x3 − x0
x2 f ( x2 ) f [ x1 , x2 , x3 ] = f [ x0 , x1 , x2 , x3 , x4 ] =
f [ x2 , x3 ] − f [ x1 , x2 ] f [ x1 ,x2 ,x3 ,x4 ]− f [ x0 ,x1 ,x2 ,x3 ]
= = x4 − x0
x3 − x1

f [ x3 ] − f [ x2 ]
f [ x2 , x3 ] = f [ x1 , x2 , x3 , x4 ] =
x3 − x2
f [ x2 ,x3 ,x4 ]− f [ x1 ,x2 ,x3 ]
= x4 − x1
..
x3 f ( x3 ) f [ x2 , x3 , x4 ] = .
f [ x3 , x4 ] − f [ x2 , x3 ]
=
x4 − x2

f [ x4 ] − f [ x3 ] ..
f [ x3 , x4 ] = .
x4 − x3

..
x4 f ( x4 ) .
..
.
.. ..
. .
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).
90 annamaria mazzia

xi f [·] f [·, ·] f [·, ·, ·]


1 1
3−1
=2
2−1
0−2 2
2 3 =−
4−1 3
3−3
=0
4−2
4 3

2
Il polinomio p2 ( x ) si scrive: p2 ( x ) = 1 + 2( x − 1) − ( x − 1)( x −
3
2).
Se vogliamo aggiungere altri dati, per esempio, la coppia (5, 4),
dobbiamo aggiungere una riga alla tabella della differenza divisa e un
termine al polinomio che abbiamo già ricavato per ottenere quello di
grado superiore interpolante tutti i dati che abbiamo a disposizione.

xi f [·] f [·, ·] f [·, ·, ·] f [·, ·, ·, ·]


1 1
3−1
=2
2−1
0−2 2
2 3 =−
4−1 3
1 −2
3−3 −
=0 3 3 = 1
4−2 5−1 4
1−0 1
4 3 =
5−2 3
4−3
=1
5−4
5 4
1
Il polinomio p3 ( x ) è p3 ( x ) = p2 ( 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 Il concetto di differenza divisa può essere
visto come un’estensione del concetto di de-
vale la relazione
rivata di una funzione. Si ha, infatti, che, per
f (k) ( ξ ) f derivabile, la differenza divisa del primo
f [ x0 , x1 , . . . , x k ] = ordine f [ x0 , x1 ] può essere vista come un
k! rapporto incrementale e quindi, al limite per
x1 → x0 , si ha f 0 ( x0 ). Il discorso si estende
dove ξ è un punto appartente all’interno dell’intervallo individuato
alle differenze divise di ordine superiore.
dai nodi x0 , . . . , xk . Quando i punti coincidono, si ha

f ( k ) ( x0 )
f [ x|0 ,x{z
0 ,...,x0 ] =
} k!
k +1 volte

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 ) = pn ( x ) + f [ x0 , x1 , . . . , xn , x ]( x − x0 )( x − x1 ) · . . . ( x − xn ).
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 in-
terpolatore, 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 n
f (n+1) (ξ ( x ))
( n + 1) ! ∏ ( x − xi ) = f [ x0 , x1 , . . . , x n , x ] ∏ ( x − x i )
i =0 i =0

6.4 Considerazioni sull’interpolazione polinomiale

6.4.1 Fenomeno di Runge

Data una funzione f , si pensa che il polinomio di interpolazione


possa approssimare bene la funzione, soprattutto se si aumenta il
numero dei punti di appoggio. In realtà questo non è sempre vero e
un semplice e famoso esempio ce lo fa capire. Sia data la funzione di
1
Runge f ( x ) = e consideriamo il polinomio di interpolazione di Carl Runge (1856-1927) fu un matematico
1 + x2 tedesco. Fu studente di Weierstrass, Kirch-
questa funzione per valori crescenti di n prendendo punti di appoggio hoff, Helmholtz. Iniziò poi a collaborare con
equidistanti nell’intervallo [−5, 5]. Partiamo da n + 1 = 2 con i punti Kronecker e poi si dedicò in particolare allo
studio della soluzione numerica di equazioni
equidistanti x0 = −5, x1 = 0 e x2 = 5. Si ha la tabella
algebriche e alla spettroscopia.
xi −5 0 5
yi = f ( xi ) 3.846154e − 2 1. 3.846154e − 2
Costruiamo quindi il polinomio di interpolazione p2 ( x ) (utilizzando
uno degli approcci proposti, monomiale, Lagrange o Newton, i risul-
tati non cambiano). Raddoppiamo il numero dei punti aggiungendo
un punto tra x0 e x1 e uno tra x1 e x2 . Abbiamo n + 1 = 5 e i valori
della tabella

xi −5 −2.5 0 2.5 5
yi = f ( xi ) 3.846154e − 2 1.379310e − 1 1. 1.379310e − 1 3.846154e − 2
Con lo stesso procedimento, costruiamo i polinomi di interpolazione
di grado 8 e 16. In Figura 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 equi-
distanti non si rivela sempre la scelta giusta e che occorrono altre
strategie nella scelta dei nodi per ottenere migliori risultati. Nell’e-
f (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 in-
terpolazione, 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 Figura 6.6: Funzione di Runge e polinomio
interpolante di grado 16 su tutto l’intervallo
strada, i coefficienti del polinomio si ricavano risolvendo un sistema [−5, 5] (in alto) e in un sottointervallo ristretto
lineare la cui matrice, di Vandermonde, è malcondizionata. A causa (in basso)

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 1011.5 1012.5 1013 1014 1015


yi 4 2.5 2.5 2 2 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 Figura 6.7: Effetti del malcondizionamento
in Figura 6.7. Eppure, dal punto di vista teorico i risultati dovrebbero
essere identici.
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 cre-
scono di colonna in colonna - 1, xi , xi2 , xi3 , . . ., xi5 . Per questo caso
test, si va da 1 a elementi dell’ordine di 1015 . La matrice è molto mal
condizionata. Perciò la soluzione del sistema lineare non può dare
risultati affidabili e il vettore che fornisce i coefficienti del polinomio
interpolatore è completamente errato. Ciò porta anche al fenomeno
della cancellazione numerica nel calcolo del polinomio di interpola-
zione, 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 polino-


miale 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 del-
l’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 ) =
Figura 6.8: Interpolazione della funzione
p
| x | + 1 prendendo 6 punti equidistanti nell’intervallo [−1, 1] e il f ( x ) = exp( x ) con n = 20 (in alto) e
polinomio di interpolazione della funzione f ( x ) = e x nello stesso n = 40 (in basso). I nodi di interpolazione
intervallo e con gli stessi punti. Mentre nel caso della funzione sono nell’intervallo [0, 1].

f ( x ) = e x il polinomio di interpolazione, nell’intervallo dei nodi, si


p
sovrappone alla funzione interpolata, per la funzione f ( x ) = | x | + 1
l’errore è ben evidente.

Figura 6.9:p Interpolazione della funzione


f (x) = | x | + 1 (a sinistra) e della fun-
zione 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 ter-
mine 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 Come si può notare, abbiamo cambiato la
numerazione dei nodi (non più da x0 a xn
nodo è associato il valore yi da interpolare. In questo modo abbiamo
ma da x1 a xm ) per evitare confusioni con
m nodi in [ a, b] e possiamo considerare gli m − 1 sottointervalli dati quanto detto prima sull’interpolazione polino-
da [ x1 , x2 ], [ x2 , x3 ], . . . fino ad arrivare a [ xm−1 , xm ] (da cui il generico miale. Inoltre i nodi sono ordinati in modo
crescente, ordine non necessario quando si
sottointervallo è dato da [ xi , xi+1 ] con i = 1, 2, . . . , m − 1). Su ciascun fa l’interpolazione polinomiale.
sottointervallo andremo a costruire un polinomio di interpolazione
di grado basso (considereremo n = 1 e n = 3), che chiamamo si ( x ).
La funzione di interpolazione "globale" sarà una curva v( x ) continua
(in alcuni casi anche di classe C1 o C2 ) che soddisfa la relazione
v ( x ) = si ( x ) , 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 sottointer-


vallo [ 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 si ( x ) = yi + f [ xi , xi+1 ]( x − xi ).
Globalmente avremo v( x ) tale che
v( x ) = si ( x ) = yi + f [ xi , xi+1 ]( x − xi ), x i ≤ x ≤ x i +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 C1 o C2 ), 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 − x i ) + c i ( x − x i ) 2 + d i ( x − x i ) 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 (ricor-
diamo che noi abbiamo non solo le ascisse xi ma anche le ordinate yi
e la condizione di interpolazione si legge come v( xi ) = yi ), 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 ) = yi , i = 1, 2, . . . , m − 1
s i ( x i +1 ) = y i +1 , i = 1, 2, . . . , m − 1
si ( xi+1 ) = si0+1 ( xi+1 ),
0
i = 1, 2, . . . , m − 2
si00 ( xi+1 ) = si00+1 ( xi+1 ), i = 1, 2, . . . , m − 2
Da un punto di vista storico, il termine spli-
ne deriva da un sottile e flessibile strumento
Osserviamo che le condizioni di continuità delle derivate prime e per disegnare curve, fatto di legno o metal-
seconde le possiamo imporre solo nei punti interni, e non in x1 e xm , lo, utilizzato prima dell’avvento dei compu-
ter, soprattutto nell’industria navale. Per po-
il primo e l’ultimo punto. Le condizioni che abbiamo appena scritto
ter passare per determinati punti, la spline
sono 2(m − 1) + 2(m − 2) = 4(m − 1) − 2. Abbiamo 2 condizioni in era tenuta ferma da alcuni pesi, mentre alle
meno rispetto alle 4(m − 1) incognite che dobbiamo determinare! Le estremità non aveva costrizioni (quindi deri-
vata seconda nulla, come accade nelle spline
due condizioni che mancano vengono imposte su punti estremi x1 naturali). La spline naturale minimizza l’ener-
e xm e, in base alle condizioni imposte si hanno le cosiddette spline gia di tensione tra tutte le funzioni che sono
costrette a passare per quei punti e con la
naturali, complete e not-a-knot.
stessa continuità.
Nelle spline naturali si richiede s100 ( x1 ) = s00m−1 ( xm ) = 0. Nelle
spline complete, vengono specificati i valori delle derivate prime
per s10 ( x1 ) e per s0m−1 ( xm ). Invece per le spline not-a-knot si richie-
de la continuità della derivata terza di s1 e di sm−1 in x2 e in xm−1
96 annamaria mazzia

Figura 6.11: Esempio di interpolazione spline


cubica

rispettivamente: poichè la derivata terza è una costante (stiamo lavo-


rando con polinomi cubici), questa condizione fa sì che s1 = s2 e che
sm−2 = sm−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. Ponia-
mo hi = xi+1 − xi , i = 1, . . . , m − 1: hi rappresenta l’ampiezza del
sottointervallo i-simo [ xi , xi+1 ].
Dalla relazione di interpolazione si ( xi ) = yi si ricava facilmente

ai = yi , i = 1, 2, . . . , m − 1

Dall’altra relazione di interpolazione si ( xi+1 ) = yi+1 si ricava

ai + bi hi + ci h2i + di h3i = yi+1

cioè (sostituendo il valore per ai ):

yi + bi hi + ci h2i + di h3i = yi+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 si . Si ha, per i = 1, 2, . . . , m − 1 Osserviamo che, dalla relazione si00 ( xi ) =
2ci si ricava il significato geometrico dei
si0 ( x ) = bi + 2ci ( x − xi ) + 3di ( x − xi )2 s00 ( xi )
coefficienti ci = i .
2
si00 ( x ) = 2ci + 6di ( x − xi )

A questo punto, dalla relazione si0 ( xi+1 ) = si0+1 ( xi+1 ), i = 1, 2, . . . , m −


2 ricaviamo (osserviamo che a destra dobbiamo valutare si0+1 ( xi+1 ):

bi + 2ci hi + 3di h2i = bi+1 , i = 1, 2, . . . , m − 2 (6.2)

Dalla relazione si00 ( xi+1 ) = si00+1 ( xi+1 ), i = 1, 2, . . . , m − 2 ricaviamo

2ci + 6di hi = 2ci+1 , i = 1, 2, . . . , m − 2


che si semplifica in
ci + 3di hi = ci+1 , i = 1, 2, . . . , m − 2
appunti di calcolo numerico 97

Da quest’ultima otteniamo

c i +1 − c i
di = , i = 1, 2, . . . , m − 2 (6.3)
3hi

Adesso i coefficienti di sono in funzione dei coefficienti ci . Sostituiamo


il valore di di appena ricavato nell’equazione (6.1) e ricaviamo bi in
funzione dei coefficienti ci . abbiamo
Dividiamo tutto per hi e per compattare i
yi + bi hi + ci h2i + di h3i = yi+1 termini utilizziamo le differenze divise dove
servono.
c − ci 3
bi hi + ci h2i + ( i+1 ) h i = y i +1 − y i
3hi
c − ci
bi + c i h i + ( i + 1 ) h i = f [ x i , x i +1 ]
3

Otteniamo, per bi , la relazione

(2ci + ci+1 )hi


bi = f [ x i , x i + 1 ] − , i = 1, . . . , m − 1 (6.4)
3

Sostituiamo ora i valori per bi e per di nell’equazione (6.2):


bi + 2ci hi + 3di h2i = bi+1 , i = 1, 2, . . . , m − 2

(2ci + ci+1 )hi c − ci 2 (2ci+1 + ci+2 )hi+1


f [ x i , x i +1 ] − + 2ci hi + 3 i+1 h i = f [ x i +1 , x i +2 ] −
3 3hi 3

Raccogliamo i termini in hi a sinistra.


(c + 2ci+1 )hi (2ci+1 + ci+2 )hi+1
f [ x i , x i +1 ] + i = f [ x i +1 , x i +2 ] −
3 3
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 Il procedimento seguito fino a questo punto
è valido qualunque sia il tipo di spline che
sistema di m − 2 equazioni, ma le incognite ci che abbiamo introdotto
vogliamo generare.
sono m: c1 , c2 , . . . , cm . Aggiungendo le due condizioni che mancano,
Aggiungiamo, allora, le condizioni per le spline naturali: deve il procedimento si distingue da spline a spline.
essere s100 ( x1 ) = s00m−1 ( xm ) = 0. Si ha

s100 ( x1 ) = 2c1 = 0
s00m−1 ( xm ) = 2cm−1 + 6dm−1 hm−1 = 0

c m −1
da cui c1 = 0 e, dm−1 = − . Di conseguenza, ponendo cm =
3hm−1
0 possiamo estendere all’indice i = m − 1 la relazione (6.3) per i
c m − c m −1
coefficienti di : dm−1 = .
3hm−1
Con la posizione c1 = 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)
98 annamaria mazzia

Perciò il sistema da risolvere per trovare i coefficienti c2 , c3 , . . . , cm−1 ,


mettendo insieme le equazioni (6.5), (6.6),(6.7), è dato da Ac = ψ dove

···
 
2( h1 + h2 ) h2 0 0
 .. 

 h2 2( h2 + h3 ) h3 0 . 

0 h3 2( h3 + h4 ) h4 ...
 
 
A= .. .. ..

0 . . . 0
 
 
..
 
 
 . h m −3 2 ( h m −3 + h m −2 ) h m −2 
0 ··· 0 h m −2 2 ( h m −2 + h m −1 )

   
c2 3( f [ x2 , x3 ] − f [ x1 , x2 ])
c3 3( f [ x3 , x4 ] − f [ x2 , x3 ])
   
   
c= ..  ψ= .. 
. .
   
   
c m −1 3( f [ xm−1 , xm ] − f [ xm−2 , xm−1 ])

Una volta ricavati i coefficienti ci , usando le equazioni (6.3) e (6.4),


per i = 1, . . . , m − 1, si trovano tutti i coefficienti delle cubiche si .

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 c1 = cm = 0

3. applicare, per i = 1, . . . , m − 1 le relazioni

ai = yi
(2ci + ci+1 )hi
bi = f [ x i , x i + 1 ] −
3
c i +1 − c i
di =
3hi

6.5.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 vo-
gliamo ottenere: in questo caso andiamo a unire i punti nell’ordine
considerato mediante segmenti di retta. Figura 6.12: Esempio di curva parametrica.
Questa curva, tuttavia, non può essere espressa come funzione di x
o di y perchè non è una funzione (ad ogni valore di x non corrispon-
de 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
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 ti mentre yi è il risultato di
una certa funzione y allo stesso tempo ti . Dobbiamo dunque avere
una rappresentazione del tipo:

( t1 , x1 ) , ( t2 , x2 ) . . . ( t m , x m )
( t1 , y1 ) , ( t2 , y2 ) . . . ( t m , y m )

In tal caso, possiamo approssimare la curva x mediante le condizioni


di interpolazione x (ti ) = xi 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 = ): Figura 6.13: Esempio di curva parametri-
m
l’importante è avere dei valori crescenti per la variabile t. ca con interpolazione spline cubica a tratti
(stessi nodi della figura 6.12).
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 Esercizi

Esercizio 6.6.1 Sia data la tabella seguente:

xi -1 0 2 3 4
f ( xi ) 9 0 0 15 84

(a) Scrivere la tabella delle differenze divise.

(b) Trovare il polinomio interpolatore (con la formula di Newton) di


grado non superiore a 4.

Svolgimento

(a) La tabella delle differenza divise è:

(b) Il polinomio di Newton di grado 4 che interpola i dati assegnati è


dunque (prendendo i valori della diagonale principale della tabella)

p( x ) = 9 − 9( x + 1) + 3( x + 1) x + 0.5( x + 1) x ( x − 2) + ( x + 1) x ( x − 2)( x − 3) =
= x4 − 3.5x3 + 3.5x2 − x
100 annamaria mazzia

xi f ( xi ) f (·, ·) f (·, ·, ·) f (·, ·, ·, ·) f (·, ·, ·, ·, ·)


-1 9
0−9
0 0 = −9
0 − (−1)

0−0 0+9
2 0 =0 = 3
2−0 2 − (−1)

15 − 0 15 − 0 5−3
3 15 = 15 =5 = 0.5
3−2 3−0 3 − (−1)

84 − 15 69 − 15 27 − 5 11 11/2 − 1/2
4 84 = 69 = 27 = =1
4−3 4−2 4−0 2 4 − (−1)

Esercizio 6.6.2 Sia data la tabella seguente:

xi 0 0.1 0.8 1.2


f ( xi ) 1 0.48 1.32 5.32

(a) Scrivere la tabella delle differenze divise.

(b) Usando i quattro punti in successione, scrivere i polinomi interpo-


lanti (di Newton) pn ( x ) di grado non superiore ad n (con n=0,1,2,3);
commentare il risultato.

(c) Usando pn ( x ) stimare, per ogni n, f (0.6) e f 0 (0.6).

(d) scrivere il polinomio p2 ( x ) con la formula di Lagrange.

Svolgimento

(a) La tabella delle differenza divise è:

xi f ( xi ) f (·, ·) f (·, ·, ·) f (·, ·, ·, ·)


0 1
0.48 − 1
0.1 0.48 = −5.2
0.1

1.32 − 0.48 1.2 + 5.2


0.8 1.32 = 1.2 =8
0.7 0.8

5.32 − 1.32 10 − 1.2 8−8


1.2 5.32 = 10 =8 =0
0.4 1.1 1.2
appunti di calcolo numerico 101

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

p0 ( x ) = 1
p1 ( x ) = 1 − 5.2x
p2 ( x ) = 1 − 5.2x + 8x ( x − 0.1) = 8x2 − 6x + 1
p3 ( x ) = 1 − 5.2x + 8x ( x − 0.1) + 0x ( x − 0.1)( x − 0.8) = 1 − 5.2x + 8x ( x − 0.1) = p2 ( x )

Il polinomio p3 ( x ) coincide con p2 ( x ) in quanto p2 ( x3 ) = p2 (1.2) =


f (1.2) = f ( x3 ) cioè il 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 pn ( x ), n = 0,1,2 si ha

p00 ( x ) = 0
p10 ( x ) = −5.2
p20 ( x ) = 16x − 6

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

n pn (0.6) p0n (0.6)


0 1 0
1 -2.12 -5.2
2 0.28 3.6

(d) I polimoni di Lagrange per ricavare il polinomio p2 sono dati


considerando i valori x0 , x1 e x2 :

( x − 0.1)( x − 0.8) x2 − 0.9x + 0.08


L0 ( x ) = =
(−0.1)(−0.8) 0.08
x ( x − 0.8) 2
x − 0.8x
L1 ( x ) = =
0.1(0.1 − 0.8) −0.07
x ( x − 0.1) 2
x − 0.1x
L2 ( x ) = =
0.8(0.8 − 0.1) 0.56

Il polinomio è:

p2 ( x ) = 1L0 ( x ) + 0.48L1 ( x ) + 1.32L2 ( x )


x2 − 0.9x + 0.08 x2 − 0.8x x2 − 0.1x
= − 0.48 + 1.32
0.08 0.07 0.56
= 12.5( x2 − 0.9x + 0.08) − 6.857142857( x2 − 0.8x ) + 2.357142857( x2 − 0.1x )

e raccogliendo i termini

p2 ( x ) = 8x2 − 6x + 1

Esercizio 6.6.3 Trovare il polinomio di grado non superiore a 4 che


interpola i dati seguenti: f (0) = 2, f 0 (0) = 7, f 00 (0) =
18, f (1) = 27 f 0 (1) = 60. Stimare f (0.2) e f 0 (0.2).
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 00 (0)
f [0, 0] = f 0 (0) = 7 f [0, 0, 0] = =9 f [1, 1] = f 0 (1) = 60
2!

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

Il polinomio è dunque p( x ) = 2 + 7x + 9x2 + 9x3 + 8x3 ( x − 1), vale


a dire

p( x ) = 8x4 + x3 + 9x2 + 7x + 2.

La stima di f (0.2) è data da: f (0.2) ≈ p(0.2) = 3.7808.


Per stimare f 0 (0.2) dobbiamo prima calcolare la derivata prima di
p. Si ha

p0 ( x ) = 32x3 + 3x2 + 18x + 7,

da cui f 0 (0.2) ≈ p0 (0.2) = 12.056.

Esercizio 6.6.4 Sia data la tabella seguente di dati sperimentali

xi 0.4 1 2.8 3.8


f ( xi ) 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 in-


terpolazione di Newton pn di grado n = 0, 1, 2, 3. Commentare il
risultato.

Svolgimento
La tabella delle differenze divise è:
appunti di calcolo numerico 103

xi f ( xi ) f (·, ·) f (·, ·, ·) f (·, ·, ·, ·)


0.4 17.62
23.5 − 17.62
1. 23.5 = 9.8
1 − 0.4

92.98 − 23.5 38.6 − 9.8


2.8 92.98 = 38.6 = 12
2.8 − 1 2.8 − 0.4

165.18 − 92.98 72.2 − 38.6 12 − 12


3.8 165.18 = 72.2 = 12 =0
3.8 − 2.8 3.8 − 1 3.8 − 0.4

I polinomi da costruire sono

x p0 ( x ) = 17.62

x p1 ( x ) = p0 ( x ) + 9.8( x − 0.4) = 17.62 + 9.8( x − 0.4) = 9.8x + 13.7

x p2 ( x ) = p1 ( x ) + 12( x − 0.4)( x − 1) = .... = 12x2 − 7x + 18.5

x p3 ( x ) = p2 ( x ) + 0( x − 0.4)( x − 1)( x − 2.8) = p2 ( x )

Il polinomio p3 coincide con il polinomio p2 perchè il punto (3.8, 165.18)


appartiene già al polinomio p2 .

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 ) = a0 + a1 x + a2 x2 + . . . + an x n , 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?
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

I numeri governano il mondo.


7.1 Perchè approssimare dati? Platone

La legge di Hooke stabilisce che l’allungamento subito da una


molla, costruita con materiale uniforme, è direttamente proporzionale
alla forza applicata: F ( x ) = kx dove k è la costante di proporzionalità,
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.4724811N. Se applichiamo una forza
pari a 2.418165N si misura un allungamento pari a 0.042m. Siano
effettuate diverse misure, ricavando i dati mostrati in Tabella.

x 0.00000 0.04200 0.08000 0.11800 0.15600 Tabella 7.1: Dati sperimentali per la legge di
Hooke
F 1.472481 2.418165 3.363849 4.309533 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’allunga-
mento. In questo modo, tuttavia, non terremmo conto di tutte le
Figura 7.1: Legge di Hooke: i dati
misure effettuate. È più ragionevole trovare la linea retta che meglio sperimentali
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.
Alcuni dei motivi che spingono a cercare una funzione di approssi-
mazione piuttosto che di interpolazione sono questi: Se si hanno a disposizione n = 100 dati,

x i dati a disposizione sono affetti da errore;


anche molto accurati, una funzione interpo-
lante può dare una buona idea "localmen-
te", mentre una funzione approssimante data
x siamo interessati a vedere l’andamento dei dati su lunga scala, in da una retta fornisce una migliore idea del
comportamento su lunga scala dei dati.
una visione globale

x 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.


106 annamaria mazzia

7.2 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 1 2 3 4 5 6 7 8 9 10 Tabella 7.2: Dati sperimentali

yi 1.2 2.3 4.5 5.1 7 8.5 10.2 13.1 12.5 16.5

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 p1 ( x ) = a0 + a1 x
la retta che andiamo cercando (dobbiamo quindi capire come trovare
i due coefficienti a0 e a1 ). Allora p1 ( xi ) = a0 + 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 In questo caso, lo scarto sul dato i-simo rap-
presenta la differenza tra il valore dato yi e il
a0 + a1 xi . Nell’approccio ai minimi quadrati, si cerca di minimizzare
valore approssimato dal polinomio, a0 + a1 xi ,
la somma dei quadrati degli scarti, cioè la somma dei quadrati delle vale a dire yi − ( a0 + a1 xi ).
differenze tra i valori assegnati yi e i valori corrispondenti p1 ( xi ) sulla
retta. Introduciamo, quindi la funzione che dipende dai coefficienti
incogniti a0 e a1 . Per funzioni f ( x ) di una variabile reale, i pun-
ti di massimo o minimo si trovano tra i punti
critici della f , per i quali f 0 ( x ) = 0, studian-
n
do il segno della f 00 . Analogo procedimento
S ( a0 , a1 ) = ∑ [(a0 + a1 xi ) − yi ]2 si segue per funzioni di due variabili. Per la
i =1
funzione S( a0 , a1 ) che stiamo studiando, si
può provare che i valori ( a0 , a1 ) che annulla-
Per minimizzare questa funzione, occorre porre le derivate parziali no le derivate parziali della S rappresentano
i valori che minimizzano la S stessa. Que-
della S rispetto ad a0 e a1 uguali a zero. Si pone dunque sto argomento viene approfondito nei corsi di
Analisi Matematica.
appunti di calcolo numerico 107

n n
∂S( a0 , a1 ) ∂
0=
∂a0
=
∂a0 ∑ [(a0 + a1 xi ) − yi ]2 = 2 ∑ [(a0 + a1 xi ) − yi ] Data una funzione f ( x, y) che dipende da
i =1 i =1 ∂f
n n due variabili, il simbolo rappresenta la
∂S( a0 , a1 ) ∂
∑ [(a0 + a1 xi ) − yi ] = 2 ∑ [( a0 + a1 xi ) − yi ] xi
2 ∂x
0= = derivata parziale della f rispetto alla variabile
∂a1 ∂a1 i =1 i =1 x, che altro non è che la derivata della fun-
zione g( x ) = f ( x, y) considerando y come
Queste equazioni si semplificano nel sistema delle cosiddette equa- una costante. Viceversa, con il simbolo
∂f
si
∂y
zioni normali: indica la derivata parziale della f rispetto alla
variabile y, che, per definizione, è la derivata

na + a ∑n x = ∑n y della funzione h(y) = f ( x, y), dove ora x
0 1 i =1 i i =1 i
 a0 ∑ n x i + a1 ∑ n x 2 = ∑ n x i y i è considerata costante. L’argomento viene
i =1 i =1 i i =1 trattato nei dettagli in Analisi Matematica 2.

Introducendo la notazione A12 = ∑in=1 xi , A22 = ∑in=1 xi2 , b1 =


∑in=1 yi e b2 = ∑in=1 xi yi e osservando che la matrice del sistema è
simmetrica (A12 = A21 ), la soluzione è data da:

A22 b1 − A12 b2 nb2 − A12 b1


a0 = a1 =
nA22 − A212 nA22 − A212

Nell’esempio proposto, per calcolare la retta di approssimazione xi yi xi2 xi yi


1 1.2 1 1.2
ai minimi quadrati, dobbiamo calcolare i coefficienti delle equazioni 2 2.3 4 4.6
normali. In Tabella 7.3 poniamo i valori che servono per risolvere il 3 4.5 9 13.5
sistema: la soluzione è a0 = −0.87333333 e a1 = 1.62969697. La retta 4 5.1 16 20.4
5 7 25 35
è rappresentata in Figura 7.3. 6 8.5 36 51
La retta che abbiamo appena costruito è la retta che minimizza gli 7 10.2 49 71.4
8 13.1 64 104.8
scarti verticali, supponendo affetti da errore le ordinate delle coppie di 9 12.5 81 112.5
punti a disposizione. Essa prende pure il nome di retta di regressione 10 16.5 100 165
lineare sugli scarti verticali. A12 = 55 b1 = 80.9 A22 = 385 b2 = 579.4
Tabella 7.3: Tabella per il calcolo della retta
Osserviamo che il baricentro dei punti assegnati giace sulla retta di approssimazione ai minimi quadrati
ai minimi quadrati, in quanto considerando la prima equazione del
sistema si ha, per X = ∑in=1 xi /n e Y = ∑in=1 yi /n (le coordinate del
baricentro dei punti assegnati):

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
Figura 7.3: Retta di approssimazione sugli
il ruolo delle x con quello delle y per ricavare, con lo stesso proce- scarti verticali.
dimento, la retta p1 (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 ) = a0 + a1 x + a2 x2 + . . . + am x m
con m < (n − 1). Quando n − 1 = m il polinomio d’approssimazione
coincide con quello d’interpolazione.
108 annamaria mazzia

La funzione da minimizzare è
n h i2
S( a0 , a1 , . . . , am ) = ∑ ( a0 + a1 xi + a2 xi2 + . . . + am xim ) − yi
i =1

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 pm .
∂S
=0 j = 0, 1, . . . , m
∂a j

Ricaviamo, quindi
n
2 ∑ ( a0 + a1 xi + . . . + am xim − yi ) xi = 0
j
per j = 0, 1, . . . , m
i =1

In forma estesa possiamo scrivere


n n n n
∑ x i + a1 ∑ x i + . . . + a m ∑ xi ∑ xi yi
j j +1 j+m j
a0 = per j = 0, 1, . . . , m
i =1 i =1 i =1 i =1

Poichè queste equazioni si hanno per j = 0, 1 . . . , m, si ha da


risolvere un sistema, che, scritto in forma matriciale, è:

A T Aa = A T b

dove A è una matrice rettangolare n × (m + 1), data da



1 x1 x12 . . . x1m

1 x2 x22 . . . x2m 
 
A=  .. .. .. .. 
. . . . 

1 xn xn2 ... xnm

Le equazioni del sistema sono dette equazioni normali. Si può


provare che la matrice Q = A T A è simmetrica, definita positiva ed è Le definizioni di matrice simmetrica e matrice
definita positiva sono date nel Capitolo 9.
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. Allo-
ra si può richiedere che la funzione approssimante abbia una delle
forme seguenti (a seconda della rappresentazione, si ha un diverso
modello):

y( x ) = aebx modello esponenziale


b
y( x ) = ax 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.
appunti di calcolo numerico 109

x Nel caso del modello esponenziale, passando ai logaritmi (in


base naturale) si ha:

ln (y) = ln ( a) + bx

Ponendo X = x, Y = ln (y), a0 = ln ( a) e a1 = b, si ha un’equazione


del tipo Y = a0 + a1 X.
Quindi, dalle coppie di dati ( xi , yi ) i = 1, . . . , n, si deve passare alle
coppie ( Xi = xi , Yi = ln (yi )) e su queste coppie si costruisce la
retta di approssimazione ai minimi quadrati con la procedura che
abbiamo studiato in Sezione 7.2. Una volta ricavati i coefficienti a0
e a1 , si ha a = e a0 e b = a1 .

x 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 = a0 + a1 X.
Quindi, dalle coppie di dati ( xi , yi ) i = 1, . . . , n, si deve passare
alle coppie ( Xi = log ( xi ), Yi = log (yi )) e su queste coppie si
costruisce la retta di approssimazione ai minimi quadrati. Una
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 -1 0 2 3 4
f ( xi ) 9 0 0 15 84

(a) Trovare la retta ai minimi quadrati che minimizza la somma dei


quadrati degli scarti verticali.

(b) Trovare la retta ai minimi quadrati che minimizza la somma dei


quadrati degli scarti orizzontali.

(c) Calcolare il punto di intersezione delle due rette e dire di che punto
si tratta.

Svolgimento

(a) Il sistema da risolvere per ottenere la retta di approssimazione ai


minimi quadrati è:

na + ∑n x a = ∑n y
0 i =1 i 1 i =1 i
 ∑ n x i a0 + ∑ n x 2 a1 = ∑ n x i y i
i =1 i =1 i i =1
110 annamaria mazzia

dove n = 5. Poichè ∑5i=1 xi = 8, ∑5i=1 xi2 = 30, ∑5i=1 yi = 108 e


∑5i=1 xi yi = 372, si ha il sistema

5a + 8a = 108
0 1
8a0 + 30a1 = 372

La soluzione è a0 = 3.069767442, a1 = 11.581395349. La ret-


ta ai minimi quadrati che minimizza gli scarti verticali è: y =
3.069767442 + 11.581395349x.

(b) Ricaviamo la retta di approssimazione che minimizza gli scarti


orizzontali.

nb + ∑n y b = ∑n x
0 i =1 i 1 i =1 i
∑n yi b0 + ∑n y2 b1 = ∑n yi xi
i =1 i =1 i i =1

dove n = 5. Poichè ∑5i=1 yi = 108, ∑5i=1 y2i = 7362, ∑5i=1 xi = 8 e


∑5i=1 xi yi = 372, si ha il sistema

5b + 108b = 8
0 1
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.03960868528y.

(c) Troviamo il punto di intersezione delle due rette:



y = 3.069767442 + 11.581395349x
 x = 0.744452398 + 0.03960868528y

Ricaviamo x = 1.6 e y = 21.6


Se calcoliamo il baricentro dei punti assegnati, troviamo

∑5i=1 xi −1 + 2 + 3 + 4 ∑5i=1 yi 9 + 15 + 84
X= = = 1.6 Y= = ) = 21.6
5 5 5 5

Il punto di intersezione delle due rette è il baricentro dei punti


assegnati.

Esercizio 7.5.2 Sono assegnati i seguenti dati sperimentali


xi 4.0 4.2 4.5 4.7 5.1 5.5 5.9 6.3 6.8 7.1
yi 102.56 113.18 131.2 142 168 196.2 225 256.8 299.51 325.6
Costruire la curva di approssimazione ai minimi quadrati della forma ax b .

Svolgimento
Per trovare la curva di approssimazione del tipo y = ax b , dobbiamo
prima passare ai logaritmi:

log(y) = log( ax b ) = log( a) + b log( x )


appunti di calcolo numerico 111

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 ) ln(yi )
1.386294361 4.630447993
1.435084525 4.728979472
1.504077397 4.876722876
1.547562509 4.955827058
3.931825633 5.123963980
1.704748092 5.279134547
1.774952351 5.416100402
1.840549633 5.548297572
1.916922612 5.702147806
1.960094784 5.785669634
Calcoliamo la retta di approssimazione ai minimi quadrati, ponen-
do Xi = ln( xi ) e Yi = ln(yi ). Il sistema da risolvere è

na + ∑n X a = ∑n Y
0 i =1 i 1 i =1 i
∑n Xi a0 + ∑n X 2 a1 = ∑n Xi Yi
i =1 i =1 i i =1

dove n = 10.
Si ha ∑in=1 Xi = 16.6995268, ∑in=1 Xi2 = 28.2537116, ∑in=1 Yi =
52.0472913, ∑in=1 Xi Yi = 87.6541085
Il sistema da risolvere diventa

10a + 16.6995268a = 52.0472913
0 1
16.6995268a0 + 28.2537116a1 = 87.6541085

che ha come soluzione a0 = 1.84197978 e a1 = 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.30901637x2.013679425 .

Esercizio 7.5.3 Sia data la tabella seguente di dati sperimentali

xi 0.2 1 2.4 3.4


f ( xi ) 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 = cx d 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; a0 = log c e a1 = d.
Considerando i logaritmi naturali si ha

Xi = [−1.609437912434 0.0 0.8754687373539 1.223775431622]


112 annamaria mazzia

Yi = [2.70938264633 2.7408400239 3.7130841428 4.36156879277]


Il sistema da risolvere è

4a + 0.48980625654a = 13.52487560584
0 1
0.48980625654a0 + 4.854362211106a1 = 4.22768666781

Risolvendo si trova a0 = 3.3155400568494 da cui c = 27.537261656285


e a1 = d = 0.53636590986. La curva è y = 27.537261656285x0.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 minimiz-
zata 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

Ad una festa matematica si incontrano √ di-


8.1 Integrazione numerica e... farmaci verse funzioni come x2 , 3 sin ( x ), 4 2 + x
e molte altre... Ad un certo punto x2 ve-
de in un angolino, mogia mogia, la funzione
ln (5x sin ( x2 /2))
p , e le chie-
Per molti farmaci, il profilo di rilascio del principio attivo dipende sia 7 cos (e x + ln ( 10sin(2x3 )))
de:" Perchè te ne stai qui tutta sola e triste?".
dalle caratteristiche chimico-fisiche del principio attivo sia dalle carat- Lei risponde: " Sai, io non mi INTEGRO facil-
teristiche tecnologiche della formulazione. In tal modo il rilascio del mente!"
Umorismo in rete
farmaco può essere accelerato o ritardato (pensiamo alle compresse
gastroresistenti), e può avvenire in particolari siti dell’organismo. È
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 8e−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 m0 = 100µg) e con m f ciò che rimane
all’istante finale t f = 24 ore, possiamo dire che vale la seguente
relazione
Z t
f dm ( t )
m f − m0 = − dt
t0 dt
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
Z 24
m f − 100 = − 8e−0.1t dt
0
L’integrale può essere calcolato facilmente e si ha
8
m f = 100 − (e−0.1·24 − e0 ) = 100 + 80(e−2.4 − 1) = 100 − 72.743 = 27.257
−0.1
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à
Z t
f 2
m f = 100 − 8e−0.1t dt
t0
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
Z b
I= f ( x )dx
a

dove f è una funzione definita nell’intervallo [ a, b]. La funzione f può essere nota, come nel-
l’esempio appena visto, oppure assegna-
Una formula di integrazione numerica (detta anche formula di
Rb ta su determinati punti dell’intervallo, come
quadratura numerica) approssima l’integrale esatto I = a f ( x )dx vedremo alla fine del capitolo.
mediante una sommatoria data da ∑nj=0 a j f ( x j ):
Z b n
I=
a
f ( x )dx ≈ ∑ aj f (xj )
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.

8.2 Formula dei trapezi

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)
p( x ) = f ( a) + ( x − a)
b−a
L’errore di interpolazione, utilizzando l’espressione del resto di La-
grange (e, quindi, considerando valide le ipotesi, per questo caso, di
f continua fino alla derivata seconda) è dato da
f 00 (ξ x )
E( 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 00 (ξ x )
f ( x ) = f ( a) + ( x − a) + ( x − a)( x − b)
b−a 2
Dovendo integrare la f tra a e b e valendo l’uguaglianza precedente,
integrando ambo i membri, otteniamo:

f 00 (ξ x )
Z b Z b Z b
f (b) − f ( a)

f ( x )dx = f ( a) + ( x − a) dx + ( x − a)( x − b) dx
a a b−a a 2
appunti di calcolo numerico 115

ovvero
Z b Z b
f ( a) + f (b) 1
f ( x )dx = (b − a) + ( x − a)( x − b) f 00 (ξ x ))dx
a 2 2 a

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

( b − a )3
Z b Z b
1 1 00 1
( x − a)( x − b) f 00 (ξ x ))dx = f (ξ ) ( x − a)( x − b)dx = − f 00 (ξ )
2 a 2 a 2 3!

dove ξ è un punto interno all’intervallo [ a, b], incognito ma che non


dipende più da x!
Possiamo dunque scrivere,

( b − a )3
Z b
f ( a) + f (b) 1 00
f ( x )dx = (b − a) − f (ξ )
a 2 2 3!

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 00 (ξ ) 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 termi-
ne che non possiamo calcolare, vale a dire dalla quantità Eint =
1
− f 00 (ξ )(b − a)3 .
12
Indicando con M = maxa≤ x≤b | f 00 ( x )| possiamo maggiorare l’erro-
re mediante la relazione

( b − a )3
| Eint | ≤ M
12

La formula dei trapezi approssima l’integrale di f in [ a, b] me- Se la funzione f ( x ) ≥ 0 si può vedere fa-
cilmente che l’integrale della retta che passa
diante l’integrale della retta passante passante per i punti ( a, f ( a)) per i punti ( a, f ( a)) e (b, f (b)), altro non è
e (b, f (b)): che l’area del trapezio sottesa alla corda pas-
sante per f ( a) e f (b). Da qui il nome della
Z b
b−a formula come formula dei trapezi.
I= f ( x )dx ≈ Itrap = [ f ( a) + f (b)]
a 2

8.3 Formule di Newton-Cotes

Se, al posto di una retta, prendiamo come funzione interpolante


la f un polinomio di grado più elevato, otterremo altre formule di
quadrature.
Supponiamo di poter valutare la f in n + 1 punti x0 , x1 , . . . , xn
e costruiamo il polinomio interpolatore di grado n utilizzando la
formula di Lagrange.
116 annamaria mazzia

Figura 8.1: Formula dei trapezi: l’integrale


della funzione f (zona tratteggiata in blu) vie-
ne approssimata mediante l’area del trapezio
sotteso alla retta di interpolazione per f ( a) e
f (b) (zona verde).

Avremo pn ( x ) = ∑in=0 f ( xi ) Li ( x ), dove i polinomi di Lagrange


sono dati dalla nota formula
n x − xj
Li ( x ) = ∏ xi − x j
j =0
j 6 =i

x j = x0 + jh, con j = 0, 1, . . . , n e per un generico punto x compreso


tra x0 e xn vale x = x0 + sh con 0 ≤ s ≤ n, s numero reale.
Quindi x − x j = x0 + sh − ( x0 + jh) = (s − j)h e xi − x j = (i − j)h,
da cui il polinomio di Lagrange si può scrivere come
n
s−j
Li ( x ) = ∏ i−j = Li ( s )
j =0
j 6 =i

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 ) = pn ( x ) + E( x ) dove E( x ) è l’errore
della formula di interpolazione, passando all’integrale, abbiamo
Z b Z b Z b
f ( x )dx = pn ( x )dx + E( x )dx
a a a

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 :
Z b Z b n n Z b
I=
a
f ( x )dx ≈ ∑ f (xi ) Li (x)dx = ∑ f (xi )
a i =0 a
Li ( x )dx
i =0

La formula di quadratura ha dunque come nodi i punti xi e come


Rb
pesi gli integrali a 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 xn = b e tenendo presente che Li ( x ) = Li (s) con x = x0 + sh,
Rb
possiamo fare un cambiamento di variabile negli integrali a Li ( x )dx.
Dal momento che dx = hds abbiamo
Z b Z xn Z n Z n
Li ( x )dx = Li ( x )dx = Li (s)hds = h Li (s)ds
a x0 0 0

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 Roger Cotes (1682-1716) fu un matematico
inglese che lavorò molto con Isaac Newton,
Z b n Z n
f ( x )dx ≈ h ∑ f ( xi )
in particolare per la correzione del suo famo-
I= Li (s)ds so libro "Principia". Egli inventò le formule
a i =0 0
di quadratura che prendono il suo nome e
per primo introdussse quella che oggi cono-
Definiamo coefficienti di Newton-Cotes le espressioni sciamo come formula di Eulero, per cui e x =
Z n cos ( x ) + i sin ( x ) nel campo complesso.
(n) 1
Ci = Li (s)ds i = 0, 1, . . . , n
n 0

La formula precedente si scrive, quindi, come


Z b n n
f ( x )dx ≈ nh ∑ f ( xi )Ci = ( xn − x0 ) ∑ f ( xi )Ci
(n) (n)
I= (8.1)
a i =0 i =0

L’errore della formula di quadratura è dato da


Z b Z b ( n +1)
f (ξ x )
Eint = E( x )dx = ( x − x0 )( x − x1 ) · · · ( x − xn )dx
a a ( n + 1) !

Dato un polinomio di interpolazione di grado n mediante il pro-


cedimento 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
Z 1 n
∑ Ci
(n)
1= dx =
0 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, x0 e x1 ) i coefficienti di Cotes sono quelli già ricavati nella
formula dei trapezi
118 annamaria mazzia

1 1 1 ( s − 1) 1
Z Z
(1)
C0 = L0 (s)ds = ds =
1 0 0 −1 2
Z 1 Z 1
(1) 1 s 1
C1 = L (s)ds = ds =
1 0 1 0 1 2

e la formula di integrazione diventa, appunto, la formula dei


trapezi
Z b 1
f ( x0 ) + f ( x1 )
f ( x )dx ≈ h ∑ f ( xi )Ci
(1)
I= = ( x1 − x0 )
a i =0
2

8.3.1 Formula di Cavalieri-Simpson

Considerando n = 2 (quindi 3 punti di appoggio nell’intervallo [ a, b],


a+b
x0 = a, x1 = e x2 = b, i due estremi dell’intervallo e il punto
2
centrale) la formula di quadratura prende il nome di formula di
Cavalieri-Simpson Bonaventura Francesco Cavalieri (1598-
1647) fu un matematico italiano. Studiò teolo-
gia e geometria. Lavorò su problemi di ottica
1 2 1 2 (s − 1)(s − 2) 1 e di cinematica. È famoso soprattutto per il
Z Z
(2)
C0 = L0 (s)ds = ds = cosiddetto principio di Cavalieri.
2 0 2 0 (−1)(−2) 6 Thomas Simpson (1710-1761) fu un ma-
Z 2
1 1 2 (s)(s − 2) 4
Z
(2) tematico britannico, inventore della formula
C1 = L (s)ds = ds =
2 0 1 2 0 (1)(−1) 6 di quadratura per il calcolo di integrali defi-
Z 2 niti, sebbene questa formula fosse stata già
1 1 2 (s)(s − 1) 1
Z
(2) scoperta 200 anni prima da Keplero e pare
C2 = L2 (s)ds = ds =
2 0 2 0 (2)(1) 6 fosse usata anche da Cavalieri nel 1639 e
poi riscoperta da James Gregory. I suoi studi
riguardano anche l’astrologia.

La formula di Cavalieri-Simpson approssima l’integrale della f con-


a+b
siderando come nodi x0 = a, x1 = c = e x2 = b e come pesi i
2
(2) 1 (2) 4 (2) 1
coefficienti di Cotes C0 = , C1 = , C2 = , ottenendo:
6 6 6
Z b 2
f ( a) 4 f (c) f (b)
f ( x )dx ≈ ICS = ( x2 − x0 ) ∑ f ( xi )Ci
(2)
I= = (b − a)( + + )
a i =0
6 6 6
b−a
= ( f ( a) + 4 f (c) + f (b))
6
Osserviamo che i valori dei coefficienti di
Newton-Cotes sia per n = 1 che per n = 2
Con la formula di Cavalieri-Simpson, dunque, l’integrale della f
sono simmetrici. Questo risultato va genera-
viene approssimato con l’integrale della parabola passante per i due lizzato a qualunque scelta di n: i coefficienti
estremi a e b e per il punto centrale dell’intervallo. di Newton-Cotes sono simmetrici.

Per quanto riguarda l’errore che si commette approssimando l’in-


tegrale 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 p2 che interpola la f , l’errore è
f 000 (ξ x )
dato da E( x ) = ( x − a)( x − c)( x − b).
3!
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

Z b 000
f (ξ x )
Eint = ( x − a)( x − c)( x − b)dx
a 3!

Questa volta, la funzione ( x − a)( x − c)( x − b) cambia segno all’inter-


no 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:

5
f IV (u) b−a f IV (u)

Eint =− =− ( b − a )5
90 2 2880

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 f (−t)
f (0) − f (−t)
0 f (0)
t
f (0) − f (−t)
f 0 (0) − t f 0 (0) − f (0) + f (−t)
0 f (0) f 0 (0) t =
t t2
f ( t ) − f (0)
f ( t ) − f (0) − f 0 (0) f ( t ) − f (0) − t f 0 (0) f (t) − 2t f 0 (0) − f (−t)
t f (t) t =
t t t2 2t3
Il polinomio di interpolazione è, dunque
f (0) − f (−t) t f 0 (0) − f (0) + f (−t) f (t) − 2t f 0 (0) − f (−t)
p( x ) = f (−t) + ( x + t) + ( x + t ) x + ( x + t) x2
t t2 2t3
L’errore di interpolazione per questo polinomio di grado 3 vale
f ( IV ) (ξ x )
E( x ) = ( x + t) x2 ( x − t)
4!
Quindi da f ( x ) = p( x ) + E( x ), andando a integrare tra −t e t si
ha:
Z t Z t Z t
f ( x )dx = p( x )dx + E( x )dx
−t −t −t
Nell’integrazione del polinomio p( x ) è facile vedere che i termini
che dipendono da f 0 (0) portano un contributo nullo. Infatti
Z t  0
f 0 (0)
Z t 0
x3
  
f (0) f (0)
( x + t) x − 2 ( x + t) x2 dx = x2 + tx − − x2 dx
−t t t −t t t
t
f 0 (0) x 2 x4
 
= t − =0
t 2 4t −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 = 2t) si ha

Z t 
f (0) − f (−t) f (−t) − f (0) f (t) − f (−t)

2
f (−t) + ( x + t) + ( x + t ) x + ( x + t ) x dx =
−t t t2 2t3
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 ).
R t f ( IV ) (ξ x )
Quindi Eint = −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 ) (ξ ) f ( IV ) (ξ ) x5 x3 f ( IV ) (ξ ) 5
Z t 
Eint = ( x2 − t2 ) x2 dx = − t2 =− t
24 −t 24 5 3 −t 90
Considerando che l’ampiezza dell’intervallo è h = 2t si ha
f ( IV ) (ξ ) h 5 f ( IV ) (ξ ) 5
Eint = − ( ) =− h
90 2 2880
Troviamo la formula dell’errore per Cavalieri-Simpson.
appunti di calcolo numerico 121

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:

x i valori dei coefficienti in formule di grado elevato sono difficili


da ottenere;

x le formule di Newton-Cotes, essendo basate su polinomi di in-


terpolazione 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 scompo-
nendo 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 sottoin-
tervalli in modo che [ a, b] = [ a, x1 ] ∪ [ x1 , x2 ] ∪ [ x2 , x3 ] ∪ . . . ∪ [ xn−1 , b],
allora
Z b Z x Z x2 Z x3 Z b
1
f ( x )dx = f ( x )dx + f ( x )dx + f ( x )dx + . . . + f ( x )dx
a a x1 x2 x n −1

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 x0 , x1 , . . . , xn (per semplicità supponiamo i punti equidi-
b−a
stanti con passo h = , in modo che x0 = a e xn = b, xi = x0 + ih,
n
i = 0, . . . , n).
L’integrale su [ a, b] si può dunque ottenere come somma degli
integrali su tali sottointervalli:
Z b n Z xi

a
f ( x )dx = ∑ f ( x )dx
i =1 x i −1

Ciascuno degli integrali su [ xi−1 , xi ] viene approssimato utilizzan-


do la formula dei trapezi:
n Z xi n n
x i − x i −1 h
∑ f ( x )dx ≈ ∑ 2
[ f ( xi−1 ) + f ( xi )] = ∑ [ f ( xi−1 ) + f ( xi )]
2
i =1 x i −1 i =1 i =1

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
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 00 (ξ i ) 12 = − ∑ f 00 (ξ i ) 12
i =1 i =1

Supponendo che la derivata seconda della f sia continua e limi-


tata in [ a, b] e chiamando con m e M rispettivamente il minimo e il
massimo di f 00 in [ a, b], si ha:

m ≤ f 00 (ξ i ) ≤ M i = 1, . . . , n

Considerando la somma di queste diseguaglianze, per i = 1, . . . , n si


ricava
n
∑in=1 f 00 (ξ i )
nm ≤ ∑ f 00 (ξ i ) ≤ nM =⇒ m ≤
n
≤M
i =1

∑in=1 f 00 (ξ 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

∑in=1 f 00 (ξ i ) n
f 00 (ξ ) =
n
ovvero ∑ f 00 (ξ i ) = n f 00 (ξ ).
i =1

Sostituendo la relazione appena trovata nella formula dell’errore e


b−a
ricordando che h = , si ricava
n
n
h3 h3 f 00 (ξ ) f 00 (ξ ) (b − a)3
Eint = − ∑ f 00 (ξ i ) = −n f 00 (ξ ) = − ( b − a ) h2 = −
i =1
12 12 12 12 n2
appunti di calcolo numerico 123

Da nh3 si ha n(b − a)/nh2 = (b − a) h2


o, in alternativa, nh3 = n(b − a)3 /n3 =
Quindi per n → ∞ l’errore tende a zero come h2 o, equivalente-
(b − a)3 /n2 .
1
mente, come 2 .
n

8.4.3 Formula composta di Cavalieri-Simpson

Suddividiamo l’intervallo [ a, b] in n sottointervalli di ampiezza co-


stante 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 + bi
Siano ai e bi gli estremi di ciascuna suddivisione e sia ci = i
2
il punto medio di ciascuna suddivisione (per i = 1, . . . , n). In tal L’estremo superiore bi di ciascun interval-
lino, con i = 1, n − 1 coincide con l’e-
modo, seguendo lo stesso ragionamento fatto per i trapezi si ha:
stremo inferiore dell’intervallino successivo:
Z b Z b Z b2 Z bn bi = a i + 1 .
1
f ( x )dx = f ( x )dx + f ( x )dx + . . . + f ( x )dx
a a1 a2 an

Applicando la formula di Cavalieri-Simpson su ciascun intervallino


risulta:
Z b
i bi − a i h
f ( x )dx ≈ ( f ( ai ) + 4 f (ci ) + f (bi )) = ( f ( ai ) + 4 f (ci ) + f (bi ))
ai 6 6

In tal modo
Z b n
h
a
f ( x )dx ≈ ∑ 6 ( f (ai ) + 4 f (ci ) + f (bi )) Se gli intervallini non sono uniformi, la for-
mula va scritta considerando il valore hi per
i =1
ciascun intervallino.

Si ha la formula composta di Cavalieri-Simpson.

Figura 8.4: Formula composta di Cavalieri-


Simpson, utilizzando 3 sottointervalli (7
punti).
124 annamaria mazzia

Formula composta di Cavalieri-Simpson in forma compatta. Possiamo ve-


dere la formula composta di Cavalieri-Simpson anche in una forma
compatta. Considerando che, su ogni sottointervallo, dobbiamo pren-
dere il punto medio, facciamo una numerazione progressiva dei punti
di integrazione nel modo seguente:

x0 = a
x2i = x0 + ih i = 0, . . . n I nodi pari corrispondono agli estremi dei
1 sottointervalli, mentre i nodi dispari sono i
x2i+1 = x0 + ( i + ) h i = 0, . . . , n − 1 punti centrali di ogni sottointervallo.
2
Per la formula di quadratura otteniamo
Z b n−1 Z x2i+2
I=
a
f ( x )dx = ∑ x2i
f ( x )dx
i =0
n −1
h
≈ ∑ 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 Cavalieri-


Simpson, sarà dato dall somma degli errori di integrazione sugli
n sottointervalli. Nell’ipotesi che la derivata quarta sia continua e
limitata, si ha: Ricordiamo che stiamo considerando sot-
tointervalli della stessa ampiezza h =
1 h 5 IV b−a
 
Eint = − ( f (ξ 1 ) + f IV (ξ 2 ) + . . . + f IV (ξ n )) n
.
90 2
h5 n−1 IV ( b − a )5 n −1
=− ∑
2880 i=0
f (ξ i ) = −
2880n5 ∑ f IV (ξ i )
i =0

Si considera quindi il punto ξ tale che Per arrivare a questi risultati, il ragionamen-
to è del tutto analogo a quanto è stato fatto
n
1 sulla derivata seconda nella formula compo-
f IV (ξ ) =
n ∑ f IV (ξ i ) sta dei trapezi. Questa volta, però, si deve
i =1 considerare la derivata quarta. Per eserci-
zio, si consiglia di ripetere tutti i passaggi per
Allora arrivare al risultato.

(b − a)5 IV (b − a)h4 IV
Eint = − f ( ξ ) = − f (ξ )
2880n4 2880
1
Quindi per n → ∞ l’errore tende a zero come o, equivalentemente,
n4
1
come h4 . Nella formula dei trapezi l’errore invece decresce come 2 .
n
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 125

8.4.5 Confronti tra la formula dei trapezi e di Cavalieri-


Simpson

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:
Z 1
I= e x dx = [e x ]10 = e − 1 = 1.718281828
0
1
Itrap = (1 + e) = 1.859140914
2
1 1
IC−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
Z 1
I= e x dx = e − e0.9 = 0.2586787173
0.9
0.1 0.9
I − Itrap = I − (e + e) = −2.2 × 10−4
2
0.1 0.9
I − IC−S = I− (e + 4e0.95 + e) = −9.0 × 10−9
6
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 00 = 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
e
| Etrap | ≤ (b − a)3 = 2.265 × 10−1 (b − a)3
12
e
| EC−S | ≤ (b − a)5 = 9.438 × 10−4 (b − a)5
2880

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

_
126 annamaria mazzia

Esempio Si voglia approssimare l’integrale È un integrale che non può essere risolto
analiticamente. Se si vuole calcolare
Z 1 una sua approssimazione senza fare
2
e− x dx ≈ 0.746824. uso di formule di quadrature, possiamo,
0 ad esempio, pensare di applicare la
Rb
definizione di integrale a f ( x ) dx =
Suddividiamo l’intervallo [0, 1] in 4 sottointervalli. Sia h = 1/4 = limn→∞ ∑in=0
f ( a + ih(n)) · h(n), con
h(n) = (b − a)/n, e considerare come
0.25. Per la formula composta dei trapezi abbiamo approssimazione dell’integrale la somma
parziale ∑in=0 f ( a + ih(n)) · h(n) con
h 0 2 2 2 2 un valore di n molto grande. Per esem-
Itrap = [e + 2e−h + 2e−(2h) + 2e−(3h) + e−(4h) ] pio, con n = 107 otteniamo il valore
2 0.74682420125254.
2 2 2
= 0.125[1 + 2e−0.125 + 2e−0.5 + 2e−0.75 + e−1 ]
= 0.742984

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.

h 0 2 2 3 2 2
IC−S = [e + 4e−(h/2) + 2e−(h) + 4e−( 2 h) + e−(2h) ]
6
0.25 2 2 2
= [1 + 4e−0.125 + 2e−0.5 + 4e−0.75 + e−1 ]
3
= 0.746855

A parità di punti (e non di sottointervalli) la formula di Cavalieri-


Simpson è più accurata di quella dei trapezi.
Invece considerando 4 sottointervalli nella formula di Cavalieri-
Simpson dobbiamo considerare anche i punti interni di ascisse 0.125, 0.375, 0.625, 0.875
e il risultato che otteniamo è 0.746826, evidentemente maggiormente
accurato.
_
Se la funzione integranda ha le derivate che sono facili da deter-
minare 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.
R1 2
Esempio Consideriamo 0 e− x dx. In quanti sottointervalli
bisogna suddividere l’intervallo di integrazione per applicare la for-
mula dei trapezi e di Cavalieri-Simpson e ottenere un errore che sia
minore di una tolleranza e = 10−5 ?
Per i trapezi, l’errore è maggiorato da

max0≤ x≤1 | f 00 ( x )| (b − a)3


| Etrap | ≤
12 n2

Per Cavalieri-Simpson si ha

max0≤ x≤1 | f IV ( x )| (b − a)5


| EC−S | ≤
2880 n4
appunti di calcolo numerico 127

2
Da f ( x ) = e− x abbiamo, per le derivate:
2
f 0 ( x ) = −2xe− x
2
f 00 ( x ) = (−2 + 4x2 )e− x
2
f 000 ( x ) = (12x − 8x3 )e− x
2
f IV ( x ) = (12 − 48x2 + 16x4 )e− x

Si trova che il massimo di | f 00 | e | f IV | in [0, 1] è dato dal loro valore


in x = 0, quindi abbiamo:

2 1 12 1
| Etrap | ≤ = 2 | EC−S | ≤ =
12n2 6n 2880n4 240n4

La richiesta dell’accuratezza per l’errore diventa:

| Etrap | ≤ 10−5 | EC−S | ≤ 10−5

vale a dire, rispettivamente,

1 1
≤ 10−5 ≤ 10−5
6n2 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:

Itrap = 0.74682050480289 IC−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
5
f IV (ξ 1 ) b−a f IV (ξ 1 )

E1 = − =− ( b − a )5
90 2 2880

Suddividiamo ora l’intervallo [ a, b] in due sottointervalli e applichia-


mo 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
E
tra loro, si ha E2 ≈ 1 .
16
128 annamaria mazzia

L’errore, quindi, diventa 16 volte più piccolo passando dalla for-


mula di Cavalieri-Simpson in un intervallo alla formula applicata in
due sottointervalli.
Sia I il valore esatto dell’integrale e Q1 e Q2 i due valori approssi-
mati ottenuti considerando la formula di Cavalieri-Simpson con n = 1
e n = 2 sottointervalli. Sia e l’errore, cambiato di segno, che si ha con
n = 2, e = − E2 ≈ − E1 /16. Possiamo scrivere

I + e = Q2 per n = 2
I + 16e = Q1 per n = 1

Si può ricavare e dalle due relazioni ottenendo


Q1 − Q2
e=
15
Quindi
Q2 − Q1
I ≈ Q2 +
15
Utilizzando le due approssimazioni Q1 e Q2 possiamo approssimare
l’integrale esatto con una maggiore accuratezza mediante la formula
appena scritta. Questo procedimento prende il nome di estrapola- Si può dimostrare che la nuova approssi-
mazione ottenuta coincide con la formula di
zione di Richardson. Può essere utilizzato per migliorare l’approssi-
Newton-Cotes con n = 4, dove l’errore è
mazione di un integrale ma è basato sull’ipotesi che le derivate quarte proporzionale a 1/n6 e alla derivata sesta di
della funzione integranda siano circa uguali e, quindi, va usato con f.

cautela.

8.6 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. t v
Vediamo un esempio, supponendo di voler determinare la distanza 1 20
percorsa da un veicolo di cui si conosce la velocità in alcuni istanti di 2 40
3.25 45
tempo. In particolare, si hanno i dati che vediamo in Tabella 8.6. 4.5 58
ds 6 65
Sapendo che la velocità v è data da v(t) = (dove s rappresenta lo
dt 7.2 70
spostamento e t il tempo), per calcolare la distanza percorsa dobbiamo 7.5 70
8 68
integrare la velocità tra il tempo iniziale e quello finale. In questo
9.2 60
esempio, dobbiamo anche avere unità di misure omogenee perciò il 10 52
tempo in minuti va trasformato in ore in modo che ci sia consistenza Tabella 8.1: Il tempo (t) è espresso in minuti
e la velocità (v) è data in chilometri all’ora.
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],
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: In questo problema gli istanti di tempo ci per-
mettono di applicare solo la formula dei tra-
pezi e non quella di Cavalieri-Simpson. Per
applicare la formula di Cavalieri-Simpson do-
Z 10
(2 − 1) (20 + 40) (3.25 − 2) (40 + 45) vremmo poter considerare tre istanti succes-
v(t)dt ≈ + sivi di tempo alla volta, in cui il punto centra-
1 60 2 60 2
le sia il punto medio del sottointervallo: ad
(4.5 − 3.25) (45 + 58) (6 − 4.5) (58 + 65) esempio se abbiamo un intervallo con i punti
+ +
60 2 60 2 [1, 1.5, 2, 3, 4, 4.2, 4.4], allora possiamo sud-
(7.2 − 6) (65 + 70) (7.5 − 7.2) (70 + 70) dividerlo nei sottointervalli [1, 2] con punto
+ + medio 1.5, [2, 4] con punto medio 3 e [4, 4.4]
60 2 60 2 con punto medio 4.2. E potremo applicare la
(8 − 7.5) (70 + 68) (9.2 − 8) (68 + 60) formula di Cavalieri-Simpson su ciascuno di
+ +
60 2 60 2 questi sottointervalli.
(10 − 9.2) (60 + 52)
+
60 2
= 8.29750.

Sono stati percorsi circa 8.2975 km.


Vediamo un altro esempio.
t v
Esempio Un’automobile effettua il giro di una pista in 84 0 38
6 41
secondi. La velocità dell’auto viene misurata ogni 6 secondi usando 12 45
un’apparecchiatura radar per il controllo della velocità, ricavando i 18 48
valori che si trovano in Tabella 8.6. 24 45
30 41
In base ai dati in possesso, quanto è lunga la pista? 36 37
Come nell’esempio precedente, si tratta di integrare la velocità tra 42 33
48 30
il tempo iniziale e quello finale. 54 26
Se applichiamo la formula composta dei trapezi sui 14 intervalli 60 24
di ampiezza h = 6 secondi che ricaviamo dalla tabella (ponendo 66 27
72 32
v1 = v(0), v2 = v(6), . . . , v13 = v(78), v14 = v(84)), abbiamo: 78 35
84 37
Tabella 8.2: Dati della velocità misurati ogni
  6 secondi. Il tempo (t) è espresso in secondi
v1 + v14 e la velocità (v) è data in metri al secondo.
L=6 + v2 + v3 + . . . + v13 = 3009 metri
2

Possiamo anche applicare la formula di Cavalieri-Simpson, con-


siderando 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 annamaria mazzia

8.7 Esercizi

Z 0
Esercizio 8.7.1 Sia dato l’integrale I = e− x ( x + 1) dx.
−2

(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 cal-


colato analiticamente l’integrale esatto, confrontare tale stima con
l’errore esatto.

Svolgimento

(a) Applichiamo la formula dei trapezi con n = 5 suddivisioni del-


l’intervallo dato. Vale, dunque, h = 0.4. I punti da considerare e il
valore della f ( x ) = e− x ( x + 1), sono:

i xi f ( xi )
0 -2 -7.3890561
1 -1.6 -2.97181945
2 -1.2 -0.664023385
3 -0.8 0.445108186
4 -0.4 0.895094819
5 0 1

La formula dei trapezi è


f ( x0 ) + f ( x5 )
Itrap = h( + 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 0 ( x ) = −e− x ( x + 1) + e− x = −e− x x
e f 00 ( x ) = e− x x − e− x = e− x ( x − 1).
Poichè f 00 ( x ) è sempre negativa nell’intervallo di integrazione e a
noi interessa la funzione valore assoluto della f 00 ( x ), studiamo la
funzione g( x ) = | f 00 ( x )| = e− x (1 − x ). Si ha che g0 ( x ) = e− x ( x −
2) < 0 in [−2, 0], quindi g è decrescente e ha valore massimo
per x = −2. Si ha dunque che M = max | f 00 ( x )| = | f 00 (−2)| =
22.1671682968
|(b − a)3 |
Quindi | Etrap | ≤ M = 0.591124488
12 · 52
Analiticamente, è facile calcolare l’integrale esatto (per parti):
Z 0 Z 0
I= f ( x ) dx = −e− x ( x + 1)|0−2 + e− x dx = −e− x ( x + 2)|0−2 = −2
−2 −2

Quindi l’errore esatto, in valore assoluto, è: | I − Itrap | = 0.196067154,


un valore minore della maggiorazione trovata prima.
appunti di calcolo numerico 131

Esercizio 8.7.2 Sia dato l’integrale


Z 2
2
dx
0 x−4

(a) Dare una sua approssimazione con la formula dei trapezi e n = 4


suddivisioni in parti uguali dell’intervallo di integrazione.

(b) Trovare una maggiorazione dell’errore commesso.

(c) Confrontare l’errore esatto con la stima precedentemente trovata.

(d) Dire in quanti sottointervalli occorre suddividere l’intervallo di in-


tegrazione per ottenere una maggiorazione dell’errore minore della
tolleranza e = 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)
IT = ( + 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.5( − 0.571428571 − 0.666666667 − 0.8)
2
= −1.39404762

f 00 (ξ ) (b − a)3
(b) Consideriamo la formula dell’errore: E = −
12 n2
2 −2 4
Da f ( x ) = segue f 0 ( x ) = 2
e f 00 ( x ) = .
x−4 ( x − 4) ( x − 4)3
Per maggiorare l’errore dobbiamo considerare che vale
max0≤ x≤2 | f 00 ( x )| (b − a)3
| E| ≤ , da cui dobbiamo calcolare M =
12 n2
max0≤ x≤2 | f 00 ( x )|.
La funzione ( x − 4)3 è continua, crescente e sempre negativa nel-
4 4
l’intervallo [0, 2]. Quindi | | = : osserviamo il
( x − 4)3 (4 − x )3
4
cambiamento al denominatore. Poniamo g( x ) = . Ri-
(4 − x )3
12
sulta g0 ( 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 00 ( x )| =
4
| f 00 (2)| = 3 = 1/2 = 0.5. Si ha allora la maggiorazione dell’errore
2
M 23 1
| E| ≤ = = 0.0208333333
12 42 48
(c) L’integrale esatto si calcola facilmente:
132 annamaria mazzia

Z 2
2
I= dx = 2 ln (| x − 4|)|20 = 2 ln (| − 2|) − 2 ln (| − 4|) = 2 ln (1/2) = ln (1/4) − 1.386294361
0 x−4
L’errore esatto commesso con la formula dei trapezi, in valore
assoluto, è | I − IT | = 0.00775325793

(d) Perchè la maggiorazione dell’errore sia minore della tolleranza


M 23 M 3 5
e = 10−5 deve essere | E| ≤ 2
≤ 10−5 cioè n2 ≥ 2 10 =
12 n 12
10 5
= 33333.333333. Quindi n > 182.574186, vale a dire n = 183.
3

Esercizio 8.7.3 Dato l’integrale


Z 0.5
1
I= √ dx
0 1 − x2
(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
Q1 = ( 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.
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 Q1 )
Q2 − Q1
(b) La formula di estrapolazione di Richardson è: IR = Q2 +
15
da cui ricaviamo IR = 0.5236025101

(c) Analiticamente l’integrale esatto è:


Z 0.5
1
I= √ dx = arcsin ( x )|0.5
0 = π/6 − 0 = 0.523598775
0 1 − x2

L’errore esatto commesso con l’estrapolazione di Richardson, in


valore assoluto, è: | I − IR | = 3.7351 · 10−6 .
appunti di calcolo numerico 133

Esercizio 8.7.4 È data la seguente tabella di dati sperimentali

xi 1 2 3 4 5 6 7
yi 3.1 5 6.2 8.6 9.8 11.4 12.9

dove i valori yi approssimano il valore di una certa funzione f nei punti


R7
xi . Calcolare il valore approssimato di I = 1 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 abbia-
mo 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 permet-
tono 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:


Z 2
I= 1 + 6x2 − 10x4 dx
1

(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
In1 = −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
134 annamaria mazzia

0.5. Applicando la formula di Cavalieri-Simpson composta di ha


In2 = −47.005208333333329.

(b) Per avere una maggiorazione dell’errore commesso, abbiamo


bisogno della derivata quarta. Si ha f 0 ( x ) = 12x − 40x3 , f 00 ( x ) =
12 − 120x2 , f 000 ( 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.3333333E − 002 e | En2 | = 240/(2880 ·
24 ) = 5.2083333E − 003.
Quindi, nel calcolare l’errore vero come | I − In | ci aspettiamo
di trovare gli stessi risultati. Infatti, l’integrale esatto vale I =
R2 2 4 3 5 2
1 1 + 6x − 10x dx = | x + 2x − 2x |1 = −47.
Se calcoliamo, ora, | I − In1 | e | I − In2 | ritroviamo gli stessi valori
trovati prima.

(c) Se applichiamo la formula di estrapolazione di Richardson ottenia-


mo IRich = In2 + ( In2 − In1 )/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 |!

8.8 Domande di riepilogo

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


l’interpolazione secondo Lagrange? Come si ricavano le formu-
le 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 135

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.
9 Metodi diretti per la soluzio-
ne di sistemi lineari

All’inizio e alla fine abbiamo il mistero. Po-


9.1 Un esempio di sistema lineare tremmo dire che abbiamo il disegno di Dio.
A questo mistero la matematica si avvicina,
senza penetrarlo.
Ennio De Giorgi

Si consideri la capacità C di un conduttore. Dall’elettrostatica, sap-


piamo 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. Sup-
poniamo 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 6= 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 6= 0 e tutti gli altri poten-


ziali nulli. Poi sia φ3 6= 0 e gli altri potenziali nulli. Infine φ4 6= 0 e
tutti gli altri nulli.
La sovrapposizione dei 4 stati considerati corrisponde alla situazio-
ne 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 Cii si chiamano coefficienti di capacità, mentre i coeffi-


cienti Cij , con j 6= i si chiamano coefficienti di induzione.
Si può presentare il problema inverso: note le cariche qi , 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

 = b1

 a21 x1 + a22 x2 + . . . + a2n xn

 = b2


a31 x1 + a32 x2 + . . . + a3n xn = b3 (9.1)
 .. .
= ..




 .


an1 x1 + an2 x2 + . . . + ann xn = bn

dove aij , per i, j = 1, 2, . . . , n e bi , 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):

x L’i-sima equazione del sistema può essere moltiplicata per una


qualunque costante λ 6= 0 e l’equazione risultante può essere usata
al posto di quella di partenza: la soluzione del sistema non cambia.

x L’equazione j-sima, moltiplicata per una qualunque costante


λ 6= 0 e sommata all’equazione i-sima, può essere usata al posto
dell’equazione i-sima di partenza: la soluzione del sistema non
cambia.

x Le equazioni i-sima e j-sima possono essere scambiate: la solu-


zione 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. Poichè le operazioni da fare coinvolgono i
coefficienti aij e bi , conviene scrivere il siste-
Definizione 9.2.1 Si definisce matrice n × m una griglia rettangolare (o ma di equazioni lineari utilizzando una forma
compatta mediante matrici e vettori.
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 aij si riferisce all’elemento di riga i e
colonna j della matrice A.

 
a11 a12 a13 ... a1n
a a22 a23 ... a2n 
 21 
a a32 a33 ... a3n 
   
A = aij = 
 31
 .. .. .. .. 

 . . . ... . 
an1 an2 an3 ... ann
appunti di calcolo numerico 139

Esempio:
Per indicare che una matrice A ha n righe e m colonne, diremo che  
2 10 5
A ha dimensione n × m. Quando lavoreremo con matrici quadrate A=
3 1 0
di n righe e n colonne, parleremo di dimensione n della matrice per è una matrice 2 × 3 con elementi a11 = 2,
indicare che il numero di righe è uguale al numero di colonne e vale a12 = 10, a13 = 5, a21 = 3, a22 = 1 e
n. a23 = 0.

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
 
x1
x 
 2  
x3 
 
x= x = x 1 x 2 x 3 . . . x n
 .. 
 
 . 
xn

Vediamo, nel seguito, alcune importanti definizioni e proprietà


delle matrici.

x Due matrici A e B, di dimensione n × m, sono uguali se hanno


lo stesso numero di righe e di colonne, e, inoltre, vale, aij = bij per
i, = 1, 2, . . . , n e j = 1, 2, . . . , m.

x 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 aij + bij , per i, = 1, 2, . . . , n e j = 1, 2, . . . , m.

x Se A è una matrice n × m e λ è un numero reale, la moltiplica-


zione 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.

x Indichiamo con O la matrice cosiddetta nulla, i cui elementi sono


tutti uguali a zero.

x 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 × m, e λ e µ due numeri reali,


valgono le seguenti proprietà:

GA + B = B + A G( A + B ) + C = A + ( B + C )
GA + O = O + A = A G A + (− A) = − A + A = O
Gλ( A + B) = λA + λB G(λ + µ) A = λA + µA
Gλ(µA) = (λµ) A G1A = A
140 annamaria mazzia

x 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 cij sono dati da:
m
cij = ∑ aik bkj = ai1 b1j + ai2 b2j + . . . + aim bmj
k =1
per i = 1, 2, . . . , n e j = 1, 2, . . . , p.

x Data una matrice A di dimensione n e un vettore colonna x di


lunghezza n, si definisce il vettore y = Ax 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

x Dati due vettori x e y si definisce prodotto scalare x T y = ∑in=1 xi yi


.

x In generale, AB 6= BA.

x Una matrice D si dice diagonale se è quadrata con dij = 0 per Esempio:

i 6= j. Gli elementi diversi da zero si trovano quindi sulla diagonale


 
1 0 0 0
0 2 0 0 
(detta diagonale principale) che si può tracciare partendo dall’ele- D=
 
0 0 5 0 
mento in alto a sinistra (di posto 11) e arrivando all’elemento in 0 0 0 −1
basso a destra (di posto nn).
Esempio:

x Si chiama matrice identità e si indica con I, una matrice diagonale


0
1

0
1
0
0
0
0

i cui elementi diagonali valgono 1. I=


 
0 0 1 0

x Una matrice si dice tridiagonale se gli elementi non nulli si


0 0 0 1

trovano sulla diagonale principale e sugli elementi delle diagonali Esempio di matrice tridiagonale:
che si trovano sopra e sotto la diagonale principale. −2

1 0 0 0

x
 1
 −2 1 0 0 
Una matrice si dice triangolare se ha tutti gli elementi nulli A=
 0 1 −2 1 0 
 0 0 1 −2 1 
ad eccezione di quelli che si trovano tutti sopra (o tutti sotto) la
0 0 0 1 −2
diagonale principale.

– 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
Esempi:
 
1 −2 5.3
– Si definisce matrice triangolare inferiore L (L sta per lower) di U = 0 3.2 −4
dimensione n, la matrice per la quale, per i = 1, 2, . . . , n, si ha 0 0 10
 
1 0 0
lij = 0 per j = i + 1, i + 2, . . . , n L= 2 −21 0 
−3.4 5.7 −4

Teorema 9.2.2 Date A matrice n × m, B matrice m × s, C matrice s × p,


D matrice m × s, Im e Is le matrici identità, rispettivamente di dimensione
m e s, e λ e µ due numeri reali, valgono le seguenti proprietà:
appunti di calcolo numerico 141

G A(BC) = ( AB)C G A(B + D) = AB + AD


G I B = B BI = B Gλ( AB) = (λA)B = A(λB).
m s

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:

x A è unica
−1

x A è nonsigolare e ( A ) = A
−1 −1 −1

x Se B è non singolare, di dimensione n, allora ( AB) −1 = B −1 A −1

Dato il sistema Ax = b, se A è nonsingolare, si ha x = A−1 b.


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 × m è


la matrice indicata con A T , di dimensione m × n, per la quale la colonna i
della trasposta coincide con la riga i della matrice A di partenza: aijT = a ji .
Esempio:
Legata alla trasposta di una matrice è la seguente definizione.  
  1 2
1 2 3 T
A= A = 2 5
Definizione 9.2.4 Una matrice quadrata si dice simmetrica se A = A T . 2 5 6
3 6

Esempio:
Teorema 9.2.4 Valgono le seguenti proprietà (per matrici per cui è possi-    
1 4 8 1 4 8
bile eseguire le seguenti operazioni): A = 4 2 6 A T = 4 2 6
8 6 5 8 6 5

G( A ) T T =A G( A + B ) = A + B
T T T

G( AB) T = BT AT GSe esiste A allora ( A


−1 −1 ) T = ( A T ) −1

Il determinante di una matrice permette di stabilire esistenza e


unicità della soluzione nei sistemi lineari. Data una matrice quadrata
A, il suo determinante si indica mediante la notazione det( A) o | A|.

x Se A = [ a] è una matrice 1 × 1, det( A) = a.

x 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.
142 annamaria mazzia

x Il determinante di A è dato dalla formula


n
det( A) = ∑ (−1)i+ j aij Mij (fissato un qualunque i = 1, 2, . . . , n)
j =1
n
det( A) = ∑ (−1)i+ j aij Mij (fissato un qualunque j = 1, 2, . . . , n)
i =1

Il calcolo del determinante di una matrice di dimensione n richie-


de 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.

x Se una riga o una colonna di A ha elementi tutti nulli, det( A) = 0.


x Se A ha due righe o due colonne con gli stessi elementi, det( A) = 0.
x Denotata con à la matrice ottenuta scambiando due righe di A, si ha
det( Ã) = −det( A).

x Denotata con à la matrice ottenuta da A moltiplicando una sua riga


per un numero reale λ, si ha det( Ã) = λdet( A).

x Denotata con à la matrice ottenuta da A sommando una sua riga per


un’altra che è stata moltiplicata per λ, si ha det( Ã) = det( A).

x Se B è un’altra matrice di dimensione n, si ha det( AB) = det( A)det(B)


x det( A ) = det( A)
T

x Se esiste A −1 , si ha det( A−1 ) =


1
det( A)

x Se A è una matrice triangolare superiore o triangolare inferiore o dia-


gonale, allora det( A) = ∏in=1 aii

9.3 Metodo di eliminazione di Gauss


Carl Friedrich Gauss fu un matematico e fi-
sico tedesco (1777-1855) che ha dato il suo
contribuito in maniera significativa in numero-
Ritorniamo al sistema di equazioni (9.1), che possiamo scrivere in si campi: teoria dei numeri, analisi, geometria
forma matriciale come Ax = b. differenziale, geodesia, magnetismo, astro-
nomia, ottica. Al pari di Eulero, Newton e
Nel metodo di eliminazione di Gauss il sistema lineare di partenza Archimede è considerato uno dei più grandi
viene trasformato in uno equivalente di più facile soluzione in quanto matematici della storia.
In suo onore è stato dato il suo nome a
la matrice del nuovo sistema ha forma triangolare (superiore o inferio-
una nave di ricerca tedesca, a una montagna
re) e può essere risolto facilmente mediante sostituzione (all’indietro (Gaussberg) in Antartide, a un cratere sul-
o in avanti). la luna, e all’unità di misura della densità di
flusso magnetico o di induzione magnetica.
Vediamo nel dettaglio come si risolve un sistema lineare di forma
triangolare, utilizzando queste tecniche.
appunti di calcolo numerico 143

9.3.1 Sostituzione all’indietro e in avanti

La matrice A sia nonsingolare e triangolare superiore, cioè


 
a11 a12 . . . a1n
 .. 
 a22 . a2n 
A=
 
.. .. 
. . 
 

ann
La soluzione del sistema Ax = 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 = b1

 a22 x2 + a23 x3 + . . . . . . + a2n xn = b2





 a33 x3 + . . . . . . + a3n xn

= b2
.
.. .


 = ..

 a n −1 n −1 x n −1 + a n −1 n x n = bn − 1






ann xn = bn
L’ultima riga si legge come ann xn = bn . Quindi possiamo ricavare
xn = bn /ann .
Noto il valore di xn , possiamo ricavare xn−1 dalla riga n − 1 del
1
sistema ottenendo xn−1 = (b − a n −1 n x n ).
a n −1 n −1 n −1
Si procede a ritroso in questo modo arrivando fino alla prima
equazione che ci permette di calcolare il valore di x1 . Osserviamo che
tutte le divisioni per i coefficienti aii sono possibili in quanto stiamo
supponendo A non singolare e, poichè, in questo caso, det ( A) =
∏in=1 aii 6= 0, necessariamente ciascun aii 6= 0.
Possiamo dunque scrivere l’algoritmo di sostituzione all’indietro:
Per i = n fino a i = 1, procedendo all’indietro con passo −1

bi − ∑nj=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 x1 e
poi si va avanti nell’equazione successiva.
Si ha l’algoritmo di sostituzione in avanti:
Per i = 1 fino a i = n, procedendo in avanti con passo 1

bi − ∑ij− 1
=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
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 sem-
plice esempio di sistema di 3 equazioni in 3 incognite, Ax = b
dove
   
2 1 2 10
A = 4 1 2 b = 12
   
1 2 5 20

Le equazioni del sistema sono, dunque,



2x1 + x2 + 2x3 = 10


4x1 + x2 + 2x3 = 12


x1 + 2x2 + 5x3 = 20

x Al primo passo del metodo, cerchiamo di annullare tutti i coeffi-


cienti dell’incognita x1 nella seconda e terza equazione.

– Dividiamo il coefficiente 4 che moltiplica x1 nella seconda equa-


zione con il coefficiente 2 che moltiplica x1 nella prima equa-
4
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 siste-


ma rimane equivalente), ricavando

2x1 + x2 + 2x3 = 10


− x2 − 2x3 = −8


x1 + 2x2 + 5x3 = 20

Abbiamo eliminato, in questo modo, il coefficiente di x1 nella


seconda equazione.

– Alla stessa maniera, dividiamo il coefficiente di x1 nella terza


equazione (che vale 1) con il coefficiente di x1 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 145

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
x2 + 4x3 = 15
2
Sostituiamo questa equazione alla terza del sistema.
– A questo punto il sistema è

2x + x2 + 2x3 = 10
 1



− x2 − 2x3 = −8
 3 x2 + 4x3 = 15



2
Nella seconda e terza equazione non c’è più l’incognita x1 .

x Per poter arrivare ad un sistema di equazioni triangolare superio-


re, dobbiamo eliminare il coefficiente di x2 nella terza equazione
del sistema. Ripetiamo il ragionamento appena fatto, lavorando
sulla seconda e terza equazione.
3
– Consideriamo il coefficiente di x2 della terza equazione ( ) e
2
lo dividiamo per il coefficiente di x2 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− x2 + 4x3 = 15−
2 2
3 3
− (− x2 − 2x3 = −8) ⇐⇒ x2 + 3x3 = 12 =
2 2

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


ma 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 x2 = 2. Infine, sostituendo i valori di x3 e x2
nella prima equazione abbiamo 2x1 + 2 + 6 = 10 da cui x1 = 1.
146 annamaria mazzia

9.3.3 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 Ax = b, infatti, non cambia se moltipli-
chiamo 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.

x Al primo passo vogliamo eliminare gli elementi della prima


colonna al di sotto della diagonale principale:
a21
– sottraiamo la prima equazione moltiplicata per dalla secon-
a11
da equazione:

a21 x1 + a22 x2 + a23 x3 + . . . + a2n xn = b2 −


a21 a21
( a x + a12 x2 + a13 x3 + . . . + a1n xn ) = b =
a11 11 1 a11 1

a21 a a a
( a22 − a ) x + ( a23 − 21 a13 ) x3 + . . . + ( a2n − 21 a1n ) xn = b2 − 21 b1
a11 12 2 a11 a11 a11

a31
– sottraiamo la prima equazione moltiplicata per dalla terza
a11
equazione.
– ...
an1
– sottraiamo la prima equazione moltiplicata per 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 ... a1n x1 b1
(1) (1)     (1) 
0 a22 ... a2n   x2  b2 


 .. .. ..   ..  = 
  
 . 

. . ... .   .   .. 


(1) (1) xn (1)
0 an2 ... ann bn

x 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 . . . . . . a1n  x 
 
1
b1
(1) (1) (1)
   b (1) 
 
 0 a22 a23 . . . a2n 
   x2   2(2) 

 .. (2) (2)  x 
  
b3 
a33 . . . a3n    3 = 
 . 0


  ..   .. 

 . . . .

 .. .. .. ... ..   .   .  
 
(2) (2) x (1)
0 0 a ... a n b nnn
n3

x Dopo aver applicato questo procedimento n − 1 volte, avremo


un sistema triangolare superiore semplice da risolvere utilizzando
l’algoritmo di sostituzione all’indietro.
 
a11 a12 . . . . . . a1n    
x1 b1
(1) (1) (1)
   b (1) 
 
 0 a22 a23 . . . a2n 
   x2   2 
 .. (2) (2)     (2) 

 . 0 a . . . a   x 3  =
 b3 
33 3n    
 .   .. 

 . .. .. 
 .. . . . . . . . .   ..    . 

 
( n −1) xn ( n −1)
0 0 ... 0 ann bn

9.4 Strategie di pivoting

(k)
Gli elementi diagonali aii generati ad ogni passo del metodo di
eliminazione sono detti elementi pivotali.
Nel descrivere il metodo di eliminazione di Gauss abbiamo suppo-
sto, 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 cor-
rispondente 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’elimina-
zione di Gauss?
Si hanno le cosiddette strategie di pivoting:

x 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 Si opera, dunque, un controllo sulla colonna
i-sima dalla posizione i fino alla posizione n,
( i −1) ( i −1)
| aqi | = max | a ji | andando a cercare il coefficiente massimo in
i ≤ j≤n modulo.

e si scambiano le righe i e q.
148 annamaria mazzia

x pivoting totale Con il pivoting totale, si opera uno scambio


non solo di righe ma anche di colonne in
Nel pivoting totale, invece, la ricerca dell’elemento più grande in
modo da portare l’elemento pivotale dalla riga
tutta la sottomatrice che si ha considerando le colonne e le righe e colonna qr al posto ii. Di questo scambio
rispettivamente a destra e sotto l’elemento diagonale i-simo. Si di colonne bisogna conservare traccia perchè
vengono scambiate anche le componenti del
vanno quindi a cercare i più piccoli interi q e r tali che vettore soluzione, in modo da effettuare lo
scambio inverso una volta risolto il sistema.
( i −1) ( i −1)
| aqr | = max | a jk |
i ≤k,j≤n

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.0001x2 + 2x3 = 2


x1 + 2x2 + 2x3 = 1

L’esatta soluzione, corretta a 4 cifre decimali, è x = (1, −1.0001, 1.0001) T .


L’eliminazione di Gauss senza pivoting porta, 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 3


cifre decimali, la sostituzione all’indietro ci darà
−10000 1−1
x3 = = 1.000, x2 = = 0, x1 = 0.
−9999 0.0001
La soluzione è completamente sbagliata.
Se, invece, facciamo lo scambio della seconda e terza riga adottando
il pivoting parziale, allora avremo il sistema:

 x1 + x2 + x3 = 1


1x2 + 1x3 = 0


0.0001x2 + 1x3 = 1

e, infine,

 x1 + x2 + x3 = 1


1x2 + 1x3 = 0


0.9999x3 = 1

appunti di calcolo numerico 149

Questa volta si ha (sempre lavorando con 3 cifre decimali) x3 = 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
 
1
0 1
 

. 
. 
. 0 1 
 .. ..
 

. . 0 1 
 
( k −1)
 .. .. .. a k +1 k
 

. . . − 1 
(k) ( k −1)
M = akk
 

( k −1)
 
. . .
. . . a k +2 k .. 
 . . . − ( k −1) . 


 akk 

. . . .. .. 
 .. .. .. . . 
 

. . . ( k − 1 ) 
 .. .. .. − an k

( k −1)
1 
akk

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 è trian-
golare 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 matri-
ce 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 ma-
trice 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
 
1 0 0
P = 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:

    
1 0 0 a11 a12 a13 a11 a12 a13
PA = 0 0 1  a21 a22 a23  =  a31 a32 a33 
    
0 1 0 a31 a32 a33 a21 a22 a23

    
a11 a12 a13 1 0 0 a11 a13 a12
AP =  a21 a22 a23  0 0 1 =  a21 a23 a22 
    
a31 a32 a33 0 1 0 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 (post-
moltiplicando o pre-moltiplicando le L e le U definite prima per la
D).

x Nel caso in cui la matrice D viene inglobata nella matrice L, la L


ha elementi diagonali lii 6= 0, mentre la U ha elementi diagonali
unitari. Si parla di fattorizzazione di Crout.

x Nel caso in cui la matrice D viene inglobata nella matrice U, la


U ha elementi diagonali uii 6= 0, mentre la L ha elementi diagonali
unitari. Si parla di fattorizzazione di Doolittle.

Scriviamo in forma estesa il prodotto tra matrici, nell’ipotesi di


operare la fattorizzazione di Crout:
    
a11 a12 . . . a1n l11 0 . . . 0 1 u12 ... u1n
 a21 a22 . . . a2n   l21 l22 . . . 0  0 1 ... u2n 
    
 =  ..
 . .. ..   .. ..  . .. .. 
 .  .
 . . .   . . .  . . . 

an1 an2 . . . ann ln1 ln2 . . . lnn 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 = a11
l11 · u1k = a1k , k = 2, . . . , n
Quindi: l11 = a11 e u1k = a1k /l11 . Abbiamo ricavato gli elementi
della prima riga di L e U.
Moltiplicando le successive righe di L per le colonne di U ed
uguagliando i termini ai corrispondenti termini di A, abbiamo:

j −1
lij = aij − ∑ lim umj i = 1, 2, . . . n j = 1, 2, . . . , i
m =1
i −1
1
uij = ( aij − ∑ lim umj ) i = 1, 2, . . . , n − 1 j = i + 1, . . . n
lii m =1

Si calcolano prima gli elementi della riga i-sima di L e poi quelli della
riga i-sima di U, per i = 1, 2, . . . , n.
Trovate le matrici L e U, il sistema di partenza Ax = b è equivalente
a LUx = b.
Si pone, dunque, y = Ux, ottenendo il sistema Ly = b. Si ricava
facilmente y mediante sostituzione in avanti e da Ux = y si ricava x
mediante sostituzione all’indietro. Nell’eliminazione di Gauss noi ricaviamo
espressamente solo la U mentre le modi-
Lo sforzo computazionale maggiore è quindi quello per il calcolo
fiche operate sulla colonna dei termini noti
dei coefficienti di L e U. è equivalente al prodotto L−1 b (quindi da
LUx = b risolviamo Ux = L−1 b).

9.5.2 Fattorizzazione di Gauss senza pivoting

Abbiamo visto che, a volte, il metodo di eliminazione di Gauss richie-


de scambi di righe per evitare divisioni per zero. Allo stesso modo, il
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
n
| aii | > ∑ |aij | per ogni i = 1, 2, . . . , n.
j =0
j 6 =i

Definizione 9.5.3 Una matrice A di dimensione n si dice diagonalmente


dominante in senso stretto per colonne se vale la relazione
n
| a jj | > ∑ |aij | per ogni j = 1, 2, . . . , n.
i =0
i6= j

Esempio
 
7 3 1
A = 2 10 −2
 
5 0 6
A è una matrice diagonalmente dominante in senso stretto per righe
poichè vale:|7| > |3| + |1| = 4, |10| > |2| + | − 2| = 4 e |6| > |5| + |0|.
Non è diagonalmente dominante in senso stretto per colonne in
quanto sulla prima colonna si ha |7| = |2| + |5|.
_

Esempio
 
6 3 −4
A= 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 | per ogni i = 1, 2, . . . , n.
j =0
j 6 =i
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 ca-
so 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

x definita positiva se è simmetrica e vale x T Ax > 0 qualunque sia il


vettore x 6= 0

x semidefinita positiva se x T Ax ≥ 0 qualunque sia il vettore x,

x indefinita altrimenti.
Osserviamo che non tutti gli autori richiedono
Si ha un’analoga definizione per matrici definite negative e semi- la simmetria per definire una matrice defi-
nita positiva, e distinguono tra matrici defi-
definite negative. nite positive e matrici simmetriche definite
positive.
Definizione 9.5.5 Una matrice A di dimensione n si dice

x definita negativa se è simmetrica e vale x T Ax < 0 qualunque sia il


vettore x 6= 0,

x semidefinita negativa se x T Ax ≤ 0 qualunque sia il vettore x.

Dalla definizione di matrice definita positiva, deve essere x T Ax > 0


qualunque sia il vettore x, vale a dire:
  
a11 a12 . . . a1n x1
 a21 a22 . . . a2n   x2 
  
x1 x2 . . . x m   .. ..  . 
..   
 . . ... .   .. 
an1 an2 ... ann xm

∑nj=1 a1j x j
 
n
 ∑ j=1 a2j x j 
 n n
 
= x1 x2 ... xm 
 ..  = ∑ ∑ aij xi x j > 0

 .  i =1 j =1
n
∑ j=1 anj x j
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 so-
no 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

x A ammette la matrice inversa;

x aii > 0 per ogni i = 1, 2, . . . , n

Quindi se una matrice ha elementi aii ≤ 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 = LDL T , dove L è triangolare inferiore con
elementi diagonali unitari ed è univocamente determinata, L T è la sua
trasposta e D è matrice diagonale.

Dimostrazione. Intanto valgono le ipotesi del teorema LDU e


quindi si può scrivere in maniera univoca A = LDU con L matrice
triangolare inferiore, D diagonale e U triangolare superiore. Inoltre,
poichè A è simmetrica, e quindi A = A T , si ha pure LDU = ( LDU ) T
vale a dire LDU = U T D T L T = U T DL T . Si deduce, dall’uguaglianza,
che U = L T e la decomposizione diventa A = LDL T . 4

Proposizione 9.5.1 (Fattorizzazione di Cholesky) Nel caso particola-


re in cui A sia simmetrica e definita positiva, da x T Ax > 0 vale pure

x T Ax = x T LDL T x = ( L T x) T DL T x = y T Dy > 0 con y = L T x per ogni x > 0.

Essendo A è definita positiva, risulta anche D definita positiva. Perciò


gli elementi di D (che è una matrice diagonale) devono necessaria-
mente essere tutti positivi. In tal caso, si considera la matrice D1/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 ele-
menti diagonali di D sono tutti positivi). Si pone, quindi, M = LD1/2
e si ottiene A = MM 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 = ai1 /l11 i = 2, 3, . . . , n
v
i −1
u

u
l = t( a −
ii ii l2 ) ik i = 2, 3, . . . , n
k =1
j −1
1
l jj ij k∑
lij = (a − lik l jk ) j = 2, . . . , n i = j + 1, . . . , n
=1

. André-Louis Cholesky (1875-1918) fu un ma-


tematico francese. Fu ufficiale ingegnere e
Tale fattorizzazione prende il nome di fattorizzazione di Cholesky.
morì alla fine della prima guerra mondiale.

9.6 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 L T tali che A = LL T .

Svolgimento
La matrice A è simmetrica ! e soddisfa le ipotesi del teorema LDU (
1 0
infatti | a11 | = 1, det = 4 e det( A) = 116 − 16 − 64 = 36) per
0 4
cui è possibile scrivere la matrice A come A = LL T . Si ha, quindi:

    
l11 0 0 l11 l21 l31 l2 l11 l21 l11 l31
  11 2 + l2
l21 l22 0  0 l22 l32  = l21 l11 l21 l21 l31 + l22 l32 
  
22
l31 l32 l33 0 0 l33 l31 l11 l31 l21 + l32 l22 2 + l2 + l2
l31 32 33
156 annamaria mazzia

Devono quindi valere le relazioni:

2
l11 = 1 =⇒ l11 = 1
l21 l11 = 0 =⇒ l21 = 0
l31 l11 = 2 =⇒ l31 = 2
2 2

l21 + l22 = 4 =⇒ l22 = 4 − 0 = 2
l21 l31 + l22 l32 = 8 =⇒ l32 = 8/2 = 4
2 2 2
p √ √
l31 + l32 + l33 = 29 =⇒ l33 = 29 − 22 − 42 = 29 − 4 − 16 = 9 = 3

La matrice L è dunque

 
1 0 0
0 2 0
 
2 4 3

 9.6.2 Data la matrice


Esercizio 
0.2 1 0.2
A =  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 Ax = 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.2 1
a11 = 0.2 6= 0 det = 0.3 6= 0 det A = 0.375 6= 0
1 6.5

(b) La fattorizzazione di A come A = LU si costruisce imponendo:

    
0.2 1 0.2 l11 0 0 1 u12 u13
A=1 6.5 1.75 = LU = l21 l22 0  0 1 u23 
    
0 2 2.25 l31 l32 l33 0 0 1
appunti di calcolo numerico 157

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:
   
0.2 0 0 1 5 1
L =  1 1.5 0  U = 0 1 0.5
   
0 2 1.25 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 Ax = b si ha LUx = b.
Si pone Ux = y e si hanno i due sistemi da risolvere per sostituzio-
ne in avanti e all’indietro: Ly = b e Ux = y.

     
0.2 0 0 y1 2.8 y1 = 2.8/0.2 = 14


1 1.5 0  y2  = 19.25 =⇒ y2 = (19.25 − 14)/1.5 = 3.5
    

0 2 1.25 y3 10.75 

y3 = (10.75 − 2 · 3.5)1.25 = 3

     
1 5 1 x1 14  x3 = 3


0 1 0.5  x2  = 3.5 =⇒ x2 = 3.5 − 3 · 0.5 = 2
    

0 0 1 x3 3 

x1 = 14 − 3 − 5 · 2 = 1

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

 9.6.3 Sia data la


Esercizio  matrice
2 0.5 0.5
A = 0 1 −1 
 
1 −0.5 10.5

(a) Calcolare k Ak∞ (norma massima per righe), k Ak1 (norma massima
per colonne) e norma F ( A) (norma di Frobenius).

(b) Fattorizzare la matrice A nel prodotto LU (con lii = 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 A2 .
158 annamaria mazzia

Svolgimento

(a) Applicando le definizioni per le diverse norme abbiamo: k Ak∞ =


max (3, 2, 12) = 12,
k Ak1 = 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 lii = 1, imponendo


l’uguaglianza LU = A si ha:
    
1 0 0 u11 u12 u13 2 0.5 0.5
l21 1 0  0 u22 u23  = 0 1 −1 
    
l31 l32 1 0 0 u33 1 −0.5 10.5

vale a dire
   
u11 u12 u13 2 0.5 0.5
l21 u11 l21 u12 + u22 l21 u13 + u23  = 0 1 −1 
   
l31 u11 l31 u12 + l32 u22 l31 u13 + l32 u23 + u33 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 = −0.75
u33 = 9.5

Quindi le due matrici sono


   
1 0 0 2 0.5 0.5
L=0 1 0 U = 0 1 −1
   
0.5 −0.75 1 0 0 9.5

(c) Per risolvere il sistema,


 applichiamo i seguenti passaggi: Ax =
Ux = y
b =⇒ LUx = b =⇒ .
 Ly = b

     
1 0 0 y1 4.5 y1 = 4.5


Ly = b =⇒  0 1 0 y2  =  −1  =⇒ y2 = −1
    

0.5 −0.75 1 y3 31.5 

y3 = 28.5
       
2 0.5 0.5 x1 4.5  x3 = 3 1


Ux = y =⇒ 0 1 −1  x2  =  −1  =⇒ x2 = 2 =⇒ x = 2
      

0 0 9.5 x3 28.5 

x1 = 1 3

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.
appunti di calcolo numerico 159

 9.6.4 È dato il sistema


Esercizio  lineareAx = b dove:
16 −8 4 20
A = −8 20 4  b =  28 
   
4 4 12.25 28.25

(a) Provare che la matrice è definita positiva.

(b) Fattorizzare la matrice secondo Cholesky: A = LL T .

(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 elemen-


ti della diagonale principale sono tutti positivi e la matrice è
diagonalmente dominante in senso stretto:

16 > | − 8| + |4| = 12
20 > | − 8| + |4| = 12
12.25 > |4| + |4| = 8

(b) Ponendo A = LL T si ricava:


2
l11 = 16 =⇒ l11 = 4
l21 l11 = −8 =⇒ l21 = −2
l31 l11 = 4 =⇒ l31 = 1
2 2

l21 + l22 = 20 =⇒ l22 = 20 − 4 = 4
l21 l31 + l22 l32 = 4 =⇒ l32 = (4 + 2)/4 = 1.5
2 2 2
√ √
l31 + l32 + l33 = 12.25 =⇒ l33 = 12.25 − 1 − 2.25 = 9 = 3

La matrice L è dunque
 
4 0 0
L =  −2 4 0
 
1 1.5 3

(c) Per risolvere il sistema Ax = b, adoperiamo il metodo di sosti-


tuzione in avanti e all’indietro risolvendo i sistemi: Ly = b e poi
L T x = y.
Il primo sistema dà:
    
4 0 0 y1 20
−2 4 0 y2  =  28 
    
1 1.5 3 y3 28.25

e otteniamo y1 = 20/4 = 5, y2 = (28 + 10)/4 = 9.5, y3 = (28.25 −


5 − 14.25)/3 = 3.
160 annamaria mazzia

Nel risolvere il sistema L T x = y si ha


    
4 −2 1 x1 5
0 4 1.5  x2  = 9.5
    
0 0 3 x3 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 solu-
zione di sistemi lineari

Mi spiace ammettere che la materia che mi è


10.1 Da un’equazione alle derivate parziali ad un siste- piaciuta di meno è stata la matematica. Ci ho
pensato su, e credo che la ragione sia che la
ma lineare 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 Si tratta di un’equazione alle derivate parziali
dove T [ o C] è la temperatura, K H [m2 /s] è il
∂2 T ∂2 T f ( x, y) coefficiente di diffusività termica, ρ [Kg/m2 ]
2
+ 2
= è la densità della piastra, c [Cal/Kg o C ] è il
∂x ∂y ρcK H calore specifico, f ( x, y) [Cal/m2 s] è il calo-
re aggiunto o sottratto alla piastra per unità
In letteratura diverse tecniche numeriche permettono di risolvere il di tempo e di area.
problema (ricordiamo i metodi alle differenze finite e i metodi agli
elementi finiti), in determinati punti (detti nodi) della piastra. Qua-
lunque sia il metodo utilizzato, si arriva ad un sistema di equazioni
lineari del tipo

HT = q

dove H rappresenta la matrice di discretizzazione del metodo, T


rappresenta il vettore delle temperature nei nodi e q è il vettore dei
termini noti che deriva dal metodo applicato.
La matrice H puó avere una dimensione molto elevata ma ha la
caratteristica di essere sparsa, cioè di avere pochi elementi diversi da
zero per ogni riga.
Per risolvere sistemi lineari di questo tipo, si preferisce usare
metodi iterativi piuttosto che diretti. In questo Capitolo presentiamo
alcuni dei metodi iterativi per la risoluzione di sistemi lineari.

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’approssima-
zione iniziale che viene migliorata, mediante un procedimento iterati-
162 annamaria mazzia

L’idea di risolvere sistemi lineri con metodi


iterativi risale ai tempi di Gauss (1823), ma
vo, fino ad ottenere una approssimazione sufficientemente accurata
solo con l’avvento dei computers (negli anni
della soluzione. cinquanta) si può osservare il loro sviluppo,
Quando abbiamo studiato gli zeri di funzione nel Capitolo 5, data visto che diventa possibile risolvere sistemi
lineari dove la matrice A è sparsa e di grandi
un’approssimazione iniziale, si procedeva nell’algoritmo iterativo fino dimensioni – un particolare tipo di problema
a quando lo scarto tra due approssimazioni successive non diventava improponibile per i metodi diretti. Difatti, nei
metodi diretti, il processo di eliminazione di
minore di una prefissata tolleranza.
Gauss (o la decomposizione della matrice
Nel caso dei sistemi lineari, l’approccio è simile. Si parte da un di partenza nel prodotto LU con L triangola-
vettore iniziale che approssima la soluzione del sistema e, mediante un re inferiore e U triangolare superiore) porta
all’introduzione del cosiddetto fill-in, cioè a
certo procedimento ricorsivo, si calcola una nuova approssimazione matrici L e U con elementi diversi da zero
(un vettore). Dobbiamo dunque essere capaci di misurare lo scarto là dove la matrice di partenza A ha elementi
nulli. I metodi diretti diventano quindi proibitivi
tra due vettori in modo da capire quando la successione dei vettori
perchè troppo costosi per quanto riguarda il
generati dall’algoritmo tende al vettore soluzione del sistema lineare. numero di operazioni aritmetiche e l’occupa-
Abbiamo perciò bisogno di definire le norme di vettori e di matrici. zione di dati che devono essere salvati per
l’implementazione numerica del metodo stes-
Nel seguito, tratteremo solo norme di matrici e vettori definite nello so. I metodi iterativi, al contrario, lavorano
spazio dei numeri reali (e non complessi). direttamente sulla matrice A e, dal momen-
to che A viene coinvolta solo in termini di
prodotti matrice-vettore, non c’è neanche bi-
10.3 Norme di vettori sogno di memorizzare tutta la matrice (in ge-
nere, quando la matrice è sparsa, si lavora su
memorizzazioni in forma compatta delle ma-
trici, memorizzando solo gli elementi non nulli
Il concetto di norma generalizza quello di valore assoluto (o modulo) che servono per il prodotto matrice-vettore).

di un numero reale (o complesso).


n
Sia R lo spazio dei vettori colonna di lunghezza n. La norma di
n n
un vettore x ∈ R è una funzione, k · k, definita in R e a valori in R,
che gode delle seguenti proprietà:
x kxk > 0 per ogni x 6= 0

x kxk = 0 se e solo se x = 0

x kαxk = |α|kxk dove α è un reale (o complesso) arbitrario

x kx + yk ≤ kxk + kyk
Le principali norme vettoriali sono:
x Norma assoluta (o norma l1 ), indicata con k · k1 : kxk1 = ∑in=1 | xi |

x Norma massima (o norma infinito, l∞ ), indicata con k · k∞ :


kxk∞ = max1≤i≤n | xi |

x

qNorma euclidea (o norma l 2 ), indicata con k · k 2 : k x k 2 = xT x =
n
∑ i =1 | x i | 2
Tra le norme 1, ∞ e 2 valgono le seguenti relazioni (che pongono
n
un’equivalenza tra esse). Dato un vettore x ∈ R :

k x k ∞ ≤ k x k2 ≤ n k x k ∞
k x k ∞ ≤ k x k1 ≤ n k x k ∞

Esempio Il vettore x = (1, 5, −20) T ha norme:


kxk1 = |1| + |5| + | − 20| = 26
kxk∞ = max (|1|, |5|, | − 20|) = 20
q √
kxk2 = (12 + 52 + (−20)2 ) = 426 = 20.639767441
appunti di calcolo numerico 163

R2 con norma unitaria


Figura 10.1: Vettori in
nelle norme 1, ∞ e 2.

Per la norma euclidea vale la diseguaglianza di Cauchy-Schwarz

x T y ≤ k x k2 k y k2
n
Dati due vettori x e y ∈ R , si definisce distanza tra i due vettori
la norma della differenza tra i vettori. Quindi:
n
k x − y k1 = ∑ | xi − yi |
i =1
kx − yk∞ = max | xi − yi |
1≤ i ≤ n
s
n
k x − y k2 = ∑ | x i − y i |2
i =1

Il concetto di distanza serve per definire il limite di una successione


di vettori.
n
Data una successione di vettori in R , x(k) , per k = 1, 2, . . . , ∞, si
n
dice che la successione converge ad un vettore x di R e si scrive
limk→∞ x(k) = x se, per ogni e > 0, esiste un intero m tale che

kx(k) − xk < e per tutti gli indici k ≥ m

10.4 Norme di matrici

Analogamente alla definizione di norma vettoriale, la norma di matrici


quadrate di dimensione n è una funzione, che indichiamo con k · k
che, per tutte le matrici A e B di dimensione n e per tutti i numeri
reali (o complessi) α, soddisfa le seguenti proprietà:

x k Ak > 0 per ogni A 6= 0

x k Ak = 0 se e solo se A = 0

x kαAk = |α|k Ak

x k A + Bk ≤ k Ak + k Bk

x k ABk ≤ k Akk Bk

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 k Ak di una matrice A si dice compatibile


con la norma kxk di un vettore x se vale la relazione

k Axk ≤ k Akkxk
Alcune norme su matrici sono generate da norme su vettori: si
parla allora di norma naturale o indotta dalla norma di vettori. Una definizione alternativa a quella che ab-
biamo dato per la norma naturale su matrici
n
Definizione 10.4.2 Se k · k è una norma su vettori in R , si defini- è data da k Ak = maxy6=0
k Ayk
. Infatti,
sce come norma naturale o indotta su matrici la norma data da k Ak = kyk
preso un qualunque vettore y 6= 0, si può
maxkxk=1 k Axk. considerare il vettore x = y/kyk che ha
norma unitaria. Allora (sfruttando le proprie-
Le norme di matrici indotte dalla norma 1 e dalla norma infinito tà delle norme su vettori e considerando la
su vettori sono: relazione che lega x a y) abbiamo

x

y
Norma 1: k Ak1 = max j ∑in=1 | aij | (data dal massimo sulla somma

k Ak = max k Axk = max A
kyk
kxk=1 y6=0
delle colonne)
da cui

x Norma infinito: k Ak∞ = maxi ∑nj=1 | aij | (data dal massimo sulla k Ak = max
y6=0
k Ayk
kyk
somma delle righe)
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

G N( A) = ptr( A
r
∑ni=1 | aij |2 .
p
T A) = tr ( AA T ) =
j =1
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,
k Axk k Axk
≤ max = k Ak
kxk x6=0 k x k

da cui

k Axk ≤ k Akkxk
Se invece il vettore x è il vettore nullo, la relazione di compatibilità è
ovvia. 4

10.5 Autovalori e autovettori

Data una matrice quadrata A di ordine n, se esiste un numero (reale


o complesso) λ e un vettore x 6= 0 tali che

Ax = λx
appunti di calcolo numerico 165

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 6= 0 e il termine noto del sistema è il vettore di tutti zeri, il


determinante della matrice del sistema deve necessariamente essere
uguale a zero, cioè det ( A − λI ) = 0.
Lo sviluppo del determinante porta a un polinomio di grado n
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 n
∑ λi = tr( A) = a11 + a22 + . . . + ann e ∏ λi = det ( A)
i =1 i =1

Alcune proprietà sugli autovalori e autovettori sono le seguenti:

x Se λ è autovalore della matrice A, allora λk è autovalore della


matrice potenza Ak (cioè A · A · · · A k volte).

x Se λ è autovalore della matrice A, e A è regolare, allora λ−1 è


autovalore della matrice inversa A−1 .

x Gli autovalori di una matrice A e della sua trasposta A T sono gli


stessi (ma gli autovettori sono, in genere, diversi).

x Se A e B sono due matrici arbitrarie regolari, allora gli autovalori


di AB sono gli stessi di BA.

Se x è un autovettore associato alla matrice A, allora Ax = λx: la


matrice A trasforma il vettore x in un vettore le cui componenti sono
moltiplicate per λ: se λ > 1, allora A ha 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 Ax è 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.
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 , . . . , Cn dove Ci rappresenta
la circonferenza di centro aii e raggio ri = ∑ j6=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 xi la componente con valore massimo di x. Allora da Ax = λx si
ha

(λ − aii ) xi = ∑ aij x j
j 6 =i

Ovvero, dividendo tutto per xi e considerando i valori assoluti:

xj xj

|λ − aii | = | ∑ aij | ≤ ∑ | aij |
j 6 =i
xi j 6 =i
xi

Nell’ipotesi che xi è la componente massima dell’autovettore abbiamo

|λ − aii | ≤ ∑ |aij | = ri
j 6 =i

Quindi l’autovalore λ si trova all’interno della circonferenza di centro


aii e raggio ri . Non sapendo, a priori, chi sia questo indice i, possiamo
concludere che ogni autovalore si trova nell’unione dei cerchi C1 , C2 ,
Dati n vettori linearmente indipendenti di Rn ,
. . ., Cn . 4 u(1) , u(2) , . . . u(n) , ogni vettore di
R n
si può
Altre proprietà da tenere presenti sono le seguenti: scrivere come una loro combinazione lineare.

x
Quindi esistono n coefficienti α1 , α2 , . . . , αn
Se tutti gli n autovalori di una matrice A sono distinti, allora gli per cui x = α1 u(1) + α2 u(2) + . . . + αn u(n) .
Inoltre, per vettori linearmente indipenden-
n autovettori u(1) , u(2) , . . . u(n) sono linearmente indipendenti. ti vale il risultato: α1 u(1) + α2 u(2) + . . . +

x Se A è una matrice simmetrica reale definita positiva, allora i


αn u(n) = 0 se e solo se tutti i coefficienti αi
sono uguali a zero, per i = 1, 2, . . . , n.
suoi autovalori sono tutti reali e positivi.

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
Se λ è un numero complesso, si può scrivere
Quindi il raggio spettrale è il massimo, in modulo, degli autovalori come√λ = α + iβ, con α e β numeri reali e
di A. i = −1 la cosiddetta unità
p immaginaria.
Per il modulo si ha |λ| = α2 + β2 .
Possiamo ora definire la norma 2 su matrici indotta dalla norma 2
su vettori. Si può, infatti, provare che

G k Ak 2
p
= ρ ( A T A ).
Inoltre, per ogni norma naturale, vale il risultato

ρ( A) ≤ k Ak

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
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→∞ k Ak k = 0, per qualche norma naturale.

3. limk→∞ k Ak k = 0, per tutte le norme naturali.

4. ρ( A) < 1.

5. limk→∞ Ak x = 0, qualunque sia il vettore x.

10.6 Metodi "classici"

I metodi iterativi "classici" per la risoluzione di un sistema di equa-


zioni lineari del tipo Ax = b si basano su un’idea molto semplice.

x Si parte da un’approssimazione iniziale x(0) , commettendo un’er-


rore e(0) = x − x(0) . L’errore e(0) è soluzione del sistema Ae(0) =
b − Ax(0) = r(0) , dove r(0) è il residuo (ciò che resta fuori, ci dice
di quanto il vettore Ax(0) si discosta da b).

x Successivamente si definisce il vettore x(1) come x(1) = x(0) + p(0) ,


dove ora p(0) è soluzione del sistema Mp(0) = r0 , in cui la matrice
M è più semplice della A e, allo stesso tempo, M−1 approssima in
qualche modo A−1 .

x 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 Lo schema iterativo appena descritto è un
metodo stazionario (cioè non dipende dall’i-
M−1 , perchè risolviamo problemi del tipo Mp(k) = r(k) = b − Ax(k)
terazione k) e può essere visto come caso
in modo da porre x(k+1) = x(k) + p(k) . La matrice E = I − M−1 A è particolare di uno schema di punto fisso per
detta matrice di iterazione del metodo. Nel seguito, per semplicità, equazioni nonlineari: la funzione g tale che
x(k+1) = g(x(k) ) converga alla soluzione
poniamo q = M−1 b. del sistema Ax = b, è data da g(x) =
x + M−1 (b − Ax) o equivalentemente da
g(x) = Ex + q.
168 annamaria mazzia

10.6.1 Convergenza

Per studiare la convergenza di un metodo iterativo, consideriamo, per


ogni vettore x(k) , il residuo r(k) = b − Ax(k) e l’errore e(k) = x − x(k) .
Osserviamo che si ha la relazione r(k) = Ae(k) . Infatti

Ae(k) = A(x − x(k) ) = Ax − Ax(k) = b − Ax(k) = r(k)

Lo schema converge quando la successione x(k) converge alla solu-


zione x per k → ∞, ovvero quando limk→∞ e(k) = 0 qualunque sia il Il vettore soluzione x è punto fisso della fun-
zione vettoriale g(x) = Ex + q. Infatti po-
vettore iniziale x(0) .
nendo E = I − M−1 A e q = M−1 b si
Consideriamo lo schema iterativo x(k+1) = Ex(k) + q. ha Ex + q = ( I − M−1 A)x + M−1 b =
È facile vedere che per la soluzione esatta x vale la relazione x − M−1 Ax + M−1 b. Dal momento che x
è il vettore soluzione si ha Ax = b perciò la
x = Ex + q. relazione precedente diventa
Consideriamo x − x(k) . Si ha Ex + q = x − M−1 b + M−1 b = x. Il
vettore soluzione è punto fisso!
x = Ex + q
x(k) = Exk−1 + q
e sottraendo si ricava
e(k) = Ee(k−1)

La relazione appena trovata vale, alla stessa maniera, tra l’errore


e(k−1) e l’errore e(k−2) per cui possiamo scrivere e(k−1) = Ee(k−2) .
Scriviamo queste relazioni dall’iterazione k fino ad arrivare all’ite-
razione 0.

e(k) = Ee(k−1)
e(k−1) = Ee(k−2)
e(k−2) = Ee(k−3)
.. ..
.=.
e(2) = Ee(1)
e(1) = Ee(0)

Partendo, ora, dalla prima relazione e, andando a sostituire, ogni


volta, a secondo membro, la relazione successiva, si ha:

e(k) = Ee(k−1) = E( Ee(k−2) ) = E2 e(k−2) = E2 ( Ee(k−3) ) = E3 e(k−3) = . . . = Ek e(0)

Osserviamo che Ek 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 limk→∞ e(k) = limk→∞ Ek e(0) = 0 se e solo se
limk→∞ Ek = 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) = Ex(k) + q k≥0


appunti di calcolo numerico 169

converge qualunque sia il vettore iniziale x0 al vettore x = Ex + q = A−1 b


se e solo se ρ( E) < 1.

Questo risultato lo si può provare facilmente, nel caso in cui la


matrice di iterazione E abbia n autovalori distinti e, quindi, possie-
da n autovettori linearmente indipendenti, per cui l’errore iniziale
e(0) si può scrivere come e(0) = α1 u(1) + α2 u(2) + . . . + αn u(n) , do-
ve α1 , α2 , . . . , αn sono delle costanti, mentre u(1) , u(2) . . . u(n) sono
gli autovettori associati, rispettivamente, a λ1 , λ2 , . . . , λn . Supponia-
mo che gli autovalori siano in ordine decrescente in modulo, cioè:
|λ1 | > |λ2 | > . . . > |λn |, per cui ρ( E) = |λ1 |. In tal caso si può
scrivere Ricordiamo che, se λ è un autovalore asso-
ciato alla matrice A, con u un autovettore ad
esso associato, si ha Ak u = λk u).
e ( k ) = E k e (0) = E k ( α 1 u (1) + α 2 u (2) + . . . + α n u ( n ) )
= α 1 E k u (1) + α 2 E k u (2) + . . . + α n E k u ( n )
= α1 λ1k u(1) + α2 λ2k u(2) + . . . + αn λkn u(n)
mettiamo in evidenza λ1k
!
λ2k λk
= λ1k α1 u (1)
+ α2 u (2)
+ . . . + αn nk u(n)
λ1k λ1
λik
per k → ∞ si ha → 0 per i = 2, 3, . . . , n
λ1k
≈ λ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 cono-


scere quanto velocemente lo schema converge. A tal proposito osser-
viamo che, in condizioni asintotiche (per k → +∞) vale il seguente
risultato Questa relazione vale anche per matrici con
autovalori non distinti tra loro.
k e ( k ) k ≈ ρ ( E ) k k e (0) k (10.1)

Scrivendo l’equazione (10.1) per l’iterazione k − 1 e facendo il rapporto


tra le norme degli errori a due passi successivi si ha:

k e(k) k
≈ ρ( E)
k e ( k −1) k

Ricaviamo, quindi, che il metodo iterativo ha convergenza lineare


con costante asintotica uguale al raggio spettrale della matrice di
iterazione.
La relazione appena trovata è utile per stabilire quanto veloce è il
metodo iterativo per approssimare la soluzione del sistema con una
certa accuratezza. Ad esempio, vogliamo stabilire a priori quante
iterazioni occorrono per ridurre la norma dell’errore iniziale di un
170 annamaria 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
k e (0) k
valore di k per cui ke(k) k = . Ma ke(k) k ≈ ρ( E)k ke(0) k da cui
10

k e (0) k 1
ρ ( E ) k k e (0) k ≈ =⇒ ρ( E)k ≈
10 10
Applicando il logaritmo in base 10 ad ambo i membri si ha

1
k log10 (ρ( E)) ≈ −1 =⇒ k ≈ −
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

− log10 (ρ( Ek ))
R = − log10 (ρ( E)) =
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à e, rifacen-
do i conti come prima, dobbiamo cercare l’intero k che renda valida la
disuguaglianza ke(k) k ≤ eke(0) k, sapendo che ke(k) k ≈ ρ( E)k ke(0) k.
Ma allora deve valere la relazione

ρ( E)k ke(0) k ≤ eke(0) k =⇒ ρ( E)k ≤ e

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

− log10 (e)
k log10 (ρ( E)) ≤ log10 (e) =⇒ −k log10 (ρ( E)) ≥ − log10 (e) =⇒ k ≥
R
Troviamo in questo modo quante iterazioni (il primo intero k che
verifica la relazione precedente) occorre fare per poter ridurre l’errore
iniziale di e.

Grafico di convergenza e velocità asintotica di convergenza. Se si traccia


un grafico semilogaritmico del profilo di convergenza dello schema
iterativo, ponendo sull’asse delle 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 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 ke(k) k ≈ k log10 |λ1 | + costante

La pendenza del grafico è l’opposto della velocità asintotica di con-


vergenza R.
appunti di calcolo numerico 171

Nel caso in cui non è nota la soluzione esatta x, poichè ke(k) k ≈


k x(k)− x(k−1) k = kd(k) 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 di A (che chiamiamo D), della matrice costituita dai soli Attenzione a non confondere la fattorizzazio-
ne di una matrice ( A = LDU ) dalla scom-
elementi della parte triangolare bassa di A (che chiamiamo L) e dai
posizione della matrice A nella somma delle
soli elementi della parte triangolare alta di A (che denotiamo con U), matrici L, D e U , A = L + D + U . Abbia-
mo indicato con gli stessi simboli matrici che
A = L+D+U 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 ze-
ro (aii 6= 0 per i = 1, 2, . . . , n, n, da cui la matrice diagonale D è
invertibile).
Se la matrice A è simmetrica, definita positiva, necessariamente
aii 6= 0. Altrimenti, poichè A è non singolare (se così non fosse
non potremmo risolvere il sistema), le equazioni del sistema possono
essere riordinate in modo da avere la matrice risultante con elementi
diagonali diversi da zero.

10.6.4 Il metodo di Jacobi

Il metodo di Jacobi (o degli spostamenti simultanei - o rilassamento Carl Gustav Jacob Jacobi (1804-1851) fu un
grande matematico tedesco. Tra i suoi nume-
simultaneo) si ha ponendo M = D da cui la matrice di iterazione
rosi studi ricordiamo quelli sulle funzioni ellitti-
diventa E J = I − D −1 A = I − D −1 ( L + D + U ) = − D −1 ( L + U ). che, sulla teoria dei numeri e sulla meccanica
Scrivendo lo schema iterativo per Jacobi, si ha, in forma matriciale: celeste.

x ( k +1) = E J x ( k ) + D −1 b
x ( k +1) = − D −1 ( L + U ) x ( k ) + D −1 b
172 annamaria mazzia

Per ricavare questo schema, si può partire dal sistema lineare Ax = b


e scrivere la matrice A come L + D + U. Si ha

( L + D + U )x = b
si porta a secondo membro ( L + U )x
Dx = −( L + U )x + b
si moltiplicano ambo i membri per l’inversa della matrice D
x = − D −1 ( L + U ) x + D −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 (( L+U )x(k) )i
n
1

( k +1) 
 bi − (k) 
xi = aij x j 
aii 
j=1,j6=i


o, equivalentemente,

( Lx(k) )i
 
( D −1 )ii (Ux(k) )i
i − 1 n
1
∑ ∑
( k +1) 
 bi − (k) (k) 
xi = aij x j − aij x j  per i = 1, . . . , n
aii 
j =1 j = i +1


⇑ ⇑

La formula la si può ricavare direttamente, scrivendo, equazione


per equazione, il sistema da risolvere Ax = 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 = bi
.. .
. = ..
an1 x1 + an2 x2 + an3 x3 + . . . + ann xn = bn

Dalla prima equazione “isoliamo” la prima incognita rispetto a tutte


le altre; dalla seconda equazione “isoliamo” la 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 = bi − ( ai1 x1 + ai2 x2 + . . . + aii−1 xi−1 + aii+1 xi+1 + . . . + ain xn )
.. ..
.= .
ann xn = bn − ( an1 x1 + an2 x2 + an3 x3 + . . . + ann−1 xn−1 )

Dividendo l’i-sima equazione per il coefficiente aii , per i = 1, 2, . . . , n,


ricaviamo
1
x1 = [b − ( a12 x2 + a13 x3 + . . . + a1n xn )]
a11 1
1
x2 = [b2 − ( a21 x1 + a23 x3 + . . . + a2n xn )]
a22
.. ..
.= .
1
xi = [b − ( ai1 x1 + ai2 x2 + . . . + aii−1 xi−1 + aii+1 xi+1 + . . . + ain xn )]
aii i
.. ..
.= .
1
xn = [bn − ( an1 x1 + an2 x2 + an3 x3 + . . . + ann−1 xn−1 )]
ann

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:
( k +1) 1 h 
(k) (k) (k)
i
x1 = b1 − a12 x2 + a13 x3 + . . . + a1n xn
a11
( k +1) 1 h 
(k) (k) (k)
i
x2 = b2 − a21 x1 + a23 x3 + . . . + a2n xn
a22
.. ..
.= .
( k +1) 1 h 
(k) (k) (k) (k) (k)
i
xi = bi − ai1 x1 + ai2 x2 + . . . + aii−1 xi−1 + aii+1 xi+1 + . . . + ain xn
aii
.. ..
.= .
( k +1) 1 h 
(k) (k) (k) (k)
i
xn = bn − an1 x1 + an2 x2 + an3 x3 + . . . + ann−1 xn−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 − ( D + L)−1 ( L + D + U ) = −( D +


L)−1 U. Lo schema iterativo è:
x(k+1) = ES 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 Ux
( D + L)x = −Ux + b
si moltiplicano ambo i membri per l’inversa della matrice ( D + L)
x = −( D + L)−1 Ux + ( D + L)−1 b
si innesca il metodo iterativo considerando il vettore x
a primo membro all’iterazione k + 1
a secondo membro all’iterazione k
x ( k +1)
= −( D + L)−1 Ux(k) + ( D + L)−1 b
Moltiplicando ambo i membri per ( D + L) si ha
( D + L)x(k+1) = b − Ux(k)
Dx(k+1) = b − Lx(k+1) − Ux(k)
da cui
 
x(k+1) = D −1 b − Lx(k+1) − Ux(k)
Componente per componente si ha

" #
i −1 n
1
aii i j∑
− ∑ aij x j
( k +1) ( k +1) (k)
xi = b − aij x j per i = 1, . . . , n
=1 j = i +1

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 x1 , x2 , . . . , x i −1
possano essere utilizzati per dare una migliore approssimazione del
( k +1)
valore xi . Dalle equazioni del sistema, ragionando come per il
metodo di Jacobi, possiamo quindi scrivere:
 
( k +1) (k) (k) (k)
a11 x1 = b1 − a12 x2 + a13 x3 + . . . + a1n xn
 
( k +1) ( k +1) (k) (k)
a22 x2 = b2 − a21 x1 + a23 x3 + . . . + a2n xn
.. ..
.= .
 
( k +1) ( k +1) ( k +1) ( k +1) (k) (k)
aii xi = bi − ai1 x1 + ai2 x2 + . . . + aii−1 xi−1 + aii+1 xi+1 + . . . + ain xn
.. ..
.= .
 
( k +1) ( k +1) ( k +1) ( k +1) ( k +1)
ann xn = bn − an1 x1 + an2 x2 + an3 x3 + . . . + ann−1 xn−1
appunti di calcolo numerico 175

Dividendo ambo i membri dell’equazione i-sima per aii (per i =


1, 2, . . . , n) si ha:

( k +1) 1 h 
(k) (k) (k)
i
x1 = b1 − a12 x2 + a13 x3 + . . . + a1n xn
a11
( k +1) 1 h 
( k +1) (k) (k)
i
x2 = b2 − a21 x1 + a23 x3 + . . . + a2n xn
a22
.. ..
.= .
( k +1) 1 h 
( k +1) ( k +1) ( k +1) (k) (k)
i
xi = bi − ai1 x1 + ai2 x2 + . . . aii−1 xi−1 + aii+1 xi+1 + . . . + ain xn
aii
.. ..
.= .
( k +1) 1 h 
( k +1) ( k +1) ( k +1) ( k +1)
i
xn = bn − an1 x1 + an2 x2 + an3 x3 + . . . + ann−1 xn−1
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 ri-


lassato 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: Abbiamo usato in pedice la notazione R
per indicare il vettore ottenuto con il rilassa-
( k +1) ( k +1)
xR ←− (1 − ω )x(k) + ωx(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 Gauss-
Seidel). Per valori di ω nell’intervallo [1, 2[ si ha, invece, il metodo
noto come metodo di sovra-rilassamento o SOR (Successive Over-
Relaxation) – usato per accelerare la convergenza in sistemi che sono
convergenti con il metodo di Gauss-Seidel.
Lo schema di rilassamento, applicato al metodo di Gauss-Seidel, è
dato da

" #
i −1 n
ω
aii i j∑
− ∑ aij x j
( k +1) (k) ( k +1) (k)
xi = (1 − ω ) x i + b − aij x j per i = 1, . . . , n
=1 j = i +1
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) + ωD −1 b − Lx(k+1) − Ux(k)
h i
x(k+1) = (1 − ω ) I − ωD −1 U x(k) − ωD −1 Lx(k+1) + ωD −1 b
h i
( I + ωD −1 L)x(k+1) = (1 − ω ) I − ωD −1 U x(k) + ωD −1 b

Moltiplicando ambo i membri per D, si ricava

( D + ωL)x(k+1) = [(1 − ω ) 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]
h i
= 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 Ax = b.

10.6.7 Convergenza dei metodi di Jacobi, Gauss-Seidel, rilassa-


mento

Le matrici di iterazione dei tre metodi appena descritti sono scritte in


Tabella 10.1

metodo matrice Tabella 10.1: Matrici di iterazione dei metodi


di Jacobi, Gauss-Seidel, rilassamento
Jacobi E J = I − D −1 A = − D −1 ( L + U )
Gauss-Seidel ES = I − ( D + L)−1 A = −( D + L)−1 U
rilassamento Eω = I − ω ( D + ωL)−1 A
Se la matrice A è diagonalmente dominante
in senso stretto, la convergenza del metodo di
Perchè ci sia convergenza, il raggio spettrale della matrice di
Jacobi si può provare applicando il teorema di
iterazione deve essere minore di uno. Gershgorin. Infatti gli autovalori della matrice
Per i metodi di Jacobi e di Gauss-Seidel si può provare la convergen- E J , per il teorema di Gershgorin verificano la
relazione, per i = 1, . . . , n
za del metodo, se la matrice A ha una delle seguenti caratteristiche:
aij

x A è diagonalmente dominante in senso stretto


|λ| ≤ ∑ aii .
j 6 =i

x A è a diagonalmente dominante (per righe o per colonne) ed è D’altra parte, se A è diagonalmente dominan-
te in senso stretto | aii | > ∑ j6=i | aij | da cui
irriducibile. aij

∑ j6=i < 1 ovvero gli autovalori della ma-
aii
Si ha inoltre, questo risultato: trice E J sono minori di 1, da cui concludiamo

x se A è simmetrica non singolare con elementi principali reali e


che ρ( E J ) < 1.
Una matrice si dice irriducibile se non può
positivi, allora il metodo di Gauss-Seidel è convergente se e solo se essere messa sotto la forma di matrice riduci-
bile,
 vale a dire, non può essere scritta come
A è definita positiva. P Q
. Un esempio di matrice riducibile
∅ R
è
−2
 
10 3 4
2 −1 2 6 
A=
 
0 0 1 −1
0 0 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’inter-
vallo [0, 2] ( per 0 < ω < 1 si ha sotto-rilassamento e per 1 ≤ ω < 2
si ha sovra-rilassamento). Dalla definizione di Eω si ha det Eω =
Difatti il determinante della matrice di iterazione del metodo di det [( D + ωL)−1 ((1 − ω ) D − ωU )].
Poichè il determinante del prodotto di due
rilassamento vale det Eω = (1 − ω )n e, poichè il prodotto degli auto- matrici è uguale al prodotto dei determinanti
valori di una matrice è uguale al determinante della matrice stessa, delle matrici stesse, si ha det Eω =
det [( D + ωL)−1 ] det [(1 − ω ) D − ωU )].
segue la relazione ρ( Eω ) ≥ |1 − ω |. Quindi, se |1 − ω | > 1, sicura- Consideriamo ora il fatto che il determinante
mente il metodo di rilassamento non convergerà. Perciò, condizione di una matrice triangolare è uguale al
prodotto degli elementi della diagonale prin-
necessaria per la convergenza è |1 − ω | < 1.
cipale. Per il primo determinante abbiamo
Molto importante è il seguente teorema (che non dimostriamo). det [( D + ωL)−1 ] = (det ( D + ωL))−1 .
Ora la matrice D + ωL è triangolare
Teorema 10.6.2 (Ostrowski-Reich) Se A è definita positiva e ω è un e il suo determinante coincide con il
prodotto degli elementi della diagonale,
numero reale nell’intervallo ]0, 2[, allora il metodo di rilassamento è conver- vale a dire con det D. Si ha quindi:
gente. det [( D + ωL)−1 ] = (det D )−1 . Per il
determinante det [(1 − ω ) D − ωU )] (di

x
una matrice che è sempre triangolare), gli
La convergenza del metodo di rilassamento si ha, inoltre, per elementi della diagonale principale sono gli
elementi della matrice diagonale D ciascuno
A simmetrica con elementi diagonali positivi ed elementi extra-
dei quali moltiplicati per (1 − ω ). Perciò:
diagonali negativi o nulli, se e solo se A è definita positiva. det [(1 − ω ) D − ωU )] = (1 − ω )n det D.
Arriviamo perciò al risultato: det Eω =
(det D )−1 (1 − ω )n det D = (1 − ω )n .
Un altro interessante teorema mette in relazione il metodo di rilas- Inoltre, considerando λi autovalori della
samento con i metodi di Jacobi e di Gauss-Seidel, sia per quanto matrice Eω , per i = 1, 2, . . . , n e ρ( Eω )
il raggio spettrale, si ha | det Eω | =
riguarda la convergenza, sia per quanto riguarda il valore ottimale | ∏in=1 λi | ≤ ∏in=1 ρ( Eω ) = ρ( Eω )n da
del parametro ω, in corrispondenza di matrici A che godono della cui segue |(1 − ω )n | ≤ ρ( Eω )n , cioè
cosidetta proprietà A e che siano coerentemente ordinate. ρ( 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 PAP T
D1 A1
abbia la forma PAP T = 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 Due insiemi S e T non vuoti si dicono com-
plementari di V = {1, 2, . . . , n} se S 6= ∅,
e T in modo tale che i coefficienti non nulli aij 6= 0 si hanno se gli
T 6= ∅, S ∪ T = V e, inoltre, se i ∈ S, i 6∈
indici i e j sono coincidenti tra loro, cioè i = j, oppure se gli indici T e, viceversa, se j ∈ T, j 6∈ S
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


 
2 −1 0 0
 −1 2 −1 0 
A=
 
−1 2 −1

 0
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
178 annamaria mazzia

 
0 0 0 1
0 1 0 0
P=  si ha
 
0 0 1 0
1 0 0 0
 
2 0 −1 0 !
 0 2 −1 −1 2 0
PAP T =   =⇒ D1 = D2 =
 
 −1 −1 2 0  0 2
0 −1 0 2
Usando l’altra definizione, basta scegliere come insiemi S e T, gli
insiemi S = {1, 3} e T = {2, 4}.
_ Considerando la matrice dell’esempio prece-
dente, si può prendere il vettore di ordinamen-
Definizione 10.6.2 Una matrice si dice coerentemente ordinata in relazio- to q = (q1 , q2 , q3 , q4 ) = (1, 2, 3, 4). Si veri-
fica infatti, per a12 , q2 − q1 = 2 − 1 = 1; per
ne ad un vettore di ordinamento q, di lunghezza n, se per ogni coefficiente a21 , q1 − q2 = 1 − 2 = −1 e così via per
aij non nullo, con i 6= j, si verifica: gli altri elementi non nulli. Quindi la matrice è

x se j > i allora q − q = 1
j i
coerentemente ordinata.

x se j < i allora q − q = −1
j i

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 α 6= 0 sono indipendenti dal
 
parametro α. 2 0
1
La matrice A = 0 −3
5 è bicicli-
Le matrici con
! proprietà A (o bicicliche) che sono già nella forma 1 2
3
D1 A1 ca e coerentemente ordinata.
 Infattisi ri-
A= (senza dover fare permutazioni di righe o colonne) 2 0
A2 D2 conosce la matrice D1 = , la
0 −3
sono coerentemente ordinate.
 
 1
matrice D2 = 3 , mentre A1 = e
Le matrici tridiagonali sono un altro esempio di matrici bicicliche 5

A2 = 1 2 .
e coerentemente ordinate.
Fatta questa premessa sulle matrici bicicliche e coerentemente 1

2 0

ordinate, possiamo dare il seguente risultato (che non dimostriamo). La matrice A = −1 3 2 è tridiago-
0 5 6
Teorema 10.6.3 (Young) Se A è una matrice con proprietà A e coerente nale (gli elementi non nulli sono sulla diago-
nale principale e sulle diagonali immediata-
ordinamento e 0 < ω < 2, allora:
mente sopra e sotto la diagonale principale).

x se µ è autovalore della matrice di iterazione di Jacobi E , ogni λ che


J
Quindi è biciclica e coerentemente ordinata.

verifica la relazione (λ + ω − 1)2 = λω 2 µ2 è autovalore di Eω ;

x se λ è autovalore non nullo di E ω, allora ogni µ che verifica la relazione


precedente è autovalore di E J ;

x se gli autovalori di E sono reali e il metodo di Jacobi converge (ρ(E ) <


J J
1), esiste uno ed uno solo ωopt che rende ottimale il metodo di rilassa-
mento, tale cioè che ρ(ωopt ) = min0<ω <2 ρ( Eω ). Risulta
2
ωopt = q e ρ( Eωopt ) = ωopt − 1
1+ 1 − ρ ( E J )2
appunti di calcolo numerico 179

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

 10.7.1
Esercizio Sia
 dato il   lineare Ax = b, dove
sistema
8 2 6 30
A = 7 5 0 b = 34
   
1 0 5 7

(a) Provare che gli schemi di Jacobi e di Seidel convergono e calcolare la


velocità asintontica di convergenza di entrambi gli schemi.

(b) A partire dallo stesso vettore iniziale x(0) = (0 0 0) T , calcolare le


approssimazioni x(1) e x(2) che si ottengono applicando lo schema di
Jacobi e lo schema di Seidel.

Svolgimento

(a) la matrice A non è diagonalmente dominante nè per righe nè


per colonne (vedasi la seconda riga e la terza colonna). Non
possiamo usare il criterio di matrice diagonalmente dominante per
provare la convergenza dei due metodi. La matrice A è biciclica e
coerentemente ordinata!(si veda lo schema a croce che individua
5 0
D1 = (8) e D2 = ):
0 5

8 2 6
7 5 0
1 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è
   
0 −2/8 −6/8 0 −1/4 −3/4
E J = −7/5 0 0  = −7/5 0 0 
   
−1/5 0 0 −1/5 0 0

Troviamo gli autovalori della matrice E J imponendo det ( E J − µI ) =


0.
180 annamaria mazzia


−µ −1/4 −3/4
3 1 1 7
−7/5 −µ 0 = − µ3 + · µ + · µ = 0

4 5 4 5
−1/5 0 −µ

3 7
Si ha: 0 = det ( E J − µI ) = −µ3 + (+ )µ,
20 20
√ √
Una radice è µ = 0, e le altre due sono µ = ± 1/2 = ± 0.5 =
0.707106781.
Gli autovalori sono tutti reali e quello di massimo modulo è µ =
0.707106781 < 1.
C’è, dunque, convergenza per i metodi di Jacobi e di Gauss-Seidel
(ρ( 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 ) = 2R J

Lo schema di Jacobi è:
 Partendo dal vettore x (0) con
( k +1) 1 (k) (k)

 x1 = (30 − 2x2 − 6x3 ) componenti tutte nulle, abbiamo
8





k x(1k) x(2k) x(3k)


(b) 

1
( k +1) (k)
x2 = (34 − 7x1 ) 0 0 0 0

 5


 1 3.75 6.8 1.4


 x ( k +1) = 1 (7 − x ( k ) )


 2 1.0 1.55 0.65
3 5 1

Lo schema di Seidel è:
 Partendo dal vettore x (0) con
 x (k+1) = 1 (30 − 2x (k) − 6x (k) )

componenti tutte nulle, abbiamo

 1 8 2 3



 (k) (k) (k)
k x1 x2 x3


1

( k +1) ( k +1)
x2 = (34 − 7x1 ) 0 0 0 0

 5



 1 3.75 1.55 0.65

 x ( k +1) = 1 (7 − x ( k +1) )


 2 2.875 2.775 0.825
3 5 1

 10.7.2
Esercizio  il sistema Ax = b con
Dato
5 0 10
A = 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 181

(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
    
1/5 0 0 0 0 10 0 0 −2
−1
EJ = −D (L + U) = −  0 1/3 0  0 0 15 =  0 0 −5
    
0 0 1/α 2 1 0 −2/α −1/α 0

Gli autovalori si calcolano imponendo det ( E J − µI ) = 0, vale a


dire

−µ 0 −2

0 −µ −5 = 0 vale a dire − µ3 + =0

α
−2/α −1/α −µ

3
Ricaviamo gli autovalori µ = 0 e µ = ± √ .
α
3
Perchè ci sia convergenza deve dunque essere √ < 1 ovvero
√ α
3 < α. Ricaviamo la relazione α > 9.
2
(b) Dalla relazione dell’ωopt , ωopt = q , valida perchè
1 + 1 − ρ ( E J )2
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
√ = =⇒ = 1 − 9/α =⇒ = − =⇒ α = = 10.125
1+ 1 − 9/α 2 3 9 α 8

3
Da ωopt = = 1.5 segue λopt = ωopt − 1 = 0.5, da cui R =
2
− log10 (λopt ) = 0.3010299957.

 10.7.3
Esercizio Dato  Ax = b dove:
 il sistemalineare
6 1 3 9
A = 1 8 2 b=3
   
4 3 10 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.
182 annamaria mazzia

(b) Lo schema di Seidel è:



( k +1) 1 (k) (k)

 x1 = (9 − x2 − 3x3 )
6








1

( k +1) ( k +1) (k)
x2 = (3 − x1 − 2x3 )


 8




 x (k+1) = 1 (14 − 4x (k+1) − 3x (k+1) )



3 10 1 2

Partendo dal vettore iniziale assegnato abbiamo:


 
1.50000000000000
k=1 x1 = 0.187500000000000
 
0.743750000000000
 
1.09687500000000
k=2 x2 = 5.195312499999999E − 002
 
0.945664062500000
 
1.01850911458333
k=3 x3 = 1.127034505208335E − 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 d3 e d2 .
Ora:

   
−0.403125000000000 −7.836588541666667E − 002
d2 = x2 − x1 = −0.135546875000000 e d3 = x3 − x2 = −4.068277994791664E − 002
   
0.201914062500000 4.355118815104175E − 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 appli-
cando 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.

10.8 Domande di riepilogo

1. Quale è la definizione di norma di vettori?

2. Quali sono le prinicipali norme che abbiamo studiato?


appunti di calcolo numerico 183

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?
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 coe-
rentemente ordinate: quali sono?

37. Cosa assicura il teorema di Young e sotto quali ipotesi?


11 Differenziazione numerica ed
equazioni alle derivate ordi-
narie

L’universo è un’equazione differenziale.


11.1 Un esempio Jules Henri Poincarè

All’inizio del ’900, van der Pol studiò fenomeni non lineari e Balthasar van der Pol (1889-1959) fu un fisico
e matematico olandese. Nel 1916 lavorò per
propose l’equazione differenziale
un anno con l’ingegnere John Ambrose Fle-
ming a Londra (Fleming aveva già inventato il
y00 (t) + e(y2 (t) − 1)y0 (t) + y(t) = 0 diodo nel 1904). Si trasferì successivamente
a Cambridge e iniziò una collaborazione con
Questa equazione governa l’intensità di corrente in un circuito oscil- John Joseph Thomson al Cavendish Labora-
tory (Thomson aveva scoperto l’elettrone nel
lante a triodo e viene utilizzata nello studio di circuiti che contengono 1897). Qui divenne amico di Edward Apple-
valvole termoioniche, i cosiddetti tubi a vuoto, come il tubo catodico ton che, nel 1947, ricevette il premio Nobel
del televisore o il magnetron nei forni a microonde. La quantità per la fisica per i suoi contributi alla cono-
scenza della ionosfera – studi fatti insieme a
e indica l’intensità dello smorzamento non lineare: quanto più e è van der Pol. La loro collaborazione riguardò
elevato tanto più il sistema perde energia rapidamente. anche lo studio di fenomeni non lineari usan-
do circuiti triodi per verificare le loro teorie.
L’equazione differenziale del secondo ordine si può ricondurre Quando van del Pol rientrò in Olanda, conti-
ad un sistema di equazioni differenziali del primo ordine. Ponendo nuò a occuparsi di ottica, elettromagnetismo,
u = (u1 , u2 ) = (y, y0 ) si ha onde radio e fisica atomica. Il nome di van der
Pol è associato con l’equazione differenziale
! ! che porta il suo nome. Questa equazione ap-
u10 u2 parve per la prima volta sul suo articolo On
=
u20 −e((u1 )2 − 1)u2 − u1 relaxation oscillation pubblicato sulla rivista
Philosophical Magazine nel 1926.

Come si risolve numericamente un sistema di equazioni differen-


ziali 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!
186 annamaria mazzia

Dall’analisi, sappiamo che, assegnata una funzione y = f ( x ) e dato


un punto x0 nel suo insieme di definizione, la derivata f 0 ( x0 è data
da
f ( x0 + h ) − f ( x0 )
f 0 ( x0 ) = lim
h →0 h
Per ottenere una formula che approssima la derivata prima di
f 0 ( x0 ), useremo nodi equidistanti in un intorno di x0 : x0 − h, x0 , x0 +
h, . . . con h una quantità positiva sufficientemente piccola.
Consideriamo la f sufficientemente regolare per applicare la for-
mula 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 x0 , se ci fermiamo alla derivata seconda, è data
da
( x − x0 )2 00
f ( x ) = f ( x0 ) + f 0 ( x0 )( x − x0 ) + 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

h2 00
f ( x0 − h ) = f ( x0 ) − h f 0 ( x0 ) + f (ξ )
2
Portiamo a primo membro f 0 ( x0 ), ottenendo

f ( x0 ) − f ( x0 − h) h 00
f 0 ( x0 ) = + f (ξ )
h 2
h2 00
Se trascuriamo il termine f (ξ ) abbiamo una formula che appros-
2
0
sima f ( x0 ) e che si chiama backward difference formula, formula delle
differenze all’indietro (stiamo usando infatti il punto x0 − h).

La backward difference formula è data da


f ( x0 ) − f ( x0 − h )
f 0 ( x0 ) =
h

Questa formula richiede la conoscenza del valore della f in due punti


x0 e x0 − h ed è del primo ordine (trascuriamo, infatti, un termine che
h
dipende da h: f 00 (ξ )).
2
Se, invece, applichiamo la formula di Taylor a x = x0 + h abbiamo
la forward difference formula, formula delle differenze in avanti:

h2 00
f ( x0 + h ) = f ( x0 ) + h f 0 ( x0 ) + f (ξ )
2
da cui
f ( x0 + h) − f ( x0 ) h 00
f 0 ( x0 ) = − f (ξ )
h 2

f ( x0 + h ) − f ( x0 )
La forward formula è f 0 ( x0 ) =
h
appunti di calcolo numerico 187

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 x0 − h e
x0 + h scritte fino alla derivata terza di f ,

h2 00 h3 000
f ( x0 + h ) = f ( x0 ) + h f 0 ( x0 ) + f ( x0 ) + f (ξ 1 )
2 6
h2 00 h3 000
f ( x0 − h ) = f ( x0 ) − h f 0 ( x0 ) + f ( x0 ) − f (ξ 2 )
2 6

Sottraendo membro a membro abbiamo


h3 000
f ( x0 + h) − f ( x0 − h) = 2h f 0 ( x0 ) + ( f (ξ 1 ) + f 000 (ξ 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 000 (ξ 1 ) + f 000 (ξ 2 )
anche il loro valore medio è compreso tra il minimo
2
000
e il massimo della funzione f stessa (si veda il Teorema del Valore
Intermedio), cioè esiste ξ (compreso tra ξ 1 e ξ 2 e, quindi, tra x0 − h e
f 000 (ξ 1 ) + f 000 (ξ 2 )
x0 + h) per cui f 000 (ξ ) = . Sostituendo abbiamo
2
h3 000
f ( x0 + h) − f ( x0 − h) = 2h f 0 ( x0 ) + 2 f (ξ )
6
Risolviamo ora per f 0 ( x0 ), ottenendo

f ( x0 + h) − f ( x0 − h) h2 000
f 0 ( x0 ) = − f (ξ )
2h 6
Se trascuriamo il termine che dipende da h2 otteniamo un’approssi-
mazione di f 0 ( x0 ).

f ( x0 + h ) − f ( x0 − h )
La formula centrata è data da f 0 ( x0 ) =
2h

Il termine che trascuriamo per ottenere le formule di differenzia-


zione 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 nel-
l’intorno di x0 e considerando espansioni di Taylor che coinvolgono
derivate di ordine più elevato. Ad esempio, prendendo i punti x0 − 2h,
x0 − h, x0 + h e x0 + 2h si può ricavare

1 h4
f 0 ( x0 ) = ( 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.
188 annamaria mazzia

La formula a 5 punti è data da

1
f 0 ( x0 ) ≈ ( f ( x0 − 2h) − 8 f ( x0 − h) + 8 f ( x0 + h) − f ( x0 + 2h))
12h

L’errore di troncamento dipende da h4 . Altre tecniche di differenziazione numerica


sono basate sull’interpolazione polinomiale
Nell’applicare queste formule, dobbiamo ricordarci che, oltre all’er-
di Lagrange (se p( x ) approssima f ( x ) al-
rore di troncamento dovuto al tipo di approssimazione fatto, c’è anche lora p0 ( x ) approssima f 0 ( x )) o su un pro-
l’errore di arrotondamento. Nell’esempio di pag. 41, avevamo visto cedimento di estrapolazione di Richardson
(simile a quello che abbiamo visto per le for-
come, per piccoli valori di h, il fenomeno di cancellazione numerica mule di integrazione numerica). Il discorso si
portava a crescite degli errori. estende, inoltre, per approssimare derivate
di ordine superiore.
La scelta di h dovrebbe, perciò, dipendere, dall’ordine dell’errore
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 x0 = 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 Figura 11.1: Grafico semilogaritmico che
mette a confronto l’errore esatto al varia-
gli errori assoluti ottenuti dalle varie formule: da un certo punto in re di h ∈ [10−12 , 1] delle formule forward,
poi, prevale l’errore di arrotondamento. 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 equa-
zione differenziale ordinaria del primo ordine: Una abbreviazione per indicare un’equazione
differenziale ordinaria è data dalla sigla ODE:
dy Ordinary Differential Equation.
= f (t, y), a≤t≤b
dt
La funzione f (t, y) è assegnata. Ci riferiamo a t come alla variabile
indipendente. Dobbiamo trovare quella funzione y = y(t) tale che la
dy(t)
sua derivata prima y0 = y0 (t) = coincida con f (t, y(t)).
dt

Esempio Sia f (t, y) = −y + t definita per t ≥ 0 e per qualun-


que y reale. Si ha

y0 = −y + t, t≥0

Si verifica che, per qualunque scalare α la funzione y(t) = t − 1 +


αe−t soddisfa la ODE.
Se, inoltre, è assegnato un valore iniziale, per esempio y(0) = 1,
allora, dovendo essere −1 + α = y(0) = 1, risulta α = 2. Assegnare
appunti di calcolo numerico 189

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 or-
dine 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 = y00 , dove y è la coordinata della
F
posizione. L’ODE può essere riscritta come: y00 = . Definendo
m
u1 = y e u2 = y0 si ha il sistema (equivalente all’equazione di prima)
di due equazioni del primo ordine di ODE:
! !
u10 u2
=
u20 F/m

Per risolvere il sistema, possiamo usare metodi che vanno bene per
risolvere equazioni differenziali del primo ordine. La prima compo-
nente della soluzione u1 corrisponde alla posizione y dell’equazione
da cui siamo partiti. La seconda componente u2 fornisce la velocità
y0 .
_
Sistemi del primo ordine di ODE hanno la forma

y0 (t) = f(t, y)
n n +1 n
dove y : R −→ R con y = (y1 y2 . . . yn ), f : R −→ R e y0 (t) =
dy
denota la derivata rispetto a t (per cui la i-sima componente del
dt
dy (t)
vettore derivata è data da yi0 (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

y0 = 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,
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 ti .
Indichiamo invece con yi il valore approssimato al tempo ti 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 Leonhard Euler (1707-1783) fu un matemati-
co svizzero. Fu studente di Johann Bernoulli
(del secondo ordine) alla funzione y(t), di centro ti , in modo da poter
che comprese le sue grandi potenzialità e
successivamente approssimare la derivata prima y0 (ti ): favorì i suoi studi. Eulero è noto soprattutto
per i suoi contributi nel campo della geome-
(t − ti )2 00
y ( t ) = y ( ti ) + ( t − ti ) y 0 ( ti ) + y (ξ i ) tria, della teoria dei numeri, delle equazioni
2 differenziali, del calcolo delle variazioni. È
lui che introdusse il simbolo f ( x ) per indica-
(t − ti )2 00
La quantità y (ξ i ) è il resto della formula di Taylor con ξ i un re le funzioni, e per la base naturale, i per
2 la radice quadrata di −1, di π , il simbolo di
punto opportuno nel segmento di estremi t e ti . sommatoria ∑ e altri ancora.
Prendiamo come t il valore ti + h vale a dire ti+1 , da cui si ha
t − ti = ti+1 − ti = h. Sostituendo si ottiene:
h2 00
y(ti+1 ) = y(ti ) + hy0 (ti ) + y (ξ i )
2
Esplicitando y0 (ti ) rispetto agli altri termini si ha:
y(ti+1 ) − y(ti ) h 00
y 0 ( ti ) = − y (ξ i )
h 2
Ora si sostituisce il valore trovato per y0 (ti ) nella ODE y0 =
f (t, y(t)) per t = ti :
y(ti+1 ) − y(ti ) h 00
− y (ξ i ) = f (ti , y(ti ))
h 2
h
Trascurando il termine y00 (ξ i ) non abbiamo più i valori della so-
2
luzione esatta, ma otterremo i valori della soluzione approssimata.
Scriviamo dunque:
y i +1 − y i
= f ( ti , yi )
h
La formula di Eulero esplicito è: yi+1 = yi + h f (ti , yi ).

La formula è di tipo esplicito perchè per passare dal livello i al


livello i + 1 sfruttiamo i dati che già conosciamo del livello i.
Si parte infatti da y0 = y(t0 ) = y( a) = y a e si ricava:

y1 = y0 + f ( t0 , y0 )
y2 = y1 + f ( t1 , y1 )
.. ..
.= .
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 y0 = f (t, y(t))
integrando ambo i membri da t0 a t, otteniamo
Z t Z t Z y(t) Z t
dy
dt = f (t, y(t)) dt =⇒ dy = f (t, y(t)) dt
t0 dt t0 y0 t0

Rt
Al secondo membro, approssimiamo t f (t, y(t)) dt mediante il valo-
0
re (t − t0 ) f (t0 , y(t0 )) (approssimiamo la f mediante la retta f (t0 , y(t0 ))).
Abbiamo:

y(t) = y0 + (t − t0 ) f (t0 , y0 )) + errore della formula di quadratura.

Per t = t1 , numericamente: y1 = y0 + h f (t0 , y0 )).


Ai passi successivi: yi+1 = yi + h f (ti , yi ))

Esempio Supponiamo di applicare il metodo di Eulero esplici-


to alla ODE y0 = −y con passo h a partire dal punto iniziale t0 = 0 e
avanziamo al tempo t1 = t0 + h

y1 = y0 + h f (t0 , y0 ) = y0 − hy0 = (1 − h)y0

Il valore y1 che otteniamo è affetto da errore: y1 6= y(t1 ) Per esempio,


se per t0 si ha y0 = 1, la soluzione esatta è y(t) = e−t . Per h = 0.5, si
ha y1 = 0.5 mentre y(0.5) = e−0.5 ≈ 0.60653
_

Figura 11.2: Interpretazione geometrica del


metodo di Eulero esplicito. Si è considerato il
problema y0 = −y con y(0) = 1 la cui solu-
zione 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, al-
l’inizio di ogni passo, alla traiettoria che pas-
sa per il corrispondente punto, soluzione del
problema y0 = −y con y(ti ) = yi .

Da un punto di vista geometrico (si veda la Figura 11.2), il valore


in ti+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:

y0 (t) = f (t, y(t))


y ( ti ) = yi

per cui il valore che otteniamo per il tempo ti+1 è tangente alla
traiettoria della soluzione di questo IVP.

11.5 Metodo di Eulero implicito

Se applichiamo la formula di Taylor di punto iniziale ti+1 , abbiamo

(t − ti+1 )2 00
y ( t ) = y ( t i +1 ) + ( t − t i +1 ) y 0 ( t i +1 ) + y (ξ i )
2
Per t = ti , si ha t − ti+1 = ti − ti+1 = ti − (ti + h) = −h. Sostituendo,
abbiamo:
h2 00
y(ti ) = y(ti+1 ) − hy0 (ti+1 ) + y (ξ i )
2
Otteniamo quindi

y(ti+1 ) − y(ti ) h 00
y 0 ( t i +1 ) = + y (ξ i )
h 2
Andando a sostituire nella ODE al tempo ti+1 , si ha :

y(ti+1 ) − y(ti ) h 00
+ y (ξ i ) = f (ti+1 , y(ti+1 ))
h 2
h 00
Trascurando il termine del resto di Taylor y (ξ i ) abbiamo:
2
y i +1 − y i
= f (ti+1 , yi+1 ))
h

La formula di Eulero implicito vale yi+1 = yi + h f (ti+1 , yi+1 )).

La differenza rispetto alla formula esplicita è che la f è valutata non


più al tempo ti ma al tempo ti+1 Quindi il calcolo di yi+1 dipende
implicitamente da yi+1 stesso! La valutazione di yi+1 diventa quindi
più laboriosa e complicata (se si ha un’equazione non lineare in yi+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 y0 = −y con y(0) = 1 (solu-


zione esatta y(t) = e−t ).
Il metodo di Eulero implicito diventa: yi+1 = yi − hyi+1 ovvero
(1 + h ) y i +1 = y i
yi
La soluzione numerica è yi+1 = .
(1 + h )
Per h = 0.5 ricaviamo y1 = 0.66667 contro un valore esatto y(1) ≈
0.60653.
_
appunti di calcolo numerico 193

Esempio Si abbia l’equazione y0 = −y3 con condizione iniziale


y(0) = 1. Usando il metodo di Eulero implicito con passo h = 0.5,
per ricavare y1 otteniamo l’equazione implicita

y1 = y0 + h f (t1 , y1 ) = 1 − 0.5y31

Questa equazione non lineare in y1 può essere risolta mediante me-


todo di punto fisso (x = g( x ) = 1 − 0.5x3 ) oppure utilizzando il
metodo di Newton-Raphson per F ( x ) = 0 con F ( x ) = x − 1 + 0.5x3 ) .
L’approssimazione iniziale per ottenere y1 può essere o la soluzione
al passo precedente, y0 , oppure usare il metodo di Eulero esplicito,
che dà y1 = y0 − 0.5y30 = 0.5. Otteniamo, come y1 il valore finale
y1 ≈ 0.7709.
_

Esempio Vogliamo discretizzare il problema a valori iniziali

y 0 = − y2
y (0) = 1

con passo h = 0.1 applicando il metodo di Eulero esplicito per ricavare


y1 e y2 .
Il metodo di Eulero esplicito è:

yi+1 = yi + h f (ti , yi ) = yi + h(−y2i ) = yi − hy2i

Partendo da y0 = 1 si ricava:

y1 = 1 − 0.1(12 ) = 0.9
y2 = 0.9 − 0.1(0.92 ) = 0.819
1
Per confronto, calcoliamo la soluzione esatta y(t) = , ottenendo:
t+1
y(t1 ) = y(0.1) = 1/(0.1 + 1) = 0.9090909090
y(t2 ) = y(0.2) = 1/(0.2 + 1) = 0.8333333333

Applichiamo ora il metodo di Eulero implicito con lo stesso passo


h = 0.1.

yi+1 = yi + h f (ti+1 , yi+1 ) = yi − hy2i+1

Per ricavare y1 la formula diventa:

y1 = y0 + h f (t1 , y1 ) = 1 − 0.1(y21 )

Abbiamo un’equazione non lineare in y1 . Per trovare y1 , possiamo


pensare di applicare lo schema di punto fisso alla funzione g(y) =
1 − 0.1(y2 ) partendo da y(0) = y0 = 1, in quanto y1 = 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
194 annamaria mazzia

Se prendiamo y(3) come approssimazione di y1 ricaviamo y1 =


0.9155439 (per confronto, il valore esatto è 0.90909090).
Calcoliamo ora y2 :

y2 = y1 + h f (t2 , y2 ) = 0.9155439 − 0.1(y22 )

La funzione di punto fisso diventa g(y) = 0.9155439 − 0.1(y2 ). Appli-


chiamo lo schema di punto fisso partendo da y(0) = y1 = 0.9155439.

y(1) = g(y(0) ) = 0.9155439 − 0.1(0.91554392 ) = 0.8317218367


y(2) = g(y(1) ) = 0.9155439 − 0.1(0.83172183672 ) = 0.8463677786
y(3) = g(y(2) ) = 0.9155439 − 0.1(0.84636777862 ) = 0.8439100583

Troviamo quindi y2 = 0.8439100583 (valore esatto 0.8333333333).


Vediamo, 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 y1 , considero come y(0) = y0 + 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 y1 = 0.9161779367.
Al secondo passo, lo schema di punto fisso è dato dalla funzione
g(y) = y1 − h(y2 ) = 0.9161779367 − 0.1y2 .
Come approssimazione iniziale prendiamo y(0) = y1 + h f (t1 , y1 ) =
g(y1 ) = 0.8322397355. Si ha:

y(1) = g(y(0) ) = 0.9161779367 − 0.1(0.83223973552 ) = 0.8469156390


y(2) = g(y(1) ) = 0.9161779367 − 0.1(0.84691563902 ) = 0.8444513267
y(3) = g(y(2) ) = 0.9161779367 − 0.1(0.844451326722 ) = 0.8448681324

Ricaviamo y2 = 0.8448681324. John Crank (1916-2006) è stato un matema-


_ tico inglese che si è dedicato soprattutto allo
studio di soluzioni numeriche di equazioni al-
le derivate parziali, in particolare di problemi
di conduzione del calore. È noto soprattutto
11.6 Metodo di Crank-Nicolson per il lavoro svolto con Phyllis Nicolson.
Phyllis Nicolson (1917-1968) è stata una
matematica inglese. Negli anni della secon-
da guerra mondiale lavorò sulla teoria del
Partiamo dall’ODE y0 = f (t, y(t)). Integriamo ambo i membri magnetron. È nota, appunto, per il metodo di
dell’equazione sull’intervallo [ti , ti+1 ]: Crank-Nicolson.
Z y(t ) Z t Z t
i +1 i +1 i +1
dy = f (t, y(t)) dt =⇒ y(ti+1 ) − y(ti ) = f (t, y(t)) dt
y ( ti ) ti ti

A secondo membro, applichiamo la formula dei trapezi trascuran-


do l’errore di integrazione:
h
y i +1 − y i = [ f (ti , yi ) + f (ti+1 , yi+1 )]
2
appunti di calcolo numerico 195

h
Si ha la formula di Crank-Nicolson: yi+1 = yi + [ 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:

y i +1 − y i = h f ( t i , y i )
y i +1 − y i = h f ( t i +1 , y i +1 )

sommando e dividendo per 2:

h h
y i +1 − y i = [ f (ti , yi ) + f (ti+1 , yi+1 )] =⇒ yi+1 = yi + [ f (ti , yi ) + f (ti+1 , yi+1 )]
2 2

Esempio Lo stesso esempio di prima (y0 = −y con y(0) = 1)


h
risolto con Crank-Nicolson dà yi+1 = yi + [−yi − yi+1 )] da cui
2
ricaviamo
2−h
 
h h
(1 + )yi+1 = (1 − )yi =⇒ (2 + h)yi+1 = (2 − h)yi =⇒ yi+1 = yi
2 2 2+h
Per h = 0.5, confrontiamo i valori ottenuti dai metodi di Eulero
esplicito, implicito e Crank-Nicolson, con la soluzione esatta:
ti y ( 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 trascu-
rato rappresenta l’errore di troncamento locale. Nel caso di Eulero
esplicito avevamo (usando la formula di Taylor):
y(ti+1 ) − y(ti ) h 00
y 0 ( t i +1 ) = − y (ξ i ) = f (ti , y(ti ))
h 2
Per costruire il metodo, abbiamo trascurato il termine del resto, vale
a dire la quantità
y ( t i +1 ) − y ( t i ) h
di = − f (ti , y(ti )) = y00 (ξ i ) = O(h)
h 2
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 yi . Si definisce errore totale di arrotonda-
mento la quantità:
εi = yi − 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 arrotondamen-
to
ei = y ( t i ) − y i = ε 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 y0 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

x Nel metodo di Eulero esplicito:


y ( t i +1 ) − y ( t i ) h
di = − f (ti , y(ti )) = y00 (ξ i ) = O(h)
h 2

x Nel metodo di Eulero implicito:


y ( t i +1 ) − y ( t i ) h
di = − f (ti+1 , y(ti+1 )) = − y00 (ξ i ) = O(h)
h 2

x Nel metodo di Crank-Nicolson (derivando la formula dai trapezi


e includendo il termine dell’errore):

h f 00 (ξ i , τi ) 3
y ( t i +1 ) − y ( t i ) = [ f (ti , y(ti )) + f (ti+1 , y(ti+1 ))] − h
2 12
dove ξ i e τi sono opportuni punti. Ma f = y0 da cui f 0 = y00 e
f 00 = y000 .
appunti di calcolo numerico 197

Perciò

h y000 (ξ i ) 3
y ( t i +1 ) − y ( t i ) = [ f (ti , y(ti )) + f (ti+1 , y(ti+1 ))] − h
2 12

y ( t i +1 ) − y ( t i ) 1 y000 (ξ i ) 2
di = − [ f (ti , y(ti )) + f (ti+1 , y(ti+1 ))] = − h = O(h2 )
h 2 12

11.9 Convergenza e stabilità

Definizione 11.9.1 Un metodo si dice convergente se lim h → 0 ei = 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ì t0 + 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 t0 + ih
sia sempre uguale a t. Sia t0 = 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 → ∞):

| e i | ≤ M | e0 |

con M costante positiva.

Studieremo la convergenza e la stabilità dei metodi di Eulero esplicito,


implicito e Crank-Nicolson applicati all’equazione test

y0 = −λy

prendendo λ > 0 (in modo che −λ < 0) con condizione iniziale


y (0) = y0 .
La soluzione esatta di questo IVP è y(t) = y0 e−λt : tende a zero per
valori di t crescenti. Ci aspettiamo che anche la soluzione numerica si
comporti in maniera simile.
198 annamaria mazzia

11.9.1 Convergenza di Eulero esplicito

Per semplicità, applichiamo la formula del metodo di Eulero esplicito


all’equazione test con λ = 1.

y1 = y0 + h f (t0 , y0 ) = y0 − hy0 = (1 − h)y0


y2 = y1 + h f (t1 , y1 ) = y1 − hy1 = (1 − h)y1
..
.
yi = yi−1 + h f (ti−1 , yi−1 ) = yi−1 − hyi−1 = (1 − h)yi−1

Andando a ritroso troviamo una formula che lega yi direttamente a


y0 .

y1 = (1 − h ) y0
y2 = (1 − h ) y1 = (1 − h )2 y0
..
.
y i = (1 − h ) y i −1 = (1 − h ) i y 0

La soluzione numerica al tempo ti è data da yi = (1 − h)i y0 . Fissato


un tempo t = ih, vediamo se lim ei = 0 cioè se lim yi = y(t).
h →0 h →0
i →+∞ i →+∞
ih 1 t

Osserviamo che: (1 − h)i = (1 − h) h = (1 − h) h 


Ricordiamo la proprietà per la quale
α)
1 ln (1 − h) x α = eln ( x= eα ln (x) .
ln ( 1 − h ) (1/h)
Perciò: (1 − h) h = e =e h
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
lim = lim = −1
h →0 h h →0 1 − h

ln (1 − h)
Di conseguenza limh→0 e h = e −1
Allora
1 t


lim yi = lim y0 (1 − h)i = lim y0 (1 − h) h  = y0 e−t = y(t)


h →0 h →0 h →0
i →+∞ i →+∞ i →+∞

In questo modo abbiamo provato che il metodo converge. Il


discorso si ripete in maniera del tutto simile, per λ 6= 1.

11.9.2 Stabilità di Eulero esplicito

Per quanto riguarda la stabilità, dobbiamo provare che l’errore si


mantiene limitato. Sia λ > 0.
Abbiamo yi+1 = yi − hλyi = (1 − hλ)yi , vale a dire yi+1 = y0 (1 −
hλ)i+1 . La soluzione esatta di questo problema è y(t) = y0 e−λt e
appunti di calcolo numerico 199

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
y i +1 =
(1 + hλ)

Quindi
y0
y1 =
(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

In tal caso

1 −ih
 
y0
lim yi = lim = lim y0 (1 + hλ)−i = y0 (1 + hλ) h  = y0 e−tλ = y(t)
h →0 h→0 (1 + hλ )i h →0
i →+∞ i →+∞ i →+∞

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

11.9.4 Stabilità di Eulero implicito

y0
Per la stabilità, dalla soluzione numerica yi = , si osser-
(1 + λh)i
va che, per i → +∞, qualunque sia il valore di h, la soluzione
1
tende a zero in quanto limi→+∞ = 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:



y i +1 = y i + [−yi − yi+1 ] da cui
2
2 − hλ
 
y i +1 = yi
2 + hλ
200 annamaria mazzia

Andando a ritroso si ricava


 i +1
2 − hλ

y i +1 = y 0
2 + hλ

Per verificare che il metodo converge studiamo il limite lim yi .


h →0
i →+∞
Partiamo dalla relazione
ih t
1 1
 
i
2 − hλ  2 − hλ h   2 − hλ h 
  
=  =
2 + hλ 2 + hλ 2 + hλ
 

Ma
1 1 2 − hλ
2 − hλ

h = e h ln ( 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

2 − hλ
ln ( )
lim 2 + hλ = lim 2 + hλ −4λ = lim
−4λ
= −λ
h →0 h h→0 2 − hλ (2 + hλ )2 h→0 (2 + hλ )(2 − hλ )
i →+∞ i →+∞ i →+∞

Quindi
ih
1

i
2 − hλ  2 − hλ h 
 
−tλ
lim yi = lim y0 = lim y0   = y0 e = y(t)
h →0 h →0 2 + hλ h →0 2 + hλ
i →+∞ i →+∞ i →+∞

La convergenza è provata.

11.9.6 Stabilità di Crank-Nicolson

2 − λh i
 
Per la stabilità, si vede che la soluzione numerica è yi = y0 .
2 + λh
Per i → +∞, qualunque sia il valore di h, la soluzione tende a zero in
2 − λh i
 
quanto limi→+∞ = 0. Il metodo è incondizionatamente
2 + λh
stabile.

11.9.7 Sulla stabilità

La stabilità di questi metodi la si può verificare anche considerando


direttamente l’errore ei , 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 appli-


chiamolo all’equazione test. Sappiamo che yi+1 = yi + hλyi .
Per la soluzione esatta, sappiamo che vale y(ti+1 ) = y(ti ) + hλy(ti ) +
hdi (con di l’errore di troncamento locale).
Sottraendo la prima equazione dalla seconda abbiamo

ei+1 = ei + hλei + hdi


h 00
Considerato che di = y (ξ i ) e che, per studiare la stabilità, h è fis-
2
sato mentre i tende a +∞, il termine hdi non influisce sull’andamento
dell’errore e possiamo trascurarlo. Si ha allora la relazione:

ei+1 = ei + hλei

Ricaviamo ei = e0 (1 + hλ)i .
Il ragionamento da fare è lo stesso che abbiamo fatto in precedenza
e troviamo gli stessi risultati. Dobbiamo infatti verificare quando ei
tende a zero per i che tende a +∞. . .
_

Figura 11.3: Confronto dei metodi di Eule-


ro esplicito, implicito e Crank-Nicolson sull’e-
quazione test y0 = −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 y0 = −2y + 1, con y(0) = 1
e−2t + 1
(soluzione esatta y(t) = )
2

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 = yi + h(−2yi + 1) = (1 − 2h)yi + h


202 annamaria mazzia

La soluzione esatta soddisfa un’equazione del tipo

y(ti+1 ) = y(ti ) + h(−2y(ti ) + 1) + hdi = (1 − 2h)y(ti ) + h + hdi

Nel calcolare l’errore ei+1 = y(ti+1 ) − yi+1 abbiamo

ei+1 = (1 − 2h)ei + hdi

Il termine hdi (di errore locale di troncamento) si può trascurare.


Abbiamo allora ei+1 = (1 − 2h)ei .
Possiamo trovare con facilità che ei+1 = (1 − 2h)i+1 e0 o, ancora,
ei = (1 − 2h)i e0 .
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 risol-


vere 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 203

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?
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 Cal-


colo. 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.


206 annamaria mazzia

Doron Swade. The Babbage Engine. Computer History Museum, Moun-


tain View, CA, http://www.computerhistory.org/babbage, ultima
visita: febbraio 2015.

You might also like