Vous êtes sur la page 1sur 4

MATLAB para principiantes 12

1.6 Representacin de nmeros en MATLAB


La representacin de nmeros en base decimal se basa en escribirlo como una suma de
potencias de 10. Por ejemplo, para el nmero 273.375

3 2 1 0 1 2
10 x 5 10 x 7 10 x 3 10 x 3 10 x 7 10 x 2 375 . 273

+ + + + + =

Esta representacin es tan comn e intuitiva que no abundaremos en ella, pero la
representacin de este mismo nmero en base binaria y hexadecimal es interesante de
recordar.

3 2 1 0 4 8
2 x 1 2 x 1 2 x 0 2 x 1 2 x 1 2 x 1 011 . 100010001 375 . 273

+ + + + + = =
B D


1 0 1 2
16 x 6 16 x 1 16 x 1 16 x 1 6 . 111 375 . 273

+ + + = =
H D


Donde los subndices D, B y H se refieren a decimal, binario y hexadecimal,
respectivamente. Binario y hexadecimal son intercambiados fcilmente si agrupamos los
binarios en 4 nmeros, partiendo del punto. En este ejemplo: 0001 0001 0001.0110 que
son 1 1 1.6

Decimal Binario Hexadecimal
00 0000 0
01 0001 1
02 0010 2
03 0011 3
04 0100 4
05 0101 5
06 0110 6
07 0111 7
08 1000 8
09 1001 9
10 1010 a
11 1011 b
12 1100 c
13 1101 d
14 1110 e
15 1111 f

