I numeri reali e la loro rappresentazione 1 Alcune figure di questi appunti riportano nei commenti esempi in linguaggio MATLAB. In tali esempi i caratteri di peso normale sono prodotti dal computer mentre i caratteri in grassetto sono battuti dall operatore. I caratteri >> sono il prompt del sistema, ossia indicano che MATLAB è in attesa di istruzioni. Ad esempio la sequenza seguente: >> whos significa che MATLAB attendeva ordini e che l operatore ha battuto il comando whos. MATLAB (MATrix LABoratory) è un sistema interattivo basato sul calcolo matriciale per uso scientifico e tecnico. Oltre al trattamento di matrici è in grado di trattare polinomiali, equazioni differenziali e altre applicazioni. Funzionalità aggiuntive sono rese possibili mediante l installazione di toolbox addizionali. La Homepage di MATLAB è http://www.mathworks.com/ Un sistema simile a MATLAB, di tipo Open Source (ossia gratuito), è Scilab (http://www.scilab.org/). La sintassi di Scilab è molto simile a quella di MATLAB. In particolare, negli esempi che seguono i comandi da dare sono identici, tranne dove esplicitamente dichiarato. L output di Scilab è leggermente diverso. Il prompt di Sscilab è -->.
Classi di numeri (irrazionali) 2 NUMERO FINITO DI RELATIVI infiniti razionali infiniti irrazionali 2 Ogni classe esterna (più ampia) include le classi interne: ad esempio i numeri relativi comprendono anche i numeri naturali. In ogni classe più esterna sono possibili le operazioni delle classi interne, più altre: nella classe dei razionali è sempre possibile la divisione (eccetto che con denominatore nullo), che con i relativi non è sempre possibile. Le classi di numeri vengono comunemente identificate con i simboli seguenti: Naturali: N Relativi: Q Razionali: Z Reali: R Paaina 2
Interi (positivi): 10 simboli Notazione posizionale cifra più significativa cifra meno significativa + + + + + + b = 2,3, a i = 0,,b-1 3 Il numero è la combinazione lineare di tanti numeri di una cifra, ognuno moltiplicato per un peso che è una potenza della base. Posizionale : il peso di una cifra dipende dalla posizione in cui si trova la cifra. Le cifre più a sinistra sono più significative (hanno un peso maggiore). Gli interi negativi hanno la stessa rappresentazione, con l aggiunta del simbolo -. Paaina 3
Numeri interi: rappresentazione in basi diverse!"!"!" Una cifra esadecimale equivale a quattro cifre binarie (bit). # $ 10 =#$ 2 =#$ 16 4 Nelle rappresentazioni in basi diverse da 10 si usano: per i primi numeri (zero, uno, ) le stesse cifre usate per la rappresentazione decimale; se la base è >10 si aggiungono, in coda al 9, le prime lettere dell alfabeto latino (A, B, ). Per capire che una sequenza di cifre rappresenta un numero in una base b si usa la notazione (cifre ) b, dove il numero b è sempre scritto in base 10. Se la base non è indicata si sottintende b=10. La rappresentazione binaria (base 2) è quella usata intrinsecamente nei computer. Le cifre binarie (che sono solo lo 0 e 1) dono chiamate BIT (Binary unit). Una cifra esadecimale corrisponde a quattro bit. Quindi rappresentazione in base 2 e in base 16 sono equivalenti purché si usi un numero di bit multiplo di 4. La notazione in base 16 è pertanto una comune rappresentazione, utilizzante 16 simboli, dei numeri in un computer. In effetti in un computer l informazione è comunemente organizzata in byte (o ottetti). Un byte è una sequenza di 8 cifre binarie, per cui un byte corrisponde a due cifre esadecimali il cui valore va da (00) 16 a (FF) 16 (ossia da 0 a 255). In MATLAB il comando dec2hex(n) converte un numero intero positivo da base 10 a base 16. Esempio: >> dec2hex(17) ans = 11 Paaina 4
Rappresentazione posizionale dei numeri razionali = + π cifra più significativa % + + + = + + + + % =% Non tutti i numeri razionali sono rappresentabili con un numero finito di cifre. = % cifra meno significativa I numeri irrazionali: Non sono rappresentabili con un numero finito di cifre. Non hanno periodo. periodo 5 Nella rappresentazione di un razionale è essenziale il simbolo di separazione fra le parte intera (a sinistra) e la parte frazionaria (a destra). Tale simbolo è spesso il carattere. (punto), tuttavia alcuni software possono richiedere il carattere, (virgola), ad esempio Excel in edizione italiana e se opportunamente configurato. MATLAB accetta solo il punto. Paaina 5
Numeri razionali: rappresentazione in basi diverse!"!" % % % %!" % =% Un numero può essere finito in una base e periodico in un altra. 6 Paaina 6
Notazione esponenziale Notazione esponenziale = % = % = % = % CIFRE SIGNIFICATIVE Esponenziale normalizzata = % =0 0 MANTISSA ESPONENTE!" " b = 2,3, a i = 0,,b-1 a 1 0 7 Paaina 7
Numero di macchina È un numero reale rappresentato da N cifre (N prefissato). Esempio: N = 4 (b = 10) a i = 0,,9 $ $ %&'(! ) # " * %&" +! ) = 0,01 " ' = 99,99 -. " = 0,1 10-4 = 0,0001, $$ Esponente - 4 " ' = 0,999 10 5 = 99900 8 Paaina 8
L insieme dei Numeri di macchina I numeri di macchina, comunemente rappresentati in virgola mobile, costituiscono un insieme limitato e finito di razionali. UNDERFLOW!, Errore di arrotondamento, OVERFLOW!, 0 "!- " " 0,1 &"%,) " 2 0,1 &"%,), &"%,)!- " '/ Con i numeri di macchina gli errori di rappresentazione sono inevitabili! 9 Paaina 9
Precisione: zero macchina e epsilon macchina Quante più cifre si dedicano all esponente tanto più aumenta il campo di variazione dei numeri di macchina. Quante più cifre si dedicano alla mantissa tanto più aumenta la precisione. In particolare: 1. Diminuisce lo zero macchina ( reale minimo ): minimo numero positivo rappresentabile; 2. Diminuisce l epsilon macchina ( precisione di macchina ): minimo numero positivo che sommato a 1 fornisce un risultato diverso da 1: 1 + ε M > 1 1 + ε M = 1 2 10 Paaina 10
Numeri di macchina: lo standard IEEE 754 32 bit S(egno) 8 bit,/ 23 bit $$ $ $ S(egno) 11 bit 64 bit 52 bit,/ $$ # $ % * '-") 11 Lo Standard 754, emesso da IEEE (Institute of Electrical and Electronics Engineers) è equivalente allo standard internazionale ISO/IEC 60559, Binary floating-point arithmetic for microprocessor systems. Prevede diversi formati, di cui quello doppia precisione è il più usato, ad esempio da software come MATLAB/Scilab ed Excel. Nel formato doppia precisione il 1 bit (il più significativo) vale 0 se il numero è positivo, 1 se negativo. Gli 11 bit successivi contengono l esponente EXP. Dei 2048 valori possibili (fra 0 e 2047) di questi 11 bit i valori da 1 a 2046 sono utilizzati per rappresentare EXP-1023. I valori 0 e 2047 servono a rappresentare situazioni speciali quali +INF (Infinito positivo, risultato ad esempio di un overflow), -INF (Infinito negativo), NaN (Not a Number, risultato ad esempio di una divisione 0/0). Paaina 11
Numeri di macchina, MATLAB e Excel (alcuni comandi MATLAB per evidenziare effetti liminali dei numeri di macchina). realmin (determina il minimo intero positivo rappresentabile) realmax (determina il massimo intero) eps (determina epsilon macchina) format long e (output con 15 cifre decimali purché non tutte =0) format hex (output evidenziato come 8 cifre esadecimali) format (torna a default) (con EXCEL è possibile costruire epsilon macchina). 12 === Scilab ====================== Il comando realmin è sostituito da number_properties("tiny") Il comando realmax è sostituito da number_properties( huge") La variabile eps si chiama %eps Il comando format ha una sintassi differente, ad esempio: certi limiti) -->format( v,12) (usa 12 simboli al massimo, formato esponenziale oltre -->format( e,12) (usa 12 simboli, formato esponenziale sempre) (non esiste l equivalente di format hex ). Per maggiori dettagli vedere l help di sistema. Paaina 12
Propagazione degli errori 13
Propagazione degli errori nelle operazioni elementari Volendo effettuare operazioni fra numeri reali, si opera in realtà sui loro rappresentanti di macchina. Ciò ha per conseguenza che gli errori di arrotondamento dei numeri su cui si opera producono errori di arrotondamento sul risultato dell operazione. Relazione fra un numero reale x e il suo rappresentante di macchina fl(x): x fl( x ) ε x = fl( x ) = x( 1 ε x ) x ε x < ε M 14 Paaina 14
Esempio: errore di moltiplicazione fl(xy) fl(x) fl(y) ε xy = '3 1 &"%')&"%3) '3 ε xy = '3 1 '%4 ε x )3%4 ε y ) '3 = ε x 5ε y 4 ε x ε y ε x 5ε y Nel prodotto l errore relativo non viene amplificato. 15 Paaina 15
Errore nella somma: cancellazione numerica fl(x+y) fl(x)+fl(y) ε x+y = '531 %'%4ε x )53%4ε y )) '53 ε x+y = 'ε x 53ε y '53 Nella somma l errore relativo può essere notevolmente amplificato. Ciò accade se x+y x 0 16 Paaina 16
Cancellazione numerica con MATLAB a=2; b=eps; c=a + 2*b; d=a +b +b; (nell algebra comune risulta d=c!) (si verifica che c>d) a=2^28; b=2^(-26); si verifica che: a+b a b < 0 (a+b) (a+b) = 0 (a b) (a b) = 0 a b a+b > 0 17 Per verificare che c>d (1 esempio) basta battere: >> c-d Si ottiene un numero positivo (maggiore di realmin). Con Scilab ricordarsi di usare %eps al posto di eps. Paaina 17
Instabilità di un algoritmo Algoritmo: Sequenza organizzata di operazioni su alcuni dati, per ottenere un risultato. Es: algoritmo per effettuare la divisione fra due numeri. Instabilità: Fenomeno per cui un algoritmo amplifica gli errori sui dati. Esistono alcuni algoritmi instabili, che per loro natura amplificano gli errori. 18 Paaina 18
Esempio di algoritmo instabile Successione per approssimare π: z 2 = 2; z n+1 = 2 n-1/2 1 2 1 4 n z 1 n n = 2,3, La successione z 2, z 3, z 4,... converge a π. L errore diminuisce nelle prime 16 iterazioni, poi aumenta nuovamente. 19 Un programma MATLAB per verificare le prime 21 iterazioni può essere il seguente: >>z(2)=2; >>for n=2:20;z(n+1)=2^(n-1/2)*sqrt(1-sqrt(1-4^(1-n)*z(n)^2));end >>format long e;errore=z-pi (viene visualizzato un vettore errore di 21 valori che contiene gli errori alle varie iterazioni). === Scilab ====================== lo stesso programma in Scilab: --> z(2)=2; --> for n=2:20;z(n+1)=2^(n-1/2)*sqrt(1-sqrt(1-4^(1-n)*z(n)^2));end --> format('e',12);errore=z-%pi Paaina 19
Sensitività (condizionamento) di un problema Esistono problemi per loro natura sensibili a variazioni dei dati. Esempio, risolvere l equazione: (x-2) 2 = 10-6 Soluzione: x = 2 ±10-3 alteriamo il secondo membro: (x-2) 2 = 4 10-6 Soluzione: x = 2 ± 2 10-3 20 Paaina 20
Conclusioni 1. Nelle computazioni gli errori sono sempre presenti (finitezza della rappresentazione su elaboratore) 2. Utilizzare algoritmi stabili per evitare di propagare gli errori 3. Esistono problemi sensibili alle variazioni sui dati (problemi mal condizionati) che vanno trattati con particolare attenzione. 21 Paaina 21