Practica 1. Introducción a MATLAB David Rozado Fernández Informática Aplicada - Grado en Ingenierı́a Quı́mica, UAM, 2009/2010 1 Fecha en la que se deberı́a haber completado la practica Grupo A: 19 de Febrero Grupo B: 26 de Febrero 2 Objetivos Al finalizar esta práctica se deberı́an haber adquirido conocimientos sobre los siguientes temas de programación en MATLAB: • Funcionalidad básica de la herramienta MATLAB • Variables y operaciones aritméticas 3 Introducción 3.1 ¿Que es MATLAB? MATLAB es la abreviatura de MATrix LABoratory (laboratorio de matrices). Se trata de un software matemático para cálculo cientı́fico (aritmético y simbólico) basado en matrices. MATLAB ofrece un entorno de desarrollo integrado (IDE) muy versátil con un lenguaje de programación propio (lenguaje M). MATLAB está disponible para sistemas operativos Windows, Unix y Apple Mac OS X. Entre sus prestaciones básicas se hallan: • Realizar cálculos aritméticos (como una calculadora). • Realizar calculo simbólico (con la posibilidad de hacer operaciones como derivar funciones, calcular primitivas, etc) y exacto. • Programar en un lenguaje no compilado (script). • Realizar gráficos en dos y tres dimensiones. • La representación de datos y funciones. • La implementación de algoritmos. • La creación de interfaces de usuario (GUI). • La comunicación con programas en otros lenguajes y con otros dispositivos hardware. Las capacidades de MATLAB se pueden ampliar con las llamadas ”cajas de herramientas” o toolboxes. Ası́, por ejemplo, se pueden utilizar toolboxes de Matemáticas y Optimización, Estadı́stica y Análisis de datos, Diseño de sistemas de control y análisis, Procesado de señal y comunicaciones, Procesado de imagen, Pruebas y medidas, Biologı́a computacional, Redes Neuronales Artificiales, Modelado y análisis financiero, Desarrollo de aplicaciones o informes y conexión a bases de datos. En esta primera práctica de la asignatura se va llevar a cabo un tutorial que abarcará los aspectos básicos del entorno MATLAB: comandos básicos, operaciones aritméticas, etc. 1 3.2 Lenguajes interpretados o de scripting En Informática se entiendo por un ’script’ a una serie de órdenes escritas en un determinado lenguaje. Estas ordenes se pasan a un intérprete para que las ejecute. El interprete es a su vez una capa de software que transforma estas órdenes en una serie de instrucciones en lenguaje maquina que se envı́an al hardware para ser ejecutadas. A nivel formal, un script no cumplen la definición de programa porque no es ejecutable por si mismo. Un programa se comunica directamente con el sistema operativo mientras que un script lo hace con un intérprete que a su vez envı́a comandos al sistema operativo o al hardware. En este proceso de comunicación el programa no es el script, el archivo de código, sino el intérprete, que lee lı́nea por lı́nea el código y que no ejecuta la siguiente orden hasta que no ha terminado con la anterior. Esta es la diferencia principal entre los lenguajes basados en código fuente de los lenguajes de scripting. Los primeros son C, C++, Fortran, Ada, Cobol, Pascal... El código fuente escrito es transformado por un compilador en un archivo ejecutable binario que sólo es capaz de entender el ordenador. Los lenguajes de scripting de uso general más conocidos son: Java, Perl, Python y Ruby. Java es un producto creado por la empresa Sun Microsystems. Python, Perl y Ruby son también lenguajes scripting pero pertenecen al denominado Software Libre. Existe una gran variedad en los lenguajes de scripting orientado a matemáticas. Matlab, Maple, Mathematica, Scilab, Octave, Euler, O-Matrix, R o S son lenguajes de scripting. Los más conocidos son Matlab, Mathematica y Maple. No debemos considerar Matlab como únicamente un lenguaje de scripting. El scripting cientı́fico es una gran herramienta que hay que dominar independientemente del programa. Una vez hayamos aprendido a usar Matlab es posible que se tengamos que aprender a utilizar R, orientado a análisis de datos, Scilab u otros muchos. Tareas que nos resultaran relativamente fáciles una vez nos hayamos familiarizado con Matlab. Un lenguaje interpretado se parece a una herramienta que todos conocemos perfectamente, una calculadora. Esta analogı́a no es del todo correcta pero explica perfectamente el uso de Matlab. En el fondo es una calculadora programable con unas posibilidades casi infinitas. Si a esto se suma un lenguaje intuitivo y una gran biblioteca de funciones el resultado es una herramienta verdaderamente útil para ingenieros y cientı́ficos. Esta manera de trabajar no es un invento de Matlab, los lenguajes interpretados ya existı́an mucho antes. Lo que sı́ es novedoso es basar la arquitectura del lenguaje en conceptos matemáticos; entre ellos uno muy importante: la función. Mientras los lenguajes clásicos se basan en subrutinas o objetos, Matlab dispone de una biblioteca formada exclusivamente por funciones. Este diseño tan simple es lo que ha llevado Matlab a su éxito, que no es ni mas ni menos que un acercamiento matemático a la programación orientada a matemáticas. 3.3 Entorno MATLAB Matlab como programa no se limita a un intérprete en una consola, es un entorno de desarrollo al completo o (IDE por sus siglas en ingles). La disposición del entorno es altamente configurable con cada usuario decidiendo que ventanas quiere tener activas en el espacio de trabajo. Al iniciar Matlab nos aparecerá por defecto generalmente la ventana principal con la consola, el navegador de variables y el historial de comandos. Evidentemente lo más importante es la consola o MATLAB Command Window que permite la ejecución ”en lı́nea” de comandos y funciones MATLAB. Todo lo demás, aunque útil, es prescindible y configurable. La figura 1 muestra una configuración posible del entorno de desarrollo MATLAB en un sistema Unix. Una de las caracterı́sticas más importantes del entorno es el diálogo de tı́tulo ’Current Directory’, o ’Directorio de trabajo’. En el siguiente tema aprenderemos que como Matlab se basa en funciones almacenadas en un árbol de directorios es muy importante decirle qué directorio estamos utilizando para trabajar. Si no lo hacemos Matlab encontrará todas las funciones propias del entorno pero no las que estemos escribiendo. El menú ’Desktop’ contiene las opciones de la ventana principal. Podemos escoger entre la vista por defecto de la figura, ver sólo el intérprete, utilizar vista con pestañas, etc. El menú Debug nos permite ’trackear’ un programa paso a paso en busca de errores. La ventana principal no es más que la consola con algunas herramientas adicionales. Para completar un entorno de desarrollo son necesarios dos elementos más: un editor y un navegador de ayuda. El primero aparece cuando editamos un archivo .m desde el gestor de archivos o cuando creamos uno nuevo desde la ventana principal. Su función es facilitar la creación de archivos de código Matlab y para ello cuenta con ’Syntax Highlighting’, tabulado automático, soporte para debugging. . . Hay dos modos de trabajo con MATLAB: • Trabajo interactivo, donde el usuario realiza una consulta (escribe una operación) en la consola (command 2 Figure 1: Entorno MATLAB Matlab Environment window) y el programa la ejecuta; • Trabajo programado (con archivos .m), donde el usuario genera uno o varios ficheros con conjuntos de instrucciones MATLAB, que se pueden ejecutar repetidas veces (con distintos datos) desde el modo interactivo. De esta forma, el usuario puede incrementar las funciones disponibles en MATLAB, añadiendo las suyas propias. En esta primera practica nos centraremos en el trabajo interactivo. 4 4.1 Comandos, variables y funciones básicas en MATLAB Tutorial Arrancad MATLAB y realizad el siguiente tutorial en su ventana de comandos (MATLAB Command Window). Uno de los comandos mas útiles de MATLAB es el comando ’help’. El comando ’help’ muestra ayuda sobre las librerı́as y funciones de MATLAB, ası́ como explicaciones sobre aspectos de la sintaxis del lenguaje de programación M. De este modo, por ejemplo, si se ejecuta: >> help matlab/general se obtiene un listado de todos los comandos de propósito general de MATLAB: comandos para la obtención de 3 información y ayuda sobre la herramienta, gestión de variables en el espacio de trabajo (workspace), edición y gestión de ficheros .m, establecimiento de la ruta (path) de trabajo, uso de comandos del sistema operativo, y depuración de funciones y programas. El sı́mbolo >> es el prompt de MATLAB e indica que esta listo para aceptar ordenes. Para ejecutar una orden basta con escribirla y pulsar la tecla ENTER. >> 2 + 3 ans = 5 El nombre que se asigna por defecto a la variable de salida es ans (abreviatura del inglés, answer): >> ans ans = 5 Si el cálculo se asigna a una variable, el resultado queda almacenado en ella: >> x = 2 + 3 x= 5 Para conocer el valor de una variable, basta teclear su nombre en la linea de comandos de MATLAB: >> x x= 5 Si se añade un punto y coma (;) al final de la instrucción, la máquina no muestra la respuesta... >> y = 5 ∗ 4; ... lo cual no quiere decir que no se haya llevado a cabo el calculo y la asignación del resultado a la variable y. Si ahora tecleamos en el interprete de comandos: >> y y= 20 Las operaciones se evalúan por orden de prioridad: primero las potencias, después las multiplicaciones y divisiones y, finalmente, las sumas y restas. Las operaciones de igual prioridad se evalúan de izquierda a derecha: >> 2/4 ∗ 3 ans = 1.5000 >> 2/(4 ∗ 3) ans = 0.1667 Cuando escribimos programas complejos en ficheros del tipo .m, a veces es necesario o útil documentar el porque o el como de un determinado comando o algoritmo escrito. Utilizando el sı́mbolo ’%’ todo lo escrito a 4 la derecha de este sı́mbolo en un fichero .m o en la consola de comandos es considerado un comentario y el interprete lo ignora. >> x = 3% el interprete no toma en consideracion lo que yo escribo despues de% ans = 3 MATLAB proporciona acceso a las funciones matemáticas habituales. Ası́, por ejemplo, la función coseno, exponencial. . . : >> cos(pi) % pi es una variable con valor predeterminado en MATLAB de 3.14159... ans = -1 >> exp(1) % Función exponencial evaluada en 1, es decir, el número e ans = 2.7183 Además de la variable pi , MATLAB tiene otras variables con valor predeterminado; éste se pierde si se les asigna otro valor distinto. Por ejemplo: >> eps % Épsilon de la máquina. Obsérvese que MATLAB trabaja en doble precisión ans = 2.2204e-016 >> eps = 7 eps = 7 Otro ejemplo de función matemática: la raı́z cuadrada; como puede verse, trabajar con complejos no da ningún tipo de problema. La unidad imaginaria se representa en MATLAB como i o j, variables con dicho valor como predeterminado: >> sqrt(−4) ans = 0+ 2.0000i Es comando ’help’ nos da mas información sobre cualquier función de MATLAB: >> help sqrt El usuario puede controlar el número de decimales con que aparece en pantalla el valor de las variables, sin olvidar que ello no está relacionado con la precisión con la que se hacen los cálculos, sino con el aspecto con que éstos se muestran: >> 1/3 ans = 0.3333 >> f ormat long >> 1/3 ans = 0.33333333333333 >> f ormat % Vuelve al formato estándar que es el de 4 cifras decimales 5 Para conocer las variables que se han usado hasta el momento: >> who Your variables are: ans eps x y o, si se quiere más información (obsérvese que internamente MATLAB trabaja con variables de tipo array, una estructura que analizaremos de forma detallada en la próxima practica): >> whos Name Size Bytes Class ans 1x1 8 double array eps 1x1 8 double array x 1x1 8 double array y 1x1 8 double array Grand total is 4 elements using 32 bytes Para eliminar una variable de la memoria: >> clear y >> who Your variables are: ans eps x Investigar y entender el resultado de ejecutar los siguientes comandos en el interprete de comandos de MATLAB. Haced uso del comando help cuando sea necesario y ejecutarlos de izquierda a derecha y de arriaba a abajo: diary sesion.txt; y = 1 + exp(2 * cos(x)); addpath tic dir delete abs(-1) str = ’Hola Mundo’ str(2) i = sqrt(-4) plot([1 2 3 4],[1 4 9 16]) 5 x=2 y removepath toc cd beep floor(3.8) mayu = upper(str) str(25) imag(i) 5 == 5 x = 2; who helpwin sin(pi/2) cd .. clear log(exp(1)) minu = lower(str) str(3:9) real(i) 5==4 xˆ3 path helpbrowser diary off; copyfile range = 1:0.1:3 pause(2) str(1) ver im=4+5i exit Material a entregar Esta primera practica de forma excepcional no sera evaluada. El objetivo de esta practica es que el alumno se familiarice con el uso de MATLAB. La realización de esta practicara es altamente recomendable ya que su comprensión facilitará la realización de las siguientes practicas que si serán evaluadas. 6