MATLAB / OCTAVE
MANUAL INTRODUCTORIO DE MANEJO DE LA APLICACION
JUNIO 2013
DEPARTAMENTO DE MATEMATICAS
Versión 1.0
MOTIVACION
El presente tutorial se escribe para facilitar el manejo de una herramienta matemática para ayuda en la compresión y desarrollo de actividades de la materias del departamento de matemáticas con enfoque a las áreas de Ingeniería. 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 cálculos con un gran número de datos en cuestión de segundos, es por eso que este tipo de herramientas los consideramos una parte escencial para la mejor compresión y desarrollo de actividades en el área.
RESUMEN
Este tutorial abarca las partes más escenciales comenzando por la parte gráfica, ya que sabemos es la que más llama la atención al momento de llevar a cabo análisis matemáticos tanto sencillos como complejos. Se hace siempre una referencia y descripción del comando, así como mención de algunos de los parámetros más escenciales de uso y un breve ejemplo del manejo del mismo. A pesar de que MATLAB/OCTAVE están orientados a la programación orientada a objetos, este tutorial no trata en detalle los temas relacionados a la POO.
INTRODUCCION
MATLAB/OCTAVE son herramientas desarrolladas para el análisis matemático por computadora, la idea de mencionar estos dos programas, es que ambos están extremamente relacionados con su sintáxis, y una gran parte de los comandos son válidos en ambos. Además se brinda una introducción a una herramienta bajo licencia (MATLAB) y a otra herramienta bajo los parámetros del Código 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 versión bajo licencia, como si cuenta con una versión amparada por el software libre. Los requerimientos para OCTAVE son mínimos , de forma que sistemas con poca memoria puedan llevar a cabo las operaciones de una manera rápida, en el caso de MATLAB, se deberá proceder a contar con la versión correspondiente de JREJAVA, para su buen funcionamiento. Una herramienta de este tipo es simplemente imprescindible para nuestros días, a la vez si te gusta programar podrás ahondar en otros materiales acerca de la programación OO e incluso adaptar programar para trabajar en modo conjunto con MATLAB/OCTAVE. Su espectro de aplicación es amplio, se puede usar tanto para ciencias sociales, ingeniería ambiental, procesos estadísticos, ingeniería electrónica, administración financiera, y muchas más. El grado de conocimiento por parte del lector sobre programación es mínimo, pero es de gran ayuda el conocer lo básico para su perfecta comprensión. A lo largo del tutorial manejaremos el concepto de “prompt”, también 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 (windowsxp, MAC, FreeBSD, Linux, etc...), los ejemplos vistos en este tutorial son llevados a cabo con DEBIANLinux. Pero su funcionamiento es el mismo en cualquier otro sistema. Los ejemplos llevados a cabo, se irán acumulando y conformando en ocasiones un ejemplo más completo, en ocasiones cada línea de código que veas deberás escribirla para poder llevar a cabo el siguiente ejemplo.
PARTE I
USO DE HERRAMIENTAS GRAFICAS
Graficando mediante definición de puntos sobre el eje del dominio
Lo primero que debemos tener cuando hablamos de gráficar es un plano cartesiano, y una función (claro, si vamos a graficiar en dos dimensiones una función real). Así que recuerda que un plano cartesiano se compone de ordenadas y abscisas.
Hay 2 formas de llevar a cabo una gráfica, la primera que veremos, define el rango de visión. Para esto se fija el rango de las abscisas sobre el cual se graficará la función.
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 más grande sea el total de subdivisiones la definición y detalle de la función 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
carácter “ % ” el cual sirve para agregar comentarios, cualquier cosa que escribamos después de él el intérprete 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. También el uso
del carácter “ ; ” se usa para denotar el fin de estatuto o línea de comando.
La siguiente parte con la que debemos de contar es una función, 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 asignándoles un nombre y definiendo o construyendo la expresión a asignarle.
SINTAXIS:
“ NombreDeLaFuncion = expresión_Matemática; ”
Ejemplo:
$> v = 2*cos( t );
El uso de operadores artméticos , así como uso de paréntesis, es muy similar a los que usamos en una calculadora convencional. El signo de “ *” lo usamos para representar una multiplicación, y el uso de los paréntesis para asociar o definir un parámetro de entrega a otra función. En este caso se cuentan ya con funciones predefinidas, en este caso la función trogonométrica coseno, se representa con la abreviación “ cos “, y entre paréntesis se les especifíca el argumento que evaluará.
El siguiente paso que debemos llevar a cabo es la graficación de la función en el rango de 200 puntos que ya hemos definido. Para ello usaremos el siguiente comando. A los valores del eje de las abscisas también se les llama dominio, nombre que se usará de ahora en adelante.
plot . Se usa para graficar una función en pantalla.
SINTAXIS:“ plot ( dominio , función , opciones ) ”
Las opciones son muy variadas dependiendo del comando, de momento usaremos la opción color. Primero veamos la tabla de colores predefinidos y después haremos un ejemplo.
Símbolo Color
y amarillo
m magenta
c cyan
r rojo
g verde
b azul
w blanco
k negro
Ejemplo:
$> plot ( t , v, “m”);
Tener una gráfica ayuda a comprender mejor las cosas, pero si no hemos asignado un título para decir de que es esa gráfica o no describimos que estamos colocando como dominio, o que valor representa la función, no nos es de mucha utilidad tenerla, simplemente sería como un dibujo más para guardar en nuestra carpeta de imagenes.
Así que los siguientes comandos tienen como función etiquetar cada una de las partes que hemos mencionado.
title . Se usa para asignar un título a una gráfica.
SINTAXIS: “ title (' EL TITULO QUE QUEREMOS PONER ') “
Ejemplo:
$> title( ' FUNCION TRIGONOMETRICA COSENO ' );
A continuación, colocaremos las etiquetas para los ejes del dominio y contradominio.
xlabel . Sirve para etiquetar el eje del dominio de la gráfica.
SINTAXIS:“ xlabel ( ' AQUI VA LA ETIQUETA DEL DOMINIO ' ) ”
Ejemplo:
$> xlabel( ' EJE DEL TIEMPO ' );
ylabel . Sirve para etiquetar el eje del contradominio de la gráfica.
SINTAXIS:“ ylabel ( ' AQUI VA LA ETIQUETA DEL CONTRADOMINIO ' ) ”
Ejemplo:
$> ylabel( ' VALOR DE LA FUNCION ' );
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 gráficado no muestre lo que queríamos, o que se muestre parte de la gráfica que no deseabamos mostrar. Para eso usamos el siguiente comando:
axis . Ajusta el rango de visibilidad de la gráfica.
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 según lo ocupemos, para esto se usan los cuadriculados, o enrejados, que dan una visibilidad con la que se puede ver más a detalle cierto cortes o puntos de interés de la gŕafica.
grid . Activa el enrejado (cuadriculado) sobre la gráfica.
SINTAXIS:
“ grid acción ”
La acción puede ser activado – on, ó desactivado – off .Ejemplo:
activa enrejado desactiva enrejado
$> grid on $> grid off
Finalmente podemos decir , que ya tenemos las partes más importantes hechas, pero te has puesto a pensar en algo, ¿ cómo lo vas a grabar?, es decir, ¿ cómo 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 función básica.
print . Se usa para mandar imprimir a impresora ó en su defecto dependiendo del parámetro que se le de, puede ser almacenada en un tipo de archivo gráfico, con el nombre con el que se quiere guardar esa imagen.
Algunos Formatos para guardar archivos imagen
dxf AutoCAD
png Portable Network Graphics
jpg , jpeg JPEG image
gif GIF image
svg Scalable Vector Graphics
pdf Portable Document Format
pbm PBMplus
corel CorelDraw
ps Postcript
SINTAXIS:“ print ( “ nombreDeArchivo.Extensión ” ) ”
Ejemplo:
$> print ( “imagen.png” );
Nota: Se puede también escribir junto con el nombre de archivo, la ruta de directorios donde quiere guardarse la imagen.
Con esto terminamos el primer punto de gráficos mediante definción de un vector de punto, como ha sido el caso de usar el método linspace, que se encarga de definir un vector de puntos sobre el cual podemos graficar una función determinada.
Graficando mediante definición de funciones simbólicas
Existe también manera de no tener que definir primero un rango de dominio para poder llevar a cabo la gráfica de una función, se puede de manera alternativa, definir simbólicamente una función y especificarle el rango para el cual se quiere graficar.
fplot . Se usa para graficar funciones simbólicas, es decir no hay necesidad de definir un dominio, se usa la variable predefinida “ x ” y se puede graficar una función sobre el rango deseado.
SINTAXIS:
“ fplot ( funcion , rango ) ”Ejemplo:
$> fplot(“ sin(x) / x ” , [ 0 , 2*pi ] , “b” );
Este ejemplo, hace uso de la opción color, además maneja también una de las constantes predefinidas , que representa el valor de 3.1416 – pi .
Si en algún momento es necesario que cierres una gráfica desde el prompt, basta con escribir “close”.
Ejemplo: $> close ;
Todas las funciones vistas para etiquetas en el punto anterior son válidas. Es también posible, como se vio anteriormente, definir la función, y después 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 matemáticas básicas , por mencionar algunas de ellas y distinguirlas mejor durante este tutorial, se exponen en la siguiente tabla.
Funciones Matemáticas Elementales
acos(x) coseno inverso
asin(x) seno inverso
atan(x) tangente inversa
cos(x) coseno
sin(x) seno
tan(x) tangente
exp(x) exponencial
log(x) logaritmo natural
log10(x) logaritmo base diez
sqrt(x) raíz cuadrada
round(x) redondeo al numero superior
conj(x) complejo conjugado
abs(x) valor absoluto
sinh(x) seno hiperbólico
Podemos también colocar aparte de las etiquetas, texto adicional a nuestra gráfica, sólo tenemos que indicar la posición, para esto con el mouse si lo movemos sobre la gráfica nos indica el posicionamiento en coordenadas en la parte inferior izquierda de la pantalla.
text. Se usa para colocar texto en la gráfica en una coordenada específica.
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 después 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 gráfica sin necesidad de especificarle las coordenadas de ubicación, ś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 gráfica' ) ”
Ejemplo:
$> gtext ( ' Texto opcional ' );
Existen muchas funcionalidades al graficar, conforme vayamos viendo más ejemplos, presentaremos las más posibles (es recomendable visitar las páginas en línea que contienen las librerías de comandos con todas las especificaciones,recuerda que el propósito de este tutorial es darte las herramientas básicas para las tareas de uso común en la universidad).
Finalmente para terminar esta sección, presentaremos un último ejemplo, que muestra algunas de las bondades de estos programas de aplicación 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' ) % círculo 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 dimensión 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 polígono con un color en especial, en este caso rojo.
Nos falta por cubrir un tema más de graficación , que es la graficación de datos a partir de un archivo, y observar los tipos de interpolación respectiva para emplearse. Pero antes de continuar, veremos otros tipos de gráficas que pueden hacerse, tanto en dominio complejo, como en 3 dimensiones, y otros gráficos especiales, así como opciones de comando más empleadas (al menos de las que uso a diario en los proyectos o trabajos que hago).
GRAFICOS DE FUNCIONES VECTORIALES Y GRAFICACIÓN 3D
El graficar funciones complejas, es también un aspecto importante en algunos casos, la representación polar, se encuentra ya implementada y nos permite graficar funciones de una manera rápida.
polar . Grafica en coordenadas polares, estás 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 carácter opcional que describe el color de la gráfica.
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 ( ' . ' ), este se
usa en multiplicaciones entre vectores, hay que recordar que ”t” es un vector y por lo tanto las funciones “sen(2t)” y “cos(2t)” son vectores.
Otra forma de graficar datos de números complejos es usando la función “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 según el número de ejes(Ej.: Dos componetes en R2).
En el siguiente ejemplo se hace uso de la función “eig” y la función “randn” , eig regresa eigenvalores asociados a una matriz, en un vector. La función randn se encarga sólo 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 3D y observar algunos comandos nuevos para este tipo de gráficos. Aprovecharé y cambiaré mi prompt conforme lo usa mi máquina para pasar los ejemplos tal cual se están 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 3D.
eps. Denota el más pequeño número cuando añade un 1 para crear un numero de punto flotante más grande que 1 en la computadora.
peaks.Los puntos más altos o valores cresta de una función.
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 línea, 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 vértice 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 tendría línea de unión para los vértices de la base de la letra.
Vértices por columna de la letra Ty 8 8 4 4 16 16 12 12 8
z 1 10 10 13 13 10 10 1 1
x 9 0 0 0 0 0 0 0 0
Para llevar a cabo esto en Octave haría 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, debería de hacer lo mismo con otra capa sobrepuesta de la letra T y unida con aristas entre cada vértice, puede
hacerlo usando la función hold, o si lo prefiere haga un recorrido viendo cada vértice 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 haría lo siguiente:
octave:38> x = [ 0 0 0 0 0 0 0 0 0 4 4 0 4 4 0 4 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 8 4 4 4 4 4 4 16 16 16 16 16 16 12 12 12 12 12 12 8];octave:40> z = [ 1 10 10 13 13 10 10 1 1 1 10 10 10 10 10 10 13 13 13 13 13 13 10 10 10 10 10 10 1 1 1 1 ];octave:41> plot3(x,y,z);octave:42> grid on;octave:44> title('GRAFICA DE LA LETRA T');
De esta forma, puede proceder a graficar objetos en 3D uniendo los vértices de la figura que desee dibujar.
Otra manera es ver las funciones en términos de las otras variables, es decir si tiene la ecuación del plano siguiente:
3x + 2y z = 15
Lo primero que se debe hacer es dejar z en función de sus variables. Es decir una función z(x,y).
z = 3x + 2y 15
Teniendo esto, sólo necesita definir el entrerrejado para dibujar la función.
octave:38> x = y = 10:0.2:10;octave:39> [ X , Y ] = meshgrid(x,y);octave:40> % finalmente la ecuación del planooctave:41> Z = 3.*X + 2.*Y 15;octave:42> mesh(X,Y,Z);octave:44> title('GRAFICA DEL PLANO');
Para graficar cualquier otra función 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 dirección. En la parte I se vio como graficar un vector por medio de la función compass, en esta parte veremos como definirlo mediante un arreglo y además como realizar las operaciones básicas 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 más básicas 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 VECTORESoctave:38> u = [ 3 4 8];octave:39> e = [ 2 7 3]octave:40> s = u + eoctave:41> s = 1 11 5octave:42> r = u – eoctave:44> r = 5 3 11
Los vectores también tienen longitud, además 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.4340octave:41> dot(u,e)octave:42> ans = 2octave: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 número de renglones y su número de columnas. Si por ejemplo quiere definir una matriz con varios renglones el separador para saltar renglón es el punto y coma ' ; '.
Las operaciones de suma y resta son similares, sólo que se debe cumplir con la condición que las matrices sean del mismo orden para llevar a cabo estas operaciones básicas.
Vea como se definen las siguientes 2 matrices:
DEFINICIÓN DE MATRICESoctave: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 MATRICESoctave:105> A+Bans =
2 5 2 9 13 8 3 1 0
octave:106> A Bans =
0 1 4 1 1 8 1 5 2
octave:107>
Otra operación importante es la multiplicación. Recuerde que para poder realizar está operación el número de renglones de la primer matriz debe ser igual al número de renglones de la segunda matriz. En el caso de las matrices anteriores que son de orden 3x3 la multiplicación puede llevarse a cabo. Vea el siguiente ejemplo:
MULTIPLICACIÓN DE MATRICESoctave:107> A*Bans =
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:
SELECCIÓN DE ELEMENTOS DE UNA MATRIZoctave:108> AA =
1 2 3 5 7 8 2 3 1
octave:109> % Obtener el elemento de segundo renglon, tercer columna, el 8octave:109> A(2,3)ans = 8octave:110> %Obtener el renglón 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 comodín, significa todo. Por ejemplo en la obtención de columna, se le dice obten todos los renglones de la columna 1, empleando el comando A(:,1) .