Académique Documents
Professionnel Documents
Culture Documents
Introduccin
Desarrollado por INRIA (Institut National de Recherche en Informatique et
Automatique) y la ENPC (cole Nationale des Pontset Chausses) desde 1990.
Actualmente es un gran consorcio integrado por compaas y organizaciones
acadmicas en 2003, luego integra el Digiteoresearchnetwork en 2008, Empresa
ScilabEnterprises se fund en junio de 2010con el apoyo de INRIA, para garantizar el
futuro de Scilab. Desde entonces ha tenido plenamente a cargo de la ediciny desarrollo
de Scilab desde julio de2012....
Scilab
* Funciones para solucin de tareas
Intrprete
* Resultados de rutinas o funciones
Fortran, C, C++
programadas
Java
* librera o herramientas: simulacin,
automatizacin y control,
Este
paquete
se
puede
obtener
de
la
siguiente
direccin
http://www.scilab.org,ver figura1,buscar la opcin o icono de descargar. Se le
sugiere al usuario registrarse, no tiene ningn costo, sirve para realizar mejoras
con la experiencia de uso, ya sea para pedir ayuda en lnea o por correo
electrnico por alguna funcin, algn problema que se le pueda presentar, para
recibir alguna clave para el uso de libreras o herramienta especializada.
1
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
Figura2. Imagen del sitio web donde bajar el Scilab segn la plataforma de su PC
Dispone de una ayuda con el smbolo de interrogacin ? o
, tambin 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 paquetera porttil. 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 rpidamente, este paso se realiza solamente una vez, as lo
indican las imgenes 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 guardarn algunos archivos de
trabajo y realizar el cambio de directorio de trabajo dentro del Scilab as lo
muestran en el Anexo B.
2
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
Operadores relacionales:
Mayor prioridad ( ) ^
o **
* /
Menor prioridad + -
<
o
no
>
>=
<=
~= , <>
=
==
Operadores lgicos:
&
|
~
Boleanos:
Falso %f o %F
verdadero %t o
%T
Tipos de variables
Reales: 8.01, -5.2, 0.056, 1.4e+5, 0.23E-2, -0.567d-21, 8.003D-12
Enteros: 8, 1
Complejos: 1+2*%i
Caracteres (entre apstrofes o comillas): esto es una cadena de caracteres
string
En Scilab, por defecto, los nmeros son codificados como nmeros reales en coma
flotante en doble precisin. -0.567d-21, 8.003D-12
Algunas constantes numricas estn predefinidas. Sus nombres comienzan por el
smbolo %. En particular %pi es el nmero , %e es el nmero e, %i es la unidad
imaginaria, %eps es la precisin de la mquina(mayor nmero real doble precisin
para el que 1+%eps/2 es indistinguible de 1), %inf es el infinitomquina(overflow:
cualquier nmero que supere al mayor nmero real representable en doble
precisin),%nan es el smbolo NaN (Not a Number) para una operacin invlida
(por ejemplo, 0/0 es %nan).
El lenguaje de Scilab es interpretado, esto es, las instrucciones se traducen a
lenguaje mquina una a una y se ejecutan antes de pasar a la siguiente. Es posible
escribir varias instrucciones en la misma lnea, separndolas por una coma o por
punto y coma.
3
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
sin(x):seno (radianes)
cos(x):coseno (radianes)
tan(z):tangente
(radianes)
cotg(x):cotangente
(radianes)
asin(x) :arcoseno
acos(x):arcocoseno
atan(x):arcotangente
cosh(x):cos. hiperblico
sinh(x):seno hiperblico
tanh(x):tangente
hiperblica
acosh(x):arcocosenohipe
rb.
asinh(x):arcosenohiperb.
atanh(x):arcotangente
Las funciones trigonomtricas da
valores en radianes.
ceil(x)
2
2
2
2
-3
-3
-3
floor(x)
2
1
1
1
-4
-4
-4
int(x)
2
1
1
1
-3
-3
-3
4
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
round(x)
2
2
2
1
-3
-4
-4
/intro/enter.
El smbolo del prompt es --> aqu se escriben todas las instrucciones dadas por el
usuario para hacer los clculos necesarios.
-->a=2
a =
2.
-->A
A =
1.
-->a
a =
2.
5
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
-->a=3+7*5
a =
38.
w =
column 1 to 3
0.2113249 0.0002211
0.7560439 0.3303271
-->t=4.5
-->t=4.5;
0.6653811
0.6283918
column 4
0.8497452
0.6857310 (continuacin de la lnea
anterior)
t =
4.5
Los
nmeros
pueden
escribirse
usando la notacin usual o notacin
cientfica:
3.5
-4.1234
3.14e-10
3.14E-10
0.0023e20
-12.345e+12
Escribiendo valores de 1 a n datos y
asignados a una variable
-->i=1:3
i =
1. 2. 3.
Nmeros aleatorios
rengln,columna
-->w=rand(2,4)
-->w(1,i)
ans =
0.2113249
0.6653811
0.0002211
-->w($,$)
ans =
0.6857310
-->w($,$-1)
ans =
0.6283918
El smbolo de $ indica el ltimo valor
de un rengln o columna o de ambos,
como el caso anterior.
-->sqrt([4 3])
ans =
2. 1.7320508
Who: Scilab muestra las variables que est usando en ese momento, adems de
las variables que usa por omisin/default
-->who
a
ans
home
modules_managerlib
atomslib
atomsguilib
parameterslib simulated_annealinglib genetic_algorithmslib
6
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
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
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
usando
8107 elementos de 10000000.
y
81 variables de
9231.
Sus variables globales son:
%modalWarning
usando
19 elementos de
y
3 variables de
767.
%toolboxes
999.
%toolboxes_dir
ans =
42.5
-->c=a+b;
-->c
c =
42.5
-->a=%T
a =
T
-->b=(0==1)
b =
F
7
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
t1 =
2.
dt =
1.
Operaciones repetitivas
Se desea calcular
, se da un
-->x=y;
-->y=3;
-->x=(x+3/x)/2
x =
2.
->2*3+4^5-6/7
ans =
1029.1429
-->x=(x+3/x)/2
x =
1.75
-->x=2;
-->y1=(sin(x))^2
y1 =
0.8268218
--> x=(x+3/x)/2
x =
1.7321429
-->y2=(cos(x))^2
y2 =
0.1731782
--> x=(x+3/x)/2
x =
1.7320508
-->y1+y2
ans =
1.
--> x=(x+3/x)/2
x =
1.7320508
-->(sin(x))^2+(cos(x))^2
ans =
1.
Algunas
variables
matemticas
predefinidas: %i es el nmero
imaginario, %pi es la constante
matemtica .
-->sin(%pi)+cos(%pi)
ans =
- 1.
8
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
Formato numrico
Se puede modificar el formato
utilizado por Scilab para mostrar los
resultados, mediante
format. Si se da la orden
format(16)
a partir de ese momento, Scilab
utilizar 16 \columnas" (16 posiciones)
para mostrar cada nmero. Estas 16
columnas incluyen el espacio para el
signo la parte entera y elpunto. Por
defecto, Scilab usa 10 posiciones.
La
notacin
cientfica
con
14
posiciones format(e,14) o format(e)
valores e, ,
Otras operaciones
-->exp(3)
ans =
20.08553692318766792368
-->t=log(ans)
t =
3.
String o cuerdas
-->x="hola, "
x =
hola
-->y="cmo ests?"
y =
cmo ests?
-->x+y
ans =
hola,cmo ests?
Ayuda
Para obtener la ayuda de Scilab, puede presionar la tecla F1 y aparecer una
ventana como lo muestra la siguiente imagen
9
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
10
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
un
tema,
se
debe
utilizar
apropos.
Por
Complejos
Scilab maneja de manera sencilla los nmeros complejos, i=-1. Para las
operaciones con nmeros complejos (suma, resta, multiplicacin, ...) se utilizan
exactamente los mismos smbolos + - * / ** ^.
Las funciones real, imag y conj permiten obtener la parte real, la parte imaginaria
y el conjugado de un complejo. Si se utiliza la funcin abs con un complejo, se
obtiene la magnitud o mdulo de l.
11
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
-->real(%i)
ans =
0.
-->imag(%i)
ans =
1.
-->conj(%i)
ans =
-i
-->x=1+%i
x =
1. + i
-->isreal(x)
ans =
F
-->x*y
ans =
2.
-->%i
%i =
i
-->c=sqrt(-1)
c =
i
-->r=-5;
-->b = sqrt(-4)
b =
2.i
-->real(y)
ans =
1.
-->imag(y)
-->a = 3 + 4*r*%i
a =
3. - 20.i
-->x'
ans =
1. - i
-->y=1-%i
y =
1. - i
ans =
- 1.
Ejercicios
12
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
*3+4
+3*4
/3+4
+3/4
sqrt ( -1)
sqrt ( -2)
exp (1)
log(exp (2))
exp(log (2))
10^2
log10 (10^2)
10^ log10 (2)
sign (2)
sign ( -2)
sign (0)
Usando
algunas
trigonomtricas,
cul
resultado?
cos (0)
sin (0)
cos(%pi)
sin(%pi)
cos(%pi /4) - sin(%pi /4)
funciones
es
su
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.
La sintaxis es: -->A=[a11, a12, a1n ; an1, an2, ann]
Una matriz de 2x3 es
-->a=[1,2,3;4,5,6]
a =
1. 2. 3.
4. 5. 6.
4.
5.
6.
13
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
A =
1.
1.
1.
1.
1.
1.
La
siguiente
sintaxis
nr=size(matriz,sel), sel=1 o r o r
da el nmero de renglones, sel=2 o
c da el nmero de columnas,
sel=* da el total del nmero de
elementos de la matriz.
-->A=ones(2,3)
A =
1. 1. 1.
1. 1. 1.
-->size(A,'*')
ans =
6.
-->A=ones(2,3)
A =
1. 1. 1.
1. 1. 1.
-->B=2*ones(2,3)
B =
2. 2. 2.
2. 2. 2.
-->A+B
ans =
3. 3. 3.
3. 3. 3.
4.
-->v=3:2:10
v =
3. 5. 7. 9.
-->v=3:2:10
v =
3. 5. 7. 9.
-->v=10:-2:3
v =
10. 8. 6. 4.
-->v=3:-2:10
v =
[]
14
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
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 prctico lo usaremos en el siguiente ejemplo:
-->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 subndices, se puede utilizar para designar
los elementos de Acuyos subndices 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 rengln i, en las columnas desde j hasta k
A(i,:) el rengln i
A(:,j) la columna j
-->A(1:2 ,3:4)
ans =
1050. - 1400.
- 18900. 26880.
-->vi=1:2
vi =
1. 2.
-->vi=vi+1
vi =
2.
-->vj=3:4
vj =
3. 4.
-->A(vi,vj)
ans =
1050. - 1400.
- 18900. 26880.
3.
-->vj=vj+1
vj =
4.
5.
-->A(vi,vj)
ans =
26880. - 12600.
- 117600. 56700.
Se puede usar la funcin random para
crear matrices
15
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
0.7436821
0.8766705
0.6329206
-->A([2 1],:)
ans =
0.1952018
0.8766705
0.4573049
0.7436821
-->A([1 2],:)=A([2 1],:)
A =
0.4573049 0.4126882
0.1952018
0.8766705
0.7436821
0.7140648
0.7140648
0.4126882
0.1952018 0.7140648
0.4573049 0.4126882
0.3230850
0.6898754
0.8766705
0.7436821
0.6329206
Operaciones bsicas con matrices, a*b, a+b, a-b, a/b, x*a, a, inv(a),
det(a)
ans =
-->a=[1 2 1;3 4 2;5 3 1]
- 2.
1. 0.
a =
7. - 4. 1.
1. 2. 1.
- 11. 7. - 2.
3. 4. 2.
5. 3. 1.
-->aa=round(inv_a);
-->d=diag(a)
d =
1.
4.
1.
-->a+b
ans =
2. 5. 6.
5. 8. 5.
6. 5. 2.
-->b=a'
b =
1. 3. 5.
2. 4. 3.
1. 2. 1.
-->a*b
ans =
6.
13. 12.
13. 29. 29.
12. 29. 35.
-->inv_a=inv(a)
inv_a =
- 2.
1. - 5.551D-16
7. - 4. 1.
- 11. 7. - 2.
-->a-b
ans =
0. - 1. - 4.
1. 0. - 1.
4. 1. 0.
-->round(inv_a)
-->a/b
16
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
ans =
0. 0.
1.
- 2. 7. - 9.
- 7. 24. - 36.
-->mli=tril(a)
mli =
1. 0. 0.
3. 4. 0.
5. 3. 1.
-->a2=2*a
a2 =
2.
4. 2.
6.
8. 4.
10. 6. 2.
-->[l,u]=lu(a)
u =
5. 3.
1.
0. 2.2 1.4
0. 0. - 0.0909091
l =
0.2 0.6363636 1.
0.6 1.
0.
1.
0.
0.
-->rango=rank(a)
rango =
3.
-->determinante=det(a)
determinante =
1.
-->tamano=size(a)
tamano =
3. 3.
-->reducida=rref(a)
reducida =
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->maleatoria=rand(3,4)*10
maleatoria =
2.1132487
3.3032709
8.4974524 0.6837404
7.5604385
6.653811
6.8573102 5.6084861
0.0022113
6.2839179
8.7821648 6.6235694
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 extensin sce, que se ejecuta dentro del
paquete.
Posicionndose sobre el comando/funcin y ctrl +F1, = da la ayuda dentro del
editor
Algunos comandos para desplegar texto o mensajes y clculos en la consola/rea
de trabajo
disp('macro/scripts hecha por nombre')
ejemplo de archivo ejecutado por
ejemplo1.sce en Scilab
3.
8. 5.
10. 6. 11.
macro/script hecha por nombre
7.
7. 6.
usando matrices de ejemplo, para
operaciones bsicas
matriz a
1.
4.
3.
2.
2.
1.
1.
5.
2.
transpuesta de a
1. 4. 3.
2. 2. 1.
1. 5. 2.
2*a=
2.
8.
6.
4.
4.
2.
2.
10.
4.
suma de b+a2
Polinomios:
Dado un sistema de ecuaciones
podemos
escribir
su
polinomio
caracterstico (valores propios)
a=[1,2,3;4,5,6;7,8,-9];
p=poly(a,"x")
-->a=[1,2,3;4,5,6;7,8,-9]
a =
1. 2. 3.
4. 5. 6.
7. 8. - 9.
-->pp=poly(a,"x")
pp =
2 3
- 54 - 126x + 3x + x
18
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
-->roots(pp)
ans =
- 0.4248820
10.059332
- 12.63445
-->P=poly([2 4 7],"x","roots")
P =
2 3
- 56 + 50x - 13x + x
-->roots(P)
ans =
2.
4.
7.
Manejo de datos
Leer datos de archivo.
* Los datos deben estar en un archivo tipo texto, previamente, con la extensin csv
o tabulador (o por un espacio en blanco)
* Preferentemente no contenga letreros iniciales en la 1 fila
Variable=read(nombre_archivo.csv,-1,NoColumnas)
-1 significa que no se conoce el total de lneas o datos
-->Datos=read(data.cvs,-1,2)
Ejemplo
en
un
script/macro/procedimiento
//script/macro para analizar datos
//ejercicio usar disp() para desplegar
informacin
clc
datos=read("datavi17ene14.csv",-1,3)
x1=datos(:,1);
y1=datos(:,2);
y2=datos(:,3);
st_deviation(y1)
st_deviation(y2)
mean(y2)
mean(y1)
variance(y1)
variance(y2)
median(y1)
median(y2)
max(y1);min(y1)
max(y2);min(y2)
19
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
su
datos1=read("datavi17en
e14.csv",-1,3)
datos1 =
1.
29. 25.
2.
46. 34.
3.
16. 24.
4.
13. 32.
5.
42. 16.
6.
43. 45.
7.
42. 22.
8.
46. 17.
9.
11. 44.
10. 18. 9.
11. 18. 37.
12. 15. 14.
13. 12. 48.
14. 15. 35.
15. 15. 1.
16. 3.
33.
17. 8.
16.
18. 38. 12.
19. 32. 36.
20. 48. 21.
-->gsort(datos1)
ans =
48. 22. 13.
48. 21. 12.
46. 20. 12.
46. 19. 12.
45. 18. 11.
44. 18. 11.
43. 18. 10.
42. 17. 9.
42. 17. 9.
38. 16. 8.
37. 16. 8.
36. 16. 7.
35. 16. 6.
34. 15. 5.
33. 15. 4.
32. 15. 3.
32. 15. 3.
29. 14. 2.
25. 14. 1.
24. 13. 1.
20
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx
-->lex_sort(datos1,2)
ans =
16. 3.
33.
17. 8.
16.
9.
11. 44.
13. 12. 48.
4.
13. 32.
15. 15. 1.
14. 15. 35.
12. 15. 14.
3.
16. 24.
11. 18. 37.
10. 18. 9.
1.
29. 25.
19. 32. 36.
18. 38. 12.
7.
42. 22.
5.
42. 16.
6.
43. 45.
8.
46. 17.
2.
46. 34.
20. 48. 21.
Comando modulo(var1,var2)
Mdulo calcula i = n (mdulo 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: "Divisin por cero... ".
Con ieee(2), mdulo(x,0) devuelve %nan. pmodulo(x,0) devuelve un mensaje de error: "Divisin por cero... ".
Con ieee(2), pmodulo(x,0) devuelve %nan.
o -->exec('archivo.sce',-1);
-->exec('\directorio2\archivo.sce',0);
datos1=read(data.csv,-1,2);
x=input(mensaje,s);
x=input(mensaje)
disp("valor de a= "+string(a))
if modulo(a,2)==0 then
disp("el nmero "+string(a)+" es par")
else
disp("el nmero "+string(a)+" es non")
end
disp("ver/editar archivo parnon2.sce")
ejecutado en la consola:
-->exec('parnon2.sce',-1);
valor de a= 3
el nmero 3 es non
ver/editar archivo parnon2.sce
Est la opicin de que las variables se escriban en la consola/area de trabajo,
luego se corre el scipt o archivo ejecutable
-->a=1
-->exec('parnon.sce',-1);
el nmero 9 es non
Acrividades Derivadas:
Circuito de conteo, for_vi:inc:vf_end
2.
2.5
3.
Circuito de convergencia, while_condicion_end
Pseudocdigo:
Mientras la condicin se cumpla hacer
Actividad1, Actividad2
Sintaxis:
while condicin
actividad1;
actividad2;
end
Por ejemplo
e = 1;
while e+1 > 1
e = e/2;
end
Ejemplo 2
//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");
su resultado en consola es:
-->exec('c_convergencia.sce', -1)
contador i= 1
contador i= 2
contador i= 3
contador i= 4
contador i= 5
contador i= 6
contador i= 7
contador i= 8
contador i= 9
contador i= 10
termina el circuito hasta que i>10
-->exec('menu2.sce',0);
usted selecciono la opcion 2
-->A=1;
-->exec('menu2.sce',0)
usted selecciono la opcion 1
-->A=0;
-->exec('menu2.sce',0);
valor no vlido, slo tiene 3 opciones
Usando entrada de datos desde el script con el comando input.
//comandos para escribir datos de entrada desde consola y desplegando su
contenido
x1=input("valor de x1=");
disp("almacenando texto en x2");
x2=input("Cmo ests? ",'s');
disp("desplegando su contenido de cada variable asignada");
disp("x1="+string(x1),"x2="+string(x2));
disp("otra manera de desplegar contenido");
disp(x1,"x1=",x2,"x2=");
Resultado de la ejecucin
-->exec('entrada_datos1.sce', -1)
valor de x1=10
almacenando texto en x2
Cmo ests? bien
desplegando su contenido de cada variable asignada
x2=bien
x1=10
otra manera de desplegar contenido
x2=
bien
x1=
10.
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.
Creacin de funciones
Las funciones se escriben en el editor de SciNotes, puede escribir una funcin en
un archivo o varias funciones en un archivo, al guardar el paquete le asigna la
extensin sci, teniendo el archivo.sci, generalmente se guarda una funcin. 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 estn asignadas para algunas
funciones propias del Windows o de otro paquete, en el caso de F1 es la tecla
funcin que generalmente se usa para pedir ayuda en la mayora 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 funcin.
Mandando error de nombre de la funcin, desconocida, entonces podemos usarla
como funcin propia o creada por el usuario.
res1=actividad_n-1
res2=actividad_n
endfunction
Ejemplos de la creacin de funciones y resultado en la consola:
El comando deff se usa para definir cualquier funcin en la consola, no se guarda
al salir del Scilab.
-->deff('y=f(x)','y=x+1.5');
-->f(2)
ans =
3.5
-->plot(x,f(x));
-->exec('funcion0.sce',0);
-->ftxt('hola')
ans =
escribio= hola
Al escribir una segunda funcin en el mismo archivo, es necesario volverlo a
llamar:
Mostrando el contenido del archivo funicion1.sce
//con dos o ms funciones
function [texto]=ftxt(a)
texto='escribio= '+string(a);
endfunction
function [y]=f_1(x)
y=1+x/2;
endfunction
Ejecutando funciones en la consola:
-->exec('funcion1.sce',0);
-->f_1(2)
ans =
2.
Agregamos una tercera funcin a funcion1.sce
//con dos ms funciones
function [texto]=ftxt(a)
texto='escribio= '+string(a);
endfunction
function [y]=f_1(x)
y=1+x/2;
endfunction
function [result1,result2]=fdos(a,b)
suma=a+b;
resta=a-b;
result1='la suma es = '+string(suma)
result2='la resta es = '+string(resta)
endfunction
Resultado de la ejecucin de la funcin en la consola
-->exec('funcion1.sce',0);
-->fdos(3,5)
ans =
la suma es = 8
Parte matemtica II
Interpolando datos
Por el mtodo de Lagrange de 2do y 3er orden, nos permite calcular en valor entre
datos numricos, el cual es til en diferentes reas: dado un conjunto de 2 o 3
pares de datos, calcular un valor especfico 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.
f 2 ( x)
P3 ( x)
( x x1)( x x 2)
( x x0)( x x 2)
( x x0)( x x1)
f ( x 0)
f ( x1)
f ( x 2)
( x0 x1)( x 0 x 2)
( x1 x0)( x1 x 2)
( x 2 x 0)( x 2 x1)
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 continuacin se ver el contenido
escrito en el script interpolar.sce
//interpolacin por el mtodo de Lagrange
//usando funcion
//Recuerde teclear las siguientes instrucciones
// funcprot(0); exec('interpolar.sce',0) ;
//creando la funcin para 3 pares de datos x,y xin
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 funcin 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 continuacin 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]
-->x=[2 4 7 9 10 13 15]
x =
2. 4. 7. 9. 10.
13.
15.
-->yy=[0.3,0.5,0.8]
yy =
0.3 0.5 0.8
-->yy2=finter2(xx,yy,6)
yy2 =
0.4
-->y3=[0.3,0.5,0.8,1];
-->yy3=finter3(x3,y3,6)
yy3 =
0.4
x2 2x 3 0
x 1,2=
x2 2x 3 0
b b24 ac
,
2a
-->sqrt(d)
ans =
2.8284271i
Nota, la solucin es un nmero complejo para dicha ecuacin, ya que su discriminante d,
es un nmero negativo. Da el resultado imaginario si se le saca raz cuadrada.
Se puede graficar la funcin para verificar visualmente, usando -10x10 o x=linespace(10,10), automticamente da 100 unidades en el intervalo, o usar x=linespace(-10,10,21),
esto es 10 elementos considerando el 0.
-->x=-10:10;
-->y=x^2-2*x+3;
-->plot(x,y)
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
Integracin
lim
f ( x ) dx
1 x 4x
lim inf
2 x 5 dx
Sintaxis: intg(lim_inf,lim_sup,funcion)
Primero se define la funcin, tomar en cuenta los limites inferior y superior para
escribirlo en la funcin intg.
-->deff('y=fi(x)','y=1-x-4*x^3+2*x^5');
-->intg(-2,4,fi)
ans =
1104.
PVI, problema del valor inicial; indican las condiciones iniciales de la ecuacin
diferencial; intervalo de x, y inicial.
dy
= y ' =f ( x , y ) =0.3 ( 2 y ) y PVI: en 0x20, con y(0)=0.1.
dx
Se usa la funcin ode(yini,xini,intervalo_x,dydx), en la consola se escribe primero
la ecuacin diferencial ordinaria, se genera los valores del intervalo de x, luego la
funcin ode y sus parmetros:
Linspace(vi,vf) divide el intervalo en 100 subdivisiones, por omisin (default)
n=100, calculando el tamao de paso, h=(vf-vi)/n
-->function [dydx]=fty(t,y), dydx=0.3*y*(2-y), endfunction;
-->t0=0; tf=20; y0=0.1;
-->y=ode(y0,t0,t,fty);
-->plot2d(t,y);
-->t=linspace(t0,tf);
Figure saved.
-->
Disminuimos el tamao de paso o las sudivisiones
De n para que puedan ver el resultado de manera tabular
Tecleamos lo siguiente en la consola, mandando sus resultados:
-->t=0:2:20
t =
column 1 to 6
0.
2.
4.
6.
column 7 to
12.
14.
16.
-y =
y
0
2
4
6
8
10
12
14
16
18
20
column 1 to 3
0.1
0.2974999
column 4 to 6
1.316525
column 7 to 8
1.9720265
column 9 to 10
1.9974296 1.9992251
column 11
1.9997665
0.1
0.2974999
0.7343112
1.316525
1.7295574
1.910044
1.9720265
1.9914914
1.9974296
1.9992251
1.9997665
8. 10.
11
18. 20.
>y=ode(y0,t0,t,fty)
0.7343112
1.7295574
1.910044
1.9914914
Tarea: colocar los resultados en una tabla en Word para una mejor visualizacin.
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 botn izquierdo del mouse activar la ventana o lugar, hacer clic con el
botn derechodel mouse aparece un
men, recorriendo el
puntero hacia Nuevo, luego seleccionar
la opcin , ver figura
1A.
Figura 5A. Imagen de la creacin del acceso directo finalizada, el cual se ejecutar
con un doble clic con el botn izquierdo del mouse.
ANEXOB
Secuencia de imgenes que indican los pasos para cambiar de subdirectorio o
carpeta de trabajo.
REFERENCIASBIBLIOGRFICAS
REFERENCIAS DE ARCHIVOS DIGITALES, Accesados enero 2014.
Introduccin a SCILAB. Hctor Manuel Mora Escobar. Departamento de
Matemticas. Universidad Nacional de Colombia. Bogot, mayo del 2005.
http://www.hectormora.info/sci.pdf
Introduction to Scilab. Michael Baudin. September 2011
http://forge.scilab.org/index.php/p/docintrotoscilab/downloads/311/
UNA INTRODUCCIN RPIDA A SCILAB. Rosa Echevarra Lbano Dpto. Ecuaciones
Diferenciales y Anlisis Numrico Universidad de Sevilla. ApuntesScilab.pdf
http://personal.us.es/echevarria/docencia.html
Introduccin al SCILAB. LABORATORIO DE COMPUTACIN DE ALTO DESEMPEO
(LCAD). FACULTAD DE INGENIERA. UNIVERSIDAD NACIONAL DE ASUNCIN.
Febrero/Marzo 2005
http://www.ing.una.py/pdf/calculo/scilab/CURSO%20DE%20SCILAB.pdf
Manual de iniciacin al Scilab
http://docencia-eupt.unizar.es/ctmedra/manual_scilab.pdf
---------------------------------------------------------Ernesto Caldern Castillo
metodosnumericosfq@yahoo.com.mx
Curso Scilab