Corso di Matematica per la Chimica - old · di cifre decimali superiore alla precisione con cui si...

44
Corso di Matematica per la Chimica Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universit` a della Basilicata a.a. 2014-15 Operazioni macchina e Cancellazione numerica Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universit` Corso di Matematica per la Chimica

Transcript of Corso di Matematica per la Chimica - old · di cifre decimali superiore alla precisione con cui si...

Corso di Matematica per la Chimica

Dott.ssa Maria Carmela De BonisDipartimento di Matematica, Informatica e Economia

Universita della Basilicataa.a. 2014-15

Operazioni macchina e Cancellazione numerica

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Terza conseguenza della rappresentazione dei numericome parole di lunghezza fissa - Errori nei calcoli

Non sempre una operazione tra due o piu numeri macchina produceun risultato che e un numero macchina.

Si puo verificare una situazione di overflow o underflow.

Inoltre la forma normalizzata del risultato potrebbe avere un numerodi cifre decimali superiore alla precisione con cui si sta lavorando.

Pertanto in un calcolatore e impossibile implementare esattamente leoperazioni aritmetiche.

Dovremo accontentarci delle cosiddette operazioni macchina:

a due numeri macchina viene associato un terzo numero macchinaottenuto arrotondando l’esatto risultato dell’operazione aritmetica.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Siano a e b due numeri reali e siano A = fl(a) e B = fl(b) icorrispondenti numeri macchina.

Denotando con ⊕,,⊗,� le operazioni macchina corrispondentirispettivamente alle operazioni aritmetiche +,−,×, /, si ha

A⊕ B = fl(A + B) = (A + B)(1 + δ1)

A B = fl(A− B) = (A− B)(1 + δ2)

A⊗ B = fl(A× B) = (A× B)(1 + δ3)

A� B = fl(A/B) = (A/B)(1 + δ4)

con|δi| ≤ u ≤ ε i = 1, 2, 3, 4

Dunque, quando si effettua una operazione macchina si commette unerrore dell’ordine della precisione di macchina ε.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Osservazione

I precedenti risultati valgono per lo standard IEEE 754 che utilizza icosiddetti bit di guardia, cioe per eseguire le operazioni i numerimacchina vengono memorizzati in opportuni registri con dei bitaggiuntivi allo scopo di ridurre gli effetti degli errori diarrotondamento.

In tale sistema si ha anche:

fl(√

x) =√

x(1 + δ), |δ| ≤ ε

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Utilizzando i precedenti risultati e possibile stimare, in via teorica, glierrori in tutte le espressioni.

Per esempio

fl(x(y + z)) = [x · fl(y + z)](1 + δ1) = x(y + z)(1 + δ2)(1 + δ1)

≈ x(y + z)(1 + δ1 + δ2),

avendo trascurato il prodotto δ1δ2 perche “piccolo”.

Dunquefl(x(y + z)) ≈ x(y + z)(1 + δ3), |δ3| ≤ ε

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Domanda

Per le operazioni macchina valgono ancora le note proprieta(commutativa, associativa, distributiva, etc) delle operazioniaritmetiche?

La risposta non e sempre affermativa.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

La proprieta commutativa permane:

A⊕ B = B⊕ A e A⊗ B = B⊗ A

mentre, in generale,

(A⊕ B)⊕ C 6= A⊕ (B⊕ C)

(A⊗ B)⊗ C 6= A⊗ (B⊗ C)

A⊗ (B⊕ C) 6= (A⊗ B)⊕ (A⊗ C)

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempio 1

(A⊕ B)⊕ C 6= A⊕ (B⊕ C)

N = 10, t = 6Dati i numeri a = 0.1234567, b = 6666.325 e c = −6666.325

⇒ A = fl(a) = 0.123457 100

⇒ B = fl(b) = 0.666633 104

⇒ C = fl(c) = −0.666633 104

fl(fl(A + B) + C) = fl(0.666645 104− 0.666633 104) = 0.120000 100

mentre

fl(A + fl(B + C)) = fl(0.123457 100 + 0) = 0.123457 100

Ovviamente il risultato con tutte le cifre significative corrette e ilsecondo.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempio 2

