Está en la página 1de 22

Dinmica de Sistemas y Control - 2007

Autor: Ing. Gabriel Lorenzo Introduccin a MATLAB MATLAB es el nombre abreviado de MATrix LABoratory. MATLAB es un programa para realizar clculos numricos con vectores y matrices, pudindose tambin trabajar con nmeros escalares (tanto reales como complejos), con cadenas de caracteres y con otras estructuras de informacin. Adems, MATLAB cuenta con un lenguaje de programacin propio. Desde el punto de vista de control, MATLAB se puede considerar un entorno matemtico de simulacin que puede utilizarse para codificar modelos y analizar los sistemas modelados. Permite el estudio de sistemas continuos, discretos, lineales y no lineales en el dominio temporal y de la frecuencia. Otra caracterstica de MATLAB es que cuenta con numerosos paquetes adicionales llamados toolboxes. En el caso que nos ocupa se utilizar el Control System Toolbox, pero es importante tener en cuenta que existen diversos toolboxes; cada uno de ellos destinado a una aplicacin especfica (control, estadstica, procesamiento de seales, manejo de lenguaje simblico, etc.). La presente introduccin se plantea como una gua prctica a fin de permitir la familiarizacin con los comandos de MATLAB que sern frecuentemente utilizados a lo largo esta materia. El entorno de operacin de MATLAB Existen numerosas referencias bibliogrficas (adems del tutorial del programa) en donde se explica en detalle el entorno operativo de MATLAB (algunas de ellas figuran en el listado de referencias de este apunte). El objetivo de esta seccin es presentar cada uno de los componentes del entorno MATLAB y proporcionar una breve descripcin de los mismos: Command Window: es la ventana principal del programa en donde se ejecutan los comandos e instrucciones lgicas. Workspace: Es el espacio de trabajo en donde se almacenan todas las variables definidas a travs del Command Window. ste puede ser guardado en un archivo binario (*.mat) y cargado nuevamente, en otra ejecucin del programa. Command History: Almacena el listado de comandos ejecutados desde el Command Window de MATLAB. El historial se guarda automticamente, quedando registradas cada una de las sesiones con fecha y hora. Una opcin interesante, es seleccionar los comandos

relevantes del Command History y generar con ellos un archivo *.m (secuencias de comandos, tambin denominadas scripts). Current Directory: especifica el directorio de trabajo de MATLAB

Listado de comandos tiles Todos los comandos que figuran a continuacin se ejecutan desde el Command Window de MATLAB: help: proporciona ayuda sobre un determinado tem (toolbox, comando, etc.). Ejemplo:
>> help symbolic %proporciona informacin sobre el Symbolic toolbox de MATLAB. >> help plot %proporciona informacin sobre el comando PLOT

clc: borra la pantalla del Command Window clear: limpia las variables del Workspace. Tambin se pueden borrar individualmente escribiendo: >> clear nombre_de_la_variable whos: proporciona un listado de las variables definidas en el Workspace. Podemos preguntar tambin por variables individuales: >> whos nombre_de_la_variable open: permite abrir los archivos que se encuentran en el Current Directory de MATLAB especificado, por ejemplo: >> open nombre_del_archivo.m Manejo de vectores Vector fila:
>> A=[2,4,5] >> A=[2 4 5]

Nota: se puede ocultar el resultado de la operacin agregando un punto y coma (;) al final de la sentencia

Nota: los elementos del vector pueden separarse mediante una coma, o bien mediante un espacio. Vector columna:
>> B=[2;4;5]

o bien,
>> B=A'

Nota: El smbolo ('), transpone el vector A para generar el vector columna B. Este comando tambin puede ser utilizado para generar la transpuesta de una matriz dada.

Vectores con espaciamiento uniforme:


>> A=[1:10] %los valores aumentan sucesivamente una unidad >> A=[1:2:10] %los valores aumentan sucesivamente en dos unidades) >> A=[0.1:0.1:1] %los valores se incrementan en 0,1

>> A=logspace(1,2,10) %genera 10 puntos entre las dcadas 10^1 y 10^2, uniformemente espaciados en forma logartmica: [10 10^1.1 10^1.2 10^1.3 10^1.4 10^1.5 10^1.6 10^1.7 10^1.8 10^1.9 10^2]

Vectores de unos y ceros:


>> A=zeros(1,10) %genera un vector fila con ceros >> B=ones(1,10) %genera un vector fila con unos

Nota: zeros(m,n) genera una matriz de orden mn con todos sus elementos iguales a cero, lo mismo se aplica a la sentencia: ones (m,n)

