Breve Curso Introductorio de Scilab PDF
Breve Curso Introductorio de Scilab PDF
Breve Curso Introductorio de Scilab PDF
Introducción
Sus principales características son: *software para cálculo científico, * interactivo, * programable, * de
libre uso, con la condición de siempre hacer referencia a sus autores, * disponible para diferentes
plataformas: Windows, Linux, Mac OS X (sólo plataforma intel), Sun, Alpha, ...
Scilab es un paquete libre, “software libre” para la computación científica, posee un lenguaje de
programación propio, como los de cálculo numéricos (Fortran, C, C++, Java), permite al usuario hacer
sus propios scripts (conjunto de comandos o instrucciones escritos en un archivo que se pueden
ejecutar con una única orden) para resolver problemas o tarea, y se ejecutan mediante un intérprete.
Se escriben en un editor de texto integrado al Scilab.
Scilab
* Funciones para solución de tareas
* Resultados de rutinas o funciones Intérprete
Fortran, C, C++ Script
programadas
* librería o herramientas: simulación, Java
automatización y control, …
1
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Figura2. Imagen del sitio web donde bajar el Scilab según la plataforma de su PC
Dispone de una ayuda con el símbolo de interrogación “?” o , también hay tutoriales en
http://www.scilab.org/resources/documentation/tutorials (25 de marzo de 2013).
Una vez que se termine de bajar, se instala en la PC [/USB] a usar. Se puede copiar toda la carpeta del
Scilab donde se instaló en la PC a la unidad de USB para usarse como paquetería portátil. Al haber
terminado de copiar la carpeta <Scilab.4.1.0> se procede a crear un acceso directo del comando
ejecutable para activar/ejecutar el programa rápidamente, este paso se realiza solamente una vez, así
lo indican las imágenes en el Anexo A.
El acceso directo creado se ejecutará con un doble clic cada vez que se use el Scilab.
Es recomendable crear una carpeta donde se guardarán algunos archivos de trabajo y realizar el
cambio de directorio de trabajo dentro del Scilab así lo muestran en el Anexo B.
2
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Operadores a usar en Scilab
Operadores aritméticos: Operadores relacionales: Operadores lógicos:
Mayor prioridad ( ) ^ o ** < y &
* / > o |
Menor prioridad + - >= no ~
<= Boleanos:
~= , <> Falso %f o %F
= == verdadero %t o %T
-1
/ división por la derecha, x/y = xy
\ división por la izquierda, x\y = x-1y
El == se usa como operador de comparación no de asignación =.
‘ apóstrofe, transpuesta, (‘ a un lado de la tecla cero, 0)
Tipos de variables
En Scilab, por defecto, los números son codificados como números reales en coma flotante en doble
precisión. -0.567d-21, 8.003D-12
Algunas constantes numéricas están predefinidas. Sus nombres comienzan por el símbolo %. En
particular %pi es el número π, %e es el número e, %i es la unidad imaginaria, %eps es la precisión de la
máquina(mayor número real doble precisión para el que 1+%eps/2 es indistinguible de 1), %inf es el
infinitomáquina(overflow: cualquier número que supere al mayor número real representable en doble
precisión),%nan es el símbolo NaN (Not a Number) para una operación inválida (por ejemplo, 0/0 es
%nan).
El lenguaje de Scilab es interpretado, esto es, las instrucciones se traducen a lenguaje máquina una a
una y se ejecutan antes de pasar a la siguiente. Es posible escribir varias instrucciones en la misma
línea, separándolas por una coma o por punto y coma.
Scilab distingue entre mayúsculas y minúsculas: %nan NO ES LO MISMO QUE %NanSe pueden
recuperar comandos anteriores, usando las teclas de flechas arriba↑ y abajo↓. Con las flechas
izquierda← y derecha→ nos podemos desplazar sobre la línea de comando y modificarlo.
En Scilab las variables no son nunca declaradas: su tipo y su tamaño cambian de forma dinámica de
acuerdo con los valores que le son asignados. Así, una misma variable puede ser utilizada, por ejemplo,
para almacenar un número complejo, a continuación una matriz 25x40 de números enteros y luego
para almacenar un texto. Las variables se crean automáticamente al asignarles un contenido. Así
mismo, es posible eliminar una variable de la memoria si ya no se utiliza.
3
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Algunas funciones elementales
sqrt(x):raiz cuadrada sin(x):seno (radianes)
abs(x): valor absoluto cos(x):coseno (radianes)
conj(z):complejo conjugado tan(z):tangente (radianes)
real(z):parte real cotg(x):cotangente (radianes)
imag(z) :parte imaginaria asin(x) :arcoseno
exp(x):exponencial acos(x):arcocoseno
log(x) :logaritmo natural atan(x):arcotangente
log10(x):logaritmo decimal cosh(x):cos. hiperbólico
rat(x):aprox. racional sinh(x):seno hiperbólico
modulo(x:y):resto de dividir x por y tanh(x):tangente hiperbólica
floor(x):n tal que n<=x<(n+1) acosh(x):arcocosenohiperb.
ceil(x):n tal que (n-1)<x<=n asinh(x):arcosenohiperb.
int(x):parte entera inglesa: atanh(x):arcotangente
floor(x) si x>=0 Las funciones trigonométricas da valores
en radianes.
ceil(x) si x<0
Imagen del Scilab 4.0, el área de trabajo será en la “Consola de Scilab”, /intro/enter.
El símbolo del prompt es --> aquí se escriben todas las instrucciones dadas por el usuario para hacer
los cálculos necesarios.
4
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
A medida que iniciemos y avancemos en el manejo del Scilab se irán dando algunas breves
explicaciones acerca de los comandos más frecuentes.
-->A=1
A = -->1\2
1. ans =
2.
-->a=2
a = -->3+7*5
2. ans =
38.
-->A
A = Operación asignada a una variable
1. -->a=3+7*5
a =
-->a 38.
a =
2. En la siguiente línea el ; no muestra el
resultado/asignación de la operación/número
División por la derecha y división por la -->t=4.5;
izquierda: -->t=4.5
-->1/2 t =
ans = 4.5
0.5
5
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Los números pueden escribirse usando la 0.6857310 (continuación de la línea anterior)
notación usual o notación científica:
3.5 -->w(1,i)
-4.1234 ans =
3.14e-10 0.2113249 0.0002211 0.6653811
3.14E-10
0.0023e20
-12.345e+12 -->w($,$)
ans =
Escribiendo valores de 1 a n datos y asignados a 0.6857310
una variable
-->i=1:3 -->w($,$-1)
i = ans =
1. 2. 3. 0.6283918
column 4
0.8497452
Who: Scilab muestra las variables que está usando en ese momento, además de las variables que usa
por omisión/default
-->who
t a ans home
scinoteslib modules_managerlib atomslib atomsguilib
matiolib parameterslib simulated_annealinglib genetic_algorithmslib
umfpacklibscicos_autolibscicos_utilslibxcoslib
spreadsheetlib demo_toolslib assertlib development_toolslib
external_objectslib soundlib tclscilib m2scilib
compatibility_functilib arnoldilib statisticslib windows_toolslib
WSCI timelib stringlib special_functionslib
sparselib signal_processinglib %z %s
6
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
polynomialslib overloadinglib optimsimplexlib optimbaselib
neldermeadlib optimizationlib interpolationlib linear_algebralib
jvmlib output_streamlib iolib integerlib
dynamic_linklib guilib uitreelib data_structureslib
cacsdlib graphic_exportlib graphicslib datatipslib
fileiolib functionslib elementary_functionslib differential_equationlib
helptoolslib corelib PWD %tk
%F %T %nan %inf
SCI SCIHOME TMPDIR %gui
%fftw $ %t %f
%eps %io %i %e
%pi
7
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
1029.1429
-->y=3;
-->x=y; Para escribir la siguiente ecuación
, con x inicial=2
-->x=(x+3/x)/2
x = -->x=2;
2. -->y1=(sin(x))^2
y1 =
-->↑x=(x+3/x)/2 0.8268218
x =
1.75 -->y2=(cos(x))^2
y2 =
-->↑ x=(x+3/x)/2 0.1731782
x =
1.7321429 -->y1+y2
ans =
-->↑ x=(x+3/x)/2 1.
x =
1.7320508 -->(sin(x))^2+(cos(x))^2
ans =
-->↑ x=(x+3/x)/2 1.
x =
1.7320508 Algunas variables matemáticas predefinidas: %i
es el número imaginario, %pi es la constante
En una misma línea de Scilab puede haber matemática π.
varias órdenes o instrucciones. Éstas deben -->sin(%pi)+cos(%pi)
estar separadaspor coma o por punto y coma. ans =
Por ejemplo, - 1.
8
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Se puede modificar el formato utilizado por r =
Scilab para mostrar los resultados, mediante - 1.
format. Si se da la orden
format(16) Otras operaciones
a partir de ese momento, Scilab utilizará 16 -->exp(3)
\columnas" (16 posiciones) para mostrar cada ans =
número. Estas 16 columnas incluyen el espacio 20.08553692318766792368
para el signo la parte entera y elpunto. Por
defecto, Scilab usa 10 posiciones.
-->t=log(ans)
La notación científica con 14 posiciones t =
format(‘e’,14) o format(‘e’) 3.
Ayuda
Para obtener la ayuda de Scilab, puede presionar la tecla F1 y aparecerá una ventana como lo muestra
la siguiente imagen
9
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Pero si desea una ayuda acerca de alguna función o comando, al teclear lo siguiente mostrará una
ventana con información correspondiente.
-->helpfloor
10
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
se desea buscar sobre un tema, se debe utilizar apropos. Por ejemplo:apropospolynomial
Complejos
Scilab maneja de manera sencilla los números complejos, i=-1. Para las operaciones con números
complejos (suma, resta, multiplicación, ...) se utilizan exactamente los mismos símbolos + - * / ** ^.
Las funciones real, imag y conj permiten obtener la parte real, la parte imaginaria y el conjugado de un
complejo. Si se utiliza la función abs con un complejo, se obtiene la magnitud o módulo de él.
11
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
isreal regresa verdadero si la variable no tiene una entrada de complejo
Las funciones de Scilab usadas para funciones reales elementales que tienen generalizaciones
en complejos, se pueden usar también para los complejos, por ejemplo, sin, cos, log, ...
-->real(y) Ejercicios
ans =
1. ¿Cuál es el resultado de las siguientes
operaciones?, piense antes de hacerlo en
Scilab.
-->imag(y) 2*3+4
ans = 2+3*4
- 1. 2/3+4
2+3/4
12
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
log(exp (2))
Usando paréntesis, ¿cuál es el resultado de las exp(log (2))
siguientes operaciones?, piense antes de 10^2
hacerlo en Scilab. log10 (10^2)
2 * (3 + 4) 10^ log10 (2)
(2 + 3) * 4 sign (2)
(2 + 3) / 4 sign ( -2)
3 / (2 + 4) sign (0)
Matrices
Los corchetes [ inicio y fin ] de la matriz, las comas (o espacios en blanco, esto es opcional) separan los
valores en las columnas, el ; separa los valores de diferentes renglones, tres puntos consecutivos …
indican/denotan valores intermedios.
Se pueden usar espacios en blanco para separar valores de renglones y columnas, al escribir el
siguiente renglón se da un enter,.Esta sintaxis es útil cuando se escriben los valores en un archivo,
permiten verificar la lectura/escritura de la matriz.
-->a=[1 2 3 -->A=ones(2,3)
-->4 5 6] A =
a = 1. 1. 1.
1. 2. 3. 1. 1. 1.
4. 5. 6.
Matriz vacía 0x0, borra el contenido de la
Algunas funciones de matrices: matriz y libera la memoria.
13
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->b=[] -->B=2*ones(2,3)
b = B =
[] 2. 2. 2.
El comando size regresa el total de renglones, 2. 2. 2.
nr y el total de columnas, nc, nr, nc>1
-->[nr,nc]=size(A) -->A+B
nc = ans =
3. 3. 3. 3.
nr = 3. 3. 3.
2.
Un vector: i:j, v=2:4, v=i:s:j donde s es el
La siguiente sintaxis nr=size(matriz,sel), sel=1 o incremento
“r” o ‘r’ da el número de renglones, sel=2 o “c”
-->v=2:4
da el número de columnas, sel=”*” da el total
v =
del número de elementos de la matriz.
2. 3. 4.
-->A=ones(2,3)
A =
-->v=3:2:10
1. 1. 1.
v =
1. 1. 1.
3. 5. 7. 9.
-->size(A,'*')
ans =
-->v=3:2:10
6.
v =
3. 5. 7. 9.
Accesando a los elementos de la matriz.
A toda la matriz, A, a los elementosde A, su
-->v=10:-2:3
sintaxis esA(i,j), para un rango determinado se
v =
usa el operador :
10. 8. 6. 4.
-->A=ones(2,3)
A =
-->v=3:-2:10
1. 1. 1.
v =
1. 1. 1.
[]
La siguiente sintaxis sirve para indicar elemento inicial i, k, su incremento s, t, elemento final j, l, para
renglón y columna, A(i:s:j,k:t:l).
Se puede generar matrices de nxn con el fin de mostrar otro manejo de datos y funciones del Scilab.
Tal es el procedimiento testmatrix que crea algunas matrices particulares conociendo n, mediante la
matriz de Franck y otro es mediante la matriz de Hilbert, ambos usan valores propios o eigenvalores,
tema de algebra lineal. Para fines práctico lo usaremos en el siguiente ejemplo:
14
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->A=testmatrix("hilb",5)
A =
25. - 300. 1050. - 1400. 630.
- 300. 4800. - 18900. 26880. - 12600.
1050. - 18900. 79380. - 117600. 56700.
- 1400. 26880. - 117600. 179200. - 88200.
630. - 12600. 56700. - 88200. 44100.
A (vi, vj),donde vi, vj son vectores de subíndices, se puede utilizar para designar los elementos de
Acuyos subíndices son los elementos de vi y vj. Eso sintaxis se ilustra en lasiguiente ejemplo.
A toda la matriz
A(:,:) toda la matriz
A(i:j,k) todos los elementos de los renglones desde i a j, de la columna k
A(i,j:k) los elementos del renglón i, en las columnas desde j hasta k
A(i,:) el renglón i
A(:,j) la columna j
-->vi=1:2 -->A(vi,vj)
vi = ans =
1. 2.
26880. - 12600.
-->vj=3:4 - 117600. 56700.
vj =
3. 4. Se puede usar la función random para crear
matrices
2. 3. -->A([1 2],:)
ans =
15
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
0.4573049 0.4126882 0.7436821
0.1952018 0.7140648 0.8766705 -->A([1 2],:)=A([2 1],:)
A =
-->A([2 1],:)
ans = 0.1952018 0.7140648 0.8766705
0.4573049 0.4126882 0.7436821
0.1952018 0.7140648 0.8766705 0.3230850 0.6329206 0.6898754
0.4573049 0.4126882 0.7436821
Operaciones básicas con matrices, a*b, a+b, a-b, a/b, x*a, a’, inv(a), det(a)
-->a=[1 2 1;3 4 2;5 3 1] -->a+b
a = ans =
1. 2. 1. 2. 5. 6.
3. 4. 2. 5. 8. 5.
5. 3. 1. 6. 5. 2.
-->d=diag(a) -->a*b
d = ans =
1. 6. 13. 12.
4. 13. 29. 29.
1. 12. 29. 35.
-->b=a' -->a-b
b = ans =
1. 3. 5. 0. - 1. - 4.
2. 4. 3. 1. 0. - 1.
1. 2. 1. 4. 1. 0.
-->inv_a=inv(a) -->a/b
inv_a = ans =
- 2. 1. - 5.551D-16 0. 0. 1.
7. - 4. 1. - 2. 7. - 9.
- 11. 7. - 2. - 7. 24. - 36.
-->round(inv_a) -->a2=2*a
ans = a2 =
- 2. 1. 0. 2. 4. 2.
7. - 4. 1. 6. 8. 4.
- 11. 7. - 2. 10. 6. 2.
-->aa=round(inv_a); -->rango=rank(a)
16
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
rango = -->[l,u]=lu(a)
3. u =
5. 3. 1.
-->determinante=det(a) 0. 2.2 1.4
determinante = 0. 0. - 0.0909091
1. l =
0.2 0.6363636 1.
-->tamano=size(a) 0.6 1. 0.
tamano = 1. 0. 0.
3. 3.
-->reducida=rref(a)
-->//matriz diagonal superior LU reducida =
1. 0. 0.
-->mlu=triu(a) 0. 1. 0.
mlu = 0. 0. 1.
1. 2. 1.
0. 4. 2.
0. 0. 1. -->maleatoria=rand(3,4)*10
maleatoria =
2.1132487 3.3032709 8.4974524
-->mli=tril(a) 0.6837404
mli = 7.5604385 6.653811 6.8573102
1. 0. 0. 5.6084861
3. 4. 0. 0.0022113 6.2839179 8.7821648
5. 3. 1. 6.6235694
El Scilab puede representar un polinomio a partir de la matriz de coeficientes, nxn, lo hace mediante el
procedimiento de calcular los valores propios de la matriz. Después podemos calcular las raíces de
dicho polinomio, como también puede escribir un polinomio en particular.
17
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Script/Macros/procedimientos.
Escribiendo en el editor de Scilab, scinote
Macros, conjunto de instrucciones secuenciales escrito en un editor de texto como el SciNotes, que se
guarda con la extensión sce, que se ejecuta dentro del paquete.
matriz a -->a=[1,2,3;4,5,6;7,8,-9]
a =
1. 2. 1. 1. 2. 3.
4. 2. 5. 4. 5. 6.
3. 1. 2. 7. 8. - 9.
transpuesta de a -->pp=poly(a,"x")
1. 4. 3. pp =
2. 2. 1. 2 3
1. 5. 2. - 54 - 126x + 3x + x
-->roots(pp)
2*a= ans =
- 0.4248820
2. 4. 2. 10.059332
8. 4. 10. - 12.63445
6. 2. 4.
-->P=poly([2 4 7],"x","roots")
suma de b+a2 P =
2 3
3. 8. 5. - 56 + 50x - 13x + x
10. 6. 11.
7. 7. 6. -->roots(P)
ans =
2.
4.
7.
18
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Manejo de datos
-->Datos=read(“data.cvs”,-1,2) st_deviation(y2)
Ejemplo en un script/macro/procedimiento mean(y2)
//script/macro para analizar datos mean(y1)
//ejercicio usar disp() para desplegar variance(y1)
información variance(y2)
clc median(y1)
datos=read("datavi17ene14.csv",-1,3) median(y2)
x1=datos(:,1); max(y1);min(y1)
y1=datos(:,2); max(y2);min(y2)
y2=datos(:,3);
st_deviation(y1)
19
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
datos1=read("datavi17ene14.cs
v",-1,3) -->gsort(datos1) -->lex_sort(datos1,2)
datos1 = ans = ans =
1. 29. 25. 48. 22. 13. 16. 3. 33.
2. 46. 34. 48. 21. 12. 17. 8. 16.
3. 16. 24. 46. 20. 12. 9. 11. 44.
4. 13. 32. 46. 19. 12. 13. 12. 48.
5. 42. 16. 45. 18. 11. 4. 13. 32.
6. 43. 45. 44. 18. 11. 15. 15. 1.
7. 42. 22. 43. 18. 10. 14. 15. 35.
8. 46. 17. 42. 17. 9. 12. 15. 14.
9. 11. 44. 42. 17. 9. 3. 16. 24.
10. 18. 9. 38. 16. 8. 11. 18. 37.
11. 18. 37. 37. 16. 8. 10. 18. 9.
12. 15. 14. 36. 16. 7. 1. 29. 25.
13. 12. 48. 35. 16. 6. 19. 32. 36.
14. 15. 35. 34. 15. 5. 18. 38. 12.
15. 15. 1. 33. 15. 4. 7. 42. 22.
16. 3. 33. 32. 15. 3. 5. 42. 16.
17. 8. 16. 32. 15. 3. 6. 43. 45.
18. 38. 12. 29. 14. 2. 8. 46. 17.
19. 32. 36. 25. 14. 1. 2. 46. 34.
20. 48. 21. 24. 13. 1. 20. 48. 21.
Comando modulo(var1,var2)
Módulo calcula i = n (módulo m) es decir resto de n dividido por m (n y m son enteros).
i = n - m . * int (n ./ m). Aquí la respuesta puede ser negativa si n o m son negativos.
pmodulo calcula i = n - m . * floor (n ./ m) , la respuesta es positiva o cero. modulo(x,0) devuelve un mensaje de
error: "División por cero... ".
Con ieee(2), módulo(x,0) devuelve %nan. pmodulo(x,0) devuelve un mensaje de error: "División por cero... ".
Con ieee(2), pmodulo(x,0) devuelve %nan.
Para ejecutar alguna macro o procedimiento en la consola puede usar el comando exec()
-->exec('archivo.sce',0); o -->exec('archivo.sce',-1);
-->exec('\directorio2\archivo.sce',0);
Como se vio anteriormente las instrucciones de comandos son escritas en un editor de texto como el
SciNotes, para realizar alguna tarea, o los pasos para la solución de un problema.
Pasos de programación
20
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Tarea o enunciado del problema
Modelo matemático
Requerimiento de datos
Algoritmo: se puede expresar mediante pseudocódigos o diagramas de flujo
Codificación (cualquier lenguaje)
Resultados y análisis
Actividades derivadas:
Para hacer menús: select_case_else_end
Circuito de cálculo: for_vi:vf_end
Circuito de convergencia: while_condicion_end
Actividades básicas
Lectura de datos: desde la consola, desde un script o desde un archivo, asignando valores a la variable
de entrada, a←valor1 o A←leer archivo(valor1, valor2,…).
a=2.34 , datos1=read(“data.csv”,-1,2); , x=input(‘mensaje’) o x=input(“mensaje”,’s’);
Escritura o salida de datos: el resultado puede ser asignado a una variable, desplegar el mensaje
directamente en la consola o escribir datos en un archivo
En la consola: -->x ,
En una macro para desplegar algún mensaje o resultado: disp.(“mensaje”); disp(“texto=”+string(x));
disp(x,”texto”);
El si condicional, if_then_else_end
if condicion then
actividad1;
actividad2;
end
21
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
if condicion then
actividad1;
else
actividad2;
end
ejecutado en la consola:
-->exec('parnon2.sce',-1);
valor de a= 3
el número 3 es non
ver/editar archivo parnon2.sce
Está la opición de que las variables se escriban en la consola/area de trabajo, luego se corre el scipt o
archivo ejecutable
-->a=1
22
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
end
el número 4 es par
-->exec('F:\c\cursoscilab\ejemplos\parnon.sce', -1)
el número 4 es par
-->a=9;
-->exec('parnon.sce',-1);
el número 9 es non
Acrividades Derivadas:
Circuito de conteo, for_vi:inc:vf_end
Donde vi es valor inicial, inc es el incremento y vf es el valor final.
Pseudocódigo:
Para un valor_inicial:valor_del_incremento:valor_final
Actividad1; actividad2;
Fin
Su sintaxis:
for var = lim1:incr:lim2
actividad1
actividad2
end
Ejemplo:
Desplegar en pantalla valores consecutivos desde 1 hasta el 5, (guardar en un archivo
circuito_de_conteo.sce *)
//despliega valores desde 1 hasta el 5 de uno en uno
for i=1:5
*
disp(i)
end
-->exec('circuito_de_conteo.sce',-1);
1.
2.
3.
4.
5.
23
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Desplegar en pantalla valores desde 1 hasta el 3 con incremento de 0.5
//usando incrementos definidos
disp("despliega valores del 1 a 3 con incremento de 0.5")
for i=1:0.5:3
disp(i)
end
-->exec('circuito_de_conteo2.sce',-1);
despliega valores del 1 a 3 con incremento de 0.5
1.
1.5
2.
2.5
3.
Otra manera de ejecutar el ejemplo anterior en la consola. Se usan comas o punto y coma para separar
instrucciones.
-->for i=1:0.5:3,disp(i),end
1.
1.5
2.
2.5
3.
Sintaxis:
while condición
actividad1;
actividad2;
end
Por ejemplo
e = 1;
while e+1 > 1
e = e/2;
end
Ejemplo 2
24
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
//usando el while_condicion_end
i=0;
while i<10
i=i+1; //contador de linea, incremento
disp("contador i= "+string(i));
end
disp("termina el circuito hasta que i>10");
El comando input, permite mandar un mensaje de entrada de datos asignando a una variable que
puede ser real o de tipo string (texto),
25
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
//asignando un valor desde la consola A=opcion;
if A~="" then
select A
case 1 then
disp("usted selecciono la opcion 1")
case 2 then
disp("usted selecciono la opcion 2")
case 3 then
disp("usted selecciono la opcion 3")
else
disp("valor no válido, sólo tiene 3 opciones")
end
end
-->A=1;
-->exec('menu2.sce',0)
usted selecciono la opcion 1
-->A=0;
-->exec('menu2.sce',0);
valor no válido, sólo tiene 3 opciones
Resultado de la ejecución
-->exec('entrada_datos1.sce', -1)
valor de x1=10
almacenando texto en x2
26
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
¿Cómo estás? bien
Tarea 1
Aplicar el comando input en los ejemplos anteriores, si lo requieren.
Tarea 2
Elaborar una tabla de frecuencias con intervalo de 10, a partir de los datos aleatorios trabajados en
clase, del 0 a 50.
Se les recuerda que pueden generar un procedimiento (script) inicial que a su vez mande a llamar uno
o varios procedimientos (scripts), esta forma ayuda a resolver problemas muy grandes.
//tabla de frecuencias
//1)leer datos, la siguiente instrucion corre lectura5.sce
exec('lectura5.sce',0);
//usamos la variable separada pesdos para la tabla de frecuencia
//al corre lectura5.sce, conocemos el total de datos por columna, n
//inicializar contadores para cada intervalo de 10
i1=0; i2=0; i3=0; i4=0; i5=0;
for i=1:n
if pesdos(i)>=0 then
if pesdos(i)<=10 then
i1=i1+1; //disp("hola10, "+string(i1));
end
end
if pesdos(i)>10 then
if pesdos(i)<=20 then
27
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
i2=i2+1;
end
end
if pesdos(i)>20 then
if pesdos(i)<=30 then
i3=i3+1;
end
end
if pesdos(i)>30 then
if pesdos(i)<=40 then
i4=i4+1;
end
end
if pesdos(i)>40 then
if pesdos(i)<=50 then
i5=i5+1;
end
end
end
disp(" 0 a 10, "+string(i1));
disp("10 a 20, "+string(i2));
disp("20 a 30, "+string(i3));
disp("30 a 40, "+string(i4));
disp("40 a 50, "+string(i5));
disp('para guardar datos debe generar datos para la tabla de frecuencias');
Resultado de la ejecución:
-->exec('F:\d\tabla_frecuencias.sce', -1)
datos leidos y guardados en variables pesuno, pesdos,...
estadística básica aplicada a las variables
0 a 10, 3
10 a 20, 4
20 a 30, 3
30 a 40, 4
40 a 50, 6
28
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
write(u,i5);
file('close',u);
disp("datos guardado en hola.xls con formato de texto")
Resultado de la ejecución:
-->exec('F:\d\guardar_resultados.sce', -1)
datos guardado en hola.xls con formato de texto
Creación de funciones
Las funciones se escriben en el editor de SciNotes, puede escribir una función en un archivo o varias
funciones en un archivo, al guardar el paquete le asigna la extensión sci, teniendo el archivo.sci,
generalmente se guarda una función. Las funciones se ejecutan en la consola o pueden ser llamadas en
un procedimiento (archivo.sce)
Es importante respetar la sintaxis para disminuir o evitar errores al usarla. No deben tener nombres
como F1, F2,… F12, ya que están asignadas para algunas funciones propias del Windows o de otro
paquete, en el caso de F1 es la tecla función que generalmente se usa para pedir ayuda en la mayoría
de los paquetes o programas. No debe coincidir su nombre con los nombres de las funciones propias
del paquete, palabras reservadas, consultar referencias. No dejen espacio en el nombre de la función.
Mandando error de nombre de la función, desconocida, entonces podemos usarla como función
propia o creada por el usuario.
-->deff('y=f(x)','y=x+1.5');
29
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->f(2)
ans =
3.5
-->x=0:10;
-->plot(x,f(x));
Escribiendo una función en un archivo.sce, puede haber problemas si se corre los ejemplos de manera
continua, por lo que se sugiere limpliar la memoria con clear o funcprot(0) antes de ejecutar los
ejemplos. Puede cambiar los nombres de las funciones para evitar problemas de duplicidad, y
continuar su trabajo.
El comando fruncprot(0) permite redifinir variables de la función.
function [x,y]=sumrest(a, b)
x=a+b
y=a-b
endfunction
30
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->exec('F:\d\funcion3.sce', -1)
Ingrese la funcion f(x) = 2-x+x^3/2
ingrese el valor de x= 0
f(0)=2
Resultado de la ejecución:
-->funcprot(0);
-->exec('funcion0.sce',0);
-->ftxt('hola')
ans =
escribio= hola
function [y]=f_1(x)
y=1+x/2;
endfunction
function [y]=f_1(x)
y=1+x/2;
endfunction
function [result1,result2]=fdos(a,b)
31
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
suma=a+b;
resta=a-b;
result1='la suma es = '+string(suma)
result2='la resta es = '+string(resta)
endfunction
Nota si no se especifica que variable de salida quiero, manda el resultado a la primera variable de
salida de izquierda a derecha, result1, cuya operación es la suma.
Si se especifican las dos variables de salida, manda el resultado en orden de derecha a izquierda como
está escrito en el contenido de la funcion1.sce.
-->[r1,r2]=fdos(3,5)
r2 =
la resta es = -2
r1 =
la suma es = 8
Parte matemática II
Interpolando datos
Por el método de Lagrange de 2do y 3er orden, nos permite calcular en valor entre datos numéricos, el
cual es útil en diferentes áreas: dado un conjunto de 2 o 3 pares de datos, calcular un valor específico
no tabulado. Polinomio de orden n se expresa como fn(x) o Pn(x). Para un polinomio de segundo grado
se necesitan 3 pares de datos y para un f3(x) se requiere 4 pares de datos.
Los datos para un orden 2, se pueden escribir como dos vectores, el par x,y y una variable a interpolar
que le llamaremos xint. A continuación se verá el contenido escrito en el script interpolar.sce
//interpolación por el método de Lagrange
//usando funcion
//Recuerde teclear las siguientes instrucciones
// funcprot(0); exec('interpolar.sce',0) ;
//creando la función para 3 pares de datos x,y xin
32
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
function [yinter2]=finter2(x,y,xin)
L1=y(1)*((xin-x(2))*(xin-x(3)))/((x(1)-x(2))*(x(1)-x(3)))
L2=y(2)*((xin-x(1))*(xin-x(3)))/((x(2)-x(1))*(x(2)-x(3)))
L3=y(3)*((xin-x(1))*(xin-x(2)))/((x(3)-x(1))*(x(3)-x(2)))
yinter2=L1+L2+L3;
endfunction
//creando función para 4 pares de datos x,y xin
function [yinter3]= finter3(x,y,xin)
L1=y(1)*((xin-x(2))*(xin-x(3))*(xin-x(4)))/((x(1)-x(2))*(x(1)-x(3))*(x(1)-x(4)))
L2=y(2)*((xin-x(1))*(xin-x(3))*(xin-x(4)))/((x(2)-x(1))*(x(2)-x(3))*(x(2)-x(4)))
L3=y(3)*((xin-x(1))*(xin-x(2))*(xin-x(4)))/((x(3)-x(1))*(x(3)-x(2))*(x(3)-x(4)))
L4=y(4)*((xin-x(1))*(xin-x(2))*(xin-x(3)))/((x(4)-x(1))*(x(4)-x(2))*(x(4)-x(3)))
yinter3=L1+L2+L3+L4;
endfunction
A continuación se dan los valores necesarios del par x,y y el valor a interpolar de x, para el siguiente
valor a interpolar de 6.
x=[2 4 7 9 10 13 15], y=[0.1 0.3 0.5 0.8 1 1.2 1.4]
Ejemplo, escritura y ejecución en la consola de Scilab, si vamos a usar la función finter2(x,y,xin) se
necesitarán 3 pares de datos por lo que separamos en otra variable de nombre similar:
-->x=[2 4 7 9 10 13 15]
x =
2. 4. 7. 9. 10. 13. 15.
-->y=[0.1 0.3 0.5 0.8 1 1.2 1.4]
y =
column 1 to 6
0.1 0.3 0.5 0.8 1. 1.2
column 7
1.4
Separando variables y reescribiéndolas en una nueva variables xx, yy xin=6 para la función
finte2(x,y,xin):
-->xx=[4,7,9];
-->yy=[0.3,0.5,0.8]
yy =
0.3 0.5 0.8
-->yy2=finter2(xx,yy,6)
33
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
yy2 =
0.4
Separando variables y reescribiéndolas en una nueva variables x3, y3 xin=6 para la función
finte3(x,y,xin), ahora escribimos en la consola lo siguiente:
-->x3=[4,7,9,10];
-->y3=[0.3,0.5,0.8,1];
-->yy3=finter3(x3,y3,6)
yy3 =
0.4
Nota, la solución es un número complejo para dicha ecuación, ya que su discriminante d, es un número
negativo. Da el resultado imaginario si se le saca raíz cuadrada.
Se puede graficar la función para verificar visualmente, usando -10≤x≤10 o x=linespace(-10,10),
automáticamente da 100 unidades en el intervalo, o usar x=linespace(-10,10,21), esto es 10 elementos
considerando el 0.
-->x=-10:10;
34
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->y=x^2-2*x+3;
-->plot(x,y)
Ejemplo
1 4 x 16 x 2 3 x 3 3 x 4 0
-->deff('yy=ff(x)','yy=1+4*x-16*x^2+3*x^3+3*x^4')
-->fsolve(0,ff)
ans =
- 0.1534801
Integración
4
1 x 4 x 2 x 5 dx
Ejemplo de integración definida " 3
!
Sintaxis: intg(lim_inf,lim_sup,funcion) 2
Primero se define la función, tomar en cuenta los limites inferior y superior para escribirlo en la función
intg.
-->deff('y=fi(x)','y=1-x-4*x^3+2*x^5');
-->intg(-2,4,fi)
ans =
1104.
35
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->plot2d(t,y);
Figure saved.
-->
-->t=0:2:20
t =
column 1 to 6 t y
0. 2. 4. 6. 8. 10. 0 0.1
column 7 to 11
2 0.2974999
12. 14. 16. 18. 20.
4 0.7343112
-->y=ode(y0,t0,t,fty) 6 1.316525
y = 8 1.7295574
column 1 to 3 10 1.910044
0.1 0.2974999 0.7343112 12 1.9720265
column 4 to 6 14 1.9914914
1.316525 1.7295574 1.910044 16 1.9974296
column 7 to 8 18 1.9992251
1.9720265 1.9914914 20 1.9997665
column 9 to 10
1.9974296 1.9992251
column 11
1.9997665
Tarea: colocar los resultados en una tabla en Word para una mejor visualización.
36
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
ANEXO A
Secuencia de pasos para crear un acceso directo del archivo que ejecuta el Scilab, en la carpeta
principal.
La siguiente imagen muestra en cuadros rojos de izquierda a derecha los pasos para crear el acceso
directo; seleccionando primero la carpeta copiada en la USB o en cualquier PC, cuando no se instala el
programa.
Figura 1A. Imagen de los primeros pasos para crear el acceso directo
Se selecciona primero la carpeta del Scilab copiado, luego posicionarse sin marcar nada con el mouse al
lado derecho donde está el contenido de la carpeta y hacer clic con el botón izquierdo del mouse
activar la ventana o lugar, hacer clic con el botón derechodel mouse aparece un menú, recorriendo el
puntero hacia “Nuevo”, luego seleccionar la opción , ver figura 1A.
37
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
Figura 2A. Imagen de la continuación de la creación del acceso directo
Figura 5A. Imagen de la creación del acceso directo finalizada, el cual se ejecutará con un doble clic con
el botón izquierdo del mouse.
38
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
ANEXOB
Secuencia de imágenes que indican los pasos para cambiar de subdirectorio o carpeta de trabajo.
39
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
40
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
REFERENCIASBIBLIOGRÁFICAS
REFERENCIAS DE ARCHIVOS DIGITALES, Accesados enero 2014.
UNA INTRODUCCIÓN RÁPIDA A SCILAB. Rosa Echevarría Líbano – Dpto. Ecuaciones Diferenciales y
Análisis Numérico – Universidad de Sevilla. ApuntesScilab.pdf
http://personal.us.es/echevarria/docencia.html
----------------------------------------------------------
Ernesto Calderón Castillo
metodosnumericosfq@yahoo.com.mx
Curso Scilab
41
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx