Sei sulla pagina 1di 294

Università di Torino

QUADERNI

DIDATTICI

del

Dipartimento di Matematica “G. Peano”

MARIA GARETTO

Metodi Numerici

Corso di Laurea Magistrale in Informatica A.A. 2010/2011

Quaderno # 47 – Settembre 2010

G ARETTO Metodi Numerici Corso di Laurea Magistrale in Informatica A.A. 2010/2011 Quaderno # 47 –

A Irene

Prefazione

i

Prefazione

In questo quaderno sono state raccolte le lezioni del corso di Metodi Numerici per il Corso di Laurea Magistrale in Informatica presso l’Università di Torino. Obiettivo del testo è di fornire un’introduzione teorica ai principali metodi numerici per risolvere problemi di algebra lineare numerica, interpolazione e approssimazione, integrazione e equazioni differenziali; ogni argomento esaminato negli aspetti teorici è accompagnato da numerosi esempi svolti nei dettagli, in modo da consentire agli studenti di acquisire la capacità di applicare in modo corretto i metodi numerici trattati. Il corso di Metodi Numerici prevede un’attività di laboratorio in cui viene utilizzato il software scientifico Matlab, con il quale può essere ulteriormente approfondito ogni aspetto applicativo dei metodi illustrati; per alcuni di essi sono riportati nel testo gli algoritmi in pseudocodifica, utili come suggerimento agli studenti per il lavoro di laboratorio. I grafici presentati in questo testo sono stati realizzati con Matlab.

Torino, settembre 2010

Maria Garetto Dipartimento di Matematica Università di Torino

ii

M. Garetto – Metodi Numerici

M. Garetto - Statistica

iii

Indice

Capitolo

1

Nozioni introduttive

1

1.1

Modelli matematici

1

1.2

Rappresentazione dei numeri e sistemi numerici

3

1.3

Rappresentazione dei numeri in floating point

5

1.4

Troncamento e arrotondamento

8

1.5

Errore assoluto, errore relativo

10

1.6

Aritmetica floating point

12

1.7

Generazione degli errori nel computer

15

 

1.7.1 Problemi del calcolo con i numeri reali

15

1.7.2 Cancellazione numerica

17

1.7.3 Calcolo del valore di una funzione

18

1.7.4 Discretizzazione

19

1.7.5 Iterazione

20

 

1.8

Tipi di errore

21

1.9

Propagazione degli errori

21

1.10

Problemi mal condizionati

22

1.11

Algoritmi instabili

24

1.12

Efficienza computazionale

29

1.13

Codifica degli algoritmi

31

Capitolo

2

Algebra lineare numerica

35

2.1

Introduzione

35

2.2

Operazioni fra vettori

35

2.3

Operazioni fra matrici

37

2.4

Matrice trasposta

41

2.5

Determinante

42

2.6

Matrice inversa

43

2.7

Norme di vettori e matrici

45

2.8

Classificazione delle matrici

46

2.9

Matrici speciali

47

2.10

Soluzione di sistemi lineari: definizioni e proprietà

49

2.11

Metodi numerici per la soluzione di sistemi lineari

53

2.12

Sorgenti di errore

54

2.13

Condizionamento di un sistema lineare

54

2.14

Metodi diretti

58

2.15

Metodo di eliminazione di Gauss

62

2.16

Metodo di eliminazione di Gauss con pivoting

72

2.17

Calcolo del determinante

78

2.18

Calcolo della matrice inversa

79

2.19

Fattorizzazione triangolare di una matrice

81

2.20

Matrici di tipo particolare

93

2.21

Metodi iterativi

94

2.22

Metodo iterativo di Jacobi

95

2.23

Metodo iterativo di Gauss-Seidel

101

2.24

Autovalori e autovettori

108

2.25

Localizzazione degli autovalori

120

2.26

Metodi numerici per il calcolo degli autovalori

125

2.27

Metodo delle potenze

126

iv

Indice

Capitolo

3

Interpolazione e approssimazione

133

3.1

Introduzione

133

3.2

Interpolazione polinomiale. Formula di interpolazione di Lagrange

134

3.3

Errore per la formula di interpolazione di Lagrange

139

3.4

Formula di interpolazione lineare

142

3.5

Formula di interpolazione di Newton

145

3.6

Polinomi di Chebyshev

151

3.7

Convergenza delle formule di interpolazione

155

3.8

Interpolazione con funzioni polinomiali a tratti

157

3.9

Interpolazione trigonometrica

170

3.10

Metodo dei minimi quadrati

176

3.11

Regressione lineare

177

3.12

Regressione polinomiale

183

3.13

Metodi di linearizzazione

185

Capitolo

4

Integrazione numerica

199

4.1

Introduzione

199

4.2

Formule di quadratura di tipo interpolatorio

200

4.3

Formule di quadratura di Newton-Cotes di tipo chiuso

201

4.4

Formula dei trapezi

202

4.5

Formula di Simpson

203

4.6

Formula di Simpson 8 3

204

4.7

Formule di quadratura composte

209

4.8

Formule di quadratura di Newton-Cotes di tipo aperto

218

4.9

Formula del punto medio composta

220

4.10

Formule di quadratura gaussiane

223

4.11

Metodo di estrapolazione di Richardson

234

Capitolo

5

Equazioni differenziali ordinarie

239

5.1 Introduzione

239

5.2 Condizionamento di un’equazione differenziale

242

5.3 Metodi numerici per la soluzione di equazioni differenziali

247

5.4 Metodo di Eulero

248

5.5 Metodi di Runge-Kutta

259

5.6 Metodi di Runge-Kutta di ordine due

260

5.7 Metodo di Runge-Kutta di ordine quattro

267

5.8 Metodi multistep

272

Bibliografia

 

277

Formulario

F-1

Capitolo 1 – Nozioni introduttive

1

1. Nozioni introduttive

1.1 Modelli matematici

