SlideShare una empresa de Scribd logo
1 de 29
TUTORIAL BÁSICO DE SCILAB
¿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.
Uno de los conceptos básicos de la sintaxis Scilab es su habilidad de manejar
matrices: con manipulaciones básicas como concatenación, extracción o
transposición que son llevadas a cabo inmediatamente tan bien como las
operaciones básicas como suma y multiplicación. Scilab también maneja
objetos más complejos que matrices numéricas. Por ejemplo, para
aplicaciones de control se requiere manipular matrices racionales o
polinomiales. Esto es hecho en Scilab manipulando listas y escribiéndolas, lo
que permite una representación simbólica natural de objetos matemáticos
complicados como funciones de transferencia.
Scilab provee una variedad de poderosas funciones para el análisis de sistemas
no lineales. La integración de modelos dinámicos explícitos a implícitos puede
ser llevada a cabo numéricamente. La barra de herramientas scicos permite
una definición gráfica y simulación de sistemas híbridos interconectados.
Existen facilidades de optimización numérica para la optimización no lineal
(incluyendo optimización no diferencial), optimización cuadrática y lineal.
Scilab tiene una programación ambiental abierta en donde la creación de
funciones y librerías de funciones están completamente en las manos del
usuario. Las funciones son reconocidas como objetos de datos in Scilab y
pueden ser manipulados o creados como otros objetos de información. Por
ejemplo, funciones pueden ser definidas en Scilab y pasadas como una entrada
o salida de argumentos de otras funciones. Además, Scilab acepta caracteres
que permiten la creación de funciones en línea. Las matrices de caracteres
también son manupiladas como matrices ordinarias.
Finalmente, Scilab es fácilmente interfasado con Fortan o programas de C.
Esto permite utilizar paquetes estandarizados y librerías en el ambiente de
Scilab.
La filosofía general de Scilab es proveer el siguiente tipo de ambiente
computacional:
• Tener tipos de datos que sean variables y flexibles con una sintaxis
natural y fácil de usar.
• Proveer un set razonable de funciones que sirva como base para una
extensa variedad de cálculos.
• Tener un ambiente abierto de programación en donde nuevas funciones
puedan ser adheridas.
El objetivo de este tutorial es dar al usuario una introducción a los comandos y
estructuras básica de Scilab para que empiece a utilizarlo. Para información o
tutoriales en temas especializados como control, existen varios tutoriales y
documentos accesibles por internet.
Instalación de Scilab en Windows.
Puede obtenerse una versión lista para instalar, con interface gráfica, de la
siguiente dirección:
http://www.scilab.org/download/
Para MS Windows, baja e instala la versión:
scilab-4.1.2 installer for binary version
El instalador te generará un enlace con el símbolo de Scilab en tu escritorio,
con el que podrás ejecutarlo.
Introducción a la lína de comandos.
Al ejecutar Scilas, se abre una ventana con un indicador a la línea de
comandos, inicada por “-->”. A continuación se presentarán algunos
comandos simples. Todos los comandos son interpretados.
Scilab hace diferencia entre minúsculas y mayúsculas. El carácter “;” después
de cada comando le indica a Scilab NO desplegar el resultado en la línea de
comandos:
-->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
Puede escribirse un commando en varias líneas, utilizando la combinación de
símbolos “…”. Esto es útil para fórmulas muy largas. No está permitido
“cortar” el nombre de una variable o función en dos líneas.
-->//Un comando en diferentes líneas
-->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
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
xdesslib percentlib polylib intlib elemlib
utillib statslib alglib siglib optlib autolib
roblib
soundlib metalib armalib tkscilib tdcslib s2flib
mtlblib %F %T %z %s %nan
%inf
COMPILER %gtk %gui %pvm %tk $
%t %f %eps %io %i %e
using 31767 elements out of 5000000.
and 62 variables out of 9231
your global variables are...
LANGUAGE %helps demolist %browsehelp LCC
%toolboxes %toolboxes_dir
using 1165 elements out of 11000.
and 7 variables out of 767
Observa que obtenemos la lista de las variables previamente definidas por
nosotros, “u a b A” junto con un ambiente inicial compuesto de diferentes
librerías y algunas variables especificas “permanentes”.
Tipos de Datos
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.
Estas constantes están protegidas y no pueden ser borradas ni modificadas por
el usuario.
Escalares y Matrices
La estructura fundamental en Scilab son las matrices, como se verá a
continuación. Pero antes es necesario definir que es un escalar para Scilab.
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.
Creación de una matriz.
La forma más fácil para crear una matriz es especificando directamente sus
elementos. Observa que los elementos de cada renglón pueden separarse con
espacios o con comas, y para indicar un nuevo renglón se utiliza el punto y
coma. Los elementos deben especificarse dentro de paréntesis cuadrados.
-->A = [1 2 4; 5 7 9]
A =
1. 2. 4.
5. 7. 9.
-->B = [2,7;5,1]
B =
2. 7.
5. 1.
Una matriz también puede especificarse sobre varias líneas:
-->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 =
1.5 2. 7. 9.2 8.3
2.7 5.2 3. 1. 8.
1. 2. 3. 4. 5.
Definimos una matriz de 3 renglones por 5 columnas. Si queremos extraer el
elemento correspondiente al primer renglón, segunda columna, utilizamos:
-->A(1,2)
ans =
2.
Observa que para acceder a los elementos de una matriz se utilizan paréntesis
normales, no cuadrados!
Para extraer todos los elementos de la primera columna utilizamos:
-->A(:,1)
ans =
1.5
2.7
1.
Observa como el símbolo “:” se utiliza en la posición correspondiente al
índice del renglón, y un uno en la posición correspondiente al índice de la
columna. Este comando puede leerse como:
“Regresa los elementos correspondientes a todos los renglones, primera
columna”.
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.
En este caso, el resultado es una matriz de un renglón por tres columnas, o 1 X
3, como es de esperarse.
También podemos extraer submatrices definidas por rangos de renglones y
columnas, por ejemplo:
-->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.
Formación de matrices a partir de otras matrices.
Podemos “componer” matrices a partir de otras matrices, mientras las
dimensiones sean congruentes. Por ejemplo:
-->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.
Como ejercicio, explica como se forma la siguiente matriz compuesta:
-->D = [C; [A(3,:) B(2,1)]]
D =
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:
Generación de una matriz con todos sus elementos igual a uno:
-->C = ones(4,3)
C =
1. 1. 1.
1. 1. 1.
1. 1. 1.
1. 1. 1.
Generación de una matriz con todos sus elementos igual a zero:
-->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.
Generación de una matriz cuadrada con los elementos de la diagonal
especificados, y ceros fuera de la diagonal principal:
-->D = diag( [2 1 0 -1 -2] )
D =
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.
Generación de una matriz cuadrada con los elementos en la diagonal debajo de
la diagonal principal especificados:
-->L = diag( [1 2 3 4], -1 )
L =
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.
Generación de una matriz con números aleatorios entre 0 y 1:
-->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.
Multiplicación por un escalar.
Una matriz puede multiplicarse por un escalar utilizando el símbolo “*”.
Todos los elementos de la matriz se multiplican por el escalar, por ejemplo:
--> B = [2, 5, 9; 3, 7, 4]
B =
2. 5. 9.
3. 7. 4.
-->C = 2*B
C =
4. 10. 18.
6. 14. 8.
Suma y resta de matrices.
Para que dos matrices puedan sumarse o restarse, tienen que ser del mismo
orden. La suma y resta se hacen elemento a elemento correspondiente.
-->A = [2, 3; 5,1; 7,9]
A =
2. 3.
5. 1.
7. 9.
-->B = [8,25; 2,37; 5,7]
B =
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.
Multiplicación de matrices elemento a elemento.
Esta es una operación que NO ESTA DEFINIDA dentro del álgebra matricial,
pero que es muy útil en la solución de algunos tipos de problemas con
matrices. Se define en Scilab como la multiplicación de los elementos
correspondientes de dos matrices, y se representa con la secuencia de símbolos
punto y asterisco: “.*”. Observa que las matrices tienen que ser del mismo
orden, y que obviamente es conmutativa.
-->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:
-->X = [1 5 7 9]' // Vector columna
X =
1.
5.
7.
9.
-->X(3)
ans =
7.
-->Y = [2 4 6 8] // Vector renglón
Y =
2. 4. 6. 8.
-->Y(4)
ans =
8.
Vectores con componentes equiespaciados.
Los vectores equiespaciados se utilizan frecuentemente para evaluar
funciones, por lo que Scilab provee una forma muy conveniente de formarlos.
Por ejemplo, para formar un vector con elementos del 0 al 10 en intervalos de
1 podemos usar:
-->X=0:10
X =
0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Si queremos que es espaciamiento entre los elementos sea de 0.5,
introducimos el comando:
X =
column 1 to 20
0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5
9. 9.5
column 21
10.
El siguiente comando genera un vector columna de 2 a 3 con espaciamientos
de =0.2:
-->Y=(2:0.2:3)'
Y =
2.
2.2
2.4
2.6
2.8
3.
Funciones en Scilab
Las funciones son otro de los componentes fundamentales de Scilab. Existen
cientos de funciones predefinidas, y el usuario puede definir sus propias
funciones fácilmente.
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
Observa que en el último ejemplo, la función “log()” obtiene el logaritmo
natural de un número.
Puede encontrarse información sobre lo que hace una función con el comando
help, por ejemplo:
-->help log
Abre una página con documentación de esta función:
Last update : April 1993
log - natural logarithm
Calling Sequence
y=log(x)
Parameters
• x : constant vector or constant matrix
Description
log(x) is the "element-wise" logarithm. y(i,j)=log(x(i,j)) . For matrix logarithm see
logm .
Examples
exp(log([1,%i,-1,-%i]))
See Also
exp , logm , ieee ,
Aplicación de funciones a los elementos de una matriz.
Una característica distintiva de paquetes como Scilab, Matlab, y Octave, es
que es muy fácil aplicar una función escalar a todos los elementos de una
matriz. Basta con pasar la matriz como argumento a la función. Esto se ve
claramente en el siguiente ejemplo:
-->A = [ 9 16; 25 36]
A =
9. 16.
25. 36.
-->B = sqrt(A)
B =
3. 4.
5. 6.
Observa como se aplicó la función “sqrt()”, raíz cuadrada, a cada elemento de
la matriz A.
Funciones especiales para matrices.
Existen varias funciones definidas especialmente para matrices. Algunas de
las mas útiles son:
Determinante de una matriz.
El determinante de una matriz cuadrada se obtiene utilizando la función inv.
-->A = [1 7 9; 2 5 4; 3 2 8]
A =
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
La matriz está bien condicionada y el cálculo de la inversa es confiable.
Inversa de una matriz.
La inversa de una matriz cuadrada (si existe y la matriz es bien condicionada)
pude obtenerse con la función “inv()”. Para la matriz del ejemplo anterior:
-->inv(A)
ans =
- 0.3368421 0.4 0.1789474
0.0421053 0.2 - 0.1473684
0.1157895 - 0.2 0.0947368
Observa que en este caso, la función regresa una matriz.
En Scilab, una función pude regresar una matriz o un vector. Tmbién pude
regresar mas de un resultado. Un ejemplo muy útil es la función “size()”, que
nos sirve para determinar el orden de una matriz. Observa los siguientes
ejemplos:
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
Es posible definir funciones directamente en la línea de comandos de Scilab,
pero es mas recomendable hacerlo abriendo el editor en la barra de opciones
(recuerda que puedes guardar el archivo creado con tus funciones para
reutilizarlo). Veamos un ejemplo para crear una función que obtenga la raíz
cúbica de un número.
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.
-->A = [27 8 64]
A =
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)
Este es el encabezado de nuestra función. La palabra reservada “function”
indica que se esta declarando una función. La vairable “r” es representa la
salida o resultado de la funcón, en este caso tenemos un escalar. El nombre
puede ser cualquier nombre válido. El signo igual se utiliza para indicar la
asignación de nuestra función. La palabra “cubica” es el nombre con el cual
vamos a llamar nuestra función. Puede ser cualquier nombre válido.
Elparámetro “x” representa el argumento de nuestra función. Una función
puede tener mas de un argumento.
// Funcion para calcular la raiz cubica
Esta línea es un comentario. Es importante incluir comentarios para facilitar el
uso de la función. Además este comentario aparecerá automáticamente en la
documentación de la función si se busca con el comando”help cubica”. No
deben incluirse caracteres especiales en el comentario, como acentos, ya que
la documentación automática no los permite.
r = exp(1.0/3.0 * log(x));
Esta línea asigna a la variable de salida el valor de la raíz cúbica de lo que se
le pase a la función como argumento. Es necesario que en alguna parte de
nuesta función se le asigne valor a la variable o variables de salida.
endfunction
Esta línea señala el final de la declaración de la función.
Enseguida vamos a declarar una función que reciba como parámetro el radio
de un círculo, y regrese el valor del perímetro y del área.
function [p,a] = circulo(r)
// Regresa el perimetro del circulo de radio r en p,
// y el area en a.
p = 2 * %pi * r;
a = %pi * r * r;
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!
Después de cargar la función en Scilab, podemos utilizarla:
-->[perimetro,area] = circulo(3)
area =
28.274334
perimetro =
18.849556
Observa que si llamamos la función sola, regresa el valor de salida de la
última variable que se declaró en el encabezado:
-->circulo(3)
ans =
18.849556
Ahora vamos a modificar la función círculo para que entregue el perímetro y
el área como componentes de un vector:
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
Scilab incluye funciones pre-programadas para diversos métodos numéricos.
En seguida presentamos algunos de los mas utilizados.
Solución de sistemas de ecuaciones lineales.
Resolver sistemas de ecuaciones lineales es muy sencillo con Scilab. La mejor
forma de mostrarlo es con un ejemplo:
Resolver el sistema:
52131523
582523
152254
2525122
1252525
54321
54321
54321
54321
54321
=−+++
=−+−+
−=−+−+
−=−+−+
=−+−−
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
Primero capturamos la matriz de coeficientes del sistema en forma matricial
en Scilab:
-->A=[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]
A =
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:
-->b = [12 -2 -1 5 5]'
b =
12.
- 2.
- 1.
5.
5.
La solución se obtiene como pre multiplicando el vector de términos
independientes por la inversa de la matriz de coeficientes:
-->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
Solución numérica de integrales definidas.
Para evaluar una integra definida numéricamente existen varias opciones.
Vamos a utilizar la función predefinida “intg()”. Empezamos utilizando el
comando help para saber mas detalles de esta función:
intg - definite integral
Calling Sequence
[v,err]=intg(a,b,f [,ea [,er])
Parameters
a,b : real numbers
f : external (function or list or string)
ea, er : real numbers
ea : absolute error required on the result. Default value: 1.d-14
er : relative error required on the result. Default value: 1.d-8
err : estimated absolute error on the result.
Los parámetos entre paréntesis cuadrados son opcionales.
Vamos a ver como se aplicaría esta función si se desea evaluar numéricamente
la siguiente integral:
dx
x
xsenx
∫
−
π
π
2
0 2
)
2
(1
)30(
Primero debemos programar la función en el editor de Scilab:
function y = f(x)
y = x * sin(30*x) / sqrt( 1 - ( (x / (2*%pi) )^2 ) );
endfunction
Una vez cargada la función en Scilab, utilizamos la función “integ()”:
-->[v,error]=intg(0,2*%pi,f)
error =
4.625D-09
v =
- 2.5432596
El valor de la integral fue asignado a “v”, y a la variable “error” se le asignó
el estimado del error del resultado.
Solución numérica de ecuaciones no lineales.
En Silab podemos utilizar la función ‘fsolve()’ para encontrar las raíces reales
de una ecuación no lineal, o de un sistema de ecuaciones no lineales. Veamos
como se utiliza con varios ejemplos simples:
Deseamos encontrar una raíz real de la ecuación:
02
=− x
ex
Primero programamos la función usando el editor de Scilab y la cargamos:
function y = f(x)
y = x^2 - exp(x^2);
endfunction
¡RECUERDA DEJAR AL MENOS UNA LINEA EN BLANCO AL FINAL DEL
ARCHIVO!
Ahora la pasamos como parámetro a “fsolve()”:
-->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:
05
168
22
=−+
yx
0)(52
=− xseny
Primero programamos la función en el editor de Scilab, utilizando un vector
para los parámetros de entrada, y un vector de salida para las funciones
evaluadas:
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
Ahora podemos pasar la función como parámetro a fsolve() :
-->fsolve([1.0,1.0]',Fxy)
ans =
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.
La función “fsolve( )” tiene varias opciones, las cuales puedes explorar
utilizando el comando help.

Más contenido relacionado

La actualidad más candente

G19 funcion de transferencia y diagrama de bode
G19 funcion de transferencia y diagrama de bodeG19 funcion de transferencia y diagrama de bode
G19 funcion de transferencia y diagrama de bodeRoslyn Cruz Castro
 
Diseño digital morris mano
Diseño digital   morris manoDiseño digital   morris mano
Diseño digital morris manoAngie Michel
 
Sumadores,codificadores, decodificadores,multiplexores y demultiplexores
Sumadores,codificadores, decodificadores,multiplexores y demultiplexoresSumadores,codificadores, decodificadores,multiplexores y demultiplexores
Sumadores,codificadores, decodificadores,multiplexores y demultiplexoresJose Tomas Rodriguez Henriquez
 
Aletas de transferencia de calor
Aletas de transferencia de calorAletas de transferencia de calor
Aletas de transferencia de calorMiguel Arturo Meza
 
Guia operaciones unitarias 3
Guia operaciones unitarias 3Guia operaciones unitarias 3
Guia operaciones unitarias 3davpett
 
Reporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirezReporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirezDiego Ramírez
 
Simplificación de los diagramas de bloques
Simplificación de los diagramas de bloquesSimplificación de los diagramas de bloques
Simplificación de los diagramas de bloquesantovazp
 
Balances de materia y energía en la operación unitaria de destilación
Balances de materia y energía en la operación unitaria de destilaciónBalances de materia y energía en la operación unitaria de destilación
Balances de materia y energía en la operación unitaria de destilaciónMikelOrdaz
 
Problemas transferencia de materia
Problemas transferencia de materiaProblemas transferencia de materia
Problemas transferencia de materiaStephanie Melo Cruz
 
Lugar geométrico de las raices control 1
Lugar geométrico de las raices control 1Lugar geométrico de las raices control 1
Lugar geométrico de las raices control 1Marvin Pariona
 
Ciclo de rankine copia
Ciclo de rankine   copiaCiclo de rankine   copia
Ciclo de rankine copiaRigo Cruz
 
Diseño de flechas o ejes (selección de materiales)
Diseño de flechas o ejes (selección de materiales)Diseño de flechas o ejes (selección de materiales)
Diseño de flechas o ejes (selección de materiales)Angel Villalpando
 
Cap 7 balance de materia en procesos de combustion gooding
Cap 7 balance de materia en procesos de combustion goodingCap 7 balance de materia en procesos de combustion gooding
Cap 7 balance de materia en procesos de combustion goodingAnaluisa Flores Rosales
 

La actualidad más candente (20)

G19 funcion de transferencia y diagrama de bode
G19 funcion de transferencia y diagrama de bodeG19 funcion de transferencia y diagrama de bode
G19 funcion de transferencia y diagrama de bode
 
Diseño digital morris mano
Diseño digital   morris manoDiseño digital   morris mano
Diseño digital morris mano
 
Sumadores,codificadores, decodificadores,multiplexores y demultiplexores
Sumadores,codificadores, decodificadores,multiplexores y demultiplexoresSumadores,codificadores, decodificadores,multiplexores y demultiplexores
Sumadores,codificadores, decodificadores,multiplexores y demultiplexores
 
Aletas de transferencia de calor
Aletas de transferencia de calorAletas de transferencia de calor
Aletas de transferencia de calor
 
modelado sistema neumatico
modelado sistema neumaticomodelado sistema neumatico
modelado sistema neumatico
 
Guia operaciones unitarias 3
Guia operaciones unitarias 3Guia operaciones unitarias 3
Guia operaciones unitarias 3
 
Semaforo con hmi
Semaforo con hmiSemaforo con hmi
Semaforo con hmi
 
Reporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirezReporte de practica transistores bjt diego ramirez
Reporte de practica transistores bjt diego ramirez
 
10.0 ciclo rankine
10.0 ciclo rankine10.0 ciclo rankine
10.0 ciclo rankine
 
Simplificación de los diagramas de bloques
Simplificación de los diagramas de bloquesSimplificación de los diagramas de bloques
Simplificación de los diagramas de bloques
 
Guía 8 de balance de masa y energía
Guía 8 de balance de masa y energíaGuía 8 de balance de masa y energía
Guía 8 de balance de masa y energía
 
Difusores
DifusoresDifusores
Difusores
 
Máquinas hidráulicas
Máquinas hidráulicasMáquinas hidráulicas
Máquinas hidráulicas
 
Balances de materia y energía en la operación unitaria de destilación
Balances de materia y energía en la operación unitaria de destilaciónBalances de materia y energía en la operación unitaria de destilación
Balances de materia y energía en la operación unitaria de destilación
 
Problemas transferencia de materia
Problemas transferencia de materiaProblemas transferencia de materia
Problemas transferencia de materia
 
Turbinas
TurbinasTurbinas
Turbinas
 
Lugar geométrico de las raices control 1
Lugar geométrico de las raices control 1Lugar geométrico de las raices control 1
Lugar geométrico de las raices control 1
 
Ciclo de rankine copia
Ciclo de rankine   copiaCiclo de rankine   copia
Ciclo de rankine copia
 
Diseño de flechas o ejes (selección de materiales)
Diseño de flechas o ejes (selección de materiales)Diseño de flechas o ejes (selección de materiales)
Diseño de flechas o ejes (selección de materiales)
 
Cap 7 balance de materia en procesos de combustion gooding
Cap 7 balance de materia en procesos de combustion goodingCap 7 balance de materia en procesos de combustion gooding
Cap 7 balance de materia en procesos de combustion gooding
 

Similar a Tutorial descilab (20)

Introduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdfIntroduccion rapida a SCILAB.pdf
Introduccion rapida a SCILAB.pdf
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Apuntes scilab
Apuntes scilabApuntes scilab
Apuntes scilab
 
Apuntes matlab
Apuntes matlabApuntes matlab
Apuntes matlab
 
Matlab
MatlabMatlab
Matlab
 
Copiade documento(2)
Copiade documento(2)Copiade documento(2)
Copiade documento(2)
 
Computacion aplicada
Computacion aplicadaComputacion aplicada
Computacion aplicada
 
Matlab2
Matlab2Matlab2
Matlab2
 
Computacion ii cap i
Computacion ii cap iComputacion ii cap i
Computacion ii cap i
 
computacion
computacioncomputacion
computacion
 
Sesion 5
Sesion 5Sesion 5
Sesion 5
 
Matlab scientific scilab_mathematics
Matlab scientific scilab_mathematicsMatlab scientific scilab_mathematics
Matlab scientific scilab_mathematics
 
15894 pr cctica-3-introducciun-al-matlab-simulink
15894 pr cctica-3-introducciun-al-matlab-simulink15894 pr cctica-3-introducciun-al-matlab-simulink
15894 pr cctica-3-introducciun-al-matlab-simulink
 
Apuntes matlab
Apuntes matlabApuntes matlab
Apuntes matlab
 
Intro matlab msantos
Intro matlab msantosIntro matlab msantos
Intro matlab msantos
 
Matlab
MatlabMatlab
Matlab
 
Matlab
MatlabMatlab
Matlab
 
Matlab
MatlabMatlab
Matlab
 
Matlab
MatlabMatlab
Matlab
 
MATLAB Tutorial
MATLAB TutorialMATLAB Tutorial
MATLAB Tutorial
 

Tutorial descilab

  • 1. TUTORIAL BÁSICO DE SCILAB ¿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. Uno de los conceptos básicos de la sintaxis Scilab es su habilidad de manejar matrices: con manipulaciones básicas como concatenación, extracción o transposición que son llevadas a cabo inmediatamente tan bien como las operaciones básicas como suma y multiplicación. Scilab también maneja objetos más complejos que matrices numéricas. Por ejemplo, para aplicaciones de control se requiere manipular matrices racionales o polinomiales. Esto es hecho en Scilab manipulando listas y escribiéndolas, lo que permite una representación simbólica natural de objetos matemáticos complicados como funciones de transferencia. Scilab provee una variedad de poderosas funciones para el análisis de sistemas no lineales. La integración de modelos dinámicos explícitos a implícitos puede ser llevada a cabo numéricamente. La barra de herramientas scicos permite una definición gráfica y simulación de sistemas híbridos interconectados. Existen facilidades de optimización numérica para la optimización no lineal (incluyendo optimización no diferencial), optimización cuadrática y lineal. Scilab tiene una programación ambiental abierta en donde la creación de funciones y librerías de funciones están completamente en las manos del usuario. Las funciones son reconocidas como objetos de datos in Scilab y pueden ser manipulados o creados como otros objetos de información. Por ejemplo, funciones pueden ser definidas en Scilab y pasadas como una entrada o salida de argumentos de otras funciones. Además, Scilab acepta caracteres que permiten la creación de funciones en línea. Las matrices de caracteres también son manupiladas como matrices ordinarias. Finalmente, Scilab es fácilmente interfasado con Fortan o programas de C. Esto permite utilizar paquetes estandarizados y librerías en el ambiente de Scilab. La filosofía general de Scilab es proveer el siguiente tipo de ambiente computacional:
  • 2. • Tener tipos de datos que sean variables y flexibles con una sintaxis natural y fácil de usar. • Proveer un set razonable de funciones que sirva como base para una extensa variedad de cálculos. • Tener un ambiente abierto de programación en donde nuevas funciones puedan ser adheridas. El objetivo de este tutorial es dar al usuario una introducción a los comandos y estructuras básica de Scilab para que empiece a utilizarlo. Para información o tutoriales en temas especializados como control, existen varios tutoriales y documentos accesibles por internet. Instalación de Scilab en Windows. Puede obtenerse una versión lista para instalar, con interface gráfica, de la siguiente dirección: http://www.scilab.org/download/ Para MS Windows, baja e instala la versión: scilab-4.1.2 installer for binary version El instalador te generará un enlace con el símbolo de Scilab en tu escritorio, con el que podrás ejecutarlo. Introducción a la lína de comandos. Al ejecutar Scilas, se abre una ventana con un indicador a la línea de comandos, inicada por “-->”. A continuación se presentarán algunos comandos simples. Todos los comandos son interpretados. Scilab hace diferencia entre minúsculas y mayúsculas. El carácter “;” después de cada comando le indica a Scilab NO desplegar el resultado en la línea de comandos: -->a=1; -->A=2; -->a+A ans = 3.
  • 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 Puede escribirse un commando en varias líneas, utilizando la combinación de símbolos “…”. Esto es útil para fórmulas muy largas. No está permitido “cortar” el nombre de una variable o función en dos líneas. -->//Un comando en diferentes líneas -->u=1000000*(a*sin(A))ˆ2+... --> 2000000*a*b*sin(A)*cos(A)+... --> 1000000*(b*cos(A))ˆ2 u = 81268.994
  • 4. Podemos obtener una lista de las variable existentes con el comando “who”: -->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 xdesslib percentlib polylib intlib elemlib utillib statslib alglib siglib optlib autolib roblib soundlib metalib armalib tkscilib tdcslib s2flib mtlblib %F %T %z %s %nan %inf COMPILER %gtk %gui %pvm %tk $ %t %f %eps %io %i %e using 31767 elements out of 5000000. and 62 variables out of 9231 your global variables are... LANGUAGE %helps demolist %browsehelp LCC %toolboxes %toolboxes_dir using 1165 elements out of 11000. and 7 variables out of 767 Observa que obtenemos la lista de las variables previamente definidas por nosotros, “u a b A” junto con un ambiente inicial compuesto de diferentes librerías y algunas variables especificas “permanentes”.
  • 5. Tipos de Datos 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. Estas constantes están protegidas y no pueden ser borradas ni modificadas por el usuario. Escalares y Matrices La estructura fundamental en Scilab son las matrices, como se verá a continuación. Pero antes es necesario definir que es un escalar para Scilab. 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
  • 6. 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. Creación de una matriz. La forma más fácil para crear una matriz es especificando directamente sus elementos. Observa que los elementos de cada renglón pueden separarse con espacios o con comas, y para indicar un nuevo renglón se utiliza el punto y coma. Los elementos deben especificarse dentro de paréntesis cuadrados. -->A = [1 2 4; 5 7 9] A = 1. 2. 4. 5. 7. 9. -->B = [2,7;5,1] B = 2. 7. 5. 1. Una matriz también puede especificarse sobre varias líneas: -->C=[1 2 3 5; -->2 8 9 3] C = 1. 2. 3. 5. 2. 8. 9. 3.
  • 7. 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 = 1.5 2. 7. 9.2 8.3 2.7 5.2 3. 1. 8. 1. 2. 3. 4. 5. Definimos una matriz de 3 renglones por 5 columnas. Si queremos extraer el elemento correspondiente al primer renglón, segunda columna, utilizamos: -->A(1,2) ans = 2. Observa que para acceder a los elementos de una matriz se utilizan paréntesis normales, no cuadrados! Para extraer todos los elementos de la primera columna utilizamos: -->A(:,1) ans = 1.5 2.7 1. Observa como el símbolo “:” se utiliza en la posición correspondiente al índice del renglón, y un uno en la posición correspondiente al índice de la columna. Este comando puede leerse como: “Regresa los elementos correspondientes a todos los renglones, primera columna”. Observa como el resultado es una matriz de tres renglones por una columna, o 3 X 1.
  • 8. Para extraer los elementos del tercer renglón utilizamos: -->A(3,:) ans = 1. 2. 3. 4. 5. En este caso, el resultado es una matriz de un renglón por tres columnas, o 1 X 3, como es de esperarse. También podemos extraer submatrices definidas por rangos de renglones y columnas, por ejemplo: -->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. Formación de matrices a partir de otras matrices. Podemos “componer” matrices a partir de otras matrices, mientras las dimensiones sean congruentes. Por ejemplo: -->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.
  • 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. Como ejercicio, explica como se forma la siguiente matriz compuesta: -->D = [C; [A(3,:) B(2,1)]] D = 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: Generación de una matriz con todos sus elementos igual a uno: -->C = ones(4,3) C = 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. Generación de una matriz con todos sus elementos igual a zero: -->D = zeros(4,3) D = 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
  • 10. 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. Generación de una matriz cuadrada con los elementos de la diagonal especificados, y ceros fuera de la diagonal principal: -->D = diag( [2 1 0 -1 -2] ) D = 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. Generación de una matriz cuadrada con los elementos en la diagonal debajo de la diagonal principal especificados: -->L = diag( [1 2 3 4], -1 ) L = 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. Generación de una matriz con números aleatorios entre 0 y 1: -->R = rand(3,2) R = 0.2922267 0.3321719 0.5664249 0.5935095 0.4826472 0.5015342
  • 11. 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. Multiplicación por un escalar. Una matriz puede multiplicarse por un escalar utilizando el símbolo “*”. Todos los elementos de la matriz se multiplican por el escalar, por ejemplo: --> B = [2, 5, 9; 3, 7, 4] B = 2. 5. 9. 3. 7. 4. -->C = 2*B C = 4. 10. 18. 6. 14. 8. Suma y resta de matrices. Para que dos matrices puedan sumarse o restarse, tienen que ser del mismo orden. La suma y resta se hacen elemento a elemento correspondiente. -->A = [2, 3; 5,1; 7,9] A = 2. 3.
  • 12. 5. 1. 7. 9. -->B = [8,25; 2,37; 5,7] B = 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.
  • 13. -->G = [0, 5; 10 29; 7 21] G = 0. 5. 10. 29. 7. 21. -->H=F*G H = 113. 344. 84. 250. Multiplicación de matrices elemento a elemento. Esta es una operación que NO ESTA DEFINIDA dentro del álgebra matricial, pero que es muy útil en la solución de algunos tipos de problemas con matrices. Se define en Scilab como la multiplicación de los elementos correspondientes de dos matrices, y se representa con la secuencia de símbolos punto y asterisco: “.*”. Observa que las matrices tienen que ser del mismo orden, y que obviamente es conmutativa. -->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.
  • 14. -->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: -->X = [1 5 7 9]' // Vector columna X = 1. 5. 7. 9. -->X(3) ans = 7. -->Y = [2 4 6 8] // Vector renglón Y = 2. 4. 6. 8. -->Y(4) ans = 8. Vectores con componentes equiespaciados. Los vectores equiespaciados se utilizan frecuentemente para evaluar funciones, por lo que Scilab provee una forma muy conveniente de formarlos. Por ejemplo, para formar un vector con elementos del 0 al 10 en intervalos de 1 podemos usar:
  • 15. -->X=0:10 X = 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Si queremos que es espaciamiento entre los elementos sea de 0.5, introducimos el comando: X = column 1 to 20 0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5 9. 9.5 column 21 10. El siguiente comando genera un vector columna de 2 a 3 con espaciamientos de =0.2: -->Y=(2:0.2:3)' Y = 2. 2.2 2.4 2.6 2.8 3.
  • 16. Funciones en Scilab Las funciones son otro de los componentes fundamentales de Scilab. Existen cientos de funciones predefinidas, y el usuario puede definir sus propias funciones fácilmente. 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 Observa que en el último ejemplo, la función “log()” obtiene el logaritmo natural de un número.
  • 17. Puede encontrarse información sobre lo que hace una función con el comando help, por ejemplo: -->help log Abre una página con documentación de esta función: Last update : April 1993 log - natural logarithm Calling Sequence y=log(x) Parameters • x : constant vector or constant matrix Description log(x) is the "element-wise" logarithm. y(i,j)=log(x(i,j)) . For matrix logarithm see logm . Examples exp(log([1,%i,-1,-%i])) See Also exp , logm , ieee ,
  • 18. Aplicación de funciones a los elementos de una matriz. Una característica distintiva de paquetes como Scilab, Matlab, y Octave, es que es muy fácil aplicar una función escalar a todos los elementos de una matriz. Basta con pasar la matriz como argumento a la función. Esto se ve claramente en el siguiente ejemplo: -->A = [ 9 16; 25 36] A = 9. 16. 25. 36. -->B = sqrt(A) B = 3. 4. 5. 6. Observa como se aplicó la función “sqrt()”, raíz cuadrada, a cada elemento de la matriz A. Funciones especiales para matrices. Existen varias funciones definidas especialmente para matrices. Algunas de las mas útiles son: Determinante de una matriz. El determinante de una matriz cuadrada se obtiene utilizando la función inv. -->A = [1 7 9; 2 5 4; 3 2 8] A = 1. 7. 9. 2. 5. 4. 3. 2. 8. -->det(A) ans = - 95.
  • 19. 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 La matriz está bien condicionada y el cálculo de la inversa es confiable. Inversa de una matriz. La inversa de una matriz cuadrada (si existe y la matriz es bien condicionada) pude obtenerse con la función “inv()”. Para la matriz del ejemplo anterior: -->inv(A) ans = - 0.3368421 0.4 0.1789474 0.0421053 0.2 - 0.1473684 0.1157895 - 0.2 0.0947368 Observa que en este caso, la función regresa una matriz.
  • 20. En Scilab, una función pude regresar una matriz o un vector. Tmbién pude regresar mas de un resultado. Un ejemplo muy útil es la función “size()”, que nos sirve para determinar el orden de una matriz. Observa los siguientes ejemplos: 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.
  • 21. Definición de Funciones por el Usuario Es posible definir funciones directamente en la línea de comandos de Scilab, pero es mas recomendable hacerlo abriendo el editor en la barra de opciones (recuerda que puedes guardar el archivo creado con tus funciones para reutilizarlo). Veamos un ejemplo para crear una función que obtenga la raíz cúbica de un número. 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. -->A = [27 8 64] A = 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!
  • 22. Vamos a analizar uno por uno los elementos de nuestra función: function r = cubica(x) Este es el encabezado de nuestra función. La palabra reservada “function” indica que se esta declarando una función. La vairable “r” es representa la salida o resultado de la funcón, en este caso tenemos un escalar. El nombre puede ser cualquier nombre válido. El signo igual se utiliza para indicar la asignación de nuestra función. La palabra “cubica” es el nombre con el cual vamos a llamar nuestra función. Puede ser cualquier nombre válido. Elparámetro “x” representa el argumento de nuestra función. Una función puede tener mas de un argumento. // Funcion para calcular la raiz cubica Esta línea es un comentario. Es importante incluir comentarios para facilitar el uso de la función. Además este comentario aparecerá automáticamente en la documentación de la función si se busca con el comando”help cubica”. No deben incluirse caracteres especiales en el comentario, como acentos, ya que la documentación automática no los permite. r = exp(1.0/3.0 * log(x)); Esta línea asigna a la variable de salida el valor de la raíz cúbica de lo que se le pase a la función como argumento. Es necesario que en alguna parte de nuesta función se le asigne valor a la variable o variables de salida. endfunction Esta línea señala el final de la declaración de la función.
  • 23. Enseguida vamos a declarar una función que reciba como parámetro el radio de un círculo, y regrese el valor del perímetro y del área. function [p,a] = circulo(r) // Regresa el perimetro del circulo de radio r en p, // y el area en a. p = 2 * %pi * r; a = %pi * r * r; 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! Después de cargar la función en Scilab, podemos utilizarla: -->[perimetro,area] = circulo(3) area = 28.274334 perimetro = 18.849556 Observa que si llamamos la función sola, regresa el valor de salida de la última variable que se declaró en el encabezado: -->circulo(3) ans = 18.849556 Ahora vamos a modificar la función círculo para que entregue el perímetro y el área como componentes de un vector: 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
  • 24. Al ejecutar la función obtenemos el resultado en un vector columna: -->circulo(3) ans = 18.849556 28.274334 Métodos Numéricos Scilab incluye funciones pre-programadas para diversos métodos numéricos. En seguida presentamos algunos de los mas utilizados. Solución de sistemas de ecuaciones lineales. Resolver sistemas de ecuaciones lineales es muy sencillo con Scilab. La mejor forma de mostrarlo es con un ejemplo: Resolver el sistema: 52131523 582523 152254 2525122 1252525 54321 54321 54321 54321 54321 =−+++ =−+−+ −=−+−+ −=−+−+ =−+−− xxxxx xxxxx xxxxx xxxxx xxxxx Primero capturamos la matriz de coeficientes del sistema en forma matricial en Scilab: -->A=[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] A = 5. - 2. - 5. 2. - 5. 2. 12. - 5. 2. - 5. 4. 1. - 5. 22. - 5.
  • 25. 3. 2. - 5. 2. - 8. 3. 2. 15. 3. - 21. Ahora el vector de términos independientes como un vector columna: -->b = [12 -2 -1 5 5]' b = 12. - 2. - 1. 5. 5. La solución se obtiene como pre multiplicando el vector de términos independientes por la inversa de la matriz de coeficientes: -->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 “”:
  • 26. -->X = A b X = 2.4985607 - 0.4645941 0.0540779 - 0.4553828 0.0481673 Solución numérica de integrales definidas. Para evaluar una integra definida numéricamente existen varias opciones. Vamos a utilizar la función predefinida “intg()”. Empezamos utilizando el comando help para saber mas detalles de esta función: intg - definite integral Calling Sequence [v,err]=intg(a,b,f [,ea [,er]) Parameters a,b : real numbers f : external (function or list or string) ea, er : real numbers ea : absolute error required on the result. Default value: 1.d-14 er : relative error required on the result. Default value: 1.d-8 err : estimated absolute error on the result. Los parámetos entre paréntesis cuadrados son opcionales.
  • 27. Vamos a ver como se aplicaría esta función si se desea evaluar numéricamente la siguiente integral: dx x xsenx ∫ − π π 2 0 2 ) 2 (1 )30( Primero debemos programar la función en el editor de Scilab: function y = f(x) y = x * sin(30*x) / sqrt( 1 - ( (x / (2*%pi) )^2 ) ); endfunction Una vez cargada la función en Scilab, utilizamos la función “integ()”: -->[v,error]=intg(0,2*%pi,f) error = 4.625D-09 v = - 2.5432596 El valor de la integral fue asignado a “v”, y a la variable “error” se le asignó el estimado del error del resultado. Solución numérica de ecuaciones no lineales. En Silab podemos utilizar la función ‘fsolve()’ para encontrar las raíces reales de una ecuación no lineal, o de un sistema de ecuaciones no lineales. Veamos como se utiliza con varios ejemplos simples: Deseamos encontrar una raíz real de la ecuación: 02 =− x ex
  • 28. Primero programamos la función usando el editor de Scilab y la cargamos: function y = f(x) y = x^2 - exp(x^2); endfunction ¡RECUERDA DEJAR AL MENOS UNA LINEA EN BLANCO AL FINAL DEL ARCHIVO! Ahora la pasamos como parámetro a “fsolve()”: -->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: 05 168 22 =−+ yx 0)(52 =− xseny Primero programamos la función en el editor de Scilab, utilizando un vector para los parámetros de entrada, y un vector de salida para las funciones evaluadas: 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 Ahora podemos pasar la función como parámetro a fsolve() :
  • 29. -->fsolve([1.0,1.0]',Fxy) ans = 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. La función “fsolve( )” tiene varias opciones, las cuales puedes explorar utilizando el comando help.