Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Calcolo numerico 11 12, Appunti di Calcolo Numerico

appunti per studenti ing inf

Tipologia: Appunti

2018/2019

Caricato il 12/02/2019

Smon
Smon 🇮🇹

4

(1)

5 documenti

1 / 159

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
R. Bevilacqua O. Menchi
APPUNTI DI CALCOLO NUMERICO
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Anteprima parziale del testo

Scarica Calcolo numerico 11 12 e più Appunti in PDF di Calcolo Numerico solo su Docsity!

R. Bevilacqua O. Menchi

APPUNTI DI CALCOLO NUMERICO

Introduzione

Nell’analisi dei problemi del mondo reale la matematica svolge un ruolo determi- nante. In ogni disciplina scientifica e in ogni settore della tecnologia 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: nella progettazione di un velivolo la forma delle ali puo 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, puo essere condotto mediante calco- latore con un adeguato modello matematico, senza dover realizzare anche in forma ridotta, un reale pericoloso esperimento. Il processo di risoluzione di un problema del mondo reale puo essere cosı schema- tizzato: una prima fase (di modellizzazione) in cui al problema reale si associa un modello matematico che ne approssima l’evoluzione; una seconda fase in cui il mo- dello matematico viene analizzato e da questo si ricavano proprieta qualitative della soluzione, come esistenza, unicita, regolarita; 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 calcolatore mediante un adeguato linguaggio di programmazione. Un aspetto importante in questo processoe che nella quasi totalita dei casi la soluzione del problema none esprimibile in forma esplicita, ad esempio mediante funzioni elementari, e comunque le sole proprieta qualitative non sono sufficienti per gli scopi richiesti. Si pensi ad esempio alla traiettoria che deve descrivere una sonda spaziale per raggiungere un certo obiettivo: la funzione che la descrivee la soluzione di un opportuno sistema di equazioni differenziali; in questo caso e necessario conoscere le coordinate della navicella in un insieme stabilito di istanti temporali. Si presenta quindi la necessita di risolvere algoritmicamente il problema mate- matico, cio`e di ottenere, a partire da un insieme finito di numeri (rappresentati con un numero finito di cifre) con un numero finito di operazioni aritmetiche una informazione approssimata, ma adeguata alle richieste, della soluzione. Nella risoluzione di problemi di analisi matematica che generalmente hanno natu- ra continua questo processo algoritmico, necessariamente discreto poich´e finito, si inquadra nel settore noto come analisi numerica.

1

Capitolo 1

Analisi dell’errore

1.1 La generazione degli errori.

Per studiare un “fenomeno”, sia esso naturale quale il moto di un pianeta o sia esso un prodotto umano quale il propagarsi dell’inquinamento atmosferico o la costruzione di un ponte, la matematica fornisce strumenti per realizzare ed analiz- zare dei modelli che descrivono, sia pure in modo approssimato, il fenomeno stesso. Ad esempio, nel modello matematico per la costruzione di un ponte, e richiesto il bilancio delle forze esercitate sui vari elementi del ponte stesso (peso degli elementi, peso degli automezzi in transito, azione del vento, ecc.). Non si tiene pero conto delle forze gravitazionali esercitate sugli elementi del ponte dalla luna o dal sole; tali forze sono realmente esistenti e non nulle, e quindi dovrebbero essere considerate in un modello matematico esatto, ma possono di fatto essere trascurate in un modello che approssima il problema reale con errori contenuti.

Generalmente un modello matematico e un modello continuo (di solito un si- stema di equazioni differenziali) che consente di individuare le proprieta qualitative della soluzione, come esistenza, unicita, regolarita, ecc., ma spesso non permette di determinare analiticamente la soluzione. E perci`` o necessario effettuare un’ulteriore approssimazione sostituendo il modello continuo con un modello discreto (processo di discretizzazione). Questa sequenza di approssimazioni `e illustrata schematicamente nella figura.

In ogni passaggio da un blocco all’altro viene commesso un errore di approssi- mazione. L’errore introdotto nel processo di discretizzazione e detto errore analiti- co. E importante che gli errori commessi siano tutti dello stesso ordine: infatti ha scarsa utilita calcolare molto accuratamente la soluzione del modello discreto, quan- do questo approssima con scarsa precisione il modello continuo o quando il modello continuoe una grossolana descrizione del fenomeno naturale.

