Funciones y Scripts en Scilab.

Scilab es uno de los programas y lenguajes más usados a nivel académico esto se debe a su gran potencial de calculo y sintaxis a la hora de realizar (por así llamarlo) ‘programación científica’, y por otro lado por que es la contra-parte libre al paquete de cálculo científico Matlab del que hemos hablado en este blog antes. Aunque la sintaxis entre ambos lenguajes resulta ser bastante familiar, hay qeu reconocer que Matlab en cuanto a facilidad de uso en algunos casos llega a ser superior por lo que a veces la migración hacia Scilab resulta un poco tediosa cuando estamos muy acostumbrados a trabajar en Matlab, sin embargo no es tanto el trabajo para adaptarse rápidamente a la alternativa libre.

Algo muy importante a lo hora de trabajar con estos sistemas es el hecho de poder escribir funciones o scripts en ficheros aparte además de escribir los comandos en la ventana de comandos, esto permite la reutilización de código entre otras cosas, así solo tipeamos los comandos y las operaciones una sola vez y luego llamamos todos los procedimientos desde la ventana de comandos para que estos se ejecuten. A continuación vamos a ver como crear funciones y scripts y su posterior ejecución en el entorno.

Antes de comenzar a escribir y definir las funciones escribimos en la ventana de comandos de Scilab la palabra edit o scinotes para llamar al editor de código de Scilab y a continuación podremos comenzar a trabajar.

Funciones.

¿Cómo se definen las funciones?

 En Scilab al igual que en Matlab, las funciones se definen en ficheros que en este caso tienen una extensión .sci:

prototipo scilab

Como se puede ver tienen el mismo comportamiento que al definir funciones en Matlab, inician con la plabra function, luego entre corchetes tienen los parámetros de salida (o lo que se retorna cuando termine la ejecución) después aparece el signo igual (=) y en seguida el nombre de la función, el cual debe ser el mismo que el nombre del archivo en el que se va a guardar, seguido de esto, aparecen los parámetros de entrada. Después podemos definir nuestro código, las instrucciones que queremos que realize nuestra función y por último debe aparecer la palabra reservada endfunction (todo junto). Cabe aclarar que pueden haber varios argumentos de entrada y varios de salida, y que a su vez pueden ser de cualquier tipo de dato que sea válido para Scilab, para este caso la sintaxis consiste en separarlos por ‘ , ‘ (coma) cómo se ve en la siguiente imagen.

funcion2

De esta forma, la función retorna las varibles de salida salida1, salida2, salida3 y recibe 3 parámetros a la entrada que son: entrada1, entrada2, entrada3, los cuales como habiamos mencionado antes, pueden ser de cualquier tipo (números, vectores, matrices, estructuras, etc).

Es muy importante tener en cuenta que las variables que son creadas dentro de la función son locales a ella y no pueden ser accedidas desde el exterior, por lo tanto si dentro de una función creamos una variable ‘a’ y luego intentamos acceder a ‘a’ desde la consola, obtendremos un error ya que esta no estará presente en el workspace por lo que siempre que queramos tener acceso a una variable que haya estado dentro de la funcion debemos retornarla poniendola en los parámetros de salida.

¿Cómo ejecutar las funciones?

 A diferencia de las funciones en Matlab, donde solo basta con guardar el archivo .m y ponerlo en el ‘directorio de trabajo’ en Scilab es necesario hacer uso del comando exec() para cargar la función que hemos definido, pero no se asusten, lo único que hay que tener en cuenta es que antes de usar la función debemos hacer esto y ya podrémos trabajar el resto del tiempo como lo hacemos en Matlab. Para mostrar el funcionamiento vamos a  crear una función que realiza la suma de dos números ingresados y retorna el resultado, por lo que tenemos la función de la figura de abajo.

funcion5

Si por ejemplo queremos ejecutar esta función desde la consola (sin haberla cargado previamente en el entorno de trabajo con exec() ) obtendremos un error del siguiente tipo, ya que hasta que no la carguemos, Scilab no reconocerá la existencia de dicha función, incluso si estamos en el directorio correcto como se ve al costado izquierdo de la figura, donde aparece la función suma.sci.

funcion3

