You are on page 1of 14

INTRODUCCIN

A
SCILAB
Las variables van siendo cargadas al workspace mediante
asignaciones:

-->a = 2.3
Para ver las variable las variables activas se utiliza:
--> who
Existen variables pre-definidas, por ejemplo: %e, %i, %pi, %eps,
%inf, %nan, etc.
El operador : (dos puntos) sirve para crear un vector fila, por
ejemplo:

-->nombre del vector = valor inicial : incremento : valor final
El operador; (punto y coma) evita la impresin en pantalla de la
salida del comando
Para obtener la transpuesta de una matriz se debe usar un apstrofe
Para introducir un comentario y no ejecutar la lnea se usa: //
Para abrir el men de ayuda se usa: --> help

Para empezar a guardar una sesin de SCILAB en un archivo se usa:

--> diary(nombre_del_archivo)

Para terminar de guardar la sesin de SCILAB se usa: --> diary(0)
Para ver el directorio actual de trabajo: --> pwd
Para cambiar el directorio de trabajo: --> chdir(nombre de nuevo
directorio)
Para listar archivos existentes en el directorio de trabajo: --> ls
Para correr un archivo de comandos (script) se usa: -->
exec(nombre de archivo)



Grficos
Para grficos simples en 2 dimensiones (2-D):
--> plot(x,y, "ttulo_eje_x","ttulo_eje_y","ttulo_del_grfico")

Agregando un grilla para grficos simples en 2 dimensiones (2-D):
--> grid(n)
Para cambiar parmetros del grfico: color, tipo de lneas, fondo,
espesor de lneas, etc., ver:
--> xset( )

Para abrir una nueva ventana de grfico:
--> xset(window,nmero de ventana )

Borrar el contenido de la ventana actual:
--> xbasc()

Para grficos simples en 2 dimensiones (2-D):
--> plot2d(x,y,[style,strf,leg,rect,nax])
x, y matrices o vectores a graficar
style: vector conteniendo nmeros que definen el color. Para graficar
usando smbolos (+,*,o, etc.) usar nmeros negativos.

strf = xyz donde

x = 1, muestra leyenda de lneas
y = 1, usa rect;
y = 2, calcula bordes usando xmax y xmin
y = 3, similar a y = 1 pero con escala isomtrica
y = 4, similar a y = 2 pero con escala isomtrica
z = 1, ejes graficados de acuerdo a especificaciones en nax
z = 2, marco del grfico sin grilla
leg = nombrelnea1@l nombrelnea2@
rect = [xmin, ymin, xmax, ymax]
nax = [nx, Nx, ny, Ny]
donde
nx,ny = sub-graduaciones de x,y; Nx,Ny = graduaciones de x,y.
--> xtitle(Nombre_del_grfico, Nombre_eje_x, Nombre_eje_y)
Creando sub-ventanas:

--> xsetech( wrect)

Donde wrect es un vector de 4 elementos [ x, y, ancho, alto] donde
ancho y alto definen en cuantas ventanas estar dividida la ventana,
x e y definen cual de las ventanas activar.

Grficos en 3 dimensiones:
--> plot3d(x,y,z[,theta,alpha,leyenda,flag,ebox])

Donde theta y alpha son los ngulos (en grados sexagesimales)
representado las coordenadas esfricas del punto de vista, leyenda
contiene las leyendas identificadoras de los ejes.

Contorno en 3 dimensiones:
--> contour(x,y,z[,theta,alpha,leyenda,flag,ebox])

Contorno (curvas de nivel) en 2 dimensiones :
--> contour2d(x,y,z[,theta,alpha,leyenda,flag,ebox])

Programacin

Operadores de comparacin: = =, <, >, <=, >=, <> o ~=
Operadores lgicos: & (and), | (or), ~ (not)
Lazo FOR:

for ndice = valor_inicial : incremento : valor_final
<comandos o instrucciones>
End

Lazo WHILE:

while condicin
<comandos o instrucciones>
End



Condicional IF:

if condicin then
<comandos o instrucciones>
else
<comandos o instrucciones>
End

Seleccin de casos con SELECT-CASE:

select nombre_variable
case valor_1
<comandos o instrucciones>
case valor_2
<comandos o instrucciones>
.
End

Definicin de funciones en una sola instruccin:

deff([variable_salida] = nombre_funcion(variable_entrada),[
variable_salida = definicin de la funcin])

