INTRODUCCIÓN AL MATLAB Este material es simplemente una introducción para el uso en el curso Física Experimental I, no pretende ser un manual del programa. MATLAB, abreviatura de MAtrix LABoratory, es un programa desarrollado para resolver problemas matemáticos. Entre los usos más frecuentes se encuentran: Análisis numéricos Cálculo estadístico Resolución de ecuaciones y sistemas Resolución de ecuaciones diferenciales Integrales Procesamiento de señales Gráficos Existen bibliotecas específicas que son de gran ayuda en la vida del ingeniero, proporcionando herramientas específicas para una gran variedad de situaciones. La operación del MATLAB utiliza comandos, es decir un conjunto de instrucciones que le indican al programa que acciones debe tomar (por ejemplo efectuar una operación, mostrar un gráfico, etc). Los comandos se ingresan a través de la consola del programa o prompt, digitando los mismos en la secuencia deseada1. Ejemplo: presione ‘Enter’ (‘Intro’) >> 7+3 ans = 10 >> () MATLAB muestra el resultado: 7+3 = 10 El símbolo ‘>>’ indica que MATLAB aguarda que ingresemos un comando. Luego de escribir ‘7+3’ y presionar , se efectúa el cálculo y se muestra la respuesta. ‘ans =’ es la abreviatura de answer, que significa respuesta, que en este caso es 10. MATLAB incorpora un lenguaje de programación sumamente intuitivo. Los programas consisten simplemente de una secuencia de comandos (que también podrían ser ejecutados en la consola), guardada en un archivo de extensión ‘.m’ sin ningún formato especial: directamente escribimos el comando deseado2. Algunas estructuras de control permiten la toma de decisiones, como por ejemplo la sentencia if. El modo de trabajo fundamental del MATLAB es a través de matrices rectangulares (de ahí su nombre). Las matrices se utilizan como “casilleros” donde se almacena la información utilizada en las operaciones. Las matrices además cumples ciertas reglas operativas (por ejemplo el producto matricial) pero por el momento no usaremos estas propiedades. 1 MATLAB es un programa que ha ido evolucionando desde las primeras épocas de PCs. En las versiones actuales gran parte de la funcionalidad es accesible mediante menús y comandos con el ratón. 2 MATLAB funciona como intérprete de comandos. Es decir, no compila los programas como otros lenguajes. 1 Para los casos especiales en que las matrices constan de una única fila o columna tenemos vectores. En el caso extremo, un número individual se puede considerar como una matriz de 1x1. 1 2 3 ... 1 1 2 1 0 1 2 2 2 2 0 ... Columna: 1 2 Fila: elemento (2,3)=0 Fila: 1 12 10 1 2 Columna: 1 2 3 ... elem.(1,2) = elem.(2) = 10 i. Inicio y salida del MATLAB Para comenzar primeramente se inicia WINDOWS (simplemente se enciende el PC) y luego abrimos MATLAB mediante doble-click en el icono correspondiente: Una vez que aparezca la indicación del prompt de MATLAB, que es el símbolo “>>”, ya se pueden ingresar los comandos3. Si desea salir de MATLAB teclee4: >> quit ii. Para saber qué hace cada comando: comando de Ayuda 3 El PROMPT indica al usuario que el programa esta preparado para recibir órdenes. 4 También se puede cerrar como con cualquier aplicación de WINDOWS; la información no se guarda automáticamente –vea “Lectura y escritura de datos”. 2 Si no entiende bien el significado de un comando, teclee help y el nombre del comando en cuestión. Por ejemplo, queremos saber que hace el comando quit: >> help quit QUIT Quit MATLAB session QUIT terminates MATLAB without saving the workspace. your workspace variables, use SAVE before quitting. To save See also SAVE. El comando help sin ningún parámetro muestra todas las categorías de ayuda del MATLAB. Se puede acceder al archivo de ayuda en formato de Windows a través del menú de ayuda (en la mayoría de los casos la información es la misma). Aunque en la ayuda las funciones aparecen en mayúscula, deben ser escritas con minúsculas o se provoca un error. SUGERENCIA: Aprenda inglés si todavía no sabe. Es más sencillo que el español y le permitirá el acceso a una cantidad de información enorme, no sólo en el caso de MATLAB. No es estrictamente necesario saber hablarlo. Con ser capaz de entenderlo en forma escrita es ya un avance sustancial. iii. Variables en MATLAB Una variable es un espacio en memoria al cual se le asigna una etiqueta o nombre que lo caracteriza y un contenido. La etiqueta puede tener hasta ocho caracteres y debe empezar con una letra. El contenido puede ser numérico, lógico o carácter. Es conveniente que el nombre de las variables o archivos esté relacionado con sus contenidos para evitar confusiones y pérdidas de tiempo. En MATLAB las variables serán matrices. Dos variables no pueden tener la misma etiqueta ni tampoco un archivo ‘.m’ puede tener el mismo nombre que una variable 5. Se distingue entre mayúsculas y minúsculas: valor Valor VALOR. Existen algunas variables que MATLAB tiene por defecto: pi → i o j → la unidad imaginaria compleja: i 2 = j 2 = -1; ans → la última respuesta dada por el programa. Estos nombres de etiqueta no están restringidos y se pueden redefinir, aunque no es recomendable. Nota: Mencionar a una variable no definida previamente (y que por lo tanto MATLAB desconoce) provoca el siguiente mensaje de error: >>m .??? Undefined function or variable m. Definición de variables Para asignar un valor a una variable utilizamos el símbolo de igualdad, ‘=’, en la forma general etiqueta = valor La etiqueta es cualquier nombre válido para la variable. El valor normalmente será una matriz, escribiendo directamente sus elementos o el resultado de algún cálculo o función. La variable permanecerá con este valor hasta ser borrada o ser definida nuevamente. 5 Como veremos, la manera de ejecutar un archivo ‘.m’ es mediante su nombre, y por ello no debe tener el mismo nombre que una variable. 3 Al definir matrices de la forma más sencilla ingresamos en forma explícita la lista de sus elementos utilizando corchetes rectos, ‘[’ y ‘]’ para indicar el comienzo y el final. Los elementos de una fila se separan con un espacio en blanco, y enter o intro, ‘’, indica el final de una fila: >>A = [3 9 5 2 0 8 pi 1 4] Para separar filas también se utiliza el punto y coma, ‘;’. La misma matriz se puede escribir de la siguiente manera: >>A = [3 9 5; 2 0 8; pi 1 4] Cuando el punto y coma utiliza al final de una línea de comandos o después de definir una variable, indica que el resultado, ans , no se muestre en la pantalla. Veamos ahora un vector fila de 4 elementos: >>v = [3/5 1 -4 2.77] Y un vector columna de 3 elementos: >>Vec = [86.1 5*i sqrt(8)] que también puede escribirse: >>Vec = [ 86.1, 5*i, sqrt(8)]' donde el apóstrofe6, ‘'’, indica la matriz transpuesta de la anterior. La transposición intercambia el lugar de las filas y columnas: elemento ( i, j) ↔ elemento ( j, i). Generación de vectores: Operador “:” Una forma rápida de crear un vector cuyos elementos están igualmente espaciados es mediante los dos puntos, ‘:’. La forma general de usarlos es valor inicial : valor final o valor inicial : paso : valor final Esto indica la generación de un vector fila cuyo primer elemento es el valor inicial indicado. Los valores sucesivos se calculan sumando el paso al valor inicial. En caso de no indicar ningún paso, el valor por defecto es 1. Se generan todos los valores hasta que, o bien se alcanza el valor final, o el próximo elemento superaría el valor final (lo que ocurre si no se alcanza este valor en un número exacto de pasos). Ejemplos: >>C = 1:5 o >>C = [1:5] es equivalente a 6 Utilice el tilde que está bajo el signo de interrogación, a la derecha del cero en los teclados de distribución en español. 4 >>C = [1 2 3 4 5] y >>D = 0:0.25:1 equivale a >>D = [0 0.25 0.5 0.75 1] Seleccionar elementos de una matriz: Una vez definida una matriz podemos acceder a los valores guardados en ella mediante su nombre: >>A Este comando provoca que se muestre todo el contenido de la matriz en la pantalla (cuando las matrices son muy grandes el resultado se separa en varias pantallas). Cuando en una operación o función aparece la etiqueta de la matriz, equivale a poner los valores que ésta almacena. Si deseamos acceder a un valor particular dentro de un vector o matriz utilizamos los paréntesis curvos, ‘(’ y ‘)’. En general A(i,j) es el elemento de la fila i y la columna j. Si v es un vector, un único índice es suficiente, es decir v(n,1) v(n) si v es un vector columna o v(n) v(1,n) si es un vector fila7. Por ejemplo, A(1,4) es el elemento de la primer fila y la cuarta columna, y v(10) el décimo elemento de v. Para seleccionar un rango de elementos utilizamos nuevamente los dos puntos. En este caso el paso necesariamente debe ser entero. Como ejemplo, >>v(3:7) devuelve los valores del vector del tercer al séptimo elemento: v(3), v(4), v(5), v(6) y v(7). Por último, si no indicamos los valores inicial y final en los dos puntos se selecciona automáticamente todo el rango disponible correspondiente de la matriz. Es decir: A(:,2) es toda la segunda columna de la matriz A. A(3,:) es toda la tercer fila. Borrar variables Al ejecutar los comandos, MATLAB memoriza las variables utilizadas. Sus valores permanecen en memoria hasta salir del programa o hasta que se borran las variables explícitamente, lo cual se hace con el comando clear, lo cual elimina todas las variables definidas hasta el momento. Si sólo se desea borrar algunas variables, sus nombres se indican después de la palabra clear. Por ejemplo: >>clear x y z borra las variables x, y y z. ATENCIÓN: Una vez borrada el valor de la variable es destruido y no se puede recuperar. 7 Obviamente no se puede acceder a un elemento inexistente. Si los índices no están dentro de las dimensiones de la matriz o vector se produce un mensaje de error. 5 Obtener información sobre las variables Para saber que variables están actualmente en uso, se utilizan los comandos who o whos Las dimensiones de una matriz se obtienen mediante size(A) (esta información también se muestra con whos) Para desplegar un texto o variable puede utilizar la función disp: disp(‘Programa para resolver la ecuación del péndulo’) disp(A) Limpiar la ventana de comandos Si desea borrar la pantalla, utilice el comando clc. iv. Operaciones y funciones: Una operación aritmética tiene la forma general de (matriz 1) operador (matriz 2) y el resultado es otra matriz con los valores correspondientes a la operación. Los símbolos para los operadores son los usuales8: + * / ^ suma resta producto (asterisco) división (barra inclinada) potencia (acento circunflejo)9 En las operaciones combinadas, la potencia tiene mayor precedencia que el producto y la división, que tienen mayor procedencia que la suma y la resta. Esto señala en qué orden se efectúan las operaciones. Se pueden utilizar paréntesis para establecer otro orden deseado. Veamos algunos ejemplos: >>S = A + B define una matriz S cuyos elementos son la suma de los elementos correspondientes de las matrices A y B (se suma elemento a elemento). >>D = A - B define una matriz D cuyos elementos son la diferencia de los elementos correspondientes de las matrices A y B (se resta elemento a elemento). En los dos casos anteriores las matrices A y B deben tener las mismas dimensiones. >>P = AB 8 La tecla para el acento circunflejo está a la derecha de la de la ‘P’ en los teclados en español. A su derecha se encuentra el asterisco. La barra de dividir está junto con el ‘7’. También se puede usar el teclado numérico. 9 En la potencia la segunda matriz “debe” ser un número simple. Más aún, la primer matriz necesariamente debe ser cuadrada. A^n denota la multiplicación matricial de la matriz cuadrada A a la n-ésima potencia. Existen formas generalizadas para potencias matriciales, pero no nos resultarán de utilidad. 6 asigna a la matriz P el producto de la matriz A con la matriz B. El número de columnas de A debe ser igual al número de filas de B. Este es el producto matricial y no es igual al producto elemento a elemento. O sea, si >>p = bu con b un vector fila y u un vector columna, se le asigna a la variable p el producto escalar de b con u. Asimismo, >>A/B es equivalente al producto de la matriz A por la matriz inversa de B, es decir >>Ainv(B) (suponiendo que la matriz B sea invertible; en caso contrario se produce un error). Nota: Si la operación no es posible debido a que las dimensiones de las matrices no son correctas, MATLAB especificará el error en forma semejante a: >>A*B .???Error using ==> * Inner matrix dimensions must agree. Operaciones con escalares Una manera muy útil en MATLAB de efectuar operaciones es el caso especial en que una de las matrices es escalar, o sea, simplemente un número (matriz 1x1). En este caso, la operación tiene el aspecto10 (matriz) operador (escalar) o (escalar) operador (matriz) Este “abuso” de notación permite simplificar enormemente muchas operaciones. El resultado de una operación realizada en esta manera es una matriz cuyos elementos son el resultado de operar cada elemento de la matriz dada con el escalar. Esto es, >>[0 –1 1 0 2 5 –2] + 1 da como resultado el vector [1 0 2 1 3 6 –1]. En forma análoga podríamos hacer un producto por un escalar (o resta, o división) Operar elemento a elemento: Muchas veces nos interesa efectuar operaciones entre matrices elemento a elemento, en contraste con el producto o potenciación matricial. La forma para indicar esto es agregando un punto, ‘.’, delante del operador: (matriz 1) . operador (matriz 2) De esta manera se obtiene una matriz cuyos elementos son el resultado de la operación entre los elementos correspondientes de las matrices. Ejemplos: 10 Esto es correcto para todas las operaciones salvo la potenciación. 7 >>A.B >>A./B denotan la multiplicación y división elemento a elemento (en este caso la división está bien definida aunque B no sea invertible; en cambio, sus elementos deben ser distintos de cero). Podemos elevar un vector al cuadrado (esto es, elevar cada elemento al cuadrado) >>q = [ 4 5 6 7] entonces >> q.q ans = 16 25 36 49 o utilizando el ‘^’ >>q.^2 ans = 16 25 36 49 Una expresión válida puede ser >>A.^(-1/pi) Observe los paréntesis. ¿Cuál sería la diferencia con escribir A.^(-1)/pi? Una aplicación interesante es la resolución de un sistema de ecuaciones lineales representado matricialmente por A x = b (A son los coeficientes de las variables en el vector x que se quieren determinar para que el producto coincida con los valores dados en b). La solución es: >>x = A\b. Funciones MATLAB incorpora una extensa variedad de funciones comunes en matemática y en física. Para utilizar una función se escribe su nombre seguido por la matriz a la que se le aplica, escrita entre paréntesis: función( matriz ) Esto da como resultado una matriz formada con los elementos que resultan de aplicar la función matemática a cada elemento. Ciertas funciones no matemáticas dan como resultado otra matriz cuyas dimensiones, en principio, pueden ser cualquiera (como en el caso de la función size, que devuelve una matriz de 1x2 con los valores de las dimensiones de la matriz a la que se aplica). Es usual utilizar muchas funciones en una sola expresión (ej.: log((cos(x^3))/(4+atan(y))) ). Si una función requiere más de un parámetro, se separan con coma. Recuerde que para obtener ayuda sobre una función o comando se utiliza help. 8 Funciones matemáticas (se aplican a una matriz x) seno* sin(x) coseno* cos(x) tangente* tan(x) raíz cuadrada sqrt(x) exponencial exp(x) arcotangente* atan(x) arcocoseno* acos(x) arcoseno* asin(x) Otras funciones útiles round(x) fix(x) floor(x) ceil(x) sum(x) prod(x) rem(x,n) ones(size(A)) ones(m,n) ones(n) zeros(n) eye(A) inv(A) rand(A) redondea los elementos de x al entero más cercano. elimina las cifras decimales de x. indica el entero más cercano menor o igual a x. indica el entero más cercano mayor o igual a x. suma los elementos de cada columna de la matriz x expresando esos resultados en un vector fila. multiplica los elementos de cada columna de la matriz x expresando esos resultados en un vector fila. indica el resto de la división de x por n. es una matriz de las mismas dimensiones que A pero cuyos elementos son iguales a 1. es una matriz de m filas por n columnas cuyos elementos son 1 es una matriz n x n de unos. es una matriz de n x n ceros. es una matriz unitaria del mismo formato que la matriz cuadrada A. es la matriz inversa de la matriz cuadrada A. es una matriz del mismo formato que A cuyos elementos son tomados al azar en el intervalo (0,1). * Las funciones trigonométricas operan sobre ángulos en radianes. Notación científica Se utiliza automáticamente la notación científica en MATLAB (lo cual resulta bastante práctico en casi todos los casos). Como muchos otros programas, se usa la letra ‘E’ o ‘e’ a continuación de una cifra para indicar ‘multiplicado por 10 elevado a’. Ejemplo: 1.05x10-3 1.05E-003, -68.7x105 -6.87e+004 v. Lectura y escritura de datos: Muchas veces se necesita introducir y guardar datos desde MATLAB, para ello existen distintas opciones. a) Lectura de entradas de un teclado: MATLAB puede aceptar datos de entrada a través del teclado mediante la función input. Esto provoca que el programa aguarde hasta la introducción de un valor, el cual es el resultado devuelto y puede ser utilizado por otra función. Digamos que se desea que el usuario ingrese un número. Un enunciado básico sería: >>z = input('Ingrese el radio: ') 9 MATLAB despliega lo siguiente: Ingrese el radio: 15 z = 15 >> En este lugar el usuario debe ingresar un vector o escalar El usuario ingresó 15 en este caso. La parte ' Ingrese el radio: ' es un mensaje de solicitud que se exhibe en la pantalla. Las comillas indican que se trata de un texto y no una variable. Cuando se teclee el valor del radio y se pulse return / intro, el dato se guardará en z. El valor introducido puede ser un escalar o un vector si se coloca entre paréntesis rectos11. Ingrese el radio: [0.1 0.2 0.5] z= 0.1 0.2 0.5 >> Nota: Si se olvida cerrar la comilla final, MATLAB especificará el error: >>z = input(‘Ingrese el radio:) | Missing ‘ at end of string or misplaced transpose operator Si se olvida poner un paréntesis: >>z =input(‘Ingrese el radio’ | Improper function reference. A “,” or “)” is expected. Lo habitual es utilizar input dentro de un archivo de comandos ‘.m’. b) Guardar y cargar datos desde archivos Al cerrar MATLAB toda la información guardada en la memoria se destruye. Por lo tanto es importante poder guardar los datos de los cálculos en archivos independientes. Además esto permite utilizar datos de una computadora en otra. Los datos se pueden recobrar en cualquier momento a partir del archivo en que fueron guardados. Más aún, en muchos casos podemos tener datos provenientes de otros programas y los podemos cargar en MATLAB. La función save se encarga de guardar la información, en el siguiente modo: save nombre-del-archivo lista-de-variables opciones y la función load de recuperarla: load nombre-del-archivo lista-de-variables opciones En principio todo lo que está a continuación de save (load) es opcional. Al no indicar el nombre del archivo los valores se guardan (cargan) en un archivo creado con el nombre ‘ matlab.mat’ en la carpeta de trabajo actual. Al no indicar las variables que se desean guardar, se guardan todas las que estén definidas en el momento de ejecutar el save. Al nombre del archivo se le agrega la extensión 11 También es posible introducir un texto desde el teclado. Un enunciado básico podría ser: >>z = input('Indique su nombre: ', 's') El segundo argumento, ‘s’ , indica que la entrada del teclado es una cadena de caracteres o texto (string). 10 ‘.mat’ (a menos que en las opciones se indique otra cosa) que lo señala como archivo de datos de MATLAB. Ejemplos: La instrucción >>save guarda todas las variables en un archivo ‘matlab.mat’ (si este existía previamente, su contenido es eliminado). Si luego efectuamos >>clear >>load volvemos al principio, ya que clear elimina todas la variables y load las carga nuevamente desde el archivo ‘matlab.mat’. Comúnmente usamos save en formas como >>save datos1 a v t Lo cual guarda las matrices a, v y t en el archivo ‘datos1.mat’ de la carpeta actual. La mayor parte de las veces en que se usa load no se indica qué variables se desean cargar, para que automáticamente cargue todas aquellas contenidas en el archivo. Guardar y cargar archivos provenientes de otros programas: Si no indicamos ninguna opción, los comandos save y load trabajan con un formato de archivos binario, propio de MATLAB. Esto es, solamente con MATLAB podemos interactuar con la información guardada en ellos12. En este formato se guarda completamente la información de una matriz, su nombre y los valores contenidos en ella, y por lo tanto se recuperan al cargar los datos. Cuando necesitamos poder interactuar con los datos guardados en un archivo nos conviene más que los números estén escritos directamente. Esto es conocido como formato A. S. C. I. I.13, que es lo mismo que decir que se guarda en formato de texto puro. Indicamos que se desea esto agregando la opción –ascii (incluyendo el guión) al comando save o load. En este caso se debe aclarar la extensión del archivo. >>save datos.tmp x –ascii Guarda la variable x en formato ASCII en el archivo datos.tmp. Este archivo se puede editar con Word o con el bloc de notas (u otros editores). Los nombres de las variables no se guardan; tan sólo su contenido. La carga a través de load de un archivo en formato ASCII no es exactamente igual que save. La razón es que si bien save en ASCII puede escribir múltiples variables a un mismo archivo, load lee todo el archivo ASCII de datos numéricos colocados en un arreglo rectangular y lo coloca en una única variable que tiene como nombre el mismo que el del archivo (descartando la extensión). Por ejemplo, cargamos un archivo llamado y_datos.e con: >>load y_datos.e 12 Si se trata de abrir una archivo ‘.mat’ con un editor como Word o el bloc de notas observará que el texto resulta ilegible.g 13 ASCII se pronuncia usualmente ‘asqui’ 11 El contenido se carga en la variable y_datos. Esta será una matriz de un tamaño acorde con la cantidad de datos guardados en el archivo. Observe que este archivo ¡puede incluso haber sido editado manualmente! vi. Programación de MATLAB: Archivos “.m” Muchas veces para realizar un cálculo tenemos que ejecutar varios comandos (p.ej. definir las variables, hacer varias operaciones, etc.). Hacerlo directamente en el prompt no es ventajoso pues dificulta la corrección de errores y al salir del programa se pierden los cálculos efectuados. También es muy frecuente tener que realizar muchas veces un mismo cálculo variando algunos de los parámetros. Por todo esto conviene escribir las líneas de comando dentro de un programa14. La estructura de un programa en MATLAB es sumamente sencilla, y utilizaremos lo mínimo esencial para el curso. Los archivos de programa no poseen ningún formato especial (son sólo texto); por consiguiente, dentro de un programa creado por nosotros encontraremos: COMANDOS: todo aquello que podamos escribir en el prompt podemos escribirlo en el programa. Esto incluye definiciones de variables, cargar y guardar datos, efectuar cálculos, graficar, etc. COMENTARIOS: el símbolo de porcentaje, ‘%’, indica un comentario, lo cual significa que se ignore lo que está a continuación del mismo, hasta la próxima línea. Realizar comentarios apropiados no es una pérdida de tiempo, sino que al contrario evita que tengamos que devanarnos cada vez que leemos el programa. Un programa debe estar guardado en un archivo de texto cuya extensión sea ‘.m’ (p.ej.: term.m) en la misma carpeta en que estamos trabajando (si estamos usando el disquete, ahí es donde debe estar el programa). Para correr el programa, lo llamamos desde el prompt a través de su nombre de archivo (p. ej.: >>term). Nota: Dado que un programa simplemente es una secuencia de comandos, tenga cuidado en que no interactúe con variables definidas previamente en MATLAB. Esto se resuelve fácilmente agregando el comando clear al comienzo de su programa. MATLAB incorpora un editor de programas, al que se accede mediante el comando edit. Este editor es bastante práctico, ya que nos muestra diferentes colores según el comando. Otra alternativa es seleccionar en el menú de la barra de herramientas que aparece en la parte superior de la pantalla de MATLAB la opción ‘File’ y luego ‘New M file’. Con cualquiera de estas maneras se ingresa al editor de archivos de MATLAB. Una vez escritas las líneas de programa en el archivo, seleccione ‘Save as...’ en el menú ‘File’ del editor. Una ventana emerge preguntando el nombre y la ubicación del archivo .m a guardar. Hecho esto el programa está listo para ser usado. Si posteriormente decide modificar el programa recuerde guardar los cambios antes de correrlo. Ejemplo: En el EDITOR de MATLAB se escribe el listado del programa “demost.m”: disp(‘Este es un programa ejemplo’) A = 1:10 % Al no poner ; al final de la definición de la variable aparecerá en pantalla B = [3,5,7]; who 14 Además si se necesita automatizar la toma de decisiones, se utilizan comandos como if o for dentro de un programa. 12 Ahora para correr el programa en MATLAB (habiéndolo guardado previamente en la misma carpeta de trabajo) simplemente se digita: >>demost En la pantalla MATLAB devolverá: Este es un programa ejemplo A = 1 2 3 4 5 6 Your variables are: A B >> 7 8 9 10 Definir funciones Otro tipo de archivos ‘.m’ son los archivos de función, los cuales permiten agregar nuevas funciones a las ya existentes. Las funciones en MATLAB equivalen a las subrutinas y funciones de otros lenguajes. La diferencia fundamental entre un programa y una función es que la función devuelve un valor a partir de una entrada mientras que el programa funciona de manera independiente. El comando function al comienzo de un archivo de programa indica que se trata de una función. Seguido de esto, en la misma línea, se coloca el nombre de una variable en la cual se guardará el valor devuelto por la función. Este se iguala al nombre de la función, y entre paréntesis se indican los valores de entrada. El comienzo del archivo de función es: function salida = nombre (entrada) El nombre del archivo debe ser el mismo que el de la función para ser reconocida por MATLAB. Después de la primera línea se escriben los comandos necesarios para calcular la función. Se puede agregar una línea con el comando end para indicar el final de los cálculos. El último valor guardado en la variable de salida es el valor que la función devuelve a quien la halla llamado. Las funciones de MATLAB tienen esta misma estructura. Ejemplo: Quiero una función que verifique la siguiente ecuación para todo x: f x 2 x 3 7 x 2 3x 1 x 2 3x 5 e x Suponiendo que el archivo ‘.m’ se guarda como ‘demof.m’, su guión sería el siguiente: function y = demof(x) %doy el nombre a la salida (y) e indico que tiene una entrada (x) y=(2*x.^3+7*x.^2+3*x-1). / (x.^2 - 3*x+5*exp(-x)); %doy la expresión de la salida en función de la entrada % y hago que no se muestre el resultado en pantalla usando ; end La forma de utilizar esa función es muy simple: >>x = [0,1,2]; >>demof(x) ans = 13 -0.2000 >> -68.4920 -37.0280 vii. Gráficas El empleo de gráficas es importante desde la educación inicial hasta la superior, así como para ingenieros y científicos profesionales. El comando fundamental para graficar es plot. Este comando tiene diferentes maneras de ser empleado. Cuando indicamos a MATLAB que grafique, se crea una ventana de Windows separada para realizar la gráfica. Una vez que esta ventana está abierta se reutiliza cuando hacemos gráficos posteriores. Si tenemos dos variables que deseamos representar en los ejes horizontal y vertical, lo conseguimos con plot en la forma: plot(eje horizontal, eje vertical, opciones) Las variables que definen cada eje deben tener la misma cantidad de elementos o se producirá un error. Las opciones se indican entre comillas, y controlan el aspecto de la gráfica. El uso más simple es: >>plot(x,y) lo cual hace un gráfico que pasa por los puntos de coordenadas dadas por x e y, uniéndolos mediante segmentos de línea rectos en color azul. Este modo de gráfica ocurre cuando no se especifica ninguna opción. La escala del gráfico se ajusta automáticamente para poder mostrar todos los valores graficados. Para cambiar el aspecto de la gráfica podemos agregar algún parámetro después de la segunda variable: >>plot(x,y,'*') El haber agregado el asterisco, ‘*’, en lugar de segmentos que unen los puntos obtenemos un asterisco aislado en cada punto de coordenadas ( x, y). La forma general del parámetro es indicar un tipo de línea o símbolo para el trazo y un color. COLOR y m c r g b w k amarillo magenta cian rojo verde azul blanco negro . o x + SIMBOLO punto círculo cruz (x) cruz (+) * asterisco s d v ^ < > p h : -. -- TRAZO sólido punteado punto-raya rayas cuadrado rombo triángulo (abajo) triángulo (arriba) triángulo (izquierda) triángulo (derecha) pentágono hexágono Podríamos poner >>plot(x,y,'*r') 14 lo cual representará, en un sistema de ejes coordenados, los puntos (x, y) mediante asteriscos en color rojo. La ventana de gráficas es bastante independiente del resto de MATLAB. Podemos, por ejemplo grabar una gráfica a través de sus menús. La mayoría de sus características son accesibles a través del menú de edición, pero también se puede controlar por medio de comandos desde MATLAB. Para completar la gráfica: mediante el comando xlabel le ponemos nombre al eje x, ylabel para el eje y, y finalmente con el comando title le ponemos titulo a la gráfica. Para borrar una gráfica: comando clf. Para superponer varias gráficas: comando hold. Para controlar la escala de los ejes: comando axis. Para crear nuevas ventanas de gráfico: comando figure. Otros comandos gráficos importantes: subplot, grid, text Utilice help para obtener una descripción detallada de estos comandos. Asimismo es bueno probar y experimentar para comparar los efectos de cada función. Ejemplo: Deseamos obtener la grafica de la función f ( x ) sin x * e 0.4 x con x de 0 a 10, variando cada 0.2 unidades. Listado en el EDITOR: x = (0:.2:10)' ; %genero un vector x desde 0 a 10 con paso de 0.2 y = sin(x).*exp(-0.4*x); %hallo y a partir de x plot(x,y,'w') grid title('y= f(x)') xlabel('x') ylabel('y') El resultado en MATLAB será: 15 y= f(x) 0.6 0.5 0.4 0.3 y 0.2 0.1 0 -0.1 -0.2 0 1 2 3 4 5 x 6 7 8 9 10 viii. Funciones Avanzadas Se describen a continuación un par de comandos que resultan ser bastante útiles cuando finalmente nos enfrentamos a ciertos problemas específicos. Hallar ceros de funciones Un problema de la forma: F(x) = 0 se puede resolver utilizando el comando fzero de MATLAB. fzero(fun, x) intenta hallar los ceros de la función dada por fun cercanos a x. Para obtener más detalles de la sintaxis help fzero desde el MATLAB. Aproximación de funciones por polinomios Usando polyfit(x,y,n), encontramos los coeficientes de un polinomio p(x) de grado n que “ajusta” los datos, p(x(i)) ≈ y(i). En particular, si tenemos un conjunto de valores y(x) que deseamos aproximar por una recta, utilizamos polyfit con n=1. Los coeficientes son devueltos en grado de creciente (n, n-1, ...). El sentido exacto de lo que entendemos por ajuste y aproximación lo veremos en las prácticas siguientes. 16
Puede agregar este documento a su colección de estudio (s)
Iniciar sesión Disponible sólo para usuarios autorizadosPuede agregar este documento a su lista guardada
Iniciar sesión Disponible sólo para usuarios autorizados(Para quejas, use otra forma )