




























































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
appunti sulle lezioni di calcolo numerico
Tipologia: Schemi e mappe concettuali
1 / 130
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





























































































Figura 1.2: Organizzazione sequenziale del ciclo di una CPU (sinistra) e della memoria di un computer (destra) .
Nei computer moderni il clock lavora a diversi GHz, per cui i tre passi vengono ripetuti diversi milioni di volte al secondo (1 GHz = 1 × 106 cicli/secondo), ogni volta per`o con dati e istruzioni che possono essere diversi.
1.1.2 La memoria
La memoria serve, come dice la parola, per memorizzare e rendere disponibile in qualsiasi istante dati e istruzioni^1. Essa puo essere pensata come un insieme di celle di dimensione costante che servono per memorizzare un singolo dato o istruzione. Ogni cellae indirizzabile, cioee individuata univocamente e il suo contenuto puo essere preso fetched e usato nella CPU oppure puo essere variato per immagazzinare un nuovo dato. La rappresentazione in Figura 1.2 a destra puo essere usata per immaginare come la memoria possa essere organizzata logicamente, anche se la realta elettronica e diversa. L’unita di misura dell’informazione e il cosidetto bit, chee definito come la piu piccola parte di informazione che viene usato per formare il dato. Un bit puo essere pensato
(^1) Il primo computer moderno viene generalmente identificato dal fatto che appunto sia i dati
che il programma erano memorizzati internamente. Tale idea, originale di John von Neumann [7] scaturite dalle idee teoriche di Alan Turing [6] sono alla base dell’architettura di calcolatori attuali, chiamata architettura di von Neumann.
come una cifra binaria, il cui utilizzo concreto sara visto piu avanti, che puo assumere i valori binari zero o uno (0,1). Per questioni tecnologiche, i bit si raggruppano a 8 a 8 formando cosı il byte ( = 8 bit). Le unita di misura successive cercano di seguire lo standard del Sistema Internazionale sostituendo pero il fattore 1000 con 1024, cioe la potenza di 2 piu vicina a 1000. In questo modo 1 kB (1 kilobyte) = 1024 byte, 1 MB (1 megabyte) = 1024 kB, 1 GB (1 gigabyte) = 1024 MB, 1 TB (1 Terabyte) = 1024 GB, eccetera. Bisogna stare attenti perche per questioni commerciali alcune unita di misura sono in bit e non in bytes. Ad esempio, la velocita di trasmissione dei dati attraverso una rete si misura in Mbit = 1/8 MBytes! Bisogna quindi utilizzare le parole “bit” e “bytes” per evitare ambiguita.
Allo stesso modo, in alcuni settori (ad esempio costruttori di hard-disk) usano i prefissi “kilo”, “mega”, etc, come multipli di 1000 e non di 1024. Questo `e il motivo per cui un disco fisso da 100 GB
Una cella di memoria e anche chiamata un word, o parola, ede formata, nei computer moderni, da 64 bit, numerati da destra a sinistra da 0 a 63. Computer meno recenti hanno word a 32 bit, ma nella realta si tende a dimenticare che ci sono moltissimi computer di tipo diverso in circolazione. Basti pensare ai telefoni cellulari, che altro non sono che dei computer con processori relativamente potenti che possono avere word anche a 32 o addiritura 16 bit. Per non parlare poi di applicazioni specializzate, quali data-loggers, eccetera. Per quello che ci riguarda, pero, noi faremo sempre riferimento a computer che utilizzano word a 64 bit.
Ovviamente, ci manca ora un meccanismo con cui memorizzare le informazioni al- l’interno di ogni singola cella. Tale meccanismo verr`a discusso parzialmente nel paragrafo successivo dedicato alla rappresentazione interna dei numeri.
1.1.3 Unit`a di Input/Output
Ai fini della nostra comprensione dell’architettura di un computer, le unita di In- put/Output non sono altro che le strutture hardware necessarie per interloquire con la macchina, ad esempio lo schermo e la tastiera. Nella realta informatica si intende per I/O anche tutte le apparecchiatura per memorizzare in maniera permanente le informazioni, e qundi i cosidetti dischi fissi, i supporti magnetici, i supporti otti- ci (CDROM e DVDROM), eccetera. Noi pero adottiamo una visione leggermente diversa, piu aderente al dettato di von Neumann, che verra spiegata nel paragrafo successivo a quello della rappresentazione dei numeri all’elaboratora. Pertanto, con- tinuiamo a pensare alle unita I/O come quelle unit`a che ci permettono di colloquiare con il computer.
Invece e piu complicato passare dalla base 10 alla base 2. Vogliamo quindi ricavare una procedura per passare dalla base N alla base M 6 = N , e cio`e
(a)N = anN n^ + an− 1 N n−^1 +... + a 2 N 2 + a 1 N + a 0 +a− 1 N −^1 +... + a−rN −r^ = (a)M = bpM p^ + bp− 1 M p−^1 +... + b 2 M 2 + b 1 M + b 0 +b− 1 M −^1 +... + b−sM −s
Si noti innanzitutto che se (a)N e esprimibile in base N con un numero finito di cifre, none detto che sia cos`ı per lo stesso numero (a)M espresso in base M. Riscriviamo ora (a)N separando la parte intera dalla parte frazionaria 3 :
aint = anN n^ + an− 1 N n−^1 +... + a 2 N 2 + a 1 N + a 0 , (1.2) af raz = a− 1 N −^1 +... + a−rN −r. (1.3)
Concentriamoci dapprima su aint, pensando di lavorare con un’aritmetica in base n. Dividendo aint per il numero M otteniamo:
aint/M = (anN n^ + an− 1 N n−^1 +... + a 2 N 2 + a 1 N + a 0 )/M = an/M N n^ + an− 1 /M N n−^1 +... + a 2 /M N 2 + a 1 /M N + a 0 /M = a′ nN n^ + a′ n− 1 N n−^1 +... + a′ 2 N 2 + a′ 1 N + a′ 0 + (mod (a 0 , M )),
dove mod (a 0 , M ) indica la funzione che restituisce il resto della divisione intera tra a 0 e M , che ovviamente soddisfa alla proprieta 0 ≤ mod (a 0 , M ) < M. E’ quindi chiaro che tale cifrae, una volta trasformata in binario, la cifra b 0 che cer- chiamo. Continuando a dividere per M si ottengono le altre cifre b 1 , b 2 ,... , bp in modo analogo. Si noti che generalmente p 6 = n.
Al contrario, per la parte frazionaria si vede immediatamente che le cifre b− 1 , b− 2 ,... si possono ottenere moltiplicando successivamente per M la parte frazionaria.
Esempio 1.3. Calcolare la rappresentazione in base 2 del numero a = 1234.5. Dividiamo la parte intera dalla parte frazionaria. Per la parte intera costruia-
(^3) Si noti che useremo sempre il “punto decimale” per separare la parte intera da quella frazio-
naria, in accordo con lo standard internazionale. Non useremo invece mai la maldestra abitudine di adattarsi alle convenzioni nazionali.
mo la seguente tabella ottenuta dividendo ogni volta il numero di sinistra per 2: parte intera 1234 : 2 = 617 0 617 : 2 = 308 1 308 : 2 = 154 0 154 : 2 = 77 0 77 : 2 = 38 1 38 : 2 = 19 0 19 : 2 = 9 1 9 : 2 = 4 1 4 : 2 = 2 0 2 : 2 = 1 0 1 : 2 = 0 1
Parte frazionaria
Il numero in base due viene costruito leggendo le cifre binarie (dal basso per la parte intera, e dall’alto per la parte frazionaria) ottenendo:
(a) 2 = 10011010010. 1
Esempio 1.4. trasformiamo il numero a = 0.1 da base 10 a base 2.
......
Il numero (a) 2 e dunque un numero periodico pari a (a) 2 = 0.0001100. Questoe un esempio di un numero che in base 10 (0.1) `e caratterizzato da un numero finito di cifre, mentre in base 2 ha infinite cifre.
Questo capitolo e preso dal manuale della SUN Microsystems intitolato Numerical Computation Guide [5], che costituisce una utile e chiara guida di riferimento per chi volesse approfondire l’argomento. Come abbiamo visto in precedenza, un word puo essere a 32 o 64 bits, con i 32 bit ormai in uso solo per compatibilita retroattiva. Talche `e necessario predisporre
che per n=31 fornisce il valore Imax, 32 = ± 2. 147. 483 .648. E’ quindi impossibile la rappresentazione di valori interi maggiori di Imax, 32. Un problema che potrebbe sorgere durante le operazioni con questa rappresentazione e denominato “integer overflow” e purtroppo non da luogo a segnalazione di errori da parte del computer: l’addizione di due numeri la cui somma `e maggiore di Imax, 32 fornisce un risultato sbagliato e imprevedibile. Si consideri per esempio un’aritmetica a 4 bit (s = 1 e n = 3). Effettuiamo la somma tra il numero 7+2=9 in notazione binaria:
0111 + 0010 = 1001
il cui risultato `e -1 secondo la rappresentazione “integer” descritta sopra ((1001) 2 = (−1) 10 ). E’ quindi opportuno avere sempre presente il valore massimo (o minimo) rappresentabile e lavorare sempre con valori lontani da esso. E’ spesso utile lavore con interi a 64 bits (long long oppure integer*8) quando ci si avvicina al valore Imax, 32 in considerazione del fatto che Imax, 64 ≈ int(9. 2 × 1018 ).
1.3.2 IEEE 754: numeri reali
Nel caso di numeri reali, il modello di rappresentazione (sempre in base binaria) utilizza la notazione in virgola mobile normalizzata. Secondo questa notazione, un numero in base decimale si pu`o scrivere sempre come:
(a) 10 = ± 0 .m × 10 n
dove 0. 1 ≤ m < 1 e il valore di n viene aggiustato in modo da soddisfare la condizione su m. Le cifre che compongono m individuano la mantissa e costituiscono le cifre significative della rappresentazione.
Esempio 1.5.
(1234.5) 10 = 1. 2345 × 103 = 0. 12345 × 104 (0.000012345) 10 = 1. 2345 × 10 −^5 = 0. 12345 × 10 −^4
Usando la notazione binaria, un numero 6 = 0 pu`o essere scritto come:
(a) 2 = (−1)s^ × 2 e−b^ × 1 .f
dove s e il bit del segno del numero, e − be l’esponente con deviazione (o bias) b, che discuteremo piu avanti, e fe la mantissa. Si noti che non si fa l’ipotesi che il numero sia sempre diverso da zero per cui si pu`o evitare di memorizzare la cifra 1 della parte
32 bit intervallo di Rappresentazione variazione di e, f, b del numero 0 < e < 255 (−1)s^ × 1 .f × 2 e−b b = 127 f > 0 e = 0 (−1)s^ × 0 .0 (zero con segno) f = 0 e = 255 +INF (infinito positivo) s = f = 0 e = 255 -INF (infinito negativo) s = 1, f = 0 e = 255 NaN (Not-a-Number) s = 0, 1 , f > 0
64 bit intervallo di Rappresentazione variazione di e, f, b del numero 0 < e < 2047 (−1)s^ × 1 .f × 2 e−b b = 1023 e = 0 (−1)s^ × 0. 0 f = 0 e = 2047 +INF s = f = 0 e = 2047 -INF s = 1, f = 0 e = 2047 NaN s = 0, 1 , f > 0
Numeri “reali” a 32 bit Numeri “reali” a 64 bit Nome Rapp. interna decimale Rapp. interna decimale +0 0000 0... 0 +0.0 0000 0... 0 +0. -0 100 0... 0 -0.0 1000 0... 0 -0. 1 0100 1111 1000 0... 0 1.0 0100 1111 1111 0... 0 1. 2 0100 0... 0 2.0 0100 0... 0 2. Nmax 0110 1111 0110 1... 1 3.402E+38 0110 1111 1110 1... 1 1.798e+ Nmin 0000 0000 0100 0... 0 1.175E-38 0000 0000 0001 0... 0 2.225e- Nmin 0000 0000 0100 0... 0 1.175E-38 0000 0000 0001 0... 0 2.225e- +∞ 0011 1111 0100 0... 0 Infinity 0011 1111 1111 0... 0 Infinity −∞ 1111 1111 0100 0... 0 Infinity 1111 1111 1111 0... 0 Infinity Not-A-Number 0011 1111 1100 0... 0 NaN 0011 1111 1111 0100 0... 0 NaN
Tabella 1.1: Tabella in alto: schema riassuntivo dei valori che possono assumere e f e b in diversi casi. Tabella in basso: schema riassuntivo della sequenza bina- ria per numeri particolari secondo lo standard IEEE. Si veda Figura 1.3 per una rappresentazione grafica.
intera, e si aggiusta l’esponente opportunamente. Il bit che rappresenta la cifra 1 non memorizzata si chiama hidden bit. I numeri e e f sono memorizzati con formato intero senza segno (sono sempre positivi o nulli) con un numero di cifre diverso tra loro. Facciamo riferimento sempre alla Figura 1.3 per la localizzazione di s, e e f all’interno di una cella di memoria. Mentre ovviamente s vale sempre o zero o 1, bisogna distinguere i casi di word a 32 o 64 bit. Nel caso a 32 bit (chiamato anche singola precisione o real*4 per indicare che le celle di memoria sono a 4 bytes) e e costituito da 8 bit (30÷23) e f da 23 bit (22÷0). Nel caso a 64 bit (chiamato doppia precisione o real*8) ee costituito da 11 bit e f da 53 bit.
Per avere sempre numeri positivi, e non memorizzare quindi il segno dell’esponente, si usa il cosidetto bias, o deviazione, che rappresenta il centro dell’intervallo di
dell’IEEE si assume che il numero viene “arrotondato” alla cifra significativa piu vi- cina. La cifra soggetta ad arrotondamentoe nella m-esima posizione della mantissa e verra arrotondata a 1 se la m + 1-esima cifrae 1 o a 0 se la m + 1-sima cifra e zero. Ne consegue che l’errore massimo che si commettee:
2 −(f^ −1).
Usando questa formula, nel caso di singola precisione la precisione di macchina e 32 = 2−^24 ≈ 5. 96 e−08 mentre per la doppia abbiamo 64 = 2−^53 ≈ 1. 11 e−16. Si noti che nello scrivere questi numeri sie utilizzata la notazione tipicamente informatica detta EXP, per cui il numero 5. 96 e − 08 equivale a 5. 96 × 10 −^08. Si dice quindi che in singola precisione si hanno circa 8 cifre decimali significative, mentre in doppia precisione le cifre significative diventano 16. Per completare la trattazione, bisogna capire quali sono i numeri massimi e minimi rappresentabili in singola e doppia precisione. Per fare questo, dobbiamo calcolare i massimi e i minimi valori assumibili dalla mantissa e dall’esponente nei due casi. Con facili conti si ottiene:
|Amax, 32 | = (2 − 2 −^23 ) × 2 −^126 ≈ 3. 40282 E + 38 |Amin, 32 | = 2 × 2 −^127 ≈ 1. 17549 E − 38 |Amax, 64 | = (2 − 2 −^52 ) × 2 −^1023 ≈ 1. 7977 E + 308 |Amin, 64 | = 2 × 2 −^1023 ≈ 2. 2251 E − 308
Si vuole puntualizzare in questo paragrafo la nomenclatura che si utilizza normal- mente in calcolo numerico. In particolare, quando si parla di schema numerico si intende un’equazione o un insieme di equazioni che descrivono matematicamente in maniera compiuta le operazioni che devono essere fatte dall’elaboratore elettronico per risolvere un problema matematico. Un algoritmo e invece un insieme di istruzio- ni descritte da formule matematiche che mostrano come uno schema numerico puo essere “implementato” in un linguaggio di programmazione. Per esemplificare meglio cosa intendiamo, si consideri il seguente problema matema- tico:
Problema 1.7. Si vuole calcolare l’integrale:
In =
e
0
xnex^ dx, (1.5)
per ogni valore di n.
Per ricavare uno schema numerico, applichiamo il il teorema di integrazione per parti ottenendo:
In =
e
xnex‖^10 −
0
nxn−^1 ex^ dx
= 1 − n
e
0
xn−^1 ex^ dx
da cui risulta:
In = 1 − nIn− 1 (1.6)
Quindi possiamo rappresentare lo schema numerico per il calcolo dell’integrale In (eq. (1.5)) con la seguente equazione:
I˜ 0 = e^ −^1 e
I˜n = 1 − n I˜n− 1 n = 1, 2 ,... N (1.8)
Si noti che in (1.7) abbiamo usato il simbolo I˜n per distinguere l’approssimazione numerica dal valore vero In. Si pu`o quindi pensare il seguente algoritmo:
Algorithm Int instabile
I^ ˜k = 1 − k I˜k− 1
end for
Rappresentiamo astrattamente un problema matematico come:
F(x, d) = 0
dove F rappresenta l’insieme di equazioni che rappresentano formalmente il proble- ma, x rappresenta la variabile incognita che deve essere trovata, e d rappresenta l’insieme dei dati. Uno schema numerico lo rappresentiamo nello stesso modo con:
Fn(˜x, d˜) = 0
11 820.72 820.6426478 0.077352216 1.28371E-08 0.077352229 7.47263E- 12 -9847.64 9847.711773 0.071773408 1.54045E-07 0.071773254 8.96713E-
Tabella 1.2: Calcolo dell’integrale (1.6) con lo schema (1.7) con calcoli in singola e
- 2 luglio Dipartimento di Matematica – Universit`a di Padova a tra vettori e sotto- - 5.0.4 Operatori di proiezione. - 5.0.5 Autovalori ed autovettori - 5.0.6 Norme di vettori e di matrici - 6 Metodi Iterativi per sistemi lineari - 6.1 Metodi lineari e stazionari - 6.1.1 Metodi lineari e stazionari classici - 6.2 Metodi di rilassamento - 6.2.1 Metodo SOR - 7 Soluzione di Equazioni Differenziali - 7.1 Il problema di Cauchy - 7.2 Metodi a un passo - di formule di quadratura 7.2.1 Deduzione degli schemi per mezzo - 7.3 Convergenza degli schemi - 7.3.1 Convergenza sperimentale - 7.3.2 Consistenza e errore di troncamento. - 7.3.3 Stabilita - 7.3.4 Assoluta stabilit`a - 7.3.5 Implementazione metodi impliciti - - Riferimenti BibligraficiE’ possibile migliorare la situazione utilizzando uno schema diverso. Esprimiamo In− 1 in funzione di In ottenendo:
In− 1 =
1 − In n
Ossevando che
lim n→∞ In = 0
si pu`o pensare all’algoritmo seguente:
Algorithm Int stabile
I˜k− 1 = 1 −^
I˜k k
end for
∣ > τ aumentare il valore di N ripetere il ciclo 2
Analisi numerica dei due schemi Per studiare il motivo dell’instabilita dello schema si deve studiare il comportamento dell’errore ad ogni “iterazione”, seguendo la definizione di stabilita data in 1.9. Per fare questo, definiamo l’errore come la differenza tra la soluzione numerica e la soluzione vera (chiamata anche analitica)^5 :
n = I˜n − In.
Chiaramente risulter`a
I˜n = In + n,
che sostituita nello schema instabile (rappresentato da (1.9)) fornisce:
In + n = 1 − n(In− 1 + n− 1 ).
(^5) L’errore sara sempre definito cosı, a meno di un segno che per`o non ci interessa perch´e a noi
interessera in realta il valore assoluto dell’errore.
-6 -4 -2 0 2 4 6 x
0
2
4
y
-6 -4 -2 0 2 4 6
0
2
4 y=-3x/2+
y=-x/3-4/
Figura 1.4: Interpretazione geometrica del sistema lineare (1.11) e (1.12)
(x, y) = (2, −2). Questo sistema si pu`o riscrivere dividendo la prima equazione per 2 e la seconda per 6:
y = −
x + 1 (1.13)
y = −
x −
Questo sistema puo essere interpretato geometricamente come il problema di trovare il punto di intersezione delle due rette rappresentate dalle equazioni (1.13) e (1.14), come si vede in Figura 1.4. Proviamo ora a dare una perturbazione ai dati del nostro problema e vediamo come varia la soluzione. Nel piano (x, y) questo si traduce nel perturbare per esempio il termine noto della seconda equazione di un valore δ, quindi ottenendo una traslazione rigida verso il basso della retta, e vediamo che il punto di intersezione delle due rette si sposta di un valore ≈ δ. Invece, se le due rette hanno pendenze non molto diverse tra di loro, rappresentate da sistema lineare ovviamente diverso, si vede che ad una perturbazione δ corrisponde uno spostamento della soluzione molto grande ( δ). Questo comportamentoe tipico dei problemi malcondizionati, ed `e visualizzato in figure 1.5.
-7 -5 -3 -1 1 3 5 x
0
2
4
y
-6 -4 -2 0 2 4 6
0
2
4 y=-3x/2+
y=-x/3-4/ δ
ε∼δ
-2 -1 0 1 2 3 4 x
0
2
4
y
-2 -1 0 1 2 3 4
0
2
4 1 2
ε>>δ
δ
Figura 1.5: Interpretazione geometrica di un sistema lineare ben condizionato (grafico di sinistra) e di uno malcondizionato (grafico di destra)