3

4 Capitolo 1. Analisi dell’errore

Fenomeno naturale Modello matematico continuo

Modello matematico discreto

Metodo di risoluzione

Soluzione

?

?

?

Gli errori che si producono durante la risoluzione sono principalmente dovuti al fatto che il calcolatore opera su dati numerici rappresentati per mezzo di una sequenza finita di cifre. Cos`ı numeri non razionali, come ad esempio π o

2, o numeri razionali con rappresentazione periodica, come ad esempio 1/3, possono essere rappresentati in un calcolatore solo troncandone lo sviluppo e quindi commettendo un errore. Questo tipo di errore, che si produce gia nell’immissione dei dati, prima ancora di eseguire effettivamente i calcoli, viene detto errore di rappresentazione. La rappresentazione con un numero finito di cifre impone inoltre l’uso di un’arit- metica approssimata (aritmetica finita) che introduce errori anche nell’esecuzione delle operazioni aritmetiche. Gli errori di rappresentazione dei dati e gli errori prodotti dalle singole ope- razioni si propagano nel corso dei calcoli e generano nella soluzione effettivamente calcolata degli errori che vengono chiamati rispettivamente errore inerente e errore algoritmico. Il numero di cifre utilizzate nei calcolatori per rappresentare i dati numerici e per eseguire le operazionie in generale abbastanza grande perch´e gli errori di rappresen- tazione e gli errori prodotti dalle singole operazioni siano piccoli. Si potrebbe quindi pensare che anche l’errore inerente e l’errore algoritmico siano piccoli, per cui non sia necessario valutare l’attendibilita dei risultati ottenuti. Purtroppo questo none sempre vero, perch´e gli errori durante la propagazione possono essere fortemente amplificati. I seguenti esempi mostrano come la propagazione degli errori dovuti alla rappresentazione finita e all’uso di un’aritmetica finita possa alterare i risultati al di l`a di ogni ragionevole previsione. Gli esempi sono stati implementati in Matlab. I risultati calcolati vengono qui rappresentati in notazione esponenziale con 5 cifre significative.

Esempio. Sia p un numero reale non nullo. L’equazione di secondo grado x^2 − qx + 1 = 0, dove q = p + 1/p, ha le soluzioni x 1 = p e x 2 = 1/p, che possono essere calcolate con la formula risolutiva x 1 = q +

q^2 − 4 2

, x 2 = q −

q^2 − 4 2

6 Capitolo 1. Analisi dell’errore

x f˜ 1 f˜ 2 f˜ 3

1 .0000 10^7 5 .0291 10−^1 5 .0000 10−^1 5 .0000 10−^1 2 .0000 10^7 5 .2154 10−^1 5 .0000 10−^1 5 .0000 10−^1 3 .0000 10^7 4 .4703 10−^1 5 .0000 10−^1 5 .0000 10−^1 4 .0000 10^7 5 .9605 10−^1 5 .0000 10−^1 5 .0000 10−^1 5 .0000 10^7 3 .7253 10−^1 5 .0000 10−^1 5 .0000 10−^1 6 .0000 10^7 3 .7253 10−^1 5 .0000 10−^1 5 .0000 10−^1 7 .0000 10^7 0 0 5 .0000 10−^1 8 .0000 10^7 0 0 5 .0000 10−^1 9 .0000 10^7 0 0 5 .0000 10−^1

mentre secondo i valori di f˜ 3 si deduce il valore corretto del limite

xlim→∞ f^ (x) = 0.^5

Esempio. Assegnato un valore di x, per approssimare il valore di ex^ si utilizza lo sviluppo in serie

ex^ = 1 + x +

x^2 2!

x^3 3!

x^4 4!

xn n!

opportunamente troncato. Si osserva che esiste un n per cui, sommando n termini della serie con n ≥ n, le prime cifre non si modificano piu. Ad esempio, per x = − 20e

e−^20 = 1 − 20 +

(−20)n n!

e le prime 5 cifre delle approssimazioni calcolate sommando n termini si stabilizzano sul valore 6.1383 10−^9 per n ≥ 75. Calcolando per confronto il valore di e−^20 con la funzione di libreria exp si ottiene il valore 2.0612 10−^9. Una differenza cosı elevata indica che il valore da noi calcolatoe inattendibile. E per`` o possibile calcolare lo stesso valore sfruttando la proprieta che e−x^ = 1/ex^ per cuie

