Está en la página 1de 38

INTRODUCCIÓN

MATLAB (Matrix Laboratory) es un programa matemático creado en la empresa Math Works de


los estados unidos que manipula matrices y vectores ágilmente. MATLAB está compuesto por: un
ambiente de desarrollo; una librería de funciones matemáticas; un lenguaje específico de alto nivel;
gráficos para la representación de información en dos y tres dimensiones; procesamiento de imagen
y animación; un API para interfaces externas para comunicar al programa con otros programas.
Adicionalmente cuenta con documentación en línea constituida por tutoriales, ejemplos y
referencias.
Además de contar con la manipulación matemática es posible adicionar una serie de módulos para
diferentes áreas del conocimiento como son:
• Sistemas de control (Control system toolbox) Análisis, diseño y simulación de sistemas de
control automático.
• Identificación de sistemas en el dominio de la frecuencia (Frequency-domain system
identification toolbox) Modelación de sistemas lineales basada sobre las medidas de
respuesta en frecuencia del sistema.
• Lógica difusa (Fuzzy logic toolbox) Análisis, diseño y simulación de sistemas con inferencia
difusa.
• Análisis espectral de alto orden (High order spectral analysis toolbox) Análisis de señales
originadas por procesos no lineales o que contienen ruido no Gaussiano.
• Procesamiento de imágenes (Image processing toolbox) Diseño de filtros digitales, análisis
estadístico, operaciones sobre el color y la morfología, transformaciones 2-D.
• Modelos de control predictivo (Model predictive control toolbox) Aplicaciones de control
que contienen muchas entradas y muchas salidas variables, algunas con restricciones.
Aplicaciones a problemas de ingeniería química.
• Análisis y síntesis MU (Mu analysis and synthesis toolbox) Herramientas especializadas
para el análisis y síntesis de control optimo H(infinito) y u-analisis. Análisis y diseño de
sistemas de control robusto multivariable para sistemas lineales.
• Fundación NAG (NAG foundation toolbox) Incluye 200 funciones de cálculo numérico para
la solución de problemas de condiciones de frontera, optimización, ajuste de curvas y
superficies, y otras aplicaciones.
• Redes neuronales (Neural networks toolbox) Funciones para analizar y diseñar redes
neuronales. Las redes neuronales son arquitecturas de cómputo, inspiradas en el sistema
nervioso biológico, las cuales son útiles en aplicaciones donde un análisis formal es
extremadamente complicado o imposible, tal como reconocimiento de imágenes e
identificación y control de sistemas no lineales.
• Diseño de control no lineal (Nonlinear control design toolbox) Diseño de sistemas de
control lineal y no lineal, usando técnicas de optimización en el dominio del tiempo. incluye
una interface gráfica para observar el comportamiento de las restricciones y sintonizar los
parámetros del controlador.
• Optimización (Optimization toolbox) Comandos para la optimización de funciones lineales
o no lineales e incluye las restricciones. Un problema de optimización puede ser visualizado
como el intento de encontrar el punto más alto o mas bajo en un paisaje encerrado por una
cerca. Un algoritmo de optimización puede ser desarrollado para explorar a través del paisaje
y buscar desde la topología los puntos extremos.
• Teoría de realimentación cuantitativa (Quantitative feedback theory toolbox) Diseño de
sistemas de control en el dominio de la frecuencia utilizando QTF para sistemas con
incertidumbre.
• Control robusto (Robust control toolbox) Análisis y diseño de sistemas de control que son
robustos con respecto a las incertidumbres que se puedan presentar en el mundo real.
• Procesamiento de señales (Signal processing toolbox) Colección de funciones M de
MATLAB para el procesamiento de señales. Este modulo incluye representación de señales y
sistemas, cálculo de respuestas temporales y en frecuencia, diseño de filtros, transformada de
Fourier, identificación de sistemas.
• Simulink (Simulink toolbox) Ambiente gráfico para el análisis, diseño y simulación de
sistemas de control lineales y no lineales. Este permite trabajar con sistemas continuos,
sistemas discretos, sistemas con múltiple tiempo de muestreo y sistemas híbridos.
• Simulación en tiempo real (Simulink real time workshop) Simulación en tiempo real e
implementación de estrategias de control sobre hardware en tiempo real. Generación de
códigos desde los bloques de Simulink para aplicación en sistemas de tiempo real.
• (Spline toolbox) Interpolación segmentaria que utiliza aproximaciones polinómicas. El
método se origino utilizando una lamina de plástico delgada llamada curvígrafo, que en
ingles es spline, y con el cual se trazan curvas entre puntos.
• Estadística (Statistic toolbox) Contiene un grupo de comandos para el análisis de datos
estadísticos; simulación de Monte carlo y herramientas para el análisis de probabilidades.
• Matemática simbólica (Symbolic math toolbox) Contiene un conjunto de funciones para
realizar cálculos simbólicos basados en Maple. La versión extendida soporta programas en
Maple y adiciona otros comandos.
• Identificación de sistemas (System identification toolbox) Conjunto de herramientas para la
estimación e identificación de sistemas. La identificación es una forma de obtener el modelo
matemático de un sistema físico (como un motor eléctrico) basado en el registro de las
señales de entrada y de salida del sistema.
• Otros... Cada uno de estos módulos se conoce internacionalmente como TOOLBOX y son
programas que se pueden adicionar al paquete básico de MATLAB que será visto en este
curso.
Esta introducción está pensada solo para proveer al estudiante de conocimientos básicos; para
mayor información, consulte los manuales disponibles de MATLAB, particularmente en el Control
system toolbox donde hay muchos comandos que pueden ser útiles a lo largo del desarrollo de la
asignatura.
Nota: Este material es del tipo tutorial. Por lo tanto le recomendamos que cuando lo lea, tenga al
frente un computador en el cual MATLAB esté funcionando correctamente. Los comandos que
debe teclear se identificaran con >> y se distinguen porque tienen un fondo, este símbolo NO lo
tiene que escribir. De otro lado, los programas que se anexan tienen un encabezado que los
identifica como tales.
TALLER 1.
INTRODUCCIÓN AL MANEJO DE MATLAB
Inicio de Matlab
Se inicia al hacer doble “click” con el ratón en el icono de Matlab abriendo una ventana
como la siguiente:

