CURSO BÁSICO DE
MATLAB
INTRODUCCIÓN
AL
MATLAB
ÍNDICE CURSO BÁSICO DE ............................................................................................1 MATLAB............................................................................................................1 CAPÍTULO I: INTRODUCCIÓN.......................................................................................5 1.1 El programa MATLAB.......................................................................................................................................5 1.2 Ventanas en MATLAB.......................................................................................................................................5 1.2.1 Ventana de Comandos ....................................................................................................................................5 1.2.2 Ventana de gráficos .......................................................................................................................................5 1.2.3 Ventana de edición..........................................................................................................................................5 1.3 Entrada - salida....................................................................................................................................................6 1.3.1 Tipo de dato ....................................................................................................................................................6 1.4 Salida por pantalla...............................................................................................................................................6 1.4.1 Salida de página...............................................................................................................................................6 1.5 Formato de salida................................................................................................................................................6 1.6 Comandos generales que se deben recordar........................................................................................................7 1.6.1 Comandos que brindan información del directorio.........................................................................................7
CAPÍTULO 2: OPERACIONES CON MATRICES Y VECTORES..................................8 2.1 Variables y constantes en MATLAB.................................................................................................................8 2.2 Operadores aritméticos en MATLAB.................................................................................................................8 2.3 Modos de introducir matrices..............................................................................................................................9 2.3.1 Entrada de matrices por teclado......................................................................................................................9 2.4 Operaciones básicas matriciales........................................................................................................................11 2.4.1 Transpuesta....................................................................................................................................................11 2.4.2 Suma y resta..................................................................................................................................................11 2.4.3 Producto ........................................................................................................................................................11 2.4.4 Inversa...........................................................................................................................................................11 2.4.5 “División” ...............................................................................................................................................11 2.4.6 Potencia de matrices......................................................................................................................................12
-2-
INTRODUCCIÓN
AL
MATLAB
2.4.7 Determinante.................................................................................................................................................12 2.5 Funciones trascendentes matriciales.................................................................................................................12 2.6 Tipos de matrices predefinidos.........................................................................................................................12 2.7 Instrucción de asignación..................................................................................................................................13 2.8 Operaciones con arreglos u operaciones punto.................................................................................................14 2.9 Polinomiales ....................................................................................................................................................14
CAPÍTULO 3. FICHEROS EN MATLAB.......................................................................16 3.1 Ficheros de comandos ......................................................................................................................................17 3.2 Establecimiento del camino de búsqueda.........................................................................................................19
CAPÍTULO 4. FUNCIONES ESTÁNDARES (BUILT IN)..............................................20 4.1 Funciones elementales matemáticas.................................................................................................................20 4.2 Funciones que manipulan datos........................................................................................................................20 4.3 Operadores de relación .....................................................................................................................................21 4.4 Operadores lógicos............................................................................................................................................21 4.5 Tratamiento de cadenas de caracteres...............................................................................................................22
CAPÍTULO 5. SUBPROGRAMAS. FICHERO FUNCIÓN.............................................24 CAPÍTULO 6. INSTRUCCIONES ESTRUCTURADAS................................................25 6.1 Instrucción if.....................................................................................................................................................25 6.2 Instrucción switch.............................................................................................................................................25 6.3 Instrucción for...................................................................................................................................................26 6.4 Instrucción while..............................................................................................................................................26 6.5 Estructuras o registros en MATLAB................................................................................................................27
CAPÍTULO 7. GRÁFICOS ...........................................................................................28 7.1 Gráficos de una línea.........................................................................................................................................28 7.2 Gráficos de varias líneas...................................................................................................................................28 7.3 Gráficas en el espacio........................................................................................................................................30
-3-
INTRODUCCIÓN
AL
MATLAB
7.4 Borrado de textos en gráficos............................................................................................................................30
CAPÍTULO 8. ALGUNOS EJEMPLOS ........................................................................31 8.1 Solución de sistemas lineales............................................................................................................................31 8.2 Solución de ecuaciones diferenciales de manera numérica..............................................................................37 8.3 Solución simbólica de ecuaciones diferenciales...............................................................................................38 ................................................................................................................................................................................38 ................................................................................................................................................................................39 8.4 Integración numérica.........................................................................................................................................40 8.5 Ecuaciones no lineales y optimización.............................................................................................................41 8.6 Integración simbólica........................................................................................................................................42 8.7 Transformada de Laplace..................................................................................................................................43
GLOSARIO DE FUNCIONES, COMANDOS Y CONSTANTES QUE SE MENCIONAN ........................................................................................................................................44
-4-
INTRODUCCIÓN
AL
MATLAB
Capítulo I: Introducción 1.1 El programa MATLAB MATLAB es el nombre abreviado de “MATrix LABoratory”. Es un programa para realizar cálculos con vectores y matrices. Como caso particular puede también trabajar con números escalares, tanto reales como complejos. Una de las capacidades más atractivas es la de realizar una amplia variedad de gráficos en dos y tres dimensiones. MATLAB tiene también un lenguaje de programación propio. Es, para muchos, el paquete más usado en ingeniería en la actualidad. Numerosas firmas y grupos en el mundo hacen macros o juegos de funciones y comandos poderosos, por supuesto a partir de algunos de los que se verán aquí, que se conocen en el mundo con el nombre de toolbox, y que resuelven problemas de ramas específicas, tales como el control automático, control no lineal, identificación, gráficos, matemática simbólica, estadísticas, redes neuronales, fuzzy, procesamiento de señales, etc., y todos los años aparecen nuevos y mejores.
1.2 Ventanas en MATLAB 1.2.1 Ventana de Comandos Es la ventana principal y se caracteriza por el prompt “>>“. Al correr la aplicación es la primera ventana que aparece. Todos los comandos, incluso aquéllos utilizados para correr los programas escritos por el usuario, son ejecutados desde esta ventana. Si se oprime el cursor hacia arriba o hacia abajo se pueden editar los comandos tecleados.
1.2.2 Ventana de gráficos La salida de todos los comandos gráficos es enviados a esta ventana. El usuario podrá crear tantas figuras como el sistema de memoria lo permita. Se regresa a la ventana de comandos oprimiendo cualquier tecla.
1.2.3 Ventana de edición Aquí es donde el usuario escribe, edita y salva sus propios programas en ficheros llamados mfiles (ficheros punto m). Se accede por el menú file en la opción Open o new m-file. Los comandos help y lookfor son muy importantes, pues brindan ayuda en línea. Estos comandos muestran en pantalla todas las funciones, comandos y, en general, todos los elementos que forman parte del lenguaje. Se puede conocer lo fundamental de un comando si se -5-
INTRODUCCIÓN
AL
MATLAB
teclea help comando. Se usa lookfor para encontrar los comandos relacionados con una palabra clave, por ejemplo, inverse.
1.3 Entrada - salida MATLAB soporta el cálculo de forma interactiva, tomando la entrada desde la pantalla y enviando la salida hacia la misma. Posibilita la lectura y escritura de ficheros. Las siguientes características se mantienen para todas las formas de entrada - salida.
1.3.1 Tipo de dato Básicamente existe un solo tipo de dato que es la matriz compleja, los números reales son casos particulares. Cuando un número real es entrado como valor de un variable, MATLAB hace cero automáticamente la parte imaginaria. Sensibilidad al tipo de letra. MATLAB es sensible al tipo de letra, diferencia las minúsculas de las mayúsculas. La variable A es diferente a la variable a.
1.4 Salida por pantalla El resultado de la acción que realiza cada comando es visualizado en la pantalla. Sin embargo esto puede evitarse tecleando un punto y coma al final del comando con excepción de los gráficos y la ayuda en línea. Para interrumpir un comando o un programa se usa ^C.
1.4.1 Salida de página Para indicarle a MATLAB que muestre una sola pantalla de una sola vez es necesario teclear el comando more. Se trata de un switch, more on muestra una sola pantalla a la vez, more off desactiva esto y more(n) muestra n líneas por pantalla. De otra forma se envía la salida sin importar si el usuario tiene tiempo o no de leer la información.
1.5 Formato de salida Todos los cálculos dentro de MATLAB son realizados usando doble precisión. La forma de aparición del punto flotante es controlada por el formato en uso. La siguiente tabla muestra el valor de 10π en 7 formatos diferentes: format short format short e format long format long e format hex format rat format bank
31.4159 3.1416e+001 31.41592653589793 3.141592653589793e+001 403f6a7a2955385e 3550/113 31.42
-6-
INTRODUCCIÓN
AL
MATLAB
Los formatos adicionales: format compact (suprime una línea posterior) y format loose (pone una línea posterior) controlan el espacio por encima y por debajo de la presentación del número. format + , visualiza el signo del número. format short es el asumido.
1.6 Comandos generales que se deben recordar demo workspace who whos what clear clear x, y, z clf clc shg exit, quit clock computer date
Corre el programa de demostración Brinda información sobre el espacio de trabajo Lista todas las variables en uso Lista todas las variables en uso y su dimensión Lista todos los ficheros .m, .mat y .mex existentes en el disco Limpia el espacio de trabajo, elimina todas las variables Elimina las variables x, y, z Limpia la pantalla gráfica Limpia la pantalla de texto Muestra la pantalla gráfica Retornan al SO. Muestra un vector fila de 6 elementos: año, mes, día, hora, min., seg. Tipo de computadora con la que se está trabajando Informa la fecha actual
1.6.1 Comandos que brindan información del directorio pwd Muestra el camino del directorio actual de trabajo cd Cambia el directorio actual ls Lista el contenido del directorio actual de trabajo También se pueden usar, del MS-DOS, type, delete, chdir, save, load
-7-
INTRODUCCIÓN
AL
MATLAB
Capítulo 2: Operaciones con matrices y vectores. 2.1 Variables y constantes en MATLAB Los nombres de variables y funciones se forman por una letra seguida de cualquier combinación de letras (del alfabeto inglés) y dígitos. Sin embargo, solo los primeros 31 caracteres de la variable y los primeros 8 de una función serán recordados por MATLAB. El guión bajo (_) se considera como una letra. Los paréntesis se usan como en Pascal o C. Es posible trabajar con números complejos. Se puede escribir directamente v = 3 + 4i ó v = 3 + 4j ó v = 5*exp(i*atan (4/3)) Si la i o la j no van contiguas a números debe escribirse el operador *. Estas tres instrucciones almacenan el mismo número complejo. Existen constantes predefinidas en MATLAB y que existen permanentemente: eps es una constante que se usa para tolerancias en determinadas tareas. Por ejemplo para saber cuán cerca estamos de la singularidad. eps = 2.2204 e-016 También existe pi (π ) con su valor correspondiente. inf que se trata de infinito y que se puede definir como 1/0. nan (Non A Number) resulta de operaciones no definidas matemáticamente tales como inf/inf, 0/0, etc.
2.2 Operadores aritméticos en MATLAB + * \ / ^
Suma Resta Multiplicación División izquierda División derecha Potencia
Es importante que no haya espacios antes o después de los operadores de cualquier tipo, pues puede producir errores.
-8-
INTRODUCCIÓN
AL
MATLAB
2.3 Modos de introducir matrices 1.- Por teclado 2.- Generadas por funciones 3.- Creadas por los m-files 4.- Cargadas desde un fichero de datos externo con el comando load.
2.3.1 Entrada de matrices por teclado. Existen tres formas de entrada de matrices por teclado. A = [ 1 2 3; 4 5 6; 7 8 9] A = [ 1, 2, 3; 4, 5, 6; 7, 8, 9] A=[1 2 3 4 5 6 7 8 9] Almacenan en A la matriz: A=
1 2 3 4 5 6 7 8 9
Se puede referir a un elemento de la matriz A, por ejemplo, A(i, j). Se trata del elemento de la fila i y la columna j. Los elementos de la matriz pueden ser, en general, expresiones: x = [1 sqrt(23) 2 3*[A(1, 1) 3] ] Interesante: x = [1 2 3] x (5) = 9 entonces: x = [ 1 4.7958 2 3 9] Grandes matrices pueden construirse a base de pequeñas: A = [A; 10 11 12] A=
lo que produce
1 2 3 4 5 6 7 8 9 10 11 12
Pequeñas matrices pueden extraerse de grandes: -9-
INTRODUCCIÓN
AL
MATLAB
A = A(1: 3, 1: 2) Produce una matriz con las tres primeras filas y las dos primeras columnas de A. B = A(2, :) extrae la segunda fila de A. Supongamos A = 1 2 3 4 5 6 7 8 0 0 0 0 3 4 2 1 B = A (1:2, 2:4) B = A (1:2, 2)
produce una matriz B = 2 3 4 6 7 8 produce un vector
B=2 6
B = A (:, 3) produce B = 3 7 0 2 B = A (1:3, :) produce B = 1 2 3 4 5 6 7 8 0 0 0 0 B = A (:) produce B = [1 2 3 4 5 6 7 8 0 0 0 0 3 4 2 1] Se pueden generar vectores y = m : n : p genera un vector con los elementos desde m hasta p con un incremento n. n puede ser negativo. Si el incremento no se especifica se asume uno. Permiten hacer cosas como éstas: x = 0: 0.2: 1; y = exp(-x).*sin(x); [x, y] produce ans = 0 0
0.2000 0.1627
0.4000 0.2610
0.6000 0.3099
0.8000 0.3223
1.0000 0.3096
La entrada de escalares es muy sencilla. Ejemplo: g = 9.8 - 10 -
INTRODUCCIÓN
AL
MATLAB
2.4 Operaciones básicas matriciales. 2.4.1 Transpuesta B = A' X = [1 2 3 ] '
2.4.2 Suma y resta Si A y B son conformes a la suma se puede escribir: C=A+B ó C= A - B Se pueden realizar operaciones de suma y resta con escalares. Y=X - 1
si X = 1 entonces Y = 0 2 2 3 3
2.4.3 Producto Sólo se puede resolver si las matrices son conformes al producto. Si A = [ 1 2 3 y x=[-1 4 5 6 0 7 8 0] 2] b = A*x resulta b=5 8 -7 Por supuesto que pi*x = -3.1416 0.0000 6.2832
2.4.4 Inversa B = inv (A) calcula la matriz inversa de A cuadrada no singular.
2.4.5 “División” Existen dos símbolos para “dividir” matrices / y \. Si A es una matriz cuadrada no singular, entonces - 11 -
INTRODUCCIÓN
AL
MATLAB
B/A = B*inv(A) (División derecha) B\A = inv(B)*A (División izquierda) Es decir, x = A\b es la solución de A*x = b Se pueden “dividir” dos vectores: Recordemos que x = [-1 0 2]' y que y = [-2 -1 1] ' s = x\y produce s = 0.800 Esto es debido a que s = 0.800 es el valor del escalar que resuelve la ecuación sobredeterminada x*s = y por mínimos cuadrados. Sin embargo S = y/x produce una respuesta: S = [0 0 0
0 0 0
-1 -0.5 0.5]
2.4.6 Potencia de matrices B^p Significa B a la potencia p. Solo es posible si B es cuadrada, se trata de una multiplicación sucesiva de B, si p es entero.
2.4.7 Determinante B = det(A) calcula la determinante de A cuadrada.
2.5 Funciones trascendentes matriciales Existen tres funciones para matrices: expm, logm y sqrtm. expm(A) = B = e A = I + A +
A 2 A3 + + ..... 2! 3!
logm(A) = B de manera que A = e B sqrtm(A) = B de manera que B*B = A
2.6 Tipos de matrices predefinidos. eye (n) eye(m, n) ones(n) ones(m, n)
Matriz identidad cuadrada de orden n Matriz “identidad” de orden m*n Matriz unitaria cuadrada de orden n Matriz “unitaria” de orden m*n - 12 -
INTRODUCCIÓN zeros(m, n) rand(m, n) diag(V, K)
diag(V) triu(A) tril(A) rot90(A) rot90(A, k) fliplr(A) flipud(A) reshape (A, m, n)
AL
MATLAB
Matriz de ceros de orden m*n Matriz con elementos aleatorios de orden m*n Si V es un vector fila o columna de n componentes, se construye una matriz de orden n + abs(k) colocando el vector en la K-ésima diagonal (K = 0 es la diagonal principal), K > 0 encima de la diagonal principal y K < 0 por debajo). Construye una matriz cuadrada de orden N con el vector V en su diagonal principal. Extrae la parte triangular superior de A anulando el resto Extrae la parte triangular inferior de A anulando el resto Rota una matriz 90º contra las agujas del reloj Rota una matriz k*90º contra las agujas del reloj Rota las columnas de izquierda a derecha Rota las filas de arriba hacia abajo Devuelve una matriz de orden m*n cuyos elementos son tomados por columna de A. Si A no tiene m*n elementos se produce un error.
Un ejemplo sería:
B = [ones(3) zeros(3, 2); zeros(2, 3) 4*eye(2)]
1 1 B = 1 0 0
1 1 1 0 0
1 1 1 0 0
0 0 0 4 0
0 0 0 0 4
2.7 Instrucción de asignación La sintaxis de una instrucción de asignación es Variable = expresión [; ] La evaluación de una expresión produce una matriz que se muestra en la pantalla y se asigna a una variable para su uso futuro. Si se omiten el nombre de la variable y el signo =, se crea automáticamente una variable con el nombre ans (respuesta). >>1900/81 produce ans = 23.4568 Si la expresión es demasiado larga o complicada, se puede continuar en la próxima línea escribiendo 3 ó más puntos luego del operador aritmético. Veamos. S = 1 - 1/2 + 1/3 - 1/4 + 1/5 -..... 1/6 + 1/7;
- 13 -
INTRODUCCIÓN
AL
MATLAB
2.8 Operaciones con arreglos u operaciones punto. Se trata de operaciones término a término. La suma y la resta son claras, pues estas operaciones con matrices son así: término a término. El producto de arreglos o el producto de dos matrices término a término se denota, por A.*B. Las división A./B produce una matriz cuyos elementos son los cocientes de los elementos correspondientes de A y B, es decir, a(i, j) / b(i, j). La división A.\B produce lo mismo pero b(i, j) / a(i, j). La potencia se denota por .^ Veamos un ejemplo: x = [1 2 3]; y =[4 5 6]; z = x .^ y produce z = [1 32 729] El exponente puede ser un escalar z = x .^2 produce z = [1 4 9] Matriz Vacía x = [ ] crea una matriz vacía.
2.9 Polinomiales poly permite encontrar los coeficientes del polinomio característico de una matriz, por ejemplo: A = [1 2 3 4 5 6 7 8 9]; p = poly (A) produce p = [1 -15 -18 0] Para encontrar las raíces de la ecuación característica: r = roots (p) r= 16. 1168 - 1. 1168 - 14 -
INTRODUCCIÓN
AL
MATLAB
0 Existen otras funciones: polyval (p, x) conv(p1, p2) deconv(p1, p2) polyfit(x, y, n)
Permite calcular el polinomio, cuyos coeficientes son los elementos del vector p, para el valor de x. Obtiene el producto de los polinomios p1 y p2. Obtiene el cociente de los polinomios p1 y p2. Ajusta una función polinomial de orden n al conjunto de puntos (x, y). Se obtiene un vector con los coeficientes de la función.
- 15 -
INTRODUCCIÓN
AL
MATLAB
Capítulo 3. Ficheros en MATLAB MATLAB tiene cuatro tipos de ficheros para almacenar la información: m-files. Son ficheros de texto ASCII estándares con extensión .m. Existen dos tipos de estos ficheros: ficheros comandos (script files) y ficheros funciones (function files). mat-files. Son ficheros de datos binarios, con extensión .mat. Estos son creados por MATLAB cuando el usuario graba los datos con el comando save nombre del fichero. Si no se pone el nombre del fichero se asume el nombre matlab.mat. Estos ficheros pueden ser cargados por MATLAB con el comando load. Muchos de los programas escritos en MATLAB son salvados como m-files. Todas las funciones estándares (built-in) son m-files. Hay muchas formas de cargar y almacenar datos en MATLAB. La vía más directa es el uso de los comandos load y save. El comando save es usado para salvar todo el espacio de trabajo o una selección de las variables en un fichero llamado Mat-file. Los ficheros-Mat (Mat-file) son escritos en un formato binario con precisión de 16 bits. También es posible escribir los ficheros-Mat en formatos de ASCII de 16 y 8 dígitos con argumentos opcionales. Estos ficheros siempre tendrán extensión .mat. Los datos almacenados en estos ficheros pueden ser cargados en el espacio de trabajo de MATLAB a través del comando load. A continuación se muestran ejemplos del uso apropiado de estos comandos. Ejemplos: save misdatos.mat x y save nuedatos rx ry rz save datox.dat x -ascii save load misdatos load
almacena las variables x y y en el fichero misdatos.mat almacena las variables rx, ry, rz en el fichero nuedatos. MATLAB añade automáticamente la extensión .mat a los ficheros creados con este comando. salva la variable x en el fichero xdata.dat en un formato ASCII de 8 dígitos. salva todo el espacio de trabajo en el fichero matlab.mat carga en el espacio de trabajo las variables salvadas en el fichero misdatos.dat. carga las variables almacenadas en el fichero por defecto matlab.mat
Los ficheros con datos tipo ASCII pueden ser cargados en el espacio de trabajo de MATLAB, como una matriz rectangular de elementos numéricos, en este caso MATLAB crea una variable cuyo nombre coincidirá con el nombre del fichero diary-files.
- 16 -
INTRODUCCIÓN
AL
MATLAB
Otra forma de salvar o recuperar lo realizado en una sesión de trabajo es usando el comando diary. Esto permite almacenar en un fichero “editable” todos los comandos y funciones utilizados en una sesión de MATLAB. Como salida puede ser utilizado un nombre de fichero con cualquier extensión. Para esto lo primero que hay que hacer es teclear diary seguido del nombre del fichero, por ejemplo, diary seccion1.out. Después de esto todos los comandos y funciones que sean llamados, las señalizaciones de error, en caso de que éstas existan, las respuestas de MATLAB, es decir, todo, será almacenado en este fichero, hasta tanto se termine la sesión o se teclee diary off. Es posible adicionar cualquier otra sesión y para esto se teclea diary on, a partir de aquí todas las operaciones que se realicen serán añadidas al fichero ya existente. Este comando es muy útil, ya que a través de él es posible recordar o repetir los comandos empleados en una sesión anterior. Además, el fichero creado podrá ser editado en cualquier editor de textos e, incluso, puede ser convertido en un fichero .m (m-file), siempre que se eliminen las líneas de error o todos los comandos y funciones que no sean necesarios para el fichero m-file que se desee crear. Mex-files. Son ficheros con extensión .mex y pueden ser llamados por los lenguajes Fortran y C. El uso de estos ficheros requiere de alguna experiencia con el MATLAB y alguna paciencia.
3.1 Ficheros de comandos En este capítulo no trataremos los ficheros función, a los que le dedicaremos un capítulo aparte. Es claro que MATLAB se usa más comúnmente en el modo comando. Sin embargo es posible ejecutar una secuencia de comandos almacenados en un fichero. Juntos, estos dos modos de trabajo, constituyen un ambiente poderoso de trabajo. Un fichero en disco, que contiene instrucciones del MATLAB, se llama fichero .m (punto m), pues la extensión es ésa. Se crea accediendo al editor de MATLAB usando la opción new de file. Los ficheros .m pueden contener, a su vez, referencias a otros ficheros .m. Función input Para leer un dato n = input ('Teclee el número de ..... '). MATLAB imprime en la ventana de comandos la cadena, ‘Teclee el número ...’, espera recibir un dato por teclado y lo almacena en la variable n. Si se desea leer una cadena de caracteres se debe escribir: n = input ('Teclee .. ..... ', 's')
- 17 -
INTRODUCCIÓN
AL
MATLAB
Función disp disp (x) imprime la matriz x en pantalla sin imprimir el nombre. Si x es un texto lo imprime. Si se desea imprimir más de un parámetro, estos deben formar parte de un vector y ser ambos cadenas. Veamos A=2; disp (['El resultado es ', num2str(A)]) num2str(A) convierte A a cadena y se imprime en pantalla El resultado es 2 Ejemplo 1. Ejecutamos la opción new de file y nos situamos en el editor de MATLAB y ahí escribimos: % Esto es una prueba wt = 0:0.1:4*pi; y = sin (wt); plot (wt, y) % traza la gráfica del seno(x) desde cero a 4π radianes. Usando la opción save de file, de la ventana del editor, podemos grabar el fichero con el nombre, por ejemplo, grafsin.m El símbolo % significa que todo lo que se escriba a la derecha de él es un comentario. Aunque MATLAB ignora los comentarios, forman parte del fichero. Si en la ventana de comandos escribimos ahora el “comando” grafsin se obtendrá una sinusoide de 0 a 4π radianes. Ejemplo 2. Escribir un programa que calcule la hipotenusa de un triángulo rectángulo conociendo sus catetos. %Hipotenusa a = input ('Teclee el valor de un cateto '); b = input ('Teclee el valor del otro cateto '); c = sqrt (a^2+b^2); disp (['La hipotenusa mide ', num2str(c)]); Es importante conocer que la ejecución de help nombre de fichero imprime en la ventana de comandos las primeras líneas de comentarios. Hay que tener cuidado con el nombre de las variables que se utilicen en el cuerpo del fichero, ya que pasan a formar parte del espacio de trabajo y, de existir las mismas, tomarían un nuevo valor.
- 18 -
INTRODUCCIÓN
AL
MATLAB
3.2 Establecimiento del camino de búsqueda Matlab ya tiene establecidos los caminos de búsqueda de los ficheros propios para su ejecución o llamada. También ofrece la carpeta work para que el usuario pueda almacenar sus ficheros. Es posible, además, crear otras carpetas y entonces se debe establecer el camino correspondiente. Esto se puede realizar utilizando la opción Set Path del submenú File para abrir la ventana del Path Browser. En esta ventana se puede agregar un camino de búsqueda ejecutando la opción Add to Path del submenú Path. También se puede establecer el camino desde la ventana de comandos usando el comando addpath. Veamos un ejemplo. Si el usuario creó una carpeta con el nombre carpeta dentro de la carpeta MATLAB y ahí almacena sus ficheros, debe establecer el camino de la siguiente forma: addpath c:\matlabr11\carpeta Este camino establecido valdrá durante esa sesión de trabajo, pues al terminarla no se mantiene. Si se quisiera mantener para sesiones futuras se debe ejecutar la opción Save Path del submenú File del Path Browser o, desde la ventana de comandos, ejecutar save path. echo Es un switch. Normalmente cuando se ejecuta un fichero .mo los comandos no se imprimen en pantalla, aunque a veces puede ser conveniente que se muestren para corregir errores. Para ficheros comandos echo on muestra los comandos hasta que se encuentre un echo off. echo nombre de fichero cambia el estado de echo en ese fichero. echo on all muestra todos los comandos del fichero. echo off all oculta los comandos. pause Produce una pausa hasta que se oprime retorno.
- 19 -
INTRODUCCIÓN
AL
MATLAB
Capítulo 4. Funciones estándares (built in) 4.1 Funciones elementales matemáticas Se llaman también de arreglos, pues si operan con matrices lo hacen término a término. Ejemplo: C = sin(pi*B) Si B es una matriz produce una matriz C en que cada elemento es el seno de π por el correspondiente de B. sqrt abs conj fix imag real round sign rem sin cos tan asin acos atan atan2 exp log log10
Raíz cuadrada Valor absoluto, si es complejo devuelve la magnitud, si es un texto devuelve los valores en ASCII. Compleja conjugada Parte entera Parte imaginaria Parte real Redondea al entero inferior Signo de función Resto de la división Ej. rem(5,2) = 1 Seno Coseno Tangente Arcoseno Arcocoseno Arcotangente Arcotangente en los cuatro cuadrantes Exponencial Logaritmo natural Logaritmo vulgar
Estas funciones operan sobre un escalar o a cada elemento de una matriz.
4.2 Funciones que manipulan datos size(A) devuelve un vector de dos elementos que contiene el número de filas y el número de columnas de la matriz A. length (v) devuelve la longitud de un vector v.
- 20 -
INTRODUCCIÓN
AL
MATLAB
Las funciones siguientes devuelven un escalar si el argumento es un vector. Si es una matriz, devuelven un vector fila con las operaciones de las columnas. max min sum cumsum prod cumprod mean std median sort
Valor mayor Valor menor Suma Suma acumulativa Producto de los elementos Producto acumulativo Valor medio Desviación estándar Devuelve el valor central Ordena de forma ascendente.
4.3 Operadores de relación < <= == ~= >= >
Menor que Menor o igual que igual a desigual a mayor o igual a mayor que
Esta comparación se hace elemento a elemento y resulta en una matriz donde sus elementos son 0 cuando es falso y 1 cuando es verdadero. Una función interesante y muy útil es la función find. Su sintaxis es find (condición) y encuentra los índices de la matriz donde se cumple la condición. Supongamos: A = [2 4 5 7 4] B = find (A/2 = = fix (A/2) ) Dos funciones útiles para generar vectores son: linspace(a, b, n) Genera un vector linealmente espaciado de a hasta b con n puntos. logspace(a, b, n) Genera un vector con espaciado logarítmico desde 10a hasta 10b de longitud n.
4.4 Operadores lógicos & |
and or - 21 -
INTRODUCCIÓN ~ xor
AL
MATLAB
not or exclusivo
Estas operaciones, igual que las de comparación, producen vectores y matrices con elementos del tipo 0 - 1, del mismo tamaño que los operandos, con uno si la condición es verdadera y cero si es falsa. Ejemplo: x = [0 5 3 7] y = [ 0 2 8 7] m = (x > y) & (x > 4) m = [0 1 0 0] n=x|y n = [0 1 1 1] Está claro que, como el resultado de estas operaciones es un vector con elementos del tipo 0-1, éste se puede usar para extraer los elementos deseados. Por ejemplo: x((x >y) & (x > 4)) ans = 5
4.5 Tratamiento de cadenas de caracteres. Todas las cadenas de caracteres son entradas al MATLAB entre apóstrofos, o sea, 'cadena'. MATLAB manipula cualquier cadena como un vector cuyos elementos van a ser los caracteres que forman la cadena en cuestión. Por ejemplo, si tecleamos: mensaje = 'Buenas noches' entonces MATLAB crea un vector fila de 13 elementos (los espacios existentes en la cadena se cuentan como caracteres). De ahí, que para crear un vector columna con elementos de tipo cadena, es imprescindible que los mismos tengan el mismo número de caracteres. Por ejemplo, el comando nombres = ['Juan'; 'Raul'; 'Ania'; 'Magy'], Crea un vector columna con un elemento por fila, siendo para MATLAB la variable nombres, una matriz de 4x4. En caso de que sea necesario crear vectores columna cuyos elementos sean cadenas de longitudes diferentes, se le adicionará a cada elemento (cadena) que así lo necesite, tantos espacios en blanco como se requiera para lograr que la longitud de todos los elementos sea la misma.
- 22 -
INTRODUCCIÓN
AL
MATLAB
Una forma más fácil de lograr esto es utilizando el comando str2mat, el cual convierte una cadena a matriz. str2mat(s1, s2, s3, ...,) coloca cada argumento s1, s2,... en una fila y crea una matriz cadena, adicionándole a cada fila el número de espacios en blanco que necesite. Ejemplo: equipos = str2mat ('monitor', 'impresora', ‘plotter') eval Calcula el valor de una cadena numérica. t = '3+2'; eval (t) produce ans = 5
- 23 -
INTRODUCCIÓN
AL
MATLAB
Capítulo 5. Subprogramas. Fichero función Fichero función. Es un fichero que contiene una función y, por tanto, se considera un subprograma. Se escribe en el mismo ambiente del fichero comando. Las funciones en MATLAB son como los procedimientos en Pascal y las funciones en C. El encabezamiento tendría la siguiente sintaxis: function [variables de salida] = Nombre de función(variables de entrada) Veamos algunos detalles sobre las funciones. 1. En la primera línea se declaran el nombre de la función y los argumentos de entrada y de salida. Sin esta línea se trataría de un fichero comando. 2. Las primeras líneas del fichero .m (después de la declaración de función) se imprimirán en pantalla si se pide ayuda acerca de él, es decir, las que están precedidas por %. 3. Las variables que se usen, incluyendo las del cuerpo de la función, son locales. 4. La transferencia de los parámetros de entrada es por valor (por tanto pueden ser constantes) y los de salida por nombre. 5. Pueden existir varios parámetros de entrada y varios de salida. 6. El nombre del fichero tiene que coincidir con el nombre de la función. 7. Cuando se tenga una sola variable de salida, no se requiere que ésta se encierre entre corchetes en la línea de definición de la función, pero cuando se tengan varias variables de salida esto si es necesario. Pueden no existir variables de salida. Ejemplo 1. Escribir una función que calcule la hipotenusa de un triángulo rectángulo. function c = pit (a, b) %Se calcula según el teorema de Pitágoras c = sqrt (a^2+b^2); Con esta función debo crear un fichero con el nombre pit.m. Si ahora escribo pit(3, 4) obtengo ans = 5. Evite la coincidencia entre las funciones que usted escribe y las funciones estándares del MATLAB. Una forma práctica de averiguar esto es utilizar el comando exist ('nombre') el cual devuelve 0 si no encuentra nada con ese nombre.
- 24 -
INTRODUCCIÓN
AL
MATLAB
Capítulo 6. Instrucciones estructuradas 6.1 Instrucción if if
< secuencia de instrucciones 1> [else < secuencia de instrucciones 2>] end Si la condición es cierta se ejecuta la secuencia de instrucciones 1, si es falsa se ejecuta (de existir) la secuencia de instrucciones 2. Los corchetes indican que es opcional la escritura. Ejemplo. Escribir una función que calcule el promedio de cada columna de una matriz. function y = mean (x) % Se trata del promedio. Para vectores devuelve el promedio, que es un escalar. % Para matrices devuelve un vector fila que contiene los promedios de cada columna. [m, n] = size (x); if m = = 1 m=n; end y = sum(x)/m;
6.2 Instrucción switch switch expresión del switch case expresión case { expresión1, expresión2,...} secuencia de instrucciones 2 ........ [otherwise secuencia de instrucciones] end La expresión del switch puede ser de cualquier tipo, incluso cadena. Note que si hay más de una expresión deben escribirse entre llaves. Ejemplo. Elaborar un programa que trace una sinusoide con la opción 1 y, con las opciones 2 y 3, trace una cosinusoide. disp('1. Sinusoide'); disp('2. Cosinusoide'); disp('3. Cosinusoide'); n = input ('Teclee la opción '); - 25 -
INTRODUCCIÓN
AL
MATLAB
t = 0:0.01:9; switch n case 1 plot(t, sin(t)); case {2, 3} plot(t, cos(t)); otherwise disp ('Opcion incorrecta'); end
6.3 Instrucción for for = :[:] end Si el incremento no se especifica MATLAB lo supone 1. Ejemplo. Crear una matriz de orden m*n cuyos elementos estén determinados por a(i, j) = 1/ (i+j-1) m = input('Teclee el número de filas '); n = input('Teclee el número de columnas '); for i = 1: m for j = 1:n a(i, j) = 1/(i+j-1); end end
6.4 Instrucción while while < secuencia de instrucciones> end Ejemplo: Si existe un vector a de n elementos, averiguar si alguno de ellos es cero. n = input('Cantidad de elementos de a '); i=1; while (a(i) ~ = 0) & (i < n) i = i+1; end if a(i) = = 0 disp('Hay un cero al menos'); else disp('No hay ceros'); end
- 26 -
INTRODUCCIÓN
AL
MATLAB
6.5 Estructuras o registros en MATLAB En MATLAB existen también las estructuras (struct) de C o los registros del Pascal. Un registro es una estructura con varios componentes o campos que pueden ser de diferentes tipos. En MATLAB la estructura alumno se crea estableciendo un objeto de dicha estructura. A diferencia de otros lenguajes de programación, no hace falta definir previamente el modelo o patrón de la estructura. Una posible forma de hacerlo es crear uno a uno los distintos campos, como en el ejemplo siguiente: Ejemplo 1 alumno.nombre = 'Pedro' alumno = nombre: 'Pedro' alumno.edad = 21 alumno = nombre: 'Pedro' edad: 21 La forma de referirse a algún campo es con el punto como se ha mostrado. Ejemplo 2. Escribir un programa que lea un arreglo de registros de los alumnos del aula, cada uno con tres campos: nombre, nota y edad. Encontrar el nombre del estudiante más viejo. %Encuentra el nombre del alumno mayor de un arreglo de registros n = input('Cantidad de alumnos '); for i = 1: n alumno(i).nombre = input('Teclee el nombre '); alumno(i).nota = input('Teclee la nota '); alumno(i).edad = input('Teclee la edad '); end; m = alumno(1).edad; for i = 2:n if m
- 27 -
INTRODUCCIÓN
AL
MATLAB
Capítulo 7. Gráficos 7.1 Gráficos de una línea Existen varios tipos de gráficos dependiendo del “papel” usado. plot(x, y) gráfica lineal x vs. y. loglog(x, y) gráfica loglog x vs. y semilogx(x, y) gráfica eje x logarítmico semilogy(x, y) gráfica eje y logarítmico polar (theta, rho) gráfica polar Se pueden “adornar” los gráficos. title ('Texto') xlabel ('Texto') ylabel ('Texto') grid text (x, y, 'Texto') gtext ('Texto') leyend('Trazo1', …)
Para ponerle un título a una gráfica. Nombre del eje de las abscisas. Nombre del eje de las ordenadas. Traza una malla. Escribe ‘Texto’ en las coordenadas (x, y) del gráfico. Escribe ‘Texto’ en el gráfico donde se dé un click con el mouse. Escribe la leyenda, cual es la correspondencia de cada uno de los trazos.
grid funciona como un switch. Si está puesta la malla la quita y viceversa. grid on la pone y grid off la quita. Existen muchos comandos en MATLAB que funcionan de esta forma. Si y es un vector, entonces plot (y) traza la gráfica de y contra el índice de y. Si x y z son vectores de la misma longitud, entonces plot (x, z) traza la gráfica de z contra x. Por ejemplo wt = 0 : 0.1 : 4 * pi; y = sin(wt); plot(wt, y) %Produce la gráfica del sen(wt) de 0 a 4*pi radianes. hold Mantiene o no la ventana gráfica para trazar otro gráfico. Es un switch, de manera que existen hold on y hold off. figure Permite abrir otra ventana gráfica y le pone el número consecutivo. Se puede abrir otra ventana gráfica y asignarle el número n con figure(n).
7.2 Gráficos de varias líneas Si y es una matriz y x es un vector, plot(x, y) produce un juego de gráficas de las filas o columnas de y contra x. El hecho de que escoja filas o columnas depende de cuáles tienen el mismo número de elementos que el vector x. Si y es cuadrada se toman las columnas. - 28 -
INTRODUCCIÓN
AL
MATLAB
Si y es un vector y x es una matriz se trazan las gráficas de y contra cada columna o fila de x. Si son matrices del mismo orden, se trazan las gráficas columnas contra columnas. Si tenemos plot(y) siendo y una matriz, se obtienen las gráficas de cada columna contra su índice. Otra forma de hacer gráficos de varias líneas es: plot (x1, y1, x2, y2, ..... , xn, yn) Ésta tiene la ventaja de que se pueden obtener las gráficas de parejas de vectores de diferentes tamaños en la misma ventana gráfica. Los tipos de líneas se pueden definir: plot(x, y, 'x') traza la gráfica con el símbolo x. plot(x1, y1, ': ' , x2, y2, '+') dibuja la primera con : y la segunda con +. Otros símbolos usados pueden ser: -, --, :, ~, . , +, *, o, x.. Puede agregársele otro carácter que defina el color. Por ejemplo plot (x, y, 'y+'). Dibuja y contra x con el símbolo + y con el color yellow. Los colores que se pueden usar son: y - yellow r - red
m - magenta b - blue
c - cyan w - white
g k
- green - black
Si y es complejo plot(y) es equivalente a plot(real (y), imag(y)). De otra manera se ignora la parte imaginaria. subplot Permite trazar varias gráficas en la misma ventana de gráficos. subplot(m, n, k) define una matriz de ventanas de m filas y n columnas, es decir, dibuja m*n gráficas en la misma ventana. k define en cuál de ellas se dibuja contando por filas. Concretamente, si se quiere dibujar en la segunda fila, tercera columna de una matriz 2*4, se trata entonces de k = 7. Más adelante se planteará un ejemplo. Escalado manual de los ejes El comando axis (v) permite establecer una escala, donde v es un vector con los 4 parámetros xmin, xmax, ymin, ymax. Ejemplo: axis([0 10 0 25]);
- 29 -
INTRODUCCIÓN
AL
MATLAB
7.3 Gráficas en el espacio plot3(x, y, z) si x, y, z son vectores, traza una línea en el espacio tridimensional cuyos puntos tienen como coordenadas los elementos de x, y, z. Un ejemplo sería: t = 0:pi/50:10*pi; plot3(sin(t), cos(t), t); Con plot3 se pueden realizar muchas de las acciones que se realizan con plot, por ejemplo, el trazado de varias líneas. mesh permite el trazado de superficies tridimensionales. meshgrid establece el dominio de definición en el plano xy. Un ejemplo sería: [x, y] = meshgrid (-2: .2: 2, -2: .2: 2); z = x .* exp(-x. ^ 2 - y. ^2); mesh (z);
7.4 Borrado de textos en gráficos Es algo complicado. Es necesario obtener el valor de retorno del comando con el cual se ha creado y luego ejecutar el comando delete con ese valor. Veamos un ejemplo. Supongamos que hemos realizado una gráfica con los comandos siguientes: t = 0:0.1:10; plot (t, sin(t)); xlabel ('Tiempo'); ylabel ('Respuesta'); Si ahora deseáramos borrar 'Tiempo', como indicador del eje x, debemos escribir: v = xlabel ('Tiempo'); delete(v); Por esta razón se recomienda que, cuando se escriba un texto en una gráfica, se realice asignándole el valor de retorno a una variable, teniendo en cuenta la posibilidad del borrado posterior, pues sería muy difícil hacerlo cuando la escritura se realizó con comandos, por ejemplo, como text o gtext, es decir, en lugar de escribir text(2, 3, 'velocidad') se recomienda escribir v = text(2,3,'velocidad'). se pueden realizar muchas acciones sobre los gráficos directamente desde la ventana gráfica, por ejemplo, facilidades de edición, salvar, imprimir, etc. - 30 -
INTRODUCCIÓN
AL
MATLAB
Capítulo 8. Algunos ejemplos 8.1 Solución de sistemas lineales. Para crear modelos lineales, invariantes (LTI) y continuos existen en MATLAB, aunque se pueden crear a base de sus componentes, varias formas compactas, de las que veremos algunas. tf. ss zpk
Función de Transferencia. (Cociente de polinomios en función del operador de Laplace). Representación en Espacio de Estado. Polos, Ceros y Ganancia. (Cociente de polinomios en factores polos, ceros y ganancia).
Veremos algunos ejemplos de aplicación general, pero de particular importancia en el control automático. step es un comando que permite encontrar un vector con la respuesta a escalón. y = step(num, den, t) num y den son los vectores de los coeficientes del numerador y el denominador respectivamente de la función de transferencia en orden descendente de s y t es un vector con los valores del tiempo. step(num, den) traza la gráfica de la respuesta directamente y MATLAB asume el tiempo. Ejemplo 1. Se desea conocer la respuesta a escalón unitario de un sistema con función de transferencia G(s) = 10 / (s2 + 2s + 2) num = [10]; den = [1 2 2]; t = 0: 0.1: 10; y = step (num, den, t); plot(t, y) title('Respuesta a escalón') xlabel('t') ylabel('y') grid Está claro que las primeras 5 líneas se pudieron escribir según: t = 0:0.1:10; plot (t, step([10], [1 2 2], t)) Se pudo encontrar la respuesta a impulso unitario con la función impulse. lsim Permite calcular respuestas a otro tipo de señales de entrada.
- 31 -
INTRODUCCIÓN
AL
MATLAB
Ejemplo 2. Supongamos la función de transferencia siguiente: G(s) = (s + 1) / (10s + 1) g = tf([1 1],[10 1]); t = 0: 0.1: 20; x = sin (t); y = lsim (g, x, t); plot (t, y) Algunas formas de conversión de modelos de sistemas. tf2zp Convierte la función de transferencia normal a su expresión en ceros, polos y ganancia. [z, p, k] = tf2zp (num, den) Obtiene los ceros, los polos y la ganancia de la función de transferencia definida por num y den. De forma inversa zp2tf obtiene los coeficientes del numerador y el denominador de la función de transferencia en polos y ceros. [num, den] = zp2tf (z, p, k) donde z y p son vectores y k es un escalar. ss2tf Convierte el modelo en el espacio de estado a función de transferencia. [num, den] = ss2tf (A, B, C, D, iu) Se obtienen el numerador y el denominador de la función de transferencia conociendo las matrices A, B, C y D del modelo de estado para la entrada i-ésima. Además existen ss2zp, zp2ss y tf2ss. Veamos algunos ejemplos Ejemplo 3. Se desea obtener la respuesta del siguiente sistema para una entrada pulso dada por: u(t) t <0 0 → G (s) = a una entrada u ( t ) = 2 → 0 ≤ t < 2 s 2 + s +1 0.5 → t ≥ 2
2
2 0.5 2
t
%Respuesta a un pulso en t=0 g = tf([2],[1,1,1]); t = 0:0.01:15;
- 32 -
INTRODUCCIÓN
AL
MATLAB
u = 2*ones (size (t)); for i = find (t= =2): length (t) u(i)=0.5; end y = lsim (g, u, t); plot (t, u, t, y); grid axis ([0 15 0 4]); Como en MATLAB existe la función stepfun(t, t0), que genera un escalón unitario en t0, se podría resolver el problema de la forma siguiente: t = 0:0.01:15; y1 = 2*stepfun(t, 0); y2 = 1.5*stepfun(t, 2); y = y1-y2; plot(t, y); Ejemplo 4. Generalizar el programa anterior obteniendo la respuesta de cualquier sistema definido por su función de transferencia a una función del tipo del ejemplo anterior, como se muestra en la figura siguiente: u(t) a b c
d
t
function y = respulso (num, den, a, b, c, d) %num y den son el numerador y el denominador de la función de transferencia %respectivamente. %a es el peso inicial del pulso. %b es el peso final del pulso. %c es la duración del pulso. %d es el tiempo de simulación. t = 0:d/100:d; u = a*ones (size (t)); for i = min (find (t>=2)):length (t) u(i)=b; end y = lsim (num, den, u, t); plot (t, u, t, y); grid
- 33 -
INTRODUCCIÓN
AL
MATLAB
Si se hubiera escrito lsim (num, den, u, t) en la línea 6, se hubiera trazado la gráfica directamente. Ahora se puede usar la función respulso dando los 6 parámetros: num, den, a, b, c y d. Por ejemplo y = respulso ([1 1], [1 2 1], 5, 1, 2, 20); Ejemplo 5. Escribir un fichero comando para analizar la respuesta de un sistema lineal de 2do. orden, con función de transferencia G(s)=1/(s2+as+1), a un escalón unitario, variando el parámetro a. %Análisis de la respuesta de un sistema de 2do. orden, con función de transferencia %G(s)=1/ (s2+as+1), a un escalón unitario, variando el parámetro a. num = [1]; t = 0:0.1:30; b = 0; for a = 0.5:0.5:6 b = b+1; den = [1 a 1]; subplot (3, 4, b); y= step(num, den, t); plot (t, y); axis ([0 30 0 2]); grid; text (5,1.5,'a='); text (11,1.5, num2str(a)); end
Ejemplo 6. Encontrar la respuesta a escalón del circuito RLC que se muestra, suponiendo el voltaje e como la entrada y el voltaje en el condensador como la salida. R
e
L i C
Circuito RLC La función de transferencia del circuito sería:
- 34 -
INTRODUCCIÓN
AL
MATLAB
Vc (s) 1 = 2 E (s) LC s + RC s +1
Si suponemos R = 1 Ω , C= 1f, L = 1h podemos escribir t = 0:0.1:10; sys = tf([1],[1 1 1]); plot (t, step (sys, t)); grid Ejemplo 7. Resolver el problema anterior usando el modelo en el espacio de estado. Si escribimos el modelo matemático según: di R 1 1 = − i ( t ) − v c ( t ) + e( t ) dt L L L dv c i( t ) = dt C
y suponemos todos los parámetros unitarios se obtendría el modelo de estado según: −1 −1 A = 1 0
1 B = 0
C =[0 1] D = [0]
t = 0:0.1:10; A=[-1 –1;1 0]; B=[1;0]; C=[0 1]; D=[0]; sys = ss (A, B, C, D); y = step (sys, t); plot (t, y); grid Veremos algunos ejemplos más donde introduciremos algunos comandos.
Ejemplo 8. Dado el sistema cuya función de transferencia se describe más abajo, determine los polos y los ceros y sitúelos en el plano complejo s. G (s) =
3s 2 + 5s + 7 s 4 + 3s 3 + 4s 2 + 2.5s + 0.8
numG = [3 5 7]; denG = [1 3 4 2.5 0.8]; - 35 -
INTRODUCCIÓN
AL
MATLAB
[z, p, k] = tf2zp (numG, denG); % z, p y k son los ceros, polos y ganancia respectivamente. pzmap (numG, denG); % Traza los ceros y los polos en el plano s. % pzmap (p, z) Tiene el mismo resultado que la línea anterior. z y p son los vectores de los ceros y los polos respectivamente. Ejemplo 9. Dado el sistema cuya ft se muestra, encuentre la expansión en fracciones parciales y su respuesta a impulso. G (s ) =
3s + 2 3
2s + 4s 2 + 5s +1
%Expansión en fracciones parciales y respuesta a impulso. num = [3 2]; den = [2 4 5 1]; [z, p, k] = tf2zp (num, den); [res, pol, otro] = residue (num, den); % Se obtienen los residuos, los polos y posible %término no fraccionario. impulse (sys); % Se obtiene directamente la gráfica de la respuesta a impulso. MATLAB permite establecer, por comandos, la realimentación negativa. Ejemplo 10. Encontrar la respuesta a escalón del sistema que se muestra. +
U(s)
Y(s)
G(s) H(s)
donde G (s) =
4s +1 2
5s + 3s + 2
y
H (s) =
s +6 2
s + 4s +11
numG = [4 1]; denG = [5 3 2]; numH = [1 6]; denH = [1 4 11]; [numT, denT] = feedback (numG, denG, numH, denH); step (numT, denT); ltiview Es un comando que permite acceder a un interfaz gráfico y visualizar diferentes respuestas de sistemas LTI (Linear Time Invariant) y sus parámetros más importantes. Debemos definir primeramente el sistema, por ejemplo, sys = tf (num, den) y luego ejecutar ltiview.
- 36 -
INTRODUCCIÓN
AL
MATLAB
Las respuestas pueden ser a escalón (step), a impulso (impulse), diagrama de Bode (bode), diagrama de Niquist (nyquist), diagrama de Nichols (nichols), diagrama Sigma (de valores singulares), diagrama de polos y ceros ( Pole-Zero), respuesta a otra entrada (lsim) y respuesta de un sistema en el espacio de estado sólo con condición inicial (initial).
8.2 Solución de ecuaciones diferenciales de manera numérica. Se pueden resolver, de manera numérica, ecuaciones diferenciales de primer orden del tipo y’= f(t, y) con el juego de funciones ode. El método de integración de menor orden es el ode23 y MATLAB tiene muchos otros. Veamos un ejemplo. Ejemplo 1. Se quiere resolver la ecuación diferencial y’ = y + 4, con y(0) = 1, en el intervalo [0 2]. Creamos la función f.m function yprima = f (t, y) yprima = y+4; Ahora podemos ejecutar los comandos [t, y]=ode23 ('f ', [0 2], 1); % Resuelve la ecuación en el intervalo [0 2] con y(0) = 1. Se %obtienen dos vectores: y, que es el vector solución y t, que es el vector del tiempo. % La solución gráfica podría verse con el próximo comando. plot (t, y) Se hubiera podido graficar directamente si hubiéramos ejecutado: ode23 ('f ', [0 2], 1); Ejemplo 2. Encontrar la respuesta al circuito RLC con entrada e y salida vc. Las ecuaciones serían: i e Ri v c v 'c = ; i ' = − − C L L L Si suponemos todos los parámetros unitarios, las ecuaciones se simplifican: v 'c = i ; i ' =1 −i − v c Para resolver este sistema de ecuaciones debemos plantearlo en la forma y'= f(t, y). Haciendo un cambio de variables según: y' (1) = vc y(2) = i
- 37 -
INTRODUCCIÓN
AL
MATLAB
Las ecuaciones quedarían como y(1) = y(2) y' (2) = 1- y(2) - y(1) Ahora creamos la función yprima = f2do (t, y). function yprima = f2do (t, y) yprima (1) = y(2); yprima (2) = 1- y(1) - y(2); yprima = yprima'; % Esto es producto de que yprima debe ser un vector columna. Ahora podemos escribir [t, y] = ode45 ('f2do', [0 10], [0 1]); plot (t, y) grid; gtext ('Vc'); gtext ( 'i'); Se obtendría la gráfica de la figura siguiente:
8.3 Solución simbólica de ecuaciones diferenciales. Se pueden resolver, de manera simbólica, ecuaciones diferenciales ordinarias, para lo cual se usa la función dsolve. Ejemplo 1. Se desea resolver la ecuación diferencial y’= y+4, sabiendo que y(0) = 1. Escribimos el comando: q = dsolve ('Dy = y+4', 'y(0) = 1’) % y(0) = 1 es la condición inicial. q= -4+5*exp(t)
- 38 -
INTRODUCCIÓN
AL
MATLAB
De no escribirse la condición inicial la respuesta estaría en función de una constante. Ejemplo 2. Resolver la ecuación diferencial y’’ + y’ = 0 con y(0) = 1, y’(0) = -1. q = dsolve ('D2y+Dy = 0', 'y(0) = 1', 'Dy(0) = -1' ) q= 1/exp(t) Ejemplo 3. Encontrar la respuesta al circuito RLC con entrada e y salida vc y con parámetros unitarios, es decir, v 'c = i ; i ' = 1 − i − v c . q = dsolve ('DVc = I', 'DI = 1-I-Vc', 'Vc(0) = 0', 'I(0) = 1'); MATLAB almacena los resultados en un registro con dos campos: Vc e I. Para ver el resultado debemos escribir q.Vc. Con q.I obtendríamos la respuesta I(t). q.Vc ans = 1+1/3*exp(-1/2*t)*(3^(1/2)*sin(1/2*t*3^(1/2))-3*cos(1/2*t*3^(1/2))) Ejemplo 4. Resuelva el mismo ejemplo, pero suponga el modelo según: LC
d 2 v c (t) dt
2
+ RC
dv c ( t ) + v c ( t ) = e( t ) , es decir, dt
d 2 v c (t) dt
2
+
dv c ( t ) + v c (t) = 1 dt
q = dsolve ('D2Vc+DVc+Vc = 1', 'Vc(0) = 0', 'DVc(0) = 1') q= 1-exp(-1/2*t)*cos(1/2*t*3^(1/2))+1/3*3^(1/2)*exp(-1/2*t)*sin(1/2*t*3^(1/2)) Para resolver ecuaciones algebraicas se usa la función solve.
- 39 -
INTRODUCCIÓN
AL
MATLAB
8.4 Integración numérica Con el objetivo de introducirnos en algunas otras posibilidades del MATLAB mostraremos un ejemplo interesante. Supongamos que creamos la función siguiente: function y = prueba(x) y = 1./((x-.3).^2+.01)+1./((x-.9).^2+.04)-6; Y ahora ejecutamos x = -1:0.1:2; plot(x, prueba(x)) Se obtendría la gráfica siguiente:
Lo primero que se va a hacer es calcular la integral definida de esta función entre dos valores de la abscisa x. En inglés, al cálculo numérico de integrales definidas se le llama quadrature. Sabiendo eso, no resulta extraño el comando con el cual se calcula el área comprendida bajo la función entre los puntos 0 y 1 (obsérvese que el nombre de la función a integrar se pasa entre apóstrofos, como cadena de caracteres): area = quad ('prueba', 0, 1) area = 29.8583 La función quad8() utiliza un método de orden superior (Newton-Cotes), mientras que la función dblquad() realiza integrales definidas dobles. Ver el help o los manuales on-line para más información.
- 40 -
INTRODUCCIÓN
AL
MATLAB
8.5 Ecuaciones no lineales y optimización Después de todo, calcular integrales definidas no es tan difícil. Más difícil es, desde luego, calcular las raíces de ecuaciones no lineales y el mínimo o los mínimos de una función. MATLAB dispone de las tres funciones siguientes: fzero calcula un cero o una raíz de una función de una variable fmin calcula el mínimo de una función de una variable fmins calcula el mínimo de una función de varias variables Se empezará con el cálculo de raíces. Del gráfico de la función prueba entre -1 y 2 resulta evidente que dicha función tiene dos raíces en ese intervalo. La función fzero calcula una. ¿Cuál es la que calcula? Pues depende de un parámetro o argumento que indica el punto de partida para buscar la raíz. Véanse los siguientes comandos y resultados: fzero('prueba', -.5) ans = -0.1316 » fzero('prueba', 2) ans = 1.2995 En el primer caso se ha dicho al programa que empiece a buscar en el punto -0.5 y la solución encontrada ha sido -0.1316. En el segundo caso ha empezado a buscar en el punto de abscisa 2 y ha encontrado otra raíz en el punto 1.2995. Se ven claras las limitaciones de esta función. La función fzero() tiene también otras formas interesantes: fzero('prueba', [x1, x2]) calcula una raíz en el intervalo x1-x2. Es necesario que la función tenga distinto signo en los extremos del intervalo. fzero('prueba', x, tol) calcula la raíz más próxima a x con una tolerancia tol para el error. Ahora se va a calcular el mínimo de la función prueba. Defínase una función llamada prueba2 que sea prueba cambiada de signo, y trátese de reproducir en el PC los siguientes comandos y resultados (para calcular máximos con fmin bastaría con cambiar el signo de la función): plot(x, prueba2(x)) fmin('prueba2', -1, 2) ans = 0.3004 fmin('prueba2', 0.5,1) ans = 0.8927
- 41 -
INTRODUCCIÓN
AL
MATLAB
8.6 Integración simbólica También es posible obtener integrales de manera simbólica. Ejemplo 1. syms x %Declara x como una variable simbólica int(1/(x^2+1)) ans = atan(x) Está claro que se pueden integrar también matrices. Veamos el siguiente ejemplo. Ejemplo2. syms t a A = [1 t; sin(t) a]; int (A) ans = [ t, 1/2*t^2] [ -cos(t), a*t] Se pueden realizar también integrales iteradas. Ejemplo 3. syms t q = int (int (t)) q= 1/6*t^3 Se pueden realizar integraciones entre límites simbólicos o constantes. Ejemplo 4. syms x a b int (x, a, b) ans = 1/2*b^2-1/2*a^2 Ejemplo 5. int (x, 1, a) ans = 1/2*a^2-1/2
- 42 -
INTRODUCCIÓN
AL
MATLAB
8.7 Transformada de Laplace. Se puede obtener la transformada de Laplace de funciones del tiempo. De forma asumida la respuesta se brinda en la variable s. Las variables deben declararse con el comando syms. Ejemplo 1. Encontrar la transformada de Laplace de f(t) = sen (at). syms t a F = laplace (sin(a*t)) F= a/(s^2+a^2) Se pueden usar también las llamadas funciones sym, tales como Heaviside (escalón) y Dirac (impulso). Ejemplo 2. Calcular la transformada de Laplace de f(t) = t2 u(t-1). syms t F = laplace (t^2*sym ('Heaviside (t-1)' )) F= exp(-s)/s+2*exp(-s)/s^2+2*exp(-s)/s^3 Se pudiera ejecutar la función simplify y obtener una respuesta más compacta. simplify (F) ans = exp(-s)*(s^2+2*s+2)/s^3 Ejemplo 3. Calcular la transformada de Laplace de f(t) = u(t) – u(t-1). F = laplace (sym ('Heaviside(t) - Heaviside(t-1)' ) ) % t debió declararse como syms F= 1/s-exp(-s)/s De igual forma existe la transformada inversa para la cual se usa la función ilaplace. Algo similar existe con Fourier para la que existen las funciones fourier e ifourier. Lo mismo sucede con la transformada z, pues existen las funciones ztrans e iztrans.
- 43 -
INTRODUCCIÓN
AL
MATLAB
Glosario de funciones, comandos y constantes que se mencionan A abs.............................20 acos...........................20 addpath......................19 ans.............................13 asin............................20 atan............................20 atan2..........................20
C cd 7 clc 7 clear.............................7 clf 7 clock............................7 computer......................7 conj............................20 conv...........................15 cos.............................20 cumprod....................21 cumsum.....................21
D date..............................7 dblquad......................40 deconv.......................15 delete.........................30 demo............................7 det 12
diag............................13 diary..........................16 Dirac..........................43 disp............................18 dsolve........................38
E echo...........................19 eps...............................8 eval............................23 exist...........................24 exit..............................7 exp.............................20 expm..........................12 eye.............................12
F feedback....................36 figure.........................28 find............................21 fix 20 fliplr...........................13 flipud.........................13 fmin...........................41 fmins.........................41 format bank.................6 format compact............7 format hex...................6 format long..................6
format long e...............6 format loose.................7 format rat.....................6 format short.................6 format short e..............6 fourier........................43 fzero..........................41
G grid............................28 gtext...........................28
H Heaviside...................43 help..............................5 hold...........................28
I ifourier.......................43 ilaplace......................43 imag...........................20 impulse......................31 inf 8 input..........................17 int 42 inv11 iztrans........................43
L laplace.......................43
length.........................20 linspace......................21 load............................16 log20 log10.........................20 loglog........................28 logm..........................12 logspace.....................21 lookfor.........................5 ls 7 lsim............................31 ltiview........................36
M max............................21 mean..........................21 median.......................21 mesh..........................30 meshgrid....................30 min............................21 more............................6
N nan...............................8 num2str......................18
O ode23.........................37 ode45.........................38 ones...........................12
- 44 -
INTRODUCCIÓN P Path Browser.............19 pause.........................19 pi 8 plot............................28 plot3..........................30 polar..........................28 poly...........................14 polyfit........................15 polyval.......................15 prod...........................21 pwd..............................7 pzmap........................36
Q quad...........................40 quad8.........................40 quit..............................7
R
rand...........................13 real.............................20 rem............................20 reshape......................13 residue.......................36 roots...........................14 rot90..........................13 round.........................20
S save...........................16 semilogx....................28 semilogy....................28 Set Path.....................19 shg...............................7 sign............................20 sin 20 size............................20 sort.............................21 sqrt.............................20
AL
MATLAB sqrtm.........................12 ss 31 ss2tf...........................32 ss2zp..........................32 std 21 step............................31 stepfun.......................33 str2mat.......................23 subplot.......................29 sum............................21 syms..........................42
triu.............................13
T
Z
tan 20 text.............................28 tf 31 tf2ss...........................32 tf2zp..........................32 title............................28 tril 13
zeros..........................13 zp2ss..........................32 zp2tf..........................32 zpk.............................31 ztrans.........................43
W what.............................7 who..............................7 whos............................7 workspace....................7
X xlabel.........................28
Y ylabel.........................28
- 45 -