e−^20 =

e^20

(20)n n!

Operando in questo modo si ottiene in effetti 2.0612 10−^9. 2 Dagli esempi esaminati risulta che gli errori generati dalla rappresentazione con un numero finito di cifre e dall’uso di un’aritmetica finita, possono essere cosı elevati da togliere ogni validita ai risultati ottenuti ed `e quindi molto importante riuscire a

1.2. Problemi mal condizionati. 7

valutarne e controllarne la propagazione. Si e visto anche che, utilizzando un proce- dimento di calcolo opportuno,e possibile contenere tali errori. Esistono quindi, per uno stesso problema, procedimenti di calcolo (algoritmi) che possono generare errori in misura diversa. In questi problemi elementari, dei quali si conosce la soluzione, e stato facile distinguere gli algoritmi numericamente instabili, ossia quelli per cui si presenta una elevata propagazione dell’errore, da quelli numericamente stabili. In generale nei problemi concreti tale distinzione none facile ed e quindi molto impor- tante disporre di tecniche per stabilire a priori se un dato algoritmoe numericamente stabile o instabile.

1.2 Problemi mal condizionati.

Esistono anche problemi tali che, qualunque algoritmo venga utilizzato per risolverli, l’errore generato nel risultato risulta elevato e talvolta tale da rendere privo di signifi- cato il risultato stesso. Questo fenomeno e una particolarita intrinseca del problema e non dipende dagli algoritmi utilizzati. Per questi problemi, detti mal condizionati, piccole variazioni nei dati inducono grosse variazioni nei risultati. Quindi in questo caso gi`a la inevitabile perturbazione dei dati, dovuta alla rappresentazione finita in base, genera errori elevati nei risultati, qualunque sia l’algoritmo utilizzato. Vi sono problemi per i quali esiste la soluzione ed esiste un algoritmo per calcolarla, ma che sono praticamente irrisolubili perch´e fortemente mal condizionati, per cui i soli errori di rappresentazione dei dati generano sul risultato errori superiori al 100%. Si consideri ad esempio il seguente sistema di equazioni lineari {

  1. 01 x + 1. 02 y = 2. 03
  2. 99 x + y = 1. 99

che ha la soluzione x = 1, y = 1. Se ne altera il coefficiente della x nella seconda equazione dell’1%. Il nuovo sistema perturbato

{

  1. 01 x + 1. 02 y = 2. 03 x + y = 1. 99

ha soluzione ˜x = − 0 .02, y˜ = 2.01. La soluzione del sistema perturbato presenta, rispetto alla soluzione del sistema non perturbato, una variazione maggiore del 100% sia nella x che nella y. La natura del mal condizionamento del problema precedente pu`o essere descritta mediante un’interpretazione geometrica. Nella figura 1.1 le due equazioni del sistema corrispondono alle due rette tracciate con linea continua e la loro intersezione ha per componenti la soluzione del sistema. Poich´e le due rette formano tra loro un angolo molto piccolo, perturbando la seconda equazione, si altera di poco la posizione della seconda retta (ottenendo la retta tratteggiata), ma cambia molto la posizione del punto intersezione e quindi le coordinate di quest’ultimo, che sono le soluzioni del sistema perturbato.

1.3. Complessit`a computazionale. 9

che richiede 2n − 1 moltiplicazioni ed n addizioni. Poich´e il polinomio p(x) pu`o anche essere rappresentato nel modo seguente

p(x) = (... ((anx + an− 1 )x + an− 2 )x +... + a 1 )x + a 0 ,

si pu`o ottenere un altro algoritmo per il calcolo di p(x), detto metodo di Ruffini- Horner o della divisione sintetica:

p 0 = an, pi = pi− 1 x + an−i, i = 1, 2 ,... , n, p(x) = pn,

che impiega n moltiplicazioni ed n addizioni, cioe il numero di moltiplicazionie dimezzato rispetto al metodo precedente.

Esempio. Per calcolare la soluzione del sistema lineare

Ax = b,

dove A e una matrice non singolare di ordine n, si puo applicare la regola di Cramer il cui costo, in termini di operazioni moltiplicative, e circa (n + 1)!. Se invece il sistema viene risolto col metodo di sostituzione (metodo di eliminazione di Gauss) che studieremo piu avanti, il numero di moltiplicazioni richieste e circa n^3 /3. Se per semplicita il tempo di esecuzione viene stimato moltiplicando il tempo richiesto da una singola moltiplicazione per il numero di moltiplicazioni, nell’ipotesi che una moltiplicazione venga eseguita in 10−^7 secondi, per la risoluzione di un sistema di n equazioni ed n incognite con i due metodi in esame si avrebbero i seguenti tempi

n metodo di Cramer metodo di sostituzione 10 4 secondi 3 .3 10−^5 secondi 12 10 minuti 5 .8 10−^5 secondi 14 36 ore 9 .1 10−^5 secondi 16 412 giorni 1 .3 10−^4 secondi 18 386 anni 1 .9 10−^4 secondi

Se si utilizza il metodo di Cramer, il problema della risoluzione di un sistema di equazioni lineari non risulta trattabile gia per valori piccoli di n. La possibilita di risolvere sistemi di grosse dimensioni, come quelli che derivano da problemi concreti, non dipende solo dalla disponibilita di calcolatori potenti (an- che con tali calcolatori il metodo di Cramer richiederebbe tempi inaccettabili di elaborazione) ma dall’uso di metodi computazionalmente efficienti. E quindi con lo sviluppo di algoritmi efficienti e la realizzazione del relativo software, oltre che con lo sviluppo del hardware, che e possibile trattare problemi di dimensioni sem- pre piu elevate. Il metodo di Gauss permette di ridurre il costo computazionale

10 Capitolo 1. Analisi dell’errore

della risoluzione del problema da (n + 1)! a circa n^3 /3 moltiplicazioni. E naturalechiedersi se tale metodo sia ottimo, ossia se non esistano algoritmi che richiedano un numero inferiore di moltiplicazioni (l’ottimalita e stata dimostrata relativamente ai metodi che usano solo combinazioni di righe e di colonne). Tale tipo di problema fa parte di una classe piu ampia, oggetto di studio del settore della complessita com- putazionale che ha avuto recentemente consistenti sviluppi. Nel caso della risoluzione di un sistema di n equazioni lineari in n incognite sono stati individuati metodi che richiedono non piu di knθ^ operazioni aritmetiche, dove k e una costante positiva e θ < 3 (il piu piccolo valore noto di θ `e 2. 38.. .).

1.4 Rappresentazione in base di un numero.

L’insieme dei numeri rappresentabili con un calcolatore e finito: con n cifre che possono assumere i valori binari 0 e 1, il massimo numero di configurazioni diverse ottenibilie 2n. Ad esempio, con n = 3 si hanno le otto configurazioni seguenti:

000 , 001 , 010 , 011 , 100 , 101 , 110 , 111.

Un problema fondamentale e quello di associare ad ogni configurazione di cifre bi- narie un numero reale in modo che l’insieme dei numeri rappresentati sia oppor- tunamente distribuito nell’intervallo della retta reale a cui appartengono i numeri da rappresentare e in modo che l’errore che si commette risulti sufficientemente contenuto. Per affrontare tale problemae opportuno fare riferimento al sistema di rappre- sentazione in base dei numeri reali. Sia β ≥ 2 il numero intero che si assume come base della rappresentazione. Vale il seguente teorema.

Teorema di rappresentazione in base. Sia x un numero reale non nullo; allora esistono e sono unici il numero intero p e la successione {di}i=1, 2 ,... di numeri interi, 0 ≤ di < β, d 1 6 = 0, non definitivamente uguali a β − 1 , tali che

x = sgn(x)βp

∑^ ∞

i=

diβ−i, (1.6)

dove sgn(x) = 1 se x > 0 , sgn(x) = − 1 se x < 0. 2

La (1.6) viene detta rappresentazione in base del numero x. Le quantit`a che compaiono nella (1.6) vengono dette

p esponente, di cif re della rappresentazione, ∑^ ∞ i=

diβ−i^ mantissa.

Se esiste un indice k tale che dk 6 = 0 e di = 0 per i > k, la rappresentazione in base β si dice finita di lunghezza k.

12 Capitolo 1. Analisi dell’errore

x

d 6

d 5

d 4

d 3

d 2

d 1

La successione dei resti fornisce le cifre della rappresentazione in base 2 di x a partire da quella pi`u a destra. Quindi

x = 101001 2 = (0.101001) 2 26.

Il procedimento di conversione viene eseguito dal seguente algoritmo scritto in Mat- lab.

i=0; while x> i=i+1; c(i)=rem(x,beta); x=floor(x/beta); end; p=i; d=c(p:-1:1);

La funzione predefinita rem da il resto della divisione fra interi; la funzione floor da la parte intera inferiore di un numero reale e quindi, nel nostro caso, il quoziente intero della divisione. Applicando l’algoritmo alla conversione del numero x = 79 in base 2 si ottiene p = 7 e d = [ 1 0 0 1 1 1 1 ]. Si noti che la rappresentazione di un numero intero `e finita qualunque sia la base.

(b) Esaminiamo poi il caso che 0 < x < 1. Come prima cosa dobbiamo determinare l’esponente p, che `e minore o uguale a 0. Si considera la successione

y 1 = β x, y 2 = β^2 x,... , yj = βj^ x,

arrestandosi al primo indice j per cui yj ≥ 1. E`

p = 1 − j e yj = β

∑^ ∞

i=

diβ−i^ = d 1 + yj+1, dove yj+1 =

∑^ ∞

i=

diβ−(i−1).

1.5. Conversione di base. 13

Poich´e yj+1 < 1, d 1 risulta essere la parte intera di yj. Si e cosı trovata la prima cifra della rappresentazione in base β di x. Si riapplica il ragionamento a yj+1, ottenendo

βyj+1 = d 2 + yj+2, dove yj+2 =

∑^ ∞

i=

diβ−(i−2),

e cos`ı via. Per esempio, si converte in base 2 il numero x = 0.4 (scritto nella base 10). 2 × 0. 4 = 0. 8

?

6 ?? 2 × 0. 8 = 1. 6 d 1 = 1

?

6 ?? 2 × 0. 6 = 1. 2 d 2 = 1

?

6 ?? 2 × 0. 2 = 0. 4 d 3 = 0

?

6 ?? 2 × 0. 4 = 0. 8 d 4 = 0

e cosı via. E y 2 = 1.6, quindi p = −1. Le successive moltiplicazioni per 2 for- niscono le cifre d 1 d 2 d 3 d 4. Poich´e risulta y 1 = y 5 = 0.8, le cifre successive si ripetono periodicamente: x = (0. 110011001100.. .) 2 2 −^1.

Quindi il numero 0.4 che in base 10 ha una rappresentazione finita, in base 2 ha una rappresentazione periodica. Il seguente algoritmo determina le prime k cifre in base β di x, con 0 < x < 1.

% determinazione dell’esponente p=1; while floor(x)== x=betax; p=p-1; end; % determinazione delle cifre i=0; while i<k i=i+1; d(i)=floor(x); x=beta(x-d(i)); end

1.6. Numeri di macchina. 15

Il minimo numero positivo di F(β,t,m,M ) `e

ω = 0. 1 β−m^ = β−m−^1 ,

il massimo `e

Ω = βM^ (β − 1)

∑^ t

i=

β−i^ = βM^ (1 − β−t).

Poich´e con t cifre in base β si possono formare βt^ numeri diversi, e fra questi vanno esclusi quelli la cui prima cifra `e nulla, l’insieme F(β,t,m,M ), oltre allo zero, contiene (m + M + 1)(βt^ − βt−^1 ) numeri positivi compresi fra ω e Ω e altrettanti numeri negativi compresi fra −Ω e −ω. Ad esempio, nella figura 1.2 sono riportati i numeri di F(2, 3 , 1 ,1). I numeri positivi sono compresi fra 14 e 74 , quelli negativi fra − 74 e − 14.

− 74 −^1 − 14 0

Figura 1.2: I numeri di F(2, 3 , 1 ,1).

Per quanto riguarda l’effettiva rappresentazione dei numeri di macchina su calco- latore, nel corso degli anni si sono succeduti diversi sistemi, sviluppati dalle diverse ditte costruttrici. Sono state usate varie basi, sia la base 10 che la base 2 e varie potenze di 2, e molte diverse precisioni. Questa completa anarchia, la cui conseguen- za pi`u immediata era la totale incertezza su come uno stesso programma si sarebbe comportato su macchine diverse, ha avuto termine con la creazione dello standard IEEE per la rappresentazione dei numeri floating point (vedere par. 1.14).

Se il numero reale non nullo x = ± 0 .d 1 d 2... βp^ e tale che −m ≤ p ≤ M , d 1 6 = 0 e di = 0, per i > t, allora x ∈ F(β,t,m,M ). Se x non appartiene a F(β,t,m,M ), si pone il problema di associare, in modo adeguato, ad x un numero di macchina x˜, cioe di approssimare x o, come si usa dire, di rappresentare x con ˜x. Nel seguito si suppone per semplicit`a che x > 0 (risultati analoghi si ottengono per x < 0), e che la base β sia un numero pari. Si possono presentare i seguenti casi:

a) L’esponente p non appartiene all’intervallo [−m, M ]. Se p < −m, si verifica la situazione di underflow, se p > M , si verifica la situazione di overflow. Il comporta- mento del sistema di calcolo puo variare: vi puo essere o meno una segnalazione, il calcolo puo essere interrotto o puo continuare con l’assegnazione di valori predefiniti (per esempio ω e Ω).

b) L’esponente p appartiene all’intervallo [−m, M ] ma x non appartiene a F(β,t,m,M ) perch´e le sue cifre di, i > t, non sono tutte nulle. In questo caso x viene rappresentato

16 Capitolo 1. Analisi dell’errore

con uno dei due seguenti numeri di macchina:

trn(x) = βp

∑t

i=

diβ−i,

ottenuto per troncamento di x alla t-esima cifra, e

arr(x) = βp^ trn

( (^) ∑t+

i=

diβ−i^ +

β−t

ottenuto per arrotondamento di x alla t-esima cifra. Quindi `e

arr(x) =

trn(x) se dt+1 < β/ 2 , trn(x) + βp−t^ se dt+1 ≥ β/ 2.

Da notare che nell’effettuare l’arrotondamento di un numero si pu`o verificare over- flow. Infatti, se

x = 0.d 1 d 2... dt+1... βM^ , con di = β − 1 , i = 1, 2 ,... , t e dt+1 ≥

β 2

risulta arr(x) = 0. 10... 0 βM^ +1^ e questo numero non appartiene a F(β,t,m,M ).

1.7 Errori di rappresentazione.

Per valutare l’errore commesso nel rappresentare un numero reale x > 0 con un numero di macchina ˜x, si considerano le seguenti quantit`a

x ˜ − x errore assoluto,

≤x =

˜x − x x errore relativo.

≤x viene detto errore di rappresentazione di x. L’insieme dei numeri di macchina gode dell’importante propriet`a di fornire ap- prossimazioni con errore relativo uniformemente limitato da una costante. Valgono infatti i seguenti teoremi.

Teorema. Se non si verificano situazioni di underflow o di overflow risulta

|trn(x) − x| < βp−t, (1.7)

|arr(x) − x| ≤

βp−t, (1.8)

dove il segno di uguaglianza vale se e solo se dt+1 = β/ 2 e dt+i = 0 per i ≥ 2.

18 Capitolo 1. Analisi dell’errore

Se nella (1.8) vale il segno di uguaglianza, cio`e dt+1 =

β 2 e dt+i = 0 per i ≥ 2, si ha

x ≥ βp(d 1 β−^1 + dt+1β−t−^1 ) > βp−^1 ,

e quindi ∣∣ ∣∣^ arr(x)^ −^ x x

∣∣ =^1

βp−t x

β−t+1. 2

La rappresentazione con arrotondamento e in generale piu accurata. Per questo, anche se richiede un costo maggiore, essa viene di solito utilizzata nella conversione dei dati in ingresso-uscita, normalmente realizzata al livello del software. Dalla (1.9) segue che la rappresentazione ˜x di x per troncamento o per arroton- damento verifica x ˜ = x(1 + ≤x), con |≤x| < u. (1.10)

Si puo vedere che la precisione di macchinae il minimo numero di macchina che aggiunto a 1 da un risultato la cui rappresentazionee maggiore di 1.

1.8 Operazioni di macchina.

La somma di due numeri di macchina x, y ∈ F(β,t,m,M ) e un numero che puo non appartenere all’insieme F(β,t,m,M ). Ad esempio se β = 10 e t = 2, la somma dei due numeri x = 0.11 10^0 , y = 0.11 10−^2 , e x + y = 0.1111 10^0 che non appartiene ad F(10, 2 ,m,M ). Questo puo accadere anche con le altre operazioni aritmetiche. Si presenta dunque il problema di approssimare, nel modo piu conveniente pos- sibile, il risultato di un’operazione aritmetica fra due numeri di macchina con un numero di macchina. Occorre percio individuare le “operazioni aritmetiche” su F(β,t,m,M ), ossia definire un’aritmetica di macchina, detta anche aritmetica ap- prossimata o aritmetica finita, che meglio approssimi l’aritmetica esatta dei numeri reali. Indicando con ©◦ l’operazione di macchina che approssima l’operazione esatta ◦, per tutti i numeri di macchina x e y per cui l’operazione non dia luogo a situazioni di underflow o di overflow, deve valere una relazione analoga alla (1.10):

x ©◦ y = (x ◦ y)(1 + ≤), |≤| < u, (1.11)

dove u e la precisione di macchina. Le operazioni di macchina che soddisfano la (1.11) sono dette operazioni in virgo- la mobile e l’aritmetica associatae detta aritmetica in virgola mobile, l’errore relativo ≤ commesso `e detto errore locale dell’operazione. Le operazioni:

x ©◦ y = trn(x ◦ y) e x ©◦ y = arr(x ◦ y)

1.8. Operazioni di macchina. 19

sono operazioni di macchina che soddisfano la limitazione (1.11). L’aritmetica di macchina con l’arrotondamento approssima l’aritmetica dei nu- meri reali meglio dell’aritmetica di macchina con il troncamento, ma la sua imple- mentazione richiede l’uso di registri pi`u lunghi e un maggior tempo di macchina per l’esecuzione delle operazioni. Ad esempio, gli algoritmi che realizzano l’addizione e la moltiplicazione di macchina con arrotondamento del risultato richiedono un registro di lunghezza t + 2, mentre basta un registro di lunghezza t + 1 per calcolare una somma o un prodotto che soddisfano la (1.11) con la precisione del troncamento.

Non tutte le proprieta algebriche delle operazioni nel campo reale sono soddi- sfatte dalle operazioni di macchina. Ad esempio non valgono le seguenti proprieta:

a) associativit`a dell’addizione: (x + y) + z = x + (y + z);

b) associativit`a della moltiplicazione: (xy)z = x(yz);

c) legge di cancellazione: se xy = yz, y 6 = 0 allora x = z;

d) distributivit`a: x(y + z) = xy + xz;

e) semplificazione: x(y/x) = y;

