Escolar Documentos
Profissional Documentos
Cultura Documentos
¿Qué es Scilab?
Scilab fue desarrollado para aplicaciones de control de sistemas y
procesamiento de señales. Es un formato de código distribuido libremente.
Scilab fue creado con tres partes distintas: un interpretador, librerías de
funciones (procedimientos Scilab) y librerías de Fortran y C.
http://www.scilab.org/download/
-->a=1;
-->A=2;
-->a+A
ans =
3.
Pueden escribirse varios comandos en una línea, separados por “;”. Sin
embargo, es preferible por claridad escribir un comando por línea. Se pueden
escribir comentarios utilizando la combinación de caracteres “//”:
-->//Dos comandos en la misma línea
-->c=[1 2];b=1.5
b =
1.5
-->who
your variables are...
u A b a scicos_pal
%scicos_menu %scicos_short %scicos_help
%scicos_display_mode modelica_libs
scicos_pal_libs %scicos_lhb_list %CmenuTypeOneVector
%helps
WSCI home SCIHOME CreateScilabHomeDir
PWD TMPDIR MSDOS SCI guilib sparselib
Constantes predefinidas.
Scilab provee como constantes predefinidas %i, %pi, %e, y %eps. La
constante %i representa −1 , %pi es π= 3.1415927…, %e es l número de
Euler e=2.7182818... y %eps es una constante que representa la precisión de
la máquina (%eps es el numero más grande para el que 1+%eps=1). %inf
y %nan son para “Infinito” y “NounNumero” respectivamente. Otras
constantes son %t y %f que son para “verdadero (trae)” y “falso (false)”
respectivamente.
Escalares y Matrices
Escalares.
Los escalares son números 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=4-3*%i
b =
4. - 3.i
--> a*b
ans =
26. - 7.i
-->a*B
ans =
- 12. + i
Observa que Scilab evalúa inmediatamente líneas 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
número de renglón y el número 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.
Extracción de rangos de matrices.
La extracción de rangos de matrices o submatrices es una de la operaciones
mas importantes para la programación 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 paréntesis
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 renglón 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 renglón hasta el tercer renglón,
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 número de renglones para poder
hacer esta composición.
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
común. 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.
Generación 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 símbolo 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.
2. 3.
5. 1.
7. 9.
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.
Multiplicación de matrices.
La multiplicación de matrices se representa con el símbolo “*”. Recuerda que
para que dos matrices puedan multiplicarse, deben ser conformes (el número
de columnas de la primera matriz tiene que ser igual al número de columnas
de la segunda matriz), y que la multiplicación de matrices no es conmutativa.
El resultado tiene el mismo número de renglones que la primer matriz, y el
mismo número 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.
-->A = [1 5 3; 2 7 8; 3 5 4; 0 2 9]
A =
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 renglón (vector renglón) 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 mayoría de las funciones
matemáticas en Scilab aplican tanto a número 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
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.
Número de condición de una matriz.
El número de condición de una matriz es un escalar positivo. Si el número es
muy cercano a cero, la matriz es mal condicionada, y el cálculo de la inversa
puede ser erróneo por errores de redondeo. El número de condición es una
medida mas confiable que el determinante para evaluar la importancia de lo
errores de redeondeo. Se obtiene con la función “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.
Definición 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 función, la “cargamos” a Scilab con la opción “Load
into Scilab” dentro de “Execute” en el editor. La función esta lista para
usarse:
-->cubica(27)
ans =
3.
27. 8. 64.
-->cubica(A)
ans =
3. 2. 4.
Observa que si utilizamos nuesta función con una matriz, ¡la aplica a cada uno
de los elementos de ésta!
Vamos a analizar uno por uno los elementos de nuestra función:
function r = cubica(x)
r = exp(1.0/3.0 * log(x));
endfunction
IMPORTANTE
¡Es muy importante dejar al menos una línea 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 función obtenemos el resultado en un vector columna:
-->circulo(3)
ans =
18.849556
28.274334
Métodos Numéricos
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 − 21 x5 = 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 términos 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
Comprobación:
-->A*X
ans =
12.
- 2.
- 1.
5.
5.
Otra forma (mas eficiente para sistemas grandes) es utilizando el comando “\”:
-->X = A \ b
X =
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 función usando el editor de Scilab y la cargamos:
function y = f(x)
y = x^2 - exp(x^2);
endfunction
-->x=fsolve(1.0,f)
x =
- 0.0002122
Observa que fsolve requiere una aproximación inicial de la raíz, en este caso
utilizamos 1.0.
Ahora utlizaremos la función ‘fsolve’ para encontrar una raíz 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
función.