Matlab Tutor

66
MATLAB M. C. BENITO BAEZ SANCHEZ M. C. BENITO BAEZ SANCHEZ 1 1 INTRODUCCION Las computadoras se han hecho indispensables para el trabajo creativo en ciencias e ingeniería, nosotros como institución académica comprometidos con la calidad en el servicio educativo, estamos conscientes de la importancia de la utilización de la computadora como una herramienta muy poderosa de apoyo en el proceso de enseñanza-aprendizaje. El uso de las computadoras y para facilitar el aprendizaje de los conceptos propuestos por la Teoría de Control, surgen herramientas que proporcionan una nueva forma de solucionar problemas de control. Las herramientas CACSD (Computer Aided Control System Design, Diseño de Sistemas de Control - Auxiliados por Computadora) han sido de gran ayuda para la solución de estos problemas. Algunos de los paquetes más comunes: MATLAB The MathWorks, Inc. MATRIX Integrated Systems, Inc. CTRL-C Systems Control Technology, Inc. CC Systems Technology Inc. El nombre MATLAB proviene de ``MATrix LABoratory'' (Laboratorio de Matrices). MATLAB fue escrito originalmente para proporcionar un acceso sencillo al software matricial desarrollado por los proyectos LINPACK y EISPACK, que juntos representan lo más avanzado en programas de cálculo matricial. MATLAB es un sistema interactivo cuyo elemento básico de datos es una matriz que no requiere dimensionamiento. MATLAB se utiliza para investigación y para resolver problemas prácticos de ingeniería y matemáticas, con un gran énfasis en aplicaciones de control y procesamiento de señales. MATLAB también proporciona una serie de soluciones específicas denominadas TOOLBOXES. Estas son muy importantes para la mayoría de los usuarios de MATLAB y son conjuntos de funciones MATLAB que extienden el entorno MATLAB para resolver clases particulares de problemas.MATLAB es un entorno de cálculo técnico de altas prestaciones para cálculo numérico y visualización. Integra: Análisis numérico Cálculo matricial Procesamiento de señales Gráficos El aprendizaje de las técnicas de control para el diseño y optimización de sistemas ha sido un obstáculo en la formación de ingenieros. La falta de herramientas especializadas ha sido determinante. Se asume que cualquier ingeniero encargado del diseño de sistemas de control tiene a su disposición una herramienta de éstas o su equivalente. Por lo cual es necesario aprender a utilizar adecuadamente esta clase de paquetes. CAPITULO 1: FUNDAMENTOS DE MATLAB 1.1 INTRODUCCIÓN MATLAB es un programa interactivo para cálculos científicos y de ingeniería. La familia de programas de MATLAB incluye un programa base y una gran variedad de módulos, (denominados TOOLBOXES), como el de Sistemas de Control, Identificación, Optimización, Redes Neuronales etc. En concreto utilizaremos el control system toolbox, el cual es un conjunto de rutinas para MATLAB

Transcript of Matlab Tutor

Page 1: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

1

1

INTRODUCCION Las computadoras se han hecho indispensables para el trabajo creativo en ciencias e ingeniería, nosotros como institución académica comprometidos con la calidad en el servicio educativo, estamos conscientes de la importancia de la utilización de la computadora como una herramienta muy poderosa de apoyo en el proceso de enseñanza-aprendizaje. El uso de las computadoras y para facilitar el aprendizaje de los conceptos propuestos por la Teoría de Control, surgen herramientas que proporcionan una nueva forma de solucionar problemas de control. Las herramientas CACSD (Computer Aided Control System Design, Diseño de Sistemas de Control -Auxiliados por Computadora) han sido de gran ayuda para la solución de estos problemas. Algunos de los paquetes más comunes: MATLAB The MathWorks, Inc. MATRIX Integrated Systems, Inc. CTRL-C Systems Control Technology, Inc. CC Systems Technology Inc. El nombre MATLAB proviene de ``MATrix LABoratory'' (Laboratorio de Matrices). MATLAB fue escrito originalmente para proporcionar un acceso sencillo al software matricial desarrollado por los proyectos LINPACK y EISPACK, que juntos representan lo más avanzado en programas de cálculo matricial. MATLAB es un sistema interactivo cuyo elemento básico de datos es una matriz que no requiere dimensionamiento. MATLAB se utiliza para investigación y para resolver problemas prácticos de ingeniería y matemáticas, con un gran énfasis en aplicaciones de control y procesamiento de señales. MATLAB también proporciona una serie de soluciones específicas denominadas TOOLBOXES. Estas son muy importantes para la mayoría de los usuarios de MATLAB y son conjuntos de funciones MATLAB que extienden el entorno MATLAB para resolver clases particulares de problemas.MATLAB es un entorno de cálculo técnico de altas prestaciones para cálculo numérico y visualización. Integra:

Análisis numérico Cálculo matricial Procesamiento de señales Gráficos El aprendizaje de las técnicas de control para el diseño y optimización de sistemas ha sido un obstáculo en la formación de ingenieros. La falta de herramientas especializadas ha sido determinante. Se asume que cualquier ingeniero encargado del diseño de sistemas de control tiene a su disposición una herramienta de éstas o su equivalente. Por lo cual es necesario aprender a utilizar adecuadamente esta clase de paquetes. CAPITULO 1: FUNDAMENTOS DE MATLAB 1.1 INTRODUCCIÓN MATLAB es un programa interactivo para cálculos científicos y de ingeniería. La familia de programas de MATLAB incluye un programa base y una gran variedad de módulos, (denominados TOOLBOXES), como el de Sistemas de Control, Identificación, Optimización, Redes Neuronales etc. En concreto utilizaremos el control system toolbox, el cual es un conjunto de rutinas para MATLAB

Page 2: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

2

2

dedicadas a aplicar las distintas herramientas de la teoría de control clásico para sistemas lineales. Podemos dividir esta Toolbox en cuatro subgrupos: • funciones para definir modelos • funciones para obtener la respuesta temporal • funciones para obtener la respuesta en frecuencia • funciones para el diseño de controladores En una sesión típica de MATLAB básicamente se utilizan relaciones, matrices, gráficas y programas scripts. 1.2 Relaciones Fundamentales Después de ejecutar el programa MatLab desde el sistema operativo empleado, por ejemplo haciendo doble click sobre el icono de MatLab en ambientes Windows, aparece el indicador de comandos el cual está listo para recibir instrucciones en lenguaje MatLab. Este indicador es de la siguiente forma: >> Al iniciar el uso de MatLab están disponibles los comandos de ayuda y demostración. Para ejecutarlos se escribe el comando en la línea de comandos después del símbolo >> y se presiona la tecla <Enter>. Por ejemplo: >>help ayuda sobre los diferentes comandos de MatLab. >>demo hace una demostración de las diferentes aplicaciones de MatLab. >>quit Para cerrar o finalizar el uso de MatLab se usa el comando quit. En MATLAB se usa el signo de igual para asignar una expresión a una variable. >>variable = expresión La forma de interactuar con MatLab es a través de la línea de comandos. Puede ejecutarse un comando si este escrito después del símbolo >> y presione <Enter>. Se muestra una relación simple donde los comandos se introducen tal como ellos se escriben matemáticamente. >>a=4 / 3 < enter > MATLAB produce la respuesta: a =1.3333 Asigna a la variable "a" el valor de cuatro dividido por tres. En general se recomienda el usar nombres de variables apropiados y fáciles de memorizar. MATLAB reconoce los primeros 19 caracteres del nombre de una variable y solamente requiere que el primer carácter de una variable sea una letra, además es sensible a mayúsculas y minúsculas por ejemplo A y a son variables diferentes y las funciones de MATLAB deben estar en minúsculas. Si no se desea crear una nueva variable pero se quiere saber el valor de una expresión, se puede teclear la expresión por si misma: >> 4 / 3 lo cual produce ans =1.3333 donde " ans " variable que genera MATLAB que significa respuesta (answer). Alternativamente si se desea crear una nueva variable pero no se quiere ver la respuesta de MATLAB, se

teclea un punto y coma " ; " al final de la expresión.

Por ejemplo: >>b=4+7; MATLAB creará la variable b de valor 11, pero no mostrará el valor de b.

Page 3: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

3

3

El punto y coma (" ; " )es muy útil cuando se definen vectores o matrices muy grandes y no se desea que

se muestren. Se puede ver el valor de una variable en cualquier tiempo únicamente tecleando el nombre de dicha variable: >>b b =11 Se pueden hacer expresiones de una secuencia de números, operadores, funciones y variables que hallan sido previamente definidas. Por ejemplo: >>c= a*(b-1)

c =13.3333 Si se esta tecleando una expresión y no se completa en la línea, se utilizan tres o mas puntos al final de la línea y se continua tecleando en la siguiente línea, por ejemplo: >>p=1+2+...

3+4+6; Los operadores ' matemáticos que se utilizan en MATLAB para escribir relaciones matemáticas son los siguientes:

+ Suma - Resta * Multiplicación ^ Potencia

Por ejemplo si queremos elevar a una potencia el valor de p obtenido anteriormente: >>p^2 (Para obtener el circunflejo ^ : oprima <alt> y luego 94)

MATLAB responde ans =256 El orden de prioridad en el cual MATLAB efectúa las operaciones aritméticas es el siguiente: potencia ( ^ ), división ( / ), multiplicación ( * ), suma ( + ) y resta ( - ), esto es de izquierda a derecha pero pueden usarse paréntesis para alterar el orden de la operación por ejemplo : caso 1 > > 1 + 2 ^ 3 / 4 * 2 caso 2 >> 1 + 2 ^ 3 / (4 * 2) MATLAB responde ans =5 MATLAB responde ans=2 caso 3 >>(1+2) ^ 3 / (4 * 2) MATLAB responde ans = 3.3750 MATLAB tiene una gran variedad de funciones que fácilmente pueden ser incorporadas dentro de expresiones, las más comunes se muestran en seguida:

sin(x) seno de x cos(x) coseno de x

asin(x) arcoseno de x acos(x) arcocoseno de x

tan(x) tangente de x atan(x) arcotangente de x

abs(x) valor absoluto de x sqrt(x) raíz cuadrada de x

imag(x) parte imaginaria de x real(x) parte real de x

conj(x) complejo conjugado de x log(x) logaritmo natural de x

log10(x) logaritmo base 10 de x exp(x) exponencial de x

MATLAB tiene algunas variables predefinidas como: j, i Para representar números complejos NaN Operaciones indefinidas (Not is a Number) inf Infinito

pi Representa Ejemplos: > > c = 4 / 0 MATLAB responde Warning: Divide by zero

c=inf

Page 4: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

4

4

MATLAB responde NAN cuando se realizan ciertos cálculos indefinidos > > d = inf / inf

d =NaN Para representar números complejos > > z = 3 + 4j “o” 3+4i MATLAB responde z =3.0000 + 4.0000i El operador complejo (i o j) debe ir después del coeficiente numérico. Todos los cálculos en MATLAB se representan en doble precisión. El usuario puede controlar el número de decimales con que aparece en pantalla el valor de las variables, utilizando el comando format sin olvidar que ello no está relacionado con la precisión con la que se hacen los cálculos, sino con el aspecto con que éstos se muestran: Si al final un elemento de una matriz no es un entero exacto, hay cuatro formatos de salida posibles. La salida visualizada se puede controlar visualizando una de las siguientes órdenes: format short coma fija con 4 decimales (defecto) format long coma fija con 15 decimales format hex cifras hexadecimales format bank números con dos cifras decimales format short e notación científica con 4 decimales format short g notación científica o decimal, dependiendo del valor format long e notación científica con 15 decimales format long g notación científica o decimal, dependiendo del valor format loose introduce líneas en blanco en la salida (defecto) format compact elimina las líneas en blanco citadas (recomendada) format rat números racionales como cocientes de enteros Una vez llamado el formato elegido permanece activo hasta que sea cambiado. Para el análisis de sistema de control, se suelen utilizar format short y format long. Siempre que se llame a MATLAB y no se introduzca una orden de formato, MATLAB muestra los resultados numéricos en formato corto:

>>1/3 ans = 0.3333

>>format long >>1/3 ans = 0.33333333333333 >>format % Vuelve al formato estándar que es el de 4 cifras decimales

Todas las variables utilizadas en una sesión se almacenan automáticamente en el espacio de trabajo de MATLAB para su uso posterior. Para borrar las variables de espacio de trabajo se puede utilizar la función clear all. La función who se utiliza para mostrar las variables almacenadas en el área de trabajo y la función whos muestra información adicional sobre la dimensión tipo y tamaño de las lo variables. Es posible recuperar comandos anteriores de MATLAB y moverse por dichos comandos con el ratón y con

las teclas-flechas y Al pulsar la primera de dichas flechas aparecerá el comando que se había introducido inmediatamente antes. De modo análogo es posible moverse sobre la línea de comandos, ir al principio de la línea con la tecla Inicio, al final de la línea con Fin, y borrar toda la línea con Esc. Recuérdese que sólo hay una línea activa (la última).

Page 5: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

5

5

Para borrar todas las salidas anteriores de MATLAB y dejar limpia la ventana principal se pueden utilizar las funciones clc y home. La función clc (clear console) elimina todas las salidas anteriores, mientras que home las mantiene, pero lleva el prompt (» ) a la primera línea de la ventana. 1.3.- MATRICES La manera de introducir matrices pequeñas a MATLAB es utilizando una lista de elementos. Los

elementos de la matriz son separados por espacios o en blanco ó comas (“,”) y encerrados por corchetes

y se usa punto y coma (;)para indicar el final del renglón.

Por ejemplo: >> A = [ 1 2 3;4 5 6; 7 8 9 ] MATLAB responde: A = 1 2 3