Manejo de matrices Matriz estndar


>> A=[1,2,3;4,5,6]

Matrices especiales

Sintaxis
>> A=diag(v)

Tipo de matriz matriz diagonal con el vector v como diagonal

matriz de n n con todos los valores iguales a uno


>> A=ones(n) >> A=eye(n) >> A=rand(n) >> A=randn(n)

matriz identidad de n n matriz de n n con elementos de valor aleatorio entre 0 y 1 (distribucin uniforme) matriz de n n cuyos elementos siguen una distribucin normal (media 0 y varianza 1)

Operaciones con matrices Sintaxis


>> C=A*B >> C=A.*B >> inv(A) >> pinv(A) >> C=A\B >> x= A\b

Operacin matriz resultante del producto AB (si dicha operacin es posible) producto elemento por elemento (si size(A) = size(B), es decir, si tienen el mismo tamao) A^-1, si A es cuadrada e invertible pseudoinversa de A. inv(A) * B, si existe inv(A): la barra inversa es la divisin por la izquierda solucin de: Ax = b si existe inv(A). Vase help slash cuando A sea una matriz rectangular!

>> det(A) >> rank(A) >> size(A)

determinante (si A es una matriz cuadrada) rango (nmero de pivotes = dimensin del espacio de filas y del espacio de columnas) es el par de nmeros [m n]

>> E=eig(X)

E es un vector que contiene los autovalores de la matriz cuadrada X Ver help eig!

Creacin de grficos bidimensionales Existen diversos comandos para realizar grficos bidimensionales en MATLAB (plot, stem, bar, stair). En particular nos interesa el comando PLOT ya que nos va a permitir graficar las respuestas y excitaciones de sistemas continuos. Dado que MATLAB no es un lenguaje simblico, las variables independientes y dependientes a graficar deben ser definidas como vectores. El comando PLOT presenta numerosas opciones para la presentacin y edicin de los grficos (tipo de lnea, color, ttulo de ejes, ttulo de grfico, etc.). A continuacin se darn algunos ejemplos prcticos de utilizacin de este comando. Se sugiere ampliar el contenido de este apunte con la informacin proporcionada por la ayuda del programa.

>> x=[0:0.01:4*pi] %se define el vector x(var. independiente) >> plot (x,sin(x)) %grfico de la funcin sen (x)

Otra opcin hubiese sido:


>> x=[0:0.01:4*pi] %se define el vector x >> y= sin(x) %se define el vector y (variable dependiente) >> plot (x,y)

Podemos hacer una nueva grfica:


>> z=[0:0.1:5] >> plot(z,exp(-z))

Como vemos, el grfico en la ventana abierta se actualizasi queremos conservar el grfico original y abrir una nueva ventana usamos el comando FIGURE:
>> figure >> plot (x,cos(x)) %grfico de la funcin sen (x), recordar la variable x ya haba sido definida en el Workspace del programa.

La presentacin de los grficos puede ser mejorada de dos maneras: 1- Mediante las opciones de los mens Edit e Insert, situados en la barra de herramientas de la ventana del grfico. 2- Introduciendo los comandos de edicin, ttulos de ejes, ttulo de grficos, etc. mediante el Workspace desde el programa.
>> figure >> plot(z,exp(-z),'ro:') >> xlabel ('x') >> ylabel ('exp (-x)') >> title ('Funcin exponencial')

En este caso graficamos la funcin exponencial en color rojo (r), con lnea punteada (:) y con un circulo (o) en cada uno de los puntos de la grfica (ver el help del comando plot para otras opciones de formato para graficar las curvas). Para realizar grficos mltiples es una nica ventana se utiliza el comando SUBPLOT. La sintaxis del comando es la siguiente: >> subplot (m,n,p), plot (x,y) mn es el orden del arreglo que se va a utilizar para posicionar los grficos y p denota la posicin del grfico (el orden es contando fila por fila). La figura muestra un ejemplo para un arreglo de mn=22:

Por lo tanto, si elegimos un arreglo de 21 (2 filas y 1 columna) y queremos graficar la funcin exponencial en la parte superior y la funcin seno en la parte inferior, utilizamos:
>> figure >> subplot (2,1,1), plot(z,exp(-z)) >> subplot (2,1,2), plot(x,sin(x))

Funcin transferencia La funcin transferencia de un sistema se define como la relacin entre las transformadas de Laplace de la variable de salida y la variable de entrada, cuando las condiciones iniciales del sistema son nulas. El concepto de funcin transferencia es vlido para el anlisis sistemas lineales e invariantes en el tiempo. El comando de MATLAB empleado para la creacin de funciones transferencia se denomina TF y su sintaxis es la siguiente: sys= tf(num,den) donde: sys es el identificador que elegimos para nuestro sistema. num es el vector de coeficientes que define al numerador de nuestra funcin transferencia.

den es el vector de coeficientes que define al denominador de nuestra funcin transferencia. Tomando como ejemplo el caso de un amortiguador masa y resorte, mostrado en la figura:

Transformando:

Consideremos que m=1 [kg] b= 4 [N.s/m] k=68 [N/m] Para crear esta funcin transferencia, escribimos en el Workspace de MATLAB:
>> num=[1] >> den=[1 4 68] >> sys= tf (num,den)

Se podra haber declarado primero las variables del problema y luego construido la funcin transferencia:

>> m=1; >> b=4; >> k=68;

>> num=[1] >> den= [m b k] >> sys= tf(num,den)

Respuesta del sistema a excitaciones predefinidas Respuesta al impulso La excitacin impulsiva nos permite conocer la respuesta natural del sistema, tal como vemos a continuacin:

Luego,

El conocimiento de la respuesta natural del sistema, brinda una posibilidad para inferir la localizacin de los polos (races del denominador) en el plano complejo. El comando para obtener la respuesta impulsiva de un sistema se denomina IMPULSE y su sintaxis es: impulse (sys) Si queremos examinar los polos de una funcin transferencia, una forma de calcularlos es mediante el comando ROOTS. Este comando proporciona las races de un polinomio definido a travs de su vector de coeficientes (tal como lo hemos trabajado hasta el momento).

>> m=1; >> b=4; >> k=68; >> num=[1] >> den= [m b k]

>> sys= tf(num,den) % no es necesario repetir estos comandos si la informacin correspondiente qued cargada en el Workspace de MATLAB. >> roots (den) >> impulse (sys)

Como vemos, el sistema tiene 2 polos complejos conjugados (-2+8i ; -2-8i) ubicados en el semiplano derecho del plano complejo. En este caso la respuesta al impulso del sistema es una seal sub-amortiguada. Se pueden explorar variantes, fijando los valores de m, b y k a fin de obtener polos reales en el semiplano izquierdo, polos imaginarios y polos reales en el semiplano derecho (en este caso con abstraccin del sistema fsico que representa la funcin transferencia). El procedimiento se puede agilizar con el uso de un archivo *.m, tal como veremos ms adelante. Respuesta al escaln unitario La seal mayormente utilizada para la caracterizacin del sistema es el escaln unitario. Esta excitacin tambin introduce en el sistema una perturbacin abrupta con la ventaja de que, desde el punto de vista prctico, es ms fcil de generar que la seal impulso. Esto hace que las caractersticas de desempeo en el dominio del tiempo de un sistema de control (de cualquier orden) sean especificadas, generalmente, en trminos de su respuesta transitoria a un escaln unitario. El comando para obtener la respuesta impulsiva de un sistema se denomina STEP y su sintaxis es: step (sys) Considerando el sistema masa-resorte-amortiguador, calculamos ahora su respuesta al escaln:

>> m=1; >> b=4; >> k=68; >> num=[1] >> den= [m b k]

>> sys= tf(num,den) %no es necesario repetir estos comandos si la informacin correspondiente qued cargada en el Workspace de MATLAB. >> step (sys)

Respuesta del sistema a excitaciones definidas por el usuario Para obtener la respuesta temporal del sistema ante excitaciones definidas por el usuario, se utiliza el comando LSIM. lsim(sys,u,t) Este comando grafica la respuesta del sistema a la seal de entrada descripta por u y t. El vector t consiste en muestras temporales regularmente espaciadas y u es una matriz, con tantas columnas como seales de entrada tenga el sistema y cuya i-sima fila especifica el valor de la entrada en el tiempo t(i). Por ejemplo:
>> t = [0:0.01:10]; >> u = sin(t); >> lsim(sys,u,t)

