Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

Mètodes Numèrics i Aplicacions Informàtiques

Biotecnologia, curs 2021-2022


Pràctica dissenyada per la professora Regina Martı́nez

Pràctica 3

1 Errors
1.1 Objectiu
Els càlculs numèrics en general no són exactes. Els errors en el resultat calculat provenen
principalment dels errors en les dades, dels errors d’arrodoniment i dels errors de truncament
del mètode. En aquesta pràctica veurem alguns dels efectes provocats pels errors en les dades i
els d’arrodoniment i com evitar-los en la mesura que sigui possible.

1.2 Representació dels nombres en punt flotant


Un nombre real, x, té en general un nombre infinit de dı́gits i el podem escriure com
x = ±0.d1 d2 d3 ....... · 10k , (1)
on k√és un nombre enter (exponent), i cada dj és un dı́git (0,1,2,....9) amb d1 6= 0. Per exemple
x = 16383 = 0.12799609369039.... · 103 .
Com que els ordinadors només poden guardar un nombre finit de dı́gits, digue’m t dı́gits, la
part decimal 0.d1 d2 d3 ....... (anomenada mantissa) s’ha de truncar o arrodonir a t dı́gits i per tant
el nombre no es guardarà de manera exacta. Aixı́, el que es té a la màquina és una representació
de x que denotem per f l(x) i que anomenem representació en punt flotant de x. En general,
f l(x) s’obté arrodonint (no truncant) 0.d1 d2 d3 ....... a un nombre finit de dı́gits.
Octave treballa amb (aproximadament) 16 dı́gits decimals. De fet, no són exactament 16 ja
que els nombres es guarden en base 2, i el que està fixat és el nombre de dı́gits en base 2 (que
és igual a 52). Si per exemple considerem el nombre 7/8 = 0.875, com que
7 1 1 1
= + 2+ 3
8 2 2 2
aquest nombre en base 2 és x = 0.1112 . Com que en base 2 només té 3 dı́gits la màquina el
guarda de forma exacta i tenim que f l(7/8) és exactament igual a 7/8. Veiem un altre exemple.
El nombre x = 0.1 en base 2 té infinits dı́gits, de fet s’escriu com x = 0.000110011....2 = 0.000112 .
Per tant f l(0.1) 6= 0.1 de manera que octave sempre treballarà amb una aproximació del nombre
0.1. De forma similar per π = 3.141592653589793238462643....., es té que f l(π) 6= π i per tant
la representació en punt flotant de π té un error.
Per simplificar, en general pensarem en els nombres en base 10 i que f l(x) s’obté arrodonint
el nombre x a uns 16 dı́gits decimals.
1
Per altra banda observem que el nombre x = 1 + · 10−18 = 1.0000000000000000005 ar-
2
1
rodonit a 16 dı́gits decimals és igual a 1, per tant f l(1 + · 10−18 ) = 1, és a dir, octave no
2
1
distingueix entre el nombre 1 i el nombre 1 + · 10−18 .
2
El epsilon de la màquina, m , és la distància entre 1 i el següent nombre representable a la
màquina (el seu valor depèn de la màquina).

1
Llavors, el màxim error relatiu en representar un número x en punt flotant és

f l(x) − x m

x 2

La variable eps d’octave conté m . Podeu coneixer el seu valor fent


>> eps
Exercici 2.1
Calculeu els següents nombres:
(1 + m ) − 1, (1 + 0.5m ) − 1
Com expliqueu els resultats obtinguts ?

Per altra banda no es poden representar a la màquina nombres amb un valor absolut ar-
bitràriament gran ni arbitràriament petit ja que per guardar l’exponent k (veure (1)) l’ordinador
també disposa d’un espai finit.
El nombre més gran i el més petit (aproximadament) representables en Octave els podem
obtenir fent
>> realmax
>> realmin

Si es sobrepassa el valor de realmax es produeix un overflow i octave retorna Inf. Els valors
que quedin per sota del mı́nim es prenen iguals a 0. A part de la variable Inf, octave disposa
d’una altra variable especial NaN (’Not a Number’) per indicar una indeterminació (0/0, ∞ − ∞,
...).
ˆ Exemple
e−x
Considerem la funció g(x) = 6 . Noteu que g(x) 6= 0 per a tot x 6= 0. A continuació avaluem aquesta
x
funció en alguns punts.
>> g=@(x)exp(-x)/xˆ6;
>> x1=g(-500), x2=g(-1000)
x1 = 8.9830e+200
x2 = Inf % veiem que el valor calculat de g(-1000) és més gran que realmax
>> y1=g(500), y2=g(1000)
y1 = 4.5597e-234
y2 = 0 % ara el valor calculat de g(1000) és menor que el mı́nim nombre
representable.

Exercici 2.2
1. Definiu les següents funcions
x4 − 1 1
g1 (x) = , g2 (x) = .
x4 + x3 − 6x2 − x + 5 1 − ex−1
Com interpreteu la resposta d’octave a les instruccions següents ?
>> g1(1)
>> g2(1)
2. Quina resposta dona octave a la instrucció tan(3 pi/2) ? Com interpreteu aquest
resultat ?

2
1.3 Aritmètica de punt flotant

