You are on page 1of 239

Capacitación en MATLAB

– Introducción a MATLAB para Ingenieros.


Contenido
• Introducción. • Scripts y Funciones.
• Vectores/Matrices. • Estructuras
• Funciones. de Control.
• Cadenas de Texto. • Celdas.
• Graficas 2D. • Aplicaciones.
• Graficas 3D. • Excel.
• GUI y GUIDE. • Data Acquisition.
Presentación del Curso.
• Perfil de los participantes:
– Nombre
– Estudios.
– Expectativas del curso
– Conocimientos de:
– MATLAB
– Programación Estructurada

• Competencias a adquirir al finalizar el Curso.


Evaluación del Curso
• Para obtener el CERTIFICADO DE
APROBACION del curso necesita obtener por lo
menos el 70% de calificación.
– 50% Evaluación Teórica a mitad del contenido del curso
(opcional).
– 50%/100% Evaluación del desempeño Grupal
(Asistencia) y Proyecto final.
• Para obtener el CERTIFICADO DE ASISTENCIA al
curso usted necesita tener por lo menos el 70% de
asistencias del total de horas impartidas del curso.
Formato del Curso
• Practicas Guiadas y Hands-on.
• 10 Sesiones Planificadas de ~ 2 horas y
media de duración.
• La asistencia se considera solo al completar
la practica.
• Política de Examen y Ejemplo.
• Fecha de Entrega de Certificados.
MATLAB
Introduccion
Que es MATLAB
• Lenguaje de Programación.
• Alto Rendimiento.
• Computación Técnica.
• Computación, Visualización y Programación.
• Problemas y soluciones en notación
Matemática (de Matrices).
Aplicaciones?
• Matemáticas y Computación.
• Desarrollo y Test de algoritmos.
• Modelado, Simulación y Prototipos.
• Análisis de Datos, exploración y
visualización.
• Gráficas de Ingeniería y Científicas.
• Desarrollo de Aplicaciones finales (GUI)
Aplicaciones?
MATLAB?
• Matrix Laboratory (Laboratorio de Matrices).
• Elemento básico: [Matriz] (en adelante
Arreglo) que no requiere dimensión.
• Problemas que involucran matrices y
vectores son consumidores de tiempo (C,
C++, Fortran, etc.)
Entorno de Trabajo
• Abra MATLAB.
• Identifique:
– Ventana de Comandos.
– Historial de Comandos.
– Directorio Actual.
– Espacio de Trabajo.
– Barra de Menús.
MATLAB como Calculadora
• Desde la ventana de comandos ingrese:
• >> 2 + 3/4*5
• Verifique la respuesta de MATLAB.
• Verifique el workspace.
Números
• Por defecto se usa la notación decimal
convencional.
• La letra “e” se usa para definir notación
científica (x10).
• Los números imaginarios se definen usando
las letras “i” y “j”.
Números
• Los números tienen una precisión de 16
dígitos significativos decimales y un rango
-308 +308
entre 10 y 10 .
• Todas las operaciones en MATLAB se
realizan en precisión doble.
• El formato es la manera en como se
muestran los valores
Formato
• Usando el comando format:
Variables
• La variable ANS es básica en MATLAB.
• Ejecute:
• >> 3-2^4
• Verifique el resultado almacenado en ANS.
• Ejecute:
• >> ans*5
• Verifique el uso de variables y resultado.
Variables
• Las variables no requieren de una
declaración de tipo o tamaño.
• >>num_estudiantes = 25
• MATLAB crea el espacio necesario y asocia
el tipo adecuado para definir esa variable, si
es que no la encuentra en el Workspace.
Variables
• Las variables tienen un limite de tamaño
de nombre de 31 caracteres.
• Deben empezar con una letra SIEMPRE.
• NO deben contener caracteres especiales,
salvo el “underscore” _
Las letras “i” y “j”
• “i” y “j” estan reservadas para definir
numeros complejos.
• >>i
• >>i=20
• >>i
• Verifique el comportamiento de “i”
Otras palabras reservadas
• pi 3.14159265...
• i unidad imaginaria
• realmin el número más pequeño, 2-1022
1023
• realmax el número más grande, 2
• Inf infinito
Comandos de manejo de Sesión
• clc
• clear
• clear var1, var2
• exist(„nombre‟)
• quit
• who
• whos
MATLAB
Vectores
Vectores Fila
• Vectores que “se ven como filas”
• Se definen con espacios o comas entre sus
elementos.
• >>v = [ 1 3, sqrt(5)]
• Verifique el resultado en el workspace.
• >> length(v)
• Verifique el resultado en el workspace.
Vectores Fila
• Puede haber problemas con los espacios.
• Ejecute:
• v2 = [3+ 4 5]
• Verifique el comportamiento
• Ejecute:
• v3 = [3 +4 5]
• Verifique el comportamiento
Operaciones Vectores Fila
• Deben tener la misma dimensión para la
suma.
• >> v + v3
• Pueden multiplicarse por un escalar.
• >> v4 = 3*v
• Pruebe: >> v + v2
Definición Vectores
• Se pueden formar vectores a partir de otros
vectores (variables) ya definidos:
• >> w = [1 2 3], z = [8 9]
• >> cd = [2*z,-w], sort(cd)
• Verifique el comportamiento.
Indice en Vectores Fila
• Se puede recuperar (ver) el valor de un
componente de un vector o cambiarlo
haciendo uso de un indice.
• El indice se define con el nombre de variable
del vector y con los paréntesis para acceder
a la posición del elemento a cambiar/ver.
• >> w(2) = -2, w(3)
El operador :
• Ejecute:
• >>1:10
• Verifique el resultado.
• Cual es la función del operador “:”?
• De manera general a : b : c produce un
vector con valor inicial a, valor final c e
incrementos de b.
El operador :
• Se puede usar el operador : para definir
vectores:
• >> r5 = [1:2:6, -1:-2:-7]
• Para obtener los elementos del 3 al 6
• >> r5(3:6)
• Cual sera el resultado de?
• r5(6:-2:1)
Vectores Columna
• Vectores que se ven como columna.
• Se definen usando “;”
• Pruebe:
• >> c = [ 1; 3; sqrt(5)]
• >> c2 = [3
• 4
• 5]
Transpuesta
• Se puede convertir un vector fila en un
vector columna y viceversa.
• >> w, w', c, c'
• Defina el vector complejo:
• >> x = [1+3i, 2-2i]
• La transpuesta para x corresponderá a la
transpuesta conjugada.
Producto de Vectores
• Multiplicación de Vector Fila x Columna
• >> u = [ 10, -11, 12], v = [20; -21; -22]
• >> prod = u*v
• Es una multiplicación Matricial!.
• >> w = [2, 1, 3], z = [7; 6; 5]
• >> u*w
• Verifique ambos ejemplos.
Norma de un Vector
• El siguiente muestra dos maneras de
obtener la norma (distancia euclidiana) de
un vector:
• >> [ sqrt(u*u'), norm(u)]
El operador .
• Corresponde al producto Hadamard.
• Trabaja sobre vectores del mismo tipo (fila o
columna).
• >> u.*v'
• Tabulemos la función para
El operador .
• Se puede usar también para la división:
• >> a = 1:5, b = 6:10, a./b
• >> a./a
• >> c = -2:2, a./c
• >> a.*b -24, ans./c
• Verifique el resultado.
MATLAB
Matrices
Ingreso de Matrices
• Ingrese en la ventana de comandos:
• >>A = [ 16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1 ]
• Verifique el resultado.
• Use la flecha “hacia arriba” y reemplace los
espacios en blanco con “comas”.
• Verifique el resultado.
• Ejecute: A‟
• Verifique el resultado
Manejo de Subindices
• Subindices será la manera de acceder a
un elemento de una matriz.
• Usa los parentesis y el nombre de la
variable.
• >>A(1,4)
• Verifique el resultado y la relación con A.
El operador :
• >>A(1:4,4)
• Verifique el resultado.
• Ejecute:
• >>A(:,4)
• Verifique el resultado?
• Cual es la función del operador “:”
manejando subindices?
El operador :
• Se puede utilizar el operador : para generar
matrices:
• >> D = [1:5; 6:10; 11:2:20]
• Verifique el resultado anterior.
Vectores y Matrices
• En MATLAB en general todos son arreglos.
• Un vector columna será una matriz de mx1.
• Un vector fila será una matriz de 1xn.
Tamaño de Matrices
• El comando size nos devuelve la dimensión
de la matriz que se usa como parametro.
• >> size(A)
• >> size(ans)
• El ultimo comando muestra que el valor
retornado por size es en si mismo una matriz
de 1x2.
Tamaño de Matrices
• También se puede guardar las dimensiones
de una matriz en variables separadas.
• >> [r c] = size(A'), S = size(A')
• Verifique los valores de r y c y de S.
• Verifique también los tipos de dato (arreglo)
de dichas variables.
Matrices Especiales
• MATLAB provee algunas funciones propias
de un tamaño deseado.
• ones(m,n) da una matriz de mxn llena de
unos.
• >> P = ones(2,3)
• zeros(m,n) da una matriz de mxn llena de
ceros.
• Z = zeros(2,3)
Matriz Identidad
• Es una matriz de ceros pero en su
diagonal principal esta llena de unos.
• >> I = eye(3), x = [8; -4; 1], I*x
• Note que eye(3) es una matriz
cuadrada identidad.
• Verifique el resultado de I*x.
Matriz Diagonal
• Es una matriz identidad pero su diagonal
principal no es necesariamente ceros.
• >> D = [-3 0 0; 0 4 0; 0 0 2]
• El comando diag puede generar una matriz
diagonal a partir de un vector.
• >> d = [-3 4 2], D = diag(d)
Matriz Diagonal
• Por otro lado si A es una matriz el comando
diag(A) extrae la diagonal principal de dicha
matriz, incluso si la matriz A no es cuadrada.
• >> F = [0 1 8 7; 3 -2 -4 2; 4 2 1 1]
• >> diag(F)
• Verifique la variable ans e identifique “la
diagonal” de F.
Construcción de Matrices
• A veces es necesario generar matrices
grandes a partir de otras mas pequeñas (o
vectores).
• >> C=[0 1; 3 -2; 4 2]; x=[8;-4;1];
• >> G = [C x]
• Note que C es una matriz y x es un
vector columna.
Construcción de Matrices
• Se pueden construir matrices usando
también funciones y operaciones
sobre matrices:
• >> J = [1:4; 5:8; 9:12; 20 0 5 4
• >> K = [ diag(1:4) J; J' zeros(4,4)]
• Pruebe el siguiente comando:
• >> spy(K), grid
El operador end
• Indica el ultimo elemento.
• Ejemplo:

• Verifique el resultado.
MATLAB
Comandos y Funciones Útiles
Expresiones
• Expresiones Matemáticas elementales:
• >> help elfun
• Expresiones Matemáticas especiales:
• >>help specfun
• Expresiones de Matrices elementales:
• >>help elmat
Números Aleatorios
• Para generalos usamos las funciones:
• rand, randn, randint.
• Verifique el uso de:
• >> rand(2)
• >> randn(2)
• >> randint(2,2,[-4 4])
Suma de Elementos
• Se utiliza el comando sum.
• Genere un matriz para probar los siguientes
comandos:
Manejo de valores
• Se manejan complejos automaticos:
• >> c=15+sqrt(-1)
• Y valores “excepción” correctamente:
• >> a=123/0
• >> b=0/0
• >> Inf-Inf
Residue
• La función residue, descompone el cociente
de una fracción en fracciones parciales.
• Teniendo un cociente de la forma:

• La función es:
• >>[r,p,k] = residue(b,a)
Residue
• Entrega los resultados para:

• Descomponga:
Residue
• En fracciones parciales:
• >> b=[1 1 1 2];
• >> a=[1 0 3 0 2];
• >> [r,p,k]=residue(b,a)
• El resultado será:
Sistema Lineal
• Use representación en MATLAB para
resolver un sistema lineal del tipo:
Mostrar y Pedir datos
• La función INPUT imprime un mensaje en la
ventana de comandos y devuelve el
resultado de una expresión teclada por el
usuario.
• INPUT espera hasta que el usuario ingrese
un valor numérico o una expresión
Mostrar y Pedir datos
• Cualquier expresión válida de MATLAB
es aceptada por INPUT.
• >> edad = input(„Ingrese la edad: ')
• En el caso que sea una cadena de texto
es recomendable:
• >> nombre = input('¿Cómo te llamas?','s')
Mostrar y Pedir datos
• La función DISP imprime un mensaje en la
ventana de comandos, puede ser un
mensaje de texto o variables.
• >> disp('El programa ha terminado')
• >> A=rand(4,4)
• >> disp(A)
MATLAB
Scripts y Funciones
Scripts
• Son archivos de texto (.m) que contienen
comandos de MATLAB.
• Para ejecutar los comandos de ese archivo
se debe escribir el nombre del archivo en la
ventana de comandos.
• Las variables y resultados son de ambito
GLOBAL.
Scripts
• Debe estar contenido en el directorio actual
para poder ejecutarlo (F5 o como comando).
• Los nombres de los scripts deben seguir la
regla de las variables de MATLAB.
• Mucho ojo con los espacios.
Scripts
• El nombre del script no debería interferir con
alguna función o con una variable (error
comun).
• Los comentarios en MATLAB se
generan con el símbolo %:
• >> %Esto es un comentario
Script de Ejemplo
Funciones
• Son “user-defined” a diferencia de las “built-
in”, también escritas en .m.
• Las buit-in también son llamadas funciones
de llamada.
• Las user-defined son llamadas funciones de
definición.
• SIEMPRE reciben parametros para realizar
los calculos.
Funciones
• Los comandos dentro de las funciones
operan sobre los parámetros.
• Las variables y resultados son de ambito
LOCAL.
• Los .m de funciones deben encontrarse en
el directorio actual para poder ser llamadas.
Funciones
• Luego de ser creadas y siempre que
estemos en el directorio actual donde esta
contenido el .m de la función de definición,
entonces la función se convertirá en de
llamada.
• También se puede agregar funciones de
definición a MATLAB.
Funciones
• El nombre de la función no DEBERIA
interferir con alguno de una “buit-in”, ni de
otra variable (error común).
• El nombre del archivo .m conteniendo a la
definición de la función DEBE ser igual al
nombre de la función.
Funciones
• La primera linea del archivo debe tener el
formato:

• Luego de esta linea se puede documentar la


función usando comentarios.
Ejemplo Funciones

• Escriba desde la ventana de comandos:


• >> help med_des
Scripts vs. Funciones
MATLAB
Otros Tipos de Datos
Tipos de Datos
Tipos de Datos

• Nos devuelve el tipo de dato de “x”.


• Tambien existen comandos que nos dan
información lógica sobre cada tipo:
• isinteger(x), isfloat(x), ischar(x), islogical(x),
iscell(x), isstruct(x).
• isempty(x), isnan(x), isinf(x).
Tipos de Datos
• El tipo de Dato entero corresponde:

• El tipo de Dato float corresponde:


Conversión de Tipo
• Para convertir se usa el nombre del tipo a
generar como si fuera función:
• >> a = 522.08
• >> int8(a)
• >> int16(a)
• Verifique el redondeo.
Funciones de Redondeo
• round: redondea al entero mas proximo.
• floor: redondea a –inf.
• ceil: redondea a +inf.
• fix: redondea hacia cero.
Funciones de Redondeo
• >> x = pi*(-1:3), round(x)
• >> fix(x)
• >> floor(x)
• >> ceil(x)
• >> sign(x), rem(x,3)
Caracteres, Cadenas y Texto
• MATLAB maneja el tipo Carácter.
• Una cadena es un vector de caracteres.
• Un Texto es una matriz de caracteres.
• >> t1 = 'A'
• Asigna el valor de „A‟ al arreglo de carácter
1x1 t1.
Caracteres, Cadenas y Texto
• >> t2 = 'BCDE'
• Asigna el valor BCDE al arreglo de
caracteres 1x4 t2.
• Las cadenas creadas se pueden tomar
como arreglos regulares y manipularlos.
• >> t3 = [t1,t2]
Acceso de Cadenas
• El direccionamiento funciona como
en vectores:
Construcción de Cadenas
• Asigne:
• >> t4 = [t3,' are the first 5 ';...
• 'characters in the alphabet.']
• Asigna el valor:
• 'ABCDE are the first 5 '
• 'characters in the alphabet.'
Construcción de Cadenas
• Al arreglo de 2x27 t4, es NECESARIO que
ambas filas del arreglo tengan el mismo
numero de caracteres (elementos), eso es
una regla general de arreglos en MATLAB.
• Los … significan que el comando
continua en la línea siguiente.
Cadenas y Números
• Todo carácter tiene un equivalente en valor
numérico.
• str2num convierte una cadena a su
correspondiente representación numérica.
• int2str y num2str convierte
respectivamente un entero y un numero real
a su correspondiente cadena de caracteres.
Cadenas y Números
• Deseamos generar la cadena: „El valor de
pi es 3.1416'.
• [„El valor de pi es ',num2str(pi)].
• Otro ejemplo:
• >> N = 5; h = 1/N;
• >> ['The value of N is ',int2str(N),...
• ', h = ',num2str(h)]
Manejo de Cadenas
• El operador == realiza comparaciones entre
vectores (elemento a elemento)
Manejo de Cadenas
MATLAB
Gráficas
PLOT
• La función PLOT realiza gráficos con por lo
menos un parámetro.
• En el siguiente ejemplo se crea un vector x
con valores entre 0 y 2π, se calcula el seno
de esos valores y se grafican los resultados:
PLOT: Ejemplo 1
• >>x = 0:pi/100:2*pi;
• >>y = sin(x);
• >>plot(x,y)
PLOT: Ejemplo 2
• > >x = [1; 2; 3; 4; 5]
• > >y = [0; .25; 3; 1.5; 2]
• > >plot(x,y)
PLOT y Muestreo
• Para graficar para el rango [0,1] se
muestrea la función a un numero
suficientemente grande de puntos y luego se
los une con líneas rectas.
• Para tomar N+1 puntos igualmente
espaciados a una distancia h:
• >> N = 10; h = 1/N; x = 0:h:1;
PLOT y Muestreo
• Se define el conjunto:
• >> y = sin(3*pi*x);
• >> plot(x,y)
• Verifique el gráfico e identifique que el
numero N es muy pequeño aun.
• Cambie N=100 y verifique el resultado.
PLOT y Muestreo
• El “seno” es una función continua.
• MATLAB trabaja con datos discretos.
• PLOT realiza una interpolación lineal entre
esos datos para graficar.
• Mayor cantidad de puntos (muestras) harán
que la gráfica sea practicamente “continua”.
Propiedades de un PLOT
• >>xlabel('x = 0:2\pi')
• >>ylabel('Seno de x')
• >>title('Gráfica de la función
seno','FontSize',12)
PLOTs con Estilo
• Plot puede recibir un tercer argumento.
• Tercer argumento es una cadena que recibe
como primer carácter el color y segundo el
estilo de linea.
PLOTs con Estilo
• La cadena recibe hasta 3 caracteres:
Multi-PLOT
• >>x = 0:pi/100:2*pi;
• >>y = sin(x);
• >>plot(x,y)
• >>y2 = sin(x-.25);
• >>y3 = sin(x-.5);
• >>plot(x,y,x,y2,x,y3)
• >>legend('seno(x)','seno(x-.25)','seno(x-.5)')
PLOT y el GCA
• Cada llamado de la función PLOT es una
petición para crear un nuevo “eje” (axis –
ventana donde se contiene el gráfico).
• Cada llamado de PLOT entonces
reemplazará la gráfica anterior.
• >>hold on
• “Mantiene” el gráfico actual en el eje actual.
PLOT y el HOLD
• Se puede llamar muchas veces a PLOT pero
no se reemplazará el gráfico hasta que
exista un:
• >>hold off
• Comparar con lo aprendido en “Varios
Gráficos en un PLOT”.
AXIS
• La función/comando axis ajusta los ejes
del gráfico actual. Tiene esta sintaxis:
• >>axis([xmin xmax ymin ymax])
• Cuando se crea un plot y no se ha definido
“axis” entonces el axis es automatico:
• >>axis auto
AXIS
• Pruebe estos valores para axis e
identifique el efecto:
• >>axis square
• >>axis equal
• >>grid on
• >>grid off
Resumen
Practica
SUBPLOT
• Divide la ventana de graficos en un arreglo
mxn en donde se pueden plotear mxn
gráficos.
• Se enumeran de izquierda a derecha, de
arriba hacia abajo.
• subplot(221) (o subplot(2,2,1)) indica que se
divide en 2x2 gráficos y selecciona el 1
subgráfico.
SUBPLOT
• >> subplot(221), plot(x,y)
• >> xlabel('x'),ylabel('sin 3 pi x')
• >> subplot(222), plot(x,cos(3*pi*x))
• >> xlabel('x'),ylabel('cos 3 pi x')
• >> subplot(223), plot(x,sin(6*pi*x))
• >> xlabel('x'),ylabel('sin 6 pi x')
• >> subplot(224), plot(x,cos(6*pi*x))
• >> xlabel('x'),ylabel('cos 6 pi x')
Figuras, Ejes y Panel
• clf, limpia la figura actual.
• close 1, cierra la ventana llamada “Figure 1”.
• figure, abre una nueva ventana.
• figure(9), abre una nueva ventana “Figure 9”.
Figuras, Ejes y Panel
• Cuando se ha ejecutado el comando
PLOT se “crea” (abre) una nueva ventana
que puede recibir graficos (ejes).
• El comando figure crea una ventana
adicional y la convierte en la actual, lo que
significa que si ejecutamos un comando
relacionado a graficos (plot) usara la
“ventana actual” para graficarlo.
Figuras, Ejes y Panel
• El comando close cierra la ventana actual
y el comando close all cierra todos los
graficos.
• Se pueden tener tambien varias graficas
sobre la misma ventana.
• La funcion hold permite montar los graficos
de una misma ventana actual.
Setear Propiedades a un Plot
• Todas las propiedades de cada objeto del
gráfico (figura, ejes, elemento gráfico,...)
están guardadas en "handles“
 
• gcf current figure, gca current axis
• get(handle) muestra todos las propiedades
que se pueden cambiar.
Setear Propiedades a un Plot
• set(handle,'PropertyName','Value',...) cambia
propiedades.
• Para personalizar el eje x sin dependencia
del vector:
• set(gca,'Xtick',[1 2 3 4 5 6]);
• set(gca,'XtickLabel',['ene';'feb';'mar';'abr';'ma
y';'jun']);
Funciones para Graficar
Funciones para graficar en 2D
bar Gráfica de barra
fill Dibujo de polígono en 2D relleno
hist Histograma
image Imagen
loglog Gráfica con ambos ejes en escala logarítmica
plot Gráfica simple
polar Gráfica en coordenadas polares
semilogx Gráfica con eje x en escala logarítmica
semilogy Gráfica con eje y en escala logarítmica
stairs Gráfica de escalera
stem Gráfica de secuencia discreta
Otras Funciones para Graficar
• » x=[1 3 5 9 1 1 6 8 2 3 6 1 2 9 3 4 9 8];
• » hist(x)
• » figure
• » bar(x)
• Interprete los resultados.
Otras Maneras de Graficar
Otras Maneras de Graficar
Practica
• Ejecute el siguiente código:
• >> x = 0:0.05:6; y = sin(pi*x); Y = (y>=0).*y;
• >> plot(x,y,':',x,Y,'-' )
• Interprete los resultados.
Practica
• Grafique en un solo panel:

• Para el rango de [0,10].


Practica
MATLAB
Estructuras de Control
Estructuras de Control
• Se basan en evaluar una expresión si es
verdadera o falsa (1/0).
• Estas expresiones son resultados de
operaciones con:
• <(menor que), >(mayor que), == (igual a), <=
(menor o igual que), >= (mayor o igual que) y
~= (distinto a).
Selección: IF
• Evalúa una condición lógica y si dicha
expresión evalúa un resultado POSITIVO (1)
entonces “selecciona” ejecutar un grupo de
instrucciones, sino evalúa otro grupo.
Selección: IF
• if expr1
• comandos_matlab
• elseif expr2
• otro_comandos_matlab
• ...
• else
• aun_otros_comandos_matlab
• end
Selección: IF
• t = rand(1)
• if t >0.5
• disp(“valor es mayor que 0.5”)
• elseif t <0.25
• disp(“valor es menor que 0.25”)
• else
• disp(“valor está entre 0.25 y 0.5”)
• end
Repetición: Lazos
• El uso de lazos es o debería ser
MUY LIMITADO en MATLAB por el
uso del operador :.
• Los lazos son grandes consumidores de
tiempo.
• Tareas de optimización regularmente se
encargan de evitar los lazos.
Repetición: Lazo For
• Se recomienda para: Repetir la ejecución de
comandos por un número definido de veces.
• for variable = expresión
• comandos_matlab
• end
• “expresión” debe definir el número de veces
que se ejecutan los comandos, variable
controla ese numero de repeticiones.
Repetición: Lazo For
• Imprimir el cuadrado de los 5 primeros
numeros naturales:
• for i=[1, 2, 3, 4, 5]
• disp(i^2)
• end
• Notar que el for anterior tambien pudo ser
escrito asi: “for i=1:5”
Repetición: Lazo For
• Imprimir el cuadrado de los números
decimales de una cifra decimal de 0 a 1, en
forma decreciente, es decir empezando por
1, 0.9, 0.8, ... 0.1, 0:
• for i=1:-0.1:0
• disp(i^2)
• end
Repetición: Lazo For
• Uso de Matriz para asignar valores
• matriz = [ 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4]
• for x = matriz
• x
• end
Repetición: Lazo For
• Creación de subplots usando FOR.
• >> x = -1:.05:1;
• >> for n = 1:8
• >> subplot(4,2,n), plot(x,sin(n*pi*x))
• >> end
Repetición: Lazo While
• Se usa regularmente cuando no se conoce
en primera instancia cuantas repeticiones se
deben ejecutar.
• Las repeticiones dependerán de la expresión
condicional que se evalúa.
• MIENTRAS se cumpla sigue la repetición.
Repetición: Lazo While
• while expresión
• comandos_matlab
• end
Repetición: Lazo While
• Imprimir el valor de x, mientras este sea
positivo, decrementando cada vez x en 17:
• x = 100
• while x >0
• disp(x)
• x = x - 17;
• end
MATLAB
Comandos y Funciones Útiles II
Construcción de Vectores
Construcción de Vectores
x = [1 3 9 33 0 -2] Se crea vector fila x con los elementos
especificados
x = primero:último Se crea vector fila x comenzando con
primero, aumentando en intervalos de
uno, terminando en o antes de último
x = primero:incremento:último Se crea vector fila x comenzando con
primero, aumentando en intervalos de
incremento, terminando en o antes de
último
x = linspace(primero,último,n) Se crea vector fila x comenzando con
primero, terminando en último,
teniendo n elementos
x = logspace(primero,último,n) Se crea vector fila x espaciado
logarítmicamente comenzando con
10primero, terminando en 10último, teniendo
n elementos
Maximo y Minimo
• La función max opera sobre un
vector retornando el valor máximo.
• >> x = [1.3 -2.4 0 2.3], max(x), max(abs(x))
• >> [m, j] = max(x)
• Cuando tomamos 2 resultados de max, que
representa el 2do. Resultado?
Maximo y Minimo
• La función min opera d emanera similar a
max.
• En el caso de que A sea una matriz
max(A) retorna un vector conteniendo el
máximo elemento de cada columna (similar
al comportamiento de sum).
Busqueda en vectores
• El comando find devuelve una lista con las
posiciones de los elementos de un vector
que satisfacen una determinada condición.
• >> x = -1:.05:1;
• >> y = sin(3*pi*x).*exp(-x.^2); plot(x,y,':')
• >> k = find(y > 0.2)
• Verifique el contenido de k e interpretelo.
Busqueda en Vectores
• Representación gráfica de la
búsqueda:
• >> hold on, plot(x(k),y(k),'o')
• >> km = find( x>0.5 & y<0)
• >> plot(x(km),y(km),'-')
Busqueda en matrices
• Opera de manera muy similar en matrices:
• >> A = [ -2 3 4 4; 0 5 -1 6; 6 8 0 1]
• >> k = find(A==0)
• Verifique e interprete el contenido de k.
• Find en una matriz realmente primero
reordena (reshape) la matriz en un vector
para buscar.
Busqueda en matrices
• A=
-2 3 4 4 0 5 -1
66801

-2 0 6 3 5 8 4 -1 0 4 6 1

1 2 3 ...
Busqueda en matrices
• Los indices del reordenamiento de la matriz
quedan:

• >> n = find(A <= 0)


• >> A(n)
Busqueda en matrices
• “n” devuelve una lista de los lugares de las
entradas de A que cumplen ser menores
que cero, luego A(n) nos devuelve los
valores de los elementos seleccionados.
Polinomios
• Los polinomios se definen en base a un
vector de coeficientes.
• MATLAB es una herramienta de cálculo
numerico.
Polinomios: Funciones
• Se pueden realizar algunas funciones, como
obtener las raices del polinomio y también
evaluar el polinomio para un valor de “x”.
• >> pol=[1 0 -8 6 -10]
• >> roots(pol)
• >> polyval(pol,1)
Polinomios: Funciones
• Para realizar la multiplicación entre
polinomios MATLAB usa el producto de
convolución.
• >> pol1=[1 -2 4]
• >> pol2=[1 0 3 -4]
• >> pol3=conv(pol1,pol2)
Hipermatrices
• Matrices de mas de dos dimensiones.
• El tercer subindice representa la tercera
dimensión: “La profundidad de la
hipermatriz”.
Manejo de Datos: Paginas
• Se muestra a continuación cómo organizar
las matrices x1 y x2 de 3x3 en dos páginas,
o sea en un arreglo x de 3x3x2. (La variable
x debe estar inicialmente vacía o no existir):
• » x1=[1 2 3; 4 5 6; 7 8 9]
• » x2=[10 20 30; 40 50 60; 70 80 90]
Hipermatrices
• » x(:,:,1)=x1;
• » x(:,:,2)=x2;
• La información quedará organizada como se
muestra en la figura:
Hipermatrices
• Creación a partir de otras matrices de dos
dimensiones:
• >> AA(:,:,1)=[1 2 3; 4 5 6]
• >> AA(:,:,2)=[2 3 4; 5 6 7]
• Las funciones comunes para uso con
matrices, también pueden manejar
hipermatrices.
Hipermatrices
• >> BB=randn(2,3,2)
• Verifique el resultado como MATLAB
muestra el contenido de las hipermatrices
pequeñas.
• >> A=zeros(2,3); B=ones(2,3);
• Por su naturaleza la concatenación se
realiza a traves de funciones.
Hipermatrices
• La función cat concatena arreglos.
• Recibe 3 parametros el primero es la
dimensión a lo largo de la cual concatenará
2 matrices pasadas como parametros.
• CAT(2,A,B) is the same as [A,B].
• CAT(1,A,B) is the same as [A;B].
Hipermatrices
• >> cat(1,A,B)
• >> cat(2,A,B)
• >> cat(3,A,B)
• Verifique como MATLAB arma la matriz
usando cat.
Hipermatrices
• Tienen reglas especiales para usar
funciones con ellas.
• Todas las funciones de MATLAB que operan
sobre escalares (sin(), cos(), etc.) se aplican
sobre hipermatrices elemento a elemento
(igual que sobre vectores y matrices).
Hipermatrices
• Las funciones que operan sobre vectores
(sum(), max(), etc.) se aplican a matrices e
hipermatrices según la primera dimensión,
resultando un array de una dimensión
inferior.
Hipermatrices
• Las funciones matriciales propias del
Álgebra Lineal (det(), inv(), etc.) no se
pueden aplicar a hipermatrices. Para
poderlas aplicar hay que extraer primero las
matrices correspondientes (por ejemplo, con
el operador dos puntos (:)).
Hipermatrices: Reshape
» reshape(x, 3,
6) ans =
1 2 3 10 20 30
4 5 6 40 50 60
7 8 9 70 80 90
Manejo de Datos
• Matlab permite varias opciones para almacenar las
variables con las cuales se trabaja para su posterior
utilización. En todos los casos el comando es save.
• Para guardar archivos con código ASCII. La sintaxis
es:
– save <nombre del archivo> <variables> -ascii
• Todas las variables que se graben usando este
metodo deben tener la misma dimensión.
Manejo de Datos
• Todas las variables que se graben usando
este metodo deben tener la misma
dimensión.
Manejo de Datos
• Para guardar datos en formato binario:
save <nombre del archivo> <variables>
• Las variables no necesariamente deben tener la
misma dimensión.
• Se pueden generar archivos de datos para leer
desde MATLAB usando un editor de texto como el
Notepad, mantener la extensión .dat para identificar
que es un archivo de datos.
Manejo de Datos
• Supongamos un fichero llamado datos.txt
que tiene, por ejemplo, dos columnas de
valores que son números reales.
• Para leer los datos del fichero:
• [x1,x2] = textread(‟datos.txt‟,‟%f %f‟);
Manejo de Datos
• Otra opción más:
• load ‟datos.txt‟ -ascii
• x1 = datos(:,1);
• x2 = datos(:,2);
Manejo de Datos
• Creando un archivo llamado flat.txt
que contenga las líneas:
• 23.456 56.032 67.802
• 3.749 -98.906 34.910
• El comando A=load(’flat.txt’) leerá estos
valores y los asignará a la matriz A.
MATLAB
Gráficas 3D
Gráficas en 3 Dimensiones
• También se basa en graficar puntos:
• >> t=0:pi/50:10*pi;
• >> plot3(sin(t),cos(t),t)
• Esta gráfica es paramétrica.
• Un solo parámetro resulta en una gráfica de
linea. Se extiende la etiqueta zlabel(„texto‟)
Graficas en 3 Dimensiones
• Se deben generar los valores a graficar,
estos deben ser una matriz.
• Ejemplo:
• >> z = peaks(10)
• >> plot(z)
Graficas en 3 Dimensiones
• >> mesh(z)
• >> contour(z,10)
• >> surf(z)
• Se puede cambiar “la vista” desde la
ventana de comandos:
• >> view(0,0)
• >> view(90,0)
Superficies
• Una superficie también se define
matemáticamente con una función f(x,y).
• Para cada valor de (x,y) se calcula “la altura”
de la función: z = f(x,y).
• Para plotear esto debemos definir un rango
de “x” y de “y” para el gráfico.
Superficies
• Definiendo el dominio:
• x = 2:0.5:4; y = 1:0.5:3;
• Definido el dominio debemos definir la
“grilla” de valores que servirán de los puntos
(x,y) para graficar.
• Esto es como relacionar “x” y “y”.
Superficies
• >> [X,Y] = meshgrid(2:.5:4, 1:.5:3);
• >> X
• Si tomamos el i-esimo punto desde la
izquierda y el j-esimo punto desde debajo de
la grilla como el correspondiente (i,j) entrada
en una matriz, entonces (X(i,j),Y(i,j)) serían
las coordenadas de ese punto.
Superficies
• Plotee la siguiente función:

• >> [X,Y] = meshgrid(2:.2:4, 1:.2:3);


• >> Z = (X-3).^2-(Y-2).^2;
• >> mesh(X,Y,Z)
• >> title(„Silla'), xlabel('x'),ylabel('y')
Superficies
• Grafique la siguiente superficie:

• Encuentre los valores máximos de la


función.
Superficies
• >> [X,Y] = meshgrid(-2:.1:2,-2:.2:2);
• >> f = -X.*Y.*exp(-2*(X.^2+Y.^2));
• >> figure (1)
• >> mesh(X,Y,f), xlabel('x'), ylabel('y'), grid
• >> figure (2), contour(X,Y,f)
• >> xlabel('x'), ylabel('y'), grid, hold on
Superficies
• Para encontrar los máximos:
• >> fmax = max(max(f))
• >> kmax = find(f==fmax)
• >> Pos = [X(kmax), Y(kmax)]
• >> plot(X(kmax),Y(kmax),'*')
• >> text(X(kmax),Y(kmax),' Maximo')
Diferentes Dominios
x=[-20,-10,-5,-2,-1,0,1,2,5,10,20]/10;
y=x;
[X,Y]=meshgrid(x,y);
Z=cos(X)+cos(Y);
subplot(3,1,1)
surf(Z);
Diferentes Dominios
axis([0 11 0 11 0
2]) subplot(3,1,2)
surf(x,y,Z);
subplot(3,1,3)
surf(X,Y,Z);
Otros Graficos 3D
MATLAB
Estructuras y Celdas
Tipos de Datos
Estructuras
• Permiten guardar valores de diferente tipo
de dato bajo un mismo nombre.
• Organizan la información, siguen un modelo
de campo-valor.
• El acceso a los elementos de cada una
de las claves se hace con “.”
Estructuras
• >> punto.x=2
• >> punto.y=3
• >> punto.color='rojo„
• >> punto
• Se pueden crear tambien vectores de
Estructuras:
• >> punto(2).x=4, punto(2).y=5, punto(2).color='verde'
Estructuras
• Verifique el direccionamiento:
• >> punto(1), punto(2)
• Y el direccionamiento de campos:
• >> campo = „x‟
• >> punto.(campo)
Celdas (Cell Array)
• Construye un arreglo donde cada elemento
puede ser de un tipo diferente.
• >> c={12,'Red',magic(4)};
• Verifique el contenido de c en el workspace
• Se utilizan llaves { } en lugar de corchetes [ ]
o paréntesis ( )
Celdas (Cell Array)
• >> b{1}=12;
• >> b{2}='Red';
• >> b{3}=magic(4);
• La diferencia con las estructuras es que se
accede a los valores utilizando un índice en
lugar del nombre del campo.
• – Trabajar con estructuras es ineficiente
Celdas (Cell Array)
• >> a{1,1} = 12;
• >> a{1,2} = 'Red';
• >> a{1,3} = magic(4);
• >> a{2,1}=ones(3);
• >> a{2,2}=43;
• >> a{2,3}='texto';
Celdas (Cell Array)
• Utilizando ( ) accede a un elemento, que es
tipo cell.
• • Utilizando { } accede al valor.
• Verifique los tipos con:
• class(a)
• class(a(1,1))
• class(a{1,1})
Conexión a EXCEL: Exportar Datos
• xlswrite(„Archivo', [12.7 5.02;-98 63.9])
• d = {'Tiempo', 'Temp'; 12 98; 13 99; 14 97};
• s = xlswrite(„file.xls', d, 'Temperaturas', 'E1')
• Verifique el resultado
Leer Datos
• [tipo, hojas] = xlsfinfo(„file.xls„)
• [ndata, headertext] = xlsread(„file.xls', „Hoja‟)
• A = xlsread(„file.xls', 1, 'A4:B5')
Exportar Datos
• Cree un script que permita escribir este
archivo:
MATLAB
GUIDE
GUI
• GUI (Graphical User Interface) es util para
presentar un desarrollo final.
• Adhiere usabilidad al ajuste de parametros y
visualizacion de un programa
• La elaboración de GUI se puede realizar de
dos formas:
– Código a través de un script
– GUIDE que es la herramienta de diseño de
MatLAB.
GUIDE
• Para iniciarla ejecute el comando “guide” en
MATLAB
• Seleccione un GUI vacio
GUIDE
• Obtendra un formulario en blanco al cual
puede agregar CONTROLES.
• Se debe antes preparar un diseño de la GUI
Partes de la ventana GUIDE
Estructura Jerárquica
de controles
Ejemplo: PLOTTER
• Se desea crear una GUI que realice un
PLOT de una funcion determinada.
• Primero se ubican los controles basicos
para el programa del menu: axes, static text,
edit box, button.
Plotter
Controles Basicos
• Axes: un espacio para dibujar.
• Static text: texto que se adhiere a la
pantalla y el usuario no puede editarlo
• Edit box: una caja blanca que el usuario
puede modificar
el contenido
• Button: realiza una accion cuando el
usuario da click en el.
El Inspector de Propiedades
• Cuando le dan doble click a un control,
muestra una ventana listando todas las
propiedades de ese control (fuente, posicion,
tamaño, etc.).
• Tag: el nombre del control en el codigo, es
mejor renombrarlo por algo identificable.
El Inspector de Propiedades
• String: el texto que
aparece en el control.
• ForegroundColor:
color del texto.
• Background color:
color del control.
Ejecutando
• Si presionan la flecha verde en la parte
superior del editor GUI se grabara el trabajo
actual y correra el programa. La primera vez
que lo corra preguntara el nombre del
programa.
• Probar corriendo el programa. (que aun no
hace nada).
Ejecutando
• Para agregar funcionalidad a la GUI se debe
definir un callback para el boton para que asi
grafique la funcion cuando se presione
Escribiendo Callbacks
• Cuando se corra el programa, se crean 2
archivos:
• .fig: contiene el esquema grafico de los
controles.
• .m: contiene el codigo que define la funciòn
callback para cada uno de los controles.
Escribiendo Callbacks
• Generalmente no se edita el codigo de
inicializacion del .m.
• Probablemente muchos callbacks de
controles se quedaran en blanco.
• Se puede seleccionar el control y dar click
derecho para editar el Callback con la
opciòn “View Callback”.
El Callback del botón
• % --- Executes on button press in PlotButton.
• function PlotButton_Callback(hObject, eventdata,
handles)
• % hObject handle to PlotButton (see GCBO)
• % eventdata reserved - to be defined in a future
version of MATLAB
• % handles structure with handles and user data (see
GUIDATA)
El Callback del boton
• Se pueden borrar los comentarios.
• Cada funcion tiene el parametro handles.
Dicho parametro contiene todos los
controles: handles.PlotButton,
handles.edit1, etc…
• Se pueden agregar variables a handles para
hacerlas disponbiles en todos los
controles/funciones: handles.x=42;
Handles
• Cada uno de los objetos de MATLAB tiene
un identificador único (handle), a los cuales
se les llamará handle o id.
• Los identificadores de la ventana activa,
de los ejes activos y del objeto activo se
pueden obtener respectivamente con los
comandos :
Handles
• gcf (get current figure) devuelve un entero,
que es el handle de la ventana activa
• gca (get current axes) devuelve el handle de
los ejes activos
• gco (get current object) devuelve el handle
del objeto activo
• delete(handle) borra el objeto correspondiente
y todos sus objetos que dependen de él.
Escribiendo Callbacks
• Se puede obtener cualquier propiedad de un
control con la funcion GET. De manera
similar, se puede cambiar el valor de
cualquier propiedad con la función SET.
• En este caso queremos OBTENER el String
escrito en el edit box y graficarlo.
Escribiendo Callbacks
• function PlotButton_Callback(hObject, eventdata,
handles)
• x = -10 : 0.1 : 10;
• s = get(handles.functionEdit, 'String');
• y = eval(s); %eval just evaluates the given string
• handles.axes1; %Subsequent commands draw on
axes1.
• plot(x, y);
Corriendo el programa
• Cuando se modifica el codigo del m-file no
se tiene que volver a correr la GUI (solo se
ha modificado la funcionalidad).
• Para correr el GUI se puede usar tambien
desde el command window el nombre de la
GUI como si fuera un script.
Otros controles
• Slider bar: el usuario puede moverse
adelante y hacia atrás. La posicion actual
es dada por Value, el cual esta entre un Min
y un Max. El callback se activa en cualquier
momento que el slider es movido.
• Check box: el usuario puede activar o
desactivarlo, similar al Radio Button.
Otros controles
• Pop-up menu: el usuario puede seleccionar
de una lista de items. En la propiedad
String, se pueden tipear multiples lineas. La
opcion seleccionada actualmente esta dada
por Value.
• Panel: un rectangulo para colocar controles,
util para organizar la GUI.
Practica:
• Deberá re-escribir 3 metodos callback para
la funcionalidad mostrada:
• Usar funciones: get y set, conversion de
caracteres, operaciones matematicas, y para
salir muestre un mensaje (msgbox) diciendo
que va a salir del programa durante 3
segundos antes que se cierre (close).
Practica
MATLAB
DAQ
Toolbox: DAQ
• El toolbox de Adquisición de Datos (DAQ) le
permite al usuario capturar y/o generar
señales reales e interactuar con ellas desde
Matlab.
• Un sistema de adquisición de datos es un
conjunto de software y hardware que
permiten a un sistema digital conectarse” al
mundo real.
Toolbox: DAQ
• Un sistema de adquisición de datos típico
está formado de:
• Sensores y actuadores
• Hardware de adquisición de datos
• Hardware de acondicionamiento de señal
• Computadora o procesador
• Programa
Esquema de DAQ
Transductores y Hardware
• A los sensores y actuadores también se les
conoce como transductores.
• Transductor es aquel elemento que
convierte una señal de entrada de cierta
naturaleza en una señal de salida de otra
naturaleza.
Transductores y Hardware
• Por ejemplo, un micrófono es un sensor que
convierte energía sonora (en forma de
presión) en energía eléctrica, mientras que
una bocina es un actuador que convierte
una señal eléctrica en una señal sonora.
Transductores y Hardware
• El Hardware es el corazón de cualquier
sistema de adquisición de datos. Su función
es convertir señales analógicas provenientes
del mundo real a señales digitales
(convertidores analógico a digital, ADC) y/o
convertir señales digitales a analógicas
(convertidores digital a analógico, DAC).
HW de acondicionamiento de la señal
• Generalmente las señales de los sensores
son incompatibles con el hardware de
adquisición de datos; para lograr la
compatibilidad se requiere acondicionar la
señal.
• Por ejemplo, si la señal es muy pequeña, es
necesario amplificarla; por el contrario, si la
señal es muy grande se requiere atenuarla.
HW de Acondicionamiento
• También es muy común eliminar
componentes de frecuencias indeseables
que se encuentran presentes en la señal a
procesar. En el caso de las señales de
salida, generalmente estas son de baja
corriente y mediante hardware se les
amplifica y aumenta la corriente.
La computadora y el Software
• La computadora proporciona un procesador,
un reloj, un bus para transferir datos y
espacio de memoria o disco para almacenar
datos.
• El software de adquisición de datos permite
intercambiar información entre la
computadora y el hardware.
La computadora y el Software
• Por ejemplo, los programas típicos permiten
configurar la tasa de muestreo de una tarjeta
de adquisición de datos y adquirir un número
predefinido de muestras.
Toolbox de DAQ
El toolbox de adquisición de datos se divide en
tres componentes principales:
• Las funciones M establecidas
• El motor de adquisición de datos
• Los manejadores (drivers) de la tarjeta de
adquisición de datos (en este caso, la de
sonido)
DAQ y MATLAB
Adaptadores
• Fabricante Nombre del adaptador
• National Instruments nidaq
• ComputerBoards cbi
• Agilent Technologies hpel432
• Tarjetas de sonido para Windows winsound
DAQ Básico: IN
• 1. Creación el dispositivo de objeto. Crear el
objeto del canal analógico de entrada „ai‟
para la tarjeta de sonido
– ai=analoginput(„winsound‟)
• 2. Agregar canales. Agregar un canal de
hardware
– addchannel(ai,1);
DAQ Básico: IN
• 3. Configurar los valores correspondientes.
Configure la tasa de muestreo a 44.1 KHz
y capture un segundo de muestras (44100
muestras)
– set(ai,'SampleRate',44100)
– set(ai,'SamplesPerTrigger',44100)
DAQ Básico: IN
• 4. Adquirir datos. Iniciar la adquisición.
Cuando terminen de adquirir todos los datos,
„ai‟ automáticamente detiene la ejecución.
– start(ai)
DAQ Basico: IN
– data = getdata(ai);
– plot(data)
• 5. Limpiar el espacio de trabajo. Una vez
que ya no se requiera utilizar „ai‟, debe
eliminarse de la memoria y del espacio de
trabajo de Matlab.
– delete(ai)
– clear ai
DAQ Basico: OUT
• 1. Creación el dispositivo de objeto. Crear el
objeto del canal analógico de salida „ao‟
para la tarjeta de sonido
– ao=analogoutput(„winsound‟)
• 2. Agregar canales. Agregar un canal de
hardware a „ao‟
addchannel(ao,1);
DAQ Básico: OUT
• 3. Configurar los valores correspondientes.
Configure la tasa de muestreo a 44.1 KHz
y capture un segundo de muestras (44100
muestras)
– set(ao,'SampleRate',44100)
DAQ Básico: OUT
• 4. Sacar datos. Iniciar la adquisición. Crear
un segundo de datos de salida y
almacenarlos para una eventual salida por el
subsistema de salida analógico. Debe
almacenarse una columna de datos para
cada canal añadido.
– n=0:1:88200;
– data = sin(2*pi*n*1000/44100);
– putdata(ao,[data‟])
DAQ Básico: OUT
• Iniciar la salida. Cuando todos los datos
hayan salido, „ao‟ automáticamente
finaliza la ejecución.
– start(ao)

• Esta línea bloquea la línea de comando de


Matlab hasta que se detiene „ao‟
– while strcmp(ao.Running,'On')
– end

You might also like