Professional Documents
Culture Documents
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
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
» 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)
» num=1;
» den=[1,.8,1];
» step(num,den)
En el caso de una entrada impulso, se obtiene:
» impulse(num,den)
>>[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).
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).
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:
» 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
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).
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