MATLAB tiene una representacin de los nmeros en notacin binaria de 64 bits que
cumple la norma IEEE 754 y que es:

) ( 2 ) 1 (
) 1022 (
f
s
, si e = 0
) 1 ( 2 ) 1 (
) 1023 (
f
e s
+

, si e = [1, 2046]
Representacin especial, si e = 2047

MATLAB para principiantes 13
donde s representa al signo del nmero y se representa con un bit 0 1.

e representa al exponente del nmero y se define con 11 bits que cubre del entero decimal
1 al 2046 en cuyo caso se llaman nmeros normales, en caso de que e sea cero su
representacin se denomina nmero subnormal y en tal caso el termino (1+f) se
substituye solo por f. En caso de que e sea 2047 se reserva para representaciones
especiales tales como NaN o inf.

f representa a la mantisa del nmero y esta formada por 52 bits lo que produce nmeros
desde el nmero decimal
52
2

al nmero

52
1
2
n
n
, tambin puede ser cero y en tal caso el
nmero es una potencia de 2.

La siguiente tabla ilustra los nmeros en MATLAB de acuerdo a la norma IEEE 754, en
particular los valores para s, e y f.

Nombre Decimal aprox. Hexadecimal s e f
-inf
--------------------
fff 0000000000000 1 2047
0
-realmax=
(-)(2^1023)(1+
2^-1+2^-2+)
-1.797693134862316e+308
ffe fffffffffffff 1 2046

52
1
2
n
n

(-)(2^1023)(1)
-8.988465674311580e+307
ffe 0000000000000 1 2046
0
-1=(-)(2^0)(1)
-1
bff 0000000000000 1 1023
0
-realmin=(-)(2^-
1022)(1)
-2.225073858507201e-308
801 0000000000000 1 1
0
0
0
000 0000000000000 0 0
0
eps(0)=(+)
(2^-1022)(2^-52)
4.940656458412465e-324
000 0000000000001 0 0 52
2


realmin=2^-1022
2.225073858507201e-308
001 0000000000000 0 1
0
realmin+
eps(realmin)
2.225073858507202e-308
001 0000000000001 0 1 52
2


1=(+)(2^0)(1)
1
3ff 0000000000000 0 1023
0
3=(+)(2^1)(1+.5)
3
400 8000000000000 0 1024 1
2


pi
3.141592653589793
400 921fb54442d18 0 1024
0.57079
(+)(2^1023)(1)
8.988465674311580e+307
7fe 0000000000000 0 2046
0
realmax=
(+)(2^1023)(1+
2^-1+2^-2+)
1.797693134862316e+308
7fe fffffffffffff 0 2046

52
1
2
n
n

Inf=realmax+
eps(realmax)
---------------------
7ff 0000000000000 0 2047
0
NaN
---------------------
fff 8000000000000 1 2047
.5

Los nmeros reales son necesarios para las operaciones aritmticas, acceder a ellos
permite disponer de un continuo de nmeros, los que se pueden visualizar como cualquier
punto de la recta numrica. No as el conjunto de nmeros que se puede representar en
MATLAB, que es diferente en dos aspectos fundamentales:

1.- Existen vacos entre los nmeros, que tan grande es este vaco depende del nmero en
cuestin.
MATLAB para principiantes 14
2.- No es posible representar de manera exacta a todos los nmeros reales.

Por ejemplo los nmeros reales entre 72057594037927932 y 72057594037927944 se
representan por el mismo nmero en MATLAB (4370000000000000
H
) =
(+)2^(4x16^2+3x16+7-1023)(1+0), que solo es correcto para el nmero
72057594037927936.

En el siguiente ejemplo, al que se puede regresar despus de cubrir el capitulo 3, permite
obtener la representacin binaria de cualquier nmero real en notacin extendida, y se
basa en la divisin sucesiva de potencias de 2. Enseguida crea un vector para almacenar
las potencias y exhibe el nmero. La lnea con la instruccin KKKL(a(a>=0)+1)=1;
indica que el vector KKKL en su posicin x tomar el valor 1, donde x es el valor que
tiene el vector a sumndole 1 solo cuando a es mayor igual a 0. En las posiciones donde
a<0 se deja el valor que KKKL ya tenia, en este caso cero.

% Representacin binaria de un nmero
%
% Formato: [bina]=detobi(nmero, resolucin)
%
% Ejemplo: A=detobi(73.02,20)
%
% Se busca el binario de 73.02 con una representacin de 20
% bits
function [bina]=detobi(numero,representacion)
m=1;
while numero>2^-representacion;
a(m)=floor(log(numero)/log(2));
numero=numero-2^a(m);
m=m+1;
end
if max(a)>0
ndi1=max(a)+1;
else
ndi1=0;
end
if min(a)<0
ndi2=min(a);
else
ndi2=0;
end
KKKL=zeros(1,ndi1);KKKR=zeros(1,abs(ndi2));
KKKL(a(a>=0)+1)=1;KKKR(abs(a(a<0)))=1;
resss=[num2str(KKKL),'.',num2str(KKKR)]
format longG
bina=sum(10.^a);

MATLAB para principiantes 15
Un ejemplo vvido de la importancia del orden de las operaciones y de la representacin
numrica en MATLAB se puede ver en siguiente ejemplo. Hallar los valores de n tales
que
0 1
1
1 ) ( = |
.
|

\
|

+
=
n
n
n n f 1.1
El problema es que si desarrollamos el parntesis, resulta que f(n) es cero para cualquier
valor de n. MATLAB, sin embargo, realiza las operaciones en el orden de su prioridad,
primero potencia, despus multiplicacin y divisin y finalmente suma y resta, los
parntesis tienen preferencia sobre el orden de prioridad. En este caso se sumar n+1
antes de dividir sobre n, despus se resta el uno, todo se multiplica por n, este resultado es
restado al uno. Como resultado, entonces, de este orden de operaciones y de la
representacin numrica, f(n) no vale cero para toda n.

En MATLAB el cdigo para ilustrar la funcin anterior es el siguiente, donde eps se
emplea para aumentar y normalizar la diferencia con el cero.

n=1:500;
f=(1-n.*((n+1)./n-1))./eps(n);
plot(n,f,'*')

Figura 1.3 Diferencia artificialmente introducida por MATLAB por el orden de las
operaciones, solo las n que son potencias de 2 dan cero para la funcin f(n).

1.7 Guardar el trabajo
Si se desea guardar las variables se procede por File-Save workspace as y se guarda con
el nombre deseado. Para guardar la historia de comandos se procede a seleccionarlos en
el panel de Command History y con el botn derecho del Mouse se selecciona Create M-
File, aparece otra ventana con la historia de los comandos y ah se puede guardar su
contenido en un archivo. Las figuras, ms adelante se ver como generarlas, se pueden
guardar en formatos muy diversos, *.fig es el formato nativo de MATLAB, es
modificable y el mas conveniente ya que guarda los valores que la generaron, *.eps, es
postscript y se pueden anexar a documentos Word y la calidad no cambia al cambiar el
tamao, *.jpg es el mas comn pero la calidad es muy limitada y disminuye
rpidamente al cambiar de tamao. Este comentario se basa en que las imagines bitmap