La matematica è uno strumento per modellizzare il mondo reale: in forma schematica un modello è la rappresentazione di un sistema o di un processo, ottenuta sostituendo con semplificazioni, astrazioni e analogie, al fenomeno reale un fenomeno in un campo più familiare. In particolare, in un modello matematico tale rappresentazione è fatta in termini di variabili, parametri e relazioni funzionali, che definiscono un problema matematico. In ogni settore scientifico o tecnologico, i modelli matematici che approssimano l’evolversi dell’evento oggetto di studio consentono di simulare, e quindi prevedere, lo sviluppo del fenomeno senza dover effettuare fisicamente esperimenti complessi, costosi e in alcuni casi anche pericolosi. Ad esempio nella progettazione di un aereo la forma delle ali può essere successivamente adattata, senza dover costruire alcun prototipo, in base ai risultati delle simulazioni numeriche fatte con il calcolatore; lo studio dell’inquinamento ambientale, quale il propagarsi di una sostanza tossica nelle acque di un fiume, può essere condotto mediante calcolatore con un adeguato modello matematico, senza dover realizzare, anche in forma ridotta, un reale pericoloso esperimento. Poiché lo scopo della costruzione di un modello è di chiarire mediante la sua analisi gli aspetti incogniti del fenomeno reale, condizione indispensabile affinché il modello sia utile è che sia risolubile. Per un modello matematico, la risolubilità equivale a richiedere che il problema matematico associato risulti:

ben posto: si deve poter stabilire l’esistenza e l’unicità della soluzione;

ben condizionato: a piccole perturbazioni nei dati devono corrispondere piccole perturbazioni

nei risultati; tali perturbazioni possono essere dovute ad errori sperimentali o ad errori di arrotondamento nella rappresentazione numerica dei dati. In altre parole il modello deve possedere buone proprietà riguardanti la propagazione degli errori. Il processo di risoluzione di un problema del mondo reale può essere così schematizzato: una prima fase di modellizzazione, in cui al problema reale si associa un modello matematico che lo approssima; una seconda fase in cui il modello matematico viene analizzato e da questo si ricavano proprietà qualitative della soluzione, come esistenza, unicità, regolarità; una terza fase in cui si individuano dei metodi di risoluzione e se ne analizza l’efficienza; infine una quarta fase in cui il metodo di risoluzione viene implementato su un calcolatore mediante un adeguato linguaggio di programmazione. Le proprietà del modello matematico prima evidenziate danno un carattere di affidabilità al modello, ma non esauriscono il significato di risolubilità. Generalmente un modello matematico è un modello continuo, ad esempio un sistema di equazioni differenziali, uno sviluppo in serie, un integrale; per il modello continuo, che in genere consente di individuare proprietà qualitative della soluzione, quali esistenza, unicità, regolarità, non sempre però è possibile determinare analiticamente la soluzione. Spesso poi la soluzione del problema matematico non è data in forma esplicita, ad esempio mediante funzioni elementari, e comunque le sole proprietà qualitative non sono sufficienti per gli scopi richiesti. In questo caso si presenta per il problema matematico una situazione analoga a quella che si ha per il problema reale; ossia, per conoscere il comportamento della soluzione del problema matematico, può essere necessaria l’introduzione di un nuovo modello, che in questo caso si configura come una rappresentazione in dimensione finita, ottenuta mediante una discretizzazione del problema continuo. Il fatto che talvolta il modello discreto possa essere interpretato come un modello costruito a partire direttamente dal fenomeno reale non cambia la sostanza delle considerazioni che seguono.

2

M. Garetto – Metodi Numerici

Successivamente si presenta la necessità di risolvere algoritmicamente il problema matematico, cioè di ottenere mediante un numero finito di operazioni aritmetiche e/o logiche una soluzione, spesso approssimata, ma adeguata alle richieste.

Si parla così di risoluzione numerica del problema, intendendo che la soluzione ottenuta è

calcolata a partire da un insieme finito di numeri, rappresentati con un numero finito di cifre, attraverso un numero finito di operazioni aritmetiche ed è espressa ancora mediante un insieme finito di numeri. Il modello discreto o modello numerico presenta caratteristiche in parte simili a quelle viste per il

modello continuo. In particolare, sono ancora proprietà necessarie l’esistenza, l’unicità e la stabilità della soluzione.

La

sequenza di approssimazioni è illustrata nello schema seguente

Fenomeno naturale

Modello matematico continuo

seguente Fenomeno naturale Modello matematico continuo Modello matematico discreto Metodo numerico di soluzione

Modello matematico discreto

Metodo numerico di soluzione

Soluzione
Soluzione

In

i risultati effettivamente ottenuti utilizzando il calcolatore sono alterati dagli errori generati dalle

operazioni aritmetiche svolte con un’aritmetica finita e dagli errori generati dalla rappresentazione dei dati con un numero finito di cifre. Questo processo di risoluzione di un problema del mondo reale è sempre stato adottato anche nel passato: l’ultima fase era necessariamente risolta con carta e penna, e ciò limitava lo sviluppo dei metodi numerici a quei metodi che potevano essere applicati con mezzi di calcolo solo manuali. Rimangono due importanti questioni da esaminare. La prima riguarda la capacità del modello discreto di descrivere il modello continuo o il modello reale. In altre parole si tratta di vedere se la soluzione discreta può essere resa vicina quanto si vuole alla soluzione del problema continuo,

ossia più precisamente di esaminare la convergenza del metodo.

ogni passaggio da un blocco all’altro può essere commesso un errore di approssimazione. Inoltre

Una questione collegata alla convergenza è la stima dell’errore, che permette di stabilire la bontà dell’approssimazione e fornisce un criterio di scelta di un particolare modello. Un’altra questione riguarda la scelta di un particolare algoritmo per risolvere effettivamente il problema numerico. Ad esempio se il modello numerico richiede la soluzione di un sistema lineare

di equazioni, si può scegliere fra più algoritmi diversi: la scelta di un particolare algoritmo sarà

orientata sia dalle proprietà della matrice dei coefficienti, che dallo strumento di calcolo a disposizione. Nella risoluzione di problemi di analisi matematica, che generalmente hanno natura continua, questo processo algoritmico, necessariamente discreto poiché finito, si inquadra nel settore noto come analisi numerica. Obiettivo principale dell’analisi numerica è trovare gli algoritmi che risolvono un problema matematico nel minimo tempo e con la massima accuratezza, di solito mediante un calcolatore. L’analisi numerica ha assunto le caratteristiche di una disciplina autonoma solo con l’introduzione