Ejemplos de definiciones:

--> deff([y] = f(t),y = exp(-t)*sin(2*t))
--> deff([x,y] = h(r,theta),[x = r*cos(theta),y = r*sin(theta)])
Variable Global: son aquellas variables definidas en el ambiente
principal SCILAB.
Variable Local: son aquellas variables definidas solamente dentro de
una funcin.

Guardando las variables en un archivo:
--> save(nombre_de_archivo, lista_de_variables)

Cargando las variables de un archivo:
--> load(nombre_de_archivo)

Imprimiendo en archivo de salida sin formato:
--> print(nombre_de_archivo, lista_de_variables)
Creando un nuevo archivo de salida:
--> nombre_unidad = file(open, nombre_de_archivo, new)

Escribiendo en un archivo de salida:
--> write(nombre_unidad, lista_de_variables, (formato))
Formato para escribir a un archivo: los formatos usados son estilo
FORTRAN,
ejemplo:

Iw : i para entero, w = nmero de caracteres permitido (ancho del campo)
fw.d : f para coma-flotante, w = ancho de campo, d = nmero de decimales
ew.d : e para coma-flotante con notacin cientfica, w = ancho del campo,
d = nmero de decimales
aw : a para alfa-numrico (string - cadena ),
w = ancho del campo,
a : ancho de la variable.

Entrada de datos desde teclado:
--> [x]=input(Mensaje,["string"])
String debe ser includo en caso que la entrada sean caracteres

Abriendo un archivo existente:
--> nombre_unidad = file(open, nombre_de_archivo, old)

Leyendo una matriz de un archivo:
--> matriz_mxn = read(nombre_unidad, m,n)

Cerrando un archivo:
--> file(close, nombre_unidad)

Concatenando cadenas: cadena1 + cadena2
--> cadena1 + cadena2

Extrayendo partes de una cadena
--> part(cadena, [n,m])

Longitud de una cadena
--> length(cadena)

Localiza caracteres dentro de una cadena
--> strindex(cadena, sub-cadena)
Convierte un nmero a caracter
--> string(nmero)

Concatenacin de caracteres
--> strcat(cadena_1,cadena_2)
Convierte una cadena en nmero
--> evstr(cadena)

Mostrar en pantalla una cadena de caracteres
--> disp(cadena)
Vectores

Magnitud de un vector: norm( vector)
Transpuesta de un vector:
Mnimo y mximo de los valores de un vector:
min( vector) max( vector)
Producto escalar de dos vectores fila: u*v
Operacin trmino a trmino de matrices: usar el punto (.) antes del
operador, ejemplo: .*, ./ ,.^2

Traza: trace( matrix)

Dimensiones de una matriz/vector: size(matriz)
Matriz con elementos aleatorios: rand(n,m)
Extrayendo filas: A(2,:), A(1:3,:)
Extrayendo columnas: A(:,1), A(:,2:5)
Para acceder a la ltima fila/columna de una matriz usar el smbolo
$, por ejemplo: A(:,$) extrae la ltima columna de la matriz A.

Concatenando vectores fila: rv = [ ], rv = [rv r1], rv = [rv r2]
Concatenando vectores columna: B = [ ], B = [B;r1], B = [B;r2]
Suma y producto de elementos de una matriz por columnas:
sum(B,r), prod(B,r)
Suma y producto de elementos de una matriz por columnas:
sum(B,c), prod(B,c)






Solucin de un sistema lineal A*x = b : --> xsol = A\b
Factorizacin LU: [L,U] = lu(A) or [L,U,P] = lu(A)
Descomposicin en valores singulares: [U,S,V] = svd(A)
Rango de una matriz: rank( matriz)
Normas de una matriz:
norm(A) o norm(A,2) : norma Euclidiana
norm(A,1) : norma columna
norm(A,inf): norma infinita
norm(A,fro) : norma Frobenius
Nmero de condicin de uma matriz: cond( matriz)
Determinante de una matriz: det( matriz)
Autovalores y autovectores de una matriz: spec( matrix)
Polinomios

Los polinomios son creados en SCILAB usando el comando poly
Definiendo una variable polinomial: --> x = poly(0,x)
efiniendo un polinomio en base a sus coeficientes:
--> Polinomio = poly(c,x,coeff)
Donde c es un vector que contiene los coeficientes en orden creciente
c = [ ao a1 a2 a3 an ]

