Anda di halaman 1dari 117

Universidad Politcnica de MadridEscuela Tcnica Superior de Ingenieros Industriales

Grado en Ingeniera en Tecnologas Industriales. Curso 2016-2017-3


Matemticas de EspecialidadIngeniera Elctrica

Fundamentos
de la

Ingeniera Matemtica y sus Algoritmos

Jos Luis de la Fuente OConnor


jldelafuente@etsii.upm.es
joseluis.delafuente@upm.es
Clase_fundamentos_2017.pdf

1/117

2/117

ndice


Introduccin y conceptos bsicos

Representacin de un nmero en formato estndar IEEE

Aritmtica en un ordenador

Evaluacin de errores

Clculo numrico con matrices

Producto de una matriz por un vector

Producto de dos matrices

Normas


Vectoriales

Matriciales

3/117

Introduccin


En nuestro quehacer diario, consciente e inconscientemente, realizamos muchas


operaciones numricas que confiamos ciegamente a los algoritmos numricos,
ordenadores y mquinas a nuestro alcance.

Como ingenieros1, en importante que conozcamos qu hacen y cmo esos


algoritmos, o qu procedimientos formales siguen, pues son la fuente de muchas
posibles mejoras, as como de problemas prcticos de interpretacin y precisin
de los resultados.

Calculemos, por ejemplo, el valor de un polinomio,


p.x/ D 2x 4 C 3x 3
en el punto x D 1=2.

Pues somos esencialmente los que los producimos.

3x 2 C 5x

1;

4/117

Supongamos que toda la informacin y los datos que se necesitan para hacer
esta operacin estn adecuadamente guardados en el ordenador.
Cules deberan ser?

De acuerdo con nuestros conocimientos de este momento, la primera forma que


se nos puede ocurrir para evaluar el polinomio en el punto dado procedera ms
o menos as:

p 21 D 2  12  21  12  12 C 3  12  12  12 3  21  12 C 5  21 1 D 54 .

El nmero total de multiplicaciones que realizamos es 10; el de sumas/restas, 4.

5/117

Una segunda forma podra consistir en hacer lo siguiente



1 2
1
1
 2 D 2 D 14 ! y guardarlo
2


1 2
1 3
1
D

! y guardarlo
2
2
2


1 4
1 3
1

D
! y guardarlo
2
2
2
y luego

1
2

D2


1 4
2

C3


1 3
2

3


1 2
2

C 5  21

1 D 45 .

El nmero total de multiplicaciones en este caso es 3, para las potencias de 12 ,


ms 4 despus. Las sumas y restas son las mismas.

Es evidente que si esto hay que hacerlo muchas veces, el ahorro en tiempo de
esta segunda forma de proceder puede ser muy significativo, no?

6/117

Se puede hacer mejor an? Consideremos el polinomio reescrito as:


p.x/ D
D
D
D


1 C x 5 3x C 3x 2 C 2x 3


2
1Cx 5Cx
3 C 3x C 2x




1Cx 5Cx
3 C x 3 C 2x


1Cx 5Cx

y evalumoslo de dentro hacia afuera

1
2



3Cx 3Cx2

1
2

 2; ms 3 D 4

1
2

 4; ms

3D

 . 1/; ms 5 D
1
2

 92 ; ms

9
2

1 D 45 :

7/117

Esta forma de actuar se conoce como regla de Horner, o multiplicacin


anidada, por William George Horner, Inglaterra, 1786-1837.

Necesita 4 multiplicaciones y 4 sumas. Si el polinomio es de grado d , se


necesitarn d multiplicaciones y d sumas.

8/117

Lo que acabamos de exponer es el paradigma de una de las cuestiones bsicas


que vamos a destacar recurrentemente en este curso:


Los ordenadores son muy rpidos haciendo cosas muy sencillas.

Con ellos, las cosas muy sencillas, sobre todo las que se repiten
indefinidamente, hay que hacerlas de forma ptima: ingeniera.

La mejor forma de hacer ciertas cosas y clculos no siempre es la ms obvia.


La mayora de las ideas fundamentales de la ciencia son
esencialmente sencillas y, por regla general, pueden ser
expresadas en un lenguaje comprensible para todos
Albert Einstein. 1879-1955.
En igualdad de condiciones la solucin ms sencilla es
probablemente la correcta
Guillermo de Ockham. 1285-1347.

Para terminar con estas consideraciones previas, cualquier polinomio como


c1 C c2x C c3x 2 C c4x 3 C c5x 4
se puede escribir as




c1 C x c2 C x c3 C x c4 C x.c5/
;
e incluso as

c1 C .x


r1/ c2 C .x


r2/ c3 C .x

r3/ c4 C .x



r4/.c5/
;

donde r1, r2, r3 y r4 son los que se conocen como puntos de base.

Este cdigo de Matlab


hace todo el trabajo.

function y=Horner(d,c,x,b)
% Con regla de Horner se evala el polinomio de grado d,
%
definido en el vector c, en el punto x (puede ser vector).
%
Entrada: c(d+1), coeficientes del polinomio: c1, c2,...;
%
x, punto (vector) en el que se evala el polinomio;
%
b, puntos base, si es el caso.
%
Salida: y, valor del polinomio en x
%
if nargin<4, b=zeros(d,1); end
y=c(d+1);
for i=d:-1:1
y = y.*(x-b(i))+c(i);
end
end

9/117

10/117

function y=Horner(d,c,x,b)
% Con regla de Horner se evala el polinomio de grado d,
%
definido en el vector c, en el punto x (puede ser vector).
%
Entrada: c(d+1), coeficientes del polinomio: c1, c2,...;
%
x, punto (vector) en el que se evala el polinomio;
%
b, puntos base, si es el caso.
%
Salida: y, valor del polinomio en x
%
if nargin<4, b=zeros(d,1); end
y=c(d+1);
for i=d:-1:1
y = y.*(x-b(i))+c(i);
end
end

Hagmoslo funcionar de varias maneras en el escritorio de Matlab:


>> Horner(4,[-1 5 -3 3 2],1/2)
ans =
1.250000000000000
>> Horner(4,[-1 5 -3 3 2],1/2,[0 0 0 0])
ans =
1.250000000000000
>> Horner(4,[-1 5 -3 3 2],[-2 -1 0 1 2])
ans =
-15
-10
-1
6
53

11/117

Algunos conceptos bsicos


Nonlinear optimization: motivation, past and perspectives

History

(300 2BC)
Al-Khwarizmi
Un Euclid
algoritmo
es un conjunto
ordenado(783-850)
y finito de operaciones y reglas que
permite hallar la solucin de un problema, o realizar una actividad relativamente
compleja.



lgebra

Al-Khwarizmi (783-850)
'H:LNLSHGLDODHQFLFORSHGLDOLEUH

De Muhammad ibn Musa al-Khwarizmi, sabio persa considerado April


