Desarrollado por | Empresas Scilab |
---|---|
Última versión | 6.1.0 (25 de febrero de 2020) |
Depositar | git: //git.scilab.org/scilab |
Escrito en | C ++ , C , Java y Fortran |
Interfaz | GTK |
Sistema de explotación | Distribución de software de Linux , Microsoft Windows , macOS y Berkeley |
Tipo | Cálculo numérico |
Licencia | CeCILL v2 , GPLv2 |
Sitio web | www.scilab.org , scilab.io |
Scilab (pronunciado [ s a d l a b ] Contraction Scientific Laboratory en inglés) es un software gratuito de computación numérica multiplataforma que proporciona un entorno informático para aplicaciones científicas. Posee un lenguaje de programación orientado al cálculo numérico de alto nivel . Se puede utilizar para procesamiento de señales , análisis estadístico , procesamiento de imágenes , simulaciones de dinámica de fluidos , optimización numérica y modelado y simulación de sistemas dinámicos explícitos e implícitos.
Está disponible para Windows , Mac OS X , GNU / Linux y BSD .
La sintaxis y las posibilidades que ofrece Scilab son similares a las de MATLAB , pero los dos programas no son compatibles aunque existe un traductor de MATLAB a Scilab.
El proyecto nació en Inria en 1982 con el nombre de Blaise , de Matlab. Por lo tanto, inicialmente es una superposición de Fortran que permite una programación estructurada , con una sintaxis cercana a la de Pascal . En 1984, Inria fundó una empresa joven, Simulog, para comercializar el producto con el nombre de Basile .
En la década de 1990, Simulog dejó de distribuir Basile y el proyecto, entonces llamado Meta2 , se convirtió en el fruto de una colaboración entre investigadores de Inria y la Ecole Nationale des Ponts et Chaussées . La primera versión de Scilab, entonces llamada Ψlab ( Psilab , misma pronunciación), estuvo disponible en 1994. El desarrollo de Scicos comenzó al mismo tiempo, como una caja de herramientas de gráficos.
En 1998, un ex estudiante de doctorado del proyecto Meta2, Habib Jreige, fundó la start-up Saphir-Control para brindar asistencia a empresas privadas que utilizan Scilab.
El equipo de Metalau se fundó en 2000 para desarrollar un traductor Matlab / Scilab y garantizar la integración de bibliotecas gráficas orientadas a objetos y, en particular, una interfaz gráfica en Java.
A principios de 2003, Inria decidió crear el Consorcio Scilab, con el apoyo de empresas y organizaciones académicas para hacer frente al aumento del número de personas que descargan y utilizan Scilab y para asegurar su futuro y desarrollo. En 2005, el Consorcio Scilab decidió dedicarse al desarrollo de Java; el equipo de Metalau decide permanecer en la tecnología Gtk y por lo tanto crea un split (fork) llamado ScilabGtk basado en Scilab 4; este proyecto pasará a llamarse ScicosLab .
En línea con el desarrollo industrial, el Consorcio Scilab se une a la Fundación de Cooperación Científica Digiteo enjulio 2008 brindar un entorno propicio para el crecimiento sostenido de la operación y preparar su traslado gradual a una estructura privada.
Entonces en junio de 2010, Scilab Enterprises se creó sobre el modelo económico clásico de código abierto para garantizar el desarrollo de software Scilab gratuito basado en código abierto y para ofrecer servicios profesionales de pago. DesdeJulio de 2012, el software Scilab es desarrollado por Scilab Enterprises .
En 2015, Inria y OCamlPro establecieron un proyecto conjunto de intérpretes OCaml llamado Scilint . Esto da lugar a Sciweb , un intérprete accesible por un navegador web , aunque incompleto y más lento.
Distribuido gratuitamente y con su código fuente a través de Internet desde 1994 , está disponible precompilado para un gran número de arquitecturas . Sin embargo, no se trataba de software de código abierto según la Iniciativa de código abierto ni de software libre . De hecho, la antigua licencia de Scilab no autoriza la distribución comercial de una versión modificada. De acuerdo con la clasificación de la FSF , se trataba, por tanto, de un software bastante semi-libre . Por lo tanto, Scilab se convirtió en software libre cuando se cambió la licencia: se distribuye bajo la licencia CeCILL v2 desde la versión 5.0, una licencia libre compatible con GNU GPL .
Scilab puede ejecutar instrucciones de línea de comando , así como archivos de comando (scripts) que contienen instrucciones (formato de texto). Puede ejecutar programas Fortran o C desde Scilab. También es posible utilizar el motor Scilab desde una aplicación externa gracias a la API call_scilab. Scilab se completa con un entorno gráfico Xcos (basado en Scicos ) comparable al entorno gráfico Simulink suministrado con Matlab.
El indicador de la línea de comando consta de una "flecha": dos guiones y un signo superior -->. La instrucción se escribe y luego se valida con la tecla de retorno de carro ( Enter , Return ). El resultado se muestra después, a menos que la línea termine con un punto y coma, en cuyo caso se oculta el resultado. Por ejemplo :
-->a = 1; -->A = 2; -->a + A ans = 3.El primer comando asocia el valor "1" a la variable "a" (resultado oculto), el segundo comando asocia el valor "2" a la variable "A" (la sintaxis es susceptible de rotura ), el tercer control calcula la suma de los dos ( ans es la abreviatura de respuesta que significa "respuesta" en inglés).
Puede escribir varias instrucciones en la misma línea, separándolas con una coma o con un punto y coma si no desea mostrar el resultado. También puede poner una instrucción en varias líneas (por ejemplo, por motivos de presentación) poniendo tres puntos " ... " antes de presionar la tecla de retorno de carro.
Scilab utiliza las funciones y funciones de puerta ( +, -, *, /, ^o **, sqrt()a la raíz cuadrada , cos()para el coseno , int()a la parte entera , round()para el redondeo a más cercano, abs()a la valor absoluto ...) y otros (por ejemplo, randpara un número aleatorio entre 0 y 1). La función whomuestra las variables declaradas. La variable anscontiene el último resultado.
El separador decimal es el punto. Para ingresar la i imaginaria , debe usar ; simplemente aparece como "i" en los resultados. Para ingresar al infinito ∞ , debe usar ; simplemente aparece como "inf" en los resultados. El valor de π se obtiene por y la constante de Neper e por . %i%inf%pi%e
BooleanosCuando asigna un valor, el booleano se usa %Tpara "verdadero" ( verdadero ) y %Fpara "falso" ( falso ). El resultado de la operación mostrada es respectivamente To F.
El operador O se indica “| "( Tubo ), Y se indica" & "(y comercial ), No se indica" ~ "( tilde ). Ejemplo
-->(%T & %F) | %F ans = F.Un booleano se puede obtener mediante la comparación de dos valores de las relaciones de igualdad == y la diferencia <>, o ~=, y relaciones de orden < , <=, >y >=.
Polinomios y fracciones racionalesNo se trata aquí de funciones polinomiales que solo permitirían su evaluación numérica, sino de polinomios formales .
La declaración de un polinomio se realiza con dos funciones. La primera función, x = poly(0, "x")que define "x" como el indeterminado de un polinomio, luego el enunciado del polinomio usando este indeterminado. Ejemplo
-->x = poly(0, "x"); p = x ^ 2 + 2 * x + 1 p = 2 1 + 2x + xLa función roots(p)da las raíces del polinomio p , la función coeff(p)da una matriz cuyos coeficientes son los coeficientes del polinomio p . La función varn(p)devuelve el nombre del indeterminado de p (aquí, x ).
De hecho, el comando x = poly(0, "x")define que x es el polinomio más simple cuyo indeterminado es el carácter "x" y cuya raíz es 0, es decir el monomio x . El comando también x = poly(2, "x")define el polinomio más simple con raíz 2, es decir, x - 2.
Esta función permite definir un polinomio que tiene varias raíces, utilizando una matriz de filas en lugar de un número simple. Por ejemplo, x=poly([1 2], "x")defina el polinomio más simple con raíces 1 y 2, es decir, el polinomio x 2 - 3 x + 2.
También podemos usar esta función para generar un polinomio cuyos coeficientes están contenidos en una matriz de filas, agregando el carácter 'c'al final de los argumentos. Por ejemplo, defina el polinomio a0 + a1 · x +… + an · x n . x = poly([a0, a1, …, an], "x", "c")
Scilab gestiona las fracciones racionales de la misma forma . Basta declarar un monomio con poly()y luego definir la fracción racional. Ejemplo
-->x = poly(0, "x"); f = (1 + x) / (1 - x) f = 1 + x ----- 1 - x -->1/f ans = 1 - x ----- 1 + xPara obtener el numerador de ƒ, simplemente escriba f.num ; el denominador de f se obtiene con f.den.
La función da la derivación formal del polinomio o de una fracción racional p . La función simplifica la fracción racional q . derivat(p)simp(q)
El uso del polinomio o de una fracción racional como función se realiza mediante la función horner : horner(p,2)calcular p (2).
PersonajeLos caracteres simples o cadenas se anotan entre comillas simples o entre comillas dobles: 'abc'o "abc".
El apóstrofo indica el final de una cadena; para poner un apóstrofo en una cadena, debe escribir dos contiguos '', y para poner una comilla doble, también debe escribir dos contiguos "".
La suma +sobre cadenas produce concatenación . La función puede evaluar una cadena de caracteres, es decir, transformarla en un comando Scilab evstr().
MatricesScilab fue diseñado para computación matricial . Todas las funciones se aplican a matrices ; por ejemplo, si M es una matriz, entonces log(M)será la matriz cuyos coeficientes son los logaritmos de los coeficientes de M. Los elementos de la matriz pueden ser de cualquier tipo ( números reales , números complejos , booleanos , polinomiales , racionales , de cadena ... ).
Para definir una matriz a partir de sus coeficientes, los colocamos entre dos corchetes […]. Los elementos de una línea están separados por un espacio o una coma, las líneas están separadas por un punto y coma. Cuando se muestra, la matriz se representa como una matriz sin marcos (excepto matrices de cadenas que están enmarcadas por signos de exclamación). Por ejemplo :
-->[1, 2, 3 ; 0, 1, 0 ; 0, 0, 1] ans = 1. 2. 3. 0. 1. 0. 0. 0. 1.La matriz vacía se denota por []. La expresión M(i,j)designa el elemento ( i , j ) de la matriz M. El carácter :( dos puntos ) significa "todos los índices", por ejemplo, M(1, :)es la primera fila de la matriz (es un vector de fila ). El carácter $( dólar ) designa el último índice (fila o columna) de una matriz.
La expresión se N1:N'usa para generar una matriz de filas cuyo primer coeficiente es N1, el último es menor o igual que N 'y el paso entre los coeficientes es 1. La expresión se usa para generar una matriz de filas eligiendo el paso. Por ejemplo N1:pas:N2
-->1.1:5.2 ans = ! 1.1 2.1 3.1 4.1 5.1 ! --> 1:2:5 ans = ! 1 3 5 ! -->"a":"d" ans = abcdLa función crea una matriz m × n llena de 0; la función crea una matriz m × n rellena con 1. La función crea una matriz unitaria n × n . También podemos pasar una matriz M como parámetro de estas funciones; luego crean una matriz de la misma dimensión que la matriz M. Por ejemplo, establece todos los coeficientes de M en cero. zeros(m,n)ones(m,n)eye(n,n) M = zeros(M)
Si ƒ es una función externa (es decir, definida por deffo por function, ver más abajo), y que x y y son vectores, entonces la función fevalpermite construir una matriz z = ƒ ( x , y )
z = feval(x, y, f) : tenemos z ( i , j ) = ƒ ( x ( i ), y ( j ))La función size(M)devuelve el tamaño de la matriz como una matriz de 2 × 1 que contiene el número de filas y luego el número de columnas.
Las operaciones específicas de las matrices convencionales son:
Un vector es una matriz de filas o columnas (1 × n o n × 1 matriz ); la expresión V(i)denota el componente i del vector V. Si V1 y V2 son vectores columna , entonces el producto escalar es V1.' * V2 ; si son vectores de fila , el producto escalar es V1 * V2.'.
Scilab puede realizar cálculos numéricos.
Puede usarse trivialmente como calculadora , simplemente ingresando las operaciones a realizar.
La función deffpermite definir nuevas funciones (llamadas “funciones externas”) que pueden expresarse con los operadores ya predefinidos (las “funciones primitivas”). Pasamos dos cadenas de caracteres como parámetro; el primero indica el nombre de la función y las variables utilizadas como entrada y salida, y el segundo indica la fórmula. Por ejemplo, la función
ƒ ( x ) = 2 xpuede ser definido por
deff("[y] = f(x)", "y = 2 * x")(ver también la sección de Programación ).
Integración integrate("expression", "x", x0, x1)Calcule numéricamente la integral de la función descrita por expresión (es una cadena de caracteres que puede ser interpretada por Scilab, como "sin(x)"), siendo x la variable de integración, entre los valores x 0 y x 1. Resolver ecuaciones Scilab tiene varias primitivas para resolver ecuaciones (ver Solucionador de ecuaciones ), que incluyen:El trazado de una función se realiza en dos pasos
Podemos graficar varias funciones simultáneamente poniéndolas en una matriz, por ejemplo plot(x, [f1(x) f2(x) f3(x)]).
De hecho, observamos que f ( x ) es en sí mismo un vector. En general, podemos definir un vector de los valores de x y un vector de los valores de y , y la función plot(x, y)dibujará el diagrama de dispersión.
Si ƒ es una función externa (por ejemplo, definida con deff, ver arriba, o function, ver abajo), entonces podemos graficar directamente la función con fplot2d(x, f). También podemos definir y por y = feval(x, f), luego dibujar con plot(x,y).
La función se xgridutiliza para mostrar una cuadrícula correspondiente a las graduaciones.
Las funciones , utilizadas en lugar de , le permiten variar la apariencia general del gráfico: plot2diplot
Estas funciones aceptan argumentos que modifican la trama, en la forma . Los argumentos tienen la forma y están separados por comas. plot2diplot2di(x, y, arguments)mot-clef = valeur
Para colocar marcadores, usamos el argumento donde n es un número entero positivo o negativo (por ejemplo ); un número negativo reemplaza los puntos por marcadores (una estrella para -10, círculos para -9, ..., pequeños puntos para 0, la lista se obtiene escribiendo el comando ) y un número positivo indica una línea sólida pero de color determinado (según la carta de colores definida, ver más abajo). style = nplot2d(x, y, style = 1)getsymbol
Si el gráfico tiene varias curvas (por lo tanto, se coloca en una matriz de fila Y), el argumento stylees una matriz, el valor de cada elemento indica el estilo de cada curva, por ejemplo
Y = [cos(x), sin(x)]; plot2d(x, Y, style = [-2, -1])Puede usar el comando legend()para ingresar subtítulos, por ejemplo
legend("cosinus", "sinus")Para una escala logarítmica , usamos el argumento donde tipo es una cadena de dos caracteres, "n" (para normal) o "l" (para logarítmica), el primer carácter corresponde al eje x y el segundo a l ' y eje . Por ejemplo logflag = type
Podemos elegir el tipo de eje con el argumento donde n es un entero positivo: 0 para no tener eje, 1 para ejes "clásicos" que se cruzan en la parte inferior derecha, 4 para ejes "clásicos". Corte en el centro, 5 para ejes intersección en (0, 0) ... axesflag = n
Podemos definir el número de graduaciones y sub-graduaciones de los ejes con el argumento donde N x es el número de graduaciones del eje x , nx el número de sub-graduaciones ... nax = [nx, Nx, ny, Ny]
El argumento se utiliza para limitar el gráfico al área incluida en el rectángulo definido por los valores de la matriz. rect = [xmin, ymin, xmax, ymax]
La función polarplotdibuja una gráfica en coordenadas polares . La función r ( theta ) es dibujada por el comando:
polarplot(theta,r)donde r y theta son dos matrices de la misma dimensión.
Mapa de un campoSi x es un vector columna de m elementos, y un vector columna de n elementos yz una matriz m × n , entonces la función
grayplot(x, y, z)asociará un color con cada valor de zy dibujará un mapa de color, cada punto ( x ( i ), y ( j )) tendrá el color asociado con el coeficiente z ( i , j ).
Los niveles de color están indicados por la función
xset('colormap', cmap)donde cmap es una matriz de tres columnas, cada fila de las cuales contiene el color asociado con un nivel, en forma de RGB (los elementos de la matriz van de 0 a 1). La primera fila de la matriz corresponde al nivel más bajo, la última fila al más alto. Esta matriz puede ser generada automáticamente por las funciones …colormap, por ejemplo ( n niveles de gris entre blanco y negro), gradiente entre azul y rojo) o (gradiente entre rojo y amarillo). graycolormap(n)jetcolormap(n)hotcolormap(n)
Podemos, por ejemplo, xset("colormap", graycolormap(32))tener 32 niveles de gris. Podemos lograr un degradado de negro a rojo con
cmap = graycolormap(32); cmap(:, 2:3) = 0o con
r = linspace(0, 32, 32)'; cmap = [r zeros(32, 2)]y un degradado de azul a blanco con
cmap = graycolormap(32); cmap(:, 2:3) = 1o con
r = linspace(0, 32, 32)'; cmap = [r ones(32, 2)]Los niveles de color también se utilizan al trazar múltiples curvas en el mismo gráfico. En este caso, los degradados no proporcionan un contraste que facilite la distinción de curvas vecinas; puede obtener los niveles de color predeterminados con get(sdf(), "color_map").
Podemos dibujar una curva de nivel con la función
contour2d(x, y, z, n)donde n es el número de niveles que queremos que aparezcan; también podemos dar los valores de los niveles z 1 , z 2 , ..., z n mediante un vector
contour2d(x, y, z, [z1, z2, …, zn])También podemos dibujar un campo vectorial. Para eso, necesitamos una matriz vx que tenga los componentes a lo largo de x del campo vectorial, una matriz vy que tenga los componentes a lo largo de y de este campo, y usemos la función
champ(x, y, vx, vy)Con la función champ1, los vectores graficados tienen todos la misma longitud, la norma del campo está indicada por el color del vector, según el principio explicado grayplot.
Trama 3DScilab también permite el trazado de superficies tridimensionales ( x , y , z ). Si x es una matriz de columna de m elementos, y una matriz de columna de n elementos yz una matriz de m × n , entonces la función
plot3d(x, y, z)dibujará la superficie de los puntos ( x ( i ), y ( j ), z ( i , j )). Si es una superficie representativa de una función f, tenemos
z ( yo , j ) = f ( x ( i ), y ( j )).Si ƒ es una función “externa” (por ejemplo, definida por deffo function), podemos definir z con la función feval(ver arriba), o bien usar fplot3d(x, y, f).
La función param3d(fx(t), fy(t), fz(t))traza la curva paramétrica; t es un vector que contiene los valores sucesivos del parámetro.
Las funciones plot3d1, fplot3d1y le param3d1permiten usar niveles de color para indicar el valor de z . El uso es el mismo que para plot3d, pero los niveles de color vienen indicados por la función
xset("colormap", cmap)(véase más arriba).
La vista de la superficie 3D está definida por dos ángulos en grados, θ, rotación alrededor del eje Z, y α, rotación alrededor del eje Y (ver ángulos de Euler ) , ...; plot3d(x, y, z, theta, alpha)param3d(x, y, z, theta, alpha)
También podemos definir los límites de los ejes con la palabra clave ebox :
Si x es un vector, la función , siendo n un número entero, cortará el intervalo de valores tomados por los coeficientes de x en n cortes de igual ancho y trazará el histograma de distribución de los valores de acuerdo con estos cortes . Si n es un vector cuyos coeficientes aumentan estrictamente, los valores de los coeficientes de n se utilizan para determinar los cortes. histplot(n, x)
Si x es una matriz, dibuje un histograma 3D tal que el paralelepípedo ubicado en ( i , j ) tenga la altura x ( i , j ). Como ocurre con todas las funciones gráficas tridimensionales, podemos definir el ángulo de visión con θ y α. hist3d(x)
DibujoEs posible dibujar figuras geométricas directamente en el gráfico.
La función xpoly(x, y, "lines", 1)permite dibujar un polígono cerrado, xsiendo la lista de las abscisas de los vértices (en forma de vector o matriz) y ysiendo la lista de las ordenadas de los vértices (es una matriz de la misma dimensión como x). La función le xfpoly(x, y, "lines", 1)permite dibujar un polígono relleno.
La función xrect(x, y, l, h)dibuja un rectángulo cuyo punto superior izquierdo es ( x , y ), ancho ly alto h . La función xfrect(x, y, l, h)dibuja un rectángulo relleno.
La función escribe la línea de cadena en el gráfico, el punto en la parte inferior izquierda del texto está en el punto ( x , y ). xstring(x, y, "chaîne")
La función xarc(x, y, l, h, a1, a2)dibuja un arco de una elipse incluida en el rectángulo cuyo punto superior izquierdo es ( x , y ), de ancho ly alto h . Cada grado de ángulo se divide en 64 sectores, el arco comienza desde el ángulo trigonométrico a 1 × 64 ° y sube hasta el ángulo ( a 1 + a 2) × 64 °. La función xfarc(x, y, l, h)dibuja un arco elíptico relleno.
Para cambiar las propiedades de las líneas de los dibujos, debe utilizar el comando . Las principales propiedades de un objeto son:set("propriété", valeur)
También puede asociar una variable con el elemento dibujado; esto se hace con la función que
variable = get("hdl")
hdlsignifica manejar (literalmente "manejar", intermediario de la acción). Para definir la propiedad de este elemento, hacemos
Estos dos métodos son válidos independientemente del objeto (curva, polígono, arco de una elipse, etc.).
Por ejemplo
xarc(0, 1, 0.5, 0.5, 0, 360*64) // ellipse set("line_style", 2) // pointilléso bien
xarc(0, 1, 0.5, 0.5, 0, 360*64) // ellipse a=get("hdl") a.line_style=2 // pointillés Formateo, ejes y ventanasLa función se xsetutiliza para definir la apariencia:
Como para todos los objetos gráficos, puede cambiar las propiedades de los ejes asignándolos a una variable usando el comando var = get("current_axes"). Las principales propiedades son:
Ejemplo:
a = get("current_axes") a.x_location = "middle" a.y_location = "middle" a.isoview = "on" a.sub_ticks = [4,4]Puede colocar varias parcelas al lado de la instrucción subplot :
subplot(m, n, i)coloca el gráfico siguiendo la instrucción en la i- ésima celda (en orden de lectura europeo) de una matriz m × n ; la ruta puede tener varias instrucciones plot, xset, xtitle.La función le da un título al gráfico y los ejes. La función pone un título en el medio del gráfico. La función borra la ventana gráfica. xtitle("nom du graphique", "axe des x", "axe des y")titlepage("titre")clf
EjemploAquí está el gráfico que obtenemos con las instrucciones a continuación.
clear; clf; deff("[z] = f(x, y)", "z = sin(x) * cos(y)") xset("colormap", jetcolormap(32)) x = %pi * [-1:0.05:1]'; y = x; z = feval(x, y, f); subplot(2, 2, 1) grayplot(x, y, z) subplot(2, 2, 2) contour2d(x, y, z, 5) subplot(2, 2, 3) plot3d1(x, y, z, 0, 90) subplot(2, 2, 4) plot3d1(x, y, z, 70, 70)Puede poner las instrucciones de Scilab en un archivo de texto con la extensión del nombre del archivo .sce. Esto se llama secuencia de comandos Scilab.
Scilab acepta una cierta cantidad de instrucciones:
Es posible definir funciones pasando parámetros. La función es una subrutina con sus propias variables, y que puede contener bucles, ramas condicionales ... Por ejemplo, para definir una función f (x):
function [y] = f(x) … endfunctionEl parámetro x se pasa a la función ƒ; el valor devuelto por ƒ será el asignado ay en la función.
Si un archivo contiene solo definiciones de funciones, se le asigna la extensión .sci. Esto permite crear librerías de funciones comunes a varios scripts, lo que facilita el mantenimiento del software (las mejoras benefician a todos los scripts, aparecerá un error en todos los scripts y por tanto será detectado y corregido más rápidamente). A .scicontinuación, el script carga este archivo con el comando exec("chemin/nomdefichier").
Puede guardar el entorno, es decir todas las variables, incluidas las funciones, con el comando . Esto crea un archivo binario (Scilab no agrega una extensión). Este entorno se puede recargar con la función . save("fichier")load("fichier")
También puede escribir las instrucciones en un archivo de texto y luego copiar / pegar desde el editor de texto a la línea de comandos de Scilab. El código fuente puede contener comentarios introducidos por dos barras de fracciones //.
En Scilab, el entorno son todas las variables (incluidas las funciones) que se han definido; el entorno contiene una serie de variables predefinidas. El conjunto de variables viene dado por el comando who.
Cuando se usa una función, la función se ejecuta en un nuevo entorno, una copia del entorno inicial. Las variables que allí se modifican no se modifican en el entorno inicial (solo trabajamos con variables locales), solo se devuelve el resultado de la función.
Puede abrir un entorno a propósito, con la función pause ; el mensaje se convierte en -1->, lo que indica que estamos en el primer nivel del subambiente. También estamos en tal configuración cuando interrumpimos la ejecución de una función (por ejemplo con la combinación de teclas CTRL + C). Para volver al entorno anterior, debe utilizar el comando return.
Si se usa returnsin argumento, las variables no se transmiten al entorno padre. Es posible transmitir las variables a 1, a 2,…, an en el entorno padre, con la sintaxis , donde x 1, x 2,…, xn son los nombres de las variables en el entorno padre. (x1, x2, …, xn) = return(a1, a2, …, an)
El comando clearpermite "limpiar" un entorno, es decir borrar todas las variables.
Scilab interactúa fácilmente con el lenguaje de scripting Tcl-Tk y le permite mostrar interfaces gráficas. La función TCL_EvalFile()evalúa los scripts Tcl-Tk que pueden llamar a funciones Scilab pasando parámetros a través de ScilabEval.
Ejemplo: Cálculo de una distancia cuyos valores x, yoz pueden variar gracias al movimiento de un cursor en la interfaz gráfica escrita en Tcl-Tk .
Creamos tres archivos ( lancement.sce, distance.sci, gui.tcl).
Los dos archivos Scilab:
// lancement.sce - lancement de l’application exec distance.sci; TCL_EvalFile("gui.tcl"); // distance.sci - fonction Scilab function dist = distance(x, y, z) dist = sqrt(x*x + y*y + z*z) endfunctionY el código Tcl-Tk:
# gui.tcl - interface graphique global x y z dist set x 10; set y 10; set z 10; set dist " " toplevel .w scale .w.scx -from 0 -to 200 -length 200 -resolution 1 -label "X" \ -orient horiz -bd 1 -showvalue true -variable x \ -command CalculDistance scale .w.scy -from 0 -to 200 -length 200 -resolution 1 -label "Y" \ -orient horiz -bd 1 -showvalue true -variable y \ -command CalculDistance scale .w.scz -from 0 -to 200 -length 200 -resolution 1 -label "Z" \ -orient horiz -bd 1 -showvalue true -variable z \ -command CalculDistance label .w.lt -text Distance label .w.ldist -textvariable dist -bg lightblue eval pack [winfo children .w] proc CalculDistance w { global x y z dist ScilabEval "dist = distance($x,$y,$z) ; TK_SetVar('dist',string(dist));" }