e l’uso dei calcolatori. La disponibilità di calcolatori programmabili, potenti e affidabili, è uno tra i motivi più importanti dello sviluppo del’analisi numerica ed è una componente imprescindibile nel progetto di un algoritmo; essendo legata ad aspetti tecnici in continuo sviluppo, quali velocità,

Capitolo 1 – Nozioni introduttive

3

capacità di memoria, possibilità di uso interattivo, di calcolo parallelo, può suggerire nuovi orientamenti, rendere superati alcuni metodi, rivalutarne altri.

Il grande interesse attuale verso l’analisi numerica è dovuto, oltre che alla disponibilità di idonei

strumenti di calcolo, anche all’idea sempre più diffusa che la matematica è un utile strumento per lo studio del mondo reale. In questo senso l’analisi numerica è un aspetto della matematica applicata e

la conoscenza dei metodi numerici è diventata un elemento indispensabile per tutti gli studiosi che

operano nelle scienze applicate.

In maniera schematica, si possono distinguere nell’analisi numerica i seguenti aspetti:

efficienza,

l’implementazione per un particolare calcolatore;

la

metodologia,

che

tratta

la

costruzione

di

algoritmi

specifici,

la

loro

l’analisi, che studia i principi di fondo, le stime degli errori, la convergenza dei metodi.

Il

primo è un aspetto più pratico, mentre il secondo è più teorico, di base. Nella risoluzione

numerica di un problema i due aspetti, in generale entrambi presenti, si integrano a vicenda.

1.2 Rappresentazione dei numeri e sistemi numerici

Un problema rilevante che si deve affrontare nei processi di elaborazione dell’informazione è la rappresentazione dell’informazione sia numerica che non numerica. All’interno degli elaboratori elettronici l’informazione è rappresentata mediante fenomeni fisici

relativamente semplici che possono essere ridotti a due stati, livelli di tensione o magnetizzazione

di opportuni dispositivi, e la rappresentazione dell’informazione sarà prodotta dall’associazione tra

questi stati e i simboli di un alfabeto binario. Tutte le informazioni sono rappresentate da sequenze di simboli binari: numeri, parole, immagini, più in generale oggetti, devono quindi essere espressi mediante codici binari.

Poiché siamo interessati alla rappresentazione dell’informazione numerica, tratteremo i sistemi

numerici, con particolare riferimento a quello decimale e a quello binario. L’uomo è abituato a compiere le operazioni aritmetiche usando il sistema di numerazione decimale; tutti hanno dimestichezza con la nozione di posizione decimale: si sa ad esempio che per moltiplicare un numero per 10 si sposta il punto decimale di una posizione verso destra o, se il numero è intero, si pone uno zero alla destra del numero.

Il sistema decimale è un sistema in base 10, poiché fa uso di dieci simboli diversi: si usano le cifre

da 0 a 9 introdotte dagli Arabi.

I calcolatori, d’altra parte, possiedono caratteristiche fisiche che non si prestano a utilizzare il sistema decimale. I computer compiono tutte le operazioni utilizzando un sistema di numerazione diverso dal nostro e maggiormente rispondente alle caratteristiche dei materiali impiegati: il

sistema binario (base 2), che meglio si presta a codificare situazioni come “corrente positiva” e “corrente negativa”, “magnetizzazione positiva” e “magnetizzazione negativa”.

Il sistema binario d’altra parte è inadatto alla mente umana, che difficilmente manipola lunghe

sequenze di 0 e 1, e inoltre la conversione dei numeri da binario a decimale e viceversa non è immediata.

In campo informatico si fa anche uso di altri due sistemi di numerazione: l’ottale con otto simboli

diversi e l’esadecimale che ne usa sedici. Va comunque rilevato che facendo uso dei sofisticati prodotti software esistenti oggi, l’utente non ha mai la necessità di operare con basi diverse da quella decimale e non ha alcun contatto diretto con il sistema binario. La comunicazione fra utente e computer avviene nella base 10, ma il computer usa la base 2; un’apposita interfaccia converte l’input dalla base 10 alla base 2, i calcoli vengono eseguiti in base 2, poi il risultato viene di nuovo convertito dall’interfaccia nella base 10. Un sistema numerico è determinato quando si fissano alcuni elementi che lo caratterizzano:

un insieme limitato di simboli, le cifre, che rappresentano quantità intere prestabilite, ad

esempio alcune lettere dell’alfabeto nel sistema di numerazione romano, le cifre arabe nel nostro sistema di numerazione;

le regole che devono essere applicate per costruire i numeri.

4

M. Garetto – Metodi Numerici

Questi elementi portano a una differenziazione fra sistemi numerici. I sistemi numerici si distinguono in:

non posizionali: il valore delle cifre è indipendente dalla loro posizione all’interno del numero;

ad esempio, nella numerazione romana la cifra M vale sempre mille, da sola, preceduta o seguita da altre cifre;

posizionali: a ogni posizione all’interno della rappresentazione è associato un peso.

Nei sistemi numerici posizionali un numero intero non negativo N è rappresentato come una

sequenza di simboli (cifre) d , i

i

= 0 1

,

,

,n

N =

d

n

d

n1

d 1

d

0

il valore del numero N è dato da

p

dove p i rappresenta il peso associato alla i– esima posizione. Tra i sistemi posizionali sono di rilevante interesse quelli a base fissa nei quali si pone

valore(N) =

d

n

n

+

d

n

1

p

n

1

+

+

d

1

p

1

+

d

0

p

0

p

i

i

= r

con

m i n

dove r è la base del sistema di numerazione.

Esempio 1

 

r

= 10

N = 743

Il valore di N è

valore(N) = 7 10 2 + 4 10 1 + 3 10 0

p 2 = 10 2

d 2 p 2

d 1 p 1

d 0 p 0

p 1 = 10 1

p 0 = 10 0

Più in generale nei sistemi numerici posizionali a base fissa r, un numero N non intero può essere rappresentato nel seguente modo

N

=

d

n

d

n

1

⋅⋅⋅

d d

1

0

.d

1

Il valore di N sarà valore(N) =

d

