Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Breve Curso Introductorio de Scilab PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 41

Breve curso introductorio de Scilab.

Introducción

Desarrollado por INRIA (Institut National de Recherche en Informatique et Automatique) y la ENPC


(École Nationale des Pontset Chaussées) desde 1990.
Actualmente es un gran consorcio integrado por compañías y organizaciones académicas 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 edicióny desarrollo de Scilab desde julio de2012....

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, …

Este paquete se puede obtener de la siguiente dirección http://www.scilab.org,ver figura1,buscar la


opción o icono de descargar. Se le sugiere al usuario registrarse, no tiene ningún costo, sirve para
realizar mejoras con la experiencia de uso, ya sea para pedir ayuda en línea o por correo electrónico
por alguna función, algún problema que se le pueda presentar, para recibir alguna clave para el uso de
librerías o herramienta especializada.

Figura 1. Imagen del sitio inicial donde se puede descargar directamente


para Windows o ir la liga para otra plataforma, ver figura 2.

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

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 apóstrofes o comillas): ’esto es una cadena de caracteres’ “string“

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

El significado de la mayoría de estas funciones es absolutamente claro. La siguiente tabla muestra


varios ejemplos utilizando las funciones de parte entera y redondeo.

x ceil(x) floor(x) int(x) round(x)


2 2 2 2 2
1.8 2 1 1 2
1.5 2 1 1 2
1.2 2 1 1 1
- 3.1 -3 -4 -3 -3
- 3.5 -3 -4 -3 -4
- 3.8 -3 -4 -3 -4

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.

Uso como calculadora

-->//escribe comentario en la consola o área de trabajo

-->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

Números aleatorios El símbolo de $ indica el último valor de un


renglón,columna renglón o columna o de ambos, como el caso
anterior.
-->w=rand(2,4) 
w =
column 1 to 3 -->sqrt([4 3]) 
0.2113249 0.0002211 0.6653811 ans =
0.7560439 0.3303271 0.6283918 2. 1.7320508

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 

Sus variables son:

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

usando 8107 elementos de 10000000.


y 81 variables de 9231.

Sus variables globales son:

%modalWarning %toolboxes %toolboxes_dir

usando 19 elementos de 999.


y 3 variables de 767.

Los espacios en blanco antes y después del c =


signo = no son necesarios, simplemente facilita 42.5
la lectura.
Las variables siempre deben iniciar con una -->a=%T 
letra o $. a =
T
-->b=4.5; 
-->b=(0==1) 
Cuando en la orden no hay ninguna asignación, b =
sino simplemente una operación válida,Scilab F
crea o actualiza una variable llamada ans. Por
ejemplo,
Operaciones repetitivas
-->a+b 
ans = Se desea calcular , se da un valor inicial a
42.5 una variable y luego se usa x = (x+y/x)/2, se
repite el cálculo usando flecha hacia arriba ↑
-->c=a+b;  luego aparece la ecuación y presione, hasta
-->c  que no varíe su valor. Ejemplo

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.

-->t1=2, t2=3; dt=t2-t1  Otra función matemática, ésta ya con dos


parámetros de entrada, es modulo. Sus
t1 =
dosparámetros deben ser enteros. El resultado
2.
es el residuo de la división entera.
dt =
modulo(17,5)da como resultado 2.
1.

Entre operadores de igual prioridad, se utiliza el -->modulo(17,5) 


orden de izquierda a derecha. ans =
Porejemplo, 2*3+4^5-6/7 es equivalente a 2.
((2*3)+(4^5))-(6/7).
Formato numérico
->2*3+4^5-6/7 
ans =

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.

format(v) o format(‘v’,10) regresar al formato String o cuerdas


inicial, el formato “variable” (el predefinido por -->x="hola, " 
Scilab) x =
hola
Scilab tiene predefinidas algunas constantes
especiales cuyos nombres están precedidosdel -->y="¿cómo estás?" 
signo % . Para los valores e, π, , sus y =
nombres son: %e , %pi , %i . Observeque dos de ¿cómo estás?
estas variables aparecieron al utilizar who.
Después de la siguiente asignación,
la variable r tendrá el valor -1. -->x+y 
ans =
hola,¿cómo estás?
-->r = log(1/%e) 

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.

imult multiplicación por el i, la unidad imaginaria

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(%i)  Finalmente se verifica la igualdad por Scilab de