uno2009
de(Olgebra GHOiUDEHalabr
UHL
los30padres
)
/ 323 del lgebra (
que escribi entre los aos 800 y 825 la obra Quitab Al Jabr Al Mugabala,
donde se recoga el sistema de
PDWHPiWLFDTXHHVWXGLDODFRPELQDFLyQ
numeracin indio y el concepto de cero.
D FLHUWDV UHJODV 2ULJLQDOPHQWH HVRV

Philippe Toint (Namur)

12/117

La velocidad de los algoritmos para realizar operaciones numricas y sus


prestaciones y precisin dependen en gran medida de la exactitud con la que se
pueden representar los nmeros, datos y las operaciones en la mquina donde se
han de ejecutar.

Para disear algoritmos y codificarlos en un lenguaje que interprete la mquina


es aconsejable conocer cmo opera la aritmtica de esa mquina y los
parmetros esenciales de su sistema de numeracin.

Los ordenadores y calculadoras guardan informacin numrica y alfanumrica


que se les suministran mediante una aproximacin numrica, o cdigo, de los
mismos.

En general, lo hacen empaquetndolos en grupos de bits unidad bsica,


denominados bytes (grupos de 8 bits).

13/117

Los ordenadores tienen varias formas estndar de representar un dato numrico:





Formato entero sin decimales (integer) o


Formato de coma o punto flotante (real): nuestro formato
decimal3.

Adems del integer y el real, se gestionan otros tipos de datos:


char/string Para almacenar o manipular caracteres alfanumricos
logical Para designar variables o valores que slo admiten el 1 o el 0 o el
verdadero o falso
single/double Para almacenar variables o datos numricos en precisin
sencilla 4 bytes o doble 8 bytes. Lo habitual en Matlab es double
complex Para almacenar variables complejas, cuando no se quiere guardar la
parte real y la imaginaria por separado.
3

De origen indo-arbigo entre los siglos IV y VI, transmitido a Europa gracias a la Escuela de Kerala, India.

14/117

La representacin de un nmero entero en un ordenador en formato entero es


exacta, siempre y cuando su valor est comprendido dentro de los lmites que
admite la mquina.

En formato real slo es posible representar un conjunto finito de nmeros, F , de


la recta real (F  R), formado por elementos de la forma


dp
d1 d2
C 2 C    C p  e
f D

D 0; d1d2    dp  e
donde: es la base de numeracin, 0  di  1; i D 1; : : : ; p ;
p el nmero de dgitos significativos, o longitud de mantisa (precisin);
e el exponente, L (underflow)  e  U (overflow).

La ristra de dgitos d1, d2, : : :, dp se denomina mantisa.

15/117

Mquina

Precisin
Simple
IEEE st. 754-1985 normali. Doble
Extendida
Simple
Doble
IBM mainframe
Extendida
Simple
Cray (superordenador)
Doble
Calculadoras HP

2
2
2
16
16
16
2
2
10

p
24
53
64
6
14
28
48
96
12

L
U
126
127
1022 1023
16381 16384
64
63
64
63
64
63
8192 8191
16383 16384
499
499

Parmetros de los sistemas de numeracin de varias mquinas

16/117

Normalizacin


Un sistema de numeracin se dice normalizado si el primer dgito de la mantisa


es siempre distinto de cero al representar cualquier nmero que no es cero.
Ventajas: I. En binario el primer dgito es siempre 1, por lo que no es necesario
guardarlo. Cualquier nmero sera 1;bbb : : : bb  2p .
II. Una nica representacin de un nmero.

III. No se malgastan dgitos (ceros) a la izquierda del primero no


cero.


En un sistema normalizado un nmero distinto de cero f est acotado de la


siguiente manera:
L  jf j  U C1.1 p /:

17/117

El conjunto F de nmeros de una mquina representables exactamente no es


evidentemente infinito: tiene un nmero de elementos fijo igual a
2.

1/ p 1.U

L C 1/ C 1

2: dos opciones de signo.

: posibles valores por cada uno de los p


mantisa, incluyendo el cero.

1: posibles valores del dgito ms significativo de la mantisa.


1 dgitos restantes de la

L C 1 valores posibles del exponente.

Estos elementos no estn igualmente espaciados sobre la recta real sino en


potencias sucesivas de .


Si el nmero que se quiere representar es uno de estos elementos, se guardara


en su exactitud; si no, una aproximacin.

18/117

Ejemplo Si se trabaja en una mquina normalizada en la que D 2, p D 2


(realmente habra 3 dgitos) , L D 1 y U D 1, los 25 elementos del conjunto
F de esa mquina son los representados por muescas en azul en la recta de la
figura Ms ejemplos aqu.

3;5

2;5

1;5

0;5

0;5

1;5

El nmero ms grande positivo representable es


.1;11/2  21 D 2  1 C 1=2 C 1=22

2;5

D 2  .1 C 0;5 C 0;25/ D 3;510I

el ms pequeo en valor absoluto,


.1;00/2  2

D 0;510:

3;5

Desnormalizacin

19/117

Desnormalizacin

La normalizacin produce un vaco de nmeros en torno al 0. La


 La normalizacin produce un vaco de nmeros en torno al 0.
desnormalizacin,
que permite
hayacuando
ceros
en los primeros
dgitos
de la
La desnormalizacin
facilitaque
rellenarlo
el exponente
del nmero sea
el
mnimo,
permitiendocuando
que haya ceros
en los dgitos ms
de lael mnimo.
mantisa, facilita
rellenarlo
el exponente
del significativos
nmero sea
mantisa.

3;5

1;5

0;5

0;5

1;5

2;5

3;5

 En de
el sistema
de juguete
anterior,elel vaco
vaco central
se podra
rellenar con
En el sistema
juguete
anterior,
central
se podra
rellenar con
elementos cuya mantisa no empieza por 1. Se podran aadir 3 ms a cada lado
elementos cuya
mantisa no empieza por 1.
del cero, siendo el ms pequeo positivo representable el

.0;01/2  2

2;5

D .0;125/10.

Se podran aadir
3 ms a cada lado del cero, siendo el ms pequeo positivo
La desnormalizacin ampla el rango de nmeros representables, aunque la
representable el .0;01/2  2 1 D .0;125/10.
19/133

La desnormalizacin ampla el rango de nmeros representables, aunque la


precisin de esos de ms es menor que la general al tener menos dgitos no cero.
d

10

20/117

Sistema binario de numeracin




Es el sistema de numeracin universal, con el que trabajan casi todas las


mquinas de clculo electrnicas y ordenadores a nuestra disposicin.

En este sistema, cualquier nmero se expresa

   b2b1b0;b 1b 2   

donde cada dgito binario, o bit, es 0 1.

En el sistema decimal, de base 10, el equivalente a ese nmero cualquiera sera


el resultado de
   b222 C b121 C b020 C b 12

C b 22

 :

El nmero 4 en base 10 sera en binario 1002 y 3=410 sera 0;112.

21/117

Para convertir cualquier nmero del sistema decimal al binario habra que hacer
lo siguiente:
Parte entera Se divide por 2 sucesivamente y se guardan los restos, 0 1,
de cada divisin.
Esos restos se ordenan desde el primero al ltimo y se disponen de derecha a
izquierda. El conjunto de dgitos obtenido es la representacin en binario.
Por ejemplo, con 53;7 hacemos
53  2 D 26 r
26  2 D 13 r
13  2 D 6 r
62D 3r
32D 1r
12D 0r

1
0
1
0
1
1:

El nmero 5310 es en binario 1101012.


Comprobando 1101012 D 25 C 24 C 22 C 20 D 32 C 16 C 4 C 1 D 5310.

22/117

Parte fraccionaria Se hace el proceso inverso: se multiplica la parte


fraccionaria por 2 y se guardan las partes enteras.
Al final se disponen los enteros obtenidos, sucesivamente, a la derecha de la
coma. Con 53;7:
0;7  2 D 0;4 C 1
0;4  2 D 0;8 C 0
0;8  2 D 0;6 C 1
0;6  2 D 0;2 C 1
0;2  2 D 0;4 C 0
0;4  2 D 0;8 C 0
:::
Se ve que el proceso llega un momento que se repite indefinidamente cada
cuatro pasos. Es decir,
0;7 D 0;101102:
En resumen, el nmero 53;710 es en binario 110101;101102.

23/117

Para convertir cualquier nmero de binario a decimal:


Parte entera Se suman las sucesivas potencias de 2. Por ejemplo,
101012 D 1  24 C 0  23 C 1  22 C 0  21 C 1  20 D 2110.

Parte fraccionaria Si es finita, se procede de forma similar, por ejemplo


 
1
1
1
1 1
1
11
0;10112 D C 3 C 4 D C C
:
D
2 2
2
2 8 16
16 10
Si es infinita, lo ms fcil es usar el desplazamiento por potencias de 2.
Por ejemplo, si se quiere convertir a base 10 el nmero x D 0;10112,
primero se multiplica por 24, lo que desplaza la coma cuatro posiciones a la
derecha; luego se resta el original:
24  x D 1011;1011

x D 0000;1011:

24/117

Restando
24


1  x D 10112 D 1110:

Luego se despeja x, quedando que x D 11=1510:


 Otro ejemplo: x D 0;10101.

Primero se multiplica por 22: y D 22  x D 10;101. La parte entera es 2 y


con la parte fraccionaria, z D 0;101, se procede como antes:
23  z D 101;101

z D 000;101:

De aqu, restando, 7z D 5, por lo que la parte fraccionaria es z D 5=7.


El resultado 22  x D y D 2 C 5=7, por lo que x D 2 2y D 19=2810.

25/117

Formatos habituales para presentar al usuario la informacin que un ordenador


guarda de un nmero en binario:
Decimal Binario Octal (base 8) Hexadecimal (base 16)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
10000
10001

0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
20
21

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11

26/117

Por ejemplo,
>> format hex
>> 1
ans =
3ff0000000000000
>> 9.4
ans =
4022cccccccccccd
>> 1/0
ans =
7ff0000000000000
>> 0/0
ans =
fff8000000000000

27/117

Formato binario estndar de aritmtica en


coma flotante de IEEE
Precisin doble palabra de 64 bits y normalizado
63 62

52 51

Exponente

es el bit de signo: 0 para nmeros positivos; 1 los negativos.

El exponente (11 bits) no tiene bit de signo: cualquier exponente4 es


0  Exp  2047. Para que sea siempre positivo tiene un sesgo, el nmero
1023 D 210 1.

Cualquier dato numrico: . 1/S  2.Exp


4

2047 D 211

Mantisa

1023/

 1;M ant i sa:

28/117

Si Exp D 2047 y M 0, el valor es NaN ("Not a number").

Si Exp D 2047 y M D 0, el valor es -Inf si S D 1; Inf, si S D 0.

Si Exp D 1 y M D 0, el valor es el ms pequeo representable: 2

Si Exp D 0 y M 0, valores desnormalizados, el valor es


. 1/S  2 1022  0;M ant i sa.

Si Exp D 0, M D 0 y S D 1, el valor es -0.

Si Exp D 0, M D 0 y S D 0, el valor es 0.

1022

29/117

En el caso de 1 D C1; 0000000000000000000000000000000000000000000000000000


codificacin interna es

 20 ,

su

0 01111111111 0000000000000000000000000000000000000000000000000000
una vez se aade 1023 al exponente. Entonces 0011111111112 D 3FF16.


El siguiente nmero mayor que 1 con este formato estndar es


C1; 0000000000000000000000000000000000000000000000000001  20;
o 1 C 2 52. Interno 0 01111001011 0000000000000000000000000000000000000000000000000000
El exponente es 0011110010112 D 3CB16 D 97110. Es decir, 2971 1023 D 2 52.
Definicin Se denomina epsilon de una mquina, maq
K , a la distancia entre 1 y el

nmero ms pequeo mayor que uno del sistema de numeracin de esa mquina. Si es el
52
IEEE estndar de precisin doble, maq
:
K D2

30/117

>> format hex; 1


ans =
3ff0000000000000
>> 9.4
ans =
4022cccccccccccd
>> 1/0, 0/0
ans =
7ff0000000000000
ans =
fff8000000000000
>> eps
ans =
3cb0000000000000

Volviendo a lo anterior,

El nmero 9;4 D 1001;0110 se guarda as:


0 10000000010 0010 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1101 D 4022C C C C C C C C C C CD.

La mantisa se ha troceado en grupos de 4 bits para hacerlos corresponder con el


formato hexadecimal. El exponente es 1023 C 3 D 1026 D .10000000010/2.
Aadiendo el bit de signo, los doce primeros bits, en hexadecimal, resultan
40216.
Al ajustar el nmero, se pierde algo, no?

31/117

Los otros resultados corroboran la representacin interna de 1=0 D 1 y


0=0 D NaN.

Juguemos un poco ms con estos conceptos mediante Matlab


>> 1+2^-52
ans =
1.000000000000000
>> 1+2^-53==1
ans =
1
>> 1+2^-52==1
ans =
0
>> 2^-53
ans =
1.110223024625157e-016
>> ans*2
ans =
2.220446049250313e-016
>> eps
ans =
2.220446049250313e-016

32/117

Para calcular el epsilon de una mquina se puede utilizar epsilon.m, un script


de Matlab, como el que sigue.
function eps=epsilon
eps=1;
while 1+eps~=1
eps=eps/2;
end
eps=eps*2;
end

Los resultados son:

>> eps1=epsilon
eps1 =
2.220446049250313e-016
>> eps
% El de Matlab
eps =
2.220446049250313e-016

33/117

Precisin sencilla palabra de 32 bits y normalizado


31 30
S

23 22

Exponente

Valores tpicos

Mantisa

Exp

Valor

11111111

00000100000000000000000

NaN

11111111

00100010001001010101010

NaN

11111111

00000000000000000000000

10000001

10100000000000000000000

10000000

00000000000000000000000

00000001

00000000000000000000000

00000000

10000000000000000000000

00000000

00000000000000000000001

00000000

00000000000000000000000

1
C1  2129 127  1;101 D 6; 5
C1  2128 127  1;0 D 2
C1  21 127  1;0 D 2 126
C1  2 126  0;1 D 2 127
C1  2 126  2 23 D 2 149

00000000

00000000000000000000000

10000001

10100000000000000000000

11111111

00000000000000000000000

-0

1  2129
1

127

 1;101 D

6; 5

IEEE precisin simple VS precisin doble


Precisin simple
dgitos significativos (p)
24 bits
longitud del exponente
8 bits
bits de informacin
32
emax
127
emi n
-126
valor ms grande normalizado 2127  1038
valor ms pequeo normalizado 2 126  10 38
maqui
21 24  10 7
K
na

Precisin doble
53 bits
11 bits
64
1023
-1022
21023  10308
2 1022  10 308
21 53  10 16

Precisin simple Precisin doble


Exp D 0
0

M D0
M 0 desnormalizados

0 < Exp < 255 0 < Exp < 2047 Exp D 255.s/ 2047.d/
potencias de 2
1

nmeros ordinarios

NaN

34/117

35/117

Los nmeros positivos ms grande y ms pequeo que Matlab puede


representar en precisin doble son:
fmi n
fmax

D2

D .1

fmi ndesnor: D 2

1022

D 2;225073858507201  10
53

1022 52

308

/  21024 D 1;7976931348623157  10308


D 4;940656458412465  10

324

Variable Precision Arithmetic


>> digits(35)
>> vpa((1-2^(-53))*2^1024)
ans =
1.7976931348623157081452742373170436*10^308
>> (1-2^(-53))*2^1024
ans =
Inf
>> 2^(-1022)
ans =
2.225073858507201e-308

36/117

Comprobamos utilizando realmax y realmin de Matlab.


>> realmin
ans =
2.225073858507201e-308
>> realmax
ans =
1.797693134862316e+308
>> realmax*2
ans =
Inf
>> realmin/2
ans =
1.112536929253601e-308
>> realmin/(2^52)
ans =
4.940656458412465e-324
>> ans/2
ans =
0
>> vpa(2^(-1028))
ans =
3.4766779039175021610784886208318814*10^(-310)

37/117

Codificacin o representacin de un nmero




Para ver cmo codifica el estndar IEEE un nmero, volvamos a


9;4 D .1001;0110/2.

En principio, en precisin doble, este nmero se ve as


C1; 0010110011001100110011001100110011001100110011001100 110 : : :  23;
con los primeros 52 bits de la mantisa encuadrados o encajados en el
compartimento reservado por la mquina para l.

38/117

Ahora bien, cmo se encaja adecuadamente una ristra infinita de decimales


binarios en el sistema de numeracin de IEEE?


Truncndola o cortndola? Es decir, abandonando o ignorando los que no


caben en esa caja.

Redondendola? En otras palabras, haciendo algo ms inteligente para que


se pierda la menor cantidad de informacin de ese nmero.

El modelo general de cmo un ordenador representa en coma flotante


(formato decimal) un nmero lo definen
el conjunto G D fx 2 R W m  jxj  M g [ f0g y la aplicacin f l./ W G ! F
tales que
f l.x/ D

el elemento c 2 F ms prximo a x , si se redondea;


el c 2 F ms cercano a x que satisfaga jcj  jxj, si se trunca.

39/117

El redondeo y truncamiento en una mquina ficticia que trabajase con D 10 y


con p D k sera:


Truncando, el nmero

x D C0;d1d2d3 : : : dk dkC1dkC2 : : :  10n


perdera los dgitos dkC1; : : : quedando C0;d1d2d3 : : : dk  10n.


Redondeando, se aadira 5  10n .kC1/ al nmero en cuestin y luego se


truncara.
Ejemplo Si p D 3 en una mquina, el nmero 0;3246 se representara con
0;324 truncando y con 0;325 redondeando.

El error de redondeo interno de una mquina es debido a ese truncamiento o


redondeo.

40/117

La tcnica o regla de redondeo al ms cercano de IEEE consiste en sumar


un 1 al bit nmero 52 si el 53 es 1, o no hacer nada redondear por lo bajo en
el 52 si el 53 es 0.

Excepcin: Si los bits que siguen al 52 son 10000 : : : (a medio camino entre el
valor superior e inferior) se redondea de tal manera que el 52 sea siempre 0.

Con este criterio el nmero 9;4 quedara as:


C1; 0010110011001100110011001100110011001100110011001101  23:
Se ha desechado la ristra 0;1100  2 52  23 D 0;0110  2
y se ha sumado 2 52  23 D 2 49 al redondear.

51

 23 D 0;4  2

48

41/117

En resumen

f l.9;4/ D 9;4 C 2
D 9;4 C 1

49

0;4  2
 49
0;8 2

D 9;4 C 0;2  2

49

48

Cometindose as un error de redondeo al guardarlo de 0;2  2


guardarlo! codificarlo, o almacenarlo, dentro de la mquina.

49

. Slo por

Definicin El error absoluto de la representacin x  del nmero x en un ordenador


es jx

x  j.

El error absoluto de la representacin de un nmero x en un ordenador en su


sistema de coma, o punto, flotante es jx f l.x/j.

42/117

Definicin El error relativo de la representacin x  del nmero x en un ordenador


es

jx

El error relativo de redondeo del sistema de numeracin IEEE, f l.x/, est


acotado de la siguiente manera
jx

x j
.
jxj

x j 1
 maq
K :
jxj
2

El redondeo afecta a la representacin de todos los resultados de las operaciones


pues f l.x/ D x.1 C /, jj < 21 maq
K .

43/117

ndice


Introduccin y Conceptos bsicos

Representacin de un nmero en formato estndar IEEE

Aritmtica en un ordenador

Evaluacin de errores

Clculo numrico con matrices

Producto de una matriz por un vector

Producto de dos matrices

Normas


Vectoriales

Matriciales

44/117

Aritmtica en un ordenador


Proceso para sumar los nmeros 3 y 14:


310 = 1;100  21 D 1;100  21024
1410 = 1;110  23 D 1;110  21026
Alineamiento
310 = 0;011  21026
1410 = 1;110  21026
Suma

1023
1023

1023
1023

0;011
1;110
10;001 ) 10;001  21026 1023
D 1;0001  21027 1023 D 100012 D 1710

45/117

OJO! con los casos extremos de exponentes muy alejados.


>> x=2^30
x =
1.073741824000000e+009
>> 2^-22
ans =
2.384185791015625e-07
>> x+2^-22==x
ans =
0
>> x+2^-23==x
ans =
1
>> 2^-23
ans =
1.192092895507813e-07

46/117

El sistema de numeracin, F , de un ordenador tiene definidas entre sus


elementos las operaciones aritmticas habituales. Dada la finitud de F son
operaciones aritmticas de precisin finita.

Si 2 designa cualquiera de las cuatro operaciones aritmticas elementales C,


 y , y ja2bj 2 G antes definido, el resultado de cualquier cmputo o
clculo en ordenador con ellas dar como resultado f l.a2b/.

Cualquier operacin aritmtica en ordenador cumple que


f l.a2b/ D .a2b/.1 C /
donde jj < 21 maq
K .

47/117

Si las operaciones aritmticas elementales en una mquina se representan por


, , y , el resultado de aplicarlas ser siempre:
a b D f l.f l.a/ C f l.b//I
a b D f l.f l.a/ f l.b//I
a b D f l.f l.a/  f l.b// y
a b D f l.f l.a/  f l.b//:

El error relativo de cualquiera de estas operaciones es


ja2b

f l.a2b/j 1
 maq
K :
ja2bj
2

48/117

Ejemplo En una mquina D 10, p D 3 y la representacin se hace


mediante truncamiento.


La operacin aritmtica .10

C 1/

f lf l.10

1 dar como resultado


C 1/

1 D 0:

El error relativo es 1 (el 100 %). Por el contrario,


f l10

C f l.1

1/ D 10 3;

resultado exacto.

La aritmtica de coma flotante, por consiguiente, no es asociativa:


.1 C =2/ C =2 D 1, pero 1 C .=2 C =2/ > 1.
Ojo! Tampoco es distributiva: .a C b/  c a  c C b  c.

49/117

Con Matlab (comentarios bienvenidos!)




f l.x/ D 1 si 1 < x  1 C M .

f l.x/ D 1 C 2m si 1 C m < x < 1 C 2m.


>> e = 1 - 3*(4/3 - 1)
e =
2.2204e-016

>> a = 0.0;
for i = 1:10
a = a + 0.1;
end
a == 1
ans =
0

50/117

>> b = 1e-16 + 1 - 1e-16;


c = 1e-16 - 1e-16 + 1;
b == c
ans =
0

>> (2^53 + 1) - 2^53


ans =
0
>> 1+2^53-2^53
ans =
0
>> 1+(2^53-2^53)
ans =
1

>> sin(pi)
ans =
1.2246e-016
>>

51/117

Recordemos el nmero 9; 4:

>> format long


>> x=9.4
x =
9.400000000000000
>> y=x-9
y =
0.400000000000000
>> z=y-0.4
z =
3.330669073875470e-016
>> 3*2^-53
ans =
3.330669073875470e-016

El error en la codificacin de 3;4 era 0;2  2 49. Cuando se le resta 9 el error


sigue siendo el mismo pues la representacin de este nmero es exacta. El
nmero 0;4 tiene un error de representacin de f l.0;4/ D 0;4 C 0;1  2 52, lo
que hace que el error final sea

49
52
52 4
0;2  2
0;1  2
D 0;1  2
2
1 D 3  2 53:

52/117

Ejemplo Supongamos que se quiere operar con los nmeros x D


en una mquina con D 10 y p D 5 que usa truncamiento.

La representacin en esa mquina de esos nmeros ser

1
3

eyD

f l.x/ D 0,33333  100 y f l.y/ D 0,71428  100:




Los resultados de diversas operaciones y sus errores son:


Operacin

Resultado

xy
y x
xy
yx

0,10476  101
0,38095  100
0,23809  100
0,21428  101

Valor Real Error Absoluto Error Relativo


22=21
8=21
5=21
15=7

0,190  10
0,238  10
0,524  10
0,571  10

4
5
5
4

0,182  10
0,625  10
0,220  10
0,267  10

4
5
4
4

5
7

Como el error mximo relativo es 0;267  10 4, la aritmtica de ese ordenador


para estos clculos produce errores satisfactorios.

Usemos u D 0;714251, v D 98765;9 y w D 0;111111  10 4.

53/117

La representacin en la mquina de estos nmeros ser

f l.u/ D 0,71425  100; f l.v/ D 0,98765  105 y f l.w/ D 0,11111  10 4:




Como muestra la tabla, y u produce un error absoluto pequeo pero un


error relativo bastante grande:
Operacin

Resultado

Valor Real Error Absoluto Error Relativo

y u
0,30000  10 4 0,34714  10 4
.y u/ w 0,27000  101 0,31243  101
.y u/ v 0,29629  101 0,34285  101
uv
0,98765  105 0,98766  105

0,471  10 5
0,424
0,465
0,161  101

0,136
0,136
0,136
0,163  10

La divisin posterior por w y multiplicacin por v amplifica el error absoluto


sin modificar el error relativo.

Por el contrario, la adicin del nmero grande v y el pequeo u produce un


error absoluto grande pero no un gran error relativo.

54/117

Evaluacin de diversos errores




Un algoritmo perfectamente diseado se puede utilizar en problemas mal


condicionados, en los cuales los errores tienden a crecer de una forma
incontrolada segn se llevan a cabo operaciones aritmticas.

La condicin de un problema es directamente proporcional a la sensibilidad de


los resultados a pequeas variaciones en los datos. Si la condicin es muy
grande, deben esperarse dificultades aunque los datos iniciales sean exactos,
pues los errores numricos tendern a amplificarse.

Tambin se pueden dar algoritmos inestables, que no tienen en cuenta esas


consideraciones a escala de operaciones individuales, u otras como vemos a
continuacin.

55/117

Error de cancelacin o prdida de relevancia


que debera dar 1.

Analicemos esta operacin,

El error de cancelacin, o de prdida de relevancia o significancia, se refiere a la


prdida de dgitos que conlleva la representacin final de ciertas operaciones
resta esencialmente entre nmeros de magnitud similar, o muy grandes y
muy pequeos, que dan un resultado con un nmero de dgitos representable
muy pequeo.

>> x=1.e-15; ((1+x)-1)/x


ans =
1.110223024625157e+000

56/117

Como sabemos, para llevar a cabo sumas y multiplicaciones, los nmeros son
primeramente convertidos a un formato de exponente comn. Si el
desplazamiento que ello conlleva en uno de los dos supera los dgitos
significativos que la mquina permite, se puede perder toda la informacin de
ese nmero, o introducir nueva errnea en el resultado final.
>> format long
>> a=0.483525656234498
a =
0.483525656234498
>> b=0.483525534699123
b =
0.483525534699123
>> a-b
ans =
1.215353749861592e-007

57/117

En el ejemplo de Matlab anterior, veamos qu pasa.


>> format long
>> x=1.e-15;
>> x
x =
1.000000000000000e-015
>> 1+x
ans =
1.000000000000001e+000
>> (1+x)-1
ans =
1.110223024625157e-015
>> 1+x
ans =
1.000000000000001e+000
>> ans-1
ans =
1.110223024625157e-015
>> ans/x
ans =
1.110223024625157e+000

58/117

Ejemplo Considrese la funcin f .x/ D .1 cos x/=x 2.


Si x D 1;2  10 5, el valor de cos x, redondeado a diez5 dgitos significativos, es
c D 0;9999999999
por lo que
1
La representacin interna de 1

c D 0;0000000001:

c slo posee un dgito real.

>> vpa(1-cos(0.000012),10)
ans =
.1e-9
>> vpa(1-cos(0.000012),30)
ans =
.71999999999136000000e-10

El valor con treinta dgitos es 0,999999999928000000000863999999.

59/117

El valor de la funcin es entonces


1

c
x2

10 10
D
1;44  10

10

D 0;6944 : : :

el cual es errneo pues 0  f .x/ < 1=2 para todo x 0.


>> vpa(1-cos(0.000012),10)/vpa(0.000012^2,10)
ans =
.69444444444444444444444444444444
>> vpa(1-cos(0.000012),50)/vpa(0.000012*0.000012,50)
ans =
.49999999999400000000002880000000
>>

60/117

Para evitar el error de cancelacin de este caso, como cos x D 1


es fcil ver que


1 sen.x=2/ 2
:
f .x/ D
2
x=2


2 sen2.x=2/,

Calculando f .x/ mediante esta frmula y aproximando sen.x=2/ con 10


dgitos significativos, el resultado es f .x/ D 0;5, el cual se aproxima al
valor exacto en 10 dgitos.
>> vpa(sin(0.000012/2)^2,10)/vpa((0.000012/2)^2,10)/2
ans =
.50000000000000000000000000000000

En general, no es buena prctica dar por buenos nmeros de magnitud muy


pequea resultado de una diferencia de nmeros mucho ms grandes.

Effect of rounding error on algorithms


61/117

Example:
two en
expressions
Representacin
el entorno for
de 0the
desame function:


sin2 x 2
1 x/
cos2 x
1 sen.x=2/
.1 cos
y , g.x/ g(x)
D =
:
f .x/ fD(x) = 2
2
2
x
x
x
2
x=2
1.001

f
g

0.999
0.01

0.01

results of cos x and sin x were rounded to 10 decimal digits; other


calculations are exact

62/117

Casustica de errores en algoritmos


Truncamiento de series


Un ejemplo clsico de algoritmo numrico es el del clculo de e x . La expresin


del desarrollo en serie de e x es:
x2 x3
e D1CxC
C
C 
2
3
x

Si se desea calcular e 5,5 mediante esta expresin en una mquina con D 10


y p D 5, los resultados que se obtienen son los siguientes:
e 5,5 D C1,0000 5,5000 C 15,125 27,730 C 38,129
41,942 C 38,446 30,208 C 20,768 12,692
C 6,9803 3,4902 C 1,5997   
D C0,0026363:

63/117

La suma de trminos se trunca despus de 25, pues los siguientes no aportan


dgitos significativos a la precisin del resultado.

El valor real de e 5,5 es 0,00408677. Como se puede comprobar, la diferencia


con 0,0026363 es muy importante: absoluta y relativamente.

El problema con esta forma de calcular e 5,5 surge de la suma y resta de


valores relativamente prximos en magnitud, con la consiguiente prdida de
dgitos significativos por cancelacin.
Una alternativa mejor es obtener el desarrollo en serie de e 5;5 y luego calcular el
recproco. La respuesta sera:
e

5;5

1
e 5;5

1
D 0;0040865:
1 C 5;5 C 15;125 C   

64/117

A continuacin se lista un programa en Matlab para el clculo de e x por


desarrollo en serie. Su objetivo es analizar los errores que se cometen y cundo
ocurren.
function ssum = expSeriesPlot(x,tol)
% Suma de n trminos de la serie exp**x
% Datos: x
= exponente del nmero e
%
tol = (opcional) tolerancia de la suma. Por defecto: tol = 5e-9
%
La suma termina cuando T_k/S_k < tol, donde T_k es el
%
trmino k-esimo y S_k la suma acumulada (con ese trmino).
if nargin < 2, tol=5e-9; end
term = 1; ssum = term; Eabs(1)=abs(ssum-exp(x)); k=1;
% Inicializar
fprintf(Aproximacin en serie de exp(%f)\n\n,x);
% Cabecera salida
fprintf( k
trmino k
suma
Error abs. serie\n);
fprintf(%3d %11.3e %11.3e %16.3e\n,1,x,ssum,Eabs(1));
while abs(term/ssum)>tol
% Bucle principal
k=k+1;
term = term*x/(k-1);
% Siguiente trmino de la serie
ssum = ssum + term;
Eabs(k) = abs(ssum-exp(x));
fprintf(%3d %11.3e %11.3e %16.3e\n,k,term,ssum,Eabs(k));
end
semilogy(1:k,Eabs,-); xlabel(Nmero de trminos); ylabel(Error absoluto);
fprintf(\nError de truncamiento despus de %d trminos: %11.3e\n\n,k,Eabs(k));
end

65/117

Los resultados numricos del clculo de e

10

se listan a continuacin.

>> expSeriesPlot(-10,5e-12)
Aproximacin en serie de exp(-10.000000)
k
1
2
3
.
.
47
48
49
50
51
52
53

trmino k
-1.000e+001
-1.000e+001
5.000e+001

suma
1.000e+000
-9.000e+000
4.100e+001

1.817e-012
-3.867e-013
8.055e-014
-1.644e-014
3.288e-015
-6.447e-016
1.240e-016

4.540e-005
4.540e-005
4.540e-005
4.540e-005
4.540e-005
4.540e-005
4.540e-005

Error abs. serie


1.000e+000
9.000e+000
4.100e+001

1.803e-013
2.063e-013
1.258e-013
1.422e-013
1.389e-013
1.396e-013
1.394e-013

Error de truncamiento despus de 53 trminos:


ans =
4.5400e-005

1.394e-013

66/117

El grfico del error absoluto respecto del nmero de trminos considerado en la


serie es el que sigue.
4

10

10

10

10
Error absoluto

10

10

10

10

10

12

10

14

10

10

20

30
Numero de terminos

40

50

60

Para k < 48 el error que se comete al evaluar la serie con la frmula lo


determina el truncamiento de la misma. A partir de k > 48 es el error de
redondeo interno el que evita que se pueda mejorar el resultado.

67/117

Este ejemplo pone de manifiesto la interdependencia entre los errores de


redondeo internos de la mquina y los errores debidos al truncamiento de series
en los algoritmos.

68/117

Solucin de una ecuacin cuadrtica




Desde el punto de vista terico, resolver la ecuacin cuadrtica


ax 2 C bx C c D 0 es un problema trivial. Desde el punto de vista numrico con
precisin finita, no tanto.

Como es sabido, si a, b y c son nmeros reales y a 0, las dos soluciones de la


ecuacin, x1 y x2, estn dadas por las expresiones
p
b C b 2 4ac
x1 D
(1)
2a
y
p
b
b 2 4ac
x2 D
:
(2)
2a

69/117

Veamos lo que ocurre al aplicar directamente estas frmulas en una mquina en


la que D 10, p D 8, L D 50 y U D 50.

Si a D 1, b D

105 y c D 1, las races autnticas de la ecuacin son


x1 D 99999;999990

y
x2 D 0;000010000000001:


Si se usan las expresiones (1) y (2) en la mquina apuntada, el resultado es


x1 D 100000;00
y
x2 D 0;0:

70/117

Al calcular x1 y x2 ha habido un error de cancelacin catastrfico, pues


f l.. 105/2

4/ D 1010:

La forma de evitarlo consiste en usar el signo de b para determinar cul de las


expresiones (1) o (2) producira menor error de cancelacin, y usarla para
calcular la raz de mayor valor absoluto, a partir de la frmula


p
2
4ac
b C signo.b/ b
:
x1 D
2a

Como ax 2 C bx C c D a.x x1/.x x2/, lo que implica que ax1x2 D c, la


otra raz se podra calcular usando la expresin
x2 D

c
:
ax1

71/117

Aplicando este criterio en el ejemplo apuntado se obtendran las races


x1 D 100000;00 y x2 D 0;00001: ambas buenas soluciones.

Mdulos interactivos en esta direccin.

72/117

Aproximacin de la derivada


De la definicin de derivada de una funcin f W R ! R en un punto x


f .x C h/
h!0
h

f 0.x/ D lKm

f .x/

se puede deducir la aproximacin por diferencias finitas


f 0.x/ 

f .x C h/
h

f .x/

73/117

Por el desarrollo en serie Taylor,6


f .x C h/ D f .x/ C f 0.x/h C f 00. /h2=2;
para algn  2 x; x C h. Es decir,

f 0.x/ D .f .x C h/

f .x// = h C f 00. /h=2:

Esta expresin nos dice que el error de la aproximacin por diferencias finitas,
resultado del truncamiento de esa frmula a partir del tercer trmino, estar
acotado pues por M h=2, donde M acota jf 00.t /j en un t cerca de x.

Suponiendo por otro lado que el error interno del clculo de la funcin es , el
error de redondeo interno de evaluar la derivada por la frmula de diferencias
finitas estar acotado por 2= h.
6

Formulado en 1715 por Brook Taylor, Reino Unido, 1685-1731.

74/117

El error total del clculo en la derivada est acotado en consecuencia por la


suma de los dos posibles componentes de error,
M h 2
C :
2
h
El primer trmino decrece, y el segundo se incrementa, al decrecer h

Haciendo la derivada de esta suma con respecto a h igual a cero, se obtiene que
la misma se minimiza cuando
p
h  2 =M :

75/117

Para la funcin f .x/ D sen.x/, en x D 1, tomando M D 1, el error total de la


aproximacin por diferencias finitas se representa en la figura. Su mnimo es
p
 10 8  .
2

10

10

10

10

total error
6

10

error

10

10

10

12

10

14

truncation error

10

rounding error

16

10

18

10

16

10

14

10

12

10

10

10

10

step size

10

10

10

10

76/117

El error de truncamiento en la aproximacin por diferencias finitas puede


reducirse usando la frmula centrada:
f 0.x/ 

f .x C h/

f .x
2h

h/

En trminos generales, los errores de redondeo tienden a prevalecer en los


clculos algebraicos de los algoritmos que llegan a una solucin en un nmero
de pasos finito, mientras que los de truncamiento sobresalen en los que se
utilizan derivadas, integrales, y no linealidades en general, que suele ser el caso
de los algoritmos de procesos infinitos o cuasi infinitos.

77/117

Otra suma de infinitos sumandos




Como es sabido
1
X
kD1

2
D
D 1;64493406684822640606569166266 : : :
6

Supongamos que no se conoce el resultado o que se desea calcularlo con un


ordenador.

Parece lgico codificar un bucle en k mediante el cual se sumen los trminos de


la serie hasta que el resultado no se vea alterado por la incorporacin de nuevos
dgitos.

En un ordenador personal, utilizando precisin sencilla, el valor que se obtiene a


partir de k D 4096 es 1;64472532.

78/117

El truncamiento que llevara a cabo este algoritmo hara que el resultado slo se
aproximase al exacto en cuatro dgitos, cuando lo esperable, de acuerdo con el
sistema de numeracin de la mquina, seran 6 dgitos mnimo. Qu pasa?

La respuesta est en la forma en que se efecta la suma: primero los nmeros


mayores y despus los ms pequeos.

En efecto, para k D 4096, se lleva a cabo la siguiente operacin: s C 4096 2.


El trmino 4096 2 D 2 24 y s  1;6.

Como ya hemos visto, la precisin sencilla utiliza una mantisa de 24 bits por lo
que 4096 2, frente a s  1;6, se sale de la ventana de valores que admite la
palabra de ordenador que ha de representar el resultado. Igual ocurrira con los
trminos sucesivos.

Una forma de remediar esto consiste en acumular primero la suma de los


trminos ms pequeos y luego la de los grandes, lo que requiere anticipar
cuntos trminos se necesitan.
function Suma_de_serie_1(j)
% Se simula suma 1/k^2 con infinitos sumandos
suma=0; i=j;
while i~=0
suma=suma+1/i/i;
i=i-1;
end
fprintf( Suma = %21.17f\n,suma);
end

Si se utilizan 1010, el valor que se obtiene con este cdigo de Matlab es


>> tic, Suma_de_serie_1(10000000000), toc
Suma =
1.64493406674822640
Elapsed time is 73.001613 seconds.
>>

es decir, el exacto con 10 dgitos significativos.

79/117

80/117

Analicemos esta variante del problema.


function suma = Suma_de_serie_3(i,j)
%
suma=i*0;
for i1=i:j, suma=suma+1/i1/i1; end
end
>> i=vpa(1,30)
i =
1.0
>> tic, Suma_de_serie_3(i,200000), toc
ans =
1.6449290668607264156390818334169
Elapsed time is 282.695168 seconds.
>>

81/117

Polinomio de Wilkinson

Toma el nombre de James Hardy Wilkinson, del National Physical Laboratory,


Reino Unido, 1919-1986. Tiene esta forma
w.x/ D .x

1/.x

2/    .x

20/:

82/117

Si se expande
w.x/Dx 20 210x 19 C 20615x 18 1256850x 17 C 53327946x 16 1672280820x 15 C
C40171771630x 14 756111184500x 13 C 11310276995381x 12
135585182899530x 11 C 1307535010540395x 10 10142299865511450x 9 C
C63030812099294896x 8 311333643161390640x 7 C
C1206647803780373360x 6 3599979517947607200x 5 C
C8037811822645051776x 4 12870931245150988800x 3 C
C13803759753640704000x 2 8752948036761600000xC
C2432902008176640000:
>> n = 20;
>> syms x
>> P20 = prod(x-(1:n))
P20 =
(x - 1)*(x - 2)*(x - 3)*(x - 4)*(x - 5)*(x - 6)*(x - 7)*(x - 8)*(x - 9)*(x - 10)*(x - 11)*
(x - 12)*(x - 13)*(x - 14)*(x - 15)*(x - 16)*(x - 17)*(x - 18)*(x - 19)*(x - 20)
>> P = expand(P20)
P =
x^20 - 210*x^19 + 20615*x^18 - 1256850*x^17 + 53327946*x^16 - 1672280820*x^15 +
40171771630*x^14 - 756111184500*x^13 + 11310276995381*x^12 - 135585182899530*x^11 +
1307535010540395*x^10 - 10142299865511450*x^9 + 63030812099294896*x^8 311333643161390640*x^7 + 1206647803780373360*x^6 - 3599979517947607200*x^5 +
8037811822645051776*x^4 - 12870931245150988800*x^3 + 13803759753640704000*x^2 8752948036761600000*x + 2432902008176640000

83/117

Veamos qu pasa.
function y=wilkpoly(x)
% Evalua en x el polinomio de Wilkinson
y=x^(20)-210*x^(19)+20615*x^(18)-1256850*x^(17)...
+53327946*x^(16)-1672280820*x^(15)+40171771630*x^(14)...
-756111184500*x^(13)+11310276995381*x^(12)...
-135585182899530*x^(11)+1307535010540395*x^(10);
y=y-10142299865511450*x^9+63030812099294896*x^8;
y=y-311333643161390640*x^7+1206647803780373360*x^6;
y=y-3599979517947607200*x^5+8037811822645051776*x^4;
y=y-12870931245150988800*x^3+ 13803759753640704000*x^2;
y=y-8752948036761600000*x+2432902008176640000;
end

>> fzero(@wilkpoly,16)
ans =
16.014680305804578
%
%
>> Z = sort(solve(P))
Z =
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

Sorprendente?

84/117

ndice


Introduccin y Conceptos bsicos

Representacin de un nmero en formato estndar IEEE

Aritmtica en un ordenador

Evaluacin de errores

Clculo numrico con matrices

Producto de una matriz por un vector

Producto de dos matrices

Normas


Vectoriales

Matriciales

85/117

Clculo numrico con matrices




Las operaciones de clculo numrico con vectores y matrices:




productos de vectores por matrices y de dos matrices,

el clculo de normas de vectores y matrices,

la evaluacin del condicionamiento de sistemas de ecuaciones lineales,

son fundamentales en los mtodos y algoritmos que estudiamos y analizamos en


este curso.
Conocer cmo se llevan a cabo en un ordenador y optimizarlas es muy til

86/117

Producto de una matriz por un vector




Comencemos por y D Ax, donde A 2 R mn y x 2 R n.


Cada coeficiente del vector y se obtiene mediate esta frmula:
n
i

yi D

aij  xj :
j D1

Esta operacin se puede interpretar como:




Combinar linealmente los vectores columna de A;

Una serie de productos interiores de los vectores fila de A por x.

87/117

En forma de algoritmo, esta operacin se estructurara as:


 Producto y D Ax
Hacer y D 0
for i D 1 to m
for j D 1 to n
y.i / D y.i / C a.i; j /x.j /
end
end

Para ser factible, las dimensiones deben cumplir que


m  n 
n  1 D
m  1 :

88/117

En la zona de trabajo o pizarra de Matlab se hara as:


>> y=A*x

Programando el algoritmo anterior con las instrucciones que permite Matlab


se obtendra algo as:
[m n]=size(A);
y=zeros(m,1);
for i=1:m
for j=1:n
y(i)=y(i)+A(i,j)*x(j);
end
end

En este script (o guin) a seguir, el bucle con el ndice j materializa el


producto interior de la fila i de A por el vector x.

89/117

Tambin se podra hacer algo un poco ms sofisticado como lo que sigue.


function y = MatVecF(A,x)
[m n] = size(A);
y = zeros(m,1);
for i=1:m
y(i) = A(i,:)*x;
end
end

ste sera el algoritmo programado en su versin por filas: una sucesin de


productos interiores: los vectores fila de A, A(i,:), por el vector x.

90/117

El algoritmo por columnas materializa que la operacin Ax es equivalente a


efectuar una combinacin lineal de los vectores columna de A. Por ejemplo,
3
2 3
2
12  
17C28
7
y D Ax D 43 45
D 43  7 C 4  85
8
57C68
56
2 3
2 3 2 3
1
2
23
D 7 435 C 8 445 D 4535 :
83
5
6

Codificado para Matlab:

function y = MatVecC(A,x)
[m n] = size(A);
y = zeros(m,1);
for j=1:n
y = y + A(:,j)*x(j);
end
end

91/117

La operacin Ax conlleva realizar O.mn/ multiplicaciones e igual nmero de


sumas/restas.

El que consuma ms o menos tiempo de ordenador depender de cmo se realiza


la operacin y la forma de almacenar en la memoria del ordenador la matriz A.


Si la matriz se guarda por columnas (lo habitual por defecto), la operacin


en su forma por columnas requerir menos tiempo que la versin por filas,
pues los coeficientes a los que se accede estn contiguos en la memoria y se
pueden conseguir de una sola vez: una ristra de ellos: row, o rengln.

92/117

Para realizar la operacin y T D x T A, en vez de y D Ax, los programas


anteriores se convertiran en los que siguen.

function y=VecMatF(x,A)
[m n] = size(A);
y = zeros(1,n);
for j=1:m
y = y+x(j)*A(j,:);
end
end

function y=VecMatC(x,A)
[m n] = size(A);
y = zeros(1,n);
for j=1:n
y(j) = y(j)+x*A(:,j);
end
end

93/117

Producto de dos matrices




Si A 2 R mr y B 2 R rn son dos matrices, su producto, C 2 R mn D AB,


se calcula mediante esta frmula:
r
i

cij D

aik  bkj ;
kD1

para todo 1  i  m y 1  j  n. El algoritmo es el que sigue.


 Producto C D AB
Hacer C D 0
for j D 1 to n
for i D 1 to m
for k D 1 to r
c.i; j / D c.i; j / C a.i; k/  b.k; j /
end
end
end

(i)

a (i)


94/117

is a row vector, b(j) is a column vector.

Cada coeficiente cij , es el resultado de un producto interior:


i

i
j

j
cij

r
a'(i )

function C = MatMatInt(A,B)
[m r] = size(A);
[r n] = size(B);
C = zeros(m,n);
for j=1:n
for i=1:m
C(i,j) = A(i,:)*B(:,j);
end
end
end

b( j )

cij

The inner product view of the matrixmatrix product is easier to


En
useMatlab:
for hand calculations.

AB = C


c(j) = Ab(j)

95/117

c(j) and
column
Ahora
bien,bcada
columna
j devectors.
la matriz C es el resultado de multiplicar la
(j) are
matriz A por el vector columna j -simo de B.
i
j

=
r
A

function C = MatMatVec(A,B)
[m r] = size(A);
[r n] = size(B);
C = zeros(m,n);
for j=1:n
C(:,j) = A*B(:,j);
end
end

b( j )

c( j )

TheMatlab:
column view of the matrixmatrix product AB = C is
En

helpful because it shows the relationship between the columns of


A and the columns of C .

Por ltimo, la matriz C tambin se puede ver como el resultado de sumar r


matrices de rango uno, cada una resultado del producto exterior de dos vectores.

96/117

Recordemos que el producto exterior de u y v es

Segn esto,

3
3
2
u1
u1 v1 u1 v2    u1 vn
6 u2 7
6 u v u v    u2 vn 7
7 v1 v2    vn D 6 2: 1 2: 2 :
7
uvT D 6
:
4 :: 5
4 ::
::
: : ::: 5 :
um
um v1 um v2    um vn
2

r
i

C D AB D

A.W; k/B.k; W/:


kD1

En Matlab:

function C = MatMatExte(A,B)
[m r] = size(A);
[r n] = size(B);
C = zeros(m,n);
for k=1:r
C = C + A(:,k)*B(k,:);
end
end

97/117

Todos estos mtodos realizan O.mnr/ multiplicaciones e igual nmero de


sumas/restas.

El procedimiento ms adecuado para programarlo en ordenador depender de


cmo se almacenan en l las matrices.

El ms eficaz suele ser el que denominbamos MatMatVec. Luego lo veremos


con un ejemplo.

Frmula de Strassen para multiplicar matrices

Desarrollada en 1969 por Volker Strassen, Alemania, 1936-. Se usa para


multiplicar dos matrices A y B cuadradas de dimensin 2p .

Se basa en una reordenacin inteligente de los clculos convencionales.

Si A y B son bloques 2  2, el producto es



 


C11 C12
A11 A12 B11 B12
D
C21 C22
A21 A22 B21 B22


A11B11 C A12B21 A11B12 C A12B22
D
:
A21B11 C A22B21 A21B12 C A22B22

Esta operacin necesita 8 multiplicaciones y 4 sumas en su forma tradicional.

98/117

99/117

Strassen reagrupa las operaciones de tal manera que slo se necesiten 7


multiplicaciones y 18 sumas. Haciendo
P1
P2
P3
P4
P5
P6
P7

D .A11 C A22/.B11 C B22/


D .A21 C A22/B11
D A11.B12 B22/
D A22.B21 B11/
D .A11 C A12/B22
D .A21 A11/.B11 C B12/
D .A12 A22/.B21 C B22/

C11 D P 1 C P 4
C12 D P 3 C P 5
C21 D P 2 C P 4
C22 D P 1 C P 3

P5 C P7
P 2 C P 6:

y luego

100/117

Generalizando, si las 7 multiplicaciones son de matrices m  m, como las


submatrices son m=2  m=2, se requieren


7 3
7 2
9 2
m multiplicaciones C
m .m 2/ C m sumas:
8
8
2


La operacin natural requerira m3 multiplicaciones y m2.m

1/ sumas.

Para un dimensin m suficientemente grande el procedimiento de Strassen


reduce las operaciones por un factor de alrededor de 7/8.

101/117

Si se aplica recursivamente la idea y se van dividiendo las submatrices en cuatro


bloques, cada unos de estos en otros cuatro y as sucesivamente, el
procedimiento mejorar sustancialmente el nmero total de operaciones que hay
que efectuar.

El orden de las matrices de menor tamao al que se puede aplicar esta idea es
nmi n D 16, pues con bloques ms reducidos el nmero de operaciones que se
realiza es mayor que el ordinario.

102/117

En Matlab, para matrices n  n, con n D 2p .


function C = strass(A,B)
% Calcula C=AxB mediante la frmula de Strassen
%
A,B matrices n x n; n potencia de 2.
%
n = length(A);
if n-2^(log2(n))~=0, error(n no es pot. de 2); end
if n <= 16
C = A*B;
else
m = n/2; u = 1:m; v = m+1:n;
P1 = strass(A(u,u)+A(v,v),B(u,u)+B(v,v));
P2 = strass(A(v,u)+A(v,v),B(u,u));
P3 = strass(A(u,u),B(u,v)-B(v,v));
P4 = strass(A(v,v),B(v,u)-B(u,u));
P5 = strass(A(u,u)+A(u,v),B(v,v));
P6 = strass(A(v,u)-A(u,u),B(u,u) + B(u,v));
P7 = strass(A(u,v)-A(v,v),B(v,u)+B(v,v));
C = [P1+P4-P5+P7 P3+P5; P2+P4 P1+P3-P2+P6];
end
end

103/117

Ejemplo Para tiempos de clculo, ejecutamos el programa TiemposAxB:


>> TiemposAxB(256)
Error en Int: 7.105427e-014
Error en Exte: 1.705303e-013
Error en Vec: 1.705303e-013
Error en Strass: 7.531753e-013
Tiempos: Int: 0.374; Exte: 0.827; Vec: 0.016; Strass: 0.109; Matlab: 0.000
>> TiemposAxB(512)
Error en Int: 1.136868e-013
Error en Exte: 3.694822e-013
Error en Vec: 3.694822e-013
Error en Strass: 3.041123e-012
Tiempos: Int: 1.607; Exte: 2.730; Vec: 0.172; Strass: 0.640; Matlab: 0.062
>> TiemposAxB(1024)
Error en Int: 3.410605e-13
Error en Exte: 1.108447e-12
Error en Vec: 1.108447e-12
Error en Strass: 1.642775e-11
Tiempos: Int: 10.516; Exte: 17.906; Vec: 0.625; Strass: 2.891; Matlab: 0.188
>> TiemposAxB(2048)
Error en Int: 5.684342e-13
Error en Exte: 3.069545e-12
Error en Vec: 3.069545e-12
Error en Strass: 7.560175e-11
Tiempos: Int: 90.000; Exte: 170.953; Vec: 12.938; Strass: 17.234; Matlab: 0.750
>> TiemposAxB(4096)
Error en Int: 9.094947e-13
Error en Exte: 8.867573e-12
Error en Vec: 8.867573e-12
Error en Strass: 3.319656e-10
Tiempos: Int: 4537.313; Exte: 970.969; Vec: 108.250; Strass: 78.938; Matlab: 5.609

Al doblar el tamao, los tiempos se multiplican  por 23.

104/117

ndice


Introduccin y Conceptos bsicos

Representacin de un nmero en formato estndar IEEE

Aritmtica en un ordenador

Evaluacin de errores

Clculo numrico con matrices

Producto de una matriz por un vector

Producto de dos matrices

Normas


Vectoriales

Matriciales

105/117

Normas
Vectoriales


Si en un espacio vectorial E sobre el cuerpo K (R o C ) se define una norma


vectorial como una aplicacin k  k W E ! R que verifica
1) kvk D 0 H) v D 0
2) kvk D jjkvk para