Archivos *.m Los archivos *.m se utilizan para crear secuencias de comandos (scripts) y segmentos de programa que pueden ser ejecutados al invocarlos desde la ventana de comando. Nota: Esto es as, siempre y cuando el path especificado en MATLAB (Current Directory) indique el directorio en el cual se ha guardado el archivo *.m; por defecto se trabaja en: C:\MATLAB6p1\work Los archivos *.m tambin pueden ser utilizados para definir funciones. La principal diferencia entre estas dos aplicaciones radica en que, en el primer caso, las variables empleadas son globales (se definen en el Workspace); en tanto que para las funciones, las variables son de tipo local, debiendo declararse una lista de argumentos de entrada a la funcin y sus valores de retorno. La creacin de un archivo *.m puede realizarse mediante cualquier editor dado que se trata simplemente de un archivo de texto sin formato. MATLAB brinda la opcin de utilizar su propio editor de texto, el cual se puede encontrar en:

FileNew Mfile

Se aconseja utilizar este editor para la creacin de los archivos *.m debido a que optimiza la correccin de las secuencias de comando, brindando adems diversas opciones para depuracin de programas (debug). El comando run, permite correr las secuencias de comandos y los programas generados, desde el mismo editor. SCRIPTS Tomando como ejemplo el sistema visto anteriormente, podemos realizar la siguiente secuencia de comandos para evaluar distintos valores de los parmetros m, b y k.

%PARAMETROS DE ENTRADA % m (masa) % b (friccion viscosa) % k (constante del resorte) % % OPCIONES DE GRAFICACION % (1) respuesta al impulso % (2) respuesta al escalon % (3) se muestran ambos transitorios

clc m= input ('m: '); b= input ('b: '); k= input ('k: ');

num=[1];

den= [m b k]; sys= tf(num,den) roots (den) v= input ('seleccione opcion: ');

if v==1 impulse (sys) elseif v==2 step (sys) elseif v==3 subplot (2,1,1), impulse (sys) subplot (2,1,2), step (sys) end

Nota: Si escribimos: help nombre del archivo *.m en el Command Window de MATLAB, aparecern las lneas de comentario que figuran antes de la primera instruccin. Esto proporciona una referencia rpida del script o funcin generada. FUNCIONES Ahora veamos un ejemplo de como se define una funcin en MATLAB mediante ficheros *.m. Para ello se propone la funcin tringulo, definida tal como se muestra a continuacin:

function [y]=triangle (x) %Funcion Triangulo % % Definicion: % y= 2x % y= 2-2x 0 <= x <0.5 0.5 <= x <=1

for i= 1:length(x)

if 0<=x(i) & x(i)<0.5

y(i)=2*x(i);

elseif 0.5<=x(i) & x(i)<=1

y(i)=2-2*x(i);

else

y(i)=0;

end end

La funcin puede ser guardada con un nombre arbitrario (nombre_de_la_funcin.m) en el directorio de trabajo que hayamos elegido. Con este nombre, se invoca a la funcin desde el Command Window de MATLAB (en este caso se eligi el nombre triangle, coincidente con el empleado en la definicin de la funcin). Por supuesto, esta funcin puede ser utilizada como excitacin para nuestro sistema, como vemos en el siguiente ejemplo:
>> t = [0:0.01:10]; >> u = triangle(t); >> lsim(sys,u,t)

SIMULINK Simulink es un paquete de software integrado a MATLAB que permite modelar, simular y analizar sistemas dinmicos. La simulacin de un sistema dinmico se realiza, primero, creando un modelo grfico del sistema a ser simulado mediante el editor de Simulik y luego simulando su comportamiento un rango de tiempo especificado. Como ejemplo de aplicacin, veremos como modelar y simular el sistema masa-resorteamortiguador. Para abrir el editor de Simulink tenemos dos opciones.

1- Desde MATLAB: FileNewModel

2- Desde el Simulink library browser. El Simulink library browser se abre desde la barra de herramientas de MATLAB haciendo clic en el smbolo:

Finalmente, podemos abrir el editor de Simulink mediante FileNewModel, o bien haciendo clic en el smbolo:

En la librera Simulink del library browser, se encuentran los bloques que utilizaremos para construir y analizar nuestro modelo. En particular estos bloques se hallan en los mens: Continuous, Sinks y Sources. El primer modelo que haremos nos permitir evaluar la respuesta de nuestro sistema ante una excitacin del tipo escaln unitario, para ello arrastramos y soltamos los componentes de la librera que se muestran en la tabla y los vinculamos entre s mediante conectores. Bloque Men Transfer Fcn Continuous Step Sources Scope Sinks Haciendo doble-clic sobre los bloques podemos editar los parmetros de cada uno de ellos. En el caso de la excitacin, la definicin por defecto es apropiada, en tanto que para el caso de la funcin transferencia; Simulink pide que se introduzcan los vectores de coeficientes del numerador y denominador (anlogamente a lo visto para la definicin de una funcin transferencia desde el Command Window). La representacin grfica del modelo es la siguiente:

