Vous êtes sur la page 1sur 43

Breve curso introductorio de Scilab.

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

Sus principales caractersticas son: *software para clculo cientfico, * interactivo, *


programable, * de libre uso, con la condicin de siempre hacer referencia a
sus autores, * disponible para diferentes plataformas: Windows, Linux, Mac OS X
(slo plataforma intel), Sun, Alpha, ...
Scilab es un paquete libre, software libre para la computacin cientfica, posee
un lenguaje de programacin propio, como los de clculo numricos (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 intrprete. Se escriben
en un editor de texto integrado al Scilab.
Script

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

Figura 1. Imagen del sitio inicial donde se puede descargar


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

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 a usar en Scilab


Operadores aritmticos:

Operadores relacionales:

Mayor prioridad ( ) ^
o **
* /
Menor prioridad + -

<

o
no

>
>=
<=
~= , <>
=
==

Operadores lgicos:
&
|
~

Boleanos:
Falso %f o %F
verdadero %t o
%T

/ divisin por la derecha, x/y = xy-1


\ divisin por la izquierda, x\y = x-1y
El == se usa como operador de comparacin no de asignacin =.
apstrofe, 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 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

Scilab distingue entre maysculas y minsculas: %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 lnea de comando y modificarlo.
En Scilab las variables no son nunca declaradas: su tipo y su tamao cambian de
forma dinmica de acuerdo con los valores que le son asignados. As, una misma
variable puede ser utilizada, por ejemplo, para almacenar un nmero complejo, a
continuacin una matriz 25x40 de nmeros enteros y luego para almacenar un
texto. Las variables se crean automticamente al asignarles un contenido. As
mismo, es posible eliminar una variable de la memoria si ya no se utiliza.

Algunas funciones elementales


sqrt(x):raiz cuadrada
abs(x): valor absoluto
conj(z):complejo conjugado
real(z):parte real
imag(z) :parte imaginaria
exp(x):exponencial
log(x) :logaritmo natural
log10(x):logaritmo decimal
rat(x):aprox. racional
modulo(x:y):resto de dividir x
por y
floor(x):n tal que
n<=x<(n+1)
ceil(x):n tal que (n-1)<x<=n
int(x):parte entera inglesa:
floor(x) si x>=0
ceil(x) si x<0

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.

El significado de la mayora de estas funciones es absolutamente claro. La


siguiente tabla muestra varios ejemplos utilizando las funciones de parte entera y
redondeo.
x
2
1.8
1.5
1.2
- 3.1
- 3.5
- 3.8

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

Imagen del Scilab 4.0, el rea de trabajo ser en la Consola de Scilab,

/intro/enter.
El smbolo del prompt es --> aqu se escriben todas las instrucciones dadas por el
usuario para hacer los clculos necesarios.

A medida que iniciemos y avancemos en el manejo del Scilab se irn dando


algunas breves explicaciones acerca de los comandos ms frecuentes.

Uso como calculadora


-->//escribe comentario en la consola o rea de trabajo
-->A=1
A =
1.

-->a=2
a =
2.

-->A
A =
1.
-->a
a =
2.

Divisin por la derecha y divisin por


la izquierda:
-->1/2
ans =
0.5
-->1\2
ans =
2.
-->3+7*5
ans =
38.

Operacin asignada a una variable

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

En la siguiente lnea el ; no muestra el


resultado/asignacin
de
la
operacin/nmero

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

Sus variables son:


t
scinoteslib
matiolib

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.

Los espacios en blanco antes y


despus del signo = no son
necesarios, simplemente facilita la
lectura.
Las variables siempre deben iniciar
con una letra o $.
-->b=4.5;

Cuando en la orden no hay ninguna


asignacin, sino simplemente una
operacin
vlida,Scilab
crea
o
actualiza una variable llamada ans.
Por ejemplo,
-->a+b

%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

valor inicial a una variable y luego se


usa x = (x+y/x)/2, se repite el clculo
usando flecha hacia arriba luego
aparece la ecuacin y presione,
hasta que no vare su valor. Ejemplo
3

-->x=y;
-->y=3;

-->x=(x+3/x)/2
x =
2.

->2*3+4^5-6/7
ans =
1029.1429

Para escribir la siguiente ecuacin


( sen ( x ) )2 + ( cos ( x ) )2 =1 , con x inicial=2

-->x=(x+3/x)/2
x =
1.75

Entre operadores de igual prioridad,


se utiliza el orden de izquierda a
derecha.
Porejemplo,
2*3+4^5-6/7
es
equivalente a ((2*3)+(4^5))-(6/7).

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

En una misma lnea de Scilab puede


haber varias rdenes o instrucciones.
stas deben estar separadaspor coma
o por punto y coma. Por ejemplo,
-->t1=2, t2=3; dt=t2-t1

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

Otra funcin matemtica, sta ya con


dos parmetros de entrada, es
modulo. Sus dosparmetros deben ser
enteros. El resultado es el residuo de
la divisin entera.
modulo(17,5)da como resultado 2.
-->modulo(17,5)
ans =
2.

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

1 , sus nombres son:

%e , %pi , %i . Observeque dos de


estas variables aparecieron al utilizar
who.
Despus
de
la
siguiente
asignacin,
la variable r tendr el valor -1.
-->r = log(1/%e)
r =
- 1.

Otras operaciones
-->exp(3)
ans =
20.08553692318766792368
-->t=log(ans)
t =
3.

String o cuerdas
-->x="hola, "
x =
hola

format(v) o format(v,10) regresar al


formato inicial, el formato variable
(el predefinido por Scilab)

-->y="cmo ests?"
y =
cmo ests?

Scilab tiene predefinidas algunas


constantes especiales cuyos nombres
estn precedidosdel signo % . Para los

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

Pero si desea una ayuda acerca de alguna funcin o comando, al teclear lo


siguiente mostrar una ventana con informacin correspondiente.
-->helpfloor

10
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx

se desea buscar sobre


ejemplo:apropospolynomial

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

imult multiplicacin por el i, la unidad imaginaria


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 tambin para los complejos, por ejemplo, sin, cos,
log, ...

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

-->z = 3 + 4*%i; r = sin(z)


r =
3.853738 - 27.016813i

-->real(y)
ans =
1.
-->imag(y)

Finalmente se verifica la igualdad por


Scilab de (1+i)(1-i) = 1-i2 = 2

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

Cul es el resultado de las siguientes


operaciones?, piense antes de hacerlo
en Scilab.
2
2
2
2

*3+4
+3*4
/3+4
+3/4

Usando parntesis, cul es el


resultado
de
las
siguientes
operaciones?, piense antes de hacerlo
en Scilab.
2 * (3 + 4)
(2 + 3) * 4
(2 + 3) / 4
3 / (2 + 4)
Usando algunas funciones, cul es su
resultado?
sqrt (4)
sqrt (9)

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.

Se pueden usar espacios en blanco para separar valores de renglones y columnas,


al escribir el siguiente rengln 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
-->4 5 6]
a =
1. 2. 3.