x 0 H) kxk > 0;
2 K y v 2 E;

3) ku C vk  kuk C kvk 8u; v 2 E;


se dice que E es un espacio vectorial normado.

del tringulo. Es una generalizacin del hecho de que un lado de u


la suma de los otros dos: ver figura. Una variante de esta regla
es
106/117
ku

vk  kuk

kvk:

La condicin ku C vk  kuk C kvk se conoce como regla del tringulo.


v
uCv
u

Figura 3.1: Representacin grfica de la regla d

Es una generalizacin del hecho de que la longitud de un lado de un tringulo


espacio
Kn , para 1  p < 1, se tiene la familia
no puede ser mayor que la suma de En
lasel de
los vectorial
otros dos.


kxkp D jx1 j C    C jxn j

Una variante til es esta:


ku

1=

denominadas normas p de Hlder. Casos particulares lo constitu


p D 2:

vk  kuk

kvk:

kxk1 D
kxk2 D

n
X
i D1

jxi j

p
jx1 j2 C    C jxn j2

En el espacio vectorial Kn, para 1  p < 1, se tiene la familia de normas



1=p
kxkp D jx1jp C    C jxnjp
;

107/117

denominadas normas p de Hlder, o normas lp . Su formulacin se debe a Otto


Hlder, Alemania, 1859-1937.

