Manual de Scilab/Xcos/Programación en Scilab
Para crear una función se puede consultar: [1]. Lo más común seria programar un método iterativo (por ejemplo: que busque el mínimo de una función). Para realizar estas tareas necesitamos dos herramientas muy importantes como son los condicionales y alguna forma de poder hacer iteraciones. Scilab también permite crear funciones escritas en Fortran o en C.
Condicionales
[editar]Los Condicionales en Scilab se pueden implementar con "if then else". Si son varias condiciones para evaluar se puede utilizar "select"
if expr1 then sentencias ... elseif expri then sentencias ... else sentencias ... end
Puede consultar la ayuda del programa para ver otro ejemplo o ver todas las opciones de este condicional. En el siguiente ejemplo vamos a utilizar un condicional dentro de una función y la vamos a evaluar desde la línea de comandos:
function f1=pcondicional(a,b) if a>b then f1="a es mayor b" elseif a>.5 f1="a es mayor a 0.5" else f1="a es menor a b" end endfunction
Ejecución de la función:
[editar]Se muestran varias llamadas a la función con diferentes valores para a y b.
-->pcondicional(1,2) ans = a es mayor a .5 -->pcondicional(5,2) ans = a es mayor b -->pcondicional(-1,2) ans = a es menor a b
Iteraciones
[editar]Para realizar Iteraciones en Scilab este cuenta con dos tipos de mecanismos el Bucle For y el Bucle while.
Ejemplo de bucle for
[editar]for i=1:5 disp(i) end
El resultado es:
-->for i=1:5 --> disp(i) -->end 1. 2. 3. 4. 5.
Ejemplo de bucle while
[editar]i=0;
while i<5
disp(i)
i=i+1;
end
Resultado:
-->i=0;
-->while i<5
--> disp(i)
--> i=i+1;
-->end
0.
1.
2.
3.
4.
Depurando scripts
[editar]Para depurar scripts es conveniente tener el sistema de esta forma por que resulta muchísimo más cómodo para ir ejecutando el código y viendo el resultado en la ventana de comandos:
Para producir un punto de ruptura en la ejecución de un script debemos poner la palabra "pause" en el lugar donde queremos que se produzca el punto de ruptura.
Por ejemplo en el siguiente fragmento de código:
function met_itera=met_itera(x1,x2,x3,x4,n,epsilon)
tic();
X=[x1,x2,x3,x4];
i=1;
while i<n
gradxk=grade3(X(1,1),X(1,2),X(1,3),X(1,4));
fx=evalfun(X(1,1),X(1,2),X(1,3),X(1,4),H,b);
l=callambda(X(1,1),X(1,2),X(1,3),X(1,4));
XK=X-l*gradxk;
fxk=evalfun(XK(1,1),XK(1,2),XK(1,3),XK(1,4));
pause
if (fx>fxk) then...
...
Al ejecutar la función en la líneas de comandos, esta cambia del habitual "-->" por "-1->" esto nos indica que ingresamos al primer punto de ruptura. El resultado de esto se ve de esta forma en Scilab.
Type 'resume' or 'abort' to return to standard level prompt.
-1->
Ahora la función se ejecuto hasta el punto donde dice pause. En este punto podemos revisar variables simplemente tipeando estas en la línea de comandos, etc. Para saltar al próximo punto de ruptura solo tenemos que tipear "resume" y apretar la tecla enter. En el caso de querer salir de la ejecución de la función debemos tipear "abort" seguido de tecla enter.