4 5 6 7 8 9 Las matrices también pueden ser introducidas por medio de una lista de elementos de cada renglón de la matriz utilizando punto y coma al terminar cada renglón o simplemente darle retorno al terminar cada renglón y se encierra entre corchetes. Ejemplo: > > B = [ 1 2 3 4 5 6 7;

2 4 6 8 2 4 6; 1 3 5 7 9 1 3; 1 2 3 4 5 6 7];

Al oprimir B y luego <enter> aparece: B = 1 2 3 4 5 6 7 2 4 6 8 2 4 6 1 3 5 7 9 1 3 1 2 3 4 5 6 7

Las matrices pueden tener elementos formados por medio de expresiones ó funciones y pueden ser reales o complejos veamos el siguiente ejemplo:

>> A = [ 1, - 4j , sqrt(2); log(-1) sin (pi/2) cos(pi/3) asin(0.5), acos(0.8) exp(0.8) ]

Al oprimir A y <enter> aparece >>A= 1.000 0 - 4. 0000i 1.4142

0 + 3.1416i 1.0000 0.5000 0.5236 0.6435 2.2255

1.3.1.- Operaciones básicas con matrices:Suma, resta, multiplicación, transpuesta, inversa y las operaciones de elemento a elemento:

>>A=[ 1 3; 5 9 ] B= [5 -7;10 0] > > A + B ans = 6 -4 15 9 > > b = [ 1 ; 5 ]; > > A * b ans =16 50

>> A’ ans = 1 5

3 9 >>inv (A) ans =-1.5 0.5000

0.8333 -0.1667

Page 6: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

6

6

La transpuesta de una matriz se obtiene utilizando el apóstrofo y la inversa con la función inv.

En las operaciones elemento a elemento el símbolo matemático es precedido por un punto “ . “las

operaciones de suma y resta no requieren de punto. Suponiendo que A y B son dos matrices de 2 x 2 dadas por:

2221

1211

aa

aaA

2221

1211

bb

bbB

Utilizando la multiplicación elemento a elemento se obtiene:

22222121

12121111*

baba

babaBA

Los elementos de BA . son el producto de los correspondientes elementos de A y B.

2

A es el cuadrado de cada uno de sus elementos, Por ejemplo

>> A=[1; 2; 3]; , B=[-6; 7; 10]; >>A.*B ans= -6

14 30

>>A.^2 ans= 1

4 9

1.3.2 .- Generación de vectores MATLAB puede generar vectores automáticamente que contengan elementos que van de un valor inicial Xi a un valor final Xf con ciertos incrementos especificados por dX.: X = Xi : dX : Xf Pueden generarse fácilmente vectores utilizando esta notación llamada notación colon. Por ejemplo, se desea generar un vector con valor inicial 1 y final 10 con incrementos de 1 >>X=[1:1:10]

X=1 2 3 4 5 6 7 8 9 10 La transpuesta de este vector X=[1:1:10]’ y MATLAB responde con una columna de datos. Esta notación es útil cuando se desea calcular ó graficar alguna función contra algún parámetro que varia. Por ejemplo se desea calcular los valores de y= x sen(x) si x varia de 0 a 1 con incrementos de 0. 1 . >>x=[0:0.1:1]’; y = x. * sin (x); >> [x y] ans= 0 0

0.1000 0.0100 0.2000 0.0397 0.3000 0.0887 0.4000 0.1558 0.5000 0.2397 0.6000 0.3388 0.7000 0.4510 0.8000 0.5739 0.9000 0.7050 1.0000 0.8415

Si lo que conocemos del vector es que la primera coordenada vale 0, la última 20 y que tiene 11 en total, escribiremos:

>>x=linspace(0,20,11) x= 0 2 4 6 8 10 12 14 16 18 20

Page 7: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

7

7

A las coordenadas de un vector se accede sin más que escribir el nombre del vector y, entre paréntesis, su índice:

>>x(3) ans = 4 y se pueden extraer subvectores, por ejemplo: >>x(2:5) ans= 2 4 6 8

>>x(:) ans= 0

2 4 6 8 10 12 14 16 18 20

1.3.3.-MATRICES DE UTILIDAD: En MATLAB, las funciones: Ones(n)

Ones(m,n) Ones(A) Zeros

Produce matrices especiales. Esto es, ones(n) genera una matriz de unos de n x n Ones(m,n) genera una matriz de unos de m x n. Similarmente zeros(n) genera una matriz de ceros de n x n. Mientras que zeros(m,n) genera una matriz de ceros de m x n. Zeros(A) genera una matriz de ceros de¡ mismo tamaño que A, excepto cuando A es un escalar. Frecuentemente necesitamos la matriz identidad. En MATLAB la proposición eye(n) genera una matriz identidad de n x n. Si x es un vector, la proposición diag(x), genera una matriz diagonal con x puesto en la diagonal principal; por ejemplo: X=[ones(1,n)]; Diag((ones(1,n)) genera una matriz identidad como sigue : >>diag(ones(1,5)) ans = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 Si A es una matriz cuadrada, entonces diag(A) es un vector que consiste en la diagonal principal de A y diag(diag(A)) es una matriz diagonal en la cual la diagonal principal de A aparece en la diagonal principal de la nueva matriz. >>A=[1 2 3;4 5 6;7 8 9] A = 1 2 3

4 5 6 7 8 9

>>díag(A) ans= 1 5 9

>>diag(diag(A)) ans= 1 0 0 0 5 0 0 0 9

Page 8: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

8

8

Note que diag(1:5) nos da: ans=1 0 0 0 0

0 2 0 0 0 0 0 3 0 0 0 0 0 4 0 0 0 0 0 5 Como y se menciono en MATLAB se accede a los elementos de un vector poniendo el índice entre paréntesis (por ejemplo x(3) ó x(i)). Los elementos de las matrices se acceden poniendo los dos índices entre paréntesis, separados por una coma (por ejemplo A(1,2) ó A(i,j)). Las matrices se almacenan por columnas (aunque se introduzcan por filas), y teniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un sólo subíndice. Por ejemplo, si A es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4). Los operadores matriciales de MATLAB son los siguientes: + adición o suma – sustracción o resta * multiplicación ' transpuesta ^ potenciación \ división-izquierda / división-derecha .* producto elemento a elemento ./ y .\ división elemento a elemento .^ elevar a una potencia elemento a elemento TIPOS DE MATRICES PREDEFINIDOS Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de tipos particulares. Algunas de estas funciones son las siguientes: eye(4) forma la matriz unidad de tamaño (4x4) zeros(3,5) forma una matriz de ceros de tamaño (3x5) zeros(4) ídem de tamaño (4x4) ones(3) forma una matriz de unos de tamaño (3x3) ones(2,4) idem de tamaño (2x4) linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2 logspace(d1,d2,n) genera un vector con n valores espaciados logarítmicamente entre 10^d1 y 10^d2. Si d2 es pi los puntos se generan entre 10^d1 y pi rand(3) forma una matriz de números aleatorios entre 0 y 1, con distribución uniforme, de tamaño (3x3) rand(2,5) idem de tamaño (2x5) randn(4) forma una matriz de números aleatorios de tamaño (4x4), con distribución normal, de valor medio 0 y varianza 1. magic(4) crea una matriz (4x4) con los números 1, 2, ... 4*4, con la propiedad de que todas las filas y columnas suman lo mismo hilb(5) crea una matriz de Hilbert de tamaño (5x5). La matriz de Hilbert es una matriz cuyos elementos (i,j) responden a la expresión (1/(i+j-1)). Esta es una matriz especialmente difícil de manejar por los grandes errores numéricos a los que conduce invhilb(5) crea directamente la inversa de la matriz de Hilbert kron(x,y) produce una matriz con todos los productos de los elementos del vector x por los elementos

Page 9: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

9

9

del vector y. Equivalente a x'*y, donde x e y son vectores fila compan(pol) construye una matriz cuyo polinomio característico tiene como coeficientes los elementos del vector pol (ordenados de mayor grado a menor) vander(v) construye la matriz de Vandermonde a partir del vector v (las columnas son las potencias de los elementos de dicho vector) A continuación se describen algunas de las funciones que crean una nueva matriz a partir de otra o de otras, comenzando por dos funciones auxiliares: [m,n]=size(A) devuelve el número de filas y de columnas de la matriz A. Si la matriz es cuadrada basta recoger el primer valor de retorno. n=length(x) calcula el número de elementos de un vector x zeros(size(A)) forma una matriz de ceros del mismo tamaño que una matriz A previamente creada. ones(size(A)) ídem con unos A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya existente. A= diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A=blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le pasan como argumentos. triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene por qué ser cuadrada). Con un segundo argumento puede controlarse que se mantengan o eliminen más diagonales por encima o debajo de la diagonal principal. tril(A) ídem con una matriz triangular inferior rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un entero que puede ser negativo. Si se omite, se supone k=1 flipud(A) halla la matriz simétrica de A respecto de un eje horizontal fliplr(A) halla la matriz simétrica de A respecto de un eje vertical reshape(A,m,n) Cambia el tamaño de la matriz A devolviendo una matriz de tamaño m×n cuyas columnas se obtienen a partir de un vector formado por las columnas de A puestas una a continuación de otra. Si la matriz A tiene menos de m×n elementos se produce un error. Un caso especialmente interesante es el de crear una nueva matriz componiendo como submatrices otras matrices definidas previamente. OPERADOR DOS PUNTOS (:) Ya se ha mencionado la utilidad de este operador. Aquí se retoma porque es un operador muy importante en MATLAB y puede usarse de varias formas. Para empezar, defínase un vector x con el siguiente comando: » x=1:10 x =1 2 3 4 5 6 7 8 9 10 En cierta forma se podría decir que el operador (:) representa un rango: en este caso, los números enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este operador puede también utilizarse con otros valores enteros y reales, positivos o negativos. En este caso el incremento va entre el valor inferior y el superior, en las formas que se muestran a continuación: » x=1:2:10 x =1 3 5 7 9 » x=1:1.5:10 x =1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000

Page 10: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

10

10

» x=10:-1:1 x =10 9 8 7 6 5 4 3 2 1 Puede verse que, este operador produce vectores fila. Si se desea obtener un vector columna basta trasponer el resultado. El siguiente ejemplo genera una tabla de funciones seno y coseno. » x=[0.0:pi/50:2*pi]'; » y=sin(x); z=cos(x); » [x y z]

El operador dos puntos (:) es aún más útil y potente –y también más complicado con matrices. A

continuación se va a definir una matriz A de tamaño 6x6 y después se realizarán diversas operaciones sobre ella con el operador (:).

» A=magic(6) A = 35 1 6 26 19 24

3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16

4 36 29 13 18 11

Recuérdese que MATLAB accede a los elementos de una matriz por medio de los índices de fila y de columna encerrados entre paréntesis y separados por una coma. Por ejemplo: » A(2,3) ans =7

El siguiente comando extrae los 4 primeros elementos de la 6ª fila: » A(6, 1:4) ans = 4 36 29 13

Los dos puntos aislados representan "todos los elementos". Por ejemplo, el siguiente comando extrae todos los elementos de la 3ª fila: » A(3, :) ans =31 9 2 22 27 20

Para acceder a la última fila o columna puede utilizarse la palabra end, en lugar del número correspondiente. Por ejemplo, para extraer la sexta fila (la última) de la matriz: » A(end, :) ans =4 36 29 13 18 11

El siguiente comando extrae todos los elementos de las filas 3, 4 y 5: » A(3:5,:) ans = 31 9 2 22 27 20

8 28 33 17 10 15 30 5 34 12 14 16

Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por ejemplo, el siguiente comando extrae las filas 1, 2 y 5: » A([1 2 5],:) ans = 35 1 6 26 19 24

3 32 7 21 23 25 30 5 34 12 14 16

En los ejemplos anteriores se han extraído filas y no columnas por motivos del espacio ocupado por el resultado en la hoja de papel. Es evidente que todo lo que se dice para filas vale para columnas y viceversa: basta cambiar el orden de los índices.

El operador dos puntos (:) puede utilizarse en ambos lados del operador (=). Por ejemplo, a continuación se va a definir una matriz identidad B de tamaño 6x6 y se van a reemplazar filas de B por filas de A. Obsérvese que la siguiente secuencia de comandos sustituye las filas 2,4 y 5 de B por las filas 1,2 y 3 deA

» B=eye(size(A)); » B([2 4 5],:)=A(1:3,:) B = 1 0 0 0 0 0

35 1 6 26 19 24 0 0 1 0 0 0 3 32 7 21 23 25 31 9 2 22 27 20 0 0 0 0 0 1

Se pueden realizar operaciones aún más complicadas, tales como la siguiente » B=eye(size(A)); » B(1:2,:)=[0 1; 1 0]*B(1:2,:)

Page 11: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

11

11

Como nuevo ejemplo, se va a ver la forma de invertir el orden de los elementos de un vector: » x=rand(1,5) x =0.9103 0.7622 0.2625 0.0475 0.7361 » x=x(5:-1:1) x =0.7361 0.0475 0.2625 0.7622 0.9103

Obsérvese que por haber utilizado paréntesis –en vez de corchetes- los valores generados por el operador (:) afectan a los índices del vector y no al valor de sus elementos. Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente: » A=magic(3) A = 8 1 6

3 5 7 4 9 2

Se sustituyen las dos primeras filas de B por el producto de dichas filas por una matriz de permutación. » A(:,3:-1:1) ans = 6 1 8

7 5 3 2 9 4

aunque hubiera sido más fácil utilizar la función fliplr(A), que es específica para ello. Finalmente, hay que decir que A(:) representa un vector columna con las columnas de A una detrás de otra.