Definiendo un polinomio en base a sus races:
--> Polinomio = poly(r,x)

Donde r es un vector que contiene las races del polinomio r = [ r1 r2 rn ]
Para hallar las races de un polinomio:
--> raices = roots(Polinomio)
Una vez definidos dos polinomios p y q de la misma variable, se pueden efectuar
operaciones de polinomios: ejemplo: p*q, p/q, p+q, etc.

Para evaluar un polinomio:
--> valor_del_polinomio = horner(Polinomio,x)
Donde x es el punto en el cual se est evaluando el polinomio.
Tambin pueden definirse matrices cuyos elementos sean polinomios.





Examples

[1,2]==[1,3]
[1,2]==1
a=1:5; a(a>2)
Examples

[6.9,9.64; sqrt(-1) 0]
[1 +%i 2 -%i 3]
[]
['this is';'a string';'vector']
s=poly(0,'s');[1/s,2/s]
[tf2ss(1/s),tf2ss(2/s)]
[u,s]=schur(rand(3,3))
Examples

k=0; while 1==1, k=k+1; if k > 100 then break,end; end
Examples

a=[1,2,3;4,5,6];
a=1,b=1;c=2
Examples

g=9.81// the gravity
text='a//b'
function y=myfunction(x)
// myfunction computes y=x^2+1
// x shoud be a vector or matrix
y=x^2+1
endfunction
help myfunction


Examples

//element wise comparisons
(1:5)==3
(1:5)<=4
(1:5)<=[1 4 2 3 0]
1<[]

list(1,2,3)~=list(1,3,3)
//object wise comparisons
(1:10)==[4,3]
'foo'==3
1==[]

list(1,2,3)==1
isequal(list(1,2,3),1)
isequal(1:10,1)

//comparison with type conversion
int32(1)==1
int32(1)<1.5
int32(1:5)<int8(3)
p=poly(0,'s','c')

p==0
p/poly(1,'s','c')==0

Examples

for k=1:10,K=k;if k>2&k<=8 then continue,disp('hello'),end,k,end
for j=1:2
x=[];
for k=1:10,if k>j+1&k<=8 then continue,end,x=[x,k];end
x
end


Examples

//decimal point
1.345
//used as part of an operator
x=[1 2 3];x.^2 .*x // a space is required between 2 and dot
// used to enter continuation lines
T=[123,..//first element
456] //second one
a="here I start a very long string... //but I'm not in the mood of
continuing
- and here I go on"
y=12..

Examples

a = sin(3.2)
M = [2.1,3.3,8.5;7.6,6.7,6.9;0,6.3,8.8];
[u,s] = schur(M)
[1:10] == 4
1~=2

// MATRIX CASE
a=[1 2 3;4 5 6]
a(1,2)
a([1 1],2)
a(:,1)
a(:,3:-1:1)
a(1)
a(6)
a(:)
a([%t %f %f %t])
a([%t %f],[2 3])
a(1:2,$-1)
a($:-1:1,2)
a($)
//
x='test'
x([1 1;1 1;1 1])
//
b=[1/%s,(%s+1)/(%s-1)]
b(1,1)
b(1,$)
b(2) // the numerator
// LIST OR TLIST CASE
l=list(1,'qwerw',%s)
l(1)
[a,b]=l([3 2])
l($)
x=tlist(l(2:3)) //form a tlist with the last 2 components of l
//
dts=list(1,tlist(['x';'a';'b'],10,[2 3]));
dts(2)('a')
dts(2)('b')(1,2)
[a,b]=dts(2)(['a','b'])

Examples

// "traditional" for loops
n=5;
for i = 1:n, for j = 1:n, a(i,j) = 1/(i+j-1);end;end
for j = 2:n-1, a(j,j) = j; end; a
for j= 4:-1:1, disp(j),end // decreasing loop
//loop on matrix columns
for e=eye(3,3),e,end
for v=a, write(6,v),end
for j=1:n,v=a(:,j), write(6,v),end
//loop on list entries
for l=list(1,2,'example'); l,end

Examples

x=rand(1,5);
format('v',10);x
format(20);x
format('e',10);x
format(20);x
x=[100 %eps];
format('e',10);x
format('v',10);x
format("v")

Examples

i=2
for j = 1:3,
if i == j then
a(i,j) = 2;
elseif abs(i-j) == 1 then
a(i,j) = -1;
else a(i,j) = 0;
end,
end

