Simulink Tutorial Completo

510
10. SIMULINK 10.1 INTRODUCCION Simulink es un software que funciona bajo la plataforma de Matlab y es una herramienta muy útil para modelar, simular y analizar sistemas, tanto lineales como no lineales. Permite al usuario realizar sus estudios tanto en el dominio del tiempo como el de Laplace, expresar las funciones de transferencia en las diferentes formas incluyendo la del espacio de los estados y otras opciones. En una interfaz gráfica (GUI) como la que se observa en la Figura 10.1, el usuario construye un diagrama de bloques que desarrollan procedimientos que realizan las operaciones matemáticas requeridas para la solución de un modelo. Figura 10.1. Librerias (Izquierda) y Espacio de trabajo de Simulink (Derecha) 10.2 ACCESO A SIMULINK Para acceder a Simulink se requiere abrir el espacio de trabajo de Matlab y presionar el icono “Simulink” o también mediante la digitación de dicha palabra clave con letras minúsculas en el editor de comandos. Con lo anterior se despliega, solamente, la ventana de título “Simulink Library Browser” que se observa a la izquierda de la Figura 10.1. El espacio de trabajo de Simulink es la ventana que se observa a la derecha y se despliega presionando el icono “Create a new model” que se encuentra

Transcript of Simulink Tutorial Completo

Page 1: Simulink Tutorial Completo

10. SIMULINK

10.1 INTRODUCCION Simulink es un software que funciona bajo la plataforma de Matlab y es una herramienta muy útil para modelar, simular y analizar sistemas, tanto lineales como no lineales. Permite al usuario realizar sus estudios tanto en el dominio del tiempo como el de Laplace, expresar las funciones de transferencia en las diferentes formas incluyendo la del espacio de los estados y otras opciones. En una interfaz gráfica (GUI) como la que se observa en la Figura 10.1, el usuario construye un diagrama de bloques que desarrollan procedimientos que realizan las operaciones matemáticas requeridas para la solución de un modelo.

Figura 10.1. Librerias (Izquierda) y Espacio de trabajo de Simulink (Derecha) 10.2 ACCESO A SIMULINK Para acceder a Simulink se requiere abrir el espacio de trabajo de Matlab y presionar el icono “Simulink” o también mediante la digitación de dicha palabra clave con letras minúsculas en el editor de comandos. Con lo anterior se despliega, solamente, la ventana de título “Simulink Library Browser” que se observa a la izquierda de la Figura 10.1. El espacio de trabajo de Simulink es la ventana que se observa a la derecha y se despliega presionando el icono “Create a new model” que se encuentra

Page 2: Simulink Tutorial Completo

Mach

178

en la barra estándar o desplegando el menú “File” y seleccionando sucesivamente “New” y “Model” (Ctrl + N) 10.3 LIBRERIAS DE SIMULINK Al desplegar el árbol de Simulink y haciendo clic izquierdo sobre su nombre se despliegan las librerías que contienen los bloques operacionales agrupados de acuerdo a diferentes propósitos comunes. Los nombres de las librerías son: Continuous, Discontinuities, Discrete, Look-Up Tables, Math Operations, Model Verification, Model-Wide Utilities, Ports & Subsystems, Signal Attributes, Signal Routing, Sinks, Sources y User-Defined Functions. Instalación y Conexión de un bloque operacional Para la instalación de un bloque en el espacio de trabajo de Simulink se selecciona de la librería con un clic izquierdo del mouse y en forma sostenida se arrastra hasta el espacio de trabajo de Simulink. Las conexiones entre dos bloques se realizan acercando el puntero del mouse a uno de los topes (entrada o salida) hasta que este cambie en forma de cruz, se presiona el botón izquierdo del mouse y en forma sostenida se arrastra hasta el otro tope. La conexión es correcta cuando el puntero del mouse tome la forma de una cruz de doble trazo. Se debe observar una línea con una saeta en el tope del bloque de entrada. Especificación de un bloque operacional Las especificaciones mínimas requeridas en un bloque se relacionan con la operación que realizan dentro del diagrama que representa el proceso de solución del modelo matemático del sistema. 10.4 LIBRERÍA “CONTINUOUS” (CONTINUO) La Figura 10.2a muestra la ventana que se despliega al hacer doble clic sobre la librería “Continuous” y la Figura 10.2b muestra los íconos que simbolizan a cada uno de los bloques que incluye esta librería. Los nombres de los bloques son: Derivative (Derivada), Integrator (Integrador), State-Space (Espacio de los Estados), Transfer Fcn (Función de Transferencia como numerador/denominador), Transport Delay (Tiempo Muerto), Variable Transport Delay (Tiempo Muerto Variable), Zero-Pole (Transferencia Muerto en la forma de zeros y polos)

Page 3: Simulink Tutorial Completo

Mach

179

(a) (b)

Figura 10.2. Librería (a) Continuous y (b) Bloques operacionales

Los bloques de la librería “Continuous” representan unidades que se alimentan de una información de entrada y que al desarrollar sobre esta un proceso matemático transmite el resultado como una información de salida. En la librería “Continuous” se incluyen los bloques para realizar operaciones matemáticas continuas en el tiempo. Bloque Derivada (“Derivative”) El bloque “Derivative” desarrolla la derivada con respecto al tiempo de la variable de entrada para lo cual no se necesita especificación. La Figura 10.3 muestra la ventana que se despliega al hacer doble clic sobre el icono Derivative

Figura 10.3 Especificaciones del bloque Derivative

Page 4: Simulink Tutorial Completo

Mach

180

Bloque Integrador (“Integrator”)

El bloque “Integrator” desarrolla la operación de integrar la información de entrada desde un tiempo inicial hasta un tiempo final que se especifica como uno de los parámetros de la simulación. Se observa en la ventana de especificaciones del bloque integrador mostrada en la Figura 10.4a que se requiere la especificación de la condición inicial de la variable que se suma (integra)

(a) (b)

Figura 10.4 Especificaciones del bloque (a) Integrator (b) State-Space Bloque Espacio de los Estados (“State-Space”) La Figura 10.4b muestra la ventana de especificaciones para el bloque que desarrolla un modelo lineal en la forma del Espacio de los Estados. Se observan los cuadros para especificar las matrices A, B, C y D y las condiciones iniciales.

Bloques Funciones de Transferencia (“Transfer Fcn” y “Zero-Pole”)

La Figura 10.5 muestra las ventanas de especificaciones para las funciones de transferencia en la forma de numerador/denominador y en la de zeros y polos.

Page 5: Simulink Tutorial Completo

Mach

181

(a) (b)

Figura 10.5 Especificaciones de bloques (a) Transfer Fcn y (b) Zero-Pole En la Figura 10.5a, se observan los cuadros donde se especifican en forma matricial el numerador y el denominador de la función de transferencia mientras que en la Figura 10.5b los cuadros donde se incluyen en forma matricial los zeros, los polos y las ganancias de la función de transferencia Es común a todas las ventanas de especificaciones de bloques operacionales, la inclusión de la barra de título seguido de un pequeño cuadro con el nombre del bloque y una breve descripción de la función de éste. De igual manera, en la parte inferior se incluyen los botones “OK”, “Cancel”, “Help” y “Apply” Bloque Tiempo Muerto (“Transport Delay”) La Figura 10.6 muestra las ventanas de especificaciones para los bloques que incluyen un atraso por tiempo muerto dentro de la dinámica de un sistema. Simulink incluye un bloque “Transport Delay” y otro titulado “Variable Transport Delay” El bloque “Transport Delay” aplica el tiempo muerto a la señal de entrada que se especifica en el cuadro de nombre “Time Delay”, mientras que el bloque “Variable Transport Delay” aplica el tiempo muerto a la primera señal de entrada y en la segunda entrada se especifica el tiempo muerto. Las otras especificaciones, usualmente, se dejan como aparecen por defecto

Page 6: Simulink Tutorial Completo

Mach

182

(a) (b)

Figura 10.6 Especificaciones de los bloques Transport Delay 10.5 LIBRERÍA “MATH OPERATIONS” (OPERADORES) La Figura 10.7 muestra la ventana que se despliega al hacer doble clic sobre la librería “Math Operations” y la Figura 10.8 los botones incluidos en dicha librería.

Figura 10.7 Librería Math Operations

Page 7: Simulink Tutorial Completo

Mach

183

Figura 10.8 Bloques de la librería Math Operations

Los bloques de la librería “Math Operations” se utilizan en la simulación de la dinámica de un sistema para aplicar operadores matemáticos sobre su información de entrada. A continuación se describe la especificación de algunos de ellos Bloque Suma (“Sum”) El bloque “Sum” realiza la suma algebraica de las informaciones de entradas alimentadas al bloque. La Figura 10.9 muestra la ventana de especificaciones de este bloque y se observa el cuadro desplegable donde se selecciona la forma del icono

Figura 10.9 Especificaciones del bloque Sum

Page 8: Simulink Tutorial Completo

Mach

184

El bloque “Sum” se especifica introduciendo en el cuadro “List of signs” los signos de cada uno de las informaciones de entrada o el número de ellas. En el primer caso los signos de suma o resta se despliegan a un lado de los topes de entrada del icono que representa al bloque Bloques Ganancia (“Gain” y “Slider Gain”) El bloque “Gain” aplica un factor multiplicador constante a la información de entrada y el producto lo transmite como la información de salida. El factor multiplicador es la ganancia. La Figura 10.10a muestra la ventana de especificaciones del bloque Gain. En el cuadro Gain se introduce la ganancia como un valor constante El bloque “Slider Gain” realiza la misma operación del bloque “Gain” permitiendo la variación del valor de la ganancia asignada, mediante el botón deslizable, desde un valor mínimo hasta un máximo. La Figura 10.10b muestra la ventana de especificaciones del bloque “Slider Gain”

(a) (b)

Figura 10.10 Especificaciones de los bloques (a) Gain y (b) Slider Gain

Bloque Producto (“Product”) El bloque “Product” realiza el producto o la división entre las informaciones de entrada. Esto se especifica introduciendo, ya sea, el número de corrientes a multiplicar o los signos producto o división para cada una de las informaciones de entrada en el cuadro “Number of inputs” de la ventana de especificaciones que se muestra en la Figura 10.11

Page 9: Simulink Tutorial Completo

Mach

185

Figura 10.11 Especificaciones del bloque Product Al especificar los signos, estos se despliegan con los símbolos de producto o división a un lado de los topes de entrada del icono que representa al bloque Bloque Funcion (“Math Function” y “Trigonometric Function”) El bloque “Math Function” aplica a la información de entrada una función matemática que se selecciona en el cuadro desplegable “Function”, mientras que el bloque “Trigonometric Function” solo aplica funciones trigonométricas como se observa en la Figura 10.12

(a) (b)

Figura 10.12 Especificaciones del bloque (a) Math Function, (b) Trigonometric Function

Page 10: Simulink Tutorial Completo

Mach

186

Bloque Minimo y Maximo (“MinMax”) El bloque “MinMax” selecciona el valor mínimo o el máximo entre los correspondientes a las informaciones de entrada. En su ventana de especificaciones se encuentra el cuadro donde se elige la función del bloque, es decir, “min” o “max” y un cuadro adicional donde se especifica el número de entradas al bloque. Después de introducir lo anterior, se observa en el icono del bloque un número de topes de entrada igual al especificado 10.6 LIBRERÍA “SOURCES” (ENTRADAS) La Figura 10.13 muestra la ventana que se despliega al hacer doble clic sobre la librería “Sources” y la Figura 10.14 los íconos de los bloques incluidos en dicha librería

Figura 10.13. Librería Sources

Page 11: Simulink Tutorial Completo

Mach

187

Figura 10.14 Bloques de la librería Sources

La librería “Sources” contiene un conjunto de bloques de donde emergen señales que representan los cambios en las variables de entrada. Estos bloques solo tienen puertos de salida, es decir, no tienen puertos de entrada. A continuación se describen los bloques Step, Ramp, Sine Wave, Constant, Clock, Digital Clock, Signal Generator Bloques Paso y Rampa (“Step” y “Ramp”) La Figura 10.15a muestra la ventana de especificaciones del bloque “Step”. En el cuadro “Step Time” se introduce el tiempo transcurrido para que la variable de entrada cambie desde un valor inicial que se introduce en el cuadro “Initial value” hasta un valor final que se introduce en el cuadro “Final value”.

(a) (b)

Figura 10.15 Especificaciones de los bloques (a) Step y (b) Ramp

Page 12: Simulink Tutorial Completo

Mach

188

La Figura 1.15b muestra la ventana de especificaciones del bloque “Ramp”. En el cuadro “Slope” se introduce la pendiente de la rampa y en el cuadro “Start time” se introduce el tiempo de iniciación del cambio rampa. Los cuadros de especificaciones se dejan con sus valores por defecto Bloques Seno y Generador de Señal (“Sine Wave” - “Signal Generator”) La Figura 10.16a muestra la ventana de especificaciones del bloque “Sine Wave”. La Amplitud, el umbral, la frecuencia y la fase de la onda sinusoidal se introducen en los cuadros de nombres “Amplitude”, “Bias”, “Frequency” y “Phase”, respectivamente.

(a) (b)

Figura 10.16 Especificaciones del bloque (a) Sine Wave y (b) Signal Generator

La Figura 10.16b muestra la ventana de especificaciones del bloque “Signal Generator”. En el cuadro “Wave from” se especifica si la onda periódica de entrada es sinusoidal, cuadrada, diente de sierra o al azar. La amplitud y la frecuencia se introducen en los cuadros de nombres “Amplitude” y “Frequency”, respectivamente. Bloques Reloj y Constante (“Clock” y “Constant”) La Figura 10.17a muestra la ventana de especificaciones para el bloque “Clock” que se utiliza para mostrar el tiempo de simulación. Si se verifica el cuadro “Display

Page 13: Simulink Tutorial Completo

Mach

189

time” se despliega el tiempo sobre el icono. El bloque “Display Clock” se puede utilizar como otra opción.

(a) (b)

Figura 10.17 Especificaciones del bloque (a) Clock (b) Constante La Figura 10.17b muestra la ventana de especificaciones para el bloque “Constante” que se utiliza para entrar un valor constante en el diagrama de bloques que simula la dinámica de un sistema. 10.7 LIBRERÍA “SINKS” (SALIDAS) La librería “Sinks” contiene un conjunto de bloques receptores de señales de salida y, por lo tanto, solo tienen puertos de entrada. Mediante estos bloques se observan los resultados de las simulaciones en diferentes formas, por ejemplo, gráfica o numérica. La Figura 10.18a muestra la ventana que se despliega al hacer doble clic sobre la librería “Sinks” y la Figura 6.18b muestra los botones que se incluyen en dicha librería. Los botones “Scope”, “Floating Scope” y “XY Graph” despliegan la información de salida en función del tiempo, en forma gráfica. El botón “Scope” no requiere especificaciones y “Floating Scope” se utiliza para representar en gráficos separados los perfiles de cada una de las informaciones de salida, para lo cual se hace doble clic sobre el icono, se presiona el cuadro “Parameters” y se introducen el número de gráficos en el cuadro “Number of axes”. El botón “XY Graph” requiere de las especificaciones de los valores límites en los ejes de representación de las variables “X” e “Y”. La Figura 10.19 muestra la ventana de especificaciones de los botones “Floating Scope” y “XY Graph”.

Page 14: Simulink Tutorial Completo

Mach

190

(a) (b)

Figura 10.18 Librería Sinks

(a) (b)

Figura 10.19 Especificaciones del bloque (a) XY Graph y (b) Floating Scope

Los botones “Display” y “To Workspace” despliegan la información de salida en forma numérica. El primero lo muestra en forma digital sobre el mismo icono mientras que el segundo lo hace sobre el espacio de trabajo de Matlab asignándole

Page 15: Simulink Tutorial Completo

Mach

191

un símbolo a las variables que se quieren desplegar. El botón “Display” permite la selección del formato numérico para el despliegue de la información de salida. La Figura 10.20 muestra las ventanas de especificaciones de estos botones

(a) (b)

Figura 10.20 Especificaciones del bloque (a) “Display” y (b) “To Workspace”

Figura 10.21 Especificaciones del bloque “To File” 10.8 LIBRERÍAS “SIGNAL ROUTING” Y “PORTS & SUBSYSTEMS” Las Figuras 10.22 muestran las ventanas que se despliegan al abrir las librerías “Signal Routing” y “Ports & Subsystems” que contienen bloques de enrutamiento de señales y definición de puertos y subsistemas.

Page 16: Simulink Tutorial Completo

Mach

192

(a) (b)

Figura 10.22. Librería (a) Signal Routing (a) y (b) Ports & Subsystems La librería “Signal Routing” contiene un conjunto de bloques de enrutamiento de señales como interruptores, mezcladores, divisores, etc. Estos bloques tienen puertos de entrada y de salida La librería “Ports & Subsystems” contiene un conjunto de bloques que definen puertos de entradas y de salidas o subsistemas con los que desarrollan lazos de control de flujo como if, switch, while, for, etc. 10.9 SIMULACION DE UN SISTEMA CON SIMULINK 10.9.1 Sistema de Primer Orden Lineal – Dominio Tiempo En la Figura 10.23 se muestra un diagrama de bloques para la simulación del sistema de primer orden lineal en el dominio del tiempo, planteado en la Práctica No. 1.

Page 17: Simulink Tutorial Completo

Mach

193

Figura 10.23. Diagrama de bloques del sistema de la Práctica 1

Page 18: Simulink Tutorial Completo

Mach

194

Los parámetros físicos incluidos son los correspondientes al volumen en el tanque, el flujo volumétrico a través del mismo y la constante de velocidad de reacción. El botón “Multiport Switch” es un interruptor múltiple que se encuentra en la librería “Signal Routing”. Su funcionamiento está acoplado con el botón constante denominado “Entrada” cuya función es indicar al interruptor la función que debe dejar pasar a través de él. Esto se hace asignando los números 1, 2 y 3 a los cambios Step, Ramp y Sine Wave, respectivamente. El botón “Mux” de la librería “Routing Signal” simula la circulación de la señal rampa de entrada separada de la señal de salida del sistema pero conjuntas de tal manera que el “Scope” que se alimenta con la descarga del botón “Mux” muestra en una misma ventana ambos perfiles. El botón “Manual Switch” se incluye para interrumpir el flujo de la información de salida a través de él cuando se haga la simulación de la respuesta rampa. Su operación es manual Al hacer la simulación con la ecuación diferencial estándar de un sistema de primer orden lineal en términos de sus variables desviación, la condición inicial en el integrador es cero. Para la fijación de los parámetros de la simulación en cuanto a la fijación del tiempo y a la selección del método para la solución de la ecuación diferencial despliegue el menú “Simulation” y llénela como se observa en la Figura 10.24.

Figura 10.24 Especificación de los Parámetros de la Simulación En el cuadro “Simulation Time” se ha fijado como tiempo de simulación 50 unidades de tiempo y en el cuadro “Solver options” se ha seleccionado el método

Page 19: Simulink Tutorial Completo

Mach

195

ode23s (stiff/Mod. Rosenbrock). Estos métodos rigurosos se seleccionan, especialmente, cuando se observa que las respuestas se ven a trazos lineales muy notorios, lo que puede deberse a la aplicación de un método menos riguroso 10.9.2 Sistema de Primer Orden Lineal – Dominio Laplace En la Figura 10.25 se muestra un diagrama de bloques para la simulación del sistema de primer orden lineal en el dominio del tiempo, planteado en la Práctica No. 3. La función de transferencia se procesa con el botón “Transfer Fcn” de la librería “Continuous”. Se especificó con un numerador de [0.875] y un denominador de [4.375 1], es decir, con los parámetros correspondientes a la ganancia y constante de tiempo determinados para dicho sistema. El botón “Gain” se coloca para alimentar el “Scope” con la información correspondiente a la variable de salida dividida por la ganancia del sistema, con lo que se observa claramente el perfil lineal de la respuesta después de un cierto tiempo. Nuevamente, para la solución del modelo se utiliza el método ode23s (stiff/Mod. Rosenbrock) y se sugiere fijar un tiempo de 50 unidades de tiempo Una función de transferencia se puede simular con el bloque “LTI System” que se encuentra en la herramienta “Control System Toolbox” y que se observa al hacer doble clic sobre dicha herramienta. Con el bloque “LTI System” se puede introducir la función de transferencia ya sea en la forma estándar, o zero-pole o espacio de los estados, utilizando los comandos correspondientes para cada una de ellas, es decir, tf, zpk o ss 10.9.3 Sistema de Segundo Orden Lineal – Dominio Tiempo En la Figura 10.26 se muestra un diagrama de bloques para la simulación del sistema de segundo orden lineal en el dominio del tiempo, planteado en la Práctica No. 4. Se utiliza el bloque “Math Function” de la librería “Math Operations” para realizar raíces cuadradas y potencias al cuadrado. Se incluye el botón “Display” de la librería “Sinks” para desplegar el valor del coeficiente de amortiguamiento. Se observa la necesidad de dos bloques “Integrator” debido a que la ecuación diferencial que se simula es de segundo orden

Page 20: Simulink Tutorial Completo

Mach

196

Figura 10.25 Diagrama de bloques del sistema de la Práctica 2

Page 21: Simulink Tutorial Completo

Mach

197

Figura 10.26 Diagrama de bloques del sistema de la Práctica 3

Page 22: Simulink Tutorial Completo

Mach

198

Las leyendas que aparecen sobre algunas corrientes se digitan haciendo un clic sobre el lugar sobre el cual se quiere introducir. Las letras griegas se colocan con el estilo “Symbol” 10.9.4 Sistema de Segundo Orden Lineal – Dominio Laplace En la Figura 10.27 se muestra un diagrama de bloques para la simulación del sistema de segundo orden lineal en el dominio de Laplace, planteado en la Práctica No. 5. En esta simulación, se construye un archivo con Matlab, es decir, con extensión punto m, que solicite al usuario los parámetros físicos del sistema (Masa del bloque, constante de elasticidad, coeficiente de amortiguamiento, aceleración de la gravedad y área del diafragma, calcule los parámetros dinámicos (Ganancia, constante de tiempo y coeficiente de amortiguamiento) y defina el numerador (num) y el denominador (den) de la función de transferencia que se introducen como los parámetros que especifican al bloque Función de Transferencia. Desde dicho archivo se llama el archivo punto mdl construido en Simulink para que se despliegue y que corresponde al diagrama de bloques que se observa en la Figura 10.27. Los parámetros de la simulación se introducen desde la ventana de Simulink 10.9.5 Sistemas con Tiempo Muerto – Dominio Laplace En la Figura 10.28 se muestra el diagrama de bloques que simula la dinámica de un sistema con tiempo muerto en el dominio de Laplace e incluye los modelos de primero y segundo orden desarrollados en las Prácticas No. 3 y 5. Para esta simulación, se construye un archivo tipo “Script” en Matlab con nombre “Sistemas.m” y un diagrama de bloques en Simulink denominado “Primer_Segundo_Orden.mdl”. En el primero se capturan o calculan todos los parámetros requeridos y en el segundo se desarrolla la simulación. De esta forma, los bloques del diagrama en Simulink se especifican con los símbolos asignados en el archivo “Sistemas.m”. Se observa, además, que el tiempo de simulación se captura con el nombre “Rango” y se introduce dentro de la ventana de especificaciones de los parámetros de simulación que se despliega dentro de la ventana de Simulink. La simulación se inicia con la apertura del archivo “Sistemas.m”, y desde aquí se ordena la corrida y posterior apertura del diagrama de bloques en Simulink. La solución gráfica resultante se observa desplegando los registradores respectivos. Algunos comandos de matlab utilizados en el primero de los archivos se explican al final de esta lección.

Page 23: Simulink Tutorial Completo

Mach

199

Figura 10.27 Diagrama de bloques del sistema de la Práctica 4

Page 24: Simulink Tutorial Completo

Mach

200

Figura 10.28 Simulación de la dinámica de un sistema con Tiempo Muerto

Page 25: Simulink Tutorial Completo

Mach

201

En la Figura 10.28 se incluye el botón “Transport Delay” de la librería “Continuous” para especificar el tiempo muerto y se simplifica el diagrama definiendo dos subsistemas, el “Subsystem1” incluye los elementos que seleccionan el sistema de primer o de segundo orden que se quiere simular y el denominado “Subsystem” incluye los elementos con los cuales se desarrolla la respuesta que se quiere desarrollar o simular. Las Figuras 10.29 y 10.30 muestran los diagramas correspondientes para cada uno de los subsistemas observados

Figura 10.29 Subsistema para seleccionar el orden del sistema

Figura 10.30 Subsistema para seleccionar la respuesta del sistema

Page 26: Simulink Tutorial Completo

Mach

202

El botón “Subsystem” se selecciona en la librería “Ports&Subsystems” y el subsistema se puede construir dentro del bloque seleccionado pero también se pueden escoger los elementos previamente y seleccionar la opción “Create Subsystem” del menú “Edit” del espacio de trabajo de Simulink, En la Figura 10.29 se emplea el botón “Switch Case” de la librería “Ports&Subsystems” y que desarrolla la operación switch-case sobre el valor de la variable de entrada que en el programa codificado en Matlab corresponde a la asignación para seleccionar el sistema de primero o segundo orden. El caso 1 (Primer Orden) se conecta con un botón “Switch Case Action Subsystem”, de la misma librería, denominado “Primer Orden” que requiere de la alimentación de la acción (1), para lo cual se instala la función de transferencia para un sistema de primer orden (En el esquema se colocó afuera para ilustración del lector) entre su puerto de entrada y salida. La entrada a este bloque es el cambio en la variable de entrada (Paso, Rampa o Seno). Para el caso 2 (Segundo Orden) se construye un esquema similar. El interruptor multipuerto utiliza como indicador de salida el que se asigna para el orden del sistema. En la Figura 10.30, un botón “Switch Case” desarrolla la operación switch-case sobre el valor que se asigna para seleccionar el tipo de cambio en la variable de entrada. Se incluyen un caso para la respuesta rampa y otro caso (2, 3), que desarrolla los cambios paso y seno. Los botones “Switch Case Action Subsystem” se alimentan de las acciones y entradas correspondientes a rampa y paso y seno, respectivamente. El botón “Merge” de la librería “Ports&Subsystems” emerge las señales de entrada en una sola señal de salida. En este caso, solo emerge la información alimentada 10.9.6 Sistema de Tres Tanques de Flujo No Interactuantes En la Figura 10.31 se muestra un diagrama de bloques para la simulación del sistema de tres tanques en serie no interactuantes planteado en la Práctica No. 7. Se observa que los parámetros que se introducen a través de un programa codificado con Matlab son el dominio de solución del modelo y el tipo de respuesta que se quiere simular. De igual manera, se introducen los parámetros que especifican cada uno de los cambios que se incluyen, dentro del diagrama de bloque, para la variable de entrada. El archivo se incluye al final de este capítulo y se denomina “ordenmayorsimulink.m” Las Figuras 10.32 muestra el diagrama interior al bloque denominado “Tiempo-Laplace”; es la aplicación de un lazo “Switch…Case” para desarrollar la solución de la respuesta seleccionada en el dominio del tiempo o de Laplace. Además, incluye

Page 27: Simulink Tutorial Completo

Mach

203

un bloque donde se selecciona el tipo de respuesta a simular, es decir, paso, rampa o seno.

Figura 10.31 Sistema de Orden Mayor – Tanques No Interactuantes

Figura 10.32 Selección del dominio de Solución La Figura 10.33 muestra el diagrama de bloques que representa la solución del modelo en el dominio del tiempo. Al observar este diagrama, se deduce que los

Page 28: Simulink Tutorial Completo

Mach

204

parámetros dinámicos correspondientes a cada uno de los tanques se introducen al correr el programa codificado en Matlab, es decir, las constantes de tiempo y las ganancias estacionarias. La Figura 10.34 es el diagrama de bloques que representa la solución del modelo en el dominio de Laplace

Figura 10.33 Solución del modelo en el dominio del tiempo

Figura 10.34 Solución del modelo en el dominio de Laplace

La Figura 10.35 es el diagrama de bloques correspondiente al subsistema denominado “Salida” incluido en la Figura 10.32. Se observa, que mediante un lazo

Page 29: Simulink Tutorial Completo

Mach

205

de control “Switch…Case” se selecciona la salida de acuerdo al dominio, tiempo o Laplace, en que se hace la simulación.

Figura 10.35 Selección del dominio de Salida La Figura 10.36 es el diagrama de bloques en donde se selecciona si la respuesta a simular es paso, rampa o seno para los respectivos gráficos de salida

Figura 10.36 Selecciona del tipo de respuesta

Page 30: Simulink Tutorial Completo

Mach

206

10.9.7 Sistema de Dos Tanques de Flujo Interactuantes En la Figura 10.37 se muestra un diagrama de bloques para la simulación del sistema de dos tanques de flujo interactuantes planteado en la Práctica No. 7. Se observa que los parámetros que se introducen a través de un programa codificado con Matlab son el dominio de solución del modelo y el tanque cuya respuesta se quiere simular. De igual manera, se introducen los parámetros que especifican cada uno de los cambios que se incluyen, dentro del diagrama de bloque, para la variable de entrada. El código se incluye en el archivo “ordenmayorsimulink.m”

Figura 10.37 Tanques en serie interactuantes Las Figuras 10.38 a 10.42 muestran los diagramas de bloques de cada uno de los sucesivos subsistemas introducidos en el diagrama de bloque de la Figura 10.37. La estructura de los subsistemas es similar a la construida para el modelo de tres tanques de flujo en serie no interactuantes.

Page 31: Simulink Tutorial Completo

Mach

207

Figura 10.38 Subsistema “Tiempo – Laplace”

Figura 10.39 Subsistema “Dominio del Tiempo”

Page 32: Simulink Tutorial Completo

Mach

208

Figura 10.40 Subsistema “Dominio Laplace”

Figura 10.41 Subsistema “Salida”

Page 33: Simulink Tutorial Completo

Mach

209

Figura 10.42 Subsistema “Salida1” 10.9.8 Espacio de los Estados con Simulink En la Figura 10.43 se muestra el diagrama de bloques para la simulación del modelo de los tres tanques de flujo en serie no interactuantes planteado en la Practica No. 7;

Figura 10.43 Tanques no interactuantes – Espacio de los Estados

Figura 10.44 Tanques Interactuantes – Espacio de los Estados

Page 34: Simulink Tutorial Completo

Mach

210

Y la Figura 10.44 muestra el diagrama de bloques para el sistema de dos tanques de flujo interactuantes simulado en la misma práctica. Las matrices son introducidas en el archivo “ordenmayorsimulink” 10.9.9 Sistemas No Lineales – Reacciones de Van de Vusse En la Práctica No. 8 se plantea la simulación del sistema de reacciones de Van de Vusse cuyo modelo matemático es no lineal y sus características permiten un análisis en estado estacionario o dinámico Análisis en Estado Estacionario En la Figura 10.45 se muestra el botón con el cual se determina el perfil de cambio de las concentraciones de A y B en estado estacionario del sistema de reacciones de Van de Vusse mediante las ecuaciones (8.8) y (8.9). Como se trata de un procedimiento para calcular dichas concentraciones para diferentes valores de la velocidad espacio se utiliza el bloque “For Iterator Subsystem” que se encuentra en la librería “Ports&Subsystems”. La entrada a dicho subsistema es el número de iteraciones y la salida ha sido anulada para mostrar los resultados en el interior del blorque “For Iterator Subsystem”.

Figura 10.45 Bloque For Iterator Subsystem

Al hacer doble clic sobre el bloque se despliega el subsistema que muestra el bloque “For Iterator”, y un puerto de entrada unido a un puerto de salida como se observa en la Figura 10.46 El bloque “For Iterator” se especificó para que la entrada del número de cálculos se alimente externamente seleccionando la opción “External” en el cuadro “Source of number of iterations”

Page 35: Simulink Tutorial Completo

Mach

211

Figura 10.46 El diagrama de bloques para el cálculo de las concentraciones de A y B en estado estacionario se muestra en la Figura 10.48. Para la asignación de los sucesivos valores de la velocidad espacio se emplea el bloque “Memory” de la librería “Discrete” cuya función y especificaciones se observan en la Figura 10.47. Se asigna como valor inicial el valor de -0.1 para que los cálculos se inicien para un valor de cero ya que esta salida se ha de sumar con el valor constante de 0.1 alimentado. La salida de este botón es el valor de entrada anterior. Con este lazo, el valor de la velocidad espacio cambia de 0.1 en 0.1 desde cero y un número de veces dado por el número de iteraciones especificado. Se requiere la verificación del cuadro de nombre “Inherit sample time”.

Figura 10.47 Especificaciones del botón “Memory”

Tratándose de una solución en estado estacionario se fijan tanto el tiempo inicial como el final con un valor de cero. Al fijar un tiempo final diferente, los cálculos se repiten tantas veces como el tiempo permita repetir el número de cálculos.

Page 36: Simulink Tutorial Completo

Mach

212

Figura 10.48 Subsistema para calcular el perfil de las concentraciones de A y B

El número de iteraciones se multiplica por el valor de 0.1 para fijar la escala en el eje de las abscisa de 0 a 10 en las representaciones gráficas. Para la observación de los perfiles se sugiere el intervalo de 0 a 10 en el eje de las abscisas y los intervalos de 0 a 9 para la concentración de A y de 0 a 1.5 para la concentración de B. 10.10 MATLAB: COMANDOS UTILIZADOS En los archivos codificados con Matlab para ejecutar algunas simulaciones en esta lección se utilizan algunos comandos como el msgbox, errordlg y sim. A continuación se explican en cuanto a la sintaxis empleada en algunos de ellos: Comando msgbox Al ejecutar este comando se despliega un cuadro de mensaje escrito por el usuario. La sintaxis es:

Page 37: Simulink Tutorial Completo

Mach

213

msgbox(Mensaje, Título,Icono) Los argumentos “Mensaje” y “Titulo” se escriben entre comillas simples y son el mensaje y el nombre o titulo, que aparecen en el cuadro. El argumento “Icono” es el dibujo que aparece en el lado izquierdo y que puede ser “none”, “error”, “help” o “warn”. El icono por defecto es el primero y los otros representan dibujos de error, ayuda o intejeccion, respectivamente. Estos cuadros incluyen un botón “OK” para aceptar el mensaje. La minimización o cancelación se consigue presionado los correspondientes en el extremo superior derecho de la barra de titulo. Algunas alternativas para el despliegue de cuadros de mensajes son los comandos “errordlg”, “helpdlg” y “warndlg”. Con ellos se tiene especificado, por defecto, el icono de error, ayuda o interjección y solo requieren de la especificación del mensaje y el titulo. Es decir, que su sintaxis es por ejemplo para el comando errordlg:

errordlg(Mensaje, Título) El comando “questdlg” despliega un cuadro de mensaje con un icono de interrogación e incluye tres botones para presionar que, por defecto, aparecen con los nombres de “Yes”, “No” y “Cancel”. La sintaxis para el comando “questdlg” es:

questdlg(Mensaje, Título,Botón1,Boton2,Boton3,BotonPorDefecto) A los botones pueden asignárseles nombres diferentes a los que muestran por defecto. La presión de uno de ellos acepta como respuesta el nombre correspondiente Comando sim Este comando ejecuta la simulación de un modelo representado mediante un diagrama de bloques en Simulink. Su sintaxis es una de las siguientes:

sim(‘Model’) [t,x,y] = sim(‘Model’, Intervalo de Tiempo)

Page 38: Simulink Tutorial Completo

Mach

214

‘Model’ es el nombre del archivo que contiene el diagrama de bloques construido en Simulink y debe escribirse entre comillas simples. La primera sintaxis despliega la respuesta del sistema de acuerdo a los receptores instalados en el diagrama. Por ejemplo, si se trata de observar la respuesta gráfica es necesario abrir el diagrama de bloques y desplegar los botones correspondientes. En el caso de respuestas numéricas receptadas en un botón “To Workspace”, estas se observan sobre el espacio de trabajo en Matlab. La segunda sintaxis despliega los valores de tiempo, variables de entrada y variables de salida en el espacio de trabajo de Matlab. Los argumentos incluyen, además del nombre del modelo, el intervalo del tiempo de simulación [to ∆t tf] Comando beep Este comando, simplemente, produce un sonido al ejecutarse 10.11 MATLAB: PROGRAMAS CODIFICADOS Archivo Sistemas.m % Simulacion de Sistemas con Tiempo Muerto clc close all msgbox('Pulse "OK" Para Entrar Al Ambiente De Simulacion En El Dominio De Laplace Con y Sin Tiempo Muerto','Bienvenido'); beep global R K tau X r A w num den z p Rango Inicio sigma atraso Frecuencia Fase Sobrepaso Decaimiento fin disp(' :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp(' SIMULACION DE SISTEMAS LINEALES DE PRIMER Y SEGUNDO ORDEN CON TIEMPO MUERTO'); disp(' ') disp(' :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp(' ') disp(' ') disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp(' TIPO DE RESPUESTA DEL SISTEMA') disp(' ')

Page 39: Simulink Tutorial Completo

Mach

215

disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp(' ') disp('1. PASO') disp('2. RAMPA') disp('3. SENO') disp(' ') R = input('Escriba La Respuesta a Simular: '); if (R < 1)|(R > 3) errordlg('Selecione 1, 2 o 3') beep R = input('Escriba La Respuesta a Simular: '); end clc disp(' ') disp(' ') switch R case 1 clc disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' CAMBIO PASO EN LA VARIABLE DE ENTRADA') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') X = input('Introduzca El Valor Del Cambio Paso En La Variable De Entrada = '); disp(' ') r=0; A=0; w=0; case 2 clc disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' CAMBIO RAMPA EN LA VARIABLE DE ENTRADA') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') r = input('Introduzca El Valor De La Pendiente De La Rampa De Entrada = ');

Page 40: Simulink Tutorial Completo

Mach

216

disp(' ') X=0; A=0; w=0; case 3 clc disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' CAMBIO SENO EN LA VARIABLE DE ENTRADA') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') A = input('Amplitud De La Entrada Seno = '); w = input('Frecuencia De La Entrada Seno = '); disp(' ') X=0; r=0; end disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp(' PARAMETROS DE LA SIMULACION DINAMICA') disp(' ') disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') helpdlg('Si Desea Ver La Respuesta Sin Tiempo Muerto Digite "Cero" De Lo Contrario Otro Valor','Tiempo Muerto') beep To = input('* Escriba El Valor Del Tiempo Muerto, s = '); Rango = input('* Tiempo de simulación, s = '); disp(' ') clc disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' SISTEMAS') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' ') disp('1. SISTEMA LINEAL DE PRIMER ORDEN: TANQUE CALENTADOR') disp('2. SISTEMA LINEAL DE SEGUNDO ORDEN: VALVULA DE CONTROL') disp(' ')

Page 41: Simulink Tutorial Completo

Mach

217

S = input('¿ Que Sistema Desea Simular ?: '); if (S < 1)|(S > 2) errordlg('Selecione 1 o 2') beep S = input('¿ Que Sistema Desea Simular ?: '); end disp(' ') disp(' ') switch S case 1 clc disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp('¡USTED ESCOGIO SIMULAR EL SISTEMA LINEAL DE PRIMER ORDEN: TANQUE CALENTADOR!') disp(' ') disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp(' ') clc disp(' ') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' PARAMETROS FISICOS DEL SISTEMA') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') F = input('* Flujo Volumetrico, m^3/s = '); V = input('* Volumen Del Liquido En El Tanque, m^3 = '); A = input('* Area De Transferencia De Calor, m^2 = '); U = input('* Coeficiente Global De Transferencia De Calor, KW/m^2-ºC = '); T = input('* Temperatura De Entrada Del Agua En Estado Estacionario, ºC = '); C = input('* Calor Específico, KJ/Kg-ºC = '); RHO = input('* Densidad Del Agua, Kg/m^3 = '); disp(' ') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ')

Page 42: Simulink Tutorial Completo

Mach

218

disp(' PARAMETROS DINAMICOS DEL SISTEMA') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') tau = RHO*V*C/(F*RHO*C + U*A) K = F*RHO*C/(F*RHO*C + U*A) disp(' ') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' RESULTADOS') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') switch R case 2 disp('Atraso De La Respuesta Lineal') tau case 3 disp('Amplitud Del Perfil Sinusoidal De La Respuesta'); K*A/sqrt(1+(w*tau)^2) disp('Fase de la respuesta con respecto a la entrada'); atan(-w*tau) end STOP=input('Presione ENTER para ver la simulacion en Simulink'); clc case 2 clc disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp('!USTED ESCOGIO SIMULAR EL SISTEMA LINEAL DE SEGUNDO ORDEN: VALVULA DE CONTROL!') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' ')

Page 43: Simulink Tutorial Completo

Mach

219

disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' PARAMETROS FISICOS DEL SISTEMA') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') M = input('* Masa Del Bloque, lbm = ');

C = input('* Coeficiente De Amortiguamiento Viscoso, lbf/pie/s = '); K = input('* Constante De Hooke Del Resorte, lbf/pie = '); A = input('* Area Del Diafragma, pie^2 = '); disp(' ') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' PARAMETROS DINAMICOS DEL SISTEMA') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') tau = sqrt(M/(32.2*K)) K = A/K sigma = sqrt((32.2*C^2)/(4*M*K)) disp(' ') disp(' ') disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') disp(' RAICES DE LA ECUACION CARACTERISTICA') disp(' ') disp(':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::') disp(' ') p = [tau^2 2*sigma*tau 1]; z = roots(p) disp(' ') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') disp(' RESULTADOS') disp(' ') disp('::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ') disp(' ') switch R case 1 if sigma > 1

Page 44: Simulink Tutorial Completo

Mach

220

disp('Respuesta Sobreamortiguada Estable') disp('Atrasos Dinámicos') atraso = -1./z elseif sigma == 1 disp('Respuesta Amortiguada Crítica') disp('Atrasos Dinámicos') atraso = -1./z elseif (sigma < 1)&(sigma > 0) disp('Respuesta Subamortiguada Estable') Frecuencia = sqrt(1-sigma^2)/tau Fase = atan(sqrt(1-sigma^2)/sigma) Sobrepaso = 100*exp(-pi*sigma/sqrt(1-sigma^2)) Decaimiento = (Sobrepaso/100)^2 elseif sigma == 0 disp('Respuesta Oscilatoria Sostenida') else disp('Respuesta Inestable') end case 2 if sigma > 1 disp('Respuesta Sobreamortiguada') disp('Atrasos dinámicos') atraso = -1./z elseif sigma == 1 disp('Respuesta Amortiguada Crítica') disp('Atrasos dinámicos') atraso = -1./z elseif (sigma < 1)&(sigma > 0) disp('Respuesta Subamortiguada') Frecuencia = (sqrt(1-sigma^2))/tau Fase = atan(2*sigma*(sqrt(1-sigma^2))/(2*sigma^2-1)) elseif sigma == 0 disp('Respuesta Oscilatoria Sostenida') else disp('Respuesta Inestable') end case 3 if sigma > 1 disp('Respuesta Sobreamortiguada') disp('Atrasos dinámicos') atraso = -1./z

Page 45: Simulink Tutorial Completo

Mach

221

Fase = atan(-w*atraso(1)) + atan(-w*atraso(2)) Amplitud = K*A/((sqrt(1+(w*atraso(1))^2))*(sqrt(1+(w*atraso(2))^2))) elseif sigma == 1 disp('Respuesta Amortiguada Crítica') disp('Atrasos dinámicos') atraso = -1./z elseif (sigma < 1)&(sigma > 0) disp('Respuesta Subamortiguada') elseif sigma == 0 disp('Respuesta Oscilatoria Sostenida') else disp('Respuesta Inestable') end end STOP=input('Presione ENTER para ver la simulacion en Simulink'); clc end sim('Primer_Segundo_Orden') Primer_Segundo_Orden Archivo “ordenmayorsimulink” clc close all global Ti Inicio K1 K2 K3 rho V Cv Cp w t0 tau1 tau2 tau3 h n m g11 g12 g13 g21 g22 g23 g31 g32 g33 G h11 h21 h31 H GH a11 a12 a13 a21 a22 a23 a31 a32 a33 A b11 b21 b31 B C D f1 f2 T10 T20 K10 K20 V1 V2 r r2 P P2 Am wf Am2 wf2 NT disp(' |******************************************************************|') disp(' RESPUESTAS: PAS0, RAMPA Y SENO PARA SISTEMAS DE ORDEN MAYOR') disp(' |***************************************************************************|') disp(' ') disp(' |*********|') disp(' SISTEMAS') disp(' |*********|') disp(' ')

Page 46: Simulink Tutorial Completo

Mach

222

disp('1. SISTEMA NO INTERACTUANTE') disp('2. SISTEMA INTERACTUANTE') disp(' '); % CAPTURA DEL MODELO S = [1 2]; S = input('Digite el numero del sistema que desee SIMULAR = '); if S>2 | S<1 errordlg('El numero del sistema tiene que ser 1 o 2') disp(' ') S = input('Digite el numero del sistema que desee SIMULAR = '); end disp(' '); disp(' |*************************************************|') disp(' TIPO DE RESPUESTA DEL SISTEMA') disp(' |*************************************************|') disp(' ') disp(' ') disp('1. PASO') disp('2. RAMPA') disp('3. SENO') disp(' ') % CAPTURA DE LA RESPUESTA R = [1 2 3]; R = input('Digite el numero de la respuesta a simular = '); if R>3 | R<1 errordlg('El numero de la respuesta tiene que ser 1,2 o 3') disp(' ') R = input('Digite el numero de la respuesta que desee simular = '); end disp(' ') disp(' |**********|') disp(' DOMINIOS') disp(' |**********|') disp(' ') disp('1. TIEMPO') disp('2. LAPLACE') disp('3. TIEMPO - ESPACIO DE LOS ESTADOS') disp(' ') % CAPTURA DEL DOMINIO D = [1 2 3];

Page 47: Simulink Tutorial Completo

Mach

223

D = input('Digite el numero del dominio con que se va a hacer la simulacion = '); if D>3 | D<1 errordlg('El numero del Dominio tiene que ser 1, 2 o 3') disp(' ') D = input('Digite el numero del dominio con que se va a hacer la simulacion = '); end disp(' ') switch S case 1 disp(' ') disp(' |*********************************************************************************|') disp(' PARÁMETROS FÍSICOS DEL SISTEMA NO INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') % ENTRADAS rho = input('Valor de la densidad, lb/pie3 = '); V = input('Volumen de los tanques, pie3 = '); Cv = input('Calor especifico a volumen constante, Btu/lb-°F = '); Cp = Cv; w = input('Flujo masico, lb/min = '); Ti = input('Valor de Ti, °F = '); t0 = input('Tiempo de simulación, min = '); Inicio = input('Condiciones iniciales = '); % PROCESO tau1 = rho*V*Cv/(w*Cp); tau2 = tau1; tau3 = tau2; K1 = w*Cp/(w*Cv); K2 = K1; K3 = K2; switch R case 1 disp(' ') disp(' |*********************************************************************************|')

Page 48: Simulink Tutorial Completo

Mach

224

disp(' CAMBIO PASO DE UN SISTEMA NO INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') % ENTRADAS P = input('Cambio paso = '); r=0;Am=0;wf=0; switch D case 1 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA PASO DE UN SISTEMA NO INTERACTUANTE EN EL DOMINIO DEL TIEMPO') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') sim('nointerordenmayor') nointerordenmayor case 2 disp(' ')

Page 49: Simulink Tutorial Completo

Mach

225

disp(' |*********************************************************************************|') disp(' RESPUESTA PASO DE UN SISTEMA NO INTERACTUANTE EN EL DOMINIO DE LAPLACE ') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') sim('nointerordenmayor') nointerordenmayor case 3 disp(' ') disp(' |************************************************************************************************|') disp(' RESPUESTA PASO DE UN SISTEMA NO INTERACTUANTE EN EL DOMINIO DEL TIEMPO - ESPACIO DE LOS ESTADOS') disp(' |************************************************************************************************|') disp(' ') % PROCESO a11 = -1/tau1; a12 = 0; a13 = 0;

Page 50: Simulink Tutorial Completo

Mach

226

a21 = K1/tau2; a22 = -1/tau2; a23 = 0; a31 = 0; a32 = K2/tau3; a33 = -1/tau3; A = [a11 a12 a13; a21 a22 a23; a31 a32 a33] b11 = K1/tau1; b21 = 0; b31 = 0; B = [b11; b21; b31] C = [1 0 0; 0 1 0; 0 0 1] D = [0;0;0]; % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') sim('nointerss') nointerss end case 2 disp(' |*********************************************************************************|') disp(' CAMBIO RAMPA DE UN SISTEMA NO INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') % ENTRADAS r = input('Pendiente = ');

Page 51: Simulink Tutorial Completo

Mach

227

P=0;Am=0;wf=0; switch D case 1 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA RAMPA DE UN SISTEMA NO INTERACTUANTE EN EL DOMINIO DEL TIEMPO') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 2 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA RAMPA DE UN SISTEMA NO INTERACTUANTE EN EL DOMINIO DE LAPLACE ') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ')

Page 52: Simulink Tutorial Completo

Mach

228

disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 3 msgbox('En el espacio de los estados solo se puede simular la respuesta paso') disp(' ') input(' Pulse ENTER para terminar y realizar una nueva Simulacion') clc close all ordenmayorsimulink end sim('nointerordenmayor') nointerordenmayor case 3 disp(' |*********************************************************************************|') disp(' CAMBIO SENO DE UN SISTEMA NO INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') % ENTRADAS Am = input('Amplitud = '); wf = input('Frecuencia (rad/seg) = '); P=0;r=0; switch D case 1 disp(' ') disp(' |*********************************************************************************|')

Page 53: Simulink Tutorial Completo

Mach

229

disp(' RESPUESTA SENO DE UN SISTEMA NO INTERACTUANTE EN EL DOMINIO DEL TIEMPO') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 2 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA SENO DE UN SISTEMA NO INTERACTUANTE EN EL DOMINIO DE LAPLACE ') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :')

Page 54: Simulink Tutorial Completo

Mach

230

disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 3 msgbox('En el espacio de los estados solo se puede simular la respuesta paso') disp(' ') input(' Pulse ENTER para terminar y realizar una nueva Simulacion') clc close all ordenmayorsimulink end sim('nointerordenmayor') nointerordenmayor end case 2 disp(' ') disp(' |*********************************************************************************|') disp(' PARÁMETROS FÍSICOS DEL SISTEMA INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') % ENTRADAS rho = input('Valor de la densidad, lb/pie3 = '); V1 = input('Volumen del primer tanque, pie3 = '); V2 = input('Volumen del segundo tanque, pie3 = '); f1 = input('Flujo volumetrico de entrada al primer tanque, pie3/min= '); f2 = input('Flujo volumetrico de entrada al segundo tanque, pie3/min= '); Cv = input('Calor especifico a volumen constante, Btu/lb-°F = '); Cp = Cv; T10 = input('Temperatura Inicial del Tanque 1, °F = '); T10 = T20; t0 = input('Tiempo de simulación, min = '); Inicio = input('Condiciones iniciales = '); % PROCESO Cp = Cv;

Page 55: Simulink Tutorial Completo

Mach

231

tau1 = rho*V1*Cv/(rho*Cp*(f1 + 0.2*(f1 + f2))) tau2 = rho*V2*Cv/(1.2*rho*Cp*(f1 + f2)) K10 = f1/(f1 + 0.2*(f1 + f2)) K20 = f2/(1.2*(f1 + f2)) K1 = 0.2*(f1 + f2)/(f1 + 0.2*(f1 + f2)) K2 = (f1 + 0.2*(f1 + f2))/(1.2*(f1 + f2)) switch R case 1 disp(' |*********************************************************************************|') disp(' CAMBIO PASO DE UN SISTEMA INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') % ENTRADAS NT = [1 2]; NT = input('Número del tanque a cambiar = '); switch NT case 1 P = input('Cambio paso en el Primer Tanque = '); P2 =0; case 2 P =0; P2 = input('Cambio paso en el Segundo Tanque = '); end r=0;Am=0;wf=0;r2=0;Am2=0;wf2=0; switch D case 1 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA PASO DE UN SISTEMA INTERACTUANTE EN EL DOMINIO DEL TIEMPO') disp(' |*********************************************************************************|') disp(' ')

Page 56: Simulink Tutorial Completo

Mach

232

% RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') sim('interordenmayor') interordenmayor case 2 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA PASO DE UN SISTEMA INTERACTUANTE EN EL DOMINIO DE LAPLACE ') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') sim('interordenmayor') interordenmayor

Page 57: Simulink Tutorial Completo

Mach

233

case 3 disp(' ') disp(' |************************************************************************************************|') disp(' RESPUESTA PASO DE UN SISTEMA INTERACTUANTE EN EL DOMINIO DEL TIEMPO - ESPACIO DE LOS ESTADOS') disp(' |************************************************************************************************|') disp(' ') % PROCESO a11 = -1/tau1; a12 = K1/tau1; a21 = K2/tau2; a22 = -1/tau2; A = [a11 a12; a21 a22] b11 = K10/tau1; b12 = 0; b21 = 0; b22 = K20/tau2; B = [b11 b12; b21 b22] C = [1 0; 0 1] D = [0 0;0 0] % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') sim('interss') interss end

Page 58: Simulink Tutorial Completo

Mach

234

case 2 disp(' |*********************************************************************************|') disp(' CAMBIO RAMPA DE UN SISTEMA INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') NT = [1 2]; NT = input('Número del tanque a cambiar = '); switch NT case 1 r = input('Pendiente en el Primer Tanque = '); r2 =0; case 2 r =0; r2 = input('Pendiente en el Segundo Tanque = '); end P=0;Am=0;wf=0;P2=0;Am2=0;wf2=0; switch D case 1 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA RAMPA DE UN SISTEMA INTERACTUANTE EN EL DOMINIO DEL TIEMPO') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ')

Page 59: Simulink Tutorial Completo

Mach

235

disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 2 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA RAMPA DE UN SISTEMA INTERACTUANTE EN EL DOMINIO DE LAPLACE ') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 3 msgbox('En el espacio de los estados solo se puede simular la respuesta paso') disp(' ') input(' Pulse ENTER para terminar y realizar una nueva Simulacion') clc close all ordenmayorsimulink end sim('interordenmayor') interordenmayor case 3

Page 60: Simulink Tutorial Completo

Mach

236

disp(' |*********************************************************************************|') disp(' CAMBIO SENO DE UN SISTEMA INTERACTUANTE') disp(' |*********************************************************************************|') disp(' ') NT = [1 2]; NT = input('Número del tanque a cambiar = '); switch NT case 1 Am = input('Amplitud, Am = '); wf = input('Frecuencia, wf (rad/seg) = '); Am2 = 0; wf2 = 0; case 2 Am = 0; wf = 0; Am2 = input('Amplitud, Am2 = '); wf2 = input('Frecuencia, wf2 (rad/seg) = '); end P=0;r=0;P2=0;r2=0; switch D case 1 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA SENO DE UN SISTEMA INTERACTUANTE EN EL DOMINIO DEL TIEMPO') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ')

Page 61: Simulink Tutorial Completo

Mach

237

disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 2 disp(' ') disp(' |*********************************************************************************|') disp(' RESPUESTA SENO DE UN SISTEMA INTERACTUANTE EN EL DOMINIO DE LAPLACE ') disp(' |*********************************************************************************|') disp(' ') % RESULTADOS disp(' ') disp(' |***********|') disp(' RESULTADOS') disp(' |***********|') disp('LAS CONSTANTES DE TIEMPO SON :') disp(' ') disp('tau1 = tau2 = tau3 = '), disp(tau1) disp(' ') disp('LAS GANANCIAS SON :') disp(' ') disp('K1 = K2 = K3 ='), disp(K1) disp(' ') case 3 msgbox('En el espacio de los estados solo se puede simular la respuesta paso') disp(' ') input(' Pulse ENTER para terminar y realizar una nueva Simulacion') clc close all ordenmayorsimulink end sim('interordenmayor') interordenmayor

Page 62: Simulink Tutorial Completo

Mach

238

end end disp(' ') disp('======================================================================================== ') disp(' ') disp('1. NUEVA SIMULACION') disp('2. TERMINAR LA SIMULACION') disp(' ') Sim=input('Escoger la opcion a realizar = '); if Sim == 1 clc close all ordenmayorsimulink else if Sim ==2 clc close all end end

Page 63: Simulink Tutorial Completo

Departamento de Electrónica Universidad de Alcalá

“Introducción a MATLAB, Toolbox de Control y Simulink”

Ingeniería Técnica de Telecomunicación Especialidad Sistemas Electrónicos

Page 64: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 2 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

1. ¿QUÉ ES MATLAB?. • Paquete software orientado al cálculo numérico, matrices,

procesamiento y análisis de la señal y gráficas • Distintos campos de acción (aplicaciones):

Teoría de control Tratamiento de señales Inteligencia artificial Diseño de sistemas de potencia Control de procesos mecánicos, de aviación, automoción, etc. Financiero Mapeo y tratamiento de imágenes Instrumentación y adquisición de datos Identificación de sistemas ...

• Varios programas incluidos

MATLAB: Núcleo operativo de la herramienta matemática Toolboxes: Librerías de funciones MATLAB asociadas a las

diferentes aplicaciones (Stateflow y Sisotool, interfaz gráfico, control neuronal y borroso)

Simulink: Interfaz gráfico para el modelado y simulación de sistemas

Blocksets: Bloques Simulink para aplicaciones específicas Real Time Workshop, xPC Tarjet y desarrollo sobre DSPs y

FPGAs

Page 65: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 3 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Diferentes tipos de archivos:

*.M Ficheros por lotes (*.bat) sobre S.O. MATLAB *.MAT Fichero de datos de MATLAB *.DLL Ficheros ejecutables sobre Windows diseñados con

MATLAB *.MDL Modelos de Simulink Otros *.fis, *.tbl, etc. para toolboxes de control borroso, stateflow

y otros paquetes ENTORNO DE TRABAJO • Varias ventanas de trabajo dentro de MATLAB

Ventana de comandos: Directamente sobre S.O. MATLAB

Entorno de trabajo (Workspace): Visualiza las variables definidas en cada instante

Editor de ficheros *.m: Editor inteligente (colores e indentado) con depurador paso a paso y visualización de variables internas

Editor de ficheros *.mdl: Editor gráfico para diseñar modelos de Simulink

Elección del directorio de trabajo: Explorador de Windows

Figuras: Potente editor de figuras con posibilidad de incluir textos, cambiar el formato, etc.

Page 66: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 4 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Page 67: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 5 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

2. EL USO DE MATLAB MANIPULACIÓN Y FORMATO DE DATOS • Se trabaja con matrices de números reales o/y complejos. • Los números complejos se definen gracias a los operadores i y j de

MATLAB. Así se puede escribir en MATLAB x=3+2j, que se definirá como una matriz de tamaño 1x1

• Un escalar es una matriz de tamaño 1x1 • Una variable fila o columna es un vector, o un array • Existen distintos formatos de datos con los que puede trabajar

MATLAB:

Short: 5 dígitos, punto fijo Short e: 5 dígitos, punto flotante Long: 15 dígitos, punto fijo Long e: 15 dígitos, punto flotante Hex: Hexadecimal

• Para indicar que se va a trabajar con uno u otro formato de datos

se utiliza la función de MATLAB “format” GENERACIÓN DE MATRICES • ¿Cómo generar una fila?

A=[a b c d e] ó A=[a, b, c, d, e]

Page 68: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 6 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• ¿Cómo generar una columna?

B=[a; b; c; d; e] ó

=

edcba

B

• ¿Cómo generar una matriz?

A= [a, b, c; d, e, f; g, h, i] ó

• ¿Cómo generar un serie de datos?

A(punto inicial: incremento: punto final) Ejemplo:

B=[1:1:8]

Con lo que se define un array B con el siguiente contenido: B=[1 2 3 4 5 6 7 8 ]

SUBMATRICES Y ELEMENTOS DE UNA MATRIZ • Para identificar un elemento de una matriz se usa la notación A(i,j)

dónde i es la i-ésima fila y j es la j-ésima columna.

=

ih gf e d c b a

A

Page 69: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 7 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Sea A la siguiente matriz:

Para identificar al nº 4 dentro de la matriz A se puede indicar como A(2,1) • Se puede identificar una parte de una matriz (submatriz) con la

siguiente notación:

A(fila_inicial:fila_final, col_inicial:col_final) Ejemplo: A partir de la matriz A definida en el ejemplo anterior, se define la matriz B de la siguiente forma:

B=A(1:3,1:2) Entonces B será una nueva matriz de valor:

Truco: El operador : puede utilizarse para identificar a todos los elementos en una serie de datos. Así en el ejemplo anterior B=A(1:3,1:2) es lo mismo que B=A(:,1:2)

=

9 8 76 5 4 3 2 1

A

=

8 75 4 2 1

B

Page 70: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 8 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

VARIABLES • A la hora de definir una variable (matriz, submatriz, array o escalar)

se distingue entre mayúsculas y minúsculas. • Cuando se llama a una función de MATLAB sin especificar variable

de salida, se vuelca el resultado en la variable por defecto ans. La notación ; omite la presentación del resultado en pantalla al final de un comando

COMANDOS Y FUNCIONES DE MATLAB • MATLAB posee gran número de funciones provenientes de:

MATLAB: Juego de funciones y operadores básico Toolbox: Dependiendo del tipo añadirá funciones especiales Generadas por el usuario: funciones o scripts

• Operadores de uso general (help general)

help Comando de ayuda who (s) Lista de variables (con s indica info sobre variable)

what (o dir) Lista de ficheros .M y .MAT clear Borrar variables load Carga de variables desde un fichero save Guardar variables a un fichero *.mat cd Cambiar de directorio de trabajo ! Ejecutar funciones DOS

... Continúa en la línea siguiente % Comentario en una función

demo Llamada a los ejemplos de uso de MATLAB mex Compilar ficheros de MATLAB

Truco: Es muy recomendable el uso de la help de MATLAB

Page 71: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 9 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Operadores para matrices y arrays y variables especiales (help ops)

ans Most recent answer. eps Floating point relative accuracy.

realmax Largest positive floating point number. realmin Smallest positive floating point number.

pi 3.1415926535897.... i, j Imaginary unit. inf Infinity.

NaN Not a number isnan True for Not a number isinf True for infinite elements.

isfinite True for finite elements. why Succinct answer.

Nota: Es importantísimo tener en cuenta la propiedad conmutativa en algunas operaciones aritméticas de matrices.

A/B ≠ B/A ya que A/B= A*B-1 y B/A= B*A-1

Page 72: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 10 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Otras funciones especiales, que se organizan en diferentes categorías. Las que no pertenecen a ninguna toolbox ni blockset específico se muestran en la siguiente tabla:

MATLAB\lang Programming language constructs. MATLAB\elmat Elementary matrices & matrix manipulation.MATLAB\elfun Elementary math functions. MATLAB\specfun Specialized math functions. MATLAB\matfun Matrix functions MATLAB\datafun Data analysis and Fourier transforms. MATLAB\audio Audio support. MATLAB\polyfun Interpolation and polynomials. MATLAB\funfun Function functions and ODE solvers. MATLAB\sparfun Sparse matrices. MATLAB\graph2d Two dimensional graphs. MATLAB\graph3d Three dimensional graphs. MATLAB\specgraph Specialized graphs. MATLAB\graphics Handle Graphics. MATLAB\uitools Graphical user interface tools. MATLAB\strfun Character strings. MATLAB\iofun File input/output. MATLAB\timefun Time and dates. MATLAB\datatypes Data types and structures. MATLAB\verctrl Version control. MATLAB\demos Examples and demonstrations. De entre ellas se pueden remarcar algunas más interesantes: • Polinomios (help polyfun)

roots Find polynomial roots. poly Convert roots to polynomial.

polyval Evaluate polynomial. polyvalm Evaluate polynomial with matrix argument.

Page 73: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 11 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

residue Partial fraction expansion (residues). polyfit Fit polynomial to data.

polyder Differentiate polynomial. polyint Integrate polynomial analytically. conv Multiply polynomials.

deconv Divide polynomials. Además de éstas, en esta categoría, hay funciones específicas para análisis geométrico y de interpolación. • Estructuras del lenguaje MATLAB (help lang) (solo las más

representativas)

if Conditionally execute statements. else IF statement condition. elseif IF statement condition. end Terminate scope of FOR, WHILE, SWITCH, TRY and IFfor Repeat statements a specific number of times.

while Repeat statements an indefinite number of times. break Terminate execution of WHILE or FOR loop.

continue Pass control to the next iteration of FOR or WHILE loop.switch Switch among several cases based on expression. case SWITCH statement case.

otherwise Default SWITCH statement case. try Begin TRY block.

catch Begin CATCH block. return Return to invoking function. error Display error message and abort function.

warning Display warning message. lasterr Last error message.

lastwarn Last warning message. disp Display an array.

display Overloaded function to display an array. fprintf Display formatted message.

Page 74: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 12 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

sprintf Write formatted data to a string. input Prompt for user input.

keyboard Invoke keyboard from M file pause Wait for user response. uimenu Create user interface menu. uicontrol Create user interface control.

• Generación de matrices (help elmat)

zeros Zeros array. ones Ones array. eye Identity matrix.

repmat Replicate and tile array. rand Uniformly distributed random numbers. randn Normally distributed random numbers.

linspace Linearly spaced vector. logspace Logarithmically spaced vector. freqspace Frequency spacing for frequency response. meshgrid X and Y arrays for 3 D plots.

Page 75: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 13 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Funciones Elementales.

sin Sine. sinh Hyperbolic sine. asin Inverse sine. asinh Inverse hyperbolic sine. cos Cosine.

cosh Hyperbolic cosine. acos Inverse cosine. acosh Inverse hyperbolic cosine.

tan Tangent. tanh Hyperbolic tangent. atan Inverse tangent. atan2 Four quadrant inverse tangent. atanh Inverse hyperbolic tangent. sec Secant.

sech Hyperbolic secant. asec Inverse secant. asech Inverse hyperbolic secant.

csc Cosecant. csch Hyperbolic cosecant. acsc Inverse cosecant. acsch Inverse hyperbolic cosecant.

cot Cotangent. coth Hyperbolic cotangent. acot Inverse cotangent. acoth Inverse hyperbolic cotangent. exp Exponential. log Natural logarithm.

log10 Common (base 10) logarithm. log2 Base 2 logarithm and dissect floating point number. pow2 Base 2 power and scale floating point number. sqrt Square root.

nextpow2 Next higher power of 2. abs Absolute value.

Page 76: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 14 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

angle Phase angle. complex Construct complex data from real & imaginary parts.

conj Complex conjugate. imag Complex imaginary part. real Complex real part.

unwrap Unwrap phase angle. isreal True for real array.

cplxpair Sort numbers into complex conjugate pairs. fix Round towards zero.

floor Round towards minus infinity. ceil Round towards plus infinity.

round Round towards nearest integer. mod Modulus (signed remainder after division). rem Remainder after division. sign Signum.

• Análisis de datos

max Largest component. min Smallest component.

mean Average or mean value. median Median value.

std Standard deviation. var Variance. sort Sort in ascending order. sum Sum of elements. prod Product of elements. hist Histogram. histc Histogram count. trapz Trapezoidal numerical integration. diff Difference and approximate derivative.

gradient Approximate gradient. cov Covariance matrix. filter One dimensional digital filter.

Page 77: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 15 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

filter2 Two dimensional digital filter conv Convolution and polynomial multiplication. convn N dimensional convolution

deconv Deconvolution and polynomial division. fft Discrete Fourier transform.

fftn N dimensional discrete Fourier Transform. ifft Inverse discrete Fourier transform. ifftn N dimensional inverse discrete Fourier Transform.

• Manipulación de matrices

norm Matrix or vector norm. normest Estimate the matrix 2 norm

rank Matrix rank. det Determinant.

trace Sum of diagonal elements. null Null space. orth Orthogonalization. inv Matrix inverse.

pinv Pseudoinverse. lscov Least squares with known covariance. eig Eigenvalues and eigenvectors. svd Singular value decomposition.

gsvd Generalized singular value decomposition. eigs A few eigenvalues. svds A few singular values.

polyeig Polynomial eigenvalue problem. expm Matrix exponential. logm Matrix logarithm. sqrtm Matrix square root.

Page 78: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 16 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

FUNCIONES DE REPRESENTACIÓN GRÁFICA • La función más importante es “plot”, que abre una ventana de figura

y representa en ella (en general) los datos que le son pasados como parámetros. Para representar x=f(t) se hará la llamada plot (t,x)

• Se puede incluir información sobre el formato del gráfico (color, tipo

de línea, etc). Las opciones posibles son las que se muestran a continuación (help plot):

• Permite realizar representaciones de varias señales en una misma

figura. Para ello simplemente se incluyen todas las variables en una misma llamada a plot.

* star + plus -- dashed x x-mark -. dashdot o circle : dotted . point - solid ^ triangle (up) < triangle (left) > triangle (right) v triangle (down) d diamond s square p pentagram h hexagram

y yellow m magenta c cyan r red g green b blue w white k black

Color

Tipo de línea

Page 79: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 17 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Funciones asociadas a plot:

loglog Log log scale plot. semilogx Semi log scale plot. semilogy Semi log scale plot.

polar Polar coordinate plot. zoom Zoom in and out on a 2 D plot. grid Grid lines.

subplot Create axes in tiled positions. plotedit Tools for editing and annotating plots. legend Graph legend.

title Graph title. xlabel X axis label. ylabel Y axis label. text Text annotation.

gtext Place text with mouse. Merece la pena especial atención a la función “subplot” que divide la pantalla gráfica (ventana de figura) en N filas y M columnas. El formato función es subplot (N, M, J), donde J es la sub-figura sobre la que se quiere dibujar. • Funciones asociadas a las figuras en general

figure Create figure window.

clf Clear current figure. close Close figure.

subplot Create axes in tiled positions. cla Clear current axes. axis Control axis scaling and appearance. hold Hold current graph.

ishold Return hold state. line Create line. text Create text.

Page 80: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 18 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

surface Create surface. image Create image.

set Set object properties. get Get object properties.

drawnow Flush pending graphics events. Ejemplo: Representar una señal senoidal y otra cosenoidal en la misma figura entre 0 y 6π (3 periodos de la señal senoidal). Se haría de la siguiente forma:

t=(0:0.1:6*pi) % el incremento de punto a punto de la gráfica será de 0.1

x=sin(t) % se crea el vector x, será la salida senoidal y=cos(t) % se crea el vector y, será salida cosenoidal

plot(t,x,’b’,t,y,’c+’) % se dibujan en la misma gráfica y con distintos formatos de ploteado (color y punteado)

Además, con las siguientes líneas de MATLAB se han incorporado los textos a la figura:

grid title(‘Ejemplo funcion seno y coseno’) xlabel(‘tiempo’) ylabel(‘seno/coseno’) gtext(‘valor nulo’) % y se coloca el texto en el punto deseado gtext(‘valor máximo’) % y se coloca el texto en el punto deseado gtext(‘valor mínimo’) % y se coloca el texto en el punto deseado

El resultado es una ventana figura como la que se muestra a continuación:

Page 81: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 19 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Se desea representar ahora las señales senoidal y cosenoidal en la misma ventana de figuras pero por separado, por lo que se usa subplot, de este modo:

subplot(2,1,1) % se elige la subfigura primera o superior: fila 1ª, columna 1ª

plot(t,x,'b') grid title(‘Ejemplo funcion seno’) xlabel(‘tiempo’) ylabel(‘seno’) subplot(2,1,2) % se elige la subfigura segunda o inferior: fila

2ª, columna 1ª plot(t,y,'c+') grid title(‘Ejemplo funcion coseno’) xlabel(‘tiempo’) ylabel(‘coseno’)

Page 82: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 20 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Tal y como se observa todas las funciones de dibujo se refieren a la sub-figura elegida con la función subplot. El resultado es el que se muestra a continuación:

0 2 4 6 8 10 12 14 16 18 20-1

-0.5

0

0.5

1Ejemplo funcion seno

tiempo

seno

0 2 4 6 8 10 12 14 16 18 20-1

-0.5

0

0.5

1

cose

no

tiempo

Ejemplo funcion coseno

FICHEROS *.M: SCRIPTS Y FUNCIONES. • Son archivos tipo ASCII (se realizan en cualquier editor ASCII,

aunque conviene usar el que tiene MATLAB para ello, pues incluye un depurador) que contienen una serie de órdenes incluso llamadas a otros ficheros *. M

• Ambas se pueden llamar desde la línea de comandos de MATLAB

o desde otra estructura similar

Page 83: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 21 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Los ficheros tipo scripts:

Están compuestos por llamadas a otras funciones de MATLAB (parecido a las llamadas realizadas por DOS en los ficheros *.BAT)

Puede utilizar las variables del entorno de trabajo (Workspace) y devuelve los resultados a este mismo entorno. Se trata por tanto de trabajo con variables globales

Se suelen utilizar para tareas de inicialización o de definición de un gran número de variables en el entorno de trabajo

• Por su parte, las funciones:

Comienzan con la palabra clave function en la primera línea del fichero

Es una aplicación (función) definida por el usuario a la que se le pasan parámetros y que permite devolver parámetros, de forma similar a funciones en ‘C’. La sintaxis para el paso de parámetros es la siguiente:

function [salida1, salida2,...] = nom_función(param1, param2,...)

Las variables que utiliza son, por tanto, locales a la función

(principal diferencia con los scripts) La función definida por el usuario se podrá invocar desde la

línea de comandos o desde cualquier script Deben de coincidir el nombre del fichero y el nombre de la

función a implementar Tras la primera línea (function... ) se inctroducen líneas de

comentario (comienzan por %), que serán la ayuda de la función que se presente en la ventana de comandos de MATLAB cuando se invoque a la ayuda de dicha función. Por ejemplo si se define la función prueba de este modo:

function prueba() %esta función no tiene parámetros de entrada ni de salida

Page 84: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 22 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Cuando se invoque a la ayuda de la función en la ventana de órdenes de MATLAB aparecerá lo siguiente:

>> help prueba >> esta función no tiene parámetros de entrada ni de salida

• Suele ser habitual utilizar sentencias de control (ver help lang) en la

escritura de las funciones y los scrips • Algunas de las funciones más habituales en las funciones y los

scrips

Input: Asigna un valor introducido por teclado a una variable. Muestra una cadena de caracteres.

Keyboard: Introduce un punto de ruptura en la secuencia de ejecución de la función. En ese momento se le permite acceder al usuario a las variables locales y globales del sistema. Se sale de este modo tecleando RETURN

Pause: Introduce una pausa en la ejecución de la función. Se continua con la ejecución pulsando cualquier tecla

Ejemplo: Crear una función llamada MEDIA que calcule el valor medio de un array.

function y=media(x) [m,n]=size(x); if m==1 %es por tanto un vector y=sum(x)/n; else error ('Debes de introducir un vector'); end

Page 85: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 23 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Realizar una función en MATLAB que permita resolver un sistema lineal de ‘n’ ecuaciones con ‘n’ incógnitas (siendo ‘n’ un valor cualquiera). El formato de llamada a la función debe ser el siguiente:

[sol,n_sol]=sistema(S) donde: • sol= vector que contiene las soluciones al sistema • N_sol= número de soluciones del sistema • S=matriz que contiene los coeficientes y términos independientes de

las n ecuaciones en el siguiente formato:

function [sol,n_sol]=prac2_1(S) %FUNCION QUE RESUELVE UN SISTEMA DE ECUACIONES [filas,columnas]=size(S); if (filas>columnas) error('Sistema de ecuaciones no correcto') else %vector formado por la ultima col Aux_1=S(:,columnas); %Se convierten los términos independientes a valor % positivo ya que el usuario los introduce como valor negativo Aux_1=Aux_1*(-1); columnas=columnas-1; %matriz cuadrada formada por los coeficientes de las variables Aux=S(:,1:columnas); Aux_inv=inv(Aux); %Aux_inv=Aux-1 sol=Aux_inv*Aux_1; %matriz solucion

052501325

023

=−−+−=−++

=−+−

cbacba

cba

−=

5- 2- 5 1-1- 3 2 52- 1 1 3

S

Page 86: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 24 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

[n_sol, a]=size(sol); %retorno del resultado end

Ejemplo: Crear una función llamada MAXIMO que devuelva el mayor de los elementos de un vector.

N=maximo(A) • N= número mayor de A; • A= vector enviado;

function x=maximo(A) % Se introduce un vector y se obtiene el valor maximo de él [m,n]=size(A); %Se saca el numero de columnas y filas if m==1 %Se trata de un vector long=length(A); i=2; sol=A(1); while (i<=long) if A(i)>=sol %Se compara si el valor actual es %mayor que el anterior. Si lo es sol=A(i); %se acumula end %fin del if i=i+1; end %fin del while x=sol; else error ('Introduce un vector y no una matriz'); end %fin del if principal

Page 87: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 25 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

3. EL USO DE SIMULINK • Herramienta gráfica incorporada a Matlab, que permite de forma

más fácil definir el modelo de sistemas de muy diferentes tipos (no solo LTI) y aplicaciones

• Los elementos de trabajo de un modelo de Simulink son objetos o

iconos, agrupados en librerías que proporciona el paquete integrado de Matlab para las distintas aplicaciones

• El fichero asociado a cada modelo es un *.MDL, que puede ser

abierto como un fichero *.M cualquiera (tiene una estructura especial pero el funcionamiento es el mismo)

• Se puede llamar a la librería de bloques de Simulink (ventana

Simulink) desde la ventana de comandos tecleando “Simulink”, o abrir directamente un fichero *.MDL

• Pasos a seguir para trabajar con Simulink:

1. Definición gráfica del modelo a simular con las librerías de Matlab para Simulink

2. Simulación del modelo y análisis de resultados, que se pueden mostrar directamente en Simulink o a través de Matlab enviando los resultados al entorno de trabajo

• Librerías de Simulink Posee librerías distribuidas en función de la

aplicación. Tiene una librería básica, llamada Simulink, con el siguiente contenido: Sources (fuentes de señal) Sinks (sumideros o almacén de resultados) Continuous Discrete No linear

Page 88: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 26 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Signals&Systems (buses, multiplexores y demultiplexores, puertos para enviar señales de un modelo a otro, etc.)

Math (trigonométricas, aritméticas, etc.) Funciones y tablas (llamadas a funciones de Matlab o de usuario

y tablas de look-up) ...

• Hay librerías específicas para cada aplicación (Blocksets y

Toolboxes):

Control (controladores ya diseñados) Control Borroso Control Neuronal Identificación Power DSP Fixed Point Comunicaciones RTW y xPC Tarjet Stateflow User Interface ...

• El usuario puede definir nuevas librerías a partir de algún modelo

realizado, mediante los bloques S-function

Page 89: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 27 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

OBJETOS BÁSICOS DE SIMULINK • Fuentes: Emisores de información (Generadores de señales, señal

rampa, impulso, ...)

• Procesos: Bloques de E/S de todos los tipos antes mencionados

• Destinos: Receptores de información

Page 90: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 28 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Conexiones: Son unidireccionales. Hipotéticos cables. CREACIÓN DE UN MODELO SIMULINK • Para generar un diagrama de bloques, una vez abierto un fichero

*.MDL nuevo y con ventana de Simulink, se sigue el siguiente proceso:

1. Se abre la librería donde se encuentra el elemento necesario. 2. Para copiar un objeto de la sesión de trabajo, basta con

seleccionar el objeto y arrastrarlo 3. Para hacer una conexión entre una salida y una entrada, se

posiciona el cursor sobre la salida de la fuente o la entrada, se pulsa el botón izquierdo del ratón y sin soltarlo se desplaza el cursor hasta el otro punto que se desea unir

4. Haciendo doble click sobre los elementos copiados se modifican los parámetros de éste. (Admiten parámetros que sean variables de Workspace)

Ejemplo Realizar el diagrama de bloques de la figura:

1. Se entra en Simulink y se abre una ventana nueva.

Page 91: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 29 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

2. Se abre la librería continuous y se copian los bloques sumador y F.T.

3. Se abre la librería sources y se copia el bloque escalón (step input)

4. Se abre la librería sinks y se copia el bloque scope 5. Se unen mediante el ratón los bloques. 6. Se editan los bloques para que aparezcan como en la figura (en

el bloque “Trasnfer Fcn” Numerator y Denominator han de contener los coeficientes del polinomio correspondiente en potencias decrecientes de ‘s’). En el ejemplo:

Numerator [1 2] Denominator [1 2 5]

7. Se salva el fichero (*.MDL).

Truco: Probar a definir los parámetros de configuración de los bloques mediante variables definidas previamente en el entorno de trabajo de MATLAB. De este modo se facilita el diseño de sistemas en base a un modo de funcionamiento prueba-error CONFIGURACIÓN DE LA SIMULACIÓN • Es importante configurar la simulación antes de realizarla. Para

ello, en el menú principal de la ventana del modelo (*.MDL) creado con Simulink ir a Simulation Parameters

• Permite configurar diferentes características sobre la simulación, a

saber:

La forma de resolver el sistema de ecuaciones diferenciales que componen el modelo diseñado en Simulink y al tiempo de simulación

Page 92: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 30 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Las variables de salida que ha de generar la simulación en el entorno de trabajo de MATLAB

Otros parámetros avanzados de simulación, como la

configuración de los avisos y errores que ha de generar la simulación por conexiones incorrectas, o la configuración de la compilación del modelo con la herramienta RTW

Page 93: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 31 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• Con respecto al paso de SIMULACIÓN, es necesario tener en cuenta ciertos aspectos básicos

El paso de simulación es el intervalo de integración de los

algoritmos de resolución del modelo Se puede definir variable (lo fija Simulink en función del modelo

concreto a simular) en todos los casos excepto en la generación de código RTW

Si el paso de simulación es muy bajo el tiempo de ejecución elevado (puntos excesivos), y si es muy bajo la resolución es peor (se pierde definición del sistema), pudiendo incluso llegar a no representar correctamente le comportamiento del sistema al no cumplir la teoría de sistemas muestreados (al fin y al cabo la simulación de sistemas continuos con Simulink pretende representar su comportamiento real en el tiempo)

Una regla práctica es hacer que el paso de simulación sea al menos de la décima parte del tiempo de subida de la respuesta del sistema

• Con respecto a las variables de salida de Simulink, es necesario

comentar también un punto:

Se pueden pasar las respuestas de las simulación al Workspace de MATLAB a través de los bloques “to Workspace” de Simulink

Convendrá también tener en el entorno de trabajo el array de tiempo con el que se ha generado la simulación

Éste se puede generar con un bloque “Clock” de Simulink y pasarlo a MATLAB del mismo modo, pero también se puede usar la variable tout que se genera automáticamente si así se indica en la configuración de la simulación

La variable yout que se genera del mismo modo contiene el resultado de las señales conectadas a puertos de salida del modelo de Simulink

Page 94: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 32 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Visualizar el resultado de la simulación del modelo del ejemplo anterior

Nota: Prestar atención a que la respuesta coincida exactamente con la aquí mostrada y modificar la configuración de los bloques de Simulink correspondientes para que así sea Ejemplo: Variar el modelo anterior para implementar el siguiente sistema. Visualizar desde MATLAB y desde Simulink los resultados (variable Salida frente al tiempo) Desde Simulink: con el bloque Scope:

Page 95: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 33 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Desde MATLAB:

>>plot(tout, Salida);

o >>plot(tiempo, Salida);

Page 96: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 34 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Truco: Se puede arrancar la simulación de un modelo preexistente (fichero *.MDL) con la función sim de MATLAB, con la siguiente sintaxis: [T,X,Y] = sim('modelo', [TInicio TFin] ,OPTIONS,UT) Donde los parámetros 2º al 4º de la llamada a sim son opcionales Ejemplo: Realizar el siguiente diagrama de bloques y representar desde MATLAB la señal de salida

¿Para qué sirve el multiplexor?

Page 97: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 35 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

4. LA TOOLBOX DE CONTROL DE MATLAB • Funciones de aplicación específica para ingeniería de control de

sistemas. Son ficheros *.M • Sirve tanto para control continuo como para control discreto,

clásico (en espacios transformados sobre sistemas LTI) y de otros tipos (variables de estado, borroso, neuronal, robusto, no lineal, etc.)

• En los dos campos permite realizar tareas de: modelado,

conversión de modelos y análisis de respuesta temporal, frecuencial y en espacios transformados

• Las herramientas para obtención de los modelos de los sistemas

se encuentran en otra Toolbox: la de identificación • Todas las funciones de control se encuentran en la demo de

control que se ejecuta con el comando MATLAB: ctrldemo MODELADO DE SISTEMAS DE CONTROL CONTINUO • Las funciones de la toolbox en MATLAB permiten trabajar solo

sobre sistemas lineales e invariantes continuos y discretos en el tiempo, y en espacio transformado

• Permiten representar los sistemas LTI mediante 4 modelos

diferentes en los espacios transformados (‘s’ para sistemas continuos y ‘z’ para sistemas discretos):

Función de transferencia Función Polo-Cero Descomposición en fracciones simples Variables de Estado

Page 98: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 36 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

FUNCIÓN DE TRANSFERENCIA • El formato Función de Transferencia (FT) corresponde con

representaciones del siguiente tipo:

t-jt

2-j2

1j1

n-mn

2-m2

1-m1

s*b ... s*bs*bsa ... s*as*a

den(s)num(s) H(s)

++++++== −

• ¿Cómo se introduce en MATLAB una FT?: creando dos vectores

que contengan el valor de los coeficientes del numerador y denominador del sistema en el espacio transformado correspondiente

Ejemplo: Obtenga el modelo MATLAB del siguiente sistema en formato FT:

5)1)(s4s(s12s3sH(s) 2

2

+++++=

A través de un fichero script, o de comandos de MATLAB:

num=[3 2 1]; %numerador den1=[1 4 1]; %primer polinomio del denominador den2=[1 5]; %segundo polinomio del denominador den=conv(den1,den2); %multiplicación de dos polinomios

FORMATO POLO–CERO • El formato polo–cero corresponde con representaciones del

siguiente tipo:

)p-)...(sp-)(sp-)(sp-(s)z-)...(sz-)(sz-)(sz-(skH(s)

n321

n321=

Page 99: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 37 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

• ¿Cómo se introduce en MATLAB un sistema en este formato?: en este caso se crean dos vectores que contengan el valor de los polos y los ceros (raíces del denominador y del numerador respectivamente) de la función de transferencia del sistema a representar

Ejemplo: Obtenga el modelo MATLAB del siguiente sistema en formato cero-polo:

5)4)(s3)(s(s2)1)(s(s4H(s)

+++++=

Mediante un fichero script:

K=4; %constante del sistema Z=[-1 –2]; %ceros del sistema P=[-3 –4 –5]; %polos del sistema

CONVERSIÓN ENTRE FORMATOS • Las siguientes funciones permiten realizar conversiones entre los

distintos formatos de representación de sistemas

residue Expansión en fracciones parciales roots Obtiene las raíces de un polinomio poly Obtiene un polinomio desde sus raíces conv Permite multiplicar polinomios tf2zp De FT a formato polo–cero zp2tf De formato polo–cero a FT

c2dm, d2c Conversión entre el mundo discreto y el continuo printsys Imprime la función de transferencia de un sistema

Page 100: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 38 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Transformar de formato función de transferencia a formato polo cero la siguiente función:

)102)(10010()2()1)(10(20

)()()( 3422

3

−++++++==

ssssssss

sDsNsG

En MATLAB:

num1=10; num2=[1 10]; %(s+10) num3=[1 0 0 1]; % (s^3+1) NUM=conv(num1,(conv(num2,num3))); den1=[1 0]; % (s) den2=[1 2]; % (s+2) den2=conv(den2,den2); %Generando (s+2)^2 den3=[1 10 100]; %(s^2+10s+100) den4=[1 2 0 0 -10]; %(s^4+2s^3-10) DEN=conv(den1,conv(den2,conv(den3,den4))); [Z,P,K]=tf2zp(NUM,DEN); %CONVERSIÓN A CERO POLO

Ejemplo: Transformar de formato polo-cero a formato función de transferencia la siguiente función:

)2()3)(4()1()( 2342

3

++++++=

sssssssH

Page 101: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 39 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

En MATLAB:

Z=[-1; -1; -1 ]; %(s+1)^3 D1=roots([1 5 2]); %Obtención de las raíces de (s^2+5s+2) B=[1 3]; D2=roots(conv(B,B)); %(s+3)^2 P=[4; D2; D1]; k=1; [NUM,DEN]=zp2tf(Z,P,k);

Si una vez hecho esto, se hace desde la ventana de comandos una llamada a printsys(NUM,DEN), el resultado es el siguiente:

s^3 + 3 s^2 + 3 s + 1

---------------------------------------------------- s^5 + 7 s^4 - 3 s^3 - 107 s^2 - 210 s - 72

GENERACIÓN DE DIAGRAMA DE BLOQUES, CONEXIÓN DE SISTEMAS • La toolbox de MATLAB para control incluye también funciones

para resolver las funciones de transferencia expresadas mediante diagrama de bloques

• Las siguientes funciones permiten realizar conexiones entre los

distintos bloques que conforman un sistema de control

cloop Cierra el lazo realimentación unitaria feedback Conexión mediante realimentación

series Conexión en serie de modelos parallel Conexión en paralelo de sistemas

Page 102: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 40 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Obtener la función de transferencia total del sistema que se muestra a continuación, suponiendo que se parte del conocimiento del numerador y el denominador de cada bloque del diagrama

en MATLAB, de la siguiente forma:

[NUM,DEN]=feedback(NUMZP, DENZP, NUMTF,DENTF,-1); [NUM,DEN]=cloop(NUM, DEN,-1);

Step Input

+-

Sum

+-

Sum1

25s+10

Transfer Fcn

(s-1)(s-2)(s-3)(s+1)(s+3)(s-4)

Zero-Pole Auto-ScaleGraph

Page 103: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 41 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

5. FUNCIONES DE ANÁLISIS DE SISTEMAS CONTINUOS DE LA TOOLBOX DE CONTROL (I) • Conjunto de instrucciones que facilitan el análisis de la respuesta

temporal, frecuencial y lugar de las raíces de un sistema de control. • En este punto solo se van a presentar las funciones relacionadas

con el análisis temporal RESPUESTA TEMPORAL • Se usa para obtener características temporales del régimen

transitorio y del permanente o estacionario, de la respuesta de un sistema a entradas diversas

• Las funciones de la toolbox de MATLAB utilizadas para generar

respuestas temporales ante entradas variadas, son las siguientes

step Respuesta a un escalón impulse Respuesta a un impulso

lsim Entrada aleatoria ginput Averiguar valores de un determinado punto de la gráficadamp Permite obtener ωωωωn y ξξξξ dcgain Permite obtener la ganancia estática de una FT

Nota: Las funciones step e impulse generan automáticamente una gráfica de la respuesta temporal, en caso de no pedir ningún valor de salida

Page 104: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 42 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Dado el siguiente sistema determinar su respuesta al impulso y al escalón:

11)(+

=s

sH

La respuesta al impulso se obtendrá mediante el siguiente comando:

>>impulse([1],[1 1]);

Impulse Response

Time (sec)

Am

plitu

de

0 1 2 3 4 5 60

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Page 105: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 43 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Posteriormente se llama a la función step, obteniéndose el resultado gráfico que se muestra a continuación:

>>step([1],[1 1]);

Step Response

Time (sec)

Am

plitu

de

0 1 2 3 4 5 60

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Page 106: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 44 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

6. FUNCIONES DE ANÁLISIS DE SISTEMAS CONTINUOS DE LA TOOLBOX DE CONTROL (II) • La toolbox de control de MATLAB posee un conjunto de funciones

que permiten realizar fácilmente trazados del Lugar de las Raíces de un sistema realimentado, así como sacar información a partir de éste

• Las funciones relacionadas con el trazado del Lugar de las Raíces

se muestran en la siguiente tabla

Nota: la función rlocus abre directamente una ventana de figura nueva y dibuja en ella el Lugar de las Raíces del sistema cuya F(s) (o F(z))se pasa como parámetro. Sin embargo, la función rlocfind necesita de la ejecución previa de la anterior para operar Ejemplo: Se desea conocer el trazado del Lugar de las Raíces del sistema siguiente:

1

s +1.5s+82

Transfer Fcn1

s+13

s+10Transfer Fcn

K

Gain

rlocus Trazado del Lugar de las Raíces (para ss. continuos y discretos)

rlocfind Identificación concreta de un punto del lugar pzmap Representación del diagrama de polos y ceros sgrid Red de obtener ωωωωn y ξξξξ en el plano ‘s’

Page 107: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 45 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Para resolverlo se ejecuta desde MATLAB el siguiente conjunto de comandos:

NUMG=[1 13] %Numerador de G(s) DENG=[1 10] %Denominador de G(s) NUMH=[1] %Numerador de H(s) DENH=[1 1.5 8] %Denominador de H(s) N=conv(NUMG,NUMH) %Numerador de G(s)H(s) D=conv(DENG,DENH) %Denominador de G(s)H(s) rlocus(N,D) sgrid

Root Locus

Real Axis

Imag

Axi

s

-12 -10 -8 -6 -4 -2 0

-40

-30

-20

-10

0

10

20

30

40

40

35

30

25

20

15

10

5

40

35

30

25

20

15

10

5

0.7

0.4

0.28 0.19 0.135 0.095 0.06 0.03

0.7

0.4

0.28 0.19 0.135 0.095 0.06 0.03

Page 108: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 46 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Obtenga para el sistema del ejemplo anterior cuál es el valor de K que hace al sistema inestable Dicho valor será aquél que haga que las raíces del lugar representado anteriormente tengan parte real positiva. Para poder obtener dicho valor se utiliza la función rlocfind, de esta forma:

>> rlocfind(N,D) Obteniéndose el siguiente resultado en la ventana de comandos de MATLAB:

>>Select a point in the graphics window >>selected_point =

0.0482 +12.6479i >>ans =

136.2106 Truco: Si se desea conocer además el valor que tienen todas las raíces del sistema en lazo cerrado para esa K se deberá recoger como parámetro de salida de rlocfind un vector que contendrá el dichos valores de este modo:

>>[K,raices]= rlocfind(N,D)

Page 109: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 47 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Ejemplo: Si se desea que el sistema tenga una respuesta con coeficiente de amortiguación de valor 0.1, indique cuál sería el valor de K necesario y compruebe el resultado con la función step Para conocer el valor de K con ξξξξ=0.1 se redibuja el Lugar de las Raíces son rejilla y se invoca a la función sgrid de este modo

>> sgrid(0.1,2) Donde el valor de ωn se ha fijado sin ningún criterio concreto Después se llama vuelve a llamar a la función rlocfind, y se obtiene el valor de K que será el fijado en el diagrama de bloques de Simulink que permite obtener la espuesta al escalón del sistema en lazo cerrado. El resultado se muestra en la figura siguiente:

0 2 4 6 8 10 12 14 16 18 20-5

0

5

10

15

20

Page 110: Simulink Tutorial Completo

“Introducción a MATLAB, Toolbox de Control y Simulink”

Pág 48 Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

Para comprobar si la respuesta coincide con la de un sistema de segundo orden típico, se obtiene el valor de Mp correspondiente al coeficiente de amortiguación comentado. Calculando dicho valor el resultado es de 72.9% Como se observa, el Mp es mayor. Esto se debe a que el sistema en lazo cerrado tiene además un cero y otro polo que no es del todo dominante

Page 111: Simulink Tutorial Completo

Universidad Pontificia Comillas

E.T.S.I – I.C.A.I

Departamento de Electrónica y Automática

Manual de referencia de

MATLAB & SIMULINK

Febrero 2000

Adolfo Anta Martínez

Juan Luis Zamora Macho Ramón Rodríguez Pecharromán

Page 112: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

2

Tabla de Contenidos

1. INTRODUCCIÓN................................................................................................................... 3

2. FUNCIONES MATEMÁTICAS COMUNES .......................................................................... 4

3. CARACTERÍSTICAS DE LA VENTANA DE COMANDOS ................................................. 6

3.1. CÓMO UTILIZAR EL WORKSPACE ....................................................................................... 6

3.2. FORMATOS DE NÚMEROS ................................................................................................. 6

3.3. GESTIÓN DE DIRECTORIOS ............................................................................................... 6

4. M-FILES ................................................................................................................................ 7

5. OPERACIONES CON VECTORES...................................................................................... 9

6. REPRESENTACIONES GRÁFICAS .................................................................................. 11

6.1 LA FUNCIÓN PLOT .............................................................................................................. 11

6.2 ESTILOS DE LÍNEA, MARCAS Y COLORES.............................................................................. 12

6.3 FIJAR REJILLAS, EJES, Y ETIQUETAS.................................................................................... 13

7. TOOLBOX DE CONTROL ................................................................................................. 16

7.1 REPRESENTACIÓN DE UN SISTEMA ...................................................................................... 16

7.2 FUNCIONES ESPECÍFICAS ................................................................................................... 17

7.3 LTIVIEW .......................................................................................................................... 20

8. AYUDA................................................................................................................................ 22

8.1. EL COMANDO HELP ........................................................................................................ 22

8.2. LA VENTANA DE AYUDA................................................................................................... 22

9. SIMULINK ........................................................................................................................... 23

9.1 INTRODUCCIÓN .................................................................................................................. 23

9.2 CONSTRUCCIÓN DEL MODELO............................................................................................. 24

9.3 SIMULACIÓN ...................................................................................................................... 27

9.4 MODELADO DE UN SISTEMA FÍSICO...................................................................................... 28

Page 113: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

3

1. Introducción MATLAB es una aplicación destinada a cálculos matemáticos, si bien dispone de

ciertas funciones destinadas a temas más específicos, como por ejemplo la ToolBox

de control, que facilita el estudio de sistemas dinámicos y su regulación.

Además, existe un complemento de MATLAB llamado SIMULINK, que nos permite un

enfoque más gráfico de los sistemas de control.

Al ejecutar MATLAB, aparecerá una ventana en blanco, llamada ventana de

comandos. La forma de trabajar con MATLAB es como con cualquier calculadora:

» 4*2 [ pulsamos enter]

ans =

8

A su vez, podemos usar variables para realizar nuestros cálculos:

» precio = 17;

» iva =0.16;

» precio_total =17 * (1+iva)

precio_total =

19.7200

Acabamos de crear tres variables, cuyo valor se guardará en memoria. En las dos

primeras sentencias se incluye un punto y coma al final, con lo que el resultado no

aparecerá por pantalla. El nombre que elijamos para nuestras variables tiene algunas

restricciones: no pueden tener un espacio intermedio, se distinguen mayúsculas de

minúsculas, y deben empezar por una letra.

Si queremos ver las variables que tenemos definidas, teclearemos el comando who:

» who

Your variables are:

iva precio precio_total

Por supuesto, se puede sobreescribir el nombre de una variable:

» iva =0.13;

(el programa no nos avisará de que esa variable ya existe) .

Para borrar todas las variables, existe el comando clear: tecleando clear iva borraría

esta variable , pero si escribimos sólo clear, borrará todo lo que hay en memoria; por

desgracia, una vez eliminadas, las variables no se pueden recuperar.

Podemos recuperar cualquier instrucción escrita previamente pulsando la tecla del

cursor . Para detener la ejecución de cualquier instrucción, hay que pulsar la

combinación de teclas Ctrl+C.

Page 114: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

4

2. Funciones matemáticas comunes MATLAB incluye ciertas funciones que nos permiten realizar cálculos más

complejos que sumar y restar. Para usar estas funciones, se procede de igual manera

que en una calculadora programable; por ejemplo, para realizar una operación que

incluya una raíz cuadrada escribimos:

» x = 3 - sqrt (5/6) * 2

x =

1.1743

Una lista breve de las funciones de MATLAB sería:

FUNCIONES HABITUALES

abs(x) Valor absoluto de x. Si x es un número complejo, abs(x) nos da su módulo

acos(x)1 arco coseno de x

asin (x) arco seno de x

atan (x) arco tangente de x. Devuelve un ángulo entre -90º y 90º

atan2(x,y) arco tangente de x entre y. Devuelve un ángulo entre 0º y 360º

cos (x) coseno de x

sin (x) seno de x

tan (x) tangente de x

exp (x) exponencial ex

log(x) logaritmo neperiano de x

log10 (x) logaritmo en base 10 de x

rem(x,y) resto de la división x / y

unwrap(x) sitúa el ángulo x entre pi y -pi

roots(x) halla las raíces del polinomio x

fzero('f(x)',n)

(ej.- f(x)= 'x^2+x+3' )

encuentra la solución de la ecuación f(x)=0; n es el valor por donde empieza a iterar para hallar la solución.

sqrt(x) raíz cuadrada de x

angle (x) ángulo de x

real(x) parte real de x

imag(x) parte imaginaria de x

1MATLAB trabaja únicamente en radianes.

Page 115: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

5

Es recomendable trabajar con atan2 en vez de atan, pues si la parte real del número

complejo es negativa, el ángulo quedará en el segundo o tercer cuadrante. Por

ejemplo:

» 180/pi*atan(-2/3)

ans =

-33.6901

» 180/pi*atan(2/-3)

ans =

-33.6901

» 180/pi*atan2(-2,3)

ans =

-33.6901

» 180/pi*atan2(2,-3)

ans =

146.3099

Para la función atan los números complejos -2+3j y 2-3j tienen la misma fase; atan2,

sin embargo, nos da el ángulo correcto. Se ha multiplicado por 180/pi para obtener el

resultado en grados2.

Para definir un número complejo, se puede usar i o j como unidad imaginaria

indistintamente:

» c1=-1+2j

c1 =

-1.0000 + 2.0000i

» c1=-1+2i

c1 =

-1.0000 + 2.0000i

2 La constante pi viene definida por defecto en MATLAB

Page 116: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

6

3. Características de la ventana de comandos

3.1. Cómo utilizar el Workspace

Todas las variables que hemos definido se guardan en el Workspace, que no es

más que el espacio de memoria que utiliza MATLAB.

Aparte de crear y borrar variables, resulta útil guardar sesiones de trabajo, es decir,

todas las instrucciones que hemos tecleado en la ventana de instrucciones. Para ello,

al inicio de la sesión tecleamos diary <nombre del fichero>. Podemos elegir el tipo de

archivo, si bien es recomendable que éste sea de texto (por ejemplo, diary

c:\regulación\resumen.txt). Para que deje de grabar la sesión teclearíamos diary off.

También podemos guardar únicamente el valor de algunas variables:

» save c:\regulación\datos x y

Aquí no es necesario añadir la extensión, y MATLAB creará el fichero con extensión

.mat. Las variables x e y han de estar previamente definidas.

Para recuperar las variables guardadas teclearemos:

» load datos

3.2. Formatos de números

Se habrá observado que por defecto todos los números nos aparecen con cuatro

decimales. Se puede cambiar el formato de salida seleccionando el menú

File\Preferences. Cabe destacar que, con el formato que aparece por defecto, algunos

números pueden aparecer por pantalla como 0.0000, aunque realmente no son 0 (sino

3.5·10-7, por ejemplo).

3.3. Gestión de directorios

Por defecto, al arrancar MATLAB empezamos en el directorio matlab\bin,

mientras que nuestros ficheros (M-files o modelos de SIMULINK) suelen estar en otras

carpetas.

Para "movernos" en MATLAB, usaremos los comandos típicos de MS-DOS: cd

para acceder a un directorio, dir para ver el contenido de un directorio, cd.. para salir

de una directorio.

Page 117: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

7

4. M-files Cuando realizamos cálculos simples, es habitual escribir las instrucciones en la

ventana de comandos. Sin embargo, cuando se van a realizar una serie de

operaciones más complicadas y de forma repetitiva, se utilizan los llamados M-Files;

son ficheros de texto donde tecleamos las instrucciones de MATLAB. Para crear un

nuevo archivo M, hacemos clic en File\New\M-File; nos aparecerá una ventana en

blanco para editar el archivo. Por ejemplo:

% Mi primer programa en MATLAB3

comp1=-2+3i;

comp2=-10+5i;

comp=comp1+comp2;

modulo=abs(comp)

fase=unwrap(180/pi*phase(comp))

Una vez guardado el archivo (con el nombre trabajo.m, por ejemplo), nos bastará

teclear su nombre en MATLAB, y se ejecutará directamente:

» trabajo

modulo =

14.4222

fase =

140.0267

Supongamos que queremos que este programa sirva no sólo para los complejos

comp1 y comp2. Para ello, bastará con borrar las dos primeras líneas del programa

anterior. Ahora tendremos que definir antes el valor de comp1 y comp2 (si no,

MATLAB nos dará un error diciendo que las variables comp1 y comp2 no están

definidas):

» comp1=-3+2i;

» comp2=-10+j;

» trabajo

modulo =

13.3417

fase =

160.7222

3 El símbolo % indica que esa línea es comentario.

Page 118: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

8

También podíamos hacer que el programa pidiese los números complejos al usuario

(pues éste no tiene por qué saber qué es comp1 y comp2):

comp1=input('Introduzca el primer número complejo -> ');

comp2=input('Introduzca el segundo número complejo -> ');

comp=comp1+comp2;

modulo=abs(comp)

fase=unwrap(180/pi*phase(comp))

Page 119: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

9

5. Operaciones con vectores Hasta ahora, todas las variables utilizadas eran escalares. Por supuesto, también se

pueden definir vectores. Por ejemplo, queremos hallar el valor de seno (x) para

0 < x < . Como es imposible hallar todos los valores (hay infinitos puntos), debemos

definir una serie de valores de x. Si tomamos 11 puntos, definiremos x de la forma:

» x=[0 0.1*pi 0.2*pi 0.3*pi 0.4*pi 0.5*pi 0.6*pi 0.7*pi 0.8*pi 0.9*pi pi]

x =

Columns 1 through 7

0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850

Columns 8 through 11

2.1991 2.5133 2.8274 3.1416

Tal como hemos visto, para crear un vector fila es necesario escribir entre corchetes

los elementos, separados por un espacio o una coma

Si ahora escribimos sin (x), hallaremos el seno de todos los valores de x:

» y=sin(x)

y =

Columns 1 through 7

0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511

Columns 8 through 11

0.8090 0.5878 0.3090 0.0000

Para manejar un único elemento del vector, por ejemplo seno(0.5*pi), nos referiremos

a él como el elemento 6 del vector y:

» y(6)

ans =

1

Si queremos utilizar los 5 primeros elementos, escribiremos y(1:5), y para tomar del

elemento 7 al último teclearemos y(7:end)

En caso de querer representar la función seno(x), necesitaríamos bastantes más de 11

elementos para obtener una gráfica aceptable. Escribir 1000 elementos resultaría

bastante tedioso. Como era de suponer, existe una forma “automática” de crear un

vector. La instrucción es: x= (valor_inicial:incremento:valor_final). Por ejemplo:

X=(0:0.01:pi); %Esta instrucción nos crea un vector x con valor inicial x, valor

%final pi, y la diferencia entre elementos consecutivos es 0.01*pi

Page 120: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

10

Es muy recomendable escribir el "; " al final de la sentencia, pues si no aparecerán

cada uno de los elementos del vector por pantalla: 0, 0.01pi, 0.02pi , y así hasta pi.

Las diferentes formas de crear un vector aparecen resumidas en la siguiente tabla:

Construcciones básicas de vectores

X = [2 2*pi sqrt(2) 2-3j] Crea un vector con los elementos espeficados

X = primero : ultimo Crea un vector empezando en primero, incrementando una unidad en cada elemento, acabando en el elemento ultimo

X=primero:incremento:ultimo En este caso, el incremento no es 1 sino que es fijado por nosotros

X=linspace(primero, ultimo,n) Crea un vector empezando en primero, acabando en ultimo, con n elementos

X=logspace(primero, ultimo,n) Crea un vector logarítmico

De igual manera, se pueden crear matrices, escribiendo un "; " para indicar que es una

fila distinta:

» x= [ 2 3 ; 2 5 ]

x =

2 3

2 5

Page 121: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

11

6. Representaciones gráficas

6.1 La función plot

Para representar gráficos en dos dimensiones, es habitual utilizar el comando

plot(eje x, eje y). Por ejemplo, si quisiésemos representar la función seno:

» x = (0:0.01:2*pi);

» y = sin(x);

» plot (x,y)

Debería aparecernos una ventana del tipo Figure:

Fig 1. Representacion gráfica de funciones con el comando plot

Esta gráfica se puede ampliar, reducir , cambiar su color y copiar para utilizarla en otro

documento.

Si ya teníamos abierta una ventana Figure, al usar plot, desaparecerá la gráfica

anterior sin previo aviso. Para evitarlo, añadiremos una nueva ventana tecleando

figure en MATLAB. Es posible dibujar más de una gráfica en una ventana, escribiendo

plot(eje x1, eje y1, eje x2, eje y2,...); por ejemplo:

Page 122: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

12

» z = cos(x);

» plot(x,y,x,z)

También podemos dividir la ventana en varias partes con el comando subplot (m,n,i).

La ventana Figure se dividirá en una matriz de m por n pequeñas ventanas, y se

seleccionará la ventana i-ésima. Por ejemplo:

subplot(2,1,1); %La ventana Figure se dividirá en dos; selecionamos la primera

plot(x,y) %Representamos y=sin(x)

subplot(2,1,2); %Ahora selecionamos la segunda

plot(x,z) %Representamos z=cos(x)

0 1 2 3 4 5 6 7-1

-0.5

0

0.5

1

0 1 2 3 4 5 6 7-1

-0.5

0

0.5

1

Fig 2. Representación de varias gráficas con subplot

Page 123: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

13

6.2 Estilos de línea, marcas y colores

Es posible modificar el color y estilo de las gráficas. Para ello, existen ciertos

parámetros que admite la función plot, y han de introducirse como un tercer

argumento, después de cada par de variables.

Símbolo Color Símbolo Marca Símbolo Estilo de líneab Azul . Puntos - línea continua

g Verde O Círculos : línea punteada

r Rojo x cruces -. puntos y rayas

c Cyan + más -- discontinua

m Magenta * estrellas

y Amarillo s cuadrados

k Negro d diamantes

w Blanco p pentagramas

Por ejemplo:

» plot( x, y, 'rx', x, z, 'o--')

Fig 3. Estilos de línea y colores con la función plot

Page 124: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

14

6.3 Fijar rejillas, ejes, y etiquetas

– Para fijar una cuadrícula en la ventana Figure, basta con teclear grid on. Para

quitarla, escribimos grid off.

– Podemos escribir los nombres de los ejes y de la gráfica:

» title('Representación de las funciones seno y coseno’'), xlabel ('variable

independiente'), ylabel ('variables dependientes')

– Podemos escribir en el gráfico con la función gtext:

» gtext('cos(x)')

Al pulsar enter nos aparecerá la ventana Figure; con el ratón podemos decidir

dónde situar el texto

– Existe también el comando legend, cuya función es similar a la de gtext:

» legend (‘variable Y’, ‘variable Z’)

El cuadro de la leyenda se puede situar donde queramos, arrastrandolo con el

ratón.

– También se puede cambiar los ejes, con el comando axis:

La estructura a escribir es: axis ([xmin xmax ymin ymax])

» axis([0 2*pi -1.5 1.5])

Para volver al autoescalado, teclearemos axis auto. Otra forma de ampliar o

reducir las gráficas es usando la función zoom. Los comandos zoom y legend no

pueden estar activos a la vez, pues los dos responden al clic del ratón.

– Se puede tomar valores de una gráfica con la instrucción ginput. Una vez

tecleado ginput, nos aparecerá la ventana Figure, y con el ratón haremos clic en

el punto que queramos conocer. Después pulsaremos enter y el valor de las

coordenadas del punto aparecerán en la ventana de comandos de MATLAB.

Después de todas estas operaciones, la gráfica resultante es:

Page 125: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

15

0 1 2 3 4 5 6-1.5

-1

-0.5

0

0.5

1

1.5Representación de las funciones seno y coseno

variable independiente

variables dependientes sen(x)cos(x)

variable Zvariable Y

Fig 4. Edición de figuras en MATLAB

Page 126: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

16

7. Toolbox de control 4

7.1 Representación de un sistema

El primer problema que se nos plantea es la definición de un sistema. Los

sistemas se suelen expresar en forma de función de transferencia. Ésta se puede

expresar como cociente de polinomios, con la instrucción tf : escribiremos entre

corchetes los coeficientes de numerador y denominador (en sentido descendente de

las potencias de la variable s).

» planta = tf ( [ 1 1] , [3 2 5] );

nos definiría 523

1)( 2

SSSsF

De esta representación, podemos quedarnos únicamente con el numerador y/o

denominador:

» [num,den] = tfdata (planta , ' v ' )5

num = 0 1 1

den =

3 2 5

u obtener los polos y ceros del sistema:

» [z,p,k] = tf2zp (num,den);

z =

-1

p =

-0.3333 + 1.2472i

-0.3333 - 1.2472i

k =

0.3333

, donde k no es la ganancia estática, sino la que se obtiene al expresar la función de

transferencia en forma de polos y ceros.

También podemos obtener la descomposición en fracciones simples:

» [r, p, k] = residue (num,den)

r =

0.1667 - 0.0891i

0.1667 + 0.0891i

4 Teclear ctrldemo para ver una demostración de las posibilidades que ofrece esta Toolbox 5 El argumento 'v' se incluye para obtener numerador y denominador en forma de vectores

Page 127: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

17

p =

-0.3333 + 1.2472i

-0.3333 - 1.2472i

k =

[]

El coeficiente k representa el término independiente, que valdrá 0 siempre que el

orden del numerador sea inferior al del denominador.

Es decir, F(s) también se puede expresar como:

1.2472 j 0.3333S0.0891 j 0.1667

1.2472 j- 0.3333S0.0891 j - 0.1667 )(

sF

7.2 Funciones específicas

Existen diversos comandos en MATLAB para dibujar gráficos de respuesta en

frecuencia:

» bode (planta) % Diagrama de Bode

» pause

» nichols (planta) % Diagrama de Black

» pause

» nyquist (planta) % Diagrama de Nyquist desde w = - hasta w = +

Si no incluyesemos la instrucción pause, nos aparecerá únicamente la última gráfica

(el diagrama de nyquist en nuestro ejemplo); de esta manera, nos mostrará el primer

diagrama, y no pasará al siguiente hasta pulsar cualquier tecla.

Si queremos dibujar un diagrama para unas pulsaciones determinadas, es necesario

definirse previamente el vector de pulsaciones w:

» w = logspace (-2, 3, 1001); % Creamos vector w, con valor inicial en 10-2, valor

% final = 103, con 1001 puntos

» bode (planta,w)

Podemos hallar también los márgenes de ganancia y/o fase y pulsaciones asociadas:

» [ganancia, fase] =bode (planta);

» [Mg,Mf,wu,wo]=margin (ganancia,fase,w)

Mg =

7.3343

Page 128: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

18

Mf =

Inf

wu =

1.8258

wo =

NaN

En este caso, no tenemos margen de fase, y por tanto no existe la pulsación de cruce

(el término NaN significa Not-A-Number).

Existen también funciones para dibujar el lugar de las raíces:

» rlocus(planta)

-4 -3 -2 -1 0 1-1.5

-1

-0.5

0

0.5

1

1.5

Real Axis

Imag Axis

Fig 5. Lugar de las raíces de la función de transferencia "planta"

Con este gráfico, es posible diseñar para obtener unos polos determinados. Para

obtener mayor precisión, es conveniente dibujar una rejilla radial:

» zeta=0:0.1:1; % Definimos y wn

» wn=1:10;

» sgrid(zeta,wn) % Nos muestra rectas de pendiente zeta y

% circunferencias de radio wn

» zoom

Page 129: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

19

Y ahora hallamos la ganancia necesaria para obtener los polos

» [gan,polos]=rlocfind(planta) % Aparece un cursor en la ventana del

% lugar de las raíces

Select a point in the graphics window

selected_point =

-1.0554 + 1.4078i

gan =

4.3339

polos =

-1.0557 + 1.4131i

-1.0557 - 1.4131i

Otras funciones útiles de esta Toolbox son:

dcgain(sistema) Halla la ganancia estática del sistema

[num,den]=pade(T, n) Devuelve el numerador y denominador de una aproximación de Pade de e-TS, de orden n

minreal(sistema) Simplifica la función de transferencia de sistema

Para empezar a simular con nuestra función de transferencia, existen numerosas

funciones en MATLAB(step, impulse), si bien lo más sencillo es utilizar SIMULINK o

LTIVIEW.

Page 130: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

20

7.3 LTIVIEW

Todo lo que hemos visto hasta ahora se puede hacer con un único comando de

forma más intuitiva. Para ello, tecleamos ltiview. Nos aparecerá la siguiente pantalla:

En el recuadro Workspace nos aparecen todas las funciones de transferencia

que hemos definido. Para seleccionar una de ellas, hacemos doble clic. En Plot Type,

podemos elegir el tipo de gráfica: ante un escalón, diagrama de Bode, Nyquist, lugar

de las raíces, etc; además, al seleccionar uno de ellos, nos aparecerá en Plot Options

varias posibilidades; por ejemplo, para un escalón, nos muestra el tiempo de

establecimiento, pico ,etc.; y para cualquier diagrama de respuesta en frecuencia,

podemos ver el margen de fase y ganancia de nuestra planta.

Funciones de transferencia

Fig 6. Pantalla del LTIVIEW Tipo de gráfica

Page 131: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

21

Al seleccionar una de estas opciones, nos aparecerá un punto en la gráfica; para ver

cuál es el valor en concreto, es necesario mantener pulsado el ratón en ese punto.

Fig 7. Análisis de sistemas con LTIVIEW

Page 132: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

22

8. Ayuda Existen demasiados comandos en MATLAB para poder recordarlos. Para

facilitarnos la labor, se ha creado un archivo de ayuda al cual podemos recurrir en todo

momento.

8.1. El comando help

Para recurrir a la ayuda, basta con teclear help nombre_de_función. Si escribimos help

a secas, nos aparecerá una lista de categorías de las funciones disponibles. Por

ejemplo:

» help sqrt

SQRT Square root.

SQRT(X) is the square root of the elements of X. Complex

results are produced if X is not positive.

See also SQRTM

El comando help nos muestra una pequeña descripción de la función, y también una

serie de comandos relacionados (en este caso sqrtm, que nos permite hacer raíces

cuadradas de matrices).

Aunque en la ayuda aparezca la función en mayúsculas, al usarla hemos de escribirla

en minúscula (pues SQRT daría error).

Si no conocemos en concreto el nombre de la función, podemos usar el comando

lookfor:

»lookfor complex

nos mostrará todas las funciones relacionadas con números complejos.

También es útil el comando demo , que nos mostrará una pantalla con demostraciones

de todas las posibilidades que ofrece MATLAB.

8.2. La ventana de ayuda

Existe una ventana específica para la ayuda de MATLAB. Para que aparezca,

escribimos helpwin o hacemos clic en el icono , en la barra de herramientas.

La ventana contiene un listado de todas las categorías de MATLAB. Haciendo clic en

cualquiera de ellas, pasaremos a una pantalla donde aparecen todas las funciones de

esa categoría. El botón Tips nos describe brevemente cómo usar la ayuda.

Page 133: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

23

9. Simulink

9.1 Introducción

Simulink es una extensión de MATLAB para la simulación de sistemas dinámicos.

Al ser un entorno gráfico, resulta bastante sencillo de emplear. Para ejecutar Simulink,

podemos teclear simulink desde MATLAB, o bien hacer clic en el icono , en la barra

de herramientas de MATLAB.

Nos aparecerán dos ventanas: una con las librerías de Simulink, y otra en blanco

donde construiremos nuestro nuevo modelo.

Fig 8. Librerías de Simulink

En cada uno de los grupos que aparecen en la fig. 3, estarán los bloques necesarios

para simular nuestro sistema de control. Por ejemplo, haciendo doble clic en Linear

aparecerá la siguiente ventana:

Page 134: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

24

Fig 9. Contenido de la librería Linear

9.2. Construcción del modelo

Supongamos que se tiene el siguiente sistema de control:

Fig 10. Diagrama de bloques del sistema de control

Salida ref

_ 10

5·31

SSS

Page 135: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

25

Para construirlo en Simulink, seguiremos los siguientes pasos:

En el grupo Linear, elegimos el bloque Sum, y lo arrastramos hasta nuestra ventana

vacía.

Del mismo grupo, elegimos Transfer Fcn y Gain.

Para introducir los valores que tendrán los bloques, hacemos doble clic en cada uno

de ellos. Nos aparecerá el cuadro de diálogo correspondiente:

Fig 11. Introducción de valores para cada bloque

Se hará de igual manera para la constante (Gain) y el punto de suma (Sum), en el que

pondremos +-

Cada bloque tiene en sus extremos una o varias flechas. Al situarnos con el ratón en

esas flechas, el puntero pasa a ser una cruz. Para conectar los bloques, arrastramos

hasta la flecha del siguiente bloque.

Ahora necesitamos poner la referencia. Para ello, hacemos doble clic en el grupo

Sources, y elegimos Step. Lo arrastramos hasta la ventana donde tenemos el modelo.

Para cambiar los valores del escalón, y el tiempo en que éste se produce, hacemos

doble clic en el bloque. Por defecto, el escalón es unitario y se da en t=1.

Por último, para ver la salida (o cualquier otra señal) hay varias posibilidades. Las dos

más utilizadas son los bloques Scope y To Workspace (en el grupo Sinks).

El bloque Scope nos permite ver el comportamiento de una señal mientras se simula.

Por el contrario, To Workspace guarda la señal en memoria, para poder dibujarla

después de la simulación (con el comando plot) o guardarla en un fichero de datos

.mat.

Page 136: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

26

El modelo en Simulink quedará como en la figura siguiente:

Fig 12. Modelo de Simulink del sistema de control

La orientación por defecto de los bloques es "a derechas" (la entrada está en la

izquierda, la salida en la derecha). Esto se puede cambiar seleccionando el bloque y

pulsando Ctrl+R o en el menú Format/Rotate Block.

Después de construir el modelo, resulta conveniente guardarlo antes de empezar a

simular (Menú File/Save as..). Los modelos de Simulink se guardan con extensión .mdl

Page 137: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

27

9.3. Simulación

Para simular el sistema ya construido, elegimos Start del menú Simulation. En

este menú también hay otras opciones; la única que usaremos es Parameters:

Fig 13. Introducción de los parámetros de la simulación

En este recuadro elegimos las características de la simulación. Las más importantes

es Start time (que suele ser 0.0) y Stop time. Ésta última se tendrá que ajustar a

nuestro sistema, pues por ejemplo un sistema mecánico es mucho más rápido que

uno térmico, y necesitará menos tiempo para llegar al régimen permanente.

Una vez empezada la simulación, ésta se puede parar o hacer una pausa (en el

mismo menú Simulation/Stop y Simulation/Pause)

Si queremos ver la salida, hacemos doble clic en el bloque Scope. Nos aparecerá la

siguiente pantalla:

Page 138: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

28

Fig 14. Visualización de la respuesta mediante el bloque Scope

En la barra de herramientas existen varios iconos: los tres primeros fijan el tipo de

zoom (ampliar eje x y eje y, sólo eje x o solo eje y ). El cuarto icono (con el símbolo de

los prismáticos) hará que aparezca en pantalla la gráfica completa. El quinto nos

guarda la configuración de los ejes para posteriores simulaciones, y el último nos

permite fijar los ejes, y la cantidad de datos que queremos guardar.

9.4 Modelado de un sistema físico

No siempre disponemos de una función de transferencia, sino que tenemos un

conjunto de ecuaciones que nos describe el comportamiento de un sistema real.

Esta función de transferencia se podría obtener resolviendo el sistema de ecuaciones,

pero resulta más sencillo utilizar Simulink. Para ello, nos construimos cada una de las

ecuaciones con bloques. Después hemos de definir una entrada y una salida,

mediante los bloques In y Out, que aparecen en el gupo Connections, pues la función

de transferencia se representa como entradasalida

sUsYsF

)()()( .

Guardamos el modelo, y después, desde MATLAB, escribimos las siguientes

instrucciones:

>> [A,B,C,D]=linmod ('mi_planta'); %Donde 'mi_planta' es el nombre del archivo

Page 139: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

29

>> [num,den]=ss2tf (A,B,C,D);

Ejemplo:Intentaremos modelar el siguiente sistema térmico:

Datos:

Potencia inyectada en bloque 3

Temperatura controlada en bloque 3

C1= 2 min kW / ºC C2= 2.5 min kW / ºC C3= 3.5 min kW / ºC

R13 = 7.5 ºC / kW R23 = 10 ºC / kW R30 = 15 ºC / kW

Las ecuaciones que nos describen este sistema son:6

ssTCsTsTR

ssTCsTsTR

sTsTR

sTsTR

sTsTR

ssTCsPg

)·(·))()(·(1

)·(·))()(·(1

))()(·(1))()(·(1))()(·(1)·(·)(

222332

111331

0330

1331

2332

33

Representando estas ecuaciones en un modelo de Simulink, nos queda:

6 No se ha considerado el efecto de una posible perturbación, pues hemos de definir una única entrada y salida

1

2

3

Page 140: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

30

Fig 15. Modelo de Simulink que representa el sistema térmico

Para construir el modelo de una forma más clara, se han utilizado Tags o etiquetas

(que se encuentran en Connections)

El término 1/60 corresponde al cambio de unidades de minutos a segundos

Ahora escribimos en MATLAB:

>> [A,B,C,D]=linmod ('mi_planta');

>> [num,den]=ss2tf (A,B,C,D);

>> planta =tf(num,den)

La función de transferencia entre la potencia aportada al sistema y la temperatura a

controlar queda:

10623

9623

10·352.2·257310.2·0032.010·527.3·10·466.8·004762.0

)()(

SSSSS

sPgsT

(en segundos)

1

Out

s

1

s

1

s

1

[T3]

[T2]

[T1]1/60

1/60

1/601/3.1/15

1/10

1/7.5

1/25

1/15

[T2]

[T3]

[T1]

[T2]

[T3]

[T3]

[T3]

[T1]

[T3]

1

In

Page 141: Simulink Tutorial Completo

UPCo MATLAB & SIMULINK ICAI - DEA Manual de referencia

31

Una vez modelado el sistema, resulta conveniente crear un bloque que agrupe

nuestro sistema real. Para ello, seleccionamos todos los bloques, pulsando en una

esquina y arrastrando hasta englobar a todos los elementos (no con la opción

Edit/Select all). Después hacemos clic en Edit/Create subsystem, que debería

aparecer habilitada. Debería quedarnos una ventana así:

En este diagrama de bloques sí se ha incluido la perturbación.

Page 142: Simulink Tutorial Completo

Introduccion a Matlab y Simulink

Regulacion AutomaticaIngeniero en Electronica. Curso 2006/2007.

Javier Aracil y Fabio Gomez–Estern

1. Introduccion

Matlab es un programa de gran aceptacion en ingenierıa destinado realizar calculostecnicos cientıficos y de proposito general. En el se integran operaciones de calculo,visualizacion y programacion, donde la interaccion con el usuario emplea una notacionmatematica clasica.

Los usos y aplicaciones tıpicos de Matlab son:

Matematicas y calculo.

Desarrollo de algoritmos.

Adquisicion de datos.

Modelado, simulacion y prototipado.

Analisis y procesado de datos.

Graficos cientıficos y de ingenierıa.

Desarrollo de aplicaciones.

El tipo basico de variable con el que trabaja Matlab es una matriz que no requiereser dimensionada previamente en la declaracion. Una de las caracterısticas mas intere-santes consiste en que el algebra vectorial y matricial se expresa con la misma sintaxisque las operaciones aritmeticas escalares. Por ejemplo, en lenguaje C, para realizar lasuma de dos variables enteras o reales b y c, escribiremos:

a=b+c;

Mientras que en Matlab, emplearemos la misma sentencia tanto si b y c son enteros,reales, vectores o matrices.

1

Page 143: Simulink Tutorial Completo

2. Componentes de Matlab

Matlab consta de cinco partes fundamentales:

1. Entorno de desarrollo. Se trata de un conjunto de utilidades que permiten eluso de funciones Matlab y ficheros en general. Muchas de estas utilidades soninterfaces graficas de usuario. Incluye el espacio de trabajo Matlab y la ventanade comandos.

2. La librerıa de funciones matematicas Matlab. Se trata de un amplio con-junto de algoritmos de calculo, comprendiendo las funciones mas elementalescomo la suma, senos y cosenos o la aritmetica compleja, hasta funciones massofisticadas como la inversion de matrices, el calculo de autovalores, funciones deBessel y transformadas rapidas de Fourier.

3. Graficos. Matlab dispone de un conjunto de utilidades destinadas a visualizarvectores y matrices en forma de graficos. Existe una gran cantidad de posibili-dades para ajustar el aspecto de los graficos, destacando la visualizacion tridi-mensional con opciones de iluminacion y sombreado, y la posibilidad de crearanimaciones.

4. El interfaz de aplicacion de Matlab (API). Consiste en una librerıa quepermite escribir programas ejecutables independientes en C y otros lenguajes,accediendo, mediante DLLs, a las utilidades de calculo matricial de Matlab.

De estos cuatro puntos, en este capıtulo trataremos, de forma somera, los dosprimeros.

Los ejemplos que se presentan en este texto, se han desarrollado para la version deMatlab 7.0. ellos no impide que puedan funcionar con otras versiones del programa.Concretamente, para la version 6.5 y posteriores esta practicamente garantizado elfuncionamiento.

Sin embargo, hay que senalar que algunos complementos de Matlab no aparecenincluidos en la instalacion basica del mismo, por tanto un programa que funciona enun ordenador con la version 7.0 instalada, puede fallar en otro ordenador con la mismaversion.

La gestion de complementos de Matlab se realiza mediante lo que se denominantoolboxes (paquetes de herramientas). Un Toolbox de Matlab es un conjunto de fun-ciones y algoritmos de calculo especializados en un area de conocimiento: finanzas,tratamiento de senales, teorıa de sistemas, etc. Para el desarrollo del curso es necesario

2

Page 144: Simulink Tutorial Completo

tener instalado, aparte del sistema basico de Matlab, el denominado Control SystemToolbox.

3. Simulink

Simulink es una aplicacion que permite construir y simular modelos de sistemasfısicos y sistemas de control mediante diagramas de bloques. El comportamiento dedichos sistemas se define mediante funciones de transferencia, operaciones matematicas,elementos de Matlab y senales predefinidas de todo tipo.

Simulink dispone de una serie de utilidades que facilitan la visualizacion, anali-sis y guardado de los resultados de simulacion. Simulink se emplea profusamente eningenierıa de control.

En el presente curso trabajaremos con la version 6.0, que viene incluida en el paquetede Matlab 7.0. Su instalacion es opcional, por tanto debemos seleccionar la opcioncorrespondiente al instalar el programa

4. El entorno de trabajo de Matlab

4.1. Ayuda en lınea

Si se ha seleccionado la la opcion correspondiente en la instalacion de Matlab, po-dremos acceder a la ayuda en lınea en todo momento pulsando la tecla F1. Dichadocumentacion esta organizada con un ındice en forma de arbol y mediante herramien-tas de navegacion como hipervınculos. Es sumamente recomendable su uso, tanto amodo de introduccion como de referencia para temas especıficos. Si se desea conocerla documentacion especıfica asociada a un comando de Matlab, entonces se tecleara

>> doc nombre_comando

en la lınea de comandos de Matlab.

3

Page 145: Simulink Tutorial Completo

4.2. Organizacion de ventanas

La figura 1 muestra la organizacion por defecto de ventanas que nos encontramoscuando arrancamos Matlab por primera vez. Las ventanas que en ella aparecen, dearriba a abajo son: en la parte izquierda, la estructura del directorio donde nos encon-tramos, y debajo de ella la historia de los comandos que se han tecleado en el pasado; enla mitad derecha nos encontramos, arriba, la ventana de edicion de programas Matlab(que se escriben en un lenguaje propio de Matlab y se almacenan en ficheros .m), ydebajo la lınea de comandos, donde se situa el cursor para teclear comandos de Matlab.

Figura 1: Entorno de trabajo Matlab.

Inicialmente trabajaremos con la lınea de comandos de Matlab.

4.3. Operaciones basicas en lınea de comandos

Como se ha dicho previamente, en Matlab todos los objetos son matrices. Un escalarno es mas que una matriz 1× 1. En la lınea de comandos, podemos asignar un nombresimbolico para identificar una matriz.

>> a=[10; 20; -15]; % Asignacion

Esto es una asignacion de un vector de columna que llevara el nombre a. A suderecha aparece un comentario, que tiene su utilidad cuando redactemos programas en

4

Page 146: Simulink Tutorial Completo

Matlab.

Los objetos pueden crearse en cualquier momento. Para ello basta con asignarlesun valor mediante una asignacion, como en el ejemplo previo. Los identificadores em-pleados para designar matrices son de libre eleccion, con la salvedad de que no puedencomenzar por un numero, ni contener espacios en blanco.

Una vez creado un objeto de Matlab, este pasa a formar parte del espacio detrabajo ocupando una porcion la memoria. Por tanto, a veces, tras horas de trabajocon Matlab, necesitaremos eliminar los objetos que ya no se utilicen. Para ello se empleael comando clear.

>> clear a; % Borra a de la memoria

>> clear; % Borra todos los objetos del espacio de trabajo

En las sentencias previas, aparece el signo ‘;’ al final de cada comando. Este sımbo-lo sirve para separar unos comandos de otros. Por ejemplo, cuando escribimos var-ios comandos en una sola lınea, estos deben aparecer separados por punto y coma.Ademas, si escribimos un comando aislado (sin ‘;’) y pulsamos ENTER, Matlab pro-porcionara siempre una salida en respuesta al comando:

>> a=[10;20;-15]

a =

10

20

-15

Sin embargo, si escribimos el comando seguido de ‘;’, no se mostrara en pantalla larespuesta. Cuando los comandos forman parte de un programa es conveniente emplear‘;’ para evitar desbordar la pantalla con informacion innecesaria.

4.4. Sintaxis de vectores y matrices

Las matrices (y vectores como caso particular de las mismas) se expresan en Matlabempleando corchetes ([ ]); separando las filas por espacios o comas (,) y las columnaspor ‘;’. De este modo, se puede crear un objeto matriz del siguiente modo:

>> mat=[1 2 3; 4 5 6; 7 8 9]

5

Page 147: Simulink Tutorial Completo

mat =

1 2 3

4 5 6

7 8 9

Cuando se trata de un escalar, podemos prescindir de los corchetes

>> rad=3.1415;

Los elementos de las matrices pueden ser reales o complejos. En este ultimo caso seemplea la letra i para representar el valor

√−1. Como ejemplo crearemos el vector fila

v = [2 + 3i, −5i, 3].

>> v=[2+3i, -5i, 3]

v =

2.0000 + 3.0000i 0 - 5.0000i 3.0000

El acceso a elementos de una matriz previamente definida puede realizarse especif-icando la fila y columna del elemento que nos interesa entre parentesis

>> mat(2,3)

ans =

6

Ademas, dentro de estos parentesis podemos indicar variables u operaciones mas com-plejas, lo que da una gran potencia al desarrollo de algoritmos.

Una vez definidos los objetos con sus identificadores, podemos realizar operacionesaritmeticas entre ello con total simplicidad. Para las operaciones vectoriales y matri-ciales, Matlab verificara la coherencia de las dimensiones de los operandos y si no hayproducira error producira un resultado con las dimensiones adecuadas.

>> v1=[2+3i, -5i, 3];

>> v2=[0, 1, 7];

>> v3=v1+2*v2+[1, 1, 1]

v3=

3.0000 + 3.0000i 3.0000 - 5.0000i 18.0000

6

Page 148: Simulink Tutorial Completo

4.5. Operaciones basicas con Matlab

La siguiente tabla ilustra las basicas aritmeticas y logicas que podemos realizar conMatlab.

Expresion en Matlab Operacion+ Suma aritmetica

- Resta aritmetica o cambio de signo

* Multiplicacion aritmetica

/ Division

^ Elevar un numero a una potencia

< Relacion "menor que"

> Relacion "mayor que"

<= Relacion "menor o igual que"

>= Relacion "mayor o igual que"

== Relacion "igual que"

~= Relacion "distinto que"

& producto logico (operacion ‘‘y’’)

| suma logica (operacion .o")

~ negacion (operacion "no")

Cuadro 1: Operaciones aritmeticas y logicas de en Matlab.

Todas estas operaciones se aplican indistintamente a escalares, vectores y matrices,y se pueden emplear de dos modos diferentes: en primer lugar, Matlab funciona directa-mente como una calculadora, para lo cual tecleamos expresiones en lınea de comandospara obtener inmediatamente el resultado de las mismas:

>> 12*24.8

ans =

297.6000

Ası mismo se pueden emplear las operaciones dentro de otras expresiones mas amplias,logrando ası escribir expresiones matematicas de cualquier complejidad.

>> x1=-b+sqrt(b^2-4*a*c)/(2*a);

4.6. Funciones en Matlab

Buena parte de las operaciones que se realizan con Matlab, son llamadas a funciones.Las funciones procesan informacion, por lo que poseen datos de entrada y de salida,

7

Page 149: Simulink Tutorial Completo

que pueden ser matriciales. Los datos de entrada se especifican entre parentesis, y si sonvarios separados por comas. Por ejemplo, la siguiente funcion calcula la raız cuadradade su unico valor de entrada, que es el vector fila [4, 2].

>> sqrt([4 2])

ans =

2.0000 1.4142

Las funciones son programas escritos por el usuario o incorporados en el paquete basicode Matlab. Entre estas ultimas destacan las siguientes funciones:

Nombre Funcionsin Senosinh Seno hiperbolicocos Cosenocosh Coseno hiperbolicotan Tangentetanh Tangente hiperbolicacot Cotangentecoth Cotangente hiperbolicasec Secantesech Secante hiperbolicacsc Cosecantecsch Cosecante hiperbolicaasin Arcoseno (inversa del seno)asinh Inversa del seno hiperbolicoacos Arcocoseno (inversa del coseno)acosh Inversa del coseno hiperbolicoatan Arcotangente (inversa de la tangente)atan2 Arcotangente de cuatro cuadrantes

Cuadro 2: Funciones elementales de Matlab: Trigonometrıa.

Nombre Funcionexp Exponenciallog Logaritmo natural (base e)log2 Logaritmo en base 2log10 Logaritmo en base 10sqrt Raız cuadrada

Cuadro 3: Funciones elementales de Matlab: Exponenciales.

8

Page 150: Simulink Tutorial Completo

Nombre Funcionfix Redondear hacia cerofloor Redondear hacia menos infinitoceil Redondear hacia mas infinitoround Redondear hacia el entero mas cercanomod Modulo de la division enterarem Resto de la division entera

Cuadro 4: Funciones elementales de Matlab: Ajuste y redondeo.

Nombre Funcioninv Matriz inversadet Determinanteeig Autovalores’ Matriz traspuestaeye Crear una matriz identidad dado el numero de filas/columnaszeros Crear una matriz de ceros dado el numero de filas/columnasones Crear una matriz de unos dado el numero de filas/columnaslength Longitud de un vectorsize Dimensiones de una matriz

Cuadro 5: Funciones elementales de Matlab: Operaciones matriciales.

4.7. Operaciones logicas

Algunas de las operaciones y funciones presentadas no devuelven un valor numericoo matricial como resultado. En su lugar, evaluan si cierta condicion es verdadera ofalsa. En estos casos, el valor devuelto por la funcion equivaldra a 1 si la condicion secumple, y 0 si no.

A modo de ejemplo comprobaremos si una variable x se encuentra en un intervalodeterminado

>> x=5

>> (x>=0)&(x<=10) % Intervalo [0,10]

ans =

1

>> (x>7)&(x<10) % Intervalo (7,10)

ans =

0

Las operaciones logicas se emplearan sobre todo para implementar bifuraciones y buclesen los programas Matlab.

9

Page 151: Simulink Tutorial Completo

Nombre Funcionclear Elimina todas las variables del espacio de trabajoclear x Elimina la variable x del espacio de trabajowho Lista las variables del espacio de trabajo

Cuadro 6: Funciones elementales de Matlab: Espacio de trabajo.

4.8. Operaciones de rango

En Matlab existe un operador de gran utilidad que no tiene parangon en otroslenguajes de programacion: el operador de rango (:). Para ilustrar su utilidad, basteindicar que si se desea crear un vector con todos los numeros enteros entre 1 y 10,podemos emplear la expresion 1:10.

>> a=1:10

a =

1 2 3 4 5 6 7 8 9 10

En general, para secuencias no enteras o no crecientes la sintaxis del operador de rangoes

valor_minimo : incremento : valor_maximo

Por ejemplo, para generar todos los numeros entre 1 y 2 en incrementos de 0.2 es-cribiremos

>> a=1:0.2:2

a =

1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

Una segunda aplicacion del operador de rango es el acceso a submatrices o subvec-tores. Supongamos que hemos definido la matriz mat anteriormente mencionada:

>> mat=[1 2 3; 4 5 6; 7 8 9];

Para acceder a la submatriz comprendida entre los elementos (2, 1) y (3, 2) bastara conescribir

10

Page 152: Simulink Tutorial Completo

>> mat(2:3,1:2)

ans =

4 5

7 8

Ademas, se puede prescindir de alguno de los extremos de este operador cuando seemplea en el acceso a vectores y matrices. Por ejemplo, si se desea mostrar todos loselementos menos los 3 primeros de un vector:

>> a(4:)

>> a(4:end)

Por otro lado, si lo que deseamos es obtener los 3 ultimos elementos del vector a,escribiremos

>> a((length(a)-2):end)

4.9. Almacenamiento en archivos

Matlab permite almacenar en el disco las variables del espacio de trabajo. De estemodo es posible parar una sesion de trabajo y continuar en otro momento sin volver arepetir calculos. La orden mas comun para almacenar datos es save, que puede usarsede varias maneras. En la tabla siguiente se presenta un resumen.

Orden Operacion realizada.save Crea el archivo de nombre matlab.mat en la

carpeta actual. Dicho archivo contiene todaslas variables que existen en ese momento enentorno Matlab.

save nombrearchivo Crea el archivo de nombre en nombrearchi-vo.mat en la carpeta actual. Dicho archivocontiene todas las variables que existen enese momento en el entorno Matlab.

save nombrearchivo x y z Crea el archivo de nombre nombrearchi-vo.mat en la carpeta actual. Dicho archivocontiene unicamente las variables x, y y z.

Para recuperar las variables almacenadas en un fichero previamente creado em-plearemos principalmente la funcion load. La siguiente tabla ilustra tres operacionestıpicas de recuperacion de datos.

11

Page 153: Simulink Tutorial Completo

Orden Operacion realizada.load Lee toda las variables del archivo de nombre

matlab.mat de la carpeta actual. Si algunade las variables del disco tiene nombre co-incidente con otra que previamente existe enMatlab se producira la destruccion de la vari-able existente para dejar su sitio a la variabledel disco.

load nombrearchivo Igual que en el caso anterior, pero leyendodel archivo nombrearchivo.mat de la carpetaactual.

load nombrearchivo x y z Igual que el anterior pero leyendo unicamentelas variables x, y y z.

4.10. Graficas en Matlab

Las posibilidades de Matlab a la hora de crear graficos de todo tipo son vastısimas.Para tener una vision general de ellas se recomienda al lector un recorrido por la ayudaen lınea partir del comando

>> doc plot

En este punto veremos los pasos basicos para crear una grafica a partir de una tablade valores (x, y). Concretamente, trazaremos la parabola de ecuacion

y = 2x2 + 3x − 1

en el intervalo [−3, 3].

Toda grafica de Matlab ha de ser creada a partir de una nube de puntos, que en elcaso bidimensional consiste en una serie de valores de las coordenadas x y otra seriedel mismo tamano de valores de y. Cada pareja (x,y) formada a partir de ambas seriessera un punto de la grafica. Para ello crearemos dos vectores de igual tamano n. Elprimer vector sera x, para las coordenadas de los puntos, a partir de una divisionsuficientemente fina del eje de abcisas:

>> x=-3:0.1:3;

y a continuacion creamos el vector y, sabiendo que en el grafico el elemento i-esimo deldicho vector formara un punto (x, y) con el elemento i-esimo del vector x. Por tanto,

12

Page 154: Simulink Tutorial Completo

se ha de crear un vector y de n componentes, segun la formula

yi = 2x2

i+ 3xi − 1 i = 1 . . . n

Esto se obtiene en Matlab con un solo comando, sin necesidad de bucles:

>> y=2x.^2+3x-1;

Observese el ‘.’ antes de la exponenciacion. Esto evita que el termino x^2, al ser x unvector, se calcule como el producto escalar de x por sı mismo. Finalmente, creados losvectores, creamos la grafica y la etiquetamos con los siguientes comandos:

>> plot(x,y); % El orden de los parametros es importante

>> grid; % Visualizar una malla

>> xlabel(’Eje x’); % Etiqueta eje x

>> ylabel(’Eje y’); % Etiqueta eje y

Obteniendo el grafico de la figura:

−3 −2 −1 0 1 2 3−5

0

5

10

15

20

25

30

Eje x

Eje

y

Figura 2: Grafico resultante.

Es muy recomendable consultar la ayuda para conocer las opciones en cuanto atipos y colores de lınea, tratamiento de ejes (comando axis), etiquetado (comandosxlabel, legend, text), etc.

13

Page 155: Simulink Tutorial Completo

5. Control System Toolbox

El Control System Toolbox es un componente opcional en la instalacion de Matlabque consta de una serie de funciones, objetos, bloques Simulink y herramientas destina-dos a la asistencia en el analisis y diseno de sistemas de control. El objeto fundamentalcon el que trabajaremos es la funcion de transferencia. Para ilustrar sus propiedadesy el algebra asociada, estudiaremos un ejemplo sencillo de control.

Considerese el sistema realimentado de la figura 3. Dicho sistema esta formado portres bloques independientes: G1(s), que representa el controlador, G2(s), que corre-sponde a la planta a controlar, y G3(s), la funcion de transferencia del sensor con elque se mide la salida del sistema. Los valores de las tres funciones son:

G1(s) =1

s + 0,5

G2(s) =3

s2 + 2s + 1

G3(s) =40

s2 + 5s + 40

Supongamos que deseamos calcular la funcion de transferencia en bucle cerrado dedicho sistema, y a continuacion trazar su diagrama de Bode. Lo primero que debemosconocer es como definir una funcion de transferencia en el entorno Matlab.

Un polinomio en s se representa en Matlab como un vector cuyos elementos son loscoeficientes del polinomio por orden de exponente descendente: por ejemplo, s2−2s+1se define en Matlab como el vector [1 − 2 1]. Por tanto, para definir una funcion detransferencia en Matlab necesitamos dos vectores. A partir de ellos, con la funcion tf

construiremos las funcion de transferencia del ejemplo:

>> G1=tf([1],[1 0.5]);

>> G2=tf([3],[1 2 1]);

>> G3=tf([40],[1 5 40]);

Lo mas interesante de esos objetos es la posibilidad de realizar operaciones matematicasentre ellos. Para ilustrar esto, calcularemos la funcion de transferencia del sistemarealimentado en bucle cerrado, desde la referencia hasta la salida. Sabiendo que dichafuncion tiene la forma

Gbc(s) =Y (s)

R(s)=

G1(s)G2(s)

1 + G1(s)G2(s)G3(s),

teclearemos en Matlab simplemente

14

Page 156: Simulink Tutorial Completo

>> Gbc=G1*G2/(1+G1*G2*G3)

Transfer function:

3s^5+22.5s^4+163.5s^3+331.5s^2+247.5s+60

----------------------------------------------------------------

s^8+10s^7+75.25s^6+262.3s^5+471.5s^4+594.5s^3+570.3s^2+321.3s+70

lo que nos muestra la estructura de la funcion de transferencia en bucle cerrado Gbc(s),que podra ser utilizada a partir de ahora en llamadas a funciones, como las que trazanlos diagramas de Bode (funcion bode) y Nyquist (funcion nyquist).

G1(s) G2(s)

G3(s)

@@

@@

- - - -

6

r(t) + e u y(t)

− m

Figura 3: Sistema de Control realimentado

5.1. Operaciones con polinomios

El Control System Toolbox permite, ademas de lo explicado, realizar ciertas op-eraciones con polinomios almacenados en forma de vector, que son muy interesantesdentro de la teorıa del control automatico. Por ejemplo, podemos calcular el productode dos polinomios en s mediante la funcion conv y a partir de ellos calcular el producto(cascada) de dos funciones de transferencia:

>> num1=[1]; den1=[1 0 0.5];

>> num2=[3]; den2=[1 2 1];

>> num_producto=conv(num1,num2);

>> den_producto=conv(den1,den2);

>> G12=tf(num_producto,den_producto)

en este caso el resultado del calculo serıa igual al producto de las funciones G1(s) yG2(s), que como sabemos, tambien se obtendrıa, a partir de las definiciones anteriores,

15

Page 157: Simulink Tutorial Completo

escribiendo

>> G12=G1*G2

Por otra parte, para obtener las raıces de un polinomio definido en Matlab como unvector, se emplea la funcion roots:

>> roots([1 2 -1 ])

ans =

-2.4142

0.4142

5.2. Herramientas numericas y graficas

Dada una funcion de transferencia, ya sea de bucle abierto o cerrado, existen en elControl System Toolbox operaciones numericas y graficas de gran utilidad a la hora deanalizar la estabilidad y otras propiedades. Algunas de ellas aparecen en la siguientetabla

Comando Operacion realizada.evalfr Evalua la magnitud y fase de una funcion de transferencia en la

frecuencia especificada.bode Traza el diagrama logarıtmico de Bode de una funcion de transfer-

encia dada. Ademas presenta interesantes opciones de visualizacioncomo son los margenes de ganancia y fase.

nyquist Traza el diagrama de Nyquist de una funcion de transferencia dada.rlocus Traza el lugar de las raıces al realimentar negativamente con una

ganancia K (variable) la funcion de transferencia dada.margin Calcula, sobre el diagram de Bode, los margenes de fase y ganancia

de una funcion de transferencia y las frecuencias de corte.pzmap Muestra en una grafica del plano complejo la ubicacion de los polos

y los ceros de una funcion de transferencia dada.

Como ejemplo, se obtendra el diagrama de Bode de la funcion de transferencia(estable)

G(s) =1

s2 + 0,1s + 0,5

y se calcularan los margenes de fase y ganancia. Para ello tecleamos

16

Page 158: Simulink Tutorial Completo

>> G1=tf([1],[1 0.1 0.5])

>> bode(G1);

>> margin(G1);

y el resultado aparece representado en la figura 4.

−40

−30

−20

−10

0

10

20

30

40

Mag

nitu

de (d

B)

Bode DiagramGm = Inf dB (at Inf rad/sec) , Pm = 7.02 deg (at 1.22 rad/sec)

Frequency (rad/sec)10

−110

010

1−180

−135

−90

−45

0

Pha

se (d

eg)

Figura 4: Diagrama logarıtmico de Bode.

Por ultimo, volveremos a la funcion Gbc(s) calculada para analizar su estabilidad.Para ello extraemos su denominador tecleando

>> pol=Gbc.den1

pol =

1.0000 10.0000 75.2500 262.2500 471.5000 594.5000 570.2500 321.2500 70.0000

y a partir de ahı evaluamos sus raıces mediante

>> roots(pol)

ans =

-2.5301 + 5.8437i

-2.5301 - 5.8437i

-2.3763

17

Page 159: Simulink Tutorial Completo

-0.0317 + 1.2049i

-0.0317 - 1.2049i

-1.0000 + 0.0000i

-1.0000 - 0.0000i

-0.5000

Al estar todas las raıces en el semiplano izquierdo, deducimos que el sistema en buclecerrado es estable. Otro modo de verificar esto es trazando el diagrama polo–cero deGbc, mediante la instruccion pzmap(Gbc). El resultado se muestra en la figura 5.

−3 −2.5 −2 −1.5 −1 −0.5 0−6

−4

−2

0

2

4

60.040.090.140.20.280.4

0.56

0.8

0.040.090.140.20.280.4

0.56

0.8

1

2

3

4

5

6

1

2

3

4

5

6

Pole−Zero Map

Real Axis

Imag

inar

y A

xis

Figura 5: Diagrama polo–cero de la funcion de transferencia en bucle cerrado Gbc(s).

6. El entorno de trabajo de Simulink

Simulink es una herramienta de gran utilidad para la simulacion de sistemas dinami-cos. Principalmente, se trata de un entorno de trabajo grafico, en el que se especificanlas partes de un sistema y su interconexion en forma de diagrama de bloques. De nuevo,se trata de una herramienta amplısima que ademas se complementa con numerosos el-ementos opcionales. Por tanto, nos limitaremos a dar unas pinceladas de los elementosmas utiles en Regulacion Automatica.

Ademas de las capacidades de simulacion de las que esta dotado Simulink, con-viene destacar que contiene comodas utilidades de visualizacion y almacenamiento deresultados de simulacion.

18

Page 160: Simulink Tutorial Completo

6.1. Uso de Simulink

En primer lugar, lanzaremos la aplicacion escribiendo simulink en la lınea de co-mandos de Matlab, o abriendo desde el Explorador de Windows cualquier fichero conextension .mdl. En el primero de los casos se abrira la ventana de la figura 6. Esta

Figura 6: Ventana navegacion de bloques de Simulink (Simulink Library Browser).

ventana inicial no esta destinada a crear modelos de simulacion; su funcion principalconsiste en navegar por la enorme librerıa de bloques disponibles para el modelado.

En ella distinguimos dos partes: la izquierda contiene una vision en forma de arbolde todos los Toolboxes instalados que contienen bloques Simulink. La amplitud deeste arbol dependera de las opciones que hayamos activado al seleccionar Matlab.De todos los nodos del arbol nos interesan, de momento, los denominados Simulink yControl System Toolbox. Cabe mencionar ademas, por su interes, los bloques Real Time

Workshop destinados a generar automaticamente codigo de control para determinadasplataformas Hardware comerciales.

La parte derecha de la ventana de la figura 6 muestra los bloques Simulink con-tenidos en el Toolbox o nodo de la parte izquierda de la ventana. Estos bloques sedeben arrastrar sobre el espacio de trabajo de Simulink para la creacion de modelo asimular.

Por ultimo, cabe indicar que en la parte superior de la ventana de inicio de Simulinkhay varias herramientas como la busqueda de un bloque determinado a partir de sunombre, que nos pueden resultar bastante utiles.

19

Page 161: Simulink Tutorial Completo

6.2. El espacio de trabajo de Simulink

Si pulsamos en el icono superior izquierdo de la ventana de la figura 6 (pagina enblanco), se abre una ventana blanca sobre la que iniciaremos la creacion de un modelode simulacion. Dicha ventana se muestra en la figura 7.

Figura 7: Espacio de trabajo de Simulink.

En el espacio de trabajo de Simulink crearemos un modelo insertando los bloquescorrespondientes. Concretamente realizaremos la simulacion del sistema de control rep-resentado en la figura 3. En lugar de emplear las definiciones en Matlab de las funcionesde transferencia presentadas en el apartado anterior (empleando la funcion tf), creare-mos las funciones de transferencia directamente sobre el diagrama de bloques.

En primer lugar, hemos de insertar tres bloques de tipo Funcion de Transferenciaen el modelo. Para ello tecleamos la palabra transfer en el campo de busquedas en laparte superior de la ventana de navegacion y el buscador localizara el bloque llamadoTransfer Fcn, que cuelga del nodo Simulink, como se muestra en la figura 8.

Una vez localizado el bloque Transfer Fcn arrastraremos dicho bloque hacia elespacio de trabajo de Simulink. El arrastre de bloques se realiza seleccionando el iconodel bloque con el boton izquierdo del raton, y manteniendo este pulsado se desplazara elcursor hasta la ventana del modelo.

Repetiremos la operacion tres veces, para reproducir la estructura de la figura 3,dando lugar a la ventana mostrada en la figura 9.

Una vez insertados los bloques de las funciones de transferencia, les asignamosnombres especıficos (G1,G2 y G3) editando el texto al pie de cada icono, y les damosvalores a dichas funciones, para que coincidan con los parametros de las funcionesG1(s), G2(s) y G3(s) definidas anteriormente.

Con este fin, haremos doble click sobre cada bloque de funcion de transferencia, y

20

Page 162: Simulink Tutorial Completo

Figura 8: Ubicacion del bloque Transfer Fcn.

en la ventana que se abre en cada caso, introduciremos los vectores de coeficientes delos polinomios numerador y denominador de cada funcion de transferencia. La figura 10muestra la ventana donde se introducen los parametros de G1(s).

Una vez configuradas las tres funciones de transferencia las conectaremos entresı con arreglo a la estructura de interconexion de bloques de la figura 3. Para elloempleamos las siguientes operaciones:

21

Page 163: Simulink Tutorial Completo

Figura 9: Bloques de funcion de transferencia en Simulink.

Figura 10: Introduccion de los parametros de G1(s) = 1/(s + 0,5).

Operacion Procedimiento.Conectar bloques (I) Para conectar las salidas de un bloque a la entrada de

otro, hacer click con el boton izqdo. del raton en elbloque origen. Pulsar y mantener la tecla CTRL y hacerde nuevo click sobre el bloque destino.

Conectar bloques (II) Tambien se puede extraer un cable de senal haciendoclick en el saliente derecho del bloque origen y prolon-gar la senal (pulsando y manteniendo el boton izquierdodel raton) hasta llegar a la parte izquierda del bloquedestino.

Bifurcar cables Un cable de senal (que lleva la salida de un bloquehacia otro bloque), puede bifurcarse para distribuir lasenal a varios bloques pulsando con el boton derecho encualquier punto del cable.

Sumar o restar senales Las senales procedentes de salidas de los bloques sepueden sumar o restar entre sı mediante el bloquesumador, que se ubica facilmente tecleando Sum en laventana de navegacion de Simuink.

22

Page 164: Simulink Tutorial Completo

Tras una serie de operaciones de los tipos indicados en la tabla anterior, logramosconstruir la estructura de realimentacion de la figura 11. En esta figura hemos anadidodos bloques nuevos: Step y Scope. Ambos pertenecen, respectivamente, a los nodosSimulink/Sources y Simulink/Sinks que seran comentados en el siguiente apartado.

Figura 11: Modelo completo.

6.3. Fuentes y sumideros de senal

Los bloques de suma y resta de senales y los de funciones de transferencia, funcionancomo procesadores de senal. Sin embargo, en las simulaciones han de existir fuentes desenal externas, pues lo que se pretende en general es ver como responden determinadossistemas a estımulos exteriores.

En nuestro ejemplo necesitamos una senal externa para generar una referencia aseguir por el sistema controlado. Esta referencia debe ser, logicamente, cambiante conel tiempo. En nuestro caso emplearemos una senal de tipo escalon, que se implementa,con sus parametros especıficos, mediante el bloque Step. Bloques como este, que solotienen salidas y ninguna entrada, se localizan en el arbol de navegacion de Simulink enel nodo Simulink/Sources.

Por otro lado, existen bloques con entradas y sin ninguna salida: nodos sumidero.Uno de ellos es el empleado en nuestro modelo para visualizar la salida del sistema:Scope. Los bloques de este tipo se ubican en el arbol de navegacion de Simulink en elnodo Simulink/Sinks.

A modo de referencia, la tabla 7 muestra algunas fuentes de senal de uso comun (no-do Simulink/Sources), mientras que la tabla 8 muestra algunos de los bloques sumidero(Simulink/Sinks) mas comunes.

23

Page 165: Simulink Tutorial Completo

Elemento Funcion

Clock Marcas de tiempo de la simulacion. Util para trazar graficascon los resultados.

Sin Senal senoidal parametrizable.Step Senal en escalonConstant Senal de valor constante.Signal generator Permite elegir entre un conjunto de senales predefinidas.Random Number Generacion de ruido blanco configurable.From Workspace Senal generada a partir de una variable del espacio de trabajo

de Matlab.

Cuadro 7: Fuentes de senal en Simulink.

Elemento FuncionScope Grafica 2D para visualizar las senales frente al tiempo durante

la simulacion.XY Graph Grafica 2D para visualizar un grafico X-Y creado a partir de

dos senales de entrada.To Workspace Almacena las muestras de la senal de entrada en una variable

(vector) del espacio de trabajo de Matlab.

Cuadro 8: Sumideros de senal en Simulink.

24

Page 166: Simulink Tutorial Completo

Manual de Introducción a

SIMULINK

Autor: José Ángel Acosta Rodríguez © 2004

Page 167: Simulink Tutorial Completo

Capıtulo 1

Ejemplo

1.1. Modelado de un sistema dinamico

En este ejemplo se realizara el modelado de un sistema dinamico muysencillo. Se modelara el movimiento de una masa sobre una superficie rugosa,sobre la que se le aplica una fuerza. El sistema a modelar posee una entrada u,que se corresponde con la fuerza aplicada, y una salida x que sera la posicionde la masa. El modelo del sistema dinamico se puede expresar mediante lasecuaciones de Newton:

mx + cx = F (1.1)

m : Masa del cuerpo (Kg)

c : Coeficiente de friccion del cuerpo sobre la superficie

F : Fuerza aplicada (N)

Queremos hacer un modelo en con la herramienta “Simulink”para el sis-tema propuesto. Primero ejecutamos la herramienta “Simulink”desde la ven-tana de comandos de Matlab haciendo ‘click’ en el icono correspondiente

1

Page 168: Simulink Tutorial Completo

2 CAPITULO 1. EJEMPLO

Saldra por pantalla una ventana grafica, como la de la Fig. 1.1, que con-tiene todas las librerıas que el entorno de “Simulink”bajo Matlab soporta.

Figura 1.1: Librerıas del entorno Simulink

Page 169: Simulink Tutorial Completo

1.1. MODELADO DE UN SISTEMA DINAMICO 3

Para este sencillo ejemplo solo necesitaremos la librerıa basica de “Simulink”,por tanto expandimos el menu simulink en la ventana anterior, quedando co-mo aparece en la Fig. 1.2

Figura 1.2: Librerıa base de Simulink

Esta ventana esta dividida en dos partes. La de la derecha es la corres-pondiente a las librerıas y la de la derecha es el contenido de la librerıaseleccionada.

Page 170: Simulink Tutorial Completo

4 CAPITULO 1. EJEMPLO

Elegimos un nuevo fichero donde guardaremos el modelo: seleccionamosen el menu File → New → Model. Tendremos la situacion de la Fig. 1.3

Figura 1.3: Apertura de un nuevo fichero modelo

Page 171: Simulink Tutorial Completo

1.1. MODELADO DE UN SISTEMA DINAMICO 5

Se abrira una ventana en blanco donde crearemos el modelo. La situaciondebe ser ahora la de la Fig. 1.4

Figura 1.4: Apertura de un nuevo fichero modelo

En esta nueva ventana que aun no hemos dado nombre (‘untitled’) desar-rollaremos el ejemplo. Lo primero que hacemos es darle un nombre adecuado.Para ello, en el menu File de la nueva ventana elegimos File → Save. Nossituamos en el directorio adecuado a traves del menu desplegable, ponemosun nombre al archivo, por ejemplo “masa 2guardamos el modelo. Ya tenemosun archivo donde crear el modelo. La extension por defecto de los archivosde modelo es *.mdl.

Empezamos a crear el modelo dado por la ecuacion (1.2). Para ello esnecesario hacer alguna modificacion en la ecuacion (1.2). Despejando de laecuacion (1.2) la aceleracion del cuerpo se obtiene:

x = − c

mx +

F

m(1.2)

Como puede verse necesitaremos varios tipos de bloques. Elegimos estosbloques de la ventana de la derecha de la librerıa (Fig. 1.2). El primero queseleccionamos el que definira la fuerza aplicada a la masa, lo haremos me-diante una constante. Seleccionamos ‘Sources’ y en la derecha seleccionamos

Page 172: Simulink Tutorial Completo

6 CAPITULO 1. EJEMPLO

el bloque de ‘Constant’. Ahora lo arrastramos hacia la ventana de nuestromodelo con el boton izquierdo del raton pulsado. Hacemos ‘click’ en el la eti-queta del nombre del bloque de constante y le damos su nombre, por ejemploF. La situacion debe ser la de la Fig. 1.5

Figura 1.5: Construyendo el modelo

Observando la ecuacion (1.2), puede verse que se necesita hacer las op-eraciones de sumar y dividir. Para ello seleccionamos ‘Math Operations’ enla ventana de la librerıa y escogemos del mismo modo que antes los bloquesde ‘Sum’ y ‘Gain’. Para describir la ecuacion diferencial se necesitara ademasel bloque integrador ‘Integrator’ en la librerıa ‘Continuous’. Ya se esta endisposicion de describir la ecuacion (1.2) utilizando bloques. Debemos unirlos bloques de forma adecuada para describir dicha ecuacion (1.2). Haremosel esquema como describe la Fig. 1.6. Para unir los bloques debemos pincharcon el boton izquierdo del raton en el bloque de origen y soltar en el bloquede destino.

Como puede verse en la Fig. 1.6, se han editado los nombres de los blo-ques poniendoles nombres distintos a los originales. Tambien se ha editado elvalor de algunos de los bloques. Daremos valores concretos a las constantes.Supongamos que la masa es de un kg m = 1, que la constante de friccionvale c = 0,8 y que la fuerza aplicada es 0.1 N (F = 0,1). Ası por ejemplo elbloque ‘Gain’ denominado ‘c/m’ posee en su interior el valor correspondientea c

m= 0,8, y el denominado ‘1/m’ tendra valor 1. Estos valores se introducen

haciendo doble ‘click’ en los bloques y editando el campo correspondiente.

Por otro lado se ha escrito texto para hacer mas facil la lectura del modelo.Estas cajas de texto se crean simplemente haciendo doble ‘click’ en el lugarque se desee y editando el recuadro que aparece.

Page 173: Simulink Tutorial Completo

1.1. MODELADO DE UN SISTEMA DINAMICO 7

x..

x.

F/m

c*x./m

x

0.8

c/m

1s

Integrador

1s

Integrador

1

F

1

1/m

Figura 1.6: Modelo

Para poder ver los resultados ponemos un bloque que nos muestre laposicion de la masa frente al tiempo. Seleccionamos dentro de la librerıa‘Sinks’ el bloque ‘Scope’. Lo anadimos al modelo de la forma habitual. Yatenemos el modelo completo. Los bloques deben estar como se muestra en laFig. 1.7.

x..

x.

F/m

c*x./m

x

0.8

c/m

Scope

1s

Integrador

1s

Integrador

1

F

1

1/m

Figura 1.7: Modelo con ‘Scope’

En la Fig. 1.7 debe notarse que las variables de estado estan perfecta-mente definidas y accesibles en el diagrama de bloques. Ahora se esta endisposicion de hacer una simulacion del proceso. Para ello debemos definiralgunos parametros esenciales. Los mas importantes son las condiciones ini-ciales de las variables de estado y el tiempo de simulacion. Las condicionesiniciales deben ponerse en los bloques integradores. Se hace doble ‘click’ en el-los y se definen las mismas en la zona de edicion correspondiente. Por ejemploponemos el valor inicial de la velocidad a -1. En la Fig. 1.8 puede verse dondese define el parametro despues de haber hecho doble ‘click’ en el integradorque nos da la velocidad.

Page 174: Simulink Tutorial Completo

8 CAPITULO 1. EJEMPLO

Figura 1.8: Condicion inicial en velocidad

Para definir el tiempo de simulacion accedemos al menu de la ventana delmodelo Simulation → Simulation parameters. Se abre una ventana donde esposible definir entre otros parametros el tiempo de simulacion, el metodo deresolucion y el paso fijo o variable. Dejamos los dos ultimos como estan yponemos el tiempo de simulacion a 10 segundos. La situacion sera como lamostrada en la Fig. 1.9

Por ultimo definimos la fuerza aplicada que deseamos. Hacemos doble‘click’ en el bloque donde esta definida la fuerza y ponemos el valor deseadoque era 0.1.

Para ver el resultado en el Scope debemos hacer doble ‘click’ sobre elmismo y se abrira la ventana grafica que nos dara la posicion del cuerpo.Ahora pulsamos el boton de inicio de simulacion I . Una vez acabada lasimulacion tendremos el resultado que puede verse en la Fig. 1.10.

Si deseamos ver tambien la velocidad tenemos acceso a la variable en eldiagrama. Podemos poner otro Scope para la velocidad. El resultado puedeverse en la Fig. 1.11

Se podrıan ver las dos variables de estado en una sola ventana graficaScope. Se necesita para ello el bloque ‘Mux’ dentro de la librerıa ‘Signalrouting’. Este bloque hace las veces de un multiplexor y anida vectores. Se

Page 175: Simulink Tutorial Completo

1.1. MODELADO DE UN SISTEMA DINAMICO 9

Figura 1.9: Parametros de simulacion

Figura 1.10: Simulacion

Page 176: Simulink Tutorial Completo

10 CAPITULO 1. EJEMPLO

Figura 1.11: Simulacion. Utilizacion del bloque Scope

Page 177: Simulink Tutorial Completo

1.1. MODELADO DE UN SISTEMA DINAMICO 11

modifica el diagrama como se ve en la Fig. 1.12 y ya se tienen las dos variablesen una sola ventana grafica.

Figura 1.12: Simulacion. Utilizacion del bloque Mux

Supongamos que no solo queremos ver el resultado sino que tambien quer-emos guardar las variables en memoria para poder acceder a ellas. Buscamosdentro de la librerıa ‘Sinks’ el bloque ‘To Workspace’. Lo anadimos al dia-grama anterior y le damos un nombre a la matriz donde queremos guardarel valor de las variables, por ejemplo X. El resultado es el de la Fig. 1.13

x..

x.

F/m

c*x./m

x

0.8

c/m X

To Workspace

Posicióny

velocidad

1s

Integrador

1s

Integrador

0.1

F

1

1/m

Figura 1.13: Simulacion. Utilizacion del bloque To Workspace

Si ahora queremos ver el valor de las variable desde la linea de comandosde Matlab, hacemos ‘plot(tout, X)’. En la matriz X se encuentran la posicion

Page 178: Simulink Tutorial Completo

12 CAPITULO 1. EJEMPLO

y la velocidad por columnas en el orden que se han puesto en el diagrama debloques Fig. 1.13. El tiempo de simulacion se guarda por defecto en la variable‘tout’ dada en el menu Simulation → Simulation parameters → WorkspaceI/O. El resultado se muestra en la Fig. 1.14.

0 1 2 3 4 5 6 7 8 9 10−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

Figura 1.14: Resultado de ejecutar el comando plot(tout,X)

Todo este modelo se ha creado a traves de las variables temporales y susderivadas. Simulink permite hacer los modelos untilizando la transformadade Laplace. Para ello necesitamos transformar la ecuacion del modelo (1.2)en el dominio de Laplace. Suponemos las condiciones iniciales iguales a cero.Por tanto, la ecuacion (1.2) quedara en el dominio de Laplace

ms2X(s) + csX(s) = F (1.3)

Podemos transformarla en una funcion de transferencia si tomamos comosalida la posicion (X(s)) y como entrada la fuerza aplicada (F (s)) del modosiguiente

X(s)

F (s)=

1c

s(mcs + 1)

=K

s(τs + 1), (1.4)

donde K = 1c

y τ = mc. Para el ejemplo anterior K = τ = 1,25.

Page 179: Simulink Tutorial Completo

1.1. MODELADO DE UN SISTEMA DINAMICO 13

Ahora ya podemos construir el modelo utilizando Laplace. De la librerıa‘Continuous’ elegimos los bloques ‘Integrator’ y ‘Transfer Fcn’. Editamos esteultimo bloque con los valores de K y τ anteriores haciendo doble ‘click’. Elmodelo quedara como se muestra en la Fig. 1.15

F x.x

1.25

1.25s+1

Transfer Fcn

X

To Workspace

Posicióny

velocidad

1s

Integrador

0.1

F

Figura 1.15: Modelo en el dominio de Laplace

Debe notarse que en este ultimo esquema Fig. 1.15, la condicion inicialde la velocidad no esta accesible. Si se desea tener en cuenta hay que hacerloa la hora de pasar las ecuaciones al dominio de Laplace.

Ya sabemos hacer un modelo de un sistema dinamico, tanto en el do-minio del tiempo como en el de la frecuencia (Laplace). Ahora se describecomo hacer subsistemas. La idea de estos subsistemas es agrupar bloques conalgun criterio predefinido. Como ejemplo agruparemos los bloques del primerejemplo como un solo bloque que sea el modelo del sistema. Tendra comoentrada la fuerza aplicada y como salidas la posicion y la velocidad del sis-tema. Para conseguir esto debemos seleccionar todo aquello que queremosque pertenezca al subsistema. La seleccion se hace con el boton izquierdo delraton, como en Windows, haciendo un recuadro con todo aquello que quer-emos seleccionar. Todo esto con el boton pulsado. Despues se suelta y nosvamos al menu ‘Edit’ → ‘Create subsystem’, como en la Fig. 1.16

Una vez hecho esto tendremos la situacion de la Fig. 1.17, donde todo loseleccionado anteriormente se ha metido dentro de un bloque.

Haciendo doble ‘click’ en el bloque se puede ver su contenido en otraventana como se muestra en la Fig. 1.17.

Page 180: Simulink Tutorial Completo

14 CAPITULO 1. EJEMPLO

Figura 1.16: Creando subsistemas

Figura 1.17: Creando subsistemas

Page 181: Simulink Tutorial Completo

Universidad de ChileFacultad de Ciencias Fısicas y MatematicasDepartamento de Ingenierıa Electrica

Introduccion a Matlab y Simulink

Preparado por Diego Sepulveda J.

Version 1.0, 6 de agosto de 2002

Page 182: Simulink Tutorial Completo
Page 183: Simulink Tutorial Completo

Introducci¶on

Matlab es un poderoso sistema el cual permite el tratamiento num¶ericode una gran cantidad de aplicaciones en ingenier¶³a, tales como: procesamientode senales, an¶alisis estad¶³sticos, interpolaci¶on de curvas, series de tiempo, si-mulaci¶on y control de sistemas, l¶ogica difusa, redes neuronales, identi¯caci¶onde par¶ametros, etc.

El nombre Matlab se debe a que en realidad consiste en un laboratoriode matrices (Matrix laboratory), raz¶on por la cual es excelente para elc¶alculo num¶erico de vectores y valores propios, descomposiciones de matricesy cualquier aplicaci¶on que involucre matrices.

Adem¶as de lo mencionado anteriormente, Matlab tambi¶en incluye unsubprograma llamado Simulink, el cual permite la simulaci¶on de todo sis-tema din¶amico lineal y casi cualquier sistema no lineal.

A pesar de la gran cantidad de aplicaciones mencionadas anteriormente,este apunte est¶a enfocado hacia las aplicaciones orientadas hacia el controlde sistemas.

Si el lector desea ahondar m¶as sobre los aspectos generales de Matlab en-tonces deber¶a referirse a [1]

i

Page 184: Simulink Tutorial Completo

II

Page 185: Simulink Tutorial Completo

¶Indice general

1. Lo b¶asico 11.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.1.1. De¯nici¶on y asignaci¶on de variables . . . . . . . . . . . 11.1.2. Operando con matrices . . . . . . . . . . . . . . . . . . 21.1.3. Matrices especiales . . . . . . . . . . . . . . . . . . . . 31.1.4. Manipulaci¶on de matrices . . . . . . . . . . . . . . . . 51.1.5. Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.2. Variables y Funciones . . . . . . . . . . . . . . . . . . . . . . . 81.2.1. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.2. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . 91.2.3. Algunas Variables y Funciones de utilidad . . . . . . . 9

1.3. Gr¶a¯cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.3.1. Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . 121.3.2. Gr¶a¯cos en 2D . . . . . . . . . . . . . . . . . . . . . . 12

2. Simulink 172.1. Diagramas de Bloques . . . . . . . . . . . . . . . . . . . . . . 172.2. Usando Simulink . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.2.1. Librer¶³a “Continuos” . . . . . . . . . . . . . . . . . . . 192.2.2. Librer¶³a “Discrete” . . . . . . . . . . . . . . . . . . . . 192.2.3. Librer¶³as “Sources” y “Sinks” . . . . . . . . . . . . . . 202.2.4. Otras Librer¶³as . . . . . . . . . . . . . . . . . . . . . . 21

A. Funciones Comunes 25

iii

Page 186: Simulink Tutorial Completo

IV¶INDICE GENERAL

Page 187: Simulink Tutorial Completo

Cap¶ıtulo 1

Lo b¶asico

Dado que todas las aplicaciones de Matlab se basan en el uso de matrices,

lo primordial en este capıtulo es mostrar como utilizarlas, posteriormente se veran

los distintos tipos de variables y funciones que existen, para finalmente aprender

el manejo de graficos.

1.1. Matrices

1.1.1. Definicion y asignacion de variables

Para introducir una matriz en Matlab s¶olo se debe introducir los n¶ume-ros de la matriz entre par¶entesis cuadrados ([ ]), las columnas se separan porespacios y las ¯las por punto y coma (;)1. Por ejemplo:

>> A=[3 4 5 ; 3 2 7]

A =

3 4 5

3 2 7

Como se puede ver en el ejemplo anterior las variables se asignan medianteun signo igual (=) de la misma manera que en lenguajes como JAVA o C.

1; tambien se utiliza para suprimir la visualizacion del resultado

1

Page 188: Simulink Tutorial Completo

2 Matrices

1.1.2. Operando con matrices

Para transponer2 matrices s¶olo hay que poner despu¶es de la matriz o dela variable un ap¶ostrofe (’), siguiendo con el ejemplo anterior quedar¶³a:

>> A’

ans =

3 3

4 2

5 7

En la variable ans mostrada en el ejemplo anterior, Matlab guarda el re-sultado de la ¶ultima operaci¶on ejecutada.

Las operaciones aritm¶eticas son igual que ne la mayor¶³a de los lenguajes,as¶³ para sumar (o restar) s¶olo hay utilizar el signo + (o -), para multiplicarse utiliza el asterisco (*) y para dividir por la derecha (izquierda) se utiliza(/ (\)). 3 Por ejemplo:

>> B=[1 2 3; 4 5 6];

>> C=A+B

C =

4 6 8

7 7 13

>> D=C*A’

D =

76 80

114 126

Para potenciar una matriz se utiliza el s¶³mbolo (ˆ), seguido del exponenteque se desea. Si se desea invertir una matriz se puede hacer de dos maneras:elevando la matriz a -1 o utilizando la funci¶on inv:

2En el caso de que se utilicen numeros complejos se obtiene la conjugada transpuesta3Obviamente para poder realizar estas operaciones es necesario que las dimensiones de

las matrices sean consistentes.

Page 189: Simulink Tutorial Completo

1.1.3 Matrices especiales 3

>> A=[2 2 ; 0 1]

A =

2 2

0 1

>> inv(A)

ans =

0.5000 -1.0000

0 1.0000

En el cuadro 1.1 se muestra un resumen de los operadores matriciales.

Operaci¶on S¶ımboloMultiplicaci¶on *

Divisi¶on por la derecha /Divisi¶on por la izquierda \

Potenciaci¶on ˆTransposici¶on conjugada ’

Cuadro 1.1: Operadores para ¶algebra matricial

1.1.3. Matrices especiales

Dado que existen matrices que son muy utilizadas en la pr¶actica Mat-

lab incluye funciones espec¶³¯cas para crearlas:

ones crea una matriz de unos

zeros crea una matriz de ceros

eye crea la matriz identidad

La utilizaci¶on de las tres es muy similar, se introduce primero el n¶umerode ¯las y posteriormente el n¶umero de columnas; como muestra el siguienteejemplo:

Page 190: Simulink Tutorial Completo

4 Matrices

>> A=ones(3,2)

A =

1 1

1 1

1 1

>> B=zeros(3,5)

B =

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

>> C=eye(3)

C =

1 0 0

0 1 0

0 0 1

>> C=eye(3,4)

C =

1 0 0 0

0 1 0 0

0 0 1 0

N¶otese que si se desea la matriz identidad de orden n s¶olo hay que introducirn, pero si se desea una rectangular se utiliza igual que las funciones anteriores.

Otro tipo de matrices com¶unmente utilizadas son los vectores, los cuales sepueden de¯nir como cualquier matriz. La importancia radica en que muchasveces se utilizan para indexar alguna serie de elementos, para de¯nirlos deesta manera se utiliza (:), de la siguiente manera:

Page 191: Simulink Tutorial Completo

1.1.4 Manipulaci¶on de matrices 5

n¶umero inicial:paso:cota superior

Por ejemplo:

>> 1:4:19

ans =

1 5 9 13 17

1.1.4. Manipulacion de matrices

Una aplicaci¶on de uso frecuente consiste en seleccionar algunas columnas,¯las o simplemente elementos de alguna matriz; esto se logra con la utilizaci¶onde par¶entesis despu¶es del nombre del nombre de la variable y de dos puntos(:). A continuaci¶on se muestran algunos ejemplos para la matriz de¯nidaanteriormente:

>> A(1,1)

ans =

2

>> A(:,1)

ans =

2

0

>> A(2,:)

ans =

0 1

>> A(4)

Page 192: Simulink Tutorial Completo

6 Matrices

ans =

1

En el primer ejemplo se obtiene el elemento a11 de la matriz, en el segundoejemplo la primera columna, el tercer ejemplo se obtiene la segunda ¯la,y para el ¶ultimo ejemplo se obtiene el cuarto elemento de la matriz. Lanumeraci¶on del ¶ultimo ejemplo es por columnas (as¶³ a11 es 1, a21 es 2, a12

es 3, a22 es 4).Adem¶as de seleccionar elementos, muchas veces es ¶util eliminar alg¶un(os)

elemento(s) de la matriz4, para lograr lo anterior se utilizan un par de par¶ente-sis cuadrados. As¶³, por ejemplo, si se desea borrar la segunda columna de unamatriz dada:

>> A=[1 2 6; 3 4 8; 5 7 9; 3 4 9];

>> A(:,2)=[ ]

A =

1 6

3 8

5 9

3 9

Es importante notar que tanto la selecci¶on como la eliminaci¶on de elementosde una matriz se puede realizar utilizando un vector como conjunto ¶³ndicesa utilizar. Por ejemplo:

>> A=0:1:10

A =

0 1 2 3 4 5 6 7 8 9 10

>> indice=1:2:11

indice =

4Sin embargo, solo se puede hacer si la estructura resultante sigue siendo una matriz

Page 193: Simulink Tutorial Completo

1.1.5 Arreglos 7

1 3 5 7 9 11

>> B=A(indice)

B =

0 2 4 6 8 10

obtiene los n¶umeros que est¶an en las posiciones impares del vector A.Muchas veces es ¶util concatenar matrices, lo cual se puede utilizar utili-

zando los par¶entesis cuadrados ([ ]). Por ejemplo para concatenar horizontal-mente:

>> B=[1 2 3; 4 5 6];

>> C=[1 ; 2];

>> [B C]

ans =

1 2 3 1

4 5 6 2

y para concatenar verticalmente:

>> B=1:1:4;

>> C=4:-1:1;

>> [B ; C]

ans =

1 2 3 4

4 3 2 1

Obviamente las dimensiones de las matrices deben ser consistentes con laconcatenaci¶on.

1.1.5. Arreglos

Los arreglos son matrices, pero poseen una aritm¶etica distinta en cuan-to a la multiplicaci¶on y divisi¶on. Estas operaciones se ejecutan elemento a

Page 194: Simulink Tutorial Completo

8 Variables y Funciones

elemento, y para que sean consistentes los arreglos deben ser de las mismasdimensiones.

Para diferenciar las operaciones matriciales de las operaciones de arregloslos operadores van precedidos por un punto (.), como se muestra en el cuadro1.2.

Operaci¶on S¶ımboloMultiplicaci¶on .*

Divisi¶on por la derecha ./Divisi¶on por la izquierda .\

Potenciaci¶on .ˆTransposici¶on no conjugada .’

Cuadro 1.2: Operadores para ¶algebra de arreglos

Por ejemplo:

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

>> B=[3 4 8; 7 8 0];

>> A.\B

ans =

3.0000 1.3333 2.0000

1.7500 4.0000 0

corresponde a la divisi¶on de arreglos por la izquierda de A por B, i.e.bij

aij∀ i, j.

1.2. Variables y Funciones

1.2.1. Variables

Existen varios tipos de variables en Matlab, las m¶as comunes son:

double corresponden a las matrices y arreglos num¶ericos.

char son los arreglos de caracteres, se de¯nen entre ap¶ostrofes (’’):

Page 195: Simulink Tutorial Completo

1.2.2 Funciones 9

>> Z=’hola’

Z =

hola

1.2.2. Funciones

Las funciones son, al igual que en la mayor¶³a de los lenguajes, subrutinasque facilitan el trabajo, por ejemplo la funci¶on mean calcula el promedio omedia de un set de datos:

>> A=1:1:4;

>> mean(A)

ans =

2.5000

Lo importante con respecto a las funciones en Matlab es que vienen algu-nas incluidas en el programa (built-in functions) y otras viene dentro de losdistintos toolboxes que trae Matlab (por ejemplo mean).

Generalmente las funciones vienen con alguna ayuda de su utilizaci¶on, lacual se puede visualizar a trav¶es de la funci¶on help.

1.2.3. Algunas Variables y Funciones de utilidad

Matlab trae muchas variables y funciones prede¯nidas, algunas de estasvariables se muestran en el cuadro 1.3, mientras que algunas funciones m¶asutilizadas aparecen en el cuadro 1.4.

Si se aplica alguna de las funciones matem¶aticas a alguna matriz se ob-tiene una matriz en la que los elementos han sido evaluados por la funci¶on.Por ejemplo:

>> X=0:0.1:1;

>> exp(-X)

ans =

Page 196: Simulink Tutorial Completo

10 Variables y Funciones

Nombre Descripci¶onpi El n¶umero m¶as famoso del mundoi Unidad imaginariaj Lo mismo que i, pero para los el¶ectricos

Inf In¯nitoNaN No es un n¶umeroeps Precisi¶on relativa de punto flotante, 2−52

Cuadro 1.3: Variables Prede¯nidas

Nombre Descripci¶onsin(X) Funci¶on seno de X

cos(X) Funci¶on coseno de X

tan(X) Funci¶on tangente de X

exp(X) Funci¶on exponencial de X

log(X) Funci¶on logaritmo natural de X

plot(X,Y) Gr¶a¯ca Y versus Xclear(A) Borra la variable A

det(A) Calcula el determinante de la matriz A

eig(A) Calcula los valores y vectores propios de la matrizA

poly(A) Calcula los coe¯cientes del polinomio caracter¶³sticode la matriz A

roots(coef) Calcula los ra¶³ces del polinomio cuyos coe¯cientesvienen en coef

sum(X) Suma los elementos del vector Xlength(X) Retorna el largo del vector Xsize(A) Retorna las dimensiones de la matriz A

help funcion Entrega ayuda sobre la funci¶on funcion

lookfor palabra Retorna las funciones en las que aparece el stringpalabra

Cuadro 1.4: Funciones B¶asicas m¶as comunes

Columns 1 through 7

1.0000 0.9048 0.8187 0.7408 0.6703 0.6065 0.5488

Page 197: Simulink Tutorial Completo

1.2.3 Algunas Variables y Funciones de utilidad 11

Columns 8 through 11

0.4966 0.4493 0.4066 0.3679

Page 198: Simulink Tutorial Completo

12 Gr¶a¯cos

1.3. Graficos

Para gra¯car en Matlab fundamentalmente se utiliza la funci¶on plot

mencionada anteriormente, sin embargo tambi¶en es posible gra¯car en formaescalonada, utilizando s¶olo l¶³neas verticales, utilzando n¶umeros complejos oen 3D, entre muchas maneras de gra¯car. A continuaci¶on se detallan las m¶asutilizadas y los comandos m¶as ¶utiles relacionados.

1.3.1. Figuras

Una ¯gura es una ventana en la cual se desplegan los gr¶a¯cos obtenidosmediante Matlab. Esto presenta varias ventajas las cuales se mostrar¶an m¶asadelante.

Aunque, generalmente, las ¯guras se generan por defecto al crear un gr¶a¯-co, a veces es necesario pedir otra ¯gura a Matlab, para esto se utiliza elcomando figure, el cual genera otra ¯gura en la pantalla. El modo de utili-zarlo es:

>> figure

Si se desea cerrar alguna ¯gura se utiliza la funci¶on close, seguida deln¶umero de la ¯gura. Si se quiere cerrar todas las ¯guras entonces se ejecuta:

>> close all

lo cual cierra todas las ¯guras existentes5.

1.3.2. Graficos en 2D

Como se menciona anteriormente se utiliza la funci¶on plot, tal como semuestra en el siguiente ejemplo:

>> t=0:0.1:5;

>> plot(t,exp(-t))

lo cual produce como resultado la ¯g. 1.1.Para que plot funcione ambos vectores deben tener el mismo largo. Si X

o Y es una matriz entonces el vector es gra¯cado versus las ¯las o columnasde la matriz, dependiendo de con cual se alinee.

5De manera analoga clear all borra todas las variables

Page 199: Simulink Tutorial Completo

1.3.2 Gr¶a¯cos en 2D 13

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Figura 1.1: Ejemplo de plot

Adem¶as plot tiene m¶as opciones las cuales se pueden ver en la ayuda dela funci¶on.

Una forma de gra¯car com¶unmente usada es aquella en la cual se encuen-tran dos gr¶a¯cas en la misma ¯gura . Lo anterior se puede lograr de variasmaneras, dos de ellas son:

>> plot(t,exp(-t),t,sin(t))

>> plot(t,[exp(-t); sin(t)])

las cuales producen el mismo resultado (¯g. 1.2). Sin embargo, hay otraopci¶on la cual consiste en utilizar la funci¶on hold que retiene el gr¶a¯co actualy agrega el gr¶a¯co deseado a la ¯gura actual. Para el ejemplo anterior:

>> plot(t,exp(-t))

>> hold on

>> plot(t,sin(t))

>> hold off

cuyo resultado se muestra en la ¯g. 1.3. La utilizaci¶on de hold off es parasoltar la ¯gura.

Page 200: Simulink Tutorial Completo

14 Gr¶a¯cos

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Figura 1.2: Dos gr¶a¯cas en la misma ¯gura

Para crear una leyenda de las gr¶a¯cas se utiliza la funci¶onlegend(string1,string2, ...), donde los string i son los textos de cada gr¶a¯co para laleyenda, as¶³ para el ejemplo anterior, la instrucci¶on:

>> legend(’exponencial’, ’seno’)

produce la ¯g. 1.4.Tambi¶en es posible gra¯car en escalonada utilizando la funci¶on stairs(X,Y)

de manera an¶aloga al uso de la funci¶on plot, con la diferencia que los ele-mentos del vector X deben ser equiespaciados.

Si se quiere gra¯car senales de tiempo discreto se puede utilizar la funci¶onstem(X,Y), cuyo uso es an¶alogo a las funciones anteriores.

Muchas veces es muy ¶util agrupar varios gr¶a¯cos en una misma ¯gura, locual se consigue f¶acilmente con la funci¶on subplot(m,n,i), la cual divide la¯gura en una matriz de m£n y el gr¶a¯co se agrega en el elemento i-¶esimo.Adem¶as, tiene la ventaja de agregar gr¶a¯cas que ocupen distinto tamano enla ¯gura resultante. Por ejemplo, las siguientes instrucciones:

>> X=-pi:0.1:pi;

>> subplot(3,2,1)

Page 201: Simulink Tutorial Completo

1.3.2 Gr¶a¯cos en 2D 15

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Figura 1.3: Ejemplo de hold

>> plot(X,sin(X));

>> subplot(3,2,2)

>> plot(X,cos(X));

>> subplot(3,1,2)

>> plot(X,cos(X)+sin(X));

>> subplot(3,1,3)

>> plot(X,[cos(X);sin(X)]);

generan como resultado la ¯g. 1.5.Tambi¶en hay funciones para poner t¶³tulos, formatear los ejes, poner textos

en cualquier parte de la ¯gura, nombrar el eje x y el eje y, utilizar grilla, etc.La mayor¶³a de las funciones anteriores aparece en la ayuda de la funci¶onplot.

No hay que olvidar que todas las instrucciones anteriores pueden combi-narse, para producir las ¯guras que uno desea.

Page 202: Simulink Tutorial Completo

16 Gr¶a¯cos

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1exponencialseno

Figura 1.4: Ejemplo de legend

−4 −2 0 2 4−1

−0.5

0

0.5

1

−4 −2 0 2 4−1

−0.5

0

0.5

1

−4 −3 −2 −1 0 1 2 3 4−2

−1

0

1

2

−4 −3 −2 −1 0 1 2 3 4−1

−0.5

0

0.5

1

Figura 1.5: Ejemplo de subplot

Page 203: Simulink Tutorial Completo

Cap¶ıtulo 2

Simulink

Simulink es un sistema interactivo para simular sistemas dinamicos no-

lineales. La gran ventaja de Simulink es su interfaz grafica, mediante la cual se

pueden implementar complicados modelos y obtener simulaciones en un tiempo

extremadamente rapido a traves de los diagramas de bloques.

2.1. Diagramas de Bloques

En pocas palabras para utilizar Simulink s¶olo hay que saber c¶omo tra-ducir una ecuaci¶on diferencial o de diferencias a un diagrama de bloques. Porejemplo si se desea simular la respuesta de la siguiente ecuaci¶on diferencial

y(t) + 3y(t) = 1

y(0) = 0(2.1)

primero hay que generar el diagrama de bloques del modelo, el cual se observaen la ¯g. 2.1. La implementaci¶on en Simulink se muestra la ¯g. 2.2, y a

Figura 2.1: Diagrama de Bloques

17

Page 204: Simulink Tutorial Completo

18 Usando Simulink

Figura 2.2: Implementaci¶on en Simulink

trav¶es de ¶esta se obtiene la respuesta del sistema descrito por (2.1), la cualse aprecia en la ¯g. 2.3.

0 1 2 3 4 5 6 7 8 9 100

0.05

0.1

0.15

0.2

0.25

0.3

0.35

Figura 2.3: Respuesta del sistema din¶amico

2.2. Usando Simulink

Para utilizar Simulink s¶olo es necesario construir el diagrama de bloquesmediante los bloques prede¯nidos que vienen en la librer¶³a.

El uso de los bloques es bastante sencillo, s¶olo hay que arrastrar el iconodel bloque al modelo que se est¶a construyendo. Si se desean cambiar lospar¶ametros de los bloques s¶olo hay que hacer un doble click sobre su icono.

Page 205: Simulink Tutorial Completo

2.2.1 Librer¶³a “Continuos” 19

Para conectar los bloques hay que situar el puntero del mouse sobre elpuerto de salida del primer bloque, con lo que el puntero deber¶³a cambiar auna cruz, y arrastrar el mouse hacia el puerto de entrada del siguiente bloque.

A continuaci¶on se detallan los bloques m¶as utilizados.

2.2.1. Librerıa “Continuos”

En esta librer¶³a se encuentran todos los bloques de tiempo continuo parasistemas lineales, los cuales son:

Derivative: Derivada num¶erica de la senal de entrada.

Integrator: Integra la senal de entrada.

Memory: Retrasa la senal en un tiempo de integraci¶on.

State-Space: Representaci¶on en variables de estado.

Transfer-Fcn: Representaci¶on en funci¶on de transferencia. Expresi¶on ma-tricial para el numerador, expresi¶on vectorial para el denominador. Elancho de la salida debe ser igual al n¶umero de ¯las del numerador. Loscoe¯cientes son potencias descendentes de s.

Transport Delay: Aplica el retraso especi¯cado a la senal de entrada.

Variable Transport Delay: Aplica un retraso a la primera senal de entra-da. La segunda entrada especi¯ca el retardo.

Zero-Pole: Representaci¶on en polos y ceros. Expresi¶on matricial para losceros. Expresi¶on vectorial para los polos y la ganancia. El ancho de lasalida debe igualar el n¶umero de columnas de la matriz de ceros, o unosi los ceros son un vector.

2.2.2. Librerıa “Discrete”

Esencialmente es id¶entica a la anterior, pero para sistemas lineales detiempo discreto, i.e. para ecuaciones de diferencias. Los bloques son:

Discrete Transfer-Fcn: Funci¶on de transferencia discreta, an¶alogo al casocontinuo.

Page 206: Simulink Tutorial Completo

20 Usando Simulink

Discrete Zero-Pole: Representaci¶on discreta en polos y ceros. ¶Idem al casocontinuo.

Discrete Filter: Filtro discreto. Expresi¶on vectorial para el numerador y eldenominador. Los coe¯cientes son para potencias ascendentes de z−1.

Discrete State-Space: Representaci¶on en variables de estado de tiempodiscreto.

Discrete-Time Integrator: Integraci¶on en tiempo discreto de la senal deentrada.

First-Order Hold: Retenedor de primer orden.

Unit Delay: Muestrea y retiene con un per¶³odo de muestreo de retraso.

Zero-Order Hold: Retenedor de orden cero.

2.2.3. Librerıas “Sources” y “Sinks”

Estas librer¶³as son aquellas que proveen las fuentes y los sumideros de losdiagramas de bloques. Algunos de ¶estos son:

Clock: Librer¶ıa “Sources”. Genera el tiempo de simulaci¶on actual.

Constant: Librer¶ıa “Sources”. Genera una constante especi¯cada en el par¶ame-tro ‘Constant value’ . Si ’Constant value’ es un vector y ’Interpret vectorparameters as 1-D’ est¶a arriba (on), el valor constante es tratado comoun arreglo 1-D. Sino, la salida es una matriz con las mismas dimensionesque el valor constante.

Signal Generator: Librer¶ıa “Sources”. Genera varias formas de onda.

Sine Wave: Librer¶ıa “Sources”. Genera una onda sinusoidal.

Step: Librer¶ıa “Sources”. Genera un escal¶on.

Display: Librer¶ıa “Sinks”. Representaci¶on num¶erica de los valores de en-trada.

Scope: Librer¶ıa “Sinks”. Representaci¶on gr¶a¯ca de los valores de entradaversus el tiempo de simulaci¶on.

Page 207: Simulink Tutorial Completo

2.2.4 Otras Librer¶³as 21

Stop Simulation: Librer¶ıa “Sinks”. Detiene la simulaci¶on cuando la en-trada es distinta de cero.

To File: Librer¶ıa “Sinks”. Escribe el tiempo y la entrada al archivo MATespeci¯cado en formato ¯la. El tiempo est¶a en la primera ¯la.

To Workspace: Librer¶ıa “Sinks”. Escribe la salida al arreglo o estructuraespeci¯cado en el workspace principal de Matlab. Los datos no est¶andisponibles hasta que la simulaci¶on se detiene.

XY Graph : Librer¶ıa “Sinks”. XY scope usando la ventana gr¶a¯ca deMatlab. la primera entrada es usada como base temporal. Se ingresanlos rangos del gr¶a¯co.

2.2.4. Otras Librerıas

Adem¶as de las librer¶³as anteriormente detalladas, existen otras que pro-veen los siguientes bloques que son extremadamente ¶utiles:

Fcn: Librer¶ıa “Functions & Tables”. Bloque para una expresi¶on general.Usa “u” como el nombre de la variable de entrada. Ejemplo: sin(u[1]* exp(2.3 * -u[2]))

MATLAB Fcn: Librer¶ıa “Functions & Tables”. Pasa los valores de entra-da a una funci¶on de Matlab para evaluarla. La funci¶on debe retornarun s¶olo argumento vectorial del largo de ‘Output width’. Ejemplos:sin, sin(u), foo(u(1), u(2))

Polynomial: Librer¶ıa “Functions & Tables”. Evaluaci¶on polinomial. Cal-cula P(u) dado por el arreglo de coe¯cientes polinomiales P. P est¶a or-denado del mayor al menor orden, la forma aceptada por la funci¶onpolyval de Matlab.

S-Function: Librer¶ıa “Functions & Tables”. Bloque de¯nible por el usua-rio. Los bloques pueden estar escritos en M, C, Fortran o Ada y debencumplir los est¶andares de S-function. t,x,u y flag son autom¶aticamenteentregados a la S-function por Simulink. Par¶ametros “Extra” puedenser especi¯cados en el campo ‘S-function parameters’.

Abs: Librer¶ıa “Math”. Valor absoluto, i.e. y = |u|.

Page 208: Simulink Tutorial Completo

22 Usando Simulink

Dot Product: Librer¶ıa “Math”. Producto interno (punto). y = sum(conj(

u1).*u2)

Gain: Librer¶ıa “Math”. Ganancia elemento a elemento (y = K.*u) o ga-nancia matricial (y = K*u o y = u*K).

Math Function: Librer¶ıa “Math”. Funciones matem¶aticas incluyendo fun-ciones logar¶³tmicas, exponencial, potenciaci¶on, y m¶odulo.

Matrix Gain: Librer¶ıa “Math”. Ganancia elemento a elemento (y = K.*u)o ganancia matricial (y = K*u o y = u*K).

MinMax: Librer¶ıa “Math”. La salida es el m¶³nimo o m¶aximo de la entrada.Para una sola entrada, los operadores se aplican a trav¶es del vector deentrada. Para m¶ultiples entradas, los operadores se aplican a trav¶es delas entradas.

Product: Librer¶ıa “Math”. Multiplica o divide las entradas. Especi¯caruna de las dos opciones siguientes:

1. * o / para cada puerto de entrada (ej., **/*)

2. Un escalar especi¯cando el n¶umero de puertos de entrada a sermultiplicados.

El valor escalar ‘1’ para producto elemento a elemento causa quetodos los elementos de un solo vector de entrada sean multiplica-dos.

Sum: Librer¶ıa “Math”. Suma o substrae las entradas. Especi¯car una delas dos opciones siguientes:

1. Un string conteniendo + o - para cada puerto de entrada, | paraespacio entre los puertos (ej. ++|-|++)

2. Un escalar ≥ 1. Un valor ¿1 suma todas las entradas; 1 suma loselementos de una solo vector de entrada.

Trigonometric Function: Librer¶ıa “Math”. Funciones trigonom¶etricas ehiperb¶olicas.

Demux: Librer¶ıa “Signals & Systems”. Divide:

Page 209: Simulink Tutorial Completo

2.2.4 Otras Librer¶³as 23

1. senales vectoriales a escalares o vectores m¶as pequenos, o

2. senales tipo bus producidas por el bloques Mux en sus valoresescalares, vectoriales o matriciales constituyentes. Chequear ‘BusSelection Mode’ para dividir senales tipo bus.

Mux: Librer¶ıa “Signals & Systems”. Multiplexa senales escalares, vectoria-les, o matriciales a un bus.

Terminator: Librer¶ıa “Signals & Systems”. Usado para “terminar”senalesde salida. (Previene advertencias acerca puertos de salida no conecta-dos.)

Page 210: Simulink Tutorial Completo

24 Usando Simulink

Page 211: Simulink Tutorial Completo

Ap¶endice A

Funciones Comunes

A continuaci¶on se incluyen las funciones m¶as utilizadas de Matlab conuna pequena descripci¶on de lo que hacen.

acos: Funci¶on. Sintaxis acos(X). Funci¶on arcocoseno de X.

asin: Funci¶on. Sintaxis asin(X). Funci¶on arcoseno de X.

atan: Funci¶on. Sintaxis atan(X). Funci¶on arcotangente de X.

atan2: Funci¶on. Sintaxis atan(Y,X). Funci¶on arcotangente de Y/X. La salidase encuentra entre ¡π y π.

clear: Funci¶on. Sintaxis clear(A). Borra la variable A.

cos: Funci¶on. Sintaxis cos(X). Funci¶on coseno de X.

ctrb: Funci¶on. Sintaxis ctrb(A,B). Retorna la matriz de controlabilidad delsistema formado por A y B.

det: Funci¶on. Sintaxis det(A). Calcula el determinante de la matriz A.

eig: Funci¶on. Sintaxis eig(A). Calcula los valores y vectores propios de lamatriz A.

eps: Variable. Precisi¶on relativa de punto flotante, 2−52.

exp: Funci¶on. Sintaxis exp(X). Funci¶on exponencial de X.

expm: Funci¶on. Sintaxis expm(A). Calcula la matriz exponencial de A.

25

Page 212: Simulink Tutorial Completo

26 AP¶ENDICE A. FUNCIONES COMUNES

help: Funci¶on. Sintaxis help function. Entrega ayuda sobre la funci¶onfunction.

i: Variable. Unidad imaginaria.

inv: Funci¶on. Sintaxis inv(A). Retorna la matriz inversa de A.

Inf: Variable. In¯nito.

j: Variable. Lo mismo que i, pero para los el¶ectricos.

length: Funci¶on. Sintaxis length(X). Retorna el largo del vector X.

log: Funci¶on. Sintaxis log(X). Funci¶on logaritmo natural de X.

logm: Funci¶on. Sintaxis logm(A). Logaritmo natural matricial de A. Es lafunci¶on inversa de expm(A).

log10: Funci¶on. Sintaxis log10(X). Funci¶on logaritmo ordinario (en base10) de X.

log2: Funci¶on. Sintaxis log2(X). Funci¶on logaritmo en base 2 de X.

lookfor: Funci¶on. Sintaxis lookfor(string). Retorna las funciones en lasque aparece la palabra string en la ayuda de dicha funci¶on.

max: Funci¶on. Sintaxis [Y,I]=max(X). Retorna el elemento m¶as grande deX en Y, y el ¶³ndice en que se encuentra en I.

mean: Funci¶on. Sintaxis mean(X). Retorna el valor medio o promedio de loselementos de X.

min: Funci¶on. Sintaxis [Y,I]=max(X). Retorna el elemento m¶as pequeno deX en Y, y el ¶³ndice en que se encuentra en I.

NaN: Variable. No es un n¶umero, usualmente aparece cuando hay una di-visi¶on del tipo 0/0.

obsv: Funci¶on. Sintaxis obsv(A,C). Retorna la matriz de observabilidad delsistema formado por A y C.

pi: Variable. El n¶umero m¶as famoso del mundo.

Page 213: Simulink Tutorial Completo

27

plot: Funci¶on. Sintaxis plot(X,Y). Gr¶a¯ca Y versus X.

poly: Funci¶on. Sintaxis poly(A). Calcula los coe¯cientes del polinomio ca-racter¶³stico de la matriz A.

roots: Funci¶on. Sintaxis roots(coef). Calcula los ra¶³ces del polinomio cu-yos coe¯cientes vienen en coef.

sin: Funci¶on. Sintaxis sin(X). Funci¶on seno de X.

size: Funci¶on. Sintaxis size(A). Retorna las dimensiones de la matriz A.

sum: Funci¶on. Sintaxis sum(X). Suma los elementos del vector X.

subplot: Funci¶on. Sintaxis subplot(m,n,i). Genera una separaci¶on en una¯gura, dada por un arreglo de m ¯las y n columnas, y gra¯ca en laposici¶on i-¶esima del arreglo.

ss: Funci¶on. Sintaxis ss(A,B,C,D). Genera un modelo formulado en varia-bles de estado.

ss2tf: Funci¶on. Sintaxis [num,den]=tf2ss(A,B,C,D). Convierte una repre-sentaci¶on en variables de estado a un modelo dado por la funci¶on detransferencia.

ss2zp: Funci¶on. Sintaxis [Z,P,K]=zp2ss(A,B,C,D). Convierte una repre-sentaci¶on en variables de estado a un modelo en formato zpk.

std: Funci¶on. Sintaxis std(X). Retorna la desviaci¶on est¶andar de los ele-mentos de X.

tan: Funci¶on. Sintaxis tan(X). Funci¶on tangente de X.

tf: Funci¶on. Sintaxis tf(num,den). Crea una funci¶on de transferencia. numson los coe¯cientes del numerador, que van listados en potencias decre-cientes de s o z, den es an¶alogo.

tf2ss: Funci¶on. Sintaxis [A,B,C,D]=tf2ss(num,den). Convierte una fun-ci¶on de transferencia a una representaci¶on en variables de estado. numson los coe¯cientes del numerador, que van listados en potencias decre-cientes de s o z, den es an¶alogo.

Page 214: Simulink Tutorial Completo

28 AP¶ENDICE A. FUNCIONES COMUNES

tf2zp: Funci¶on. Sintaxis [Z,P,K]=tf2zp(num,den). Convierte una funci¶onde transferencia a una representaci¶on zpk. num son los coe¯cientes delnumerador, que van listados en potencias decrecientes de s o z, den esan¶alogo.

var: Funci¶on. Sintaxis var(X). Retorna la varianza de los elementos de X.

zpk: Funci¶on. Sintaxis zpk(Z,P,K). Genera un modelo en el formato ceros-polos-ganancia (zpk).

zp2ss: Funci¶on. Sintaxis [A,B,C,D]=zp2ss(Z,P,K). Convierte un modeloen formato zpk a una representaci¶on en variables de estado.

zp2tf: Funci¶on. Sintaxis [num,den]=zp2tf(Z,P,K). Convierte una repre-sentaci¶on zpk a una funci¶on de transferencia.

Page 215: Simulink Tutorial Completo

Bibliograf¶ıa

[1] The Mathworks, “Getting Started with Matlab”

29

Page 216: Simulink Tutorial Completo

30 BIBLIOGRAF¶IA

Page 217: Simulink Tutorial Completo

¶Indice alfab¶etico

\, 2’, 2”, 8(), 5*, 2+, 2-, 2., 8/, 2:, 4, 5;, 1=, 1[], 1, 7ˆ, 2

acos, 25ans, 2arreglos, 8asin, 25atan, 25atan2, 25

char, 8clear, 10, 12, 25close, 12concatenar, 7cos, 10, 25ctrb, 25obsv, 26

det, 10, 25

double, 8

eig, 10, 25eliminar elementos, 6eps, 10, 25exp, 10, 25expm, 25eye, 3

figure, 12funciones, 1

help, 9, 10, 26hold, 13

i, 10, 26Inf, 10, 26inv, 2, 26

j, 10, 26

legend, 14length, 10, 26librer¶³a, 18

continuos, 19Derivative, 19Integrator, 19Memory, 19State-Space, 19Transfer-Fcn, 19Transport Delay, 19

31

Page 218: Simulink Tutorial Completo

32 ¶INDICE ALFAB¶ETICO

Variable Transport Delay,19

Zero-Pole, 19discrete, 19Discrete Filter, 20Discrete State-Space, 20Discrete Transfer-Fcn, 19Discrete Zero-Pole, 20Discrete-Time Integrator,

20First-Order Hold, 20Unit Delay, 20Zero-Order Hold, 20

functions & tables, 21Fcn, 21MATLAB Fcn, 21Polynomial, 21S-Function, 21

math, 21Abs, 21Dot Product, 22Gain, 22Math Function, 22Matrix Gain, 22MinMax, 22Product, 22Sum, 22Trigonometric Function, 22

signals & systems, 22Demux, 22Mux, 23Terminator, 23

sinks, 20Display, 20Scope, 20Stop Simulation, 21To File, 21To Workspace, 21

XY Graph, 21sources, 20Clock, 20Constant, 20Signal Generator, 20Sine Wave, 20Step, 20

log, 10, 26log10, 26log2, 26logm, 26lookfor, 10, 26

matrices, 1, 8max, 26mean, 9, 26min, 26

NaN, 10, 26

ones, 3

pi, 10, 26plot, 10, 12, 27poly, 10, 27

roots, 10, 27

seleccionar elementos, 5sin, 10, 27size, 10, 27ss, 27ss2tf, 27ss2zp, 27stairs, 14std, 27stem, 14subplot, 14, 27sum, 10, 27

Page 219: Simulink Tutorial Completo

¶INDICE ALFAB¶ETICO 33

tan, 10, 27tf, 27tf2ss, 27tf2zp, 28

var, 28variables, 1variables, 1vectores, 4

zeros, 3zp2ss, 28zp2tf, 28zpk, 28

Page 220: Simulink Tutorial Completo

Complementos de Procesado de Señal y Comunicaciones

Máster en Sistemas Multimedia

Introducción a

Matlab y SimulinkJavier Ramírez Pérez de InestrosaDpto. Teoría de la Señal, Telemática y Comunicaciones

Universidad de Granada

Email: [email protected]

Este tutorial se puede obtener en:

http://www.ugr.es/~javierrp

Page 221: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 2

¿Qué es Matlab?

MATLAB es un lenguaje de alto nivel para

realizar cálculos cientifico-técnicos.

Integra las herramientas de cálculo

necesarias con otras de visualización así

como, un entorno de programación de fácil

uso.

Page 222: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 3

Aplicaciones típicas

Cálculo matemático

Desarrollo de algoritmos

Adquisición de datos

Modelado, simulación y prototipado

Análisis de datos y visualización

Gráficos

Desarrollo de aplicaciones e interfaces

gráficas de usuario (GUI)

Page 223: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 4

Más sobre MatLab

MatLab significa “MATrix LABoratory”

El tipo básico de datos es el vector que no requiere ser dimensionado.

Proporciona unos paquetes de extensión (“toolboxes”) para aplicaciones específicas

Estos paquetes incluyen librerías de funciones MatLab (M-files) que extienden las posibilidades de MatLab para resolver problemas específicos

Page 224: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 5

El entorno de Matlab

Page 225: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 6

Sintaxis

Algunos ejemplos sencillos

Entrada Salida Comentarios

2 + 3

7-5

34*212

1234/5786

2^5

ans = 5

ans = 2

ans = 7208

ans = 0.2173

ans = 32

Los resultados son los esperados.

Nótese que al resultado se le da el nombre ans.

a = sqrt(2) a = 1.4142 Se puede escoger el nombre de la variable.

Page 226: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 7

b = a, pi, 2 + 3i

b = 1.4142

ans = 3.1416

ans = 2.0000 +

3.0000i

Se pueden introducir varios

comandos en una sola línea. Pi, i,

y j son constantes.

c = sin(pi)

eps

c = 1.2246e-016

ans = 2.2204e-016

"eps" es el limite actual de

precisión. No se puede operar con

números inferiores a eps.

d =

[1 2 3 4 5 6 7 8 9

]

e = [1:9]

f = 1:9

d = 1 2 3 4 5 6 7 8 9

e = 1 2 3 4 5 6 7 8 9

f = 1 2 3 4 5 6 7 8 9

Definición de vectores. "d", "e",

son "f" vectores. Son iguales. El

operador “:” se utiliza para formar

vectores; cuenta desde el número

inicial al final de uno en uno.

g = 0:2:10

f(3)

f(2:7)

f(:)

g = 0 2 4 6 8 10

ans = 3

ans = 2 3 4 5 6 7

1 2 3 4 5 6 7 8 9

Otros usos de “:”. Se utiliza para

acceder a parte o la totalidad de

los datos de un vector o matriz.

Page 227: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 8

h = [1 2 3];

h'

(nada)

ans = 1

2

3

Un punto y coma ";" evita que se

visualice la salida.

Una coma simple " ' " calcula la

traspuesta de una matriz, o en el caso

de vectores, intercambia entre vectores

fila y columna.

h * h'

h .* h

h + h

ans = 14

ans = 1 4 9

ans = 2 4 6

Operaciones con vectores. * es la

multiplicación matricial. Las

dimensiones deben ser las apropiadas.

" .* " es la multiplicación componente a

componente.

g = [ 1 2 3;

4 5 6; 7 8 9]

g = 1 2 3

4 5 6

7 8 9

Construcción de matrices.

g(2,3)

g(3,:)

g(2,3) = 4

ans = 6

ans = 7 8 9

g = 1 2 3

4 5 4

7 8 9

Accediendo a los elementos de la

matriz.

":" se utiliza para acceder a una fila

completa.

Page 228: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 9

g^2

g .^ 2

ans = 30 36 42

66 81 96

102 126 150

ans = 1 4 9

16 25 36

49 64 81

Multiplica la matriz por ella misma.

Eleva al cuadrado cada elemento de la

matriz.

Entrada Salida Comentarios

Page 229: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 10

Control de la salida

El comando format

format compact

Controla el espaciado de líneas.

format long

Muestra los 15 dígitos que se utilizan en el cálculo.

format short

Muestra únicamente cinco dígitos.

“;” al final del comando.

No visualizar salida:

help format

Más información.

Page 230: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 11

Más sobre matrices

Funciones incluidas en MatLabEntrada Salida Comentarios

rand(2)

rand(2,3)

ans = 0.9501 0.6068

0.2311 0.4860

ans = 0.8913 0.4565 0.8214

0.7621 0.0185 0.4447

Genera una matriz de

números aleatorios entre 0 y 1

zeros(2)

ones(2)

ans = 0 0

0 0

ans = 1 1

1 1

Genera una matriz 2x2 de

ceros o unos.

eye(2) ans = 1 0

0 1Matriz identidad I.

hilb(3) ans = 1.0000 0.5000 0.3333

0.5000 0.3333 0.2500

0.3333 0.2500 0.2000

Matriz de Hilbert 3x3.

Page 231: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 12

Más sobre matrices

Concatenación

Generar nuevas matrices a partir de otras

creadas previamente

Por ejemplo:

Sea la matriz a:

>> a = [1 2; 3 4]

a =

1 2

3 4

Page 232: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 13

Entrada Salida

[a, a, a] ans = 1 2 1 2 1 2

3 4 3 4 3 4

[a; a; a] ans = 1 2

3 4

1 2

3 4

1 2

3 4

[a, zeros(2); zeros(2), a'] ans = 1 2 0 0

3 4 0 0

0 0 1 3

0 0 2 4

Más sobre matrices - concatenación

Page 233: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 14

Más sobre matrices

Programación Se pueden construir matrices mediante programación

for i=1:10,

for j=1:10,

t(i,j) = i/j;

end

end

No se produciría salida puesto que la única línea que podría generar salida (t(i,j) =i/j;) termina en “;”

Sin el “;”, Matlab escribiría la matriz t 100 veces!!

Page 234: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 15

Operaciones con matrices

+, -, *, y /

Definen operaciones con matrices.

Debemos distinguir:

“.*”:

Multiplicación componente a componente.

“*”

Multiplicación matricial.

Page 235: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 16

Escalares

Un escalar es un número.

Matlab los almacena como matrices 1x1

Todas las operaciones entre escalares y

matrices se realizan componente a

componente salvo:

La potencia (“^”).

Page 236: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 17

Escalares

Ejemplos

Entrada Salida Comentarios

b=2 b=2 Define b como un escalar.

a + bans = 3 4

5 6

La suma se hace componente a

componente.

a * bans = 2 4

6 8Igual que la multiplicación.

a ^ bans = 7 10

15 22Potencia matricial - a*a

a .^ bans = 1 4

9 16

Potencia componente a

componente.

a = 1 2

3 4

Page 237: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 18

Vectores

Un vector es una matriz de una sola fila o

columnaEntrada Salida Comentarios

v = [1 2 3]

u = [3 2 1]

v = 1 2 3

u = 3 2 1Define 2 vectores.

v * u Error Las dimensiones no coinciden.

v * u' ans = 10Al tomar la traspuesta se corrige el

error.

dot(v,u) ans = 10Producto escalar (idéntico al

anterior).

cross(v,u) ans = -4 8 -4El producto vectorial sólo se emplea

con vectores en 3 dimensiones.

Page 238: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 19

Matrices

Entrada Salida Comentarios

k = [16 2 3;

5 11 10;

9 7 6]

k = 16 2 3

5 11 10

9 7 6

Define una

matriz.

trace(k) ans = 33Traza de una

matriz

rank(k) ans = 3Rango de una

matriz.

det(k) ans = -136Determinante de

una matriz

Matlab tiene numerosas funciones predefinidas (help matfun).

Page 239: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 20

Matrices

Entrada Salida Comentarios

inv(k)

ans = 0.0294 -0.0662 0.0956

-0.4412 -0.5074 1.0662

0.4706 0.6912 -1.2206

Inversa de una

matriz

[vec,val] =

eig(k)

vec = -0.4712 -0.4975 -0.0621

-0.6884 0.8282 -0.6379

-0.5514 0.2581 0.7676

val = 22.4319 0 0

0 11.1136 0

0 0 -0.5455

Vectores propios

y autovalores de

una matriz.

Las columnas de

"vec" contienen

los vectores

propios;

las entradas de

la diagonal de

"val" son los

autovalores.

Page 240: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 21

Variables en el espacio de trabajo

whos

Lista las variables definidas en el entorno.

>> whos

Name Size Bytes Class

a 100x1 800 double array

b 100x100 80000 double array

c 1x1 8 double array

Grand total is 10101 elements using 80808 bytes

clear

Borra variables del entorno.

Page 241: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 22

Resolución de sistemas de ecuaciones

Una de las principales aplicaciones de las matrices es la representación de sistemas de ecuaciones lineales.

Si a es una matriz de coeficientes, x es un vector columna que contiene las incógnitas y b los términos constantes, la ecuación

a x =b

representa el correspondiente sistema de ecuaciones.

Page 242: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 23

Resolviendo ecuaciones

Para resolver el sistema en MatLab x = a \ b

x es igual a la inversa de a por b

Ejemplo a = [1 2 3; 4 5 6; 7 8 10]; b = [1 1 1]';

Solución:

x =

-1

1

0

Page 243: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 24

Salvar y recuperar datos

Los datos de la sesión se pierden al salir de

MatLab.

Para salvar la sesión (entrada y salida)

Diary(‘session.txt’);

Guarda los comandos introducidos en la sesión.

Diary <ON/OFF> ;

Para salvar una o varias matrices

save datos.mat (guarda todas las variables)

save datos.mat x (sólo guarda x)

Page 244: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 25

Salvar y recuperar matrices

save sesion

Salva todas las variables en el archivo binario “sesion.mat”.

save fichero X

Salva sólo la variable X

load sesion

Recupera los datos previamente salvados

Si los ficheros se pueden salvar en formato texto (-ascii). Pueden verse con un editor de textos.

Page 245: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 26

Gráficos

El comando básico es: plot

plot(y);

plot(x,y);

plot(x,y,’b+’,x,z,’gx’);

color (b,g) blue,green

Marcador (+,x)

Personalización del gráfico:

title, xlabel, ylabel, legend, grid.

Page 246: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 27

Ejemplo

Mes = 1:12;

T_Gr = [-2 0 2 4 8 12 14 14 12 8 4 0];

T_Ma = [-4 -2 0 2 6 14 18 18 16 8 2 -2];

plot(Mes, T_Gr, 'bo', Mes, T_Ma, 'rv');

xlabel('Mes');

ylabel('Temperatura (°C)');

title('Temperaturas minimas en Granada y

Madrid');

legend('Granada','Madrid');

grid;

Page 247: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 28

Resultado:

Page 248: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 29

subplot

Mes = 1:12

T_Gr = [-2 0 2 4 8 12 14 14 12 8 4 0];

T_Ma = [-4 -2 0 2 6 14 18 18 16 8 2 -2];

subplot(2,1,1);

plot(Mes, T_Gr, 'bo-');

xlabel('Mes');

ylabel('Temperatura (°C)');

title('Temperaturas minimas en Granada');

grid;

subplot(2,1,2);

plot(Mes, T_Ma, 'rv-');

xlabel('Mes');

ylabel('Temperatura (°C)');

title('Temperaturas minimas en Madrid');

grid;

Page 249: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 30

Resultado

Page 250: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 31

Gráficos tridimensionales

[x,y] = meshgrid(-2:.2:2, -2:.2:2);

z = x .* exp(-x.^2 - y.^2);

mesh(z);

Page 251: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Gráficos tridimensionales

Z = X.*exp(-X.^2-Y.^2);

contour3(X,Y,Z,30)

surface(X,Y,Z,'EdgeColor',[.8 .8.8],'FaceColor','none')

grid off

view(-15,25)

colormap cool

32

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2

-2

-1

0

1

2

-0.5

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

0.5

Page 252: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 33

Programación

Ficheros de comandos (scripts)

Secuencias de comandos.

Al invocarlos se ejecutan en el entorno.

Las variables creadas son globales.

Ficheros de función

Permiten definir funciones propias.

Variables locales.

La información se pasa como parámetros.

Se pueden definir subfunciones.

Page 253: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 34

Un ejemplo de función

function y = media (x)

% Valor medio de x.

% Para vectores, media(x) devuelve el valor medio.

% Para matrices, media(x) es un vector fila

% que contiene el valor medio de cada columna.

[m,n] = size(x);

if m == 1

m = n;

end

y = sum(x)/m;

Page 254: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 35

Argumentos de funciones

nargin y nargout

Número de argumentos de entrada y salida con los que se llama a la función.

Ejemplo:function c = testarg1(a,b)

if (nargin == 1)

c = a.^2;

elseif (nargin == 2)

c = a + b;

end

Page 255: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 36

Subfunciones

function [media,mediana] = estadistica(u) % Función principal

% ESTADISTICA Calcula la media y la

% mediana utilizando funciones internas.

n = length(u);

media = mean(u,n);

mediana = median(u,n);

function a = mean(v,n) % Subfunción

% Calcula la media.

a = sum(v)/n;

function m = median(v,n) % Subfunción

% Calcula la mediana.

w = sort(v);

if rem(n,2) == 1

m = w((n+1)/2);

else

m = (w(n/2)+w(n/2+1))/2;

end

Page 256: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 37

Bifurcaciones

Condición

Sentencias

false

true

Condición

true

Bloque 1 Bloque 2

false

Condición 1

false

Condición 2

Bloque 1

Bloque 2

true

Bloque 3

false

true

Page 257: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 38

if

Sentencia if

if condición

sentencias

end

Bifurcación multiple

if condición1

bloque1

elseif condición2

bloque2

elseif condición3

bloque3

else

bloque4

end

Ejemplo

if rem(a,2) == 0

disp('a is par')

b = a/2;

end

Page 258: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 39

switch

switch expresion

case case1,

bloque1

case case2, case3, ...

bloque2

...

otherwise,

bloque3

end

switch valor

case -1

disp('negativo');

case 0

disp('cero');

case 1

disp('positivo');

otherwise

disp('otro');

end

Page 259: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 40

Bucles

Condición

Sentencias

false

true

Condición

Sentencias

true

false

Page 260: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 41

for

for i = 1:n

sentencias

end

for i = n:-0.2:1

sentencias

end

for i = 1:m

for j = 1:n

sentencias

end

end

for i = vector

sentencias

end

Page 261: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 42

while continue, break

while condición

sentencias

end

Sentencia continue

Hace que se pase

inmediatamente a la

siguiente iteración

del bucle for o while

Sentencia break

Hace que termine

la ejecución

n = 1;

while prod(1:n) < 1e100

n = n + 1;

end

Page 262: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 43

Toolboxes

Toolboxes para DSP y comunicaciones:

Communications Toolbox

Filter Design Toolbox

Image Processing Toolbox

Signal Processing Toolbox

Statistics Toolbox

System Identification Toolbox

Wavelet Toolbox

Page 263: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 44

Procesamiento de señales y comunicaciones

Matlab dispone de unas librerías para

tratamiento digital de señales.

Signal Processing Toolbox

Communications Toolbox

Page 264: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 45

Filtrado de señales

y= filter(b,a,x);

Filtra la secuencia x con el filtro descrito por b y a.

Page 265: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 46

Respuesta en frecuencia

[H,w] = freqz(b,a,N);

Calcula N puntos de la

respuesta en frecuencia del

filtro definido por b y a.

Para el filtro:

y(n)= 0.8·y(n-1) + x(n)

freqz(1,[1 -0.8],256);0 0.2 0.4 0.6 0.8 1

-60

-40

-20

0

Normalized Frequency ( rad/sample)

Ph

as

e (

de

gre

es

)

0 0.2 0.4 0.6 0.8 1-10

0

10

20

Normalized Frequency ( rad/sample)

Ma

gn

itu

de

(d

B)

Page 266: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 47

Diseño de filtros

B = FIR1(N,Wn);

Filtro FIR paso baja de orden N.

Wn es la frecuencia de corte normalizada (0<Wn<1).

B = FIR1(N,Wn,'high');

Filtro paso alta.

Wn = [W1 W2]; B = FIR1(N,Wn,'bandpass');

Filtro paso banda.

Wn = [W1 W2]; B = FIR1(N,Wn,'stop');

Filtro rechaza banda (notch).

Page 267: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 48

Ejemplo: Filtros FIR paso banda

% Parametros.

N= [8 16 32 64]; % Coeficientes del filtro

Wn = [0.4 0.6]; % Frecuencias de corte.

NFFT= 256; % Respuesta en frecuencia

L = length(N);

H = zeros(NFFT,L);

for i=1:L

B = FIR1(N(i),Wn,'bandpass'); % Diseño.

[H1,W]= freqz(B,1,NFFT); % Respuesta.

H(:,i)= H1;

end

% Visualizacion de la respuesta en frecuencia.

subplot(2,1,1);

plot(W/pi,20*log10(abs(H)));

xlabel('w en unidades de \pi');

ylabel('|H|');

legend('N=8','N=16','N=32','N=64');

grid;

subplot(2,1,2);

plot(W/pi,unwrap(angle(H)));

xlabel('w en unidades de \pi');

ylabel('Fase de H (rads)');

legend('N=8','N=16','N=32','N=64');

grid;

0 0.2 0.4 0.6 0.8 1-80

-60

-40

-20

0

w en unidades de

|H|

N=8

N=16

N=32

N=64

0 0.2 0.4 0.6 0.8 1-30

-20

-10

0

10

w en unidades de

Fa

se

de

H (

rad

s)

N=8

N=16

N=32

N=64

Page 268: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 49

Diseño y análisis de filtros (fdatool)

Page 269: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 50

Signal Processing Tool (SPTool)

Page 270: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 51

Signal Processing Tool (SPTool)

Page 271: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 52

Signal Processing Tool (SPTool)

Page 272: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 53

Signal Processing Tool (SPTool)

Page 273: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 54

Diezmado e interpolación

Y = DECIMATE(X,R)

Ejemplo: Decimación en un factor 4.

t = 0:.00025:1; % Vector de tiempos

x = sin(2*pi*30*t) + sin(2*pi*60*t);

y = decimate(x,4);

stem(x(1:120)); %Original

axis([0 120 -2 2])

title('Señal original')

figure

stem(y(1:30)); %Decimada

title('Señal decimada')

0 20 40 60 80 100 120-2

-1.5

-1

-0.5

0

0.5

1

1.5

2Señal original

0 5 10 15 20 25 30-2

-1.5

-1

-0.5

0

0.5

1

1.5

2Señal decimada

Page 274: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 55

Diezmado e interpolación

Y = INTERP(X,R)

t = 0:0.001:1; % Time vector

x = sin(2*pi*30*t) + sin(2*pi*60*t);

y = interp(x,4);

stem(x(1:30));

title('Señal original');

figure

stem(y(1:120));

title('Señal interpolada');

0 5 10 15 20 25 30-2

-1.5

-1

-0.5

0

0.5

1

1.5

2Señal original

0 20 40 60 80 100 120-2

-1.5

-1

-0.5

0

0.5

1

1.5

2Señal interpolada

Page 275: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 56

Densidad de potencia espectral

periodogram

Fs = 1000; t = 0:1/Fs:.3;

% Una señal coseno de 200Hz más ruido

x = cos(2*pi*t*200)+randn(size(t));

periodogram(x,[],'twosided',512,Fs);

% Se usa la ventana por defecto

pwelch

Fs = 1000; t = 0:1/Fs:.296;

% Una señal coseno de 200 Hz más ruido

x = cos(2*pi*t*200)+randn(size(t));

pwelch(x,[],[],[],Fs,'twosided');

% Ventana por defecto, solapamiento y NFFT.

Page 276: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 57

Ejemplos

0 100 200 300 400 500 600 700 800 900-50

-45

-40

-35

-30

-25

-20

-15

-10

Frequency (Hz)

Po

wer

Sp

ectr

al D

en

sit

y (

dB

/Hz)

Periodogram PSD Estimate

0 100 200 300 400 500 600 700 800 900-34

-32

-30

-28

-26

-24

-22

-20

-18

-16

Frequency (Hz)

Po

wer

Sp

ectr

al D

en

sit

y (

dB

/Hz)

Welch PSD Estimate

Page 277: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 58

Estimación espectral paramétrica

Método de covarianza

pcov(X,ORDER,NFFT,Fs)

randn('state',1);

x = randn(100,1);

y = filter(1,[1 1/2 1/3 1/4 1/5],x);

pcov(y,4,[],1000);

Método de covarianza modificado

pmcov(X,ORDER,NFFT,Fs)

randn('state',1);

x = randn(100,1);

y = filter(1,[1 1/2 1/3 1/4 1/5],x);

pmcov(y,4,[],1000);

Page 278: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 59

Ejemplos

0 100 200 300 400 500-38

-36

-34

-32

-30

-28

-26

-24

Frequency (Hz)

Po

we

r S

pe

ctr

al D

en

sit

y (

dB

/Hz)

Covariance PSD Estimate

0 100 200 300 400 500-38

-36

-34

-32

-30

-28

-26

-24

Frequency (Hz)

Po

we

r S

pe

ctr

al D

en

sit

y (

dB

/Hz)

Modified Covariance PSD Estimate

0 100 200 300 400 500-38

-36

-34

-32

-30

-28

-26

-24

Frequency (Hz)

Po

we

r S

pe

ctr

al D

en

sit

y (

dB

/Hz)

Burg PSD Estimate

0 100 200 300 400 500-38

-36

-34

-32

-30

-28

-26

-24

Frequency (Hz)

Po

we

r S

pe

ctr

al D

en

sit

y (

dB

/Hz)

Yule-Walker PSD Estimate

Page 279: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 60

Modelado. Predicción lineal

Predictor lineal: Estima la muestra siguiente utilizando N muestras

anteriores.

[A,E] = LPC(X,N)

Calcula:

Los coeficientes del predictor, A.

La varianza del error, E.

)(nx Predictor

lineal

N

iinxiAnx

1)()1()(ˆ

)(ˆ nx )(ˆ)()( nxnxne

Minimizando J= E|e(n)|2

Page 280: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 61

Comunicaciones

Funciones principales:

Generación de señales aleatorias

Análisis de errores

Codificación de la fuente (escalar, diferencial)

Codificación para el control de errores

(convolucional, codificación lineal de bloques)

Modulación y demodulación (analógica y digital)

Filtrado mediante filtros especiales

Aritmética en cuerpos de Galois

Page 281: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 62

Modulación analógica y digital

Page 282: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 63

Funciones utilizadas frecuentemente

randint

Genera una matriz de números aleatorios enteros

uniformemente distribuidos. out = randint; % Un solo valor [0,1]

out = randint(N); % Matriz cuadrada NN

out = randint(M,N); % Matriz MN

out = randint(M,N,rg); % Se especifica el rango.

Page 283: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 64

Modulación/demodulación digital

Page 284: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 65

Modulación/demodulación digital

“Mapping”+modulación/demodulación dmodce/ddemodce

y = dmodce(x,Fd,Fs,'method/nomap'...);

y = dmodce(x,Fd,Fs,'ask',M);

y = dmodce(x,Fd,Fs,'fsk',M,tone);

y = dmodce(x,Fd,Fs,'msk');

y = dmodce(x,Fd,Fs,'psk',M);

y = dmodce(x,Fd,Fs,'qask',M);

y = dmodce(x,Fd,Fs,'qask/arb',inphase,quadr);

y = dmodce(x,Fd,Fs,'qask/cir',numsig,amp,phs);

y = dmodce(x,Fd,[Fs initphase],...);

Sólo “mapping” modmap/demodmap

modmap('method',...);

y = modmap(x,Fd,Fs,'ask',M);

y = modmap(x,Fd,Fs,'fsk',M,tone);

y = modmap(x,Fd,Fs,'msk');

y = modmap(x,Fd,Fs,'psk',M);

y = modmap(x,Fd,Fs,'qask',M);

y = modmap(x,Fd,Fs,'qask/arb',inphase,quadr);

y = modmap(x,Fd,Fs,'qask/cir',numsig,amp,phs);

Page 285: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 66

Ejemplo

M = 16; % Modulación M-aria.

Fd = 1; % Se muestrea el mensaje original

% a una muestra por segundo.

Fs = 3; % La señal modulada se muestrea

% a una frecuencia de 3 muestras por segundo.

x = randint(100,1,M); % Mensaje digital aleatorio.

% Modulación M-ary PSK

y = dmodce(x,Fd,Fs,'psk',M);

% Adición de ruido Gaussiano.

ynoisy = y + .04*randn(300,1) + .04*j*randn(300,1);

% Diagrama de dispersión a partir de las observaciones ruidosas.

scatterplot(ynoisy,1,0,'b.');

% Demodulación para recuperar el mensaje

z = ddemodce(ynoisy,Fd,Fs,'psk',M);

s = symerr(x,z) % Comprobar la tasa de error de los símbolos.

Page 286: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 67

Gráfico de dispersión (ruido)

-1 -0.5 0 0.5 1

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Qu

ad

ratu

re

In-Phase

Scatter plot

Page 287: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 68

Análisis de errores

biterr

Calcula el número de bits erróneos y la tasa de error.

[number,ratio] = biterr(x,y);

[number,ratio] = biterr(x,y,k);

[number,ratio] = biterr(...,flg);

[number,ratio,individual] = biterr(...)

Page 288: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 69

Ejemplo

x = randint(100,100,4); % Señal original

% Introducción de errores.

% Los errores pueden ser 1, 2, o 3 (no 0).

% Colocación de los errores

errorplace = (rand(100,100) > .9);

errorvalue = randint(100,100,[1,3]); % Valor error

errors = errorplace.*errorvalue;

y = rem(x+errors,4); % Señal y error sumadas mod 4

% Análisis de errores

format short

[num_bit,ratio_bit] = biterr(x,y,2)

[num_sym,ratio_sym] = symerr(x,y)

Page 289: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 70

Ejercicio:

Estudiar mediante Matlab/Simulink el efecto del ruido en los sistemas de comunicación digital.

Construir el diagrama de bloques de simulación.

Simular el sistema: Diferentes esquemas de modulación (ASK, PSK, FSK,

MSK).

Obtener las curvas de error en función de la SNR.

Adicionalmente, considérese PSK con M= 4 y 8 símbolos y compárese las curvas de error frente a la SNR.

Page 290: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 71

Introducción a Simulink

Simulink es una herramienta para modelado,

simulación y análisis de sistemas dinámicos.

Soporta tanto sistemas lineales como no

lineales:

en tiempo continuo,

muestreados,

híbridos y

sistemas multifrecuencia (contienen sistemas

muestreados a diferente frecuencia).

Page 291: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 72

Entorno de trabajo

Page 292: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 73

Construcción del diagrama de bloques

Page 293: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 74

Resultado de la simulación

0 500 1000 1500 2000 2500 3000-1

-0.5

0

0.5

1

0 0.5 1 1.5 2 2.5 3

x 104

-1

-0.5

0

0.5

1

Page 294: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 75

Ejemplo

Page 295: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 76

Simulación

Page 296: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 77

Análisis/síntesis LPC de la señal de voz

Page 297: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 78

Estimación espectral

Page 298: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 79

Resultado de la simulación

Page 299: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 80

Sistema de comunicación digital

8-PSK (Gray)

Page 300: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Procesado de imágenes

Lectura de imágenes: A = imread(filename, fmt)

Lee una imagen en escala de grises o en color

fmt especifica el formato de imagen (BMP, JPEG, PNG, TIFF, etc)

[X, map] = imread(...)

map Mapa de color

Visualización de la imagen imshow imshow(I)

imshow(I,[low high])

imshow(RGB)

imshow(BW)

imshow(X,map)

81

Page 301: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Lectura de imágenes

A= imread('texto.tif');

imshow(A);

size(A); size(A);

500500

[B map]=

imread('flor.tif');

imshow(B); size(A);

5005003

82

Page 302: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Transformaciones espaciales

Modificación del tamaño B = imresize(A, scale)

B = imresize(A, [mrows ncols])

Rotar una imagen B = imrotate(A,angle)

B = imrotate(A,angle,method)

method -> Interpolación ‘nearest’, ‘bilinear’, ‘bicubic’

B = imrotate(A,angle,method,bbox)

bbox -> Bounding box ‘crop’ ‘loose’

Recortar una imagen B= imcrop(A); Herramienta interactiva

B= imcrop(A,rect);

83

Page 303: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Filtrado 2D

B= imfilter(A,h) N= 5;

h = ones(N,N) / (N*N);

Af = imfilter(A,h);

84

Original Filtrada N= 5 Filtrada N= 20

Page 304: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Respuesta en frecuencia de filtros 2D

[H, f1, f2] = freqz2(h, n1, n2)

[H, f1, f2] = freqz2(h, [n2 n1])

[H, f1, f2] = freqz2(h)

[H, f1, f2] = freqz2(h, f1, f2)

85

-1

-0.5

0

0.5

1

-1

-0.5

0

0.5

10

0.2

0.4

0.6

0.8

1

Fx

Fy

Magnitude

Filtro 55 Filtro 2020-1

-0.5

0

0.5

1

-1

-0.5

0

0.5

10

0.2

0.4

0.6

0.8

1

Fx

Fy

Magnitude

Page 305: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Diseño de filtros 2D

h = fwind1(Hd, win)

h = fwind1(Hd, win1, win2)

h = fwind1(f1, f2, Hd,...)

Ejemplo:

[f1,f2] = freqspace(21,'meshgrid');

Hd = ones(21);

r = sqrt(f1.^2 + f2.^2);

Hd((r<0.1)|(r>0.5)) = 0;

colormap(jet(64));

mesh(f1,f2,Hd);

h = fwind1(Hd,hamming(21));

freqz2(h);

86

-1

-0.5

0

0.5

1

-1

-0.5

0

0.5

10

0.2

0.4

0.6

0.8

1

-1

-0.5

0

0.5

1

-1

-0.5

0

0.5

10

0.5

1

1.5

Fx

Fy

Magnitude

Page 306: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Ajuste del nivel de intensidad

87

0 100 2000

2000

4000

6000

0 100 2000

5000

10000

15000

0 100 2000

1000

2000

3000

4000

Page 307: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Ecualización del histograma

88

0 100 2000

50

100

150

200

250

0 100 2000

50

100

150

200

250

0 100 2000

50

100

150

200

250

Page 308: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Ecualización del histograma

89

0 50 100 150 200 2500

2000

4000

6000

0 50 100 150 2000

5000

10000

15000

0 50 100 150 200 2500

2000

4000

0 50 100 150 200 2500

100

200

0 50 100 150 200 2500

100

200

0 50 100 150 200 2500

100

200

0 50 100 150 200 2500

1000

2000

0 50 100 150 200 2500

5000

10000

15000

0 50 100 150 200 2500

1000

2000

Page 309: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Filtrado de ruido (Filtro de Wiener)

J = wiener2(I, [m n], noise)

[J, noise] = wiener2(I, [m n])

Wiener2 estima la media y la varianza entorno a cada pixel

A continuación crea un filtro pixel a pixel basado en estas estimaciones

v2es la varianza del ruido

90

Page 310: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Matlab para reconocimiento de patrones

Asignación de una clase a un vector de

características x del objeto a clasificar:

Ejemplo: Fisher Iris dataset:

http://en.wikipedia.org/wiki/Iris_flower_data_set

503 = 150 muestras de flores Iris de tres especies

Iris setosa, Iris virginica, Iris versicolor

4 características de cada ejemplo:

Longitud y anchura de los pétalos y sépalos

91

Page 311: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Matlab para reconocimiento de patrones

Análisis discriminante: class = classify(sample,training,group)

class = classify(sample,training,group,type)

class = classify(sample,training,group,type,prior)

knn: Class = knnclassify(Sample, Training, Group)

Class = knnclassify(Sample, Training, Group, k)

Class = knnclassify(Sample, Training, Group, k, distance)

Class = knnclassify(Sample, Training, Group, k, distance, rule)

Máquinas de vectores de soporte: Group = svmclassify(SVMStruct, Sample)

Group = svmclassify(SVMStruct, Sample, 'Showplot‘,ShowplotValue)

SVMStruct = svmtrain(Training, Group)

SVMStruct =svmtrain(..., 'Kernel_Function', Kernel_FunctionValue)

92

Page 312: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Análisis discriminante: Ejemplo

load fisheriris

SL = meas(51:end,1);

SW = meas(51:end,2);

group = species(51:end);

h1 = gscatter(SL,SW,group,'rb','v^',[],'off');

set(h1,'LineWidth',2)

legend('Fisher versicolor','Fisher virginica','Location','NW')

93

4.5 5 5.5 6 6.5 7 7.5 82

2.2

2.4

2.6

2.8

3

3.2

3.4

3.6

3.8

SL

SW

Fisher versicolor

Fisher virginica

Page 313: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Análisis discriminante: Ejemplo

Clasificamos una

matriz de datos 2-D:[X,Y] =

meshgrid(linspace(4.5,8)

,linspace(2,4));

X = X(:); Y = Y(:);

[C,err,P,logp,coeff] =

classify([X Y],[SL SW],

group,'quadratic');

Visualizar la

clasificación:hold on;

gscatter(X,Y,C,'rb','.',1,'off');

K = coeff(1,2).const;

L = coeff(1,2).linear;

Q = coeff(1,2).quadratic;

f = sprintf('0 =

%g+%g*x+%g*y+%g*x^2+%g*x.*y+%g*y.^2',

...

K,L,Q(1,1),Q(1,2)+Q(2,1),Q(2,2));

h2 = ezplot(f,[4.5 8 2 4]);

set(h2,'Color','m','LineWidth',2)

axis([4.5 8 2 4])

xlabel('Sepal Length')

ylabel('Sepal Width')

title('\bf Classification with Fisher

Training Data')

94

Page 314: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Análisis discriminante: Ejemplo

95

4.5 5 5.5 6 6.5 7 7.5 82

2.2

2.4

2.6

2.8

3

3.2

3.4

3.6

3.8

4

SL

SW

Classification with Fisher Training Data

Fisher versicolor

Fisher virginica

Page 315: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Selección de características

[IDX, Z]= rankfeatures(X, Group)

[IDX, Z]= rankfeatures(X, Group,'Criterion', CriterionValue)

load fisheriris;

X= meas(1:100,:);

Group= species(1:100);

[IDX, Z] = rankfeatures(X',Group);

% Selecionamos las variables más discriminativas

data= X(:,[IDX(1) IDX(2)]);

% Selección aleatoria de subconjuntos de entrenamiento y test

[train, test] = crossvalind('holdOut',Group);

cp = classperf(Group);

% Entrenamiento de una máquina de vectores de soporte

svmStruct = svmtrain(data(train,:),Group(train),'showplot',true);

% Añadimos título.

title(sprintf('Kernel Function: %s',...

func2str(svmStruct.KernelFunction)),...

'interpreter','none');

% Clasificación del conjunto de test

classes = svmclassify(svmStruct,data(test,:),'showplot',true);

% Evaluación a partir de la tasa de correctas.

classperf(cp,classes,test);

cp.CorrectRate

96

Page 316: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez

Selección de características

97

data= X(:,[IDX(1) IDX(2)]); data= X(:,[IDX(3) IDX(4)]);

1 1.5 2 2.5 3 3.5 4 4.5 5 5.50

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8Kernel Function: linear_kernel

setosa (training)

setosa (classified)

versicolor (training)

versicolor (classified)

Support Vectors

4 4.5 5 5.5 6 6.5 72

2.5

3

3.5

4

4.5Kernel Function: linear_kernel

setosa (training)

setosa (classified)

versicolor (training)

versicolor (classified)

Support Vectors

Page 317: Simulink Tutorial Completo

Introducción a Matlab y SimulinkJavier Ramírez 98

Estas transparencias se pueden obtener en:

http://www.ugr.es/~javierrp

Para cualquier consulta:

Javier Ramírez ([email protected])

Dpto. Teoría de la Señal, Telemática y Comunicaciones

Despacho 22

ETSII

Page 318: Simulink Tutorial Completo

Gijón - Octubre 2006 1

Simulación de sistemas de control continuos con MATLAB y SIMULINK

Ayuda

Biblioteca de SIMULINK

Selección de carpetasde trabajo

Visualización devariables del espacio de

trabajo

Crear, abrir y guardar archivosde funciones o de variables del

espacio de trabajo

Línea de comandos

Page 319: Simulink Tutorial Completo

Gijón - Octubre 2006 2

Comandos básicos de MATLAB para las prácticas de Regulación

1. Comandos básicos. Variables, vectores y matrices.

Matlab es un programa de cálculo matemático muy flexible y potente, con posibilidades gráficas para la presentación de los datos, por lo que se utiliza en muchos campos de la ciencia y la investigación como herramienta de cálculo matemático. Los comandos y funciones que se describen a continuación funcionan generalmente en todas las versiones de MATLAB, aunque algunos sólo lo hacen en las versiones más modernas y otros han quedado obsoletos. En este último caso las versiones más modernas disponen de otros comandos o funciones que los sustituyen. Algunos de ellos están disponibles bajo botones o menús en las nuevas versiones.

NOTA: En este documento se recogen unos pocos ejemplos de entre las inmensas posibilidades que ofrece Matlab. Se deben consultar las ayudas de Matlab u otros documentos si se desea un conocimiento más amplio. Se deben utilizar y modificar los ejemplos aquí incluidos para adquirir las destrezas básicas que permitirán utilizar el programa como herramienta para la asignatura. Téngase en cuenta que algunos ejemplos están encadenados, es decir, es necesario ejecutar determinados comandos anteriores para que los siguientes funcionen correctamente.

Realizar operaciones algebraicas es muy sencillo,

>> a = 2>> b = 3>> suma = a + b suma = 5

o simplemente:

>> 2 + 3ans =

5

La variable “ans” contiene el resultado de la última operación realizada y puede consultarse en cualquier momento así como el resto de las variables que se vayan creando:

>> suma suma = 5

>> ans ans = 5

Si se quiere ver el nombre de todas las variables que se están utilizando se pueden usar los comandos who y whos. Con save y load se pueden guardar las variables que se están usando y recuperarlas posteriormente. El comando help proporciona ayuda y combinado con otro comando, ayuda sobre ese comando en concreto (p.ej. help who). Para abandonar el programa se pueden usar los comandos quit o exit. (En versiones bajo Windows se dispone de los correspondientes menús y botones para estas funciones)

Matlab maneja matrices, y como casos particulares de las mismas, vectores fila y vectores columna:

>> matriz = [1 2 34 5 67 8 9]>> matriz = [1,2,3;4,5,6;7,8,9]

>> vectorfila = [1 2 3]>> vectorfila = [1,2,3]>> vectorcolumna = [1,2,3]' (' transposición)>> vectorcolumna = [1;2;3]

2. Valores complejos.

>> c = 2 + 3*j -> se utilizan “j” o “i” como valores imaginarios>> modulo = abs(c) -> se obtiene el módulo

Page 320: Simulink Tutorial Completo

Gijón – Octubre 2006 3

>> argumento = angle(c) -> el valor del argumento esta en radianes>> grados = argumento * 180 / pi -> pero se convierte fácilmente a grados

NOTA: obviamente "i", "j", "ans", "pi", "help", "sin", etc. son nombres que ya están definidos para variables, constantes, comandos o funciones de Matlab y no se deben usar para nombrar nuevas funciones o variables del usuario. ¡Matlab distingue entre mayúsculas y minúsculas!

3. Polinomios.

Los polinomios se introducen en forma de vectores fila que contienen los coeficientes del polinomio.

>> p = [1 -6 0 -27] -> s3-6s2-27>> raices = roots(p) -> da las raíces del polinomio en un vector columna>> polinomio = poly(raices) -> se vuelve a obtener el polinomio original

Se pueden multiplicar y dividir polinomios: c(s)=a(s)*b(s); c(s)/a(s)= q(s)+r(s)/a(s)

>> a = [1 2 3] -> s2+2s+3>> b = [4 5 6] -> 4s2+5s+6>> c = conv(a,b)c = 4 13 28 27 18 -> producto de los dos polinomios= 4s4+13s3+28s2+27s+18>> [q,r] = deconv(c,a) -> división de c(s) por a(s)q = 4 5 6 -> q(s) es el cociente de la división r = 0 0 0 0 0 -> r(s) es el resto de la división

Como se puede observar, a veces el resultado de una función, pueden ser varias variables y sus argumentos también pueden ser varios y de diferentes tipos. Se debe consultar mediante el comando help (p.ej. help deconv) cuales son los argumentos que admite cada función y que variables va a devolver como resultado.

4. Representaciones gráficas 2D y 3D.

Representación de la función seno:>> t = [0:1:100] -> vector tiempo>> x = t -> eje x>> y = sin(0.1*t) -> eje y>> plot(x,y)

Representación de dos funciones:>> t = [0:1:100]>> x = t>> y = [sin(0.1*t) ; cos(0.1*t)]>> plot(x,y)

Representación en 3D:>> t = [0:1:100] -> vector tiempo>> x = t -> eje x>> y = sin(0.1*t) -> eje y>> z = cos(0.2*t) -> eje z>> plot3(x,y,z)

5. Funciones de Transferencia.

Para trabajar con funciones de transferencia, se introducen por separado dos vectores, uno con los coeficientes del polinomio del numerador y otro con los del denominador:

Page 321: Simulink Tutorial Completo

Gijón – Octubre 2006 4

>> num = [1 2] -> s+2>> den = [1 3 5] -> s2+3s+5>> printsys(num,den) -> muestra la función de transferencia (s+2)/(s^2+3s+5)>> pzmap(num,den) -> muestra el mapa de ceros y polos del sistema gráficamente>> [p,z] = pzmap(num,den) -> en los vectores columna “p” y “z” se tendrán los polos y

ceros respectivamente del sistema>> pzmap(p,z) -> muestra el mapa de ceros y polos del sistema a partir de estos

Para un sistema de segundo orden:

>> wn = 30 -> valor para ωn>> xi = 0.3 -> valor para ξ>> [num2,den2] = ord2(wn,xi) -> función de transferencia de segundo orden con ωn y ξ>> printsys(num2,den2) -> la función de transferencia de segundo orden

1/(s^2+18s+900)

En versiones de MATLAB superiores a la 5.0 se puede trabajar con el objeto especial Función de Transferencia, que permite operar cómodamente con ellas…

>> g = tf([1 2], [1 3 5]) -> función “tf”(s+2)/(s^2+3s+5)

… o incluso representarlas y operar con ellas en forma simbólica:

>> s = tf(´s´) -> crea el objeto “s”>> g = (s+2)/(s^2+3*s+5)(s+2)/(s^2+3s+5)>> g2 = g*g

Estos objetos Función de Transferencia se pueden sumar, multiplicar, etc. y aplicarles lasfunciones que aquí se describen, válidas también para un par de polinomios numerador/denominador:

>> num = [1 2] -> s+2>> den = [1 3 5] -> s2+3s+5>> pzmap(num,den)

Equivale a:>> g =tf([1 2], [1 3 5]) ->g=(s+2)/(s^2+3s+5)>> pzmap(g)

Y para pasar de ‘num/den’ a ‘g’ y de ‘g’ a ‘num/den’:

>> g = tf(num,den)>> [p,z] = pzmap(g)>> num = dcgain(g*tf(poly(p),poly(z)))*poly(z)>> den = poly(p)

O más directamente:>> g = tf(num,den)>> num= deal(g.num:)>> den = deal(g.den:)

>> m = feedback(g,1,-1) -> proporciona la función de transferencia en bucle cerrado con realimentación unitaria “1” y negativa "-1"

6. Respuesta en el tiempo.

>> impulse(g) -> representa gráficamente la respuesta en el tiempo del sistema ante una entrada impulso

>> step(g) -> representa gráficamente la respuesta en el tiempo del sistema ante una entrada escalón unitario. Un clic con el ratón sobre las gráficas proporciona información sobre sus valores

>> [y,x,t] = step(g) -> almacena en "y" la respuesta del sistema, en "x" la evolución de las variables de estado y en "t" el vector de tiempo

>> maximo = max(y) -> da el valor máximo que alcanza la respuesta del sistema

Page 322: Simulink Tutorial Completo

Gijón – Octubre 2006 5

7. Respuesta en frecuencia.

>> bode(g) -> dibuja el diagrama de bode del sistema>> [mag,fase] = bode(g,3) -> da los valores de magnitud (no está en decibelios) y de fase

(en grados) del sistema para ω = 3>> [mag,fase,w] = bode(g) -> devuelve los valores de magnitud, fase y pulsación, en tres

vectores, para utilizarlos posteriormente con otras funciones como por ejemplo:

>> maximo = max(mag) -> valor en el pico de resonancia de la relación de amplitudes>> resonancia = 20*log10(maximo) -> valor en el pico de resonancia expresado en decibelios

>> [Gm,Pm,wg,wp] = margin(g) -> ¿¿¿ Resultados extraños ???Gm = ∞ Indica que el margen de fase y de ganancia son infinito,Pm = ∞ y que no se puede determinar un valor de ω para elloswg = NaN (NaN = Not a Number)wp = NaN

>> g1 = 10/((s+1)*(s+2)*(s+3)) -> se crea una nueva FdT para probar la función “margin”>> [Gm1,Pm1,wg1,wp1] = margin(g1) Gm1 = -> margen de ganancia (no está en decibelios)Pm1 = -> margen de fase en grados wg1 = -> pulsación (frecuencia en rad/s) para el margen de ganancia wp1 = -> pulsación (frecuencia en rad/s) para el margen de fase>> margin(g1) -> representa gráficamente el margen de ganancia y de fase

>> nichols(g) -> diagrama magnitud-fase>> ngrid(´new´) -> superpone el ábaco de Nichols al diagrama anterior>> shg -> muestra la pantalla gráfica>> clf -> limpia la pantalla gráfica (en versiones antiguas "clg")>> hold on -> bloquea la pantalla gráfica para superponer un nuevo trazado>> hold off -> desbloquea la pantalla gráfica para realizar nuevos trazados

>> nyquist(g) -> diagrama de Nyquist del sistema. El tramo con valores de ω>0 es el “Diagrama Polar” del sistema

>> ltiview(g) -> permite representar conjuntamente las gráficas ya descritas para varios sistemas simultáneamente

8. Lugar de las raíces.

>> rlocus(g) -> lugar de las raíces del sistema>> polos = rlocus(num,den,3) -> polos del sistema en bucle cerrado para "k=3">> hold on -> fija la pantalla gráfica para seguir trabajando sobre ella>> rlocus(num,dem,[3 4]) -> dibuja la posición de las raíces (polos) del sistema en bucle

cerrado para los valores de "k=3" y "k=4">> rltool -> herramienta para el diseño de reguladores basado en el L.R.>> sisotool -> herramienta de diseño más genérica que “rltool”

NOTA: Las unidades de los resultados (grados, radianes, decibelios, etc.) pueden variar según las versiones de Matlab.

Page 323: Simulink Tutorial Completo

Gijón – Octubre 2006 6

Elementos básicos de SIMULINK

1. La biblioteca de Simulink.

Simulink proporciona un entorno gráfico al usuario que facilita enormemente el análisis, diseño y simulación de sistemas (de control, electrónicos, etc.), al incluir una serie de rutinas que resuelven los cálculos matemáticos de fondo, junto con una sencilla interfaz para su uso. Proporciona un entorno de usuario gráfico que permite dibujar los sistemas como diagramas de bloques tal y como se haría sobre un papel.

El conjunto de componentes incluidos junto al programa Simulink, incluye bibliotecas de fuentes de señal, dispositivos de presentación de datos, sistemas lineales y no lineales, conectores y funciones matemáticas. En caso de que sea necesario, se pueden crear nuevos bloques a medida por el usuario.

El programa Simulink se inicia desde el botón "Simulink Library Browser" (Biblioteca de Simulink, ver imagen de portada) de la ventana de comandos de Matlab, o desde la línea de comandos mediante la orden:

>> simulink

Una vez iniciado el programa el entorno de trabajo queda dividido en tres partes.

− La ventana de comandos de Matlab (Matlab command window): desde la que se puede ejecutar cualquier comando del mismo, dar valores a variables y controlar la ejecución de las simulaciones.

Conjunto básico debloques de función de

Simulink

Crear un nuevo modelo

Busqueda de BloquesAbrir un modelo

− La ventana de la biblioteca de Simulink (Simulink Library Browser): desde la que se seleccionan los componentes que se van a insertaren el sistema a simular.

− La o las ventanas de los modelos: en las que se dibujan los modelos y se realizan y controlan las simulaciones. Estas ventanas aparecen cuando se abre un modelo ya existente o se crea una ventana en blanco para dibujar un nuevo modelo. Para ello, se pueden utilizar los botones de la ventana de la librería de Simulink.

Page 324: Simulink Tutorial Completo

Gijón – Octubre 2006 7

Todos los componentes básicos de Simulink, se pueden encontrar en su biblioteca de componentes. A continuación se describen los componentes básicos de la biblioteca de Simulink:

Continuous: Bloques que pueden ser representados como una función continua en el tiempo.Derivative: La salida del bloque se corresponde con la derivada de la entrada.Integrator: La salida del bloque se corresponde con la integral de la entrada. Los parámetros del bloque permiten controlar el valor inicial de la salida, así como la existencia de límites superiores e inferiores en la salida.Transfer Fcn: Permite expresar una función de transferencia mediante su expresión en la variable compleja s. Sus parámetros son los polinomios del numerador y del denominador de la función, expresados como vectores fila.Transport Delay: La salida del bloque se corresponde con la entrada al mismo retrasada una cantidad de tiempo, que se fija como parámetro en el bloque.Zero-Pole: Función de transferencia expresada en función de la ganancia en régimen permanente, y la situación de los polos y ceros del sistema.

Math: Bloques que realizan operaciones matemáticas sobre sus entradas.Abs: Calcula el valor absoluto de su entrada.Gain: Aplica una ganancia constante a la entrada.Math Function: Este bloque incluye la mayor parte de las funciones matemáticas típicas, con la excepción de las funciones trigonométricas.Product: Calcula el producto escalar de sus entradas. Un parámetro del bloque permite regular el número de entradas del mismo.Sign: Calcula el signo de la entrada. +1 indica positivo, -1 negativo, y 0 un valor nulo.Sum: Calcula la suma de todas sus entradas. Un parámetro permite indicar el número de entradas, y si estas deben ser invertidas antes de la suma. Ejemplo: un valor para el parámetro "++-+" indicaría que el bloque tiene 4 entradas, y que la tercera de ellas debe ser invertida antes de sumarla.Trigonometric Function: En este bloque se incluyen todas las funciones trigonométricas típicas.

Nonlinear: Bloques no lineales.Dead Zone: Incluye una zona muerta en el sistema, centrada en torno a cero. El sistema no responde ante estos valores. La magnitud de la zona muerta puede ser modificada, y echa asimétrica por medio de los parámetros del sistema.Relay: La salida pasa al estado on=1 cuando la entrada supera un valor umbral, y a estado off=0 cuando cae por debajo de un umbral distinto. El estado inicial es off.Saturation: La señal de salida no sobrepasa un valor umbral, configurable con los parámetros del bloque.Switch: Una entrada del sistema permite escoger cual de las otras dos entradas se presenta en la salida.

Signals&Systems: Manejo de sistemas y señales.Subsystem: Permite la realización de sistemas jerárquicos. Al abrir el subsistema, nos permite incluir en su interior, nuevos bloques constructivos, e incluso anidar nuevos subsistemas.In1: Por defecto un subsistema no contiene entradas. Por cada entrada que se desee añadir se le debe incluir uno de estos bloques.Out1: Por defecto un subsistema no contiene salidas. Por cada entrada que se desee añadir se le debe incluir uno de estos bloques.

Mux: Permite la inclusión de un conjunto de señales en una única línea de transmisión (que transmite datos vectoriales), lo que facilita la representación en el dibujo. Parámetros: número de entradas. Admite tanto entradas escalares como vectoriales.Demux: Permite la descomposición de los datos puesto en forma vectorial en una línea mediante un multiplexador. Parámetros: número de salidas.Data Store Memory: Define una variable del entorno de trabajo que se va a usar como lugar de almacenamiento de datos útil para evitar tener que hacer conexiones complejas que compliquen el diagrama de bloque que se está usando.Data Store Read: Lee el valor actual de una variable de almacenamiento, que debe estar previamente definida mediante un bloque Data Store MemoryData Store Write: Cambia el valor actual de una variable de almacenamiento, que debe estar previamente definida mediante un bloque Data Store Memory

Sinks: Sumideros de señales.Display: Representa numéricamente el valor de una variable.Scope: Representa gráficamente la evolución en el tiempo de una variable.To Workspace: Guarda el valor de la señal indicada en una variable del entorno de trabajo del Matlab. Se puede escoger el nombre de la misma, y limitar su tamaño.To File: Guarda en un fichero de tipo ".mat" los datos de la señal de entrada al bloque.Stop Simulation: Detiene la simulación si el valor de la entrada es distinto de 0.

Sources: Fuentes de señales.Chirp Signal. Genera una señal senoidal, modulada en frecuencia, entre un valor inicial y un valor final.Clock: Tiempo que se lleva de simulación.Constant: Proporciona una señal de valor constante.From Workspace: Proporciona una secuencia de datos tomadas del entorno de trabajo del Matlab. La variable elegida debe contener una matriz indicando los valores de la señal, y los instantes en los que la señal toma estos valores.From File: Proporciona datos tomados de un fichero ".mat", en el que debe estar el valor de la variable, junto a los instantes de tiempo en que toma cada valor.Pulse Generator: Genera una onda cuadrada, de la que se puede controlar la amplitud, el periodo y el tiempo de duty (relación entre el tiempo que la onda toma su valor máximo y el tiempo que toma el valor mínimo).Ramp: Genera una señal de tipo Rampa.Random Number: Genera números aleatorios distribuidos según una función normal.Signal Generator: Simula un generador de señales electrónico, permitiendo generar ondas dientes de sierra, ondas cuadradas y senoidales.Sine Wave: Generador de ondas senoidales.Step: Genera una señal de tipo escalón.Uniform Random Number: Genera números aleatorios distribuidos según una función uniforme.

Page 325: Simulink Tutorial Completo

Gijón – Octubre 2006 8

2. Creación de un modelo.

Para simular un sistema, se deben insertar en las ventanas de simulación los distintos componentes con los que se va a construir el modelo. Se pueden seguir los siguientes pasos:

Descripción del Bloque

1

2

3

4

5

Representación gráficadel Bloque

Crear un modelo nuevo

Buscar un bloque

Situar un bloque

Conectarbloques

Crear unabifurcación

6

7

1) Crear un nuevo modelo: Para abrir una nueva ventana de simulación se debe pulsar el botón "nuevo modelo".

2) Buscar un bloque: Se puede buscar un bloque expandiendo el árbol de la biblioteca o buscándolo directamente por su nombre en la ventana de búsqueda. En este caso, si hay más de un bloque que pueda corresponder a ese nombre, irán apareciendo a medida que se pulse la tecla "enter" (retorno).

3) Situar un bloque: Para situar un bloque, se mantiene pulsado el botón izquierdo del ratón sobre el icono en forma de rombo que hay junto al nombre del bloque y se arrastra hacia la posición deseada en la ventana de simulación.

4) Conectar bloques: En cada bloque, las puntos de salida aparecen indicados mediante una flecha saliente del bloque "|>", mientras que los puertos de entrada a cada bloque se indican con una flecha entrante al mismo ">|". Se conecta la entrada de un bloque a la salida de otro, manteniendo pulsado el botón izquierdo del ratón mientras se arrastra desde el símbolo de entrada de uno de los bloques hasta el de salida de otro o viceversa.

5) Crear una bifurcación: Si se desea llevar la salida de un bloque a la entrada de más de uno se necesita crear una bifurcación en la conexión. Para hacerlo, se arrastra con el ratón desde la entrada del nuevo bloque a conectar hasta la línea de la conexión que se va a bifurcar.

6) Modificar los bloques: Se pueden rotar o aplicar simetrías a los bloques usados, según convenga la colocación de entradas/salidas para el esquema que se esté realizando, pulsando sobre él el botón derecho del ratón y utilizando los menús desplegables o mediante la opción "Formar" del menú principal ("Format\Flip Block", "Format\Rotate Block", etc.). También mediante los menús o haciendo doble clic sobre el bloque, se pueden modificar sus parámetros.

7) Inserción de textos: Se puede incluir un texto aclaratorio o informativo en cualquier parte de la ventana del modelo, haciendo doble clic en una zona libre y escribiendo directamente el texto.

Page 326: Simulink Tutorial Completo

Gijón – Octubre 2006 9

También se pueden cambiar los nombres y posiciones de los bloques que se empleen para la simulación antes o después de conectarlos. Asimismo los enlaces de las conexiones pueden moverse o modificarse. Para eliminar cualquier elemento basta con seleccionarlo con un clic y eliminarlo con la tecla "sup" o "delete", o utilizar alguno de los menús.

Conviene guardar ("File\Save as") periódicamente el modelo, incluso antes de terminarlo, para evitar perder el trabajo realizado.

Un ejemplo trivial incluiría la selección de dos componentes: "Simulink\Sources\Sine Wave" y "Simulink\Sinks\Scope" de la ventana "Simulink Library Browser", y el arrastre de los mismos hasta la ventana de dibujo. En el caso de nuestro ejemplo básico, para conectar el generador de señales y el osciloscopio, simplemente se debe situar el ratón sobre el punto de salida del generador, pulsar el botón izquierdo, arrastrar el ratón hasta el punto de entrada del osciloscopio y soltar el botón del ratón.

Controles de zoom

1

2

3

4

5

Número de entradas delosciloscopio

Control de la simulación

Duración de la simulación en segundos

67

Botón de propiedades

3. Control de la simulación y visualización de resultados.

Antes de poder ejecutar la simulación, es necesario seleccionar los parámetros apropiados para la misma (1). Desde el menú: "Simulation\Parameters", se puede desplegar un cuadro de dialogo, en el que se controlan parámetros de la simulación de entre los cuales el que se modifica

Page 327: Simulink Tutorial Completo

Gijón – Octubre 2006 10

más habitualmente es el tiempo final de la simulación. (Otros parámetros accesibles son el tiempo de inicio de la simulación, el método matemático que se empleará para llevarla a cabo, o las variables que se tomarán/guardarán de/en el espacio de trabajo). La simulación se puede poner en marcha o detener mediante el menú anterior o los botones de la ventana (2).

Para visualizar los resultados de la misma son muy útiles los bloques se encuentran en el grupo "Sinks" de la biblioteca de Simulink. De entre ellos, quizás el más útil es el bloque "Scope" que simula el comportamiento de un osciloscopio. Tras realizar una simulación se pueden ver los resultados que ha registrado haciendo un doble clic sobre él (3). Para ver correctamente los resultados se utilizan los controles de zoom (4), siendo conveniente pulsar siempre tras una simulación el botón de autoescala (el de los prismáticos) para ver el total de los datos registrados. Los otros tres botones de zoom permiten respectivamente ampliar un área señalada con un arrastre del ratón, ampliar el eje "X" de la misma manera o ampliar el eje "Y".

El bloque "Scope" tiene una serie de propiedades a las que se accede a través del botón correspondiente de la ventana "Scope" (5). Dos de las más útiles son la que permite elegir el número de entradas que se desean para el osciloscopio (6) "Number of axes" (que será también el número de gráficos que representará) y la que determina si el osciloscopio almacena todos los datos de la simulación o sólo los últimos obtenidos (7) "Limit rows to last". Respecto a este último control, es conveniente eliminar la marca "√" del cuadradito blanco para que el osciloscopio mantenga todos los datos registrados durante la simulación completa.

A

B

Mux

Si se desea visualizar más de una señal en un osciloscopio, existen dos posibilidades:A) Aumentar el número de entradas del osciloscopio como se comentó anteriormente.B) Utilizar un bloque "Mux" para que ambas señales aparezcan en el mismo gráfico.

Page 328: Simulink Tutorial Completo

Gijón – Octubre 2006 11

EJEMPLO 1

Simular la respuesta de un sistema descrito por su función de transferencia ante una determinada señal de entrada con Matlab o Simulink es muy sencillo:

Y(s)X(s)

x(t) y(t)9·48)( 2 ++

=ss

sG

Con Matlab se puede obtener la respuesta ante un inpulso de Dirac, un escalón, etc.:

>> g = tf([8], [1 4 9])g=8/(s^2+4s+9)

>> impulse(g)

>> step(g)

Con Simulink se construye el modelo del sistema, pudiendo optarse por introducir sus parámetros de forma explícita o dejarlos como parámetros a los que se les puede asignar un valor como variables desde la ventana de comandos de Matlab. Una vez ejecutada la simulación se obtendrá en el bloque “Scope” el resultado de la misma.

A B

Page 329: Simulink Tutorial Completo

Gijón – Octubre 2006 12

EJEMPLO 2

Si se desea simular un sistema más complejo basta con trasladar las ecuaciones de su modelo a un modelo de bloques de Simulink.

Modelo del sistema:

qr(t)=qa(t)+qp(t)qr(t)=R·i2(t)qa(t)=C·dti(t)/dtqp(t)=(ti(t)-ta(t))/Rt

Simulink puede simular sistemas no lineales, como se puede ver en el siguiente modelo, siendo necesario en muchos casos definir los valores iniciales de algunas de las variables del sistema (en bloques como los “integrator”). Los valores del modelo representado que se han dejado como parámetros son asignados en la ventana de comandos de Matlab (debe tenerse cuidado con el uso de mayúsculas y minúsculas en la denominación de estos parámetros). Los archivos de ejemplo indicados contienen el modelo representado y el espacio de trabajo con los valores asignados a los parámetros para la ventana de comandos de Matlab.

Archivos: calentador_no_lineal.mdl, calentador.mat

Qp(t)

Qr(t) Qa(t)i(t)

ta(t)

ti(t) ti(t)ta(t)i(t)

Modelo no lineal del calentador

Initial=Tio

time=2000inicial=1final=1.5

time=6000inicial=20final=15

ParámetrosR=20 ohm

C=4184 julio/ºCRt=0.1 ºC·s/julio

Modelo no lineal del calentador(Simulation->Parameters->Solver: Stop Time=10000)

Qr(t)=Qa(t)+Qp(t)Qr(t)=R·i(t)^2

Qa(t)=C·dti(t)/dtQp(t)=(ti(t)-ta(t))/Rt

(Crear en la ventana de comandos de Matlab)

Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)

Io=1 ATao=20ºTio=22º

s

1

1/Rt

1/CRu^2

0

Display

ScopeIntegratorStep 1

Step 2

Gain 2Gain 1

Gain 3

Fcn

También se puede linealizar el modelo respecto a un punto de funcionamiento y construir el modelo en transformadas de Laplace. Luego se trasladan las ecuaciones del modelo linealizado a un modelo de Simulink mediante, por ejemplo, bloques “Función de Transferencia” (TransferFcn).

Calentador

Fuente decorriente

i(t)

ti(t) ta(t)

qa(t)

qr(t)

qp(t)

RC

Rt

Page 330: Simulink Tutorial Completo

Gijón – Octubre 2006 13

Modelo linealizado del sistema en Transformadas de Laplace:

Qr(s)=Qa(s)+Qp(s)Qr(s)=2·R·Io·I(s)Qa(s)=C·s·Ti(s)

Qp(s)=(Ti(s)-Ta(s))/Rt

Archivos: calentador_lineal.mdl, calentador.mat

Qr(s) Qa(s)

Qp(s)

Ti(s) ti(t)

i(t)ta(t)

Ta(s)

I(s)

Modelo lineal del calentador(Simulation->Parameters->Solver: Stop Time=10000)

time=2000inicial=0final=0.5

time=6000inicial=0final=-5

Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)

Io=1 ATao=20ºTio=22º

ParámetrosR=20 ohm

C=4184 julio/ºCRt=0.1 ºC·s/julio

Qr(s)=Qa(s)+Qp(s)Qr(s)=2·R·Io·I(s)Qa(s)=C·s·Ti(s)

Qp(s)=(Ti(s)-Ta(s))/Rt

(Crear en la ventana de comandos de Matlab)

1

Rt

0

Display

2*R*Io

1

1

C.s

Step 2

Step 1 Transfer Fcn 1

Transfer Fcn 2

Transfer Fcn 3 Scope

Al comparar los resultados de la simulación de ambos modelos, se puede observar el error que introduce la linealización del modelo.

+2.5º -5º

+2º

-5º22º

Page 331: Simulink Tutorial Completo

Gijón – Octubre 2006 14

EJEMPLO 3

Una vez diseñado un regulador para un sistema, basándose en su modelo linealizado, se puede comprobar con Simulink si el comportamiento final del sistema es adecuado. Basta con añadir los bloques que representan el sistema de control diseñado.

+_

Selector detemperatura

Regulador

Accionador

Sensor detemperatura

Proceso

Filtrado y amplificación

Comparador Calentador

Archivos: calentador_lineal_regulador.mdl, calentador_regulador.mat

Qr(s) Qa(s)

Qp(s)

Ti(s) ti(t)

r(t)ta(t)

Ta(s)

I(s)

Modelo lineal del calentador con un regulador PID(Simulation->Parameters->Solver: Stop Time=2500)

time=500inicial=0final=5

time=1500inicial=0final=-5

Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)

Io=1 ATao=20ºTio=22º

ParámetrosR=20 ohm

C=4184 julio/ºCRt=0.1 ºC·s/julio

Qr(s)=Qa(s)+Qp(s)Qr(s)=2·R·Io·I(s)Qa(s)=C·s·Ti(s)

Qp(s)=(Ti(s)-Ta(s))/Rt

(Crear en la ventana de comandos de Matlab)

R(s)Regulador PID

Realimentación unitaria

K·(s+a)(s+c)/(s·(s+b))K=2.57a=0.05b=0.023c=0.0025

Corriente i(t)1

Rt

5

Display

K

1

s +(a+c)s+a*c2

s +b.s22*R*Io

1

1

C.s

Sin embargo, siempre que sea posible, es conveniente comprobar el comportamiento del sistema de control sobre el modelo no lineal del sistema. Pueden tenerse en cuenta, por ejemplo, limitaciones en la evolución de determinadas variables del sistema. En el siguiente ejemplo, a parte de utilizar el modelo no lineal que se tenía para el sistema, se ha supuesto que la corriente máxima i(t) que se puede conseguir es de 10 A y que su valor nunca es negativo. Esto se ha reflejado en el modelo mediante un bloque denominado “Saturation”.

Page 332: Simulink Tutorial Completo

Gijón – Octubre 2006 15

Archivos: calentador_no_lineal_regulador.mdl, calentador_regulador.mat

Qp(t)

Qr(t) Qa(t)r(t)

ta(t)

ti(t) ti(t)ta(t)r(t)Initial=Tio

time=500inicial=22final=27

time=1500inicial=20final=15

ParámetrosR=20 ohm

C=4184 julio/ºCRt=0.1 ºC·s/julio

Modelo no lineal del calentador con un regulador PID(Simulation->Parameters->Solver: Stop Time=25000)

Qr(t)=Qa(t)+Qp(t)Qr(t)=R·i(t)^2

Qa(t)=C·dti(t)/dtQp(t)=(ti(t)-ta(t))/Rt

(Crear en la ventana de comandos de Matlab)

Equilibrio Inicial(R·Rt·Io^2=Tio-Tao)

Io=1 ATao=20ºTio=22º

Realimentación unitaria

Regulador PID

K·(s+a)(s+c)/(s·(s+b))K=2.57a=0.05b=0.023c=0.0025

Saturations

1K

1/Rt

1/CRu^2

27

Display

s +(a+c)s+a*c2

s +b.s2

i(t)

Corriente i(t)

Los resultados muestran (aunque no son exactamente iguales en una y otra simulación) que el sistema de control sigue comportándose correctamente.

22º

1 A

Page 333: Simulink Tutorial Completo

Gijón – Octubre 2006 16

EJERCICIO 1: Visualización de la respuesta de un sistema

Construir una función de transferencia sustituyendo los dígitos ABCDEFGH con los números de su D.N.I., ajustados a la derecha y rellenando con un cero por la izquierda si es necesario:

DNI: . . 1AB*s+2CD-- --- --- G(s)= ----------------AB CDE FGH s3+1E*s2+5F*s+1GH

Por ejemplo:

DNI: 09.345.678 109*s+234-- --- --- G(s)= ----------------AB CDE FGH s3+15*s2+56*s+178

Incluir en el informe los siguientes datos y resultados: (Indicar todos los comandos y el diagrama de bloques del modelo en Simulink utilizados para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)

1. Apellidos, Nombre y DNI del alumno.

2. La función de Transferencia G(s) creada.

3. Los ceros y polos del sistema G(s).

4. Respuesta ante un impulso. (con Matlab) 4.1. Dibujo de la respuesta. 4.2. Máximo de la respuesta. 4.3. Valor en Régimen permanente.

5. Respuesta ante un escalón. (con Simulink) 5.1. Dibujo de la respuesta. 5.2. Máximo de la respuesta. 5.3. Valor en Régimen permanente.

Page 334: Simulink Tutorial Completo

Gijón – Octubre 2006 17

EJERCICIO 2: Creación de un modelo de simulación

Ri

K u (t)i

u (t)m

M.

D.T.

I =cte.e

J

B

P (t)m

P (t)r

w(t)

i (t) i

u (t)c

Li

El sistema de la figura está compuesto por los siguientes elementos:

- Un rectificador controlado que alimenta a un motor CC con una tensión continua ui(t) proporcional a la tensión uc(t), con constante de proporcionalidad K.

- Un motor CC con corriente de excitación constante de parámetros: Ri, Li, cte. contraelectromotriz Kb y cte. de par del motor Kp.

- El conjunto rotor-eje del motor y de la D.T. tiene una inercia J y un coeficiente de rozamiento viscoso B (que se representan en la figura). En el extremo del eje existe un par resistente variable, pr(t), debido a los elementos mecánicos que mueve el motor y que no aparecen en la figura.

Modelo matemático del sistema:

ui(t) = K·uc(t)ui(t) = Ri·ii(t) + Li·dii(t)/dt + um(t)um(t) = Kb·w(t)pm(t) = Kp·ii(t)pm(t) = pr(t) + J·dw(t)/dt + B·w(t)

En transformadas de Laplace:

Ui(s) = K·Uc(s)Ui(s) = Ri·Ii(s) + Li·s·Ii(s) + Um(s)Um(s) = Kb·W(s)Pm(s) = Kp·Ii(s)Pm(s) = Pr(s) + J·s·W(s) + B·W(s)

Obtenga el valor de los parámetros de las ecuaciones sustituyendo convenientemente los dígitos de su D.N.I. en las expresiones siguientes:

D.N.I.: A B . C D E . F G HA B . C D E . F G H

K =1+AKb=0.2-0.01·B [V·s/rad]Kp=1+0.2·C [N·m/A]Ri=10-D [Ω]Li=0.01+0.02·(E+F) [H]J =10+G [Kg·m2]B =5–(0.1·H) [Kg·m2/s]

Por ejemplo:D.N.I.: 0 9 . 3 4 5 . 6 7 8

A B . C D E . F G H

K =1+0=1Kb=0.2-0.01·9=0.11 [V·s/rad]Kp=1+0.2·3=1.6 [N·m/A]Ri=10-4=6 [Ω]Li=0.01+0.02·(5+6)=0.23 [H]J =10+7=17 [Kg·m2]B =5–(0.1·8)=4.2 [Kg·m2/s]

Construir el modelo del sistema en Simulink considerando a uc(t) como entrada, pr(t) como perturbación y w(t) como salida.

Page 335: Simulink Tutorial Completo

Gijón – Octubre 2006 18

Incluir en el informe los siguientes datos y resultados:(Dibujar el diagrama de bloques del modelo en Simulink utilizado para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)

1. Apellidos, Nombre y DNI del alumno.

2. Dibujo del diagrama de bloques usado en las simulaciones.

3. Valores de las Constantes utilizadas (K, Kp, Li, ....).

4. Simular la respuesta del sistema a un escalón de cinco unidades en la entrada Uc(t). 4.1. Obtener el valor al que tiende la respuesta en régimen permanente.

4.2. Determinar la constante de tiempo T del sistema.

5. Añadir a la simulación el efecto de un escalón de cinco unidades en la perturbación, una vez que la respuesta al escalón del apartado 4 ha alcanzado el régimen permanente. 5.1. Dibujar aproximadamente la respuesta. 5.2. Obtener el valor al que tiende la respuesta en régimen permanente.

6. Simular la respuesta del sistema ante una entrada senoidal en Uc(t) de pulsación w=1 rad/s y amplitud 5. (Recuerde anular la perturbación introducida en el apartado 5) 6.1. Dibujar las senoides en régimen permanente. 6.2. Obtener el valor de la amplitud de la senoide de la salida una vez alcanzado el régimen

permanente. 6.3. Obtener la diferencia de fase entre la entrada y la salida una vez alcanzado el régimen

permanente.

Page 336: Simulink Tutorial Completo

Gijón – Octubre 2006 19

EJERCICIO 3: Estudio de la respuesta en frecuencia de un sistema y bucle cerrado

Construir una función de transferencia sustituyendo los dígitos ABCDEFGH con los números de su D.N.I., ajustados a la derecha y rellenando con un cero por la izquierda si es necesario:

DNI: . . 1AB*s+2CD-- --- --- G(s)= ----------------AB CDE FGH s3+1E*s2+5F*s+1GH

Por ejemplo:

DNI: 09.345.678 109*s+234-- --- --- G(s)= ----------------AB CDE FGH s3+15*s2+56*s+178

Incluir en el informe los siguientes datos y resultados:(Indicar todos los comandos utilizados para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)

1. Apellidos, Nombre y DNI del alumno.

2. Indicar la función de Transferencia G(s) creada.

3. Obtener ceros y polos del sistema G(s).

4. Dibujar el diagrama de Bode y obtener el valor del módulo (en decibelios) y la fase (en grados) de la respuesta en frecuencia para ω=5 rad/s de G(s).

5. Obtener el valor del módulo (en decibelios) en el pico de resonancia y la frecuencia de resonancia de G(s). (!ATENCION¡ Puede que el pico de resonancia no exista o no coincida con el valor máximo en módulo del diagrama de Bode. Indicar si suceden estas situaciones).

6. ¿Cuánto vale “Mr”?

7. Obtener la función de transferencia M(s) resultado de realimentar unitaria y negativavente a G(s)con K=1.

X(s)G(s)

+

_

Y(s)K

M(s)

8. Obtener los polos del sistema en bucle cerrado M(s) para K= 5.

9. Obtener los márgenes de ganancia y de fase y las frecuencias correspondientes a esos márgenes para G(s) (En algunos casos pueden ser infinito).

Page 337: Simulink Tutorial Completo

Gijón – Octubre 2006 20

EJERCICIO 4: Diseño de un regulador para un modelo de simulación

Se pretende diseñar un regulador para el sistema del ejercicio 2 cuando este se realimenta negativamente mediante una tacodinamo. La tacodinamo proporciona una tensión de salida de un voltio por cada 1.000 r.p.m. con una respuesta dinámica semejante a un sistema de primer orden con constante de tiempo T=0.1 segundos.

Sistema sin realimentación: (Obtener los valores de los parámetros como en el ejercicio 2)

W(s)G2(s)=

Pr(s)

+G1(s)=Uc(s) Li·s+Ri

J·Li·s2+(B·Li+J·Ri)·s+(Ri·B+Kp·Kb)Li·s+Ri

K·Kp_

Especificaciones para el regulador: Tiempo de establecimiento: ts ≤ 0.4 segundos Sobreoscilación: Mp ≤ 5%Anular el error de posición, ep, en régimen permanente.Eliminar el efecto de perturbaciones en el par pr(t) sobre el régimen permanente del sistema.

Sistema realimentado:

W(s)G2(s)=

H(s)=

Pr(s)

+G1(s)=Uc(s) Li·s+Ri

J·Li·s2+(B·Li+J·Ri)·s+(Ri·B+Kp·Kb)Li·s+Ri

K·KpR(s)

+

_

V(s)

T·s+1

Kt

_

Incluir en el informe los siguientes datos y resultados:(Dibujar el diagrama de bloques del modelo en Simulink utilizado para obtener los datos que se solicitan, los resultados numéricos correspondientes, y los dibujos a mano alzada de los gráficos solicitados)

1. Apellidos, Nombre y DNI del alumno.

2. Valores de las Constantes utilizadas (K, Kp, Li, ....) incluyendo las de la tacodinamo.

3. Regulador diseñado para el control incluyendo los cálculos realizados para obtenerlo. Utilizar a ser posible el criterio de la vertical para el diseño: si el ángulo de compensación obtenido para el regulador sale negativo cambiar la especificación de ts por ts ≤ 0.2 segundos y si sale mayor de 90ºcambiar por ts ≤ 1. Si persisten los problemas consulte con el tutor.

4. Dibujo del diagrama de bloques en bucle cerrado que incluye el regulador utilizado con Simulink.

5. Simular la respuesta del sistema a un escalón de cinco unidades en la entrada v(t). 5.1. Obtener aproximadamente el valor de la sobreoscilación Mp. 5.2. Obtener aproximadamente el valor del tiempo de pico tp. 5.3. Obtener el valor al que tiende la respuesta del sistema, w(t), en régimen permanente.

6. Simular el efecto de un escalón de 2.000 unidades en la perturbación pr(t) una vez que la respuesta anterior ha alcanzado el régimen permanente y dibujar la respuesta del sistema.

Page 338: Simulink Tutorial Completo

1

SIMULINK – MATLAB

CONTENIDO

1. ELEMENTOS BÁSICOS

2. EL MOTOR DC

3. SUBSISTEMAS

4. ECUACIONES DIFERENCIALES

5. SIMULACIÓN DE SISTEMAS

INTRODUCCIÓN

Simulink es una extensión de Matlab utilizado en el modelamiento y simulación de

sistemas. Para arrancar Simulink se puede hacer desde el prompt de Matlab

digitando el comando >>Simulink o utilizando el icono . Se abre la ventana

Simulink Library Browser como se indica abajo y se puede diagramar un nuevo

modelo activando el botón New Model , o sea el icono o de

Page 339: Simulink Tutorial Completo

2

Un modelo es un conjunto de bloques que representa un sistema y como archivo

tiene extensión *.mdl

1. ELEMENTOS BÁSICOS

Los elementos básicos son líneas y bloques. Los bloques están agrupados en:

Sources, Links, Discrete, Continuos, Math, etc., tal como aparecen en la ventana

anterior. Cada bloque tiene entradas y salida para realizar su interconexión. Por

ejemplo, haga clic en Discrete y luego clic en Discrete Transfer Fcn y arrastre el

bloque a la ventana en blanco. Si quiere modificar la función de transferencia del

bloque haga doble clic en él y digite los coeficientes del numerador y denominador

en la nueva ventana que aparece. Para la función 1/(z2 +2z +4) con tiempo de

muestreo de 1 seg, quedaría:

Para realizar el diagrama en bloques de un sistema se hace lo siguiente:

Page 340: Simulink Tutorial Completo

3

Lo primero es arrastrar los bloques a la página en blanco de forma que, Step es

la función paso o escalón que se obtiene de Sources, Scope es el osciloscopio

que se obtiene de Sinks, Transfer Fcn se obtiene de Continuos, Sum y Gain se

obtienen de Math. Modifique los bloques dando doble clic sobre cada uno de ellos

para cambiar sus parámetros o valores e interconéctelos.

Lo segundo es cambiar los nombres a los bloques y asignar las variables o

señales haciendo doble clic en el lugar en que se van a colocar y salvar el modelo

especificándole un nombre, por ejemplo ejem1.mdl

Por último se debe simular el sistema. Para ello se configura la señal de entrada,

en este caso la función paso. Dar doble clic y asignar los siguientes parámetros:

Step time=0, Inicial value=0, Final value=1, Sample time=0. Para simular el

sistema de control se escoge del menú o el icono .y luego

se hace doble clic en Scope para ver su respuesta o salida del sistema. Para

observar además la entrada se puede colocar otro Scope a la salida de Step y se

puede probar para varios pasos variando su amplitud, tiempo de inicio y tiempo de

Page 341: Simulink Tutorial Completo

4

iniciación del paso. Para observar mejor la respuesta se usa el botón Autoscale

(binoculares ) de la ventana del Scope. Si quiere observar mejor la

respuesta o parte de ella se pueden cambiar los parámetros de simulación,

Simulation Simulation parameters. Por ejemplo cambiar el Start time y el Stop

time y correr nuevamente la simulación.

2. EJEMPLO: MODELAR UN MOTOR DC

Un actuador común en sistemas de control es el motor DC. Provee directamente

movimiento rotatorio y acoplado con poleas o correas puede proveer movimiento

transnacional.

2.1 ECUACIONES DINÁMICAS

El circuito eléctrico de la armadura y el diagrama de cuerpo libre del rotor es

mostrado en la figura con sus ecuaciones dinámicas.

Page 342: Simulink Tutorial Completo

5

(1) Leyes de Newton

(2) Leyes de Kirchhoffs

Los parámetros físicos tienen los siguiente valores :

Momento de inercia del rotor : J = 0.01kg.m2/sg2

Rata de amortiguamiento del sistema mecánico: b = 0.1 N.m.sg

Constante de la fuerza electromotriz: Ke = Kt = 0.01 Nm/Amp

Resistencia eléctrica: R = 1 ohm

Inductancia eléctrica: L =0.5H

Fuente de voltaje de entrada: V

Posición angular: θ

Se asume que el rotor y el eje son rígidos

Page 343: Simulink Tutorial Completo

6

2.2 MODELADO DEL MOTOR EN VELOCIDAD

2.3 EXTRAER MODELO LINEAL

Para obtener la función de transferencia del motor primero se trasladan los

parámetros del motor al modelo creando un archivo en Matlab (*.m) de la siguiente

forma:

% VALORES DE LOS PARÁMETROS DEL MOTOR

J = 0.01;

b = 0.1;

Ke = 0.01;

Page 344: Simulink Tutorial Completo

7

Kt = 0.01;

R = 1;

L = 0.5;

Se ejecuta este archivo y se simula el modelo para una entrada de paso unitario

de valor V = 0.01, con los siguientes parámetros de simulación: Stop time = 3 sg.

Arranque la simulación y observe la salida (velocidad del motor).

Como segundo paso se debe obtener el modelo lineal de Matlab del motor. Para

esto, borre el bloque Scope y cámbielo por Out obtenido de la librería de

Signals&Systems. Haga lo mismo para Step cambiándolo por In de esta misma

librería. Los bloques In y Out definen la entrada y salida del sistema que le

gustaría extraer. Salve este modelo. El sistema quedará así:

Como tercero y último paso, después de desarrollado el modelo y salvarlo por

ejemplo con el nombre MotorDcVel.mdl se ejecutan los siguientes comandos:

Page 345: Simulink Tutorial Completo

8

% OBTENER EL MODELO LINEAL DEL SISTEMA

[num, den] = linmod('MotorDcVel')

Gps = tf(num, den)

La respuesta es :

3. SUBSISTEMAS

Abra una nueva ventana y arrastre de la librería Signals&Systems el bloque

SubSystem , haga doble clic en este bloque, abra el modelo MotorDcVel.mdl (el

que tiene In y Out como terminales) cópielo y péguelo en la nueva ventana de

subsistema anterior. Cierre ventanas y aparece una nueva con el bloque con los

terminales del subsistema creado. Déle el nombre MotorDcVel. Si a este bloque

de subsistema se le da doble clic aparece el modelo completo diseñado

anteriormente. Otra forma es señalar los bloques de interés, ir a menú Edit -->

create Subsytem

3.1 SISTEMA EN LAZO ABIERTO

Al subsistema creado que constituye la planta de un sistema de control se le va a

adicionar un controlador y obtendremos la función de transferencia en lazo abierto

y lazo cerrado.

Page 346: Simulink Tutorial Completo

9

% CONTROL DE UN MOTOR DC

[num, den]=linmod('ControlMotor')

Glazo_abierto = tf(num, den)

Respuesta:

3.2 SISTEMA EN LAZO CERRADO

% CONTROL DE UN MOTOR DC

[num, den]=linmod('ControlMotor')

Glazo_cerrado= tf(num, den)

Respuesta:

Page 347: Simulink Tutorial Completo

10

3.3 SISTEMA DISCRETO

DIAGRAMA EN SIMULINK

PROGRAMA MATLAB

% SISTEMA DISCRETO DISCRETO

T=0.1;

[num,den]=dlinmod('MotorDigital',T)

Glazo_cerradoz=tf(num,den,T)

Respuesta:

Page 348: Simulink Tutorial Completo

11

4. SOLUCIÓN DE ECUACIONES DIFERENCIALES

Ejemplo:

Resolver la siguiente ecuación diferencial:

yytytyyytydt

dy

dt

yd6'34''46'3''463

2

2

Diagrama Simulink:

Respuestas:

Page 349: Simulink Tutorial Completo

12

Ejemplo:

Comprobar la integración por Simulink.

Page 350: Simulink Tutorial Completo

13

5. SIMULACIÓN DE SISTEMAS

5.1 INTERCAMBIO DE MATLAB A SIMULINK

Para utilizar señale de Matlab a Simulink de la librerís Sources se utiliza el bloque

From Workspace.

Page 351: Simulink Tutorial Completo

14

Ejemplo: Resolver la ecuación y’’ + y = e t, y’(0) = 0, y(0) =3

El vector [ t x ] se ejecuta en Matlab en el workspace de la siguiente forma:

>> t = 0:0.001:0.999;

>> t = t’;

>> x = exp(t)

Al ejecutarse Simulink toma los datos entregados por Matlab. No olvidar colocar

condición inicial y(0) = 3 en el integrador.

5.2 INTERCAMBIO DE SIMULINK A MATLAB

Para enviar datos de Simulink a Matlab se utiliza de la librería Sinks el bloque To

Workspace.

Ejemplo:

Resolver la ecuación: f(t) = Mx’’ + Bx’ + Kx, M=1, B=1, K= 10, F(t) = 5

Page 352: Simulink Tutorial Completo

15

Diagrama Simulink:

En Matlab:

>> plot(t,y)

5.3 EJERCICIOS

Ejercicio1:

Page 353: Simulink Tutorial Completo

16

Si la entrada es una señal senoidal, encontrar las salidas referidas a vC y iL.

Ejercicio2:

Para el siguiente problema hallar la variación de h si el caudal normal Q es de 10

lit/min y en t=5 seg se aplica una perturbación de 2 lit/min. El valor de K=10, A= 2

m2.

hKtqdt

dhA )(

Diagrama Simulink:

Page 354: Simulink Tutorial Completo

17

EJERCICIO3: LA BOLA MAGNÉTICA

Ecuaciones:

iRVh

img

dt

hdm

dt

diL (2) )1(

2

2

2

Valores:

m=0.1 Kg; g=9.81; R=2 Ohm; L=0.02 H; =0.001

Diagrama simulink:

Page 355: Simulink Tutorial Completo

18

Controlador:

zeros=[-11.5+7.9i, -11.5-7.9i]

polos=[0 -1000]

ganancia=-3.3057e+004

Planta:

i(0) = 0; h(0)=0.05; h’(0)=0

Page 356: Simulink Tutorial Completo

19

Page 357: Simulink Tutorial Completo

20

EJERCICIO4: TANQUE DE AGUA

Ecuación del modelo:

habVdt

dhA

dt

dVol

Diagrama simulink:

Page 358: Simulink Tutorial Completo

21

Controlador:

Planta:

EJERCICIO5: MOVIMIENTO PARABÓLICO

Page 359: Simulink Tutorial Completo

22

Ecuaciones:

acelerado Movimiento ''

unforme Movimiento 0''

gy

x

Condiciones iniciales:

Vo=100 m/sg; = 30º

Page 360: Simulink Tutorial Completo

23

Page 361: Simulink Tutorial Completo

24

EJERCICIO6: PÉNDULO SIMPLE

Ecuación:

0''' wsenBLmL

Valores:

w (peso) = 2; L (longitud) = 0.6; B (amortiguación) = 0.08;

Condiciones iniciales: ’(0) = -2 rad/sg; (0) = /2

Page 362: Simulink Tutorial Completo

25

Diagrama simulink:

Page 363: Simulink Tutorial Completo

26

EJEMPLO: SISTEMA MECANICO

Parámetros:

m1=40; m2=60; k1=400; k2=400; b1=180; b2=220;

Ecuaciones dinámicas:

1)21()21(11

1)( bvvdtvvkdt

dvmtf

22221)12()12(12

20 vbdtvkbvvdtvvkdt

dvm

Ecuaciones de Laplace:

1)21()21(1

11)( bVVVVs

KsVmsF

2222

1)12()12(1

220 VbVs

kbVVVV

s

ksVm

Page 364: Simulink Tutorial Completo

27

Diagrama simulink:

EJEMPLO: SISTEMA TERMOQUÍMICO

Se desarrolla una reacción termoquímica en donde el reaccionante A se convierte

en un producto B.

Velocidad de reacción: r(t)= k c(t)

Constante de velocidad de reacción: k = 0,2 min-1

Page 365: Simulink Tutorial Completo

28

Concentración de la entrada: ci(t)

Para t= 0; ci(0)=1.25 lbmol/pie3

Volumen de la masa reaccionante: V= 5 litros

Flujo de entrada: F= 1 lt/min

Ecuación dinámica:

)()()()(

tKVctFctFcdt

tdcV i

)()()()(

tcKVFtFcdt

tdcV i

)()()(

tcKVF

Ftc

dt

tdc

KVF

Vi

Constante de tiempo:

KVF

V

Ganancia de estado estacionario:

KVF

FKe

Reemplazando valores: = 2.5 min; Ke = 0.5;

Condición inicial de la concentración: c(0)

0 = Fci(0) - Fc(0) - KVc(0)

Reemplazando valores: c(0) = 0.625 lbmol/pie3

Page 366: Simulink Tutorial Completo

29

Programa en Matlab:

%Entrada al paso. Programa pplineal.m

function dy=pplineal(t,y)

global K X tau

dy=(K*X-y)/tau;

% Entrada rampa. Programa rplineal.m

function dy=rplineal(t,y)

global K r tau

dy=(K*r*t-y)/tau;

% Entrada senoidal. Programa splineal.m

function dy=splineal(t,y)

global K tau A w

dy=(K*A*sin(w*t)-y)/tau;

% Programa principal

F=1;

V=5;

K=0.2;

ci0=1.25;

c0=solve('F*ci0-F*c0-K*V*c0=0');

c0=eval(c0)

%Constante de tiempo

tau=V/(F+K*V)

% tau=2.5 minutos

%Ganancia en estado estacionario

Ke=F/(F+K*V)

% Ke=0.5

Page 367: Simulink Tutorial Completo

30

global R K tau X r A w Rango Inicio

Rango=input('Tiempo de simulacion=');

Inicio=input('Condiciones iniciales=');

N=input('ESCRIBA 1=PASO, 2=RAMPA, 3=SENO: ');

disp(' ')

switch N

case 1

X=input('Valor del paso=');

[t,y]=ode45('pplineal',Rango,Inicio);

plot(t,y)

case 2

r=input('valor pendiente de la rampa=');

[t,y]=ode45('rplineal',Rango,Inicio);

plot(t,r*t,t,y/K,'r')

case 3

A=input('Amplitud del seno=');

w=input('Frecuencia del seno=');

[t,y]=ode45('splineal',Rango,Inicio);

disp('Amplitud del perfil de la respuesta')

K*A/sqrt(1+(w*tau)^2)

disp('Fase de la respuesta respecto a la entrada')

atan(-w*tau)

plot(t,A*sin(w*t),t,y,'r')

end

Page 368: Simulink Tutorial Completo

31

Programa en Simulink:

EJEMPLO: SISTEMA HIDRAULICO

% HIDRAULICO UNA ETAPA

C1=3; R1=1; C2=10; R2=2;

qi=2;

keyboard

plot(t,qo)

title('HIDRAULICO')

grid

Page 369: Simulink Tutorial Completo

32

pause

n=1;

while n==1

T=input('Entre tiempo: ')

delta=input('Entre valor delta: ')

i=find(t<=(T+delta)&t>=(T-delta));

tiempo=t(i)

caudal_salida=qo(i)

n=input('Entre 1 para seguir y 0 para parar: ')

end

EJEMPLO: SISTEMA ELÉCTRICO

% CIRCUITO RC DE DOS ETAPAS

R1=10e3; R2=20e3; C1=1e-6; C2=10e-6;

ei=10;

keyboard

plot(t,eo)

title('CIRCUITO RC')

grid

Page 370: Simulink Tutorial Completo

33

pause

n=1;

while n==1

T=input('Entre tiempo: ')

delta=input('Entre valor de delta: ')

i=find(t<=(T+delta)&t>=(T-delta));

tiempo=t(i)

voltaje_salida=eo(i)

n=input('Entre 1 para seguir y 0 para parar: ')

end

Page 371: Simulink Tutorial Completo

INTRODUCCION A SIMULINK

Matlab (Matrix Laboratory) es un sistema basado en matrices para realizar cálculos matemáticos y de ingeniería. Entre las múltiples herramientas que presenta este programa se encuentra Simulink que es una librería de MATLAB que permite la simulación de procesos mediante diagramas de bloques.

1. Acceso a la librería de bloques de Simulink:

Para acceder a la librería de Simulink se debe abrir inicialmente la ventana principal de Matlab (Matlab Command Window). En esta se puede ejecutar el comando “simulink” o hacer clic en el símbolo correspondiente en la barra de herramientas en la parte superior de esta ventana.

Al hacer esto aparecerá el listado de las librerías correspondientes a simulink, donde se podrá tener acceso a todos los bloques que brinda esta herramienta. Para abrir una nueva hoja de trabajo se deberá acceder a través de: File à New à Model, o hacer clic en el símbolo de “hoja nueva”.

Figura 1. Simulink Library Browser

La librería “Simulink” contiene los bloques necesarios para simular un sistema mediante técnicas convencionales, las demás librerías son herramientas adicionales que se utilizan para aplicaciones específicas de control avanzado. En la Figura 2 se muestra el contenido de la librería Simulink.

Page 372: Simulink Tutorial Completo

Figura 2. Librería Simulink. En la figura 3 se pueden observar los bloques mas utilizados en la simulación de procesos. Estos se encuentran en hacer clic en el signo (+) de cada librería. Pueden ser utilizados al hacer clic sobre ellos y arrastrándolos sobre la hoja de trabajo. Igualmente en la tabla 1 se pueden observar una descripción mas detalladas de algunas de estas funciones.

Figura 3. Bloques mas utilizados en la librería Simulink

Page 373: Simulink Tutorial Completo

Tabla 1. Detalles de algunos bloques de la librería Simulink.

Bloque Función Librería Parámetros requeridos

Constante Asigna un valor constante a la entrada.

Sources Valor de la constante.

Entrada escalón Introduce un escalón de magnitud específica en un tiempo dado.

Sources Tiempo del escalón Valor inicial del escalón, Valor Final del Escalón

Entrada Rampa Introduce una rampa en un tiempo especificado.

Sources Tiempo de la rampa, pendiente

Entrada Senoidal Introduce una señal senoidal específicada por el usuario.

Sources Amplitud de la onda, Fase.

Workspace Almacena datos de la señal que llega al bloque y la convierte en vector. Si se conecta al reloj se almacena el vector tiempo.

Sinks Nombre y tipo de la variable (Save format:

Matrix)

Scope Grafica la señal que se introduzca con respecto al tiempo.

Sinks Entradas

XYgraph Grafica la entrada superior en el eje x y la inferior en el eje y

Sinks Rango de los ejes

Función de Transferencia

Representa la función de transferencia a lazo abierto.

Contin. Numerador y Denominador de la FT

Integrador Integra una señal en función del tiempo

Contin. Valor inicial desde el cual se va a integrar

Retardo de transporte Introduce un retardo en el tiempo en el cual aparece la señal.

Contin. Valor del retardo (Debe ser un número positivo)

Ganancia Multiplica la señal por cualquier valor de ganancia que se introduzca.

Math Valor de la ganancia

Sumador Suma dos señales. Math Número de entradas a sumar

Multiplicador Multiplica dos señales. Math Número de entradas a multiplicar

Matlab-Function Aplica cualquier función matemática conocida por Matlab a la señal.

Functions and Tables

Función a utilizar

PID Es un controlador donde se puede introducir una parte proporcional, una integral y una derivativa

Blocksets & Toolbox.:

Simulink-extras: Aditional linear

Proporcional: K, Integral: K/Ti, Derivativo: K.Td

Mux Permite representar dos señales distintas en una misma gráfica.

Signals &System. Número de entradas

Page 374: Simulink Tutorial Completo

Obs. Colocando el nombre del bloque de interés en el buscador (Simulink library browser), se puede ubicar directamente en la librería de bloques.

Notas sobre el uso de Matlab.

- Los bloques pueden ser movidos al arrastrase con el botón izquierdo del mouse y pueden ser copiados al hacer clic sobre ellos con el botón izquierdo del mouse y arrastrando la copia creada.

- Los bloques se deben unir mediante flechas. Esto se logra haciendo clic en la flecha de salida

del bloque deseado y conectándola (sin soltar el botón), a la flecha del bloque que se desea unir.

- Para que las modificaciones en el programa hagan efecto este deberá ser grabado después de realizar los cambios.

- Al hacer clic con el botón derecho sobre una señal, se podrá obtener una “línea” de esta señal

para llevarla o conectarla a un bloque deseado.

- Al barrer el mouse sobre un grupo de bloques se podrán mover estos a la vez y copiarlos en grupo.

- El “save format” de los “workspace” debe ser colocado en “array” para poder “graficar” las

variables deseadas posteriormente. 2. Ejemplos de Uso de Simulink

Modelos Matemáticos no Linealizados. a) Simular la siguiente ecuación diferencial y encontrar su respuesta ante una entrada escalón.

1)(*60

exp5)(

=

+ tXTdt

xd Donde, X0 = 0 en T=500

Solución:

- Seleccionar los bloques necesarios para representar el modelo y llevarlos a la hoja de trabajo. Para ello debe buscar los bloques en las librerías correspondientes (Ver tabla 1 y figuras 2 y 3), seleccionar cada uno haciendo "click" sobre él para marcarlo y arrastrarlo con el "mouse" hasta la ventana.

Figura 4. Bloques necesarios para la representación de la ecuación.

Page 375: Simulink Tutorial Completo

- Armar el modelo. Las ecuaciones diferenciales pueden representarse en bloques de "Simulink" como función del tiempo sin linealizarlas ni llevarlas al dominio de Laplace. En primer lugar, se debe despejar la derivada temporal para expresarla en función de los demás términos de la ecuación:

)(*60

exp51)(

tXTdt

xd

−= (1)

Luego, se debe establecer qué valores en la ecuación son constantes y cuáles son función del tiempo, en este caso, la conversión X depende del tiempo, pero la temperatura T es constante.

El primer término del lado derecho de la ecuación (1) se puede representar como un escalón unitario o como una entrada constante.

En el segundo término [5exp(-60/T).X(t)], la temperatura se representa, igualmente, como una entrada escalón o como una entrada constante, luego se invierte con un bloque Matlab Function, donde se especifica la función 1/u, se multiplica por una ganancia de –60 con un bloque Gain, y se introduce nuevamente en una Matlab Función para obtener la exponencial, que va a ser multiplicada por 5 con otro bloque Gain, como se muestra en la figura 5.

La variable X(t) no se conoce porque es el resultado de integrar el lado derecho de la ecuación, esta variable debe multiplicarse con la exponencial con un bloque producto para formar el segundo término de la ecuación diferencial, luego ambos términos se combinan con un bloque Sum para obtener la ecuación (dX(t)/dt) completa que pasa por un integrador para obtener la variable X(t), que se realimenta al bloque producto.

Se debe colocar igualmente un bloque de reloj para que el simulador contabilice el tiempo. Todas las señales que se deseen guardar o ser posteriormente llamadas para graficar, deben ser alimentadas a un bloque workspace (Save format : Array)

Figura 5. Diagrama de bloques de la simulación de la ecuación diferencial.

Haciendo clic en cada bloque se pueden cambiar sus parámetros y sus nombres. En este caso se colocan los siguientes:

Entrada Escalón (T) Integrador Matlab Function (1/T) Matlab Function Exp(E/KT)

Step Time = 0 Valor Inicial = 500 Valor Final = 500

Inicial Value = 0 Fuction = 1/u Fuction = exp

Page 376: Simulink Tutorial Completo

De esta forma tenemos:

Figura 6. Diagrama de Bloques con sus parámetros.

Page 377: Simulink Tutorial Completo

- A continuación se abre el menú Simulation à Simulation Parameters y se modifica el tiempo de parada. En este caso se pondrá 8 seg. Posteriormente se simula la ecuación diferencial apretando el botón o símbolo de “play” en la parte superior de la pantalla y se espera a que la maquina realice el calculo (indicado en la parte inferior derecha de la ventana)

- Después de realizar la simulación se regresa a la ventana principal de Matlab y se grafican

los resultados colocando el comando: plot(T,X) y se obtiene:

Figura 7. Simulación de la respuesta de la ecuación diferencial.

Para observar la respuesta del sistema ante una perturbación se coloca:

Entrada Escalón (T)

Step Time = 4

Valor Inicial = 500

Valor Final = 1000

Para que el simulador acepte el cambio, el archivo debe ser guardado (no debe aparecer un “asterisco” al lado del nombre del programa en la parte superior de la ventana). Después de simular y graficar, se obtiene:

Page 378: Simulink Tutorial Completo

Figura 8. Respuesta del sistema de la ecuación diferencial ante entrada escalón.

Se observa la perturbación del sistema en el tiempo = 4 seg.

Ecuaciones Diferenciales Acopladas

b) Simular el siguiente sistema de ecuaciones diferenciales.

)(*)1( TaTBFoToTAdt

dT−−−= A = 0.08 B = 0.05

)(*)2( TTaDFpToTaCdt

dTa−+−= C = 0.5 D = 0.01

Donde Fo, To1 y To son posibles perturbaciones cuyos valores son:

Fo = 0.01 m3/min, To1 = 280K, To2 = 350K

Solución:

- Los Bloques seleccionados son:

Figura 9. Bloques usados para la representación del sistema.

Page 379: Simulink Tutorial Completo

- Armar el modelo. Las ecuaciones diferenciales se "escriben en bloques de Simulink" como función del tiempo sin realizar ninguna modificación de las mismas para linealizarlas o llevarlas al dominio de Laplace.

Figura 10. Diagrama de bloques del proceso con sus parámetros.

Los parámetros iniciales de los bloques y simulación serán:

Entrada Escalón (T01)

Entrada Escalón (T02) Entrada Escalón (Fo) Integrador (T)

Integrador (Ta)

Stop Time

Step Time = 0 Valor Inicial = 280 Valor Final = 280

Step Time = 0 Valor Inicial = 350 Valor Final = 350

Step Time = 0 Valor Inicial = 0.01 Valor Final = 0.01

Initial Value = 280

Initial Value = 350

200

- Después de Simular y Graficar usando: Plot(t,[T,Ta]) se obtiene,

Figura 11. Simulación del sistema de ecuaciones diferenciales

Page 380: Simulink Tutorial Completo

Funciones de transferencia a lazo abierto y lazo cerrado

c) Dada la siguiente función de trasferencia obtenga la respuesta del sistema a lazo abierto ante una entrada escalón.

24

12 ++

=ss

FT

Solución:

- Los Bloques seleccionados son:

Figura 12. Bloques usados para la representación del sistema.

- Armar el modelo.

Figura 13. Diagrama de bloques del proceso con sus parámetros.

Los parámetros iniciales de los bloques y simulación serán:

Entrada Escalón Función de

Trasferencia Parámetros Simulación

Step Time = 0 Valor Inicial = 0 Valor Final = 1

Numerador = [1] Denominador = [1 4 2]

Stop Time = 20

Page 381: Simulink Tutorial Completo

- Después de Simular y Graficar usando: Plot(T,X) se obtiene,

Figura 14. Respuesta temporal de la función de transferencia. d) Compare la respuesta a lazo cerrado obtenida para la función de transferencia del ejemplo

anterior con la respuesta obtenida al aumentar 5 veces la ganancia y con la respuesta obtenida al usar un controlador de función de transferencia:

+=

TiKGc

111 Donde, K = 1 y Ti = 0.5

Solución:

- Los Bloques seleccionados son:

Figura 15. Bloques usados para la representación del sistema.

Page 382: Simulink Tutorial Completo

- Armar el modelo.

Figura 16. Diagrama de bloques del proceso con sus parámetros.

Los parámetros de los bloques son:

Entrada Escalón Ganancia Mux PID Stop Time

Step Time = 0 Valor Inicial = 0 Valor Final = 1

Gain = 5 Number of inputs

= 3

Proporcional = 1 Integral = 1/0.5 Derivative = 0

20

- Después de Simular y Graficar usando: Plot(T,s) se obtiene,

Figura 17. Respuesta temporal de la función de transferencia.

Page 383: Simulink Tutorial Completo

Introduccion a MATLAB y SIMULINK paraControl

Virginia Mazzone

Regulador centrıfugo de Watt

Control Automatico 1http://iaci.unq.edu.ar/caut1Automatizacion y Control Industrial

Universidad Nacional de QuilmesMarzo 2002

Page 384: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 1

Indice General

1 Introduccion a MATLAB 11.1 Conversion de una funcion transferencia . . . . . . . . . . . . . . . . . . . . . 11.2 Raıces de un polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Desarrollo en fracciones simples . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Funcion transferencia a lazo cerrado . . . . . . . . . . . . . . . . . . . . . . . . 61.5 Respuesta al impulso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.6 Respuesta al escalon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.7 Graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Introduccion a SIMULINK 142.1 Acceso y descripcion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2 Funcion transferencia a lazo cerrado . . . . . . . . . . . . . . . . . . . . . . . . 162.3 Respuesta al Escalon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.4 Utilizacion de parametros ya definidos . . . . . . . . . . . . . . . . . . . . . . . 19

1 Introducci on a M ATLAB

Este apunte es una introduccion elemental a MATLAB, destinado a conocer y practicar al-gunas de las operaciones basicas con funciones de transferencia. Los comandos que uti-lizaremos son los que figuran en la Tabla 1. Para mayor informacion sobre un comandoen particular puede ejecutarse help topic o simplemente help ’comando’ , desde laventana de comando de MATLAB.

1.1 Conversi on de una funci on transferencia

Una funcion transferencia puede describirse en MATLAB utilizando dos vectores filas: unopara los coeficientes del numerador y otro para los coeficientes del denominador. A menudose requiere para analizar o disenar un sistema conocer la ubicacion de sus polos y ceros;dicha informacion esta contenida en la funcion transferencia del sistema. Cuando la fun-cion de transferencia esta especificada como razon de polinomios, podemos conocer suspolos, ceros y ganancia, o viceversa. Los comandos que nos permiten esto son: tf2zp , quede un cociente de polinomios nos devuelve los ceros, polos y una ganancia, y zp2tf , quede conocer los polos, ceros y la ganancia de un sistema nos da el numerador y denominadorde su funcion de transferencia.

Ejemplo 1. Supongamos la funcion transferencia

G(s) =5s + 20

s2 + 4s + 20,

si sacamos el 5 factor comun del numerador y factorizamos el denominador utilizando susraıces, nos queda de la forma

G(s) =5(s + 4)

(s + 2− 4 j)(s + 2 + 4 j).

Page 385: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 2

Comando Breve explicacionexp Exponencial.sin Seno.cos Coseno.sinh Seno Hiperbolico.cosh Coseno Hiperbolico.clf Elimina la figura actual.plot Crea graficas.subplot Crea multiples graficos en la misma figura.hold Mantiene la grafica anterior.title Agrega tıtulo del grafico.xlabel Agrega nombre del eje-X.ylabel Agrega nombre del eje-Y.text Agrega texto al grafico.print Imprime el grafico o lo guarda en un archivofigure Crea figuras (ventana para graficos).impulse Respuesta al Impulso.step Respuesta al escalon unitario.tf Crea un modelo en funcion de transferencia.zpk Crea un modelo de cero-polo-ganancia.ss2tf Conversion de modelo en espacio de estados a funcion de transferencia.tf2zp Conversion de modelo en funcion de transferencia a polos y ceros.ss2zp Conversion de modelo en espacio de estados a polos y ceros.zp2tf Conversion de modelo en polos y ceros a funcion de transferencia.tf2ss Conversion de modelo en funcion de transferencia a espacio de estados.zp2ss Conversion de modelo en polos y ceros a espacio de estados.

Tabla 1: Comandos que utilizaremos

Page 386: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 3

Para llevar a cabo lo mismo con MATLAB, debemos ingresar los polinomios numeradory denominador, en forma de vectores de la siguiente manera:

num=[5 20];den=[1 4 20];

Observemos que para definir el vector lo hacemos colocando entre corchetes los coefi-cientes de cada termino, ordenados de mayor orden al menor. Para separar las columnasdel vector lo hacemos con un espacio, o tambien podrıamos utilizar coma. El punto y comafinal es para que el resultado de lo ejecutado por MATLAB no salga por pantalla.

Si ahora ingresamos:

[z,p,k]=tf2zp(num,den)

Obtenemos:

z=-4p=[-2+4j -2-4j]k=5

Dado que toda funcion transferencia dada por un cociente de polinomios se puede escribirde la forma

G(s) = k ∏mi=1(s− zi)

∏ni=1(s− pi)

con m ≤ n,

podemos armar facilmente nuestra funcion transferencia, haciendo

G(s) =5(s + 4)

(s + 2 + 4 j)(s + 2− 4 j).

Si queremos realizar el procedimiento inverso, necesitamos ingresar las variables k, z yp. Con la instruccion:

[num,den]=zp2tf(z,p,k);

obtenemos el numerador y denominador de la funcion transferencia:

num=[5 20]den=[1 4 20]

El hecho de tener el numerador y el denominador de la funcion de transferencia endos variables, no significa que MATLAB la identifique como tal. Para ello se utiliza el co-mando tf , que describe en una sola variable la transferencia dada por su numerador y aldenominador. Lo utilizamos de la siguiente forma:

G=tf(num,den);

Si queremos que MATLAB arme la funcion transferencia como cociente de productos delos ceros y los polos, para ello utilizamos zpk , de la siguiente forma:

G=zpk(z,p,k);

Page 387: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 4

1.2 Raıces de un polinomio

En el Ejemplo 1 vimos que el polinomio denominador de la funcion transferencia venıadado por: s2 + 4s + 20, y pudimos hallar sus raıces dado que se trata de una ecuacion desegundo orden.

En polinomios de orden superior, la tarea de encontrar sus raıces no siempre es tan facil.Con la funcion de MATLAB roots podemos calcular las raıces de cualquier polinomio.Para ejecutar dicha funcion tenemos que ingresar el polinomio, como vector, recordandoque los polinomios se ingresan en la primer componente el termino de mayor orden y luegoen forma descendente separados por coma o un espacio.

Ejemplo 2. Consideremos el siguiente polinomio:

P = s4 + 4s3 + 4s2 + s + 20

Ingresamos el polinomio p=[1 4 4 1 20] y luego:

r=roots(p);

En lugar de hacer la operacion en dos pasos, podemos hacerlo solo en uno; si tipeamosr=roots([1 4 4 1 20]) obtenemos el mismo resultado Las cuatro raıces del polinomioanterior que surgen de MATLAB son: −2.6445± 1.2595 j y 0.6545± 1.3742 j.

Si el caso es al reves, es decir, tengo las raıces y quiero conocer el polinomio, el comandopoly es el que se utilizaremos. Siguiendo con el mismo ejemplo, supongamos que lo quetenemos son las raıces p1,2 = −2.6445 ± 1.2595 j y p3,4 = 0.6545 ± 1.3742 j. Entonces elpolinomio al que le corresponden esas raıces es:

P=poly([p1,p2,p3,p4]);

Notemos que el polinomio P que obtuvimos es monico; si quisieramos cualquier otro,deberıamos multiplicar a P por el coeficiente principal. Otra cosa a tener en cuenta es quesiempre que pongamos una raız compleja debemos poner su conjugada.

1.3 Desarrollo en fracciones simples

Cuando analizamos un sistema de control, por lo general disponemos de su funcion trans-ferencia a lazo cerrado G(s), donde G(s) = Y(s)

R(s) . Con lo que podemos escribir la salida enfuncion de la transferencia y la entrada: Y(s) = G(s)× R(s).

Si desearamos conocer la respuesta temporal g(t) del sistema cuando lo excitamos conuna senal de entrada r(t), debemos calcular la transformada inversa de Laplace, es decirg(t) = L−1Y(s) = L−1G(s)×R(s). Como sabemos, es mas sencillo de antitransformarcuando se trata de un cociente de polinomios, dado que si lo expresamos en fraccionessimples podemos utilizar una tabla de transformadas de Laplace.

Ejemplo 3. Supongamos que tenemos la siguiente funcion transferencia:

G(s) =16s + 16

(s + 2)(s + 4)y que R(s) =

1s

Page 388: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 5

Como las raıces del denominador sor reales y distintas, el metodo de desarrollo en frac-ciones simples nos permite escribir a G(s)× R(s) de la siguiente manera:

16s + 16s(s + 2)(s + 4)

=As

+B

s + 2+

Cs + 4

Ahora podemos calcular c(t) se la siguiente forma:

c(t) = L−1

As

+B

s + 2+

Cs + 4

= L−1

As

+ L−1

B

s + 2

+ L−1

C

s + 4

= A + Be−2t + Ce−4t

Para calcular los valores de A, B y C lo hacemos mediante la formula de residuos, dadoque en este ejemplo los polos son de primer orden, resulta que

Resp = lims→p

(s− p)F(s)

donde p es el polo para el cual se esta calculado el residuo. Veamos como serıa en esteejemplo:

A = lims→0

(s)16s + 16

s(s + 2)(s + 4)=

16(0) + 16(0 + 2)(0 + 4)

= 2

B = lims→−2

(s + 2)16s + 16

s(s + 2)(s + 4)=

16(−2) + 16(−2)(−2 + 4)

= 4

C = lims→−4

(s + 4)16s + 16

s(s + 2)(s + 4)=

16(−4) + 16(−4)(−4 + 2)

= −6

Con estos residuos, queda determinada la salida como: c(t) = 2 + 4e−2t − 6e−4t

En general, estos calculos pueden tornarse muy complicados de realizar ’a mano’. Veamoscomo se simplifican utilizando la funcion MATLAB residue . Ingresemos nuevamente lospolinomios numerador y denominador de la misma forma como lo venimos haciendo hastaahora. Ingresemos ahora la sentencia:

[res,p]=residue(num,den);

Esta funcion nos devuelve dos parametros vectoriales: en la variable res aparecen losresiduos correspondientes a los polos que figuran en la variable p, es decir, el primer resid-uo corresponde al primer polo y ası sucesivamente.

Si la funcion transferencia resulta ser propia, es decir que el grado del numerador es igualal del denominador, podemos anadir una parametro mas al argumento del lado izquierdo,que lo podemos llamar k. Veamos como serıa esto mediante otro ejemplo:

Ejemplo 4. Supongamos que queremos hallar f (t) siendo:

F(s) =2s3 + 5s2 + 3s + 6s3 + 6s2 + 11s + 6

⇒ f (t) = L−1F(s)

Page 389: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 6

Si aplicamos el comando:

[res,p,k]=residue(num,den);

y si armamos, como lo hicimos anteriormente, la funcion desarrollada en fracciones sim-ples, el termino independiente es el que aparece el la variable k. Por lo tanto F(s) =−6s+3 + −4

s+2 + 3s+1 + 2, de donde ahora calcular la f (t) resulta muy sencillo.

Si ahora nuestro interes es el inverso, es decir que tenemos una funcion escrita en frac-ciones simples y quisieramos obtener la funcion como cociente de polinomios, analıticamentedeberıamos sacar comun denominador y hacer todas las cuentas correspondientes. Esto re-sulta inmediato con el comando de MATLAB:

[num,den]=residue(res,p,k);

1.4 Funci on transferencia a lazo cerrado

Ejemplo 5. Supongamos que disponemos del sistema de la Figura 1 donde G1(s) = 0.4;G2(s) = 100

s(s+2) ; H2(s) = ss+20 y H1(s) = 1; y pretendemos hallar la funcion transferencia a

lazo cerrado G(s) = Y(s)R(s) . Si aplicamos reduccion de bloques, o resolviendo el diagrama de

ll --

-

6

--

6

H1(s)

− −

H2(s)

G2(s)R(s) Y(s)E(s) V(s)

G1(s)

Figura 1: Diagrama de bloques

flujo y aplicando Mason, obtenemos:

G(s) =40s + 800

s3 + 22s2 + 180s + 800

En MATLAB la funcion transferencia a lazo cerrado se puede calcular de dos formas:

• Utilizando SIMULINK (lo veremos mas adelante).

• Utilizando las funciones de MATLAB series, parallel, feedback y cloop .

Para calcular la funcion transferencia a lazo cerrado G(s) sigamos los siguientes pasos:

1. Definimos los numeradores y denominadores de las funciones transferencia de cadabloque de la siguiente forma:

numg1=0.4; deng1=1;numg2=100; deng2=[1 2 0];numh2=[1 0]; denh2=[1 20];

Page 390: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 7

2. Calculamos la funcion transferencia de V(s) a Y(s):

[numvc,denvc]=feedback(numg2,deng2,numh2,denh2,-1);

3. Ahora calculamos la funcion transferencia de E(s) a Y(s) con:

[numec,denec]=series(numg1,deng1,numvc,denvc);

4. Por ultimo calculamos el lazo cerrado:

[num, den]=cloop(numec,denec,-1);

Lo que obtuvimos son los vectores numerador y denominador de la funcion transferen-cia por separado. Recordemos que para ingresarla como funcion de transferencia a MAT-LAB, debemos utilizar tf .

1.5 Respuesta al impulso

Ahora que ya sabemos como pasar de la respuesta temporal a Laplace, verifiquemos quela respuesta al impulso de la transformada de Laplace coincide con la respuesta temporal.Para ello utilizaremos el comando de MATLAB impulse .

Ejemplo 6. Supongamos que tenemos una funcion transferencia de la siguiente forma:

Y(s) =1

(s + a)(s + b); donde a = 1, b = 2

Si calculamos ahora la antitransformada, desarrollando en fracciones simples como en laseccion 1.3, resulta que y(t) = e−t − e−2t. Ingresemos los vectores numerador y denomi-nador y luego ejecutemos el comando:

impulse(num,den);

Veremos que este comando devuelve el grafico de la Figura 2 Como podemos ver, solonos muestra los primeros 6 segundos de la respuesta. Si quisieramos que nos mostrara 12segundos, debemos definir un vector de tiempo. Para ello ingresemos, por ejemplo,

t=0:0.1:12;

El vector t tendra como primer elemento el 0 y como ultimo al 12. Cada elemento estara auna distancia de 0.1 de su consecutivo. Si ahora introducimos este parametro en el coman-do impulse(num,den,t) , el grafico mostrara los primeros 12 segundos de la respuestaal impulso.

Notemos que este comando no fue asignado a ninguna variable; podrıamos asignarleun vector, es decir y=impulse(num,den,t) , y ası tendrıamos los valores de la salidade la respuesta al impulso en dicho vector. Podrıamos tambien graficar este vector con elcomando plot(t,y) , comando que veremos en la seccion 1.7.

Page 391: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 8

Time (sec.)

Am

plitu

de

Impulse Response

0 1 2 3 4 5 60

0.05

0.1

0.15

0.2

0.25From: U(1)

To:

Y(1

)

Figura 2: Respuesta al impulso

Dado que la funcion transferencia de un sistema lineal invariante en el tiempo se de-fine como la transformada de Laplace de la respuesta al impulso cuando todas las condi-ciones iniciales son nulas, comparemos el resultado obtenido con el que resultarıa si cal-cularamos la respuesta temporal. Para ello utilizaremos el mismo vector temporal t, yla instruccion f=exp(-t)+exp(-2*t) . Ahora podemos comparar los valores obtenidosdesde la respuesta al impulso con los obtenidos desde la respuesta temporal (por ejemplo,restandolos).

1.6 Respuesta al escal on

De la misma forma que en la seccion anterior, podrıamos querer graficar la respuesta al es-calon unitario. MATLAB posee un comando, llamado step , para calcular la salida temporalcuando la entrada se trata de un escalon unitario. Lo unico que necesita este comando es elnumerador y el denominador de la funcion transferencia.

step(num,den);y=step(num,den);

Si utilizamos el comando sin asignarle la salida a ninguna variable, MATLAB abre unaventana grafica mostrando el grafico de la salida a la excitacion escalon unitario, de lamisma forma que antes. Sin embargo,al igual que vimos en el comando impulse , cuandoeste es asignado a una variable, los valores obtenidos se guardan en el vector y.Ejemplo 7. Calculemos la respuesta al escalon unitario de la funcion transferencia:

G(s) =Y(s)R(s)

=4

s2 + 0.8s + 4

Si ingresamos el comando step(num,den) , veremos un grafico similar al que podemosobservar en la Figura 3.

Page 392: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 9

Time (sec.)

Am

plitu

de

Step Response

0 5 10 150

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6From: U(1)

To:

Y(1

)

Figura 3: Respuesta al escalon unitario

Si ahora queremos la respuesta a una entrada rampa unitaria, MATLAB no posee ninguncomando que lo resuelva. Por lo que veremos como con el comando step podemos obteneruna rampa. Si seguimos con el ejemplo anterior y excitamos al sistema con r(t) = t, es decirque R(s) = 1

s2 , tenemos lo siguiente:

Y(s) =(

4s2 + 0.8s + 4

)1s2 ⇒ Y(s) =

(4

s3 + 0.8S2 + 4s

)1s

Por lo que utilizando como denominador de la funcion transferencia al polinomio s3 +0.8s2 + 4s, es decir den=[1 0.8 4 0] , y calculando la respuesta al escalon unitario constep(num,den) , obtenemos la respuesta a la rampa unitaria que se muestra en la Figura4.

1.7 Graficos

Como vimos en secciones anteriores los comandos step e impulse grafican las respuestasal escalon y al impulso respectivamente, pero ahora vamos a introducir algo mas general.Para graficar cualquier funcion en general utilizaremos el comando plot , que solo necesitadefinir el vector a graficar en la forma basica

plot(vector);

Se obtiene un grafico donde el eje de abscisas sera la posicion del elemento del vector y laordenada el valor que tiene el vector en dicha posicion. En el ejemplo 6, guardamos en elvector y los valores de la salida de la respuesta al impulso. Si ahora ingresamos plot(y) ,en lugar de tener segundos en el eje de abscisas tendremos la cantidad de elementos de esevector. Si ingresamos plot(t,y) , ahora el eje de abscisas correspondera al vector tempo-ral ya definido e ira desde t = 0 a t = 12, que es como lo tenıamos definido. Grafiquemos

Page 393: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 10

Time (sec.)

Am

plitu

de

Step Response

0 5 10 15 20 250

5

10

15

20

25From: U(1)

To:

Y(1

)

Figura 4: Respuesta a la rampa unitaria

entonces los valores guardados en el vector f . Estos valores corresponden a la respuestatemporal, por lo que el grafico debera ser el mismo. Si ingresamos plot(t,f) , obten-dremos el grafico de la Figura 5

Como podemos ver, no hay casi diferencias con la figura 2, excepto por el tıtulo y losnombres de los ejes que el comando impulse(num,den) pone automaticamente. Veamosque no es difıcil si se lo queremos agregar a un grafico, para ello utilizaremos las sentenciastitle, xlabel y ylabel . Estos comandos se utilizan luego de ingresar el comandoplot , ya que tanto el tıtulo, como los nombres de los ejes, se escribiran el la figura que seencuentre abierta:

title(’Respuesta al Impulso’);xlabel(’Tiempo(seg.)’);ylabel(’Salida c(t)’);

Notemos que el texto que queremos que aparezca esta escrito entre comillas simples.Los comandos anteriores, pueden ser tambien utilizados con step y impulse , aunquecuando son utilizados en estos comandos, el tıtulo y el nombre de los ejes que trae la fun-cion por defecto tambien aparecen. Otros comandos que pueden ser utiles a la hora detrabajar con graficos son grid y text , que se utilizan para agregar una grilla y agregartexto respectivamente. El comando text se utiliza de la misma forma que que title , esdecir, el texto que aparecera sera el que se encuentra escrito entre las comillas simples , peroantes debemos ingresar las coordenadas (x, y) donde queremos que aparezca el texto. Elcomando grid , se usa sin parametros. Veamos el siguiente ejemplo:

Ejemplo 8. Supongamos que tenemos la funcion transferencia de la Figura 1, que ya la cal-culamos con MATLAB en el Ejemplo 2.2. Abramos un archivo nuevo e ingresemos lo sigu-iente:

Page 394: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 11

0 2 4 6 8 10 120

0.05

0.1

0.15

0.2

0.25

Figura 5: Respuesta temporal del ejemplo 6

num=[40 800];den[1 22 180 800];t=0:0.01:2;y=step(num,den,t);plot(t,y);title(’Respuesta al escalon unitario’);xlabel(’Tiempo (seg.)’);ylabel(’Salida del sistema’);text(0.5,1.1,’maximo valor’);grid;

Si ejecutamos el programa vamos a obtener el grafico de la Figura 6.Supongamos ahora que queremos graficar en la misma figura dos o mas graficos para

poder compararlas. Esto es posible utilizando el comando hold on - hold off , quemantiene la figura y superpone el siguiente grafico sobre la misma figura, como veremosen el siguiente ejemplo.Ejemplo 9. Supongamos que queremos graficar tres sinusoides con frecuencias diferentes,ingresemos en un archivo nuevo:

t=0:pi/20:2*pi;y1=sin(t);y2=sin(t-pi/2);y3=sin(t-pi);plot(t,y1);hold on;plot(t,y2);plot(t,y3);hold off;

Page 395: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 12

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4Respuesta al escalón

Tiempo (seg.)

Sal

ida

del s

iste

ma

maximo valor

Figura 6: Respuesta al escalon del ejemplo

Luego de ejecutar estas lıneas veremos que en la figura que resulta, aparecen 3 graficasen el mismo color, e imposible de identificar cual corresponde a cada una porque ambas seencuentran graficadas con el mismo tipo de linea y el mismo color. Para ello veamos unparametro del tipo string que podemos agregar al comando plot para especificaciones delestilo del grafico. Los parametros que figuran en la Tabla 2 son para elegir el color de lalınea, los que se encuentran en la Tabla 3 son para elegir el estilo de la lınea y los que seencuentran el la Tabla 4 son para elegir el tipo de marca que aparecera sobre los puntos delvector graficado.

Espec. Colorr rojob azul (por defecto)w blancog verdec cianm magnetoy amarillosk negro

Tabla 2: Especificadores de color

Ahora especifiquemos cada uno de los plot con un estilo diferente, por ejemplo, enlugar del comando plot(t,y) escribamos:

plot(t,y1,’-.rx’);plot(t,y2,’--mo’);plot(t,y3,’:bs’);

Page 396: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 13

Espec. Estilo de linea- linea solida (por defecto)– linea rayada: linea punteada-. linea punto-raya

Tabla 3: Especificadores de linea

Espec. Estilo de marca+ signo maso cırculo· punto∗ asteriscos cuadradod diamantex cruzp estrella de 5 puntash estrella de 6 puntas

Tabla 4: Especificadores de marca

Si corremos nuevamente el archivo veremos que hay diferencia entre una funcion yla otra, pero seguimos sin saber cual corresponde a que funcion. Para ello utilicemos elcomando legend , que pone la leyenda que queramos a cada grafico. Es decir, escribamoscomo ultima linea:

legend(’sin(t)’, ’sin(t-pi/2)’,’sin(t-pi)’);

Ahora si observamos el grafico deberıa ser como el de la Figura 7.Tambien podrıamos querer cada grafico en una figura diferente. Para ello debemos

ejecutar el comando figure(2) antes de graficar por segunda vez y figure(3) antesdel ultimo grafico. Estas sentencias se usan sin el comando de hold on - hold off ylo que hacen es abrir una nueva figura para cada grafico. Otra opcion valida para MATLAB,por ejemplo, es que las tres funciones aparezcan en una sola figura pero las tres graficadasen forma independiente. Para ello utilicemos subplot(m,n,p) , que dividira a la figuraen m filas y n columnas, pero crea una figura en la posicion p. Ingresemos lo siguiente paraver como funciona:

clf; %borra el grafico actualsubplot(3,1,1);plot(t,y1,’.-r’);title(’sin(t)’);subplot(3,1,2);plot(t,y2,’--m’);title(’sin(t-pi/2)’);subplot(3,1,3);plot(t,y3,’:b’);

Page 397: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 14

0 1 2 3 4 5 6 7−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1sin(t) sin(t−pi/2)sin(t−pi)

Figura 7: Tres graficos en una misma figura

title(’sin(t-pi)’);

Notemos que con el sımbolo %, comentamos texto dentro del archivo. Si ejecutamosnuevamente el programa, obtenemos lo que se observa en la Figura 8

Con respecto a graficos, MATLAB posee muchas otras opciones, como graficar en es-cala logarıtmica, con loglog, semilogx y semilogy , graficos en tres dimensiones,plot3 , graficos de barras, bar , etc. Tambien permite con el comando print , guardarel grafico en un archivo de extension, por ejemplopostscript o .jpg, o tambien lo podemosimprimir con el mismo comando indicando el nombre de la impresora.

No nos olvidemos que MATLAB cuenta con una ayuda a la cual podemos recurrir en ca-so de no recordar como se utiliza un comando. Si investigamos un poco el help , podemosencontrar funciones que resuelven muchas otras cosas interesantes. Invito a que se metana conocerlas, como ası tambien a que conozcan las distintas demostraciones que puedenencontrar si tipean: demo.

2 Introducci on a S IMULINK

Hasta ahora vimos que MATLAB dispone de un entorno de programacion con lıneas deordenes, ahora veremos como se puede suplementar utilizando un interfaz de usuariografica llamada SIMULINK. Este entorno nos permite describir graficamente un sistemadibujando su diagrama en bloques, que resulta muy conveniente para la simulacion yanalisis de sistemas dinamicos.

2.1 Acceso y descripci on

Para acceder a SIMULINK, desde la ventana de comandos de MATLAB, tenemos varias op-ciones: una es escribiendo el comando simulink , de esta forma se abrira solo una ventana

Page 398: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 15

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1sin(t)

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1sin(t−pi/2)

0 1 2 3 4 5 6 7−1

−0.5

0

0.5

1sin(t−pi)

Figura 8: Tres graficos diferentes en la misma figura

con las librerıas disponibles; otra es desde la barra de menu File elegir la opcion New Model,de esta forma se abren no solo las librerıas sino tambien el entorno donde vamos a trabajar;por ultimo, existe un boton de acceso directo a las librerıas tanto en el entorno de trabajode MATLAB como en el de SIMULINK.

Una vez abiertas las librerıas, lo que encontraremos depende de la version de MATLABque se encuentre instalada. Nos vamos a referir a la version 5.3. Dentro de la librerıaSimulink se encuentran los elementos que vamos a utilizar organizados en sublibrerıas deacuerdo con su comportamiento. Las sublibrerıas que aparecen son:

• Continous (Bloques para sistemas en tiempo continuo)

• Discrete: (Bloques para sistemas en tiempo discretos)

• Functions & Tables

• Math (Sumadores, Ganancias matriciales o constantes, etc.)

• Nonlinear

• Signals & Sistems(multeplexores, demultexores, etc.)

• Sinks (Graficadores, etc.)

• Sources (Varias fuentes de entradas)

Con un doble click sobre la librerıa podemos visualizar los elementos que posee. Porejemplo si ingresamos a Continous, entre los elementos disponibles utilizaremos los sigu-ientes:

Derivative: bloque derivador, es decir dudt .

Page 399: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 16

Integrator: bloque integrador, funcion transferencia 1s .

State-Space: bloque para expresar al sistema en modelo de estados.

Transfer Fnc: bloque para expresar al sistema como cociente de polinomios.

Zero-pole: bloque para expresar al sistema con ceros, polos y una ganancia.

2.2 Funci on transferencia a lazo cerrado

En la Seccion 2.2 vimos como podemos calcular la funcion transferencia a lazo cerradodesde la ventana de comandos. Tomemos el mismo ejemplo para ver como lo hacemos conSIMULINK, ingresemos el diagrama en bloques como se puede ver en la Figura 9.

1

Out1

s

s+20

Transfer Fcn1

100

s +2s2

Transfer Fcn

.4

Gain

1

In1

Figura 9: Diagrama en bloques con SIMULINK

Para poder implementar dicho grafico se procedio de la siguiente forma:

1. Para insertar un bloque de funcion transferencia, ya sabemos que se encuentra enContinous, lo tomamos y lo arrastramos hasta la ventana de trabajo de SIMULINK. Sihacemos doble click sobre el bloque se despliega una ventana de propiedades delbloque, donde tenemos que ingresar el numerador y el denominador de la mismaforma que lo hacemos desde el entorno de trabajo de MATLAB, es decir entre corchetesy separado por espacios. Si en lugar de seleccionar el bloque de funcion transferenciaelegimos el bloque de polos y ceros, los parametros a definir seran los polos, los cerosy la ganancia.

2. Para insertar otro bloque igual no es necesario realizar el ıtem anterior nuevamente,podemos seleccionar el bloque anterior, haciendo un click con el boton derecho delmouse, copiar el bloque y pegarlo donde queramos. Esto mismo se puede hacer sim-plemente arrastrando el objeto seleccionado con el boton derecho del mouse. De lamisma forma que antes, ingresamos los parametros de esta funcion de transferencia.Para girar el bloque, para que quede mejor orientado para hacer la realimentacion,tenemos que seleccionar el objeto, ir a Format de la barra de menu, y seleccionar FlipBlock o simplemente con las teclas ctr-f .

3. El bloque de ganancia lo encontramos en Math, lo mismo que los sumadores. Paraingresarlos a la figura procedemos de la misma manera, arrastrando el objeto hastadonde queremos ubicarlo. El sumador, por defecto, viene con dos entradas sumadas,si hacemos doble click sobre el, podemos no solo cambiar el signo que queramos sinotambien agregarle las entradas que queramos, en este caso solo modificamos ++ por

Page 400: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 17

+−. Otra propiedad que podemos modificar es la forma del icono. Notemos quecuando hacemos un doble click en cualquier objeto, encontramos una pequena ayudaen la parte superior de la ventana, esto nos es util para saber con que datos hay quecompletar cada campo. Para el bloque de la ganancia, solo ingresamos el valor quecorresponde 0.4.

4. Para unir los bloques solo tenemos que hacer un click en la salida de un bloque yarrastra el mouse hasta la entrada de otro, cuando soltamos, si la coneccion estabien hecha, marcara una flecha negra, en caso de estar uniendo con un nodo, de-beremos ver un cuadradito negro. Para borrar cualquier elemento, simplemente loseleccionamos y con la tecla DELse elimina.

5. Por ultimo nos falta solo indicar cual es la entrada y cual es la salida, esto lo hacemospara poder sacar la transferencia a lazo cerrado, de otra forma no lo pondrıamos. Lanecesidad de marcar la entrada y la salida es para que MATLAB sepa desde donde has-ta donde vamos a querer la transferencia. Estos bloques los encontramos en Signals &Systems, se llaman ”In1” e ”Out1”.

6. Salvemos el archivo, por ejemplo con el nombre “FuncTrans”, si ingresamos desde laventana de comando de MATLAB las sentencias

[A,B,C,D]=linmod(’Functtrans’);[num,den]=ss2tf(A,B,C,D);

obtenemos la funcion transferencia. La primer orden produce un modelo de estadodel sistema de bloques, tomando la entrada y la salida que seleccionamos; y la segun-da sentencia convierte ese modelo de estados en el numerador y el denominador dela funcion transferencia. En este caso el resultado es

num=[40 800]den=[1 22 180 800]

que si los comparamos con los obtenidos antes son identicos.

2.3 Respuesta al Escal on

Siguiendo con el sistema de la Figura 9, nos interesa saber ahora como responde a unaentrada escalon unitario. Como tenemos la funcion transferencia a lazo cerrado, podrıamosutilizar el comando step(num,den) desde la ventana de comandos para obtener la salida.Pero veamos como lo podemos hacer desde SIMULINK. Para ello cambiemos el bloquede entrada por un bloque de entrada escalon, que lo encontramos el la librerıa Sourcesbajo el nombre “Step”. A dicho bloque podemos modificarle algunos parametros como eltiempo en que se realizara el escalon, el valor inicial y final de escalon y en caso de que lonecesitemos discreto, el tiempo de muestreo. Para nuestro ejemplo, elegimos como valorinicial 0, valor final 1 y tiempo de realizacion del escalon 0seg.. Para poder visualizar lasalida, debemos conectar a la salida un osciloscopio. Este bloque lo encontramos en Sinksbajo el nombre “Scope”. Luego de agregados estos bloques, el sistema resultante es el queobservamos en la Figura 10.

Page 401: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 18

s

s+20

Transfer Fcn1

100

s +2s2

Transfer FcnStep Scope

.4

Gain

Figura 10: Sistema excitado con un escalon

0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 20

0.2

0.4

0.6

0.8

1

1.2

1.4

Figura 11: Senal que muestra el osciloscopio

Page 402: Simulink Tutorial Completo

Indice General Introduccion a MATLAB y SIMULINK - 19

Si hacemos doble click sobre el bloque “Scope”, veremos la salida del sistema comoen la Figura 11. Este bloque tambien posee algunas propiedades que podemos modificar,entre ellas estan los valores de los ejes, el tıtulo y la escala. Cuenta tambien con Zoompara visualizar alguna zona en detalle. Otra propiedad es la posibilidad de asignarle losdatos que posee a una variable. Luego desde la ventana de comandos podemos visualizarlos valores o graficarlos dado que SIMULINK guarda tambien en una variable el vectortemporal que utiliza en la simulacion, dicha variable se llama tout .

Si en lugar de la respuesta al escalon unitario queremos la respuesta al impulso, dadoque SIMULINK no posee un bloque generador de impulsos, debemos generarlo nosotroscomo resta de dos escalones.

2.4 Utilizaci on de par ametros ya definidos

SIMULINK nos permite utilizar variables definidas ya sea en la ventana de comando deMATLAB, como tambien en archivos del editor. Para ello debemos definir las variables conanticipacion y luego utilizarlas dentro de los bloques con el mismo nombre. De esta forma,SIMULINK identifica el valor de dicho parametro y es el que utiliza en los calculos. Estoresulta apropiado cuando queremos utilizar un mismo diseno para distintos valores deparametros, o nos permitira utilizar el mismo sistema cada vez que nos encontremos conproblemas similares.

Page 403: Simulink Tutorial Completo

Curso de Programacion en Matlab y Simulink

Alberto Herreros ([email protected])Enrique Baeyens ([email protected])

Departamento de Ingenierıa de Sistemas y Automatica (DISA)Escuela de Ingenierıas Industriales (EII)

Universidad de Valladolid (UVa)

Curso 2010/2011

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 1/215

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 2/215

Page 404: Simulink Tutorial Completo

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 3/215

¿Que es MATLAB?

Es un lenguaje de alto nivel para computacion e ingenierıa. Integracomputacion, visualizacion y programacion.

Aplicaciones tıpicas de MATLAB son:

Matematicas y computacionDesarrollo de algoritmosModelado, simulacion y prototipadoAnalisis de datos, exploracion y visualizacionGraficos cientıficos y de ingenierıa.Desarrollo de aplicaciones

Matlab es un sistema interactivo cuyo elemento basico son las matrices yno requiere dimensionamiento.

El nombre proviene de ”laboratorio de matrices”.

Originalmente fue escrito en FORTRAN y hacıa uso de las librerıasLINPACK y EISPACK

Las ultimas versiones estan desarrolladas en C y utilizan las librerıasLAPACK y BLAS.

Sobre la base de MATLAB se han construido conjuntos de funcionesespecıficas para diferentes problemas, denominadas ”toolboxes”.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 4/215

Page 405: Simulink Tutorial Completo

Formas de introducir matrices en MATLAB

Lista explıcita de elementos.

Desde un fichero de datos externo.

Utilizando funciones propias.

Creando un fichero .m

Comenzaremos introduciendo manualmente la matriz de Durer.Para ello utilizamos las siguientes reglas:

Separar elementos de una fila con espacios o comas.

Usar ”punto y coma”; para indicar final de fila.

Incluir la lista completa de elementos dentro de corchetes, [ ].

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 5/215

Trabajando con matrices

Para introducir la matriz de Durer hacemos:

A = [ 1 6 3 2 1 3 ; 5 10 11 8 ; 9 6 7 1 2 ; 4 15 14 1 ]

Como resultado se obtiene

A =16 3 2 13

5 10 11 89 6 7 124 15 14 1

Una vez introducida una matriz, queda guardada en el entorno detrabajo de MATLAB.La matriz A es un cuadrado magico: Todas sus filas, columnas ydiagonales suman lo mismo. Para comprobarlo hacemos

sum (A)ans =

34 34 34 34

El comando sum(A) calcula la suma de las columnas de la matrizA, obteniendose un vector de dimension el numero de columnas.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 6/215

Page 406: Simulink Tutorial Completo

Trabajando con matrices

Para calcular la suma de las filas, podemos calcular la transpuestade la matriz.

A’

obteniendo

ans =16 5 9 4

3 10 6 152 11 7 14

13 8 12 1

la suma de las filas, en formato vector columna es

sum (A ’ ) ’

ans =34343434

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 7/215

Trabajando con matrices

La funcion diag permite obtener un vector con los elementos de ladiagonal principal.

d i a g (A)

Se obtiene

ans =1610

71

y la suma de los elementos de la diagonal principal es

sum ( d i a g (A) )

obteniendose

ans =34

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 8/215

Page 407: Simulink Tutorial Completo

Trabajando con matrices

La antidiagonal de una matriz no suele ser muy importante, por loque no hay ninguna funcion para extraerla. No obstante, puedeinvertirse la disposicion de las columnas de la matriz con la funcionfliplr, ası la suma de la antidiagonal es

sum ( d i a g ( f l i p l r (A) ) )ans =

34

Otra forma de obtener la suma de los elemento de la antidiagonales sumando elemento a elemento.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 9/215

Trabajando con matrices

Un elemento de la matriz A se referencia como A(i,j), siendo i lafila y j la columna. La suma de la antidiagonal podrıa haberseobtenido tambien como sigue:

A( 1 , 4 )+A( 2 , 3 )+A( 3 , 2 )+A( 4 , 1 )ans =

34

Tambien es posible acceder a cada elemento de una matriz con unsolo ındice, ası A(k) corresponde al elemento k de un vectorficticio que se formara colocando las columnas de la matrix A unadebajo de otra: Comprobar que A(4,2) y A(8) corresponden almismo elemento de la matriz A.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 10/215

Page 408: Simulink Tutorial Completo

Trabajando con matrices

Si se intenta acceder a un elemento que excede las dimensiones dela matriz, se obtiene un error

t = A( 4 , 5 )I n d e x e x c e e d s m a t r i x d i m e n s i o n s .

Si se inicializa un elemento que excede las dimensiones de lamatriz, la matriz se acomoda en dimension al nuevo elemento, conel resto de nuevos elementos inicializados a cero.

X = A ;X( 4 , 5 ) = 17

X =16 3 2 13 0

5 10 11 8 09 6 7 12 04 15 14 1 17

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 11/215

El operador :

El operador : es uno de los mas importantes de MATLAB. Tienediferentes utilidades. La expresion

1 : 1 0

indica un vector que contiene los numeros enteros desde 1 hasta10.

1 2 3 4 5 6 7 8 9 10

Para obtener un espaciado no unitario, se utiliza un incremento.

100:−7:50

es

100 93 86 79 72 65 58 51

y

0 : p i / 4 : p i

es

0 0 .7854 1 .5708 2 .3562 3 .1416

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 12/215

Page 409: Simulink Tutorial Completo

El operador :

Cuando el operador : aparece en los subındices de una matriz serefiere a las filas o columnas y permite extraer submatrices. Porejemplo, A(1:k,j) es el vector formado por los primeros k

elementos de la columna j de la matriz A y

sum (A( 1 : 4 , 4 ) )

calcula la suma de todos los elementos de la cuarta columna. Otraforma mas compacta y elegante de hacer lo mismo es

sum (A ( : , end ) )

los dos puntos : (sin otros numeros) significan todas las filas y end

se refier a la ultima columna.Pregunta: ¿Que esta calculando la siguiente expresion?

sum (A( end , : ) )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 13/215

La funcion magic

Matlab dispone de una funcion magic que permite calcularcuadrados magicosHaciendo

B = magic ( 4 )B =

16 2 3 135 11 10 89 7 6 124 14 15 1

La matriz obtenida es casi la misma que la matriz de Durer, solo sediferencia en que las columnas 2 y 3 estan intercambiadas. Se pudeobtener de nuevo la matriz de Durer haciendo la siguienteoperacion

A = B ( : , [ 1 3 2 4 ] )A =

16 3 2 135 10 11 89 6 7 124 15 14 1

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 14/215

Page 410: Simulink Tutorial Completo

Expresiones

Al igual que muchos otros lenguajes de programacion, MATLABdispone de expresiones matematicas, pero al contrario que en lamayorıa de los lenguajes de programacion, estas expresiones hacenreferencia a matrices.Los bloques constructivos de las expresiones son

Variables

Numeros

Operadores

Funciones

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 15/215

Variables

MATLAB no requiere ningun tipo de declaracion o indicacion de ladimension. Cuando MATLAB encuentra un nuevo nombre de variable lacrea automaticamente y reserva la cantidad de memoria necesaria. Si lavariable ya existe, MATLAB cambia su contenido y si es necesariomodifica la reserva de memoria.

Por ejemplo, la expresion

num est = 15

crea una matriz 1 por 1 llamada num_est y almacena el valor 25 en suunico elemento.

Los nombres de variables deben comenzar siempre por una letra y puedenincluir otras letras, numeros y el sımbolo de subrayado, hasta un total de31 caracteres.

Se distingue entre mayusculas y minusculas. A y a no son la mismavariable.

Para ver el contenido de una variable, simplemente escribir el nombre dela variable.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 16/215

Page 411: Simulink Tutorial Completo

Numeros

MATLAB utiliza notacion decimal convencional, con punto decimalopcional y signo + o -

Es posible utilizar notacion cientıfica. La letra e especifica un factor deescala de potencia de 10.

Los numeros imaginarios puros se especifican con la letra i o j

Los siguientes ejemplos son todos numeros validos en MATLAB

3 −99 0 .00019.6397238 1.60210 e−20 6.02252 e231 i −3.14159 j 3 e 5 i

Internamente, los numeros se almacenan en formato largo utilizando lanorma IEEE de punto flotante. La precision es aproximadamente de 16cifras decimales significativas y el rango esta entre 10−308 y 10+308.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 17/215

Operadores

Las expresiones de MATLAB utilizan los operadores aritmeticosusuales, ası como sus reglas de precedencia

+ Suma- Resta* Producto/ Division\ Division por la izquierda

(se explicara)^ Potencia’ Transposicion y conjugacion compleja

( ) Orden de evaluacion

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 18/215

Page 412: Simulink Tutorial Completo

Funciones

MATLAB proporciona un gran numero de funciones matematicaselementales, por ejemplo, abs, sqrt, exp, sin, cos, etc.

Por defecto, MATLAB utiliza numeros complejos:

La raız cuadrada o el logaritmo de un numero negativo no producen error,sino que dan como resultado u numero complejo.

Los argumentos de las funciones pueden ser numeros complejos

MATLAB proporciona tambien funciones avanzadas: Funciones de Besselo funciones gamma.

Una lista de todas las funciones elementales puede obtenerse con elcomando

h e l p e l f u n

Funciones mas avanzadas y funciones de matrices se obtienen con

h e l p s p e c f u nh e l p e lmat

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 19/215

Funciones

Algunas funciones estan compiladas con el nucleo de MATLAB y son muyrapidas y eficientes. Ej. sqrt, sin

Otras funciones estan programadas en lenguaje de MATLAB (ficherosm). Pueden verse y modificarse

Algunas funciones proporcionan el valor de ciertas constantes utiles.

pi 3.14159265i

√−1

j√−1

eps Precision relativa de punto flotante 2−52

realmin Numero en punto flotante mas pequeno 2−1022

realmax Numero en punto flotante mas grande (2− ε)2+1023

Inf InfinitoNaN Not-a-Number (no es un numero)

Infinito se obtiene al dividir un numero no nulo por cero, o comoresultado de evaluar expresiones matematicas bien definidas.

NaN se obtiene al tratar de evaluar expresiones como 0/0 o Inf-Inf que notienen valores bien definidos

Los nombres de las funciones no estan reservados. Puede definirse unavariable eps=1e-6 y utilizarla. Para restaurar su valor original

c l e a r epsA. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 20/215

Page 413: Simulink Tutorial Completo

Expresiones

Ya se han visto varios ejemplos de expresiones. Algunos otrosejemplos son los siguientes:

rho = (1+ s q r t ( 5 ) ) /2rho =

1.6180

a = abs (3+4 i )a =

5

z = s q r t ( b e s s e l k (4 /3 , rho− i ) )z =

0.3730+ 0.3214 i

huge = exp ( l o g ( r e a l m a x ) )huge =

1.7977 e+308

t o o b i g = p i ∗huget o o b i g =

I n f

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 21/215

Funciones para crear matrices

MATLAB proporciona cuatro funciones para generar matrices

zeros Matriz de cerosones Matriz de unosrand Matriz de elementos uniformemente distribuidosrandn Matriz de elementos normalmente distribuidos

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 22/215

Page 414: Simulink Tutorial Completo

Funciones para crear matrices

Ejemplos

Z = z e r o s ( 2 , 4 )Z =

0 0 0 00 0 0 0

F = 5∗ ones ( 3 , 3 )F =

5 5 55 5 55 5 5

N = f i x (10∗ rand ( 1 , 1 0 ) )N =

4 9 4 4 8 5 2 68 0

R = randn ( 4 , 4 )R =

1.0668 0 .2944 −0.6918 −1.44100 .0593 −1.3362 0 .8580 0 .5711−0.0956 0 .7143 1 .2540 −0.3999−0.8323 1 .6236 −1.5937 0 .6900

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 23/215

El comando load

El comando load permite leer ficheros binarios que contienen matricesgeneradas en sesiones anteriores de MATLAB

Tambien permite leer ficheros de texto que contienen datos.

El fichero debe estar organizado como una tabla de numeros separadospor espacios, una lınea por cada fila, e igual numero de elementos encada fila.

Ejemplo: Crear utilizando un editor de texto un fichero llamadomagik.dat que contenga los siguientes datos

1 6 . 0 3 . 0 2 . 0 1 3 . 05 . 0 1 0 . 0 1 1 . 0 8 . 09 . 0 6 . 0 7 . 0 1 2 . 04 . 0 1 5 . 0 1 4 . 0 1 . 0

El comando

l o a d magik . dat

crea una variable llamada magik conteniendo la matriz.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 24/215

Page 415: Simulink Tutorial Completo

Ficheros m

Los ficheros m son ficheros de texto que contienen codigo de MATLAB.

Para crear una matriz haciendo uso de un fichero m, editar un ficherollamado magik.m con el siguiente texto

A = [ . . .1 6 . 0 3 . 0 2 . 0 1 3 . 0

5 . 0 1 0 . 0 1 1 . 0 8 . 09 . 0 6 . 0 7 . 0 1 2 . 04 . 0 1 5 . 0 1 4 . 0 1 . 0 ] ;

Ejecutar ahora el comando

magik

Comprobar que se ha creado la matriz A.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 25/215

Concatenacion

Es el proceso de unir dos o mas matrices para formar otra matriz demayor dimension

El operador concatenacion es []

Ejemplo:

B = [ A A+32; A+48 A+16]B =

16 3 2 13 48 35 34 455 10 11 8 37 42 43 409 6 7 12 41 38 39 444 15 14 1 36 47 46 33

64 51 50 61 32 19 18 2953 58 59 56 21 26 27 2457 54 55 60 25 22 23 2852 63 62 49 20 31 30 17

Comprobar que las columnas de esta matriz suman todas lo mismo, perono ocurre lo mismo con sus filas.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 26/215

Page 416: Simulink Tutorial Completo

Borrado de filas y columnas

Se pueden borrar filas y columnas utilizando el operador [].

es la matriz vacıa (concatenacion de nada).

El proceso es sustituir una fila o una columna por la matriz vacıa [].

Ejemplo: Borrado de la segunda columna de una matriz

X = A ;X ( : , 2 ) = [ ]X =

16 2 135 11 89 7 124 14 1

No se pueden borrar elementos, por que el resultado ya no serıa unamatriz

X( 1 , 2 ) = [ ]

producirıa un error.

Sin embargo, utilizando un unico subındice es posible borrar elementos,aunque el resultado ya no serıa una matriz, sino un vector.

X ( 2 : 2 : 1 0 ) = [ ]X =

16 9 2 7 13 12 1

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 27/215

El comando format

Este comando controla el formato numerico de los resultados que muestraMATLAB.

Afecta solo a la presentacion en pantalla, no al formato interno ni a loscalculos.

Ejemplos:

x = [ 4 / 3 1 .2345 e−6]fo rmat s h o r t

1 .3333 0 .0000format s h o r t e

1 .3333 e+000 1.2345 e−006format s h o r t g

1 .3333 1 .2345 e−006format l o n g

1.33333333333333 0.00000123450000format l o n g e

1.333333333333333 e+000 1.234500000000000 e−006

format l o n g g1.33333333333333 1 .2345 e−006

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 28/215

Page 417: Simulink Tutorial Completo

El comando format

fo rmat bank1 . 3 3 0 . 0 0

format r a t4/3 1/810045

format hex3 f f5555555555555 3 eb4b6231abfd271

Ademas format compact suprime espacios y lıneas en blanco. Paraobtener mas control sobre la presentaciın en pantalla se pueden utilizarlas funciones sprintf y fprintf.

Para que no aparezca el resultado de un calculo en la pantalla, se utiliza ;

A = magic ( 1 0 0 ) ;

Para dividir expresiones que no caben en una unica lınea, se usan trespuntos ...

s = 1 −1/2 + 1/3 −1/4 + 1/5 − 1/6 + 1/7 . . .− 1/8 + 1/9 − 1/10 + 1/11 − 1 / 1 2 ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 29/215

Comandos de edicion en pantalla

↑ ctrl-p Comando anterior↓ ctrl-n Comando siguiente← ctrl-b Caracter atras→ ctrl-f Caracter adelantectrl-→ ctrl-r Palabra adelantectrl-← ctrl-l Patabra atrashome ctrl-a Ir a comienzo de lıneaend ctrl-e Ir a fin de lıneaesc ctrl-u Borrar lıneadel ctrl-d Borrar caracter actualbackspace ctrl-h Borrar caracter anterior

ctrl-k Borrar hasta fin de lınea

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 30/215

Page 418: Simulink Tutorial Completo

Graficos

MATLAB dispone de recursos para mostrar vectores y matrices engraficos, ası como para incluir texto en los graficos e imprimirlos.

La funcion basica de creacion de graficos es plot.

Si y es un vector, plot(y) dibuja un grafico de los valores de loselementos de y frente a sus ındices.

Si x e y son dos vectores de igual tamano, plot(x,y) dibuja un graficode los valores de los elementos de y frente a los de x.

Ejemplo:

t = 0 : p i /100 :2∗ p i ;y = s i n ( t ) ;p l o t ( t , y )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 31/215

Graficos

Se pueden crear graficos multiples con una unica llamada a plot.MATLAB elige los colores automaticamente siguiendo una tablapredefinida.

Ejemplo:

y2 = s i n ( t − .25) ;y3 = s i n ( t − .5) ;p l o t ( t , y , t , y2 , t , y3 )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 32/215

Page 419: Simulink Tutorial Completo

Graficos

Se puede especificar el color, tipo de lınea, y marcas con el comando

p l o t ( x , y , ’ c o l o r s t y l e m a r k e r ’ )

color_style_marker es una cadena de tres caracteres, que indicanrespectivamente el color, tipo de lınea y marca.

La letra que indica el color puede ser: ’c’, ’m’, ’y’, ’r’, ’g’, ’b’, ’w’,’k’, que indican cyan, magenta, amarillo, rojo, verde, azul, blanco ynegro.

La letra que indica el tipo de lınea puede ser: ’-’ para lınea continua,’--’ para lınea de trazos, ’:’ para lınea de puntos, ’-.’ para punto yraya, ’none’ sin lınea.

Las marcas mas comunes son ’+’, ’o’, ’*’ y ’x’.

Ejemplo: El comando

p l o t ( x , y , ’ y :+ ’ )

dibuja el grafico en lınea continua amarilla y situa marcas ’+’ en cadapunto.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 33/215

Ayuda en MATLAB

Existen varias formas de obtener ayuda en lınea de MATLAB.

El comando help

La ventana de ayuda

El escritorio de ayuda (MATLAB help desk)

Paginas de referencia en lınea

Pagina Web de The Mathworks, Inc. (www.mathworks.com)

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 34/215

Page 420: Simulink Tutorial Completo

El comando help

Es el comando mas basico para obtener informacion de la sintaxis yactuacion de una funcion.

La informacion aparece directamente sobre la ventana de comandos.

Ejemplo:

h e l p magic

MAGIC Magic s q u a r e .MAGIC(N) i s an N−by−N m a t r i x c o n s t r u c t e d fromt h e i n t e g e r s 1 through Nˆ2 w i t h e q u a l row ,column , and d i a g o n a l sums .Produces v a l i d magic s q u a r e s f o r N =

1 , 3 , 4 , 5 . . . .

El nombre de la funcion siempre aparece en mayusculas, pero en realidaddebe escribirse en minusculas al llamar a la funcion

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 35/215

Las funciones estan organizadas en grupos logicos, ası como la estructurade directorios de MATLAB.

Las funciones de algebra lineal estan en el directorio matfun. Para listartodas las funciones de este grupo

h e l p matfun

M a t r i x f u n c t i o n s − n u m e r i c a l l i n e a r a l g e b r a .

M a t r i x a n a l y s i s .norm − M a t r i x o r v e c t o r norm .normest − E s t i m a t e t h e m a t r i x 2−norm

. . .

El comando help lista todos los grupos de funciones

h e l p

mat lab / g e n e r a lmat lab / ops. . .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 36/215

Page 421: Simulink Tutorial Completo

La ventana de ayuda

Disponible seleccionando la opcion Help Window del menu Help o bienpulsando la interrogacion de la barra de menu.

Puede invocarse desde la ventana de comandos con helpwin

Para obtener ayuda sobre un comando helpwin comando

La informacion obtenida es la misma que con el comando help peropermite hipertexto y navegacion

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 37/215

El comando lookfor

Conveniente cuando buscamos una funcion pero no recordamos sunombre.

Busca todas las funciones que en la primera lınea de texto de la ayuda(lınea H1) contienen la palabra clave.

Ejemplo: Estamos buscando una funcion para invertir matrices, hacemos

h e l p i n v e r s ei n v e r s e .m not found .

entonces bucamos con lookfor

l o o k f o r i n v e r s eINVHILB I n v e r s e H i l b e r t m a t r i x .ACOSH I n v e r s e h y p e r b o l i c c o s i n e .ERFINV I n v e r s e o f t h e e r r o r f u n c t i o n .INV M a t r i x i n v e r s e .PINV P s e u d o i n v e r s e .IFFT I n v e r s e d i s c r e t e F o u r i e r t r a n s f o r m .IFFT2 Two−d i m e n s i o n a l i n v e r s e d i s c r e t e F o u r i e r

t r a n s f o r m .ICCEPS I n v e r s e complex cepst rum .IDCT I n v e r s e d i s c r e t e c o s i n e t r a n s f o r m .

Con la opcion -all busca en todo el texto de la ayuda, no solo en H1.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 38/215

Page 422: Simulink Tutorial Completo

El escritorio de ayuda (help desk)

El escritorio de ayuda de MATLAB permite acceder a mucha informacionde referencia almacenada en el disco duro o en el CD-ROM en formatoHTML mediante un navegador.

Se accede a traves de la opcion Help Desk del menu Help.

Tambien se accede escribiendo helpdesk en la ventana de comandos.

Para acceder a la pagina de referencia en formato HTML de un comandoespecıfico, se utiliza el comando doc. Ejemplo: doc eval.

Las paginas de referencia se encuentran tambien disponibles en formatoPDF y pueden ser consultadas e impresas con Acrobat Reader.

Finalmente, desde el escritorio de ayuda se puede acceder a la PaginaWeb the The MathWorks, Inc.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 39/215

El Entorno de MATLAB

El entorno de MATLAB incluye el conjunto de variables definidas duranteuna sesion de MATLAB y el conjunto de ficheros del disco que contienenprogramas y datos y que permanecen entre sesiones.

El espacio de trabajo (workspace) es el area de memoria accesible desdela lınea de comandos de MATLAB.

Los comandos who y whos muestran el contenido del espacio de trabajo,who proporciona una lista reducida, whos incluye ademas informacionsobre tamano y almacenamiento.

whos

Name S i z e Bytes C l a s sA 4 x4 128 d o u b l e a r r a yD 5 x3 120 d o u b l e a r r a yM 10 x1 3816 c e l l a r r a yS 1 x3 442 s t r u c t a r r a yh 1 x11 22 c h a r a r r a yn 1 x1 8 d o u b l e a r r a ys 1 x5 10 c h a r a r r a yv 2 x5 20 c h a r a r r a y

Grand t o t a l i s 471 e l e m e n t s u s i n g 4566 b y t e s .

Para borrar variables del espacio de trabajo, usar el comando clear.

c l e a r n o m b r e v a r i a b l eA. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 40/215

Page 423: Simulink Tutorial Completo

El comando save

Permite almacenar los contenidos del espacio de trabajo en un ficheroMAT (binario).

s a v e 15 oct02

salva el espacio de trabajo en el fichero 15oct02.mat. Para salvarunicamente ciertas variables

s a v e 15 oct02 n o m b r e s v a r i a b l e s

Para recuperar el espacio de trabajo se utiliza el comando load.

l o a d 15 oct02

El formato MAT es binario y no puede leerse, si se desea un fichero quepueda leerse pueden utilizarse las siguientes alternativas

-ascii Formato de texto de 8 bits.-ascii -double Use Formato de texto de 16 bits.-ascii -double -tabs Delimita los elementos de una matriz con tabuladores-v4 Crea un fichero MAT de la version 4-append Anade datos a un fichero MAT ya existente

En formato texto no puede salvarse todo el espacio de trabajo de una vez,y debe hacerse indicando el nombre de las variables.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 41/215

La trayectoria de busqueda

La trayectoria de busqueda (search path) es la lista ordenada dedirectorios en los que MATLAB va buscando las funciones.

El comando path muestra la trayectoria de busqueda.

Si hubiera varios ficheros con el mismo nombre de funcion en diferentesdirectorios, MATLAB ejecuta el primero que encuentra al seguir latrayectoria de busqueda.

Para modificar la trayectoria de busqueda, ir a Set Path en elmenu File.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 42/215

Page 424: Simulink Tutorial Completo

Manipulacion de Ficheros

MATLAB dispone de los comandos dir, type, delete, cd, pararealizar las operaciones usuales de manipulacion de ficheros de unsistema operativo.

MATLAB MS-DOS UNIX VAX/VMSdir dir ls dir

type type cat typedelete del o erase rm delete

cd chdir cd set default

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 43/215

El comando diary

Crea un diario de la sesion MATLAB en un fichero de texto.

El fichero puede editarse con cualquier editor o procesador de textos.

Para crear un fichero llamado midiario.txt que contenga todos loscomandos de la sesion y sus resultados en la ventana de comandos, hacer

d i a r y m i d i a r i o . t x t

si no se incluye ningun nombre de fichero, el diario de la sesion sealmacena por defecto en el fichero diary.

Para parar la grabacion del diario

d i a r y o f f

Para volver a activar/desactivar la grabacion del diario

d i a r y on/ o f f

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 44/215

Page 425: Simulink Tutorial Completo

Ejecucion de programas externos

Para ejecutar programas externos a MATLAB desde la lınea decomandos, se antepone el caracter de escape !. Por ejemplo, enUNIX

! v i

Ejecuta el editor de texto visual.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 45/215

Ejercicios 1

Fichero Aejer1.m : Las siguientes expresiones describen lastensiones principales de contacto en las direcciones x , y y z queaparecen entre dos esferas que se presionan entre sı con una fuerzaF .

σx = σy = −pmax

[(1− z

atan−1

( az

))(1− v1)− 0,5

(1 +

z2

a2

)−1]

σz =−pmax

1 + z2/a2

siendo

a =

(3F

8

(1− v 21 )/E1 + (1− v 2

2 )/E2

1/d1 + 1/d2

)1/3

pmax =3F

2πa2

vj son los coeficientes de Poisson, Ej los modulos de Young decada esfera y dj son los diametros de las dos esferas.Escribir las ecuaciones en notacion de MATLAB y evaluarlas paralos siguientes valores: v1 = v2 = 0,3, E1 = E2 = 3 · 107, d1 = 1,5,

d2 = 2,75, F = 100 lb. y z = 0,01 in.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 46/215

Page 426: Simulink Tutorial Completo

Ejercicio 2

Fichero Aejer2.m : El numero de carga de un rodamientohidrodinamico esta dado por la siguiente expresion:

NL =πε

√π2(1− ε2) + 16ε2

(1− ε2)2

siendo ε el coeficiente de excentricidad. Escribir la ecuacion ennotacion de Matlab y evaluarla para ε = 0,8.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 47/215

Ejercicio 3

Fichero Aejer3.m : Un tubo largo con radio interior a y radioexterior b y diferentes temperaturas en la superficie interior Ta yen la exterior Tb esta sometido a tensiones.Las tensiones radial y tangencial se obtienen mediante lassiguientes ecuaciones:

σr =αE(Ta − Tb)

2(1− v) ln(b/a)

[a2

b2 − a2

(b2

r 2− 1

)ln

(b

a

)− ln

(b

r

)]σt =

αE(Ta − Tb)

2(1− v) ln(b/a)

[1− a2

b2 − a2

(b2

r 2+ 1

)ln

(b

a

)− ln

(b

r

)]siendo r la coordenada radial del tubo, E el modulo de Young del

material del tubo y α el coeficiente de dilatacion. La distribucionde temperaturas a lo largo de la pared del tubo en la direccionradial es:

T = Tb +(Ta − Tb) ln(b/r)

ln(b/a)

Escribir las ecuaciones en notacion de Matlab y evaluarlas paralos siguientes valores: α = 1,2 · 10−5, E = 3 · 107, v = 0,3, Ta = 500,

Tb = 300, a = 0,25, b = 0,5, r = 0,375.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 48/215

Page 427: Simulink Tutorial Completo

Ejercicio 4

Fichero Aejer4.m : La formula siguiente, propuesta por elmatematico S. Ramanujan permite aproximar el valor de π.

1

π=

√8

9801

N→∞∑n=0

(4n)!(1103 + 26390n)

(n!)43964n

Evaluar la formula anterior para N = 0, 1, 2, 3 y comparar elresultado obtenido con el valor de π que proporciona Matlab.Para calcular el factorial, utilizar la funcion gamma que satisfacegamma(n+1)=n!.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 49/215

Ejercicio 5

Fichero Aejer5.m : Introducir en el espacio de trabajo deMatlab dos vectores a y b siendo aj = 2j − 1 y bj = 2j + 1,j = 1, . . . , 7. Se pide:

1 Calcular la suma de a y b

2 Calcular la diferencia de a y b.

3 Calcular el producto aTb y el valor de su traza y determinante.

4 Calcular el producto abT .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 50/215

Page 428: Simulink Tutorial Completo

Ejercicio 6

Fichero Aejer6.m : Sea z=magic(5). Realizar las siguientesoperaciones ordenadamente y mostrar los resultados:

1 Dividir todos los elementos de la segunda columna por√

3.

2 Sustituir la ultima fila por el resultado de sumarle los elementos de latercera fila.

3 Sustituir la primera columna por el resultado de multiplicarle loselementos de la cuarta columna.

4 Hacer que todos los elementos de la diagonal principal sean 2.

5 Asignar el resultado obtenido a la variable q y mostrarla por pantalla.

6 Mostrar la diagonal principal de qqT .

7 Mostar el cuadrado de todos los elementos de la matriz q.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 51/215

Ejercicio 7

Fichero Aejer7.m : En analisis de regresion lineal multivarianteaparece la siguiente cantidad:

H = X (XTX )−1XT

Sea

X =

17 31 56 5 4

19 28 912 11 10

Calcular la diagonal de H.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 52/215

Page 429: Simulink Tutorial Completo

Ejercicio 8

Fichero Aejer8.m : Dibujar el resultado de la suma de lassiguientes series para los rangos indicados de valores de τ . Utilizar200 puntos para realizar la grafica.

1 Onda cuadrada

f (τ) =4

π

∞∑k=1

1

nsin(2(2k − 1)πτ), −1

2≤ τ ≤ 1

2

2 Diente de sierra

f (τ) =1

2+

1

π

∞∑k=1

1

nsin(2kπτ), −1 ≤ τ ≤ 1

3 Diente de sierra

f (τ) =1

2− 1

π

∞∑k=1

1

nsin(2kπτ), −1 ≤ τ ≤ 1

4 Onda triangular

f (τ) =π

2− 4

π

∞∑k=1

1

(2k − 1)2cos((2k − 1)πτ), −1 ≤ τ ≤ 1

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 53/215

Ejercicio 9

Fichero Aejer9.m : Dibujar las siguientes curvas. Utilizar axisequal para una correcta visualizacion.

1 Cicloide (−π ≤ φ ≤ 3π, r = 0,5, 1, 1,5)

x = rφ− sinφ

y = r − cosφ

2 Lemniscata (−π/4 ≤ φ ≤ π/4)

x = cosφ√

2 cos(2φ)

y = sinφ√

2 cos(2φ)

3 Espiral (0 ≤ φ ≤ 6π)

de Arquımedes

x = φ cosφ

y = φ sinφ

Logarıtmica (k = 0,1)

x = ekφ cosφ

y = ekφ sinφ

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 54/215

Page 430: Simulink Tutorial Completo

Ejercicio 10

Fichero Aejer10.m : Dibujar las siguientes curvas. Utilizar axisequal para una correcta visualizacion.

1 Cardioide (0 ≤ φ ≤ 2π)

x = 2 cosφ− cos 2φ

y = 2 sinφ− sin 2φ

2 Astroide (0 ≤ φ ≤ 2π)

x = 4 cos3 φ

y = 4 sin3 φ

3 Epicicloide (R = 3, a = 0,5, 1o2, y 0 ≤ φ ≤ 2π)

x = (R + 1) cosφ− a cos(φ(R + 1))

y = (R + 1) sinφ− a sin(φ(R + 1))

4 Epicicloide (R = 2,5, a = 2, y 0 ≤ φ ≤ 6π)

x = (R + 1) cosφ− a cos(φ(R + 1))

y = (R + 1) sinφ− a sin(φ(R + 1))

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 55/215

Ejercicio 11

Fichero Aejer11.m : Dibujar las siguientes curvastridimensionales. Utilizar axis equal para visualizarcorrectamente.

1 Helice esferica (c = 5,0,0 ≤ t ≤ 10π)

x = sin(t/2c) cos(t)

y = sin(t/2c) sin(t)

z = cos(t/2c)

2 Senoide sobre cilindro (a = 10,0,b = 1,0, c = 0,3, 0 ≤ t ≤ 2π)

x = b cos(t)

y = b sin(t)

z = c cos(at)

3 Senoide sobre esfera (a = 10,0,b = 1,0, c = 0,3, 0 ≤ t ≤ 2π)

x = cos(t)√

b2 − c2 cos2(at)

y = sin(t)√

b2 − c2 cos2(at)

z = c cos(at)

4 Espiral toroidal (a = 0,2, b = 0,8,c = 20,0, 0 ≤ t ≤ 2π)

x = [b + a sin(ct)] cos(t)

y = [b + a sin(ct)] sin(t)

z = a cos(ct)

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 56/215

Page 431: Simulink Tutorial Completo

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 57/215

Introduccion a entornos de trabajo (I)

Entornos de trabajo con Matlab:

Espacio de trabajo workspace.Ficheros de escritura scripts (*.m).Ficheros de funciones de Matlab (*.m) y compiladas.Objetos desarrollados en Matlab y en Java.

Workspace en Matlab.

Uso de variables globales, scripts, funciones y objetos.Ejemplo:

>> a = [ 1 , 2 ; 3 , 4 ] ;>> whos>> i n v ( a ) ;

Ficheros de escritura scripts:

Ficheros (*.m) con ordenes iguales a las dadas en el workspace.Las variables que utiliza son las globales del workspace.Utiles para repetir la misma operacion varias veces.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 58/215

Page 432: Simulink Tutorial Completo

Introduccion a entornos de trabajo (II)

Ficheros (*.m) de funciones:

Son ficheros en lenguaje interpretado de Matlab.Sus variables son locales por defecto.Paso a la funcion del valor de las variables.Funciones propias de Matlab y Toolbox.Ejemplo:

f u n c t i o n c = m y f i l e 1 ( a , b )c = s q r t ( ( a . ˆ 2 ) +(b . ˆ 2 ) )

Uso desde el workspace:

>> x = 7 . 5>> y = 3 . 3 4 2>> z = m y f i l e ( x , y )>> whos. . .

Ficheros de funciones compilador en C/C++ o FORTRAN. Contienencabecera especial para conexion con Matlab.

Clases y objetos definidos en Matlab y Java. Una clase es un tipo de datoal que se puede asociar funciones propias y redefinir operadores.

>> s = t f ( ’ s ’ ) ; g e t ( s )>> P= 1/( s +1) ; bode (P) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 59/215

Tipos de datos (I)

Tipos de variables:Clase Ejemplo Descripcionarray [1,2;3,4]; 5+6i Datos virtual ordenado por ındices

cuyos componentes son datos delmismo tipo.

char ’Hola’ Array de caracteres (cada caractertiene 16 bits).

celda 17, ’hola’, eye(2) Dato virtual ordenado por ındicescuyos componentes son arrays de dis-tinto tipo.

struct a.dia=1; a.mes=’julio’ Dato virtual para almacenar datospor campos (estructura). Cada cam-po es un array o celda.

objeto tf(1,[1,1]) Datos definido por el usuario con basea una estructura y con funciones aso-ciadas.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 60/215

Page 433: Simulink Tutorial Completo

Tipos de datos (II)

Operadores:Oper. aritmeticos

+ Suma.

- Resta.

.* Multiplicacion.

./ Division derecha.

.\ Division izquierda.

: Operador dos puntos.

.^ Potencia.

.’ Transpuesta.

’ Conjugada transpuesta.

* Multiplicacion de matrices.

/ Division derecha de matrices.

\ Division izquierda de matrices.

^ Potencia de matrices.

Oper. de relacion> Menor que

> Mayor que

<= Menor que o igual a

>= Mayor que o igual a

== Igual a

= No igual a

Operadores logicos.& Y

| OR

~ NO

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 61/215

Tipos de datos (III)

Operaciones aritmeticas en el workspace o Ascript1.m:

>> a = [ 1 , 2 ; 3 , 4 ] ; b = [ 4 , 5 ; 6 , 7 ] ; >> c= a∗b>> c= 3∗a . . .. . . >> c= a .∗ b>> a ( 1 , : ) ∗b ( : , 1 ). . .

Operaciones de relacion en el workspace o Ascript1.m:

>> a = [ 1 , 2 , 3 ] ; b = [ 1 , 3 , 2 ] ; >> a > b>> a==b . . .. . . >> a = [ ] ; i s e m p t y ( a )

...

Operaciones logicas en el workspace o Ascript1.m:

>> a = [ 1 , 2 , 3 ] ; b = [ 1 , 0 , 3 ] ; >> a&b>> a==b . . .. . . >> ˜a>> a | b . . .. . .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 62/215

Page 434: Simulink Tutorial Completo

Tipo de datos (IV): Valores especiales

Funciones del directorio elmat que devuelven valores importantes,

ans Variable a la que se asigna el resultado de una ex-presion que no ha sido asignada.

eps Tolerancia con la que trabaja Matlab en sus calculos.

realmax Mayor numero en coma flotante que puede represen-tar el computador.

realmin Menor numero en coma flotante que puede repre-sentar el computador.

pi 3.1415926535897...

i, j Numeros imaginarios puros.

Inf Infinito. Se obtiene de divisiones entre cero.

NaN Indeterminacion. Se obtiene de divisiones 0/0,inf/inf o n/0 cuando n es imaginario.

flop Cuenta las operaciones en coma flotante realizadas.

version Indica la version de Matlab usada.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 63/215

Tipo de datos (V): Valores especiales

En el workspace:

>> 3+2. . .>> p i ∗3. . .>> r e a l m a x. . .

>> a= 5+3∗ i. . .>> a= i ∗(4+3∗ i ). . .>> a= 3/0. . .

>> a= 0/0. . .>> a= NaN∗3. . .>> a= 3∗ I n f. . .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 64/215

Page 435: Simulink Tutorial Completo

Sentencias de control.

Sentencias de control en Matlab:

if, else y elseif: Ejecuta un grupo de sentencias basandose encondiciones logicas.switch, case y otherwise: Ejecuta diferentes grupos de sentencias enfuncion de condiciones logicas.while: Ejecuta un numero de sentencias de forma indefinida en funcion deuna sentencia logica.for: Ejecuta un numero de sentencias un numero determinado de veces.try...catch: Cambia el control de flujo en funcion de los posibles erroresproducidos.break: Termina de forma directa la realizacion de un bucle for o while.return: Sale de la funcion.

Nota: Los bucles for y while pueden ser modificados por codigovectorizado para aumentar la velocidad de ejecucion.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 65/215

Sentencia de control if, else y elseif.

Forma general Asript2.m,

i f s e n t l o g 1 ,% b l o q u e 1

e l s e i f s e n t l o g 2,

% b l o q u e 2e l s e

% b l o q u e 3end

i f n < 0% S i n n e g a t i v o e r r o r .

d i s p ( ’ Entrada debe s e p o s i t i v a ’ ) ;e l s e i f rem ( n , 2 ) == 0% S i e s par s e d i v i d e e n t r e 2 .

A = n / 2 ;e l s e% S i e s impar s e i n c r e m e n t a y d i v i d e

.A = ( n+1) / 2 ;

end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 66/215

Page 436: Simulink Tutorial Completo

Sentencia de control switch, case y otherwise.

Formulacion general Ascript3.m,

s w i t c h e x p r e s s i o nc a s e v a l u e 1

% b l o q u e 1c a s e v a l u e 2

% bloque−2. . .o t h e r w i s e

% bloque−nend

s w i t c h input numc a s e −1, −2, −3

d i s p ( ’−1 o −2 o −3 ’ ) ;c a s e 0

d i s p ( ’ c e r o ’ ) ;c a s e 1 , 2 , 3

d i s p ( ’ 1 o 2 o 3 ’ ) ;o t h e r w i s e

d i s p ( ’ o t r o v a l o r ’ ) ;end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 67/215

Sentencia de control while y for.

Formulacion general Ascript4.m,

w h i l e e x p r e s i o n% b l o q u e

end

n = 1 ;w h i l e prod ( 1 : n ) < 1 e100 ,

n = n + 1 ;end

Formulacion general Ascript5.m,

f o r ı n d i c e= i n i c i o : paso : f i n ,% b l o q u e

end

f o r i i = 2 : 6 ,x ( i i ) = 2∗x ( i i −1) ;

end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 68/215

Page 437: Simulink Tutorial Completo

Sentencia de control: break, try-catch y return

Sentencia break:

Sirve para salir de forma automatica del ultimo bucle while o for abiertosin tener en cuenta la condicion o ındice de salida.

Sentencia de control try, catch:

Formulacion general,try bloque-1 catch bloque-2 endEjecuta el bloque-1 mientras no haya un error. Si se produce un error enbloque-1 se ejecuta bloque-2.

Sentencia return:

Se sale de la funcion en la que se trabaja.Si se llega al final de la funcion (*.m), Matlab sale de ellaautomaticamente.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 69/215

Funciones en matlab (I): Cabecera

Se define el nombre y las variables de entrada y salida:

f u n c t i o n c = m y f i l e ( a , b )

Las lıneas de comentario se inician con el caracter %.

Las lıneas de comentario posteriores a la funcion son de ayuda.

f u n c t i o n c = m y f i l e ( a , b )% Output : c . I n p u t : a y b

Usando la funcion help.

>> h e l p m y f i l eOutput : c . I n p u t : a y b

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 70/215

Page 438: Simulink Tutorial Completo

Funciones en matlab (II): Variables de entrada

Variables de entrada-salida:

Libertad en su numero. La variable nargin y nargout indican su numero.Variables locales por defecto sin tipo determinado.Ejemplo: a, b y c pueden ser double o array myfile2.m.

f u n c t i o n c = m y f i l e 2 ( a , b , c )% Output : c . I n p u t : a , b y ci f n a r g i n <2,

e r r o r ( ’ c = m y f i l e ( a , b , [ c ] ) ’ ) ;e l s e i f n a r g i n ==2,

c= s q r t ( a .ˆ2+b . ˆ 2 ) ;e l s e

c= s q r t ( a .ˆ2+b.ˆ2+ c . ˆ 2 ) ;end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 71/215

Funciones en matlab (III): Celdas como Variables de entrada

Una celda varargin como variable de entrada y otra varargout comosalida. Ejemplo myfile3.m:

f u n c t i o n c = m y f i l e 3 ( v a r a r g i n )% Output : c . I n p u t : a , b y ci f n a r g i n <2,

e r r o r ( ’ c = m y f i l e ( a , b , [ c ] ) ’ ) ;e l s e i f n a r g i n ==2,

c= s q r t ( v a r a r g i n 1.ˆ2+ v a r a r g i n 2 . ˆ 2 ) ;e l s e

c= s q r t ( v a r a r g i n 1.ˆ2+ v a r a r g i n 2.ˆ2+ v a r a r g i n3 . ˆ 2 ) ;

end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 72/215

Page 439: Simulink Tutorial Completo

Funciones en matlab (IV): Variables globales y estaticas

Variable estatica: No se pierde su valor y solo se puede usar en la funciondefinida.

Variable global: No se pierde su valor y se puede usar en todas lasfunciones donde este definida. Debe estar definida en el workspace.

Ejemplo funcion myfile4.m:

f u n c t i o n c = m y f i l e 4 ( a )% Output : c . I n p u t : ag l o b a l P ;i f i s e m p t y (P) , P=1; endc= P∗a ; P= P+1;

Variable estatica:

>> P= 1 0 ; z= m y f i l e ( 3 ) ; % r e p e t i r

Variable global:

>> g l o b a l P ; P=10; z= m y f i l e ( 3 ) ; % r e p e t i r

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 73/215

Funciones en matlab (V): Sub-funciones y funciones privadas

Varias funciones contenidas en un mismo fichero.

La funcion principal es la primera. Equivalente a la funcion main dellenguaje C.

Ejemplo myfile5.m:

f u n c t i o n c = m y f i l e 5 ( a , b )% Output : c . I n p u t : a y b

c= fun ( a , b ) ;

f u n c t i o n z= fun ( x , y )z=s q r t ( x .ˆ2+ y . ˆ 2 ) ;

Funciones privadas: Estan en sub-carpeta private y solo se pueden usarpor las funciones de la carpeta.

Prioridades en la llamada a funciones: Sub-funcion, funcion en mismacarpeta, funcion en carpeta private,funcion en las carpetas del path.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 74/215

Page 440: Simulink Tutorial Completo

Funciones en matlab (VI):Evaluacion de cadenas eval() y feval()

Son el equivalente a los punteros a funciones de lenguaje C.

eval(): Una cadena de caracteres es interpretada como orden,

>> cad= ’ m y f i l e ’ ; a= 1 ;>> c= e v a l ( [ cad , ’ ( a , ’ , i n t 2 s t r ( 2 ) , ’ ) ’ ] ) ;

feval: Se llama a una funcion por su nombre o comodın Ascript6.m,

>> cad= ’ m y f i l e ’ ; a= 1 , b=2;>> c= f e v a l ( cad , a , b ) ;>> cad= @ m y f i l e ; a=1, b=1;>> c= f e v a l ( cad , a , b ) ;>> cad= @( x , y ) s q r t ( x .ˆ2+ y . ˆ 2 ) ;>> c= f e v a l ( cad , a , b ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 75/215

Entrada de datos, pausas y llamadas a la shell.

input(): Introduccion de datos Ascript7.m,

n= i n p u t ( ’ I n t r . dato : ’ ) ; % Double .n= i n p u t ( ’ I n t r . dato : ’ , ’ s ’ ) ; % Cadena de c a r a c t e r e s .

ginput(): Localizar puntos en una grafica con el raton,

f i g u r e ; p l o t ( 1 : 1 0 0 0 ) ;[ x , y ]= g i n p u t ( 1 ) % l o c a l i z a r un punto x , y en g r a f i c a .[ x , y , t e c l a ]= g i n p u t ( 1 ) % t e c l a da l a t e c l a d e l r a t o n

usada .

pause(): La funcion para el programa durante un periodo de tiempo,

pause ( n ) ; % Para e l programa d u r a n t e n segundos .pause ; % Para e l programa h a s t a que s e p u l s e una t e c l a .

Llamada a la shell (MS-DOS o LINUX): Iniciar sentencia con !,

! copy f i c h 1 . c f i c h 2 c . % S i e l s i s t e m a f u e r a msdos

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 76/215

Page 441: Simulink Tutorial Completo

Funciones save y load.

save: Grabar datos en ficheros Ascript8.m,

-mat: Codigo binario (por defecto).-ascii: Codigo ASCII.-append: Graba al final del fichero.

>> s a v e d a t o s . dat a b c % Graba ’ d a t o s . dat ’ l a sv a r i a b l e s a b c

>> a= rand ( 1 0 , 5 ) ;>> s a v e −a s c i i −append d a t o s . dat a %Graba a l f i n a l d e l

f i c h e r o en c o d i g o ASCII .

load: Recupera las variables guardadas con la sentencia save.

>> l o a d d a t o s . dat % Recupera l a s v a r i a b l e s de d a t o s . dat

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 77/215

Funciones de librerıa entrada/salida de lenguaje C (I)

Algunas de las funciones de entrada/salida:

Clase Funcion DescripcionAbrir/Cerrar fopen() Abrir fichero.

fclose() Cerrar fichero.

Binarios I/O fread() Lectura binaria de fichero (defecto enteros).fwrite() Escritura binaria en fichero (defecto enteros).

Con formato fscanf() Lectura con formato de fichero.fprintf() Escritura con formato en fichero.

Conversion cadenas sscanf() Lee de cadena con un determinado formato.sprintf() Escribe en cadena con formato.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 78/215

Page 442: Simulink Tutorial Completo

Funciones de librerıa entrada/salida de lenguaje C (II)

Ejemplos de apertura y cierre. Permisos:

’r’: Lectura. Puntero al inicio del fichero.’w’: Escritura. Se borra el fichero si existe.’a’: Anadir. Puntero al final del fichero.’r+’: Lectura/escritura. Puntero al inicio.

>> f i c= f o p e n ( ’ f i c h . dat ’ , ’ r ’ ) ; % Abre f i c h e r o paral e c t u r a .

>> f c l o s e ( f i c ) ; % C i e r r a f i c h e r o ’ f i c h . dat ’ .>> f c l o s e ( ’ a l l ’ ) ; % C i e r r a t o d o s l o s f i c h e r o s .

Principales usos:

Ficheros de texto con formatoFicheros binarios para guardar o extraer matrices en su forma vectorial.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 79/215

Funciones de librerıa entrada/salida de lenguaje C (III)

Ejemplo Ascript9.m:

>> a= rand ( 3 , 3 )>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’w ’ ) ; % Guardar en t e x t o>> f p r i n t f ( f i c h , ’ %.2 f %.2 f %.2 f \n ’ , a ) ;>> f c l o s e ( f i c h ) ;>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’ r ’ ) ; % R e c u p e r a r de f i c h e r o

t e x t o>> b= f s c a n f ( f i c h , ’ %f ’ )>> f c l o s e ( f i c h ) ;

>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’w ’ ) ; % Guardar en b i n a r i o ,fo rmato r e a l ∗4

>> f w r i t e ( f i c h , a , ’ r e a l ∗4 ’ ) ;>> f c l o s e ( f i c h ) ;>> f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’ r ’ ) ; % R e c u p e r a r en b i n a r i o>> b= f r e a d ( f i c h , i n f , ’ r e a l ∗4 ’ )>> f c l o s e ( f i c h ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 80/215

Page 443: Simulink Tutorial Completo

Practicas de funciones y sentencias de control (I).

Fichero Bejer1.m : Generar una funcion (*.m) para obtener lassiguientes series matematicas. Los argumentos son tres: El primero es elnombre de la serie deseada (obligatorio). El segundo es el numero dedatos de τ , por defecto 200 (opcional). El tercero es lımite superior desumatorio, por defecto 1000 (opcional). Si el numero de argumentos desalida es uno se devuelve los datos, si es cero se dibuja la graficacorrespondiente.

Senal cuadrada:

f (τ) =4

π

∑n=1,3,5,...

1

nsin(2nπτ) −

1

2≤ τ ≤

1

2

.Dientes de sierra:

f (τ) =1

2+

1

π

∑n=1

1

nsin(2nπτ) − 1 ≤ τ ≤ 1

.Senal triangular:

f (τ) =π

2−

4

π

∑n=1

1

(2n − 1)2cos((2n − 1)πτ) − 1 ≤ τ ≤ 1

.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 81/215

Practicas de funciones y sentencias de control (II)

Fichero Bejer2.m : El desplazamiento de una onda propagada a lolargo de una cuerda tiene una velocidad inicial cero y un deplazamientoinicial,u(η, 0) = η

a| 0 ≤ η ≤ a u(η, 0) = 1−η

1−a| a ≤ η ≤ 1,

siendo su ecuacion,u(η, τ) = 2

aπ(1−a)

∑N→∞n=1

sin nπan3 sin(nπτ) cos(nπη).

Crear una funcion *.m para mostrar en grafico u(η, τ). La entrada de lafuncion sera el valor de a, opcional defecto a = 0,25, el de N, opcionaldefecto N = 50, y el de ∆τ , opcional defecto ∆τ = 0,05, donde0 ≤ τ ≤ 2. La funcion dibuja la grafica si el usuario no pide variables desalida y devuelve el valor de u(η, τ) sin dibujar la grafica en casocontrario.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 82/215

Page 444: Simulink Tutorial Completo

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 83/215

Optimizacion de programas: Indexado de arrays y celdas (I)

Para la optimizacion de un programa con matlab se debe reducir elnumero de bucles y cambiarlo por algebra matricial.

Formato externo: Filas y columnas. Formato interno: vector de columnas,Ascript10.m.

>> a= [ 1 , 2 , 3 ; 4 , 5 , 6 ] ;>> a ( 2 , 1 ) , a ( 2 ) ,

Llamada parcial a un array, end cuenta el numero de filas o columnas,

>> i i = 1 : 2 : 3 ; % v e c t o r de 1 a 3 con paso 2 .>> a ( 1 , i i ) % p r i m e r a f i l a , co lumnas i i>> a ( 1 , 2 : end ) % p r i m e r a f i l a , co lumnas de 2 a l f i n a l>> a ( 1 , : ) % p r i m e r a f i l a , t o d a s l a s columnas

Composicion de arrays,

>> b= [ a ( : , 1 ) , [ 5 , 7 ] ’ ] % Primera columna de a y [ 5 , 7 ]v e c t o r columna .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 84/215

Page 445: Simulink Tutorial Completo

Optimizacion de programas: Indexado de arrays y celdas (II)

Borrado de matrices,

>> b ( : , 1 ) = [ ] ; % Borrado de l a p r i m e r a columna .

Matrices ceros, unos y aleatorias,

>> a= z e r o s ( 2 , 3 ) ; b= ones ( 3 , 2 ) ; c= rand ( 2 , 3 ) ;

Espacios lineales y logarıtmicos,

>> a= l i n s p a c e ( 1 , 1 0 , 1 0 0 ) ; % De 1 a 10 , 100 puntos , pasol i n e a l

>> a= l o g s p a c e ( 1 , 5 , 1 0 0 ) ; % De 1 e1 a 1e5 , 100 puntos ,paso l o g .

Funciones de tamano y repeticion.

>> [ n f i l , n c o l ]= s i z e ( a ) ; % Tamano f i l a columna ,>> n f i l = s i z e ( a , 1 ) ; % Tamano f i l a .>> ncomp= s i z e ( a ( : ) , 1 ) ; % Numero de componentes ,

fo rmato i n t e r n o .>> b= repmat ( a , [ 3 , 1 ] ) ; % R e p e t i r m a t r i z ’ a ’ t r e s v e c e s

en columna .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 85/215

Optimizacion del codigo de programas (I)

Inicializacion de matrices como matrices cero.

Sustitucion de bucles por productos matriciales, Ascript11.m

Funcion en diferentes puntos, y(n) = sin(n) ∗ n, 0 < n < 10, 100 puntos:

>> n=l i n s p a c e ( 0 , 1 0 , 1 0 0 ) ; y= s i n ( n ) .∗ n ;

Sumatorio de funcion, y =∑10

n=0 sin(n) ∗ n.

>> n= [ 0 : 1 0 ] ’ ; y= sum ( s i n ( n ) .∗ n ) ;

Funcion de dos dimensiones en varios puntos,y(i , j) = i2 + j2 + i ∗ j , i ∈ [0, 5], j ∈ [0, 7],

>> i i =0:5 ; j j = [ 0 : 7 ] ’ ;>> s i i = s i z e ( i i , 2 ) ; s j j = s i z e ( j j , 1 ) ;>> i i = repmat ( i i , [ s j j , 1 ] ) ; j j = repmat ( j j , [ 1 , s i i ] ) ;>> [ i i , j j ]= meshgr id ( i i , j j ) ; % e q u i v a l e n t e>> y= i i .ˆ2+ j j .ˆ2+ i i .∗ j j ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 86/215

Page 446: Simulink Tutorial Completo

Optimizacion del codigo de programas (II)

Sustitucion de bucles por productos matriciales, Ascript11.m

Funcion de una dimensiones con sumatorio,y(i) =

∑10n=1 n ∗ i2 + i , i ∈ [0, 5],

>> i i =0:5 ; n = [ 1 : 1 0 ] ;>> y= n∗ ones ( s i z e ( n ) ) ’∗ i i .ˆ2+ i i ;

Practica de optimizacion de programas: Volver a escribir el codigode las practica de generacion de senales sin usar bucles, FicherosBejer1bis.m, Bejer2bis.m.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 87/215

Matrices tri-dimensionales (I)

Se componen de filas, columnas y paginas.

Generacion de matrices tridimensionales, Ascript12.m

>> a = [ 1 , 2 ; 3 , 4 ] ; % M a t r i z de dos d i m e n s i o n e s .>> a ( : , : , 2 )= [ 5 , 6 ; 7 , 8 ] ; % M a t r i z de t r e s d i m e n s i o n e s .>> a= c a t ( 3 , [ 2 , 3 ; 4 , 5 ] , [ 5 , 6 ; 7 , 8 ] ) ; % encadena en dim 3>> a= repmat ( [ 2 , 3 ; 4 , 5 ] , [ 1 , 1 , 2 ] ) ; % r e p i t e en p a g i n a s

Re-dimension: El array es tomado como vector y re-dimesionado,

>> a= r e s h a p e ( a , [ 2 , 4 ] ) ; % C o n v i e r t e dos p a g i n a s ac u a t r o columnas .

Borrado de parte de la matriz,

>> a ( : , : , 2 ) = [ ] ; % Borrado de l a p a g i n a 3 .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 88/215

Page 447: Simulink Tutorial Completo

Matrices tri-dimensionales (II)

Eliminacion de dimensiones,

>> b= s q u e e z e ( a ( : , 1 , 1 ) ) ; % Se o b t i e n e un v e c t o r dim( 2∗1 )

>> b= s q u e e z e ( a ( 1 , : , 1 ) ) ; % Se o b t i e n e un v e c t o r dim( 1∗2 )

>> b= s q u e e z e ( a ( 1 , 1 , : ) ) ; % Se o b t i e n e un v e c t o r dim( 2∗1 )

Cambio de ındices en dimensiones,

>> b= permute ( a , [ 2 , 1 , 3 ] ) ; % Las f i l a s pasan a s e rcolumnas .

>> a= i p e r m u t e ( b , [ 2 , 1 , 3 ] ) ; % Es l a i n v e r s a de permute .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 89/215

Matrices multidimensionales (III)

Celdas multidimensionales: Se puede trabajar con ellas de forma similar acomo se trabaja con las matrices.

>> A= [ 1 , 2 ; 3 , 4 ] , ’ h o l a ’ ; [ 1 , 2 , 3 ] , ’ 2 ’ ; % c e l d a de dim( 2∗2 )

>> B= ’ h o l a ’ , [ 1 , 2 , 3 ] ; ’ 2 ’ , 2 ; % c e l d a de dim ( 2∗2 )>> C= c a t ( 3 ,A, B) ; % c e l d a de dim (2∗2∗2)

Estructuras multidimensionales: Se puede trabajar con ellas de la formasimilar a como se trabaja con matrices.

>> c l a s e ( 1 , 1 , 1 ) . alum= ’ pepe ’ ; c l a s e ( 1 , 1 , 1 ) . nota =10;>> c l a s e ( 1 , 1 , 2 ) . alum= ’ j u a n ’ ; c l a s e ( 1 , 1 , 2 ) . nota =10;>> c l a s e= s q u e e z e ( c l a s e ) ; % Se r e d u c e a dos d i m e n s i o n e s

.>> c l a s e . alum % Muestra l o s nombres de t o d o s l o s

alumnos .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 90/215

Page 448: Simulink Tutorial Completo

Funciones para estructuras y celdas (I)

Funciones especificas para structuras.

Funcion Descripciongetfield() Muestra los campos de la estructura.

isfield() Verdadero si un campo de la estructura.

isstruct() Verdadero si es una estructura.

rmfield() Borra el campo marcado de la estructura.

setfield() Cambia los contenidos de campo.

struct() Crea o convierte en una matriz de estructuras.

struct2cell() Convierte una matriz de estructuras en celdas.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 91/215

Funciones para estructuras y celdas (II)

Ejemplos de funciones para estructuras,

>> c l a s e ( 1 ) . alum= ’ pepe ’ ; c l a s e ( 1 ) . nota =10;>> c l a s e ( 2 ) . alum= ’ j u a n ’ ; c l a s e ( 2 ) . nota =10;>> c l a s e ( 3 )= s t r u c t ( ’ alum ’ , ’ j o s e ’ , ’ nota ’ , 7) % Otra

forma de d e f i n i r>> g e t f i e l d ( c l a s e ) % Muestra l o s campos de c l a s e>> i s s t r u c t ( c l a s e ) % A f i r m a t i v o>> i s f i e l d ( c l a s e , ’ nota ’ ) % A f i r m a t i v o>> r m f i e l d ( c l a s e , ’ nota ’ ) % E l i m i n a campo nota .>> s e t f i e l d ( c l a s e , ’ alum ’ , ’ pepe ’ ) ; % I n t r o d u c e ’ pepe ’

en campo alum>> p= s t r u c 2 c e l l ( c l a s e )>> % Pone un e lemento de s t r u c t en una columna de l a

c e l d a .>> % De un v e c t o r e s t r u c t u r a s a l e una m a t r i z de c e l d a s

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 92/215

Page 449: Simulink Tutorial Completo

Funciones para estructuras y celdas (III)

Funciones especificas de celdas.

Funcion Descripcioncell() Crea una matriz de celda.

cell2struct() Convierte celdas en estructuras.

celldisp() Muestra el contenido de la celda.

cellfun() Aplica una celda funcion a matriz.

cellplot() Muestra una grafica de la celda.

iscell() Verdadero en caso de que sea celda.

num2cell() Conversion de matriz numerica en celda.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 93/215

Funciones para estructuras y celdas (IV)

Ejemplos de funciones de estructuras.

>> a= c e l l ( 2 , 2 ) % Se c r e a una c e l d a v a c ı a .>> a= ’ pepe ’ , ’ j u a n ’ ; 10 , 1 0 ; %Se l l e n a c e l d a>> i s c e l l ( a ) % A f i r m a t i v o>> c e l l d i s p ( a ) % Muestra e l c o n t e n i d o de l a c e l d a>> c e l l p l o t ( a ) % Muestra e l c o n t e n i d o en ventana .>> c e l l f u n ( ’ i s r e a l ’ , a ) % D i f e r e n t e s f u n c i o n e s

a p l i c a d a s a c e l d a s .>> c e l l 2 s t r u c ( a , ’ alum ’ , ’ nota ’ ) % Pasa de c e l d a a

e s t r u c t u r a .>> % Toma l o s campos por f i l a s .>> n u m 2 c e l l ( [ 1 , 2 ; 3 , 4 ] ) % C o n v i e r t e m a t r i z en c e l d a .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 94/215

Page 450: Simulink Tutorial Completo

Practicas con matrices, celdas, estructuras y ficheros

Escribir un fichero Fichero Bejer3.m las siguientes operaciones:

Generar una matriz aleatoria de dimensiones 10× 5× 20.Obtener la matriz correspondiente a la segunda pagina.Obtener el vector correspondiente a la fila 2, columna 3.Obtener una celda cuyos componentes sean los elementos de la matriz.Agregar dicha celda al campo datos de una estructura. Introducir otrocampo llamado nombre que corresponda a una cadena de caracteres.Salvar la matriz, celda y estructura en un fichero de nombre datos.dat.Salvar los elementos de la matriz en un fichero binario usando fwrite().Recuperar dichos datos e introducirlos en una matriz de dimension5× 10× 20.Meter la primera pagina de esta matriz en un fichero de texto con formato5 datos por lınea.Recoger estos datos lınea a lınea y reconstruir la matriz.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 95/215

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 96/215

Page 451: Simulink Tutorial Completo

Funciones para graficas en dos dimensiones (I)

Funcion Comentariofigure Crea una figurasubplot Crea varios ejes en la misma figurahold Superpone diferentes plotsplot Plot linealloglog Plot logarıtmicosemilogx, semilogy Plot semilogarıtmico en eje x e yxlim, ylim , zlim Margenes en cada uno de los ejestit, xlabel, ylabel Texto en tıtulo y ejeslegend, text, gtext Anadir texto en figuraginput Marcar posicion en figuragrid, box Mallado y caja en figura

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 97/215

Funciones para graficas en dos dimensiones (II)

Funcion Comentariobar, bar3, bar3h Graficas de barraserrorbar Graficas con barras que marcan el errorcompass Graficas en forma de compasezplot, ezpolar Grafica sencillas de funcionesfplot Graficas de funcioneshist, pareto Histograma y carta de paretopie, pie3 Pastel de dos o tres dimensionesstem, stairts Graficas con impulsos y escalerasscatter, plotmatrix Graficas de dispersion de datos y matrices

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 98/215

Page 452: Simulink Tutorial Completo

Ejemplos con graficos de dos dimensiones, Escript1.m (I)

Barras:

>> x= − 2 . 9 : 0 . 2 : 2 . 9 ; bar ( x , exp(−x .∗ x ) ) ;>> barh ( x , exp(−x .∗ x ) ) ;>> y= round ( rand ( 5 , 3 ) ∗10) ;>> bar ( y , ’ group ’ ) ; bar ( y , ’ s t a c k ’ ) ;

Histogramas:

>> y= randn (1 e4 , 1) ; h i s t ( y ) ; h i s t ( y , 2 0 ) ;

Pasteles:

>> x = [ 1 , 3 , 0 . 5 , 2 . 5 , 2 ] ; p i e ( x ) ;

Escaleras:

>> x= −3 : 0 . 1 : 3 ; s t a i r s ( x , exp(−x . ˆ 2 ) ) ;

Barras con error:

>> x= −4 : . 2 : 4 ; y= (1/ s q r t (2∗ p i ) ) ∗ exp (−(x . ˆ 2 ) /2) ;>> e=rand ( s i z e ( x ) ) / 1 0 ;>> e r r o r b a r ( x , y , e ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 99/215

Ejemplos con graficos de dos dimensiones, Escript1.m (II)

Puntos:

>> y=randn ( 5 0 , 1 ) ; stem ( y ) ;

Histograma de los angulos.

>> y= randn ( 1 0 0 0 , 1 ) ∗ p i ; r o s e ( y ) ;

Representacion de numeros complejos:

>> z= e i g ( randn ( 2 0 , 2 0 ) ) ; compass ( z ) ;>> f e a t h e r ( z ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 100/215

Page 453: Simulink Tutorial Completo

Graficas para funciones y complementos (I), Escript2.m.

Graficas funciones: plot() para numeros, ezplot(), fplot() parafunciones:

>> x= 0 : 0 . 0 5 : 1 0 ; y= s i n ( x ) .∗ exp (−0.4∗ x ) ;>> f i g u r e ;>> s u b p l o t ( 3 , 1 , 1 ) ; p l o t ( x , y ) ; t i t l e ( ’ p l o t ’ ) ;>> s u b p l o t ( 3 , 1 , 2 ) ;>> e z p l o t ( ’ s i n ( x ) .∗ exp (−0.4∗ x ) ’ , [ 0 , 1 0 ] ) ; t i t l e ( ’ e z p l o t

’ ) ;>> s u b p l o t ( 3 , 1 , 3 ) ;>> f p l o t ( ’ s i n ( x ) .∗ exp (−0.4∗ x ) ’ , [ 0 , 1 0 ] ) ; t i t l e ( ’ f p l o t ’ )

;

subplot(n,m,p) divide la grafica en n ×m partes y va a la p.

Texto y ejes en las graficas: Tıtulos, legendas, cajas, mallado:

>> d i s p ( ’ Texto y e j e s en g r a f i c a s : ’ )>> t= 0 : 0 . 1 : 2 ∗ p i ; r=s i n (2∗ t ) .∗ cos (2∗ t ) ;>> f i g u r e ; s u b p l o t ( 2 , 1 , 1 ) ; p o l a r ( t , r ) ;>> t i t l e ( ’ p o l a r ’ )>> s u b p l o t ( 2 , 1 , 2 ) ;>> f p l o t ( ’ [ s i n ( x ) , s i n (2∗ x ) , s i n (3∗ x ) ] ’ , [ 0 , 2∗ p i ] , ’− ’ , ’

o ’ , ’ ∗ ’ ) ;>> t i t l e ( ’ f p l o t ’ )>> l e g e n d ( ’ s i n ( x ) ’ , ’ s i n (2∗ x ) ’ , ’ s i n (3∗ x ) ’ ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 101/215

Graficas para funciones y complementos (II), Escript2.m.

>> d i s p ( ’ T ı t u l o , nombre en e j e s , l e g e n d a : ’ )>> x= l i n s p a c e ( 0 , 2 , 3 0 ) ; y= s i n ( x . ˆ 2 ) ; f i g u r e ; p l o t ( x , y ) ;>> t e x t ( 1 , . 8 , ’ y=s i n ( x ˆ2) ’ ) ; x l a b e l ( ’ E j e X ’ ) ; y l a b e l ( ’ E j e Y ’ )

;>> t i t l e ( ’ G r a f i c o s e n o i d a l ’ ) ;

>> d i s p ( ’ Subplot , tamano de l e t r a , tamano e j e s , c a j a , g r i d : ’)

>> x = 0 : . 1 : 4∗ p i ; y= s i n ( x ) ; z=cos ( x ) ;>> f i g u r e ; s u b p l o t ( 1 , 2 , 1 ) ; p l o t ( x , y ) ;>> a x i s ( [ 0 , 2∗ pi , −1 ,1 ] ) ;>> s e t ( gca , ’ F o n t S i z e ’ , 1 2 ) ;>> g r i d on ; box on ;>> t i t l e ( ’ s i n ( x ) ’ , ’ FontWeight ’ , ’ b o l d ’ , ’ F o n t S i z e ’ , 1 2 ) ;>> s u b p l o t ( 1 , 2 , 2 ) ; p l o t ( x , z ) ;>> a x i s ( [ 0 , 2∗ pi , −1 ,1 ] ) ; g r i d on ; box on>> s e t ( gca , ’ F o n t S i z e ’ , 1 2 ) ;>> t i t l e ( ’ cos ( x ) ’ , ’ FontWeight ’ , ’ b o l d ’ , ’ F o n t S i z e ’ , 1 2 ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 102/215

Page 454: Simulink Tutorial Completo

Funciones para graficas en tres dimensiones.

Funcion Comentario

plot3 Plot lineal en tres dimensiones

mesh, meshc, meshz Plot de mallados en tres dimensiones

surf, surfc, surfl Plot de superfiecie en tres dimensiones

meshgrid, ndgrid Preparacion de datos para graficas de superficie

hidden Ocultar lıneas y superficies ocultas

contour, contour3 Curvas de nivel

trimesh, trisurf Plot de mallado triangular

scatter3, stem3 Diagramas de dispersion y impulsos en 3 dimensiones

slice Graficos de volumen

surfnorm Normales de las superficies

quiver3 Puntos y normales en vectores

patch Parches de superficies

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 103/215

Ejemplos de graficas en tres dimensiones, Escript3.m (I)

Grafica de tres dimensiones por puntos:

>> t= 0 : p i /50 :10∗ p i ;>> f i g u r e ; p l o t 3 ( s i n ( t ) , cos ( t ) , t ) ; g r i d on ; a x i s s q u a r e>> f i g u r e ; p l o t 3 ( s i n ( t ) , cos ( t ) , t , ’− ’ , cos ( t ) , s i n ( t ) , t , ’ ∗

’ ) ;

Grafica de tres dimensiones por polıgonos:

>> z = 0 : 0 . 0 1 : 8 ; x=cos ( z ) ; y=s i n ( z ) ;>> f i g u r e ; f i l l 3 ( x , y , z , ’ r ’ ) ;

Graficas de tres dimensiones con barras:

>> f i g u r e ; y= c o o l ( 7 ) ;>> s u b p l o t ( 1 , 3 , 1 ) ; bar3 ( y , 0 . 2 , ’ d e t a c h e d ’ ) ;>> s u b p l o t ( 1 , 3 , 2 ) ; bar3 ( y , ’ grouped ’ ) ;>> s u b p l o t ( 1 , 3 , 3 ) ; bar3 ( y , 0 . 1 , ’ s t a c k e d ’ ) ;

Graficas de tres dimensiones con puntos con base:

>> f i g u r e ; x= l i n s p a c e ( 0 , 1 , 1 0 ) ;>> y=x . / 2 ; z=s i n ( x )+s i n ( y ) ;>> stem3 ( x , y , z , ’ f i l l ’ ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 104/215

Page 455: Simulink Tutorial Completo

Ejemplos de graficas en tres dimensiones, Escript3.m (II)

Superficies tres dimensiones y contornos en dos y tres:

>> [ X , Y]= meshgr id ( − 7 . 5 : . 5 : 7 . 5 ) ;>> Z= s i n ( s q r t (X.ˆ2+Y. ˆ 2 ) ) . / s q r t (X.ˆ2+Y. ˆ 2 ) ;>> s u r f (X, Y, Z) ; f i g u r e ; s u r f c (X, Y, Z) ;>> f i g u r e ; s u r f l (X, Y, Z) ;>> c o n t o u r (Z) ; c o n t o u r 3 (Z , 5 0 ) ;

Superficie con velocidad:

>> f i g u r e ; [ U, V,W]= s u r f n o r m (X, Y, Z) ;>> q u i v e r 3 (X, Y, Z , U, V,W, 0 . 5 ) ;

Contornos:

>> [ X , Y]= meshgr id ( −2 : . 2 : 2 , −2 : . 2 : 3 ) ; Z= X.∗ exp(−X.ˆ2−Y. ˆ 2 ) ;

>> c o n t o u r (X, Y, Z) ; f i g u r e ; c o n t o u r (X, Y, Z , 5 0 ) ;>> f i g u r e ; c o n t o u r f (X, Y, Z) ;

Cambio de color y perspectiva:

>> f i g u r e ; s p h e r e ( 1 6 ) ; a x i s s q u a r e ; s h a d i n g f l a t ;>> s e t ( gca , ’ Zl im ’ , [ −0 . 6 , 0 . 6 ] ) ; s e t ( gcf , ’ C o l o r ’ , ’w ’ ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 105/215

Ejemplos de graficas en tres dimensiones, Escript3.m (III)

Rotacion de la figura:

>> h= s u r f ( peaks ( 2 0 ) ) ; r o t a t e ( h , [ 1 , 0 , 0 ] , 1 5 ) ;>> v iew ( [ 1 0 , 1 0 ] ) ;

Mallado triangular de la base, no homogeneo. Superficie en funcion deese mallado:

>> f i g u r e ; x= rand ( 1 , 5 0 ) ; y= rand ( 1 , 5 0 ) ;>> z= peaks (6∗ x−3, 6∗x−3) ;>> t r i = d e l a u n a y ( x , y ) ; t r i m e s h ( t r i , x , y , z ) ;>> f i g u r e ; t r i s u r f ( t r i , x , y , z ) ;

Representacion en cuatro dimensiones, la cuarta es el color:

>> f i g u r e ; l o a d wind ; cav= c u r l ( x , y , z , u , v , w) ;>> s l i c e ( x , y , z , cav , [ 9 0 , 1 3 4 ] , [ 5 9 ] , [ 0 ] ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 106/215

Page 456: Simulink Tutorial Completo

Practicas funciones para graficas

Escribir en un fichero Fichero Cejer1.m el codigo para obtener lassiguientes graficas,

Visualizar sobre el rango −2 a 2 la funcion v = e−x2−y2−z2.

Representar en el intervalo [−8, 8] la funcion f (x) = x3

x2−4.

Graficar sobre los mismos ejes las funciones bessel(1, x), bessel(2, x) ybessel(3, x) para valores entre 0 y 12, separados uniformemente entresı dos decimas. Colocar tres leyendas y tres tipos de trazo diferentes(normal, asteriscos y cırculos) respectivamente para las tres funciones.Representar la curva en polares r = 4(1 + cos(a)) para a entre 0 y 2π(cardiode). Representar tambien la curva en polares r = 3a para a entre−4π y 4π (espiral).Representar la curva alabeada de coordenadas parametricas x = cos2(t),y = sin(t) cos(t) y z = sin(t) para t entre −4π y 4π.

Escribir en un fichero Fichero Cejer2.m el codigo para obtener lassiguientes graficas,

Representar la superficie, su grafico de malla y su grafico de contornocuya ecuacion es la siguiente:

x = xe−x2−y2− 2 < x , y < 2

Representar en un grafico de curvas de nivel con 20 lıneas la superficie dela ecuacion z = sin(x) sin(y) con −2 < x , y < 2.Representar el paraboloide x2 + y2 seccionado por el plano z = 2.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 107/215

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 108/215

Page 457: Simulink Tutorial Completo

Definicion de clase y objeto

Una clase es un nuevo tipo de dato, a una estructura, para el que sepueden definir funciones especificas y redefinir los operadores.

Un objeto es un caso particular de una clase.

Los campos de la estructura asociada a una clase se llamaran propiedadesde la clase, y las funciones asociadas a una clase funciones metodo.

>> s= t f ( ’ s ’ ) ; % C l a s e ’ t f ’ , o b j e t o ’ s ’ .>> P= 1/( s +1) ; % Operador ’+ ’ y ’ / ’ r e d e f i n i d o s para P>> K= zpk ( [ ] , [ −1 , −2 ] , 1 ) ; % C l a s e ’ zpk ’ , o b j e t o K>> bode (P) ; %’ bode ’ metodo de l a c l a s e ’ t f ’

Caracterısticas de la programacion a objeto:Redefinicion de operadores especıficos para la clase.Datos encapsulados: Las propiedades de un objeto no son visibles y solose puede acceder a ellas desde las funciones metodo de la clase.Herencia: Una clase se puede crear a partir de otra, heredando todas susfunciones metodo. Las clases tf, zpk y ss derivan de la clase lti.Agregacion: Un objeto puede contener otros objetos.

Toda la informacion de una clase, tf, esta en el directorio asociado @tf.

Las propiedades de clase usada quedan en memoria. Se deben limpiarpara poder modificarlas,

>> c l e a r t f

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 109/215

Funciones metodo principales (I)

Constructor: Genera un objeto a partir de datos.

>> P= t f ( 1 , [ 1 , 2 , 3 ] ) ; % C o n s t r u c t o r ’ t f ’ , o b j e t o P .>> K= zpk ( [ ] , [ −1 , −2 ] , 1 ) ; % C o n s t r u c t o r ’ zpk ’ , o b j e t o K>> Pzpk= zpk (P) ; % P o b j e t o ’ t f ’ , Pzpk o b j e t o ’ zpk ’>> i s a (P , ’ t f ’ ) % a f i r m a t i v o>> i s a (P , ’ zpk ’ ) % n e g a t i v o>> P % Llama a f u n c i o n ’ d i s p l a y ’

Visualizador: Metodo display que muestra la informacion del objeto.

>> P % Llama a f u n c i o n ’ d i s p l a y ’ de ’ t f ’>> Pzpk % Llama a f u n c i o n ’ d i s p l a y ’ de ’ zpk ’

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 110/215

Page 458: Simulink Tutorial Completo

Funciones metodo principales (II)

Obtencion de informacion:

General: Metodo get(), muestra propiedades del objeto.

>> g e t (P)

Por ındices: Metodo B=subref(A,S)

>> P . num1 % A=P , S ( 1 ) . t y p e = ’ . ’ , S ( 1 ) . t y p e = ’ ’ ,>> %S ( 1 ) . s u b s = ’num ’ , S ( 2 ) . s u b s =1

Introduccion de informacion:

General: Metodo set(), cambia propiedades del objeto.

>> s e t (P , ’num ’ , [ 1 , 2 ] )

Por ındices: Metodo A= subsasign(A,S,B)

>> P . num1= 1 % A=P , S ( 1 ) . t y p e = ’ . ’ , S ( 2 ) . t y p e = ’ ’>> %S ( 1 ) . s u b s = ’num ’ , S ( 2 ) . s u b s =1 , B=1

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 111/215

Redefinicion de operadores (I)

Operacion M-fichero Descripciona + b plus(a,b) Suma

a - b minus(a,b) Resta

-a uminus(a) Menos unitario

+a uplus(a) Mas unitario

a.*b times(a,b) Multiplicacion por elemento

a*b mtimes(a,b) Multiplicacion matricial

a./b rdivide(a,b) Division derecha por elemento

a.\b ldivide(a,b) Division izquierda por elemento

a/b mrdivide(a,b) Division matricial derecha

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 112/215

Page 459: Simulink Tutorial Completo

Redefinicion de operadores (II)

Operacion M-fichero Descripciona\b mldivide(a,b) Division matricial izquierda

a.^b power(a,b) Potencia por elemento

a^b mpower(a,b) Potencia matricial

a < b lt(a,b) Menor que

a > b gt(a,b) Mayor que

a <= b le(a,b) Menor que o igual a

a >= b ge(a,b) Mayor que o igual a

a ~= b ne(a,b) Distinto de

a == b eq(a,b) Igual a

a & b and(a,b) Y logico

a | b or(a,b) O logico

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 113/215

Redefinicion de operadores (III)

Operacion M-fichero Descripcion~a not(a) NO logico

a:d:b colon(a,d,b) Operador dos puntosa:b colon(a,b)

a’ ctranspose(a) Traspuesta conjugada compleja

a.’ transpose(a) Matriz transpuesta

display(a) Visualizacion pantalla

[a b] horzcat(a,b,...) Concatenacion horizontal

[a; b] vertcat(a,b,...) Concatenacion vertical

a(s1,s2,...sn) subsref(a,s) Referencia por subındices

a(s1,...,sn) = b subsasgn(a,s,b) Asignamiento por subındices

(a) subsindex(a) Conversion al ser ındice

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 114/215

Page 460: Simulink Tutorial Completo

Prioridades y ejemplos

Prioridades entre objetos ante metodos y operadores:

Un objeto creado tiene prioridad sobre una variable de Matlab,

>> P= 1/( s +1) ; % o p e r a d o r ’ / ’ y ’+ ’ de c l a s e ’ t f ’ .

Entre dos objetos creados hay que asignar prioridades,

>> i n f e r i o r t o ( ’ c l a s s 1 ’ , ’ c l a s s 2 ’ , . . . )>> s u p e r i o r t o ( ’ c l a s s 1 ’ , ’ c l a s s 2 ’ , . . . )

Ejemplo de objetos, metodos y operadores:

>> s= t f ( ’ s ’ ) % C o n s t r u c t o r>> P( 1 )= 1/( s +1) ; % Operadores ’ / ’ , ’+ ’ , metodo ’

s u b s a s i g n ’>> P( 2 )= 1/( s +2) ;>> K= P( 1 ) % metodo ’ s u b s r e f ’

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 115/215

Ejemplo: Una clase de polinomios (I)

Objetivos: Se pretende realizar una clase para trabajar con polinomios.Para ello se definen las siguientes funciones metodo:

Metodo constructor polynom: Se crea un objeto a partir de loscoeficientes del polinomio.Metodo double: El polinomio se podra convertir a un vector.Metodo display: El objeto se vera en la pantalla en forma de cadena decaracteres.Sobrecarga de operadores: Los operadores suma (+), resta (-) ymultiplicacion (*) son redefinidos para polinomios.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 116/215

Page 461: Simulink Tutorial Completo

Ejemplo: Una clase de polinomios (II)

Metodo constructor,

f u n c t i o n p = polynom ( a )% polynom C o n s t r u c t o r de l a c l a s e polynom .% p = polynom ( v ) c r e a un p o l i n o m i o de un v e c t o r .% Los c o e f i c i e n t e e s t a n en orden d e c r e c i e n t e% de l a s p o t e n c i a s de x .

i f n a r g i n == 0p . c = [ ] ;p = c l a s s ( p , ’ polynom ’ ) ;

e l s e i f i s a ( a , ’ polynom ’ )p = a ;

e l s ep . c = a ( : ) . ’ ;p = c l a s s ( p , ’ polynom ’ ) ;

end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 117/215

Ejemplo: Una clase de polinomios (III)

Metodo display:

f u n c t i o n d i s p l a y ( p )% polynom\ d i s p l a y . Comando ventana para v e r e l o b j e t o .d i s p ( i n t 2 s t r ( p . c ) ) ;

Metodo double:

f u n c t i o n c = d o u b l e ( p )% polynom\ d o u b l e . C o n v i e r t e polynom a un v e c t o r d o u b l e .% c = d o u b l e ( p ) . C o n v i e r t e un p o l i n o m i o en v e c t o r .c = p . c ;

Operador +:

f u n c t i o n r = p l u s ( p , q )% polynom\ p l u s . D e f i n e p + q para p o l i n o m i o s .p = polynom ( p ) ; q = polynom ( q ) ;k = l e n g t h ( q . c ) − l e n g t h ( p . c ) ;r = polynom ( [ z e r o s ( 1 , k ) p . c ] + [ z e r o s (1 ,−k ) q . c ] ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 118/215

Page 462: Simulink Tutorial Completo

Ejemplo: Una clase de polinomios (IV)

Operador -:

f u n c t i o n r = minus ( p , q )% polynom\minus . Implementa p − q e n t r e p o l i n o m i o s .p = polynom ( p ) ; q = polynom ( q ) ;k = l e n g t h ( q . c ) − l e n g t h ( p . c ) ;r = polynom ( [ z e r o s ( 1 , k ) p . c ] − [ z e r o s (1 ,−k ) q . c ] ) ;

Operador *:

f u n c t i o n r = mtimes ( p , q )% polynom\mtimes . Implementa p ∗ q e n t r e p o l i n o m i o s .p = polynom ( p ) ;q = polynom ( q ) ;r = polynom ( conv ( p . c , q . c ) ) ;

Ejemplo de su uso en workspace:

>> p= polynom % Crea un o b j e t o v a c i o>> p= polynom ( p ) % Devue lve e l o b j e t o que s e manda>> p= polynom ( [ 1 , 2 , 3 ] ) % Crea un o b j e t o p l l e n o>> q= p+p>> t= q−p>> a= d o u b l e ( p )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 119/215

Clases derivadas: Herencia (I)

Muchas veces se desea crear una nueva clase con las mismas propiedadesy funciones metodos que otra ya existente a la que se anaden nuevaspropiedades y funciones metodo.

Esto se puede conseguir anadiendo un objeto de la clase existenteClasePadre en la definicion de la nueva clase.

Los objetos de la nueva clase seran ObjetoHijo, y los de la claseexistente ObjetoPadre.

Un ObjetoHijo puede acceder a todos las funciones metodo de laClasePadre que no esten definidos en su clase.

La forma de definir un objeto hijo es la siguiente:

O b j e t o H i j o= c l a s s ( O b j e t o H i j o , ’ C l a s e H i j o ’ , ObjetoPadre ) ;

Con esta definicion Matlab crea un componenteObjetoHijo.ClasePadre donde se guardara la informacion de la partedel ObjetoHijo con las mismas propiedades que el ObjetoPadre.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 120/215

Page 463: Simulink Tutorial Completo

Clases derivadas: Herencia (II)

Un objeto hijo puede recibir herencia de varios objetos padres,

O b j e t o H i j o= c l a s s ( O b j e t o H i j o , ’ C l a s e H i j o ’ , ObjetoPadre1 ,ObjetoPadre2 ) ;

Una funcion metodo que no posea la ClaseHijo sera buscada en lasfunciones de la clase ClasePadre1 y de no ser encontrada entre las de laclase ClasePadre2.

Un ejemplo muy sencillo de una clase derivada es el de una clase defunciones, cuyas propiedades son:

Nombre de la funcion.Polinomio caracterıstico.

Esta claro que esta clase funcion puede ser propuesta como derivada dela clase polinomio polymon, anadiendo a la misma una propiedad dondese escriba el nombre de la funcion.

Todas las funciones metodo de la clase polynom pueden ser usadas en laclase funcion excepto el metodo constructor, el metodo display y elsubsref, que van a ser redefinidos.

Cuando los objetos funcion use funciones metodo de la clase polynom,se esta trabajando con la parte del objeto funcion heredada, y elresultado de la operacion podra ser un objeto polynom o de otra clase yadefinida, pero nunca de la clase funcion.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 121/215

Clases derivadas: Herencia (III)

Funcion metodo constructor de funcion. Codigo.

f u n c t i o n p = f u n c i o n ( v a r a r g i n )% FUNCION C o n s t r u t o r de l a c l a s e f u n c i o n .s w i t c h n a r g i nc a s e 0

p o l y= polynom ;p . nombre = ’ ’ ;p = c l a s s ( p , ’ f u n c i o n ’ , p o l y ) ;

c a s e 1i f i s a ( v a r a r g i n 1 , ’ f u n c i o n ’ )

p = v a r a r g i n 1 ;e l s e

e r r o r ( ’ Tipo de argumento e r r o n e o ’ ) ; endc a s e 2

i f i s c h a r ( v a r a r g i n 1) ,p . nombre= v a r a r g i n 1 ;

e l s ee r r o r ( ’ Arg : nombre , p o l i n o m i o ’ ) ; end

p o l y = polynom ( v a r a r g i n 2) ;p = c l a s s ( p , ’ f u n c i o n ’ , p o l y ) ;

o t h e r w i s ee r r o r ( ’ Numero de argumentos e r r o n e o ’ ) ; end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 122/215

Page 464: Simulink Tutorial Completo

Clases derivadas: Herencia (IV)

Funcion metodo display. Codigo.

f u n c t i o n d i s p l a y ( p )%POLYNOM/DISPLAY Comando ventana para v e r e l o b j e t o .d i s p ( ’ ’ ) ;d i s p ( [ ’ Func i on ’ , p . nombre , ’ = ’ ] )d i s p ( ’ ’ ) ;d i s p ( [ ’ ’ c h a r ( p ) ] ) ;

Ejemplos en el workspace:

>> p= f u n c i o n % Objeto f u n c i o n n u l o>> p1= f u n c i o n ( ’ z e t a ’ , [ 1 , 2 , 3 ] )>> % Objeto f u n c i o n con nombre y p a r a m e t r o s .>> p2= f u n c i o n ( ’ e t a ’ , [ 2 , 3 , 4 ] )>> p3= p1+p2>> % Se usa un metodo d e l padre . E l r e s u l t a d o en un

o b j e t o polynom .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 123/215

Clases derivadas: Herencia (V)

Funcion metodo subsref: Muestra por campos el nombre y polinomio dela funcion, y por ındice el valor de la funcion en un punto. Codigo.

f u n c t i o n b = s u b s r e f ( a , s )% SUBSREF Muestra , por campos e l c o n t e n i d o d e l% o b j e t o , por ı n d i c e s e l v a l o r en un c i e r t o punto .s w i t c h s . type ,c a s e ’ . ’ ,

s w i t c h s . s u b sc a s e ’ nombre ’ ,

b= a . nombre ;c a s e ’ p o l y ’ ,

b= c h a r ( a . polynom ) ;o t h e r w i s e

e r r o r ( ’ Campos : nombre , p o l y . ’ ) ;end

c a s e ’ ( ) ’ ,i n d= s . s u b s : ;b= a . polynom ( i n d ) ;

o t h e r w i s ee r r o r ( ’ Campo o ı n d i c e e r r o n e o . ’ ) ;

end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 124/215

Page 465: Simulink Tutorial Completo

Clases agregadas (I)

Una clase puede tener de componentes objetos de otras clases yadefinidas.

Con ello, no se heredan directamente sus funciones metodo, pero estasfunciones podran ser usadas en la definicion de las nuevas funcionesmetodo.

Ejemplo: La clase transfer tiene las siguientes propiedades:

Polinomio del numerador.Polinomio del denominador.

Esta claro que se puede aprovechar la clase polynom para crear estanueva clase ya que sus dos componentes son polinomios.

Las funciones metodo de la nueva clase no tienen nada que ver con las depolynom, pero en su construccion seran empleadas.

Las funciones metodo de la nueva clase son la funcion constructora,display, subsref, plus, minus, mtimes y mrdivide.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 125/215

Clases agregadas (II)

Funcion metodo constructor. Codigo.

f u n c t i o n p = t r a n s f e r ( v a r a r g i n )% FUNCION C o n s t r u t o r de l a c l a s e t r a n s f e r% Crea una f u n c i o n de t r a n s f e r e n c i a compuesta de% dos p o l i n o m i o s , uno en numerador y o t r o en

denominador .s w i t c h n a r g i nc a s e 0

p . num= polynom ; p . den= polynom ;p = c l a s s ( p , ’ t r a n s f e r ’ ) ; % Objeto n u l o

c a s e 1i f i s a ( v a r a r g i n 1 , ’ t r a n s f e r ’ )

p = v a r a r g i n 1 ; % Objeto f u n c i o ne l s e

p . num= polynom ( v a r a r g i n 1) ; p . den= polynom ( 1 ) ;p= c l a s s ( p , ’ t r a n s f e r ’ ) ; % Objeto s o l o numerador

endc a s e 2

p . num= polynom ( v a r a r g i n 1) ; p . den= polynom ( v a r a r g i n2) ;

p = c l a s s ( p , ’ t r a n s f e r ’ ) ; % Objeto numerador ydenominador

o t h e r w i s ee r r o r ( ’ Numero de argumentos e r r o n e o ’ ) ;

endA. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 126/215

Page 466: Simulink Tutorial Completo

Clases agregadas (III)

Funcion metodo display. Codigo:

f u n c t i o n d i s p l a y ( p )% t r a n s f e r \ d i s p l a y . Comando ventana para v e r e l o b j e t o .num= c h a r ( p . num) ;den= c h a r ( p . den ) ;d i s p ( ’ ’ ) ;d i s p ( [ inputname ( 1 ) , ’ = ’ ] )d i s p ( ’ ’ ) ;d i s p ( [ num ] ) ;d i s p ( repmat ( ’− ’ , [ 1 , max ( [ s i z e (num , 2 ) , s i z e ( den , 2 ) ] ) ] ) ) ;d i s p ( den ) ;

Ejemplos en el workspace:

>> g= t r a n s f e r ; % Objeto n u l o>> g= t r a n s f e r ( [ 1 , 2 , 3 ] ) % Objeto con num y den= 1 .>> p= polynom ( [ 1 , 2 , 3 ] ) % Objeto polynom>> g= t r a n s f e r ( [ 1 , 2 , 3 ] , [ 3 , 4 , 5 ] ) ; % Objeto con num y den>> g= t r a n s f e r ( p , [ 1 , 2 , 3 ] ) ; % Objeto con num y den

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 127/215

Clases agregadas (IV)

Funcion metodo subsref. Codigo:

f u n c t i o n b = s u b s r e f ( a , s )% t r a n s f e r \ s u b s r e f . Por campos , l a r e p r e s e n t a c i o n d e l

o b j e t o .% Por ı n d i c e s , e l v a l o r de l a f u n c i o n en un punto .

s w i t c h s . type ,c a s e ’ . ’ ,

s w i t c h s . subs ,c a s e ’num ’ ,

b= c h a r ( a . num) ; % p o l i n o m i o numc a s e ’ den ’ ,

b= c h a r ( a . den ) ; % p o l i n o m i o deno t h e r w i s e

e r r o r ( ’ Campos : num , den ’ ) ;end

c a s e ’ ( ) ’ ,i n d = s . s u b s : ;b= a . num( i n d ) . / a . den ( i n d ) ; % V a l o r en x

o t h e r w i s ee r r o r ( ’ Dar campo o v a l o r de x en p ( x ) ’ )

end

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 128/215

Page 467: Simulink Tutorial Completo

Clases agregadas (V)

Sobrecarga de operadores. Codigo:

f u n c t i o n r = p l u s ( p , q )% t r a n s f e r \ p l u s . D e f i n e p + q para t r a n s f e r .p = t r a n s f e r ( p ) ;q = t r a n s f e r ( q ) ;r . num= p . num∗q . den + p . den∗q . num ;r . den= p . den∗q . den ;r= c l a s s ( r , ’ t r a n s f e r ’ ) ;

f u n c t i o n r = minus ( p , q )% t r a n s f e r \minus . D e f i n e p − q para t r a n s f e r .p = t r a n s f e r ( p ) ;q = t r a n s f e r ( q ) ;r . num= p . num∗q . den − p . den∗q . num ;r . den= p . den∗q . den ;r= c l a s s ( r , ’ t r a n s f e r ’ ) ;

f u n c t i o n r = mtimes ( p , q )% t r a n s f e r \mtime . D e f i n e p ∗ q para t r a n s f e r .p = t r a n s f e r ( p ) ;q = t r a n s f e r ( q ) ;r . num= p . num∗q . num ;r . den= p . den∗q . den ;r= c l a s s ( r , ’ t r a n s f e r ’ ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 129/215

Clases agregadas (VI)

Sobrecarga de operadores. Codigo:

f u n c t i o n r = mtimes ( p , q )% t r a n s f e r \m r d i v i d e D e f i n e p / q para t r a n s f e r .p = t r a n s f e r ( p ) ;q = t r a n s f e r ( q ) ;r . num= p . num∗q . den ;r . den= p . den∗q . num ;r= c l a s s ( r , ’ t r a n s f e r ’ ) ;

Ejemplos en el workspace:

>> g1= t r a n s f e r ( [ 1 , 2 , 3 ] , [ 2 , 3 , 4 ] )>> g2= t r a n s f e r ( [ 1 , 4 , 3 ] ) % den=1>> g3= g1+g2 ; % Objeto t r a n s f e r>> g3= g1/g2 % Objeto t r a n s f e r>> g3 . num % Cadena de c a r a c t e r e s>> g3 ( 1 0 ) % V a l o r de c o c i e n t e en x=10

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 130/215

Page 468: Simulink Tutorial Completo

Practicas de la programacion orientada a objeto

Modificar la funcion metodo subsref, Fichero Dejer1.m de la clasefuncion, de forma que los ındices sirva para devolver el valor delcoeficiente correspondiente. Por ejemplo, p(3) debe devolver el tercercoeficiente.

Modificar la funcion metodo subsref, Fichero Dejer2.m, de la clasetransfer de forma que devuelva los ındices de numerador y denominadorcorrespondientes. Por ejemplo, g(1,2) debe devolver el primer coeficientedel numerador, y segundo del denominador.

Definir una funcion metodo subasgn, de las clases funcion y transfer,Fichero Dejer3.m y Dejer4.m con un criterio similar a los empleadosen los dos apartados anteriores. Ejemplo en la clase funcion, p(3)=5,introduce un 5 en la posicion tercera del polinomio. Ejemplo en la clasetransfer, g(2,3)=[1,2], introduce un 1 en la posicion segunda delnumerador, y un 2 en la posicion tercera de denominador.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 131/215

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 132/215

Page 469: Simulink Tutorial Completo

Definicion de sistema continuos.

Un sistema es la relacion entre una senal de entrada y una de salida,

y(t) = F (u(t)).

Todo sistema fısico es causal, es decir, la senal de salida depende en eltiempo de la senal de entrada.

Un sistema continuo en el tiempo puede ser representadomatematicamente mediante una ecuacion diferencial ordinaria (ODE),

y (n) = f (t, y , y ′, . . . , y (n−1)).

Nota: La entrada es una funcion del tiempo u(t).

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 133/215

Definicion de sistemas continuos lineales

Sistema lineal:

Si u(t)→ y(t), entonces αu(t)→ αy(t).Si u1(t), u2(t) → y1(t), y2(t), entoncesu1(t) + u2(t) → y1(t) + y2(t).

Un sistema lineal se rige por una ecuacion diferencial lineal,

y (n) + an−1y(n−1) + . . .+ a0y = bnu

(n) + bn−1u(n−1) + . . .+ b0u.

Nota: Ver que de esta forma se cumple con su definicion.

Funcion de transferencia de un sistema lineal es la transformada deLaplace de su ecuacion diferencial,

Y (s)

U(s)=

sn + an−1sn−1 + . . .+ a0

bnsn + bn−1sn−1 + . . .+ b0.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 134/215

Page 470: Simulink Tutorial Completo

Definicion de sistema muestreados.

Un sistema muestreado puede ser representado por una ecuacion endiferencias,

y(k) = f (k, y(k), y(k − 1), . . . , y(k − n)).

Un sistema muestreado lineal puede ser representado por un una ecuacionen diferencias lineal,

y(k+n)+a1y(k+n−1)+. . .+a0y(k) = bnu(k+n)+bn−1u(k+n−1)+. . .+b0u(k).

Funcion de transferencia de un sistema muestreado lineal es latransformada Z de su ecuacion en diferencias,

Y (z)

U(z)=

zn + a1zn−1 + . . .+ a0

bnzn + bn−1zn−1 + . . .+ b0.

Un sistema, en general puede estar compuesto por partes continuas,muestreadas, lineales y no lineales.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 135/215

Simulacion en Matlab y Simulink: Comparacion

La simulacion de un sistema consiste en predecir los datos de salida delmismo frente a los datos de entrada.

Simulacion desde Matlab:

Creacion de un fichero con la ecuacion diferencial del sistema en forma dederivadas de primer orden.Resolucion del ODE por metodos similares a los de Runge-Kutta.

Simulacion desde Simulink (interface grafico):

Dibujo del sistema en un entorno grafico, donde se dispone de iconos parasus partes lineales, no lineales, continuas y discretas.Creacion de un fichero con la informacion de la planta y uso de lasfunciones de simulacion de matlab.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 136/215

Page 471: Simulink Tutorial Completo

Simulacion con Matlab

La ecuacion ODE del sistema y (n) = f (t, y , y ′, . . . , y (n−1)) se debetransformar a una ecuacion ODE vectorial de primer orden y ′ = F (t, y).

Una forma sencilla de conseguirlo es mediante el cambio,

y1 = y , y2 = y ′, . . . , yn = y (n−1),

y por tanto y ′1y ′2...y ′n

=

y2

y3

...f (t, y1, y2, . . . , yn)

.Condiciones iniciales: Valores iniciales de[

y1(t0), . . . , yn(t0)]T.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 137/215

ODE de la funcion de Val der Pol

Ejemplo: Funcion de Val der Pol, (dinamica no linealmasa-muelle-amortiguador)

y ′′1 − µ(1− y 21 )y ′1 + y1 = 0,

en ecuaciones de estado,[y ′1y ′2

]=

[y2

µ(1− y 21 )y2 − y1

].

Fichero con la relacion de las ecuaciones de estado,

f u n c t i o n dy= p o l ( t , y )% t e s e l t iempo% y e s e l v a l o r d e l v e c t o r para un t .% dy e s l a d e r i v a d a de y para un t dado .% y ( 3 ) par ametro m o d i f i c a b l e con c o n d i c i o n e s i n i c i a l e sdy = [ y ( 2 ) ; y ( 3 ) ∗(1−y ( 1 ) ˆ2) ∗y ( 2 )−y ( 1 ) ; 0 ] ; % Columna

Esta funcion sera llamada por el programa ODE en los sucesivo puntos tpara obtener la derivada.

La entrada se debe poner en funcion de t.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 138/215

Page 472: Simulink Tutorial Completo

Clasificacion de ODEs y formulacion

Funciones ODE para sistema suaves basados en metodos de Ruge-Kutta:

ode45, ode23 y ode113.

Funciones ODE para problema con cambios de alta frecuencia:

ode15s, ode23s y ode23t.

Formato de la llamada a la funcion ODE:

>> [ t , y ]= s o l v e r (@F , tspan , y0 , o p t i o n )

@F: Nombre o puntero del fichero .m donde se guarda la funcion.tspan:

[ti,tf]: Lımite inferior y superior. Paso y numero de valores desalida variables.linspace(ti,tf,Npuntos): Se fija el numero de puntos y tiempocuya salida se desea conocer. El programa internamente tiene pasovariable.

y0: Valores iniciales deseados (vector columna).option: Especificaciones del algoritmo. Si se pone [] se toman pordefecto.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 139/215

Opciones de las funciones ODE

Consultar con la ayuda:

>> h e l p o d e s e t>> o p t i o n= o d e s e t ; % d a t o s por d e f e c t o .>> x0= [ 0 . 1 , 1 . 1 , 0 . 1 ] ; % dos e s t a d o s , un par ametro>> s o l= ode45 ( @pol , x0 ) ; % V e r s i o n 7>> y= d e v a l ( s o l , l i n s p a c e ( 0 , 1 0 , 1 0 0 ) ) ; % s o l . en puntos

Ejemplos:

Numero de datos de salida:

>> o p t i o n= o d e s e t ( ’ R e f i n e ’ , 4) ; % por d e f e c t o .

Jacobiano del ODE en funcion jacpol.m:

>> o p t i o n= o d e s e t ( ’ J a c o b i a n ’ , @ j a c p o l ) ;

Se precisa una funcion de la forma,

f u n c t i o n j a c= j a c p o l ( t , y )j a c = [ 0 , 1 , 0 ;

−2∗y ( 1 ) ∗y ( 2 ) , 1−y ( 1 ) ˆ2 , (1−y ( 1 ) ˆ2) ∗y ( 2 ) ;0 , 0 , 0 ] ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 140/215

Page 473: Simulink Tutorial Completo

Ecuaciones diferenciales con valores de frontera (I)

El problema puede ser planteado por las ecuaciones como para a < t < b,

y ′ = f (t, y , p)g(y(a), y(b), p) = 0

Se resuelve con la funcion:

>> s o l= bvp4c (@F , @bc , s o l i n i t , o p t i o n , p1 , p2 , . . . )

@F nombre o puntero a funcion que define el problema.@bc nombre o puntero a funcion que define los valores frontera.solinit: Fijar el mallado en t y puntos iniciales para y .option opciones de resolucion bvpset, bvpget.pi parametros extras.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 141/215

Ecuaciones diferenciales con valores de frontera (II)

Ejemplo: Solucion de la ecuacion y ′′ + |y | = 0, sabiendo que y(0) = 0 ey(4) = −2.

Funcion diferencial:

f u n c t i o n dydx= F ( t , y )dydx= [ y ( 2 ) ; −abs ( y ( 1 ) ) ] ;

Funcion frontera:

f u n c t i o n r e s= bc ( ya , yb )r e c= [ ya ( 1 ) ; yb ( 1 ) +2] ;

Operaciones a realizar:

>> s o l i n i t = b v p i n i t ( l i n s p a c e ( 0 , 4 , 5 ) , [ 1 , 0 ] ) ;>> s o l= bvp4c (@F , @bc , s o l i n i t ) ;>> t=l i n s p a c e ( 0 , 4 ) ; y= d e v a l ( s o l , t ) ;>> p l o t ( t , y ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 142/215

Page 474: Simulink Tutorial Completo

Ecuaciones diferenciales en derivadas parciales (I)

Una ecuacion en derivadas parciales puede formularse como:

c

(x , t, u,

∂u

∂x

)∂u

∂t= x−m ∂

∂x

(xmf

(x , t, u,

∂u

∂x

))+ s

(x , t, u,

∂u

∂x

)donde a ≤ x ≤ b, t0 ≤ t ≤ tf .Condiciones iniciales: Para t = T0,

u(x , t0) = u0(x).

Condiciones frontera: Para x = a o x = b,

p(x , t, u) + q(x , t)f

(x , t, u,

∂u

∂x

)= 0.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 143/215

Ecuaciones diferenciales en derivadas parciales (II)

Se resuelve con la funcion:

>> s o l= pdepe (m, @F , @ i n i t , @f ront , xmesh , tspan ,o p t i o n s , p1 , p2 , . . . )

m: Simetrıa de la ec. diferencial, bloques (m=1), cilındrica (m=2) y esferica(m=3).F Nombre o puntero a la definicion de funcion.

>> [ c , f , s ]= F ( x , t , u , dudx )

init: Nombre o puntero a las condiciones iniciales.

>> u= i n i t ( x )

front: Nombre o puntero a las condiciones frontera.

>> [ p l , q l , pr , pr ]= f r o n t ( x l , u l , xr , ur , t )

xmesh: Mallado de los valores de x .tspan: Mallado de los valores de t.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 144/215

Page 475: Simulink Tutorial Completo

Ecuaciones diferenciales en derivadas parciales (III)

Ejemplo: Resolver la ecuacion diferencial

π2 ∂u

∂t=

∂x

(∂u

∂x

),

sujeto a las condiciones iniciales u(x , 0) = sin(πx) y condiciones frontera

u(0, t) = 0, πe−t + ∂u∂x

(1, t) = 0

f u n c t i o n [ c , f , s ]= F ( x , t , u , dxdu )c= p i ˆ 2 ; f= dxdu ; s =0;

f u n c t i o n u0= i n i t ( x )u0= s i n ( p i ∗x ) ;

f u n c t i o n [ p l , q l , pr , q r ]= f r o n t ( x l , u l , xr , ur , t )p l=u l ; q l =0; pr= p i ∗ exp(− t ) ; qr= 1 ;

>> m= 0 ; x= l i n s p a c e ( 0 , 1 , 2 0 ) ; t= l i n s p a c e ( 0 , 2 , 5 ) ;>> s o l= pdepe (m, @F , @ i n i t , @f ront , x , t ) ;>> u= s o l ( : , : , 1 ) ;>> f i g u r e ; s u r f ( x , t , u ) ;>> f i g u r e ; p l o t ( x , u ( end , : ) ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 145/215

Practicas de simulacion con matlab

Resolver la ecuacion de Van del Pol y ′′ + µ(1− y 2)y ′ + y = 0 paraµ = 1, con valores iniciales y(0) = 2 e y ′(0) = 0, en el intervalot = [0, 20] (usando su Jacobiano) por el ode45 y ode23. Generalizar elresultado para una µ cualquiera. El fichero “script” con la resolucion delproblema se llamara Eejer1.m.

Resolver la ecuacion de Lorenz, usadas en la descripcion de sistemascaoticos, para los puntos iniciales y valores de σ, r y b que el usuariodesee, por ejemplo σ = 10, r = 28 y b = 8/3. El fichero “script” con laresolucion del problema se llamara Eejer2.m.

x ′ = σ(y − x)y ′ = x(r − z)− yz ′ = xy − bz

Dada la ecuacion y ′′ + (λ− 2q cos(2t))y = 0, con condiciones de fronteray(0) = 1, y ′(0) + y ′(π) = 0 encontrar una solucion para q = 15 yλ = 15, basandose en una solucion inicial para diez puntos de t en elintervalo [0, π]. Dibujar la grafica de la primera componente en 100puntos igualmente espaciados entre [0, π]. El fichero “script” con laresolucion del problema se llamara Eejer3.m.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 146/215

Page 476: Simulink Tutorial Completo

Simulink: Tabla de bloques propios

Bloques especıficos de Simulink:

Continuous: Bloques de sistemas continuos escritos en base a sufunciones de transferencia; sus polos, ceros y ganancias; y sus ecuacionesen espacio de estado.Discrete: Bloques de sistemas discretos escritos en base a su funcionesde transferencia; sus polos, ceros y ganancias; y sus ecuaciones en espaciode estado.Function & Tables: Funciones y tablas de Matlab. Especial importancialas S-Function.Math: Bloque de operaciones matematicas entre senales.Nonlinear: Bloque de no linealidades.Signal & Systems: Entradas y salidas de datos hacia el espacio detrabajo de Matlab (bloques in y out), y hacia ficheros. Bloque subsystem

que permite generar un diagrama de bloque dentro de otro.Sinks: Bloques que muestran los datos simulados en pantallas o losguardan en ficheros.Sources: Bloques que generan diferentes tipos de senales.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 147/215

Simulink: Tabla de bloques pertenecientes a toolbox

Bloques pertenecientes a toolbox de Matlab:

Control System Toolbox: Bloques de sistemas continuos y discretos enla formulacion orientada a objeto LTI especıfica de esa toolbox.Real-Time: Bloques de comunicacion entre el sistema y una tarjeta deadquisicion de datos.En general, todas las toolbox de matlab han desarrollado funciones desimulink en la version 7 o posterior.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 148/215

Page 477: Simulink Tutorial Completo

Simulink: Simulacion de sistemas desde matlab

Interface grafico para modelar un sistema.

Simulacion desde Matlab: Entradas bloques in y salidas bloques out.

>> [ t , x , y ]= sim ( ’FUN ’ , tspan , o p t i o n , [ t , u ] )

’FUN’: Nombre del fichero .mdl del fichero Simulink.tspan:

[ti,tf]: Lımite inferior y superior. Paso y numero de valores desalida variables.linspace(ti,tf,Npuntos): Se fija el numero de puntos y tiempocuya salida se desea conocer. El programa internamente tiene pasovariable.

x0: Valores iniciales de las variables de estado (vector columna).option: Especificaciones del algoritmo. Si se pone [] se toman pordefecto.[t,u]: Tiempo y entradas al modelo Simulink desde el espacio de trabajo.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 149/215

Ejercicios de simulacion con matlab y simulink

Formular en un fichero *.m los dos modelos planteados en Simulink ydemostrar que la simulacion con la funcion ode45 y con Simulink esequivalente. El nombre del fichero “script” sera Eejer4.m.

1

Out1

s+1

1/100s+1

Transfer Fcn Saturation

s

1

Integrator1

s

1

Integrator

1

In1

1

Out1

1

s+1

Transfer FcnRelay

s

1

Integrator1

s

1

Integrator

1

In1

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 150/215

Page 478: Simulink Tutorial Completo

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 151/215

GUIDE: Interface grafico de matlab (I)

Definicion: Es una herramienta para construir interfaces graficos conbotoneras, figuras, texto, y mas elementos.

Construccion de graficos: Se realiza con un interface del programaque permite colocar cada elemento donde se desee. Tras ello se exporta lainformacion a un fichero .m.Programacion de funciones: Cada elemento del grafico tiene asociadoen el fichero .m una funcion donde el programador escribe lasinstrucciones de cada elemento.

Ejemplo: La siguiente grafica muestra un inteface para el analisis de lassenales cardıacas. Se compone de,

Pantalla: para visualizar los datos.Botones: para marcar las operaciones que se desean realizar.Pantallas de texto: Para mandar mensajes al programa.

0.97 0.98 0.99 1 1.01 1.02 1.03 1.04

x 105

-500

0

500

1000

1500

2000

2500

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 152/215

Page 479: Simulink Tutorial Completo

GUIDE: Interface grafico de matlab (II)

Entorno grafico: El comando GUIDE abre una pantalla con la que sepuede dibujar el esquema grafico del interface,

Cada elemento anadido es un objeto con un nombre y propiedades que sepueden modificar en la pantalla.Los elementos se pueden alinear, formar bloques y otra serie deoperaciones para conseguir una grafica bonita.Cuando la figura se haya terminado se procede a exportar la informacion aun fichero .m.

Pantalla GUIDE y paleta de trabajo:

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 153/215

GUIDE: Interface grafico de matlab (III)

Programacion de los objetos: En el fichero .m generado con elinterface cada objeto tiene asociado dos funciones, una de inicializacion yotra de llamada.

Variables de las funciones: Son dos objetos, hObject para losgraficos y handles para la informacion.

Ejemplo: Barra para mandar datos (“slider”),

Funcion creacion de un “slider”:

f u n c t i o n S Dim CreateFcn ( hObject , e v e n t d a t a , h a n d l e s )% I n t r o d u c e en e l o b j e t o g r a f i c o l o s v a l o r e s i n i c i a l e ss e t ( hObject , ’ Va lue ’ , 5) ; s e t ( hObject , ’ Min ’ , 0) ;s e t ( hObject , ’Max ’ , 10) ;

Funcion de llamada de un “slider”:

f u n c t i o n S D i m C a l l b a c k ( hObject , e v e n t d a t a , h a n d l e s )% E x t r a e d e l o b j e t o g r a f i c o e l v a l o rN= g e t ( hObject , ’ Value ’ ) ;% I n t r o d u c e d i c h o v a l o r en o t r o o b j e t o% E Dim , c a s i l l a de t e x t os e t ( h a n d l e s . E Dim , ’ S t r i n g ’ , num2str ( f l o o r (N) ) ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 154/215

Page 480: Simulink Tutorial Completo

GUIDE: Ejercicios propuestos

Ejercicio: Realizar un interface de usuario con la herramienta GUIDEque consiga mostrar en una pantalla graficas elegidas por el usuario endiferentes formatos, superficie, mallado o contorno. La funcion dondedebe ser guardado el programa se llamara Fejer1.m

Ver las explicaciones del manual de matlab del interface de usuario,builgui.pdf, donde se explica este ejemplo con detalle.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 155/215

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 156/215

Page 481: Simulink Tutorial Completo

Funciones matematicas basicas (I)

Funcion Comentario

abs Valor absoluto

acos, acosh Arco coseno y arco coseno hiperbolico

acot, acoth Arco cotangente y arco cotangente hiperbolico

acsc, acsch Arco cosecante y arco cosecante hiperbolico

angle Argumento

asec, asech Arco secante y arco secante hiperbolico

asin, asinh Arco seno y arco seno hiperbolico

atan, atanh Arco tangente y arco tangente hiperbolico

atan2 Arco tangente en el cuarto cuadrante

ceil Redondeo al entero mas proximo

complex Forma un numero complejo

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 157/215

Funciones matematicas basicas (II)

Funcion Comentario

conj Complejo conjugado

cos,cosh Coseno y coseno hiperbolico

cot,coth Cotangente y cotangente hiperbolica

csc,csch Cosecante y cosecante hiperbolica

exp Exponencial

fix Elimina la parte decimal

floor Mayor entero menor o igual que un real dado

gcd Maximo comun divisor

imag Parte imaginaria de un numero complejo

lcm Maximo comun multiplo

log Logaritmo neperiano

log2 Logaritmo base 2

log10 Logaritmo base 10

mod Modulo

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 158/215

Page 482: Simulink Tutorial Completo

Funciones matematicas basicas (III)

Funcion Comentario

nchoosek Coeficiente binomial

real Parte real de un numero complejo

rem Resto de la division

round Redondeo al entero mas cercano

sec,sech Secante y secante hiperbolica

sign Signo

sin,sinh Seno y seno hiperbolico

sqrt Raız cuadrada

tan,tanh Tangente y tangente hiperbolica

Pueden consultarse con

>> h e l p e l f u n

MATLAB tiene tambien funciones matematicas especiales

>> h e l p s p e c f u n

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 159/215

Ejemplo de funciones matematicas basicas DElfun1.m

Combinaciones de 10 elementos tomadas de 4 en 4

(104

):

>> nchoosek ( 1 0 , 4 )

Seno y coseno de los angulos entre 0 y 2π, incrementando de π/2 en π/2.

>> s i n ( 0 : p i / 2 : 2∗ p i )>> cos ( 0 : p i / 2 : 2∗ p i )

Algunas propiedades de las funciones exponencial y logarıtmica

>> exp (2∗ p i ∗ i )>> exp ( l o g ( 2 ) )>> 2∗ exp ( i ∗ p i )>> 2∗( cos ( p i )+i ∗ s i n ( p i ) )>> l o g (3+2∗ i )

Algunas propiedades de las funciones trigonometricas

>> s i n ( p i /4)ˆ2+ cos ( p i /4) ˆ2>> ( exp ( 5 )+exp (−5) ) /2>> cosh ( 5 )>> cosh ( p i )ˆ2− s i n h ( p i ) ˆ2>> 1+tan ( p i /4) ˆ2>> s e c ( p i /4) ˆ2

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 160/215

Page 483: Simulink Tutorial Completo

Funciones de transformacion de coordenadas

Funcion Comentario

cart2pol,pol2cart Transforma cartesianas a polares (cilındricas 3D)

cart2sph,sph2cart Transforma cartesianas a esfericas

Ejemplo de transformacion de coordenadas DCoor1.m

Transforma el punto (3, 2, 5) de cilındricas a cartesianas:

>> [ x , y , z ]= p o l 2 c a r t ( 3 , 2 , 5 )

Transforma el punto (1, 1, 1) de cartesianas a cilındricas y a esfericas:

>> [ c1 , c2 , c3 ]= c a r t 2 p o l ( 1 , 1 , 1 )>> [ c1 , c2 , c3 ]= c a r t 2 s p h ( 1 , 1 , 1 )

Transforma el punto (5, π/3) de cilındricas a cartesianas:

>> [ x , y ]= p o l 2 c a r t ( 5 , p i /3)

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 161/215

Funciones estadısticas basicas (I)

Funcion Comentario

max Maximo de vector

mean Media

median Mediana

min Maximo

perms Permuta las filas de una matriz

sort Datos ordenados

sortrows Ordena filas de una matriz

std Desviacion estandar.

var Varianza

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 162/215

Page 484: Simulink Tutorial Completo

Funciones estadısticas basicas (II)

Funcion Comentario

corr Correlacion entre variables

cov Matriz de covarianzas

corrcoef Matriz de correlaciones

xcorr Correlacion cruzada entre variables

xcov Covarianzas cruzadas entre variables

cumprod Producto acumulativo

cumsum Suma acumulativa

cumtrapz Integracion acumulativa trapezoidal

diff Funcion diferencial y aproximacion acumulativa

find Busca datos en vectores

hist,histc Histograma y contaje de histograma

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 163/215

Ejemplo funciones basicas estadıstica DStat1.m (I)

Generamos dos series de 1000 numeros cada una que se almacenan en losvectores x e y. Estos vectores representan un conjunto de medidasobtenidas de muestrear dos variables aleatorias X e Y.

>> randn ( ’ s e e d ’ , 1) ;>> x = randn ( 1 0 0 0 , 1 ) ;>> y = randn ( 1 0 0 0 , 1 ) ;

El valor medio de x se calcula con el comando:

>> mean ( x )

Si hubiera algun valor NaN en el vector x, el comando mean(x) devuelveNaN como media, para descontar estos valores se utiliza el comando NaN

>> xn=x ;>> xn ( 2 0 0 )=NaN ;>> mean ( xn )>> nanmean ( xn )

La mediana se calcula con el comando:

>> median ( x )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 164/215

Page 485: Simulink Tutorial Completo

Ejemplo funciones basicas estadıstica DStat1.m (II)

La desviacion tıpica se calcula con el comando

>> s t d ( x )

La varianza se calcula con el comando

>> v a r ( x )

El valor mas grande de la serie se obtiene con el comando

>> max ( x )

El valor mas pequeno de la serie se obtiene con el comando

>> min ( x )

El rango de valores de la serie se obtiene con el comando

>> r a n g e ( x )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 165/215

Ejemplo funciones basicas estadıstica DStat1.m (III)

La matriz de covarianza cruzada entre las dos variables aleatorias X e Yse obtiene con el comando:

>> cov ( x , y )

La matriz de correlacion cruzada entre las dos variables aleatorias X e Yse obtiene con el comando:

>> c o r r c o e f ( x , y )

Para obtener la posicion o ındice del mayor o menor valor dentro delvector x, se puede utilizar el comando max o min con argumentos desalida.

>> [ a i ] = max ( x )

El mayor valor es a, y su posicion dentro del vector x queda almacenadoen la posicion i.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 166/215

Page 486: Simulink Tutorial Completo

Ejemplo funciones basicas estadıstica DStat1.m (IV)

Los valores del vector x pueden ordenarse con el comando sort

>> xs = s o r t ( x ) ;

Se puede obtener el ındice de ordenacion utilizando sort con un segundoargumento de salida

>> [ x s i ] = s o r t ( x ) ;

Tanto xs, como x(i) contienen los valores ordenados de menor a mayor,para ver los que van de la posicion 201 a 210 se hace:

>> [ x s ( 2 0 1 : 2 1 0 ) x ( i ( 2 0 1 : 2 1 0 ) ) ]

El histograma de los datos se calcula con el comando

>> h i s t ( x )

Por defecto el comando hist utiliza 10 intervalos. Para utilizar un numerodiferente de intervalos, por ejemplo 50, hacer

>> h i s t ( x , 50)

La cuenta de elementos h por intervalo i se obtiene con el comando

>> [ h i ] = h i s t ( x , 5 0 ) ;

i contiene el valor medio del intervalo y h la cuenta de elementos

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 167/215

Ejercicios de tratamiento de datos

En un fichero script de nombre Gejer1.m realizar las siguientesoperaciones:

Generar una variable aleatoria x con distribucion normal y otra y condistribucion uniforme, ambas con 1000 elementos.Hallar la media, varianza y mediana de ambas variables.Hallar el histograma de ambas variables.Representar la funcion de distribucion acumulada de ambas variables apartir de los datos ordenados.Representar la funcion de distribucion de ambas variables a partir de ladiferencia de los datos obtenidos en el apartado anterior.Hallar el diagrama Q-Q entre ambas variables, es decir, el diagrama de losdatos ordenados de una variable con respecto a la otra.Hallar la correlacion y convarianza entre ambas variables.Hallar la correlacion y covarianza cruzadas de las variables consigo mismasy entre ellas para un tiempo de [−τ, τ ].

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 168/215

Page 487: Simulink Tutorial Completo

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 169/215

Funciones basicas de algebra matricial (I)

Funcion Comentario

expm Exponencial de una matriz eA

logm Logaritmo neperiano de una matriz

sqrtm Raız cuadrada de una matriz

funm Cualquier funcion matematica aplicada a una matriz

transpose, ()’ Transpuesta de una matriz

inv Inversa de una matriz

det Determinante de una matriz

rank Rango de una matriz

trace Traza de una matriz

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 170/215

Page 488: Simulink Tutorial Completo

Funciones basicas de algebra matricial (II)

Funcion Comentario

eig Valores propios de una matriz

svd Valores singulares de una matriz

cond Numero de condicion de una matriz

rcond Recıproco del numero de condicion (estimado)

norm Norma de una matriz

null Base ortonormal del nucleo de una matriz

orth Base ortonormal de la imagen de una matriz

subspace Angulo entre los subespacios de dos matrices

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 171/215

Ejemplo de Matlab de funciones de algebra de matrices DAlg1.m (I)

Formamos una matriz cuadrada aletoria de dimension 3

>> A=randn ( 3 )

Calculamos su traspuesta

>> A’

Calculamos su rango con rank

>> rank (A)

Calculamos su determinante con det

>> d e t (A)

Calculamos sus autovalores con eig

>> e i g (A)

Calculamos su traza con eig

>> e i g (A)

Comprobamos que la traza es la suma de los autovalores

>> [ sum ( e i g (A) ) t r a c e (A) ]

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 172/215

Page 489: Simulink Tutorial Completo

Ejemplo de Matlab de funciones de algebra de matrices DAlg1.m (II)

Comprobamos que el determinante es el producto de los autovalores

>> [ prod ( e i g (A) ) d e t (A) ]

Calculamos el numero de condicion

>> cond (A)

Comprobamos que el numero de condicion es el cociente entre el maximoy el mınimo autovalor

>> s q r t ( max ( e i g (A’∗A) ) /min ( e i g (A’∗A) ) )>> max ( svd (A) ) /min ( svd (A) )

Estimamos el recıproco del numero de condicion con rcond

>> rcond (A)

Obtenemos el error relativo de estimacion obtenido con rcond’)

>> abs ( cond (A)−1/rcond (A) ) / cond (A)

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 173/215

Ejemplo de Matlab de funciones de algebra de matrices DAlg2.m (I)

Formamos una matriz cuadrada compleja aleatoria de dimension 3

>> B=randn ( 3 )+j ∗ randn ( 3 )

Calculamos B elevada al cubo

>> Bˆ3

Calculamos 2 elevado a B

>> 2ˆB

Calculamos la exponencial de B por dos metodos

>> expm (B)>> exp ( 1 ) ˆB

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 174/215

Page 490: Simulink Tutorial Completo

Ejemplo de Matlab de funciones de algebra de matrices DAlg2.m (II)

Calculamos el logaritmo neperiano de B por dos metodos

>> logm (B)>> funm (B, ’ l o g ’ )

Calculamos la raız cuadrada de B por tres metodos

>> sqrtm (B)>> funm (B, ’ s q r t ’ )>> Bˆ . 5

Calculamos el seno y coseno de B

>> funm (B, ’ s i n ’ )>> funm (B, ’ cos ’ )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 175/215

Descomposicion de matrices

Funcion Comentario

[V,D]=eig(A) AV = VD, D diagonal

[T,B]=balance(A) TB = AT , eig(A) ≈ eig(B)

[U,T]=schur(A) UT = AU, U ′U = I , T triangular superior

[L,U,P]=lu(A) PA = LU, P permutacion, L triangular inferior,U triangular superior

R=chol(A) R ′R = A para A definida positiva, R triangular superior

[Q,R,P]=qr(A) AP = QR, P permutacion, Q ortogonal,R triangular superior

[V,J]=jordan(A) AV = VJ, J matriz de Jordan

pinv Pseudoinversa de una matriz

poly Polinomio caracterıstico de una matriz

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 176/215

Page 491: Simulink Tutorial Completo

Ejemplo de descomposicion de matrices DAlg3.m (I)

Formamos una matriz cuadrada aletoria de dimension 3

>> A=randn ( 3 )

Calculamos su descomposicion en valores propios con svd

>> [ V ,D]= svd (A)

Comprobamos la descomposicion:

>> A∗V−V∗D

Calculamos la matriz balanceada de A

>> [ T, B]= b a l a n c e (A)

Comprobamos la descomposicion

>> [ B T\A∗T]>> e i g (A)>> e i g (B)

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 177/215

Ejemplo de descomposicion de matrices DAlg3.m (II)

Calculamos la descomposicion de Schur de A

>> [ U, T]= s c h u r (A)

Comprobamos la descomposicion

>> [U∗T∗U’ A ]>> U∗U’

Calculamos la descomposicion QR de A

>> [Q, R , E]= qr (A)

Comprobamos la descomposicion

>> [Q∗R A∗E ]>> Q∗Q’

Calculamos la descomposicion LU de A

>> [ L , U, P]= l u (A)

Comprobamos la descomposicion

>> [ L∗U P∗A ]

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 178/215

Page 492: Simulink Tutorial Completo

Ejemplo de descomposicion de matrices DAlg3.m (III)

Calculamos la descomposicion SVD de A

>> [ U, S , V]= svd (A)

Comprobamos la descomposicion

>> [U∗S∗V’ A ]>> U’∗U>> V∗V’

Para calcular el factor de Choleski necesitamos una matriz definidapositiva que calculamos premultiplicando A por su transpuesta

>> AA=A’∗A>> R=c h o l (AA)

Comprobamos la descomposicion

>> [ R’∗R AA]

Comprobamos que si la matriz no es definida positiva no tiene factor deCholeski y se obtiene un error

>> R=c h o l (A)

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 179/215

Solucion de sistemas de ecuaciones

Funcion Comentario

X=A/B Resuelve XA = B

X=A\B Resuelve AX = B por mınimos cuadrados

X=lsqnonneg(A,b) Solucion de mınimos cuadrados de Ax = b, x ≥ 0

X=linsolve(A,B) Resuelve AX = B, A matriz cuadrada, B matriz

r=roots(p) Raıces de un polinomio p

p=poly(r) Polinomio de raıces v

x=fzero(fun,x0) Calcula un cero de la funcion fun proximo a x0

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 180/215

Page 493: Simulink Tutorial Completo

Ejemplo solucion de sistemas DAlg4.m (I)

Obtenemos las raıces del polinomio p(x) = x3 + 2x2 − 3x + 1

>> v = r o o t s ( [ 1 2 −3 1 ] )

Obtenemos el polinomio que tiene raıces −1, +2, +j y −j>> p = p o l y ([−1 2 j − j ] )

Sea el sistema de ecuaciones lineales

x + 2y + 3z = 3

2x + 3y + z = 1

x + y + 5z = 5

Para resolverlo se forman las matrices A y b

>> A = [ 1 2 3 ; 2 3 1 ; 1 1 5 ]>> b = [ 3 1 5 ] ’

La solucion es:

>> X=A\b

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 181/215

Ejemplo solucion de sistemas DAlg4.m (II)

La solucion de mınimos cuadrados no negativa es:

>> Xn=n l s q n o n e g (A, b )

La ecuacion x sin(x) = 1/2 puede resolverse con fzero en el entorno delos puntos 2, 4 y 6:

>> [ f z e r o ( ’ x∗ s i n ( x )−.5 ’ , 2 ) f z e r o ( ’ x∗ s i n ( x )−.5 ’ , 4 ) . . .>> f z e r o ( ’ x∗ s i n ( x )−.5 ’ , 6 ) ]

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 182/215

Page 494: Simulink Tutorial Completo

Ejercicios de algebra de matrices

En un fichero “script” de nombre Gejer1.m realizar el siguiente ejercicio.Dada la siguiente matriz:

A =

2/3 2/5 2/7 2/9 2/112/5 2/7 2/9 2/11 2/132/7 2/9 2/11 2/13 1/152/9 2/11 2/13 2/15 2/17

2/11 2/13 2/15 2/17 1/19

Autovalores, autovectores, polinomio caracterıstico y numero de lacondicion.Hallar al inversa de la matriz.Hallar la descomposicion por los siguientes metodos: Jordan, Schur, LU,QR, Choleski y SVD. Comprobar si es posible la descomposiciony si losvalores obtenidos son ciertos.Si b = [1, 3, 5, 7, 9]′ resolver el valor de debe tener x para que se cumplala ecuacion Ax = b.

En un fichero “script” de nombre Gejer2.m realizar el siguiente ejercicio.Sea x y n dos vectores aleatorios de distribucion uniforme entre [0, 1] de100 elementos.

Fijar un valor para los parametros [a, b, c].Obtener el valor de y de la formula y = a ∗ x + b ∗ x2 + c ∗ x3 + 0,1 ∗ n.Estimar el valor de los parametros [a, b, c] a partir del valor de x e yusando mınimos cuadrados. Se considera que n es un ruido.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 183/215

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 184/215

Page 495: Simulink Tutorial Completo

Funciones de relacion y filtros.

Funcion Comentario

cov Varianza de un vector

corrcoef Coeficientes de correlacion (normalizados)

conv Convolucion de datos, producto de polinomios

diff Diferencias entre elementos de un vector

gradient Derivadas parciales numericas de una matriz

del2 Laplaciano discreto de una matriz

filter Filtro FIR y IIR de datos

ltitr Respuesta lineal

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 185/215

Practicas con funciones de relacion y filtros, Bscript2.m (I)

Varianza de un vector

>> l o a d count . dat>> a= cov ( count ( : , 1 ) ) ;

Coeficiente de correlacion:

>> b= c o r r c o e f ( count ) ;

Convolucion entre dos vectores:

>> c= conv ( [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ) ;>> d= conv ( count ( : , 1 ) , count ( : , 2 ) ) ;

Diferencial., Derivada aproximada:

>> a=d i f f ( count ) ;>> s i z e ( a ) , s i z e ( count )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 186/215

Page 496: Simulink Tutorial Completo

Practicas con funciones de relacion y filtros, Bscript2.m (II)

Gradientes, derivada parcial aproximada:

>> [ px , py ]= g r a d i e n t ( count ) ;

Laplaciano discreto de un vector del2u = (d2u/dx2 + d2/dy 2):

>> l p= d e l 2 ( count )

Filtro FIR y IIR de vectores:

>> b = [ 1 , 1 , 1 ] / 3 ; a =1;>> f= f i l t e r ( b , a , count ) ;

Simulacion de un sistema lineal en ecuaciones de estado:

>> A= [ 0 . 9 , 0 ; 0 , 0 . 9 ] ; B= [ 0 , 1 ] ’ ;>> x= l t i t r (A, B, ones ( 1 0 0 , 1 ) ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 187/215

Analisis en frecuencia

Funcion Comentario

fft Transformada de Fourier discreta

fft2 Transformada de Fourier en dos dimensiones

ifft Inversa transformada de Fourier

ifft2 Inversa transformada de Fourier en dos dimensiones

abs Magnitud

angle Angulo

fftshift Mueve el retraso cero al centro del espectro

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 188/215

Page 497: Simulink Tutorial Completo

Practicas de analisis en frecuencia,Bscript3.m

Toma de datos:

>> l o a d s u n s p o t . dat ;>> y e a r= s u n s p o t ( : , 1 ) ; w o l f e r= s u n s p o t ( : , 2 ) ;

Transformada de Fourier, se le quita el primer dato:

>> y= f f t ( w o l f e r ) ; y ( 1 ) = [ ] ;

Graficas con eje frecuencia [0,± ınf, 0] y [− ınf, 0, ınf]:

>> f i g u r e ; s u b p l o t ( 2 , 1 , 1 ) ; p l o t ( abs ( y ) )>> s u b p l o t ( 2 , 1 , 2 ) ; p l o t ( f f t s h i f t ( abs ( y ) ) ) ;

Graficas en funcion de la frecuencia de Nyquist:

>> N= l e n g h t ( y ) ; power = abs (Y ( 1 :N/2) ) . ˆ 2 ;>> n y q u i s t = 1 / 2 ; f r e q = ( 1 :N/2) /(N/2) ∗ n y q u i s t ;>> f i g u r e ; s u b p l o t ( 2 , 1 , 1 ) ; p l o t ( f r e q , power ) ;>> s u b p l o t ( 2 , 1 , 2 ) ; p l o t ( f r e q , unwrap ( a n g l e ( y ( 1 :N/2) ) ) ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 189/215

Ejercicios de filtro y transformada de Fourier

En un fichero “script” de nombre Hejer1.m responder a las siguientespreguntas.

Obtener una senal de [0, 3] segundos con periodo de muestreo 0,001 s.y = sin(2 ∗π ∗ 2 ∗ t) + 0,5 ∗ sin(2 ∗π ∗ 5 ∗ t +π/3) + 0,1 ∗ sin(2 ∗π ∗ 50 ∗ t)Filtrar la senal para eliminar el componente de alta frecuencia, productodel acoplamiento con la red a 50 Hz. Proponer para ello diferentes tiposde filtros.Obtener la transformada de Fourier de la senal filtrada y sin filtrar viendolas diferencias. Se precisa que la frecuencia cero este en el centro de lagrafica.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 190/215

Page 498: Simulink Tutorial Completo

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 191/215

Funciones para polinomios

Funcion Comentario

conv Producto de polinomios

deconv Division de polinomios

poly Definicion de polinomios por raıces

polyder Derivada de polinomios

polyfit Interpola por mınimos cuadrados

polyval Valor polinomio en un punto

polyvalm Valor polinomio con matrices

residue Fracciones parciales

roots Raıces de un polinomio

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 192/215

Page 499: Simulink Tutorial Completo

Practicas con funciones de polinomios, Cscript1.m (I)

Polinomio y sus raıces. Coeficientes a partir de raıces:

>> p = [ 1 0 −2 −5]; r= r o o t s ( p ) ;>> p o l y ( r )

Polinomio caracterıstico:

>> A = [ 1 . 2 3 −0.9; 5 1 . 7 5 6 ; 9 0 1 ] ;>> p o l y (A)

Valor del polinomio en un numero o matriz:

>> p o l y v a l ( p , 5 )>> p o l y v a l m ( p , A) % p (A)= Aˆ3−2∗A−5∗ I

Convolucion (producto) y deconvolucion:

>> a= [ 1 , 2 , 3 ] ; b= ones ( 1 , 5 ) ; c= conv ( a , b ) ;>> [ q , r ]= deconv ( c , a ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 193/215

Practicas con funciones de polinomios, Cscript1.m (II)

Derivada de un polinomio, del producto y de la division:

>> q = p o l y d e r ( p )>> c = p o l y d e r ( a , b ) % d e r i v a d a d e l p r o d u c t o>> [ q , d ] = p o l y d e r ( a , b ) % d e r i v a d a s de l a d i v i s i o n

Residuos de un polinomio:

>> b = [−4 8 ] ; a = [ 1 6 8 ] ;>> [ r , p , k ] = r e s i d u e ( b , a )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 194/215

Page 500: Simulink Tutorial Completo

Practicas regresiones basadas mınimos cuadrados, Cscript2.m (I)

Datos para la regresion:

>> t = [ 0 . 3 . 8 1 . 1 1 . 6 2 . 3 ] ’ ; y = [ 0 . 5 0 . 8 2 1 . 1 4 1 . 2 51 . 3 5 1 . 4 0 ] ’ ;

>> p l o t ( t , y , ’ o ’ ) , g r i d on ;

Regresion, y = a(0) + a(1) ∗ t + a(2) ∗ t2:

>> X= [ ones ( s i z e ( t ) ) , t , t . ˆ 2 ] ; a= X\y ;>> t h a t = ( 0 : 0 . 1 : 2 . 5 ) ’ ; yhat = [ ones ( s i z e ( t h a t ) ) t h a t

t h a t . ˆ 2 ] ∗ a ;>> p l o t ( that , yhat , ’− ’ , t , y , ’ o ’ ) , g r i d on ;

Solucion: a = inv(X ′ ∗ X ) ∗ X ′ ∗ yRegresion exponencial: y = a(0) + a(1) ∗ exp(−t) + a(2) ∗ t ∗ exp(−t):

>> X = [ ones ( s i z e ( t ) ) exp(− t ) t .∗ exp(− t ) ] ; a = X\y ;>> t h a t = ( 0 : 0 . 1 : 2 . 5 ) ’ ;>> yhat = [ ones ( s i z e ( t h a t ) ) exp(− t h a t ) t h a t .∗ exp(− t h a t )

]∗ a ;>> f i g u r e ; p l o t ( that , yhat , ’− ’ , t , y , ’ o ’ ) , g r i d on ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 195/215

Practicas regresiones basadas mınimos cuadrados, Cscript2.m (II)

Regresiones multiples: y = a(0) + a(1) ∗ x1 + a2 ∗ x2:

>> x1 = [ . 2 . 5 . 6 . 8 1 . 0 1 . 1 ] ’ ; x2 = [ . 1 . 3 . 4 . 9 1 . 11 . 4 ] ’ ;

>> y = [ . 1 7 . 2 6 . 2 8 . 2 3 . 2 7 . 2 4 ] ’ ;>> X = [ ones ( s i z e ( x1 ) ) x1 x2 ] ; a = X\y ;

y estimada y error maximo:

>> yhat = X∗a ; MaxErr = max ( abs ( yhat − y ) )

Obtencion de los coeficientes de un polinomio que se aproxime:

>> x = [ 1 2 3 4 5 ] ; y = [ 5 . 5 4 3 . 1 128 2 9 0 . 7 4 9 8 . 4 ] ;>> p = p o l y f i t ( x , y , 3 )>> x2 = 1 : . 1 : 5 ; y2 = p o l y v a l ( p , x2 ) ;>> p l o t ( x , y , ’ o ’ , x2 , y2 ) ; g r i d on

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 196/215

Page 501: Simulink Tutorial Completo

Ejercicios de polinomios y regresion

Sea x un vector aleatorio uniforme de 1000 componentes. Comprobar enun fichero “script” de nombre Iejer1.m que la convolucion de ese vectorcon el polinomio [1, 1, 1]/3 da el mismo resultado que la senal obtenidacon y= filter([1,1,1]/3,1,x). Dar una explicacion a este hecho.

En un fichero “script” de nombre Iejer2.m realizar el siguiente ejercicio.Sea t un intervalo de tiempo entre [0, 3] con un periodo de muestreo de0,1 s y n un vector aleatorio de distribucion uniforme entre [0, 1] delmismo numero de elementos.

Fijar un valor para los parametros [a, b, c].Obtener el valor de y de la formula y = a + b ∗ x + c ∗ x2 + 0,1 ∗ n.Estimar el valor de los parametros [a, b, c] a partir de la funcion polyfit

y con mınimos cuadrados.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 197/215

Funciones para interpolar datos, splines

Funcion Comentario

interp1 Interpolacion en una dimension

inter2, inter3 Interpolacion en dos y tres dimensiones

interpft Interpolacion una dimension fft.

mkpp Compone un spline a partir de propiedades

spline Genera splines cubicos

pchip Genera splines cubico de Hermite

ppval Valor de un spline en puntos

unmkpp Propiedades de un spline

mmppint, mmppder Spline integral y derivada

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 198/215

Page 502: Simulink Tutorial Completo

Practicas con funciones para interpolar datos

Interpolacion de datos en una dimension por distintos metodos:

>> x = [ 1 2 3 4 5 ] ; y = [ 5 . 5 4 3 . 1 128 2 9 0 . 7 4 9 8 . 4 ] ;>> s= i n t e r p 1 ( x , y , 2 . 5 , ’ l i n e a r ’ )>> s= i n t e r p 1 ( x , y , 2 . 5 , ’ c u b i c ’ )>> s= i n t e r p 1 ( x , y , 2 . 5 , ’ s p l i n e ’ )>> s= i n t e r p 1 ( x , y , 2 . 5 , ’ n e a r e s t ’ )>> xhat= l i n s p a c e ( 1 , 5 , 1 0 0 ) ’ ;>> yhat= i n t e r p 1 ( x , y , xhat , ’ s p l i n e ’ ) ;>> p l o t ( xhat , yhat , ’− ’ , x , y , ’ o ’ ) ;

Interpolacion de datos en dos dimensiones por distintos metodos:

>> [ x , y ] = meshgr id ( −3 : 1 :3 ) ;>> z = peaks ( x , y ) ; s u r f ( x , y , z )>> [ x i , y i ] = meshgr id ( −3 : 0 . 2 5 : 3 ) ;>> z i 1 = i n t e r p 2 ( x , y , z , x i , y i , ’ n e a r e s t ’ ) ;>> s u r f ( x i , y i , z i 1 ) ;>> z i 2 = i n t e r p 2 ( x , y , z , x i , y i , ’ b i l i n e a r ’ ) ;>> s u r f ( x i , y i , z i 2 ) ;>> z i 3 = i n t e r p 2 ( x , y , z , x i , y i , ’ b i c u b i c ’ ) ;>> s u r f ( x i , y i , z i 1 ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 199/215

Practicas splines, Cscript3.m (I)

Datos:

>> x= 0 : 1 2 ; y= tan ( p i ∗x /25) ;>> x i= l i n s p a c e ( 0 , 1 2 , 1 0 0 ) ;

Interpola datos:

>> yp= s p l i n e ( x , y , x i ) ;>> p l o t ( x , y , ’ o ’ , x i , yp ) ;

Genera los coeficientes de spline, interpola y propiedades:

>> pp= s p l i n e ( x , y )>> yp= p p v a l ( pp , x i ) ;>> [ break , c o e f s , n p o l y s , n c o e f s , dim]= unmkpp ( pp )>> pp= mkpp ( breaks , c o e f s ) % c o m p o s i c i o n

Spline con el metodo de Hermite:

>> x = [ 0 , 2 , 4 , 5 , 7 . 5 , 1 0 ] ; y= exp(−x /6) .∗ cos ( x ) ;>> ch= p c h i p ( x , y ) ; ych= p p v a l ( ch , x i ) ;>> p l o t ( x , y , ’ o ’ , x i , yp , ’ : ’ , x i , ych ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 200/215

Page 503: Simulink Tutorial Completo

Practicas splines, Cscript3.m (II)

Spline integral y derivada de otro:

>> p p i= mmppint ( pp ) ; ppd= mmppder ( pp ) ;>> y i= p p v a l ( ppi , x i ) ; yd= p p v a l ( ppd , x i ) ;>> p l o t ( x , y , ’ o ’ , x i , yp , ’− ’ , x i , y i , ’−− ’ , x i , yd , ’

−. ’ ) ;

Splines para dos dimensiones:

>> t= l i n s p a c e (0 , 3∗ pi , 1 5 ) ;>> x= s q r t ( t ) .∗ cos ( t ) ; y= s q r t ( t ) .∗ s i n ( t ) ;>> ppxy= s p l i n e ( t , [ x ; y ] )>> t i= l i n s p a c e ( 0 , 3∗ pi , 1000) ;>> xy= p p v a l ( ppxy , t i ) ;>> p l o t ( x , y , ’ d ’ , xy ( 1 , : ) , xy ( 2 , : ) ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 201/215

Funciones para interpolar superficies e hiperplanos

Funcion Comentario

meshgrid Mallado de dos o tres dimensiones

ndgrid Mallado de dimension n

surf, mesh Dibuja superficies y mallados

slide Dibuja cortes dentro de un volumen

griddata Interpolacion una superficie

griddata3 Interpolacion una hipersuperficie, datos orden 3

griddatan Interpolacion una hipersuperficie, datos orden n

interpn Interpolacion en n dimensiones

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 202/215

Page 504: Simulink Tutorial Completo

Practicas para interpolar superficies e hiperplanos, Cscript5.m

Datos X ,Y reales e interpolados:

>> x1 = −2 : 0 . 2 : 2 ; x2 = −2 : 0 . 2 5 : 2 ;>> [ X1 , X2 ] = n d g r i d ( x1 , x2 ) ;>> x i 1 = −2 : 0 . 1 : 2 ; x i 2 = −2 : 0 . 1 : 2 ;>> [ Xi1 , Xi2 ] = n d g r i d ( x i 1 , x i 2 ) ;

Z real e interpolada:

>> Z = X2 .∗ exp(−X1 . ˆ 2 −X2 . ˆ 2 ) ;>> Zi = g r i d d a t a (X1 , X2 , Z , Xi1 , Xi2 )>> s u b p l o t ( 2 , 1 , 1 ) ; mesh (X1 , X2 , Z) ;>> s u b p l o t ( 2 , 1 , 2 ) ; mesh ( Xi1 , Xi2 , Z i ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 203/215

Practicas de interpolacion de datos.

Representar en un “script” de nombre Iejer3.m la diferencia entre elpolinomio interpolador cubico hermitiano a trozos y el polinomiointerpolador spline cuando x y t varıan entre −3 y 3 (t varia entre decimay decima) y x = [−1,−1,−1, 0, 1, 1].

Se considera un conjunto de temperaturas medidas sobre las cabezas delos cilindros de un motor que se encuentra en perıodo de pruebas parautilizar en coches de carreras. Los tiempos de funcionamiento del motoren segundos y las temperaturas en grados Fahrenheit son las siguientes:

Tiempo = [0, 1, 2, 3, 4, 5]Temperaturas = [0, 20, 60, 68, 77, 110]

Realizar una regresion lineal en un fichero Iejer4.m que ajuste lastemperaturas en funcion de los tiempos. Realizar tambien el ajustemediante regresiones polinomicas de grados 2, 3 y 4 representando losresultados.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 204/215

Page 505: Simulink Tutorial Completo

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 205/215

Funciones de optimizacion e integracion

Funcion Comentario

fplot Dibuja la funcion

fminbnd Minimiza funcion con una variable con restricciones

fminsearch Minimiza funcion con varias variables

fzero Encuentra el cero en funcion con una variable

optimset, optimget Parametros de resolucion

quad Integracion numerica, Simpson

quadl Integracion numerica, Lobatto

dblquad Integracion numerica, doble integral

triplequad integracion numerica, triple integral

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 206/215

Page 506: Simulink Tutorial Completo

Practicas funciones de optimizacion, Dscript1.m (I)

Parametros de la optimizacion:

>> h e l p o p t i m s e t

Funcion definida como anonima (version 7):

>> humps= @( x ) 1 . / ( ( x − 0 . 3 ) .ˆ2+0.01) +1./(( x−0.9).ˆ2+0.04)−6;

Funcion definida como anonima (versiones anteriores):

>> humps= i n l i n e ( ’ 1 . / ( ( x − 0 . 3 ) .ˆ2+0.01) +1./(( x−0.9).ˆ2+0.04)−6 ’ ) ;

Entradas y salida de la funcion, representacion:

>> x= l i n s p a c e ( − . 5 , 1 . 5 , 1 0 0 ) ; y= humps ( x ) ;>> f p l o t ( humps ,[−5 5 ] ) ; g r i d on ;

Ejemplo de modificacion de parametros (ver valor en cada iteracion):

>> o p t i o n= o p t i m s e t ( ’ D i s p l a y ’ , ’ i t e r ’ ) ; o p t i m g e t

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 207/215

Practicas funciones de optimizacion, Dscript1.m (II)

Algorithmo: Nelder-Mead simplex, x ∈ [0,3 < x < 1], espacio debusqueda de una dimension:

>> x = fminbnd ( humps , 0 . 3 , 1 , o p t i o n ) ;

Espacio de busqueda de varias dimensiones:

>> t v a r= @( x ) x ( 1 ) . ˆ 2 + 2 . 5∗ s i n ( x ( 2 ) ) − x ( 3 ) ˆ2∗ x ( 1 ) ˆ2∗x ( 2 ) ˆ 2 ;

Mınimo cercano a v , valor desde donde se empieza a buscar:

>> v = [−0.6 −1.2 0 . 1 3 5 ] ;>> [ vmin , v a l u e s , f l a g , output ] = f m i n s e a r c h ( t v a r , v )

Punto f (x) = sin(3 ∗ x) = 0 cercano a x = 2, donde se empieza a buscar:

>> x = f z e r o (@( x ) s i n (3∗ x ) , 2 )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 208/215

Page 507: Simulink Tutorial Completo

Practicas funciones de optimizacion, Dscript1.m (III)

Funcion de control del algoritmo:

>> o p t i o n s = o p t i m s e t ( ’ OutputFcn ’ , @outfun ) ;

Forma de la funcion de control, saca graficos en cada iteracion:

f u n c t i o n s t o p = o u t f u n ( x , o p t v a l , s t a t e )% o p t v a l campos : funcount , f v a l , i n t e r a t i o n , p r o c e d u r e% s t a t e : ’ i n i t ’ , ’ i n t e r r u p t ’ , ’ i t e r ’ , ’ done ’% s t o p : f a l s e , t r u e

s t o p = [ ] ; h o l d on ;p l o t ( x ( 1 ) , x ( 2 ) , ’ . ’ ) ;drawnow

Prueba con la minimizacion anterior:

>> v = [−0.6 −1.2 0 . 1 3 5 ] ; % Empieza a b u s c a r en v>> [ vmin , v a l u e s , f l a g , output ] = f m i n s e a r c h ( t v a r , v ,

o p t i o n s )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 209/215

Practicas funciones de integracion, Dscript1.m

Integral simple:

>> quad ( humps , −1, 2) %I n t e g r a c i o n s i m p l e>> q u a d l ( humps , −1, 2) %I n t e g r a c i o n , mayor e x a c t i t u d

Integral doble:

>> out= @( x , y ) y∗ s i n ( x ) + x∗ cos ( y ) ;>> xmin= p i ; xmax= 2∗ p i ; ymin= 0 ; ymax= p i ;>> r e s u l t = dblquad ( out , xmin , xmax , ymin , ymax )

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 210/215

Page 508: Simulink Tutorial Completo

Optimizacion con restricciones: Funciones peso

Restriccion del problema: mınxf (x), g(x) > 0,

if g(x) < 0, cost = f (x),else cost = f (x) ∗ P(g(x)), P(g(x)) > 0.

Problema minimax: mınxmaxf [f1(x), . . . , fn(x)],

cost = max([f1(x), . . . , fn(x)]).

Sistema de ecuaciones no lineales: f1(x) = 0, . . . , fn(x) = 0:

cost = max(abs([f1(x), . . . , fn(x)])).

Problema multiobjetivo: mınx [f1(x), . . . , fn(x)].

cost =∑

i pi ∗ fi (x).

La solucion depende de los pi elegidos.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 211/215

Practicas con funciones de optimizacion (I)

Minimizar la funcion f (x) = (x − 3)2 − 1 en el intervalo (0, 5).

Encontrar el valor de x que minimiza el valor maximo de [f1(x), . . . , f5(x)],

f1(x) = 2x21 + x2

2 − 48 ∗ x1 − 40x2 + 304f2(x) = −x2

2 − 3x22

f3(x) = x1 + 2x2 − 18f4(x) = −x1 − x2

f5(x) = x1 + x2 − 8

Minimizar la funcion siguiente f (x) = 3x21 + 2x1 ∗ x2

2 .

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 212/215

Page 509: Simulink Tutorial Completo

Practicas con funciones de optimizacion (II)

Encontrar en un fichero “script” de nombre Jejer1.m los valores de xque minimizan la funcion f (x) sujeta a las restricciones k1(x ,w1) yk2(x ,w2 con w1 y w2 en [1, 100]. La funcion y las restricciones se definenen el problema y el punto inicial es (0,5, 0,2, 0,3),

f (x) = (x1 − 0,5)2 + (x2 − 0,5)2 + (x2 − 0,5)2

k(x ,w1) = sin(w1x1) cos(w2x2)− 1/100(w1 − 50)2 − sin(w1x3)− x3 ≤ 1k(x ,w2) = sin(w2x2) cos(w2x1)− 1/100(w2 − 50)2 − sin(w2x3)− x3 ≤ 1

Dado el conjunto de datos:

xdata = [3,6, 7,7, 9,3, 4,1, 8,6, 2,8, 1,3, 7,9, 10,0, 5,4]ydata = [16,5, 150,6, 263,1, 24,7, 208,5, 9,9, 2,7, 163,9, 325,0, 54,3]

se trata de encontrar los coeficientes x que minimizan la funcion ydata(i)del tipo,

ydata(i) = x(1)xdata(i)2 + x(2) sin(xdata(i)) + x(3)xdata(i)2

Los resultados se escribiran en un fichero “script” de nombre Jejer2.m.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 213/215

Contenidos

1 Introduccion

2 Programacion con Matlab

3 Optimizacion del codigo de programacion

4 Graficas en dos y tres dimensiones

5 Programacion orientada a objetos

6 Simulacion en Matlab y Simulink

7 GUIDE: Interface grafico de matlab

8 Funciones para tratamiento de datos

9 Funciones para algebra de matrices

10 Filtros y analisis en frecuencia

11 Funciones para polinomios e interpolacion de datos

12 Funciones de funciones: Optimizacion e integracion

13 Bibliografıa

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 214/215

Page 510: Simulink Tutorial Completo

Bibliografıa

Matlab y sus aplicaciones en la ciencia y la ingenierıa, (Cesar Perez).Prentice Hall.

Mastering Matlab 7, (Duane Hanselman, Bruce Littlefield). Prentice Hall,Internaltional Edition.

A. Herreros, E. Baeyens, DISA/EII (UVa) Curso de Programacion en Matlab y Simulink Curso 2010/2011 215/215