Casos particulares muy utilizados corresponden a p D 1, p D 2 y p D 1:


kxk1 D

n
X
i D1

jxi j

kxk1 D mK
ax
jx j
q 1i n i
kxk2 D

jx1j2 C    C jxnj2

(norma eucldea en R n)

Cumplen, cualquiera que sea x 2 Kn, que kxk1  kxk2  kxk1  nkxk1.

Si el conjunto fx 2 R 2 W kxk  1g es el crculo unidad en R 2, sus formas


2
las normas
p son
estas:unidad en
i el para
conjunto
fx 2 Rvectoriales
W kxk 1,1g2,es1la ybola
cerrada
R2, su forma para las normas vectoriales 1, 2, 1, y p son estas.


x11 D
=
kxk

x22 D
=
kxk

2
i
2

i=1

|xijx
| ij

iD1

D1

q


2 2
|x11|j22+C|xjx
2 | 2=
jx
j

q
DxT xx T x

D1

x1
max
kxk
D1i2
mKax|xjx
=
i| i j D 1
1i2

xpp D
= jx
|x11|j
kxk
D1
a

1/p
p 1=p
+C|xjx
p
< p)
< 1/
2 | 2 j , (1 ;.1

pp

28/63

108/117

109/117

En el espacio C 0; 1 de funciones continuas del intervalo 0; 1 en C , son


normas
#1=p
"Z
1
jf .t /jp dt
kf kp D
0

kf k1 D mKax jf .t /j :
t20;1

En un espacio vectorial normado se define la distancia entre dos elementos u y


v mediante
d.u; v/ D ku vk :


Esta definicin convierte a cualquier espacio vectorial normado en un


espacio mtrico.

110/117

En un espacio eucldeo n-dimensional, expresado R n o En (espacio de Hilbert


de dimensin finita), el ngulo entre dos vectores cualesquiera x e y es

 T
x y
;
 D arc cos
kxkkyk
donde

xT y
D
;
kxkkyk

1    1:

Si los vectores son ortogonales: x T y D 0;

Vectores alineados:

Vectores opuestos:

Si forman un ngulo agudo:

x T y > 0;

ngulo obtuso:

x T y < 0;

 D =2;

x T y D kxkkyk;

xT y D

kxkkyk;

 D 0.

 D 0;

 D ;

D1

 < =2;

 > 0.

 > =2;

 < 0.

D

1.

Normas matriciales


111/117

Se define sobre R mn como una aplicacin k  k W R mn ! R que cumple:


1) kAk D 0 H) A D 0
2) kAk D jj  kAk
3) kA C Bk  kAk C kBk
4) kABk  kAk  kBk

