You are on page 1of 13

INGENIERA EN CONTROL Y AUTOMATIZACIN INDUSTRIAL

Asignatura:
CONTROL DIGITAL
Docente:
Fabian Len (Ing. Ph.D.)
Practica 1

Introduccin a MATLAB
Resumen
El objetivo de la prctica es introducir una herramienta de software que se utilizar en este
curso y otros sucesivos: MATLAB (de MathWorks, www.mathworks.es). Aunque se trata de
una herramienta verstil y con muy distintas aplicaciones, estas sesiones estn dirigidas al uso
de MATLAB para analizar y simular sistemas dinmicos y asistir en el diseo de sistemas de
control.
1. Introduccin
Inicialmente pensado como herramienta de clculo matemtico, MATLAB se ha convertido en
una de las herramientas ms utilizadas en diferentes reas de conocimiento, que van desde la
ingeniera hasta el anlisis estadstico o financiero.
Algunas de las aplicaciones ms habituales de MATLAB son:
Realizacin de clculos matemticos.
Modelado y simulacin.
Desarrollo de algoritmos.
Adquisicin de datos.
Anlisis y procesado de datos y seales.
Creacin de grficos cientficos y de ingeniera.
Desarrollo de aplicaciones.
MATLAB ha ido creciendo a base de incluir libreras especializadas en ramas de conocimiento
especficas: finanzas, tratamiento de seal, biologa computacional, etc. En esta prctica nos
centraremos en el ncleo de MATLAB.
1.1 Componentes de MATLAB
MATLAB consta de cinco elementos fundamentales:
1. Entorno de desarrollo. Se trata de un conjunto de utilidades que permiten el uso de
funciones MATLAB y ficheros en general. Incluye el espacio de trabajo MATLAB y la
ventana de comandos.
2. La librera de funciones matemticas MATLAB. Se trata de un amplio conjunto de
algoritmos que comprende funciones elementales (como la suma) y funciones ms
sofisticadas (como la inversin de matrices, las transformadas de Fourier, o el mtodo
Simplex).
3. Grficos. MATLAB dispone de un conjunto de utilidades destinadas a visualizar
datos mediante grficas y ofrece muchas posibilidades para ajustar su aspecto.
4. Lenguaje de programacin. MATLAB incorpora un lenguaje de programacin completo
con el que crear programas y funciones que hagan uso del resto de sus capacidades.
5. El interfaz de aplicacin de MATLAB (API). Consiste en una librera que permite
escribir programas ejecutables independientes en C y otros lenguajes.
En esta prctica nos centraremos en el entorno de desarrollo, las libreras de funciones
matemticas y las capacidades para generar grficas.

Figura 1. Interfaz de usuario de MATLAB.
1.2. Puesta en marcha y organizacin de ventanas
MATLAB se puede arrancar haciendo doble clic sobre el icono del escritorio o a travs del
men Inicio. Se abrir la ventana que presenta el aspecto de la figura 1. La figura muestra el
espacio de trabajo con la divisin en ventanas por defecto:
La estructura del directorio donde nos encontramos (arriba a la izquierda)
La historia de los comandos que se han tecleado (debajo a la izquierda)
La ventana de edicin de programas de MATLAB (arriba a la derecha)
La lnea de comandos, donde se teclean los comandos de MATLAB (abajo a la derecha)
1.3. Ayuda en lnea
Si se ha instalado la ayuda, podemos acceder a ella en todo momento pulsando la tecla F1. La
documentacin est organizada con un ndice en forma de rbol y mediante enlaces. La ayuda
es muy til, tanto a modo de introduccin como de referencia para temas especficos. Si se
desea ver la ayuda especfica asociada a un comando de MATLAB, se puede teclear help
nombrecomando en la lnea de comandos de MATLAB.
2. Sintaxis bsica en MATLAB
2.1. Creacin y asignacin de variables
Lo primero que hay que tener en cuenta es que en MATLAB todos los objetos son matrices. Por
ejemplo, un escalar es una matriz 1x1. Usando la lnea de comandos podemos asignar un
nombre simblico para identificar una matriz, por ejemplo:
a=[10; 20; -15]; %Asignar
Esto es una asignacin de un vector columna que llevar el nombre a (a su derecha aparece
un comentario, indicado con %, tiles solo cuando escribimos programas en MATLAB).
Los objetos pueden crearse en cualquier momento. Para ello basta con asignarles un valor
mediante una asignacin, como en el ejemplo previo. Los identificadores nombres
empleados para designar cada matriz son de libre eleccin, pero no pueden comenzar con un
nmero ni contener espacios en blanco.
En las sentencias previas aparece el signo punto y coma (;) al final de cada comando. Este
smbolo sirve para separar unos comandos de otros cuando escribimos varios comandos en
una sola lnea. Adems, si escribimos un comando aislado (sin ;) y pulsamos ENTER, MATLAB
proporcionar siempre una salida en respuesta al comando:
a= [10; 20; -15]
a = 10
20
15