Sin embargo, si realizamos los procedimientos en el orden correcto, entonces cargarémos la función en el entorno (es decir la sesión de trabajo) haciendo uso del comando exec() el cúal recibe dos parámetros, uno es la ruta (entre comillas, como se ve en la figura) de donde se encuentra el archivo (.sci) que contiene la función y el siguiente parámetro es un numéro entero normalmente es -1 para que no aparesca un ‘eco’ de todo lo que haya escrito en la función, o un 1 para que cada linea que haya en la función aparezca escrita en la consola, de esta forma vamos a ejecutar nuestra función, el exec() solo hay que realizarlo una vez, luego, las funciones se pueden usar normalmente hasta que se de la orden clear, que borra todos los datos y las funciones definidas en una sesión.

funcion4

Luego, cuando se hace un ‘clear’ las variables se borran pero también las funciones que hayan sido definidas en esta sesión, por lo tanto si ya hemos definido la función suma.sci pero luego hacemos un clear, al tratar de ejecutarla nuevamente Scilab no la reconocerá, por lo tanto debemos redefinirla con exec() como antes, si queremos volver a usarla.

funcion6

Algunas veces cuando creamos una función, la cargamos al entorno de Scilab y por algún motivo hacemos un cambio sobre ellas (y por lo tanto guardamos los cambios) tenemos que cargar nuevamente la función para que dichos cambios surtan efecto. En varias ocasiónes cuando volvemos a cargar la función sin haber hecho un ‘clear’ por ejemplo, entonces nos aparecerá un mensaje de alerta por parte de Scilab donde nos indica que se está ‘redefiniendo’ dicha función, esto no es un error, pero tener ese aviso cada vez que hagamos hasta la más minima modificación en nuestra función puede resultar molesto, como se ve en la figura:

funcprot

Por lo tanto en esta entrada, te mostramos la utilidad de funcprot() y como lidiar con las redefiniciones.

Scripts.

¿Cómo se definen y ejecutan los scripts?

 Los Scripts en Scilab nos permiten poner en un archivo aparte una serie de ordenes o comandos que se irán ejecutanto en orden descendente al llamar el script, por lo tanto ese código podrá ser reutilizado cuantas veces sea necesario, los scripts de Scilab son iguales a los de Matlab, no tienen nada más en su interior que los comandos necesarios con los que deben cumplir y los comentarios que se quieran hacer sobre el código. Al igual que con las funciones, los Scripts deben hacer uso del comando exec(), la única diferencia es que estos tienen una extensión de archivo .sce.

En Scilab, los scripts tienen acceso a las variables del workspace o espacio de trabajo, por lo tanto, a modo de ejemplo tenemos el sigueinte script que accede a un par de variables ‘a’ y ‘b’ definidas previamente (antes de llamar al propio script) y realizar la suma de ambos y alamacenarlos en una nueva variable ‘resultado’ la cuál será creada en el workspace automáticamente por el script (esta es una de las ventajas al hacer uso de ellos).

El código al interior del script con nombre ‘Un_script.sce’ es el siguiente:

codigo

Si intentáramos ejecutar dicho script como normalmente se hace en Matlab obtendremos un error del sigueinte tipo:

no_matlab

Lo que nos recuerda que la forma de ejecutar el script es mediante el uso de exec(), declarando previemante las variables que necesita el ejemplo para evitar errores, y esto aparece a continuación:

llamado

Cómo vemos, el comportamiento es el esperado y como mencionabamos antes, el script tiene acceso a las variables del workspace, es decir a las variables que han sido definidas en la consola, y además a crear nuevas variables, por lo tanto, como era de esperarse, la nueva variable ‘resultado’ aparecerá ahora en el workspace como se ve en la siguiente figura.

ambito

En esta entrada hablamos sobre cómo llamar funciones o scripts desde otros scripts, lo que a veces resulta útil saber y en algunas ocasiones, necesario.

Hasta aquí este artículo, espero que te haya servido para aclarar ciertas dudas, si crees que esto puede ser útil para alguien más ayúdanos a compartirlo. Dinos en los comentarios si esto te ha servido o como debería cambiar, saludos.

Autor: Julio Marulanda

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s