Simulink Tutorial Completo

July 5, 2018 | Author: Gonzalo1959 | Category: Multiplication, Quotation Mark, Simulation, Matlab, Point And Click
Share Embed Donate


Short Description

Download Simulink Tutorial Completo...

Description

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

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), ZeroPole (Transferencia Muerto en la forma de zeros y polos)

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

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.

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

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

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 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

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 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

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 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

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”.

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 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.

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. Mach

193

Figura 10.23. Diagrama de bloques del sistema de la Práctica 1 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

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

Mach

196

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

Mach

197

Figura 10.26 Diagrama de bloques del sistema de la Práctica 3 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.

Mach

199

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

Mach

200

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

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

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 “TiempoLaplace”; 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

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

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 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 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.

Mach

207

Figura 10.38 Subsistema “Tiempo – Laplace”

Figura 10.39 Subsistema “Dominio del Tiempo”

Mach

208

Figura 10.40 Subsistema “Dominio Laplace”

Figura 10.41 Subsistema “Salida”

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 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”

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.

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:

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)

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(' ') 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 = '); 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(' ') 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(' ') 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(' ')

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 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 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(' ') 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 | S3 | R3 | D v d s p h

star plus dashed x-mark dashdot circle dotted point solid triangle (up) triangle (left) triangle (right) triangle (down) diamond square pentagram hexagram

• 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.

Pág 16

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

• Funciones asociadas a plot: loglog semilogx semilogy polar zoom grid subplot plotedit legend title xlabel ylabel text gtext

Log log scale plot. Semi log scale plot. Semi log scale plot. Polar coordinate plot. Zoom in and out on a 2 D plot. Grid lines. Create axes in tiled positions. Tools for editing and annotating plots. Graph legend. Graph title. X axis label. Y axis label. Text annotation. 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 clf close subplot cla axis hold ishold line text Pág 17

Create figure window. Clear current figure. Close figure. Create axes in tiled positions. Clear current axes. Control axis scaling and appearance. Hold current graph. Return hold state. Create line. Create text.

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

surface image set get drawnow

Create surface. Create image. Set object properties. Get object properties. 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:

Pág 18

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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’) Pág 19

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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: Ejemplo funcion seno 1

seno

0.5 0 -0.5 -1

0

2

4

6

0

2

4

6

8

10 12 14 tiempo Ejemplo funcion coseno

16

18

20

16

18

20

1

coseno

0.5 0 -0.5 -1

8

10 tiempo

12

14

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

Pág 20

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

• 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 Pág 21

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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

Pág 22

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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: 3a − b + c − 2 = 0 5a + 2b + 3c − 1 = 0 − a + 5b − 2c − 5 = 0

3 − 1 1 - 2  2 3 - 1 S = 5 - 1 5 - 2 - 5

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 Pág 23

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

[n_sol, a]=size(sol); end

%retorno del resultado

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=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

Pág 24

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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

Pág 25

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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

Pág 26

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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

Pág 27

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

• 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.

Pág 28

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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 Denominator

[1 2] [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

Pág 29

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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 Pág 30

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

• 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

Pág 31

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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:

Pág 32

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

Desde MATLAB:

>>plot(tout, Salida); o >>plot(tiempo, Salida);

Pág 33

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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?

Pág 34

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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 Pág 35

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

FUNCIÓN DE TRANSFERENCIA • El formato Función de Transferencia (FT) corresponde con representaciones del siguiente tipo: H(s) =

num(s) a1 * sm -1 + a 2 * s m - 2 + ... + a ns m -n = den(s) b1 * s j−1 + b 2 * s j- 2 + ... + b t * s j- t

• ¿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: 3s 2 + 2s + 1 H(s) = 2 (s + 4s + 1)(s + 5)

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: H(s) = k

Pág 36

(s - z1 )(s - z 2 )(s - z 3 )...(s - z n ) (s - p1 )(s - p 2 )(s - p 3 )...(s - p n )

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

• ¿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 ceropolo: H(s) = 4

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

Mediante un fichero script: K=4; Z=[-1 –2]; P=[-3 –4 –5];

%constante del sistema %ceros del sistema %polos del sistema

CONVERSIÓN ENTRE FORMATOS • Las siguientes funciones permiten realizar conversiones entre los distintos formatos de representación de sistemas residue roots poly conv tf2zp zp2tf c2dm, d2c printsys

Pág 37

Expansión en fracciones parciales Obtiene las raíces de un polinomio Obtiene un polinomio desde sus raíces Permite multiplicar polinomios De FT a formato polo–cero De formato polo–cero a FT Conversión entre el mundo discreto y el continuo Imprime la función de transferencia de un sistema

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

Ejemplo: Transformar de formato función de transferencia a formato polo cero la siguiente función: N (s) 20( s + 10)( s 3 + 1) G( s) = = D( s ) s ( s + 2) 2 ( s 2 + 10 s + 100)( s 4 + 2 s 3 − 10)

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: ( s + 1)3 H ( s) = ( s + 4)( s + 3) 2 ( s 4 + s 3 + s 2 + 2)

Pág 38

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

En MATLAB: Z=[-1; -1; -1 ]; D1=roots([1 5 2]); B=[1 3]; D2=roots(conv(B,B)); P=[4; D2; D1]; k=1; [NUM,DEN]=zp2tf(Z,P,k);

%(s+1)^3 %Obtención de las raíces de (s^2+5s+2) %(s+3)^2

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 feedback series parallel

Pág 39

Cierra el lazo realimentación unitaria Conexión mediante realimentación Conexión en serie de modelos Conexión en paralelo de sistemas

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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

Step Input

+ Sum

+ Sum1

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

Auto-Scale Graph

25 s+10 Transfer Fcn

en MATLAB, de la siguiente forma: [NUM,DEN]=feedback(NUMZP, DENZP, NUMTF,DENTF,-1); [NUM,DEN]=cloop(NUM, DEN,-1);

Pág 40

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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 impulse lsim ginput damp dcgain

Respuesta a un escalón Respuesta a un impulso Entrada aleatoria Averiguar valores de un determinado punto de la gráfica Permite obtener ωn y ξ 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

Pág 41

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

Ejemplo: Dado el siguiente sistema determinar su respuesta al impulso y al escalón: H ( s) =

1 s +1

La respuesta al impulso se obtendrá mediante el siguiente comando: >>impulse([1],[1 1]); Impulse Response

1 0.9 0.8

Amplitude

0.7 0.6 0.5 0.4 0.3 0.2 0.1 0

Pág 42

0

1

2

3 Time (sec)

4

5

6

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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

1 0.9 0.8

Amplitude

0.7 0.6 0.5 0.4 0.3 0.2 0.1 0

Pág 43

0

1

2

3 Time (sec)

4

5

6

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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 rlocus rlocfind pzmap sgrid

Trazado del Lugar de las Raíces (para ss. continuos y discretos) Identificación concreta de un punto del lugar Representación del diagrama de polos y ceros Red de obtener ωn y ξ en el plano ‘s’

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: s+13

K

s+10

Gain

Transfer Fcn

1 s2 +1.5s+8 Transfer Fcn1

Pág 44

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

Para resolverlo se ejecuta desde MATLAB el siguiente conjunto de comandos: NUMG=[1 13] DENG=[1 10] NUMH=[1] DENH=[1 1.5 8] N=conv(NUMG,NUMH) D=conv(DENG,DENH) rlocus(N,D) sgrid

%Numerador de G(s) %Denominador de G(s) %Numerador de H(s) %Denominador de H(s) %Numerador de G(s)H(s) %Denominador de G(s)H(s)

Root Locus 40

30

0.28

0.19

0.135

0.095

0.06

0.03

40 35 30

0.4

25 20

20

15 0.7

10

10 Imag Axis

5 0 5 -10

10

0.7

15 -20

20 25

-30

-40

0.4

30 0.28 -12

0.19 -10

-8

0.135 -6

0.095 -4

0.06 -2

0.03

35 40 0

Real Axis

Pág 45

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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)

Pág 46

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

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: 20

15

10

5

0

-5

Pág 47

0

2

4

6

8

10

12

14

16

18

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

20

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

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

Pág 48

Laboratorio de Sistemas Electrónicos de Control Continuo I.T.T Sistemas Electrónicos

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

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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.

9.

AYUDA................................................................................................................................ 22 8.1.

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

8.2.

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

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

2

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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. 3

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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) acos(x)1

Valor absoluto de x. Si x es un número complejo, abs(x) nos da su módulo 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)

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.

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

raíz cuadrada de x

angle (x)

ángulo de x

real(x)

parte real de x

imag(x)

parte imaginaria de x

1

MATLAB trabaja únicamente en radianes.

4

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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 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

5

como unidad imaginaria

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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 . 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.

6

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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.

7

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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))

8

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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 < p. 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

9

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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 En este caso, el incremento no es 1 sino que es fijado por nosotros Crea un vector empezando en primero, acabando en ultimo, con n elementos Crea un vector logarítmico

X=primero:incremento:ultimo X=linspace(primero, ultimo,n) X=logspace(primero, ultimo,n)

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

10

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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:

11

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

» 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)

1 0.5 0 -0.5 -1

0

1

2

3

4

5

6

7

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

12

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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ínea

b

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

13

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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:

14

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

Representación de las funciones seno y coseno

1.5

1 s et n ei d n e p e d s el b ai r a v

0.5

cos(x)

sen(x)

0

-0.5 -1

-1.5

variable Z variable Y 0

1

2

3 4 variable independiente

Fig 4. Edición de figuras en MATLAB

15

5

6

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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] );

F ( s) =

nos definiría

1+ S 3× S + 2× S + 5 2

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 5

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

16

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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:

F ( s) =

0.1667 - j 0.0891 0.1667 + j 0.0891 + S + 0.3333 - j 1.2472 S + 0.3333 + j 1.2472

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

17

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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) 1.5

1 0.5 si x A g a m I

0

-0.5 -1

-1.5 -4

-3

-2

-1

0

1

Real 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 x y wn

» wn=1:10; » sgrid(zeta,wn)

% Nos muestra rectas de pendiente zeta y % circunferencias de radio wn

» zoom

18

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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 Simplifica la función de transferencia de sistema