Sin embargo, si escribimos el comando seguido de ;, no se mostrar la respuesta en
pantalla. Cuando los comandos forman parte de un programa es conveniente emplear ; para
evitar llenar la pantalla con informacin innecesaria.
Una vez creado un objeto de MATLAB, ste pasa a formar parte del espacio de trabajo
ocupando una porcin la memoria (workspace). Puedes consultar el listado de la variables
existentes en el espacio de trabajo mediante el comando whos (ver ayuda). A veces
necesitaremos eliminar objetos que ya no se utilicen para liberar memoria; para ello se emplea
el comando clear (ver ayuda).
2.2. Sintaxis de vectores y matrices
Las matrices (y vectores como caso particular de las mismas) se expresan en MATLAB
empleando corchetes ([ ]) y separando las filas con espacio o coma (,) y las columnas con punto
y coma (;). Empleando estos comandos se pueden crear matrices del siguiente modo:
mat=[1 2 3; 4 5 6; 7 8 9]
mat = 1 2 3
4 5 6
7 8 9
Cuando se trata de un escalar, podemos prescindir de los corchetes:
rad=3.1415;
Los elementos de las matrices pueden ser reales o complejos. En este ltimo caso se emplea la
letra i para -1. Como ejemplo podemos definir el vector fila v = [2 + 3i, -5i, 3]:
v=[2+3i, -5i, 3]
El acceso a elementos de una matriz previamente definida puede realizarse especificando la
fila y columna del elemento que nos interesa entre parntesis.
mat(2,3) % Acceso al elemento (2,3) de la matriz mat
Dentro de los parntesis podemos usar variables y operaciones ms complejas.
2.3. Operaciones de rango
En MATLAB existe un operador muy til que la mayora de lenguajes de programacin no
incorporan, el operador de rango (:). Supongamos que queremos crear un vector con todos los
nmeros enteros entre 1 y 10, bastar con usar el operador con la expresin:
a=1:10
a = 1 2 3 4 5 6 7 8 9 10
La sintaxis general del operador de rango es: valor mnimo:incremento:valor mximo. As,
para generar todos los nmeros entre 1 y 2 en incrementos de 0.2 escribiremos:
a=1:0.2:2
a = 1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
Una segunda aplicacin del operador de rango es el acceso a submatrices o subvectores.
Supongamos que hemos definido la matriz mat anteriormente mencionada:
mat=[1 2 3; 4 5 6; 7 8 9];
Para acceder a la submatriz comprendida entre los elementos (2,1) y (3,2) bastar con escribir:
mat(2:3,1:2)
ans= 4 5 7 8