come dimostrano i seguenti esempi in F(10, 2 ,m,M ) e aritmetica con arrotondamento:

a) posto x = 0.11 10^0 , y = 0.13 10−^1 , z = 0.14 10−^1 , risulta

(x ⊕ y) ⊕ z = 0.12 10^0 ⊕ z = 0.13 10^0 , x ⊕ (y ⊕ z) = x ⊕ 0 .27 10−^1 = 0.14 10^0 ;

b) posto x = 0.11 10^1 , y = 0.31 10^1 , z = 0.25 10^1 , risulta

(x ⊗ y) ⊗ z = 0.34 10^1 ⊗ z = 0.85 10^1 , x ⊗ (y ⊗ z) = x ⊗ 0 .78 10^1 = 0.86 10^1 ;

c) posto x = 0.51 10^1 , y = 0.22 10^1 , z = 0.52 10^1 , risulta

x ⊗ y = 0.11 10^2 , z ⊗ y = 0.11 10^2 ,

e quindi x ⊗ y = z ⊗ y, y 6 = 0, x 6 = z;

d) posto x = 0.11 10^1 , y = 0.23 10^1 , z = 0.24 10^1 , risulta

(x ⊗ y) ⊕ (x ⊗ z) = 0.25 10^1 ⊕ 0 .26 10^1 = 0.51 10^1 , x ⊗ (y ⊕ z) = x ⊗ 0 .47 10^1 = 0.52 10^1 ;

e) posto x = 0.70 10^1 , y = 0.80 10^1 , si ha

x ⊗ (y Æ x) = x ⊗ 0 .11 10^1 = 0.77 10^1 6 = y.