(1+i)(1-i) = 1-i2 = 2
ans =
0. -->x*y 
ans =
-->imag(%i)  2.
ans =
1. -->%i 
%i =
-->conj(%i)  i
ans =
-i -->c=sqrt(-1) 
c =
-->x=1+%i  i
x =
1. + i -->r=-5; 
-->a = 3 + 4*r*%i 
-->isreal(x)  a =
ans = 3. - 20.i
F
-->b = sqrt(-4) 
-->x'  b =
ans = 2.i
1. - i
-->z = 3 + 4*%i; r = sin(z) 
-->y=1-%i  r =
y = 3.853738 - 27.016813i
1. - i

-->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)

Usando algunas funciones, ¿cuál es su Usando algunas funciones trigonométricas,


resultado? ¿cuál es su resultado?
sqrt (4) cos (0)
sqrt (9) sin (0)
sqrt ( -1) cos(%pi)
sqrt ( -2) sin(%pi)
exp (1) cos(%pi /4) - sin(%pi /4)

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.

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

-->A(1:2 ,3:4)  -->vj=vj+1 


ans = vj =
1050. - 1400.
- 18900. 26880. 4. 5.

-->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

-->A(vi,vj)  Usando números aleatorios tenemos:


ans =
1050. - 1400. -->A=rand(3,3) 
- 18900. 26880. A =
0.4573049 0.4126882 0.7436821
0.1952018 0.7140648 0.8766705
-->vi=vi+1  0.3230850 0.6329206 0.6898754
vi =

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

Sistema de ecuaciones, resolución por el método de Gauss-Jordan


Se conoce el siguiente sistema de ecuaciones
4x1 - 9x2 + 2x3 = 5
2x1 - 4x2 + 6x3 = 3
x1 - x2 + 3x3 = 4

*se introduce la matriz de coeficiente del sistema de ecuaciones


X1 X2 X3 =bi
4 -9 2 5
2 -4 6 3
1 -1 3 4
*Se calcula la inversa del sistema considerando nxn, sin el bi
* Multiplicamos la matriz rectangular inicial por la matriz inversa = da la solución del sistema

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.

Posicionándose sobre el comando/función y ctrl +F1, = da la ayuda dentro del editor

Algunos comandos para desplegar texto o mensajes y cálculos en la consola/área de trabajo


disp('macro/scripts hecha por nombre')
ejemplo de archivo ejecutado por ejemplo1.sce Polinomios:
en Scilab Dado un sistema de ecuaciones podemos
escribir su polinomio característico (valores
macro/script hecha por “nombre” propios)
usando matrices de ejemplo, para operaciones a=[1,2,3;4,5,6;7,8,-9];
básicas p=poly(a,"x")

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

Leer datos de archivo.


* Los datos deben estar en un archivo tipo texto, previamente, con la extensión 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 líneas o 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)

Ordenando datos, gsort(datos),lex_sort(datos,column)


datos es la tabla de valores leída de archivos o asignada
gsort(datos) ordena la tabla sin respetar apareamiento (ordena cada columna)
lex_sort(datos,#decolumna) ordena la columna elegida respetando su apareamiento (renglón
correspondiente con sus respectivas columnas)

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); 

Algunos tópicos de programación comandos y funciones

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

Algunos comando de programación


Actividades básica:
* lectura de datos: en Scilab, se puede usar mediante la asignación de variables desde la consola o
desde un archivo.
* salida de datos, mediante el comando disp.(variable,”texto_mensaje”) o escritura en archivo
* si condicional, usando el comando if_then_else

Actividades derivadas:
Para hacer menús: select_case_else_end
Circuito de cálculo: for_vi:vf_end
Circuito de convergencia: while_condicion_end

Otros comandos relacionados con el control de flujo son:


El comando break permite la salida forzada (en cualquier parte interna) de un circuito for o de un
cicuito while.
El comando return permite salir de una función antes de llegar a la última orden. Todos los parámetros
de salida o resultados deben estar definidos con anterioridad.
Otra orden que sirve para interrumpir una función, en este caso interrumpiendo la evaluación, es
abort.

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

ejemplos del uso del si condicional


Dadas dos variables indicar si es par o non cada una.
Para este caso haremos uso del commando modulo(var1,var2), ya que si se divide un número entre 2 y
el residuo es 1 el número es non, si el residuo es 0 el número es par.

