MATLAB / OCTAVE
MANUAL INTRODUCTORIO DE MANEJO DE LA APLICACION
JUNIO 2013
DEPARTAMENTO DE MATEMATICAS
Versin 1.0
MOTIVACION El presente tutorial se escribe para facilitar el manejo de una herramienta matemtica para ayuda en la compresin y desarrollo de actividades de la materias del departamento de matemticas con enfoque a las reas de Ingeniera. En nuestros tiempos el uso de computadoras y software nos ofrece una gran ventaja sobre nuestras generaciones anteriores, al permitirnos emplear herramienta que permite visualizar y hacer clculos con un gran nmero de datos en cuestin de segundos, es por eso que este tipo de herramientas los consideramos una parte escencial para la mejor compresin y desarrollo de actividades en el rea. RESUMEN Este tutorial abarca las partes ms escenciales comenzando por la parte grfica, ya que sabemos es la que ms llama la atencin al momento de llevar a cabo anlisis matemticos tanto sencillos como complejos. Se hace siempre una referencia y descripcin del comando, as como mencin de algunos de los parmetros ms escenciales de uso y un breve ejemplo del manejo del mismo. A pesar de que MATLAB/OCTAVE estn orientados a la programacin orientada a objetos, este tutorial no trata en detalle los temas relacionados a la POO.
INTRODUCCION MATLAB/OCTAVE son herramientas desarrolladas para el anlisis matemtico por computadora, la idea de mencionar estos dos programas, es que ambos estn extremamente relacionados con su sintxis, y una gran parte de los comandos son vlidos en ambos. Adems se brinda una introduccin a una herramienta bajo licencia (MATLAB) y a otra herramienta bajo los parmetros del Cdigo Abierto con licencia GPL General Public License (OCTAVE). De est manera el lector tiene la oportunidad de probar los conocimientos adquiridos en este tutorial, tanto si cuenta con una versin bajo licencia, como si cuenta con una versin amparada por el software libre. Los requerimientos para OCTAVE son mnimos , de forma que sistemas con poca memoria puedan llevar a cabo las operaciones de una manera rpida, en el caso de MATLAB, se deber proceder a contar con la versin correspondiente de JRE-JAVA, para su buen funcionamiento. Una herramienta de este tipo es simplemente imprescindible para nuestros das, a la vez si te gusta programar podrs ahondar en otros materiales acerca de la programacin OO e incluso adaptar programar para trabajar en modo conjunto con MATLAB/OCTAVE. Su espectro de aplicacin es amplio, se puede usar tanto para ciencias sociales, ingeniera ambiental, procesos estadsticos, ingeniera electrnica, administracin financiera, y muchas ms. El grado de conocimiento por parte del lector sobre programacin es mnimo, pero es de gran ayuda el conocer lo bsico para su perfecta comprensin. A lo largo del tutorial manejaremos el concepto de prompt, tambin usaremos el concepto de CLI Command Line Interpreter, con esto hacemos referencia a la ventana de entrada de comandos, nuestra rea de trabajo en la cual estaremos introduciendo todos los comandos de trabajo. As que cuando mencionemos el CLI o prompt, haz uso de la ventana de comandos de tu computadora. Puedes usar el sistema operativo de tu preferencia para esto (windows-xp, MAC, FreeBSD, Linux, etc...), los ejemplos vistos en este tutorial son llevados a cabo con DEBIAN-Linux. Pero su funcionamiento es el mismo en cualquier otro sistema. Los ejemplos llevados a cabo, se irn acumulando y conformando en ocasiones un ejemplo ms completo, en ocasiones cada lnea de cdigo que veas debers escribirla para poder llevar a cabo el siguiente ejemplo.
PARTE I USO DE HERRAMIENTAS GRAFICAS
Graficando mediante definicin de puntos sobre el eje del dominio
Lo primero que debemos tener cuando hablamos de grficar es un plano cartesiano, y una funcin (claro, si vamos a graficiar en dos dimensiones una funcin real). As que recuerda que un plano cartesiano se compone de ordenadas y abscisas.
Hay 2 formas de llevar a cabo una grfica, la primera que veremos, define el rango de visin. Para esto se fija el rango de las abscisas sobre el cual se graficar la funcin. linspace .-Define el rango de valores sobre una variable independiente (eje del dominio), con un inicio y un fin de rango, as como el total de subdivisiones dentro de ese rango. No define un rango continuo, entre ms grande sea el total de subdivisiones la definicin y detalle de la funcin ser mejor.
SINTAXIS:
linspace ( inicio, fin, numero_de_subdivisiones)
Ejemplo: $> t = linspace( 0 , 7.854, 200); % t variable independiente
Esto nos dar un rango de 0 a 7.854, con 200 subdivisiones en medio. Hay dos puntos que debemos observar del ejempo anterior, el uso del carcter % el cual sirve para agregar comentarios, cualquier cosa que escribamos despus de l el intrprete no lo tomar en cuenta. El segundo punto es la variable t , a esta se le asignan nuestros 200 puntos del eje de las abscisas en forma de un vector con 200 elementos. Tambin el uso del carcter ; se usa para denotar el fin de estatuto o lnea de comando. La siguiente parte con la que debemos de contar es una funcin, es la que dar el valor para la ordena en el plano cartesiano, y asignar un valor a cada valor de los 200 puntos de las abscisas, es decir tendremos 200 valores de ordenas. Para llevar a cabo esto debemos definir funciones.
Funciones .- Las funciones se definen asignndoles un nombre y definiendo o construyendo la expresin a asignarle. SINTAXIS: NombreDeLaFuncion = expresin_Matemtica; Ejemplo: $> v = 2*cos( t );
El uso de operadores artmticos , as como uso de parntesis, es muy similar a los que usamos en una calculadora convencional. El signo de * lo usamos para representar una multiplicacin, y el uso de los parntesis para asociar o definir un parmetro de entrega a otra funcin. En este caso se cuentan ya con funciones predefinidas, en este caso la funcin trogonomtrica coseno, se representa con la abreviacin cos , y entre parntesis se les especifca el argumento que evaluar. El siguiente paso que debemos llevar a cabo es la graficacin de la funcin en el rango de 200 puntos que ya hemos definido. Para ello usaremos el siguiente comando. A los valores del eje de las abscisas tambin se les llama dominio, nombre que se usar de ahora en adelante. plot .- Se usa para graficar una funcin en pantalla.
SINTAXIS: plot ( dominio , funcin , opciones ) Las opciones son muy variadas dependiendo del comando, de momento usaremos la opcin color. Primero veamos la tabla de colores predefinidos y despus haremos un ejemplo.
Smbolo y m c r g b w k
Color amarillo magenta cyan rojo verde azul blanco negro
Ejemplo: $> plot ( t , v, m);
Tener una grfica ayuda a comprender mejor las cosas, pero si no hemos asignado un ttulo para decir de que es esa grfica o no describimos que estamos colocando como dominio, o que valor representa la funcin, no nos es de mucha utilidad tenerla, simplemente sera como un dibujo ms para guardar en nuestra carpeta de imagenes. As que los siguientes comandos tienen como funcin etiquetar cada una de las partes que hemos mencionado. title .- Se usa para asignar un ttulo a una grfica. SINTAXIS: title (' EL TITULO QUE QUEREMOS PONER ') Ejemplo: $> title( ' FUNCION TRIGONOMETRICA COSENO ' );
A continuacin, colocaremos las etiquetas para los ejes del dominio y contradominio. xlabel .- Sirve para etiquetar el eje del dominio de la grfica. SINTAXIS: Ejemplo: xlabel ( ' AQUI VA LA ETIQUETA DEL DOMINIO ' )
$> xlabel( ' EJE DEL TIEMPO ' );
ylabel .- Sirve para etiquetar el eje del contradominio de la grfica. SINTAXIS: Ejemplo: $> ylabel( ' VALOR DE LA FUNCION ' );
ylabel ( ' AQUI VA LA ETIQUETA DEL CONTRADOMINIO ' )
El siguiente punto interesantesobre graficar funciones , es referente a como se pueden cambiar los rangos del dominio y contradominio. Puede ser que lo que hallamos grficado no muestre lo que queramos, o que se muestre parte de la grfica que no deseabamos mostrar. Para eso usamos el siguiente comando: axis .- Ajusta el rango de visibilidad de la grfica. SINTAXIS: axis ( [ x_inicio, x_fin, y_inicio, y_fin ] ) Ejemplo:
$> axis ( [ 3, 6, -3, 3 ] );
Otra funcionalidad especial es el cuadriculado, en ocasiones nos interesan zonas especiales sobre el plano, en vez de tener un fondo blanco sobre el cual no podemos distinguir algun valor del eje del dominio o contradominio segn lo ocupemos, para esto se usan los cuadriculados, o enrejados, que dan una visibilidad con la que se puede ver ms a detalle cierto cortes o puntos de inters de la gafica.
grid .- Activa el enrejado (cuadriculado) sobre la grfica. SINTAXIS: grid accin La accin puede ser activado on, desactivado off .
Ejemplo:
activa enrejado $> grid on
desactiva enrejado $> grid off
Finalmente podemos decir , que ya tenemos las partes ms importantes hechas, pero te has puesto a pensar en algo, cmo lo vas a grabar?, es decir, cmo haces para guardar la imagen a un archivo directamente y luego poder usarla para una tarea, proyecto o documento?. Es aqu donde usamos una ltima funcin bsica.
print .- Se usa para mandar imprimir a impresora en su defecto dependiendo del parmetro que se le de, puede ser almacenada en un tipo de archivo grfico, con el nombre con el que se quiere guardar esa imagen. Algunos Formatos para guardar archivos imagen dxf png jpg , jpeg gif svg pdf pbm corel ps SINTAXIS: print ( nombreDeArchivo.Extensin ) Ejemplo: AutoCAD Portable Network Graphics JPEG image GIF image Scalable Vector Graphics Portable Document Format PBMplus CorelDraw Postcript
$> print ( imagen.png ); Nota: Se puede tambin escribir junto con el nombre de archivo, la ruta de
directorios donde quiere guardarse la imagen.
Con esto terminamos el primer punto de grficos mediante defincin de un vector de punto, como ha sido el caso de usar el mtodo linspace, que se encarga de definir un vector de puntos sobre el cual podemos graficar una funcin determinada.
Graficando mediante definicin de funciones simblicas
Existe tambin manera de no tener que definir primero un rango de dominio para poder llevar a cabo la grfica de una funcin, se puede de manera alternativa, definir simblicamente una funcin y especificarle el rango para el cual se quiere graficar. fplot .- Se usa para graficar funciones simblicas, es decir no hay necesidad de definir un dominio, se usa la variable predefinida x y se puede graficar una funcin sobre el rango deseado. SINTAXIS: fplot ( funcion , rango ) Ejemplo: $> fplot( sin(x) / x , [ 0 , 2*pi ] , b ); Este ejemplo, hace uso de la opcin color, adems maneja tambin una de las constantes predefinidas , que representa el valor de 3.1416 pi .
Si en algn momento es necesario que cierres una grfica desde el prompt, basta con escribir close.
Ejemplo: $> close ; Todas las funciones vistas para etiquetas en el punto anterior son vlidas. Es tambin posible, como se vio anteriormente, definir la funcin, y despus usar fplot para mandar graficar, ejemplo: $> fx = '2*exp(-x)*sin(x)'; $> fplot( fx , [ 0, 8 ] );
Como se ha podido obsevar se hace uso de muchas funciones matemticas bsicas , por mencionar algunas de ellas y distinguirlas mejor durante este tutorial, se exponen en la siguiente tabla.
Funciones Matemticas Elementales acos(x) asin(x) atan(x) cos(x) sin(x) tan(x) exp(x) log(x) log10(x) sqrt(x) round(x) conj(x) abs(x) sinh(x) coseno inverso seno inverso tangente inversa coseno seno tangente exponencial logaritmo natural logaritmo base diez raz cuadrada redondeo al numero superior complejo conjugado valor absoluto seno hiperblico
Podemos tambin colocar aparte de las etiquetas, texto adicional a nuestra grfica, slo tenemos que indicar la posicin, para esto con el mouse si lo movemos sobre la grfica nos indica el posicionamiento en coordenadas en la parte inferior izquierda de la pantalla. text.- Se usa para colocar texto en la grfica en una coordenada especfica. SINTAXIS: text ( x , y , ' texto_a_colocar ' ) Ejemplo: $> text ( 3.4 , 0.5 , 'FUNCION A ' );
Puede ser algo incomodo andar buscando coordenadas , no?, afortunadamente existe otro comando, que permite escribas el texto, y despus con el puntero del mouse, selecciones en que rea quieres poner el texto y con un click dejas el texto donde quieres. gtext .- Permite colocar texto en una grfica sin necesidad de especificarle las coordenadas de ubicacin, olo se requiere hacer uso del apuntador del mouse y con un click indicar donde se quiere dejar el texto.
SINTAXIS:
gtext ( 'texto que deseas colocar en la grfica' )
Ejemplo: $> gtext ( ' Texto opcional ' );
Existen muchas funcionalidades al graficar, conforme vayamos viendo ms ejemplos, presentaremos las ms posibles (es recomendable visitar las pginas en lnea que contienen las libreras de comandos con todas las especificaciones,recuerda que el propsito de este tutorial es darte las herramientas bsicas para las tareas de uso comn en la universidad). Finalmente para terminar esta seccin, presentaremos un ltimo ejemplo, que muestra algunas de las bondades de estos programas de aplicacin para hacer trazos o figuras llamativas, que pueden usarse para otros casos.
$> t = (1/8:2/8:15/8)'*pi; %vector columna $> x = sin(t); $> y = cos(t); $> fill( x , y , 'r' ) % crculo relleno de rojo de 8 puntos $> axis('square') $> text(-.11 , 0, 'ALTO') $> title( ' LETRERO DE ALTO ' )
Como se puede observar , con el comando axis , se hace uso de la propiedad square . La cual se encarga de dar la misma dimensin en el eje de las ordenas y las abcisas, de forma que quede como un cuadrado. El siguiente comando es fill , este se encarga de rellenar una figura cerrada o polgono con un color en especial, en este caso rojo. Nos falta por cubrir un tema ms de graficacin , que es la graficacin de datos a partir de un archivo, y observar los tipos de interpolacin respectiva para emplearse. Pero antes de continuar, veremos otros tipos de grficas que pueden hacerse, tanto en dominio complejo, como en 3 dimensiones, y otros grficos especiales, as como opciones de comando ms empleadas (al menos de las que uso a diario en los proyectos o trabajos que hago).
GRAFICOS DE FUNCIONES VECTORIALES Y GRAFICACIN 3D
El graficar funciones complejas, es tambin un aspecto importante en algunos casos, la representacin polar, se encuentra ya implementada y nos permite graficar funciones de una manera rpida. polar .- Grafica en coordenadas polares, ests se crean usando el comando polar( t , r , S ) , donde:
t: Es el ngulo vector en radianes, r: Es el vector en radianes, y S: Es un carcter opcional que describe el color de la grfica.
Ejemplo: $> t = 0:0.01:2*pi; $> r = sin( 2 * t ).*cos( 2 * t ); $> polar( t , r ) $> title( ' GRAFICA POLAR DE sen(2t)cos(2t) ' )
Algo a observar en este ejemplo, es el uso del punto ( '
usa en multiplicaciones entre vectores, hay que recordar vector y por lo tanto las funciones sen(2t) y cos(2t) son vectores.
. ' ), este se que t es un
Otra forma de graficar datos de nmeros complejos es usando la funcin compass, este dibuja un vector, recordemos que un vector tiene un magnitud y un ngulo, justo lo que denota un punto complejo, es decir se descompone segn el nmero de ejes(Ej.: Dos componetes en R2). En el siguiente ejemplo se hace uso de la funcin eig y la funcin randn , eig regresa eigenvalores asociados a una matriz, en un vector. La funcin randn se encarga slo de generar esos valores de manera aleatoria, en este caso una matriz cuadrada de 20x20. Ejemplo: $> z = eig( randn ( 20 , 20 ) ); $> compass( z ); $> title( ' GRAFICA DE EIGENVALORES DE UN MATRIZ ALEATORIA ');
Ahora podemos pasar a hacer un ejemplo en 3-D y observar algunos comandos nuevos para este tipo de grficos. Aprovechar y cambiar mi prompt conforme lo usa mi mquina para pasar los ejemplos tal cual se estn haciendo en la computadora.
Ejemplo: octave:38> x = -7.5:0.5:7.5; octave:39> y=x; octave:40> [X,Y]=meshgrid(x,y); octave:41> R=sqrt(X.^2+Y.^2)+eps; octave:42> Z=sin(R)./R; octave:43> mesh(peaks); octave:44> title('GRAFICA DE LOS PICOS DE UNA FUNCION');
Algunos puntos a observar aqu son: meshgrid.- Crea una matriz X cuyos renglones son copias de un vector x, y una matriz Y cuyas columnas son copias del vector y. mesh.- Grafica en 3-D. eps.- Denota el ms pequeo nmero cuando aade un 1 para crear un numero de punto flotante ms grande que 1 en la computadora. peaks.-Los puntos ms altos o valores cresta de una funcin.
Aqu se han observado varios comandos, sin embargo una manera sencilla de llevar esto a cabo es con el comando plot3( ) . Este comando permite unir puntos en 3 dimensiones mediante una lnea, por ejemplo suponga que se quiere dibujar una T en 3 dimensiones.
Primero debemos fijar un punto fijo en x, supongamos que para todas las combinaciones de punto en (y,z) sea x=0. Tomemos y como el eje horizontal y z como el eje vertical. Empezando con y=8 y z=1 en sentido de las manecillas del reloj, tenemos los siguientes arreglos: y=[8 8 4 4 16 16 12 12 8 ]
z = [ 1 10 10 13 13 10 10 1 1 ] Como x mantiene su valor fijo, x=[0 0 0 0 0 0 0 0 0]
Si se ve como un arreglo matricial, las columnas identifican cada vrtice de la letra T. Observe que el primer punto se repite al inico y al final, esto debido a que el comando plot3() debe recorrer cada arista para
poderla graficar, sino lo hiciera la base de la letra T no tendra lnea de unin para los vrtices de la base de la letra. Vrtices por columna de la letra T y z x 8 1 9 8 10 0 4 10 0 4 13 0 16 13 0 16 10 0 12 10 0 12 1 0 8 1 0
Para llevar a cabo esto en Octave hara lo siguiente:
octave:38> x = [ 0 0 0 0 0 0 0 0 0]; octave:39> y = [ 8 8 4 4 16 16 12 12 8 ]; octave:40> z = [ 1 10 10 13 13 10 10 1 1 ]; octave:41> plot3(x,y,z); octave:42> grid on; octave:44> title('GRAFICA DE LA LETRA T');
Para darle profundidad a la letra, debera de hacer lo mismo con otra capa sobrepuesta de la letra T y unida con aristas entre cada vrtice, puede
hacerlo usando la funcin hold, o si lo prefiere haga un recorrido viendo cada vrtice como nodo en un grafo, pero recuerde que debe pasar por cada arista hasta completar todo el recorrido llegando nuevamente al punto inicial.
octave:38> x = [ 0 0 0 0 0 0 0 0 0 -4 -4 ]; octave:39> y = [ 8 8 4 4 16 16 12 12 8 8 4 ]; octave:40> z = [ 1 10 10 13 13 10 10 1 1 10 10 ]; octave:41> plot3(x,y,z); octave:42> grid on; octave:44> title('GRAFICA DE LA LETRA T'); Para graficar las aristas restantes de la otra cara, se hara lo siguiente:
octave:38> x = [ 0 0 0 0 0 0 0 0 0 -4 -4 0 -4 -4 0 -4 0 -4 -4 0 -4 -4 0 -4 -4 0 -4 -4 0 -4 -4]; octave:39> y = [ 8 8 4 4 16 16 12 12 8 8 8 8 4 4 4 4 4 4 16 16 16 16 16 16 12 12 12 12 12 8]; octave:40> z = [ 1 10 10 13 13 10 10 1 1 1 10 10 10 10 10 13 13 13 13 13 13 10 10 10 10 10 10 1 1 1 ]; octave:41> plot3(x,y,z); octave:42> grid on; octave:44> title('GRAFICA DE LA LETRA T');
-4 8 12 10 1
De esta forma, puede proceder a graficar objetos en 3D uniendo los vrtices de la figura que desee dibujar. Otra manera es ver las funciones en trminos de las otras variables, es decir si tiene la ecuacin del plano siguiente: 3x + 2y -z = 15 Lo primero que se debe hacer es dejar z en funcin de sus variables. Es decir una funcin z(x,y). z = 3x + 2y -15 Teniendo esto, slo necesita definir el entrerrejado para dibujar la funcin.
octave:38> x = y = -10:0.2:10; octave:39> [ X , Y ] = meshgrid(x,y); octave:40> % finalmente la ecuacin del plano octave:41> Z = 3.*X + 2.*Y -15; octave:42> mesh(X,Y,Z); octave:44> title('GRAFICA DEL PLANO');
Para graficar cualquier otra funcin es el mismo procedimiento.
PARTE II VECTORES Y MATRICES
DEFINIENDO VECTORES Y SUS OPERACIONES
Cuando hablamos de vectores, pensamos en un segmento de recta definido por 2 puntos, es decir un segmento de recta con magnitud y una direccin. En la parte I se vio como graficar un vector por medio de la funcin compass, en esta parte veremos como definirlo mediante un arreglo y adems como realizar las operaciones bsicas con vectores. Para definir un vector, puede hacerlo de la siguiente manera:
u = [ 3 4 8] Este vector tiene valor en la componente i de 3, en j de 4 y en k de 8. = 3i + 4j + 8k Las operaciones ms bsicas son suma y resta, si tiene otro vector por ejemplo: = -2i + 7j - 3k Se puede proceder ha hacer la suma y resta de la siguiente forma: SUMA Y RESTA DE VECTORES octave:38> u = [ 3 4 8]; octave:39> e = [ -2 7 -3] octave:40> s = u + e octave:41> s = 1 11 5 octave:42> r = u e octave:44> r = 5 -3 11
Los vectores tambin tienen longitud, adems de poder realizar operaciones como producto punto y producto cruz con los siguientes comandos: LONGITUD DE UN VECTOR, PRODUCTO PUNTO Y CRUZ octave:38> u = [ 3 4 8]; octave:39> norm(u) octave:40> ans = 9.4340 octave:41> dot(u,e) octave:42> ans = -2 octave:44> cross(u,e) octave:45> ans = -68 -7 29
MATRICES Y SUS OPERACIONES
Cuando hablamos de matrices, pensamos en arreglos de vectores con la misma cantidad de elementos. Su orden sabemos que est definido por su nmero de renglones y su nmero de columnas. Si por ejemplo quiere definir una matriz con varios renglones el separador para saltar rengln es el punto y coma ' ; '. Las operaciones de suma y resta son similares, slo que se debe cumplir con la condicin que las matrices sean del mismo orden para llevar a cabo estas operaciones bsicas. Vea como se definen las siguientes 2 matrices:
DEFINICIN DE MATRICES octave:100> A = [1 2 3 ; 5 7 8; 2 3 -1] A= 1 2 3 5 7 8 2 3 -1 octave:101> B = [ 1 3 -1 ; 4 6 0 ;1 -2 1] B= 1 3 -1 4 6 0 1 -2 1 octave:102> SUMA Y RESTA DE MATRICES octave:105> A+B ans = 2 5 2 9 13 8 3 1 0 octave:106> A -B ans = 0 -1 4 1 1 8 1 5 -2 octave:107>
Otra operacin importante es la multiplicacin. Recuerde que para poder realizar est operacin el nmero de renglones de la primer matriz debe ser igual al nmero de renglones de la segunda matriz. En el caso de las matrices anteriores que son de orden 3x3 la multiplicacin puede llevarse a cabo. Vea el siguiente ejemplo: MULTIPLICACIN DE MATRICES octave:107> A*B ans = 12 9 2 41 41 3 13 26 -3 octave:108>
Octave cuenta con una herramienta que le permite obtener ciertos renglones o columnas en rango, o simplemente llamar a un elemento determinado. Por ejemplo observe las siguientes funcionalidades: SELECCIN DE ELEMENTOS DE UNA MATRIZ octave:108> A A= 1 2 3 5 7 8 2 3 -1 octave:109> % Obtener el elemento de segundo renglon, tercer columna, el 8 octave:109> A(2,3) ans = 8 octave:110> %Obtener el rengln 3 [2 3 -1]
octave:110> A(3,:) ans = 2 3 -1 octave:111> %Obtener columna 1 [1 5 2] octave:111> A(:,1) ans = 1 5 2 octave:112>
Como puede observar el comando ':' se emplea como un comodn, significa todo. Por ejemplo en la obtencin de columna, se le dice obten todos los renglones de la columna 1, empleando el comando A(:,1) .