minreal(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.

19

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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:

Funciones de transferencia

Fig 6. Pantalla del LTIVIEW Tipo de gráfica

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.

20

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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

21

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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.

22

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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:

23

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

Fig 9. Contenido de la librería Linear

9.2. Construcción del modelo Supongamos que se tiene el siguiente sistema de control: ref

S +1 S + 3·S + 5

10 _

Fig 10. Diagrama de bloques del sistema de control

24

Salida

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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.

25

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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

26

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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:

27

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

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 F ( s ) =

Y ( s) salida . = U ( s ) entrada

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 28

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

>> [num,den]=ss2tf (A,B,C,D); Ejemplo:Intentaremos modelar el siguiente sistema térmico:

1 3 2

Datos: Potencia inyectada en bloque 3 Temperatura controlada en bloque 3 C1= 2 min kW / ºC

C2= 2.5 min kW / ºC

R13 = 7.5 ºC / kW

R23 = 10 ºC / kW

Las ecuaciones que nos describen este sistema son:

Pg ( s ) = C3 ·T3 ( s )·s +

C3= 3.5 min kW / ºC R30 = 15 ºC / kW 6

1 1 1 ·(T3 ( s ) - T2 ( s )) + ·(T3 ( s ) - T1 ( s )) + ·(T3 ( s ) - T0 ( s )) R32 R31 R30

1 ·(T3 ( s ) - T1 ( s )) = C1·T1 ( s )·s R31 1 ·(T3 ( s ) - T2 ( s )) = C2 ·T2 ( s )·s R32 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

29

UPCo ICAI - DEA

MATLAB & SIMULINK Manual de referencia

[T3] 1

1/15

s

[T1]

1/60

[T1]

[T3] 1/25 [T2]

1 s

1/60

[T2]

[T3] 1/7.5 [T1]

[T3] 1

1/10

Out

[T2]

1/3. [T3]

1/15

1/60

1 s

[T3]

1 In

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:

T3 ( s ) 0.004762·S 2 + 8.466·10 -6 ·S + 3.527·10-9 = 3 (en segundos) Pg ( s ) S + 0.0032·S 2 + 2.257310 - 6 ·S + 2.352·10-10 30

UPCo ICAI - DEA

Una vez modelado el sistema,

MATLAB & SIMULINK Manual de referencia

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.

31

Introducci´ on a Matlab y Simulink Regulaci´ on Autom´ atica Ingeniero en Electr´onica. Curso 2006/2007. Javier Aracil y Fabio G´omez–Estern

1.

Introducci´ on

Matlab es un programa de gran aceptaci´on en ingenier´ıa destinado realizar c´alculos t´ecnicos cient´ıficos y de prop´osito general. En ´el se integran operaciones de c´alculo, visualizaci´on y programaci´on, donde la interacci´on con el usuario emplea una notaci´on matem´atica cl´asica. Los usos y aplicaciones t´ıpicos de Matlab son: Matem´aticas y c´alculo. Desarrollo de algoritmos. Adquisici´on de datos. Modelado, simulaci´on y prototipado. An´alisis y procesado de datos. Gr´aficos cient´ıficos y de ingenier´ıa. Desarrollo de aplicaciones. El tipo b´asico de variable con el que trabaja Matlab es una matriz que no requiere ser dimensionada previamente en la declaraci´on. Una de las caracter´ısticas m´as interesantes consiste en que el a´lgebra vectorial y matricial se expresa con la misma sintaxis que las operaciones aritm´eticas escalares. Por ejemplo, en lenguaje C, para realizar la suma 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

2.

Componentes de Matlab Matlab consta de cinco partes fundamentales:

1. Entorno de desarrollo. Se trata de un conjunto de utilidades que permiten el uso de funciones Matlab y ficheros en general. Muchas de estas utilidades son interfaces gr´aficas de usuario. Incluye el espacio de trabajo Matlab y la ventana de comandos. 2. La librer´ıa de funciones matem´ aticas Matlab. Se trata de un amplio conjunto de algoritmos de c´alculo, comprendiendo las funciones m´as elementales como la suma, senos y cosenos o la aritm´etica compleja, hasta funciones m´as sofisticadas como la inversi´on de matrices, el c´alculo de autovalores, funciones de Bessel y transformadas r´apidas de Fourier. 3. Gr´ aficos. Matlab dispone de un conjunto de utilidades destinadas a visualizar vectores y matrices en forma de gr´aficos. Existe una gran cantidad de posibilidades para ajustar el aspecto de los gr´aficos, destacando la visualizaci´on tridimensional con opciones de iluminaci´on y sombreado, y la posibilidad de crear animaciones. 4. El interfaz de aplicaci´ on de Matlab (API). Consiste en una librer´ıa que permite escribir programas ejecutables independientes en C y otros lenguajes, accediendo, mediante DLLs, a las utilidades de c´alculo matricial de Matlab.

De estos cuatro puntos, en este cap´ıtulo trataremos, de forma somera, los dos primeros. Los ejemplos que se presentan en este texto, se han desarrollado para la versi´on de Matlab 7.0. ellos no impide que puedan funcionar con otras versiones del programa. Concretamente, para la versi´on 6.5 y posteriores est´a pr´acticamente garantizado el funcionamiento. Sin embargo, hay que se˜ nalar que algunos complementos de Matlab no aparecen incluidos en la instalaci´on b´asica del mismo, por tanto un programa que funciona en un ordenador con la versi´on 7.0 instalada, puede fallar en otro ordenador con la misma versi´on. La gesti´on de complementos de Matlab se realiza mediante lo que se denominan toolboxes (paquetes de herramientas). Un Toolbox de Matlab es un conjunto de funciones y algoritmos de c´alculo especializados en un a´rea de conocimiento: finanzas, tratamiento de se˜ nales, teor´ıa de sistemas, etc. Para el desarrollo del curso es necesario 2

tener instalado, aparte del sistema b´asico de Matlab, el denominado Control System Toolbox.

3.

Simulink

Simulink es una aplicaci´on que permite construir y simular modelos de sistemas f´ısicos y sistemas de control mediante diagramas de bloques. El comportamiento de dichos sistemas se define mediante funciones de transferencia, operaciones matem´aticas, elementos de Matlab y se˜ nales predefinidas de todo tipo. Simulink dispone de una serie de utilidades que facilitan la visualizaci´on, an´alisis y guardado de los resultados de simulaci´on. Simulink se emplea profusamente en ingenier´ıa de control. En el presente curso trabajaremos con la versi´on 6.0, que viene incluida en el paquete de Matlab 7.0. Su instalaci´on es opcional, por tanto debemos seleccionar la opci´on correspondiente al instalar el programa

4. 4.1.

El entorno de trabajo de Matlab Ayuda en l´ınea

Si se ha seleccionado la la opci´on correspondiente en la instalaci´on de Matlab, podremos acceder a la ayuda en l´ınea en todo momento pulsando la tecla F1. Dicha documentaci´on est´a organizada con un ´ındice en forma de a´rbol y mediante herramientas de navegaci´on como hiperv´ınculos. Es sumamente recomendable su uso, tanto a modo de introducci´on como de referencia para temas espec´ıficos. Si se desea conocer la documentaci´on espec´ıfica asociada a un comando de Matlab, entonces se teclear´a >> doc nombre_comando en la l´ınea de comandos de Matlab.

3

4.2.

Organizaci´ on de ventanas

La figura 1 muestra la organizaci´on por defecto de ventanas que nos encontramos cuando arrancamos Matlab por primera vez. Las ventanas que en ella aparecen, de arriba a abajo son: en la parte izquierda, la estructura del directorio donde nos encontramos, y debajo de ella la historia de los comandos que se han tecleado en el pasado; en la mitad derecha nos encontramos, arriba, la ventana de edici´on de programas Matlab (que se escriben en un lenguaje propio de Matlab y se almacenan en ficheros .m), y debajo la l´ınea de comandos, donde se sit´ ua 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 b´ asicas en l´ınea de comandos

Como se ha dicho previamente, en Matlab todos los objetos son matrices. Un escalar no es m´as que una matriz 1 × 1. En la l´ınea de comandos, podemos asignar un nombre simb´olico para identificar una matriz. >> a=[10; 20; -15];

% Asignacion

Esto es una asignaci´on de un vector de columna que llevar´a el nombre a. A su derecha aparece un comentario, que tiene su utilidad cuando redactemos programas en 4

Matlab. Los objetos pueden crearse en cualquier momento. Para ello basta con asignarles un valor mediante una asignaci´on, como en el ejemplo previo. Los identificadores empleados para designar matrices son de libre elecci´on, con la salvedad de que no pueden comenzar por un n´ umero, ni contener espacios en blanco. Una vez creado un objeto de Matlab, ´este pasa a formar parte del espacio de trabajo ocupando una porci´on la memoria. Por tanto, a veces, tras horas de trabajo con Matlab, necesitaremos eliminar los objetos que ya no se utilicen. Para ello se emplea el 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´ımbolo sirve para separar unos comandos de otros. Por ejemplo, cuando escribimos varios comandos en una sola l´ınea, estos deben aparecer separados por punto y coma. Adem´as, si escribimos un comando aislado (sin ‘;’) y pulsamos ENTER, Matlab proporcionar´a 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 mostrar´a en pantalla la respuesta. Cuando los comandos forman parte de un programa es conveniente emplear ‘;’ para evitar desbordar la pantalla con informaci´on innecesaria.

4.4.

Sintaxis de vectores y matrices

Las matrices (y vectores como caso particular de las mismas) se expresan en Matlab empleando corchetes ([ ]); separando las filas por espacios o comas (,) y las columnas por ‘;’. De este modo, se puede crear un objeto matriz del siguiente modo: >> mat=[1 2 3; 4 5 6; 7 8 9] 5

mat = 1 4 7

2 5 8

3 6 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 u ´ltimo caso se emplea 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 especificando la fila y columna del elemento que nos interesa entre par´entesis >> mat(2,3) ans = 6 Adem´as, dentro de estos par´entesis podemos indicar variables u operaciones m´as complejas, lo que da una gran potencia al desarrollo de algoritmos. Una vez definidos los objetos con sus identificadores, podemos realizar operaciones aritm´eticas entre ello con total simplicidad. Para las operaciones vectoriales y matriciales, Matlab verificar´a la coherencia de las dimensiones de los operandos y si no hay producir´a error producir´a 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 6

18.0000

4.5.

Operaciones b´ asicas con Matlab

La siguiente tabla ilustra las b´asicas aritm´eticas y l´ogicas que podemos realizar con Matlab. Expresi´on en Matlab Operaci´on + Suma aritm´ etica Resta aritm´ etica o cambio de signo * Multiplicaci´ on aritm´ etica / Divisi´ on ^ Elevar un n´ umero a una potencia < Relaci´ on "menor que" > Relaci´ on "mayor que" = Relaci´ on "mayor o igual que" == Relaci´ on "igual que" ~= Relaci´ on "distinto que" & producto l´ ogico (operaci´ on ‘‘y’’) | suma l´ ogica (operaci´ on .o") ~ negaci´ on (operaci´ on "no") Cuadro 1: Operaciones aritm´eticas y l´ogicas 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 directamente como una calculadora, para lo cual tecleamos expresiones en l´ınea de comandos para obtener inmediatamente el resultado de las mismas: >> 12*24.8 ans = 297.6000 As´ı mismo se pueden emplear las operaciones dentro de otras expresiones m´as amplias, logrando as´ı escribir expresiones matem´aticas 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 informaci´on, por lo que poseen datos de entrada y de salida, 7

que pueden ser matriciales. Los datos de entrada se especifican entre par´entesis, y si son varios separados por comas. Por ejemplo, la siguiente funci´on calcula la ra´ız cuadrada de su u ´ nico 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 b´asico de Matlab. Entre estas u ´ltimas destacan las siguientes funciones: Nombre sin sinh cos cosh tan tanh cot coth sec sech csc csch asin asinh acos acosh atan atan2

Funci´ on Seno Seno hiperb´olico Coseno Coseno hiperb´olico Tangente Tangente hiperb´olica Cotangente Cotangente hiperb´olica Secante Secante hiperb´olica Cosecante Cosecante hiperb´olica Arcoseno (inversa del seno) Inversa del seno hiperb´olico Arcocoseno (inversa del coseno) Inversa del coseno hiperb´olico Arcotangente (inversa de la tangente) Arcotangente de cuatro cuadrantes Cuadro 2: Funciones elementales de Matlab: Trigonometr´ıa.

Nombre Funci´ on exp Exponencial log Logaritmo natural (base e) log2 Logaritmo en base 2 log10 Logaritmo en base 10 sqrt Ra´ız cuadrada Cuadro 3: Funciones elementales de Matlab: Exponenciales.

8

Nombre Funci´ on fix Redondear hacia cero floor Redondear hacia menos infinito ceil Redondear hacia m´as infinito round Redondear hacia el entero m´as cercano mod M´odulo de la divisi´on entera rem Resto de la divisi´on entera Cuadro 4: Funciones elementales de Matlab: Ajuste y redondeo. Nombre inv det eig ’ eye zeros ones length size

Funci´ on Matriz inversa Determinante Autovalores Matriz traspuesta Crear una matriz identidad dado el n´ umero de filas/columnas Crear una matriz de ceros dado el n´ umero de filas/columnas Crear una matriz de unos dado el n´ umero de filas/columnas Longitud de un vector Dimensiones de una matriz

Cuadro 5: Funciones elementales de Matlab: Operaciones matriciales.

4.7.

Operaciones l´ ogicas

Algunas de las operaciones y funciones presentadas no devuelven un valor num´erico o matricial como resultado. En su lugar, eval´ uan si cierta condici´on es verdadera o falsa. En estos casos, el valor devuelto por la funci´on equivaldr´a a 1 si la condici´on se cumple, y 0 si no. A modo de ejemplo comprobaremos si una variable x se encuentra en un intervalo determinado >> x=5 >> (x>=0)&(x> (x>7)&(x> 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 rango es valor_minimo : incremento : valor_maximo Por ejemplo, para generar todos los n´ umeros entre 1 y 2 en incrementos de 0.2 escribiremos >> a=1:0.2:2 a = 1.0000

1.2000

1.4000

1.6000

1.8000

2.0000

Una segunda aplicaci´on del operador de rango es el acceso a submatrices o subvectores. 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) bastar´a con escribir 10

>> mat(2:3,1:2) ans = 4 5 7 8 Adem´as, se puede prescindir de alguno de los extremos de este operador cuando se emplea en el acceso a vectores y matrices. Por ejemplo, si se desea mostrar todos los elementos menos los 3 primeros de un vector: >> a(4:) >> a(4:end) Por otro lado, si lo que deseamos es obtener los 3 u ´ltimos 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 este modo es posible parar una sesi´on de trabajo y continuar en otro momento sin volver a repetir c´alculos. La orden m´as com´ un para almacenar datos es save, que puede usarse de varias maneras. En la tabla siguiente se presenta un resumen. Orden save

Operaci´on realizada. Crea el archivo de nombre matlab.mat en la carpeta actual. Dicho archivo contiene todas las variables que existen en ese momento en entorno Matlab. save nombrearchivo Crea el archivo de nombre en nombrearchivo.mat en la carpeta actual. Dicho archivo contiene todas las variables que existen en ese momento en el entorno Matlab. save nombrearchivo x y z Crea el archivo de nombre nombrearchivo.mat en la carpeta actual. Dicho archivo contiene u ´nicamente las variables x, y y z. Para recuperar las variables almacenadas en un fichero previamente creado emplearemos principalmente la funci´on load. La siguiente tabla ilustra tres operaciones t´ıpicas de recuperaci´on de datos. 11

Orden load

Operaci´on realizada. Lee toda las variables del archivo de nombre matlab.mat de la carpeta actual. Si alguna de las variables del disco tiene nombre coincidente con otra que previamente existe en Matlab se producir´a la destrucci´on de la variable existente para dejar su sitio a la variable del disco. load nombrearchivo Igual que en el caso anterior, pero leyendo del archivo nombrearchivo.mat de la carpeta actual. load nombrearchivo x y z Igual que el anterior pero leyendo u ´nicamente las variables x, y y z.

4.10.

Gr´ aficas en Matlab

Las posibilidades de Matlab a la hora de crear gr´aficos de todo tipo son vast´ısimas. Para tener una visi´on general de ellas se recomienda al lector un recorrido por la ayuda en l´ınea partir del comando >> doc plot En este punto veremos los pasos b´asicos para crear una gr´afica a partir de una tabla de valores (x, y). Concretamente, trazaremos la par´abola de ecuaci´on y = 2x2 + 3x − 1 en el intervalo [−3, 3]. Toda gr´afica de Matlab ha de ser creada a partir de una nube de puntos, que en el caso bidimensional consiste en una serie de valores de las coordenadas x y otra serie del mismo tama˜ no de valores de y. Cada pareja (x,y) formada a partir de ambas series ser´a un punto de la gr´afica. Para ello crearemos dos vectores de igual tama˜ no n. El primer vector ser´a x, para las coordenadas de los puntos, a partir de una divisi´on suficientemente fina del eje de abcisas: >> x=-3:0.1:3; y a continuaci´on creamos el vector y, sabiendo que en el gr´afico el elemento i-´esimo del dicho vector formar´a un punto (x, y) con el elemento i-´esimo del vector x. Por tanto, 12

se ha de crear un vector y de n componentes, seg´ un la f´ormula yi = 2x2i + 3xi − 1

i = 1...n

Esto se obtiene en Matlab con un s´olo comando, sin necesidad de bucles: >> y=2x.^2+3x-1; Obs´ervese el ‘.’ antes de la exponenciaci´on. Esto evita que el t´ermino x^2, al ser x un vector, se calcule como el producto escalar de x por s´ı mismo. Finalmente, creados los vectores, creamos la gr´afica 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 gr´afico de la figura: 30 25 20

Eje y

15 10 5 0 −5 −3

−2

−1

0 Eje x

1

2

3

Figura 2: Gr´afico resultante.

Es muy recomendable consultar la ayuda para conocer las opciones en cuanto a tipos y colores de l´ınea, tratamiento de ejes (comando axis), etiquetado (comandos xlabel, legend, text), etc. 13

5.

Control System Toolbox

El Control System Toolbox es un componente opcional en la instalaci´on de Matlab que consta de una serie de funciones, objetos, bloques Simulink y herramientas destinados a la asistencia en el an´alisis y dise˜ no de sistemas de control. El objeto fundamental con el que trabajaremos es la funci´ on de transferencia. Para ilustrar sus propiedades y el a´lgebra asociada, estudiaremos un ejemplo sencillo de control. Consid´erese el sistema realimentado de la figura 3. Dicho sistema est´a formado por tres bloques independientes: G1 (s), que representa el controlador, G2 (s), que corresponde a la planta a controlar, y G3 (s), la funci´on de transferencia del sensor con el que se mide la salida del sistema. Los valores de las tres funciones son:

1 s + 0,5 3 G2 (s) = 2 s + 2s + 1 40 G3 (s) = 2 s + 5s + 40 Supongamos que deseamos calcular la funci´on de transferencia en bucle cerrado de dicho sistema, y a continuaci´on trazar su diagrama de Bode. Lo primero que debemos conocer es c´omo definir una funci´on de transferencia en el entorno Matlab. G1 (s) =

Un polinomio en s se representa en Matlab como un vector cuyos elementos son los coeficientes del polinomio por orden de exponente descendente: por ejemplo, s2 − 2s + 1 se define en Matlab como el vector [1 − 2 1]. Por tanto, para definir una funci´on de transferencia en Matlab necesitamos dos vectores. A partir de ellos, con la funci´on tf construiremos las funci´on de transferencia del ejemplo: >> G1=tf([1],[1 0.5]); >> G2=tf([3],[1 2 1]); >> G3=tf([40],[1 5 40]); Lo m´as interesante de esos objetos es la posibilidad de realizar operaciones matem´aticas entre ellos. Para ilustrar esto, calcularemos la funci´on de transferencia del sistema realimentado en bucle cerrado, desde la referencia hasta la salida. Sabiendo que dicha funci´on tiene la forma Y (s) G1 (s)G2 (s) Gbc (s) = = , R(s) 1 + G1 (s)G2 (s)G3 (s) teclearemos en Matlab simplemente 14

>> 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 funci´on de transferencia en bucle cerrado Gbc (s), que podr´a ser utilizada a partir de ahora en llamadas a funciones, como las que trazan los diagramas de Bode (funci´on bode) y Nyquist (funci´on nyquist).

r(t) +  e

-@ @ @ @  − 6m

u G1 (s)

-

G3 (s)

y(t) G2 (s)

-



Figura 3: Sistema de Control realimentado

5.1.

Operaciones con polinomios

El Control System Toolbox permite, adem´as de lo explicado, realizar ciertas operaciones con polinomios almacenados en forma de vector, que son muy interesantes dentro de la teor´ıa del control autom´atico. Por ejemplo, podemos calcular el producto de dos polinomios en s mediante la funci´on 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 c´alculo ser´ıa igual al producto de las funciones G1 (s) y G2 (s), que como sabemos, tambi´en se obtendr´ıa, a partir de las definiciones anteriores, 15

escribiendo >> G12=G1*G2 Por otra parte, para obtener las ra´ıces de un polinomio definido en Matlab como un vector, se emplea la funci´on roots: >> roots([1 2 -1 ]) ans = -2.4142 0.4142

5.2.

Herramientas num´ ericas y gr´ aficas

Dada una funci´on de transferencia, ya sea de bucle abierto o cerrado, existen en el Control System Toolbox operaciones num´ericas y gr´aficas de gran utilidad a la hora de analizar la estabilidad y otras propiedades. Algunas de ellas aparecen en la siguiente tabla Comando Operaci´on realizada. evalfr Eval´ ua la magnitud y fase de una funci´on de transferencia en la frecuencia especificada. bode Traza el diagrama logar´ıtmico de Bode de una funci´on de transferencia dada. Adem´as presenta interesantes opciones de visualizaci´on como son los m´argenes de ganancia y fase. nyquist Traza el diagrama de Nyquist de una funci´on de transferencia dada. rlocus Traza el lugar de las ra´ıces al realimentar negativamente con una ganancia K (variable) la funci´on de transferencia dada. margin Calcula, sobre el diagram de Bode, los m´argenes de fase y ganancia de una funci´on de transferencia y las frecuencias de corte. pzmap Muestra en una gr´afica del plano complejo la ubicaci´on de los polos y los ceros de una funci´on de transferencia dada. Como ejemplo, se obtendr´a el diagrama de Bode de la funci´on de transferencia (estable) 1 G(s) = 2 s + 0,1s + 0,5 y se calcular´an los m´argenes de fase y ganancia. Para ello tecleamos

16

>> G1=tf([1],[1 0.1 0.5]) >> bode(G1); >> margin(G1); y el resultado aparece representado en la figura 4. Bode Diagram Gm = Inf dB (at Inf rad/sec) , Pm = 7.02 deg (at 1.22 rad/sec)

40 30 Magnitude (dB)

20 10 0 −10 −20 −30 −40 0

Phase (deg)

−45 −90 −135 −180

−1

0

10

10 Frequency (rad/sec)

1

10

Figura 4: Diagrama logar´ıtmico de Bode.

Por u ´ltimo, volveremos a la funci´on Gb c(s) calculada para analizar su estabilidad. Para ello extraemos su denominador tecleando >> pol=Gbc.den{1} 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

-0.0317 -0.0317 -1.0000 -1.0000 -0.5000

+ + -

1.2049i 1.2049i 0.0000i 0.0000i

Al estar todas las ra´ıces en el semiplano izquierdo, deducimos que el sistema en bucle cerrado es estable. Otro modo de verificar esto es trazando el diagrama polo–cero de Gbc , mediante la instrucci´on pzmap(Gbc). El resultado se muestra en la figura 5. Pole−Zero Map

6

4

0.4

0.28

6 0.2

0.14

0.09

0.04

0.56

5 4 3

Imaginary Axis

2

2

0.8

1 0 1 −2

0.8

2 3

−4

−6 −3

4

0.56 0.4 −2.5

0.28 −2

−1.5 Real Axis

0.2

0.14 −1

0.09

0.04

−0.5

5 60

Figura 5: Diagrama polo–cero de la funci´on de transferencia en bucle cerrado Gbc (s).

6.

El entorno de trabajo de Simulink

Simulink es una herramienta de gran utilidad para la simulaci´on de sistemas din´amicos. Principalmente, se trata de un entorno de trabajo gr´afico, en el que se especifican las partes de un sistema y su interconexi´on en forma de diagrama de bloques. De nuevo, se trata de una herramienta ampl´ısima que adem´as se complementa con numerosos elementos opcionales. Por tanto, nos limitaremos a dar unas pinceladas de los elementos m´as u ´tiles en Regulaci´on Autom´atica. Adem´as de las capacidades de simulaci´on de las que est´a dotado Simulink, conviene destacar que contiene c´omodas utilidades de visualizaci´on y almacenamiento de resultados de simulaci´on. 18

6.1.

Uso de Simulink

En primer lugar, lanzaremos la aplicaci´on escribiendo simulink en la l´ınea de comandos de Matlab, o abriendo desde el Explorador de Windows cualquier fichero con extensi´on .mdl. En el primero de los casos se abrir´a la ventana de la figura 6. Esta

Figura 6: Ventana navegaci´on de bloques de Simulink (Simulink Library Browser). ventana inicial no est´a destinada a crear modelos de simulaci´on; su funci´on principal consiste en navegar por la enorme librer´ıa de bloques disponibles para el modelado. En ella distinguimos dos partes: la izquierda contiene una visi´on en forma de a´rbol de todos los Toolboxes instalados que contienen bloques Simulink. La amplitud de este a´rbol depender´a de las opciones que hayamos activado al seleccionar Matlab. De todos los nodos del a´rbol nos interesan, de momento, los denominados Simulink y Control System Toolbox. Cabe mencionar adem´as, por su inter´es, los bloques Real Time Workshop destinados a generar autom´aticamente c´odigo de control para determinadas plataformas Hardware comerciales. La parte derecha de la ventana de la figura 6 muestra los bloques Simulink contenidos en el Toolbox o nodo de la parte izquierda de la ventana. Estos bloques se deben arrastrar sobre el espacio de trabajo de Simulink para la creaci´on de modelo a simular. Por u ´ltimo, cabe indicar que en la parte superior de la ventana de inicio de Simulink hay varias herramientas como la b´ usqueda de un bloque determinado a partir de su nombre, que nos pueden resultar bastante u ´tiles. 19

6.2.

El espacio de trabajo de Simulink

Si pulsamos en el icono superior izquierdo de la ventana de la figura 6 (p´agina en blanco), se abre una ventana blanca sobre la que iniciaremos la creaci´on de un modelo de simulaci´on. 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 bloques correspondientes. Concretamente realizaremos la simulaci´on del sistema de control representado en la figura 3. En lugar de emplear las definiciones en Matlab de las funciones de transferencia presentadas en el apartado anterior (empleando la funci´on tf), crearemos las funciones de transferencia directamente sobre el diagrama de bloques. En primer lugar, hemos de insertar tres bloques de tipo Funci´on de Transferencia en el modelo. Para ello tecleamos la palabra transfer en el campo de b´ usquedas en la parte superior de la ventana de navegaci´on y el buscador localizar´a el bloque llamado Transfer Fcn, que cuelga del nodo Simulink, como se muestra en la figura 8. Una vez localizado el bloque Transfer Fcn arrastraremos dicho bloque hacia el espacio de trabajo de Simulink. El arrastre de bloques se realiza seleccionando el icono del bloque con el bot´on izquierdo del rat´on, y manteniendo ´este pulsado se desplazar´a el cursor hasta la ventana del modelo. Repetiremos la operaci´on 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 asignamos nombres espec´ıficos (G1,G2 y G3) editando el texto al pie de cada icono, y les damos valores a dichas funciones, para que coincidan con los par´ametros de las funciones G1 (s), G2 (s) y G3 (s) definidas anteriormente. Con este fin, haremos doble click sobre cada bloque de funci´on de transferencia, y 20

Figura 8: Ubicaci´on del bloque Transfer Fcn. en la ventana que se abre en cada caso, introduciremos los vectores de coeficientes de los polinomios numerador y denominador de cada funci´on de transferencia. La figura 10 muestra la ventana donde se introducen los par´ametros de G1 (s). Una vez configuradas las tres funciones de transferencia las conectaremos entre s´ı con arreglo a la estructura de interconexi´on de bloques de la figura 3. Para ello empleamos las siguientes operaciones:

21

Figura 9: Bloques de funci´on de transferencia en Simulink.

Figura 10: Introducci´on de los par´ametros de G1 (s) = 1/(s + 0,5). Operaci´on Conectar bloques (I)

Procedimiento. Para conectar las salidas de un bloque a la entrada de otro, hacer click con el bot´on izqdo. del rat´on en el bloque origen. Pulsar y mantener la tecla CTRL y hacer de nuevo click sobre el bloque destino. Conectar bloques (II) Tambi´en se puede extraer un cable de se˜ nal haciendo click en el saliente derecho del bloque origen y prolongar la se˜ nal (pulsando y manteniendo el bot´on izquierdo del rat´on) hasta llegar a la parte izquierda del bloque destino. Bifurcar cables Un cable de se˜ nal (que lleva la salida de un bloque hacia otro bloque), puede bifurcarse para distribuir la se˜ nal a varios bloques pulsando con el bot´on derecho en cualquier punto del cable. Sumar o restar se˜ nales Las se˜ nales procedentes de salidas de los bloques se pueden sumar o restar entre s´ı mediante el bloque sumador, que se ubica f´acilmente tecleando Sum en la ventana de navegaci´on de Simuink. 22

Tras una serie de operaciones de los tipos indicados en la tabla anterior, logramos construir la estructura de realimentaci´on de la figura 11. En esta figura hemos a˜ nadido dos bloques nuevos: Step y Scope. Ambos pertenecen, respectivamente, a los nodos Simulink/Sources y Simulink/Sinks que ser´an comentados en el siguiente apartado.

Figura 11: Modelo completo.

6.3.

Fuentes y sumideros de se˜ nal

Los bloques de suma y resta de se˜ nales y los de funciones de transferencia, funcionan como procesadores de se˜ nal. Sin embargo, en las simulaciones han de existir fuentes de se˜ nal externas, pues lo que se pretende en general es ver c´omo responden determinados sistemas a est´ımulos exteriores. En nuestro ejemplo necesitamos una se˜ nal externa para generar una referencia a seguir por el sistema controlado. Esta referencia debe ser, l´ogicamente, cambiante con el tiempo. En nuestro caso emplearemos una se˜ nal de tipo escal´on, que se implementa, con sus par´ametros espec´ıficos, mediante el bloque Step. Bloques como ´este, que s´olo tienen salidas y ninguna entrada, se localizan en el a´rbol de navegaci´on de Simulink en el 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 a´rbol de navegaci´on de Simulink en el nodo Simulink/Sinks. A modo de referencia, la tabla 7 muestra algunas fuentes de se˜ nal de uso com´ un (nodo Simulink/Sources), mientras que la tabla 8 muestra algunos de los bloques sumidero (Simulink/Sinks) m´as comunes. 23

Elemento Clock

Funci´ on ´ para trazar gr´aficas Marcas de tiempo de la simulaci´on. Util con los resultados. Sin Se˜ nal senoidal parametrizable. Step Se˜ nal en escal´on Constant Se˜ nal de valor constante. Signal generator Permite elegir entre un conjunto de se˜ nales predefinidas. Random Number Generaci´on de ruido blanco configurable. From Workspace Se˜ nal generada a partir de una variable del espacio de trabajo de Matlab. Cuadro 7: Fuentes de se˜ nal en Simulink.

Elemento Scope XY Graph To Workspace

Funci´ on Gr´afica 2D para visualizar las se˜ nales frente al tiempo durante la simulaci´on. Gr´afica 2D para visualizar un gr´afico X-Y creado a partir de dos se˜ nales de entrada. Almacena las muestras de la se˜ nal de entrada en una variable (vector) del espacio de trabajo de Matlab. Cuadro 8: Sumideros de se˜ nal en Simulink.

24

Manual de Introducción a SIMULINK

Autor: José Ángel Acosta Rodríguez © 2004

Cap´ıtulo 1 Ejemplo 1.1.

Modelado de un sistema din´ amico

En este ejemplo se realizar´a el modelado de un sistema din´amico muy sencillo. Se modelar´a 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 ser´a la posici´on de la masa. El modelo del sistema din´amico se puede expresar mediante las ecuaciones de Newton: m¨ x + cx˙ = F m c F

: : :

(1.1)

Masa del cuerpo (Kg) Coeficiente de fricci´on del cuerpo sobre la superficie Fuerza aplicada (N)

Queremos hacer un modelo en con la herramienta “Simulink”para el sistema propuesto. Primero ejecutamos la herramienta “Simulink”desde la ventana de comandos de Matlab haciendo ‘click’ en el icono correspondiente

1

2

CAP´ITULO 1. EJEMPLO

Saldr´a por pantalla una ventana gr´afica, como la de la Fig. 1.1, que contiene todas las librer´ıas que el entorno de “Simulink”bajo Matlab soporta.

Figura 1.1: Librer´ıas del entorno Simulink

´ 1.1. MODELADO DE UN SISTEMA DINAMICO

3

Para este sencillo ejemplo s´olo necesitaremos la librer´ıa b´asica de “Simulink”, por tanto expandimos el menu simulink en la ventana anterior, quedando como aparece en la Fig. 1.2

Figura 1.2: Librer´ıa base de Simulink Esta ventana est´a dividida en dos partes. La de la derecha es la correspondiente a las librer´ıas y la de la derecha es el contenido de la librer´ıa seleccionada.

4

CAP´ITULO 1. EJEMPLO

Elegimos un nuevo fichero donde guardaremos el modelo: seleccionamos en el menu File → New → Model. Tendremos la situaci´on de la Fig. 1.3

Figura 1.3: Apertura de un nuevo fichero modelo

´ 1.1. MODELADO DE UN SISTEMA DINAMICO

5

Se abrir´a una ventana en blanco donde crearemos el modelo. La situaci´on debe ser ahora la de la Fig. 1.4

Figura 1.4: Apertura de un nuevo fichero modelo En esta nueva ventana que a´ un no hemos dado nombre (‘untitled’) desarrollaremos el ejemplo. Lo primero que hacemos es darle un nombre adecuado. Para ello, en el menu File de la nueva ventana elegimos File → Save. Nos situamos en el directorio adecuado a trav´es del menu desplegable, ponemos un nombre al archivo, por ejemplo “masa guardamos el modelo. Ya tenemos un archivo donde crear el modelo. La extensi´on por defecto de los archivos de modelo es *.mdl. Empezamos a crear el modelo dado por la ecuaci´on (1.2). Para ello es necesario hacer alguna modificaci´on en la ecuaci´on (1.2). Despejando de la ecuaci´on (1.2) la aceleraci´on del cuerpo se obtiene: 2

x¨ = −

c F x˙ + m m

(1.2)

Como puede verse necesitaremos varios tipos de bloques. Elegimos estos bloques de la ventana de la derecha de la librer´ıa (Fig. 1.2). El primero que seleccionamos el que definir´a la fuerza aplicada a la masa, lo haremos mediante una constante. Seleccionamos ‘Sources’ y en la derecha seleccionamos

6

CAP´ITULO 1. EJEMPLO

el bloque de ‘Constant’. Ahora lo arrastramos hacia la ventana de nuestro modelo con el bot´on izquierdo del rat´on pulsado. Hacemos ‘click’ en el la etiqueta del nombre del bloque de constante y le damos su nombre, por ejemplo F. La situaci´on debe ser la de la Fig. 1.5

Figura 1.5: Construyendo el modelo Observando la ecuaci´on (1.2), puede verse que se necesita hacer las operaciones de sumar y dividir. Para ello seleccionamos ‘Math Operations’ en la ventana de la librer´ıa y escogemos del mismo modo que antes los bloques de ‘Sum’ y ‘Gain’. Para describir la ecuaci´on diferencial se necesitar´a adem´as el bloque integrador ‘Integrator’ en la librer´ıa ‘Continuous’. Ya se est´a en disposici´on de describir la ecuaci´on (1.2) utilizando bloques. Debemos unir los bloques de forma adecuada para describir dicha ecuaci´on (1.2). Haremos el esquema como describe la Fig. 1.6. Para unir los bloques debemos pinchar con el bot´on izquierdo del rat´on en el bloque de origen y soltar en el bloque de destino. Como puede verse en la Fig. 1.6, se han editado los nombres de los bloques poni´endoles nombres distintos a los originales. Tambi´en se ha editado el valor 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 fricci´on vale c = 0,8 y que la fuerza aplicada es 0.1 N (F = 0,1). As´ı por ejemplo el bloque ‘Gain’ denominado ‘c/m’ posee en su interior el valor correspondiente a mc = 0,8, y el denominado ‘1/m’ tendr´a 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 m´as f´acil la lectura del modelo. Estas cajas de texto se crean simplemente haciendo doble ‘click’ en el lugar que se desee y editando el recuadro que aparece.

´ 1.1. MODELADO DE UN SISTEMA DINAMICO .. x

F/m 1

. x

x

1 s

1 s

Integrador

Integrador

1

F

7

1/m

. c*x /m 0.8 c/m

Figura 1.6: Modelo Para poder ver los resultados ponemos un bloque que nos muestre la posici´on de la masa frente al tiempo. Seleccionamos dentro de la librer´ıa ‘Sinks’ el bloque ‘Scope’. Lo a˜ nadimos al modelo de la forma habitual. Ya tenemos el modelo completo. Los bloques deben estar como se muestra en la Fig. 1.7. F/m 1 F

.. x

1

. x

x

1 s

1 s

Integrador

Integrador

1/m Scope

. c*x /m 0.8 c/m

Figura 1.7: Modelo con ‘Scope’ En la Fig. 1.7 debe notarse que las variables de estado est´an perfectamente definidas y accesibles en el diagrama de bloques. Ahora se est´a en disposici´on de hacer una simulaci´on del proceso. Para ello debemos definir algunos par´ametros esenciales. Los m´as importantes son las condiciones iniciales de las variables de estado y el tiempo de simulaci´on. Las condiciones iniciales deben ponerse en los bloques integradores. Se hace doble ‘click’ en ellos y se definen las mismas en la zona de edici´on correspondiente. Por ejemplo ponemos el valor inicial de la velocidad a -1. En la Fig. 1.8 puede verse d´onde se define el par´ametro despu´es de haber hecho doble ‘click’ en el integrador que nos da la velocidad.

8

CAP´ITULO 1. EJEMPLO

Figura 1.8: Condici´on inicial en velocidad Para definir el tiempo de simulaci´on accedemos al menu de la ventana del modelo Simulation → Simulation parameters. Se abre una ventana d´onde es posible definir entre otros par´ametros el tiempo de simulaci´on, el m´etodo de resoluci´on y el paso fijo o variable. Dejamos los dos u ´ltimos como est´an y ponemos el tiempo de simulaci´on a 10 segundos. La situaci´on ser´a como la mostrada en la Fig. 1.9 Por u ´ltimo definimos la fuerza aplicada que deseamos. Hacemos doble ‘click’ en el bloque donde est´a definida la fuerza y ponemos el valor deseado que era 0.1. Para ver el resultado en el Scope debemos hacer doble ‘click’ sobre el mismo y se abrir´a la ventana gr´afica que nos dar´a la posici´on del cuerpo. Ahora pulsamos el bot´on de inicio de simulaci´on I . Una vez acabada la simulaci´on tendremos el resultado que puede verse en la Fig. 1.10. Si deseamos ver tambi´en la velocidad tenemos acceso a la variable en el diagrama. Podemos poner otro Scope para la velocidad. El resultado puede verse en la Fig. 1.11 Se podr´ıan ver las dos variables de estado en una sola ventana gr´afica Scope. Se necesita para ello el bloque ‘Mux’ dentro de la librer´ıa ‘Signal routing’. Este bloque hace las veces de un multiplexor y anida vectores. Se

´ 1.1. MODELADO DE UN SISTEMA DINAMICO

Figura 1.9: Par´ametros de simulaci´on

Figura 1.10: Simulaci´on

9

10

CAP´ITULO 1. EJEMPLO

Figura 1.11: Simulaci´on. Utilizaci´on del bloque Scope

´ 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 variables en una s´ola ventana gr´afica.

Figura 1.12: Simulaci´on. Utilizaci´on del bloque Mux Supongamos que no s´olo queremos ver el resultado sino que tambi´en queremos guardar las variables en memoria para poder acceder a ellas. Buscamos dentro de la librer´ıa ‘Sinks’ el bloque ‘To Workspace’. Lo a˜ nadimos al diagrama anterior y le damos un nombre a la matriz donde queremos guardar el valor de las variables, por ejemplo X. El resultado es el de la Fig. 1.13 F/m 0.1 F

.. x

1

. x

x

1 s

1 s

Integrador

Integrador

1/m

. c*x /m

Posición y velocidad

0.8 c/m

X To Workspace

Figura 1.13: Simulaci´on. Utilizaci´on del bloque To Workspace Si ahora queremos ver el valor de las variable desde la linea de comandos de Matlab, hacemos ‘plot(tout, X)’. En la matriz X se encuentran la posici´on

CAP´ITULO 1. EJEMPLO

12

y la velocidad por columnas en el orden que se han puesto en el diagrama de bloques Fig. 1.13. El tiempo de simulaci´on se guarda por defecto en la variable ‘tout’ dada en el menu Simulation → Simulation parameters → Workspace I/O. El resultado se muestra en la Fig. 1.14. 0.4

0.2

0

−0.2

−0.4

−0.6

−0.8

−1

0

1

2

3

4

5

6

7

8

9

10

Figura 1.14: Resultado de ejecutar el comando plot(tout,X) Todo este modelo se ha creado a trav´es de las variables temporales y sus derivadas. Simulink permite hacer los modelos untilizando la transformada de Laplace. Para ello necesitamos transformar la ecuaci´on del modelo (1.2) en el dominio de Laplace. Suponemos las condiciones iniciales iguales a cero. Por tanto, la ecuaci´on (1.2) quedar´a en el dominio de Laplace ms2 X(s) + csX(s) = F

(1.3)

Podemos transformarla en una funci´on de transferencia si tomamos como salida la posici´on (X(s)) y como entrada la fuerza aplicada (F (s)) del modo siguiente 1 X(s) c = m F (s) s( c s + 1) K = , s(τ s + 1)

donde K =

1 c

yτ=

m . c

Para el ejemplo anterior K = τ = 1,25.

(1.4)

´ 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 este u ´ltimo bloque con los valores de K y τ anteriores haciendo doble ‘click’. El modelo quedar´a como se muestra en la Fig. 1.15

. x

F 0.1

1.25

x

1.25s+1

1 s

Transfer Fcn

Integrador

F

Posición y velocidad X To Workspace

Figura 1.15: Modelo en el dominio de Laplace Debe notarse que en este u ´ltimo esquema Fig. 1.15, la condici´on inicial de la velocidad no est´a accesible. Si se desea tener en cuenta hay que hacerlo a la hora de pasar las ecuaciones al dominio de Laplace. Ya sabemos hacer un modelo de un sistema din´amico, tanto en el dominio del tiempo como en el de la frecuencia (Laplace). Ahora se describe como hacer subsistemas. La idea de estos subsistemas es agrupar bloques con alg´ un criterio predefinido. Como ejemplo agruparemos los bloques del primer ejemplo como un s´olo bloque que sea el modelo del sistema. Tendr´a como entrada la fuerza aplicada y como salidas la posici´on y la velocidad del sistema. Para conseguir esto debemos seleccionar todo aquello que queremos que pertenezca al subsistema. La selecci´on se hace con el bot´on izquierdo del rat´on, como en Windows, haciendo un recuadro con todo aquello que queremos seleccionar. Todo esto con el bot´on pulsado. Despu´es se suelta y nos vamos al menu ‘Edit’ → ‘Create subsystem’, como en la Fig. 1.16 Una vez hecho esto tendremos la situaci´on de la Fig. 1.17, donde todo lo seleccionado anteriormente se ha metido dentro de un bloque. Haciendo doble ‘click’ en el bloque se puede ver su contenido en otra ventana como se muestra en la Fig. 1.17.

14

CAP´ITULO 1. EJEMPLO

Figura 1.16: Creando subsistemas

Figura 1.17: Creando subsistemas

Universidad de Chile Facultad de Ciencias F´ısicas y Matem´aticas Departamento de Ingenier´ıa El´ectrica

´ n a Matlab y Simulink Introduccio

Preparado por Diego Sep´ ulveda J. Version 1.0, 6 de agosto de 2002

Introducci¶ on Matlab es un poderoso sistema el cual permite el tratamiento num¶erico de una gran cantidad de aplicaciones en ingenier¶‡a, tales como: procesamiento de se˜ nales, an¶alisis estad¶‡sticos, interpolaci¶on de curvas, series de tiempo, simulaci¶on y control de sistemas, l¶ogica difusa, redes neuronales, identiflcaci¶on de par¶ametros, etc. El nombre Matlab se debe a que en realidad consiste en un laboratorio de matrices (Matrix laboratory), raz¶on por la cual es excelente para el c¶alculo num¶erico de vectores y valores propios, descomposiciones de matrices y cualquier aplicaci¶on que involucre matrices. Adem¶as de lo mencionado anteriormente, Matlab tambi¶en incluye un subprograma llamado Simulink, el cual permite la simulaci¶on de todo sistema 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 control de sistemas. Si el lector desea ahondar m¶as sobre los aspectos generales de Matlab entonces deber¶a referirse a [1]

i

II

¶Indice general 1. Lo b¶ asico 1.1. Matrices . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Deflnici¶on y asignaci¶on de variables . . . . 1.1.2. Operando con matrices . . . . . . . . . . . 1.1.3. Matrices especiales . . . . . . . . . . . . . 1.1.4. Manipulaci¶on de matrices . . . . . . . . . 1.1.5. Arreglos . . . . . . . . . . . . . . . . . . . 1.2. Variables y Funciones . . . . . . . . . . . . . . . . 1.2.1. Variables . . . . . . . . . . . . . . . . . . . 1.2.2. Funciones . . . . . . . . . . . . . . . . . . 1.2.3. Algunas Variables y Funciones de utilidad 1.3. Gr¶aflcos . . . . . . . . . . . . . . . . . . . . . . . 1.3.1. Figuras . . . . . . . . . . . . . . . . . . . 1.3.2. Gr¶aflcos en 2D . . . . . . . . . . . . . . . 2. Simulink 2.1. Diagramas de Bloques . . . 2.2. Usando Simulink . . . . . . 2.2.1. Librer¶‡a “Continuos” 2.2.2. Librer¶‡a “Discrete” . 2.2.3. Librer¶‡as “Sources” y 2.2.4. Otras Librer¶‡as . . .

. . . . . . . . . . . . . . . . . . . . “Sinks” . . . . .

A. Funciones Comunes

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . .

1 1 1 2 3 5 7 8 8 9 9 12 12 12

. . . . . .

17 17 18 19 19 20 21 25

iii

IV

¶INDICE GENERAL

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 c´omo utilizarlas, posteriormente se ver´an los distintos tipos de variables y funciones que existen, para finalmente aprender el manejo de gr´aficos.

1.1.

Matrices

1.1.1.

Definici´ on y asignaci´ on de variables

Para introducir una matriz en Matlab s¶olo se debe introducir los n¶ umeros de la matriz entre par¶entesis cuadrados ([ ]), las columnas se separan por espacios y las fllas por punto y coma (;)1 . Por ejemplo: >> A=[3 4 5 ; 3 2 7] A = 3 3

4 2

5 7

Como se puede ver en el ejemplo anterior las variables se asignan mediante un signo igual (=) de la misma manera que en lenguajes como JAVA o C. 1

; tambi´en se utiliza para suprimir la visualizaci´on del resultado

1

2

Matrices

1.1.2.

Operando con matrices

Para transponer2 matrices s¶olo hay que poner despu¶es de la matriz o de la variable un ap¶ostrofe (’), siguiendo con el ejemplo anterior quedar¶‡a: >> A’ ans = 3 4 5

3 2 7

En la variable ans mostrada en el ejemplo anterior, Matlab guarda el resultado de la u ¶ltima 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 multiplicar se 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 7

6 7

8 13

>> D=C*A’ D = 76 114

80 126

Para potenciar una matriz se utiliza el s¶‡mbolo (ˆ), seguido del exponente que 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: 2

En el caso de que se utilicen n´ umeros complejos se obtiene la conjugada transpuesta Obviamente para poder realizar estas operaciones es necesario que las dimensiones de las matrices sean consistentes. 3

1.1.3 Matrices especiales

3

>> A=[2 2 ; 0 1] A = 2 0

2 1

>> inv(A) ans = 0.5000 0

-1.0000 1.0000

En el cuadro 1.1 se muestra un resumen de los operadores matriciales. Operaci¶on Multiplicaci¶on Divisi¶on por la derecha Divisi¶on por la izquierda Potenciaci¶on Transposici¶on conjugada

S¶ımbolo * / \ ˆ ’

Cuadro 1.1: Operadores para a¶lgebra matricial

1.1.3.

Matrices especiales

Dado que existen matrices que son muy utilizadas en la pr¶actica Matlab incluye funciones espec¶‡flcas 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¶ umero de fllas y posteriormente el n¶ umero de columnas; como muestra el siguiente ejemplo:

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 1 0

0 0 1

0 0 0

0 0 0

>> C=eye(3) C = 1 0 0

>> C=eye(3,4) C = 1 0 0

0 1 0

0 0 1

0 0 0

N¶otese que si se desea la matriz identidad de orden n s¶olo hay que introducir n, 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 se pueden deflnir como cualquier matriz. La importancia radica en que muchas veces se utilizan para indexar alguna serie de elementos, para deflnirlos de esta manera se utiliza (:), de la siguiente manera:

1.1.4 Manipulaci¶ on de matrices

5

n¶ umero inicial:paso:cota superior Por ejemplo: >> 1:4:19 ans = 1

1.1.4.

5

9

13

17

Manipulaci´ on de matrices

Una aplicaci¶on de uso frecuente consiste en seleccionar algunas columnas, fllas o simplemente elementos de alguna matriz; esto se logra con la utilizaci¶on de 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 deflnida anteriormente: >> A(1,1) ans = 2 >> A(:,1) ans = 2 0 >> A(2,:) ans = 0 >> A(4)

1

6

Matrices

ans = 1 En el primer ejemplo se obtiene el elemento a11 de la matriz, en el segundo ejemplo la primera columna, el tercer ejemplo se obtiene la segunda flla, y para el u ¶ltimo ejemplo se obtiene el cuarto elemento de la matriz. La numeraci¶on del u ¶ltimo 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 u ¶til eliminar alg¶ un(os) elemento(s) de la matriz4 , para lograr lo anterior se utilizan un par de par¶entesis cuadrados. As¶‡, por ejemplo, si se desea borrar la segunda columna de una matriz dada: >> A=[1 2 6; 3 4 8; 5 7 9; 3 4 9]; >> A(:,2)=[ ] A = 1 3 5 3

6 8 9 9

Es importante notar que tanto la selecci¶on como la eliminaci¶on de elementos de una matriz se puede realizar utilizando un vector como conjunto ¶‡ndices a utilizar. Por ejemplo: >> A=0:1:10 A = 0

1

2

3

4

5

6

7

8

9

>> indice=1:2:11 indice = 4

Sin embargo, s´olo se puede hacer si la estructura resultante sigue siendo una matriz

10

1.1.5 Arreglos 1

3

7 5

7

9

11

4

6

8

10

>> B=A(indice) B = 0

2

obtiene los n¶ umeros que est¶an en las posiciones impares del vector A. Muchas veces es u ¶til concatenar matrices, lo cual se puede utilizar utilizando los par¶entesis cuadrados ([ ]). Por ejemplo para concatenar horizontalmente: >> B=[1 2 3; 4 5 6]; >> C=[1 ; 2]; >> [B C] ans = 1 4

2 5

3 6

1 2

y para concatenar verticalmente: >> B=1:1:4; >> C=4:-1:1; >> [B ; C] ans = 1 4

2 3

3 2

4 1

Obviamente las dimensiones de las matrices deben ser consistentes con la concatenaci¶on.

1.1.5.

Arreglos

Los arreglos son matrices, pero poseen una aritm¶etica distinta en cuanto a la multiplicaci¶on y divisi¶on. Estas operaciones se ejecutan elemento a

8

Variables y Funciones

elemento, y para que sean consistentes los arreglos deben ser de las mismas dimensiones. Para diferenciar las operaciones matriciales de las operaciones de arreglos los operadores van precedidos por un punto (.), como se muestra en el cuadro 1.2. Operaci¶on Multiplicaci¶on Divisi¶on por la derecha Divisi¶on por la izquierda Potenciaci¶on Transposici¶on no conjugada

S¶ımbolo .* ./ .\ .ˆ .’

Cuadro 1.2: Operadores para a¶lgebra de arreglos Por ejemplo: >> A=[1 3 4; 4 2 6]; >> B=[3 4 8; 7 8 0]; >> A.\B ans = 3.0000 1.7500

1.3333 4.0000

2.0000 0

corresponde a la divisi¶on de arreglos por la izquierda de A por B, i.e.

1.2.

Variables y Funciones

1.2.1.

Variables

bij aij

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 deflnen entre ap¶ostrofes (’’):

∀ i, j.

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, subrutinas que facilitan el trabajo, por ejemplo la funci¶on mean calcula el promedio o media 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 algunas incluidas en el programa (built-in functions) y otras viene dentro de los distintos toolboxes que trae Matlab (por ejemplo mean). Generalmente las funciones vienen con alguna ayuda de su utilizaci¶on, la cual 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 predeflnidas, algunas de estas variables se muestran en el cuadro 1.3, mientras que algunas funciones m¶as utilizadas aparecen en el cuadro 1.4. Si se aplica alguna de las funciones matem¶aticas a alguna matriz se obtiene una matriz en la que los elementos han sido evaluados por la funci¶on. Por ejemplo: >> X=0:0.1:1; >> exp(-X) ans =

10

Variables y Funciones Nombre pi i j Inf NaN eps

Descripci¶on El n¶ umero m¶as famoso del mundo Unidad imaginaria Lo mismo que i, pero para los el¶ectricos Inflnito No es un n¶ umero Precisi¶on relativa de punto flotante, 2−52 Cuadro 1.3: Variables Predeflnidas

Nombre sin(X) cos(X) tan(X) exp(X) log(X) plot(X,Y) clear(A) det(A) eig(A)

Descripci¶on Funci¶on seno de X Funci¶on coseno de X Funci¶on tangente de X Funci¶on exponencial de X Funci¶on logaritmo natural de X Gr¶aflca Y versus X Borra la variable A Calcula el determinante de la matriz A Calcula los valores y vectores propios de la matriz A poly(A) Calcula los coeflcientes del polinomio caracter¶‡stico de la matriz A roots(coef) Calcula los ra¶‡ces del polinomio cuyos coeflcientes vienen en coef sum(X) Suma los elementos del vector X length(X) Retorna el largo del vector X size(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 string palabra 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

1.2.3 Algunas Variables y Funciones de utilidad Columns 8 through 11 0.4966

0.4493

0.4066

0.3679

11

12

Gr¶ aflcos

1.3.

Gr´ aficos

Para graflcar en Matlab fundamentalmente se utiliza la funci¶on plot mencionada anteriormente, sin embargo tambi¶en es posible graflcar en forma escalonada, utilizando s¶olo l¶‡neas verticales, utilzando n¶ umeros complejos o en 3D, entre muchas maneras de graflcar. A continuaci¶on se detallan las m¶as utilizadas y los comandos m¶as u ¶tiles relacionados.

1.3.1.

Figuras

Una flgura es una ventana en la cual se desplegan los gr¶aflcos obtenidos mediante Matlab. Esto presenta varias ventajas las cuales se mostrar¶an m¶as adelante. Aunque, generalmente, las flguras se generan por defecto al crear un gr¶aflco, a veces es necesario pedir otra flgura a Matlab, para esto se utiliza el comando figure, el cual genera otra flgura en la pantalla. El modo de utilizarlo es: >> figure Si se desea cerrar alguna flgura se utiliza la funci¶on close, seguida del n¶ umero de la flgura. Si se quiere cerrar todas las flguras entonces se ejecuta: >> close all lo cual cierra todas las flguras existentes5 .

1.3.2.

Gr´ aficos en 2D

Como se menciona anteriormente se utiliza la funci¶on plot, tal como se muestra en el siguiente ejemplo: >> t=0:0.1:5; >> plot(t,exp(-t)) lo cual produce como resultado la flg. 1.1. Para que plot funcione ambos vectores deben tener el mismo largo. Si X o Y es una matriz entonces el vector es graflcado versus las fllas o columnas de la matriz, dependiendo de con cual se alinee. 5

De manera an´aloga clear all borra todas las variables

1.3.2 Gr¶ aflcos en 2D

13

1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

Figura 1.1: Ejemplo de plot Adem¶as plot tiene m¶as opciones las cuales se pueden ver en la ayuda de la funci¶on. Una forma de graflcar com¶ unmente usada es aquella en la cual se encuentran dos gr¶aflcas en la misma flgura . Lo anterior se puede lograr de varias maneras, dos de ellas son: >> plot(t,exp(-t),t,sin(t)) >> plot(t,[exp(-t); sin(t)]) las cuales producen el mismo resultado (flg. 1.2). Sin embargo, hay otra opci¶on la cual consiste en utilizar la funci¶on hold que retiene el gr¶aflco actual y agrega el gr¶aflco deseado a la flgura actual. Para el ejemplo anterior: >> >> >> >>

plot(t,exp(-t)) hold on plot(t,sin(t)) hold off

cuyo resultado se muestra en la flg. 1.3. La utilizaci¶on de hold off es para soltar la flgura.

14

Gr¶ aflcos 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

Figura 1.2: Dos gr¶aflcas en la misma flgura Para crear una leyenda de las gr¶aflcas se utiliza la funci¶onlegend(string1, string2, ...), donde los string i son los textos de cada gr¶aflco para la leyenda, as¶‡ para el ejemplo anterior, la instrucci¶on: >> legend(’exponencial’, ’seno’) produce la flg. 1.4. Tambi¶en es posible graflcar 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 elementos del vector X deben ser equiespaciados. Si se quiere graflcar se˜ nales de tiempo discreto se puede utilizar la funci¶on stem(X,Y), cuyo uso es an¶alogo a las funciones anteriores. Muchas veces es muy u ¶til agrupar varios gr¶aflcos en una misma flgura, lo cual se consigue f¶acilmente con la funci¶on subplot(m,n,i), la cual divide la flgura en una matriz de m£n y el gr¶aflco se agrega en el elemento i-¶esimo. Adem¶as, tiene la ventaja de agregar gr¶aflcas que ocupen distinto tama˜ no en la flgura resultante. Por ejemplo, las siguientes instrucciones: >> X=-pi:0.1:pi; >> subplot(3,2,1)

1.3.2 Gr¶ aflcos en 2D

15

1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

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 flg. 1.5. Tambi¶en hay funciones para poner t¶‡tulos, formatear los ejes, poner textos en cualquier parte de la flgura, 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¶on plot. No hay que olvidar que todas las instrucciones anteriores pueden combinarse, para producir las flguras que uno desea.

16

Gr¶ aflcos

1

exponencial seno

0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1

0

0.5

1

1.5

2

2.5

3

3.5

4

4.5

5

2

4

Figura 1.4: Ejemplo de legend 1

1

0.5

0.5

0

0

−0.5

−0.5

−1 −4

−2

0

2

−1 −4

4

−2

0

2 1 0 −1 −2 −4

−3

−2

−1

0

1

2

3

4

−3

−2

−1

0

1

2

3

4

1 0.5 0 −0.5 −1 −4

Figura 1.5: Ejemplo de subplot

Cap¶ıtulo 2 Simulink Simulink es un sistema interactivo para simular sistemas din´amicos nolineales. La gran ventaja de Simulink es su interfaz gr´afica, mediante la cual se pueden implementar complicados modelos y obtener simulaciones en un tiempo extremadamente r´apido a trav´es de los diagramas de bloques.

2.1.

Diagramas de Bloques

En pocas palabras para utilizar Simulink s¶olo hay que saber c¶omo traducir una ecuaci¶on diferencial o de diferencias a un diagrama de bloques. Por ejemplo 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 observa en la flg. 2.1. La implementaci¶on en Simulink se muestra la flg. 2.2, y a

Figura 2.1: Diagrama de Bloques

17

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 cual se aprecia en la flg. 2.3. 0.35

0.3

0.25

0.2

0.15

0.1

0.05

0

0

1

2

3

4

5

6

7

8

9

10

Figura 2.3: Respuesta del sistema din¶amico

2.2.

Usando Simulink

Para utilizar Simulink s¶olo es necesario construir el diagrama de bloques mediante los bloques predeflnidos que vienen en la librer¶‡a. El uso de los bloques es bastante sencillo, s¶olo hay que arrastrar el icono del bloque al modelo que se est¶a construyendo. Si se desean cambiar los par¶ametros de los bloques s¶olo hay que hacer un doble click sobre su icono.

2.2.1 Librer¶‡a “Continuos”

19

Para conectar los bloques hay que situar el puntero del mouse sobre el puerto de salida del primer bloque, con lo que el puntero deber¶‡a cambiar a una 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 para sistemas lineales, los cuales son: Derivative: Derivada num¶erica de la se˜ nal de entrada. Integrator: Integra la se˜ nal de entrada. Memory: Retrasa la se˜ nal 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 matricial para el numerador, expresi¶on vectorial para el denominador. El ancho de la salida debe ser igual al n¶ umero de fllas del numerador. Los coeflcientes son potencias descendentes de s. Transport Delay: Aplica el retraso especiflcado a la se˜ nal de entrada. Variable Transport Delay: Aplica un retraso a la primera se˜ nal de entrada. La segunda entrada especiflca el retardo. Zero-Pole: Representaci¶on en polos y ceros. Expresi¶on matricial para los ceros. Expresi¶on vectorial para los polos y la ganancia. El ancho de la salida debe igualar el n¶ umero de columnas de la matriz de ceros, o uno si los ceros son un vector.

2.2.2.

Librer´ıa “Discrete”

Esencialmente es id¶entica a la anterior, pero para sistemas lineales de tiempo discreto, i.e. para ecuaciones de diferencias. Los bloques son: Discrete Transfer-Fcn: Funci¶on de transferencia discreta, an¶alogo al caso continuo.

20

Usando Simulink

Discrete Zero-Pole: Representaci¶on discreta en polos y ceros. ¶Idem al caso continuo. Discrete Filter: Filtro discreto. Expresi¶on vectorial para el numerador y el denominador. Los coeflcientes son para potencias ascendentes de z−1 . Discrete State-Space: Representaci¶on en variables de estado de tiempo discreto. Discrete-Time Integrator: Integraci¶on en tiempo discreto de la se˜ nal de entrada. 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 los diagramas de bloques. Algunos de ¶estos son: Clock: Librer¶ıa “Sources”. Genera el tiempo de simulaci¶on actual. Constant: Librer¶ıa “Sources”. Genera una constante especiflcada en el par¶ametro ‘Constant value’ . Si ’Constant value’ es un vector y ’Interpret vector parameters as 1-D’ est¶a arriba (on), el valor constante es tratado como un arreglo 1-D. Sino, la salida es una matriz con las mismas dimensiones que 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 entrada. Scope: Librer¶ıa “Sinks”. Representaci¶on gr¶aflca de los valores de entrada versus el tiempo de simulaci¶on.

2.2.4 Otras Librer¶‡as

21

Stop Simulation: Librer¶ıa “Sinks”. Detiene la simulaci¶on cuando la entrada es distinta de cero. To File: Librer¶ıa “Sinks”. Escribe el tiempo y la entrada al archivo MAT especiflcado en formato flla. El tiempo est¶a en la primera flla. To Workspace: Librer¶ıa “Sinks”. Escribe la salida al arreglo o estructura especiflcado en el workspace principal de Matlab. Los datos no est¶an disponibles hasta que la simulaci¶on se detiene. XY Graph : Librer¶ıa “Sinks”. XY scope usando la ventana gr¶aflca de Matlab. la primera entrada es usada como base temporal. Se ingresan los rangos del gr¶aflco.

2.2.4.

Otras Librer´ıas

Adem¶as de las librer¶‡as anteriormente detalladas, existen otras que proveen los siguientes bloques que son extremadamente u ¶tiles: 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 entrada a una funci¶on de Matlab para evaluarla. La funci¶on debe retornar un 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. Calcula P(u) dado por el arreglo de coeflcientes polinomiales P. P est¶a ordenado del mayor al menor orden, la forma aceptada por la funci¶on polyval de Matlab. S-Function: Librer¶ıa “Functions & Tables”. Bloque deflnible por el usuario. Los bloques pueden estar escritos en M, C, Fortran o Ada y deben cumplir los est¶andares de S-function. t,x,u y flag son autom¶aticamente entregados a la S-function por Simulink. Par¶ametros “Extra” pueden ser especiflcados en el campo ‘S-function parameters’. Abs: Librer¶ıa “Math”. Valor absoluto, i.e. y = |u|.

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 ganancia matricial (y = K*u o y = u*K). Math Function: Librer¶ıa “Math”. Funciones matem¶aticas incluyendo funciones 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 de entrada. Para m¶ ultiples entradas, los operadores se aplican a trav¶es de las entradas. Product: Librer¶ıa “Math”. Multiplica o divide las entradas. Especiflcar una de las dos opciones siguientes: 1. * o / para cada puerto de entrada (ej., **/*) 2. Un escalar especiflcando el n¶ umero de puertos de entrada a ser multiplicados. El valor escalar ‘1’ para producto elemento a elemento causa que todos los elementos de un solo vector de entrada sean multiplicados. Sum: Librer¶ıa “Math”. Suma o substrae las entradas. Especiflcar una de las dos opciones siguientes: 1. Un string conteniendo + o - para cada puerto de entrada, | para espacio entre los puertos (ej. ++|-|++) 2. Un escalar ≥ 1. Un valor ¿1 suma todas las entradas; 1 suma los elementos de una solo vector de entrada. Trigonometric Function: Librer¶ıa “Math”. Funciones trigonom¶etricas e hiperb¶olicas. Demux: Librer¶ıa “Signals & Systems”. Divide:

2.2.4 Otras Librer¶‡as

23

1. se˜ nales vectoriales a escalares o vectores m¶as peque˜ nos, o 2. se˜ nales tipo bus producidas por el bloques Mux en sus valores escalares, vectoriales o matriciales constituyentes. Chequear ‘Bus Selection Mode’ para dividir se˜ nales tipo bus. Mux: Librer¶ıa “Signals & Systems”. Multiplexa se˜ nales escalares, vectoriales, o matriciales a un bus. Terminator: Librer¶ıa “Signals & Systems”. Usado para “terminar”se˜ nales de salida. (Previene advertencias acerca puertos de salida no conectados.)

24

Usando Simulink

Ap¶ endice A Funciones Comunes A continuaci¶on se incluyen las funciones m¶as utilizadas de Matlab con una peque˜ na 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 salida se 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 del sistema 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 la matriz 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

26

¶ APENDICE A. FUNCIONES COMUNES

help: Funci¶on. Sintaxis help function. Entrega ayuda sobre la funci¶on function. i: Variable. Unidad imaginaria. inv: Funci¶on. Sintaxis inv(A). Retorna la matriz inversa de A. Inf: Variable. Inflnito. 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 la funci¶on inversa de expm(A). log10: Funci¶on. Sintaxis log10(X). Funci¶on logaritmo ordinario (en base 10) 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 las que 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 de X en Y, y el ¶‡ndice en que se encuentra en I. mean: Funci¶on. Sintaxis mean(X). Retorna el valor medio o promedio de los elementos de X. min: Funci¶on. Sintaxis [Y,I]=max(X). Retorna el elemento m¶as peque˜ no de X en Y, y el ¶‡ndice en que se encuentra en I. NaN: Variable. No es un n¶ umero, usualmente aparece cuando hay una divisi¶on del tipo 0/0. obsv: Funci¶on. Sintaxis obsv(A,C). Retorna la matriz de observabilidad del sistema formado por A y C. pi: Variable. El n¶ umero m¶as famoso del mundo.

27 plot: Funci¶on. Sintaxis plot(X,Y). Gr¶aflca Y versus X. poly: Funci¶on. Sintaxis poly(A). Calcula los coeflcientes del polinomio caracter¶‡stico de la matriz A. roots: Funci¶on. Sintaxis roots(coef). Calcula los ra¶‡ces del polinomio cuyos coeflcientes 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 flgura, dada por un arreglo de m fllas y n columnas, y graflca en la posici¶on i-¶esima del arreglo. ss: Funci¶on. Sintaxis ss(A,B,C,D). Genera un modelo formulado en variables de estado. ss2tf: Funci¶on. Sintaxis [num,den]=tf2ss(A,B,C,D). Convierte una representaci¶on en variables de estado a un modelo dado por la funci¶on de transferencia. ss2zp: Funci¶on. Sintaxis [Z,P,K]=zp2ss(A,B,C,D). Convierte una representaci¶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 elementos 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. num son los coeflcientes del numerador, que van listados en potencias decrecientes de s o z, den es an¶alogo. tf2ss: Funci¶on. Sintaxis [A,B,C,D]=tf2ss(num,den). Convierte una funci¶on de transferencia a una representaci¶on en variables de estado. num son los coeflcientes del numerador, que van listados en potencias decrecientes de s o z, den es an¶alogo.

28

¶ APENDICE A. FUNCIONES COMUNES

tf2zp: Funci¶on. Sintaxis [Z,P,K]=tf2zp(num,den). Convierte una funci¶on de transferencia a una representaci¶on zpk. num son los coeflcientes del numerador, que van listados en potencias decrecientes de s o z, den es an¶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 cerospolos-ganancia (zpk). zp2ss: Funci¶on. Sintaxis [A,B,C,D]=zp2ss(Z,P,K). Convierte un modelo en formato zpk a una representaci¶on en variables de estado. zp2tf: Funci¶on. Sintaxis [num,den]=zp2tf(Z,P,K). Convierte una representaci¶on zpk a una funci¶on de transferencia.

Bibliograf¶ıa [1] The Mathworks, “Getting Started with Matlab”

29

30

BIBLIOGRAF¶IA

¶Indice alfab¶ etico \, 2 ’, 2 ”, 8 (), 5 *, 2 +, 2 -, 2 ., 8 /, 2 :, 4, 5 ;, 1 =, 1 [], 1, 7 ˆ, 2

double, 8 eig, 10, 25 eliminar elementos, 6 eps, 10, 25 exp, 10, 25 expm, 25 eye, 3 figure, 12 funciones, 1 help, 9, 10, 26 hold, 13 i, 10, 26 Inf, 10, 26 inv, 2, 26

acos, 25 ans, 2 arreglos, 8 asin, 25 atan, 25 atan2, 25

j, 10, 26 legend, 14 length, 10, 26 librer¶‡a, 18 continuos, 19 Derivative, 19 Integrator, 19 Memory, 19 State-Space, 19 Transfer-Fcn, 19 Transport Delay, 19

char, 8 clear, 10, 12, 25 close, 12 concatenar, 7 cos, 10, 25 ctrb, 25 obsv, 26 det, 10, 25 31

¶INDICE ALFABETICO ¶

32 Variable Transport Delay, 19 Zero-Pole, 19 discrete, 19 Discrete Filter, 20 Discrete State-Space, 20 Discrete Transfer-Fcn, 19 Discrete Zero-Pole, 20 Discrete-Time Integrator, 20 First-Order Hold, 20 Unit Delay, 20 Zero-Order Hold, 20 functions & tables, 21 Fcn, 21 MATLAB Fcn, 21 Polynomial, 21 S-Function, 21 math, 21 Abs, 21 Dot Product, 22 Gain, 22 Math Function, 22 Matrix Gain, 22 MinMax, 22 Product, 22 Sum, 22 Trigonometric Function, 22 signals & systems, 22 Demux, 22 Mux, 23 Terminator, 23 sinks, 20 Display, 20 Scope, 20 Stop Simulation, 21 To File, 21 To Workspace, 21

XY Graph, 21 sources, 20 Clock, 20 Constant, 20 Signal Generator, 20 Sine Wave, 20 Step, 20 log, 10, 26 log10, 26 log2, 26 logm, 26 lookfor, 10, 26 matrices, 1, 8 max, 26 mean, 9, 26 min, 26 NaN, 10, 26 ones, 3 pi, 10, 26 plot, 10, 12, 27 poly, 10, 27 roots, 10, 27 seleccionar elementos, 5 sin, 10, 27 size, 10, 27 ss, 27 ss2tf, 27 ss2zp, 27 stairs, 14 std, 27 stem, 14 subplot, 14, 27 sum, 10, 27

¶INDICE ALFABETICO ¶ tan, 10, 27 tf, 27 tf2ss, 27 tf2zp, 28 var, 28 variables, 1 variables, 1 vectores, 4 zeros, 3 zp2ss, 28 zp2tf, 28 zpk, 28

33

Complementos de Procesado de Señal y Comunicaciones Máster en Sistemas Multimedia

Introducción a Matlab y Simulink Javier Ramírez Pérez de Inestrosa Dpto. 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

¿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.

Introducción a Matlab y Simulink Javier Ramírez

2

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) Introducción a Matlab y Simulink Javier Ramírez

3

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 Introducción a Matlab y Simulink Javier Ramírez

4

El entorno de Matlab

Introducción a Matlab y Simulink Javier Ramírez

5

Sintaxis 

Algunos ejemplos sencillos

Entrada

Salida

Comentarios

2+3 7-5 34*212 1234/5786 2^5

ans = 5 ans = 2 Los resultados son los esperados. ans = 7208 ans = 0.2173 Nótese que al resultado se le da el nombre ans. ans = 32

a = sqrt(2)

a = 1.4142

Se puede escoger el nombre de la variable.

Introducción a Matlab y Simulink Javier Ramírez

6

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 d = 1 2 3 4 5 6 7 8 9 ] e=123456789 e = [1:9] f=123456789 f = 1: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(:)

Otros usos de “:”. Se utiliza para acceder a parte o la totalidad de los datos de un vector o matriz.

g = 0 2 4 6 8 10 ans = 3 ans = 2 3 4 5 6 7 123456789

Introducción a Matlab y Simulink Javier Ramírez

7

(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.

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.

h = [1 2 3]; h'

g(2,3) g(3,:) g(2,3) = 4

Introducción a Matlab y Simulink Javier Ramírez

8

Entrada

g^2

g .^ 2

Salida

Comentarios

ans =

30 36 42 66 81 96 Multiplica la matriz por ella misma. 102 126 150 ans = 1 4 9 Eleva al cuadrado cada elemento de la 16 25 36 matriz. 49 64 81

Introducción a Matlab y Simulink Javier Ramírez

9

Control de la salida 

El comando format 

format compact 



format long 



Muestra únicamente cinco dígitos.

“;” al final del comando. 



Muestra los 15 dígitos que se utilizan en el cálculo.

format short 



Controla el espaciado de líneas.

No visualizar salida:

help format 

Más información. Introducción a Matlab y Simulink Javier Ramírez

10

Más sobre matrices 

Funciones incluidas en MatLab

Entrada

Salida

rand(2)

ans = 0.9501 0.2311 ans = 0.8913 0.7621

rand(2,3) zeros(2) ones(2)

ans = 0 0 ans = 1 1

Comentarios 0.6068 0.4860 0.4565 0.8214 0.0185 0.4447

0 0 1 1

Genera una matriz de números aleatorios entre 0 y 1 Genera una matriz 2x2 de ceros o unos.

eye(2)

ans = 1 0 0 1

Matriz 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.

Introducción a Matlab y Simulink Javier Ramírez

11

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 Introducción a Matlab y Simulink Javier Ramírez

12

Más sobre matrices - concatenación Entrada

Salida

[a, a, a]

ans = 1 2 1 2 1 2 3 4 3 4 3 4

[a; a; a]

ans = 1 3 1 3 1 3

2 4 2 4 2 4

[a, zeros(2); zeros(2), a']

ans = 1 3 0 0

2 4 0 0

0 0 1 2

0 0 3 4

Introducción a Matlab y Simulink Javier Ramírez

13

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!! Introducción a Matlab y Simulink Javier Ramírez

14

Operaciones con matrices 

+, -, *, y / 



Definen operaciones con matrices.

Debemos distinguir: 



“.*”: Multiplicación componente a componente. “*” Multiplicación matricial. Introducción a Matlab y Simulink Javier Ramírez

15

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 (“^”). Introducción a Matlab y Simulink Javier Ramírez

16

Escalares 

a = 1 3

Ejemplos

2 4

Entrada

Salida

Comentarios

b=2

b=2

Define b como un escalar.

a + b

ans = 3 4 5 6

La suma se hace componente a componente.

a * b

ans = 2 4 6 8

Igual que la multiplicación.

a ^ b

ans = 7 10 15 22

Potencia matricial - a*a

a .^ b

ans = 1 4 9 16

Potencia componente a componente.

Introducción a Matlab y Simulink Javier Ramírez

17

Vectores 

Un vector es una matriz de una sola fila o columna Entrada

Salida

Comentarios

v = [1 2 3] u = [3 2 1]

v = 1 2 3 u = 3 2 1

Define 2 vectores.

v * u

Error

Las dimensiones no coinciden.

v * u'

ans = 10

Al tomar la traspuesta se corrige el error.

dot(v,u)

ans = 10

Producto escalar (idéntico al anterior).

cross(v,u)

ans = -4 8 -4

El producto vectorial sólo se emplea con vectores en 3 dimensiones.

Introducción a Matlab y Simulink Javier Ramírez

18

Matrices 

Matlab tiene numerosas funciones predefinidas (help matfun).

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 = 33

Traza de una matriz

rank(k)

ans = 3

Rango de una matriz.

det(k)

ans = -136

Determinante de una matriz

Introducción a Matlab y Simulink Javier Ramírez

19

Matrices Entrada

Salida ans =

inv(k)

[vec,val] = eig(k)

Comentarios 0.0294 -0.0662 0.0956 -0.4412 -0.5074 1.0662 0.4706 0.6912 -1.2206

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

Introducción a Matlab y Simulink Javier Ramírez

Inversa de una matriz 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.

20

Variables en el espacio de trabajo 

whos  Lista las variables definidas en el entorno. >> whos Name

a b c

Size

Bytes

Class

100x1 100x100 1x1

800 80000 8

double array double array double array

Grand total is 10101 elements using 80808 bytes 

clear  Borra variables del entorno. Introducción a Matlab y Simulink Javier Ramírez

21

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. Introducción a Matlab y Simulink Javier Ramírez

22

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 Introducción a Matlab y Simulink Javier Ramírez

23

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 ;

Para salvar una o varias matrices  

save datos.mat (guarda todas las variables) save datos.mat x (sólo guarda x) Introducción a Matlab y Simulink Javier Ramírez

24

Salvar y recuperar matrices 

save sesion 



save fichero X 



Salva sólo la variable X

load sesion 



Salva todas las variables en el archivo binario “sesion.mat”.

Recupera los datos previamente salvados

Si los ficheros se pueden salvar en formato texto (ascii). Pueden verse con un editor de textos. Introducción a Matlab y Simulink Javier Ramírez

25

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. Introducción a Matlab y Simulink Javier Ramírez

26

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;

 

 

 

Introducción a Matlab y Simulink Javier Ramírez

27

Resultado:

Introducción a Matlab y Simulink Javier Ramírez

28

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; Introducción a Matlab y Simulink Javier Ramírez

29

Resultado

Introducción a Matlab y Simulink Javier Ramírez

30

Gráficos tridimensionales   

[x,y] = meshgrid(-2:.2:2, -2:.2:2); z = x .* exp(-x.^2 - y.^2); mesh(z);

Introducción a Matlab y Simulink Javier Ramírez

31

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 0.5 0.4 view(-15,25) 0.3 colormap cool 0.2 0.1 0 -0.1 -0.2 -0.3 -0.4 -0.5 2 1 0 -1 -2

-2

-1.5

-1

-0.5

0

Introducción a Matlab y Simulink Javier Ramírez

0.5

1

1.5

2

32

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. Introducción a Matlab y Simulink Javier Ramírez

33

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;

Introducción a Matlab y Simulink Javier Ramírez

34

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 Introducción a Matlab y Simulink Javier Ramírez

35

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) % Calcula la media. a = sum(v)/n;

% Subfunción

function m = median(v,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

% Subfunción

Introducción a Matlab y Simulink Javier Ramírez

36

Bifurcaciones Condición 1

Condición true

Sentencias

false

Condición

false

Condición 2

true Bloque 1

false

Bloque 2

false

true Bloque 1 true Bloque 2

Bloque 3

Introducción a Matlab y Simulink Javier Ramírez

37

if Sentencia if

Bifurcación multiple

if condición sentencias end

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

Introducción a Matlab y Simulink Javier Ramírez

38

switch switch expresion case case1, bloque1 case {case2, case3, ...} bloque2 ... otherwise, switch valor bloque3 case -1 end disp('negativo'); case 0 disp('cero'); case 1 disp('positivo'); otherwise disp('otro'); end Introducción a Matlab y Simulink Javier Ramírez

39

Bucles

false

Condición

Sentencias

true Sentencias

Condición

true

false

Introducción a Matlab y Simulink Javier Ramírez

40

for for i = 1:n sentencias end

for i = vector sentencias end

for i = n:-0.2:1 sentencias end

for i = 1:m for j = 1:n sentencias end end

Introducción a Matlab y Simulink Javier Ramírez

41

while

{continue, break}

while condición sentencias end

Sentencia break Hace que termine la ejecución

Sentencia continue Hace que se pase inmediatamente a la siguiente iteración del bucle for o while

n = 1; while prod(1:n) < 1e100 n = n + 1; end

Introducción a Matlab y Simulink Javier Ramírez

42

Toolboxes 

Toolboxes para DSP y comunicaciones:   

   

Communications Toolbox Filter Design Toolbox Image Processing Toolbox Signal Processing Toolbox Statistics Toolbox System Identification Toolbox Wavelet Toolbox

Introducción a Matlab y Simulink Javier Ramírez

43

Procesamiento de señales y comunicaciones 

Matlab dispone de unas librerías para tratamiento digital de señales. 

Signal Processing Toolbox



Communications Toolbox

Introducción a Matlab y Simulink Javier Ramírez

44

Filtrado de señales 

y= filter(b,a,x); 

Filtra la secuencia x con el filtro descrito por b y a.

Introducción a Matlab y Simulink Javier Ramírez

45

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)



20

Magnitude (dB)



Phase (degrees)



freqz(1,[1 -0.8],256);

10 0 -10 0

0.2 0.4 0.6 0.8 Normalized Frequency ( rad/sample)

1

0.2 0.4 0.6 0.8 Normalized Frequency ( rad/sample)

1

0 -20 -40 -60 0

Introducción a Matlab y Simulink Javier Ramírez

46

Diseño de filtros 

B = FIR1(N,Wn);  



B = FIR1(N,Wn,'high'); 



Filtro paso alta.

Wn = [W1 W2]; B = FIR1(N,Wn,'bandpass'); 



Filtro FIR paso baja de orden N. Wn es la frecuencia de corte normalizada (0

Interpolación {‘nearest’}, ‘bilinear’, ‘bicubic’

B = imrotate(A,angle,method,bbox) 



method bbox

->

Bounding box

{‘crop’} ‘loose’

Recortar una imagen  

B= imcrop(A); B= imcrop(A,rect);

Herramienta interactiva

Introducción a Matlab y Simulink Javier Ramírez

83

Filtrado 2D 

B= imfilter(A,h)

 



Original

N= 5; h = ones(N,N) / (N*N); Af = imfilter(A,h);

Filtrada N= 5 Introducción a Matlab y Simulink Javier Ramírez

Filtrada N= 20 84

Respuesta en frecuencia de filtros 2D [H, [H, [H, [H,

 

 

f1, f1, f1, f1,

f2] f2] f2] f2]

= = = =

freqz2(h, n1, n2) freqz2(h, [n2 n1]) freqz2(h) freqz2(h, f1, f2)

1

1

0.8 Magnitude

Magnitude

0.8 0.6 0.4

0.6 0.4 0.2

0.2

0 1

0 1 0.5

1 0.5

0

1

-0.5 -1

-1

Fx

0.5

0

0

-0.5 Fy

0.5 0

-0.5

Filtro 55

Fy

-0.5 -1

-1

Introducción a Matlab y Simulink Javier Ramírez

Fx

Filtro 2020 85

Diseño de filtros 2D

1 0.8 0.6

 



h = fwind1(Hd, win) h = fwind1(Hd, win1, win2) h = fwind1(f1, f2, Hd,...)

0.4 0.2 0 1 0.5 0

Ejemplo:      

 

0

-0.5

-0.5

[f1,f2] = freqspace(21,'meshgrid'); 1.5 Hd = ones(21); r = sqrt(f1.^2 + f2.^2); Hd((r0.5)) = 0; 1 colormap(jet(64)); mesh(f1,f2,Hd); Magnitude



1 0.5

h = fwind1(Hd,hamming(21)); freqz2(h);

-1

-1

0.5

0 1 0.5

1 0.5

0

0

-0.5 Fy

-0.5 -1

-1

Introducción a Matlab y Simulink Javier Ramírez

Fx

86

Ajuste del nivel de intensidad

6000

15000

4000

10000

4000 3000 2000

2000

5000

0

0

0

100

200

1000 0

100

200

0

0

100

Introducción a Matlab y Simulink Javier Ramírez

200

87

Ecualización del histograma

250

250

250

200

200

200

150

150

150

100

100

100

50

50

50

0

0

100

200

0

0

100

200

0

0

100

Introducción a Matlab y Simulink Javier Ramírez

200

88

Ecualización del histograma

6000

15000

4000

10000

2000

5000

4000

2000

0

0

50

100

150

200

250

0

0

50

100

150

0

200

200

200

200

100

100

100

0

0

50

100

150

200

250

0

0

50

100

150

200

250

15000

2000

0

0

50

100

150

200

250

0

50

100

150

200

250

0

50

100

150

200

250

2000

10000 1000 0

1000

5000 0

50

100

150

200

250

0

0

50

100

150

200

250

0

Introducción a Matlab y Simulink Javier Ramírez

89

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

v2 es la varianza del ruido

Introducción a Matlab y Simulink Javier Ramírez

90

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 503 = 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 Introducción a Matlab y Simulink Javier Ramírez

91

Matlab para reconocimiento de patrones 

Análisis discriminante:   



knn:    



class = classify(sample,training,group) class = classify(sample,training,group,type) class = classify(sample,training,group,type,prior)

Class Class Class Class

= = = =

knnclassify(Sample, knnclassify(Sample, knnclassify(Sample, knnclassify(Sample,

Training, Training, Training, Training,

Group) Group, k) Group, k, distance) 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)

Introducción a Matlab y Simulink Javier Ramírez

92

Análisis discriminante: Ejemplo 3.8 3.6



 

load fisheriris SL = meas(51:end,1); SW = meas(51:end,2); group = species(51:end);

3.4 3.2 3 SW



Fisher versicolor Fisher virginica

2.8 2.6 2.4 2.2 2 4.5

5

5.5

6

6.5

7

7.5

8

SL



 

h1 = gscatter(SL,SW,group,'rb','v^',[],'off'); set(h1,'LineWidth',2) legend('Fisher versicolor','Fisher virginica','Location','NW')

Introducción a Matlab y Simulink Javier Ramírez

93

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}')

Introducción a Matlab y Simulink Javier Ramírez

94

Análisis discriminante: Ejemplo Classification with Fisher Training Data 4 3.8

Fisher versicolor Fisher virginica

3.6 3.4

SW

3.2

3 2.8 2.6 2.4 2.2

2 4.5

5

5.5

6

6.5

7

7.5

8

SL

Introducción a Matlab y Simulink Javier Ramírez

95

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

Introducción a Matlab y Simulink Javier Ramírez

96

Selección de características Kernel Function: linear_kernel

1.8

Kernel Function: linear_kernel 4.5

setosa (training) setosa (classified) versicolor (training) versicolor (classified) Support Vectors

1.6

1.4

setosa (training) setosa (classified) versicolor (training) versicolor (classified) Support Vectors

4

1.2 3.5 1

0.8 3 0.6

0.4

2.5

0.2

0

1

1.5

2

2.5

3

3.5

4

4.5

5

data= X(:,[IDX(1) IDX(2)]);

5.5

2

4

4.5

5

5.5

6

6.5

data= X(:,[IDX(3) IDX(4)]);

Introducción a Matlab y Simulink Javier Ramírez

97

7

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 Introducción a Matlab y Simulink Javier Ramírez

98

!

"

#

$

%

!"

"#



%$"

!

" $ &

#

'"

$

%

%

'

$

$

) (( * , + ) -

(( ) * (( ) + (( ) , ) *

+

#

) ((

./

./

0

1

, -"

"

% -

.

)

-

/ $ / ./ . / $ 0 1

#

$

) (( 4-5 6 7 89 ((

&

) %

&

$

(

((

#

2 ) 3! * +

(( % (( % (( % (( %

2 ) 3!$*$+:4$-$5:6$7$89

*" # (( ) * , +>= (( )

= " @ A

?( ?(

*$+ * +

; ;

) 3! * +9 ) 3!$*$+9 ) 3!$*$+9< -< ) 3!:*:+9

.

(( ((

)

)

&

@ A > !7B C

'

?( ?(

2 2 2$2 2

2 2 2 2

2 2

2

3 +" D

"

(( (( ((

) 3! ?5 B ?*69 ) @ A ) @

A

) - .; - .< - .= - .> - .; - .? - .> - . 56 9?9 ?7 56 @ 9?A ?8

(( ) 3! * +9 (( ) 34 - 59 (( ) %@ $ A ) 4 !+ *7 *6 !7 (( 30$ 9 ) %@ $ A 0) 4-5 ) BBBBB , -

$ /

'

56 56

%

%.

*E +E" )

56 56 $ 56 $

( (( ) 3B'!'!BB9 (( 1 ) (( ) 3 @B"!> A : (( @1$ A -" F

)

( 7D) (( ) 3B'!'!BB9 56 (( 1 ) 56 $ (( ) @B"!> A 56 $ (( 2 ) @B"*> A 56 $ (( +@1$ $2A

@B"!> A9

; $

-.

56 - .

;

( (( ) 3B'!'!BB9 (( 1 ) (( ) @B"!> A (( @1$ A

-.

; @ @?B7 7?9C 9?9: ?BC

56 - .

4"

/

#

56 758 959: 56 & 56

%

/

#

" )

4

(( (( ((

) 3! *9 ) 3! + -9 @ $ A @ ,*AC@ G*,+ ,-A (( 2 @ $ A (( 3 $29 ) 2 @ $ ((

2

56 ?9 56 9?7 ?A 56 56 56

A

@ $2A

* +

56

/

)

(( . ) +B (( 1 ) B"+ (( 3 *$ *9 ) *@. $1 A (( @ *$ *A !C@ G*,!7 ,8BBA

F

* +

AE

"

!

$

"

$

56

'

I

>

(( ) ;@ $ A (( 3 $29 ) 2 @ A (( ) @ > ;@ (( ) @ A );

L@ $!$?!A

5"

@2AAA>

>

I J I

@2A

>

J)

K (( ) ;@ (( ) (( )

56

$ @ " @ "

) A

J'KA J'KA

*B+

25B2

"

((

@ A

56

@ A

56

(( 3 $1$ 9 ) ((

@ A$

J I J

$

1

@ A )

1@ A

56 56

*+

)

" ) (( ) ;@3! *9$ 3! + -9A 56 ;@ ,*AC@ G*,+ ,-A (( 2 @ A

56 ?9 56 9?7 ?A

A

H

)

66 ) ;@I IA 56 (( ) @ ,*AC@ G*,+> ,-A @ ,*AC@ G*,+ ,-A (( * ) >

* +

F

&

(( ) 3! *9 (( ) 3! + -9 (( 2 @ $

((

G

$

H

(( ) ;@3! *9$ 3! + -9A @ ,*AC@ G*,+ ,-A

((

56 56 56 56

L 2 2

22

2 2

6"

;

(( (( 3

@ A $; 9 )

(( 3 (( ((

"

$; 1

$.9 ) )

56 56

@ $+A

1@ ) *B>

@ A

56

A !B@

56 A 56

1

(( 3M $D $. $. 9 ) M ) D ) . )Q Q . )Q Q

@ A

. $

56 @ !A 56 56 56 56 56 56 56 56 56 56 56

((

56

@ A

N @ A ) @

(( (( &

Q

@ $

OOO . *

-

+

.

-

>. >. 5

Q -

2

Q

2.

"

*D

/

+ $

" $ $3+ 49A

$+A

56 56 56 $ 56 $ 56 56

'

N

56

7" (( (( (( / ((

)

F

6E % .@ A

. ;7

56 MMM ( P

(( / @ A (( @I .IA (( / (( ; (( / (( / ;;

((

-

-

-Q Q ; Q

(( ! ) !BC@@ ,!A>@ ,*A>@ ,+AA (( 3M !$D !$. !$. !9 ) M !) D !) . !) . !) (( @ !A

0

$

&

N -

N

2R;72 $ & . 2R;72 2R;@2 '

* .

(

+ #

O !"

L" %

R

N

-

. $

/

$ & "

$ N

$

%

R

"

%

" R

%

R

2%

R

! 1

2 -!

.

&

) 66

R L

$ .)

$ $

% '

'

%

& '

# %

%

R-

.)

)

$

" $ &

%

/ R

(

%

R %

' ; %

E

0

1) / &

0 #

"

$

R) N

$

% )

. )

/

# ) E

1) / &

& / E

& ;

F )/ $

) # ) D $

%

# E $ P

?D

$

E

)

)

E

)F

S

D ),

%

D

%

' /'

0

), ) / F

M

0 "

L'

2 E

R '

)( )( S L

) "

"

)S

N $

&

% N 2

' D

) ,

F

L

)S

2

N

#

) D ) ,

?B

E

5B

E ) ,

'F

L /

# "$ 2??5?2

@

' E

P

N

L)

) "

)/ S L

F

'

"

)

&

F

R S

N ) /

&

0

$ "

N

)P

N

F

F

)/

2

" D

' )

;B

$ .

M

) S

-

;E

&

" )

2

$

)S

N

N ) S

.

#

#

/) L

M

Q

'

=

R

)/

"

) %

S % )S )S

$

N

; !) /

/ N

& !) /

/ N

N

) S #

#

*"

" / %

+

' -

' %

)

1

* '

, 0

. /

! &#

#

'

)

'

B.

%

)/

2 9.

0

2 )% #

2 7.

0

2-

"

.

) / $

@.

0

)" 2T62 26T2 %

& A.

;

)% / &

8.

;

0

)%

&

#

> ' ! :.

R2

2F '

. 1

) %

2

#

-2F #

UF

!

' # R2 2F

U(

' ' / 2

2 2

,

2

-2F U%

# 2.

$ L 0

2

$ 2%

& 2 $ "

RU% R U%

2%

) 2% ! 1 2

R $

RU%

U%

N

%

+

)

%

*

,

.

1 -

0 %

2%

+"

%

2

"

$ @!A D

#) 2%

U/

2

!

-K ' >

>

$ .

#

@*A

/

#

2% R 2

%

R D

#

2%

2

' @+A / @4A -

. N

$ 2V2

$ 2H2 "

2%

2

' 2%

2 @-A D

# @5A 2Q

# 2-

'

#

. #

@6A 2

1

2 (

#

2 2

%

. !. L

#

N 2

2

) N

OTO D & ! %

N

%

R

V- .

- .

-.

9

)

H- .

C @X

-.

W

, D

)

(( ) ;@379$ 3! 4 89A )7C@ G*,4 ,8A (( ((

@ A @ A ,

% *%

R +

&

$

L

$

OTO D & * %

%

$

R

) - .; - .? - . - .;(X 9- . - .;,X - .> - .;- - .5 - ..>( %

,

-.

-.

F

-. ,

( -.

( -.

-.

R

-

*

+.

$ -

#

#

.

$

$ ) *

Y +,

Y +,* - . *

/ !) #) +

* '! 8

0 *

! " # $ %$ & '(# ! (#) '& #

'!

9

!

'# 8

8

:

0 '

23 1 !)! ) 0

7

*

+ 4

5

( (

-

6

1

' %

R

$

*F

+-

F .

) Z - .;Z - .?Z - . Z - .;9X(XP XP- . Z - .;,X X - . Z - .;- - .5 - ..>(

*

)

Y

+,

+,* - . *

+

/ )!) ) #) ) +

*

'!

! : ;!; # *

: ! " # $ %$ & '(# ! (#) '& #

23 1 !)! ) 0

:

9

*

+ 4 ( (

-

5

6

1

3+5

3+4.5

6.5

++5

6.5

OTO D & + L

%

N

R

!

N

N

/ ,

,

%

? Y

% (

F

)

Y

Y

Y 7

*

+,

5

+,* - . *

/ )!) ) #) ) +

+

# ! 7

5

/ ;

=

!

! / /

;!;

/1

#

=) / = 1

/ ' ) /1 >

! " # $ %$ & '(# ! (#) '&

9 #

23 1 !)! ) 0

+ 4 ( (

-

5

6

1

!

<

% /

$ "

$

& -.

BE

" *%

+

$

'!

)

Y

Y

Y

Y 7

*

+,

5

+,* - . *

/ !) #) +

'!

0 ' '!

#

>

! 7 / /

5

/ ;

=

/1 =) /

/ ' ) /1 = > 1

0 *

9

( (

5

6

1 !

*

>

+ 4

-

-

'# 23 1 !)! ) 0

! " # $ %$ & '(# (#) '& !

#

++5

!

<

.

OTO

& !' # , DQP

2 &

$

/

$

)

%"&'

$ ( ) *

%"&'

$ ( ) * P -P

) 2

;

B

Q

A DQP

9

S- .

7 @ ( @B D @9 @7 \ A ( AB D A9 A7 \

S- . -

$

.

(' -

$ ('

%

R.

0 U

!,D"FS[

)

!"# $ " # (!" # )!"#

*

!"# "#

!" #

!"# L

2 =

#

OTO

& *'

! @ ? = 5

A

B

"

)

5L

-.

,, -.

5L

]

,,

]

)( ]

5 "

$ !-

5 $

D . "

^ $

-.

"

) - . ; ]X - . - . ; ( X - . ? X - .> ? - . - . ; ] X1- . -.;] X -. - . ; - . ? ^X 1- .> ? !X1- . K DQP

)

L - . ; ]XL - . L - . ; ( XP - . ? X XP - . ? L - . L - . ; ] X0- . / - . ; ] XP - . / - . ; / - . ? ^X X0- . ? !X0- . & )

$

(

)

9: *

$

+' # +' , -.,"/ 012 +3' # , - ,4/ 2 5' - 2 6' # ,% # & -*2 7' # -+8,4 2 ' % , & -+8,4 /"2

,

(

+' # ' +' , ' -.,"/ +3' # , ' - ,4/ 5' ' - 2 6' # ,% # &' 7' # ' -+8,4 ' % , &' -+8,4

% 1- .

43;:

R

-.

)

*

012 2 -*2 2 /"2

-.

P -D

$ A

B

Q

9 D

)

0 U

L

2 =

2

DQP

$

7 \

,

-] ]

.

@ %

L -. @B K @9 D

A

;

'

N @ AB D A9 K

$ '

8 % A -( 8B D $ 89 K 87 K

'

L -. A.

1;B

>

' ' '

OTO

& +' O , DQP

/

; &

$

$

P -P B

Q

!"# "#

!" #

!"#

=

2

;

A

S- .

7 K

S- . $

!

;A

A K S- . -4 8 M,

>

.

-

.

S- .

-

.

"Q,PKQ3 / ! *

P

.

+O

: K ];B

-.

S- .

-. V- . ?

S- .

] Y

C K W K S- . -"

*

DQP

9 P

@ D

#

)

2

U

" # (!" # )!"#

%"&'

$ ( ) *

)

!"# $

%"&'

$ ( ) *

)

!,D"FS[

-.

.

]; A

H- .

OTO

& 4' E

R

%

N

$

B EEE

9

$ ;E B

%

) -K L-.

Y

]X] SB- .;

?

%

0- .

^X X 9?-!X ?^X( .X ?-( X!?] X] .

) ) _E@ '

"

9.

X ?( S9- .;

X ?(

"

$

/- .

%

) -.

_ A`

'

) /- .

\- . ?

L- . (- .

Y

]X] SB- .;

Y

?

X ?( S9- .;

X ?(

0- .

^X X 9?-!X ?^X( .X ?-( X!?] X] .

] [- .;

P -D

$

B

)

0 U

A Q

X ?B

L

2 =

2

;

DQP

9 \

,

7 (

N

-] ]

. L N ) _E9

WEa

_B % @ D

$

%

A %

-. AB K A9 K A7 K

1- .

8 %

9 EEE '

' -.

$

R

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

1

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/(z 2 +2z +4) con tiempo de muestreo de 1 seg, quedaría:

Para realizar el diagrama en bloques de un sistema se hace lo siguiente:

2

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

3

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. 4

(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

5

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; 6

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:

7

% 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. 8

% 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:

9

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:

10

4. SOLUCIÓN DE ECUACIONES DIFERENCIALES Ejemplo:

Resolver la siguiente ecuación diferencial:

d2y dy  3  6 y  4t  y' '3 y'6 y  4t  y' '  4t  3 y '6 y 2 dt dt Diagrama Simulink:

Respuestas:

11

Ejemplo:

Comprobar la integración por Simulink.

12

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.

13

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

14

Diagrama Simulink:

En Matlab: >> plot(t,y)

5.3 EJERCICIOS

Ejercicio1:

15

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.

A

dh  q(t )  K h dt

Diagrama Simulink:

16

EJERCICIO3: LA BOLA MAGNÉTICA

Ecuaciones:

(1)

m

d 2h i 2  mg  h dt 2

(2) L

di  V  iR dt

Valores:

m=0.1 Kg;

g=9.81;

R=2 Ohm;

L=0.02 H;

=0.001

Diagrama simulink:

17

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

18

19

EJERCICIO4: TANQUE DE AGUA

Ecuación del modelo:

dVol dh A  bV  a h dt dt

Diagrama simulink:

20

Controlador:

Planta:

EJERCICIO5: MOVIMIENTO PARABÓLICO

21

Ecuaciones:

x' '  0 Movimiento unforme y ' '   g Movimiento acelerado

Condiciones iniciales:

Vo=100 m/sg;

 = 30º

22

23

EJERCICIO6: PÉNDULO SIMPLE

Ecuación:

mL ' ' BL 'wsen  0

Valores:

w (peso) = 2;

L (longitud) = 0.6;

B (amortiguación) = 0.08;

Condiciones iniciales: ’(0) = -2 rad/sg; (0) =  /2

24

Diagrama simulink:

25

EJEMPLO: SISTEMA MECANICO

Parámetros:

m1=40; m2=60; k1=400; k2=400; b1=180; b2=220;

Ecuaciones dinámicas:

f (t )  m1

0  m2

dv1  k1 (v1  v2)dt  (v1  v2)b1 dt

dv2  k1 (v2  v1)dt  (v2  v1)b1  k 2 v2dt  b2v2 dt

Ecuaciones de Laplace:

F ( s)  m1sV1 

0  m2sV 2 

K1 (V 1  V 2)  (V 1  V 2)b1 s

k1 k2 (V 2  V 1)  (V 2  V 1)b1  V 2  b2V 2 s s

26

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

27

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:

V

dc(t )  Fci (t )  Fc (t )  KVc (t ) dt

V

dc(t )  Fci (t )  ( F  KV )c(t ) dt

V dc(t ) F  c(t )  ci (t ) F  KV dt F  KV

Constante de tiempo:

 

V F  KV

Ganancia de estado estacionario:

Ke 

F F  KV

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/pie 3 28

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 29

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

30

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 31

pause n=1; while n==1 T=input('Entre tiempo: ') delta=input('Entre valor delta: ') i=find(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 32

pause n=1; while n==1 T=input('Entre tiempo: ') delta=input('Entre valor de delta: ') i=find(t=(T-delta)); tiempo=t(i) voltaje_salida=eo(i) n=input('Entre 1 para seguir y 0 para parar: ') end

33

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.

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

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

XYgraph

Grafica la entrada superior en el eje x y la inferior en el eje y

Función de Transferencia

Representa la función transferencia a lazo abierto.

de

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.:

Proporcional: K, Integral: K/Ti, Derivativo: K.Td

Sinks

Entradas

Rango de los ejes

Simulink-extras: Aditional linear Mux

Permite representar dos señales distintas en una misma gráfica.

Signals &System.

Número de entradas

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.

d ( x)  − 60  + 5 exp  * X (t ) = 1 dt  T 

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.

-

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:

d ( x)  − 60  = 1 − 5 exp  * X (t ) dt  T 

(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

De esta forma tenemos:

Figura 6. Diagrama de Bloques con sus parámetros.

-

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:

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.

dT = A(T − To1) * Fo − B(T − Ta) dt

A = 0.08

B = 0.05

dTa = C (Ta − To 2) * Fp + D(Ta − T ) dt

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.

-

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

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.

FT =

1 s + 4s + 2 2

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

-

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:

1  Gc1 = K 1 +   Ti 

Donde, K = 1

y Ti = 0.5

Solución:

-

Los Bloques seleccionados son:

Figura 15. Bloques usados para la representación del sistema.

-

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.

Introduccion ´ a M ATLAB y S IMULINK para Control Virginia Mazzone

Regulador centr´ıfugo de Watt

Control Autom´atico 1 http://iaci.unq.edu.ar/caut1 Automatizacion ´ y Control Industrial Universidad Nacional de Quilmes Marzo 2002

´ Indice General

´ a M ATLAB y S IMULINK - 1 Introduccion

´Indice General 1

2

Introduccion ´ a M ATLAB ´ de una funcion ´ transferencia 1.1 Conversion 1.2 Ra´ıces de un polinomio . . . . . . . . . . . 1.3 Desarrollo en fracciones simples . . . . . ´ transferencia a lazo cerrado . . . 1.4 Funcion 1.5 Respuesta al impulso . . . . . . . . . . . . ´ 1.6 Respuesta al escalon . . . . . . . . . . . . 1.7 Gr´aficos . . . . . . . . . . . . . . . . . . . . Introduccion ´ a S IMULINK ´ . . . . . . . . . . . 2.1 Acceso y descripcion ´ transferencia a lazo cerrado . . 2.2 Funcion ´ . . . . . . . . . . . 2.3 Respuesta al Escalon ´ de par´ametros ya definidos . 2.4 Utilizacion

1

. . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . .

1 1 4 4 6 7 8 9

. . . .

14 14 16 17 19

´ a M ATLAB Introduccion

´ elemental a M ATLAB, destinado a conocer y practicar alEste apunte es una introduccion gunas de las operaciones b´asicas con funciones de transferencia. Los comandos que uti´ sobre un comando lizaremos son los que figuran en la Tabla 1. Para mayor informacion en particular puede ejecutarse help topic o simplemente help ’comando’, desde la ventana de comando de M ATLAB.

1.1

´ de una funcion ´ transferencia Conversion

´ transferencia puede describirse en M ATLAB utilizando dos vectores filas: uno Una funcion para los coeficientes del numerador y otro para los coeficientes del denominador. A menudo ˜ un sistema conocer la ubicacion ´ de sus polos y ceros; se requiere para analizar o disenar ´ est´a contenida en la funcion ´ transferencia del sistema. Cuando la fundicha informacion ´ de transferencia est´a especificada como razon ´ de polinomios, podemos conocer sus cion polos, ceros y ganancia, o viceversa. Los comandos que nos permiten e´ sto son: tf2zp, que de un cociente de polinomios nos devuelve los ceros, polos y una ganancia, y zp2tf, que de conocer los polos, ceros y la ganancia de un sistema nos da el numerador y denominador ´ de transferencia. de su funcion ´ transferencia Ejemplo 1. Supongamos la funcion G (s) =

s2

5s + 20 , + 4s + 20

´ del numerador y factorizamos el denominador utilizando sus si sacamos el 5 factor comun ra´ıces, nos queda de la forma G (s) =

5(s + 4) . (s + 2 − 4 j)(s + 2 + 4 j)

´ Indice General

Comando exp sin cos sinh cosh clf plot subplot hold title xlabel ylabel text print figure impulse step tf zpk ss2tf tf2zp ss2zp zp2tf tf2ss zp2ss

´ a M ATLAB y S IMULINK - 2 Introduccion

´ Breve explicacion Exponencial. Seno. Coseno. ´ Seno Hiperbolico. ´ Coseno Hiperbolico. Elimina la figura actual. Crea gr´aficas. ´ Crea multiples gr´aficos en la misma figura. Mantiene la gr´afica anterior. Agrega t´ıtulo del gr´afico. Agrega nombre del eje-X. Agrega nombre del eje-Y. Agrega texto al gr´afico. Imprime el gr´afico o lo guarda en un archivo Crea figuras (ventana para gr´aficos). Respuesta al Impulso. ´ unitario. Respuesta al escalon ´ de transferencia. Crea un modelo en funcion Crea un modelo de cero-polo-ganancia. ´ de modelo en espacio de estados a funcion ´ de transferencia. Conversion ´ de modelo en funcion ´ de transferencia a polos y ceros. Conversion ´ de modelo en espacio de estados a polos y ceros. Conversion ´ de modelo en polos y ceros a funcion ´ de transferencia. Conversion ´ de modelo en funcion ´ de transferencia a espacio de estados. Conversion ´ de modelo en polos y ceros a espacio de estados. Conversion Tabla 1: Comandos que utilizaremos

´ Indice General

´ a M ATLAB y S IMULINK - 3 Introduccion

Para llevar a cabo lo mismo con M ATLAB, debemos ingresar los polinomios numerador y 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 coeficientes de cada t´ermino, ordenados de mayor orden al menor. Para separar las columnas del vector lo hacemos con un espacio, o tambi´en podr´ıamos utilizar coma. El punto y coma final es para que el resultado de lo ejecutado por M ATLAB no salga por pantalla. Si ahora ingresamos: [z,p,k]=tf2zp(num,den) Obtenemos: z=-4 p=[-2+4j -2-4j] k=5 ´ transferencia dada por un cociente de polinomios se puede escribir Dado que toda funcion de la forma ∏ m ( s − zi ) G (s) = k ni=1 con m ≤ n, ∏i =1 ( s − pi ) ´ transferencia, haciendo podemos armar f´acilmente nuestra funcion 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 y p. Con la instrucci´on: [num,den]=zp2tf(z,p,k); ´ transferencia: obtenemos el numerador y denominador de la funcion num=[5 20] den=[1 4 20] ´ de transferencia en El hecho de tener el numerador y el denominador de la funcion dos variables, no significa que M ATLAB la identifique como tal. Para ello se utiliza el comando tf, que describe en una sola variable la transferencia dada por su numerador y al denominador. Lo utilizamos de la siguiente forma: G=tf(num,den); ´ transferencia como cociente de productos de Si queremos que M ATLAB arme la funcion los ceros y los polos, para ello utilizamos zpk, de la siguiente forma: G=zpk(z,p,k);

´ Indice General

1.2

´ a M ATLAB y S IMULINK - 4 Introduccion

Ra´ıces de un polinomio

´ transferencia ven´ıa En el Ejemplo 1 vimos que el polinomio denominador de la funcion 2 ´ de dado por: s + 4s + 20, y pudimos hallar sus ra´ıces dado que se trata de una ecuacion segundo orden. En polinomios de orden superior, la tarea de encontrar sus ra´ıces no siempre es tan f´acil. ´ de M ATLAB roots podemos calcular las ra´ıces de cualquier polinomio. Con la funcion ´ tenemos que ingresar el polinomio, como vector, recordando Para ejecutar dicha funcion que los polinomios se ingresan en la primer componente el t´ermino de mayor orden y luego en 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 dos pasos, podemos hacerlo solo en uno; si tipeamos En lugar de hacer la operacion r=roots([1 4 4 1 20]) obtenemos el mismo resultado Las cuatro ra´ıces del polinomio anterior que surgen de M ATLAB son: −2.6445 ± 1.2595 j y 0.6545 ± 1.3742 j. Si el caso es al rev´es, es decir, tengo las ra´ıces y quiero conocer el polinomio, el comando poly es el que se utilizaremos. Siguiendo con el mismo ejemplo, supongamos que lo que tenemos son las ra´ıces p1,2 = −2.6445 ± 1.2595 j y p3,4 = 0.6545 ± 1.3742 j. Entonces el polinomio al que le corresponden esas ra´ıces es: P=poly([p1,p2,p3,p4]); Notemos que el polinomio P que obtuvimos es m´onico; si quisi´eramos cualquier otro, deber´ıamos multiplicar a P por el coeficiente principal. Otra cosa a tener en cuenta es que siempre que pongamos una ra´ız compleja debemos poner su conjugada.

1.3 Desarrollo en fracciones simples ´ transCuando analizamos un sistema de control, por lo general disponemos de su funcion Y (s) ferencia a lazo cerrado G (s), donde G (s) = R(s) . Con lo que podemos escribir la salida en ´ de la transferencia y la entrada: Y (s) = G (s) × R(s). funcion Si dese´aramos conocer la respuesta temporal g(t) del sistema cuando lo excitamos con ˜ de entrada r(t), debemos calcular la transformada inversa de Laplace, es decir una senal g(t) = L−1 {Y (s)} = L−1 { G (s) × R(s)}. Como sabemos, es m´as sencillo de antitransformar cuando se trata de un cociente de polinomios, dado que si lo expresamos en fracciones simples podemos utilizar una tabla de transformadas de Laplace. ´ transferencia: Ejemplo 3. Supongamos que tenemos la siguiente funcion G (s) =

16s + 16 (s + 2)(s + 4)

y que

R(s) =

1 s

´ Indice General

´ a M ATLAB y S IMULINK - 5 Introduccion

Como las ra´ıces del denominador sor reales y distintas, el m´etodo de desarrollo en fracciones simples nos permite escribir a G (s) × R(s) de la siguiente manera: 16s + 16 A B C = + + s(s + 2)(s + 4) s s+2 s+4 Ahora podemos calcular c(t) se la siguiente forma:   B C A −1 c(t) = L + + s s+2 s+4       A B C −1 −1 −1 = L +L +L s s+2 s+4 −2t −4t = A + Be + Ce ´ Para calcular los valores de A, B y C lo hacemos mediante la formula de residuos, dado que en este ejemplo los polos son de primer orden, resulta que Res{ p} = lim(s − p) F (s) s→ p

donde p es el polo para el cual se est´a calculado el residuo. Veamos como ser´ıa en este ejemplo: 16s + 16 16(0) + 16 = =2 s→0 s(s + 2)(s + 4) (0 + 2)(0 + 4) 16s + 16 16(−2) + 16 B = lim (s + 2) = =4 s→−2 s(s + 2)(s + 4) (−2)(−2 + 4) 16s + 16 16(−4) + 16 C = lim (s + 4) = = −6 s→−4 s(s + 2)(s + 4) (−4)(−4 + 2) A = lim(s)

Con estos residuos, queda determinada la salida como: c(t) = 2 + 4e−2t − 6e−4t En general, estos c´alculos pueden tornarse muy complicados de realizar ’a mano’. Veamos ´ M ATLAB residue. Ingresemos nuevamente los como se simplifican utilizando la funcion polinomios numerador y denominador de la misma forma como lo venimos haciendo hasta ahora. Ingresemos ahora la sentencia: [res,p]=residue(num,den); ´ nos devuelve dos par´ametros vectoriales: en la variable res aparecen los Esta funcion residuos correspondientes a los polos que figuran en la variable p, es decir, el primer residuo corresponde al primer polo y as´ı sucesivamente. ´ transferencia resulta ser propia, es decir que el grado del numerador es igual Si la funcion ˜ al del denominador, podemos anadir una par´ametro m´as 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 + 6 s3 + 6s2 + 11s + 6



f (t) = L−1 { F (s)}

´ Indice General

´ a M ATLAB y S IMULINK - 6 Introduccion

Si aplicamos el comando: [res,p,k]=residue(num,den); ´ desarrollada en fracciones simy si armamos, como lo hicimos anteriormente, la funcion ples, el t´ermino independiente es el que aparece el la variable k. Por lo tanto F (s) = −6 + s−+42 + s+3 1 + 2, de donde ahora calcular la f (t) resulta muy sencillo. s+3 ´ escrita en fracSi ahora nuestro inter´es es el inverso, es decir que tenemos una funcion ´ como cociente de polinomios, anal´ıticamente ciones simples y quisi´eramos obtener la funcion ´ denominador y hacer todas las cuentas correspondientes. Esto redeber´ıamos sacar comun sulta inmediato con el comando de M ATLAB: [num,den]=residue(res,p,k);

´ transferencia a lazo cerrado 1.4 Funcion Ejemplo 5. Supongamos que disponemos del sistema de la Figura 1 donde G1 (s) = 0.4; ´ transferencia a ; H2 (s) = s+s20 y H1 (s) = 1; y pretendemos hallar la funcion G2 (s) = s(100 s+2) lazo cerrado G (s) =

Y (s) . R(s)

´ de bloques, o resolviendo el diagrama de Si aplicamos reduccion

R(s) lE(s) V (s) G1 (s) - l - G2 (s) − 6 −6

Y (s)-

H2 (s)  H1 (s)  Figura 1: Diagrama de bloques flujo y aplicando Mason, obtenemos: G (s) =

s3

40s + 800 + 22s2 + 180s + 800

´ transferencia a lazo cerrado se puede calcular de dos formas: En M ATLAB la funcion • Utilizando S IMULINK (lo veremos m´as adelante). • Utilizando las funciones de M ATLAB series, parallel, feedback y cloop. ´ transferencia a lazo cerrado G (s) sigamos los siguientes pasos: Para calcular la funcion 1. Definimos los numeradores y denominadores de las funciones transferencia de cada bloque de la siguiente forma: numg1=0.4; numg2=100; numh2=[1 0];

deng1=1; deng2=[1 2 0]; denh2=[1 20];

´ Indice General

´ a M ATLAB y S IMULINK - 7 Introduccion

´ transferencia de V (s) a Y (s): 2. Calculamos la funcion [numvc,denvc]=feedback(numg2,deng2,numh2,denh2,-1);

´ transferencia de E(s) a Y (s) con: 3. Ahora calculamos la funcion [numec,denec]=series(numg1,deng1,numvc,denvc);

´ 4. Por ultimo calculamos el lazo cerrado: [num, den]=cloop(numec,denec,-1);

´ transferenLo que obtuvimos son los vectores numerador y denominador de la funcion ´ de transferencia a M ATcia por separado. Recordemos que para ingresarla como funcion LAB, debemos utilizar tf.

1.5 Respuesta al impulso Ahora que ya sabemos como pasar de la respuesta temporal a Laplace, verifiquemos que la respuesta al impulso de la transformada de Laplace coincide con la respuesta temporal. Para ello utilizaremos el comando de M ATLAB impulse. ´ transferencia de la siguiente forma: Ejemplo 6. Supongamos que tenemos una funcion Y (s) =

1 ; (s + a)(s + b)

donde

a = 1, b = 2

Si calculamos ahora la antitransformada, desarrollando en fracciones simples como en la ´ 1.3, resulta que y(t) = e−t − e−2t . Ingresemos los vectores numerador y denomiseccion nador y luego ejecutemos el comando: impulse(num,den); Veremos que este comando devuelve el gr´afico de la Figura 2 Como podemos ver, solo nos muestra los primeros 6 segundos de la respuesta. Si quisi´eramos que nos mostrara 12 segundos, debemos definir un vector de tiempo. Para ello ingresemos, por ejemplo, t=0:0.1:12; ´ El vector t tendr´a como primer elemento el 0 y como ultimo al 12. Cada elemento estar´a a una distancia de 0.1 de su consecutivo. Si ahora introducimos este par´ametro en el comando impulse(num,den,t), el gr´afico mostrar´a los primeros 12 segundos de la respuesta al impulso. Notemos que este comando no fue asignado a ninguna variable; podr´ıamos asignarle un vector, es decir y=impulse(num,den,t), y as´ı tendr´ıamos los valores de la salida de la respuesta al impulso en dicho vector. Podr´ıamos tambi´en graficar este vector con el ´ 1.7. comando plot(t,y), comando que veremos en la seccion

´ Indice General

´ a M ATLAB y S IMULINK - 8 Introduccion Impulse Response From: U(1) 0.25

0.2

To: Y(1)

Amplitude

0.15

0.1

0.05

0 0

1

2

3

4

5

6

Time (sec.)

Figura 2: Respuesta al impulso

´ transferencia de un sistema lineal invariante en el tiempo se deDado que la funcion fine como la transformada de Laplace de la respuesta al impulso cuando todas las condiciones iniciales son nulas, comparemos el resultado obtenido con el que resultar´ıa si calcul´aramos la respuesta temporal. Para ello utilizaremos el mismo vector temporal t, y la instrucci´on f=exp(-t)+exp(-2*t). Ahora podemos comparar los valores obtenidos desde la respuesta al impulso con los obtenidos desde la respuesta temporal (por ejemplo, rest´andolos).

1.6

´ Respuesta al escalon

´ anterior, podr´ıamos querer graficar la respuesta al esDe la misma forma que en la seccion ´ unitario. M ATLAB posee un comando, llamado step, para calcular la salida temporal calon ´ unitario. Lo unico ´ cuando la entrada se trata de un escalon que necesita este comando es el ´ transferencia. numerador y el denominador de la funcion step(num,den); y=step(num,den); Si utilizamos el comando sin asignarle la salida a ninguna variable, M ATLAB abre una ´ escalon ´ unitario, de la ventana gr´afica mostrando el gr´afico de la salida a la excitacion misma forma que antes. Sin embargo,al igual que vimos en el comando impulse, cuando e´ ste es asignado a una variable, los valores obtenidos se guardan en el vector y. ´ unitario de la funcion ´ transferencia: Ejemplo 7. Calculemos la respuesta al escalon G (s) =

Y (s) 4 = 2 R(s) s + 0.8s + 4

Si ingresamos el comando step(num,den), veremos un gr´afico similar al que podemos observar en la Figura 3.

´ Indice General

´ a M ATLAB y S IMULINK - 9 Introduccion Step Response From: U(1) 1.6

1.4

1.2

To: Y(1)

Amplitude

1

0.8

0.6

0.4

0.2

0 0

5

10

15

Time (sec.)

´ unitario Figura 3: Respuesta al escalon

´ Si ahora queremos la respuesta a una entrada rampa unitaria, M ATLAB no posee ningun ´ comando que lo resuelva. Por lo que veremos como con el comando step podemos obtener una rampa. Si seguimos con el ejemplo anterior y excitamos al sistema con r(t) = t, es decir que R(s) = s12 , tenemos lo siguiente:     4 1 4 1 Y (s) = ⇒ Y ( s ) = s2 + 0.8s + 4 s2 s3 + 0.8S2 + 4s s ´ transferencia al polinomio s3 + Por lo que utilizando como denominador de la funcion 2 ´ unitario con 0.8s + 4s, es decir den=[1 0.8 4 0], y calculando la respuesta al escalon step(num,den), obtenemos la respuesta a la rampa unitaria que se muestra en la Figura 4.

1.7

´ Graficos

Como vimos en secciones anteriores los comandos step e impulse grafican las respuestas ´ y al impulso respectivamente, pero ahora vamos a introducir algo m´as general. al escalon ´ en general utilizaremos el comando plot, que solo ´ necesita Para graficar cualquier funcion definir el vector a graficar en la forma b´asica plot(vector); ´ del elemento del vector y la Se obtiene un gr´afico donde el eje de abscisas ser´a la posicion ´ En el ejemplo 6, guardamos en el ordenada el valor que tiene el vector en dicha posicion. vector 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 ese vector. Si ingresamos plot(t,y), ahora el eje de abscisas corresponder´a al vector temporal ya definido e ir´a desde t = 0 a t = 12, que es como lo ten´ıamos definido. Grafiquemos

´ Indice General

´ a M ATLAB y S IMULINK - 10 Introduccion Step Response From: U(1) 25

20

To: Y(1)

Amplitude

15

10

5

0 0

5

10

15

20

25

Time (sec.)

Figura 4: Respuesta a la rampa unitaria

entonces los valores guardados en el vector f . Estos valores corresponden a la respuesta temporal, por lo que el gr´afico deber´a ser el mismo. Si ingresamos plot(t,f), obtendremos el gr´afico de la Figura 5 Como podemos ver, no hay casi diferencias con la figura 2, excepto por el t´ıtulo y los nombres de los ejes que el comando impulse(num,den) pone autom´aticamente. Veamos que no es dif´ıcil si se lo queremos agregar a un gr´afico, para ello utilizaremos las sentencias title, xlabel y ylabel. Estos comandos se utilizan luego de ingresar el comando plot, ya que tanto el t´ıtulo, como los nombres de los ejes, se escribir´an el la figura que se encuentre abierta: title(’Respuesta al Impulso’); xlabel(’Tiempo(seg.)’); ylabel(’Salida c(t)’);

Notemos que el texto que queremos que aparezca est´a escrito entre comillas simples. Los comandos anteriores, pueden ser tambi´en utilizados con step y impulse, aunque cuando son utilizados en estos comandos, el t´ıtulo y el nombre de los ejes que trae la fun´ por defecto tambi´en aparecen. Otros comandos que pueden ser utiles ´ cion a la hora de trabajar con gr´aficos son grid y text, que se utilizan para agregar una grilla y agregar texto respectivamente. El comando text se utiliza de la misma forma que que title, es decir, el texto que aparecer´a ser´a el que se encuentra escrito entre las comillas simples , pero antes debemos ingresar las coordenadas ( x, y) donde queremos que aparezca el texto. El comando grid, se usa sin par´ametros. Veamos el siguiente ejemplo: ´ transferencia de la Figura 1, que ya la calEjemplo 8. Supongamos que tenemos la funcion culamos con M ATLAB en el Ejemplo 2.2. Abramos un archivo nuevo e ingresemos lo siguiente:

´ Indice General

´ a M ATLAB y S IMULINK - 11 Introduccion 0.25

0.2

0.15

0.1

0.05

0

0

2

4

6

8

10

12

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 gr´afico de la Figura 6. Supongamos ahora que queremos graficar en la misma figura dos o m´as gr´aficos para poder compararlas. Esto es posible utilizando el comando hold on - hold off, que mantiene la figura y superpone el siguiente gr´afico sobre la misma figura, como veremos en 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;

´ Indice General

´ a M ATLAB y S IMULINK - 12 Introduccion Respuesta al escalón 1.4

1.2 maximo valor

Salida del sistema

1

0.8

0.6

0.4

0.2

0

0

0.2

0.4

0.6

0.8

1 1.2 Tiempo (seg.)

1.4

1.6

1.8

2

´ del ejemplo Figura 6: Respuesta al escalon

Luego de ejecutar estas l´ıneas veremos que en la figura que resulta, aparecen 3 gr´aficas en el mismo color, e imposible de identificar cual corresponde a cada una porque ambas se encuentran graficadas con el mismo tipo de linea y el mismo color. Para ello veamos un par´ametro del tipo string que podemos agregar al comando plot para especificaciones del estilo del gr´afico. Los par´ametros que figuran en la Tabla 2 son para elegir el color de la l´ınea, los que se encuentran en la Tabla 3 son para elegir el estilo de la l´ınea y los que se encuentran el la Tabla 4 son para elegir el tipo de marca que aparecer´a sobre los puntos del vector graficado. Espec. r b w g c m y k

Color rojo azul (por defecto) blanco verde cian magneto amarillos negro

Tabla 2: Especificadores de color Ahora especifiquemos cada uno de los plot con un estilo diferente, por ejemplo, en lugar del comando plot(t,y) escribamos: plot(t,y1,’-.rx’); plot(t,y2,’--mo’); plot(t,y3,’:bs’);

´ Indice General

´ a M ATLAB y S IMULINK - 13 Introduccion

Espec. – : -.

Estilo de linea ´ linea solida (por defecto) linea rayada linea punteada linea punto-raya

Tabla 3: Especificadores de linea Espec. + o · ∗ s d x p h

Estilo de marca signo m`as c´ırculo punto asterisco cuadrado diamante cruz estrella de 5 puntas estrella de 6 puntas

Tabla 4: Especificadores de marca

´ y Si corremos nuevamente el archivo veremos que hay diferencia entre una funcion ´ la otra, pero seguimos sin saber cu´al corresponde a qu´e funcion. Para ello utilicemos el comando legend, que pone la leyenda que queramos a cada gr´afico. Es decir, escribamos ´ como ultima linea: legend(’sin(t)’, ’sin(t-pi/2)’,’sin(t-pi)’); Ahora si observamos el gr´afico deber´ıa ser como el de la Figura 7. Tambi´en podr´ıamos querer cada gr´afico en una figura diferente. Para ello debemos ejecutar el comando figure(2) antes de graficar por segunda vez y figure(3) antes ´ del ultimo gr´afico. Estas sentencias se usan sin el comando de hold on - hold off y ´ v´alida para M ATLAB, lo que hacen es abrir una nueva figura para cada gr´afico. Otra opcion por ejemplo, es que las tres funciones aparezcan en una sola figura pero las tres graficadas en forma independiente. Para ello utilicemos subplot(m,n,p), que dividir´a a la figura ´ p. Ingresemos lo siguiente para en m filas y n columnas, pero crea una figura en la posicion ver como funciona: clf; %borra el grafico actual subplot(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’);

´ Indice General

´ a M ATLAB y S IMULINK - 14 Introduccion 1 sin(t) sin(t−pi/2) sin(t−pi)

0.8

0.6

0.4

0.2

0

−0.2

−0.4

−0.6

−0.8

−1

0

1

2

3

4

5

6

7

Figura 7: Tres gr´aficos en una misma figura

title(’sin(t-pi)’); Notemos que con el s´ımbolo %, comentamos texto dentro del archivo. Si ejecutamos nuevamente el programa, obtenemos lo que se observa en la Figura 8 Con respecto a gr´aficos, M ATLAB posee muchas otras opciones, como graficar en escala logar´ıtmica, con loglog, semilogx y semilogy, gr´aficos en tres dimensiones, plot3, gr´aficos de barras, bar, etc. Tambi´en permite con el comando print, guardar ´ por ejemplopostscript o .jpg, o tambi´en lo podemos el gr´afico en un archivo de extension, imprimir con el mismo comando indicando el nombre de la impresora. No nos olvidemos que M ATLAB cuenta con una ayuda a la cual podemos recurrir en caso de no recordar como se utiliza un comando. Si investigamos un poco el help, podemos encontrar funciones que resuelven muchas otras cosas interesantes. Invito a que se metan a conocerlas, como as´ı tambi´en a que conozcan las distintas demostraciones que pueden encontrar si tipean: demo.

2

´ a S IMULINK Introduccion

´ con l´ıneas de Hasta ahora vimos que M ATLAB dispone de un entorno de programacion ´ ordenes, ahora veremos como se puede suplementar utilizando un interfaz de usuario gr´afica llamada S IMULINK. Este entorno nos permite describir gr´aficamente un sistema ´ y dibujando su diagrama en bloques, que resulta muy conveniente para la simulacion an´alisis de sistemas din´amicos.

2.1

´ Acceso y descripcion

Para acceder a S IMULINK, desde la ventana de comandos de M ATLAB, tenemos varias opciones: una es escribiendo el comando simulink, de esta forma se abrir´a solo una ventana

´ Indice General

´ a M ATLAB y S IMULINK - 15 Introduccion sin(t) 1 0.5 0 −0.5 −1

0

1

2

3

4

5

6

7

4

5

6

7

4

5

6

7

sin(t−pi/2) 1 0.5 0 −0.5 −1

0

1

2

3 sin(t−pi)

1 0.5 0 −0.5 −1

0

1

2

3

Figura 8: Tres gr´aficos diferentes en la misma figura

´ New Model, con las librer´ıas disponibles; otra es desde la barra de menu´ File elegir la opcion ´ las librer´ıas sino tambi´en el entorno donde vamos a trabajar; de esta forma se abren no solo ´ ´ de acceso directo a las librer´ıas tanto en el entorno de trabajo por ultimo, existe un boton de M ATLAB como en el de S IMULINK. ´ de MATLAB Una vez abiertas las librer´ıas, lo que encontraremos depende de la version ´ 5.3. Dentro de la librer´ıa que se encuentre instalada. Nos vamos a referir a la version Simulink se encuentran los elementos que vamos a utilizar organizados en sublibrer´ıas de acuerdo 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. Por ejemplo si ingresamos a Continous, entre los elementos disponibles utilizaremos los siguientes: Derivative: bloque derivador, es decir

du dt

.

´ Indice General

´ a M ATLAB y S IMULINK - 16 Introduccion

´ transferencia 1s . Integrator: bloque integrador, funcion 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.

´ transferencia a lazo cerrado 2.2 Funcion ´ 2.2 vimos como podemos calcular la funcion ´ transferencia a lazo cerrado En la Seccion desde la ventana de comandos. Tomemos el mismo ejemplo para ver como lo hacemos con S IMULINK, ingresemos el diagrama en bloques como se puede ver en la Figura 9. 1 In1

.4 Gain

100 s2+2s

1 Out1

Transfer Fcn s s+20 Transfer Fcn1

Figura 9: Diagrama en bloques con S IMULINK Para poder implementar dicho gr´afico se procedio´ de la siguiente forma: ´ transferencia, ya sabemos que se encuentra en 1. Para insertar un bloque de funcion Continous, lo tomamos y lo arrastramos hasta la ventana de trabajo de SIMULINK. Si hacemos doble click sobre el bloque se despliega una ventana de propiedades del bloque, donde tenemos que ingresar el numerador y el denominador de la misma forma que lo hacemos desde el entorno de trabajo de MATLAB, es decir entre corchetes ´ transferencia y separado por espacios. Si en lugar de seleccionar el bloque de funcion elegimos el bloque de polos y ceros, los par´ametros a definir ser´an los polos, los ceros y la ganancia. 2. Para insertar otro bloque igual no es necesario realizar el ´ıtem anterior nuevamente, ´ derecho del podemos seleccionar el bloque anterior, haciendo un click con el boton mouse, copiar el bloque y pegarlo donde queramos. Esto mismo se puede hacer sim´ derecho del mouse. De la plemente arrastrando el objeto seleccionado con el boton ´ de transferencia. misma forma que antes, ingresamos los par´ametros de esta funcion ´ Para girar el bloque, para que quede mejor orientado para hacer la realimentacion, ´ y seleccionar Flip tenemos que seleccionar el objeto, ir a Format de la barra de menu, Block o simplemente con las teclas ctr-f. 3. El bloque de ganancia lo encontramos en Math, lo mismo que los sumadores. Para ingresarlos a la figura procedemos de la misma manera, arrastrando el objeto hasta donde queremos ubicarlo. El sumador, por defecto, viene con dos entradas sumadas, si hacemos doble click sobre e´ l, podemos no solo cambiar el signo que queramos sino tambi´en agregarle las entradas que queramos, en este caso solo modificamos ++ por

´ Indice General

´ a M ATLAB y S IMULINK - 17 Introduccion

+−. Otra propiedad que podemos modificar es la forma del icono. Notemos que ˜ ayuda cuando hacemos un doble click en cualquier objeto, encontramos una pequena ´ para saber con que datos hay que en la parte superior de la ventana, e´ sto nos es util completar cada campo. Para el bloque de la ganancia, solo ingresamos el valor que corresponde 0.4. 4. Para unir los bloques solo tenemos que hacer un click en la salida de un bloque y ´ est´a arrastra el mouse hasta la entrada de otro, cuando soltamos, si la coneccion bien hecha, marcar´a una flecha negra, en caso de estar uniendo con un nodo, deberemos ver un cuadradito negro. Para borrar cualquier elemento, simplemente lo seleccionamos y con la tecla DEL se elimina. ´ 5. Por ultimo nos falta solo indicar cu´al es la entrada y cual es la salida, esto lo hacemos para poder sacar la transferencia a lazo cerrado, de otra forma no lo pondr´ıamos. La necesidad de marcar la entrada y la salida es para que MATLAB sepa desde donde hasta 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 la ventana de comando de MATLAB las sentencias [A,B,C,D]=linmod(’Functtrans’); [num,den]=ss2tf(A,B,C,D); ´ transferencia. La primer orden produce un modelo de estado obtenemos la funcion del sistema de bloques, tomando la entrada y la salida que seleccionamos; y la segunda sentencia convierte ese modelo de estados en el numerador y el denominador de ´ transferencia. En este caso el resultado es la funcion num=[40 800] den=[1 22 180 800] que si los comparamos con los obtenidos antes son id´enticos.

2.3

´ Respuesta al Escalon

´ Siguiendo con el sistema de la Figura 9, nos interesa saber ahora como responde a una ´ unitario. Como tenemos la funcion ´ transferencia a lazo cerrado, podr´ıamos entrada escalon utilizar 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 bloque ´ que lo encontramos el la librer´ıa Sources de entrada por un bloque de entrada escalon, bajo el nombre “Step”. A dicho bloque podemos modificarle algunos par´ametros como el ´ el valor inicial y final de escalon ´ y en caso de que lo tiempo en que se realizar´a el escalon, necesitemos discreto, el tiempo de muestreo. Para nuestro ejemplo, elegimos como valor ´ del escalon ´ 0seg.. Para poder visualizar la inicial 0, valor final 1 y tiempo de realizacion salida, debemos conectar a la salida un osciloscopio. Este bloque lo encontramos en Sinks bajo el nombre “Scope”. Luego de agregados estos bloques, el sistema resultante es el que observamos en la Figura 10.

´ Indice General

´ a M ATLAB y S IMULINK - 18 Introduccion

100

.4 Step

s2+2s

Gain

Scope

Transfer Fcn s s+20 Transfer Fcn1

´ Figura 10: Sistema excitado con un escalon

1.4

1.2

1

0.8

0.6

0.4

0.2

0

0

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

˜ que muestra el osciloscopio Figura 11: Senal

2

´ Indice General

´ a M ATLAB y S IMULINK - 19 Introduccion

Si hacemos doble click sobre el bloque “Scope”, veremos la salida del sistema como en la Figura 11. Este bloque tambi´en posee algunas propiedades que podemos modificar, entre ellas est´an los valores de los ejes, el t´ıtulo y la escala. Cuenta tambi´en con Zoom para visualizar alguna zona en detalle. Otra propiedad es la posibilidad de asignarle los datos que posee a una variable. Luego desde la ventana de comandos podemos visualizar los valores o graficarlos dado que SIMULINK guarda tambi´en en una variable el vector ´ dicha variable se llama tout. temporal que utiliza en la simulacion, ´ unitario queremos la respuesta al impulso, dado Si en lugar de la respuesta al escalon que SIMULINK no posee un bloque generador de impulsos, debemos generarlo nosotros como resta de dos escalones.

2.4

´ de parametros ´ Utilizacion ya definidos

nos permite utilizar variables definidas ya sea en la ventana de comando de MATLAB , como tambi´ en en archivos del editor. Para ello debemos definir las variables con ´ y luego utilizarlas dentro de los bloques con el mismo nombre. De esta forma, anticipacion SIMULINK identifica el valor de dicho par´ ametro y es el que utiliza en los c´alculos. Esto ˜ para distintos valores de resulta apropiado cuando queremos utilizar un mismo diseno par´ametros, o nos permitir´a utilizar el mismo sistema cada vez que nos encontremos con problemas similares. SIMULINK

´ n en Matlab y Simulink Curso de Programacio

Alberto Herreros ([email protected]) Enrique Baeyens ([email protected]) Departamento de Ingenier´ıa de Sistemas y Autom´ atica (DISA) Escuela de Ingenier´ıas Industriales (EII) Universidad de Valladolid (UVa)

Curso 2010/2011

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

1/215

Curso 2010/2011

2/215

Contenidos

1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

3/215

´ es MATLAB? ¿Que Es un lenguaje de alto nivel para computaci´ on e ingenier´ıa. Integra computaci´ on, visualizaci´ on y programaci´ on. Aplicaciones t´ıpicas de MATLAB son: Matem´ aticas y computaci´ on Desarrollo de algoritmos Modelado, simulaci´ on y prototipado An´ alisis de datos, exploraci´ on y visualizaci´ on Gr´ aficos cient´ıficos y de ingenier´ıa. Desarrollo de aplicaciones

Matlab es un sistema interactivo cuyo elemento b´ asico son las matrices y no requiere dimensionamiento. El nombre proviene de ”laboratorio de matrices”. Originalmente fue escrito en FORTRAN y hac´ıa uso de las librer´ıas LINPACK y EISPACK Las u ´ltimas versiones est´ an desarrolladas en C y utilizan las librer´ıas LAPACK y BLAS. Sobre la base de MATLAB se han construido conjuntos de funciones espec´ıficas para diferentes problemas, denominadas ”toolboxes”. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

4/215

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 D¨ urer. 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

5/215

Trabajando con matrices

Para introducir la matriz de D¨ urer 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 5 9 4

3 10 6 15

2 11 7 14

13 8 12 1

Una vez introducida una matriz, queda guardada en el entorno de trabajo de MATLAB. La matriz A es un cuadrado m´agico: Todas sus filas, columnas y diagonales 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 matriz A, obteni´endose un vector de dimensi´on el n´ umero de columnas. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

6/215

Trabajando con matrices

Para calcular la suma de las filas, podemos calcular la transpuesta de la matriz. A’

obteniendo ans = 16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

la suma de las filas, en formato vector columna es sum (A ’ ) ’ ans = 34 34 34 34

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

7/215

Trabajando con matrices

La funci´on diag permite obtener un vector con los elementos de la diagonal principal. d i a g (A)

Se obtiene ans = 16 10 7 1

y la suma de los elementos de la diagonal principal es sum ( d i a g (A) )

obteni´endose ans = 34

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

8/215

Trabajando con matrices

La antidiagonal de una matriz no suele ser muy importante, por lo que no hay ninguna funci´on para extraerla. No obstante, puede invertirse la disposici´on de las columnas de la matriz con la funci´on fliplr, 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 antidiagonal es sumando elemento a elemento.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on 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 la fila y j la columna. La suma de la antidiagonal podr´ıa haberse obtenido tambi´en como sigue: A ( 1 , 4 )+A ( 2 , 3 )+A ( 3 , 2 )+A ( 4 , 1 ) ans = 34

Tambi´en es posible acceder a cada elemento de una matriz con un solo ´ındice, as´ı A(k) corresponde al elemento k de un vector ficticio que se formara colocando las columnas de la matrix A una debajo de otra: Comprobar que A(4,2) y A(8) corresponden al mismo elemento de la matriz A.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

10/215

Trabajando con matrices

Si se intenta acceder a un elemento que excede las dimensiones de la matriz, se obtiene un error t = A( 4 , 5 ) Index exceeds matrix dimensions .

Si se inicializa un elemento que excede las dimensiones de la matriz, la matriz se acomoda en dimensi´on al nuevo elemento, con el resto de nuevos elementos inicializados a cero. X = A; X ( 4 , 5 ) = 17 X = 16 5 9 4

3 10 6 15

2 11 7 14

A. Herreros, E. Baeyens, DISA/EII (UVa)

13 8 12 1

0 0 0 17

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

11/215

El operador :

El operador : es uno de los m´as importantes de MATLAB. Tiene diferentes utilidades. La expresi´on 1:10

indica un vector que contiene los n´ umeros enteros desde 1 hasta 10. 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: pi /4: pi

es 0

0.7854

A. Herreros, E. Baeyens, DISA/EII (UVa)

1.5708

2.3562

Curso de Programaci´ on en Matlab y Simulink

3.1416 Curso 2010/2011

12/215

El operador :

Cuando el operador : aparece en los sub´ındices de una matriz se refiere a las filas o columnas y permite extraer submatrices. Por ejemplo, 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. Otra forma m´as compacta y elegante de hacer lo mismo es sum (A ( : , end ) )

los dos puntos : (sin otros n´ umeros) significan todas las filas y end se refier a la u ´ltima columna. Pregunta: ¿Qu´e esta calculando la siguiente expresi´on? sum (A( end , : ) )

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

13/215

´ n magic La funcio

Matlab dispone de una funci´on magic que permite calcular cuadrados m´agicos Haciendo B = magic ( 4 ) B = 16 2 5 11 9 7 4 14

3 10 6 15

13 8 12 1

La matriz obtenida es casi la misma que la matriz de D¨ urer, solo se diferencia en que las columnas 2 y 3 est´an intercambiadas. Se pude obtener de nuevo la matriz de D¨ urer haciendo la siguiente operaci´ on A = B(: ,[1 3 2 4]) A = 16 3 2 5 10 11 9 6 7 4 15 14 A. Herreros, E. Baeyens, DISA/EII (UVa)

13 8 12 1

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

14/215

Expresiones

Al igual que muchos otros lenguajes de programaci´on, MATLAB dispone de expresiones matem´aticas, pero al contrario que en la mayor´ıa de los lenguajes de programaci´on, estas expresiones hacen referencia a matrices. Los bloques constructivos de las expresiones son Variables N´ umeros Operadores Funciones

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

15/215

Variables

MATLAB no requiere ning´ un tipo de declaraci´ on o indicaci´ on de la dimensi´ on. Cuando MATLAB encuentra un nuevo nombre de variable la crea autom´ aticamente y reserva la cantidad de memoria necesaria. Si la variable ya existe, MATLAB cambia su contenido y si es necesario modifica la reserva de memoria. Por ejemplo, la expresi´ on n u m e s t = 15

crea una matriz 1 por 1 llamada num_est y almacena el valor 25 en su u ´nico elemento. Los nombres de variables deben comenzar siempre por una letra y pueden incluir otras letras, n´ umeros y el s´ımbolo de subrayado, hasta un total de 31 caracteres. Se distingue entre may´ usculas y min´ usculas. A y a no son la misma variable. Para ver el contenido de una variable, simplemente escribir el nombre de la variable.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

16/215

´ meros Nu

MATLAB utiliza notaci´ on decimal convencional, con punto decimal opcional y signo + o ´Es posible utilizar notaci´ on cient´ıfica. La letra e especifica un factor de escala de potencia de 10. Los n´ umeros imaginarios puros se especifican con la letra i o ´j Los siguientes ejemplos son todos n´ umeros v´ alidos en MATLAB 3 9.6397238 1i

−99 1 . 6 0 2 1 0 e −20 −3.14159 j

0.0001 6 . 0 2 2 5 2 e23 3 e5i

Internamente, los n´ umeros se almacenan en formato largo utilizando la norma IEEE de punto flotante. La precisi´ on es aproximadamente de 16 cifras decimales significativas y el rango est´ a entre 10−308 y 10+308 .

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

17/215

Operadores

Las expresiones de MATLAB utilizan los operadores aritm´eticos usuales, as´ı como sus reglas de precedencia + * / \ ^ ’ ( )

A. Herreros, E. Baeyens, DISA/EII (UVa)

Suma Resta Producto Divisi´on Divisi´on por la izquierda (se explicar´a) Potencia Transposici´on y conjugaci´on compleja Orden de evaluaci´on

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

18/215

Funciones

MATLAB proporciona un gran n´ umero de funciones matem´ aticas elementales, por ejemplo, abs, sqrt, exp, sin, cos, etc. Por defecto, MATLAB utiliza n´ umeros complejos: La ra´ız cuadrada o el logaritmo de un n´ umero negativo no producen error, sino que dan como resultado u n´ umero complejo. Los argumentos de las funciones pueden ser n´ umeros complejos MATLAB proporciona tambi´en funciones avanzadas: Funciones de Bessel o funciones gamma. Una lista de todas las funciones elementales puede obtenerse con el comando help elfun

Funciones m´ as avanzadas y funciones de matrices se obtienen con help specfun help elmat

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

19/215

Funciones Algunas funciones est´ an compiladas con el n´ ucleo de MATLAB y son muy r´ apidas y eficientes. Ej. sqrt, sin Otras funciones est´ an programadas en lenguaje de MATLAB (ficheros m). Pueden verse y modificarse Algunas funciones proporcionan el valor de ciertas constantes u ´tiles. pi i j eps realmin realmax Inf NaN

3.14159265 √ √−1 −1 Precisi´ on relativa de punto flotante 2−52 N´ umero en punto flotante m´ as peque˜ no 2−1022 N´ umero en punto flotante m´ as grande (2 − )2+1023 Infinito Not-a-Number (no es un n´ umero)

Infinito se obtiene al dividir un n´ umero no nulo por cero, o como resultado de evaluar expresiones matem´ aticas bien definidas. NaN se obtiene al tratar de evaluar expresiones como 0/0 o ´ Inf-Inf que no tienen valores bien definidos Los nombres de las funciones no est´ an reservados. Puede definirse una variable eps=1e-6 y utilizarla. Para restaurar su valor original c l e a r eps A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

20/215

Expresiones

Ya se han visto varios ejemplos de expresiones. Algunos otros ejemplos son los siguientes: r h o = (1+ s q r t ( 5 ) ) /2 rho = 1.6180 a = a b s (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 . 3 2 1 4 i huge = e x p ( l o g ( r e a l m a x ) ) huge = 1 . 7 9 7 7 e +308 t o o b i g = p i ∗ huge toobig = Inf

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

21/215

Funciones para crear matrices

MATLAB proporciona cuatro funciones para generar matrices zeros ones rand randn

A. Herreros, E. Baeyens, DISA/EII (UVa)

Matriz Matriz Matriz Matriz

de de de de

ceros unos elementos uniformemente distribuidos elementos normalmente distribuidos

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

22/215

Funciones para crear matrices Ejemplos Z = zeros (2 ,4) Z = 0 0 0 0

0 0

F = 5∗ o n e s ( 3 , 3 ) F = 5 5 5 5 5 5

5 5 5

0 0

N = f i x (10∗ rand (1 ,10) ) N = 4 9 4 4 8 0 R = randn (4 ,4) R = 1.0668 0.2944 0.0593 −1.3362 −0.0956 0.7143 −0.8323 1.6236 A. Herreros, E. Baeyens, DISA/EII (UVa)

8

−0.6918 0.8580 1.2540 −1.5937

5

2

6

−1.4410 0.5711 −0.3999 0.6900

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

23/215

El comando load El comando load permite leer ficheros binarios que contienen matrices generadas en sesiones anteriores de MATLAB Tambi´en permite leer ficheros de texto que contienen datos. El fichero debe estar organizado como una tabla de numeros separados por espacios, una l´ınea por cada fila, e igual n´ umero de elementos en cada fila. Ejemplo: Crear utilizando un editor de texto un fichero llamado magik.dat que contenga los siguientes datos 16.0 5.0 9.0 4.0

3.0 10.0 6.0 15.0

2.0 11.0 7.0 14.0

13.0 8.0 12.0 1.0

El comando l o a d magik . d a t

crea una variable llamada magik conteniendo la matriz.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

24/215

Ficheros m

Los ficheros m son ficheros de texto que contienen c´ odigo de MATLAB. Para crear una matriz haciendo uso de un fichero m, editar un fichero llamado magik.m con el siguiente texto A = [ 16.0 5.0 9.0 4.0

... 3.0 10.0 6.0 15.0

2.0 11.0 7.0 14.0

13.0 8.0 12.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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

25/215

´n Concatenacio

Es el proceso de unir dos o m´ as matrices para formar otra matriz de mayor dimensi´ on El operador concatenaci´ on es [] Ejemplo: B = [A B = 16 5 9 4 64 53 57 52

A+32; A+48 3 10 6 15 51 58 54 63

2 11 7 14 50 59 55 62

A+16] 13 8 12 1 61 56 60 49

48 37 41 36 32 21 25 20

35 42 38 47 19 26 22 31

34 43 39 46 18 27 23 30

45 40 44 33 29 24 28 17

Comprobar que las columnas de esta matriz suman todas lo mismo, pero no ocurre lo mismo con sus filas.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

26/215

Borrado de filas y columnas Se pueden borrar filas y columnas utilizando el operador []. es la matriz vac´ıa (concatenaci´ on 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 5 11 9 7 4 14

13 8 12 1

No se pueden borrar elementos, por que el resultado ya no ser´ıa una matriz X( 1 , 2 ) = [ ]

producir´ıa un error. Sin embargo, utilizando un u ´nico sub´ındice es posible borrar elementos, aunque el resultado ya no ser´ıa una matriz, sino un vector. X(2:2:10) = [ ] X = 16 9 A. Herreros, E. Baeyens, DISA/EII (UVa)

2

7

13

Curso de Programaci´ on en Matlab y Simulink

12

1 Curso 2010/2011

27/215

El comando format Este comando controla el formato num´erico de los resultados que muestra MATLAB. Afecta s´ olo a la presentaci´ on en pantalla, no al formato interno ni a los c´ alculos. Ejemplos: x = [ 4 / 3 1 . 2 3 4 5 e −6] format short 1.3333 0.0000 format short e 1 . 3 3 3 3 e +000 1 . 2 3 4 5 e −006 format short g 1.3333 1 . 2 3 4 5 e −006 format long 1.33333333333333 0.00000123450000 format long e 1 . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 e +000 1.234500000000000 e −006 format long g 1.33333333333333 1 . 2 3 4 5 e −006

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

28/215

El comando format f o r m a t bank 1.33 format r a t 4/3

0.00

1/810045

format hex 3 ff5555555555555

3 eb4b6231abfd271

Adem´ as format compact suprime espacios y l´ıneas en blanco. Para obtener m´ as control sobre la presentaci´ın en pantalla se pueden utilizar las funciones sprintf y fprintf. Para que no aparezca el resultado de un c´ alculo en la pantalla, se utiliza ; A = magic ( 1 0 0 ) ;

Para dividir expresiones que no caben en una u ´nica l´ınea, se usan tres puntos ... 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

29/215

´ n en pantalla Comandos de edicio

↑ ↓ ← → ctrl-→ ctrl-← home end esc del backspace

A. Herreros, E. Baeyens, DISA/EII (UVa)

ctrl-p ctrl-n ctrl-b ctrl-f ctrl-r ctrl-l ctrl-a ctrl-e ctrl-u ctrl-d ctrl-h ctrl-k

Comando anterior Comando siguiente Car´acter atr´as Car´acter adelante Palabra adelante Patabra atr´as Ir a comienzo de l´ınea Ir a fin de l´ınea Borrar l´ınea Borrar car´acter actual Borrar car´acter anterior Borrar hasta fin de l´ınea

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

30/215

´ ficos Gra

MATLAB dispone de recursos para mostrar vectores y matrices en gr´aficos, as´ı como para incluir texto en los gr´aficos e imprimirlos. La funci´ on b´ asica de creaci´ on de gr´ aficos es plot. Si y es un vector, plot(y) dibuja un gr´ afico de los valores de los elementos de y frente a sus ´ındices. Si x e y son dos vectores de igual tama˜ no, plot(x,y) dibuja un gr´ afico de los valores de los elementos de y frente a los de x. Ejemplo: t = 0: pi /100:2∗ pi ; y = sin ( t ) ; plot (t , y)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

31/215

´ ficos Gra

Se pueden crear gr´ aficos m´ ultiples con una u ´nica llamada a plot. MATLAB elige los colores autom´ aticamente siguiendo una tabla predefinida. 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

32/215

´ ficos Gra Se puede especificar el color, tipo de l´ınea, y marcas con el comando plot (x , y , ’ color style marker ’ )

color_style_marker es una cadena de tres caracteres, que indican respectivamente 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 y negro. 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 y raya, ’none’ sin l´ınea. Las marcas m´ as comunes son ’+’, ’o’, ’*’ y ’x’. Ejemplo: El comando p l o t ( x , y , ’ y :+ ’ )

dibuja el gr´ afico en l´ınea continua amarilla y situa marcas ’+’ en cada punto.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on 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) P´ aginas de referencia en l´ınea P´ agina Web de The Mathworks, Inc. (www.mathworks.com)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

34/215

El comando help

Es el comando m´ as b´ asico para obtener informaci´ on de la sintaxis y actuaci´ on de una funci´ on. La informaci´ on 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 from t h e i n t e g e r s 1 t h r o u g h Nˆ2 w i t h e q u a l row , column , and d i a g o n a l sums . P r o d u c e s 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 funci´ on siempre aparece en may´ usculas, pero en realidad debe escribirse en min´ usculas al llamar a la funci´ on

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

35/215

Las funciones est´ an organizadas en grupos l´ ogicos, as´ı como la estructura de directorios de MATLAB. Las funciones de ´ algebra lineal est´ an en el directorio matfun. Para listar todas las funciones de este grupo h e l p matfun Matrix f u n c t i o n s − numerical l i n e a r algebra . Matrix 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 help matlab / g e n e r a l matlab / ops ...

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

36/215

La ventana de ayuda

Disponible seleccionando la opci´ on Help Window del men´ u Help o bien pulsando la interrogaci´ on de la barra de men´ u. Puede invocarse desde la ventana de comandos con helpwin Para obtener ayuda sobre un comando helpwin comando La informaci´ on obtenida es la misma que con el comando help pero permite hipertexto y navegaci´ on

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

37/215

El comando lookfor Conveniente cuando buscamos una funci´ on pero no recordamos su nombre. 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 funci´ on para invertir matrices, hacemos help inverse i n v e r s e .m n o t f o u n d .

entonces bucamos con lookfor lookfor inverse INVHILB I n v e r s e H i l b e r t m a t r i x . ACOSH Inverse hyperbolic cosine . 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 Matrix i n v e r s e . PINV Pseudoinverse . IFFT Inverse d i s c r e t e Fourier transform . 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 transform . ICCEPS I n v e r s e c o m p l e x c e p s t r u m . IDCT Inverse d i s c r e t e cosine transform .

Con la opci´ on -all busca en todo el texto de la ayuda, no solo en H1. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

38/215

El escritorio de ayuda (help desk)

El escritorio de ayuda de MATLAB permite acceder a mucha informaci´ on de referencia almacenada en el disco duro o en el CD-ROM en formato HTML mediante un navegador. Se accede a trav´es de la opci´ on Help Desk del men´ u Help. Tambi´en se accede escribiendo helpdesk en la ventana de comandos. Para acceder a la p´ agina de referencia en formato HTML de un comando espec´ıfico, se utiliza el comando doc. Ejemplo: doc eval. Las p´ aginas de referencia se encuentran tambi´en disponibles en formato PDF y pueden ser consultadas e impresas con Acrobat Reader. Finalmente, desde el escritorio de ayuda se puede acceder a la P´ agina Web the The MathWorks, Inc.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

39/215

El Entorno de MATLAB El entorno de MATLAB incluye el conjunto de variables definidas durante una sesi´ on de MATLAB y el conjunto de ficheros del disco que contienen programas y datos y que permanecen entre sesiones. El espacio de trabajo (workspace) es el ´ area de memoria accesible desde la 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 adem´ as informaci´ on sobre tama˜ no y almacenamiento. whos Name A D M S h n s v Grand t o t a l

Size 4 x4 5 x3 10 x1 1 x3 1 x11 1 x1 1 x5 2 x5

Bytes 128 120 3816 442 22 8 10 20

Class double array double array c e l l array struct array char array double array char array char array

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 bCurso r e de v aProgramaci´ r i a b l oen en Matlab y Simulink

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso 2010/2011

40/215

El comando save Permite almacenar los contenidos del espacio de trabajo en un fichero MAT (binario). s a v e 15 o c t 0 2

salva el espacio de trabajo en el fichero 15oct02.mat. Para salvar u ´nicamente ciertas variables s a v e 15 o c t 0 2 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 o c t 0 2

El formato MAT es binario y no puede leerse, si se desea un fichero que pueda 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 versi´ on 4 -append A˜ nade 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

41/215

´ squeda La trayectoria de bu

La trayectoria de b´ usqueda (search path) es la lista ordenada de directorios en los que MATLAB va buscando las funciones. El comando path muestra la trayectoria de b´ usqueda. Si hubiera varios ficheros con el mismo nombre de funci´ on en diferentes directorios, MATLAB ejecuta el primero que encuentra al seguir la trayectoria de b´ usqueda. Para modificar la trayectoria de b´ usqueda, ir a Set Path en el men´ u File.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

42/215

´ n de Ficheros Manipulacio

MATLAB dispone de los comandos dir, type, delete, cd, para realizar las operaciones usuales de manipulaci´on de ficheros de un sistema operativo. MATLAB MS-DOS UNIX VAX/VMS dir dir ls dir type type cat type delete del ´o erase rm delete cd chdir cd set default

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

43/215

El comando diary

Crea un diario de la sesi´ on 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 los comandos de la sesi´ on y sus resultados en la ventana de comandos, hacer diary midiario . txt

si no se incluye ning´ un nombre de fichero, el diario de la sesi´ on se almacena por defecto en el fichero diary. Para parar la grabaci´ on del diario diary off

Para volver a activar/desactivar la grabaci´ on del diario d i a r y on / o f f

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

44/215

´ n de programas externos Ejecucio

Para ejecutar programas externos a MATLAB desde la l´ınea de comandos, se antepone el car´acter de escape !. Por ejemplo, en UNIX ! vi

Ejecuta el editor de texto visual.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

45/215

Ejercicios 1

Fichero Aejer1.m : Las siguientes expresiones describen las tensiones principales de contacto en las direcciones x, y y z que aparecen entre dos esferas que se presionan entre s´ı con una fuerza F. σx

=

σy = −pm´ax

σz

=

−pm´ax 1 + z 2 /a2

" 

  #  a  2 −1 z z 1 − tan−1 (1 − v1 ) − 0,5 1 + 2 a z a

siendo 3F (1 − v12 )/E1 + (1 − v22 )/E2 8 1/d1 + 1/d2 3F 2πa2

 a

=

pm´ax

=

1/3

vj son los coeficientes de Poisson, Ej los m´odulos de Young de cada esfera y dj son los di´ametros de las dos esferas. Escribir las ecuaciones en notaci´on de MATLAB y evaluarlas para los 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

46/215

Ejercicio 2

Fichero Aejer2.m : El n´ umero de carga de un rodamiento hidrodin´amico esta dado por la siguiente expresi´on: p π π 2 (1 − 2 ) + 162 NL = (1 − 2 )2 siendo  el coeficiente de excentricidad. Escribir la ecuaci´on en notaci´on de Matlab y evaluarla para  = 0,8.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

47/215

Ejercicio 3

Fichero Aejer3.m : Un tubo largo con radio interior a y radio exterior b y diferentes temperaturas en la superficie interior Ta y en la exterior Tb est´a sometido a tensiones. Las tensiones radial y tangencial se obtienen mediante las siguientes ecuaciones: σr

=

σt

=

  2      αE (Ta − Tb ) a2 b b b − 1 ln − ln 2 2 2 2(1 − v ) ln(b/a) b − a r a r        αE (Ta − Tb ) a2 b2 b b 1− 2 + 1 ln − ln 2 2 2(1 − v ) ln(b/a) b −a r a r

siendo r la coordenada radial del tubo, E el m´odulo de Young del material del tubo y α el coeficiente de dilataci´on. La distribuci´on de temperaturas a lo largo de la pared del tubo en la direcci´on radial es: T = Tb +

(Ta − Tb ) ln(b/r ) ln(b/a)

Escribir las ecuaciones en notaci´on de Matlab y evaluarlas para los 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

48/215

Ejercicio 4

Fichero Aejer4.m : La f´ormula siguiente, propuesta por el matem´atico S. Ramanujan permite aproximar el valor de π. √ N→∞ 8 X (4n)!(1103 + 26390n) 1 = π 9801 (n!)4 3964n n=0

Evaluar la formula anterior para N = 0, 1, 2, 3 y comparar el resultado obtenido con el valor de π que proporciona Matlab. Para calcular el factorial, utilizar la funci´on gamma que satisface gamma(n+1)=n!.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

49/215

Ejercicio 5

Fichero Aejer5.m : Introducir en el espacio de trabajo de Matlab 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 aT b y el valor de su traza y determinante.

4

Calcular el producto ab T .

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

50/215

Ejercicio 6

Fichero Aejer6.m : Sea z=magic(5). Realizar las siguientes operaciones ordenadamente y mostrar los resultados: √ 3.

1

Dividir todos los elementos de la segunda columna por

2

Sustituir la u ´ltima fila por el resultado de sumarle los elementos de la tercera fila.

3

Sustituir la primera columna por el resultado de multiplicarle los elementos 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 qq T .

7

Mostar el cuadrado de todos los elementos de la matriz q.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

51/215

Ejercicio 7

Fichero Aejer7.m : En an´alisis de regresi´on lineal multivariante aparece la siguiente cantidad: H = X (X T X )−1 X T Sea



 17 31 5  6 5 4   X =  19 28 9  12 11 10

Calcular la diagonal de H.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

52/215

Ejercicio 8

Fichero Aejer8.m : Dibujar el resultado de la suma de las siguientes series para los rangos indicados de valores de τ . Utilizar 200 puntos para realizar la gr´afica. 1

Onda cuadrada ∞ 4X1 f (τ ) = sin(2(2k − 1)πτ ), π n



k=1

2

1 1 ≤τ ≤ 2 2

Diente de sierra ∞ 1 1X1 f (τ ) = + sin(2kπτ ), 2 π n

−1 ≤ τ ≤ 1

k=1

3

Diente de sierra ∞ 1 1X1 f (τ ) = − sin(2kπτ ), 2 π n

−1 ≤ τ ≤ 1

k=1

4

Onda triangular ∞ π 4X 1 f (τ ) = − cos((2k − 1)πτ ), 2 π (2k − 1)2

−1 ≤ τ ≤ 1

k=1

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

53/215

Ejercicio 9

Fichero Aejer9.m : Dibujar las siguientes curvas. Utilizar axis equal para una correcta visualizaci´on. 1

2

3

Cicloide (−π ≤ φ ≤ 3π, r = 0,5, 1, 1,5) x

=

r φ − sin φ

y

=

r − cos φ

Lemniscata (−π/4 ≤ φ ≤ π/4) x

=

y

=

p cos φ 2 cos(2φ) p sin φ 2 cos(2φ)

Espiral (0 ≤ φ ≤ 6π) de Arqu´ımedes x

=

φ cos φ

y

=

φ sin φ

Logar´ıtmica (k = 0,1)

A. Herreros, E. Baeyens, DISA/EII (UVa)

x

=

e kφ cos φ

y

=

e kφ sin φ

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

54/215

Ejercicio 10

Fichero Aejer10.m : Dibujar las siguientes curvas. Utilizar axis equal para una correcta visualizaci´on. 1

2

3

4

Cardioide (0 ≤ φ ≤ 2π) x

=

2 cos φ − cos 2φ

y

=

2 sin φ − sin 2φ

x

=

4 cos3 φ

y

=

4 sin3 φ

Astroide (0 ≤ φ ≤ 2π)

Epicicloide (R = 3, a = 0,5, 1´ o2, y 0 ≤ φ ≤ 2π) x

=

(R + 1) cos φ − a cos(φ(R + 1))

y

=

(R + 1) sin φ − a sin(φ(R + 1))

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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

55/215

Ejercicio 11

Fichero Aejer11.m : Dibujar las siguientes curvas tridimensionales. Utilizar axis equal para visualizar correctamente. 1

2

3

H´elice esf´erica (c = 5,0, 0 ≤ t ≤ 10π) x

=

sin(t/2c) cos(t)

y

=

sin(t/2c) sin(t)

z

=

cos(t/2c)

Senoide sobre esfera (a = 10,0, b = 1,0, c = 0,3, 0 ≤ t ≤ 2π) p x = cos(t) b 2 − c 2 cos2 (at) p y = sin(t) b 2 − c 2 cos2 (at) z

Senoide sobre cilindro (a = 10,0, b = 1,0, c = 0,3, 0 ≤ t ≤ 2π)

4

=

c cos(at)

Espiral toroidal (a = 0,2, b = 0,8, c = 20,0, 0 ≤ t ≤ 2π)

x

=

b cos(t)

x

=

[b + a sin(ct)] cos(t)

y

=

b sin(t)

y

=

[b + a sin(ct)] sin(t)

z

=

c cos(at)

z

=

a cos(ct)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

56/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

57/215

´ n a entornos de trabajo (I) Introduccio

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 operaci´ on varias veces.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

58/215

´ n a entornos de trabajo (II) Introduccio Ficheros (*.m) de funciones: Son ficheros en lenguaje interpretado de Matlab. Sus variables son locales por defecto. Paso a la funci´ on del valor de las variables. Funciones propias de Matlab y Toolbox. Ejemplo: function c = myfile1 (a , b) c = s q r t ( ( a . ˆ 2 ) +(b . ˆ 2 ) ) Uso desde el workspace: >> >> >> >> ...

x = 7.5 y = 3.342 z = myfile (x , y) whos

Ficheros de funciones compilador en C/C++ o FORTRAN. Contienen cabecera especial para conexi´ on con Matlab. Clases y objetos definidos en Matlab y Java. Una clase es un tipo de dato al 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

59/215

Tipos de datos (I)

Tipos de variables: Clase Ejemplo array [1,2;3,4]; 5+6i

char

’Hola’

celda

{17, ’hola’, eye(2)}

struct

a.dia=1; a.mes=’julio’

objeto

tf(1,[1,1])

A. Herreros, E. Baeyens, DISA/EII (UVa)

Descripci´ on Datos virtual ordenado por ´ındices cuyos componentes son datos del mismo tipo. Array de caracteres (cada car´ acter tiene 16 bits). Dato virtual ordenado por ´ındices cuyos componentes son arrays de distinto tipo. Dato virtual para almacenar datos por campos (estructura). Cada campo es un array o celda. Datos definido por el usuario con base a una estructura y con funciones asociadas.

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

60/215

Tipos de datos (II)

Operadores: Oper. aritm´ eticos + Suma. Resta. .* Multiplicaci´ on. ./ Divisi´ on derecha. .\ Divisi´ on izquierda. : Operador dos puntos. .^ Potencia. .’ Transpuesta. ’ Conjugada transpuesta. * Multiplicaci´ on de matrices. / Divisi´ on derecha de matrices. \ Divisi´ on izquierda de matrices. ^ Potencia de matrices.

A. Herreros, E. Baeyens, DISA/EII (UVa)

> > = == =

Oper. de relaci´ on Menor que Mayor que Menor que o igual a Mayor que o igual a Igual a No igual a

Operadores l´ ogicos. & Y | OR ~ NO

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

61/215

Tipos de datos (III) Operaciones aritm´eticas en el workspace o Ascript1.m: >> a = [ 1 , 2 ; 3 , 4 ] ; b = [ 4 , 5 ; 6 , 7 ] ; >> c= 3∗ a ... >> a ( 1 , : ) ∗b ( : , 1 ) ...

>> c= a ∗b ... >> c= a . ∗ b

Operaciones de relaci´ on en el workspace o Ascript1.m: >> a = [ 1 , 2 , 3 ] ; >> a==b ...

b=[1 ,3 ,2];

>> a > b ... >> a = [ ] ; i s e m p t y ( a )

... Operaciones l´ ogicas en el workspace o Ascript1.m: >> a = [ 1 , 2 , 3 ] ; b = [ 1 , 0 , 3 ] ; >> a==b ... >> a | b ...

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

>> a&b ... >> ˜ a ...

Curso 2010/2011

62/215

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 expresi´ on que no ha sido asignada. eps Tolerancia con la que trabaja Matlab en sus c´ alculos. realmax Mayor n´ umero en coma flotante que puede representar el computador. realmin Menor n´ umero en coma flotante que puede representar el computador. pi 3.1415926535897... i, j N´ umeros imaginarios puros. Inf Infinito. Se obtiene de divisiones entre cero. NaN Indeterminaci´ on. 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 versi´ on de Matlab usada.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on 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. Herreros, E. Baeyens, DISA/EII (UVa)

>> a= 5+3∗ i ... >> a= i ∗(4+3∗ i ) ... >> a= 3/0 ...

Curso de Programaci´ on en Matlab y Simulink

>> a= 0/0 ... >> a= NaN∗3 ... >> a= 3∗ I n f ...

Curso 2010/2011

64/215

Sentencias de control.

Sentencias de control en Matlab: if, else y elseif: Ejecuta un grupo de sentencias bas´ andose en condiciones l´ ogicas. switch, case y otherwise: Ejecuta diferentes grupos de sentencias en funci´ on de condiciones l´ ogicas. while: Ejecuta un n´ umero de sentencias de forma indefinida en funci´ on de una sentencia l´ ogica. for: Ejecuta un n´ umero de sentencias un n´ umero determinado de veces. try...catch: Cambia el control de flujo en funci´ on de los posibles errores producidos. break: Termina de forma directa la realizaci´ on de un bucle for o while. return: Sale de la funci´ on.

Nota: Los bucles for y while pueden ser modificados por c´ odigo vectorizado para aumentar la velocidad de ejecuci´ on.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

65/215

Sentencia de control if, else y elseif.

Forma general Asript2.m,

if

sent lo ´g 1 , % bloque 1 e l s e i f sent lo ´g 2 , % bloque 2 else % bloque 3 end

A. Herreros, E. Baeyens, DISA/EII (UVa)

if n < 0 % Si n negativo error . d i s p ( ’ Entrada debe se p o s i t i v a ’ ) ; e l s e i f rem ( n , 2 ) == 0 % Si es par se d i v i d e entre 2. A = n /2; else % Si es impar se incrementa y d i v i d e . A = ( n+1) / 2 ; end

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

66/215

Sentencia de control switch, case y otherwise.

Formulaci´ on general Ascript3.m, switch expression case value1 % bloque 1 case value2 % b l o q u e −2 . . . otherwise % b l o q u e −n end

A. Herreros, E. Baeyens, DISA/EII (UVa)

s w i t c h input num c a s e { −1 , −2, −3} d i s p ( ’−1 ´ o −2 ´ o −3 ’ ) ; case 0 disp ( ’ cero ’ ) ; c a s e { 1 , 2 , 3} disp ( ’1 ´ o 2 ´ o 3’); otherwise disp ( ’ otro valor ’ ) ; end

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

67/215

Sentencia de control while y for.

Formulaci´ on general Ascript4.m, n = 1; w h i l e p r o d ( 1 : n ) < 1 e100 , n = n + 1; end

while expresi´ on % bloque end

Formulaci´ on general Ascript5.m, f o r ´ı n d i c e= i n i c i o : p a s o : f i n , % bloque end

A. Herreros, E. Baeyens, DISA/EII (UVa)

for i i = 2:6 , x ( i i ) = 2∗ x ( i i −1) ; end

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

68/215

Sentencia de control: break, try-catch y return

Sentencia break: Sirve para salir de forma autom´ atica del u ´ltimo bucle while o for abierto sin tener en cuenta la condici´ on o ´ındice de salida.

Sentencia de control try, catch: Formulaci´ on general, try bloque-1 catch bloque-2 end Ejecuta el bloque-1 mientras no haya un error. Si se produce un error en bloque-1 se ejecuta bloque-2.

Sentencia return: Se sale de la funci´ on en la que se trabaja. Si se llega al final de la funci´ on (*.m), Matlab sale de ella autom´ aticamente.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on 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: function c = myfile (a , b)

Las l´ıneas de comentario se inician con el car´ acter %. Las l´ıneas de comentario posteriores a la funci´ on son de ayuda. function c = myfile (a , b) % Output : c . I n p u t : a y b

Usando la funci´ on help. >> h e l p m y f i l e Output : c . I n p u t : a y b

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

70/215

Funciones en matlab (II): Variables de entrada

Variables de entrada-salida: Libertad en su n´ umero. La variable nargin y nargout indican su n´ umero. Variables locales por defecto sin tipo determinado. Ejemplo: a, b y c pueden ser double o array myfile2.m. function c = myfile2 (a , b , c) % Output : c . I n p u t : a , b y c i f n a r g i n 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 Programaci´ on 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 funci´ on principal es la primera. Equivalente a la funci´ on main del lenguaje C. Ejemplo myfile5.m: function c = myfile5 (a , b) % Output : c . I n p u t : a y b c= f u n ( a , b ) ; f u n c t i o n z= f u n ( x , y ) z=s q r t ( x .ˆ2+ y . ˆ 2 ) ;

Funciones privadas: Est´ an en sub-carpeta private y s´ olo se pueden usar por las funciones de la carpeta. Prioridades en la llamada a funciones: Sub-funci´ on, funci´ on en misma carpeta, funci´ on en carpeta private,funci´ on en las carpetas del path.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

74/215

´ n de cadenas eval() y feval() Funciones en matlab (VI):Evaluacio

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 funci´ on por su nombre o comod´ın Ascript6.m, >> >> >> >> >> >>

cad= ’ m y f i l e c= f e v a l ( cad cad= @ m y f i l e c= f e v a l ( cad cad= @( x , y ) c= f e v a l ( cad

A. Herreros, E. Baeyens, DISA/EII (UVa)

’ ; a= 1 , b =2; , a , b) ; ; a =1 , b =1; , a , b) ; s q r t ( x .ˆ2+ y . ˆ 2 ) ; , a , b) ;

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

75/215

Entrada de datos, pausas y llamadas a la shell.

input(): Introducci´ on de datos Ascript7.m, n= i n p u t ( ’ I n t r . d a t o : ’ ) ; % Do ub le . n= i n p u t ( ’ I n t r . d a t o : ’ , ’ s ’ ) ; % Cadena de c a r a c t e r e s .

ginput(): Localizar puntos en una gr´ afica con el rat´ on, figure ; plot (1:1000) ; [ x , y ]= g i n p u t ( 1 ) % l o c a l i z a r un p u n t o x , y en g r ´ afica . [ 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 ´ on usada .

pause(): La funci´ on para el programa durante un periodo de tiempo, p a u s e ( n ) ; % Para e l p r o g ra m a d u r a n t e n s e g u n d o s . p a u s e ; % Para e l p r o gram a 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 !, ! c o p y 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

76/215

Funciones save y load.

save: Grabar datos en ficheros Ascript8.m, -mat: C´ odigo binario (por defecto). -ascii: C´ odigo ASCII. -append: Graba al final del fichero. >> s a v e d a t o s . d a t a b c % Graba ’ d a t o s . dat ’ l a s variables a b c >> a= r a n d ( 1 0 , 5 ) ; >> s a v e − a s c i i −append d a t o s . d a t a %Graba a l f i n a l f i c h e r o en c o ´ d i g o ASCII .

del

load: Recupera las variables guardadas con la sentencia save. >> l o a d d a t o s . d a t % R e c u p e r a l a s

A. Herreros, E. Baeyens, DISA/EII (UVa)

v a r i a b l e s de d a t o s . d a t

Curso de Programaci´ on 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 Abrir/Cerrar Binarios I/O Con formato Conversi´ on cadenas

A. Herreros, E. Baeyens, DISA/EII (UVa)

Funci´ on fopen() fclose() fread() fwrite() fscanf() fprintf() sscanf() sprintf()

Descripci´ on Abrir fichero. Cerrar fichero. Lectura binaria de fichero (defecto enteros). Escritura binaria en fichero (defecto enteros). Lectura con formato de fichero. Escritura con formato en fichero. Lee de cadena con un determinado formato. Escribe en cadena con formato.

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

78/215

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’: A˜ nadir. Puntero al final del fichero. ’r+’: Lectura/escritura. Puntero al inicio. >> f i c = f o p e n ( ’ f i c h . d a t ’ , ’ r ’ ) ; % Abre f i c h e r o p a r a lectura . >> 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 formato Ficheros binarios para guardar o extraer matrices en su forma vectorial.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

79/215

Funciones de librer´ıa entrada/salida de lenguaje C (III)

Ejemplo Ascript9.m: >> >> >> >> >>

a= r a n d ( 3 , 3 ) f i c h= f o p e n ( ’ d a t o s . t x t ’ , ’w ’ ) ; % G u a r d a r 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 ) ; fclose ( fich ) ; 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 texto >> 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 ’ ) ; % G u a r d a r en b i n ´ ario , f o r m a t o 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 ´ ario >> 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

80/215

´ cticas de funciones y sentencias de control (I). Pra Fichero Bejer1.m : Generar una funci´ on (*.m) para obtener las siguientes series matem´ aticas. Los argumentos son tres: El primero es el nombre de la serie deseada (obligatorio). El segundo es el n´ umero de datos de τ , por defecto 200 (opcional). El tercero es l´ımite superior de sumatorio, por defecto 1000 (opcional). Si el n´ umero de argumentos de salida es uno se devuelve los datos, si es cero se dibuja la gr´ afica correspondiente. Se˜ nal cuadrada: f (τ ) =

4 π

X n=1,3,5,...

1 sin(2nπτ ) n



1 1 ≤τ ≤ 2 2

. Dientes de sierra: f (τ ) =

1 1X1 + sin(2nπτ ) 2 π n=1 n

−1≤τ ≤1

. Se˜ nal triangular: f (τ ) =

π 4X 1 − cos((2n − 1)πτ ) 2 π n=1 (2n − 1)2

−1≤τ ≤1

. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

81/215

´ cticas de funciones y sentencias de control (II) Pra

Fichero Bejer2.m : El desplazamiento de una onda propagada a lo largo de una cuerda tiene una velocidad inicial cero y un deplazamiento inicial, {u(η, 0) = ηa | 0 ≤ η ≤ a} {u(η, 0) = 1−η | a ≤ η ≤ 1}, 1−a siendo su ecuaci´ on, P sin nπa 2 u(η, τ ) = aπ(1−a) N→∞ sin(nπτ ) cos(nπη). n=1 n3 Crear una funci´ on *.m para mostrar en gr´ afico u(η, τ ). La entrada de la funci´ on ser´ a el valor de a, opcional defecto a = 0,25, el de N, opcional defecto N = 50, y el de ∆τ , opcional defecto ∆τ = 0,05, donde 0 ≤ τ ≤ 2. La funci´ on dibuja la gr´ afica si el usuario no pide variables de salida y devuelve el valor de u(η, τ ) sin dibujar la gr´ afica en caso contrario.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

82/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

83/215

´ n de programas: Indexado de arrays y celdas (I) Optimizacio

Para la optimizaci´ on de un programa con matlab se debe reducir el n´ umero 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 n´ umero de filas o columnas, >> >> >> >>

i i = 1 : 2 : 3 ; % v e c t o r de 1 a 3 con p a s o 2 . a (1 , i i ) % primera f i l a , columnas i i a ( 1 , 2 : end ) % p r i m e r a f i l a , c o l u m n a s de 2 a l a ( 1 , : ) % primera f i l a , todas l a s columnas

final

Composici´ on de arrays, >> b= [ a ( : , 1 ) , [ 5 , 7 ] ’ ] % P r i m e r a columna de a y [ 5 , 7 ] v e c t o r columna .

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

84/215

´ n de programas: Indexado de arrays y celdas (II) Optimizacio Borrado de matrices, >> b ( : , 1 ) = [ ] ; % B o r r a d o 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= o n e s ( 3 , 2 ) ; c= r a n d ( 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 1 0 , 100 p u n t o s , p a s o lineal >> a= l o g s p a c e ( 1 , 5 , 1 0 0 ) ; % De 1 e1 a 1 e5 , 100 p u n t o s , paso l o g .

Funciones de tama˜ no y repetici´ on. >> [ n f i l , n c o l ]= s i z e ( a ) ; % Tama˜ no f i l a columna , >> n f i l = s i z e ( a , 1 ) ; % Tama˜ no f i l a . >> ncomp= s i z e ( a ( : ) , 1 ) ; % N´ u mero de componentes , formato i n t e r n o . >> b= re p m a t ( 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

85/215

´ n del co ´ digo de programas (I) Optimizacio

Inicializaci´ on de matrices como matrices cero. Sustituci´ on de bucles por productos matriciales, Ascript11.m Funci´ on 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 ; P Sumatorio de funci´ on, y = 10 n=0 sin(n) ∗ n. >> n= [ 0 : 1 0 ] ’ ; y= sum ( s i n ( n ) . ∗ n ) ; Funci´ on de dos dimensiones en varios puntos, y (i, j) = i 2 + j 2 + 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 ( jj ,1) ; i i = r ep ma t ( i i , [ s j j , 1 ] ) ; j j = r e p m a t ( j j , [ 1 , s i i ] ) ; [ i i , j j ]= m e s h g r i d ( 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

86/215

´ n del co ´ digo de programas (II) Optimizacio

Sustituci´ on de bucles por productos matriciales, Ascript11.m Funci´ onPde una dimensiones con sumatorio, 2 y (i) = 10 n=1 n ∗ i + i, i ∈ [0, 5], >> i i = 0 : 5 ; n = [ 1 : 1 0 ] ; >> y= n∗ o n e s ( s i z e ( n ) ) ’ ∗ i i .ˆ2+ i i ;

Pr´ actica de optimizaci´ on de programas: Volver a escribir el c´ odigo de las pr´ actica de generaci´ on de se˜ nales sin usar bucles, Ficheros Bejer1bis.m, Bejer2bis.m.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

87/215

Matrices tri-dimensionales (I)

Se componen de filas, columnas y p´ aginas. Generaci´ on de matrices tridimensionales, Ascript12.m >> >> >> >>

a =[1 ,2;3 ,4]; % M a t r i z de d o s 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 ] ) ; % e n c a d e n a en dim 3 a= re pm a t ( [ 2 , 3 ; 4 , 5 ] , [ 1 , 1 , 2 ] ) ; % r e p i t e en p ´ aginas

Re-dimensi´ on: 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 d o s p ´ aginas a c u a t r o columnas .

Borrado de parte de la matriz, >> a ( : , : , 2 ) = [ ] ; % B o r r a d o de l a p ´ agina 3.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

88/215

Matrices tri-dimensionales (II)

Eliminaci´ on 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= p e r m u t e ( a , [ 2 , 1 , 3 ] ) ; % L a s f i l a s p a s a n a s e r columnas . >> a= i p e r m u t e ( b , [ 2 , 1 , 3 ] ) ; % Es l a i n v e r s a de p e r m u t e .

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

89/215

Matrices multidimensionales (III)

Celdas multidimensionales: Se puede trabajar con ellas de forma similar a como 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 forma similar a como se trabaja con matrices. >> c l a s e ( 1 , 1 , 1 ) . alum= ’ p e p e ’ ; c l a s e ( 1 , 1 , 1 ) . n o t a =10; >> c l a s e ( 1 , 1 , 2 ) . alum= ’ j u a n ’ ; c l a s e ( 1 , 1 , 2 ) . n o t a =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 d o s d i m e n s i o n e s . >> c l a s e . alum % M u e s t r a l o s nombres de t o d o s l o s alumnos .

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

90/215

Funciones para estructuras y celdas (I)

Funciones especificas para structuras. Funci´ on getfield() isfield() isstruct() rmfield() setfield() struct() struct2cell()

A. Herreros, E. Baeyens, DISA/EII (UVa)

Descripci´ on Muestra los campos de la estructura. Verdadero si un campo de la estructura. Verdadero si es una estructura. Borra el campo marcado de la estructura. Cambia los contenidos de campo. Crea o convierte en una matriz de estructuras. Convierte una matriz de estructuras en celdas.

Curso de Programaci´ on 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= ’ p e p e ’ ; c l a s e ( 1 ) . n o t a =10; >> c l a s e ( 2 ) . alum= ’ j u a n ’ ; c l a s e ( 2 ) . n o t a =10; >> c l a s e ( 3 )= s t r u c t ( ’ alum ’ , ’ j o s ´ e ’ , ’ nota ’ , 7) % Otra f o r m a de d e f i n i r >> g e t f i e l d ( c l a s e ) % M u e s t r a 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 , ’ n o t a ’ ) % A f i r m a t i v o >> r m f i e l d ( c l a s e , ’ n o t a ’ ) % E l i m i n a campo n o t a . >> s e t f i e l d ( c l a s e , ’ alum ’ , ’ p e p e ’ ) ; % 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 l e m e n t o de s t r u c t en una columna de l a celda . >> % 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

92/215

Funciones para estructuras y celdas (III)

Funciones especificas de celdas. Funci´ on cell() cell2struct() celldisp() cellfun() cellplot() iscell() num2cell()

A. Herreros, E. Baeyens, DISA/EII (UVa)

Descripci´ on Crea una matriz de celda. Convierte celdas en estructuras. Muestra el contenido de la celda. Aplica una celda funci´ on a matriz. Muestra una gr´ afica de la celda. Verdadero en caso de que sea celda. Conversi´ on de matriz num´erica en celda.

Curso de Programaci´ on 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={ ’ p e p e ’ , ’ j u a n ’ ; 1 0 , 1 0 } ; %Se l l e n a c e l d a i s c e l l (a) % Afirmativo c e l l d i s p ( a ) % M u e s t r a 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 ) % M u e s t r a e l c o n t e n i d o en v e n t a n a . cellfun ( ’ i s r e a l ’ , a) % Diferentes funciones aplicadas a celdas . >> c e l l 2 s t r u c ( a , { ’ alum ’ , ’ n o t a ’ } ) % Pasa de c e l d a a estructura . >> % Toma l o s campos p o r 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

94/215

´ cticas con matrices, celdas, estructuras y ficheros Pra

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 p´ agina. 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 otro campo 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 dimensi´ on {5 × 10 × 20}. Meter la primera p´ agina de esta matriz en un fichero de texto con formato 5 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

95/215

Curso 2010/2011

96/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

´ ficas en dos dimensiones (I) Funciones para gra

Funci´ on figure subplot hold plot loglog semilogx, semilogy xlim, ylim , zlim tit, xlabel, ylabel legend, text, gtext ginput grid, box

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Crea una figura Crea varios ejes en la misma figura Superpone diferentes plots Plot lineal Plot logar´ıtmico Plot semilogar´ıtmico en eje x e y M´argenes en cada uno de los ejes Texto en t´ıtulo y ejes A˜ nadir texto en figura Marcar posici´ on en figura Mallado y caja en figura

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

97/215

´ ficas en dos dimensiones (II) Funciones para gra

Funci´ on bar, bar3, bar3h errorbar compass ezplot, ezpolar fplot hist, pareto pie, pie3 stem, stairts scatter, plotmatrix

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Gr´aficas de barras Gr´aficas con barras que marcan el error Gr´aficas en forma de comp´as Gr´afica sencillas de funciones Gr´aficas de funciones Histograma y carta de pareto Pastel de dos o tres dimensiones Gr´aficas con impulsos y escaleras Gr´aficas de dispersi´ on de datos y matrices

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

98/215

´ ficos de dos dimensiones, Escript1.m (I) Ejemplos con gra Barras: >> >> >> >>

x= − 2 . 9 : 0 . 2 : 2 . 9 ; b a r ( x , e x p (−x . ∗ x ) ) ; b a r h ( x , e x p (−x . ∗ x ) ) ; y= r o u n d ( r a n d ( 5 , 3 ) ∗ 1 0 ) ; bar ( y , ’ group ’ ) ; bar ( y , ’ s t a c k ’ ) ;

Histogramas: >> y= r a n d n ( 1 e4 , 1 ) ;

hist (y) ;

hist (y ,20) ;

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 , e x p (−x . ˆ 2 ) ) ;

Barras con error: >> x= − 4 : . 2 : 4 ; y= ( 1 / s q r t ( 2 ∗ p i ) ) ∗ e xp ( −( x . ˆ 2 ) / 2 ) ; >> e=r a n d ( 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

99/215

´ ficos de dos dimensiones, Escript1.m (II) Ejemplos con gra

Puntos: >> y=r a n d n ( 5 0 , 1 ) ; stem ( y ) ;

Histograma de los ´ angulos. >> y= r a n d n ( 1 0 0 0 , 1 ) ∗ p i ; r o s e ( y ) ;

Representaci´ on de n´ umeros complejos: >> z= e i g ( r a n d n ( 2 0 , 2 0 ) ) ; compass ( z ) ; >> f e a t h e r ( z ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

100/215

´ ficas para funciones y complementos (I), Escript2.m. Gra Gr´ aficas funciones: plot() para n´ umeros, ezplot(), fplot() para funciones: x= 0 : 0 . 0 5 : 1 0 ; y= s i n ( x ) . ∗ e x p ( −0.4∗ x ) ; figure ; subplot (3 ,1 ,1) ; plot (x , y) ; t i t l e ( ’ plot ’ ) ; subplot (3 ,1 ,2) ; e z p l o t ( ’ s i n ( x ) . ∗ e x p ( −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 ) . ∗ e x p ( −0.4∗ x ) ’ , [ 0 , 1 0 ] ) ; t i t l e ( ’ f p l o t ’ ) ; >> >> >> >> >>

subplot(n,m,p) divide la gr´ afica en n × m partes y va a la p. Texto y ejes en las gr´ aficas: T´ıtulos, legendas, cajas, mallado: >> >> >> >> >> >>

d i s p ( ’ Texto y e j e s en g r ´ aficas : ’) t= 0 : 0 . 1 : 2 ∗ p i ; r=s i n ( 2 ∗ t ) . ∗ c o s ( 2 ∗ t ) ; f i g u r e ; subplot (2 ,1 ,1) ; polar ( t , r ) ; t i t l e ( ’ polar ’ ) subplot (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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

101/215

´ ficas para funciones y complementos (II), Escript2.m. Gra

>> 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 ´ afico senoidal ’ ) ; >> d i s p ( ’ S u b p l o t , tama˜ n o de l e t r a , tama˜ no e j e s , c a j a , g r i d : ’ ) >> x = 0 : . 1 : 4 ∗ p i ; y= s i n ( x ) ; z=c o s ( 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 ∗ p i , − 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 ) ’ , ’ F o n t W e i g h t ’ , ’ 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 ∗ p i , − 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 ( ’ c o s ( x ) ’ , ’ F o n t W e i g h t ’ , ’ b o l d ’ , ’ F o n t S i z e ’ , 1 2 ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

102/215

´ ficas en tres dimensiones. Funciones para gra

Funci´ on plot3 mesh, meshc, meshz surf, surfc, surfl meshgrid, ndgrid hidden contour, contour3 trimesh, trisurf scatter3, stem3 slice surfnorm quiver3 patch

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Plot lineal en tres dimensiones Plot de mallados en tres dimensiones Plot de superfiecie en tres dimensiones Preparaci´ on de datos para gr´ aficas de superficie Ocultar l´ıneas y superficies ocultas Curvas de nivel Plot de mallado triangular Diagramas de dispersi´ on y impulsos en 3 dimensiones Gr´ aficos de volumen Normales de las superficies Puntos y normales en vectores Parches de superficies

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

103/215

´ ficas en tres dimensiones, Escript3.m (I) Ejemplos de gra Gr´ afica de tres dimensiones por puntos: >> t= 0 : p i / 5 0 : 1 0 ∗ p i ; >> f i g u r e ; p l o t 3 ( s i n ( t ) , c o s ( 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 ) , c o s ( t ) , t , ’− ’ , c o s ( t ) , s i n ( t ) , t , ’ ∗ ’);

Gr´ afica de tres dimensiones por pol´ıgonos: >> z = 0 : 0 . 0 1 : 8 ; x=c o s ( z ) ; y=s i n ( z ) ; >> f i g u r e ; f i l l 3 ( x , y , z , ’ r ’ ) ;

Gr´ aficas de tres dimensiones con barras: >> >> >> >>

figure ; subplot subplot subplot

y= c o o l ( 7 ) ; (1 ,3 ,1) ; bar3 ( y , 0 . 2 , ’ detached ’ ) ; (1 ,3 ,2) ; bar3 ( y , ’ grouped ’ ) ; (1 ,3 ,3) ; bar3 ( y , 0 . 1 , ’ stacked ’ ) ;

Gr´ aficas 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

104/215

´ ficas en tres dimensiones, Escript3.m (II) Ejemplos de gra Superficies tres dimensiones y contornos en dos y tres: >> >> >> >> >>

[ X , Y]= m e s h g r i d ( − 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 ) ; contour (Z) ; contour3 (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]= m e s h g r i d ( − 2 : . 2 : 2 , − 2 : . 2 : 3 ) ; Z= X . ∗ e x p (−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 , ’ Z l i m ’ , [ − 0 . 6 , 0 . 6 ] ) ; s e t ( g c f , ’ C o l o r ’ , ’w ’ ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

105/215

´ ficas en tres dimensiones, Escript3.m (III) Ejemplos de gra

Rotaci´ on de la figura: >> h= s u r f ( p e a k s ( 2 0 ) ) ; r o t a t e ( h , [ 1 , 0 , 0 ] , 1 5 ) ; >> v i e w ( [ 1 0 , 1 0 ] ) ;

Mallado triangular de la base, no homog´eneo. Superficie en funci´ on de ese mallado: >> >> >> >>

f i g u r e ; x= r a n d ( 1 , 5 0 ) ; y= r a n d ( 1 , 5 0 ) ; z= p e a k s ( 6 ∗ x −3 , 6∗ x −3) ; t r i= delaunay (x , y ) ; trimesh ( t r i , x , y , z ) ; figure ; trisurf ( tri ,x ,y , z) ;

Representaci´ on en cuatro dimensiones, la cuarta es el color: >> f i g u r e ; l o a d wind ; c a v= 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

106/215

´ cticas funciones para gra ´ ficas Pra Escribir en un fichero Fichero Cejer1.m el c´ odigo para obtener las siguientes gr´ aficas, 2

2

2

Visualizar sobre el rango −2 a 2 la funci´ on v = e −x −y −z . 3 Representar en el intervalo [−8, 8] la funci´ on f (x) = x 2x−4 . Graficar sobre los mismos ejes las funciones bessel(1, x), bessel(2, x) y bessel(3, x) para valores entre 0 y 12, separados uniformemente entre s´ı dos d´ ecimas. 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 tambi´ en la curva en polares r = 3a para a entre −4π y 4π (espiral). Representar la curva alabeada de coordenadas param´ etricas 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 c´ odigo para obtener las siguientes gr´ aficas, Representar la superficie, su gr´ afico de malla y su gr´ afico de contorno cuya ecuaci´ on es la siguiente: x = xe −x

2

−y 2

− 2 < x, y < 2

Representar en un gr´ afico de curvas de nivel con 20 l´ıneas la superficie de la ecuaci´ on z = sin(x) sin(y ) con −2 < x, y < 2. Representar el paraboloide x 2 + y 2 seccionado por el plano z = 2. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

107/215

Curso 2010/2011

108/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

´ n de clase y objeto Definicio Una clase es un nuevo tipo de dato, a una estructura, para el que se pueden 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 llamar´ an propiedades de la clase, y las funciones asociadas a una clase funciones m´etodo. >> >> >> >>

s= t f ( ’ s ’ ) ; % C l a s e ’ t f ’ , o b j e t o ’ s ’ . P= 1 / ( s +1) ; % O p e r a d o r ’+ ’ y ’ / ’ r e d e f i n i d o s p a r a P K= zpk ( [ ] , [ − 1 , − 2 ] , 1 ) ; % C l a s e ’ zpk ’ , o b j e t o K bode (P) ; %’ bode ’ m´ e todo de l a c l a s e ’ t f ’

Caracter´ısticas de la programaci´ on a objeto: Redefinici´ on de operadores espec´ıficos para la clase. Datos encapsulados: Las propiedades de un objeto no son visibles y s´ olo se puede acceder a ellas desde las funciones m´ etodo de la clase. Herencia: Una clase se puede crear a partir de otra, heredando todas sus funciones m´ etodo. Las clases tf, zpk y ss derivan de la clase lti. Agregaci´ on: Un objeto puede contener otros objetos.

Toda la informaci´ on de una clase, tf, est´ a en el directorio asociado @tf. Las propiedades de clase usada quedan en memoria. Se deben limpiar para poder modificarlas, >> c l e a r

tf

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

109/215

´todo principales (I) Funciones me

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 ´ on ’ display ’

Visualizador: M´etodo display que muestra la informaci´ on 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

110/215

´todo principales (II) Funciones me

Obtenci´ on de informaci´ on: General: M´ etodo get(), muestra propiedades del objeto. >> g e t (P) Por ´ındices: M´ etodo B=subref(A,S) >> P . num{1} % 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}

Introducci´ on de informaci´ on: General: M´ etodo set(), cambia propiedades del objeto. >> s e t (P , ’ num ’ , [ 1 , 2 ] ) Por ´ındices: M´ etodo A= subsasign(A,S,B) >> P . num{1}= 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

111/215

´ n de operadores (I) Redefinicio

Operaci´ on a + b a - b -a +a a.*b a*b a./b a.\b a/b

A. Herreros, E. Baeyens, DISA/EII (UVa)

M-fichero plus(a,b) minus(a,b) uminus(a) uplus(a) times(a,b) mtimes(a,b) rdivide(a,b) ldivide(a,b) mrdivide(a,b)

Descripci´ on Suma Resta Menos unitario M´ as unitario Multiplicaci´ on por elemento Multiplicaci´ on matricial Divisi´ on derecha por elemento Divisi´ on izquierda por elemento Divisi´ on matricial derecha

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

112/215

´ n de operadores (II) Redefinicio

Operaci´ on a\b a.^b a^b a < b a > b a = b a ~= b a == b a & b a | b

A. Herreros, E. Baeyens, DISA/EII (UVa)

M-fichero mldivide(a,b) power(a,b) mpower(a,b) lt(a,b) gt(a,b) le(a,b) ge(a,b) ne(a,b) eq(a,b) and(a,b) or(a,b)

Descripci´ on Divisi´ on matricial izquierda Potencia por elemento Potencia matricial Menor que Mayor que Menor que o igual a Mayor que o igual a Distinto de Igual a Y l´ ogico O l´ ogico

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

113/215

´ n de operadores (III) Redefinicio

Operaci´ on ~a a:d:b a:b a’ a.’ [a b] [a; b] a(s1,s2,...sn) a(s1,...,sn) = b (a)

A. Herreros, E. Baeyens, DISA/EII (UVa)

M-fichero not(a) colon(a,d,b) colon(a,b) ctranspose(a) transpose(a) display(a) horzcat(a,b,...) vertcat(a,b,...) subsref(a,s) subsasgn(a,s,b) subsindex(a)

Descripci´ on NO l´ ogico Operador dos puntos Traspuesta conjugada compleja Matriz transpuesta Visualizaci´ on pantalla Concatenaci´ on horizontal Concatenaci´ on vertical Referencia por sub´ındices Asignamiento por sub´ındices Conversi´ on al ser ´ındice

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

114/215

Prioridades y ejemplos

Prioridades entre objetos ante m´etodos 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

’ tf ’ .

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, m´etodos y operadores: >> s= t f ( ’ s ’ ) % C o n s t r u c t o r >> P ( 1 )= 1 / ( s +1) ; % O p e r a d o r e s subsasign ’ >> P ( 2 )= 1 / ( s +2) ; >> K= P ( 1 ) % m´ e todo ’ s u b s r e f ’

A. Herreros, E. Baeyens, DISA/EII (UVa)

’ / ’ , ’ + ’ , m´ e todo ’

Curso de Programaci´ on 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 m´etodo: M´ etodo constructor polynom: Se crea un objeto a partir de los coeficientes del polinomio. M´ etodo double: El polinomio se podr´ a convertir a un vector. M´ etodo display: El objeto se ver´ a en la pantalla en forma de cadena de caracteres. Sobrecarga de operadores: Los operadores suma (+), resta (-) y multiplicaci´ on (*) son redefinidos para polinomios.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

116/215

Ejemplo: Una clase de polinomios (II)

M´etodo 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 o r d e n 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 . if

n a r g i n == 0 p.c = []; p = c l a s s ( p , ’ polynom ’ ) ; e l s e i f i s a ( a , ’ polynom ’ ) p = a; else p.c = a (:) . ’; p = c l a s s ( p , ’ polynom ’ ) ; end

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

117/215

Ejemplo: Una clase de polinomios (III)

M´etodo display: function display (p) % polynom \ d i s p l a y . Comando v e n t a n a p a r a v e r e l o b j e t o . disp ( int2str (p . c) ) ;

M´etodo double: function c = double (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 +: function r = plus (p , q) % polynom \ p l u s . D e f i n e p + q p a r a p o l i n o m i o s . p = polynom ( p ) ; q = polynom ( q ) ; k = length (q . c) − length (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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

118/215

Ejemplo: Una clase de polinomios (IV) Operador -: f u n c t i o n r = minus ( p , q ) % polynom \ minus . I m p l e m e n t a p − q e n t r e p o l i n o m i o s . p = polynom ( p ) ; q = polynom ( q ) ; k = length (q . c) − length (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 . I m p l e m e n t a 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 ( c o n v ( p . c , q . c ) ) ;

Ejemplo de su uso en workspace: >> >> >> >> >> >>

p= p= p= q= t= a=

polynom % C r e a un o b j e t o v a c i o polynom ( p ) % D e v u e l v e e l o b j e t o que s e manda polynom ( [ 1 , 2 , 3 ] ) % C r e a un o b j e t o p l l e n o p+p q−p double (p)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

119/215

Clases derivadas: Herencia (I)

Muchas veces se desea crear una nueva clase con las mismas propiedades y funciones m´etodos que otra ya existente a la que se a˜ naden nuevas propiedades y funciones m´etodo. Esto se puede conseguir a˜ nadiendo un objeto de la clase existente ClasePadre en la definici´ on de la nueva clase. Los objetos de la nueva clase ser´ an ObjetoHijo, y los de la clase existente ObjetoPadre. Un ObjetoHijo puede acceder a todos las funciones m´etodo de la ClasePadre que no est´en 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 ’ , O b j e t o P a d r e ) ;

Con esta definici´ on Matlab crea un componente ObjetoHijo.ClasePadre donde se guardar´ a la informaci´ on de la parte del ObjetoHijo con las mismas propiedades que el ObjetoPadre.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

120/215

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 ’ , O b j e t o P a d r e 1 , ObjetoPadre2 ) ;

Una funci´ on m´etodo que no posea la ClaseHijo ser´ a buscada en las funciones de la clase ClasePadre1 y de no ser encontrada entre las de la clase ClasePadre2. Un ejemplo muy sencillo de una clase derivada es el de una clase de funciones, cuyas propiedades son: Nombre de la funci´ on. Polinomio caracter´ıstico.

Est´ a claro que esta clase funcion puede ser propuesta como derivada de la clase polinomio polymon, a˜ nadiendo a la misma una propiedad donde se escriba el nombre de la funci´ on. Todas las funciones m´etodo de la clase polynom pueden ser usadas en la clase funcion excepto el m´etodo constructor, el m´etodo display y el subsref, que van a ser redefinidos. Cuando los objetos funcion use funciones m´etodo de la clase polynom, se est´ a trabajando con la parte del objeto funcion heredada, y el resultado de la operaci´ on podr´ a ser un objeto polynom o de otra clase ya definida, pero nunca de la clase funcion. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

121/215

Clases derivadas: Herencia (III) Funci´ on m´etodo constructor de funcion. C´ odigo. function p = funcion ( varargin ) % 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 . switch nargin case 0 p o l y= polynom ; p . nombre = ’ ’ ; p = c l a s s (p , ’ funcion ’ , poly ) ; case 1 i f i s a ( v a r a r g i n {1} , ’ f u n c i o n ’ ) p = varargin {1}; else e r r o r ( ’ Tipo de a r g u m e n t o e r r o ´ n e o ’ ) ; end case 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 } ; else e 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 , ’ funcion ’ , poly ) ; otherwise e r r o r ( ’ N´ u mero de a r g u m e n t o s e r r ´ o n e o ’ ) ; end

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

122/215

Clases derivadas: Herencia (IV)

Funci´ on m´etodo display. C´ odigo. function display (p) % POLYNOM/DISPLAY Comando v e n t a n a p a r a v e r e l o b j e t o . disp ( ’ ’ ) ; d i s p ( [ ’ Funci´ o n ’ , p . nombre , ’ = ’ ] ) disp ( ’ ’ ) ; disp ( [ ’ ’ char (p) ] ) ;

Ejemplos en el workspace: >> >> >> >> >> >>

p= f u n c i o n % O b j e t o 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 ] ) % O b j e t o f u n c i o n con nombre y p a r ´ ametros . p2= f u n c i o n ( ’ e t a ’ , [ 2 , 3 , 4 ] ) p3= p1+p2 % Se u s a un m´ e todo d e l p a d r e . 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

123/215

Clases derivadas: Herencia (V) Funci´ on m´etodo subsref: Muestra por campos el nombre y polinomio de la funci´ on, y por ´ındice el valor de la funci´ on en un punto. C´ odigo. function b = subsref (a , s ) % SUBSREF Muestra , p o r campos e l c o n t e n i d o d e l % o b j e t o , p o r ´ı n d i c e s e l v a l o r en un c i e r t o p u n t o . s w i t c h s . type , case ’ . ’ , switch s . subs c a s e ’ nombre ’ , b= a . nombre ; case ’ poly ’ , b= c h a r ( a . polynom ) ; otherwise e r r o r ( ’ Campos : nombre , p o l y . ’ ) ; end case ’ () ’ , i n d= s . s u b s { : } ; b= a . polynom ( i n d ) ; otherwise e r r o r ( ’ Campo o ´ı n d i c e e r r o ´neo . ’ ) ; end

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

124/215

Clases agregadas (I)

Una clase puede tener de componentes objetos de otras clases ya definidas. Con ello, no se heredan directamente sus funciones m´etodo, pero estas funciones podr´ an ser usadas en la definici´ on de las nuevas funciones m´etodo. Ejemplo: La clase transfer tiene las siguientes propiedades: Polinomio del numerador. Polinomio del denominador.

Est´ a claro que se puede aprovechar la clase polynom para crear esta nueva clase ya que sus dos componentes son polinomios. Las funciones m´etodo de la nueva clase no tienen nada que ver con las de polynom, pero en su construcci´ on ser´ an empleadas. Las funciones m´etodo de la nueva clase son la funci´ on constructora, display, subsref, plus, minus, mtimes y mrdivide.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

125/215

Clases agregadas (II) Funci´ on m´etodo constructor. C´ odigo. function p = transfer ( varargin ) % 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 % C r e a una f u n c i o ´ n de t r a n s f e r e n c i a c o m p u e s t a de % d o s p o l i n o m i o s , uno en n u m e r a d o r y o t r o en denominador . switch nargin case 0 p . num= polynom ; p . den= polynom ; p = c l a s s (p , ’ t r a n s f e r ’ ) ; % Objeto nulo case 1 i f i s a ( v a r a r g i n {1} , ’ t r a n s f e r ’ ) p = varargin {1}; % Objeto f u n c i o n else 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 n u m e r ad o r end case 2 p . num= polynom ( v a r a r g i n { 1 } ) ; p . den= polynom ( v a r a r g i n {2}) ; p = c l a s s (p , ’ t r a n s f e r ’ ) ; % Objeto numerador y denominador otherwise e r r o r ( ’ N´ u mero de a r g u m e n t o s e r r ´ oneo ’ ) ; end A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

126/215

Clases agregadas (III)

Funci´ on m´etodo display. C´ odigo: function display (p) % t r a n s f e r \ d i s p l a y . Comando v e n t a n a p a r a 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 ) ; disp ( ’ ’ ) ; d i s p ( [ inputname (1) , ’ = ’ ] ) disp ( ’ ’ ) ; d i s p ( [ num ] ) ; d i s p ( r ep m a t ( ’− ’ , [ 1 , max ( [ s i z e ( num , 2 ) , s i z e ( den , 2 ) ] ) ] ) ) ; d i s p ( den ) ;

Ejemplos en el workspace: >> >> >> >> >>

g= g= p= g= g=

t r a n s f e r ; % Objeto nulo t r a n s f e r ( [ 1 , 2 , 3 ] ) % O b j e t o con num y den= 1 . polynom ( [ 1 , 2 , 3 ] ) % O b j e t o polynom t r a n s f e r ( [ 1 , 2 , 3 ] , [ 3 , 4 , 5 ] ) ; % O b j e t o con num y den t r a n s f e r ( p , [ 1 , 2 , 3 ] ) ; % O b j e t o con num y den

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

127/215

Clases agregadas (IV) Funci´ on m´etodo subsref. C´ odigo: function b = subsref (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 ´ on del objeto . % 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 p u n t o . s w i t c h s . type , case ’ . ’ , 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 num c a s e ’ den ’ , b= c h a r ( a . den ) ; % p o l i n o m i o den otherwise e r r o r ( ’ Campos : num , den ’ ) ; end case ’ () ’ , ind = s . subs { : } ; b= a . num ( i n d ) . / a . den ( i n d ) ; % V a l o r en x otherwise e 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

128/215

Clases agregadas (V) Sobrecarga de operadores. C´ odigo: function r = plus (p , q) % t r a n s f e r \ plus . Define p + q para t r a n s f e r . p = transfer (p) ; q = transfer (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 p a r a t r a n s f e r . p = transfer (p) ; q = transfer (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 p a r a t r a n s f e r . p = transfer (p) ; q = transfer (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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

129/215

Clases agregadas (VI)

Sobrecarga de operadores. C´ odigo: f u n c t i o n r = mtimes ( p , q ) % t r a n s f e r \ mrdivide Define p / q para t r a n s f e r . p = transfer (p) ; q = transfer (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 ; % O b j e t o t r a n s f e r g3= g1 / g2 % O b j e t o 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

130/215

´ cticas de la programacio ´ n orientada a objeto Pra

Modificar la funci´ on m´etodo subsref, Fichero Dejer1.m de la clase funcion, de forma que los ´ındices sirva para devolver el valor del coeficiente correspondiente. Por ejemplo, p(3) debe devolver el tercer coeficiente. Modificar la funci´ on m´etodo subsref, Fichero Dejer2.m, de la clase transfer de forma que devuelva los ´ındices de numerador y denominador correspondientes. Por ejemplo, g(1,2) debe devolver el primer coeficiente del numerador, y segundo del denominador. Definir una funci´ on m´etodo subasgn, de las clases funcion y transfer, Fichero Dejer3.m y Dejer4.m con un criterio similar a los empleados en los dos apartados anteriores. Ejemplo en la clase funcion, p(3)=5, introduce un 5 en la posici´ on tercera del polinomio. Ejemplo en la clase transfer, g(2,3)=[1,2], introduce un 1 en la posici´ on segunda del numerador, y un 2 en la posici´ on tercera de denominador.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

131/215

Curso 2010/2011

132/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

´ n de sistema continuos. Definicio

Un sistema es la relaci´ on entre una se˜ nal de entrada y una de salida, y (t) = F (u(t)). Todo sistema f´ısico es causal, es decir, la se˜ nal de salida depende en el tiempo de la se˜ nal de entrada. Un sistema continuo en el tiempo puede ser representado matem´ aticamente mediante una ecuaci´ on diferencial ordinaria (ODE), y (n) = f (t, y , y 0 , . . . , y (n−1) ). Nota: La entrada es una funci´ on del tiempo u(t).

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

133/215

´ n de sistemas continuos lineales Definicio

Sistema lineal: Si u(t) → y (t), entonces αu(t) → αy (t). Si {u1 (t), u2 (t)} → {y1 (t), y2 (t)}, entonces {u1 (t) + u2 (t)} → {y1 (t) + y2 (t)}.

Un sistema lineal se rige por una ecuaci´ on diferencial lineal, y (n) + an−1 y (n−1) + . . . + a0 y = bn u (n) + bn−1 u (n−1) + . . . + b0 u. Nota: Ver que de esta forma se cumple con su definici´ on. Funci´ on de transferencia de un sistema lineal es la transformada de Laplace de su ecuaci´ on diferencial, Y (s) s n + an−1 s n−1 + . . . + a0 = . U(s) bn s n + bn−1 s n−1 + . . . + b0

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

134/215

´ n de sistema muestreados. Definicio

Un sistema muestreado puede ser representado por una ecuaci´ on en diferencias, y (k) = f (k, y (k), y (k − 1), . . . , y (k − n)). Un sistema muestreado lineal puede ser representado por un una ecuaci´ on en diferencias lineal, y (k+n)+a1 y (k+n−1)+. . .+a0 y (k) = bn u(k+n)+bn−1 u(k+n−1)+. . .+b0 u(k). Funci´ on de transferencia de un sistema muestreado lineal es la transformada Z de su ecuaci´ on en diferencias, Y (z) z n + a1 z n−1 + . . . + a0 . = U(z) bn z n + bn−1 z n−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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

135/215

´ n en Matlab y Simulink: Comparacio ´n Simulacio

La simulaci´ on de un sistema consiste en predecir los datos de salida del mismo frente a los datos de entrada. Simulaci´ on desde Matlab: Creaci´ on de un fichero con la ecuaci´ on diferencial del sistema en forma de derivadas de primer orden. Resoluci´ on del ODE por m´ etodos similares a los de Runge-Kutta.

Simulaci´ on desde Simulink (interface gr´ afico): Dibujo del sistema en un entorno gr´ afico, donde se dispone de iconos para sus partes lineales, no lineales, continuas y discretas. Creaci´ on de un fichero con la informaci´ on de la planta y uso de las funciones de simulaci´ on de matlab.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

136/215

´ n con Matlab Simulacio

La ecuaci´ on ODE del sistema y (n) = f (t, y , y 0 , . . . , y (n−1) ) se debe transformar a una ecuaci´ on ODE vectorial de primer orden y 0 = F (t, y ). Una forma sencilla de conseguirlo es mediante el cambio, y1 = y , y2 = y 0 , . . . , yn = y (n−1) , y por tanto     

y10 y20 .. . yn0





    =  

y2 y3 .. . f (t, y1 , y2 , . . . , yn )

   . 

Condiciones iniciales: Valores iniciales de  T y1 (t0 ), . . . , yn (t0 ) .

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

137/215

´ n de Val der Pol ODE de la funcio Ejemplo: Funci´ on de Val der Pol, (din´ amica no lineal masa-muelle-amortiguador) y100 − µ(1 − y12 )y10 + y1 = 0, en ecuaciones de estado,  0    y2 y1 = . y20 µ(1 − y12 )y2 − y1 Fichero con la relaci´ on de las ecuaciones de estado, f u n c t i o n dy= p o l ( t , y ) % t es e l tiempo % y e s e l v a l o r d e l v e c t o r p a r a un t . % dy e s l a d e r i v a d a de y p a r a un t dado . % y (3) par´ a m e t r o 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 s dy = [ y ( 2 ) ; y ( 3 ) ∗(1− y ( 1 ) ˆ 2 ) ∗ y ( 2 )−y ( 1 ) ; 0 ] ; % Columna

Esta funci´ on ser´ a llamada por el programa ODE en los sucesivo puntos t para obtener la derivada. La entrada se debe poner en funci´ on de t. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

138/215

´ n de ODEs y formulacio ´n Clasificacio

Funciones ODE para sistema suaves basados en m´etodos 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 funci´ on ODE: >> [ t , y ]= s o l v e r ( @F , t s p a n , y0 , o p t i o n ) @F: Nombre o puntero del fichero .m donde se guarda la funci´ on. tspan: [ti,tf]: L´ımite inferior y superior. Paso y n´ umero de valores de salida variables. linspace(ti,tf,Npuntos): Se fija el n´ umero de puntos y tiempo cuya salida se desea conocer. El programa internamente tiene paso variable. y0: Valores iniciales deseados (vector columna). option: Especificaciones del algoritmo. Si se pone [] se toman por defecto.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

139/215

Opciones de las funciones ODE Consultar con la ayuda: >> >> >> >> >>

help odeset o p t i o n= o d e s e t ; % d a t o s p o r d e f e c t o . x0= [ 0 . 1 , 1 . 1 , 0 . 1 ] ; % d o s e s t a d o s , un p a r ´ ametro s o l= ode45 ( @pol , x0 ) ; % V e r s i ´ on 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 p u n t o s

Ejemplos: N´ umero de datos de salida: >> o p t i o n= o d e s e t ( ’ R e f i n e ’ , 4 ) ; % p o r d e f e c t o . Jacobiano del ODE en funci´ on 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 funci´ on de la forma, f u n c t i o n j a c= j a c p o l ( t , y ) jac = [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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

140/215

Ecuaciones diferenciales con valores de frontera (I)

El problema puede ser planteado por las ecuaciones como para a < t < b, y 0 = f (t, y , p) g (y (a), y (b), p) = 0 Se resuelve con la funci´ on: >> s o l= bv p4c ( @F , @bc ,

s o l i n i t , o p t i o n , p1 , p2 ,

...)

@F nombre o puntero a funci´ on que define el problema. @bc nombre o puntero a funci´ on que define los valores frontera. solinit: Fijar el mallado en t y puntos iniciales para y . option opciones de resolucion bvpset, bvpget. pi par´ ametros extras.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

141/215

Ecuaciones diferenciales con valores de frontera (II)

Ejemplo: Soluci´ on de la ecuaci´ on y 00 + |y | = 0, sabiendo que y (0) = 0 e y (4) = −2. Funci´ on diferencial: f u n c t i o n dydx= F ( t , y ) dydx= [ y ( 2 ) ; −a b s ( y ( 1 ) ) ] ; Funci´ on 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= b v p4 c ( @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 ) ; plot (t , y) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

142/215

Ecuaciones diferenciales en derivadas parciales (I)

Una ecuaci´ on en derivadas parciales puede formularse como:        ∂u ∂u ∂u ∂u m −m ∂ c x, t, u, x f x, t, u, + s x, t, u, =x ∂x ∂t ∂x ∂x ∂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,   ∂u p(x, t, u) + q(x, t)f x, t, u, = 0. ∂x

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

143/215

Ecuaciones diferenciales en derivadas parciales (II)

Se resuelve con la funci´ on: >> s o l= pd ep e (m, @F , @ i n i t , @ f r o n t , xmesh , t s p a n , o p t i o n s , p1 , p2 , . . . ) m: Simetr´ıa de la ec. diferencial, bloques (m=1), cil´ındrica (m=2) y esf´ erica (m=3). F Nombre o puntero a la definici´ on de funci´ on. >> [ 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 , p r ]= f r o n t ( x l , u l , x r , 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

144/215

Ecuaciones diferenciales en derivadas parciales (III) Ejemplo: Resolver la ecuaci´ on diferencial   ∂ ∂u 2 ∂u = , π ∂t ∂x ∂x sujeto a las condiciones iniciales u(x, 0) = sin(πx) y condiciones frontera u(0, t) = 0,

πe −t +

∂u (1, t) ∂x

=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 , x r , ur , t ) p l=u l ; q l =0; p r= p i ∗ e x p (− t ) ; q r= 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= pd ep e (m, @F , @ i n i t , @ f r o n t , x , t ) ; u= s o l ( : , : , 1 ) ; figure ; surf (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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

145/215

´ cticas de simulacio ´ n con matlab Pra Resolver la ecuaci´ on de Van del Pol y 00 + µ(1 − y 2 )y 0 + y = 0 para µ = 1, con valores iniciales y (0) = 2 e y 0 (0) = 0, en el intervalo t = [0, 20] (usando su Jacobiano) por el ode45 y ode23. Generalizar el resultado para una µ cualquiera. El fichero “script” con la resoluci´ on del problema se llamar´ a Eejer1.m. Resolver la ecuaci´ on de Lorenz, usadas en la descripci´ on de sistemas ca´ oticos, para los puntos iniciales y valores de σ , r y b que el usuario desee, por ejemplo σ = 10, r = 28 y b = 8/3. El fichero “script” con la resoluci´ on del problema se llamar´ a Eejer2.m. x 0 = σ(y − x) y 0 = x(r − z) − y z 0 = xy − bz Dada la ecuaci´ on y 00 + (λ − 2q cos(2t))y = 0, con condiciones de frontera y (0) = 1, y 0 (0) + y 0 (π) = 0 encontrar una soluci´ on para q = 15 y λ = 15, bas´ andose en una soluci´ on inicial para diez puntos de t en el intervalo [0, π]. Dibujar la gr´ afica de la primera componente en 100 puntos igualmente espaciados entre [0, π]. El fichero “script” con la resoluci´ on del problema se llamar´ a Eejer3.m. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

146/215

Simulink: Tabla de bloques propios

Bloques espec´ıficos de Simulink: Continuous: Bloques de sistemas continuos escritos en base a su funciones de transferencia; sus polos, ceros y ganancias; y sus ecuaciones en espacio de estado. Discrete: Bloques de sistemas discretos escritos en base a su funciones de transferencia; sus polos, ceros y ganancias; y sus ecuaciones en espacio de estado. Function & Tables: Funciones y tablas de Matlab. Especial importancia las S-Function. Math: Bloque de operaciones matem´ aticas entre se˜ nales. Nonlinear: Bloque de no linealidades. Signal & Systems: Entradas y salidas de datos hacia el espacio de trabajo 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 los guardan en ficheros. Sources: Bloques que generan diferentes tipos de se˜ nales.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on 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 en la formulaci´ on orientada a objeto LTI espec´ıfica de esa toolbox. Real-Time: Bloques de comunicaci´ on entre el sistema y una tarjeta de adquisici´ on de datos. En general, todas las toolbox de matlab han desarrollado funciones de simulink en la versi´ on 7 o posterior.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

148/215

´ n de sistemas desde matlab Simulink: Simulacio

Interface gr´ afico para modelar un sistema. Simulaci´ on desde Matlab: Entradas bloques in y salidas bloques out. >> [ t , x , y ]= s i m ( ’FUN ’ , t s p a n , 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 n´ umero de valores de salida variables. linspace(ti,tf,Npuntos): Se fija el n´ umero de puntos y tiempo cuya salida se desea conocer. El programa internamente tiene paso variable. x0: Valores iniciales de las variables de estado (vector columna). option: Especificaciones del algoritmo. Si se pone [] se toman por defecto. [t,u]: Tiempo y entradas al modelo Simulink desde el espacio de trabajo.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

149/215

´ n con matlab y simulink Ejercicios de simulacio

Formular en un fichero *.m los dos modelos planteados en Simulink y demostrar que la simulaci´ on con la funci´ on ode45 y con Simulink es equivalente. El nombre del fichero “script” ser´ a Eejer4.m. 1

s+1

1

1

1/100s+1

s

s

In1 Transfer Fcn

1 In1

A. Herreros, E. Baeyens, DISA/EII (UVa)

Relay

Saturation

Integrator1

Integrator

1

1

1

s+1

s

s

Transfer Fcn

Integrator1

Integrator

Curso de Programaci´ on en Matlab y Simulink

1 Out1

1 Out1

Curso 2010/2011

150/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

151/215

´ fico de matlab (I) GUIDE: Interface gra Definici´ on: Es una herramienta para construir interfaces gr´ aficos con botoneras, figuras, texto, y m´ as elementos. Construcci´ on de gr´ aficos: Se realiza con un interface del programa que permite colocar cada elemento donde se desee. Tras ello se exporta la informaci´ on a un fichero .m. Programaci´ on de funciones: Cada elemento del gr´ afico tiene asociado en el fichero .m una funci´ on donde el programador escribe las instrucciones de cada elemento.

Ejemplo: La siguiente gr´ afica muestra un inteface para el an´ alisis de las se˜ nales 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.

2500 2000 1500 1000 500 0 -500 0.97

0.98

0.99

1

1.01

1.02

1.03

1.04 5

x 10

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

152/215

´ fico de matlab (II) GUIDE: Interface gra Entorno gr´ afico: El comando GUIDE abre una pantalla con la que se puede dibujar el esquema gr´ afico del interface, Cada elemento a˜ nadido es un objeto con un nombre y propiedades que se pueden modificar en la pantalla. Los elementos se pueden alinear, formar bloques y otra serie de operaciones para conseguir una gr´ afica bonita. Cuando la figura se haya terminado se procede a exportar la informaci´ on a un fichero .m.

Pantalla GUIDE y paleta de trabajo:

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

153/215

´ fico de matlab (III) GUIDE: Interface gra Programaci´ on de los objetos: En el fichero .m generado con el interface cada objeto tiene asociado dos funciones, una de inicializaci´ on y otra de llamada. Variables de las funciones: Son dos objetos, hObject para los gr´ aficos y handles para la informaci´ on. Ejemplo: Barra para mandar datos (“slider”), Funci´ on creaci´ on de un “slider”: f u n c t i o n S Dim CreateFcn ( hObject , eventdata , 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 ´ afico los valores iniciales s e t ( h O b j e c t , ’ V a l u e ’ , 5 ) ; s e t ( h O b j e c t , ’ Min ’ , 0 ) ; s e t ( h O b j e c t , ’ Max ’ , 1 0 ) ;

Funci´ on de llamada de un “slider”: f u n c t i o n S Dim Callback ( hObject , eventdata , h a n d l e s ) % Extrae del objeto g r´ afico el valor N= g e t ( h O b j e c t , ’ V a l u e ’ ) ; % 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 o s e t ( h a n d l e s . E Dim , ’ S t r i n g ’ , n u m 2 s t r ( f l o o r (N) ) ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

154/215

GUIDE: Ejercicios propuestos

Ejercicio: Realizar un interface de usuario con la herramienta GUIDE que consiga mostrar en una pantalla gr´ aficas elegidas por el usuario en diferentes formatos, superficie, mallado o contorno. La funci´ on donde debe ser guardado el programa se llamar´ a 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

155/215

Curso 2010/2011

156/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

´ ticas ba ´ sicas (I) Funciones matema

Funci´ on abs acos, acosh acot, acoth acsc, acsch angle asec, asech asin, asinh atan, atanh atan2 ceil complex

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Valor absoluto Arco coseno y arco coseno hiperb´ olico Arco cotangente y arco cotangente hiperb´ olico Arco cosecante y arco cosecante hiperb´ olico Argumento Arco secante y arco secante hiperb´ olico Arco seno y arco seno hiperb´ olico Arco tangente y arco tangente hiperb´ olico Arco tangente en el cuarto cuadrante Redondeo al entero m´ as pr´ oximo Forma un n´ umero complejo

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

157/215

´ ticas ba ´ sicas (II) Funciones matema

Funci´ on conj cos,cosh cot,coth csc,csch exp fix floor gcd imag lcm log log2 log10 mod

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Complejo conjugado Coseno y coseno hiperb´ olico Cotangente y cotangente hiperb´ olica Cosecante y cosecante hiperb´ olica Exponencial Elimina la parte decimal Mayor entero menor o igual que un real dado M´ aximo com´ un divisor Parte imaginaria de un n´ umero complejo M´ aximo com´ un m´ ultiplo Logaritmo neperiano Logaritmo base 2 Logaritmo base 10 M´ odulo

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

158/215

´ ticas ba ´ sicas (III) Funciones matema

Comentario Coeficiente binomial Parte real de un n´ umero complejo Resto de la divisi´ on Redondeo al entero m´ as cercano Secante y secante hiperb´ olica Signo Seno y seno hiperb´ olico Ra´ız cuadrada Tangente y tangente hiperb´ olica

Funci´ on nchoosek real rem round sec,sech sign sin,sinh sqrt tan,tanh Pueden consultarse con >> h e l p e l f u n

MATLAB tiene tambi´en funciones matem´ aticas especiales >> h e l p s p e c f u n

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

159/215

´ ticas ba ´ sicas DElfun1.m Ejemplo de funciones matema  Combinaciones de 10 elementos tomadas de 4 en 4

10 4

 :

>> n c h o o s e k ( 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 ) >> c o s ( 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∗ e x p ( i ∗ p i ) 2 ∗ ( c o s ( p i )+i ∗ s i n ( p i ) ) l o g (3+2∗ i )

Algunas propiedades de las funciones trigonom´etricas >> >> >> >> >> >>

s i n ( p i / 4 ) ˆ2+ c o s ( p i / 4 ) ˆ2 ( e x p ( 5 )+ex p ( −5) ) /2 cosh (5) c o s h ( p i ) ˆ2− s i n h ( p i ) ˆ2 1+t a n ( p i / 4 ) ˆ2 s e c ( p i / 4 ) ˆ2

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

160/215

´ n de coordenadas Funciones de transformacio

Funci´ on cart2pol,pol2cart cart2sph,sph2cart

Comentario Transforma cartesianas a polares (cil´ındricas 3D) Transforma cartesianas a esf´ericas

Ejemplo de transformaci´ on 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 esf´ ericas: >> [ 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

161/215

´ sicas (I) Funciones estad´ısticas ba

Funci´ on max mean median min perms sort sortrows std var

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario M´ aximo de vector Media Mediana M´ aximo Permuta las filas de una matriz Datos ordenados Ordena filas de una matriz Desviaci´ on estandar. Varianza

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

162/215

´ sicas (II) Funciones estad´ısticas ba

Funci´ on corr cov corrcoef xcorr xcov cumprod cumsum cumtrapz diff find hist,histc

Comentario Correlaci´ on entre variables Matriz de covarianzas Matriz de correlaciones Correlaci´ on cruzada entre variables Covarianzas cruzadas entre variables Producto acumulativo Suma acumulativa Integraci´ on acumulativa trapezoidal Funci´ on diferencial y aproximaci´ on acumulativa Busca datos en vectores Histograma y contaje de histograma

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

163/215

´ sicas estad´ıstica DStat1.m (I) Ejemplo funciones ba Generamos dos series de 1000 n´ umeros cada una que se almacenan en los vectores x e y. Estos vectores representan un conjunto de medidas obtenidas de muestrear dos variables aleatorias X e Y. >> r a n d n ( ’ s e e d ’ , 1 ) ; >> x = r a n d n ( 1 0 0 0 , 1 ) ; >> y = r a n d n ( 1 0 0 0 , 1 ) ;

El valor medio de x se calcula con el comando: >> mean ( x )

Si hubiera alg´ un valor NaN en el vector x, el comando mean(x) devuelve NaN 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

164/215

´ sicas estad´ıstica DStat1.m (II) Ejemplo funciones ba

La desviaci´ on t´ıpica se calcula con el comando >> s t d ( x )

La varianza se calcula con el comando >> v a r ( x )

El valor m´ as grande de la serie se obtiene con el comando >> max ( x )

El valor m´ as peque˜ no 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

165/215

´ sicas estad´ıstica DStat1.m (III) Ejemplo funciones ba

La matriz de covarianza cruzada entre las dos variables aleatorias X e Y se obtiene con el comando: >> c o v ( x , y )

La matriz de correlaci´ on cruzada entre las dos variables aleatorias X e Y se obtiene con el comando: >> c o r r c o e f ( x , y )

Para obtener la posici´ on o ´ındice del mayor o menor valor dentro del vector x, se puede utilizar el comando max o min con argumentos de salida. >> [ a i ] = max ( x )

El mayor valor es a, y su posici´ on dentro del vector x queda almacenado en la posici´ on i.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

166/215

´ sicas estad´ıstica DStat1.m (IV) Ejemplo funciones ba Los valores del vector x pueden ordenarse con el comando sort >> x s = s o r t ( x ) ;

Se puede obtener el ´ındice de ordenaci´ on utilizando sort con un segundo argumento 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 posici´ on 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 n´ umero diferente de intervalos, por ejemplo 50, hacer >> h i s t ( x , 5 0 )

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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

167/215

Ejercicios de tratamiento de datos

En un fichero script de nombre Gejer1.m realizar las siguientes operaciones: Generar una variable aleatoria x con distribuci´ on normal y otra y con distribuci´ on uniforme, ambas con 1000 elementos. Hallar la media, varianza y mediana de ambas variables. Hallar el histograma de ambas variables. Representar la funci´ on de distribuci´ on acumulada de ambas variables a partir de los datos ordenados. Representar la funci´ on de distribuci´ on de ambas variables a partir de la diferencia de los datos obtenidos en el apartado anterior. Hallar el diagrama Q-Q entre ambas variables, es decir, el diagrama de los datos ordenados de una variable con respecto a la otra. Hallar la correlaci´ on y convarianza entre ambas variables. Hallar la correlaci´ on y covarianza cruzadas de las variables consigo mismas y entre ellas para un tiempo de [−τ, τ ].

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

168/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

169/215

´ sicas de a ´ lgebra matricial (I) Funciones ba

Funci´ on expm logm sqrtm funm transpose, ()’ inv det rank trace

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Exponencial de una matriz e A Logaritmo neperiano de una matriz Ra´ız cuadrada de una matriz Cualquier funci´ on matem´ atica aplicada a una matriz Transpuesta de una matriz Inversa de una matriz Determinante de una matriz Rango de una matriz Traza de una matriz

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

170/215

´ sicas de a ´ lgebra matricial (II) Funciones ba

Funci´ on eig svd cond rcond norm null orth subspace

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Valores propios de una matriz Valores singulares de una matriz N´ umero de condici´ on de una matriz Rec´ıproco del n´ umero de condici´ on (estimado) Norma de una matriz Base ortonormal del n´ ucleo de una matriz Base ortonormal de la imagen de una matriz ´ Angulo entre los subespacios de dos matrices

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

171/215

´ lgebra de matrices DAlg1.m (I) Ejemplo de Matlab de funciones de a Formamos una matriz cuadrada aletoria de dimensi´ on 3 >> A=r a n d n ( 3 )

Calculamos su traspuesta >> A ’

Calculamos su rango con rank >> r a n k (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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

172/215

´ lgebra de matrices DAlg1.m (II) Ejemplo de Matlab de funciones de a

Comprobamos que el determinante es el producto de los autovalores >> [ p r o d ( e i g (A) ) d e t (A) ]

Calculamos el n´ umero de condici´ on >> cond (A)

Comprobamos que el n´ umero de condici´ on es el cociente entre el m´ aximo y el m´ınimo autovalor >> s q r t ( max ( e i g (A ’ ∗ A) ) / min ( e i g (A ’ ∗ A) ) ) >> max ( s v d (A) ) / min ( s v d (A) )

Estimamos el rec´ıproco del n´ umero de condici´ on con rcond >> r c o n d (A)

Obtenemos el error relativo de estimaci´ on obtenido con rcond’) >> a b s ( cond (A) −1/ r c o n d (A) ) / cond (A)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

173/215

´ lgebra de matrices DAlg2.m (I) Ejemplo de Matlab de funciones de a

Formamos una matriz cuadrada compleja aleatoria de dimensi´ on 3 >> B=r a n d n ( 3 )+j ∗ r a n d n ( 3 )

Calculamos B elevada al cubo >> Bˆ3

Calculamos 2 elevado a B >> 2ˆB

Calculamos la exponencial de B por dos m´etodos >> expm (B) >> e x p ( 1 ) ˆB

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

174/215

´ lgebra de matrices DAlg2.m (II) Ejemplo de Matlab de funciones de a

Calculamos el logaritmo neperiano de B por dos m´etodos >> logm (B) >> funm (B , ’ l o g ’ )

Calculamos la ra´ız cuadrada de B por tres m´etodos >> s q r t m (B) >> funm (B , ’ s q r t ’ ) >> B ˆ . 5

Calculamos el seno y coseno de B >> funm (B , ’ s i n ’ ) >> funm (B , ’ c o s ’ )

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

175/215

´ n de matrices Descomposicio

Funci´ on [V,D]=eig(A) [T,B]=balance(A) [U,T]=schur(A) [L,U,P]=lu(A) R=chol(A) [Q,R,P]=qr(A) [V,J]=jordan(A) pinv poly

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario AV = VD, D diagonal TB = AT , eig(A) ≈ eig(B) UT = AU, U 0 U = I , T triangular superior PA = LU, P permutaci´ on, L triangular inferior, U triangular superior R 0 R = A para A definida positiva, R triangular superior AP = QR, P permutaci´ on, Q ortogonal, R triangular superior AV = VJ, J matriz de Jordan Pseudoinversa de una matriz Polinomio caracter´ıstico de una matriz

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

176/215

´ n de matrices DAlg3.m (I) Ejemplo de descomposicio

Formamos una matriz cuadrada aletoria de dimensi´ on 3 >> A=r a n d n ( 3 )

Calculamos su descomposici´ on en valores propios con svd >> [ V , D]= s v d (A)

Comprobamos la descomposici´ on: >> A∗V−V∗D

Calculamos la matriz balanceada de A >> [ T , B]= b a l a n c e (A)

Comprobamos la descomposici´ on >> [ B T\A∗T ] >> e i g (A) >> e i g (B)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

177/215

´ n de matrices DAlg3.m (II) Ejemplo de descomposicio Calculamos la descomposici´ on de Schur de A >> [ U , T]= s c h u r (A)

Comprobamos la descomposici´ on >> [ U∗T∗U ’ A ] >> U∗U ’

Calculamos la descomposici´ on QR de A >> [ Q, R , E]= q r (A)

Comprobamos la descomposici´ on >> [Q∗R A∗E ] >> Q∗Q’

Calculamos la descomposici´ on LU de A >> [ L , U , P]= l u (A)

Comprobamos la descomposici´ on >> [ L∗U P∗A ]

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

178/215

´ n de matrices DAlg3.m (III) Ejemplo de descomposicio Calculamos la descomposici´ on SVD de A >> [ U , S , V]= s v d (A)

Comprobamos la descomposici´ on >> [ U∗S∗V ’ A ] >> U’ ∗ U >> V∗V ’

Para calcular el factor de Choleski necesitamos una matriz definida positiva que calculamos premultiplicando A por su transpuesta >> AA=A ’ ∗ A >> R=c h o l (AA)

Comprobamos la descomposici´ on >> [ R ’ ∗ R AA ]

Comprobamos que si la matriz no es definida positiva no tiene factor de Choleski y se obtiene un error >> R=c h o l (A)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

179/215

´ n de sistemas de ecuaciones Solucio

Funci´ on X=A/B X=A\B X=lsqnonneg(A,b) X=linsolve(A,B) r=roots(p) p=poly(r) x=fzero(fun,x0)

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Resuelve XA = B Resuelve AX = B por m´ınimos cuadrados Soluci´ on de m´ınimos cuadrados de Ax = b, x ≥ 0 Resuelve AX = B, A matriz cuadrada, B matriz Ra´ıces de un polinomio p Polinomio de ra´ıces v Calcula un cero de la funci´ on fun pr´ oximo a x0

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

180/215

´ n de sistemas DAlg4.m (I) Ejemplo solucio Obtenemos las ra´ıces del polinomio p(x) = x 3 + 2x 2 − 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 soluci´ on es: >> X=A\b

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

181/215

´ n de sistemas DAlg4.m (II) Ejemplo solucio

La soluci´ on de m´ınimos cuadrados no negativa es: >> Xn=n l s q n o n e g (A , b )

La ecuaci´ on x sin(x) = 1/2 puede resolverse con fzero en el entorno de los 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

...

182/215

´ lgebra de matrices Ejercicios de a 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/11

2/5 2/7 2/9 2/11 2/13

2/7 2/9 2/11 2/13 2/15

2/9 2/11 2/13 2/15 2/17

2/11 2/13 1/15 2/17 1/19

    

Autovalores, autovectores, polinomio caracter´ıstico y n´ umero de la condici´ on. Hallar al inversa de la matriz. Hallar la descomposici´ on por los siguientes m´ etodos: Jordan, Schur, LU, QR, Choleski y SVD. Comprobar si es posible la descomposici´ ony si los valores obtenidos son ciertos. Si b = [1, 3, 5, 7, 9]0 resolver el valor de debe tener x para que se cumpla la ecuaci´ on Ax = b.

En un fichero “script” de nombre Gejer2.m realizar el siguiente ejercicio. Sea x y n dos vectores aleatorios de distribuci´ on uniforme entre [0, 1] de 100 elementos. Fijar un valor para los par´ ametros [a, b, c]. Obtener el valor de y de la formula y = a ∗ x + b ∗ x 2 + c ∗ x 3 + 0,1 ∗ n. Estimar el valor de los par´ ametros [a, b, c] a partir del valor de x e y usando m´ınimos cuadrados. Se considera que n es un ruido. A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

183/215

Curso 2010/2011

184/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

´ n y filtros. Funciones de relacio

Funci´ on cov corrcoef conv diff gradient del2 filter ltitr

Comentario Varianza de un vector Coeficientes de correlaci´ on (normalizados) Convoluci´ on de datos, producto de polinomios Diferencias entre elementos de un vector Derivadas parciales num´ericas de una matriz Laplaciano discreto de una matriz Filtro FIR y IIR de datos Respuesta lineal

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

185/215

´ cticas con funciones de relacio ´ n y filtros, Bscript2.m (I) Pra

Varianza de un vector >> l o a d c o u n t . d a t >> a= c o v ( c o u n t ( : , 1 ) ) ;

Coeficiente de correlaci´ on: >> b= c o r r c o e f ( c o u n t ) ;

Convoluci´ on entre dos vectores: >> c= c o n v ( [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ) ; >> d= c o n v ( c o u n t ( : , 1 ) , c o u n t ( : , 2 ) ) ;

Diferencial., Derivada aproximada: >> a= d i f f ( c o u n t ) ; >> s i z e ( a ) , s i z e ( c o u n t )

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

186/215

´ cticas con funciones de relacio ´ n y filtros, Bscript2.m (II) Pra

Gradientes, derivada parcial aproximada: >> [ px , py ]= g r a d i e n t ( c o u n t ) ;

Laplaciano discreto de un vector del 2 u = (d 2 u/dx 2 + d 2 /dy 2 ): >> l p= d e l 2 ( c o u n t )

Filtro FIR y IIR de vectores: >> b = [ 1 , 1 , 1 ] / 3 ; a =1; >> f= f i l t e r ( b , a , c o u n t ) ;

Simulaci´ on 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 , o n e s ( 1 0 0 , 1 ) ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

187/215

´ lisis en frecuencia Ana

Funci´ on fft fft2 ifft ifft2 abs angle fftshift

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Transformada de Fourier discreta Transformada de Fourier en dos dimensiones Inversa transformada de Fourier Inversa transformada de Fourier en dos dimensiones Magnitud ´ Angulo Mueve el retraso cero al centro del espectro

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

188/215

´ cticas de ana ´ lisis en frecuencia,Bscript3.m Pra

Toma de datos: >> l o a d s u n s p o t . d a t ; >> 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 ) = [ ] ;

Gr´ aficas 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 ( a b s ( y ) ) >> s u b p l o t ( 2 , 1 , 2 ) ; p l o t ( f f t s h i f t ( a b s ( y ) ) ) ;

Gr´ aficas en funci´ on de la frecuencia de Nyquist: >> >> >> >>

N= l e n g h t ( y ) ; power = a b s (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 Programaci´ on 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 siguientes preguntas. Obtener una se˜ nal 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 se˜ nal para eliminar el componente de alta frecuencia, producto del acoplamiento con la red a 50 Hz. Proponer para ello diferentes tipos de filtros. Obtener la transformada de Fourier de la se˜ nal filtrada y sin filtrar viendo las diferencias. Se precisa que la frecuencia cero est´ e en el centro de la gr´ afica.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

190/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

191/215

Funciones para polinomios

Funci´ on conv deconv poly polyder polyfit polyval polyvalm residue roots

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Producto de polinomios Divisi´ on de polinomios Definici´ on de polinomios por ra´ıces Derivada de polinomios Interpola por m´ınimos cuadrados Valor polinomio en un punto Valor polinomio con matrices Fracciones parciales Ra´ıces de un polinomio

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

192/215

´ cticas con funciones de polinomios, Cscript1.m (I) Pra

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 n´ umero 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

Convoluci´ on (producto) y deconvoluci´ on: >> a= [ 1 , 2 , 3 ] ; b= o n e s ( 1 , 5 ) ; c= c o n v ( a , b ) ; >> [ q , r ]= d e c o n v ( c , a ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

193/215

´ cticas con funciones de polinomios, Cscript1.m (II) Pra

Derivada de un polinomio, del producto y de la divisi´ on: >> 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

194/215

´ cticas regresiones basadas m´ınimos cuadrados, Cscript2.m (I) Pra Datos para la regresi´ on: >> t = [ 0 . 3 . 8 1 . 1 1 . 6 2 . 3 ] ’ ; y = [ 0 . 5 0 . 8 2 1 . 1 4 1 . 2 5 1.35 1 . 4 0 ] ’ ; >> p l o t ( t , y , ’ o ’ ) , g r i d on ;

Regresi´ on, y = a(0) + a(1) ∗ t + a(2) ∗ t 2 : >> X= [ o n e s ( s i z e ( t ) ) , t , t . ˆ 2 ] ; a= X\ y ; >> t h a t = ( 0 : 0 . 1 : 2 . 5 ) ’ ; y h a t = [ o n e s ( s i z e ( t h a t ) ) t h a t that .ˆ2]∗ a ; >> p l o t ( t h a t , y h a t , ’− ’ , t , y , ’ o ’ ) , g r i d on ;

Soluci´ on: a = inv (X 0 ∗ X ) ∗ X 0 ∗ y Regresi´ on exponencial: y = a(0) + a(1) ∗ exp(−t) + a(2) ∗ t ∗ exp(−t): >> X = [ o n e s ( s i z e ( t ) ) e xp (− t ) t . ∗ e x p (− t ) ] ; a = X\ y ; >> t h a t = ( 0 : 0 . 1 : 2 . 5 ) ’ ; >> y h a t = [ o n e s ( s i z e ( t h a t ) ) e x p (− t h a t ) t h a t . ∗ e x p (− t h a t ) ]∗ a ; >> f i g u r e ; p l o t ( t h a t , y h a t , ’− ’ , t , y , ’ o ’ ) , g r i d on ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

195/215

´ cticas regresiones basadas m´ınimos cuadrados, Cscript2.m (II) Pra

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 . 1 1.4] ’; >> y = [ . 1 7 . 2 6 . 2 8 . 2 3 . 2 7 . 2 4 ] ’ ; >> X = [ o n e s ( s i z e ( x1 ) ) x1 x2 ] ; a = X\ y ;

y estimada y error m´ aximo: >> y h a t = X∗ a ; MaxErr = max ( a b s ( y h a t − y ) )

Obtenci´ on 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 = polyfit (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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

196/215

´ mios y regresio ´n Ejercicios de polino

Sea x un vector aleatorio uniforme de 1000 componentes. Comprobar en un fichero “script” de nombre Iejer1.m que la convoluci´ on de ese vector con el polinomio [1, 1, 1]/3 da el mismo resultado que la se˜ nal obtenida con y= filter([1,1,1]/3,1,x). Dar una explicaci´ on 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 de 0,1 s y n un vector aleatorio de distribuci´ on uniforme entre [0, 1] del mismo n´ umero de elementos. Fijar un valor para los par´ ametros [a, b, c]. Obtener el valor de y de la formula y = a + b ∗ x + c ∗ x 2 + 0,1 ∗ n. Estimar el valor de los par´ ametros [a, b, c] a partir de la funci´ on polyfit y con m´ınimos cuadrados.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

197/215

Funciones para interpolar datos, splines

Funci´ on interp1 inter2, inter3 interpft mkpp spline pchip ppval unmkpp mmppint, mmppder

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Interpolaci´ on en una dimensi´ on Interpolaci´ on en dos y tres dimensiones Interpolaci´ on una dimensi´ on fft. Compone un spline a partir de propiedades Genera splines cubicos Genera splines c´ ubico de Hermite Valor de un spline en puntos Propiedades de un spline Spline integral y derivada

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

198/215

´ cticas con funciones para interpolar datos Pra Interpolaci´ on de datos en una dimensi´ on por distintos m´etodos: >> >> >> >> >> >> >> >>

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 ’ ) x h a t= l i n s p a c e ( 1 , 5 , 1 0 0 ) ’ ; y h a t= i n t e r p 1 ( x , y , x h a t , ’ s p l i n e ’ ) ; p l o t ( x h a t , y h a t , ’− ’ , x , y , ’ o ’ ) ;

Interpolaci´ on de datos en dos dimensiones por distintos m´etodos: >> >> >> >> >> >> >> >> >>

[ x , y ] = meshgrid ( −3:1:3) ; z = peaks ( x , y ) ; s u r f ( x , y , z ) [ xi , y i ] = meshgrid ( −3:0.25:3) zi1 = interp2 (x , y , z , xi , yi s u r f ( xi , yi , zi1 ) ; zi2 = interp2 (x , y , z , xi , yi s u r f ( xi , yi , zi2 ) ; zi3 = interp2 (x , y , z , xi , yi s u r f ( xi , yi , zi1 ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

; ,

’ nearest ’ ) ;

,

’ bilinear ’) ;

,

’ bicubic ’ ) ;

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

199/215

´ cticas splines, Cscript3.m (I) Pra Datos: >> x= 0 : 1 2 ; y= t a n ( p i ∗ x / 2 5 ) ; >> 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 ) ; [ b r e a k , c o e f s , n p o l y s , n c o e f s , dim ]= unmkpp ( pp ) pp= mkpp ( b r e a k s , c o e f s ) % c o m p o s i c i o ´n

Spline con el m´etodo de Hermite: >> x = [ 0 , 2 , 4 , 5 , 7 . 5 , 1 0 ] ; y= e xp (−x / 6 ) . ∗ c o s ( x ) ; >> ch= p c h i p ( x , y ) ; y c h= p p v a l ( ch , x i ) ; >> p l o t ( x , y , ’ o ’ , x i , yp , ’ : ’ , x i , y c h ) ;

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

200/215

´ cticas splines, Cscript3.m (II) Pra

Spline integral y derivada de otro: >> p p i= mmppint ( pp ) ; ppd= mmppder ( pp ) ; >> y i= p p v a l ( p p i , 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 ∗ p i , 1 5 ) ; x= s q r t ( t ) . ∗ c o s ( 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∗ p i , 1 0 0 0 ) ; 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

201/215

Funciones para interpolar superficies e hiperplanos

Funci´ on meshgrid ndgrid surf, mesh slide griddata griddata3 griddatan interpn

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Mallado de dos o tres dimensiones Mallado de dimensi´ on n Dibuja superficies y mallados Dibuja cortes dentro de un volumen Interpolaci´ on una superficie Interpolaci´ on una hipersuperficie, datos orden 3 Interpolaci´ on una hipersuperficie, datos orden n Interpolaci´ on en n dimensiones

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

202/215

´ cticas para interpolar superficies e hiperplanos, Cscript5.m Pra

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 ) ; xi1 = −2:0.1:2; xi2 = −2:0.1:2; [ Xi1 , X i 2 ] = n d g r i d ( x i 1 , x i 2 ) ;

Z real e interpolada: >> >> >> >>

Z = X2 . ∗ e x p (−X1 . ˆ 2 −X2 . ˆ 2 ) ; Z i = g r i d d a t a ( X1 , X2 , Z , Xi1 , X i 2 ) 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

203/215

´ cticas de interpolacio ´ n de datos. Pra

Representar en un “script” de nombre Iejer3.m la diferencia entre el polinomio interpolador c´ ubico hermitiano a trozos y el polinomio interpolador spline cuando x y t var´ıan entre −3 y 3 (t varia entre d´ecima y d´ecima) y x = [−1, −1, −1, 0, 1, 1]. Se considera un conjunto de temperaturas medidas sobre las cabezas de los cilindros de un motor que se encuentra en per´ıodo de pruebas para utilizar en coches de carreras. Los tiempos de funcionamiento del motor en 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 regresi´ on lineal en un fichero Iejer4.m que ajuste las temperaturas en funci´ on de los tiempos. Realizar tambi´en el ajuste mediante regresiones polin´ omicas de grados 2, 3 y 4 representando los resultados.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

204/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

205/215

´ n e integracio ´n Funciones de optimizacio

Funci´ on fplot fminbnd fminsearch fzero optimset, optimget quad quadl dblquad triplequad

A. Herreros, E. Baeyens, DISA/EII (UVa)

Comentario Dibuja la funci´ on Minimiza funci´ on con una variable con restricciones Minimiza funci´ on con varias variables Encuentra el cero en funci´ on con una variable Par´ ametros de resoluci´ on Integraci´ on num´erica, Simpson Integraci´ on num´erica, Lobatto Integraci´ on num´erica, doble integral integraci´ on num´erica, triple integral

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

206/215

´ cticas funciones de optimizacio ´ n, Dscript1.m (I) Pra Par´ ametros de la optimizaci´ on: >> h e l p o p t i m s e t

Funci´ on definida como an´ onima (versi´ on 7): >> humps= @( x ) 1 . / ( ( x − 0 . 3 ) . ˆ 2 + 0 . 0 1 ) + 1 . / ( ( x −0.9) . ˆ 2 + 0 . 0 4 ) −6;

Funci´ on definida como an´ onima (versiones anteriores): >> humps= i n l i n e ( ’ 1 . / ( ( x − 0 . 3 ) . ˆ 2 + 0 . 0 1 ) + 1 . / ( ( x −0.9) . ˆ 2 + 0 . 0 4 )−6 ’ ) ;

Entradas y salida de la funci´ on, representaci´ on: >> 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 modificaci´ on de par´ ametros (ver valor en cada iteraci´ on): >> 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

207/215

´ cticas funciones de optimizacio ´ n, Dscript1.m (II) Pra

Algorithmo: Nelder-Mead simplex, x ∈ [0,3 < x < 1], espacio de b´ usqueda de una dimensi´ on: >> x = f m i n b n d ( humps , 0 . 3 , 1 , o p t i o n ) ;

Espacio de b´ usqueda 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 , o u t p u t ] = 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 Programaci´ on en Matlab y Simulink

Curso 2010/2011

208/215

´ cticas funciones de optimizacio ´ n, Dscript1.m (III) Pra

Funci´ on de control del algoritmo: >> o p t i o n s = o p t i m s e t ( ’ OutputFcn ’ , @ o u t f u n ) ;

Forma de la funci´ on de control, saca gr´ aficos en cada iteraci´ on: function stop = outfun (x , optval , state ) % o p t v a l campos : f u n c o u n t , 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 ’ % stop : false , true s t o p = [ ] ; h o l d on ; plot ( x (1) , x (2) , ’ . ’ ) ; drawnow

Prueba con la minimizaci´ on 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 , o u t p u t ] = f m i n s e a r c h ( t v a r , v , options )

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

209/215

´ cticas funciones de integracio ´ n, Dscript1.m Pra

Integral simple: >> quad ( humps , −1, 2 ) %I n t e g r a c i ´ on simple >> 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: >> o u t= @( x , y ) y ∗ s i n ( x ) + x ∗ c o s ( y ) ; >> xmin= p i ; xmax= 2∗ p i ; ymin= 0 ; ymax= p i ; >> r e s u l t = d b l q u a d ( out , xmin , xmax , ymin , ymax )

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

210/215

´ n con restricciones: Funciones peso Optimizacio

Restricci´ on del problema: m´ınx {f (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´ınx {m´ axf {[f1 (x), . . . , fn (x)]}}, cost = m´ ax([f1 (x), . . . , fn (x)]). Sistema de ecuaciones no lineales: {f1 (x) = 0, . . . , fn (x) = 0}: cost = m´ ax(abs([f1 (x), . . . , fn (x)])). Problema multiobjetivo: m´ınx [f1 (x), . . . , fn (x)]. P cost = i pi ∗ fi (x). La soluci´ on depende de los pi elegidos.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

211/215

´ cticas con funciones de optimizacio ´ n (I) Pra

Minimizar la funci´ on f (x) = (x − 3)2 − 1 en el intervalo (0, 5). Encontrar el valor de x que minimiza el valor m´ aximo de [f1 (x), . . . , f5 (x)], f1 (x) = 2x12 + x22 − 48 ∗ x1 − 40x2 + 304 f2 (x) = −x22 − 3x22 f3 (x) = x1 + 2x2 − 18 f4 (x) = −x1 − x2 f5 (x) = x1 + x2 − 8 Minimizar la funci´ on siguiente f (x) = 3x12 + 2x1 ∗ x22 .

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

212/215

´ cticas con funciones de optimizacio ´ n (II) Pra Encontrar en un fichero “script” de nombre Jejer1.m los valores de x que minimizan la funci´ on f (x) sujeta a las restricciones k1 (x, w1 ) y k2 (x, w2 con w1 y w2 en [1, 100]. La funci´ on y las restricciones se definen en 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(w1 x1 ) cos(w2 x2 ) − 1/100(w1 − 50)2 − sin(w1 x3 ) − x3 ≤ 1 k(x, w2 ) = sin(w2 x2 ) cos(w2 x1 ) − 1/100(w2 − 50)2 − sin(w2 x3 ) − 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 funci´ on ydata(i) del tipo, ydata(i) = x(1)xdata(i)2 + x(2) sin(xdata(i)) + x(3)xdata(i)2 Los resultados se escribir´ an en un fichero “script” de nombre Jejer2.m.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

213/215

Curso 2010/2011

214/215

Contenidos 1

Introducci´ on

2

Programaci´ on con Matlab

3

Optimizaci´ on del c´ odigo de programaci´ on

4

Gr´ aficas en dos y tres dimensiones

5

Programaci´ on orientada a objetos

6

Simulaci´ on en Matlab y Simulink

7

GUIDE: Interface gr´ afico de matlab

8

Funciones para tratamiento de datos

9

Funciones para ´ algebra de matrices

10 Filtros y an´ alisis en frecuencia 11 Funciones para polinomios e interpolaci´ on de datos 12 Funciones de funciones: Optimizaci´ on e integraci´ on 13 Bibliograf´ıa A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Bibliograf´ıa

Matlab y sus aplicaciones en la ciencia y la ingenier´ıa, (C´esar P´erez). Prentice Hall. Mastering Matlab 7, (Duane Hanselman, Bruce Littlefield). Prentice Hall, Internaltional Edition.

A. Herreros, E. Baeyens, DISA/EII (UVa)

Curso de Programaci´ on en Matlab y Simulink

Curso 2010/2011

215/215

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF