Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Qu es Scilab?
Scilab fue desarrollado para aplicaciones de control de sistemas y
procesamiento de seales. Es un formato de cdigo distribuido libremente.
Scilab fue creado con tres partes distintas: un interpretador, libreras de
funciones (procedimientos Scilab) y libreras de Fortran y C.
http://www.scilab.org/download/
>a=1;
>A=2;
>a+A
ans=
3.
Pueden escribirse varios comandos en una lnea, separados por ;. Sin
embargo, es preferible por claridad escribir un comando por lnea. Se pueden
escribir comentarios utilizando la combinacin de caracteres //:
>//Doscomandosenlamismalnea
>c=[12];b=1.5
b=
1.5
>//Uncomandoendiferenteslneas
>u=1000000*(a*sin(A))2+...
>2000000*a*b*sin(A)*cos(A)+...
>1000000*(b*cos(A))2
u=
81268.994
Podemos obtener una lista de las variable existentes con el comando who:
>who
yourvariablesare...
uAbascicos_pal
%scicos_menu%scicos_short%scicos_help
%scicos_display_modemodelica_libs
scicos_pal_libs%scicos_lhb_list%CmenuTypeOneVector
%helps
WSCIhomeSCIHOMECreateScilabHomeDir
PWDTMPDIRMSDOSSCIguilibsparselib
xdesslibpercentlibpolylibintlibelemlib
utillibstatslibalglibsigliboptlibautolib
roblib
soundlibmetalibarmalibtkscilibtdcslibs2flib
mtlblib%F%T%z%s%nan
%inf
COMPILER%gtk%gui%pvm%tk$
%t%f%eps%io%i%e
using31767elementsoutof5000000.
and62variablesoutof9231
yourglobalvariablesare...
LANGUAGE%helpsdemolist%browsehelpLCC
%toolboxes%toolboxes_dir
using1165elementsoutof11000.
and7variablesoutof767
Constantes predefinidas.
Scilab provee como constantes predefinidas %i, %pi, %e, y %eps. La
constante %irepresenta 1 , %pies = 3.1415927, %ees l nmero de
Euler e=2.7182818... y %epses una constante que representa la precisin de
la mquina (%epses el numero ms grande para el que 1+%eps=1). %inf
y %nanson para Infinito y NounNumero respectivamente. Otras
constantes son %ty %fque son para verdadero (trae) y falso (false)
respectivamente.
Escalares y Matrices
Escalares.
Los escalares son nmeros reales o complejos. Los valores de los escalares
pueden ser asignados a nombres de variable escogidos por el usuario.
>a=5+2*%i
a=
5.+2.i
>B=2+%i;
>b=43*%i
b=
4.3.i
>a*b
ans=
26.7.i
>a*B
ans=
12.+i
Observa que Scilab evala inmediatamente lneas que terminan con espacio.
Las instrucciones que terminan con punto y coma son evaluadas pero no se
despliegan en pantalla.
Matrices.
Las matrices son la estructura fundamental en Scilab. Una matriz es un
arreglo rectangular donde cada elemento puede localizarse con don ndices, el
nmero de rengln y el nmero de columna. Conocer el manejo de matrices es
fundamental para el uso eficiente de Scilab.
-->A = [1 2 4; 5 7 9]
A =
1. 2. 4.
5. 7. 9.
-->B = [2,7;5,1]
B =
2. 7.
5. 1.
-->C=[1 2 3 5;
-->2 8 9 3]
C =
1. 2. 3. 5.
2. 8. 9. 3.
Extraccin de rangos de matrices.
La extraccin de rangos de matrices o submatrices es una de la operaciones
mas importantes para la programacin eficiente en Scilab. Veamos algunos
ejemplos:
-->A = [1.5,2,7,9.2,8.3
-->2.7,5.2,3,1,8
-->1,2,3,4,5]
A =
2.
Observa que para acceder a los elementos de una matriz se utilizan parntesis
normales, no cuadrados!
1.5
2.7
1.
Observa como el resultado es una matriz de tres renglones por una columna, o
3 X 1.
Para extraer los elementos del tercer rengln utilizamos:
-->A(3,:)
ans =
1. 2. 3. 4. 5.
-->A(2:3,1:2)
ans =
2.7 5.2
1. 2.
Este comando podemos leerlo como: regresa la submatriz formada por los
elementos correspondientes desde el segundo rengln hasta el tercer rengln,
y desde la primera columna hasta la tercera columna.
-->A = [ 1 2 3; 5 7 9; 2 8 7]
A =
1. 2. 3.
5. 7. 9.
2. 8. 7.
-->B = [ 1; 5; 9]
B =
1.
5.
9.
-->C = [A B]
C =
1. 2. 3. 1.
5. 7. 9. 5.
2. 8. 7. 9.
Observa que A y B tienen que tener el mismo nmero de renglones para poder
hacer esta composicin.
1. 2. 3. 1.
5. 7. 9. 5.
2. 8. 7. 9.
2. 8. 7. 5.
Matrices especiales.
Scilab tiene varios comandos para generar algunas matrices especiales de uso
comn. Observa los siguientes ejemplos:
-->C = ones(4,3)
C =
1. 1. 1.
1. 1. 1.
1. 1. 1.
1. 1. 1.
-->D = zeros(4,3)
D =
0. 0. 0.
0. 0. 0.
0. 0. 0.
0. 0. 0.
Generacin de una matriz cuadrada con unos en su diagonal principal y ceros
fuera de ella:
-->E=eye(5,5)
E =
1. 0. 0. 0. 0.
0. 1. 0. 0. 0.
0. 0. 1. 0. 0.
0. 0. 0. 1. 0.
0. 0. 0. 0. 1.
2. 0. 0. 0. 0.
0. 1. 0. 0. 0.
0. 0. 0. 0. 0.
0. 0. 0. - 1. 0.
0. 0. 0. 0. 2.
0. 0. 0. 0. 0.
1. 0. 0. 0. 0.
0. 2. 0. 0. 0.
0. 0. 3. 0. 0.
0. 0. 0. 4. 0.
-->R = rand(3,2)
R =
0.2922267 0.3321719
0.5664249 0.5935095
0.4826472 0.5015342
Operaciones con matrices
Transpuesta de una matriz.
La transpuesta de una matriz (intercambiar renglones y columnas) se obtiene
utilizando el smbolo de comilla simple , por ejemplo:
-->A = [ 1 3 8; 5 2 7]
A =
1. 3. 8.
5. 2. 7.
-->B = A'
B =
1. 5.
3. 2.
8. 7.
--> B = [2, 5, 9; 3, 7, 4]
B =
2. 5. 9.
3. 7. 4.
-->C = 2*B
C =
4. 10. 18.
6. 14. 8.
8. 25.
2. 37.
5. 7.
-->C=A+B
C =
10. 28.
7. 38.
12. 16.
-->D=A-B
D =
- 6. - 22.
3. - 36.
2. 2.
Multiplicacin de matrices.
La multiplicacin de matrices se representa con el smbolo *. Recuerda que
para que dos matrices puedan multiplicarse, deben ser conformes (el nmero
de columnas de la primera matriz tiene que ser igual al nmero de columnas
de la segunda matriz), y que la multiplicacin de matrices no es conmutativa.
El resultado tiene el mismo nmero de renglones que la primer matriz, y el
mismo nmero de renglones que la segunda.
->F = [2, 5, 9; 1, 7, 2]
F =
2. 5. 9.
1. 7. 2.
-->G = [0, 5; 10 29; 7 21]
G =
0. 5.
10. 29.
7. 21.
-->H=F*G
H =
113. 344.
84. 250.
1. 5. 3.
2. 7. 8.
3. 5. 4.
0. 2. 9.
-->B = [0 0 25; 7 1 2; 2 1 3; 7 2 1]
B =
0. 0. 25.
7. 1. 2.
2. 1. 3.
7. 2. 1.
-->C = A .* B
C =
0. 0. 75.
14. 7. 16.
6. 5. 12.
0. 4. 9.
-->D = B .* A
D =
0. 0. 75.
14. 7. 16.
6. 5. 12.
0. 4. 9.
Vectores.
Un caso especial muy importante de matrices en Scilab son los vectores, que
se manejan como una matriz de un solo rengln (vector rengln) o de una sola
columna (vector columna). Los elementos de un vector pueden accederse
utilizando solo un ndice. Observa los siguientes ejemplos:
1.
5.
7.
9.
-->X(3)
ans =
7.
2. 4. 6. 8.
-->Y(4)
ans =
8.
0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
X =
column 1 to 20
column 21
10.
-->Y=(2:0.2:3)'
Y =
2.
2.2
2.4
2.6
2.8
3.
Funciones en Scilab
Por ejemplo, algunas de las mas utilizadas son: log(), sin(), cos(), tan(), asin,
acos, atan, exp(), abs(), sqrt().
Algo muy importante que debes recordar es que la mayora de las funciones
matemticas en Scilab aplican tanto a nmero reales como complejos.
Ejemplos:
-->sin(0.5)
ans =
0.4794255
-->c=sqrt(-9)
c =
3.i
-->exp(-3.2)
ans =
0.0407622
-->log(10)
ans =
2.3025851
Calling Sequence
y=log(x)
Parameters
x : constant vector or constant matrix
Description
Examples
exp(log([1,%i,-1,-%i]))
See Also
9. 16.
25. 36.
-->B = sqrt(A)
B =
3. 4.
5. 6.
1. 7. 9.
2. 5. 4.
3. 2. 8.
-->det(A)
ans =
- 95.
Nmero de condicin de una matriz.
El nmero de condicin de una matriz es un escalar positivo. Si el nmero es
muy cercano a cero, la matriz es mal condicionada, y el clculo de la inversa
puede ser errneo por errores de redondeo. El nmero de condicin es una
medida mas confiable que el determinante para evaluar la importancia de lo
errores de redeondeo. Se obtiene con la funcin cond(). Por ejemplo, para la
matriz anterior:
-->cond(A)
ans =
9.1383552
B =
1. 7. 9.
2. 5. 4.
3. 2. 8.
5. 3. 2.
-->size(B)
ans =
4. 3.
-->[reng,cols]=size(B)
cols =
3.
reng =
4.
Definicin de Funciones por el Usuario
function r = cubica(x)
// Funcion para calcular la raiz cubica
r = exp(1.0/3.0 * log(x));
endfunction
Una vez creada nuestra funcin, la cargamos a Scilab con la opcin Load
into Scilab dentro de Execute en el editor. La funcin esta lista para
usarse:
-->cubica(27)
ans =
3.
27. 8. 64.
-->cubica(A)
ans =
3. 2. 4.
Observa que si utilizamos nuesta funcin con una matriz, la aplica a cada uno
de los elementos de sta!
Vamos a analizar uno por uno los elementos de nuestra funcin:
function r = cubica(x)
r = exp(1.0/3.0 * log(x));
endfunction
IMPORTANTE
Es muy importante dejar al menos una lnea en blanco al final del archivo,
ya que el interpretador de Scilab lo requiere!
-->[perimetro,area] = circulo(3)
area =
28.274334
perimetro =
18.849556
-->circulo(3)
ans =
18.849556
function S = circulo(r)
// Regresa el perimetro y el area del circulo de radio r.
// S(1) = perimetro. S(2) = area.
S(1) = 2 * %pi * r;
S(2) = %pi * r * r;
endfunction
Al ejecutar la funcin obtenemos el resultado en un vector columna:
-->circulo(3)
ans =
18.849556
28.274334
Mtodos Numricos
Resolver el sistema:
5 x1 2 x 2 5 x3 2 x 4 5 x5 12
2 x1 12 x 2 5 x3 2 x 4 5 x5 2
4 x1 x 2 5 x3 22 x 4 5 x5 1
3 x1 2 x 2 5 x3 2 x 4 8 x5 5
3 x1 2 x 2 15 x3 3 x 4 21x5 5
5. - 2. - 5. 2. - 5.
2. 12. - 5. 2. - 5.
4. 1. - 5. 22. - 5.
3. 2. - 5. 2. - 8.
3. 2. 15. 3. - 21.
Ahora el vector de trminos independientes como un vector columna:
12.
- 2.
- 1.
5.
5.
-->X = inv(A) * b
X =
2.4985607
- 0.4645941
0.0540779
- 0.4553828
0.0481673
Comprobacin:
-->A*X
ans =
12.
- 2.
- 1.
5.
5.
2.4985607
- 0.4645941
0.0540779
- 0.4553828
0.0481673
Calling Sequence
Parameters
function y = f(x)
y = x * sin(30*x) / sqrt( 1 - ( (x / (2*%pi) )^2 ) );
endfunction
-->[v,error]=intg(0,2*%pi,f)
error =
4.625D-09
v =
- 2.5432596
x2 ex 0
Primero programamos la funcin usando el editor de Scilab y la cargamos:
functiony=f(x)
y=x^2exp(x^2);
endfunction
RECUERDADEJARALMENOSUNALINEAENBLANCOALFINALDEL
ARCHIVO!
>x=fsolve(1.0,f)
x=
0.0002122
Observa que fsolve requiere una aproximacin inicial de la raz, en este caso
utilizamos 1.0.
Ahora utlizaremos la funcin fsolve para encontrar una raz del siguiente
sistema de ecuciones no lineales:
x2 y2
5 0
8 16
y 2 5sen( x) 0
function F = Fxy(V)
x = V(1);
y = V(2);
F(1) = x*x/8 + y*y/16 -5;
F(2) = y*y - 5*sin(x);
endfunction
6.3177262
0.4155362
Observa como tuvimos que pasar un vector con dos condiciones iniciales. El
resultado es un vector, donde el primer elemento correspode al valor de x, y el
segundo al valor a y, respetando el orden en que los asignamos al declarar la
funcin.