Se puede usar el trmino end para indicar que el rango se extiende hasta el ltimo elemento
del vector o matriz:
a(4:end)
Para obtener los 3 ltimos elementos del vector a podemos usar el siguiente comando:
a((length(a)-2):end)
2.4. Operaciones bsicas con MATLAB
Una vez definidos los objetos con sus identificadores, podemos realizar operaciones
aritmticas entre ellos. Para las operaciones vectoriales y matriciales, MATLAB verificar la
coherencia de las dimensiones de los operandos antes de dar un resultado. Como ejemplo
podemos definir dos vectores v1y v2y calcular un tercer vector v3a partir de ellos:
v1=[2+3i, -5i, 3];
v2= [0, 1, 7];
v3=v1+2*v2+[1, 1, 1]
La figura 2 ilustra las operaciones aritmticas y lgicas bsicas que se pueden realizar en
MATLAB. Estas operaciones se aplican indistintamente a escalares, vectores y matrices. En Las
ms usadas son: +, -, *. (Multiplicacin de dos vectores punto a punto), /. (Divisin de vectores
punto a punto). Si no se incluye el punto en * /, MATLAB realiza la operacin de manera
matricial.
Es posible usar MATLAB directamente como una calculadora, tecleando las expresiones en
lnea de comandos para obtener el resultado de las mismas, pero tambin se pueden agrupar
las operaciones:
12*24.8 % A modo de calculadora
ans = 297.6000
a=1, b=5, c=0.5
x1=-b+sqrt(b2-4*a*c)/(2*a); % Agrupando operaciones

Figura 2. Operaciones aritmticas y lgicas en MATLAB.
2.5. Uso de funciones matemticas
Muchas operaciones que se realizan con MATLAB son llamadas a funciones. Las funciones
procesan informacin, por lo que poseen datos de entrada y de salida (ambos pueden ser
matrices). Los datos de entrada se especifican entre parntesis, y si son varios, separados por
comas. Por ejemplo, la siguiente funcin calcula la raz cuadrada de su nico valor de entrada,
el vector fila [4, 2]:
sqrt([4 2])
ans= 2.0000 1.4142
Las figuras 3, 4, 5 y 6 muestran ejemplos de funciones disponibles en MATLAB. Las funciones
pueden ser parte del paquete bsico de MATLAB, pertenecer a una librera o haber sido
escritas por el usuario (este ltimo caso lo veremos ms adelante).

Figura 3. Funciones elementales de MATLAB: Exponenciales.

Figura 4. Funciones elementales de MATLAB: Ajuste y Redondeo.

Figura 5. Funciones elementales de MATLAB: Operaciones Matriciales.

Figura 6. Funciones elementales de MATLAB: Trigonometra.
2.6. Almacenamiento en ficheros
MATLAB permite almacenar en el disco las variables del espacio de trabajo. De este modo es
posible parar una sesin de trabajo o guardar las variables resultado en un archivo. La orden
ms comn para almacenar datos es save (ver detalles en la figura 7). Para recuperar las
variables almacenadas previamente en un archivo usamos la funcin load (ver detalles en la
figura 8).

Figura 7. Funciones para almacenar la informacin en ficheros.


Figura 8. Funciones para recuperar la informacin almacenada en ficheros.
3. Programando en MATLAB: uso de scripts
Hasta ahora hemos usado MATLAB introduciendo los comandos uno a uno en la lnea de
comandos, pero es mucho ms prctico agrupar la secuencia de comandos en un programa o
script de MATLAB. Si una secuencia de comandos se almacena en un archivo de texto
(MATLAB script file o M-file) con la extensin .m, invocar el nombre del archivo desde la
lnea de comandos tiene el mismo efecto que introducir de forma secuencial toda los
comandos incluidos en el archivo. Para facilitar la creacin y depuracin de estos
programas, controlando la correccin de la sintaxis, MATLAB dispone de un editor de texto
propio (ver seccin 1).
La ventaja de usar scripts es que nos permiten almacenar la secuencia de comandos que
hemos usado en nuestros clculos, pudiendo replicarlos cuando queramos. Adems, mediante
estos programas o scripts podemos explotar el lenguaje de programacin incluido en
MATLAB para la realizacin de bucles (for, while), ejecuciones condicionales (if, switch),
creacin de funciones, etc. La combinacin de este lenguaje con las funciones matemticas y
de representacin grfica es lo que hace de MATLAB una herramienta tan potente y flexible.

4. Grficos en MATLAB
Visualizar la evolucin temporal de sus seales es til para estudiar el comportamiento
dinmico de un sistema. La operacin ms habitual es representar la seal de salida del
sistema frente a una seal de entrada. En este apartado se muestra como representar
grficamente una seal de la cual se conoce su expresin en funcin del tiempo. Al disponer
de dicha expresin, se puede obtener una representacin de la seal como un vector de
puntos, cada uno de los cuales corresponde al valor de la seal en un determinado instante de
tiempo. Cuanto mayor sea el nmero de puntos obtenidos para un mismo tramo de la
evolucin temporal de la seal, mejor ser la representacin de la seal continua. El comando
bsico para generar grficos es el comando plot.
Vamos a representar la seal sinusoidal cuya expresin temporal es la siguiente:
y(t)=3sen(5t), parat0
La secuencia de comandos siguiente permite obtener un vector de muestras de la seal
sinusoidal correspondiente a los 10 primeros segundos de su evolucin temporal, tomando
una muestra de la seal cada 0.01 segundos:
T=[0:0.01:10]; % Vector de tiempos
Y=3*sin(5*T); % Seal sinusoidal
la variable resultante Y ser un vector de 1001 elementos, de forma que el elemento que
ocupa la posicin i (esto es, Y(i)) corresponde al instante de tiempo (i-1)*0.01. Las dimensiones
de los vectores generados pueden comprobarse con el comando whos. A partir de los datos
en el vector Y puedes comprobar que el valor de la seal en t=7.3 segundos es -2.795. El vector
Y es una representacin numrica de la seal sinusoidal, a partir de la cual podemos obtener
una representacin grfica de la seal mediante el comando plot:
plot(T,Y);
El primer vector indica el eje horizontal de la grfica, que a menudo ser el vector de tiempos.
El segundo vector corresponde al eje vertical y contiene la informacin de la seal a
representar. Una vez obtenida la representacin grfica se puede emplear el zoom para
analizar con mayor detalle la seal representada. Comprueba, por ejemplo, que el valor de la
seal en t=7.3 segundos coincide con el obtenido a partir del vector.
El comando plot tambin permite especificar distintos tipos de trazados y colores. Consulta la
ayuda (help plot) para ms informacin. En la figura 9 se enumeran otros comandos
relacionados con la representacin grfica de seales en MATLAB. Consulta su ayuda para
conocer su sintaxis.

Figura 9. Comandos de representacin de grficos

5. Escribir funciones
Hemos visto que muchas operaciones en MATLAB son llamadas a funciones, y que la potencia
y versatilidad de MATLAB reside en que ofrece un amplio abanico de stas (desde funciones
matemticas bsicas hasta funciones muy especializadas de clculo estadstico, tratamiento de
seal, matemtica financiera, etc). Adems MATLAB permite al usuario programas sus propias
funciones.
Para crear una funcin en MATLAB tenemos que escribir la funcin en un script M-file. El
nombre del archivo ser el nombre de la funcin, y el script tiene que incluir una cabecera
especfica en su primera lnea. La sintaxis de esa primera lnea es la que sigue:
function [out1, out2, ...] = funname(in1, in2, ...)
Esta cabecera define una funcin llamada funname que acepta entradas in1, in2, etc. y
devuelve las salidas out1, out2, etc. El nombre de la funcin debe coincidir con el nombre del
M-file.
Un ejemplo de una funcin es el siguiente:
function [mean,stdev] = stat(x)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2/n));

Esta funcin toma un vector como entrada y devuelve la media de sus valores y su desviacin
tpica. Una vez definida la funcin y el archivo stat.m, podemos usarla desde la consola de
comandos, desde un script, o desde otra funcin, como si se tratase de una funcin propia de
MATLAB:
x = [1 2 3 4 8 3 1 3] % Definimos un vector cualquiera
[a,b]=stat(x) % Calculamos su media y desviacin

Crear funciones propias permite compartirlas y reutilizar cdigo de forma cmoda. (Cuando
los programas crecen en tamao y complejidad, dividirlos en subrutinas es necesario para
mantener su legibilidad y que puedan depurarse errores.)


