Octave es un lenguaje de alto nivel, diseñado para hacer cálculos numéricos. Provee una interfase con línea de comando para resolver problemas lineales y noineales y otros experimentos numéricos numéricamente. Puede ser usado también en forma de procesamiento tipo batch.
En la mayoría de los sistemas, la forma de invocar a Octave es con el
comando del shell `octave'
. Octave muestra un mensaje inicial inicando
que esta listo para aceptar instrucciones. A partir de allí se pueden
escribir comandos inmediatamente.
Si ocurre algún tipo de problema, se puede interrumpir la tarea que
esta realizando Octave con `Control-C'
, (usualmente escrito como `C-c'
para abreviar). Para salir de Octave simplemente se debe escribir
`quit'
o `exit'
en el prompt de Octave. En aquellos sistemas que
soportan "control de tareas", (como Linux y la mayoría de los sistemas
Unix, VMS, etc...), se puede "suspender" Octave enviando una señal
`SIGSTP'
(usualmente `C-z'
).
$Id: octaveintro.sgml,v 1.10 1997/10/20 13:01:17 mstorti Exp mstorti $
Los siguientes capítulos describen todas las funcionalidades de Octave en detalle, pero antes de eso, puede ser muy útil dar una muestra de sus posibilidades.
Si eres nuevo en el uso de Octave, es recomendable que trates de
reproducir estos ejemplos usando Octave. Las líneas marcadas como
`octave>'
son líneas que tu debes escribir, terminandolas con un
"retorno de carro" (la tecla `Enter'
en la PC). Octave responderá con
un resultado o un gráfico.
$Id: octaveintro.sgml,v 1.10 1997/10/20 13:01:17 mstorti Exp mstorti $
Para crear una matriz y guardarla en una variable de manera que se pueda hacer referencia a ella más tarde, basta con escribir:
octave> a = [ 1, 1, 2; 3, 5, 8; 13, 21, 34 ]
a =
1 1 2
3 5 8
13 21 34
octave>
Octave responde imprimiendo (en la pantalla) la matriz en columnas alineadas. Terminar un comando con punto y coma indica a octave que no muestre el resultado. Por ejemplo:
octave> b = rand (3, 2);
octave>
creará una matriz de 3 filas y 2 columnas con cada elemento puesto a un valor aleatorio ("random") entre cero y uno.
Para mostrar el valor de una variable, simplemente se debe escribir el
nombre de la variable. por ejemplo, para mostrar el valor guardado en
la matriz `b'
, se debe tipear el comando:
octave:3> b
b =
0.70335 0.88008
0.26807 0.79486
0.94203 0.24523
octave>
Octave posee una notación especial para efectuar aritmética
matricial. Por ejemplo, para multiplicar la matriz `a'
por un escalar:
octave> 2 * a
ans =
2 2 4
6 10 16
26 42 68
octave>
Para multiplicar dos matrices `a'
y `b'
, se debe escribir el comando:
octave:5> a * b
ans =
2.8555 2.1654
10.9866 8.5763
46.8020 36.4707
octave>
`ans ='
indica "answer" (respuesta). Para formar el producto
matricial `transpuesta(a) * a'
, escribir el comando:
octave:6> a' * a
ans =
179 289 468
289 467 756
468 756 1224
octave>
Para resolver el sistema de ecuaciones lineales `aX = b'
, es
conveniente usar el operador de división a la izquierda `\'
:
octave:7> a \ b
warning: matrix singular to machine precision, rcond = 2.00564e-18
ans =
1.38217 1.47409
-1.16316 -1.25136
0.21901 0.22272
octave>
Esto es conceptualmente equivalente a `inv (a) * b'
, pero evita el
cálculo de la inversa de la matriz directamente.
Si la matriz de coeficientes es singular, Octave emitirá un mensaje de advertencia y calculará una solución en el sentido de norma mínima.
Octave tiene funciones internas para resolver ecuaciones diferenciales nolineales de la forma:
dx/dt= f (x, t)
con la condición inicial:
x(t = t0) = x0
Para que Octave integre ecuaciones de esta forma, debes primero
escribir una función `f(x,t)'
. Esto puede ser hecho directamente en la
línea de comando. Por ejemplo, los comandos siguientes definen el
miembro derecho de un sistema de dos ecuaciones diferenciales
nolineales de sumo interés. Nótese que mientras estás escribiendo la
función, Octave responde con un prompt diferente, lo cual indica que
está esperando para completar tu entrada de la misma:
octave> function xdot = f (x, t)
>
> r = 0.25;
> k = 1.4;
> a = 1.5;
> b = 0.16;
> c = 0.9;
> d = 0.8;
>
> xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
> xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
>
> endfunction
Dada la condición inicial:
octave> x0 = [1; 2];
y el conjunto de instantes temporales como un vector columna (nótese que el primer elemento del vector corresponde a la condición inicial dada arriba):
octave> t = linspace (0, 50, 200)';
es fácil integrar el sistema:
octave> x = lsode ("f", x0, t);
La función `lsode'
usa el "Livermore Solver for Ordinary
Differential Equations", described in A. C. Hindmarsh,
"ODEPACK, a Systematized Collection of ODE Solvers", in:
Scientific Computing, R. S. Stepleman et al. (Eds.),
North-Holland, Amsterdam, 1983, pages 55-64.
Para mostrar la solución del ejemplo previo graficamente, use el comando:
octave> plot (t, x)
Si estás usando el sistema X Window, Octave creará automaticamente una ventana separada para mostrar el gráfico.
En el prompt de Octave puedes recuperar, editar y reemitir comandos previos usando comandos al estilo de Emacs o Vi.
Octave tiene facilidades de help abundantes. La misma documentación está disponible en forma impresa y también está disponible en forma interactiva, ya que ambas formas de documentación han sido creadas a partir del mismo archivo.
Para obtener ayuda, debes primero conocer el nombre del comando que
quieres usar, lo cual no es siempre obvio. Un buen lugar para empezar
es tipear directamente `help'
. Esto mostrará todos los operadores,
palabras reservadas, funciones, variables internas y funciones de
archivo. Puedes obtener más ayuda sobre cualquiera de los items
listados incluyendo simplemente el nombre del item como argumento. Por
ejemplo:
help plot
mostrará el texto de ayuda para la función `plot'
.
Next Chapter
Table of contents of this chapter, General table of contents
Top of the document, Beginning of this Chapter