Вы находитесь на странице: 1из 51

Quien no se resuelve a cultivar el hbito de pensar, se pierde el mayor placer de la vida

Thomas A. Edison

Temas actuales de anlisis de datos con MatLab

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
Vector fila: elementos separados con comas (,) o con espacios:

Vector columna: elementos separados con punto y coma (;) :


Fila a columna y viceversa: con la transpuesta ( )

Ejemplos a) desde lnea de comandos, b) prog.:


Vector fila Vector columna

El operador (:)
El operador (:) es utilizado para especificar rangos, su forma de empleo es muy simple y sus beneficios inmensos.
Forma de empleo: <vector>=[val_ini : paso : val_fin];

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] Se ve en pantalla:

A=[1 2 3; 4 5 6; 7 8 9]

Definicin de matrices
Observacin 1 Una vez definida la matriz esta pasa a su espacio de trabajo (Workspace) y estar disponible para realizar cualquier operacin.
Ejemplo:

Definicin de matrices
Observacin 2 MatLab introduce por defecto una variable llamada (ans) de answer sobre la cual tambin se puede operar.
Ejemplo:

Definicin de matrices
Observacin 3 En MatLab se permite la creacin de matrices vacas.
Ejemplo:

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 Si estamos trabajando con vectores bastara colocar un solo ndice.
Ejemplo:

Operaciones
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 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
Ejemplo:

Matrices predefinidas
eye(n) zeros(n) zeros(n,m) Matriz unitaria (n x n)

Matriz de ceros (n x n)
Matriz de ceros (n x m) Matriz de unos (n x n) Matriz de unos (n x m)

ones(n)
ones(n,m) rand(n) rand(n,m) linspace (x1,x2,n)

Matriz de nmeros aleatorios entre 0 y 1 (n x n)


Matriz de nmeros aleatorios entre 0 y 1 (n x m) Genera un vector con n valores entre x1 y x2 igualmente espaciados matriz mgica (n x n): 1 hasta N^2 con sumas iguales en filas, columnas y diagonales.

magic(n)

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

Operadores relacionales
< <= > >= == ~= Menor que Menor o igual a Mayor que Mayor o igual a Igual a Distinto de

Operadores lgicos
&& || ~ xor Conjuncin Disyuncin Negacin 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:


En matlab:

eig(A) (vector columna)


[V,D]=eig(A)
(Vectores propios)

POLINOMIOS
Los polinomios se representan en matlab por un vector fila de dimensin n+1 siendo n el grado del polinomio. Dado un polinomio

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)

x3+2x

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 2x3+4x2+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 x3-x2-x+1 en el punto 2 p=[1 1 1 1] % definicin del polinomio x3-x2-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.

p1( x ) r (1) r (n ) k(x) p2( x ) x p(1) x p(n )

Polinomios______________________________________

>>[p1,p2]=residue(r,p,k) hace la operacin inversa Ejemplo6: Descomponer en fracciones simples el cociente

p1=[1 1 0 1] p2=[1 3 0 4] [r,p,k]=residue(p1,p2) rats(r)

x3 x2 1 x 3 3x 2 4

x3 x2 1 35 13 1 1 3 2 2 x 3 x 4 9( x 2) 3( x 2) 9( x 1)
[pol1,pol2]=residue(r,p,k)

Polinomios______________________________________

Para calcular la derivada de un polinomio tenemos el comando, >>polyder(p) Ejemplo7: Dado el polinomio x3+6x2+1 su derivada es

p=[1, 6,0,1]; d=polyder(p) % es decir 3x2+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)


Se desea resolver un sistema lineal arbitrario con 1000 Ecs. de la forma: Ax=b x=A-1b = A\b
>> n=1000; >> A=rand(n);

>> b=rand(n,1);
>> x=zeros(n,1);
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); % 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 de inicio: tiempoIni=clock; %operacin: x=A\b; %Tiempo de fin: tiempoFin=clock;

tiempo=etime(tiempoFin, tiempoIni) RESULTADO: tiempoIni = 1.0e+003 * 2.0060 0.0090 0.0290 0.0090 0.0270 0.0436

tiempo=etime(tiempoFin, tiempoIni)

tiempoFin = 1.0e+003 * 2.0060 0.0090 0.0290 0.0090 0.0270 0.0506

RESULTADO:

tiempo =

5.2810

tiempo =

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=cputimetime tic; x=A\b; toc

RESULTADOS: tiempo = 5.3130 time = 5.2350 elapsed_time = 5.2030

Curso Matlab 2002-03 enxamb. Nieves Lorenzo

PROGRAMACIN

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
switch expresion case expresion_0

if

comandos_0 que deben ejecutarse


case expresion_1

elseif
else end
end

comandos_1 que deben ejecutarse


case expresion_2

while end

comandos_2 que deben ejecutarse


otherwise

comandos escoba que deben ejecutarse

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 ax2+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 raiz(1)=(-b+sqrt(-discri)*i)/(2*a); raiz(2)=(-b-sqrt(-discri)*i)/(2*a); disp([Raices complejas=,num2str(raiz)]) return

else

end

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

Вам также может понравиться