Existen normas sobre el espacio R mn que no son normas matriciales pues no
cumplen la propiedad 4. As, si se define
kAk D mKax jaij j ;
1i;j n

h i
se satisfacen 1), 2) y 3); sin embargo, tomando A D B D 11 11 , es fcil ver
 
que kABk D 2 2 D 2 > kAk  kBk D 1, por lo que no se cumple 4).
22

112/117

Definicin Una norma matricial k  k sobre R mn se dice consistente con una
norma vectorial k  k0 sobre R n cuando para cada matriz A y cada vector x se cumple que
kAxk0  kAk  kxk0 :

Se demuestra que para toda norma matricial es posible construir una norma
vectorial consistente. Recprocamente, a toda norma vectorial sobre R n se le
puede asociar una norma matricial consistente.

Una norma matricial es una norma vectorial compatible con el producto.

113/117

Una norma matricial consistente con una cierta norma vectorial k  k se


construye mediante la definicin
kAk D

kAxk
:
sup
kxk
0x 2Rn

Esta norma matricial se dice inducida por la norma vectorial.

La norma matricial inducida por la norma eucldea de R n es la norma


espectral, norma eucldea o norma 2:
kAk2 D

sup
0x 2Rn

x T A T Ax
xT x

1=2 q
D max .A T A/ D max .A/

