You are on page 1of 51

Temas actuales de anlisis de

datos con MatLab



Quien no se resuelve a cultivar el hbito de pensar,
se pierde el mayor placer de la vida
Thomas A. Edison
ESQUEMA BSICO DEL PROCESAMIENTO DE DATOS
TCNICAS DE ANLISIS:
Tema
RESUMEN BSICO DE MATLAB

Tema I.
Operaciones con vectores y matrices
Sumario
2.1. Definicin de matrices desde el teclado
2.2. Operaciones con matrices
2.3. Matrices predefinidas
2.4. Direccionamiento de matrices y vectores.
El operador (:) y la funcin (cat)
2.5. Operadores relacionales
2.6. Operadores lgicos
Definicin de un vector
Ejemplos a) desde lnea de comandos, b) prog.:
Vector fila: elementos separados con comas (,) o con espacios:
Vector fila
Vector columna
Vector columna: elementos separados con punto y coma (;) :
Fila a columna y viceversa: con la transpuesta ( )
El operador (:)
El operador (:) es utilizado para
especificar rangos, su forma de empleo
es muy simple y sus beneficios inmensos.
<vector>=[val_ini : paso : val_fin];
Forma de empleo:
Ejemplo:
Definicin de matrices
Las matrices se definen por filas, los
elementos de la fila se separan por espacios o
comas (,) mientras que las filas van separadas
por punto y coma (;)
Ejemplos:
A=[1,2,3; 4,5,6; 7,8,9]

A=[1 2 3; 4 5 6; 7 8 9]
Se ve en pantalla:
Definicin de matrices
Observacin 1
Ejemplo:
Una vez definida la matriz esta pasa a su
espacio de trabajo (Workspace) y estar
disponible para realizar cualquier
operacin.
Definicin de matrices
Observacin 2
Ejemplo:
MatLab introduce por defecto una
variable llamada (ans) de answer
sobre la cual tambin se puede operar.
Definicin de matrices
Observacin 3
Ejemplo:
En MatLab se permite la creacin de
matrices vacas.
Cmo acceder a los valores?
Los elementos de una matriz se acceden
poniendo los 2 ndices entre parntesis
separados por coma (Ej. A(1,2)).
Ejemplo: A(1,2)
Cmo acceder a los valores?
Observacin 1
Ejemplo:
Si estamos trabajando con vectores
bastara colocar un solo ndice.
Operaciones
VECTORES:
A+B=[a1+b1 a2+b2 ... an+bn]
A-B =[a1-b1 a2-b2 ... an-bn]

A .* B=[a1.b1 a2.b2 ... an.bn]
A y B deben ser horizontales o verticales.
Si A=[fila] y B=[Columna]: Producto punto = A*B

A./ B=[a1/b1 a2/b2 ... an/bn]
A .^ n1=[a1^n1 a2^n1... an^n1 ]

MATRICES: sin el punto A * B A/ B A ^ n1
Operaciones con escalares:

v+k adicin o suma
v-k sustraccin o resta
v*k multiplicacin
v/k divide por k cada elemento
de v
k./v divide k por cada elemento
de v
v.^k potenciacin cada
componente de v esta
elevado a k
k.^v potenciacin k elevado
cada componente de v