4.

5.

6.

Algunas funciones de matrices:


-->A=ones(2,3)

13
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx

A =
1.
1.

1.
1.

1.
1.

Matriz vaca 0x0, borra el contenido


de la matriz y libera la memoria.
-->b=[]
b =
[]
El comando size regresa el total de
renglones, nr y el total de columnas,
nc, nr, nc>1
-->[nr,nc]=size(A)
nc =
3.
nr =
2.

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.

Un vector: i:j, v=2:4, v=i:s:j donde


s es el incremento
-->v=2:4
v =
2. 3.

4.

-->v=3:2:10
v =
3. 5. 7. 9.
-->v=3:2:10
v =
3. 5. 7. 9.

Accesando a los elementos de la


matriz.

-->v=10:-2:3
v =
10. 8. 6. 4.

A toda la matriz, A, a los


elementosde A, su sintaxis esA(i,j),
para un rango determinado se usa el
operador :

-->v=3:-2:10
v =
[]

La siguiente sintaxis sirve para indicar elemento inicial i, k, su incremento s, t,


elemento final j, l, para rengln y columna, A(i:s:j,k:t:l).

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

Usando nmeros aleatorios tenemos:


-->A=rand(3,3)
A =
0.4573049 0.4126882
0.1952018 0.7140648
0.3230850
0.6898754
-->A([1 2],:)
ans =

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.

-->//matriz diagonal superior LU


-->mlu=triu(a)
mlu =
1. 2. 1.
0. 4. 2.
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

Sistema de ecuaciones, resolucin por el mtodo 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
X X X =
1 2
3 bi
4 -9 2 5
2 -4 6 3
1 -1 3 4
*Se calcula la inversa del sistema considerando nxn, sin el bi
17
Ernesto Caldern C. metodosnumericosfq@yahoo.com.mx

* Multiplicamos la matriz rectangular inicial por la matriz inversa = da la solucin


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.
Despus podemos calcular las races de dicho polinomio, como tambin puede
escribir un polinomio en particular.

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)

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