El modelo se simula ejecutando el comando Start del men Simulation: SimulationStart O bien, haciendo clic sobre el smbolo:

La respuesta del sistema dinmico se observa haciendo doble clic en el bloque Scope.

Los parmetros de simulacin pueden ser configurados mediante la opcin Simulation parameters del men Simulation: Simulation Simulation parameters

Como puede observarse, en esta ventana se especifican el tiempo de simulacin, mtodo numrico empleado y opciones de salida. Interaccin con el Workspace Una de las capacidades ms interesantes de Simulink es la posibilidad de interactuar con el Workspace de MATLAB. Esto permite utilizar variables definidas en el Workspace como excitaciones y escribir en el mismo los resultados de las simulaciones. Una forma de realizar esto es configurando el tab Workspace I/O de la opcin Simulation parameters:

En esta ventana se especifican las variables que se cargan desde el Workspace y las variables que sern guardadas en el Workspace como resultado de la simulacin. Supongamos que deseamos evaluar la respuesta de nuestro sistema ante la excitacin triangle definida previamente. Para esto es necesario ejecutar en el Command Window de MATLAB.
>> tin=[0:0.01:10]' >> uin=[triangle(t)]'

Esto genera dos vectores columna; uno con las muestras temporales y el otro con los valores correspondientes de la excitacin. Nota: Las variables que pasamos a Simulink desde el Workspace de MATLAB, deben estar definidas como vectores columna. Simulink guardar en el Workspace los vectores tout y yout correspondientes a la respuesta dinmica del sistema. La salida ser guardada en este caso como un arreglo (vector); existen otras opciones de formato de los valores de salida: structure y structure with time. Para que nuestro modelo tome valores desde el Workspace y los guarde all, una vez que la ventana Workspace I/O fue configurada, debemos agregarle al mismo los puertos de entrada (In1) y salida (Out1). Estos se hallan en los mens Sources y Sinks, respectivamente:

Al simular el modelo, aparecen automticamente en el listado de variables del Workspace tout y yout. Otra manera de lograr la interaccin entre Simulink y las variables definidas en MATLAB es mediante los bloques From Workspace y To Workspace. La utilizacin de estos bloques permite prescindir de la configuracin del tab Workspace I/O. Un ejemplo de aplicacin de estos bloques se muestra a continuacin:

Haciendo doble clic sobre el bloque From Workspace entramos a su ventana de configuracin:

En este caso, entrada se define como un vector de n2; la primera columna corresponde al vector tiempo (n es la cantidad de muestras temporales que tomamos) y la segunda columna corresponde a la excitacin (u(t)). La definicin de entrada fue efectuada en el Command Window de MATLAB de la siguiente forma:
>> tin=[0:0.01:10]'; >> uin=[triangle(t)]'; >> entrada= [tin uin];

Para el bloque To Workspace, la ventana de configuracin es:

En ella, especificamos el nombre y tipo de variable que deseamos que sea escrita en el Workspace de MATLAB conteniendo los resultados de la simulacin. Comentario sobre el Symbolic toolbox El Simbolic toolbox de MATLAB, permite realizar operaciones en lenguaje simblico. Escribiendo: help symbolic en el command window de MATLAB, la ayuda nos mostrar todas las posibilidades de clculo que pueden ser realizadas mediante este paquete. En esta introduccin se mostrar simplemente como se calculan transformadas de Laplace y sus inversas. Se utiliza, a modo de ejemplo, ejercicios de la gua prctica nmero 1. Clculo de la transformada de Laplace de una funcin:
>> syms ('t') >> f=2*exp(-t)*cos(10*t)-t^4+6*exp(10-t); >> F=laplace(f)

Clculo de la transformada inversa de Laplace:


>> syms ('s') >> F=(2*exp(-0.5*s))/(s^2+-6*s+13)-(s-1)/(s^2+-2*s+2) >> f=ilaplace(F)

Referencias

[1] Tutorial de MATLAB (MATLAB Help) [2] Aprenda MATLAB 6.1 como si estuviera en primero. Javier Garca de Jaln Jos Ignacio Rodrguez, Alfonso Brazales. Escuela Tcnica Superior de Ingenieros Industriales. Universidad Politcnica de Madrid [3] Modelado, simulacin y control de sistemas dinmicos. Parte I: Tutorial bsico de MATLAB. P.F. Puleston, F. Valenciaga. Departamento de electrotecnia. Facultad de Ingeniera Universidad Nacional de La Plata.