En un script escribiremos lo siguiente (recuerde guardar el archivo después de escribirlo y antes de


correrlo) :
//para determinar si un número es par o non
// contiene un valor predeterminado de a
a=3
disp("valor de a= "+string(a))
if modulo(a,2)==0 then
disp("el número "+string(a)+" es par")
else
disp("el número "+string(a)+" es non")
end
disp("ver/editar archivo parnon2.sce")

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 

//se corre el archivo desde el editor del Scilab

El texto escrito sera:


//para determinar si es par o non un número dado
if modulo(a,2)=0 then
disp(“el número “+string(a)+” es par”)
else
disp(“el número ”+string(a)+” es non”)

22
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
end

También se puede correr/ejecutar en la consola, el primero se le escribe hasta arriba el clc

el número 4 es par

-->exec('F:\c\cursoscilab\ejemplos\parnon.sce', -1) 
el número 4 es par

Sin usar el clc y ejecutando el archivo parnon.sce se muestra lo siguiente:

-->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.

Circuito de convergencia, while_condicion_end


Pseudocódigo:
Mientras la condición se cumpla hacer
Actividad1, Actividad2

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");

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

El comando input, permite mandar un mensaje de entrada de datos asignando a una variable que
puede ser real o de tipo string (texto),

Para realizar menú se usa el comando select_case_else_end


La forma general es:
select variable
case valor1 then
... actividad1; actividad2;
case valor2 then
... actividad1; actividad2;
case valor3 then
... actividad1; actividad2;
case valor4 then
... actividad1; actividad2;
else
... actividad1; actividad2;
end

Ejemplo del select_case

//usando select_case_else_end para hacer un menú

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

Corrida del procedimiento