datos es la tabla de valores leda de archivos o asignada
gsort(datos) ordena la tabla sin respetar apareamiento (ordena cada columna)
lex_sort(datos,#decolumna) ordena la columna elegida respetando
apareamiento (rengln correspondiente con sus respectivas columnas)

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.

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 tpicos de programacin 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
solucin de un problema.
Pasos de programacin
Tarea o enunciado del problema
Modelo matemtico
Requerimiento de datos
Algoritmo: se puede expresar mediante pseudocdigos o diagramas de flujo
Codificacin (cualquier lenguaje)
Resultados y anlisis
Algunos comando de programacin
Actividades bsica:
* lectura de datos: en Scilab, se puede usar mediante la asignacin 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 mens: select_case_else_end
Circuito de clculo: 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 funcin antes de llegar a la ltima orden.
Todos los parmetros de salida o resultados deben estar definidos con
anterioridad.
Otra orden que sirve para interrumpir una funcin, en este caso interrumpiendo la
evaluacin, es abort.
Actividades bsicas
Lectura de datos: desde la consola, desde un script o desde un archivo, asignando
valores a la variable de entrada, avalor1 o Aleer archivo(valor1, valor2,).
a=2.34

datos1=read(data.csv,-1,2);

x=input(mensaje,s);

x=input(mensaje)

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 algn 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
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 nmero entre 2 y el residuo es 1 el nmero es non, si el residuo es 0 el nmero
es par.
En un script escribiremos lo siguiente (recuerde guardar el archivo despus de
escribirlo y antes de correrlo) :
//para determinar si un nmero 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 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

//se corre el archivo desde el editor del Scilab


El texto escrito sera:
//para determinar si es par o non un nmero dado
if modulo(a,2)=0 then
disp(el nmero +string(a)+ es par)
else
disp(el nmero +string(a)+ es non)
end
Tambin se puede correr/ejecutar en la consola, el primero se le escribe hasta
arriba el clc
el nmero 4 es par
-->exec('F:\c\cursoscilab\ejemplos\parnon.sce', -1)
el nmero 4 es par

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


-->a=9;

-->exec('parnon.sce',-1);
el nmero 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.


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

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

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
//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 vlido, slo 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 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.

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 clculos 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
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 ejecucin:
-->exec('F:\d\tabla_frecuencias.sce', -1)
datos leidos y guardados en variables pesuno, pesdos,...
estadstica bsica 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);
write(u,i5);
file('close',u);
disp("datos guardado en hola.xls con formato de texto")
Resultado de la ejecucin:
-->exec('F:\d\guardar_resultados.sce', -1)
datos guardado en hola.xls con formato de texto

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.

Sintaxis con un resultado de salida y varios parmetros de entrada


function resultado = nombrefuncion(par1, par2, ...)
actividades
resultado=actividad
endfunction
Sintaxis usando varios resultados de salida y varios parmetros de entrada
function [res1, res2, ...] = nombrefuncion(par1, par2, ...)
actividad1

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

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


-->x=0:10;

-->plot(x,f(x));

Tambin se puede crear de la siguiente manera:


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

Escribiendo una funcin 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 funcin.

//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 funcin, 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 ejecucin:
-->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 ejecucin:
-->funcprot(0);

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

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 operacin 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 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 modelos matemticos:

( x x1)( x x 2)( x x3)


( x x 0)( x x 2)( x x3)
( x x0)( x x1)( x x3)
( x x 0)( x x1)( x x 2)
f ( x0)
f ( x1)
f ( x2)
f ( x3)
( x0 x1)( x 0 x 2)( x0 x3)
( x1 x0)( x1 x 2)( x1 x3)
( x 2 x0)( x 2 x1)( x 2 x3)
( x3 x0)( x 3 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 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]

Ejemplo, escritura y ejecucin en la consola de Scilab, si vamos a usar la funcin


finter2(x,y,xin) se necesitarn 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 reescribindolas en una nueva variables xx, yy xin=6 para


la funcin 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)
yy2 =
0.4

Separando variables y reescribindolas en una nueva variables x3, y3 xin=6 para


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

Solucin de ecuaciones no lineales

f(x) = a0 + a1 x +a2 x2 + a3 x3 + anxn= 0 , si f(x)=0 entonces x es raz


Ejemplos:

x2 2x 3 0

deff(nombre_funcion,funcion) : para definir una funcin 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 ecuacin
no lineal se resuelve con el solve. Si se tiene mayor nmero de incgnitas en una
ecuacin, puede que no de un buen resultado. (verificar la operacin de manera manual
paso a paso o con cualquier paquete matemtico). Usar otro mtodo de optimizacin.
Nota respetar la asignacin de variable de salida
deff(y=f(x), y=x^2-2*x+3);
fsolve(0,f)

Verificacin manual de la ecuacin de segundo grado

x 1,2=

x2 2x 3 0
b b24 ac
,
2a

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

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

Integracin

lim

Ejemplo de integracin definida

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.

Ecuacin diferencial ordinaria de primer orden. EDO


Representacin matemtica, de la EDO o en ingls ODE.
dy
= y ' =f ( x , y )
dx

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 2A. Imagen de la continuacin de la creacin del acceso directo

Figura 3A. Imagen de la continuacin de la creacin del acceso directo

Figura 4A. Imagen de la


continuacin
de
la
creacin
del
acceso
directo.

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

Vous aimerez peut-être aussi