Examples
// MATRIX CASE
a=[1 2 3;4 5 6]
a(1,2)=10
a([1 1],2)=[-1;-2]
a(:,1)=[8;5]
a(1,3:-1:1)=[77 44 99]
a(1)=%s
a(6)=%s+1
a(:)=1:6
a([%t %f],1)=33
a(1:2,$-1)=[2;4]
a($:-1:1,1)=[8;7]
a($)=123
//
x='test'
x([4 5])=['4','5']
//
b=[1/%s,(%s+1)/(%s-1)]
b(1,1)=0
b(1,$)=b(1,$)+1
b(2)=[1 2] // the numerator
// LIST OR TLIST CASE
l=list(1,'qwerw',%s)
l(1)='Changed'
l(0)='Added'
l(6)=['one more';'added']

Examples

[6.9,9.64; sqrt(-1) 0]
[1 +%i 2 -%i 3]
[]
['this is';'a string';'vector']
s=poly(0,'s');[1/s,2/s]
[tf2ss(1/s),tf2ss(2/s)]
[u,s]=schur(rand(3,3))

Examples

3^(-1)
x=poly(0,"x");
//
(x+10)/2
i3=eye(3,3)
//
a=[1 2 3;4 5 6;7 8 9],a(1,3),a([1 3],:),a(:,3)
a(:,3)=[]
a(1,$)=33
a(2,[$ $-1])
a(:,$+1)=[10;11;12]
//
w=ssrand(2,2,2);ssprint(w)
ssprint(w(:,1))
ss2tf(w(:,1))
//
l=list(1,2,3,4)
[a,b,c,d]=l(:)
l($+1)='new'
//
v=%t([1 1 1 1 1])
//
[x,y,z]=(1,2,3)
ta=[1 1 2 4 4 5 6 7 2 3 5 1];
he=[2 6 3 6 7 8 8 8 4 7 3 5];
g=make_graph('foo',0,8,ta,he);
g.nodes.graphics.x=[281 284 360 185 405 182 118 45];
g.nodes.graphics.y=[262 179 130 154 368 248 64 309];
show_graph(g);
g1=line_graph(g);show_graph(g,'new');
g1.nodes.graphics.colors(2,:)=color('red')
g1.edges.graphics.foreground(:)=color('red')
show_graph(graph_union(g,g1,%f),'new')

g=load_graph(metanet_module_path()+'/demos/mesh100.graph');
show_graph(g);
g=load_graph(metanet_module_path()+'/demos/colored.graph');
show_graph(g,'new');
// creating a directed graph with 3 nodes and 4 arcs.
g=make_graph('foo',1,3,[1,2,3,1],[2,3,1,3]);
// creating a directed graph with 13 nodes and 14 arcs.
ta=[1 1 2 7 8 9 10 10 10 10 11 12 13 13];
he=[2 10 7 8 9 7 7 11 13 13 12 13 9 10];
g=make_graph('foo',1,13,ta,he);
g.nodes.graphics.x=[40,33,29,63,146,233,75,42,114,156,237,260,159]
g.nodes.graphics.y=[7,61,103,142,145,143,43,120,145,18,36,107,107]
show_graph(g)
// creating same graph without isolated node and 14 arcs.
g=make_graph('foo',1,0,ta,he);
g.nodes.graphics.x=[40,33,75,42,114,156,237,260,159];
g.nodes.graphics.y=[7,61,43,120,145,18,36,107,107];
show_graph(g,'new')
ta=[1 1 2 2 2 3 4 5 5 7 8 8 9 10 10 10 11 12 13 13 13 14 15 16 16 17
17];
he=[2 10 3 5 7 4 2 4 6 8 6 9 7 7 11 15 12 13 9 10 14 11 16 1 17 14
15];
g=make_graph('foo',1,17,ta,he);
g.nodes.graphics.x=[283 163 63 57 164 164 273 271 339 384 504 513 439
623 631 757 g.nodes.graphics.y=[59 133 223 318 227 319 221 324 432 141
209 319 428 443 187 151 show_graph(g);
ns=[1 10 15 16 17 14 11 12 13 9 7 8 6];
g.nodes.graphics.colors(2,ns)=color('red');
show_graph(g);
p=nodes_2_path(ns,g);
g.edges.graphics.foreground(p)=color('red');
show_graph(g);