Operaciones
Ejemplo:
Matrices predefinidas
eye(n) Matriz unitaria (n x n)
zeros(n) Matriz de ceros (n x n)
zeros(n,m) Matriz de ceros (n x m)
ones(n) Matriz de unos (n x n)
ones(n,m) Matriz de unos (n x m)
rand(n) Matriz de nmeros aleatorios entre 0 y 1 (n x n)
rand(n,m) Matriz de nmeros aleatorios entre 0 y 1 (n x m)
linspace
(x1,x2,n)
Genera un vector con n valores entre x1 y x2
igualmente espaciados
magic(n)
matriz mgica (n x n): 1 hasta N^2 con sumas
iguales en filas, columnas y diagonales.
Operaciones con matrices
Ejemplos:
Operaciones con matrices
Ejemplos:
El operador (:)
El operador (:) se muestra mucho ms
potente cuando se trabaja con matrices.
El operador (:)
Extraccin de submatrices.
El operador (:)
Extraccin de una columna.
El operador (:)
Extraccin de una fila (end = ltima).
El operador (:)
Eliminacin de una columna.
La funcin (cat)
La funcin (cat) se emplea para
concatenar matrices a lo largo de una
dimensin especificada.
Al igual que el operador (:) es de una
gran utilidad cuando se trabaja con
matrices.
La funcin (cat)
Ejemplo (1: abajo; 2: a la derecha):
B
C
Operadores relacionales
< Menor que
<= Menor o igual a
> Mayor que
>= Mayor o igual a
== Igual a
~= Distinto de
Operadores lgicos
&& Conjuncin
|| Disyuncin
~ Negacin
xor Disyuncin exclusiva
ECUACIONES LINEALES
Dado un sistema algebraico de ecuaciones lineales de la
forma Ax=B. Lo resolveremos por mtodos clsicos y
con funciones propias de matlab

Comandos:

>>det(A) %determinante de una matriz cuadrada
>>inv(A) %inversa de una matriz cuadrada

Ecuaciones lineales________________________________
Ejemplos de resolucin de un sistema Ax=B:

Ejemplo: Resolver el sistema:

X1+2 X2+3 X3 = 4
2X1+3 X2+4 X3 = 5
4X1+2 X2+5 X3 = 1

Ecuaciones lineales________________________________
Resolucin: Regla de Cramer

Resolucin:
A=[1 2 3;2 3 4;4 2 5]
B=[4;5;1];


D1=A;D1(:,1)=B
D2=A;D2(:,2)=B
D3=A;D3(:,3)=B
x=[det(D1);det(D2);det(D3)]/det(A)
Ecuaciones lineales________________________________

La solucin por Cramer es tediosa y poco eficaz.

Una primera posibilidad ms cmoda.
Ainv=inv(A)

x=Ainv*B

Otra solucin sera utilizar la divisin matricial
X=A\B

A\B, produce un resultado aunque la matriz no sea cuadrada y aunque no
sea invertible.
Por ejemplo si el sistema esta sobredeterminado (ms ecuaciones que
incgnitas) se calcula la solucin que minimiza la norma 2 de Ax-b
(solucin de mnimos cuadrados)

Autovalores (o valores propios) de una matriz

p es un valor propio de la matriz cuadrada Anxn si
cumple con:
A . v = p . v

Autovectores (o vectores propios ) de una matriz:
Los vectores solucin obtenidos al remplazar cada uno
de los valores propios en la ecuacin.

Ejemplo: Hallar los valores y vectores propios asociados
a la matriz
El sistema tiene solucin ssi:
Lo cual se cumple para: t = 4 y t= -1 ( valores propios)
Remplazando c/u de los valores propios y resolviendo la ecuacin:
(Vectores propios)
eig(A) (vector columna)
[V,D]=eig(A)
En matlab:
POLINOMIOS
Los polinomios se representan en matlab por un
vector fila de dimensin n+1 siendo n el grado del
polinomio.