CAPITULO 2: GRAFICACIÓN 2.1.- INTRODUCCIÓN Las gráficas juegan un papel muy importante en el diseño y análisis de los sistemas de control. Un componente importante de un paquete interactivo para el análisis y diseño de sistemas de control es su capacidad gráfica, debe incluir formatos para gráficas del Lugar de Raíces, Bode, Nyquist y de respuesta en el tiempo, etc. Para las gráficas en dos dimensiones las funciones que se utilizan son plot, semilog(x), semilog(y), loglog y algunas funciones para rotular las gráficas, además se introducen los programas script. 2.2.- GRÁFICAS EN DOS DIMENSIONES Hay dos grupos básicos de funciones gráficas. El primer grupo de funciones se muestra en la tabla 2.1, donde se especifican los formatos de gráficas como la x-y, logarítmica y semilogarítmica. El segundo grupo de funciones se muestran en la tabla 2.2, estas funciones nos permiten etiquetar los ejes, añadir textos, mostrar varias gráficas y dividir una ventana gráfica.

Tabla 2.1 Formatos de gráficas x - y.

plot(x,y) Gráfica el vector x vs vector y

semilogx(x,y) Gráfica el vector x vs vector y. el eje x es log10; el eje y es lineal

semilogy(x,y) Gráfica el vector x vs vector y. El eje x es lineal; el eje y es log10

loglog(x,y) Gráfica el vector x vs vector y los ejes x , y son log10

Tabla 2.2 Funciones gráficas.

title('texto’) Pone un texto en el encabezado

xlabel('texto’) Etiqueta el eje x con un texto

ylabel('texto’) Etiqueta el eje y con un texto

text(pl,p2,'texto') Pone un texto en las coordenadas pl, p2

subplot Divide la pantalla en ventanas

grid Red de coordenadas

Page 12: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

12

12

La función plot crea una gráfica lineal con ejes x -y. Para generar gráficas logarítmicas se sustituye la función plot por loglog, semilogx, semilogy, todas estas ftmciones se utilizan de manera similar. Gráfica lineal simple Plot (y) Para un vector dado y, la función plot(y) generará una gráfica lineal de los elementos de y contra el numero de elementos de y. Por ejemplo si se requiere graficar los siguientes datos [0 1 3 5 2 7 0 8 4 0] con respecto a un numero de ellos y rotular la gráfica se utilizan las funciones plot (y), title, xlabel, ylabel, el procedimiento se muestra en seguida

» y=[0 1 3 5 2 7 0 8 4 0]; » plot(y);grid » title('GRÁFICA'); » xlabel('NUMERO DE DATOS'); » ylabel('AMPLITUD');

Figura 2.2 Gráfica simple rotulada utilizando la función plot (y).

Gráficas(x,y) Para crear una gráfica simple x - y se utiliza la función plot (x , y), es decir si se desea graficar los elementos de x con respecto a los elementos de y, el vector x puede ser generado con datos aleatorios x=[1 4 6 2 8 9 1 0 6 7 9 0 7 6] ó por la notación colón x=[xi:dx:xf]. En seguida se muestra un ejemplo de una gráfica x - y de la función y xseno(x) con respecto a x. » x=[0:0.1:1]'; » y=x.*sin(x); » plot(x,y) » title('Gráfica de x*sen(x) Vs x') » xlabel('x') » ylabel('y') » grid

Page 13: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

13

13

Figura 2.4 Gráfica simple de y = x seno(x) vs x.

Los ejes y la escala son generados automáticamente. Los ejes son rotulados con los comandos xlabel , ylabel; el titulo de la gráfica se determina con el comando títle y la red de coordenadas con el comando grid. Pueden ser generadas también varias gráficas en una misma ventana utilizando la función plot con argumentos múltiples por ejemplo plot ( x , yl , x , y2 , x , y3 ), puede indicarse también los tipos de líneas para cada gráfica, como se muestra en el siguiente ejemplo. Los tipos de líneas disponibles se muestran en la tabla 2.2.

» x=[0:0.1:1]'; » y1=x.*sin(x);y2=sin(x); » plot(x,y1,'b*',x,y2,'g--') » text(0.1,0.9,'y1=x seno(x) ***') » text(0.1,0.85,'y2=seno(x) ---') » xlabel('x'),ylabel('y1,y2'),grid

Figura 2.6 Gráfica múltiple x -y.

Page 14: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

14

14

Los tipos de líneas se seleccionan automáticamente a menos que el usuario quiera modificarlos..El uso de la función text, el cambio del tipo de línea y color se muestran también en el procedimiento para obtener la gráfica múltiple de la figura 2.6. Los tipos de línea disponibles y colores se muestran en la tabla 2.2

Tabla 2.2 Tipos de línea y colores

- Línea sólida -- Línea discontinua .. Línea punteada ; Línea punto y coma * Asterisco + Mas . Punto o Circulo

y Amarillo r Rojo g Verde b Azul w Blanco b Negro m Magenta

Gráficas a colores y tipos de línea se pueden obtener añadiendo un argumento a la función plot, por

ejemplo si queremos generar una gráfica de color azul con tipo de línea asterisco hacemos:

plot(x,y,’b*’) Las otras funciones gráficas loglog, semilogx, semilogy se utilizan en forma similar a la función plot . FUNCIÓN SUBPLOT

La función subplot se utiliza para dividir la pantalla en varias gráficas su forma general es:

subplot(m,n,p) Donde m n p son tres números, m n divide la pantalla en m x n ventanas, los valores máximos permitidos de m ó n es 2 por lo que se puede dividir la pantalla hasta en 4 ventanas, el numero p determina la posición de la ventana donde se desea mostrar la gráfica por ejemplo

subplot(211), plot( y ), subplot (212) , plot(u) Podemos observar que m = 2 y n = 1, divide la pantalla en dos renglones una columna , mostrando dos gráficas, en la primera se graficaría ( y ) y en la segunda (u ) . Para gráficas múltiples la función subplot se puede utilizar de la siguiente manera:

subplot(211), plot (x , y1, x , y2), subplot(212), plot (x,y3,x ,y4 ) para desactivar la función subplot, se puede utilizar subplot(111) o simplemente subplot. 2.3.- PROGRAMAS SCRIPT Hasta este momento todo nuestro trabajo lo hemos desarrollado dentro del espacio de trabajo de MATLAB. Este es un modo adecuado de operación cuando las sesiones son cortas y no repetitivas, sin embargo la potencialidad real de MATLAB se basa en su habilidad para ejecutar de manera secuencial una gran cantidad de comandos almacenados en un archivo. Estos son llamados archivos M, porque precisamente la extensión para que MATLAB los ejecute debe ser M. Un programa script es un archivo cuya extensión es M. Los programas script son archivos de texto que

Page 15: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

15

15

pueden ser escritos utilizando cualquier editor de textos. Un programa script es una archivo que contiene una secuencia de instrucciones ó funciones que deberá de ejecutar MATLAB. Es importante recordar que deberá guardarse con extensión. M, para llamar a un programa script desde MATLAB solo se teclea el nombre del archivo. Se muestra un ejemplo de un programa script para graficar la función y(t)=seno(alfa*t) donde alfa es un parámetro que se desea variar, se va guardar como ejl.m. % Programa Seript para graficar la función y(t)=seno(alfa*t) % El valor de alfa deberá darse en el espacio de trabajo % antes de llamar a este archivo t=[0:0.01:1]; y=sin(alfa*t); plot t,y) xlabel(‘tiempo [segundos]’) ylabel(y(t)=seno(alfa *t’) grid Como se observa en el programa anterior, los comentarios en los programas script deben empezar con el signo de por ciento (%), utilizando la función help se pueden mostrar los comentarios del titulo y de esta manera saber las características del programa script . » help ej1 Programa script para graficar la función y=seno(alfa*t) El valor de alfa deberá existir en el espacio de trabajo de matlab antes de llamar a este archivo MATLAB responde automáticamente generando la gráfica, el valor de alfa deberá introducirse a MATLAB antes de llamar al programa script, se obtienen dos gráficas para los valores de alfa =10 y 50 , como se muestran en las siguientes figuras: Para ejecutar el programa script ej1.m haga lo siguiente en el espacio de trabajo de MATLAB

Page 16: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

16

16

:» alfa=10; » ej1

Figura 2.9 Gráfica de y=seno(alfa*t) para alfa=10

Ahora teclee lo siguiente para aumentar la frecuencia de la señal

» alfa=50 » ej1

Figura 2.10 Gráfica de y=seno(alfa*t) para alfa=50.

Page 17: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

17

17

CAPITULO 3 MODELACIÓN MATEMÁTICA DE SISTEMAS 3.1.- INTRODUCCIÓN El análisis y diseño de sistemas de control esta basado en modelos matemáticos de sistemas físicos, estos se obtienen de las leyes físicas que determinan el comportamiento de dichos sistemas. Como los sistemas considerados son de naturaleza dinámica, las ecuaciones descriptivas son generalmente ecuaciones diferenciales. Además si estas ecuaciones pueden linealizarse, entonces puede utilizarse la transformada de Laplace y obtenerse la función de transferencia de un sistema. MATLAB puede utilizarse para analizar sistemas lineales invariantes en el tiempo. Representados en forma de función de transferencia ó de ecuaciones de estado. Se emplea MATLAB para ayudar en el análisis de modelos matemáticos particularmente en el cálculo de polos y ceros de una función de transferencia, reducción de diagramas a bloques, calculo de una función de transferencia en lazo cerrado y para graficar la respuesta de un sistema ante una entrada escalón. Las funciones de MATLAB que se usarán son: roots, series, feedback, cloop, poly, conv, polyval, printsys, minreal, pzmap y step. 3.2.- Función de transferencia La función de transferencia de un sistema se define como la transformada de Laplace de la salida con respecto a la transformada de Laplace de la entrada para condiciones iniciales nulas. La función de transferencia de un sistema es una relación formada por un polinomio numerador y un

polinomio denominador: nn

nn

mm

mm

asasas

bsbsbsb

sU

sYsF

1

1

1

1

1

10

)(

)()(

Las raíces del polinomio del numerador son llamados zeros del sistema; las raíces del polinomio del numerador se denominan polos. La respuesta transitoria de un sistema esta directamente relacionada con la ubicación de los polos y ceros en el plano s. En Matlab debe definirse el numerador Y(s) y el denominador U(s) como vectores, cuyos elementos son los coeficientes de los polinomios del numerador y del denominador en potencias decrecientes de “s”. Por ejemplo, para definir la función de transferencia:

125.0

1

)(

)()(

2

sssU

sYsF

>>y=[1]; >>u=[1 0.25 1];

Consideremos un sistema descrito por la función de transferencia: 43

26)(

23

2

ss

sssG

Igualando el polinomio denominador a cero se obtiene la ecuación característica: 043 23 ss Como una función de transferencia es una relación de polinomios, empezaremos utilizando MATLAB para manejar y evaluar polinomios. Raíces de un polinomio En MATLAB los polinomios se representan por vectores renglón que contienen los coeficientes del polinomio en orden descendente de las potencias de S. Por ejemplo sea el polinomio p(s):

43)( 23 sssp

Se introduce en MATLAB de la siguiente manera: >> p=[1 3 0 4]; Como se observa nada mas se dan los

Page 18: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

18

18

coeficientes de mayor a menor potencia. La función roots se utiliza para calcular las raíces de un polinomio representado en la forma de vector.

>>p=[1 3 0 4]; >> r=roots(p) r - 3.3553 0.17765 + 1.0773,7 0.17765 - 1.07731

La función poly se usa para generar un polinomio a partir de sus raíces, estas deben estar en forma de vector columna. La función poly crea un vector renglón con los coeficientes del polinomio.

>>p=poly(r) p =1.0000 3.0000 0.0000 4.0000

Multiplicación de polinomios La multiplicación de polinomios se realiza con la función conv. Supongamos que queremos desarrollar el polinomio N(S), donde :

49143)4)(123()( 232 sssssssN

Definimos el polinomio 123)( 2 sssP y el

polinomio 4)( ssQ

>>P=[3,2,1];Q=[1,4]; >>N=conv(P,Q) 3 14 9 4

Para evaluar un polinomio se emplea la función polyval, por ejemplo si evaluamos el polinomio

49143)( 23 ssssN para s=-5 se hace lo siguiente

>> valor=polyval(n,-5) valor =-66

Gráficas de polos y ceros Con la función pzmap podemos obtener una gráfica de la localización de los polos y ceros en el plano complejo. Su forma general es: [p,z]=pzmap(num,den) donde: p localización de polos ( vector columna) z localización de ceros ( vector columna ) num, den : numerador y denominador de la función de transferencia. Si la función pzmap se usa sin los argumentos del lado izquierdo, la gráfica se genera automáticamente. Considere las siguientes funciones de transferencia

133

16)(

23

2

sss

ssG

)3)(4(

)2)(1()(

2

ss

sssH

Calcular los polos y ceros de G(S) y de H(S). » numg=[6 0 1];deng=[1 3 3 1]; » zerosg =roots(numg) % Se obtienen los zeros de G(s) » polosg=roots(deng) % Se obtienen los polos de G(s) » n1=[1 1]; n2=[1 2]; d1=[1 0 4];d2=[1 3]; » numh=conv(n1,n2);denh=conv(d1,d2); » zerosh =roots(numh) % Se obtienen los zeros de H(s)

Page 19: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

19

19

» polosh =roots(denh) % Se obtienen los polos de H(s) » pzmap(numg,deng) » pzmap(numh,denh)

Figura 3.1 Mapa de polos y ceros para G(s) H(s).

Existen tres maneras básicas de representar la función de transferencia en Matlab: Usando el comando tf:

Para introducir una FdT del tipo)(

)()(

sD

sNsW , usando el comando tf, escribir

>>W=tf(num,den) donde num y den son vectores representando los coeficientes de los polinomios n(s) y d(s), respectivamente. El resultado de la variable W es un objeto del tipo TF, conteniendo el numerador y el denominador.

Ejemplo: Tenemos tres sistemas ( )(),(),( 321 sHsHsH ), vamos a introducirlas usando el comando

tf(num,den)

2

1)(1

s

ssH

654

32)(

23

2

2

sss

sssH

362

3)(

2

2

3

ss

ssH

% En este ejemplo introduciremos los sistemas )(),(),( 321 sHsHsH

% mediante el comando tf(num,den) %Definicion del sistema H1(s): n1=[1 1]; % Aqui se define la variable vector del numerador d1=[1 2]; % y del denominador. H1=tf(n1,d1); % Creacion del sistema H1(s) %Definicion del sistema H2(s),mediante una sola linea: H2=tf([1 2 3],[1 4 5 6]); %Definicion del sistema H3(s): n3=[3 0 0]; % Atencion con los ceros d3=[2 6 3]; H3=tf(n3,d3);

Page 20: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

20

20

% Visualizacion de las Funciones de transferencia H1(s), H2(s), H3(s) H1 H2 H3 Matlab mostrara despues de correr el programa: Transfer function: s + 1 ----- s + 2

Transfer function: s^2 + 2 s + 3 --------------------- s^3 + 4 s^2 + 5 s + 6

Transfer function: 3 s^2 --------------- 2 s^2 + 6 s + 3

Como expresión racional usando la variable s de Laplace Primero se define la variable s como un objeto TF: >> s=tf('s'); y luego introducimos la función de transferencia como una expresión racional con la variable s. Nota: Solo hay que definir la variable s como TF una sola vez. Todas las expresiones que vengan a continuación serán objetos TF Ejemplo :Introducir las Fdts H(s) y G(s) mediante la definición de s como objeto TF.

362

3)(

2

2

ss

ssH

2)2)(5(

1)(

sssG

% En este ejemplo introduciremos las FDTs H(s) y G(s) % Primero definimos la variable s como un objeto TF s=tf('s'); % Ahora podemos introducir las funciones directamente: h=(3*s^2)/(2*s^2+6*s+3); g=1/((s+5)*(s+2)^2); % Finalmente las visualizamos: disp('H(s)'); h disp('G(s)'); g Matlab responde:

H(s) Transfer function: 3 s^2 --------------- 2 s^2 + 6 s + 3

G(s) Transfer function: 1 ----------------------- s^3 + 9 s^2 + 24 s + 20

Mediante modelos ZPK (Zero-Pole-Gain) Una forma alternativa de representar la Fdt, es mediante la factorización del numerador y del denominador:

% En este ejemplo introduciremos G(s) y W(s) % como modelos zpk (zero-pole-gain) %--------------------------------------------------- % G(s) % Primero definimos los ceros: z=[0];

Page 21: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

21

21

))(())((

))(())(()(

121

121

nn

mm

pspspsps

zszszszssH

La ventaja de esta forma es que los ceros (z) y los polos (k) de la FdT son fáciles de visualizar. La sintaxis para especificar este tipo de modelos es: >>H=zpk(z,p,k) donde, z: Son los ceros de la FdT en forma de vector. p: Son los polos de la FdT en forma de vector. k: Es la ganancia del sistema. Ejemplo: Introduce la siguientes FdTs definidas como modelos ZPK

)22)(2(

2)(

2

sss

ssG

)4)(2(

)3)(1()(

sss

sssW

% Después los polos: p=[1-i 1+i 2]; % y la ganancia k=[-2] % Finalmente el comando G=zpk(z,p,k); % W(s) % Aqui lo haremos mediante la definición de s %como objeto ZPK s=zpk('s'); W=((s+1)*(s+3))/(s*(s+2)*(s+4)); % Visualizacion disp('G(s)=') G disp('W(s)=') W

Matlab responde: G(s)= Zero/pole/gain: -2 s -------------------- (s-2) (s^2 - 2s + 2)

W(s)= Zero/pole/gain: (s+1) (s+3) ------------- s (s+2) (s+4)

Sistemas realimentados en MATLAB:

Matlab dispone de un comando para crear sistemas realimentados a partir de dos sistemas LTI (sys1 y sys2), la sintaxis básica es la siguiente: >>w=feedback(sys1,sys2)

El sistema resultante w tiene como entrada u y como salida y. Los sistemas sys1 y sys2 pueden ser de diferente tipo(por ejemplo sys1 TF y sys 2 ZPK), pero ambos han de ser continuos o discretos. El tipo de sistema resultante LTI dependerá de las reglas de prioridad de sistemas. Por defecto Matlab asume una realimentación negativa, para aplicar una realimentación positiva la sintaxis es: >>w=feedback(sys1,sys2,+1) Ejemplo: Sistemas Realimentados en Matlab con feedback

Page 22: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

22

22

Calculé la Función Transferencia del sistema realimentado para los siguientes casos

a).- 35

10)(

2

sssG

)2)(1(

)4(5)(

ss

ssH

b).- )5)(2(

1)(

sssG 1)( sH

% En este ejemplo veremos el uso del comando feedback % sistemas realimentados. % Para el inciso a) % Primero definimos G y H G=tf([10],[1 5 3]); H=zpk(-4,[-1 -2],5); % Y luego aplicamos el comando A=feedback(G,H); % Para el inciso b) % Definimos G: G=zpk([],[-2 -5],1); % Al no tener cero indicamos [ ] y ganancia 1 % Al ser realimentación unitaria hacemos: B=feedback(G,1); % Visualizacion A B Matlab responde: Zero/pole/gain: 10 (s+2) (s+1) ----------------------------------------- (s+3.849) (s+5.298) (s^2 - 1.147s + 10.1) Zero/pole/gain: 1 ------------------- (s+2.382) (s+4.618) El resultado es un objeto ZPK, esto es debido a las reglas de prioridad de sistemas en Matlab Un sistema de control puede tener varios componentes. Para mostrar las funciones que lleva a cabo cada componente en la ingeniería de control por lo general se usa la representación denominada diagrama de bloques. Definir las propiedades de un sistema, SET Y GET También existe la posibilidad de completar la información de un sistema LTI (nombre de la entrada y la salida, retardos, información adicional...), mediante las propiedades de este. Básicamente, distinguiremos dos tipos de propiedades, las comunes a todos los sistemas y las especificas de cada modelo, tal como vemos en las siguientes tablas.