Expresiones aritméticas
Se pueden introducir expresiones matemáticas de la forma habitual. Las operaciones se realizan en
el siguiente orden: ^ potencia * multiplicación / y \ división + suma - resta
Comando Resultado Comentarios
-1
>>a=4/3 a = 1.333 a/b = a b
>>b=3\4 b = 1.333 a\b = a-1 b
>>a=3^2 a=9
>>b=2*sqrt(a) b=6
Variables
Se pueden definir variables para utilizarlas luego en otras expresiones. Matlab no es un programa de
manipulación simbólica, las variables siempre contienen un valor numérico. Todas las variables son
del mismo tipo, matrices cuyos componentes pueden ser reales o complejos. Una variable que
contiene un real es una matriz de dimensión 1 × 1. Para introducir números complejos se pueden
usar las constantes predefinidas i o j como −1 .
>>c=2*j c=0+2i
>>d=2+3i d = 2 + 3i
Al conjunto de variables creado durante una sesión se le denomina “workspace”. Para saber cuales
son las variables del workspace se puede usar la orden whos.
Creación de matrices y vectores
Una matriz se puede crear introduciendo sus elementos entre corchetes, poniendo cada fila en una
línea distinta y separando los elementos de una misma fila por espacios en blanco. También se
puede utilizar el punto y coma o “enter” para separar filas y la coma para separar elementos de una
fila.
>>A=[a b A=
c 1] 9 6
0+2i 1
>>B=[1 2;3 4;5 6] B=
1 2
3 4
5 6
A una matriz de una sola fila o de una sola columna también se le llama vector. Una forma rápida
de crear vectores fila de elementos equiespaciados es utilizando el operador ‘dos puntos’.
>>v1=1:5 v1 = 1 2 3 4 5
>>v2=1:0.5:3 v2 = 1 1.5 2 2.5 3
>>c=[1:2:10] c=1 3 5 7 9
La forma general es: nombre = [inicio : incremento : final]
Para obtener la traspuesta de una matriz se pone detrás una comilla simple.
>>[1 2]’ ans =
1
2
>>B’ B=
1 3 5
2 4 6
Matlab maneja con la misma sencillez matrices complejas o reales y sus operaciones básicas.
>>k=[3,3;6,9]+i*[4,6;7,10] k= Matriz compleja (2*2)
3+4i 3+6i
6+7i 9 + 10 i
>>reales=real(k) contiene la parte real de cada elemento de k
>>imaginarios=imag(k) contiene la parte imaginaria de los elementos de k
>>magnitud=abs(k) contiene la magnitud de cada elemento de k
>>angulos=angle(k) contiene los ángulos de los elementos de k (en radianes)
>>kinv=inv(k) Asigna a kinv la matriz inversa de k.
Definidas las matrices:
>>x=[1;2;3]
>>y=[4;5;6]
Se realizan las operaciones básicas con x e y.
>>l=x+y Suma de matrices
>>m=x-y Resta de matrices
>>o=x.*y Hace la multiplicación elemento por elemento (Este es el
efecto del punto)
>>p=x'*y Multiplica la transpuesta de x por y Resultado(1*1)
>>r=x*y' Matriz x por y transpuesta Resultado (3*3)
>>t=x*2 Cada elemento de x por 2
>>u=x.*2 Igual al anterior
>>v=x.\y Cada elemento de y dividido por cada elemento de x(división
de matrices)
>>j=2.^x 2 elevado a la cada elemento de x
Matlab maneja algunas matrices especiales como:
>>d=zeros(5) Matriz de ceros (5*5)
>>g=zeros(2,3) Matriz de ceros (2*3)
>>H=ones(2,3) Matriz de unos (2*3)
>>j=eye(3) Matriz identidad (3*3)
>>l=magic(5) Matriz mágica (5*5)
>>m=rand(3) Matriz de números aleatorios (3*3)
Selección de elementos de una matriz
Se puede obtener un elemento de una matriz indicando entre paréntesis la fila y la columna (por este
orden y separados por coma) del elemento deseado. Si el índice que indica la fila o columna es un
vector, se obtendrá una matriz con todos los elementos seleccionados.
Si se quiere seleccionar filas o columnas completas, se puede utilizar el operador ‘dos puntos’ como
índice.
>>a=[1 2 3;4 5 6;7 8 9];
>>a(1,2) Elemento de a ubicado en la fila 1 y la columna 2
>>a([1 3],2) Elementos de la columna 2 de a ubicados en las filas 1 y 3
>>B=a(:,1) Asigna a B la primera columna de a.
>>b=a(1,:) Asigna a b la primera fila de a.
>>k=[a(1,1:2),a(3,3)]; Matriz (2*3) construida con la primera y la tercera filas de a.
>>H=[a(1,:);a(3,:)] Matriz (2*3) construida con la primera y la tercera filas de a.
Funciones
Gran parte de la potencia de Matlab reside en su extensa librería de funciones. Para explorarla se
puede utilizar la orden help. Por si sola da una lista de los directorios de funciones instalados en el
sistema.
>>help det información sobre la función det
Para buscar funciones que realizan una determinada tarea se puede usar la orden lookfor, que busca
en la librería una palabra clave.
Es un error común teclear los nombres de las funciones en mayúsculas. Hay que tener en cuenta que
Matlab distingue entre mayúsculas y minúsculas y que todas las funciones siempre llevan el nombre
en minúsculas.
Polinomios
En Matlab los polinomios se ingresan como vectores: p(x)=x^2+3x+2 se ingresa como >>p=[1 3 2]
Observe que se ingresan los coeficientes del polinomio comenzando por el de mayor orden hasta el
de menor orden.
>>q=[4 0 5 1] q(x)=4x^3+5x+1
Para sumar polinomios los vectores deben tener el mismo tamaño.
Ejemplo Sumar los polinomios: p(x)=3x^2+2x+1 q(x)=6x+3
>>p=[3 2 1]; ERROR Los vectores que almacenan los
>>q=[1 3]; polinomios deben tener las
mismas longitudes.
>>suma=p+q
>>p=[3 2 1]; En la resta se conservan las
>>q=[0 1 3]; mismas reglas que en la suma
>>result=p+q pero con el signo menos.
>>resta=p-q
La multiplicación polinómica es ejecutada por la función CONV la cual hace la convolución de los
dos arreglos. La convolucion es una operación matemática que opera sobre sucesiones; en el caso
de dos sucesiones hechas a base de coeficientes, la sucesión resultante representa los coeficientes
del polinomio que se obtiene cuando se multiplican los polinomios originales; por eso el nombre de
CONV. La multiplicación de más de dos polinomios requiere el uso repetido del comando conv.
La división de polinomios se efectúa con la función deconv. Cuando el resultado de la división es
incompleto se debe a la aparición de un residuo.
>>mutiplic=conv(p,q)
>>[div,resd]=deconv(p,q) el resultado obtenido en la variable div es el cociente de la
división, y el resultado obtenido en resd será el residuo.
Matlab ofrece un comando para derivar polinomios. Si se desea la derivada de p respecto a x:
>>derivada=polyder(p)
Matlab también permite evaluar polinomios para un valor o unos valores determinados de sus
argumentos: evaluar el polinomio p para x=0,1,2,3,4
>>x=[0:1:4];
>>valores=polyval(p,x)
Para encontrar las raíces de un polinomio se utiliza el comando ROOTS
>>raizq=roots(q)
>>qr=poly(raizq) Matlab permite reconstruir un polinomio cuando se conocen
sus raíces.
Guardar el espacio de trabajo
Las matrices o vectores que usted ingrese en el espacio de trabajo, pueden ser guardadas. Para esto
utilice el comando SAVE NOMBRE, donde nombre indica el nombre deseado para el espacio de
trabajo. También puede salvar el espacio de trabajo con el comando SAVE WORKSPACE AS...
que se encuentra en la barra de menú.
Ejemplo:
Primero que nada, borrar los datos que se tengan: >>clear
Ahora ingresar dos matrices: >>a=[1 2;3 4];
>>b=[5,1;6,2];
Para guardar estas matrices se hace: >>save ensayo
y las matrices a y b quedaran guardadas en el archivo ensayo.mat
Recuperar un espacio de trabajo guardado
Las matrices y vectores que han sido guardados en un espacio de trabajo pueden ser recuperadas
mediante el comando LOAD NOMBRE, donde NOMBRE indica el nombre con el cual se guardó
el espacio de trabajo que se desea recuperar.
Ejemplo:
Cargar el espacio de trabajo que se guardó >>load ensayo
Para estar seguros de que se ha recuperado el espacio de trabajo correcto se escribe el comando:
>>whos
Guardar la sesión
Guardar la sesión significa que todo lo que usted ha escrito queda almacenado en un archivo que
podrá recuperar cuando lo desee. Con esta opción usted guardara hasta los errores que cometa y
todos los mensajes que aparecen en la pantalla. Para realizar esto se utiliza el comando DIARY.
Ejemplo:
Guardar en un archivo todo lo que se escribirá a continuación.
>>diary viejito
En el archivo viejito quedara guardado lo que se escriba desde aquí hasta que aparezca diary off
>> matriza=[1,2,3;4,5]
>>a=[1 2 3]
>>a*b
>> b=[4;5;6];
>>c=a*b
>> diary off
Hasta aquí quedara guardado lo que se ha escrito, con todo y errores. Además quedan los mensajes
de error que entrega el programa.
Usted puede seguir guardando texto en viejito. Solo escribiendo de nuevo diary on y luego cuando
no quiera guardar mas texto escriba diary off.
Recuperar la sesión
Ahora bien, lo que usted ha guardado con el comando diary, lo puede recuperar solo abriendo el
archivo viejito desde un editor de texto.
Lo que obtendrá será lo siguiente:
a=[1,2,3;4,5]
??? All rows in the bracketed expression must have the same number of columns.
a=[1 2 3]
a=
123
a*b
??? Undefined function or variable b.
b=[4;5;6];
c=a*b;
diary off
TALLER 2.
GRÁFICAS EN MATLAB
Objetivos
Identificar las funciones básicas de Matlab para hacer gráficas en 2 y 3 dimensiones.
Aplicar Matlab en la elaboración de gráficos.
Algunas funciones básicas para graficar empleando Matlab
Matlab es un programa que cuenta con poderosas subrutinas para realizar gráficas en dos o tres
dimensiones.
>>plot(x,y,’opciones de formato’) plot: Genera una gráfica de y en función de x, con el
formato especificado
>>figure(n) figure: Genera una ventana de figura “n”
>>xlabel(’eje x’) xlabel: Título eje x
>>ylabel(’eje y’) ylabel: Título eje y
>>title(’titulo’) title: Título de la gráfica
>>grid on grid: Marca las líneas de división
>>axis ([xmin xmax ymin ymax]) axis: Establece las escalas de los ejes de la gráfica
>>subplot(n,r,p) subplot: Permite hacer varias gráficas en una figura.
Divide la figura en una matriz de “n” reglones por “r”
columnas, y coloca la gráfica en la posición “p”.
>>hold on hold: Detiene una gráfica, permitiendo agregar más
…. curvas, liberándola cuando aparece nuevamente el
>>hold off comando hold.
>>plotyy(x1,y1,x2,y2) plotyy: Genera una gráfica con dos ejes (x1 vs. y1, x2
vs. y2)
>>mesh(z) mesh: Grafica una malla en 3 dimensiones
>>loglog(x,y) loglog: Genera una gráfica de x vs. y, con escala
logarítmica en ambos ejes
>>semilogx(x,y) semilogx: Genera una gráfica de x vs. y, con escala
logarítmica en el eje x
>>semilogy(x,y) semilogy: Genera una gráfica de x vs. y, con escala
logarítmica en el eje y

