Tutorial GNU OCTAVE
Sobre Octave: GNU OCTAVE se puede definir como un lenguaje de alto nivel inspirado en un software comercial llamado MATLAB (MATrix LABoratory), y estuvo pensado inicialmente para que estudiantes de Ingeniera Qumica de las Universidades de Wisconsin-Madison y Texas calcularan reacciones qumicas. GNU OCTAVE es un lenguaje que se utiliza principalmente para realizar experimentos numricos, como por ejemplo permite determinar soluciones numricas de problemas lineales y no lineales. Tambin proporciona herramientas para la elaboracin y manipulacin de grficas que permiten la visualizacin y manipulacin de datos. Actualmente se le han incorporado libreras y funcionalidades, que nos permiten trabajar en varias reas del conocimiento como son el procesamiento de seales (sonido), de imgenes (filtrados, anlisis, etc.), estadstica, geometra, redes neuronales, sistemas de control realimentados y en dibujo vectorial entre otros. Estas libreras, se pueden programar de forma interpretada, usando el propio lenguaje de OCTAVE, o usando cualquier otro lenguaje como por ejemplo el C/C++.
PARTE A Manual deInstalacion Gnu Octave
1- El primer paso que se debe realizar es descargar el archivo de instalacion de octave para el sistema windows XP, que puede ser descargado de la pagina inicial de Octave: http://www.gnu.org/software/octave/, en el link download.
Fig 1. Pagina inicial Gnu Octave.
Fig 2. Archivo de instalacin descargado.
2- Luego de ser descargado se ejecuta el archivo de instalacin, el cual muestra el asistente de instalacin de Gnu Octave.
3- Posterior a iniciar el asistente de instalacin, dando click en el botn next, muestra los trminos de licencia, basados en la General Public Licence, click en el botn next.
4- Se selecciona la ruta de instalacion de Octave. Por defecto es: C:\Octave\3.2.4_gcc-4.4.0, si se desea cambiar, click en el boton Browse y seleccionar la ruta deseada.
5- Posterior a la seleccin de la ruta de instalacin, se seleccionan los componentes de Gnu Octave con los cuales se va a trabajar, dentro de los cuales encontramos: Bioinformatica, gnuplot, procesamiento de imgenes y seales, entre otros. Adems de esto octave requiere seleccionar las libreras para algebra lineal de los diferentes tipos de CPU, en este caso si no se conoce en detalle se selecciona Generic.
6- Se establece la carpeta de inicio para Gnu Octave y click en el botn install.
7- Para finalizar el proceso de instalacin se da click en el botn Finish y se ejecuta Gnu Octave, el cual muestra la ventana de comandos para iniciar a trabajar.
PARTE A
TRABAJANDO CON OCTAVE
Octave fue creado para trabajar con matrices, siendo esta una de las caractersticas ms importantes de esta herramienta. Por lo cual todos las variables con las que se trabaja estarn representadas en forma matricial. Adems Octave tiene la capacidad de trabajar con el conjunto de los nmeros complejos. Por ejemplo, ingrese los siguientes comandos en la consola de Octave: a=5 b = 10 c = a*5 d = c + 10 e = d + 3i whos
Observe en la siguiente figura que a,b,c y d, con matrices cuyo tamao es de 1 fila y 1 columna.
Para definir matrices en Octave, se debe indicar entre corchetes los valores numricos de cada una de las posiciones de la matriz, separados por espacio para indicar una nueva columna y con punto y coma para indicar una nueva fila. Recuerde tambin que un vector es una matriz de una fila y n columnas. En la consola de Octave ingrese los siguientes comandos: a = [1 5 3 9 5] b = [8 10 11; 6 9 8; -6 3 -4] c = [4 -1; 3 -6; 8 0] whos Observe en la siguiente figura que a es una matriz de 1 fila y 5 columnas, es decir un vector de 5 elementos, b una matriz de 3 filas y 3 columnas, y c una matriz de 3 filas y 2 columnas.
Operaciones con matrices: Octave es capaz de realizar operaciones matriciales de una forma sencilla para el usuario. Los operadores utilizados por octave son: + adicin o suma sustraccin o resta * multiplicacin ' traspuesta ^ potenciacin \ divisin-izquierda / divisin-derecha .* producto elemento a elemento ./ y .\ divisin elemento a elemento .^ elevar a una potencia elemento a elemento
Por ejemplo, Dadas las siguientes matrices: a = [1 2;-5 6; -3 3] b = [2 -1 6; 3 -1 0] c = [2 -1 6; 7 -8 4;3 -1 2] d = [3 -4 3; 7 9 1; 1 9 6] Hallar: e = a*b; f = a g = c/d h = c.*d i = c+d j = 2*h k = j./c
Los resultados se presentan en la siguiente figura:
A partir de estas operaciones con matrices es posible solucionar ecuaciones lineales.
Por ejemplo: Hallar los valores de x, y, z de acuerdo a las siguientes ecuaciones:
Para solucionar este sistema de ecuaciones en octave, se procede de la siguiente manera: Se crean las matrices para representar el sistema de la forma: A*r=b a = [1 -2 3;4 1 -1; 2 -1 3] b = [11;4;10] y para obtener el valor de r: r = inv(a)*b o r = a\b Como puede verse en la siguiente figura:
El resultado del sistema de ecuaciones es: x = 2; y = -3 y z = 1.
Matrices predefinidas en Octave: Existen varias funciones en octave que permiten crear matrices predefinidas, dentro de las cuales estn: zeros(f,c), crea una matriz de ceros de f filas y c columnas ones(f,c), crea una matriz de unos de f filas y c columnas magic(n), crea una matriz mgica de n filas y n columnas eye(f,c), crea una matriz identidad de f filas y c columnas rand(f,c), crea una matriz con nmeros aleatorios de f filas y c olumnas randn(f,c), crea una matriz con nmeros aleatorios incluyendo nmeros menores a 0 de f filas y c columnas. Adems con el comando: imagesc(matriz), colorbar, es posible obtener una representacin grfica de la matriz. Ejemplos: A = zeros(3,3) B = ones(3,3) C = randn(5,5) D= eye(3,3) imagesc(C), colorbar
Los resultados se pueden observar en la siguiente figura:
Otra caracterstica importante de Octave, es que toma los vectores como un polinomio de grado n. De esta manera, al crear el siguiente vector: V = [1 2 3 4] Estamos representando el siguiente polinomio:
Dentro de las funciones que operan sobre polinomios en octave, tenemos: roots(pol): Obtiene las races del polinomio pol.
polyval(pol,x): Evaluacin del polinomio pol para el valor de x. Si x es un vector, pol se evala para cada elemento de x polyder(pol): Calcula la derivada de un polinomio polyder(p1,p2): Calcula la derivada de producto de polinomios Ejemplo: De los siguientes polinomios:
Hallar: Las races de los polinomios, La derivada de los polinomios, La derivada del producto de polinomios, Evaluar el primer polinomio en 5 puntos generados al azar. Para realizar estas operaciones en Octave, se ingresan los siguientes comandos: v = [1 2 3 4], para crear el primer polinomio w = [1 2 1], para crear el segundo polinomio roots(v) roots(w) polyder(v) polyder(w) polyder(v,w) polyval(v,randn(1,5))
El resultado puede observarse en la siguiente figura:
PARTE C
PROGRAMACION EN OCTAVE: La programacin en octave puede realizarse mediante un editor de texto, que puede ser block de notas, Wordpad, entre otros. Para crear un programa en octave, es necesario seguir el siguiente itinerario: Crear un archivo con extensin .m y escribir el cdigo que ser ejecutado por Octave En la consola de Octave seleccionar la ubicacin donde fue guardado el archivo Escribir el nombre del archivo y la extensin.
El siguiente ser un programa sencillo en el que se har uso de la sentencia IF,IFELSE, el cual capturara un numero e indicara si es par o impar. n = input(digite un numero), se utiliza la funcin input para capturar datos if mod(n,2)=0, se utiliza la funcin mod(x,y) para hallar el residuo de la divisin. disp('el numero es par');, se utiliza la funcin disp(string) para mostrar el resultado. else disp('el numero es impar'); end
Para ejecutar el programa anterior, primero se verifica la ruta donde se esta ejecutando Octave, con el comando pwd, en caso de que la ruta sea diferente a la ruta donde se almaceno el archivo, con el comando cd ruta cambiaremos la ruta de ejecucin de octave. El resultado puede observarse en la siguiente figura.
En el siguiente programa se utilizara la sentencia FOR y WHILE. El programa capturara un nmero y calculara su factorial, adems hallara los primeros n nmeros de la serie de Fibonacci. n = input('digite el numero: '); fact = 1; for i=1:n fact = fact*i; end disp('el factorial del numero es: '); disp(fact); m1 = 0; m2 = 1; j = 3; op = 0; disp('los primeros terminos de la serie de fibonacci son:'); disp(m2); while j<=n op = m1+m2; m1 = m2; m2 = op; disp(op); j++; end
El resultado se puede observar en la siguiente figura:
Funciones en Octave: Para crear funciones en Octave, es necesario realizar un script el cual debe tener el mismo nombre de la funcin y extensin .m. La sintaxis para crear funciones en Octave es la siguiente: function variableSalida = nombrefuncion (parametros) sentencia de operaciones endfunction en caso de que la funcin retorne varias variables, la sintaxis es la siguiente: function [var1,var2,varN]= nombrefuncion (parametros) sentencia de operaciones endfunction
Ejemplo: Se creara una funcin que tome un nmero y lo eleve al cuadrado y al cubo. function [y1,y2] = cuadcub(x) y1 = x**2; y2 = x**3; endfunction el resultado puede observarse en la siguiente figura:
De lo visto anteriormente, realice una funcin en Octave que retorne el seno, coseno y tangente de un ngulo en grados.
Graficas en 2d y 3d:
Para realizar graficas en 2d con Octave se utiliza el comando plot(), El cual toma los siguientes argumentos: plot(x,y,c), donde x es el vector de puntos en x, y es el vector de puntos en y, y r es el color de la grfica. La siguiente es la relacin de colores y smbolos para graficar.
Adems de esto, el comando plot cuenta con las siguientes propiedades: clearplot: borra el contenido de la ventana de grficos actual. hold on: mantiene el grfico actual en la pantalla, permitiendo superponer grficos subsiguientes. hold off: desactiva la superposicin de grficos. grid on: dibuja una rejilla en la ventana (opcin por defecto). grid off: desactiva la rejilla de la ventana.
title(titulo): agrega un ttulo a la grfica. xlabel(etiqueta) agrega una etiqueta al eje x. ylabel(etiqueta) agrega una etiqueta al eje y. zlabel(etiqueta) agrega una etiqueta al eje z. closeplot cierra la ventana de grficos.
Ejemplo: Grafica de la funcin seno y coseno y posterior la funcin e^x+sen(x)*cos(x) x = -pi:pi/8:pi; y = sin(x); H = cos(x); F = exp(x)+sin(x).*cos(x),
Lo cual se realiza ingresando los siguientes comandos:
Y el resultado obtenido:
Tambin es posible graficar funciones por separado haciendo uso del comando subplot(f,c,i) Donde f indica el nmero de filas, c el nmero de columnas e i el ndice de la grfica. Ejemplo: Se utilizara el comando subplot para realizar las grficas anteriores por separado.
Y el resultado se muestra en la siguiente figura:
Para realizar graficos en 3d con Octave, se utiliza el comando plot3(), que cuenta con las mismas propiedades que el plot. Ejemplo:
El resultado obtenido se muestra en la siguiente figura:
Adems del comando plot3(), para realizar graficas con superficie se utiliza el comando mesh, el cual crea una grafica con un mallado. Por ejemplo, para graficar la funcin f(x,y)=x^2-y^2, se procede de la siguiente manera:
El resultado obtenido es el siguiente:
Adems se puede utilizar el comando surf.
Aplicaciones con Octave: Desarrolle una aplicacin que dado un polinomio, halle su derivada, su grafica desde 0 a un tope definido por el usuario de la funcin polinmica y su derivada, calcule las races del polinomio, y obtenga el rea que ocupa la funcin (utilizar el comando quad). pol = input('digite el polinomio: '); disp('el polinomio es: '); disp(pol); derpol = polyder(pol); disp('la derivada del polinomio es: '); disp(derpol); disp('las raices del polinomio son: '); disp(roots(pol)); tope = input('digite el tope: '); x = 0:0.5:tope; y = zeros(1,tope); dy = zeros(1,tope); for i=1:size(x,2) y(i) = polyval(pol,x(i)); dy(i) = polyval(derpol,x(i)); end plot(x,y,x,dy),grid on,legend('funcion funcion'),xlabel('x'),ylabel('y'),title('Grafica polinomica'); function y = f (x) y=exp(-x*x); endfunction [area,ierror,nfneval]=quad("f",0,tope); polinomica','derivada
disp('el area es: '); disp(area);
Al ejecutar el programa y utilizar los siguientes valores:
Obtenemos lo siguiente: