Está en la página 1de 13

OCTAVE

1-Introducción

1-1. ¿Qué es Octave?

Octave es un software que nos permite programar y utilizar una serie
de funciones principalmente numéricas. Esto se hace tipeando los
comandos a utilizar y el software responderá a cada uno de ellos mostrando
los resultados a través de la pantalla. Es decir, cada vez que nosotros
tipeamos algo el software nos responderá, excepto que finalicemos lo que
escribimos con un punto y coma (;).
Octave es un software de distribución gratuita que se apega a
la filosofía GNU, esto es poder tener acceso al programa y al código
fuente del programa para modificarlo (si nos interesa), sin tener que
pagar ni por su uso, ni por su obtención, además de poder hacer
cuantas copias se quieran e instalaciones en diferentes máquinas,
también, sin tener que pagar.

1-2. Instalación

Existen varias versiones de Octave, todas disponibles en forma
gratuita en Internet. La página principal de octave es
http://www.octave.org . La version original se utiliza en LINUX (un sistema
operativo gratuito), a pesar de ello existen varias versiones para Windows
(el sistema operativo propietario de Microsoft). Una de las páginas de donde
se puede obtener la distribución para Windows, es la página de la
Universidad de Córdoba que es http://www.efn.uncor.edu (allí seguimos los
link Departamentos, Departamento de Computación, Materias, Informática,
SOFTWARE). El link que nos permite bajar el instalador de Octave para
Windows es
http://www.efn.uncor.edu/departamentos/computacion/materias/informatica
/software.html
Una vez obtenido el instalador simplemente se debe ejecutar el
mismo y se iniciará el proceso de instalación de OCTAVE.

1-3. Notación en este Documento

ENTER representa presionar la tecla enter ó return. EL texto que
aparece en itálica representa la estructura general de lo que se está
describiendo. Cunado aparece algo entre <corchetes> significa que
debe ser remplazado por un nombre en particular (así
<nombre_de_función> se reemplazará, por ejemplo, por seno(x)). El
tecto que aparece en negrita representa código de OCTAVE listo
para ser ejecutado.

1-4. Ejecutando OCTAVE por primera vez

La única condición es que no haya un espacio entre el número y la i que representa el valor de la raíz cuadrada de -1. Estos tipos de datos pueden ser cargados al iniciarse Octave o durante la ejecución de Octave. La forma más simple de una constante numérica.3e1 + 40e-1i ENTER. Matrices Es muy sencillo definir una matriz de valores en Octave. Así algunos valores reales que tienen el mismo valor numérico serán.0i ENTER.05e+2 ENTER.0 + 4. 2. Existe un manual on-line en inglés en la dirección http://www. Cuando el software se inicia. Un número de punto flotante es lo que se conoce como real. 105 ENTER. 1. La forma más sencilla de obtener ayuda en Octave es tipeando help y luego presionando ENTER. Tipos de Datos Numéricos Constantes Numéricas Una constante numérica puede ser un escalar.octave. un vector o una matriz o un número imaginario. Para salir de Octave bastará con escribir exit y presionar ENTER. El tamaño de la matriz es determinado automáticamente. complejos.org/doc/octave_toc.html . 2-Tipos de Datos en OCTAVE Todas las versiones de Octave incluyen una serie de tipos de datos predefinidos. 2-1. resulta en la matriz: . por ejemplo. 0. Es posible definir nuevos tipos de datos escribiendo un poco de código en C++. escalares. 3. 4] ENTER. una fracción decimal. así la expresión a = [1. Una constante numérica compleja se escribe como una expresión de la siguiente forma: 3 + 4i ENTER. 3. simplemente se debe hacer click en el ícono correspondiente. un número en notación científica o un número complejo. 1050e- 1 ENTER. Todas las constantes numéricas en Octave son representadas internamente como números de punto flotante en doble precisión (los números complejos se representan como dos valores flotantes). un escalar. Para ejecutar el programa. Un tipo de datos no sólo define al dato sino que además define que operaciones pueden hacerse sobre él y con otros tipos de datos. es un número simple que puede ser un entero. Además Octave puede graficar nuestros datos y resultados en otra ventana. que incluye reales. Esto no será necesario en nuestro caso. matrices cadenas de caracteres y tipos de datos estructurados. se muestra una ventana donde podemos escribir los comandos que necesitemos. Estos valores se pueden ingresar directamente tipeándolos y Octave nos mostrará el formato más simple del valor tipeado.

