6. Funciones y Scripts

Contents of this section

Cuando cierto grupo de sentencias es muy usado puede incluirse en un archivo con extensión `file.m' y ser llamado desde Octave directamente por su nombre:

octave> file

Existen dos tipos de archivos `.m', los "scripts" y las "funciones". Los scripts son simplemente listas de sentencias, al ser llamado es como si las lista de sentencias fuera incluido en el prompt de Octave. Por ejemplo si escribimos el siguiente archivo `program.m' (`$' es el prompt del shell de Unix):

$ cat program.m
disp(" Sea la matriz: ")

A=rand(5);

disp(" y el miembro derecho: ")

b=rand(5,1)

disp(" la solucion del sistema lineal \"A x = b\" es: ")

x=A\b

$ 

y lo invocamos en el prompt de Octave, obtenemos:

octave.bin:8> program
 Sea la matriz: 
A =

  0.0585678  0.4895890  0.2189970  0.3789282  0.0070595
  0.9847305  0.8799793  0.5523543  0.3834434  0.9909419
  0.9980757  0.6343816  0.5049118  0.9492567  0.3068205
  0.6248775  0.1056383  0.8699436  0.8245406  0.6066207
  0.0062269  0.1845125  0.9168088  0.1129778  0.6668941

 y el miembro derecho: 
b =

  0.83350
  0.72816
  0.73784
  0.57180
  0.37908

 la solucion del sistema lineal "A x = b" es: 
x =

  -1.27390
   0.94521
  -0.62628
   1.52004
   0.92228

octave.bin:9> 

Un script puede llamar a otro script y así siguiendo.

Las funciones son más parecidas al concepto de "subrutina" en Fortran. Primero, pasan ciertos valores de entrada y de salida, los cuales dentro de la función toman nombres distintos. Las demás variables "externas" quedan aisladas de las "internas". Por ejemplo si definimos la siguiente función que calcula el promedio de los elementos de un vector:

function retval = avg (v)
  retval = sum (v) / length (v);
endfunction

y la llamamos de la siguiente manera en Octave:

octave> vec=rand(1,5)
vec =

  0.61434  0.26735  0.15900  0.77773  0.85297

octave> avg(vec)
ans = 0.53428
octave> v="string"
v = string
octave> avg(vec)
ans = 0.53428
octave> v="string"
v = string
octave> 

Vemos que la variable que "afuera" es llamada `vec' adentro de la función es llamada `v'. Además, podemos usar afuera una variable llamada `v' sin que entre "en colisión" con la interna.

Esta es mi figura


Next Chapter, Previous Chapter

Table of contents of this chapter, General table of contents

Top of the document, Beginning of this Chapter