donde  designa un valor propio de A y  un valor singular.

114/117

Las normas matriciales inducidas ms generales son


kAk1 D mKax

1j n

kAk1 D mKax

1i m

m
X

iD1
n
X

j D1

jaij j (columnas) y
jaij j (filas) :

Si k  k es la norma inducida por una cierta norma vectorial y k  k0 es una norma


matricial cualquiera consistente con esa norma vectorial, se cumple, para toda
matriz A, que kAk  kAk0.

115/117

Un ejemplo importante de norma matricial es la norma de Frobenius, por


Ferdinand Georg Frobenius, Alemania 1849-1917.

Se define como
kAk2F

1i;j n


aij2 D traza A H A ;

donde la traza de una matriz A de orden n es




La norma de Frobenius cumple que

Pn

i D1 ai i .

kABkF  kAkF  kBkF :




La norma espectral y la norma de Frobenius cumplen que


kAk2  kAkF :

Ejemplo El efecto que produce aplicar la transformacin lineal basada en la


matriz
 
12
AD
02
al crculo unidad, con las normas k  k1, k  k2 y k  k1 en R 2, es este.
[2, 2]T
[0, 1]T
A1 = 4

[1, 0]T

norma11
norma

[1, 0]T

A2 2,9208

norma22
norma

A = 3

norma1

norma

La aplicacin transforma el vector e 1 D 1; 0T en s mismo y


e 2 D 0; 1T en 2; 2T .

La aplicacin transforma el vector e 1 D


a

1
0

en s mismo; e 2 D

0
39/63

en

2
2

116/117

117/117

Tomando la norma 1, el vector


unitario que ms seamplifica al aplicarle la


transformacin es 01 (o 01 ), que pasa a ser 22 . Su factor de amplificacin,
en trminos de la norma 1, es 4.

Tomando la norma 2, el vector unitario que ms se amplifica es el que se


representa en la figura con una recta discontinua. El factor de amplificacin es
2;9208.

Para la norma 1, igualmente, el vector unitarioque


ms se amplifica es el que

se representa
tambin con la recta discontinua: 11 , que pasa a transformarse
3
en 2 . El factor de amplificacin correspondiente es en este caso 3 ya que
 
1 D1
1
1
 
3 D 3:
2
1

Anda mungkin juga menyukai