n

n

r

=

n

d

i

=−

m

+

i

r

d

i

n 1

dove

d

i cifra i-esima

⋅⋅⋅

d

n 1

r

m

+ ⋅⋅⋅+

d r

1

1

+

d

0

r

0

con

0 d i r – 1

+

d

1

r

1

r base

n+1 numero di cifre della parte intera

m numero di cifre della parte decimale

d

d

n cifra più significativa

m cifra meno significativa.

+ ⋅⋅⋅+

d

m

r

m

=

Sistema decimale

Il sistema numerico decimale è quello usato nella vita quotidiana ed è caratterizzato da

Esempio 2

base

N

=

d

n

r = 10

10

n

+ ⋅⋅⋅ +

d

0

10

0

cifre

+

d

1

d i {0,1,2,3,4,5,6,7,8,9}

10

1

+ ⋅⋅⋅ +

d

m

10

m

123.45 10 = 1 10 2 + 2 10 1 + 3 10 0 + 4 10 1 + 5 10 2

12.25 10 = 1 10 1 + 2 10 0

+ 2 10 1 + 5 10 2

Capitolo 1 – Nozioni introduttive

5

Sistema binario

Un sistema numerico binario è caratterizzato da

base

N =

d

n

r = 2

2

n

+ ⋅⋅⋅+

d

0

2

0

cifre

+

d

1

2

1

Una cifra binaria è detta bit.

Esempio 3

∈ {0,1}

d

+ ⋅⋅⋅+

i

d

m

2

101 2 = 1 2 2 + 0 2 1 + 1 2 0 = 5 10

m

101.01 2 = 1 2 2 + 0 2 1 + 1 2 0 + 0 2 1 + 1 2 2 = 5.25 10

La rappresentazione di un numero in base 2 richiede più cifre rispetto alla rappresentazione decimale, perché le potenze di 2 crescono più lentamente delle potenze di 10.

1.3 Rappresentazione dei numeri in floating point

E’ utile vedere come l’elaboratore rappresenta i numeri ed esegue le operazioni aritmetiche:

l’aritmetica del computer è generalmente inesatta e gli errori commessi, anche se molto piccoli, si possono propagare e possono avere effetti tali da compromettere la bontà del risultato ottenuto.

In un calcolatore si deve riservare uno spazio finito di memoria per la rappresentazione di ogni

numero reale: ogni numero viene rappresentato usando un numero fisso e finito di cifre binarie

(bit). Pertanto si possono rappresentare esattamente solo quei numeri che, in base alla convenzione

di rappresentazione scelta, possono essere contenuti nello spazio previsto per ognuno di essi; questi

numeri sono chiamati numeri di macchina. Esaminiamo le convenzioni che nei moderni calcolatori vengono usate per la rappresentazione dei numeri di macchina. La rappresentazione che viene più convenientemente utilizzata per i numeri non interi è la rappresentazione in floating point (virgola mobile), che consente di risolvere in modo efficace il problema di trattare numeri con ordini di grandezza molto diversi. Questo sistema di rappresentazione è basato sulla notazione scientifica o esponenziale comunemente usata in fisica, chimica, ingegneria, matematica. La notazione scientifica si ottiene spostando il punto decimale e moltiplicando per un’opportuna potenza di 10. Ogni numero reale x può essere scritto nella forma

x = sign(x) p r

q

dove sign(x) è il segno del numero x, p è un numero reale, r è la base del sistema di numerazione scelto e q è un intero relativo.

Esempio 4

Il numero reale decimale

x = 23.701 = 23701 10 3 = 237.01 10 1 = 0.23701 10 2 = 0.00023701 10 5 = Il numero reale π 3.14159265 (valore approssimato di π ) può essere scritto nei modi seguenti 3.14159265 = 3.14159265 10 0 = 0.314159265 10 1 = 31.4159265 10 1 =

Come si vede dall’esempio, la rappresentazione non è unica, anzi esistono infinite rappresentazioni

in notazione scientifica dello stesso numero, ottenibili una dall’altra spostando il punto decimale e

cambiando convenientemente l’esponente. La rappresentazione di un numero x 0 si dice normalizzata quando la cifra della parte intera è 0 e la prima cifra dopo il punto decimale è diversa da 0.

Esempio 5

La rappresentazione normalizzata di

La rappresentazione normalizzata di

x = 23.701 può essere scritto nei modi seguenti

x = 123.715 10

è

x = 0.123715 10 3 . x = 0.718 10 3 .

x = 0.000718 10 è

6

M. Garetto – Metodi Numerici

Nella rappresentazione normalizzata di un numero x chiamiamo p mantissa e q caratteristica o esponente di x; p è un numero reale compreso fra 0 e 1, q è un intero. Fissata la base r, ogni numero reale x 0 è univocamente definito dalla coppia (p,q), ossia la rappresentazione normalizzata è unica; pertanto è sufficiente memorizzare la coppia (p,q). Con questa notazione è possibile la scrittura in uno spazio limitato di numeri aventi ordini di grandezza molto diversi tra loro; viene in ogni caso evidenziata l’informazione essenziale, che è la sequenza di cifre significative nella mantissa, mentre la caratteristica fornisce l’ordine di grandezza, espresso in potenze della base. Poiché un numero reale è univocamente individuato dalla coppia di interi (p,q), per rappresentare un numero reale si deve stabilire:

quanti bit devono essere utilizzati complessivamente per la rappresentazione di un numero reale in notazione esponenziale normalizzata;

quanti di essi devono rappresentare la mantissa e con quali convenzioni sono utilizzati;

quanti, analogamente, per la caratteristica.

Il numero totale di bit stabilito per rappresentare un numero è fissato dall’architettura del computer.

Nei moderni calcolatori, per la memorizzazione dei numeri reali in aritmetica floating point esiste la possibilità di riservare a ciascun numero una lunghezza complessiva di 32 bit (l’aritmetica in questo caso viene definita in semplice precisione), oppure di 64 bit (aritmetica in doppia precisione). Come numeri reali di macchina si intendono quei numeri le cui mantisse e caratteristiche sono rappresentabili esattamente negli spazi a loro riservati. In particolare, se lo spazio dedicato alla rappresentazione della mantissa corrisponde a t cifre nel sistema di numerazione scelto, saranno rappresentabili solo quelle mantisse che non hanno più di t cifre. L’esponente invece dovrà soddisfare una disuguaglianza del tipo m q M , dove m < 0 e M > 0 sono interi. Di solito per evitare di dover memorizzare, oltre al segno del numero, anche il segno dell’esponente, non si memorizza l’esponente q, ma la quantità q * = q m, che risulta sempre non negativa.

