3ª Práctica. Matlab 7.0 página 1 PROGRAMACIÓN EN MATLAB PRÁCTICA 03 INTRODUCCIÓN A MATLAB 7.0 1. INTRODUCCIÓN A MATLAB 7.0... 1 1.1 OPERACIONES BÁSICAS CON MATRICES... 1 1.2 GENERACIÓN DE MATRICES DE FORMA AUTOMÁTICA... 2 1.3 FUNCIONES PARA EL MANEJO DE MATRICES... 3 1.4 EL OPERADOR DOS PUNTOS (:)... 3 Generación de secuencias de números... 4 Referencia a filas y/o columnas... 4 Referencia a filas y/o columnas no consecutivas.... 5 1.5 OPERACIONES CON VECTORES... 5 1.6 FICHEROS DE DATOS... 5 Función save... 5 Función load... 6 1.7 UTILIZACIÓN DE FICHEROS *.M... 6 1.8 UTILIZACIÓN DEL DEBUGGER... 7 1. INTRODUCCIÓN A MATLAB 7.0 Esta práctica es la primera en la que se utiliza MATLAB. Se supone que dispones de los apuntes Aprenda Matlab como si estuviera en Primero, que están a la venta en Reprografía. Se debe comenzar por crear un directorio en el disco G:\ llamado G:\Informatica1\Practica03. A continuación se arranca el programa MATLAB por medio del menú Start/Programs y se coloca como directorio de trabajo el creado previamente, utilizando los comandos cd (para cambiar el directorio activo) y dir (para ver el contenido del directorio activo). El que el directorio creado pase a ser el directorio activo se puede conseguir tecleando en la ventana de comandos de MATLAB:» cd g:\informatica1\practica03 También puede conseguirse el mismo efecto mediante la ventana del Path Browser. MATLAB es un programa de cálculo matricial muy potente, que se utiliza en muchas asignaturas a lo largo de la carrera. Aunque tengas bastante experiencia con ordenadores, es poco probable que hayas utilizado MATLAB. A lo largo de la carrera lo utilizarás en muchas asignaturas. 1.1 OPERACIONES BÁSICAS CON MATRICES Los operadores matriciales de MATLAB son los siguientes: + adición o suma sustracción o resta * multiplicación ' traspuesta ^ potenciación \ división-izquierda (solución de Ax=B) / división-derecha (solución de xa=b) Con el fin de familiarizarte con este tipo de notación, prueba la siguiente secuencia de instrucciones en MATLAB observando detenidamente los resultados:» A= [ 1 2 3; 4 5 6; 9 7 8]
Informática 1 y Fundamentos de Computadores página 2» B= [ -1 0 3; 6 1 16; 9 4 2]» C=A*B» A» B» inv(a)*b» A\B» B*inv(A)» B/A Nota: inv(a) es una función que realiza el cálculo de la inversa de la matriz A. A modo de ejercicio se propone el cálculo de la expresión matricial (A-3B+C) C -1, donde las matrices A, B y C vienen dadas por: 1 1 0 1 3 2 2 1 3 A = 5 12 13 B = 6 0 3 C = 7 1 9 1 0 4 3 7 13 1 4 3 El resultado debería ser el siguiente:» ans = 2.5556-0.4444-2.2222 5.1587 0.3492-1.8730-6.2698-2.7937 3.9841 Una característica importante de MATLAB y que facilita enormemente su uso es que con las flechas y del teclado se pueden recuperar los anteriores comandos tecleados. Dichos comandos pueden ser ejecutados y/o modificados sin tenerlos que teclear de nuevo. El comando modificado se ejecuta pulsando la tecla Intro. 1.2 GENERACIÓN DE MATRICES DE FORMA AUTOMÁTICA MATLAB permite definir una serie de matrices de forma automática sin necesidad de tener que introducir los elementos uno por uno. Las matrices que se pueden generar de esta manera cumplen alguna peculiaridad que las distingue del resto. Veamos en este apartado algunas de las funciones que hacen esto posible. eye(4) forma la matriz unidad de tamaño (4x4) zeros(3,5) forma una matriz de ceros de tamaño (3x5) zeros(4) ídem de tamaño (4x4) ones(3) forma una matriz de unos de tamaño (3x3) ones(2,4) ídem de tamaño (2x4) linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2 logspace(d1,d2,n) genera un vector con n valores espaciados logarítmicamente entre 10^d1 y 10^d2. Si d2 es pi 1, los puntos se generan entre 10^d1 y pi rand(3) forma una matriz de números aleatorios entre 0 y 1, con distribución uniforme, de tamaño (3x3) rand(2,5) randn(4) ídem de tamaño (2x5) forma una matriz de números aleatorios de tamaño (4x4), con distribución normal, de valor medio 0 y varianza 1 1 pi es una variable predefinida en MATLAB, que como es fácil suponer representa el número π. TECNUN
3ª Práctica. Matlab 7.0 página 3 magic(4) crea una matriz (4x4) con los números 1, 2,... n*n, con la propiedad de que todas las filas y columnas suman lo mismo diag(x) forma una matriz diagonal, en la que los elementos de la diagonal son los elementos del vector x. Pruebe las siguientes sentencias en MATLAB» zeros(4)» B=zeros(2,3)» ones(1,3)» ones(3,1)» A=eye(3)» eye(2)» magic(3)» C=rand(3,6)» diag([1 2 3])» x=[ -1 3 1 4], diag(x)» y=linspace(0, 10, 21)» z=logspace(1, 6, 6)» z=logspace(0, 6, 13) 1.3 FUNCIONES PARA EL MANEJO DE MATRICES Aparte de las operaciones básicas con matrices, MATLAB es capaz de realizar cálculos de nivel superior gracias al conjunto de funciones que posee. Aquí se presentan algunas de ellas que pueden resultar de interés para el alumno. B = inv(a) calcula la inversa de A d = det(a) devuelve el determinante d de la matriz cuadrada A. t = trace(a) devuelve la traza t (suma de los elementos de la diagonal) de una matriz cuadrada A [m,n] = size(a) devuelve el número de filas m y de columnas n de una matriz rectangular A i = size(a,1) devuelve el número de filas de A j = size(a,2) devuelve el número de columnas de A n = size(a) devuelve el tamaño de una matriz cuadrada A A modo de ejercicio realice el cálculo del determinante y de la inversa de la siguiente matriz cuadrada A. 1 2 3 1 0 7 5 2 1 13 A = 4 11 6 3 0 0 2 4 9 12 3 33 1 5 6 A modo de comprobación hay que saber que el determinante vale 380. 1.4 EL OPERADOR DOS PUNTOS (:) El operador dos puntos (:) realiza en MATLAB dos funciones distintas: Por una parte permite definir secuencias de números igualmente espaciados (progresión aritmética) Por otra permite hacer referencia a todos los elementos de una fila o una columna de una matriz.
Informática 1 y Fundamentos de Computadores página 4 Generación de secuencias de números. Es posible generar mediante MATLAB una progresión aritmética de una forma sencilla (sin utilizar la función linspace()). Por ejemplo, para generar la secuencia [1 3 5 7 9 11 13 15 17] basta con escribir en MATLAB» 1:2:17 que tiene el siguiente significado general:» límite inferior:espaciado:límite superior. En el caso en que el espaciado sea 1 se puede omitir. Así para generar la secuencia [-1 0 1 2 3 4 5 6 7 8 9] puede hacerse» -1:1:9 o bien» -1:9 Como ejercicio genera las siguientes sucesiones en MATLAB a) [0, π/12, π/6,... 4π] b) [-7, -6.5, -6,... 6.5, 7] c) [4, 3, 2, 1, 0, -1, -2] Referencia a filas y/o columnas. Hasta ahora no se ha explicado el acceso a filas y columnas de una matriz. Es posible acceder a un elemento de una matriz A como» A(fila,columna) Como ejemplo obsérvese el resultado que se obtiene en la siguiente secuencia de operaciones, donde la matriz A es la del Ejercicio 3.» A» A(1,2)» A(3,3)» A(4,1) Con el operador dos puntos es posible seleccionar todos los elementos de una fila o columna. Observa el resultado de las siguientes entencias o comandos» A(2,:)» A(:,1)» A(:,3) Además se pueden seleccionar series de filas y columnas.» A(1:2,:) (Filas 1 y 2 y todas las columnas)» A(1:2,3) (Filas 1 y 2 y columna 3)» B = A(:,1:2) (Se crea una submatriz B con todas las filas de A y las columnas 1 y 2) Escriba la sentencia de MATLAB que selecciona en la matriz A del Ejercicio 3 los elementos que están en las filas 1 y 2 y en las columnas 2 y 3 simultáneamente. TECNUN
3ª Práctica. Matlab 7.0 página 5 Referencia a filas y/o columnas no consecutivas. Para acceder a filas y/o columnas que no sean consecutivas, basta con crear un vector con las filas y/o columnas a las que se desea acceder. Por ejemplo para extraer las filas 1 y 3 y las columnas 2, 4 y 5 de una matriz B, se puede utilizar la siguiente secuencia de operaciones:» B=magic(5)» fil = [1, 3]» col = [2, 4, 5]» A=B(fil,col) 1.5 OPERACIONES CON VECTORES Los vectores se pueden considerar como matrices con una fila o una columna, por lo tanto el tratamiento de vectores desde el punto de vista matricial es el mismo que el de las matrices. En ocasiones interesa realizar en un vector o incluso en una matriz operaciones elemento a elemento. Por ejemplo supongamos que se desea calcular el cuadrado de cada elemento de un vector. Dado un vector x» x=[1 2 4 6 8] el cuadrado de los elementos de x se obtiene como sigue» x.^2 mientras que si se intenta ejecutar el comando» x^2 el programa da un error porque las dimensiones no son acordes según las reglas del producto de matrices. Obsérvese que el operador potenciación para el cálculo elemento a elemento es.^.el conjunto de operadores que realizan cálculos elemento a elemento son:.* multiplicación.^ potenciación a.\b divide los elementos de b por los de a (a y b mismo tamaño) a./b divide los elementos de a por los de b (a y b mismo tamaño) Evidentemente la adición y la sustracción no requieren el punto, ya que son por definición operaciones elemento a elemento. Obtenga el cubo de los números naturales impares desde 1 hasta 15. Obtén asimismo una matriz cuyos elementos sean los cuadrados de los elementos de la matriz A=magic(6). 1.6 FICHEROS DE DATOS En muchas ocasiones es necesario guardar los resultados obtenidos en un fichero. Matlab dispone de un tipo de ficheros que llevan la extensión.mat. Para guardar datos se utiliza la función save y para recuperarlos se utiliza la función load. Función save La función save puede guardar aquellas variables que se encuentren en el Workspace. Inicialmente vacíe el Workspace utilizando la función clear. Cree una matriz de tipo magic de dimension 3x3 y asígnele el nombre de matriz_a. Ahora calcule su inversa y guarde el resultado en otra matriz llamada matriz_b. Posteriormente asigne el resultado del producto de ambas matrices a una variable llamada matriz_axb.
Informática 1 y Fundamentos de Computadores página 6 En este momento, usted tiene tres matrices en el Workspace, y vamos a proceder a guardarlas en un fichero que después recuperaremos mediante la función load. Escriba a continuación: >> save Matrices Bien a través del explorador de Windows, bien a través del Current Directory de Matlab, podrá observar que ha aparecido un nuevo fichero llamado Matrices.mat. Escriba ahora: >> save Matriz_A_y_B matriz_a matriz_b De nuevo podrá comprobar que aparece un nuevo fichero llamado Matriz_A_y_B.mat. Función load Vacíe nuevamente el Workspace utilizando la función clear. Ahora el Workspace está vacío y vamos a recuperar los ficheros de datos guardados anteriormente. Escriba: >>load Matrices. El resultado es que en el Worskspace reaparecen las variables matriz_a, matriz_b y matriz_axb, con sus respectivos contenidos. Vacíe nuevamente el Workspace utilizando la función clear y escriba: >>load Matriz_A_y_B Observará que en el Workspace sólo aparece la variable matriz_a y la variable matriz_b, pero no la matriz_axb. Para mas información escriba: >>help load Y también: >>help save 1.7 UTILIZACIÓN DE FICHEROS *.M Cree un subdirectorio dentro de G:\Informatica1\Practica03 que se llame Ejercicio0101 y sitúe el directorio de trabajo de Matlab dentro de él. Los ficheros.m son el centro de la programación de MATLAB. En este primer ejercicio vas a realizar un ejemplo muy sencillo de fichero.m. Un fichero.m no es más que un fichero de texto (puro texto, sin ningún tipo de formato) que contiene comandos de MATLAB. Estos comandos se ejecutan sucesivamente, uno detrás de otro, en la misma forma en que se ejecutarían si se tecleasen desde la línea de comandos. Lo que se requiere para escribir las instrucciones es un editor de texto ASCII como puede ser Notepad. Desde la versión 5.0, MATLAB dispone de su propio editor de ficheros *.m. Para abrirlo teclea la palabra edit y pulsa Intro. En la ventana que se abre escribe las siguientes líneas: clear all disp('resulución del sistema de ecuaciones Ax=b') A=rand(5) b=rand(5,1) x=inv(a)*b disp('comprobación: A*x=') b=a*x TECNUN
3ª Práctica. Matlab 7.0 página 7 y guárdalo con el nombre SistemaDeEcuaciones.m en el directorio g:\informatica1\practica03\ejercicio0101 antes creado. Ahora teclea en la línea de comandos de MATLAB la palabra SistemaDeEcuaciones : >>SistemaDeEcuaciones Esto es, el nombre del fichero sin la extensión. En la ventana de comandos aparecerán los resultados de las distintas líneas del fichero (puesto que no se ha puesto el carácter punto y coma (;) al final de las líneas). Nota: En el caso de que MATLAB dé un error diciendo que no sabe lo que es SistemaDeEcuaciones se debe a que el fichero no se encuentra en el directorio adecuado. En este caso debes proceder de uno de estos dos modos: 1. Comprueba mediante la instrucción dir que el fichero SistemaDeEcuaciones.m está en el directorio activo. Si no es así, cambia el directorio activo con el comando cd o mediante la ventana de Current Directory. 2. Ejecuta el fichero SistemaDeEcuaciones.m con el comando run poniendo su ruta o path completo, esto es en la forma:»run g:\informatica1\practica03\ejercicio0101\sistemadeecuaciones A partir de esta primera ejecución MATLAB ya reconocerá el fichero escribiendo simplemente SistemaDeEcuaciones. El fichero SistemaDeEcuaciones.m es un ejemplo del primero de los dos tipos de ficheros *.m que tiene MATLAB: los llamados ficheros de comandos (script files). Existen además los ficheros de funciones, que permiten definir nuevas funciones a las que se les pueden pasar argumentos, exactamente en la misma forma que se hace cuando se utiliza det(a) o linspace(0,10,21). Para más información sobre ambos tipos de ficheros *.m ver el manual Aprenda MATLAB como si estuviera en Primero. 1.8 UTILIZACIÓN DEL DEBUGGER El editor de Matlab posibilita, mediante la colocación de un breakpoint al margen izquierdo de una instrucción, que se pare el programa antes de ejecutar esa instrucción. De esta manera se puede comprobar el valor de las variables dentro del fichero y seguir el programa, a partir de aquí, instrucción a instrucción. Se puede colocar un breakpoint por cada línea de texto. El uso de este recurso es fundamental para corregir los errores del programa o para asegurarnos de estar haciendo lo que nosotros queremos. Para familiarizarte coloca un breakpoint en la primera instrucción del fichero SistemaDeEcuaciones.m y, con las explicaciones que hay en las páginas 7 y 8 del manual de Matlab, prueba a utilizar las 6 herramientas de que se dispone: Set/Clear Breakpoint, Clear All Breakpoints, Step In, Single Step, Continue y Quit Debugging, y observa como posando el ratón sobre el nombre de alguna variable escrita dentro del texto, se despliega una ventana con su contenido. Otra manera para acceder al contenido de las variables es hacerlo directamente desde el Workspace.