Page 23: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

23

23

PROPIEDADES COMUNES A TODOS LOS SISTEMAS LTI

Nombre de la propiedad Descripción Valor

ioDelay Retraso Entrada-Salida Matriz

InputDelay Retraso en la Entrada Vector

InputGroup Nombre grupo entrada(MIMO) Cell array

InputName Nombre de la entrada Vector-String

Notes Notas sobre el modelo Texto

OutputDelay Retraso en la salida Vector

OutputGroup Nombre grupo salida(MIMO) Cell array

OutputName Nombre de la salida Vector-String

Ts Tiempo de muestreo Escalar

Userdata Datos adicionales Arbitrario

Introducir/Modificar Propiedades: Sintaxis básica Introducir propiedades: >>Set(modelo,'nombrePropiedad','valorPropiedad'...) >>Modelo=tf(num,den,'NombrePropiedad','ValorPropiedad' ...) Acceder a propiedades: >>Get(modelo,'propiedad') Para mas información teclear en matlab: -para las propiedades genericas: >>ltiprops -para las propiedades especificas: >>ltiprops tf , zpk, ss, o frd Ejemplo: Introduce en Matlab el sistema con las características siguientes:

%En este ejemplo veremos el uso de las propiedades de un sistema %------------------------------------------------------ %Primeramente definimos el modelo y su retraso: G=zpk([-1 -3],[0 -2 -4],[1],'Inputdelay',0.3); %Seguidamente introducimos las propiedades set(G,'inputname','Voltaje',... 'outputname','Posicion angular ',... 'notes','Control de la posicion de un motor DC'); % Una vez el modelo ha sido creado podemos % extraer informacion con el comando get get(G,'notes')

Page 24: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

24

24

get(G,'outputname') %Modificacion de un propiedad: set(G,'outputname','Posicion angular (Rad)'); % Ver el sistema y sus propiedades: G get(G)%Con este comando vemos todas las propiedades Cuando se corre se muestra lo siguiente en pantalla: >> ans = 'Control de la posicion de un motor DC' ans = 'Posicion angular' Zero/pole/gain from input "Voltaje" to output "Posicion angular (Rad)": (s+1) (s+3) exp(-0.3*s) * ------------- s (s+2) (s+4) z: {1x1 cell} p: {1x1 cell} k: 1 Variable: 's' Ts: 0 ioDelay: 0 InputDelay: 0.3 OutputDelay: 0 InputName: {'Voltaje'} OutputName: {'Posicion angular (Rad)'} InputGroup: {0x2 cell} OutputGroup: {0x2 cell} Notes: {'Control de la posicion de un motor DC'} UserData: [] Funciones feedback y cloop Existen dos funciones que se pueden utilizar para simplificar un diagrama a bloques y calcular la función de transferencia en lazo cerrado de sistemas sencillos ó de múltiples lazos. Estas funciones son feedback y cloop .

Figura 3.5 Función feedback.

[num,den]=feedback(num1,den1,num2,den2,signo); o sys=feedback(sys1,sys2,signo);

Figura 3.6 Función cloop.

[num,den]=cloop(num1,den1,signo); o sys=cloop(sys1,signo);

Page 25: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

25

25

Ejemplo de la función feedback La función feedback calcula la función de transferencia en lazo cerrado con retroalimentación H(s) , si se omite el signo se considera por defecto negativo. Calcular la función de transferencia del siguiente sistema de control utilizando la función feedback.

La secuencia de instrucciones en MATLAB para resolver este problema es » numg=[1];deng=[500 0 0];G=tf(numg,deng); » numh=[1 1];denh=[1 2];H=tf(numh,denh); »YR=feedback(G,H,-1); » YR num/den = s + 2 ---------------------------------------- 500 s^3 + 1000 s^2 + s + 1 Ejemplo de la función cloop La función cloop calcula la función de transferencia en lazo cerrado con retroalimentación unitaria, si se omite el signo se considera por default negativo. Calcular la función de transferencia del siguiente sistema de control utilizando la función cloop

La secuencia de instrucciones en MATLAB para resolver este problema es » numg=[1];deng=[500 0 0]; G=tf(numg,deng); » numc=[1 1];denc=[1 2]; GC=tf(numc,denc); »GS=G*GC; »YR=cloop(GS,-1); » YR num/den = s + 1 --------------------------- 500 s^3 + 1000 s^2 + s + 1 Simplificación de diagramas a bloques: Un diagrama de bloques complicado que contenga muchos lazos de realimentación lo podemos simplificar mediante un reordenamiento paso a paso mediante las reglas del álgebra de los diagramas de bloques. La simplificación de los diagramas de bloques reduce de manera considerable la labor necesaria para el análisis posterior. Simplificación de bloques con MATLAB El Control System Toolbox dispone de varias herramientas para la interconexión de sistemas. Básicamente podemos distinguir: A. Mediante operaciones aritméticas

Page 26: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

26

26

Matlab permite realizar la mayoría de operaciones aritméticas con los sistemas LTI. Con la ayuda de estas operaciones podemos llegar a simplificar sistemas, como por ejemplo: Conexión serie Un proceso a controlar se muestra en la figura 3.2 . Un sistema de control simple en lazo abierto se puede obtener conectando en serie el controlador con la planta como se muestra en la figura 3.3, o fig.3.4 emplearemos MATLAB para calcular la función de transferencia Y(s) / R(s).

Figura 3.1 Sistema de control en lazo abierto >>[num,den]=series(num1,den1,num2,den2); o también >>sys3=series(sys1,sys2); o >>sys=sys1*sys2 Conexión en paralelo: En algunos casos se requiere conectar en paralelo funciones de transferencias para esto se utiliza la función parallel. Su forma general es