Definizione

L’insieme dei numeri di macchina floating point, con rappresentazione normalizzata, in base r con t cifre nella mantissa, e con esponente q compreso fra m e M è indicato con il simbolo (r,t,m,M), ed è costituito dai numeri esattamente rappresentabili nel calcolatore nello spazio stabilito per la rappresentazione floating point.

Si osservi che l’insieme dei numeri di macchina deve contenere anche lo 0, che non è rappresentabile con una mantissa normalizzata, e quindi non è rappresentabile in modo univoco. Di solito lo 0 è rappresentato con mantissa nulla ed esponente m. Nella figura seguente si schematizza una possibile rappresentazione interna a un calcolatore di un numero di macchina su 32 bit (semplice precisione), nel caso della base r = 2, con un bit per il segno del numero, con t = 23 cifre per la mantissa e con 8 bit per l’esponente

esponente (8 bit) mantissa (23 bit) ← →← →
esponente (8 bit)
mantissa (23 bit)
→←

segno (1 bit)

Con questa scelta si possono rappresentare esponenti q compresi fra m = 127 e M = 128; per non dover memorizzare il segno dell’esponente, si memorizza l’esponente traslato q * = q + 127 (si ricordi 1 che con 8 bit si possono rappresentare numeri interi positivi compresi fra 0 e 255).

1 In generale con n bit si rappresentano numeri interi positivi compresi fra 0 e 2

n 1

Capitolo 1 – Nozioni introduttive

7

Nella doppia precisione si usano 64 bit e i 32 bit aggiuntivi possono essere tutti destinati alla mantissa, oppure parte alla mantissa e parte all’esponente; tale scelta dipende dall’architettura dell’elaboratore; una suddivisione spesso applicata consiste nel destinare 52 bit per la mantissa e 11 bit per l’esponente. In un computer che usa 32 bit per rappresentare un numero (semplice precisione) e riserva 23 bit per la mantissa e 8 per l’esponente, più 1 bit per il segno del numero, si ottiene una precisione di circa 7 cifre decimali e si possono rappresentare numeri aventi un ordine di grandezza compreso fra 10 39 e 10 +38 .

Se il computer usa invece 64 bit per rappresentare un numero (doppia precisione) e riserva 52 bit per la mantissa e 11 per l’esponente, si ottiene una precisione di circa 15 cifre decimali e si possono rappresentare numeri aventi un ordine di grandezza compreso fra 10 308 e 10 +308 . La maggior parte dei personal computer di attuale generazione si basano su questo tipo di standard, detto standard IEEE (Institute for Electrical and Electronics Engineers) dal nome dell’istituto che ha codificato per la prima volta nel 1985 la scelta sopra descritta per l’aritmetica floating point. Attualmente di solito, soprattutto nell’ambito dei software di tipo matematico, viene usata per default la doppia precisione, mentre in tempi meno recenti c’era la possibilità di scegliere fra semplice e doppia precisione, per ragioni legate alla minor velocità di calcolo e alla minor disponibilità di memoria degli elaboratori meno recenti.

Esempio 6

Con questo esempio si vuole mostrare che l’insieme dei numeri di macchina è un insieme che ha un numero finito di elementi; l’esempio ha significato puramente didattico, non esistendo ovviamente nessun elaboratore che abbia queste caratteristiche, ma negli elaboratori realmente esistenti si

verifica lo stesso tipo di situazione. Scriviamo tutti i numeri dell’insieme (2,3,–1,1) e li rappresentiamo sulla retta reale. L’insieme (2,3,–1,1) è caratterizzato da:

base r = 2;

t = 3 cifre per la mantissa con prima cifra della mantissa diversa da 0;

esponenti compresi fra 1 e 1.

Le mantisse che possono essere rappresentate con 3 bit sono le seguenti; accanto a ciascuna mantissa in base 2 è indicato a destra il corrispondente valore in base 10, in forma di frazione.

0

0

0

0

.

.

.

.

100

101

110

111

2

2

2

2

0.100

2

0.101

2

0.110

2

0.111

2

=

=

=

=

1

1

1

1

2

-1

2

-1

2

-1

2

-1

1 -2 -2 + 0 ⋅ 2 + 0 ⋅ 2 = 2 1 1
1
-2
-2
+
0
2
+
0
2
=
2
1
1
5
-2
-2
+
0
2
+
1
2
=
+
=
2
8
8
1
1
3
-2
-2
+
1
2
+
0
2
=
+
=
2
4
4
1
1
1
7
-2
-2
+
1
2
+
1
2
=
+
+
=
2
4
8
8

Associando a ciascuna mantissa tutti i possibili esponenti si ottengono i seguenti numeri di macchina positivi; accanto a ciascuno di essi si indica il corrispondente valore decimale

1 1 1 1 1 − 1 − 1 0 0 1 1 0 .
1
1
1
1
1
− 1
1
0
0
1
1
0
.
100
⋅ 2
=
2
=
0.100
2
=
2
=
0.100 ⋅ 2
=
2
=
1
2
4
2
2
2
5
5
5
5
5
5
− 1
1
0
0
1
1
0
.
101
⋅ 2
=
2
=
0.101
2
=
2
=
0.101
2
=
2
=
8
16
8
8
8
4
3
3
3
3
3
3
− 1
1
0
0
1
1
0
.
110
⋅ 2
=
2
=
0.110
2
=
2
=
0.110
2
=
2
=
4
8
4
4
4
2
7
7
7
7
7
7
− 1
1
0
0
1
1
0
.
111
⋅ 2
=
2
=
0.111 ⋅ 2
=
2
=
0.111 ⋅ 2
=
2
=
8
16
8 8
8
4

8

M. Garetto – Metodi Numerici

