ANALISI NUMERICA
Uno dei caratteri più significativi della matematica è quello numerico, e cioè, la possibilità di risolvere
problemi ottenendo come soluzioni dei valori numerici. Per passare da un problema alla sua soluzione,
espressa mediante numeri, occorrono tre fasi:
1. l’individuazione di informazioni iniziali che consentono di determinare un modello matematico per
descrivere il problema da risolvere;
2. la ricerca di algoritmo (metodo di calcolo) per trovare la soluzione numerica cercata;
3. l’esecuzione dell’algoritmo.
L’ analisi numerica è l’elaborazione di metodi per trovare soluzioni numeriche a problemi matematici.
Occorre però sottolineare il fatto che possono esistere più metodi di calcolo che consentono di risolvere un
problema; la ricerca dell’ottimizzazione del metodo risolutivo si basa su due criteri:
• la precisione dei risultati numerici ottenuti;
• la velocità di esecuzione.
Da qui nasce l’esigenza di conoscere l’approssimazione dei risultati ottenuti e i tipi di errori commessi.
Si evidenziano, in corrispondenza delle 3 fasi occorrenti alla risoluzione numerica di un problema, 3 tipi di
errori:
errori di
errori di
errori di
→
→
ingresso
algoritmo
calcolo
Classifichiamo quindi tali errori secondo le seguenti categorie:
1) ERRORI INTRINSECI o INERENTI : connessi ai dati iniziali del problema, che spesso sono determinati
soltanto in modo approssimativo;
2) ERRORI DEL METODO o GENERATI: connessi all’algoritmo scelto, che non sempre può essere costituito
da un basso numero di operazioni aritmetiche;
3) ERRORI DI CALCOLO o PROPAGATI : connessi con il tipo e con il numero di operazioni numeriche
eseguite, che sono a loro volta di due tipi
a) di TRONCAMENTO, dovuti all’interruzione ad un dato punto di una serie di operazioni;
b) di ARROTONDAMENTO, dovuti al fatto che si opera con numeri che sono stati privati di una parte
delle loro cifre decimali.
Affinché gli errori di arrotondamento siano minimi si seguono le seguenti regole:
- se la prima cifra eliminata è inferiore a 5, le cifre prese in considerazione restano invariate;
- se la prima cifra eliminata è superiore a 5, si aggiunge una unità;
- se la prima cifra eliminata è 5 e se fra le altre cifre eliminate almeno una è diversa da zero, l’ultima cifra
conservata viene aumentata di una unità; se tutte le altre cifre eliminate sono uguali a zero, l’ultima cifra
conservata rimarrà invariata se è pari , le si aggiunge uno se è dispari.
RAPPRESENTAZIONE DEI NUMERI
La rappresentazione di un numero è cosa distinta dal numero stesso
es. "tredici" è 1310 314 11012
La figura qui sotto rappresenta 5/8 oppure 0.62510 o anche 0.1012
NUMERI INTERI
La rappresentazione di un numero intero all’interno di una calcolatore è molto semplice. Gli interi sono scritti
di solito in 2 byte (16 bit) dove il bit più significativo che si indica il segno. Gli interi possono però anche
avere dimensioni doppie e quadruple dispetto allo standard. I valori positivi sono i numeri binari semplici. Ad
esempio:
1 Decimal = 1 Binary
2 Decimal = 10 Binary
22 Decimal = 10110 Binary, etc.
La scrittura binaria di un numero intero negativo è realizzata attraverso la rappresentazione in complemento
a due su "n" bit, generando in questo modo 2n combinazioni
–2n–1 ≤ n ≤ 2n–1 –1
(il complemento a due è n = ¬n + 1 )
Per ottenere la rappresentazione di complemento di due per un numero negativo, quindi avere la
rappresentazione binaria per il valore assoluto del numero, capovolgere tutti i bit e aggiungere 1.
Conseguenze :
• "zero" è sempre la sequenza di "n" cifre 0 (000…)
• "–1" è sempre la sequenza di "n" cifre 1 (111…)
• il "range" di interi utilizzabili è un sottoinsieme FINITO dell'insieme dei naturali Ν
• le operazioni sono affidabili solo nel "range" disponibile
• le proprietà formali delle operazioni NON sono rispettate
Operazioni : esempio per n = 4
0000
0
1000
-8
0001
1
1001
-7
0010
2
1010
-6
0011
3
1011
-5
0100
4
1100
-4
0101
5
1101
-3
0110
6
1110
-2
0111
7
1111
-1
3 + 5 0011 + 0101 = 1000
( - 8 !!!)
OVERFLOW
5 + 8 impossibile perché 8 non è un simbolo ammesso
–8–1 1000 + 1111 = 10111 ( 7 !!!) OVERFLOW
Proprietà delle operazioni : esempio in rappresentazione DECIMALE su 8 cifre
• PROPRIETÁ COMMUTATIVA
99999990 – 20 + 15
è diverso da
99999990 + 15 – 20 (overflow)
• PROPRIETÁ ASSOCIATIVA
(–20 + 10) + 99999995
è diverso da
–20 + (10 + 99999995) (overflow)
–
DUE POSSIBILI SOLUZIONI
1. Segnalare Overflow con Run Time Error (!)
Es . BASIC
0
+
2n
2. Ignorare l'overflow eseguendo operazioni in aritmetica MODULO
(modello ad anello o aritmetica dell'orologio)
Es. TURBOPASCAL
–maxint–1 ≤ m ≤ maxint
a ≡ b (modulo 2n) ↔ a–b = k⋅2n con k∈Ν–{0}
–
–
–32768
+
0
+
32767
Resta però il problema dell'INTERPRETAZIONE DEI RISULTATI : essi NON sono sbagliati ma SEMPRE corretti
nell'aritmetica in MODULO 2n
NUMERI REALI
Esistono due tecniche per la memorizzazione di dati non interi :
• NOTAZIONE IN VIRGOLA FISSA (poco utile)
• NOTAZIONE IN VIRGOLA MOBILE (FP–normalizzata):
La matematica al mobile virgola è un argomento complesso che confonde a più programmatori. La seguente
esercitazione dovrebbe consentire di riconoscere le situazioni di programmazione dove è probabile che gli
errori al mobile virgola si siano verificati e come evitare esse. Esso dovrebbe inoltre consentire di riconoscere
i casi causati dalle limitazioni matematiche intrinseche al mobile virgola gli errori di compilatore effettivo.
e
r = m⋅b
ogni numero reale r può essere scritto nella forma :
dove
m mantissa = ± 0 .c1c2c3 … cn con c1 ≠ 0
b base ( 2 in un elaboratore altrimenti 10)
e esponente
Esempio.
2.74
= 0.274 e +1
0.0032 = 0.32 e –2
10000 = 0.1 e +5
In un elaboratore questa rappresentazione offre dei vantaggi :
• la parte intera non è memorizzata (sempre = 0)
• il punto decimale viene omesso (è sempre a sinistra della prima cifra di mantissa
• non è memorizzata le base ( è ovvia)
ed uno svantaggio
• bisogna introdurre una rappresentazione ad hoc per la ZERO (mantissa=0, esponente=0)
In macchina verranno quindi memorizzati solo mantissa ed esponente in binario
±
Mantissa
±
espon.
È chiaro che anche in questo caso NON si possono rappresentare TUTTI i numeri REALI, ma solo un certo
SOTTOINSIEME IRREGOLARE. Anche in questa rappresentazione si ha un errore di OVERFLOW se si tenta di
memorizzare un numero più grande del massimo. Se invece si tenta di memorizzare un numero molto
piccolo si incorre in un errore di UNDERFLOW che di solito il calcolatore NON segnala, approssimando tale
valore a ZERO.
La codifica di un numero reale in FP è quasi sempre una approssimazione del numero stesso
• TRONCAMENTO
• ARROTONDAMENTO (troncamento del numero dopo aver aggiunto 5 all'ultima cifra significativa)
Questo significa che ad ogni rappresentazione sono associati INFINITI numeri compresi entro un intervallo
uguale al valore approssimato
Es.
Supponiamo di usare una rappresentazione DECIMALE con mantissa a 6 cifre
π = 3.141592…
≈ +314159e+1
rappresenta non UNO, ma INFINITI numeri "vicini" a meno di 10-6
Ogni integer decimale può essere rappresentato esattamente da un integer binario; ciò tuttavia non è vero
per i numeri frazionari. Ogni numero che è irrazionale nelle basi 10 anche sarà irrazionale in qualsiasi
sistema con una base più piccola a 10.
Per il binario, i numeri solo frazionari che si possono rappresentare nel p/q di modulo dove è il q un'intera
potenza di 2 possono essere espressi esattamente nel particolare con un numero finito di bit.
Persino le frazioni decimali più comuni, come 0,0001, non possono essere rappresentate esattamente nel
sistema binario. (0,0001 è una frazione binaria periodica con un intervallo periodico di 104 bit!)
Ciò illustra un esempio semplice a riportato di seguito
main() {
int SUM,I;
SUM = 0;
for (I=1; I<10000; I++)
SUM = SUM + 0.0001;
printf("%f", SUM);
// Teoricamente SUM = 1.0
}
Per la stessa ragione, si sempre dovrebbe essere molto cauto quando effettuare i confronti in base ai numeri
reali.
OSSERVAZIONE
Dato che in un elaboratore si opera in base 2, gli unici numeri che hanno cifre di mantissa FINITE, sono i
razionali con denominatore che è potenza di 2.
Es. "un decimo" ( 1/10) in binario è PERIODICO ( 0.000110011)
Lo standard IEEE754 per il calcolo in virgola mobile
Definisce il formato per la rappresentazione dei numeri in virgola mobile, ed un set di operazioni effettuabili
su questi. Specifica inoltre quattro metodi di arrotondamento e ne descrive cinque eccezioni.
Esistono in questo standard quattro formati per i numeri in virgola mobile: a precisione singola (32 bit),
precisione doppia (64 bit), precisione singola estesa (≥ 43 bit), raramente usato, e precisione doppia estesa
(≥ 79 bit), supportata solitamente con 80 bit.
La precisione singola è il minimo richiesto dallo standard, gli altri sono optional.
Rappresentazione in Singola Precisione su 4 byte ( 32 bit)
1
8
23
segno
esponente
mantissa
Rappresentazione in Doppia Precisione su 4 byte ( 32 bit)
1
11
52
Quanto visto vale per la rappresentazione interna; in fase di I/O da tastiera le cose potrebbero non essere
così (per esempio il numero massimo accettato in ingresso potrebbe essere MINORE del massimo
rappresentabile, per motivi legati alla libreria di I/O del linguaggio)
Alcune sequenze sono utilizzate per rappresentare valori particolari
zero Per rappresentare lo zero si usa la intera parola (di 32 o 64 bit) messa a
zero. Questa rappresentazione è particolare perché gli esponenti
(polarizzati) vanno da 00..012 = 110 (valore corrispondente -126) in poi,
quindi l’esponente non è mai zero. In questo caso, il significante viene
messo tutto a zero.
Utilità della rappresentazione:
– zero in complemento a due (interi) = zero in virgola mobile
– controllo per zero semplice: tutti i bit a zero
infinito Per rappresentare l’infinito si usa l’esponente a tutti uno e significante a
(positivo o negativo) tutti zero. Questa rappresentazione è particolare perché gli esponenti
(polarizzati) arrivano fino a 11..102 = 25410 (valore corrispondente 127) ,
quindi un esponente non è mai 11..112 (=25510)
A seconda del segno: infinito positivo o negativo
NaN (Not a Number). Per rappresentare il NaN si usa l’esponente a tutti uno e significante
Esempio: -5 diverso da zero
L'insieme dei numeri rappresentati in F.P. NON è continuo ma discreto ed inoltre gli elementi NON sono
equamente distribuiti sulla retta reale.
QUANTI SONO I NUMERI MACCHINA?
Per semplificare, ipotesi di un calcolatore 2_normale
a = 1,2, … ,9
b = 0,1, … ,9
n = 0, ±1, ±2, …,±38
r = ± 0.ab en
Tutte le possibili combinazioni di a,b,n sono 9 ⋅ 10 ⋅ 77 a cui si aggiungono in numero uguale i valori
negativi e lo zero, in tutto
13861 valori ≈ 1.39 ⋅ 104
Con lo stesso ragionamento si può arrivare a dire quante sono le combinazioni nel caso di 11 cifre (il caso
del TurboPascal)
2 ⋅ 9 ⋅ 1010 ⋅ 77 + 1 ≈ 1.39 ⋅ 1013
Nonostante l'esponente possa arrivare a +38, si ottiene un numero di valori BEN INFERIORE; da questo si
può notare che il numero di valori dipende molto più dalle cifre significative (e quindi dalla mantissa) che
non dall'esponente.
Perciò in un sistema, volendo aumentare la precisione con maggiori bit di memorizzazione dei F.P. è meglio
assegnare i bit alla MANTISSA
COME SONO DISTRIBUITI I NUMERI MACCHINA?
Per semplificare, ipotesi di un calcolatore 2_normale
r = ± 0.ab en
Di seguito la rappresentazione di alcuni valori
0.10e0 0.11e0 0.12e0 … 0.19e0 0.20e0 10 rappresentazioni tra 0.1 e 0.2
0.10e1 0.11e1 0.12e1 … 0.19e1 0.20e1 10 rappresentazioni tra 1 e 2
0.10e2 0.11e2 0.12e2 … 0.19e2 0.20e2 10 rappresentazioni tra 10 e 20
0.10e3 0.11e3 0.12e3 … 0.19e3 0.20e3 10 rappresentazioni tra 100 e 200
0 10
50
100
150
200
Ogni sequenza è composta da 10 rappresentazioni che si distribuiscono su intervalli MOLTO diversi
(aumentano di una potenza di 10). Per mantenere la stessa "densità" ad ogni aumento di 1 dell'esponente si
dovrebbe aggiungere UNA cifra (cosa impossibile perché le cifre sono fisse). Nel caso reale i valori che si
ripetono in ogni intervallo sono molto elevati ( 9 ⋅ 1010) ma ovviamente insufficienti a rappresentare gli
infiniti numeri reali.
Più l'esponente è alto, meno "densi" sono i valori.
Nei pressi del numero massimo rappresentabile i valori esatti sono RARISSIMI.
Il fatto che molti algoritmi vengano "testati" solo per valori non critici o abituali induce molti programmatori
a considerare il calcolatore infallibile.
In realtà SBAGLIA FACILMENTE
ARITMETICA F.P.
Anche
•
•
•
•
le operazioni in FP possono generare eccezioni del risultato:
Overflow dell’esponente: esponente positivo che e’ piu’ grande del massimo
Underflow dell’esponente: esponente negativo minore del minimo valore (numero troppo piccolo)
Underflow della mantissa: mantissa 0 (allineando, gli 1 sono usciti fuori)
Overflow della mantissa: riporto del bit piu’ significativo
Algoritmo per la SOMMA
1. Controllo dello Zero
2. Eguagliare gli esponenti, agendo sulla mantissa del numero più piccolo
3. Sommare le mantisse
4. Nel caso di riporto aumentare di 1 l'esponente del risultato e approssimare (troncando o
arrotondando) (perdita di informazione)
Es. con 6 cifre di mantissa (numeri 6_normali)
z = 0.43729e+3 t = 0.715464e+3
0.437290 +
0.715464 =
1.152754 e+3
normalizzazione 0.115275e+4
Come per gli interi, NON valgono le proprietà delle operazioni
PROPRIETÁ ASSOCIATIVA
Si debbano sommare, con arrotondamenti, i numeri :
x=0.235565e+3 y=0.245678e+5 z=0.867899e+5
(x+y) = 0.002356 + 0.245678 = 0.248034e+5
(y+z) = 0.111358e+6
(x+y)+z = 0.111593e+6
x+(y+z) = 0.000236 + 0.111358 = 0.111594e+6
Algoritmo per la MOLTIPLICAZIONE
1. Moltiplicare le mantisse
2. Sommare gli esponenti
3. Normalizzare il risultato (troncando o arrotondando) (perdita di informazione)
ESEMPIO con numeri 4_normali ed arrotondamento
x = 0.3254e+6 y = 0.213e-2
x ⋅ y = 0.0693 e+4
normalizzazione
0.6930 e+3
Algoritmo per la DIVISIONE (se è possibile)
1. Dividere le mantisse
2. Sottrarre gli esponenti
3. Normalizzare il risultato (troncando o arrotondando) (perdita di informazione)
ESEMPIO. con numeri 4_normali ed arrotondamento
x = 0.4e+5 y = 0.3e-3
x / y = 1.3333 e+8
normalizzazione
0.1333 e+7
VERIFICA DELLA PRECISIONE MACCHINA
Viene fatta applicando algoritmi che verificano identità matematiche, come nel semplice caso che segue :
float x,s ;
int i;
x = 1.0;
for (i= 1; i<= 7; i++) {
x = x / 10;
s= ( 1-(1/(1+x)))*(1+x);
printf ( “\t %f \t %f \n”,x,s);
}
TEMPO DI ESECUZIONE
I conti con i numeri FP vengono realizzati via sw o con l'ausilio di un coprocessore matematico.
Nel caso non sia presente il coprocessore, la verifica del tempo di esecuzione delle operazioni, può essere
facilmente realizzata con loop di operazioni, come nel seguente esempio :
float a,b ;
long int i;
a = 3.141592654;
b = 2.71828182;
for (i= 0; i< 10000000; i++) {
c := a*b+a–b/a;;
}
LIMITI DELL’ELABORATORE
Programma 1
int main()
{
float x,y;
int i;
x=1.0e06;
printf("\n\tX\t\t\tY\t\t\tY-X\n");
for(i=1;i<=5;i++)
{x*=10;
y=x+1;
printf("\n%16.2f\t%16.2f\t%12.2f",x,y,y-x);
}
getchar();
}
Scrivi il valore iniziale di x e i valori della differenza y- x che ti aspetti ; poi confrontali con quelli ottenuti al
calcolatore.
Programma 2
Modifica il programma P1 definendo x e y di tipo double.
Nota analogie e differenze tra i due programmi.
TEORIA DEGLI ERRORI
Definizioni
• ERRORE ASSOLUTO
• ERRORE RELATIVO
e(x) = | x – α |
er(x) = e(x) / | x |
Non è quasi mai possibile scrivere i valori di questi errori (in generale non si conosce x, che è l'obiettivo
dell'algoritmo di calcolo)
NEGLI ALGORTIMI SI PROCEDE PERCIÓ CON STIME che MAGGIORANO l'errore effettivo :
•
ERRORE ASSOLUTO LIMITE
E(x)
Dati a' e a'' tali che a' ≤ x ≤ a''
(o GRADO DI APPROSSIMAZIONE)
E(x) = a'' – a'
Stabilito E(x) , OGNI numero α tale che a' ≤ α ≤ a'' si chiama valore approssimato (o approssimazione) di x
x = α ± E(x)
e sicuramente
e(x) ≤ E(x)
•
ERRORE RELATIVO LIMITE Er(x) = E(x) / a'
(o PRECISIONE RELATIVA)
Esempio. √13 approssimato alla 1^ cifra è
3,6 < √13 < 3,7
E(x) = 0,1 Er(x) < 2,8%
Problema 1
Se si approssima il numero N1 = 1387500 con il numero A1 = 1400000 e il numero N2 = 87500 con il
numero A2 = 100000 quale errore si commette in ciascuno dei due casi ? Quant’è il rapporto tra l’errore
commesso e il numero dato in ciascuno dei due casi ?
Problema 2
Ripetere i calcoli del problema precedente con i seguenti valori :
N3 = 1040 con A3 = 1000
N4 = 3640 con A4 = 3500.
Problema 3
Se si approssima il numero N5 = 1060000 con il numero A5 = 1000000 e il numero N6 = 3290000 con il
numero A6 = 3200000, quale delle due approssimazioni e’ più corretta ?
TIPI DI ERRORE
• INERENTE (sui dati di partenza) : errori macchina, errori di ingresso su dati sperimentali …
• GENERATO : algoritmo interrotto ad un certo punto, calcoli eseguiti in modo non esatto, non validità
delle proprietà formali delle operazioni.
• PROPAGATO : operazioni su valori già affetti da errore.
α
APPROSSIMAZIONE PER TRONCAMENTO di x alla cifra n
α ≤ x < α + E(x)
E(x) = 10–n
E(x)
α
APPROSSIMAZIONE PER ARROTONDAMENTO di x alla cifra n
α – E(x) ≤ x ≤ α + E(x)
E(x) = ½ 10–n
Esempio : calcolare e + π con numeri 4_normali troncati
e = 2,7182… 0,2718 e+1 E = 10–3
π = 3,1415… 0,3141 e+1 E = 10–3
e + π = 0,5859 e+1
E = 10–3 + 10–3 = 2 ⋅ 10–3
E(x)
perciò
Esempio : calcolare e + π con numeri 4_normali arrotondati
e = 2,7182… 0,2718 e+1 E = ½ 10–3
π = 3,1415… 0,3142 e+1 E = ½ 10–3
e + π = 0,5860 e+1
E = ½ 10–3 + ½ 10–3 = 10–3
perciò (e + π) = 5,860 ± 0.001
E(x)
5,859 ≤ (e + π) < 5,861
5,859 ≤ (e + π) < 5,861
PROPAGAZIONE DEGLI ERRORI NELLE OPERAZIONI
Dati due valori approssimati
x2 = (β + E2)
x1 = (α + E1)
le operazioni provocheranno una PROPAGAZIONE degli errori inerenti
α+β±E
Somma
Sottrazione
α–β±E
Moltiplicazione
(α ⋅ β) ± E
Divisione
Problema 1
Calcolare π / e
E = E1+E2
E = E1+E2
E = α ⋅ E2 + β ⋅ E1 + E1 ⋅ E2
(α / β) ± E
Termine
trascurabile
E = (α E2 + β E1) / (β–E2 )2
con numeri 4_normali troncati
π = 3,1415… 0,3141 e+1 E = 10–3
e = 2,7182… 0,2718 e+1 E = 10–3
π/e = 0,1155 e+1
E = 0,2718e+1⋅10–3 + 0,3141e+1⋅10–3 ≤ 6⋅10–4
(0,3141e+1)2
L'errore complessivo è però maggiore poiché va aggiunto l'errore GENERATO dall'operazione (il risultato è un
troncamento)
E ≤ 6⋅10–4 + 10–3 ≤ 2 ⋅ 10–3
0,1155 e+1 ≤ π / e < 0,1157 e+1
Problema 2
Calcolare la seguente espressione con numeri 4_normali arrotondati e stimare gli errori commessi
d = ( a + c) + b / a
Normalizzazione
a = 2,718281
a = 0,2718 e+1
arrotondamento ½ 10–3
b = 0,03457
b = 0,3457 e–1
nessun errore
c = 345,87
c = 0,3459 e+3
arrotondamento ½ 10–1
(a+c) = 0,0027e+3 + 0,3459 e+3 = 0,3486 e+3
propagato (0,5050e–1)
(b/a) = 0,3457e–1 / 0,2718e+1 = 0,1272e–1
prop. e gener. (< 3e–6)
(a+c)+b/a = 0,3486e+3 + 0.0000e+3 = 0,3486e+3 prop. e generato (<0,6)
d = 348,6 ± 0,6 (stima)
E(x) < 0,6
Er(x) < 0,6 / 348,6 < 0,2 %
Problema 3
Calcolare la somma √2 + √3 +√7 + √8 dove gli addendi sono dati con una precisione a meno di 0.001.
Quale errore si commette sulla somma ?
Problema 4
Calcolare la differenza di √11 e √7 dove i numeri sono dati con una precisione a meno di 0.001.
Problema 5
Siano a=1.319 dato con un errore relativo dello 0.1% e b=0.287 dato con un errore relativo dello
0.3%.Quale risultato si ottiene effettuando la somma ?Qual è l’errore %?
Problema 6
Determinare il prodotto di √11 e √7 con i valori arrotondati alla quarta cifra decimale. Quale errore si
commette ?
Problema 7
Calcolare e/√11 utilizzando valori arrotondati alla quinta cifra decimale .Quale errore si commette ?
PROPAGAZIONE DEGLI ERRORI : PROBLEMA INVERSO
Problema 1
Dato n = 3π√7 calcolarne il valore con approssimazione a meno di 10-3.
CONDIZIONAMENTO DI UN PROBLEMA
Problema 1
Risolvere la seguente coppia di sistemi :
x+ y
=1


1000x + 1001y = 10
x+ y
=1


1000x + 999 y = 10
e rispondere alle seguenti domande :
qual è la variazione assoluta del coefficiente della y ? e quella relativa ?
quali sono le variazioni assolute e relative delle soluzioni ?
Problema 2
Risolvere la seguente coppia di sistemi :
x+ y
=1


1000x − 1000 y = 10
x+ y
=1


1000x − 998 y = 10
e rispondere alle seguenti domande :
qual è la variazione assoluta del coefficiente della y ? e quella relativa ?
quali sono le variazioni assolute e relative delle soluzioni ?
NOTA BENE
I problemi in cui ad ogni variazione percentuale dei dati corrisponde una variazione percentuale dei risultati
all’incirca dello stesso ordine di grandezza, si dice che sono ben posti o ben condizionati (matrice dei
coefficienti a preponderanza diagonale!). Qualora i dati non fossero conosciuti esattamente la precisione dei
risultati sarebbe comunque paragonabile a quella dei dati. Non così nei problemi mal posti ( vedi problema
1) dove i dati non esatti ( es. coefficiente = 3.45 ± 0.1) porterebbero a risultati scarsamente attendibili.
CRITERI DI ARRESTO DEGLI ALGORITMI
• Quando si è raggiunto un certo GRADO DI APPROSSIMAZIONE
• Quando lo scarto tra due valori calcolati è minore di un errore arbitrario stabilito a priori
• Quando si sono fatti un numero di iterazioni oltre il quale si impone la terminazione.
Osservazione : il numero di operazioni utilizzate negli algoritmi deve essere reso minimo al fine di limitare
l'effetto CUMULATIVO di tutti gli errori.
ATTENZIONE
In un programma che utilizza numeri in floating point (real, o extended in pascal, float o double in C,
numeric in SQL…) è opportuno:
• EVITARE controlli del tipo
if a = b then
poiché se le due variabili sono il risultato di calcoli precedenti, esse sono probabilmente
approssimate; è più conveniente un controllo del tipo
if abs(a-b)<= epsilon then
• USARE CON CAUTELA al denominatore, espressioni ove compaiano differenze tra numeri molto
vicini o somme tra numeri di segno opposto, ma in valore assoluto vicino (Annullamento di cifre).
Algoritmi per il calcolo della RADICE QUADRATA
• ERONE
Posto y=√n tale che y<√x allora y2 < x e quindi
Dato y0 valore di innesco, si può calcolare la approssimazione successiva della radice con un algoritmo
iterativo della media aritmetica tra i due valori per difetto e per eccesso
y< x<
x
y
y n +1 =
1
x
 y n +
2
yn



• CATALDI
Se a<√x allora a+ y = √x , posso produrre un algoritmo iterativo dalla formula in seconda colonna
(a+ y)2 = x
a2+ y2+ 2ay = x
y ( y+ 2a) = x – a2
y n +1 =
x − a2
y n + 2a
Si ottengono alternativamente valori approssimati per eccesso e per difetto.
Nel caso di √2 : a = 1 e y0 = 0
• BISEZIONE
Soluzione dell'equazione F(x) = x2– n = 0
Se a < √x < b
Esercizio al calcolatore
Do
{ c = (a+b)/2
if f(a)*f(c) > 0 a= c
else b=c;
while (f(c) < epsilon);
Realizzare la tabulazione del limite ( Excel, Linguaggio di Programmazione)
x
ricevuti in ingresso
1

x0
punto iniziale da cui effettuare la tabulazione
1 + 
E
errore assoluto massimo ammissibile
x
x →∞ 
h
passo di incremento di x
La tabella prodotta deve contenere i seguenti campi :
xn
valore di x al passo n 1/xn
An
Valore del limite calcolato
En
Stima errore assoluto, valutato sull'algoritmo (|An–An–1|)
εn
Errore assoluto (|An – l |)
In particolare si provi l'esecuzione e si commentino i risultati nei seguenti casi:
E= 1e–5
h=1e3
E= 1e–10
h=1e10
E= 1e–5
h=1e15
Si utilizzi in un primo tempo il tipo real; in seguito si effettuino prove con un tipo esteso.
Si realizzi il grafico di En ed εn .
Si realizzi la simulazione dell'algoritmo con Excel, utilizzando numeri 4_normali.
lim