>>[num,den]=parallel(num1,den1,num2,den2); o >>sys=parallel(sys1,sys2); o >>sys=sys1+sys2 B. Mediante funciones propias Aparte de las operaciones aritméticas el Control System ToolBox tiene una serie de funciones para la interconexión de sistemas.: Ejemplo: Consideramos el siguiente diagrama de bloques:

)(

)()(

1

11

sb

sasG

)(

)()(

2

22

sb

sasG

)(

)()(

3

3

3sb

sasG

)(

)()(

4

44

sb

sasG

Page 27: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

27

27

Escribiremos un archivo con extensión m, el cual tendrá los vectores a1, b1, a2, b2, a3, b3, a4, b4 correspondientes a las funciones de transferencia y calcularemos la Función de Transferencia del sistema. % Ejemplo de simplificación usando funciones propias % Creación de los bloques G1=tf(a1,b1); G2=tf(a2,b2); G3=tf(a3,b3); G4=tf(a4,b4); % Simplificacion: G34=feedback(G3,G4); G12=feedback(G1,G2); G=series(G12,G34); Si tenemos una planta o un controlador modelados matemáticamente en forma de función de transferencia G(s) y Gc(s) respectivamente. Nuestro objetivo ahora es interconectar y simplificar esos componentes para obtener el esquema de control..

La función de transferencia del proceso G(s) es 2500

1)(

ssG

y el controlador representado es: 2

1)(

s

ssGc

Introducimos a MATLAB los denominadores y numeradores de las funciones de transferencia Gc(s), G(s) y utilizamos la función series. >>numg=[1];deng=[500 0 0]; g=tf(numg,deng); >numc=[1 1];denc=[1 2];gc=tf(numc,denc); >>gs=series(gc,g); >>gs Matlab muestra: num /den = S + 1 500S^3+1000S^2 Calcular la función de transferencia en lazo cerrado Y(s) / R(s) del siguiente sistema de control donde las funciones de transferencia son:

10

1)(1

ssG

1

1)(2

ssG

44

1)(

2

2

3

ss

ssG

6

1)(4

s

ssG

2

1)(1

s

ssH 2)(2 sH 1)(3 sH

Este ejemplo se puede resolver en 5 pasos 1 . Introducir a MATLAB las funciones de transferencia G1(s),G2(S), G3(S),G4(s),H1(s),H2(s),H3(s). 2. Mover el lazo de H2(s) adelante de G4(S)

Page 28: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

28

28

3. Eliminar el lazo G3 (s) G4(s) H, (s). 4. Eliminar el lazo que contiene H2(S) 5. Eliminar el lazo restante y calcular C(s) / R (s). La secuencia de instrucciones en MATLAB de acuerdo a los cinco pasos para obtener la función de transferencia de lazo cerrado Y(s)/R(s) es n1=[1];d1=[1 10];G1=tf(n1,d1); %G1(s)=1/(s+10) n2=[1];d2=[1 1];G2=tf(n2,d2); %G2(s)=1/(s+1) n3=[1 0 1];d3=[1 4 4];G3=tf(n3,d3); %G3(s)=s^2+1/(s^2+4s+4) n4=[1 1];d4=[1 6];G4=tf(n4,d4); %G4(s)=s+1/(s+6) nh1=[1 1];dh1=[1 2];H1=tf(nh1,dh1); %H1(s)=s+1/(s+2) nh2=[2];dh2=[1];H2=tf(nh2,dh2); %H2(s)=2 nh3=[1];dh3=[1];H3=tf(nh3,dh3); %H3(s)=1 % Ahora se mueve el lazo de H2(s) adelante de G4(S) G34=G3*G4; H24=H2/G4; % Se simplifica el lazo4 de realimentacion; F1=feedback(G34,H1); GF21=G2*F1; F2=feedback(GF21,H24); GF12=G1*F2; F3=feedback(GF12,H3) Matlab responde: Transfer function: s^5 + 4 s^4 + 6 s^3 + 6 s^2 + 5 s + 2 ------------------------------------------------------------------------ 2 s^7 + 40 s^6 + 299 s^5 + 1222 s^4 + 2691 s^3 + 3276 s^2 + 2278 s + 732 CAPITULO 4 RESPUESTA EN EL TIEMPO 4.1 Características de los Sistemas de Control A menudo se necesita introducir la retroalimentación con el objeto de mejorar los sistemas de control. Es interesante el hecho de que esto también suceda en los sistemas de la naturaleza como los biológicos y fisiológicos, en los cuales la retroalimentación es inherente. Por ejemplo, el sistema de control humano para el ritmo cardiaco es un sistema de control con retroalimentación. La retroalimentación se introduce en los sistemas de control para 1. Disminuir la sensibilidad del sistema frente a variaciones en los parámetros del proceso. 2. Facilitar el control y ajuste de la respuesta transitoria del sistema. 3. Mejorar el rechazo de las señales perturbadoras y de ruido dentro del sistema.. 4. Reducir el error en estado estable del sistema. Agregar retroalimentación a un sistema de control produce las ventajas mencionadas arriba. Sin embargo, es natural que estas ventajas impliquen un costo de aplicación. El costo de la retroalimentación se manifiesta primero en el aumento de los componentes y la complejidad del sistema. Con el objeto de agregar la retroalimentación, es necesario considerar varios componentes de la retroalimentación, de los cuales el de medición (sensor) es el componente clave. El sensor es frecuentemente el componente mas caro en un sistema de control. Además, el sensor introduce ruido e imprecisiones en el sistema.

Page 29: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

29

29

El segundo costo de la retroalimentación es la perdida de ganancia. por ejemplo , en un sistema de un solo circuito , la ganancia del circuito abierto es G ( s ) y se reduce a G ( s ) / ( 1 + G ( s ) ) en un sistema de retroalimentación negativa unitaria. La reducción de la ganancia del circuito es 1/(1+G(s ) ) , que es exactamente el factor que reduce la sensibilidad del sistema frente a variaciones y perturbaciones de los parámetros. Generalmente, se tiene ganancia del circuito abierto de reserva y estamos más que dispuestos a invertirla para incrementar el control de la respuesta del sistema. Por último , un costo de retroalimentación es la inclusión de la posibilidad de inestabilidad. Mientras que el circuito abierto es estable, el de circuito cerrado puede no serlo siempre. Agregar retroalimentación a sistemas dinámicos produce varios problemas adicionales para el diseñador. Sin embargo, en la mayoría de los casos, las ventajas superan a las desventajas. Por lo tanto es necesario considerar la complejidad adicional y el problema de estabilidad cuando se diseña un sistema de control. En esta sección se ilustran las ventajas de la retroalimentación por medio de dos ejemplos. El objetivo es mostrar el uso del MATLAB para el análisis de los sistemas de control. Una vez ya se conoce el modelo Matemático del sistema, ya estamos en disposición de analizar el comportamiento dinámico del sistema. Para ello se utilizan señales de entrada o excitación sencillas. El análisis se puede realizar en el dominio del tiempo o de la frecuencia. Primero veremos una clasificación del análisis temporal según la señal de excitación, aquí daremos a conocer las principales funciones para analizar el comportamiento de un sistema. Las señales de prueba que se usan regularmente para realizar el análisis temporal de sistemas. Con estas señales de prueba es posible realizar con facilidad análisis matemáticos y experimentales, dado que las señales son funciones del tiempo muy simples. Análisis al impulso: Señal de excitación: Impulso de dirac

1)( sX

El análisis al impulso es una herramienta usada habitualmente, ya que gracias a ella es posible comprobar la estabilidad y la velocidad de un sistema. Para ver la respuesta de un sistema ante una entrada al impulso, en MATLAB usamos el comando impulse: >>Impulse(sys) Esta función dibujara la respuesta al impulso para un sistema LTI. El modelo puede ser continuo o discreto, SISO o MIMO. La duración de la simulación será determinada automáticamente para mostrar correctamente la respuesta transitoria del sistema.

Page 30: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

30

30

>>Impulse(sys,t) De esta forma determinamos el tiempo de simulación explícitamente. a=1; a=2; a=zpk(‘s’); g=1/((s+a)*(s+b)); Podemos especificar t como el tiempo final o también mediante un vector del tipo: t = 0:dt:Tf donde dt es el tiempo de muestreo. >>impulse(sys1,sys2,...,sysN) >>impulse(sys1,sys2,...,sysN,t) Esta es la sintaxis para dibujar la respuesta al impulso de varios sistemas LTI en una misma figura. >>impulse(sys1,'y:',sys2,'g--') Como cualquier gráfico en MATLAB, podemos especificar colores y estilos de línea, como por ejemplo: >>[y,t] = impulse(sys) De esta forma obtenemos la respuesta al impulso y, y el vector de tiempo t, utilizado en la simulación. No se dibuja ninguna gráfica. Ejemplo:Dado el siguiente sistema crea un archivo m que realice:

a) Represente la respuesta al impulso del sistema. b) El Gráfico representa respuesta al impulso hasta t=12s. c) Realice una comparación entre la respuesta encontrada con el comando impulse, y la respuesta antitransformando Y(s).

Primero introducimos en un fichero m, la función de transferencia del sistema. Ya que con MATLAB no podemos trabajar simbólicamente, daremos valores a las constantes a y b. Luego crearemos un modelo ZPK ya que es el que mejor define la función de transferencia de nuestro sistema. y=impulse(g,t); plot(t,y,’g´)

Page 31: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

31

31

Una vez ya hemos definido el sistema podemos realizar un análisis al impulso mediante el comando impulse. impulse(sys) Si ejecutamos el código hasta ahora obtendremos la siguiente gráfica:

Esta gráfica muestra la respuesta al impulso del sistema hasta los primeros 6 segundos. Supongamos que nosotros queremos ver la respuesta hasta los 12 segundos. (b) Para ello crearemos un vector t donde el primer elemento es 0, el último 12 y los elementos entre ellos estarán a intervalos de 0.1 t=0:0.1:12; Creamos otro gráfico con figure y aplicamos el vector t para obtener la respuesta hasta t=12 s. figure impulse(sys,t) (c) Ahora vamos a grabar la salida en un vector, el cual representaremos más tarde. Para hacer esto asignamos el valor de la respuesta al impulso a la variable y, y representamos la respuesta en otro gráfico con el comando plot. Pondremos la gráfica en verde y puntos para poder comparar.

Ahora sabiendo que: representaremos y(t) en la misma gráfica obteniendo: f=(exp(-a*t) – exp(-b*t) / (b – a); hold on plot(t,f,’r-.’) xlabel(‘Tiempo en segundos’); ylabel(‘Respuesta al Impulso’); title(‘Respuesta transitoria al impulso’);

Page 32: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

32

32

Señal de excitación: Escalón unitario

Respuesta del sistema

Page 33: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

33

33

Escalón retardado

Respuesta escalón unitario con MATLAB: El análisis de un sistema frente a un escalón unitario es el más usado en la ingeniería de control. El comando utilizado para realizar este análisis con MATLAB es step. La sintaxis del comando es prácticamente igual que la del comando impulse: >> step(sys) Esta función dibujara la respuesta de un sistema LTI, ante una entrada escalón unitario. El modelo puede ser continuo o discreto, SISO o MIMO. La respuesta para un sistema con múltiples entradas será una colección de respuestas escalón por cada entrada. En este caso la duración de la simulación es determinada automáticamente por MATLAB. >>step(sys,t) De esta forma determinamos el tiempo de simulación explícitamente. Podemos especificar t como el tiempo final o también mediante un vector del tipo: t = 0:dt:Tf donde dt es el tiempo de muestreo. >>step(sys1,sys2,...,sysN) >>step(sys1,sys2,...,sysN,t) Esta es la sintaxis para dibujar la respuesta escalón de varios sistemas LTI en una misma figura. >>step(sys1,'y:',sys2,'g--') Podemos especificar colores y estilos de línea. >>[y,t] = step(sys) De esta forma obtenemos la respuesta escalón y, y el vector de tiempo t, utilizado en la simulación. No se dibuja Ejemplo:Graficar la respuesta al escalón unitario de la siguiente función de transferencia:

10012

100

)(

)(2

sssC

sR

num=[0 0 100];den=[1 12 100]; t=[0:0.1:2]; [y,x,t]=step(num,den,t); plot(t,y),grid xlabel('tiempo') ylabel('y(t)')

Page 34: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

34

34

Figura 3.9 Gráfica de respuesta a un escalón Ejemplo:Tenemos dos sistemas:

15.0

121

sssys y

45.0

132

sssys

Realizar con MATLAB una gráfica donde veamos la respuesta de los dos sistemas ante un escalón unitario con un tiempo de simulación de 30s. También representar en la misma gráfica, la función escalón unitario %En este ejemplo veremos el uso del comando step %---------------------------------------------------------- %Definicion de los sistemas: sys1=tf([1],[1 0.5 1]); sys2=tf([1],[1 0.5 4]); %Representacion de la respuesta: t=0:0.01:30; %Respuesta hasta los 30 s. step(sys1,'r', sys2,'g',t); %Representacion en la misma grafica %Aplicaremos rejilla y pondremos un titulo con text: grid text(5, 1.4,'Respuesta de dos sistemas','FontSize',13); %Representacion de la entrada t0 = -2.0:0.01:-0.01; % definicion u(t)=0, -2<=t<=-.01 u0 = zeros(size(t0)); t1 = 0:0.01:30; % definicion u(t)=1, 0<=t<=25 u1 = ones(size(t1)); t = [t0 t1]; % creamos t and u(t) u = [u0 u1]; hold on plot(t,u); legend('Sistema 1','Sistema 2','Escalon unitario');

Page 35: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

35

35

Análisis mediante rampa unitaria Señal de excitación: Rampa

Respuesta del sistema

Respuesta ante una rampa con MATLAB: En la Control System Toolbox no existe ningún comando que determine la respuesta de un sistema ante una rampa unitaria. A pesar de este inconveniente, podemos encontrar la respuesta mediante el comando step.: Para obtener la respuesta a una entrada en rampa de la función de transferencia del sistema G(s), hay que dividir G(s) por s y utilizar la orden de respuesta a un salto.

Por ejemplo sea el sistema: 1

1

)(

)(2

sssR

sC

Para una entrada en rampa unitaria se tiene que 2

1)(

ssR . Por tanto:

Page 36: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

36

36

sssssssss

ssC1

)1(

11

1

1

1

1

)(2222

2

Entonces aplicamos el comando step a G(s)/s Ejemplo: Respuesta ante una Rampa

Dado el siguiente sistema con una Función Transferencia1

1

)(

)(2

sssR

sC, obtener la respuesta ante una

rampa unitaria para un tiempo de respuesta de 7s. Incluir también en la misma gráfica la función rampa aplicada en la entrada, para así poder ver el error del sistema. %Respuesta ante una entrada unitaria rampa %La respuesta a una entrada unitaria rampa se obtiene como la % respuesta a un salto unitario de G(s)/s *** %Primero introducimos el numerador y denominador de G(s)/s num=[1]; den=[1 1 1 0]; %Creamos el sistema sys=tf(num,den); %Especificamos el tiempo de calculo en 7 s. t=0:0.1:7; %Guardamos la respuesta en un vector c c=step(sys,t) %Al representar la respuesta a una rampa, añadimos la entrada %de referencia %La entrada de referencia es t.El comando plot es: plot(t,c,'ro',t,t,'g-'); %Introducimos la rejilla y las etiquetas: grid title('Respuesta ante una rampa unitaria del sistema G(s)=1/(s^2+s+1)'); xlabel('t seg');ylabel('Amplitud');

Page 37: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

37

37

En la práctica, la señal de entrada para un sistema de control no se conoce con anticipación, es por esto que se suelen utilizar las señales de prueba vistas en la sección anterior. Sin embargo hay casos donde la señal de entrada se conoce con anticipación y se puede expresar de forma analítica. Respuesta ante una señal cualquiera con MATLAB Existen casos en los que las funciones como este, impulse no son suficientes para estudiar un sistema. En los casos que necesitemos la respuesta temporal ante otras entradas podemos utilizar el comando lsim. La sintaxis para el comando lsim es la siguiente: >>lsim(sys,u,t) Este comando nos da la gráfica de la respuesta de un sistema sys ante una entrada definida por dos vectores u y t, u será el vector de entrada y t el vector de tiempo. El vector u debe tener tantas filas como elementos tiene t y tantas columnas como entradas tenga el sistema. >>lsim(sys,u,t,x0) Con x0 indicamos las condiciones iniciales del sistema. x0 debe ser un vector columna con tantas filas como estados tenga el sistema. Esta función solo es valida para los sistemas descritos en variables de estado. >>lsim(sys1,sys2,...,sysN,u,t) >>[y,t]=lsim(sys,u,t) Al igual que con impulse y step es posible dibujar varias respuestas en una misma gráfica y también tenemos la posibilidad de guardar la respuesta en un vector. Para ayudarnos a generar el vector de entradas u, disponemos de el comando gensig. La sintaxis es la siguiente: >>[u,t]=gensig(tipo,tau,Tf,Ts) El tipo de función puede ser 'sin', para onda senoidal, 'square' para onda cuadrada, y 'pulse' para onda de pulsos. El argumento tau indica el periodo, Tf el tiempo final, y Ts el tiempo de muestreo. Ejemplo: Respuesta ante una señal cualquiera con MATLAB

Sea un sistema con la siguiente función de transferencia:254

4)(

2

ss

ssW realizar:

a) Representar la respuesta del sistema ante la entrada )3(5)3( ttu

b) Representar la respuesta del sistema para una señal cuadrada con un periodo de 5s., durante 30s. c) Representar la respuesta del sistema ante una entrada rampa unitaria. Representar también la entrada rampa unitaria clear all %En este ejemplo veremos el uso de los comandos % lsim y gensig %Primero definimos el sistema num=[1 4]; den=[1 4 25]; sys=tf(num,den); % A) t=-5:0.01:30;% Establecemos el tiempo de simulacion en 30 s u1=50*exp(-3*t);% Introducimos la primera funcion de entrada