Dado un polinomio
x
3
+2x
se representa por
>> pol1=[1 0 2 0]
para el clculo de las races de un polinomio existe el
comando roots.
>>raices=roots(pol1) (da un vector columna,
aunque pol1 es un vector fila)
Polinomios______________________________________
Un polinomio puede ser reconstruido a partir de sus
races con el comando poly
>> p=poly(raices) (da un vector fila)
**
en caso de que el argumento de poly fuera una matriz
obtendramos como resultado el polinomio caracterstico
de la matriz. As mismo si queremos calcular los
autovalores de la matriz bastara con calcular las races
del polinomio caracterstico.
Ejemplo1:
pol2=[2 4 0 1]; % definicin del polinomio 2x
3
+4x
2
+1
raices=roots(pol2) % clculo de sus races
pol2_n=poly(raices) % reconstruccin del polinomio
real(pol2_n) % qu pas?
Ejemplo2:
A=[1 2 3 ; 2 3 4; 4 2 5]; p=poly(A) % pol. caracterstico
roots(p) % autovalores de A
Polinomios______________________________________
Para calcular el valor de un polinomio p en un punto
dado x1 basta con utilizar el comando polyval
>>y=polyval(p,x1)
Ejemplo: Evaluar el polinomio x
3
-x
2
-x+1 en el punto 2
p=[1 1 1 1] % definicin del polinomio x
3
-x
2
-x+1
polyval(p,2)
Ejemplo: Ahora evaluarlo en todo un rango de puntos
x=-2:0.1:2;
Y=polyval(p,x);
Para multiplicar y dividir polinomios tenemos los
comandos especiales conv(p1,p2) y deconv(p1,p2)
Ejemplo5:
p1=[1, -2, 1]; p2=[1,1]; p3=conv(p1,p2)
p4=deconv(p3,p2)
[p4,r]=deconv(p3,p2) % resto de la divisin
Polinomios______________________________________
Para conocer el resto de la divisin de polinomios basta con
poner
>>[p4,r] = deconv(p3,p2)
El comando residue, permite el clculo del desarrollo en
suma de fracciones simples del cociente p1/p2.
p2 debe tener races reales
El formato del comando es: >>[r,p,k] =residue(p1,p2)
donde:
r= vector columna con los numeradores
p= vector columna con las raices del denominador
k= vector fila con los coeficientes del polinomio
independiente.

) (
) (
) (
) 1 (
) 1 (
) ( 2
) ( 1
x k
n p x
n r
p x
r
x p
x p


Polinomios______________________________________
Ejemplo6:
Descomponer en fracciones simples el cociente
4 3
1
2 3
2 3


x x
x x
>>[p1,p2]=residue(r,p,k) hace la operacin inversa
p1=[1 1 0 1]
p2=[1 3 0 4]
[r,p,k]=residue(p1,p2)
rats(r)
1
) 1 ( 9
1
) 2 ( 3
13
) 2 ( 9
35
4 3
1
2 2 3
2 3



x x x x x
x x
[pol1,pol2]=residue(r,p,k)
Polinomios______________________________________
Para calcular la derivada de un polinomio tenemos el
comando,
>>polyder(p)
Ejemplo7:
Dado el polinomio x
3
+6x
2
+1 su derivada es

p=[1, 6,0,1];
d=polyder(p) % es decir 3x
2
+12x
Tiempo y esfuerzo de clculo
En MatLab est abierta la posibilidad de
obtener los tiempos de clculo de una
forma muy sencilla para el usuario,
siendo esto en muchas ocasiones de suma
importancia.
Para este fin se emplean las funciones:
cputime; etime y tic ops toc
Tiempo y esfuerzo de clculo
% help clock
% CLOCK Current date and time as date vector.
% CLOCK returns a six element date vector vector containing the
% current time and date in decimal form:
% CLOCK = [year month day hour minute seconds]

% The first five elements are integers. The seconds element
% is accurate to several digits beyond the decimal point.

Tiempo y esfuerzo de clculo

% help etime

% ETIME Elapsed time.
% ETIME(T1,T0) returns the time in seconds that has elapsed
% between vectors T1 and T0. The two vectors must be six
% elements long, in the format returned by CLOCK:

% T = [Year Month Day Hour Minute Second]

Tiempo de clculo (ejemplo)
>> n=1000;
>> A=rand(n);
>> b=rand(n,1);
>> x=zeros(n,1);
Se desea resolver un sistema lineal arbitrario con
1000 Ecs. de la forma:
Ax=b x=A
-1
b = A\b
Tiempo transcurrido ??
Tiempo y esfuerzo de clculo
% EJEMPLO (SIN ECO EN LOS CLOCK):
n=1000;
A=rand(n);
b=rand(n,1);
x=zeros(n,1);

%Tiempo de inicio:
tiempoIni=clock;
%operacin:
x=A\b;
%Tiempo de fin:
tiempoFin=clock;

tiempo=etime(tiempoFin, tiempoIni)

RESULTADO: tiempo = 5.2810


% EJEMPLO (CON ECO EN LOS CLOCK):
...
%Tiempo de inicio:
tiempoIni=clock % SIN PUNTO Y COMA
%operacin:
x=A\b;
%Tiempo de fin:
tiempoFin=clock % SIN PUNTO Y COMA
tiempo=etime(tiempoFin, tiempoIni)
RESULTADO:
tiempoIni =
1.0e+003 *
2.0060 0.0090 0.0290 0.0090 0.0270 0.0436
tiempoFin =
1.0e+003 *
2.0060 0.0090 0.0290 0.0090 0.0270 0.0506
tiempo = 7


Tiempo y esfuerzo de clculo
OTRAS FUNCIONES SIMILARES:
n=1000;
A=rand(n);
b=rand(n,1);
x=zeros(n,1);
tiempoIni=clock; x=A\b;
tiempo=etime(clock, tiempoIni)
time=cputime; x=A\b; time=cputime-
time
tic; x=A\b; toc

RESULTADOS:
tiempo = 5.3130
time = 5.2350
elapsed_time = 5.2030


PROGRAMACIN
C
u
r
s
o

M
a
t
l
a
b

2
0
0
2
-
0
3

e
n
x
a
m
b
.

N
i
e
v
e
s

L
o
r
e
n
z
o

PROGRAMACIN________________________________
Comandos de entrada salida

input: nos permite introducir datos
variable=input(mensaje a pantalla);

disp: muestra un texto por pantalla
disp(El algoritmo no ha convergido)



PROGRAMACIN________________________________
Testear el nmero de argumentos

nargin devuelve el nmero de argumentos de entrada con
los que el usuario ha llamado a la funcin.

nargout devuelve el nmero de argumentos de salida con
los que el usuario ha llamado a la funcin.

nargchk chequea si el nmero de argumentos de entrada
calculados con nargin esta entre el valor mximo y mnimo
previsto, si no da error.
nargchk(mnimo,mximo,nmero_entrada)

PROGRAMACIN________________________________
Bucles. Bucles anidados

for k=n1:incre:n2
end

Con break se rompe la ejecucin

Estructuras de control condicionadas
if
elseif
else
end
while
end
switch expresion
case expresion_0
comandos_0 que deben ejecutarse
case expresion_1
comandos_1 que deben ejecutarse
case expresion_2
comandos_2 que deben ejecutarse
otherwise
comandos escoba que deben ejecutarse
end
PROGRAMACIN________________________________
Programacin de funciones

function arg_salida=nombre_funcion(arg_entrada)


El fichero se debe guardar con nombre_funcion.m

Para devolver el control al programa desde cualquier punto
de una funcin basta con escribir la sentencia return

Ejercicio
Utilizando estructuras de control construir una funcin que
nos calcule las races de una ecuacin de segundo grado
ax
2
+bx+c=0

function raiz=sole2(a,b,c)
%raiz=sole2(a,b,c)
%solucion de la ecuacion de segundo grado
%ax^2+bx+c=0, a~=0
%
if (nargin ~=3)
error(El numero de argumentos de entrada debe ser 3)
end
discri=b^2-4*a*c;
raiz=[];
if(discri==0)
raiz=-b/(2*a);
disp([Raiz doble=,num2str(raiz)])
return
elseif(discri>0)

raiz(1)=(-b+sqrt(discri))/(2*a);
raiz(2)=(-b-sqrt(discri))/(2*a);
disp([Raices reales simples=,num2str(raiz)])
return
else
raiz(1)=(-b+sqrt(-discri)*i)/(2*a);
raiz(2)=(-b-sqrt(-discri)*i)/(2*a);
disp([Raices complejas=,num2str(raiz)])
return
end

Ejemplos para utilizar esta funcin:
raiz=sole2(2,3,1);
raiz=sole2(1,0,1);

You might also like