I numeri floating point positivi rappresentabili in questo elaboratore sono quindi 12; a questi si aggiungono i corrispondenti 12 numeri negativi e lo 0; complessivamente in questo elaboratore si possono rappresentare esattamente solo 25 numeri reali: questi 25 numeri costituiscono l’insieme dei numeri di macchina (2,3,–1,1). I numeri di macchina possono essere rappresentati sulla retta reale; quelli positivi sono rappresentati nella figura seguente

quelli positivi sono rappresentati nella figura seguente

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯→

1

5

3

7

1

5

3 7

 

1

5

3

7

4

16

8

16

2

8

4 8

 

4

2

4

 

0 100

.

2

1

=

1

; il più grande è

0 . 111 2

1

=

7

.

 

4

4

0

1424 434

underflow

Il più piccolo numero positivo è

14243

overflow

I numeri negativi sono i simmetrici dei positivi. Ogni altro numero reale non può essere

esattamente rappresentato in questa macchina e dovrà essere approssimato da uno di questi numeri

scelto secondo certe regole (vedere §1.4). Si può osservare che i numeri di macchina non sono distribuiti in modo regolare: i punti sono

raggruppati in modo più fitto tra

1

1

7

4

.

e

4

2

che tra

1

e

Di conseguenza se numeri x arbitrari compresi nell’intervallo

1

7

4

4

,

e non coincidenti con

numeri di macchina devono essere approssimati con numeri di macchina in virgola mobile, tale approssimazione sarà più accurata per certi numeri che per altri.

1.4 Troncamento e arrotondamento

Vediamo ora come rappresentare un numero reale positivo x in forma normalizzata in un sistema di numeri di macchina (r,t,m,M); per i numeri negativi si ottengono risultati analoghi.

Si possono presentare i seguenti casi:

1 il numero x è tale che m q M e inoltre il numero delle cifre della mantissa è minore o

uguale a t; allora x è un numero di macchina ed è rappresentato esattamente.

Se x non appartiene a (r,t,m,M), si pone il problema di associare in modo adeguato a x un numero

di

macchina x .

2

la caratteristica q non appartiene all’intervallo [m,M].

Se q < m si dice che si verifica un underflow; solitamente si assume come valore approssimato del numero x il numero 0; la presenza di underflow può portare a situazioni critiche, ad esempio divisione per 0.

Se q > M, si verifica un overflow e non si può effettuare alcuna approssimazione con un numero di macchina. Nei computer di più vecchia generazione in situazioni di questo tipo avveniva l’arresto

del calcolo; nei calcolatori più recenti può essere usato uno standard detto “virgola mobile estesa”

in cui, in aggiunta ai numeri di macchina, sono consentiti i simboli Inf (infinito) e NaN (Not a

Number) e sono previste regole per eseguire operazioni del tipo

x

Inf

x

0

=

± Inf ,

0

0

= NaN .

= 0 ,

3 la caratteristica q appartiene all’intervallo [m,M], ma le cifre della mantissa di x sono in numero maggiore di t. In questo caso si pone il problema di scegliere per il numero x un suo rappresentante

x ∈ ℑ. Tale operazione viene indicata comunemente come operazione di arrotondamento, e comporta un errore, detto errore di arrotondamento (rounding error o anche round-off error). Per effettuare l’operazione di arrotondamento si possono utilizzare due tecniche diverse:

Capitolo 1 – Nozioni introduttive

9

troncamento (chopping) di x alla t–esima cifra: si trascurano tutte le cifre della mantissa dopo la t–esima cifra.

arrotondamento (rounding) di x alla t–esima cifra: l’arrotondamento tiene conto della prima

r

cifra da trascurare, la (t +1)–esima cifra. Se la (t+1)–esima cifra è minore di 2 , l’arrotondamento

coincide con il troncamento; se invece la (t+1)–esima cifra è maggiore o uguale a 2 , si aumenta di

uno l’ultima cifra che si conserva nella mantissa (t–esima cifra) e poi si effettua il troncamento.

r

Si noti che se si lavora in base r = 10 ,

si ha

r

=

5

.

2

Esempio 7

 

(10,3,– 4,4)

base 10

 

a

x = 9824 = 0.9824 10 4

 
 

x

= 0.982 10 4

con troncamento

x

= 0.982 10 4

con arrotondamento

In questo caso il numero arrotondato coincide con il numero troncato.

b

x = 9827 = 0.9827 10 4

x

= 0.982 10 4

con troncamento

x

= 0.983 10 4

con arrotondamento

In questo caso il numero arrotondato e il numero troncato sono diversi.

Esempio 8

(10,5,– 4,4)

x = π = 3.1415926… = 0.31415926… 10 1

base 10

x x = 0.31416 10 1

= 0.31415 10 1

con troncamento con arrotondamento

Il troncamento è un’operazione più semplice, ma conduce ad errori 2 di arrotondamento più grandi; infatti riferendoci all’esempio 7, caso b, si ha

x = 9827 = 0.9827 ⋅ 10 4 x = 0.982 ⋅ 10 4 con
x
= 9827 = 0.9827 ⋅ 10 4
x
= 0.982 ⋅ 10 4
con troncamento
Errore (con il troncamento)
4
4
1
x
− x
= 0
.
9827 10
0 982 10
.
= 0
. 7
10
x = 0.983 ⋅ 10 4
con arrotondamento
Errore (con l’arrotondamento) 4 4 1 x − x = 0 . 9827 10 ⋅
Errore (con l’arrotondamento)
4
4
1
x
− x
= 0
.
9827 10
0 983 10
.
= 0
.
3 10
Riferendoci invece all’esempio 8, si ha
x
= π = 3.1415926… = 0.31415926… ⋅ 10 1
x
= 0.31415 ⋅ 10 1
con troncamento

Errore (con il troncamento)

1 1 x − x = 0 . 31415926 ⋅ 10 − 0 31415 10
1
1
x
− x
= 0
. 31415926
⋅ 10
0 31415 10
.
x = 0.31416 ⋅ 10 1
con arrotondamento
Errore (con l’arrotondamento)
1
1
x
− x
= 0
. 31415926
⋅ 10
0 31416 10
.

0

.