ó 0 en otro caso. mientras que el rango 1:3:5 ENTER será [1.-1.-17].3. altura. dígitos y caracteres de subrayados. El comando clear <variable> ENTER borra la variable. un valor opcional de incremento entre los elementos y el valor máximo que los elementos del rango no deben exceder.5] .3. Los elementos de la matriz pueden ser expresiones arbitrarias siempre que las dimensiones mantengan coherencia.4. is_square(x) si x es una matriz cuadrada devuelve la dimensión de la matriz. la variable deja de estar definida. Son nombre de variables válidos X . así la expresión [a . pero no está permitido que empiecen con un dígito o con doble caracter de subrayado.tol) si x es simétrica con tolerancia tol devuelve la dimensión de x. Un rango se puede leer de la siguente forma. a] ENTER.-9. Como un ejemplo.-5. Por ejemplo el rango 1:5 ENTER será equivalente a la fila [1. El nombre de una variable consistirá de caracteres. ó 0 en otro caso.4]. Predicados Llamaremos predicados a las funciones predefinidas que se incluyen en Octave. is_symmetric(x. 3-Variables Una variable permite asignar un nombre a un valor que será utilizado luego. Si tol se omite se toma la tolerancia que utiliza la maquina en donde se esta trabajando. ó 0 en otro caso. Las mayúsculas y minúsculas son consideradas como diferentes caracteres. ir desde 16 hasta 78 avanzando de a 3. Para los objetos numéricos existen algunos predicados útiles como por ejemplo: is_matrix(a) que devuelve un valor 1 si a es una matriz. En un rango se define el primer elemento.) y las filas con punto y coma (.2. sea 16:3:78. Los comandos who y whos listan las variables que . _quien_es .-13.). Estos valores se separan con dos puntos (:). sino 0. y el rango 7:-4:-18 ENTER será [7. será a= [ 13 2 1 2 4 3 4 ] Rangos Un rango es una forma conveniente de escribir un vector con elementos igualmente espaciados. ó 0 en otro caso.a= [ 13 24 ] Nótese que los elementos de la matriz se separan con coma (. x15 . is_scalar(a) que devuelve un valor 1 si a es un escalar. Los nombres de variable no deben superar los 30 caracteres. is_vector(a) que devuelve un valor 1 si a es un vector. si el incremento no se escribe se considera 1.

a. 4-1. 3 si es un archivo .2) ó A(:. un 2 si el nombre.). zeros(t. El predicado exist(a) devuelve un 1 si la variable a existe. Cada función posee una cantidad determinada de argumentos y cada argumento debe ser de un determinado tipo. Si no son necesarios argumentos se pueden omitir los paréntesis. Por ejemplo. sqrt ejecuta las sentencias para obtener (o calcular) la raíz cuadrada de un valor. sqrt(64) ENTER. Una expresión puede servir como sentencia. Octave permite que se devuelvan varios valores como resultado de utilizar dicha función. Los vectores utilizan un solo índice mientras que las matrices utilizan dos. por ejemplo. La forma de utilizar una función es a través de una expresión de llamada a la función que consiste de: el nombre de la función más una lista de argumentos entre paréntesis. estar predefinida en Octave.oct y 5 si es una función predefinida de Octave. que se puede imprimir. constantes. Una sentencia puede contener una o más expresiones que incluyan variables.5. el menor y el valor más repetido de la misma. Los índices pueden ser escalares. Expresiones Índices Una expresión índice permite recuperar o referenciar elementos de una matriz o un vector.1:2) ó A(2. Llamadas a Funciones Otro tipo de expresión básica es la llamada a una función que puede o no. la segunda fila de la matriz A(2.3.5) ENTER.2). pero es mejor utilizarlos para que quede en claro que se esta llamando a una función. 4.y). o combinaciones de ellas.:). Por ejemplo.se hayan definido.:) y la segunda columna A(1:3.4. Un conjunto fijo de funciones está predefinidas en Octave.2. comparar. pero se pueden construir las propias funciones en caso de ser necesario. matrices. Además. pasar como parámetro a una función o asignar a una variable con una operación de asignación. dada la matriz A = [1. ones(4. Una expresión se evalúa en un valor. Así.6] ENTER. rand() ENTER. vectores. es el de un archivo . que se separan con comas (.1) selecciona (y retorna su valor) el elemento de la segunda fila y la primera columna (el 3). Nótese que para seleccionar una columna entera se puede utilizar un rango (1:2 en el ejemplo) ó el caracter especial dos puntos (:) 4-2. . Algunos ejemplos son. Una función es un nombre para un cálculo particular. Estos argumentos son asimismo expresiones. una función sobre una matriz podría devolver el mayor. mientras que las siguientes expresiones seleccionan la primera fila de la matriz A(1.m.Expresiones Las expresiones son los ladrillos con los que se construyen todo en Octave. la siguiente expresión A(2.1:2) ó A(1. rangos o el caracter especial dos puntos (:) que se utiliza para seleccionar la filas o columnas enteras.

4] ENTER dará un resultado de unos y ceros elemento por elemento [1.-y Multiplicación Matricial: x * y : El número de columnas de x debe coincidir con el número de filas de y.0.+ y : Este operador suma dos matrices elemento a elemento. Negación: -x Suma unaria: +x : Este operador no tiene efecto sobre el operando. cos(<variable>). transpuesto. sin(<variable>). sinh(<variable>). Adición elemento por elemento: x .<variable>). Si un operador fuera un escalar y el otro una matriz. atan(<variable>). Multiplicación elemento a elemento: x . ones(<variable>./ y División a Izquierda: x \ y : El concepto es equivalente multiplica el inverso de x por y. Si un operando es escalar su valor es sumado a cada elemento del otro operando. tanh(<variable>). División a derecha elemento a elemento: x . 4-3. acos(<variable>). [1. Así por ejemplo.\ y : Cada elemento de y es dividido por el correspondiente de x. Potencia: x ^ y ó x ** y : Si x e y son escalares devuelve x elevado a la potencia y. Operadores de Comparación Los operadores de comparación comparan los valores numéricos con respecto a la igualdad. Para matrices los operadores trabajan elemento por elemento. 2. Conjugado: x' : Para argumentos reales este operador es lo mismo que el operador Transpuesta. 4] == [1. División a derecha: x / y : Este concepto es equivalente a efectuar el producto del inverso de y transpuesta por x transpuesta. cosh(<variable>). Adición: x + y : Si ambos operandos son matrices el número de filas y columnas debe coincidir. tan(<variable>).' 4-4. asin(<variable>). Potencia elemento por elemento: x . 3.^ y ó x . Para operandos complejos calcula el conjugado. Algunas funciones predefinidas son sqrt(<variable>). rand().* y : Si ambos operandos son matrices deben coincidir en dimensión. Transpuesta: x. 2. zeros(<variable>. Sustracción: x – y Sustracción elemento a elemento: x .0. Todos los operadores de comparación devuelven un valor 1 si la operación es verdadera ó 0 si es falsa. Es equivalente a x +y.** y : Si los dos operandos son matrices las dimensiones deben coincidir. 3. x < y es verdadero si x es menor que y x <= y es verdadero si x es menor o igual que y x == y es verdadero si x es igual a y .1]. Operadores Aritméticos Los operadores aritméticos son elementos que permiten construir expresiones más complejas partiendo de expresiones sencillas o atómicas (indivisibles). el escalar se comparará con cada elemento de la matriz.<variable>). División a Izquierda elemento por elemento: x .

o una lista de valores. Asignar un escalar a un conjunto de índices de una matriz hará que los elementos de la matriz se vuelvan el valor escalar. x || y: es verdadero si x o y son verdaderos.x >= y es verdadero si x es mayor o igual que y x > y es verdadero si x es mayor que y x != y es verdadero si x es distinto que y x ~= y es verdadero si x es distinto que y x <> y es verdadero si x es distinto que y 4-5. "La variable x se vuelva el valor de la variable z más 5". teniendo ya un valor en z otro ejemplo de asignación sería x = z +5 ENTER con lo que la variable x tendrá un valor de 6. La parte izquierda del operador (lvalue) debe ser una variable. La expresión z=1 tiene valor 1 (es verdadera. Expresiones Booleanas Una expresión booleana es una combinación de expresiones de comparación usando operadores "o" (||). !x: es verdadero si x es falso. Por ejemplo. Una asignación es una expresión y por lo tanto tiene un valor. que almacena 0 en las tres variables. para asignar un valor 1 a la variable z se utiliza la siguiente expresión z = 1 ENTER. Así. Luego de que esta expresión es ejecutada la variable z tiene un valor 1. sin importar el valor que tenía z antes. 4-7. a(:. Expresiones de Asignación Una expresión de asignación es una expresión que almacena un nuevo valor en una variable. hará que todos los elementos de la segunda columna de la matriz a sean 5. Así el signo igual (=) se conoce como operador de asignación (y suele leerse como "se vuelve"). un elemento de una matriz. Si leemos la sentencia anterior. El operador de incremento se escribe como dos signos más seguidos sin espacio entre ellos (++) y el de decremento como dos . 4-6. 2) = 5 ENTER. obtenemos. La parte derecha del operador puede ser cualquier expresión. Siguiendo con nuestro ejemplo de asignación. o válida). x && y: es verdadero si x e y son verdaderos. Es importante notar que las variables puede cambiar de tipo durante la ejecución de un programa. Esto permite escribir múltiples asignaciones simultaneas. "y" (&&) y "no" (!). Un valor cero es considerado falso y un valor distinto de cero es considerado verdadero. en un momento ser un valor numérico y luego ser una matriz. La veracidad de una expresión booleana es computada combinando la veracidad de las expresiones componentes elementales. Esta técnica si bien es válida no es recomendada. como por ejemplo x = y = n = 0 ENTER. Operadores de Incremento Los operadores de incremento incrementan o decrementan el valor de una variable en 1. junto con paréntesis que controlan el orden de las operaciones lógicas.

devuelve 2. ++indice. Las funciones eval y feval permiten efectuar esta evaluación eval(“a = 1. devuelve 3 por pantalla (es decir se devuelve o muestra el resultado de la operación luego de realizarla). --altura. Que se lee como x se vuelve el valor que tiene la variable x más uno.signos menos seguidos sin espacio entre ellos(--). Sentencias Una sentencia es una expresión simple o un conjunto de sentencias de control de flujo anidadas. en el siguiente fragmento de código. Si <condición> es verdadera. Por ejemplo. las expresiones son evaluadas simplemente tipeándolas en Octave.”) ENTER.La sentencia IF La sentencia if (si condicional) es la sentencia que permite tomar una decisión en Octave.Sentencias de Control de Flujo 5-1. se sumará uno a x. por ejemplo .1416. ENTER b=32. Ejemplos de sentencias simples son: a=1. -1) ENTER dará como resultado 3. La forma de utilizarlos será antes o despues de variables que ya se hayan definido. si x es menor que dos. pues el resultado de la operación se muestra antes de realizarla. if (x< 2) ENTER x++. Así. ENTER d= sqrt(c + (a*b)) ENTER 5. la más sencilla es: if (<condición>) {parte-entonces} endif Donde <condición> es una expresión que controla que lo que se va a hacer. Pero algunas veces puede ser necesario hacerlo explícitamente. mientra que x++ es equivalente a x = x + 1. entradas++. las sentencias de la {parte-entonces} se ejecutarán. Para matrices y vectores los operadores operan a nivel de elemento. La diferencia entre utilizarlos antes o después de la variable es la siguiente. feval("acos". ENTER . Existen tres formas básicas. Evaluación Normalmente. 4-9. 4-8. pues se está evaluando el arcocoseno con el argumento -1. ++x puede escribirse también como x=x+1. hará que a la variable a se le asigne 1. Si <condición> es falsa no se ejecutarán las sentencias de la parte entonces. ENTER c= a+b. Si x = 2 ENTER ++x es equivalente a x = x + 1. y--.

se le restará 1. else x--.endif ENTER La segunda forma del if es: if (<condición>) {parte-entonces} else {parte-no-entonces} endif Si <condición> es verdadera se ejecutan las sentencias de la {parte- entonces}. 2) == 0) x++.2)) es igual a cero (==0) se sumará 1 a x (x++. endif En este caso si x es divisible por 2 se le sumará uno a su valor. Así. . 3) == 0) x = x+5. elseif (rem (x. endif Ese fragmento hace que si el resto de dividir x por 2 (que se escribe rem(x. si <condición> es falsa se ejecutan las sentencias de la {parte- no-entonces}. 2) == 0) x++. if (rem (x. else x--. Puede haber muchas partes elseif. Si ninguna es verdadera la última {parte-no-entonces} será ejecutada. por ejemplo: if (rem (x. si es divisible por tres se le sumará cinco a su valor y si no.) La tercera forma del if es la siguiente: if (<condición>) {parte-entonces} elseif (<condición>) {parte-entonces-elseif} elseif (<condición>) {parte-entonces-elseif} elseif (<condición>) {parte-entonces-elseif} else {parte-no-entonces} endif Donde cada <condición> se chequea y cuando una <condición> es verdadera se ejecuta su correspondiente {parte entonces}.) y sino se le restará 1 a x (x--.

while (condición) cuerpo endwhile Lo primero que sucede es la verificación la condición. 10). Lo que hace un while es repetir un grupo de sentencias. endfor El rango 3:10 se va asignando a la variable i. La sentencia FOR El for es más conveniente cuando queremos contar la cantidad de veces que iteramos en el loop. Si la expresión es un rango. se vuelve a verificar la condición y mientras siga siendo verdadera se vuelve a ejecutar el cuerpo y haste que la condición no es verdadera. while (i <= 10) fib (i) = fib (i-1) + fib (i-2). for i = 3:10 fib (i) = fib (i-1) + fib (i-2). La sentencia WHILE En programación un loop significa que una parte de un programa se ejecutará más de una vez en forma sucesiva. fib = ones (1. Si la condición es inicialmente falsa el cuerpo no se ejecuta nunca. Si la condición es verdadera se ejecuta el cuerpo. hasta que no quedan valores. La forma más común es el nombre de una variable simple. trabaja por columnas. El siguiente bloque de código genera los 10 primeros números de la sucesión de fibbonacci.5-2. el valor de nombre-variable será asignado cada vez que el cuerpo se ejecute. i++. fib = ones (1. i = 3. Cualquier sentencia for se puede traducir como while y viceversa. En vez de asignar la expresión a la nombre-variable de una vez. mientras que una condición determinada sea verdadera. La sentencia while es la forma más sencilla de hacer loops en Octave. Como puede verse en el siguiente código que genera los 10 primeros números de la sucesión de fibonacci. 10). La estructura de un for es como sigue: for nombre-variable = expresión cuerpo endfor La parte nombre-variable puede tener varias formas. El operador de asignación (=) que figura en el for funciona de la siguiente manera. Una vez ejecutado el cuerpo. . un vector o un escalar. endwhile 5-3.

input("Ingrese un valor "). vec = round (rand (1. La sentencia CONTINUE La sentencia continue saltea el resto del ciclo que la incluye y empieza con el siguiente ciclo de iteración inmediatamente. while (div*div <= num) if (rem (num. endif div++. for x = vec if (rem (x. 10) * 100). Si se agrega el argumento "s" el valor ingresado se considera una cadena de caracteres.Archivos de Funciones Los programas complicados en Octave pueden ser simplificados definiendo funciones. Las funciones pueden ser directamente definidas en la . div) == 0) break. disp("Ingrese un valor "). i = 0. 2) != 0) continue. endwhile 5-5. 6 . 5-7.La sentencia INPUT La sentencia input permite el ingreso de un valor numérico.5-4. La sentencia BREAK La sentencia break hace que la ejecución “salte” fuera del ciclo while o for que la contiene. endif i++ endfor 5-6.La sentencia DISP La sentencia disp permite mostrar en pantalla el argumento que utiliza.

endfunction 6-3. function retval = avg (v) retval = sum (v) / length (v). 6-2. Cuando la función es llamada los nombre de los argumentos son utilizados para contener los valores de los argumentos durante esa llamada.línea de comando o en archivos externos y pueden ser llamadas como funciones predefinidas.Retorno de Múltiple Valores desde una función .Devolución de Valores desde una función En la mayoría de los casos también se desea que alguna información regrese desde las funciones que se definan. esta sería una función que computa el valor promedio de una serie de valores almacenados en un vector. será necesario pasarle alguna información a la función que definimos. En el cuerpo de la función se define que es lo que la función debe hacer. Las variables usadas en el cuerpo de la función son locales a la función (no existen fuera de ella). 6-1. Las variables nombradas en la arg-list y ret-val también son locales a la función. La forma general de hacer esto se logra: function ret-val = name (arg-list) cuerpo endfunction Donde ret-val es el nombre de la variable que contendrá el valor que la función retornará. Por ejemplo. Normalmente.Definiendo funciones La forma más simple de definición de una función es la siguiente: function nombre cuerpo endfunction Un nombre válido de función debe obedecer a las mismas reglas que un nombre válido de una variable. La estructura general para pasar parámetros a una función en Octave es function nombre (arg-list) cuerpo endfunction donde arg-list es una lista de argumentos separados por comas. El cuerpo de la función consiste en un conjunto de sentencias Octave. Esta variable debe estar definida antes del fin del cuerpo de la función.

idx] = vmax (v) idx = 1.m” que tengan el mismo nombre que el identificador. 6-5. En lugar de ello. busca en la lista de directorios que se encuentra almacenada en la variable predefinida LOADPATH. Octave no requiere que las funciones sean cargadas desde un archivo para utilizarlas.m en la lista de directorios definidos en LOADPATH. Una vez que Octave encuentra el archivo. el contenido del mismo es leído. primero verifica que no sea una variable o función que ya haya sido usada. Esta sentencia hace que la ejecución vuelva al resto del programa. Cuando Octave encuentra un identificador que no ha sido definido. A diferencia de muchos otros lenguajes. max = v (idx). buscando archivos “. La sintaxis es: return El comando return simplemente permite salir fácilmente del cuerpo de una función. idx = i.Archivos de Funciones (. simplemente hay que poner las definiciones de las funciones en algún sitio donde Octave pueda encontrarlas. buscará por el archivo promedio. Si se define sólo una función dentro de ese . Por ejemplo: function [max.Retornando desde una función El cuerpo de una función puede contener una sentencia return. la idea es guardar las funciones en un archivo que sea fácil de utilizar. ya sea para agregar funciones nuevas o modificar las que ya hemos creado y luego utilizarlas desde Octave. Si no la encuentra allí. La sintaxis para definir funciones que devuelvan múltiples valores será: function [ret-list] = nombre (arg-list) cuerpo endfunction donde ret-list será una lista de variables separadas por comas que guardarán los valores devueltos por la función. Así por ejemplo si Octave encuentra el identificador promedio en un programa y no es una variable. for i = 2:length (v) if (v (i) > max) max = v (i). Octave permite que una función retorne más de un valor.m) Excepto para programas muy sencillos no es práctico tener que definir todas las funciones que necesitamos utilizar cada vez que las necesitemos. endif endfor endfunction 6-4.

.1. entonces por ejemplo si instalamos Octave con las opciones por defecto este lugar sería “c:/Archivos de programas/GNU Octave 2. El lugar por defecto en donde OCTAVE espera que se encuentren los archivos es <directorio de instalación>/octave_files.archivo esta función se ejecuta.36/octave_files”.