A⊗ (B⊕ C) 6= (A⊗ B)⊕ (A⊗ C)

N = 10, t = 6Dati i numeri a = 5416460, b = 43.2457 e c = 43.7458

⇒ A = fl(a) = 0.541646 107

⇒ B = fl(b) = 0.432457 102

⇒ C = fl(c) = 0.437458 102

fl(A ∗ fl(B + C)) = fl(0.541646 107 ∗ 0.869915 101) = 0.471186 109

mentre

fl(fl(A∗B)+fl(A∗C)) = fl(0.234239 109+0.236947 109) = 471186000

Osserviamo che

a ∗ (b + c) = a ∗ b + a ∗ c = 471185980.090000 · · ·

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Un’ulteriore relazione anomalia e

A⊕ B = A, se |B| � |A|,

dunque, l’elemento neutro della somma non e unico.

Esempio

N = 10, t = 16

a = exp(18) = 0.6565996913733051 · 108

b = exp(−20) = 0.2061153622438558 · 10−8

a⊕ b = fl(a + b) = 0.6565996913733051 108 = fl(a)

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Cio accade perche, nell’eseguire la somma tra numeri macchinaaventi esponenti diversi, il calcolatore esegue i seguenti passi:

1 individua il numero avente l’esponente q piu grande;2 memorizza tutti gli altri numeri utilizzando la loro

rappresentazione con esponente q;3 esegue la somma.

Infatti, nel precedente esempio, si ha

fl(b) = 0.2061153622438558 10−8

= 0.00000000000000002061153622438558 108

e, arrotondando a 16 cifre,

fl(b) = 0.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Somma di piu numeri

Sempre a causa dell’errore di incolonnamento, se occorre sommarepiu numeri, tutti positivi e aventi ordini di grandezza diversi, perottenere un risultato finale accurato conviene procedere in ordineascendente (dal piu piccolo al piu grande), cosicche anche i valori piupiccoli diano contributo alla somma.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempio

Dati i numeri in base 10

0.8999e + 4 0.7889e + 3 0.7767e + 3

0.7555e + 2 0.6266e + 2 0.4298e + 1

0.2581e + 1 0.2653e + 0 0.1580e + 0

Supponendo di lavorare in aritmetica floating-point con t = 4,sommare i numeri in ordine ascendente e discendente e confrontare irisultati ottenuti con il valore esatto s = 0.107101123e + 5.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Sommiamo prima in ordine discendente:

s1 = fl(0.8999e + 4 + 0.7889e + 3) = 0.9788e + 4s1 = fl(s1 + 0.7767e + 3) = 0.1056e + 5s1 = fl(s1 + 0.7555e + 2) = 0.1064e + 5s1 = fl(s1 + 0.6266e + 2) = 0.1070e + 5s1 = fl(s1 + 0.4298e + 1) = 0.1070e + 5s1 = fl(s1 + 0.2581e + 1) = 0.1070e + 5s1 = fl(s1 + 0.2653e + 0) = 0.1070e + 5s1 = fl(s1 + 0.1580e + 0) = 0.1070e + 5

Osserviamo che solo i primi 5 numeri danno contributo alla somma

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Sommiamo ora in ordine ascendente:

s2 = fl(0.1580e + 0 + 0.2653e + 0) = 0.4233e + 0s2 = fl(s2 + 0.2581e + 1) = 0.3004e + 1s2 = fl(s2 + 0.4298e + 1) = 0.7932e + 1s2 = fl(s2 + 0.6266e + 2) = 0.7059e + 2s2 = fl(s2 + 0.7555e + 2) = 0.1461e + 3s2 = fl(s2 + 0.7767e + 3) = 0.9228e + 3s2 = fl(s2 + 0.7889e + 3) = 0.1712e + 4s2 = fl(s2 + 0.8999e + 4) = 0.1071e + 4

Osserviamo che tutti i numeri danno contributo alla somma

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Calcolando gli errori relativi

|s− s1||s1|

= 0.944 10−3 somma discendente

|s− s2||s2|

= 0.105 10−4 somma ascendente

deduciamo che, sommando in ordine discendente la somma vienecalcolata con 3 cifre significative corrette, mentre, sommando inordine ascendente la somma viene calcolata con 5 cifre significativecorrette.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Cancellazione Numerica

E un fenomeno che si verifica durante l’operazione di sottrazione tradue numeri “quasi uguali”.Siano x1 e x2 due numeri reali. Se x = x1 − x2 e “molto piccolo”,l’errore relativo

δx =

∣∣∣∣fl(x1 − x2)− xx

∣∣∣∣puo essere “molto grande” e cio produce una perdita di cifresignificative nel calcolo di fl(x1 − x2)

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempio 1

Siano x1 = 0.147554326 102 e x2 = 0.147251742 102 due numeri inbase 10. Calcolare la differenza x1 − x2 supponendo di utilizzareun’aritmetica con t = 6 cifre significative.

⇒ X1 = fl(x1) = 0.147554 102

⇒ X2 = fl(x2) = 0.147252 102

fl(X1 − X2) = 0.000302 102 = 0.302000 10−1

mentrex1 − x2 = 0.302584 10−1

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempio 2

Siano x1 =√

2.01 e x2 =√

2 due numeri in base 10. Calcolare ladifferenza x1 − x2 supponendo di utilizzare un’aritmetica con t = 6cifre significative.

⇒ X1 = fl(x1) = 0.141774 101

⇒ X2 = fl(x2) = 0.141421 101

fl(X1 − X2) = 0.353000 10−2

mentrex1 − x2 = 0.35311255 · · · 10−2

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

OsservazioneE sempre preferibile evitare la sottrazione tra numeri macchina“quasi uguali” utilizzando, laddove possibile, delle espressionialternative.

Per esempio:1

√x + δ −

√x =

δ√x + δ +

√x

2

cos (x + δ)− cos (x) = −2 sin2(δ

2

).

In generale, se si presenta il caso di dover computare

f (x + δ)− f (x),

con |δ| � |x|, puo convenire considerare l’espansione di Taylor

f (x + δ)− f (x) = f ′(x)δ + f ′′(x)δ

2+ . . .

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Un problema di cancellazione si puo presentare anche nella formularisolutiva dell’equazione di secondo grado ax2 + bx + c = 0 :

x1,2 =−b±

√b2 − 4ac

2a,

per cui conviene usare la formula alternativa:

x1 =−b− sign(b)

√b2 − 4ac

2a, x2 =

cax1

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Verifichiamo che non sempre una operazione tra numeri macchinaproduce un numero macchina.

>> a=1.000345566e+150;>> b=0.15646464e+200>> a*bans =Inf

>> a=1.000345566e-25:>> b=1.56464646e-300>> a*bans =0

Da quest’ultimo esempio si evince anche che il prodotto tra duenumeri macchina puo essere nullo anche se entrambi i numeri sononon nulli, cioe non vale la legge di annullamento del prodotto.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Siano a = 0.23371258 10−4, b = 0.33678429 102, c =−0.33677811 102, verificare che (a⊕ b)⊕ c 6= a⊕ (b⊕ c)>> a=0.23371258e-4a =2.33712580000000e-005>> b=0.33678429e+2b =3.36784290000000e+001>> c=-0.33677811e+2c =-3.36778110000000e+001>> (a+b)+cans =6.41371258005563e-004>> a+(b+c)ans =6.41371258002894e-004

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Siano a = 0.1234567, b = 6666.325 e c = −6666.325,verificare che (a⊕ b)⊕ c 6= a⊕ (b⊕ c)>> a=0.1234567a =1.23456700000000e-001>> b=6666.325b =6.66632500000000e+003>> c=-6666.325c =-6.66632500000000e+003>> (a+b)+cans =1.23456700000133e-001>> a+(b+c)ans =1.23456700000000e-001

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Siano a = 0.8e + 9, b = 0.500009e + 4 e c = −0.500008e + 4,verificare che a⊗ (b⊕ c) 6= a⊗ b⊕ a⊗ c.a=0.8e+9a =800000000>> b=0.500009e+4b =5.00009000000000e+003>> c=-0.500008e+4c =5.00008000000000e+003>> a*(b+c)ans =8.00000000017462e+006>> a*b+a*cans =8000000

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Infatti>> a*bans =4000072000000>> a*cans = -4000064000000>> a*b+a*cans =8000000

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Siano a = 7.45700244034177e− 001,b = 3.77400852642836e− 001 ec = 7.62332001118890e− 001, verificare chea⊗ (b⊗ c) 6= (a⊗ b)⊗ c.