-->A=2; 
-->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 válido, sólo 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("¿Cómo estás? ",'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 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

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.

Guardando datos en archivo


Para correr este script/procedimiento es necesario correr tabla_frecuencias.sce, hecho en clase y
enviado, este archivo corre previamente a lectura5.sce que contiene los cálculos iniciales a necesitar,
enviado a sus correos. Se escriben algunos archivo.sce:

Procedimiento para crear tabla_frecuencias.sce

//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

Script/procedimiento para crear guarda_resultados.sce

//lee 1 arch si existe abre y vuelve a escribirlo


//al abrirlo en excel los resultados,decir que si y continuar
u=file('open','hola.xls','unknown');
write(u,'frecuencias, con intervalos de 10, 0<=x<=50, con x aleatorio');
write(u,i1);write(u,i2);
write(u,i3);write(u,i4);

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.

Sintaxis con un resultado de salida y varios parámetros de entrada


function resultado = nombrefuncion(par1, par2, ...)
actividades
resultado=actividad
endfunction

Sintaxis usando varios resultados de salida y varios parámetros de entrada


function [res1, res2, ...] = nombrefuncion(par1, par2, ...)
actividad1

res1=actividad_n-1
res2=actividad_n
endfunction

Ejemplos de la creación de funciones y resultado en la consola:


El comando deff se usa para definir cualquier función en la consola, no se guarda al salir del Scilab.

-->deff('y=f(x)','y=x+1.5'); 

29
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->f(2) 
ans =
3.5

Puedo graficar adicionando lo siguiente: x va de 0 a 10

-->x=0:10; 
-->plot(x,f(x)); 

También se puede crear de la siguiente manera:


-->function [y1]=fun1(x), y1=2*x+1, endfunction 
-->fun1(1) 
ans =
3.

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.

//este archivo contiene ejemplo de funciones


//así se carga/llama al *.sci de funciones
//-->exec('funciones1.sci',0)
function [y]=fun1(x), y=2*x+1, endfunction

function [x,y]=sumrest(a, b)
x=a+b
y=a-b
endfunction

Otra manera de crear funciones usando un procedimiento, archivo.sce:


//procedimiento para escribir cualquier función, dando su resultado
fu=input("Ingrese la funcion f(x) = ",'s');
x=input("ingrese el valor de x= ");
deff('y=f(x)','y='+fu);
disp("f("+string(x)+")="+string(f(x)));

Resultado de la corrida o ejecución:

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

Escribiendo varias funciones en un mismo archivo.sce

Resultado de la ejecución:
-->funcprot(0); 
-->exec('funcion0.sce',0); 
-->ftxt('hola') 
ans =
escribio= hola

Al escribir una segunda función en el mismo archivo, es necesario volverlo a llamar:


Mostrando el contenido del archivo funicion1.sce
//con dos o más 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 función a funcion1.sce


//con dos más 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)

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

Resultado de la ejecución de la función en la consola


-->exec('funcion1.sce',0); 
-->fdos(3,5) 
ans =
la suma es = 8

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 modelos matemáticos: ( x  x1)( x  x 2) ( x  x0)( x  x2) ( x  x0)( x  x1)


f2 ( x)  f ( x0)  f ( x1)  f ( x 2)
( x 0  x1)( x 0  x 2) ( x1  x 0)( x1  x 2) ( x 2  x 0)( x 2  x1)
( x  x1)( x  x2)( x  x3) ( x  x0)( x  x2)( x  x3) ( x  x0)( x  x1)( x  x3) ( x  x0)( x  x1)( x  x2)
P3 ( x)  f ( x0)  f ( x1)  f ( x 2)  f ( x3)
( x0  x1)( x0  x2)( x0  x3) ( x1  x0)( x1  x2)( x1  x3) ( x 2  x0)( x2  x1)( x 2  x3) ( x3  x0)( x3  x1)( x3  x 2)

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

O escribir los datos de la siguiente manera:


-->x=[2 4 7 9 10 13 15]; 
-->y=[0.1 0.3 0.5 0.8 1 1.2 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

Solución de ecuaciones no lineales


f(x) = a0 + a1 x +a2 x2 + a3 x3 + … anxn= 0 , si f(x)=0 entonces x es raíz
Ejemplos:
x2  2x  3  0
deff(‘nombre_funcion’,’funcion’) : para definir una función en la consola/área de trabajo.
fsolve(valor_inicial,funcion) : encuentra el valor de x, mediante procedimientos iterativos. Se sugiere que el
valor inicial sea 0 o entre 0 y 10. Recordar que no todo tipo de ecuación no lineal se resuelve con el solve. Si se
tiene mayor número de incógnitas en una ecuación, puede que no de un buen resultado. (verificar la operación
de manera manual paso a paso o con cualquier paquete matemático). Usar otro método de optimización.

Nota respetar la asignación de variable de salida


deff(‘y=f(x)’, ‘y=x^2-2*x+3’); 
fsolve(0,f) 

Verificación manual de la ecuación de segundo grado , x 2  2 x  3  0 ,a=3, b=-2 c=1


-->a=3; b=-2; c=1; 
-->d=b^2-4*a*c 
d =
- 8.
-->sqrt(d) 
ans =
2.8284271i

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) 

Tarea: cambiar el signo de

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.

Ecuación diferencial ordinaria de primer orden. EDO


Representación matemática, de la EDO o en inglés ODE.
#$
#%
&' &
PVI, problema del valor inicial; indican las condiciones iniciales de la ecuación diferencial; intervalo de
x, y inicial.
#$
#%
&' & () * & & PVI: en 0≤x≤20, con y(0)=0.1.

Se usa la función ode(yini,xini,intervalo_x,dydx), en la consola se escribe primero la ecuación


diferencial ordinaria, se genera los valores del intervalo de x, luego la función ode y sus parámetros:
Linspace(vi,vf) divide el intervalo en 100 subdivisiones, por omisión (default) n=100, calculando el
tamaño 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; 
-->t=linspace(t0,tf); 
-->y=ode(y0,t0,t,fty); 

35
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx
-->plot2d(t,y); 
Figure saved.
-->

Disminuimos el tamaño 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 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 3A. Imagen de la continuación de la creación del acceso directo

Figura 4A. 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.

Introducción a SCILAB. Héctor Manuel Mora Escobar. Departamento de Matemáticas. 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 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

Introducción al SCILAB. LABORATORIO DE COMPUTACIÓN DE ALTO DESEMPEÑO (LCAD). FACULTAD DE


INGENIERÍA. UNIVERSIDAD NACIONAL DE ASUNCIÓN. Febrero/Marzo 2005
http://www.ing.una.py/pdf/calculo/scilab/CURSO%20DE%20SCILAB.pdf

Manual de iniciación al Scilab


http://docencia-eupt.unizar.es/ctmedra/manual_scilab.pdf

----------------------------------------------------------
Ernesto Calderón Castillo
metodosnumericosfq@yahoo.com.mx
Curso Scilab

41
Ernesto Calderón C. metodosnumericosfq@yahoo.com.mx

También podría gustarte