93 10

0

.

74 10

4

5

2 Vedere il successivo § 1.5 per le definizioni di errore.

10

M. Garetto – Metodi Numerici

1.5 Errore assoluto, errore relativo

Se

x rappresenta il valore esatto di un numero e x una sua approssimazione (per esempio il numero

di

macchina con cui è rappresentato x), gli errori assoluto e relativo associati a x sono definiti nel

modo seguente.

Definizione

Errore assoluto

E

A

=

x − x
x − x

Errore relativo

E R

=

x − x , x
x
x
,
x

x 0 .

Esempio 9

a

b

c

1 x = 0.50 ⋅10 1 x = 0.51⋅10 0 E = = x −
1
x = 0.50 ⋅10
1 x = 0.51⋅10
0
E
= =
x
x
0 1 10
.
A
x −
x
0
0 1 10
.
− 1
E
=
=
0 . 2 10
R =
1
x
0 50 10
.
3
3
x =
0 .
50 10 −
x =
0 .
51 10 −
− 4
E
=
x
x
= 0
.
1 10
A
x −
x
− 4
0
.
1 10
− 1
E
=
=
0 .
2 10
R =
− 3
x
0
.
50 10
4
4
x = 0.50 ⋅10
x = 0.51⋅10
3
E
=
x
x
= 0
.
1 10
A
x −
x
3
0
.
1 10
− 1
E
=
=
=
0 . 2 10
R
4
x
0
.
50 10

Il confronto fra questi tre casi mostra che si possono avere errori assoluti molto diversi, ma lo stesso errore relativo; in altre parole, come misura di accuratezza l’errore assoluto può essere fuorviante, mentre l’errore relativo è maggiormente significativo. L’errore relativo è da preferire nella misura dell’accuratezza per numeri floating point, perché è legato direttamente alla mantissa.

Esempio 10

a

x = 1000000

x = 999996

E A

=

E

R =

x − x = 1000000 − 999996 = 4 x − x 4 − 5
x
− x
= 1000000
− 999996
= 4
x
x
4
− 5
=
=
0 4 10
.
x
1000000

L’errore assoluto è grande, ma l’errore relativo è piccolo: x può essere considerato una buona approssimazione per x.

b

x = 0.000012 x = 0.000009 E = x − x = 0 . 000012
x = 0.000012
x = 0.000009
E
=
x
− x
= 0 .
000012
− 0 000009
.
=
A
x −
x
− 5
0 3 10
.
0
E
=
=
=
0 25 10
.
R
x
0
. 000012

.

0 3 10

5

L’errore relativo è grande: x non è una buona approssimazione per x.

Capitolo 1 – Nozioni introduttive

11

Definizione Se, lavorando in base 10, risulta

allora l’approssimazione x ha k cifre decimali corrette. Se risulta

E R

allora l’approssimazione k +1).

