Matlab es un buen entorno para desarrollar programas de cálculo numérico, sin embargo tiene el inconveniente de ser privado y de alto coste.
Una alternativa de código abierto y sintaxis similar es Octave. En este post se ha probado con la versión 3.6.4 por consola de comandos, aunque se han testeado un par de cosas en la versión 3.8.1.
Lo primero
Una vez que iniciamos Octave, lo primero que hace el programa es ejecutar un script llamado octaverc (escrito en Octave y editable con un editor de texto). Este archivo se puede crear en varias rutas al instalar Octave y se ejecutan todas, en este script podemos poner la configuración inicial del entorno de trabajo, etc.
Algunas rutas bastante comunes donde puede estar este archivo es: /C/Users/nombredeusuario o //share/octave//m/startup.
Primeros pasos
El flujo de trabajo recomendable para trabajar con Octave (sobre todo desde consola) es crear scripts de texto con extensión *.m y simplemente ejecutarlos desde Octave.
Para esto debemos movernos a la carpeta del sistema donde tengamos los scripts que queremos ejecutar, esto lo hacemos con el comando:
>> chdir ‘<PathToFolder>’; o >> chdir(‘<PathToFolder>’);
Y a continuación ejecutar el script, mediante su nombre
>> MyScript;
En general para los usuarios de Matlab encontrarán pocas diferencias en la sintaxis, siendo altamente compatible Octave con Matlab, aunque no al revés, es decir:
Matlab →Octave : SI
Octave →Matlab : NO
Esto se debe a que Octave tiene su propia sintaxis diferente a la de Matlab por lo que si escribimos script con esta sintaxis Matlab no los reconocerá. Sin embargo Octave reconoce perfectamente la sintaxis de Matlab.
También hay que decir que hablamos de compatibilidad en sintaxis básica, no del uso de toolboxes o características avanzadas, donde por lo general no son muy compatibles, por ejemplo las gráficas avanzadas si son diferentes o el acceso a base de datos o computación en paralelo, incluso en la sintaxis más básica si hay diferencias entre ambos.
Veamos un cuadro resumen de éstas:
Característica | Octave | Matlab | Compatibilidad |
Terminación de funciones y control de flujo: | function … endfunction oif… endif | function … endif… end | SI |
Anidamiento de funciones | function …function … end end |
function … endfunction … end | SI |
Operadores logicos | En Matlab & y | en algunas situaciones funcionan como operadores de cortocircuito, en Octave no. | ||
Strings | Simple o doble comilla (‘’ o “”) | Solo comilla simple (‘’) | SI |
Comentarios | Con % o # | Con % | SI |
Operadores de incremento y asignación | Notación C:X++, –Y, X+=2… | Autoreferencia:K = K+1; | SI |
Desde luego hay muchas más diferencias entre Octave y Matlab pero no a nivel, por ejemplo Matlab incluye un intérprete JIT (just-in-time) que acelera mucho los procesos, mientras que Octave solo dispone de él en las últimas versiones, por lo que se nota menor performance en Octave.
Manejando paquetes
Una de las principales diferencias entre Octave y Matlab es el manejo de toolboxes, mientras en Matlab se deben instalar con el ejecutable que instala Matlab, en Octave es diferente. Una vez instalado Octave puedes bajarte los toolboxes como archivos comprimidos denominados paquetes e instalarlos desde la consola de Octave escribiendo:
>> pkg install nombre_del_paquete
También es posible instalar algunos paquetes desde un repositorio común alojado en sourceforge, mediante el comando:
>> pkg install –forge nombre_del_paquete
La lista de paquetes disponibles se puede ver en: http://octave.sourceforge.net/packages.php
Una vez instalado el paquete es posible desinstalarlo de forma similar pero con la instrucción uninstall.
Sin embargo a diferencia de Matlab, no tenemos disponibles por defecto estos paquetes al iniciar Octave. Para que estén disponibles es necesario cargarlos y cuando queramos que no estén disponibles habrá que “descargarlos” con las siguientes instrucciones
>> pkg load nombre_del_paquete >> pkg unload nombre_del_paquete
Para ver en qué estado se encuentra un paquete (instalado, cargado, etc) es posible verlo ejecutando:
>> pkg describe nombre_del_paquete
Una posible solución para que el funcionamiento de Octave sea más similar al de Matlab es cargar los paquetes necesarios escribiendo en el archivo octaverc el pkg load correspondiente a los paquetes que se deseen cargar (los paquetes solo necesitan instalarse una vez).
Bajando al sótano
Otra diferencia que hay que destacar es en la compilación de archivos. Tanto en Matlab como en Octave se pueden utilizar funciones compiladas directamente desde C, en Matlab se denominan MEX-files y tienen extensión *.mex, mientras que en Octave se denominan OCT-files y tienen extensión *.oct.
En Octave este tipo de archivos tienen especial relevancia ya que si quieres ganar en rendimiento de código, la mejor opción es compilar las funciones en C y crear los oct-files para usarlas, en próximos post veremos cómo crear este tipo de funciones.
Tomando un café
También hay que hacer una mención especial al paquete java, que permite manejar objetos java desde Octave, para que este paquete funcione correctamente es necesario tener una máquina virtual java instalada y una variable de sistema configurada con el valor de la ruta donde esté el archivo jvm.cfg.
Cuando arrancamos Octave y cargamos el paquete java, éste busca un archivo de texto: classpath.txt, donde se encuentran las rutas a los archivos *.jar (archivos comprimidos que contienen código java), la forma de buscar estas rutas, así como una descripción del funcionamiento del paquete la podemos encontrar aquí.
Una vez que tenemos disponibles los paquetes Java, podemos crear objetos con la función javaObject y utilizar las funciones de dichos objetos anteponiendo el objeto seguido por punto, ejemplo:
>> myObject = javaObject(“type”, input1, input2);
>> resultado = myObject.myObjectsFunction(input);
En próximos post ampliaremos información sobre cómo trabajan juntos Java y Octave.