>>a=7.45700244034177e-001;>>b=3.77400852642836e-001;>>c=7.62332001118890e-001;

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

>> p1=(a*b)*cp1 =2.14541500211140e-001>> p2=a*(b*c)p2 =2.14541500211140e-001>> p1==p2ans =0

Osserviamo che i valori p1 e p2 risultano essere uguali anche se icorrispondenti numeri macchina non lo sono (il test p1==p2 forniscecome risultato 0, cioe false).Cio accade per un errore divisualizzazione o di conversione dal binario al decimale.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Verifichiamo che dati c = 0.164646415647 10+9 ed = 0.38731646 10−6 si ha c⊕ d = fl(c + d) = fl(c).

>>c=0.164646415647e+9;>> d=0.38731646e-6;>> c+dans =1.64646415647000e+008

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Verificare che l’uguaglianza

√x + δ −

√x =

δ√x + δ +

√x

non e vera se si lavora in aritmetica finita.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Supponiamo x = 4 e δ = 0.002

>> a=sqrt(4.002)a =2.00049993751562e+000>> b=sqrt(4)b =2>> a-bans =4.99937515620275e-004>> 0.002/(a+b)ans =4.99937515620119e-004

Con la prima formula si perdono 3 cifre significative corrette.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Verificare che l’uguaglianza

cos (x + δ)− cos (x) = −2 sin2(δ

2

)non e vera se si lavora in aritmetica finita.

Supponiamo x = π e δ = 0.0001>> cos(pi+0.0001)-cos(pi)ans =4.99999996961265e-009>> -2*sin(0.0001/2)∧ 2ans =-4.99999999583333e-009

Con la prima formula si perdono 7 cifre significative corrette.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Data l’equazione di secondo grado

x2 − 0.4002x + 0.8e− 4 = 0,

calcolare le radici con le formule:

x1,2 =−b±

√b2 − 4ac

2a,

e

x1 =−b− sign(b)

√b2 − 4ac

2a, x2 =

cax1

e confrontare i risultati ottenuti con i valori esatti x1 = 0.4 ex2 = 0.0002.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Osserviamo prima di tutto che se calcoliamo il valore del polinomiodi secondo grado nelle sue radici non si ottiene 0 ma uno degli infinitizeri macchina.

>> x=0.4;>> x∧2-0.4002*x+0.8e-4ans =3.10217346602415e-017>> x=0.0002;>> x∧2-0.4002*x+0.8e-4ans =1.35525271560688e-020

Dunque l’equazione e numericamente verificata a meno di un erroredell’ordine dell’epsilon-macchina

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

>> a=1;b=-0.4002;c=0.8e-4;>> x1=(-b+sqrt(b∧2-4*a*c))/(2*a)x1 =4.00000000000000e-001>> x2=(-b-sqrt(b∧2-4*a*c))/(2*a)x2 =1.99999999999978e-004>> x22=c/x1x22 =2.00000000000000e-004

E evidente che con la prima formula si perdono 2 cifre significativecorrette.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esempi in MatLab

Valutare le espressioni analiticamente equivalenti

y1 =1− cos(t)

t2 e y2 =12

sin2(t/2)

(t/2)2

nel punto t = 1.2e− 5.

>> t=1.2e-5;>> y1=(1-cos(t))/t∧2y1 =4.99999732974901e-001>> y2=0.5*(sin(t/2)/(t/2))∧2y2 =4.99999999994000e-001

La diversita dei risultati ottenuti e dovuta al fenomeno dellacancellazione numerica verificatosi nel calcolo di 1− cos(t),perche, con la scelta fatta di t, 1 e cos(t) sono “quasi uguali”.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Poiche l’espressione

y2 =12

sin2(t/2)

(t/2)2