A part dels errors deguts a la representació finita dels nombres reals també s’introdueixen errors
quan es realitzen operacions aritmètiques (errors d’arrodoniment). Noteu que en general, el pro-
ducte de dos nombres de t dı́gits tindrà 2t dı́gits. Amb octave si 2t > 16 el resultat s’arrodonirà
a 16 dı́gits (aproximadament) i per tant tindrem un error en el producte. És a dir, en general
f l(xy) 6= xy encara que x, y siguin exactes.
ˆ Exemple
Calculem el producte de dos nombres a=456.789, b=6.54321.
>> a=456.789; b=6.54321;
>> r=a*b
r = 2988.86635269000 % noteu que a i b tenen 6 dı́gits i el producte r, té 12 dı́gits

En una màquina que treballi amb 6 dı́gits (decimals), el resultat seria 2988.87.

Anomenem errors d’arrodoniment aquest tipus d’errors, és a dir, a la diferència entre el resultat
obtingut i el que es tindria si tots els càlculs es fessin de manera exacta.
Com que les operacions usant aritmètica de punt flotant en general no donen el mateix resultat
que si es fessin de manera exacta, no tenen perque complir les mateixes propietats que les
operacions matemàtiques. Expressions matemàticament equivalents poden no ser-ho quan es
treballa en punt flotant. A continuació en veurem alguns exemples.
ˆ Exemple
D’acord amb la propietat associativa de la suma, donats tres nombres reals qualsevols a, b, c es compleix
que (a + b) + c = a + (b + c). Usant aritmètica de punt flotant això no sempre es compleix.
>> a=0.876456e-10; b=412345; c=-412345;
>> r1 = (a+b)+c, r2 = a+(b+c)
r1 = 1.16415321826935e-10
r2 = 8.76456000000000e-11
Noteu que només r2 dona el resultat correcte !

Exercici 3.1
Definiu les funcions f (x) = exp(x2 ), i g(x) = x10 .
Si a = f (25), b = g(14000), c = −b + 1000 , calculeu a(b + c) i ab + ac . Comenteu els
resultats.

1.4 Cancel·lació
Els errors d’arrodoniment durant els càlculs són inevitables i encara que acostumen a donar
errors petits en alguns casos no és aixı́. Una d’aquestes situacions es produeix quan es resten
dues quantitats de magnituds similars donant lloc a una pèrdua important de dı́gits significatius.
Aquest fenòmen es coneix com cancel·lació.

Exercici 4.1
 
6 11
Per a la matriu A =
1 2

1. Calculeu les matrius Aj per j = 8, 9, 10, 11, 12.


2. Usant la funció d’octave det calculeu els determinants de les matrius Aj de l’apartat
anterior.

3
3. Calculeu el determinant de les matrius anteriors directament usant que
 
a b
det = ad − bc
c d

Comenteu els resultats.

ˆ Exemple
Considerem la funció p
g(x) = 10( x8 + 200 − x4 )
Volem representar gràficament g i estudiar l’error comés en la seva avaluació.
Obriu un fitxer amb nom EG.m amb les següents instruccions
% EG.m
clear;
g=@(x) 10.*(sqrt(x.ˆ8.+200).-x.ˆ4);
t=linspace(100,130,300); % genera 300 punts equiespaiats entre 100 i 130
yg=g(t);
plot(t,yg,’r’) % fa la gràfica de g a l’interval [100, 130]

A la finestra de comandes executeu el programa fent


>> EG

Exercici 4.2
Utilitzeu el programa anterior per representar gràficament la funció g a l’interval [100, 150].
Noteu que la funció g és contı́nua a R. La gràfica obtinguda és la que podem esperar d’una
funció contı́nua ? Com expliqueu la gràfica obtinguda ?

ˆ Exemple (continuació de l’exemple anterior)



Noteu que per a valors grans de x, x8 + 200 ≈ x4 de manera que cal esperar que hi hagi un problema de
cancel·lació. Per avaluar g1 evitant la cancel·lació podem usar la fòrmula alternativa que s’obté multiplicant
i dividint pel conjugat, és a dir,
p 2000
10( x8 + 200 − x4 ) = √
( x8 + 200 + x4 )
Per g tenim dues expressions
p 2000
g1 (x) = 10( x8 + 200 − x4 ), g2 (x) = √
( x8 + 200 + x4 )
que són equivalents matemàticament en el sentit que, si tots els càlculs es fessin de manera exacta donarien
el mateix resultat.

Exercici 4.3

1. Definiu les funcions


p 2000
g1 (x) = 10( x8 + 200 − x4 ), g2 (x) = √
( x + 200 + x4 )
8

Calculeu g1 (20) i g2 (20).


2. Representeu gràficament en una mateixa finestra les gràfiques de g1 i g2 a l’interval
[100, 150].

4
1.5 Problemes mal condicionats
Alguns problemes són molt sensibles a variacions en les dades inicials en el sentit que petits canvis
relatius en les dades poden donar lloc canvis relatius grans en la solució (“efecte papallona”).
Diem que aquests problemes estan mal condicionats.

Exercici 5.1 Considerem el polinomi de grau 8

P (x) = (x − 1)(x − 2)(x − 3) . . . (x − 8)

1. Doneu els coeficients de x7 i de x3 d’aquest polinomi.


2. Definiu el polinomi
Q(x) = P (x) − 0.0005x7
i calculeu les arrels de Q. Observeu com un petit canvi en un coeficient de P (petit canvi
en les dades) afecta a les arrels del polinomi.
3. Representeu gràficament P i Q conjuntament en una mateixa finestra.

You might also like