x ha almeno k cifre significative corrette (potrebbero essere anche

E A

= 10 10

k

k

1

= 10 10

k

k

1

L’errore assoluto fornisce quindi informazioni sul numero delle cifre decimali corrette, mentre l’errore relativo fornisce informazioni sul numero delle cifre significative corrette.

Esempio 11

x

E

k

E

k

= 0 . 0020284 x = 0 . 002028 1 − 2 − 2 −
=
0 . 0020284
x
=
0 . 002028
1
2
2
6
6
x
x
= 0 .
20284 ⋅ 10
0 . 2028 ⋅ 10
= 0 4 ⋅ 10
.
<
⋅ 10
A =
2
= 6
x
ha 6 cifre decimali corrette.
x
x
− 6
0
.
4 10
− 3
=
= ≅
0 2 ⋅ 10
.
R
− 2
x 0
.
20284 10
=
3 ⇒
x
ha almeno 3 cifre significative corrette
(in realtà sono 4)

Le cifre corrette in x non sono necessariamente identiche alle cifre di corrispondente posto in x, come si può osservare nell’esempio 12.

Esempio 12

x = 36 000 . x = 35 999 . 1 − 2 − 2
x
=
36 000
.
x
=
35 999
.
1
2
2
E
x
− x
= 0 001
.
=
0 1 10
.
<
⋅ 10
A =
2
k
= 2
x
ha 2 cifre decimali corrette.
x −
x
− 2
0
. 1
⋅ 10
1
4
E
= ≅
0 3 10
.
<
⋅ 10
R =
x
36 000
.
2

4

x ha almeno 4 cifre significative corrette (in effetti sono proprio 4).

Esempio 13

x = 15 2000 . x = 15 1997 . 1 − 3 − 3
x
=
15 2000
.
x
=
15 1997
.
1
3
3
E
=
x
− x
=
0 3 10
.
<
⋅ 10
A
2
x ha 3 cifre decimali corrette.
x −
x
− 3
0 3 10
.
1
4
E
= ≅ 0 . 2 ⋅ 10
<
R =
x
15 2000
.
2

10

4

x ha almeno 4 cifre significative corrette (in realtà sono 5).

12

M. Garetto – Metodi Numerici

Esempio 14

2 x = 99 2000 . = 0 992000 10 . ⋅ x = 99
2
x
=
99 2000
.
=
0 992000 10
.
x
=
99 1997
.
1
3
3
E
=
x
− x
=
0 3 10
.
<
⋅ 10
A
2
x ha 3 cifre decimali corrette.
x
x
− 3
0 3 10
.
1
5
5
E
= ≅
0 3 10
.
<
⋅ 10
R =
x
99 2000
.
2

=

0 991997 10

.

2

x ha almeno 5 cifre significative corrette (in effetti sono proprio 5).

Quando si usa la rappresentazione floating point normalizzata, le cifre significative corrette del numero coincidono con le cifre decimali corrette della sua mantissa normalizzata.

1.6 Aritmetica floating point

Sull’insieme dei numeri di macchina si devono ridefinire le operazioni aritmetiche: si deve cioè introdurre una aritmetica di macchina (aritmetica floating point). Infatti il risultato di un’operazione aritmetica anche nel caso in cui gli operandi siano numeri di macchina, può non essere un numero di macchina per due motivi diversi:

1 si ha una situazione di underflow o di overflow (esempio 15, casi a e b);

2 il risultato ha un numero di cifre nella mantissa superiore a t (esempio 15, caso c).

Esempio 15

 

(10,4,3,3)

a

x = 0.9876 10

3 y = 0.454310

3

x + y = 0.1442 10

0 4387 10

0 6200 10

.

4

overflow: M = 3 è il massimo esponente

y = −

0 4325 10

.

2

m = 3 è il minimo esponente

2

b x =

c x =

0

.

.

0

2

x + y =

1123 10

x + y = 0.11342310

4 underflow:

y =

0 1123 10

.

0 x e y sono numeri di macchina, la somma non lo è.

Poiché in generale non è possibile realizzare esattamente le operazioni aritmetiche, occorre definire delle operazioni di macchina. In ogni operazione di macchina a due numeri di macchina è associato un terzo numero di macchina, ottenuto eseguendo l’operazione aritmetica sui due numeri di macchina e poi arrotondando (o troncando) il risultato esatto ottenuto. Indicando con fl(x) e fl(y) le rappresentazioni floating point dei numeri reali x e y, e con i simboli , , le operazioni di macchina di addizione, moltiplicazione e divisione, si ha ad esempio

x

y = fl(fl(x) + fl(y))

x

y = fl(fl(x) × fl(y))

x

y = fl(fl(x) / fl(y))

Esempio 16

Riferendoci al caso c dell’esempio precedente, i numeri

x =

0

.

1123 10

0

sono numeri di macchina e si ha

y =

0 1123 10

.

2

x y = fl(fl(x) + fl(y)) = fl(x+ y) =

0.1134 10

0

Capitolo 1 – Nozioni introduttive

13

Nell’aritmetica floating point valgono solo alcune delle proprietà delle operazioni elementari. Per l’aritmetica di macchina in generale non valgono le seguenti proprietà, valide invece nell’aritmetica esatta.

Proprietà 1 - Associativa dell’addizione (x ⊕ y) ⊕ z ≠ x ⊕ ( y
Proprietà 1 - Associativa dell’addizione
(x ⊕ y) ⊕ z ≠ x ⊕ ( y ⊕ z )
Proprietà 2 - Associativa della moltiplicazione
(x ⊗ y) ⊗ z ≠ x ⊗ ( y ⊗ z )

Esempio 17

Esempio 18

(10,2,5,5)

x = 0.11 10 0

(

x

y

⊕ =

z

)

( 0

= 0

.

11 10

. 12 10

0

0

x

y

(

)

⊕ =

z

0 . 11 10

0

= 0

. 11 10

0

y

=

0.13 10 -1

z

0 . 13 10

10

( 0 . 13 10

10

1

1

1

1

0 . 14

0 . 27

)

=

=

0 . 14 10

10

0 . 14 10

0 . 13

0

1

0 . 14 10

0

1

)

= 0.14 10 -1

=

=

arrotondamento!

(10,2, 5,5)

x = 0.11 10 1

(

x

y

)

z

⊗ =

=

( 0

0

.

.

y

=

1

0.31 10 1

0 31 10

11 10

34 10

1

.

1

0 25 10

.

1

x

(

y

z

)

⊗ =

0 11 10

.

1

(

0 31 10

.

1

= 0

.

11 10

1

0 78 10

.

1

)

=

z

= 0.25 10 1

0 25 10

.

1

=

0 85

.

10

1

=

0 25 10

0 86

1

.

.

10

1

)

=

Proprietà 3 - Distributiva del prodotto rispetto all’addizione

x ( y z ) (x y) (x z )

Esempio 19

(10,2, 5,5)

x

= 0.11 10 1

y

=

0.23 10 1

z

= 0.24 10 1

)

(

x

=

z

0

.

(

)

⊕ =

z

=

0 11 10

.

0

.

11 10

)(

=

25 10

1

1

(

0 23 10

10

0 47

0 26 10

1

1

1

1

)

=

x y

(

.

.

1

=

0 24 10

0 52 10

.

.

x

y

1

)(

0 51 10

⊕ ⊗

0 11 10

.

1

.

0 23 10

.

1

=

.

0 11 10

.

1

1

0 24 10

.

1

)

=

Proprietà 4 - Legge di cancellazione

 
 

x y = z y ,

y 0

non implica

x = z

Esempio 20

(10,2, 5,5)

x = 0.51 10 1

y

=

0.22 10 1

z

= 0.52 10 1

14

M. Garetto – Metodi Numerici

1 x ⊗ = y 0 . 51 10 ⋅ 1 0 22 10 ⊗
1
x
⊗ =
y
0
.
51 10
1 0 22 10
.
=
0 11 10
.
1
z
⊗ =
y
0
.
52 10
1 0 22
.
10
=
0 11 10
.

2

2

 

ma

x

z

!

Proprietà 5 - Semplificazione

x ( y x ) y

Esempio 21

(10,2, 5,5)

x = 0.70 10 1

y

=

0.80 10 1

x (y x) = 0.70 10 1 (0.80 10 1 0.70 10 1 ) =

10 1 0.11 10 1 = 0.77 10 1 y

= 0.70

Possiamo pertanto concludere che espressioni che sono equivalenti in aritmetica esatta non risultano generalmente tali nell’aritmetica di macchina. Malgrado ciò, due espressioni (non nulle) saranno definite “equivalenti” dal punto di vista del calcolo numerico quando, calcolate con un computer, forniscono risultati che differiscono per una tolleranza relativa dell’ordine della precisione di macchina.

In un elaboratore che usa l’aritmetica floating point ci sono infiniti numeri reali x non nulli tali che 1x =1 dove 1x è il valore della somma calcolato dal computer; nell’aritmetica esatta questa relazione è ovviamente falsa per ogni x non nullo! Il più piccolo fra tutti i numeri di macchina x∈ℑ(r,t,m,M) per i quali nell’aritmetica del computer si verifica 1x > 1 è detto epsilon di macchina.

Definizione Si definisce epsilon di macchina la quantità eps = min{x ∈ ℑ(r,t,m,M ): 1x > 1}

L’epsilon di macchina è una costante caratteristica di ogni aritmetica floating point e dipende anche dalla tecnica scelta per le operazioni