e definita mediante operazioni che non introducono alcuna perdita diprecisione, possiamo ritenere che il valore y2 abbia 15 cifresignificative corrette.

Pertanto, confrontando y1 con y2 deduciano che non l’espressione y1si ottengono solo 6 cifre significative corrette.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Esercizi in MatLab

Valutare le espressioni, analiticamente equivalenti,

y1 = (1− x)6 e y2 = x6− 6x5 + 15x4− 20x3 + 15x2− 6x + 1

in 100 punti equidistanti nell’intervallo [1− δ, 1 + δ] perδ = 0.1, 0.01, 0.005, 0.0025. Rappresentare graficamente y1 e y2per ciascun valore di δ assegnato.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

>> delta=0.1;>> x=linspace(1-delta,1+delta);>> y1=(1-x).∧6;>>y2=x.∧6-6*x.∧5+15*x.∧4-20*x.∧3+15*x.∧2-6*x+1;>> figure(1)>> plot(x,y1,x,y2,’r’)Si ottiene il grafico

0.9 0.95 1 1.05 1.1-1.0e-6

0.0e+0

1.0e-6

2.0e-6

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

>> delta=0.01;>> x=linspace(1-delta,1+delta);>> y1=(1-x).∧6;>>y2=x.∧6-6*x.∧5+15*x.∧4-20*x.∧3+15*x.∧2-6*x+1;>> figure(2)>> plot(x,y1,x,y2,’r’)Si ottiene il grafico

0.99 0.995 1 1.005 1.01 1.015-1.0e-12

0.0e+0

1.0e-12

2.0e-12

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

>> delta=0.005;>> x=linspace(1-delta,1+delta);>> y1=(1-x).∧6;>>y2=x.∧6-6*x.∧5+15*x.∧4-20*x.∧3+15*x.∧2-6*x+1;>> figure(3)>> plot(x,y1,x,y2,’r’)Si ottiene il grafico

0.9950.9960.9970.9980.999 1 1.0011.0021.0031.0041.0051.006-5.0e-15

0.0e+0

5.0e-15

1.0e-14

1.5e-14

2.0e-14

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

>> delta=0.0025;>> x=linspace(1-delta,1+delta);>> y1=(1-x).∧6;>>y2=x.∧6-6*x.∧5+15*x.∧4-20*x.∧3+15*x.∧2-6*x+1;>> figure(4)>> plot(x,y1,x,y2,’r’)Si ottiene il grafico

0.99750.9980.99850.9990.9995 1 1.00051.0011.00151.0021.00251.003-7.0e-15

-6.0e-15

-5.0e-15

-4.0e-15

-3.0e-15

-2.0e-15

-1.0e-15

0.0e+0

1.0e-15

2.0e-15

3.0e-15

4.0e-15

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Osservando i precedenti grafici, deduciamo che le rappresentazionigrafiche ottenute utilizzando le espressioni y1 e y2 si discostano l’unadall’altra sempre di piu al diminuire di δ.

Infatti, mentre y1 rimane fedele al reale andamento del polinomio, y2ha un andamento sempre piu oscillante (come se avesse tanti zeri!).

Tali oscillazioni sono dovute al fenomeno della cancellazionenumerica che si verifica quando in y2 si esegue la somma tra

x6 − 6x5 + 15x4 − 20x3 + 15x2 − 6x e 1

per valori molto vicini a 1 (x6 − 6x5 + 15x4 − 20x3 + 15x2 − 6x < 0per ogni x ∈ [−1, 1]).

Osserviamo che il suddetto fenomeno, seppure non evidentegraficamente, si verifica anche quando in y1 si esegue la sottrazionetra 1 e x per valori di x molto vicini a 1.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica

Tuttavia, essendo(1− x)6 � (1− x),

le quantita

x6 − 6x5 + 15x4 − 20x3 + 15x2 − 6x e 1

hanno piu cifre in comune delle quantita 1 e x.

Ne consegue che nella valutazione di y2 si ha una perdita di precisionemaggiore rispetto a y1.

Dott.ssa Maria Carmela De Bonis Dipartimento di Matematica, Informatica e Economia Universita della Basilicata a.a. 2014-15Corso di Matematica per la Chimica