Universidad Tecnológica de Panamá
Facultad de Ingeniería Mecánica
Lic. En Ingeniería Naval
Lab. De Computadora en Ing. Mecánica
Informe #2 Scilab
Elaborado por:
Ricardo Franco 8-931-169
Carlos Medina 8-921-1094
Luis Cotes 8-928-1910
Asignado por:
Ilka Banfield
Mirella Martinez
Grupo:
1NI-701
Sub-Grupo:
Lab. B
I Semestre 2016
Introducción
Conoceremos las funciones elementales que este programa brinda a sus clientes. Scilab es una herramienta fundamental para desarrollar cálculos matemáticas y graficas que son representadas por funciones. A continuación se dará a conocer todo sobre esta herramienta, su historia, entre otras cosas.
¿Qué es Scilab?
Scilab es un paquete de software libre de código abierto para computación científica, orientado al cálculo numérico, a las operaciones matriciales y especialemente a las aplicaciones científicas y de ingeniería. Puede ser utilizado como simple calculadora matricial, pero su interés principal radica en los cientos de funciones tanto de propósito general como especializadas que posee así como en sus posibilidades para la visualización gráfica.
Scilab posee además un lenguaje de programación propio, muy próximo a los habituales en cálculo numérico (Fortran, C, …) que permite al usuario escribir sus propios scripts (conjunto de comandos escritos en un fichero que se pueden ejecutar con una única orden) para resolver un problema concreto y también escribir nuevas funciones con, por ejemplo, sus propios algoritmos.
Scilab dispone, además, de numerosas Toolboxes, que le añaden funcionalidades especializadas. Inicialmente desarrollado por el INRIA (Institut National de Recherche en Informatique et Automatique), actualmente está a cargo de un Consorcio de universidades, empresas y centros de investigación. Website: http://www.scilab.org
Características de Scilab
Entre las características que posee Scilab, procederemos a mencionar las básicas, estas son:
Sintaxis: Scilab posee su propio lenguaje de programación, orientado al uso de matrices y vectores. Es un lenguaje interpretado. Scilab incorpora su propio editor llamado SciNotes, aunque está disponible también Scipad. La extensión de estos archivos es *.sce o *.sci. Ejemplo del programa hola mundo:
// línea de comentario, como en C++
clc // limpia la pantalla
disp("Hola Mundo") // imprime Hola Mundo
Scilab permite la operación de matrices. Ejemplo del uso de matrices:
Polinomios y Cálculos Simbólicos: Scilab tiene funciones diseñadas especialmente para el tratamiento de polinomios y cálculo simbólico (aunque existen otros que facilitan la transcripción de texto como Maxima). Por ejemplo para insertar el polinomio:
Se utilizan los siguientes comandos (nótese que los coeficientes del polinomio se insertan del término con menor orden hasta el término de orden mayor poniendo ceros en los términos no existentes:
y = poly([-3 1/2 0 5], "x", "coeff")
Interfaces Graficas: soporta creación de interfaces gráficas de usuario, y visualización 2D y 3D.
Gráfico de la función
t = [0 : 0.001 : 2 * %pi]
y = sin(t)
xlabel("eje X"); ylabel("Eje y"); title("Título del gráfico")
plot(t, y)
Xcos: El programa Scilab tiene un entorno similar a Simulink de Matlab para simulación de sistemas dinámicos y resolución de sistemas deecuaciones diferenciales. Este entorno posee varios paquetes que incluye algunas herramientas para simulación sencilla de circuitos eléctricos y termo hidráulica.
Función De Scilab
En Scilab al igual que en Matlab, las funciones se definen en ficheros que en este caso tienen una extensión .sci:
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.
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.
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.
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.
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.scipero 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.
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:
Por lo tanto en esta entrada, te mostramos la utilidad de funcprot() y cómo lidiar con las redefiniciones.
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:
Si intentáramos ejecutar dicho script como normalmente se hace en Matlabobtendremos un error del sigueinte tipo:
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:
Cómo vemos, el comportamiento es el esperado y como mencionabamos antes, el scripttiene 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.
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.
Comandos Utilizados
Scilab posee diversos comandos. A continuación mencionare algunos de los comandos más útiles:
--> s=poly(0,'s') // Creación de "s" como variable de polinomio
--> P=syslin('c',8/(s+4)) // Definiendo el sistema continuo P(s)= 8(s+4)
--> zeta=abs(log(Mp)/sqrt(%pi^2+log(Mp)^2))
--> // Fórmula para cálculo de . Mp es el máximo pico, %pi es la variable . log logaritmo neperiano
--> wn=4/zeta/Ts // Cálculo de la frecuencia natural de Ts=4n
--> polo=-zeta*wn+%i*wn*sqrt(1-zeta^2)
--> // polo dominante, observe %i para definir parte imaginaria, sqrt raíz cuadrada y ^ elevado a
--> P_polo = horner(P,polo) // Evaluación de P(polo)
--> ContribAngular=atan(imag(P_polo),real(P_polo))*180/%pi
--> // Contribución angular de los polos y ceros de P al punto P_polo.
--> evans(P,K_max) // Lugar de las raíces de P, observe que K_max es la ganancia
--> // máxima sobre la que se grafica. Es conveniente colocar un valor para mejor gráfica
--> bode(P) // diagrama de Bode de P. Ojo eje de ordenadas en Hz.
--> [M_fase,f_fase]=p_margin(P) // Margen de fase y frecuencia de margen de fase de P
--> [M_gana,f_gana]=g_margin(P) // Margen de ganancia y frecuencia margen de ganancia de P
--> t=0:0.05:3 // genera vector t con valores de 0 a 3 en saltos de 0.05
--> y=csim('step',t,P); // genera un vector y con la respuesta al escalón de P
--> // en los valores de tiempo t. Observe el ; para que no saque los valores de y por pantalla.
--> plot(t,y,'k') // grafica los valores de y contra t en negro
--> help plot, help csim, help evans, help ...
--> // menú de ayuda para el comando específico
Conclusiones
En conclusión puedo decir que scilab es una herramienta y un lenguaje de programación básico, que puede desarrollar diversas funciones matemáticas, que ayudan al programador a desarrollar con eficiencia un trabajo. Se ha intentado abordar la computación numérica presentando un software capaz de competir en calidad y eficiencia con aplicaciones comerciales de alto nivel como Mapple y Matlab, con las ventajas añadidas de ser multiplataforma y gratuito. Este documento ha procurado dar una visión de conjunto suficientemente amplia para iniciarse en el manejo del programa de manera que cualquier técnico o científico que comience a utilizarlo no tarde en descubrir las múltiples posibilidades de este entorno.
Ricardo Franco
De este trabajo pude aprender que Scilab posee una variedad de comandos y es de suma importancia saber utilizarlos al laborar con este programa, los comandos están dados en inglés y a veces se dificulta el uso debido al idioma, pero con la práctica podremos conseguir un excelente dominio sobre este programa o lenguaje de programación.
Luis Cotes