GNU OCTAVE
folrex6 de Abril de 2012
5.706 Palabras (23 Páginas)573 Visitas
TEMA 1
GNU Octave
Octave se puede definir como un lenguaje de alto nivel inspirado en un software comercial llamado
MATLABr
(MATrix LABoratory).MATLABr
estuvo pensado inicialmente para ´algebra
num´erica lineal (matrices, vectores y sus operaciones), y con el tiempo se le ha sacado partido a
esta forma de trabajo. De la misma forma, Octave empez´o siendo un software para que los alumnos
de Ingenier´ıa Qu´ımica de las Universidades de Wisconsin-Madison y Texas calcularan
reacciones qu´ımicas.
A partir de ese momento, las contribuciones de los usuarios han hecho evolucionar este software
y han a˜nadido librer´ıas y funcionalidades. Ahora, las aplicaciones de Octave ya no se limitan
a simple trabajo con matrices y vectores, como una mera calculadora, sino que ahora aparte
de aplicaciones puramente matem´aticas o num´ericas, es v´alido para otros campos de ciencias e
ingenier´ıas. Entre ellos, el procesamiento de se˜nales (sonido), de im´agenes (filtrados, an´alisis, etc),
estad´ıstica, geometr´ıa, redes neuronales, sistemas de control realimentados y hasta dibujo vectorial.
Intentaremos poner ejemplos de cada una de estas aplicaciones en la medida de lo posible para
mostrar la versatilidad de Octave.
Estas librer´ıas se pueden programar de forma interpretada, usando el propio lenguaje de octave,
o de forma binaria, usando cualquiera de los lenguajes que soporte gcc como C/C++, pascal o fortran
(recordemos que todo el c´odigo objeto era intercambiable). Adem´as, tambi´en se puede hacer a la
inversa, es decir, traducir programas de octave a c++ usando una librer´ıa llamada liboctave. Con
esto se elimina la etapa de interpretaci´on al ejecutarlo con lo que se gana velocidad cuando ´esta
sea determinante. Parece que hay bastantes cosas por ver, as´ı que vamos a empezar.
1.1. Entorno
Octave tiene una filosof´ıa de uso semejante a la de muchas otras aplicaciones de este libro: una
interfaz en forma de shell, con una linea de comandos potente con muchos atajos y facilidades,
para problemas sencillos, y la posibilidad de poder agrupar muchos comandos en ficheros de scripts,
organizados en funciones, para enfrentarse a problemas complejos o para realizar automatizaciones.
Para comenzar a ver el manejo b´asico vamos a ejecutar Octave de manera interactiva. Con este
m´etodo de trabajo, si cometemos un error al entrar una l´ınea, podremos corregirlo sobre la marcha.
1
Para ejecutarlo, abre un terminal y en la l´ınea de comandos teclea octave. Tras un mensaje de
bienvenida, Octave te muestra un prompt que indica que est´a preparado y a la espera de comandos.
En algunas distribuciones, Octave puede tener su icono en uno de los men´ues del sistema, en la
zona de aplicaciones matem´aticas. Teclear octave en la consola es m´as r´apido y funciona el 100%
de las veces. Esto es lo que se nos muestra:
$ octave
GNU Octave, version 2.1.34 (i386-pc-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type ‘warranty’.
octave:1>
Cuando quieras salir de Octave teclea exit, quit o C-D y volver´as al shell de partida.
La ayuda completa de octave la puedes obtener desde el prompt tecleando help -i. Tambi´en
puedes visualizar la misma ayuda desde el shell tecleando info octave. Luego, la documentaci´on
para cada funci´on y variables se obtienen tecleando help nombredelafuncion. Por ejemplo:
octave:9> help coth
coth is the user-defined function from the file
/usr/share/octave/2.1.34/m/elfun/coth.m
- Mapping Function: coth (X)
Compute the hyperbolic cotangent of each element of X.
La mayor´ıa de los comandos de Octave disponen de esta ayuda. Vemos que se nos dice una
descripci´on de los par´ametros y lo que realiza la funci´on, lo cual es suficiente para que podamos
utilizarla.
Cuando se invoca sin argumentos se obtiene un listado de todas las operaciones, funciones y
variables incorporadas definidas en el sistema. Para conseguir esta informaci´on, Octave rastrea
por los directorios donde est´an instaladas las funciones; de ah´ı su peculiar forma de organizar
esta salida, que nos muestra las funciones clasificadas por temas, lo que puede ayudarnos a mirar
y probar funciones. Adem´as, aqu´ı podemos encontrarnos funciones que no est´an pasadas a la
documentaci´on.
Octave usa la librer´ıa GNU readline para la edici´on en l´ınea de comandos, al igual que bash
y otros programas GNU. Contiene un historial que se puede leer con las flechas arriba y abajo,
muchas combinaciones de teclas para hacer muchas cosas. Para m´as informaci´on y explicaci´on sobre
estas caracter´ısticas teclea desde un shell info rluserman. No entraremos m´as en este tema.
Cada vez que te equivoques en la sintaxis, octave te indicar´a la posici´on donde cree que est´a el
fallo con un angulillo ^. A veces no se puede fiar uno completamente, y s´olo te ayuda a saber m´as
o menos donde se localiza. Ve´amoslo aqu´ı:
octave:13> functon y = f (x) y = x^2; endfunction
parse error:
2
>>> functon y = f (x) y = x^2; endfunction
^
Otro tipo de errores pueden ocurrir dentro de funciones. En este caso, son errores en tiempo de
ejecuci´on, porque ocurren por un fallo en la ejecuci´on del programa. En este caso, lo que aparece
es la l´ınea y posici´on dentro de la funci´on y en la funci´on que lo llam´o y en las siguientes. Por
ejemplo, en este hipot´etico caso:
octave:13> f ()
error: ‘x’ undefined near line 1 column 24
error: evaluating expression near line 1, column 24
error: evaluating assignment expression near line 1, column 22
error: called from ‘f’
En este caso, la funci´on f se compone de unas funciones que se llaman a otras. El error est´a en
la l´ınea 1 con una x mal definida. La funci´on que contiene este error, seg´un octave, formaba parte
de una expresi´on en la linea 1, que a su vez formaba parte de una asignaci´on tambien en la l´ınea
1. Obs´ervese que la funci´on es la que definimos en el anterior ejemplo y el error es que hace falta
pasarle un par´ametro a la funci´on.
Los comentarios dentro del c´odigo de octave se preceden con el car´acter # o % y abarcan desde
ese car´acter hasta el final de la l´ınea. Si ponemos en octave un c´odigo como ´este:
function xdot = f (x, t)
# usage: f (x, t)
#
# This function defines the right hand
# side functions for a set of nonlinear
# differential equations.
r = 0.25;
...
endfunction
Octave interpreta los comentarios despu´es de la funci´on como el texto de ayuda. De esta forma,
cuando hagamos help xdot nos mostrar´a como ayuda el texto que hemos definido en el ejemplo.
Cuando una l´ınea se hace demasiado larga se puede a˜nadir al final de la linea una barra invertida
\ o unos puntos suspensivos ... y continuar en la siguiente l´ınea.
x = long_variable_name ...
+ longer_variable_name \
- 42
Otra cosa interesante es que por defecto se muestra el resultado de la operaci´on al realizarla
salvo cuando se a˜nade un ; al final de la operaci´on. Tambi´en se pueden hacer varias operaciones
en una misma linea separ´andolas con ;.
3
octave:1> a=sqrt(3)
a = 1.7321
octave:2> b=sqrt(5);
octave:3> b
b = 2.2361
octave:4> sqrt(7)
ans = 2.6458
Como ´ultima nota, hay que a˜nadir que cuando no capturamos el valor de retorno aparece la
palabra ans, que representa el ´ultimo resultado, y que se puede usar como variable en la siguiente
l´ınea. Continuando el ejemplo anterior:
octave:5> ans*ans
ans = 7.0000
octave:6> ans*ans
ans = 49.000
1.2. Tipos de datos
En Octave hay tres tipos de datos: num´ericos (escalares, vectores y matrices), cadenas (strings)
y estructuras. Como es de suponer, los num´ericos son los m´as usados, mientras que cadenas s´olo se
usan para presentar mensajes. Las estructuras son algo que nos pueden dar una buena base para
organizar tareas m´as complicadas. A continuaci´on se muestra la forma de definir cada uno de ellos.
octave:13> a=[1 2 3]
a =
1 2 3
octave:14> b=[1,2,3;4,5,6]
b =
1 2 3
4 5 6
octave:15> c="hola mundo"
c = hola mundo
octave:16> d.vector=[1;2];
octave:17> d.matriz=[1 2; 3 4];
octave:18> d.texto="titulo";
octave:19> d
d =
{
texto = titulo
vector =
1
2
4
matriz =
1 2
3 4
}
octave:20> d.vector
d.vector =
1
2
Se observar´a que las definiciones de matrices o vectores, las filas van separadas por comas (,) o
espacios ( ) mientras que las columnas se separan por punto y coma (;). Tambi´en observamos que
una estructura
...