Page 38: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

38

38

subplot(2,2,1),lsim(sys,u1,t);%Aplicamos lsim con la funcion legend('respuesta ante u(t)'); % B) [u,t]=gensig('square',5,30,0.1);%generamos la onda cuadrada subplot(2,2,2),lsim(sys,u,t);%y dibujamos la respuesta legend('respuesta ante onda cuadrada'); % C) %Esta es otra manera de conseguir la respuesta ante una rampa u=t; subplot(2,2,3),lsim(sys,u,t)%Dibujamos la respuesta hold plot(t,t,'g');%Esta es la rampa unitaria, en verde legend('respuesta del sistema','entrada rampa unitaria') hold off FUNCION step: Se utiliza para obtener la respuesta de un sistema representado en función de transferencia o en variables de estado, puede dar información numérica o gráfica de la salida o de los estados. Si la función step se utiliza sin los argumentos del lado derecho se obtiene una gráfica automáticamente: 4.1.1 Rechazo de señales perturbadoras Un efecto importante de la retroalimentación de un sistema de control es la eliminación parcial de las señales perturbadoras. Como ejemplo especifico de un sistema con una perturbación no deseada , consideraremos primero un sistema de control de velocidad en lazo abierto de un motor de C . D. controlado por armadura con una perturbación en la carga, Td(s) como se muestra en la fig. 4.1 , y después el caso en lazo cerrado.

Figura 4.1 Control de velocidad de un motor de c.d. en lazo abierto

Como puede observarse se desprecia la inductancia. Para investigar los efectos de la perturbación en el sistema, hacemos Va(s)=0 y consideramos solamente la perturbación Td(s).

Con estas consideraciones se redibuja el diagrama a bloques

La funcion de transferencia nos queda o sea el cambio de velocidad debido a la perturbación en la carga

es: mbaa

a

d KKFRJsR

R

sT

