You are on page 1of 13

Clculo Numrico 2004

OCTAVE 1-Introduccin
1-1. Qu es Octave?
Octave es un software que nos permite programar y utilizar una serie de funciones principalmente numricas. Esto se hace tipeando los comandos a utilizar y el software responder a cada uno de ellos mostrando los resultados a travs 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 distribucin gratuita que se apega a la filosofa GNU, esto es poder tener acceso al programa y al cdigo fuente del programa para modificarlo (si nos interesa), sin tener que pagar ni por su uso, ni por su obtencin, adems de poder hacer cuantas copias se quieran e instalaciones en diferentes mquinas, tambin, sin tener que pagar.

1-2. Instalacin
Existen varias versiones de Octave, todas disponibles en forma gratuita en Internet. La pgina 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 pginas de donde se puede obtener la distribucin para Windows, es la pgina de la Universidad de Crdoba que es http://www.efn.uncor.edu (all seguimos los link Departamentos, Departamento de Computacin, Materias, Informtica, SOFTWARE). El link que nos permite bajar el instalador de Octave para Windows es http://www.efn.uncor.edu/departamentos/computacion/materias/informatica/s oftware.html

Una vez obtenido el instalador simplemente se debe ejecutar el mismo y se iniciar el proceso de instalacin de OCTAVE.

1-3. Notacin en este Documento


ENTER representa presionar la tecla enter return. EL texto que aparece en itlica 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_funcin> se reemplazar, por ejemplo, por seno(x)). El tecto que aparece en negrita representa cdigo de OCTAVE listo para ser ejecutado.

1-4. Ejecutando OCTAVE por primera vez

Para ejecutar el programa, simplemente se debe hacer click en el cono correspondiente. Cuando el software se inicia, se muestra una ventana donde podemos escribir los comandos que necesitemos. Adems Octave puede graficar nuestros datos y resultados en otra ventana. La forma ms sencilla de obtener ayuda en Octave es tipeando help y luego presionando ENTER.
Existe un manual on-line en http://www.octave.org/doc/octave_toc.html . ingls en la direccin

Para salir de Octave bastar con escribir exit ENTER.

y presionar

2-Tipos de Datos en OCTAVE


Todas las versiones de Octave incluyen una serie de tipos de datos predefinidos, que incluye reales, complejos, escalares, matrices cadenas de caracteres y tipos de datos estructurados. Un tipo de datos no slo define al dato sino que adems define que operaciones pueden hacerse sobre l y con otros tipos de datos. Es posible definir nuevos tipos de datos escribiendo un poco de cdigo en C++. Estos tipos de datos pueden ser cargados al iniciarse Octave o durante la ejecucin de Octave. Esto no ser necesario en nuestro caso.

2-1. Tipos de Datos Numricos


Constantes Numricas Una constante numrica puede ser un escalar, un vector o una matriz o un nmero imaginario. La forma ms simple de una constante numrica, un escalar, es un nmero simple que puede ser un entero, una fraccin decimal, un nmero en notacin cientfica o un nmero complejo. Todas las constantes numricas en Octave son representadas internamente como nmeros de punto flotante en doble precisin (los nmeros complejos se representan como dos valores flotantes). Un nmero de punto flotante es lo que se conoce como real. As algunos valores reales que tienen el mismo valor numrico sern, por ejemplo, 105 ENTER, 1.05e+2 ENTER, 1050e-1 ENTER.

Estos valores se pueden ingresar directamente tipendolos y Octave nos mostrar el formato ms simple del valor tipeado.

Una constante numrica compleja se escribe como una expresin de la siguiente forma: 3 + 4i ENTER, 3.0 + 4.0i ENTER, 0.3e1 + 40e-1i ENTER. La nica condicin es que no haya un espacio entre el nmero y la i que representa el valor de la raz cuadrada de -1. Matrices

Es muy sencillo definir una matriz de valores en Octave. El tamao de la matriz es determinado automticamente, as la expresin a = [1, 2; 3, 4] ENTER, resulta en la matriz: a=