>>loglog(x,y) loglog: Genera una gráfica de x vs. y, con escala


logarítmica en ambos ejes

>>[xx,yy] = meshgrid(rango x, Meshgrid: Transforma los vectores x,y en una malla


rango y) para graficar en 3 dimensiones

Gráficas simples
Graficar la función y=seno(x), para 0<=x<=2*pi.
>>x=[0.0:.1:2*pi]; Definir el eje de las abscisas
>>y=sin(x); Evaluar para cada valor de x
>>plot(x,y) Construir la gráfica
>>title('Seno')
>>xlabel('Abcisa') >>ylabel('Ordenada')
¿Recuerda el paraboloide hiperbólico ó la famosa silla de montar del cálculo?
La función del paraboloide hiperbólico es: (y^2/a^2)-(x^2/b^2)=cz
Es decir: z=((y^2/a^2)-(x^2/b^2 ))/c
>>a=2;
>>b=3;
>>c=4;
>>x=[-7.5:.5:7.5];
>>y=x;
>>[X,Y]=meshgrid(x,y);
>>Z=((Y.^2./a^2)-(X.^2./b^2 ))./(c);
>>mesh(X,Y,Z)
¿Ahora bien, tuvo problemas para realizar la gráfica?
Actividades:
1. Graficar las siguientes funciones en (i) una sola gráfica y en (ii) una figura con tres
gráficas, para un rango de tiempo de 0 a 10.
a) y1 = 2 cos(t)
b) y2 = sen(t)
c) y3 = cos(t) + sen(t)
2. Representar en una sola gráfica las siguientes funciones para un rango de tiempo de 0 a
10.
a) y1 = 50 cos(t)
b) y2 = sen(t)
c) y3 = cos(t) + sen(t)
3. Graficar las siguientes funciones en tres dimensiones para x,y [–4, 4]
a) z1 = exp(16 - x2 - y2)
b) z2 = x2 + y2 – 9
c) z3 = x3 – 2xy2 - x2 - y2
d) z4 = exp(-x2 + y2)
e) z5 = x exp(-x2 - y2)
TALLER 3.
PROGRAMACIÓN EN MATLAB
Hasta ahora se ha trabajado en el espacio de trabajo de Matlab, ahora se verá como hacer un
programa. Los programas en Matlab se escriben en un lenguaje especial llamado Lenguaje m el cual
se compone de los comandos de Matlab. Es decir no es necesario ser un programador experto para
realizar programas con Matlab. Los programas se escriben en algún editor de texto y se les asigna
un nombre con la extensión .m. Luego los programas se pueden ejecutar desde el espacio de trabajo
ubicando el directorio de trabajo y tecleando el nombre del programa.
Ejemplo: Realizar el programa que gráfica la silla de montar
Primero se debe abrir un editor de texto. Matlab tiene su propio editor al cual se puede accesar con
los comandos:
FILE
NEW
M-FILE
a los cuales se accede desde la barra de menú.
El programa escrito queda de la forma:
%Programa para realizar el gráfico de la silla de montar
a=10; %Se definen las constantes
b=10;
c=1;
x=[-7.5:.5:7.5]; %Se delimita el rango para el eje x
y=x; %El rango de y será el mismo de x
[X,Y]=meshgrid(x,y); %Se crea un espacio tridimensional para graficar
Z=((Y.^2./a^2)-(X.^2./b^2 ))./(c); %Se evalua la variable z
mesh(X,Y,Z) %Se grafican los resultados
view(-30,-160) %Se ubica el punto de visualización
%Fin del programa
Con % se ponen comentarios. Cualquier duda sobre los comandos utilizados consulte con help.
Ejemplo: Programa para hacer una cara feliz
%Programa para hacer una cara feliz
clear,clf,hold off
dt=pi/20
t=0:dt:2*pi
x=cos(t);y=sin(t);
axis('off'),hold on
plot(x,y)
hold on
for k=0.8:-0.05:0.05
plot(k*0.1*x-0.3,k*0.15*y+0.1)
plot(k*0.1*x+0.3,k*0.15*y+0.1)
end
s1=3*pi/2-1.1;
s2=3*pi/2+1.1
s=s1:dt:s2;
xs=0.5*cos(s);ys=0.5*sin(s);
plot(xs,ys)
hold off
%Grafica de una esfera en tres dimensiones
clear, clf
axis ([-1.5, 1.5, -1.5, 1.5, -1.3, 1.3])
view ([1 -0.5 0.31])
caxis([-0.8 1.5])
colormap hot
hold on
L=[0.5, 0.3, 0.7]; V=[1, 1, 1]
[x,y,z]=sphere(20);
[xn,yn,zn]=surfnorm(x,y,z);
% r=specular(xn,yn,zn,L,V);
r=diffuse(xn,yn,zn,L);
surfc(x,y,z,r)
shading interp
Control de flujo
El control de flujo es extremadamente poderoso porque este hace que cálculos pasados sirvan para
realizar cálculos futuros. Matlab ofrece tres estructuras para la toma de decisiones o control de
flujo:
Loop PARA (for)
En un loop for un grupo de comandos es ejecutado un número predeterminado de veces. La forma
general es:
for x=arreglo
comandos
end
Ejemplo: Programa que calcula el seno de x para x entre 0 y pi con intervalos de 1
%Programa que ejemplifica la utilización del FOR
for n=1:pi
x(n)=sin(n);
end
%Fin del programa
Ejemplo: Activación del reloj y retardo insertado por un FOR
%Ejemplo de activación del reloj y retardo insertado por un FOR
t=[0:1:8000]; %se crea un vector
tiempo1=clock; %se asigna el primer tiempo
h=sqrt(t); %calcula un vector h como la raiz cuadrada del
%vector t
tiempo2=clock; %se asigna el segundo tiempo
%el tiempo de ejecución fue:
ejecucion1=etime(tiempo2,tiempo1)
%ahora utilizando el for
tiempo3=clock;
for i=1:8001
j(i)=sqrt(t(i));
end
tiempo4=clock;
ejecucion2=etime(tiempo4,tiempo3)
%Fin del programa
Tarea: Resuelva el mismo problema utilizando los comandos tic y toc
Loop MIENTRAS (while)
Las instrucciones se ejecutan cíclicamente mientras se cumpla la condición.
while condición
instruccciones
end
Condicional if Las instrucciones1 se ejecutan si se cumple la condición 1, en caso contrario, si se
cumple la condición 2 se ejecutan las instrucciones 2, si no se cumple ninguna de estas condiciones
se ejecutan las instrucciones 3.
if condicion1
instruccciones1
elseif
instruccciones2
else
instruccciones3
end
Ejemplo en el que se utiliza if y while:
%Programa para sumar dos polinomios sin importar su orden.
home
disp('programa para sumar polinomios')
disp(' ')
disp('presione enter para continuar')
pause
k=1;
while k=1
home
p1=input(' entre polinomio numero 1:'); %sirve para ingresar datos
p2=input('entre el polinomio numero 2:');
home
disp('el polinomio numero 1es:')
p1
disp(' ')
disp('el polinomio numero 2 es:')
p2
disp(' ')
disp('presione enter para continuar')
pause
lp1=length(p1);
lp2=length(p2);
k=lp1-lp2;
if lp1==lp2
pt=p1+p2;
elseif lp1>lp2
p2=[zeros(1,k),p2];
pt=p1+p2;
else
p1=[zeros(1,-k),p1];
pt=p1+p2;
end
home
disp('la suma total es')
pt
disp(' ')
k=input('Si desea otra suma teclee 1 sino teclee 0');
pause
end %este es el end del while
%Fin del programa

No tiene muchos comentarios para que lo piense usted mismo, observe el despliegue en la pantalla.
Funciones m
Matlab puede ejecutar una sucesión de instrucciones almacenadas en archivos de disco con la
extensión " .m". Por ello la mayoría de las funciones de Matlab se llaman funciones m. Un ejemplo
de estas funciones es roots. Busque esta función y observe el programa. Gran parte del trabajo con
Matlab será el de crear y refinar archivos .m.
Usted puede crear sus propias funciones, de hecho cuando usted hace un programa y lo guarda con
la extensión .m este queda como una función m la cual puede ser ejecutada con solo escribir su
nombre. Las variables en un archivo de instrucciones son globales y, por tanto, cambiarán los
valores del workspace. Ahora bien, el primer grupo de comentarios que usted escriba en la función
saldrá en la pantalla cuando usted le pregunte a help por esta función.
Ejemplo: Realizar una función m que al ingresarle un grupo de datos calcule la media y el máximo
valor del arreglo:
function [media,maximo]=medmax(datos)
%MEDMAX Calcula la media y el máximo de un arreglo.
%El arreglo de datos se ingresa en forma de vector fila o columna.
%Este es el primer ejemplo de una función.
%Esta primera parte de comentarios aparecerá cuando se
%invoque help medmax.
%Ejemplo:
%[med,max]=medmax(vector)
%Calcula la media y el máximo de los datos almacenados en vector,
%los resultados se encuentran en med y max respectivamente.
%Observe que estos comentarios no aparecen cuando se invoca
%help medmax por que ya se dejó un renglón en blanco.
%
n=length(datos);
media=sum(datos)/n;
maximo=max(datos);
%
%Termina la función
Solución de ecuaciones diferenciales ordinarias
Matlab permite resolver numéricamente una ecuación diferencial o un sistema de ecuaciones. Para
ello se pueden utilizar las fórmulas de un método numérico como Runge-Kutta programando su
algoritmo, o utilizar un método implícito de Matlab como ode23.
Comando ode23: Para utilizar el comando ode23 se debe crear primero un archivo m que contenga
la ecuación diferencial de orden n como un conjunto de n ecuaciones de primer orden.
Simulación dinámica del cambio de nivel en un tanque

El nivel del líquido en tanque cambia de acuerdo con


dh1
A1 = q1 − α 1 h1
dt
donde
A1 = superficie del tanque, m2
h1 = nivel del líquido en el tanque, m
q1 = caudal de entrada, m3/s
q2 = caudal de salida, m3/s
α = coeficiente de descarga, m2.5/s
Tomando A1 = 1.0 m2, q1 = 0.05 m3/s, α = 0.05 m2.5/s y como condición inicial a t = 0 h1 = 0.0 m
Trace una grafica del nivel contra el tiempo para los primeros 1000 segundos y desde la gráfica
determine cuál es el valor de estado estacionario para el nivel. Cuánto tiempo toma para alcanzar el
estado estacionario.
Solución: Primero cree un archivo-m llamado “tanque_1.m” que contenga la ecuación diferencial
function hdot = tanque_1(t,h)
hdot=0.0;a1=0.05;A1=1.0;q1=0.05;
hdot=(q1-a1*sqrt(h))/A1;
dh
(Observe que hdot corresponde a h& = ).
dt
Ahora cree otro archivo-m llamado “ejemplo1.m” que contenga la solución de la ecuación
diferencial.
t0=0.0;tf=1000;h0=0.0;
[t,h]=ode23(@tanque_1,[t0 tf],h0);
plot(t,h)
xlabel('tiempo,segundos'),ylabel ('Nivel del líquido,m')
title('Figura(1):Nivel del líquido en el tanque')
grid on
Ahora desde matlab ejecute el programa, observe la figura y responda las preguntas planteadas:
>>ejemplo1
TALLER 4.
FUNCIONES DE TRANSFERENCIA
Cálculo de las raíces de una ecuación característica
Para calcular las raíces de un polinomio se define un vector con todos coeficientes del mismo, desde
el de mayor orden hasta el término independiente, y se aplica el comando roots a dicho vector.
s 3 + 5s 2 + 8s + 3 = 0 » p=[1 5 8 3] » roots(p)
También se puede hacer lo mismo directamente, sin definir ningún vector: » roots([1 5 8 3])
Representación de Sistemas
Dada una función de transferencia H(s) el sistema queda definido, para Matlab, con la introducción
del numerador y el denominador de la función. Dado que estos son polinomios en potencias de s
será suficiente con introducir los coeficientes de estos polinomios, lo cual se hará en forma de
vectores fila, ordenando los coeficientes por orden de potencias descendentes.
3s 2 + 2
Ejemplo: Sea el sistema H ( s ) =
3s 3 + 5 s 2 + 2 s + 1
Se entra este sistema a Matlab, utilizando el numerador y el denominador.
>>num=[3 0 2];
>>den=[3 5 2 1];
Respuesta temporal de una función de transferencia
Para visualizar gráficamente la respuesta temporal a una entrada escalón e impulso se emplean los
comandos step(num,den) e impulse(num,den), definiendo los vectores de los polinomios numerador
y denominador.
s 2 + 2s + 3 s 2 + 2s + 3
Ejemplo: dado el sistema H ( s ) = = se procede:
( s + 1) 3
s + 3s 2 + 3s + 1
3

» num=[1,2,3];
» den=[1,3,3,1];
» step(num,den)
Si la entrada es un escalón de valor 5 y se desea ver la salida hasta un tiempo de 5
segundos: » step(5*num,den,0:0.1:5)

» impulse(num,den)

Sistemas de segundo orden


C ( s) ωn2
Para sistemas de segundo orden la función de transferencia es de la forma: =
R( s) s 2 + 2δωn s + ωn2

Obtener la respuesta transitoria de la función de transferencia polinómica de segundo orden con un


C ( s) 1
escalón y un impulso como entrada: =
R(s) s + 0.8s + 1
2

» num=1;
» den=[1,.8,1];
» step(num,den)
En el caso de una entrada impulso, se obtiene:
» impulse(num,den)

Conversión de funciones de transferencia


Matlab permite que los distintos modelos puedan ser convertidos entre sí, de modo que, por
ejemplo, se pueda obtener la forma factorizada de la función de transferencia cero-polo-ganancia,
partiendo de la forma de cociente de polinomios.
La función residue convierte la función de transferencia polinómica:
bn s n + bn −1 s n −1 + L + b1 s + b0
H (s) =
am s m + am −1 s m −1 + L + a1 s + a0

en la función transferencia cero-polo-ganancia:


r1 r r
H (s) = + 2 + L + n + k ( s)
s − p1 s − p2 s − pn

>>[r,p,k]=residue(num,den)
Esta instrucción determina los vectores r, p, y k de los valores de residuo (r1, r2,..., rn), los polos (p1,
p2,..., pn) y los términos directos de la expansión de fracciones parciales.
Las entradas son los coeficientes de los polinomios (b0, b1,..., bn-1), numerador de la expresión
polinómica y (a0, a1,..., am-1), denominador de la expresión polinómica.
3s 2 + 2
Ejemplo: Sea el sistema H ( s ) =
3s 3 + 5 s 2 + 2 s + 1
>>num=[3 0 2];
>>den=[3 5 2 1];
>>[r,p,k]=residue(num,den)
»r
r=
1.0000
-0.0000
2.0000
»p
p=
-1.0000
-1.0000
-1.0000
1 2
Por lo tanto la solución es: H ( s ) = +
s +1 s +1
La función tf2zp convierte la función de transferencia polinómica en la función transferencia cero-
polo-ganancia:

H (s) = k
( s − z1 )( s − z2 )L( s − zn )
( s − p1 )( s − p2 )L( s − pn )
Esta instrucción determina los ceros (z1, z2, … , zn), los polos (p1, p2,..., pn) y la ganancia
correspondiente (k) de la función de transferencia del tipo cero-polo-ganancia.
Las entradas son los coeficientes en orden descendente de potencias de s del numerador y
denominador de la función de transferencia polinómica a convertir.
>>[z,p,k]=tf2zp(num,den) Por tanto la solución es
z=
-1.0000 + 1.4142i
-1.0000 - 1.4142i
p=
-1.0000
-1.0000 + 0.0000i
-1.0000 - 0.0000i
k=
1
La función zp2tf convierte la función transferencia cero-polo-ganancia en la función de
transferencia polinómica:
Esta instrucción determina los vectores num y den de los coeficientes en orden descendente de
potencias de s del numerador y denominador de la función de transferencia polinómica a obtener.
Las entradas son los vectores z, de los ceros (z1, z2, … , zn), p, de los polos (p1, p2,..., pn) y la
ganancia correspondiente (k) de la función de transferencia del tipo cero-polo-ganancia.
» z=[-1.0000 + 1.4142i;-1.0000 - 1.4142i];
» p=[-1;-1;-1];
» k=1;
» [hnum,hden]=zp2tf(z,p,k)
hnum =
0 1.0000 2.0000 3.0000
hden =
1331
Productos de funciones de transferencia
Los productos de polinomios se obtienen aplicando el comando conv.

» n=[1 10]
» temp=conv([1 7],[1 15 35])
» d=conv(temp,[1 2 0])
» step(n,d)
Las cuatro líneas anteriores se pueden poner en una única orden:
» step([1 10],conv(conv([1 7],[1 15 35]),[1 2 0]))
Definición de funciones de transferencia
Si se posee la Control System Toolbox versión 5.2 o superior, es posible definir las funciones de
transferencia con el comando tf. Después se pueden emplear todos los comandos aprendidos.
» G=tf([4],[1 2 0])
» impulse(G)
» step(G)
» rlocus(G)
» bode(G)
» margin(G)
La principal ventaja es que se pueden multiplicar directamente las funciones de transferencia:
» Gc=tf(5.6*[1 3],[1 5.4])
» step(Gc*G)
TALLER 5.
INTRODUCCIÓN AL MANEJO DE SIMULINK
Simulink es una herramienta de Matlab para modelado, simulación y análisis de sistemas
dinámicos, soporta tanto sistemas lineales como no lineales: en tiempo continuo, muestreados,
híbridos y sistemas multifrecuencia (contienen sistemas muestreados a diferente frecuencia).