s

)(

)(

Page 39: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

39

39

Los valores de los parámetros para el caso en lazo abierto y cerrado se muestran en la tabla 4.1

Ra Km J F Kb Ka Kt

1 10 2 0.5 0.1 54 1

Tabla 4.1 Parámetros del sistema de control de velocidad

. Sustituyendo estos valores en la ecuación anterior se tiene: 5.12

1

)(

)(

ssT

s

d

Si el sistema tiene un buen rechazo a las perturbaciones , entonces esperamos que la perturbación Td(s)

tenga un efecto pequeño en la salida (s). error = lo que deseo – lo que obtengo = valor ideal – valor real

para este caso: lo que deseo es Va(s) mientras que lo que obtengo es (s) la ecuacion del error es:

E(s)=Va(s)- (s) . Relacionando el error con respecto a la perturbación:

)(

)(

)(

)(

)(

)(

sT

s

sT

sV

sT

sE

dd

a

d

como 0)( sVa

)(

)(

)(

)(

sT

s

sT

sE

dd

El error en estado estacionario de la velocidad debido al momento de torsión de la carga Td(s)=1 / s (escalón unitario) se puede encontrar utilizando el teorema del valor final. Por tanto para el sistema en lazo abierto se tiene:

6666667.01

5.12

1)(

)(

)()(

000

sssLimsT

sT

ssLimssELime

sd

dss

ss

MATLAB calcula la respuesta de velocidad (s) para la perturbación Td (s) 1/ s y el error en estado estacionario. El programa script se muestra en seguida : %Control de velocidad de un Motor de cd en lazo abierto %Para analizar el rechazo de perturbaciones % Ra=1;Km=10;J=2;F=0.5;Kb=0.1; num1=[1];den1=[J F];num2=[Km*Kb/Ra];den2=[1]; [num,den]=feedback(num1,den1,num2,den2); %Como el error da un valor negativo se le cambio de signo al numerador Num=-num; printsys(Num,den) t=[0:1:10]; [yo,x,t]=step(Num,den); plot(t,yo) title('Respuesta a una perturbacion escalon en lazo abierto') xlabel('tiempo[s]'),ylabel('velocidad'),grid yo(length(t))

El valor deseado de (t) es cero (recordar que Va (s) = 0) el error en estado estable es el valor final de

(t) o sea E(s)=Va(s) - (s) = - (s) , en la figura 4.3 podemos ver que el error en estado estable es el

Page 40: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

40

40

valor de la velocidad cuando el tiempo es de 7 segundos . Podemos obtener una aproximación del valor del error en estado estable buscando el ultimo valor del vector de salida ' yo ' del programa de la

figura 4.2. ()= 0(7)= -0.663 rad/s

Figura 4.3 Respuesta de velocidad a una perturbación en lazo abierto

En la figura 4.4 se muestra el diagrama a bloques de un sistema de control de velocidad de un motor de C. D. en lazo cerrado.

Figura 4.4 Control de velocidad de un motor de c.d en lazo cerrado Considerando Va(s)=0 y redibujando el diagrama anterior

La función de transferencia para una entrada V(s) = 0 es:

bat

a

md KKKR

KFJs

sT

s

1

)(

)( Sustituyendo

los valores 5.5412

1

)(

)(

ssT

s

d

Utilizamos MATLAB para obtener la respuesta en el tiempo (t) para una perturbación Td(s)=1 / s . El

Page 41: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

41

41

programa script de la Figura 4.5 muestra el procedimiento %Control de velocidad de un motor de c.d. en lazo cerrado %Para analizar el rechazo de perturbaciones Ra=1;Km=10;J=2;F=0.5;Kb=0.1;Ka=54;Kt=1; num1=[1];den1=[J F];num2=[Ka*Kt];den2=[1]; num3=[Kb];den3=[1];num4=[Km/Ra];den4=[1]; [numa,dena]=parallel(num2,den2,num3,den3); [numb,denb]=series(numa,dena,num4,den4); [num,den]=feedback(num1,den1,numb,denb,-1); %Al igual que en el caso anterior se le cambia de signo porque el error es negativo Num=-num; Printsys(Num,den); t=[0:0.005:0.002]; [yc,x,t]=step(Num,den); plot(t,yc),grid title('Respuesta a una perturbacion en lazo cerrado') xlabel('tiempo[S]'),ylabel('velocidad'),grid yc(length(t)) El error en estado estable se muestra en la gráfica de la figura 4.6 el cual se puede obtener del vector de

salida yc que se genera en el programa. La aproximación del valor de en estado estable es: ()=

c(0.02)= -0.0018 rad/s puede observarse que con la retroalimentación se mejoro el rechazo de perturbaciones , con esto se demuestra la importancia de la retroalimentación para reducir el efecto de las perturbaciones.

Figura No. 4.6 Respuesta a una perturbación en lazo cerrado 4.1.2 Control y ajuste de la respuesta transitoria de un sistema utilizando la retroalimentación En la figura 5.7 se muestra el diagrama a bloques de un sistema de control retroalimentado la función de

transferencia del sistema es: )(12

1)(

12)(

22sD

ksssR

Kss

KsC

En este ejemplo se analizaran los

efectos de la ganancia K sobre la respuesta transitoria del sistema

Page 42: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

42

42

. Figura 4.7 Sistema de control de un sistema de 20 orden A continuación se muestra el programa script que genera las respuestas del sistema para diferentes valores de K. %Respuesta a una entrada escalon unitario R(s)1/s %para K=50 y 100 numg=[1];deng=[1 12 0];k1=100;k2=50; num1=k1*numg;num2=k2*numg % [numa,dena]=cloop(num1,deng); [numb,denb]=cloop(num2,deng); % t=[0:0.05:2]; [y1,x,t]=step(numa,dena,t); [y2,x,t]=step(numb,denb,t); subplot(211),plot(t,y1),title('Respuesta al escalon para k=100') xlabel('tiempo[s]'),ylabel('c(t)'),grid subplot(212),plot(t,y2),title('Respuesta al escalon para k=50') xlabel('tiempo[s]'),ylabel('c(t)'),grid

Figura 4. 9 Respuesta a una entrada escalón para K = 50 y 100 En las respuestas obtenida podemos observar que cuando se decrementa K se reduce el sobreimpulso y el tiempo de establecimiento. En base a este análisis podríamos preferir el valor de K = 50. Sin embargo existen otras consideraciones que deben ser tomadas en cuenta.

Page 43: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

43

43

Antes de hacer la selección de la ganancia K , es importante considerar la respuesta del sistema a perturbaciones. %Respuesta a una Perturbacion Td(s)=1/s %para K=100 y 50 numg=[1];deng=[1 12 0];k1=100;k2=50; % [numa,dena]=feedback(numg,deng,k1,1,-1); [numb,denb]=feedback(numg,deng,k2,1,-1); % t=[0:0.05:2]; [y1,x,t]=step(numa,dena,t); [y2,x,t]=step(numb,denb,t); subplot(211),plot(t,y1),title('Respuesta a una perturbacion k=100') xlabel('tiempo[s]'),ylabel('c(t)'),grid subplot(212),plot(t,y2),title('Respuesta a una perturbacion k=50') xlabel('tiempo[s]'),ylabel('c(t)'),grid

Figura 4.11 Respuesta a una perturbación para K = 50 y 1 00 En la tabla 5.2 se muestran el máximo sobreimpulso porcentual (MP%) , Tiempo de establecimiento (Ts) y el Error en estado estacionario (ess) del sistema de control analizado para K = 50 y K = 1 00 . La decisión para escoger K depende de las necesidades del diseñador.

K=50 K=100

MP% 0 10

Ts 1.1 1.3

ess 2% 1%

Tabla 4.2 Máximo Sobreimpulso Porcentual,Tiempo de establecimiento y error en estado estable 4.2.- FUNCIONAMIENTO DE LOS SISTEMAS DE CONTROL Para analizar y diseñar un sistema de control se debe primero establecer adecuadamente las especificaciones de funcionamiento. Estas pueden presentarse en el dominio del tiempo o en el dominio de la frecuencia. En el dominio del tiempo generalmente son: El tiempo de establecimiento, porcentaje de sobreimpulso, tiempo de pico y especificaciones del error en

Page 44: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

44

44

estado estable. En esta sección se analizan las especificaciones de funcionamiento en el dominio de tiempo dadas en términos de respuesta transitoria. Se introducen las funciones de Matlab, impulse y Isim , las cuales se utilizan para simular sistemas lineales. 4.2.1 Simulación de un sistema de segundo orden para una entrada escalón En el siguiente ejemplo se obtiene la respuesta de un sistema de segundo orden a una entrada escalón, variando el coeficiente de amortiguamiento Se utiliza la función step de MATLAB.

Figura 4.12 Sistema de segundo orden

La salida del sistema es : 22

2

2)(

nn

n

sssC

En la figura 5.13 se muestra el programa script para obtener la respuesta a un escalón del sistema de segundo orden variando el coeficiente de amortiguamiento %Respuesta a un escalon de un sistema de segundo orden t=[0:0.1:12];num=[1]; z1=0.1;den1=[1 2*z1 1]; z2=0.2;den2=[1 2*z2 1]; z3=0.4;den3=[1 2*z3 1]; z4=0.7;den4=[1 2*z4 1]; z5=1.0;den5=[1 2*z5 1]; z6=2.0;den6=[1 2*z6 1]; [y1,x,t]=step(num,den1,t);[y2,x,t]=step(num,den2,t); [y3,x,t]=step(num,den3,t);[y4,x,t]=step(num,den4,t); [y5,x,t]=step(num,den5,t);[y6,x,t]=step(num,den6,t); plot(t,y1,t,y2,t,y3,t,y4,t,y5,t,y6),grid xlabel('tiempo'),ylabel('C(t)') title('z=0.1,0.2,0.4,0.7,1.0,2.0’) En la figura 4.14 se muestran las gráficas de respuesta de sistema de segundo orden para una entrada escalón y zeta de 0. 1 , 0.2 , 0.4, 0.7 , 1.0, 2.0.

Page 45: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

45

45

Figura 4.14 Respuesta de un sistema de segundo orden a una entrada escalón

Esto mismo también lo puede hacer de la manera siguiente: %RESPUESTA AL ESCALON UNITARIO %DE UN SISTEMA DE SEGUNDO ORDEN t=[0:0.1:12];wn=1;nu=[wn^2]; z(1)=0.1;z(2)=0.2;z(3)=0.4; z(4)=0.7;z(5)=1.0;z(6)=2.0; hold on for k=1:6 de=[1 2*z(k)wn 0]; [num,den]=cloop(nu,de); [y,x,t]=step(num,den,t); plot(t,y,’k-‘) end title(‘Z=0.1,0.2,0.4,0.7,1.0,2.0’),grid xlabel('tiempo'),ylabel('C(t)') Al correrlo en MATLAB obtendrá:

Page 46: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

46

46

Como se observa es la misma grafica anterior. Es obvio que cada quien puede programar de acuerdo con sus gustos y habilidades, lo anterior es un ejemplo. En seguida se analiza la respuesta de un sistema de segundo orden para una entrada impulso, se utiliza la función impulse de MATLAB. 4.2.2.- Simulación de un Sistema de Segundo Orden para una entrada Impulso La respuesta al impulso es la derivada de la respuesta a un escalón. Para obtener la respuesta a un impulso se utiliza la función impulse como se muestra a continuación: [Y,X,T] = IMPULSE(NUM,DEN,.,.) Para el ejemplo anterior considerando que la señal de prueba es la función impulso, simplemente modificamos la línea 10 donde tenemos [y,x,tl=step(num,den,t); en lugar de step escribimos impulse y al correr matlab tenemos:

Page 47: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

47

47

Figura 4.17 Respuesta del mismo sistema de segundo orden a una entrada impulso. 4.2.3 .- Respuesta de un Sistema de Control para una entrada Arbitraria Si se requiere simular un sistema de control para entradas arbitrarias , se puede utilizar la función Isim de MATLAB : En el siguiente ejemplo se utiliza la función Isim para simular un sistema de control para una entrada arbitraria ( señal triangular ). En la figura 4.19 se muestra el diagrama a bloques de un sistema de control.

Figura 4.18 Diagrama a bloques de un sistema de control. Suponiendo que el controlador G1(s) , es del tipo proporcional + integral se tiene

s

KKsG 2

11 )(

Y si la entrada es una rampa se tiene que el error en estado estacionario es:

KK

ess

2

1

El efecto de la ganancia K2 del controlador sobre el error en estado estacionario es evidente cuando K2 es grande el error en estado estable es pequeño y viceversa. En la figura 4.20 se muestra el programa script y la respuesta a una señal de entrada triangular. %Programa script para obtener la respuesta de un %sistema de control para obtener una senal triangular numg=[10 20];deng=[1 10 0]; [num,den]=cloop(numg,deng); t=[0:0.1:8.2]'; v1=[0:0.1:2]';v2=[2:-0.1:-2]';v3=[-2:0.1:0]'; u=[v1;v2;v3]; [y,x]=lsim(num,den,u,t); whitebg('w') plot(t,y,'b-',t,u,'r-'); xlabel('Tiempo en segundos'),ylabel('C(t)'),grid title(‘señal triengular’)

Page 48: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

48

48

Figura 4.19 Programa script y respuesta a una señal triangular CAPITULO 5 ESTABILIDAD DE LOS SISTEMAS DE CONTROL EN EL DOMINIO DEL TIEMPO 5.1 INTRODUCCIÓN Una característica muy importante del funcionamiento transitorio de un sistema es su estabilidad. Un sistema estable se define como aquel que tiene una respuesta limitada. Esto es, se dice que el sistema es estable si estando sujeto a una entrada o perturbación limitada, su respuesta es de magnitud limitada. La localización de los polos de un sistema en el plano s indica la respuesta transitoria resultante. Los polos en la parte izquierda del plano s dan como resultado una repuesta decreciente para entradas de perturbación, por lo tanto un sistema estable. El método de Routh-Hurwitz determina el numero de polos inestables de un sistema en lazo cerrado. La estabilidad relativa y el funcionamiento transitorio de un sistema de control de lazo cerrado, están directamente relacionados con la localización en el plano s de las raíces de lazo cerrado de la ecuación característica. Así mismo, con frecuencia , es necesario ajustar uno o mas parámetros del sistema para obtener las localizaciones adecuadas de las raíces. Por tanto, vale la pena determinar como se desplazan en el plano s las raíces de la ecuación característica de un sistema dado, a medida que varían los parámetros; es decir, es útil determinar el lugar geométrico de las raíces en el plano s a medida que se varia un parámetro. El método del lugar geométrico de las raíces fue planteado por Evans en 1948 y se ha desarrollado y utilizado mucho en el análisis y diseño de los sistemas de control. En este capitulo se utiliza MATLAB para verificar el criterio de Routh-Hurwitz y para obtener gráficas del lugar de las raíces. Las funciones de MATLAB que se usaran son rlocus , rlocfind. 5.2.- Criterio de estabilidad de routh -hurwitz Dada una ecuación característica con coeficientes constantes, podemos utilizar el criterio de Routh para determinar el numero de raíces en el semiplano derecho. Por ejemplo:

Page 49: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

49

49

Consideremos la ecuación característica: 0242)( 23 ssssG

Asociada con el sistema de control de lazo cerrado mostrado en la figura 5. 1. El arreglo de Routh correspondiente se muestra en la figura 6.2.

figura 5.1 Sistema de control de lazo cerrado Los dos cambios de signo en la primera columna, indica que hay 2 raíces de la ecuación característica en el semiplano derecho, por lo tanto el sistema es inestable. El arreglo de Routh se muestra en seguida:

24

022

241

021

0

2

3

s

s

s

s

Figura 5.2 Arreglo de Routh - Hurwitz Utilizando MATLAB podemos verificar el resultado del criterio de Routh-Hurwitz, esto es calculando directamente las raíces de la ecuación característica empleando la función roots,, como se muestra en la figura 5.3. numg=[1];deng=[1 1 2 23]; [num,den]=cloop(numg,deng); roots(den) ans = -3.0000 1.0000 + 2.6458i 1.0000 - 2.6458i Cuando la ecuación característica esta en función de un parámetro K, el método de RouthHurwitz puede utilizase para determinar el rango de valores que el parámetro puede tener para que el sistema sea estable. Consideremos el sistema de control de la figura 5.4. La ecuación característica es:

04)( 23 KssssF

Utilizando el método de Routh-Hurwitz encontramos que el rango de K para que el sistema sea estable es 0 < K < 8

Figura 5.4 Sistema de Control en lazo Cerrado MATLAB puede ser usado para verificar gráficamente este resultado. En la figura 5.5 se muestra el programa script en el cual primero se determina un vector con los valores de K para los cuales queremos calcular las raíces de la ecuación característica, después usamos la función roots para calcular las raíces y plot para graficarlo.

Page 50: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

50

50

clear all %Programa script para calcular las raices de la ecuacion %caracteristica q(s)=s^3+2s^2+4s+k %para 0<k<20 k=[0:0.5:20]; for j=1:length(k) q=[1 2 4 k(j)]; p(:,j)=roots(q); end plot(real(p),imag(p),'x'),grid xlabel('eje real'),ylabel('eje imaginario’) En la figura 5.6 se muestran los resultados gráficos del rango de valores del parámetro K para los cuales el sistema es estable. Estos resultados gráficos verifican los resultados obtenidos por el método de Routh-Hurwitz.

Figura 5.6 Localización de las raíces para 0 < K < 20 El programa script de la figura 5.5 utiliza la función for para ejecutar repetidamente una serie de instrucciones en cierto numero de veces, su forma general es: for variable = expresión relación .............. ............. relación end Figura 5.7 La Función For 5.3.- Lugar geométrico de las raíces Para obtener el lugar de las raíces de un sistema. Se debe determinar su ecuación característica, la cual

es de la forma: )(1)( sKGsD

Para obtener el lugar de las raíces, Matlab dispone del comando rlocus. Las diferentes sintaxis para utilizar este comando son:

Page 51: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

51

51

rlocus(NUM,DEN) Calcula y dibuja el lugar de las raíces. MatLab generará automáticamente un conjunto de valores de la ganancia K. rlocus(NUM,DEN,K) calcula y dibuja el lugar de las raíces cuando se trabaja con la función de transferencia y ha sido previamente definido el rango de valores de K. Por ejemplo de 0 a 100 con incrementos de 10: k=0:10:100 R = rlocus(NUM,DEN,K) o [R,K] = rlocus(NUM,DEN) no dibuja el lugar de las raíces pero almacena en la matriz R, de longitud igual al número de elementos de K, la localización de las raíces. R tendrá tantas columnas como raíces existan, estas pueden además ser complejas. Para la siguiente forma modificada de la ecuación característica de un sistema se desea hallar el lugar de las raíces mediante MatLab:

sssksD

23

11)(

23

>>num=[0,0,0,1]; >>den=[1,3,2,0]; >>rlocus(num,den)

Ejemplo:Consideremos el sistema siguiente.

Page 52: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

52

52

La función de transferencia en lazo cerrado es: )1()3)(2(

)3)(1(

)(

)(

sksss

ssK

sR

sC

la ecuación característica puede escribirse como: 0)3)(2(

)1(1

sss

sK

la forma general de la ecuación característica para poder aplicar la función rlocus es: 0)(

)(1

sQ

sPK

donde K es el parámetro que se varía de cero a infinito. r=raices K=ganancia [r , k] = rlocus ( p , q) Cuando se utiliza la función rlocus sin los argumentos [r,k] se genera la gráfica del lugar de las raíces. Cuando se utiliza con los argumentos [r,k] como se muestra en la figura 5.9 la función rlocus retorna las raíces y las ganancias asociadas. » p=[1 1];q=[1 5 6 0]; » rlocus(p,g) Figura 5. 1 0 Lugar de las Raíces.

Función rlocfind MatLab dispone del comando rlocfind que permite determinar los polos del sistema para una valor determinado de k. Su sintaxis es: [K,POLES] = rlocfind(num,den) permite determinar los polos para un valor determinado de k. Por medio del cursor en el lugar de las raíces se selecciona una localización, MatLab retorna el valor de k para esta localización y los polos asociados a esta ganancia. Al ejecutar el comando rlocfind con la función de transferencia anterior, MatLab activa la ventana de figuras en espera de que el usuario seleccione un punto del lugar de las raíces mediante el cursor. En este caso el punto seleccionado fue -2.4623 en la parte real y - 0.0132 en la parte imaginaria. » [k,poles]=rlocfind(num,den) Select a point in the graphics window selected_point =

Page 53: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

53

53

-2.4623 - 0.0132i k = 1.6655 poles = -2.4625 -0.2688 + 0.7773i -0.2688 - 0.7773i Para seleccionar el punto en el cual calcular los polos del lugar de las raíces sin usar el cursor se agrega un parámetro al comando rlocfind. Este debe ser el punto o los puntos en donde se desea tomar el valor de k. La nueva sintaxis es: [K,POLES] = rlocfind(num,den,P) P debe definirse previamente indicando la parte real e imaginaria del mismo. Por ejemplo: P=3+0i o P=1-0.555i. La función rlocfind se utiliza para determinar el valor del parámetro K en un punto seleccionado de la gráfica del lugar de las raíces. Considerando el ejemplo anterior se desea encontrar el valor de la ganancia K en un punto deseado.El programa responde pidiendo seleccionar un punto en la gráfica del lugar de raíces para poder detenninar ía ganancia en ese punto. » p=[1 1];q=[1 5 6 0]; » rlocfind(p,q) Select a point in the graphics window selected_point = -2.4560 + 0.3553i ans = 0.6219 CAPITULO 6.- RESPUESTA EN LA FRECUENCIA Para el estudio de un sistema en el dominio de la frecuencia existen tres herramientas disponibles en MatLab como son: los diagramas de Bode, de Nyquist y de Nichols. 6.1.- Diagramas de Bode El comando bode calcula la magnitud y la fase de la respuesta en frecuencia de sistemas continuos, lineales e invariantes en el tiempo. Para obtener el diagrama de Bode de una función de transferencia, se definen dos vectores cuyos elementos son los coeficientes de los polinomios del numerador y del denominador en potencias decrecientes de S. Estos vectores son usados en el comando bode con la siguiente sintaxis:

bode(num,den). Se define la función de transferencia:125.0

1

)(

)()(

2

sssU

sYsH

>>y=[1]; >>u=[1 0.25 1]; >>bode(y,u) MatLab despliega la grafica de Bode:

Page 54: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

54

54

Ejemplo Obtenga el diagrama de bode de la siguiente funcion de transferencia:

254

25)(

2

sssG

» num=[25];den=[1 4 25]; » bode(num,den)

Figura 6.1.- Diagrama de bode Practiquemos lo mismo pero con los argumentos

num=[25];den=[1 4 25]; w=logspace(0,2,100); [mag,phase,w]=bode(num,den,w);grid magdb=20*log10(mag); fase=180*phase/pi; subplot(211),semilogx(w,magdb),grid xlabel('frecuencia[rad/s]') ylabel('magnitud en decibeles') subplot(212),semilogx(w,fase),grid xlabel('frecuencia[rad/s]') ylabel('angulo en grados')

logspace(d1, d2, n) Genera n puntos igualmente espaciados en forma logaritmica entre las decadas 10^d1 a la decada 10^d2 Para especificar un rango deseado de frecuencias en las cuales se desea obtener el diagrama de Bode, se emplea un vector de frecuencias en el que se especifica la frecuencia inicial, el incremento y la frecuencia final. Por ejemplo:

>>w=0:0.1:100; >>bode(y,u,w)

Page 55: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

55

55

Este comando muestra el diagrama de Bode entre 0 y 100 rad/s. Para obtener el margen de ganancia, el margen de fase, la frecuencia de cruce de ganancia y la frecuencia de cruce de fase MatLab dispone del comando margin. Las diferentes formas de utilizar este comando son: [Gm,Pm,Wcg,Wcp] = MARGIN(NUM,DEN) [Gm,Pm,Wcg,Wcp] = MARGIN(MAG,PHASE,W) toma los vectores de magnitud, fase y frecuencia del diagrama de Bode. >>num=10; >>den=[1 0.25 1]; >>[Gm,Pm,Wcg,Wcp] =margin(num,den)

Matlab responde Gm = Inf Pm =4.7487 Wcg = NaN Wcp =3.3114 >>margin(num,den)

6.2.- Graficas de Nyquist Otra herramienta de análisis en el dominio en la frecuencia que ofrece MatLab es el diagrama de Nichols. Para obtener el diagrama de Nichols se utiliza el comando nichols, cuya sintaxis es idéntica a la del comando bode: nichols(num,den,W) si se emplea la función de transferencia.

sssssH

204.0

100

)104.0(

100)(

>>y=[0 0 100]; >>u=[0.04 1 0]; >>nichols(y,u) MatLab despliega el diagrama de Nichols:

Otra herramienta de análisis en el dominio en la frecuencia que ofrece MatLab es el diagrama de Nyquist. Para obtenerlo se utiliza el comando nyquist, cuya sintaxis es idéntica a la del comando bode y nichols: nyquist(num,den,W) si se emplea la función de transferencia.

56

1)(

2

sssH

>>y=[1]; >>u=[1 6 5]; >>nyquist(y,u)

MatLab despliega en la ventana de figuras el diagrama de Nyquist:

Hagamos un ejemplo:18.0

1)(

2

sssG 1

num=[1];den=[1 0.8 1]; nyquist(num,den)

Page 56: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

56

56

Figura 6.2.- Grafica de nyquist sin argumentos Ahora con argumentos num=[1];den=[1 0.8 1]; w=[0.1:0.01:100]; [re,im,w]=nyquist(num,den,w); plot(re,im,re,-im),grid

Figura 6.3.- Grafica de nyquist utilizando argumentos

Controladores PID Para implementar los diferentes tipos de controladores (P, PD, PI, PID) en MatLab se hace uso de la función de transferencia propia del sistema a objeto de estudio. Si dicho sistema es de la forma:

donde G(s) es la función de transferencia de la planta o proceso; mientras que GC(s) es la función de transferencia del controlador.

Page 57: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

57

57

Para el caso del controlador proporcional, GC(s)=Kp, que es una constante o valor escalar. El controlador PI es GC(s)=Kp + Ki/S que puede representarse como una relación ente dos polinomios. El controlador PID es GC(s)=Kp + Ki/S + Kd S que se representa como:

s

KsKsKsG

ipd

C

2

)(

que es de nuevo una relación entre dos polinomios. Si se multiplica el controlador GC(s) por la función de transferencia del proceso o planta G(s) se formará la función de transferencia de lazo abierto. Por ejemplo

un G(S) puede ser:sss

sG2010

1)(

23

Para obtener la respuesta en lazo abierto ante una entrada escalón unitario tenemos:

234

2

23

2

2010)2010()(*)(

sss

KsKsK

ssss

KsKsKsGsG

ipdipd

C

>>Kp=50; >>Ki=1; >>Kd=10; >>num=[Kd Kp Ki]; >>den=[1 10 20 0 0]; >>step(num,den) >>Kp=500; >>Ki=1; >>Kd=100; >>num1=[Kd Kp Ki]; >>den1=[1 0]; >>num2=1; >>den2=[1 10 20 0]; >>[numc,numd]=cloop(conv(num1,num2), conv(den1,den2),-1); >>step(numc,denc)

Capitulo 7.-Características básicas de SIMULINK Funcionalidad básica: simulación de sistemas dinámicos. Características principales: Se trata de un entorno gráfico dentro de MATLAB (GUI) El sistema se representa como una interconexión de bloques elementales. Cada bloque lleva asociado un modelo matemático que representa su relación entrada-salida. Los bloques de obtienen de tres posibles fuentes - Biblioteca estándar de SIMULINK - Bibliotecas comérciales (llamadas <<Blocksets>>) - Bibliotecas creadas por los usuarios. ¿Qué puede ser modelado con SIMULINK? Cualquier cosa que pueda ser modelada matemáticamente. Por ejemplo:

Page 58: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

58

58

Un ejemplo de representación mediante SIMULINK sería el siguiente:

El esquema representa un sistema de calefacción para una vivienda. Se supone conocida la variación de la temperatura en el exterior de la casa y en función de ello se puede observar en qué instantes se conecta y se desconecta la calefacción, cuáles son las variaciones de la temperatura en el interior de la casa y cuál es el coste de la calefacción. Este ejemplo proviene de una demo de SIMULINK. (Teclear thermo en la ventana de comandos)

Tipos de bloques en SIMULINK Los bloques de SIMULINK los podemos estructurar en las siguiente categorías: Sources: Entradas o fuentes de señales. Constantes Senoidales Cuadradas

Todas estas categorías de bloques se muestran en la ventana inicial de SIMULINK. El procedimiento de trabajo para la creación de un modelo será seleccionar los elementos adecuados de entre los presentes en estas categorías, colocarlos sobre la ventana de diseño y establecer las conexiones entre ellos. La figura siguiente muestra la ventana inicial de SIMULINK

Page 59: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

59

59

Escalón Aleatorias etc. Sinks: Salidas o dispositivos de visualización/almacenamiento de variables del sistema. Osciloscopio Fichero Gráfico etc. Discrete/Linear/Continuos: Representan sistemas sencillos mediante su relación entrada/salida. Discrete: sistemas discretos (muestreados). Dominio z. Linear: Sistemas continuos lineales. Dominio s. Continuos: Sistemas continuos no lineales. Dominio t. Signals & Systems: Se utilizan para conectar elementos o estructurar modelos. Subsistema: permite jerarquizar diseños Multiplexadores/demultiplexadores: agrupan o desagrupan señales. Memorias: permiten almacenar valores. Functions & Tables/Math: Funciones y elementos matemáticos Polinomios Ganancias etc. Blocksets/toolboxes: Elementos especificos para diferentes aplicaciones. comunicaciones redes neuronales control etc.

Creación de un modelo sencillo: Como ejemplo, crearemos un modelo que nos permita observar las variaciones en el comportamiento de un sistema de segundo orden. Utilizaremos un sistema definido por la siguiente función de transferencia:

Y comprobaremos cuál es su respuesta ante una señal de tipo escalón. La creación de este modelo seguirá los siguientes pasos: Primer paso: creación del modelo. Segundo paso: introducción de bloques en el modelo. Tercer paso: modificación de parámetros en los bloques introducidos.

Page 60: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

60

60

Cuarto paso: interconexión de elementos. Quinto paso: lanzamiento de la simulación y comprobación de resultados. En el siguiente Viewlet podemos ver la creación de este modelo Ejemplo: Compensador de atraso de fase mediante Simulink Dado el siguiente sistema:

Considerando que los valores de los parámetros del motor son: J=0.01, b=0.1, K=0.01, R=1, L=0.5. a) Modelar el sistema mediante simulink y estudiar la señal de salida

b) Modelar el sistema mediante Simulink al incorporar un compensador de atraso de fase y estudiar la señal de salida Primero modelamos el sistema: El sistema se modela sumando las fuerzas que actúan en el motor de inercia e integrando la aceleración para obtener la velocidad. También se utilizan las Leyes de Kirchoff para resolver el circuito. Primero se implementa en Simulink estas ecuaciones:

Insertamos un bloque integrador y dibujamos lineas en sus terminales de entrada y salida. La entrada la llamaremos "d2/dt2(theta)" y la linea de salida "d/dt(theta)". Insertamos otro bloque integrador y nombramos su entrada como "d/dt(i)" y la salida "i". Después implementamos las ecuaciones obtenidas con las leyes de Kirchoff.

Se van introduciendo las ecuaciones mediante bloques de ganancia y sumadores. También introducimos el bloque Step en la entrada del sistema y el bloque Scope en la salida del mismo. En los parametros del bloque Step introducimos"Step Time" 0.

Page 61: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

61

61

Una vez introducimos compilamos el programa y obtenemos la señal de salida del sistema modelado.

Segundo implementamos el sistema con un compensador de atraso de fase (lag compensator)

En este ejemplo el compensador tiene la siguiente función de transferencia: Creamos un nuevo modelo de Simulink, introduciendo un bloque de subsistema que se refiere al sistema modelado anteriormente. Introducimos un bloque sumador, un bloque de función de transferencia introduciendo los datos del numerador "[50 50]" y del denominador "[1 0.01]". También introducimos un bloque Step definiendo "Step Time" 0 y un bloque Scope en la salida del sistema.

Page 62: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

62

62

Una vez definido el sistema compilamos el programa y obtenemos la señal de salida en lazo cerrado con el compensador de atraso de fase

Ejemplo: Modelos en espacio de estado Ejemplo: Modelos en espacio de estado. Dada la ecuación de estado de un sistema y la ecuación de salida.

a) Pasar el sistema a ecuaciones de estado mediante MATLAB utilizando el comando ss. b) Pasar el sistema discreto a ecuaciones de estado considerando el tiempo de muestreo 0.01s. c) Calcular la ganancia de la matriz estática d. %ejemplo: Modelo de estado % primero introducimos la matrices de estado, de entrada de salida y de transmision directa. a=[0 1 0; 0 0 1; -18 -27 -10] b=[0;0;1] c=[1 0 0] d=0 sys=ss(a,b,c,d) % creamos el modelo en espacio de estado sys=ss(a,b,c,d,0.01) % si fuera un sistema discreto de añade el tiempo de muestreo. sys=ss(d) % ganancia de la matriz d Introducidos los valores de las matrices a,b,c, y d utilizando el comando ss, creamos un modelo de estado.