[ 1 2] 3 4

Ntese que los elementos de la matriz se separan con coma (,) y las filas con punto y coma (;). Los elementos de la matriz pueden ser expresiones arbitrarias siempre que las dimensiones mantengan coherencia, as la expresin [a , a] ENTER, ser

a=

[1 3

2 4

1 2 3 4

Rangos Un rango es una forma conveniente de escribir un vector con elementos igualmente espaciados. En un rango se define el primer elemento, un valor opcional de incremento entre los elementos y el valor mximo que los elementos del rango no deben exceder. Estos valores se separan con dos puntos (:), si el incremento no se escribe se considera 1. Por ejemplo el rango 1:5 ENTER ser equivalente a la fila [1,2,3,4,5] , mientras que el rango 1:3:5 ENTER ser [1,4], y el rango 7:-4:-18 ENTER ser [7,3,-1,-5,-9,-13,-17]. Un rango se puede leer de la siguente forma, sea 16:3:78, ir desde 16 hasta 78 avanzando de a 3. Predicados

Llamaremos predicados a las funciones predefinidas que se incluyen en Octave. Para los objetos numricos existen algunos predicados tiles como por ejemplo: is_matrix(a) que devuelve un valor 1 si a es una matriz, 0 en otro caso. is_vector(a) que devuelve un valor 1 si a es un vector, 0 en otro caso. is_scalar(a) que devuelve un valor 1 si a es un escalar, 0 en otro caso. is_square(x) si x es una matriz cuadrada devuelve la dimensin de la matriz, sino 0. is_symmetric(x,tol) si x es simtrica con tolerancia tol devuelve la dimensin de x, 0 en otro caso. Si tol se omite se toma la tolerancia que utiliza la maquina en donde se esta trabajando.

3-Variables
Una variable permite asignar un nombre a un valor que ser utilizado luego. El nombre de una variable consistir de caracteres, dgitos y caracteres de subrayados, pero no est permitido que empiecen con un dgito o con doble caracter de subrayado. Los nombres de variable no deben superar los 30 caracteres. Las maysculas y minsculas son consideradas como diferentes caracteres. Como un ejemplo, Son nombre de variables vlidos X , x15 , _quien_es , altura. El comando clear <variable> ENTER borra la variable, la variable deja de estar definida. Los comandos who y whos listan las variables que se hayan definido. El predicado exist(a) devuelve un 1 si la variable a existe, un 2 si el nombre, a, es el de un archivo .m, 3 si es un archivo .oct y 5 si es una funcin predefinida de Octave.

4- Expresiones
Las expresiones son los ladrillos con los que se construyen todo en Octave. Una expresin se evala en un valor, que se puede imprimir, comparar, pasar como parmetro a una funcin o asignar a una variable con una operacin de asignacin. Una expresin puede servir como sentencia. Una sentencia puede contener una o ms expresiones que incluyan variables, constantes, matrices, o combinaciones de ellas.

4-1. Expresiones ndices


Una expresin ndice permite recuperar o referenciar elementos de una matriz o un vector. Los ndices pueden ser escalares, vectores, rangos o el caracter especial dos puntos (:) que se utiliza para seleccionar la filas o columnas enteras. Los vectores utilizan un solo ndice mientras que las matrices utilizan dos. Por ejemplo, dada la matriz A = [1,2;3,4;5,6] ENTER, la siguiente expresin A(2,1) selecciona (y retorna su valor) el elemento de la segunda fila y la primera columna (el 3), mientras que las siguientes expresiones seleccionan la primera fila de la matriz A(1,1:2) A(1,:), la segunda fila de la matriz A(2,1:2) A(2,:) y la segunda columna A(1:3,2) A(:,2). Ntese que para seleccionar una columna entera se puede utilizar un rango (1:2 en el ejemplo) el caracter especial dos puntos (:)

4-2. Llamadas a Funciones


Otro tipo de expresin bsica es la llamada a una funcin que puede o no, estar predefinida en Octave. Una funcin es un nombre para un clculo particular. As, por ejemplo, sqrt ejecuta las sentencias para obtener (o calcular) la raz cuadrada de un valor. Un conjunto fijo de funciones est predefinidas en Octave, pero se pueden construir las propias funciones en caso de ser necesario. La forma de utilizar una funcin es a travs de una expresin de llamada a la funcin que consiste de: el nombre de la funcin ms una lista de argumentos entre parntesis. Estos argumentos son asimismo expresiones, que se separan con comas (,). Si no son necesarios argumentos se pueden omitir los parntesis, pero es mejor utilizarlos para que quede en claro que se esta llamando a una funcin. Algunos ejemplos son, sqrt(64) ENTER, ones(4,5) ENTER, rand() ENTER, zeros(t,y). Cada funcin posee una cantidad determinada de argumentos y cada argumento debe ser de un determinado tipo. Adems, Octave permite que se devuelvan varios valores como resultado de utilizar dicha funcin. Por ejemplo, una funcin sobre una matriz podra devolver el mayor, el menor y el valor ms repetido de la misma. Algunas funciones predefinidas son sqrt(<variable>), sin(<variable>), cos(<variable>), tan(<variable>), asin(<variable>), acos(<variable>), atan(<variable>), sinh(<variable>), cosh(<variable>),

tanh(<variable>), zeros(<variable>,<variable>), rand().

ones(<variable>,<variable>),

4-3. Operadores Aritmticos


Los operadores aritmticos son elementos que permiten construir expresiones ms complejas partiendo de expresiones sencillas o atmicas (indivisibles). Adicin: x + y : Si ambos operandos son matrices el nmero de filas y columnas debe coincidir. Si un operando es escalar su valor es sumado a cada elemento del otro operando. Adicin elemento por elemento: x .+ y : Este operador suma dos matrices elemento a elemento. Es equivalente a x +y. Sustraccin: x y Sustraccin elemento a elemento: x .-y Multiplicacin Matricial: x * y : El nmero de columnas de x debe coincidir con el nmero de filas de y. Multiplicacin elemento a elemento: x .* y : Si ambos operandos son matrices deben coincidir en dimensin. Divisin a derecha: x / y : Este concepto es equivalente a efectuar el producto del inverso de y transpuesta por x transpuesta, transpuesto. Divisin a derecha elemento a elemento: x ./ y Divisin a Izquierda: x \ y : El concepto es equivalente multiplica el inverso de x por y. Divisin a Izquierda elemento por elemento: x .\ 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. Potencia elemento por elemento: x .^ y x .** y : Si los dos operandos son matrices las dimensiones deben coincidir. Negacin: -x Suma unaria: +x : Este operador no tiene efecto sobre el operando. Conjugado: x' : Para argumentos reales este operador es lo mismo que el operador Transpuesta. Para operandos complejos calcula el conjugado. Transpuesta: x.'

4-4. Operadores de Comparacin


Los operadores de comparacin comparan los valores numricos con respecto a la igualdad. Todos los operadores de comparacin devuelven un valor 1 si la operacin es verdadera 0 si es falsa. Para matrices los operadores trabajan elemento por elemento. As por ejemplo, [1, 2; 3, 4] == [1, 3; 2, 4] ENTER dar un resultado de unos y ceros elemento por elemento [1,0;0,1]. Si un operador fuera un escalar y el otro una matriz, el escalar se comparar con cada elemento de la matriz. x x x x x x < y es verdadero si x es menor que y <= y es verdadero si x es menor o igual que y == y es verdadero si x es igual a y >= y es verdadero si x es mayor o igual que y > y es verdadero si x es mayor que y != 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. Expresiones Booleanas


Una expresin booleana es una combinacin de expresiones de comparacin usando operadores "o" (||), "y" (&&) y "no" (!), junto con parntesis que controlan el orden de las operaciones lgicas. La veracidad de una expresin booleana es computada combinando la veracidad de las expresiones componentes elementales. Un valor cero es considerado falso y un valor distinto de cero es considerado verdadero. x && y: es verdadero si x e y son verdaderos. x || y: es verdadero si x o y son verdaderos. !x: es verdadero si x es falso.

4-6. Expresiones de Asignacin


Una expresin de asignacin es una expresin que almacena un nuevo valor en una variable. Por ejemplo, para asignar un valor 1 a la variable z se utiliza la siguiente expresin z = 1 ENTER. Luego de que esta expresin es ejecutada la variable z tiene un valor 1, sin importar el valor que tena z antes. As el signo igual (=) se conoce como operador de asignacin (y suele leerse como "se vuelve"). La parte izquierda del operador (lvalue) debe ser una variable, un elemento de una matriz, o una lista de valores. La parte derecha del operador puede ser cualquier expresin. Es importante notar que las variables puede cambiar de tipo durante la ejecucin de un programa, en un momento ser un valor numrico y luego ser una matriz. Esta tcnica si bien es vlida no es recomendada. Asignar un escalar a un conjunto de ndices de una matriz har que los elementos de la matriz se vuelvan el valor escalar. As, a(:, 2) = 5 ENTER, har que todos los elementos de la segunda columna de la matriz a sean 5. Una asignacin es una expresin y por lo tanto tiene un valor. La expresin z=1 tiene valor 1 (es verdadera, o vlida). Esto permite escribir mltiples asignaciones simultaneas, como por ejemplo x = y = n = 0 ENTER, que almacena 0 en las tres variables. Siguiendo con nuestro ejemplo de asignacin, teniendo ya un valor en z otro ejemplo de asignacin sera x = z +5 ENTER con lo que la variable x tendr un valor de 6. Si leemos la sentencia anterior, obtenemos, "La variable x se vuelva el valor de la variable z ms 5".

4-7. Operadores de Incremento


Los operadores de incremento incrementan o decrementan el valor de una variable en 1. El operador de incremento se escribe como dos signos ms seguidos sin espacio entre ellos (++) y el de decremento como dos signos menos seguidos sin espacio entre ellos(--). La forma de utilizarlos ser antes o despues de variables que ya se hayan definido, por ejemplo , entradas++, y--, --altura, ++indice.

As, ++x puede escribirse tambin como x=x+1. Que se lee como x

se vuelve el valor que tiene la variable x ms uno.

La diferencia entre utilizarlos antes o despus de la variable es la siguiente. Si x = 2 ENTER ++x es equivalente a x = x + 1, devuelve 3 por pantalla (es decir se devuelve o muestra el resultado de la operacin luego de realizarla), mientra que x++ es equivalente a x = x + 1, devuelve 2, pues el resultado de la operacin se muestra antes de realizarla. Para matrices y vectores los operadores operan a nivel de elemento.

4-8. Evaluacin
Normalmente, las expresiones son evaluadas simplemente tipendolas en Octave. Pero algunas veces puede ser necesario hacerlo explcitamente. Las funciones eval y feval permiten efectuar esta evaluacin eval(a = 1;) ENTER, har que a la variable a se le asigne 1, feval("acos", -1) ENTER dar como resultado 3.1416, pues se est evaluando el arcocoseno con el argumento -1.

4-9. Sentencias
Una sentencia es una expresin simple o un conjunto de sentencias de control de flujo anidadas. Ejemplos de sentencias simples son: a=1; ENTER b=32; ENTER c= a+b; ENTER d= sqrt(c + (a*b)) ENTER

5- Sentencias de Control de Flujo


5-1.La sentencia IF
La sentencia if (si condicional) es la sentencia que permite tomar una decisin en Octave. Existen tres formas bsicas, la ms sencilla es: if (<condicin>) {parte-entonces} endif Donde <condicin> es una expresin que controla que lo que se va a hacer. Si <condicin> es verdadera, las sentencias de la {parte-entonces} se ejecutarn. Si <condicin> es falsa no se ejecutarn las sentencias de la parte entonces. Por ejemplo, en el siguiente fragmento de cdigo, si x es menor que dos, se sumar uno a x. if (x< 2) ENTER x++; ENTER endif ENTER La segunda forma del if es:

if (<condicin>) {parte-entonces} else {parte-no-entonces} endif Si <condicin> es verdadera se ejecutan las sentencias de la {parteentonces}, si <condicin> es falsa se ejecutan las sentencias de la {parteno-entonces}. As, por ejemplo: if (rem (x, 2) == 0) x++; else x--; endif Ese fragmento hace que si el resto de dividir x por 2 (que se escribe rem(x,2)) es igual a cero (==0) se sumar 1 a x (x++;) y sino se le restar 1 a x (x--;)

La tercera forma del if es la siguiente: if (<condicin>) {parte-entonces} elseif (<condicin>) {parte-entonces-elseif} elseif (<condicin>) {parte-entonces-elseif} elseif (<condicin>) {parte-entonces-elseif} else {parte-no-entonces} endif Donde cada <condicin> se chequea y cuando una <condicin> es verdadera se ejecuta su correspondiente {parte entonces}. Si ninguna es verdadera la ltima {parte-no-entonces} ser ejecutada. Puede haber muchas partes elseif. if (rem (x, 2) == 0) x++; elseif (rem (x, 3) == 0) x = x+5; else x--; endif En este caso si x es divisible por 2 se le sumar uno a su valor, si es divisible por tres se le sumar cinco a su valor y si no, se le restar 1.

5-2. La sentencia WHILE

En programacin un loop significa que una parte de un programa se ejecutar ms de una vez en forma sucesiva. La sentencia while es la forma ms sencilla de hacer loops en Octave. Lo que hace un while es repetir un grupo de sentencias, mientras que una condicin determinada sea verdadera. while (condicin) cuerpo endwhile Lo primero que sucede es la verificacin la condicin. Si la condicin es verdadera se ejecuta el cuerpo. Una vez ejecutado el cuerpo, se vuelve a verificar la condicin y mientras siga siendo verdadera se vuelve a ejecutar el cuerpo y haste que la condicin no es verdadera. Si la condicin es inicialmente falsa el cuerpo no se ejecuta nunca. El siguiente bloque de cdigo genera los 10 primeros nmeros de la sucesin de fibbonacci. fib = ones (1, 10); i = 3; while (i <= 10) fib (i) = fib (i-1) + fib (i-2); i++; endwhile

5-3. La sentencia FOR


El for es ms conveniente cuando queremos contar la cantidad de veces que iteramos en el loop. La estructura de un for es como sigue: for nombre-variable = expresin cuerpo endfor La parte nombre-variable puede tener varias formas. La forma ms comn es el nombre de una variable simple. El operador de asignacin (=) que figura en el for funciona de la siguiente manera. En vez de asignar la expresin a la nombre-variable de una vez, trabaja por columnas. Si la expresin es un rango, un vector o un escalar, el valor de nombre-variable ser asignado cada vez que el cuerpo se ejecute. Como puede verse en el siguiente cdigo que genera los 10 primeros nmeros de la sucesin de fibonacci. fib = ones (1, 10); for i = 3:10 fib (i) = fib (i-1) + fib (i-2); endfor El rango 3:10 se va asignando a la variable i, hasta que no quedan valores. Cualquier sentencia for se puede traducir como while y viceversa.

5-4. La sentencia BREAK

La sentencia break hace que la ejecucin salte fuera del ciclo while o for que la contiene. while (div*div <= num) if (rem (num, div) == 0)

break;
endif div++; endwhile

5-5. La sentencia CONTINUE


La sentencia continue saltea el resto del ciclo que la incluye y empieza con el siguiente ciclo de iteracin inmediatamente. vec = round (rand (1, 10) * 100); i = 0; for x = vec if (rem (x, 2) != 0) continue; endif i++ endfor

5-6.La sentencia INPUT


La sentencia input permite el ingreso de un valor numrico. input("Ingrese un valor "); Si se agrega el argumento "s" el valor ingresado se considera una cadena de caracteres.

5-7.La sentencia DISP


La sentencia disp permite mostrar en pantalla el argumento que utiliza. disp("Ingrese un valor ");

6 - Archivos de Funciones
Los programas complicados en Octave pueden ser simplificados definiendo funciones. Las funciones pueden ser directamente definidas en la lnea de comando o en archivos externos y pueden ser llamadas como funciones predefinidas.

6-1.Definiendo funciones

La forma ms simple de definicin de una funcin es la siguiente: function nombre cuerpo endfunction Un nombre vlido de funcin debe obedecer a las mismas reglas que un nombre vlido de una variable. El cuerpo de la funcin consiste en un conjunto de sentencias Octave. En el cuerpo de la funcin se define que es lo que la funcin debe hacer. Normalmente, ser necesario pasarle alguna informacin a la funcin que definimos. La estructura general para pasar parmetros a una funcin en Octave es function nombre (arg-list) cuerpo endfunction donde arg-list es una lista de argumentos separados por comas. Cuando la funcin es llamada los nombre de los argumentos son utilizados para contener los valores de los argumentos durante esa llamada.

6-2.Devolucin de Valores desde una funcin


En la mayora de los casos tambin se desea que alguna informacin regrese desde las funciones que se definan. 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 funcin retornar. Esta variable debe estar definida antes del fin del cuerpo de la funcin. Las variables usadas en el cuerpo de la funcin son locales a la funcin (no existen fuera de ella). Las variables nombradas en la arg-list y ret-val tambin son locales a la funcin. Por ejemplo, esta sera una funcin que computa el valor promedio de una serie de valores almacenados en un vector. function retval = avg (v) retval = sum (v) / length (v); endfunction

6-3.Retorno de Mltiple Valores desde una funcin


A diferencia de muchos otros lenguajes, Octave permite que una funcin retorne ms de un valor. La sintaxis para definir funciones que devuelvan mltiples valores ser: function [ret-list] = nombre (arg-list) cuerpo endfunction

donde ret-list ser una lista de variables separadas por comas que guardarn los valores devueltos por la funcin. Por ejemplo: function [max, idx] = vmax (v) idx = 1; max = v (idx); for i = 2:length (v) if (v (i) > max) max = v (i); idx = i; endif endfor endfunction

6-4.Retornando desde una funcin


El cuerpo de una funcin puede contener una sentencia return. Esta sentencia hace que la ejecucin vuelva al resto del programa. La sintaxis es: return El comando return simplemente permite salir fcilmente del cuerpo de una funcin.

6-5.Archivos de Funciones (.m)


Excepto para programas muy sencillos no es prctico tener que definir todas las funciones que necesitamos utilizar cada vez que las necesitemos. En lugar de ello, la idea es guardar las funciones en un archivo que sea fcil de utilizar, ya sea para agregar funciones nuevas o modificar las que ya hemos creado y luego utilizarlas desde Octave. Octave no requiere que las funciones sean cargadas desde un archivo para utilizarlas, simplemente hay que poner las definiciones de las funciones en algn sitio donde Octave pueda encontrarlas. Cuando Octave encuentra un identificador que no ha sido definido, primero verifica que no sea una variable o funcin que ya haya sido usada. Si no la encuentra all, busca en la lista de directorios que se encuentra almacenada en la variable predefinida LOADPATH, buscando archivos .m que tengan el mismo nombre que el identificador. As por ejemplo si Octave encuentra el identificador promedio en un programa y no es una variable, buscar por el archivo promedio.m en la lista de directorios definidos en LOADPATH. Una vez que Octave encuentra el archivo, el contenido del mismo es ledo. Si se define slo una funcin dentro de ese archivo esta funcin se ejecuta. El lugar por defecto en donde OCTAVE espera que se encuentren los archivos es <directorio de instalacin>/octave_files, entonces por ejemplo si instalamos Octave con las opciones por defecto este lugar sera c:/Archivos de programas/GNU Octave 2.1.36/octave_files.

You might also like