Actividad Prctica 1
GENERACIN Y GRAFICACIN DE SEALES DISCRETAS
OBJETIVOS
1. Comprender como se simulan seales discretas en el tiempo usando MATLAB
2. Generar seales exponenciales, sinusoidales, cuadrada, diente de sierra y escaln,
visualizarlas en forma discreta.
3. Revisar las diferentes modalidades que existen para graficar una seal.
EXPERIMENTO
Genere un archivo .m nuevo. Escriba cada instruccin y ejectela para ver su funcionamiento.
Al terminar la prctica podr ejecutar todas las instrucciones y mostrar los resultados a su
profesor. Se le sugiere separe zonas de ejecucin usando la instruccin pause.

SEALES DISCRETAS
Antes de continuar borre todos los valores que se encuentran almacenados en memoria:
>>clear
Esta instruccin tambin puede emplearse para borrar una sola variable. Por ejemplo:
>>clear w
o ms de una variable:
>>clear x, v1, v2
Para generar una seal discreta en el tiempo x[n], primero se debe definir un vector ndice
temporal 'n' apropiado. Por ejemplo, para producir una curva exponencial decreciente
x[n]=0.9
n
en el intervalo escriba:
>>n=[-10:10]
La curva exponencial decreciente x[n] se obtiene escribiendo:
>>x=(0.9).^n;
Donde '.^ ' representa la operacin de elevar 0.9 a cada uno de los elementos de n. A
continuacin grafquela.
>>stem(n,x)
Obtenga una exponencial creciente:
>>w=(1.11).^n;
Grafquela:
>>stem(n,w)
Genere y grafique la seal par x3[n]=0.9
|n|

>>x3=(0.9).^abs(n);
>>stem(n,x3);
Calcule y grafique la sinusoidal compleja y[n]=e
jn/5-/3
.
>>y=exp(j*pi*n/5-pi/3);
>>stem(n,y);
Grafique las partes real e imaginaria de y[n].
Calcule la funcin z[n]=x[n]y[n]
>>z=x.*y;
Explique cmo se interpretan las partes real e imaginaria de z[n].
Genere dos sinusoidales reales.
>>v1=cos(pi*n/5-pi/3);
>>v2=sin(pi*n/5+pi/4);
Grafquelas usando el comendo subplot en una nueva figura:
>>figure
>>subplot 211
>>stem(n,v1);
>>subplot 212
>>stem(n,v2);
GENERACIN DE ESCALN UNITARIO DISCRETO
>>x = ones (1,11); % define once valores de 1's
>>axis ([ 0 10 0 2]); % define valores de ejes
>>plot (x,'ro') % grafica crculos de color rojo
>>xlabel ('k') % asigna rotulo al eje x
>>ylabel ('x(k)') % asigna rotulo al eje y
>>title (ESCALON UNITARIO DISCRETO)

GENERACIN DE LA RAMPA UNITARIA DISCRETA
>>k = 0:10; % define valores de k
>>x = k; % funcin rampa para x
>>axis([0 10 0 10]); % define ejes
>>grid % rejilla para grafica
>>plot(k, x,'ro') % grafica x en funcin de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k)'); % rotulo para eje y
>>title('RAMPA UNITARIA DISCRETA')
GENERACION DE LA FUNCION POTENCIAL x(k) = 2
k

>>k=linspace(0,5,20); % define valores de k
>>x=2.^ k; % funcin potencial
>>grid % rejilla para grafica
>>plot(k, x,'ro') % grafica x en funcin de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k)'); % rotulo para eje y
>>title('POTENCIAL DISCRETA')

GENERACION DE LA FUNCION EXPONENCIAL x(k) =e
-2k

>>k = linspace (1,5,20); % define valores de k con espaciamiento lineal
>>x = exp(-2*k); % funcin exponencial
>>grid % rejilla para grafica
>>plot(k, x,'bo') % grafica x en funcin de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k)'); % rotulo para eje y
>>title('EXPONENCIAL DISCRETA')

GENERACION DE LA FUNCION SENO: x(k) = sen(wkT)
>>k = linspace(1,20); % define valores de k con espaciamiento lineal
>>x = sin(k); % funcin exponencial
>>grid % rejilla para grafica
>>plot(k, x,'bo') % grafica x en funcin de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k) =seno(k)'); % rotulo para eje y
>>title('SENOIDAL DISCRETA')

You might also like