Si el sistema es discreto se introduce el tiempo de muestreo y se crea el modelo de estado

Page 63: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

63

63

.Mediante el comando introducido en el código fuente podemos obtener la matriz estática d.

Ejemplo: Ecuaciones diferenciales con derivadas de la función excitación Ejemplo: Ecuaciones diferenciales con derivadas de la función excitación. Dadas la ecuación de estado y de salida de un sistema.

Considerando la matriz de transmisión directa de valor 1. Calcular a) obtener el modelo b) utilizar un comando para obtener las matrices del sistema c) Llevar el modelo a la forma canónica diagonal %ejemplo:Funciones diferenciales con derivadas de la funcion excitacion % primero introducimos las matrices del sistema A=[1 2 3; 4 5 6; 7 8 9]; B=[1;0;1]; C=[1 0 0]; D=1; sys=ss(A,B,C,D) % con esta funcion obtenemos las matrices [A,B,C,D,]=ssdata(sys) % llevar el modelo a la forma canonica diagonal csys=canon(sys) con la función ss creamos un objeto que contiene toda la información del sistema.

A través de comando ssdata obtenemos las matrices del sistema.

con la función canon llevamos el modelo a la forma canónica diagonal

Page 64: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

64

64

. Ejemplo: De modelo de estado a función de transferencia Ejemplo: De modelo de estado a función de transferencia. Dadas las ecuaciones de estado del sistema:

Pasar de ecuación de estado a función de transferencia utilizando MATLAB Primero introducimos en MATLAB las matrices de salida entrada, de estado, etc. del sistema estudiado. %ejemplo: De modelo de estado a funcion de transferencia % Introducimos las matrices de la ecuacion de estado A=[0 1 0; 0 0 1; -18 -27 -10]; B=[0;0;1]; C=[1 0 0]; D=0; % convertimos el modelo a funcion de transferencia [NUM,DEN]=ss2tf(A,B,C,D) sys=tf(NUM,DEN) Formulado el código obtenemos el modelo transformado en función de transferencia

Ejemplo: De función de transferencia a modelo de estado Ejemplo: De función de transferencia a modelo de estado.Dada la función de transferencia del sistema:

Transformar esta función de transferencia a modelo de estado. Introduciendo estos comandos en MATLAB, podemos pasar de un modelo a otro. %ejemplo: De funcion de transferencia a modelo de estado %----------------------------------------------------------------------------- % itroducimos la funcion de transferencia NUM = [1 1] DEN = [1 3 3 2] sys=tf(NUM,DEN)

Page 65: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

65

65

% convertimos el modelo a espacio de estado [A,B,C,D]=tf2ss(NUM,DEN)

Se obtiene la transformación de función de transferencia a modelo de estado.

Ejemplo: Condiciones iniciales Ejemplo: Condiciones iniciales Dado el siguiente sistema representado mediante ecuaciones de estado

2

1

2

1

07814.0

7814.05572.0

x

x

x

x

2

14493.69691.1

x

xy

Estudiar la salida del sistema, con condiciones iniciales x0=1 %----------------------------------------------------------------------------- %REG.AUTOMATICA Y MATLAB %ejemplo:Condiciones iniciales %----------------------------------------------------------------------------- % primero introducimos las matrices del sistema A=[-0.5572 -0.7814; 0.7814 0] C=[1.9691 6.4493] x0=[1;0] sys=ss(A,[],C,[]) % introducimos la condicion inicial del sistema initial(sys,x0) % Realizamos la accion inversa [y,t,x]=initial(sys,x0)

Page 66: Matlab Tutor

MATLAB M. C. BENITO BAEZ SANCHEZ

M. C. BENITO BAEZ SANCHEZ

66

66

BIBLIOGRAFIA Nahomi Ehrich Leonard and Williams S. Levine;”Using MATLAB to Analyze and Design Control System”; The Benjamin/Cummings Publishing Company,Inc. Katsuhiko Ogata;”Solving Control Engineering problems whit MATLAB”;Prentice Hall 1994. Duane Hanselman y Bruce Littlefield;”MATLABedicion de estudiante”,Prentice Hall 1996