MATLAB en 30 minutos Rafael Collantes. Octubre 200. Introducción MATLAB nació como un programa para cálculo matricial, pero en la actualidad MATLAB es un sistema que permite no solamente realizar todo tipo de cálculos sino también simulaciones temporales, adquisición de datos y simulación de máquinas de estado. El sistema básico contiene las funciones más comunes y generales. Para tareas más específicas, existen librerías (Toolboxes en el argot MATLAB) especializadas. Así, en el Laboratorio de Control se utilizarán las librerías de control (Control Systems Toolbox) y de tiempo real (Real Time Windows Target). Existe una gran cantidad de librerías especializadas, que cubren campos tan dispares como finanzas o proceso de imágenes. Figura. Ventana de comandos de MATLAB 2. Matrices y vectores MATLAB almacena los datos en escalares, vectores, matrices y matrices multidimensionales. Así, para definir una matriz de 2 por 3 se teclearía:» A=[ 4 ] Los elementos se han separado por espacios, mientras que para terminar una file se pulsa Enter. La matriz se termina cerrando un corchete. Un vector es una matriz de por n o de m por. En el siguiente ejemplo, definimos la variable serie que es un vector de por 4:» serie=[ 2 3 2] Igual que antes, los elementos se separan por espacios y el vector se cierra con un corchete. Para introducir un vector de por, se podría ir introduciendo fila a fila separadas por Enter, pero es más cómodo definirlo como el traspuesto de un vector de por :» otra=[4 0] El operador para indicar trasposición es el apóstrofo o comilla simple (, NO el acento) Un comando importante es whos: permite saber qué variables están definidas, de qué tipo son, dimensión, etc.: En este momento, tecleando whos se obtiene el siguiente resultado:» whos Name Size Bytes Class A 2x3 48 double array otra x 48 double array serie x 40 double array Grand total is elements using 3 bytes Como ya tenemos algunas variables, podemos realizar operaciones como multiplicar una matriz por un escalar.» A*3
3 2 8 8 2 Pero si intentamos:» A*A??? Error using ==> * Inner matrix dimensions must agree. El error se debe a que la matriz A no es cuadrada, y por lo tanto no se puede multiplicar por sí misma. Sin embargo es posible hacer:» A'*A 2 34 4 34 2 4 8 y también» A*A' 3 0 Para seleccionar un elemento dentro de una matriz o vector, se usan los paréntesis:» A(2,3) y también:» serie(3) Si lo que se quiere es tomar un trozo de una matriz o vector y no sólo un elemento, se utilizarán dos puntos para indicar el margen de interés:» A(,2:3) 4 Lo que devuelve de la primera fila, los elementos del 2 al 3 (no el 2 y el 3). Otro ejemplo:» otra (2:) Cuando se utilizan los dos puntos sin especificar inicio ni fin del margen, se están pidiendo todos los elementos de esa dimensión (esa fila o esa columna):» A(:,3) y por supuesto:» A(:,:) 4 3. El comando plot El comando plot representa variables en una gráfica:» plot (serie)
4. 4 3. 3 2. 2.. 2 2. 3 3. 4 4. Si se da como parámetro una matriz, plot supone que se quieren representar las columnas, cada una como una curva:» plot (A) 4 3 2..2.3.4....8.9 2 Con lo que tenemos tres curvas, cada una de ellas con sólo dos puntos. En los dos ejemplos anteriores, el eje horizontal toma valores correspondientes a los índices de los vectores representados, considerando que el primer elemento tiene índice (y no 0 como en lenguaje C ). Sin embargo, en muchas ocasiones y en particular en el Laboratorio de Control se tratará con señales temporales, en las que es interesante representar en el eje horizontal el tiempo. En el siguiente ejemplo se ha creado un vector t que contiene el tiempo desde 0 a segundo en pasos de 0ms y una señal y que representa la variable estudiada:» t=(0:0.0:) t = Columns through 0 0.000 0.000 0.00 0.2000 0.200 0.3000 Columns 8 through 4 0.300 0.4000 0.400 0.000 0.00 0.000 0.00 Columns through 2 0.000 0.00 0.8000 0.800 0.9000 0.900.0000» y=rand(,2) y = Columns through 0.4 0.08 0.8 0.20 0.393 0.349 0.88 Columns 8 through 4 0.322 0.03 0.998 0.049 0. 0.29 0.22 Columns through 2
0. 0.99 0.3 0.8234 0.04 0.99 0.9492 La función rand nos devuelve una matriz de la dimensión especificada con números aleatorios uniformemente distribuidos en el intervalo (0,) Para representar gráficamente esta señal, se utiliza el comando plot con dos argumentos:» plot (t,y) 0.9 0.8 0. 0. 0. 0.4 0.3 0.2 0. 0 0 0. 0.2 0.3 0.4 0. 0. 0. 0.8 0.9 4. Formato para los datos recogidos en el laboratorio Como ya se ha comentado, en el Laboratorio de Control se utilizará MATLAB como herramienta para control y adquisición de datos. Habitualmente, los datos recogidos se guardan en matrices en las que la primera columna representa el tiempo y la(s) siguiente(s), la(s) variable(s) de interés. En los siguientes ejemplos, se tienen tres matrices, cada una de 000 por 2:» whos Name Size Bytes Class iref 000x2 00 double array ref 000x2 00 double array vcont 000x2 00 double array Grand total is 000 elements using 480048 bytes Como ya se ha comentado, cada una de las tres variables es una matriz con dos columnas en las que la primera de ellas representa el tiempo. Para representar en una gráfica la velocidad del motor, se puede utilizar el comando plot como ya se ha visto:» plot (vcont(:,),vcont(:,2)) 80 0 40 20 0-20 -40-0 0 0.. 2 2. 3 3. 4 4. De esta forma se ha especificado que la primera columna es el tiempo y la segunda la variable registrada, que en este caso es la velocidad de un motor, expresada en porcentaje de la velocidad máxima. Obsérvese que el tiempo total del ensayo ha sido segundos. Si lo que se quiere es representar únicamente un trozo del ensayo y no los segundos, es necesario conocer los índices de las filas inicial y final que se quieren representar. Para ello se puede usar la función find:» origen=find(vcont(:,) ==.8) origen = 30
Lo que se ha hecho ha sido pedirle a MATLAB que encuentre en qué posición de la primera columna de vcont (que es el tiempo) se encuentra el valor.8, que es el momento del ensayo que queremos tomar como origen para una nueva gráfica. De forma análoga encontramos la posición del último elemento que queremos representar:» fin=find(vcont(:,) == 2.) fin = 00 Ahora ya se puede representar el ensayo entre.8 y 2. segundos:» plot (vcont(origen:fin,),vcont(origen:fin,2)) 4 2 0 8 4 2 0 48.8.9 2 2. 2.2 2.3 2.4 2. En ocasiones querremos no sólo representar una señal en un intervalo concreto, sino varias señales en ese mismo intervalo. Es fácil:» plot (vcont(origen:fin,),vcont(origen:fin,2),ref(origen:fin,),ref(origen:fin,2)) 4 2 0 8 4 2 0 48.8.9 2 2. 2.2 2.3 2.4 2. Muchas veces queremos representar varias señales en función del tiempo, coincidiendo entonces el eje de abscisas (como en el ejemplo anterior). Se consigue la misma gráfica anterior con:» plot (vcont(origen:fin,),[vcont(origen:fin,2) ref(origen:fin,2)])