Ejecutando en la línea de comando de MatLab >>simulink se abrirá la librería de Simulink,


apareciendo (sobre el fondo de MATLAB) el “menú” principal de Simulink.Abriendo una ventana
de simulación New y usando el ratón, se puede ir trasladando y conectando bloques de la librería de
simulink en la ventana de trabajo, para construir el sistema a simular. Cada uno de estos bloques
tiene una serie de parámetros ajustables que pueden modificarse pulsando dos veces el botón
izquierdo del ratón sobre el bloque seleccionado.
Biblioteca de fuentes (“Sources”).
La biblioteca de fuentes dispone de gran cantidad de elementos que pueden ser utilizados como
señales de entrada para los sistemas habituales. siendo las más usuales:
a) Band-Limited White Noise: Ruido blanco en un sistema continuo.
b) Chirp Signal: Genera una onda senoidal de frecuencia creciente.
c) Clock: Visualiza y proporciona el tiempo de simulación.
d) Constant: Genera un valor constante
e) Digital Clock: Genera tiempo de simulación en el intervalo de muestreo especificado.
f) From File: Lee datos de un archivo.
g) From Workspace: Lee datos de una matriz definida en el espacio de estados.
h) Pulse Generator: Genera pulsos a intervalos regulares.
g) Random Number: Genera números aleatorios distribuidos normalmente.
h) Repeating Sequence: Genera una señal arbitraria repetible regularmente.
i) Signal Generator: Genera diferentes formas de onda.
j) Sine Wave: Genera una onda senoidal.
k) Step Input: Genera una función escalón.
l) In1: Señal de entrada (de la extinta “Connections”).
Biblioteca de salidas (“Sinks”).
El botón “Sinks” Incluye bloques que visualizan o escriben su salida:
a) Display: Visualiza numéricamente la señal de entrada.
b) Scope: Visualiza señales en ventanas de figura Matlab (con el escalado que se le indique).
c) Out1: Señal de salida (de la extinta “Connections”).
d) Stop Simulation: Para la simulación cuando la entrada es distinta de cero.
e) To File: Escribe datos en un archivo.
f) To Workspace: Escribe datos en una matriz del espacio de trabajo.
g) XY Graph Scope: Visualiza gráficas X-Y de señales en la ventana de figuras de MATLAB.
Biblioteca de Sistemas Continuos.
El botón “Continuous” incluye bloques que describen funciones continuas estándar (algunas de la
extinta “Linnear”):
a) Derivative: Genera la derivada respecto al tiempo de entrada.
b) Integrator: Integra una señal.
c) State-Space: Implementa un sistema lineal en el espacio de estados.
i) Transfer Fcn: Implementa una función de transferencia lineal.
j) Zero-Pole: Implementa una función de transferencia especificada en términos de polos y ceros.
Biblioteca Matemática (“Math”).
El botón “Math” incluye bloques que permiten la realización de operaciones matemáticas.
Solamente indicaremos las que anteriormente se encontraban en otras librerías:
a) Gain: Ganancia (multiplica por una constante).
b) Slider gain: Ganancia mediante “corredera”.
c) Sum: comparador (sumador con signo).
Bibliotecas Señales y Sistemas (“Signals & System”) y Funciones y Tablas (“Functions &
Tables”).
Contiene, entre otras muchas:
a1) Demux: Separa una señal vectorial en sus señales de salida.
b1) Mux: Combina algunas líneas de entrada en una línea vectorial.
a2) Fcn: Permite realizar funciones con variables del sistema
b2) MATLAB Fcn: Permite usar funciones de MATLAB.
Se van a realizar algunas prácticas con lo visto hasta ahora, añadiendo lo que vaya siendo necesario
en cada caso.
Ejemplo 1.
En este ejemplo, se trata simplemente de colocar una entrada mediante un generador de señales, y
una salida de tipo “scope”, y realizar la simulación (esto es, en este caso, la planta a simular es
simplemente una función de transferencia unitaria). Para ello, se seguirán los siguientes pasos:

a) Colocar los elementos de las


bibliotecas “Source” y “Sinks” elementos
de la figura y unirlos mediante una
flecha.

b) Ajustar el generador de señales con los


valores mostrados en la figura.
c) Ajustar el rango del visor (Scope) tal y
como se indica en la figura.

d) En el menú “Simulations”, ajustar a


los parámetros indicados en la figura:

e) En ese mismo menú “Simulations”


comenzar con la simulación (“Start” o
Ctrl-T). Si el visualizador no está en
pantalla, llamarlo pulsando dos veces
sobre su símbolo, hasta obtener algo
semejante a la figura.
Se pueden repetir las simulaciones variando la forma de la señal del generador, para experimentar
las posibles opciones, así como variar los rangos de los visualizadores.
Ejemplo 2.
Ahora se trata de observar la función del multiplexor y como almacenar la salida en variables
vectoriales de MATLAB.

a) En primer lugar se monta el esquema de


la figura, eligiendo dos entradas para el
multiplexor, y un valor de 2 para la
ganancia del bloque amplificador.
Elegiendo la misma fuente senoidal que
para el caso del ejemplo 1. La variable de
salida se llamara “sal” corresponde a un
bloque To Workspace (sublibreria Sinks):

b) Una vez preparado el sistema, se tendra -Stop time: 2


que ajustar los parámetros de la
-Solver options:
simulación, que ahora serán:
Type: Fixed-step ode4 (Runge-Kutta)
También se ajustará el Scope para un rango
horizontal de 2 y vertical de 2.

c) Se iniciará la ejecución, obteniendo la


siguiente salida

Se puede llamar a la variable de MATLAB “sal”, tecleando su nombre, para comprobar que se han
almacenado los valores en una matriz de dos columnas (la segunda de valor doble que la primera),
por efecto de los elementos Gain y Mux.
Subsistemas.
Se va a utilizar la posibilidad que Simulink ofrece para crear subsistemas nuevos a partir de bloques
convencionales, lo que aporta gran potencia ya que permite el diseño de sistemas jerarquizados.
Para ello, se va a crear un subsistema a partir del ejemplo 2, incluyendo el multiplicador, ganancia y
multiplexor en un único bloque.
a) Sobre el bloque completo, marcar con el b) Seleccionar la opción Create Subsystem del
botón derecho del ratón el área que incluya los menú Edit de Simulink.
elementos que se quiere incluir en el subsistema.

Se puede deshacer el subsistema eligiendo Undo create Subsystem en el mismo menú. Para ver el
contenido del subsistema se puede pulsar dos veces sobre el mismo. Los subsistemas pueden
“enmascararse” para conseguir una mayor facilidad en la introducción de datos. Esto se verá en un
apartado posterior.
Modelado de Ecuaciones.
En este apartado se va a ver como se pueden modelar ecuaciones utilizando Simulink.
Ecuaciones algebraicas.
Se va a construir un sistema que tome como entrada grados Fahrenheit y los convierta en Celsius
(como entrada colocaremos una onda senoidal para observar un amplio rango (la salida será un
Scope con amplitud suficiente para visualizar todos los resultados).

Se sabe que la ecuación que realiza el


cambio es la siguiente:

Se puede construir el siguiente sistema:

Obteniendo la siguiente salida (para una


entrada de amplitud 50 y frecuencia 1
Ecuación diferencial.
Se va ahora a simular la
siguiente ecuación
diferencial simple

Esto se puede hacer de la


siguiente forma

Donde, la salida puede


observarse en la figura

Función de Transferencia.
Por último, es fácil ver que la función de transferencia asociada al sistema anterior (definida como
el cociente de las transformadas de Laplace de la salida dividida por la entrada) es:

El sistema que se puede simular es el siguiente:

cuya salida coincide con la observada en la salida anterior.


TALLER 6.
LAZO CERRADO
Respuesta temporal de un sistema compensado
Para obtener la respuesta temporal de un sistema compensado, es decir, dentro de un lazo de
realimentación negativa, se puede emplear el comando feedback para definir la función de
transferencia en lazo cerrado.

Los parámetros de este comando son el numerador y denominador de la función de transferencia


directa y el numerador y denominador de la función de transferencia de realimentación H(s). Por
ejemplo:

» n=[4]
» d=[1 2 0]
» nc=5.6*[1 3]
» dc=[1 5.4]
» [nlc,dlc]=feedback(conv(nc,n),conv(dc,d),1,1)
» step(nlc,dlc)
En cambio, el lugar de las raíces del sistema compensado se debe calcular con la función de
transferencia en lazo abierto:
» rlocus(conv(nc,n),conv(dc,d))
Ejercicios
Introducir una función de transferencia G1(s) de un sistema de segundo orden: K=2.5, δ= 0.1 y ωn =
10 rad/s y una función de transferencia G2(s) de un sistema de primer orden: K=2 y τ=0.5s. Obtener
la respuesta temporal de G1 ante un impulso y un escalón.
>>g1n=[2.5] Numerador de G1
>>g1d=[0.01 0.02 1] Denominador de G1
>>g2n=[2] Numerador de G2
>>g2d=[0.5 1] Denominador de G2
>>impulse(g1n,g1d) Respuesta de G1 ante un impulso
Impulse Response
25
20
15
10

Amplitude
5
0
-5
-10
-15
-20
0 1 2 3 4 5 6
Time (sec)

Representar en una misma gráfica las respuestas temporales a una entrada escalón de G1 y G2.
>>step(g1n,g1d);
>>[y1, x1,t] = step(g1n,g1d);
>>hold on;
>>step(g2n,g2d,t);
>>hold off;

Step Response
4.5
4
3.5
3
Amplitude

2.5
2
1.5
1
0.5
0
0 1 2 3 4 5
Time (sec)

Obtener la función de transferencia en lazo cerrado de acuerdo con la siguiente figura, y determinar
la respuesta ante una entrada tipo impulso:
1.25s + 2.5
>>[g4n, g4d] = feedback (g1n, g1d, g2n, g2d) g4 =
0.005s + 0.02s 2 + 0.52 s + 6
3

>>impulse (g4n, g4d); Sistema inestable


2.2319 +11.6961i
>>roots(g4d) 2.2319 -11.6961i
-8.4638
Impulse Response
250

200

150

100

Amplitude 50

-50

-100

-150
0 0.2 0.4 0.6 0.8 1 1.2
Time (sec)
TALLER 7.
SIMULINK EN CONTROL
En los siguientes subapartados se realizará un estudio del comportamiento de los sistemas
analógicos de segundo orden, ante diversos tipos de excitación, usando Simulink.
Sistemas de Segundo Orden
Para comenzar se estudiará la respuesta de un sistema analógico de segundo orden a una entrada
tipo escalón unitario, tal como se indica en la figura 1. La señal de entrada es generada por un
bloque Step input (sublibrería Sources), para el que se fijará a 1 segundo el instante en que tiene
lugar el escalón. El sistema de segundo orden es un bloque Transfer Fcn (sublibrería Continuous) en
el que se tienen que fijar los coeficientes del polinomio numerador y los del denominador. Si, por
ejemplo, se pretende simular un sistema del tipo,

con ωn = 1 y δ = 0;5, se tendrá que fijar el numerador a [1] y el denominador a [1 2*0.5*1 1].
Finalmente, para visualizar la señal de salida, se usará el bloque Scope (sublibrería Sinks).

Figura 1: Sistema de segundo orden


Para realizar la simulación se debe seleccionar la opción Simulation. Antes de pulsar en start, se
deben ajustar los parámetros de la simulación: start time (0.0), stop time (19.94), max step size
(0.02), min step size (0.01) y tolerance (0.001). Tras estos ajustes ya se puede realizar la simulación
y visualizar en el scope la señal de salida, que debe ser oscilatoria y amortiguada, por tratarse de un
sistema subamortiguado (δ < 1).
Al abrir el bloque Scope se deberán ajustar en el visualizador los rangos vertical y horizontal, que se
fijaran a 2 y 20 respectivamente.
La señal de salida y(t) puede transferirse en forma muestreada (y(nT), donde T es el periodo de
muestreo) al entorno de MatLab usando el bloque To Workspace (sublibreria Sinks), en el que debe
fijarse el nombre de la variable MatLab de salida (yout) ), se debe verificar que la variable sea
array. Ya en línea de comando de MatLab, puede visualizarse la señal de salida mediante,
>>plot(tout,yout);
Determinar, la sobreoscilación y el tiempo de establecimiento al 2%, y comparar con las
predicciones teóricas. Repetir lo anterior para δ = 1 (sistema críticamente amortiguado) y δ = 1.5
(sistema sobreamortiguado). Comentar los resultados superponiendo en una sola gráfica las
respuestas escalón de los tres tipos de sistema.
Funciones de Transferencia con Ceros
A continuación se comprobará el efecto de la introducción de ceros en la función de transferencia.
Si al sistema de segundo orden del apartado anterior (δ = 0.5 y ωn = 1) se le añade ahora un cero en
z0 = -1/a, la función de transferencia será:
Comprobar el efecto de dicho cero para a = 1, 0.5, 0.2; 0.1; 0.05. ¿Para qué valores de a puede
despreciarse el efecto del cero?
Sistemas Realimentados
Un amplio rango de sistemas, entre los que se encuentran diversos tipos de sistemas de control,
presenta una topología con realimentación. Como ejemplo de sistema realimentado se trazará el
sistema realimentado de la figura 2. Siguiendo las indicaciones del apartado anterior, se medirán la
sobreoscilación y los errores de posición y velocidad. Comprobar con las predicciones teóricas.

Figura 2: Sistema de segundo orden con realimentación.


Para medir el error de velocidad, es necesario generar una señal de entrada tipo rampa unitaria, que
puede obtenerse mediante el generador Rampa con una pendiente igual a 1. A continuación se
comprobará el efecto que produce en el sistema anterior la introducción de un controlador PI (ver
figura 3),

con kp = ki = 1. Medir de nuevo la sobreoscilación y los errores de posición y velocidad (usando


entradas tipo escalón unitario y rampa unitaria). Modificar los valores de los parámetros del
controlador para reducir la sobreoscilación.

Figura 3: Sistema realimentado con controlador PI.


TALLER 8.
MÉTODOS GRÁFICOS
Lugar de las raíces
Se denomina lugar de raíces a la gráfica de la posición de las raíces de la ecuación característica de
un sistema, es decir el denominador de la función de transferencia de lazo cerrado, con la variación
de cero a infinito de algún parámetro, normalmente la ganancia de la función de transferencia de la
rama directa.
De acuerdo con lo señalado, al resultar la función de transferencia de lazo cerrado la forma:
C (s) G(s)
=
R( s) 1 + G( s) H (s)

Por lo tanto la ecuación característica es: 1 + G ( s ) H ( s ) = 0 o bien: G ( s ) H ( s ) = −1


Las raíces de la ecuación característica determinan tanto la estabilidad del sistema como la forma de
la respuesta del mismo.
La función rlocus produce la gráfica del lugar geométrico de raíces de la función de transferencia de
lazo abierto:

G ( s) H ( s) =
(
k b0 s n + b1 s n −1 + L + bn −1 s + bn )
m −1
a0 s + a1 s
m
+ L + am −1 s + am

en esta se tiene un polinomio numerador (num) y un polinomio denominador (den) y una ganancia
K.
Instrucción: [r,k] = rlocus (num,den,m)
Esta instrucción determina los vectores r y k de las raíces (r) y las ganancias correspondientes (k) de
la función de transferencia definida por los vectores num y den, de los coeficientes de los
polinomios del numerador y denominador de la función de transferencia de lazo abierto G(s)H(s) y
la variable de entrada opcional m, un vector de ganancias de entrada especificadas por el usuario.
El comando rlocfind permite señalar un punto del lugar de las raíces y calcula la ganancia que sitúa
los polos en lazo cerrado en dicho punto. Además devuelve la posición de todos los polos en lazo
cerrado para esa ganancia.
» [k,p]=rlocfind(num,den)
Obtener la gráfica del Lugar Geométrico de Raíces del siguiente sistema de realimentación unitaria:

» num=[1,2,3];
» den=[1,3,3,1];
» [r,k]=rlocus(num,den)
r=
-1.0000 -1.0000 + 0.0000i -1.0000 - 0.0000i
-1.4169 -0.8082 + 0.3509i -0.8082 - 0.3509i
-1.5631 -0.7570 + 0.4633i -0.7570 - 0.4633i
-1.7735 -0.7023 + 0.6098i -0.7023 - 0.6098i
-2.0965 -0.6576 + 0.7961i -0.6576 - 0.7961i
-2.6505 -0.6506 + 1.0155i -0.6506 - 1.0155i
-3.7724 -0.7138 + 1.2268i -0.7138 - 1.2268i
-4.2834 -0.7431 + 1.2732i -0.7431 - 1.2732i
-9.9758 -0.8913 + 1.3927i -0.8913 - 1.3927i
Inf -1.0000 + 1.4142i -1.0000 - 1.4142i
k=
Columns 1 through 7
0 0.0333 0.0771 0.1781 0.4117 0.9517 2.2000
Columns 8 through 10
2.7696 8.7584 Inf
» plot(r,'x'),title ('Gráfica del Lugar de Raíces'),...
xlabel('Eje real'),ylabel('Eje imaginario'),grid

En definitiva, la respuesta obtenida con Matlab debe interpretarse, asignando la ganancia calculada
por el programa del modo que gráficamente se indica para algunas de las raíces graficadas, a
continuación:
Diagrama de Bode
El comando bode dibuja el diagrama de Bode de una función de transferencia. El comando margin
dibuja el diagrama de Bode y calcula los valores de los márgenes de fase y ganancia y las
frecuencias de cruce de fases y ganancias.
» bode(n,d)
» margin(n,d)
Determine mediante el criterio simplificado de Bode el rango de valores de K de un controlador
proporcional en cascada tanto G1 como el bucle cerrado son estables.
Para hallar la función de transferencia en bucle cerrado es G3.
>> [g3n, g3d ] = series (g1n,g1d,g2n,g2d)
Se obtiene como resultado:
g3n = [ 0 0 0 5 ]
g3n = [ 0.005 0.02 0.52 1.0 ]
siendo los polos de G3:
>> roots(g3d)
-1.0000 + 9.9499i
-1.0000 - 9.9499i
-2.0000
Para obtener el diagrama de Bode y determinar a continuación los márgenes de ganancia y de fase:
>>[g3m, g3f, w] = bode(g3n, g3d)
>>margin(g3m,g3f,w)
El resultado es:

Bode Diagram
Gm = -13.1 dB (at 10.2 rad/sec) , Pm = -60.7 deg (at 13.1 rad/sec)
20

0
Magnitude (dB)

-20

-40

-60
0
Phase (deg)

-90

-180

-270
-1 0 1 2
10 10 10 10
Frequency (rad/sec)

Como es posible observar, el margen de ganancia es negativo y el margen de fase también. Para
obtener su valor:
>>[Gm, Rm, wGm, wFm] = margin(g3m, g3f, w);
Resultado:
Gm = 0.2182
Fm = -60.80
wGm = 10.206
wFm = 13.090
de donde:
· Margen de ganancia: Gm= 0.2182= -13.22 dB para un w= 10.206 rad/s.
· Margen de fase: fm= -60.80 para un w= 13.09 rad/s.
Luego se determina el rango de valores de K (controlador proporcional) que estabiliza el sistema en
Lazo cerrado es 0 < K < 0.2182.
Verificar mediante el diagrama de Nyquist la situación antes de compensar (K=1) y después de
compensar (K= 0.18).
g5n = 0.18 * g3n;
g5d = g3d;
nyquist( g3n,g3d);
% la siguiente instrucción genera un vector de frecuencias
% que se utilizara en la segunda gráfica a superponer
[re, im, w] = nyquist(g3n,g3d);
hold on;
nyquist(g5n ,g5d, w)

Nyquist Diagram
4

1
Imaginary Axis

-1

-2

-3

-4
-5 -4 -3 -2 -1 0 1 2 3 4 5
Real Axis

Como se puede observar el nodo de -1+j0 es N=0.


REFERENCIAS
1. MATLAB, The Language of Technical Computing- “Getting Started with MATLAB”
2. EHIRCH, LEONARD and WILLIAM, Using MATLAB to Analize and Design Control Systems.
The Benjamin/Cummings Publishing Company, Inc.
3. MAZZONE, Virginia. Introducción a MATLAB y SIMULINK para Control. Automatización y
Control Industrial. Universidad Nacional de Quilmes, 2002.
4. SARMIENTO, Henry y BOTERO, Héctor. Curso básico de Matlab. Universidad de Antioquia,
Facultad de Ingeniería, Departamento de Ingeniería Eléctrica. 2006.
5. SILVA BEARD, Andrea. Computación aplicada a procesos químicos. Departamento de
Ingeniería y Ciencias Químicas, UIA.
6. Sistemas de Control. Facultad de Ingeniería, Universidad de Buenos Aires.