Está en la página 1de 76

Computacion en Ingeniera de Procesos

1. Introduci
on a Scilab

Enero, 20 de 2012

Computaci
on en Ingeniera de Procesos

1 / 76

Contenido
1
2

Introduccion a la modelizaci
on y computaci
on
Introduccion a Scilab
2.1
2.2
2.3
2.4
2.5

3
4

Graficos con Scilab


Programacion en Scilab
4.1
4.2
4.3
4.4
4.5

Aspectos basicos
Instalaci
on de Scilab
Iniciando una sesi
on de Scilab
Scilab basico
Vectores y matrices

Scripts
Funciones
Estructuras selectivas
Estructuras repetitivas
Ruptura de ciclos y salida

Lectura y escritura de datos

Computaci
on en Ingeniera de Procesos

2 / 76

1. Introduccion a la modelizacion
y computacion

Computaci
on en Ingeniera de Procesos

3 / 76

1. Introduccion a la modelizacion y computacion


La modelizaci
on matematica y simulaci
on numerica se han convertido en
dos campos muy activos en la ingeniera qumica, y otros ambitos de
ciencias ingeniera y, complementarios entre s ya menudo confundidos
por muchos.
En la modelizaci
on matematica, varios fen
omenos se pueden representar
mediante leyes fsicas y qumicas a traves de conjuntos de ecuaciones
fuertemente acoplados. Estos pueden ser:
I
I
I
I

sistemas de ecuaciones lineales,


sistemas de ecuaciones no lineales,
ecuaciones diferenciales,
ecuaciones en derivadas parciales, etc.

La mayora de modelos matem


aticos en la ingeniera qumica implica una
combinaci
on de :
I
I
I
I
I

balance de masa,
balance de energa,
balance del momento,
ecuaciones del equilibrio,
ecuaciones cineticas, ecuaciones de estado

Computaci
on en Ingeniera de Procesos

4 / 76

1. Introduccion a la modelizacion y computacion


Es difcil de obtener soluciones analticas para muchos modelos utilizados
en la ingenieria qumica.
Hoy, con la llegada de los ordenadores muy potentes, las herramientas
disponibles para resolver estos modelos han tomado una nueva direcci
on.
La simulaci
on numerica es una herramienta que se utiliza para resolver
estos complejos sistemas de ecuaciones acoplados.
Software com
un en la ingeniera qumica:
Software mat
ematico:

Software de simulaci
on:

Matlabr ,

ProSimPlusr

Scilab

AspenPlusr , Hysisr

Matematicar

Fluentr

Mapler ,

OpenFOAM

etc.

etc.

Computaci
on en Ingeniera de Procesos

5 / 76

1. Introduccion a la modelizacion y computacion


Ejemplo 1:

Ecuaciones Lineales - El balance de masa de una planta

Un sistema de recuperaci
on de acetuna del aire se muestra en la figua abajo. En una columna de absorci
on se
absorbe la acetona en agua a raz
on de Ai de aire seco de un 8% de riqueza en acetona y un flujo de entrada de
agua W . El aire se satura de agua (3%) y el agua que sale de la torre de absorci
on y que contiene la acetona se
trata en un separador flash. Del separador, la fracci
on de vapor que se lleva al condensador contiene V de acetona,
mientras que la fracci
on que no se aprovecha contiene un 3%. la composici
on de la corriente de vapor, V , y la
corriente del lquido, L, que sale del separador flash estan relacionadas por
y = 20.5 x

Aire, A0
3% Agua

Agua, W

Acetona recuperada, V
al condensador

Absorbedor

Separador Flash
x = 0.03
Residuos acuosos, L

Aire, Ai
8% de acetona

Computaci
on en Ingeniera de Procesos

6 / 76

1. Introduccion a la modelizacion y computacion

donde
x: la facci
on masica de acetona en el flujo de vapor a la salida
y : la facci
on masica de acetona en el flujo del lquido a la salida
El balance de materia:
aire: 0.92Ai = 0.97A0
acetona: 0.08Ai = y V + 0.03L
agua: W = 0.03A0 + (1 y )V + 0.97L
Para Ai = 600lb/hr y W = 500lb/hr tendremos un sistema algebraico lineal de
tres ecuaciones y tres incognitas A0 , V y L.

Computaci
on en Ingeniera de Procesos

7 / 76

1. Introduccion a la modelizacion y computacion


Ejemplo 2:

Ecuaciones no lineales - Vaporizador Falsh

Una mezcla de hidrocarburos que contiene 25% en moles de n-butano, 45% en moles de n-pentano y 30% en moles
de hexano se separa en un proceso de vaporizaci
on flash simple, como se muestra en la Figura 2. El proceso
funciona a 270 F y 10 atm. Se trata de calcular el flujo del vapor y de los productos lquidos. Las fracciones
molares del vapor y del lquido en la corriente del producto estan relacionadas con
Ki = yi /xi
donde
xi : la facci
on molar del componente i en el lquido
yi : la facci
on molar del componente i en el vapor
V , yi

F = 100 moles/lb
zi

Vaporizador Flash

Componente

F, zi

Ki

xi

yi

n-butano
n-pentano
n-hexano

0.25
0.45
0.30

2.13
0.10
0.30

0.129
0.451
0.456

0.275
0.457
0.268

L, xi

Computaci
on en Ingeniera de Procesos

8 / 76

1. Introduccion a la modelizacion y computacion


El balance total de materia:
F = V +L
El balance de cada componente:
zi F = yi V + xi L
Apartir de la relaci
on del equilibrio:




V
V
xi = zi / 1 + (Ki 1) , yi = Ki zi / 1 + (Ki 1)
F
F
P
P
De la ecuaci
on de Rachford y Rice, i yi i xi = 0, tendremos

f

V
F


=

3
X
i=1

zi (Ki 1)
=0
(Ki 1)(V /F ) + 1

es una ecuaci
on no lineal de tercer grado con la incognita
Computaci
on en Ingeniera de Procesos

V
F

.
9 / 76

1. Introduccion a la modelizacion y computacion


Ejemplo 3:

Ecuaciones diferenciales - concentraci


on en un tanque

Un tanque lleno de fluido con una fracci


on x de un cierto componente se utiliza para amortiguar las fluctuaciones
de concentraci
on a la entrada de un reactor particularmente sensible. Se sabe que, a la entrada del tanque, el flujo
es constante en el tiempo pero la concentraci
on del componente vara oscilatoriamente.
xi = xi0 (1 + b sin t)
y que el nivel del fluido se mantiene constante. Se pregunta cu
al es la composici
on a la salida del tanque, y c
omo
podemos garantizar que las fluctuaciones de x no superen el valor 1% a la entrada del reactor.

I : Input o entrada
O: Input o salida
m: la masa
xi : la facci
on masica del componente en el flujo
a la entrada

I , xi
O, x0

xO : la facci
on masica del componente en el flujo
a la salida

x, m

Computaci
on en Ingeniera de Procesos

10 / 76

1. Introduccion a la modelizacion y computacion


El balance total de materia:
I O =

dm
,
dt

m= constante (I = 0)

(1)

El balance de cada componente:


d(xm)
= xi I x0 O + G
dt
donde G es la generaci
on del componente x y t es el tiempo.
En el tanque
m

dx
= xi I x0 O = (xi x)I
dt

(2)

Es una ecuaci
on diferencial (2). Es conveniente (necesario) calcular una
soluci
on numerica de las ecuaciones si I , m, o xi varian de un modo complicado
con el tiempo.

Computaci
on en Ingeniera de Procesos

11 / 76

2. Introduccion a Scilab

Computaci
on en Ingeniera de Procesos

12 / 76

2.1. Aspectos basicos

Scilab es un sistema de analisis numerico


Proporciona una lnea de comandos interactivas para resolver
problemas matematicos numericamente.
Incluye una colecci
on de algoritmos y funciones matematicas.
Pretende ser similar al Matlab.
Computaci
on en Ingeniera de Procesos

13 / 76

2.1. Aspectos basicos


Ventajas:
I
I

I
I
I

Sencillo de utilizar
Software libre: se distribuye bajo la licencia GNU, GPL
(General Public Licence)
C
odigo abierto: amplia comunidad de soporte (foros, etc.)
Tiene su propio lenguaje de pogramaci
on estructurada
Sintaxis bastante similar a Matlab

A diferencia de Matlab y otros lenguajes de programaci


on ...
I

I
I

Matlab tiene una mejor integraci


on con otros lenguajes de
programaci
on y programas tales como C, C++ y Excel.
Capacidad de graficos (GUIs) limitada en comparacion con el
Matlab
Menos toolboxes disponibles
No dispone de los miliones de una compa
nia como
MathWorks, Inc.

Computaci
on en Ingeniera de Procesos

14 / 76

2.2. Instalacion de Scilab

Para descargar y instalar el Scilab:


http://www.scilab.org/
Para los sistemas operativos GNU/Linux (distribuciones
basadas en debian, por ejemplo: ubuntu 10.10):
youssef@aleph:~$ sudo apt install scilab

Windows y Mac OSX:


http://www.scilab.org/products/scilab/download

Computaci
on en Ingeniera de Procesos

15 / 76

2.2. Instalacion de Scilab

Computaci
on en Ingeniera de Procesos

16 / 76

2.2.Iniciando una sesion de Scilab

Las ventanas de trabajo de Scilab:


Ventana de comandos:
I
I

Entrar comandos y datos


Imprimir resultados

Ventana de gr
aficos:
I

Se muestran graficos

Ventana del editor:


I

Para editar programas

Computaci
on en Ingeniera de Procesos

17 / 76

2.2.Iniciando una sesion de Scilab - Primeros ejemplos:


--> x=3+5-0.2
x =
7.8
--> y=3*x2 + 5
y =
187.52
--> z=x*sqrt(y)
z =
106.81159
--> A=[1 2 3; 4 5 6]
A =
1. 2. 3.
4. 5. 6.
--> b=[3;2;5]
b =
3.
2.
5.
--> C=A*b
C =
22.
52.

--> who user


Las variables de usuario son:
C
b
A
z
y
x
Usando 35 elementos de 4990767
--> whos -type constant
Nombre
Tipo
A
constant
b
constant
C
constant
x
constant
y
constant
z
constant

Tama~
no
2 por 3
3 por 1
2 por 1
1 por 1
1 por 1
1 por 1

home

Bytes
64
40
32
24
24
24

--> save(work1.dat) para guardar todo en el


fichero work1.dat

Computaci
on en Ingeniera de Procesos

18 / 76

2.2.Iniciando una sesion de Scilab


Sintaxis de Scilab
Evitar reglas complicadas
Tal vez lo mas importante a recordar es punto y coma (;)
evita la impresion en pantalla de la salida del comando
La instruccion diary guarda/termina una sesion de Scilab
Manejar el entorno de Scilab
ls lista de ficheros del directorio actual (como Unix, Linux)
pwd devuelve el nombre y path del directorio actual
cd para cambiar de directorio
who, whos para ver las variable las variables activas
clear para eliminar todas las variables de la memoria
clc borrar la ventana de comandos
clf borrar la ventana de gr
aficos
save guarda el entorno de trabajo
load cargar el entorno de trabajo desde un archivo de disco
abort CTRL-C
Computaci
on en Ingeniera de Procesos

19 / 76

2.3. Iniciando una sesion de Scilab


Documentaci
on y ayuda
Para encontrar el uso de cualquier funci
on, escriba
--> help function name
Por ejemplo,
--> help sum
Si quiere encontrar las funciones que no sabe, escriba
--> help
y puedes b
uscar las palabras claves de las funciones.
Por u
ltimo, si desea obtener m
as informaciones puedes visitar la p
agina
web de Scilab.

Computaci
on en Ingeniera de Procesos

20 / 76

2.4.Scilab basico

Variables
Las compomenentes basicas del Scilab son vectores o matrices.
Todas las operaciones estan optimizadas para el uso de vectores.
Scilab siempre trabaja con:
I
I
I

n
umeros reales de doble precisi
on
n
umeros complejos
cadenas de caracteres

Computaci
on en Ingeniera de Procesos

21 / 76

2.4. Scilab basico - Variables


Variables: es el nombre que se da a un entidad numerica (matriz, vector,
o escalar).
Su valor se coloca a la izquierda del operador de asignaci
on

variable = expresi
on
--> base=3
base = 3

--> cadena=hola; a=3;


.

--> alt=4
alt = 4

--> cadena
cadena = hola

--> area = base*alt


area = 12

--> a=2*a
a = 6

--> perim = 2*base + 2*alt


perim = 14

--> area == 2*a


ans = T

Computaci
on en Ingeniera de Procesos

22 / 76

2.4. Scilab basico - Variables predefinidas


Variable
ans
%pi
%e
%i
%eps
%inf
%nan

Uso
almacena el u
ltimo resultado
almacena el valor de = 3.1415927
almacena el valor de e= 2.7182818
almacena el valor de 1
epsilon de la m
aquina
infinito
resultado no n
umerico (not a number)

--> %pi
%pi =
3.1415927

--> %eps
ans =

--> %e
%e =
2.7182818

--> log(%e)
ans =
2.220446049D-16

--> format(16)
--> %e
%e =
2.718281828459

--> sqrt(-1)
ans =
i

Computaci
on en Ingeniera de Procesos

23 / 76

2.4. Scilab basico - Algunos operadores artimeticos


Operador

/
*
+
pmdulo

Operaci
on
Potencia
Divisi
on
Multiplicaci
on
Suma
Resta
M
odulo

Ejemplo
23
6/3
2*3
2+3
2-3
pmodulo(17,3)

Resultado
8
2
6
5
-1
2

--> 2+3
ans =
5.

--> (2+3)*4
ans =
20.

--> 2+3*4
ans =
14.

--> pmodulo(17,3)
ans =
2.

Computaci
on en Ingeniera de Procesos

24 / 76

2.4. Scilab basico - Operadores relacionales


Operador
==
=
<
>
<=
>=

Operaci
on
Igual
Diferente de
Menor que
Mayor que
Menor o igual que
Mayor o igual que

Ejemplo
4==5
2 = 3
10 < 3
5 > 4
7 <= 7
3.5 >= 10

Resultado
F
T
F
T
T
F

--> 1+2>7-3
ans =
F

--> 1>2==(2<3)
ans =
F

--> 1<2<3
ans =
T

--> 3>4<5
ans =
T

--> 1>2==2<3
ans =
T

--> 2(2/3) < 3(3/4)


ans =
T

Computaci
on en Ingeniera de Procesos

25 / 76

2.4. Scilab basico - Operadores logicos (booleanos)


Operador
&
|

A
F
F
T
T

B
F
T
F
T

A&B
F
F
F
T

A|B
F
T
T
T

Operaci
on
y
o
negaci
on

AB
T
T
F
F

--> 0&1|1
ans =
T

--> 0&(1|1)
ans =
F
Computaci
on en Ingeniera de Procesos

Ejemplo
2&3
3|5
7

Resultado
T
T
F

Operador
()

*,/,fix
==,=, <, >, <=, >=

&
|

Jerarqua
(mayor)

(menor)

--> 5*4>0&4<3
ans =
T
-->
2(3&0/5)>pmodulo(45,6)
ans =
F
26 / 76

2.4. Scilab basico - Funciones matematicas


Funci
on
sqrt(x)
exp(x)
log(x)
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)

Uso
calcula la raz cuadrada de x
funci
on exponencial
funci
on logaritmo natural
calcula sen(x)
calcula cos(x)
calcula tan(x)
calcula sen1 (x)
calcula cos1 (x)
calcula tan1 (x)

--> cos(%pi)
ans =
- 1.

--> cos(1)2 + sin(1)2


ans =
1.

--> exp(1)
ans =
2.7182818

--> log(%e)
ans =
1.

--> 4.0*atan(1)
ans =
3.1415927

--> 2*sin(3*%pi/2)
ans =
- 2.

Computaci
on en Ingeniera de Procesos

27 / 76

2.4. Scilab basico - Intrucciones de entrada/salida


Salida de datos:
disp("texto")
printf(cadena de formato, arg1, ...)

--> disp("!
!

Entero
Punto fijo
Punto flotante
Caracter
Cadena de caracteres

d, i
f, g
e
c
s

hola, mundo !")

hola, mundo !

--> m = 3;
--> disp(m)
3.
--> pulg=2.54; cent=6.4516;
--> printf(%d pulgadas equivalen a %f cent
metros \n, m, cent)
-->
3 pulgadas equivalen a 6.451600 cent
metros

--> printf(%f pulgadas equivalen a %e cent


metros \n, pulg, cent)
-->
2.54000 pulgadas equivalen a 6.451600e+00 cent
metros
Computaci
on en Ingeniera de Procesos

28 / 76

2.4. Scilab basico - Intrucciones de entrada/salida


Entrada de datos por teclado:
input("texto")
input("texto","s")
--> palabra = input(Ingresa una palabra:
--> Ingresa una palabra: casa
--> palabra =
-->
casa

,s)

--> letras = input(Ingresa el n


umero de letras:
--> Ingresa el n
umero de letras: 4
--> pletras =
-->
4.

--> printf(La palabra %s tiene %d letras , palabra, letras);


-->
La palabra casa tiene 4 letras

Computaci
on en Ingeniera de Procesos

29 / 76

2.5. Vectores y matrices


Notaciones
Variables escalares: son n
umeros enteros, reales o complejos, los
denotamos en min
usculas:
a.b, c, d, x, y , . . .
Matrices: son arreglos rectangulares de escalares, las denotamos en
may
usculas:
A, B, C , X , Y , Z , . . .
a11
a21

..
.
A =
ai1

.
..
am1

a12
a22
..
.
ai2
..
.
am2

a1j
a2j
..
.
aij
..
.
amj

Computaci
on en Ingeniera de Procesos

..
.

..
.

a1n
a2n

..
.

ain

..
.

A = (aij )mn ,
i:fila, j:columna

amn

30 / 76

2.5. Vectores y matrices

a11
a21

.
.
.
A =
ai1

..
.
am1

a12
a22
..
.
ai2
..
.
am2

a1j
a2j
..
.
aij
..
.
amj

..
.

..
.

a1n
a2n

..

ain

..
.
amn

vector fila: matrices que consisten de una sola fila


Fila i-
esima de A:


Ai = ai1 ai2 ain
--> A(i,:)
vector columna: matrices que consisten de una sola columna
Columna j-
esima de A:

a1j
a2j

Aj = .
--> A(:,j)
..
amj
vector: vector columna
Computaci
on en Ingeniera de Procesos

31 / 76

2.5. Vectores y matrices - Ejemplos


--> x = [8 6 -4 7]
x =
8. 6. -4.

7.

--> y = [1; 6; 8]
y =
1.
6.
8.
--> x(1,3)
ans =
- 4.
--> n=length(x) el n
umero de
elementos de x
n =
4

Computaci
on en Ingeniera de Procesos

--> x(3)
ans =
- 4.
--> x(3,1)
!--error 21

Indice inv
alido
--> y(2,1)
ans =
6.
--> y(2)
ans =
6.

32 / 76

2.5. Vectores y matrices - Ejemplos


Ejemplo:

2
A= 1
2

3
0
4

5
3
6

3
7 = a11 = 2, a34 = 1, etc
1

en Scilab:
--> A = [2 3 5 -3; 1 0 3 7; -2 4 6 1]
--> A =
2. 3. 5. -3.
1. 0. 3. 7.
-2. 4. 6. 1.
--> A(3,4)
ans =
1.
--> A(1,3)
ans =
2.
--> A(2:3,:)
ans =
1. 0. 3. 7.
-2. 4. 6. 1.
Computaci
on en Ingeniera de Procesos

--> A(:,2:3)
ans =
3. 5.
0. 3.
4. 6.
--> [m, n] = size(A)
devuelve el numero de filas y
columnas
m =
3
n =
4

33 / 76

2.5. Vectores y matrices - Comandos para manipulacion de


matrices
Comando
inicio:incremento:final
linspace(inicio,final,n)
zeros(m,n)
ones(m,n)
rand(m,n)
eye(n,n)
--> a = 0:0.25:1
a =
0. 0.25 0.5 0.75 1.
--> b = linspace(0,1,5)
b =
0. 0.25 0.5 0.75 1.
Computaci
on en Ingeniera de Procesos

Descripci
on
Crea vector fila con sus elementos
igualmente espaciados
Crea vector fila con igualmente
n elementos espaciados
Crea matriz de puros ceros con
m filas y n columnas
Crea matriz de puros unos con
m filas y n columnas
Crea matriz m n con
entradas aleatorias
Crea una matriz identidad n n
--> c
c =
0.
0.
--> d
d =
1.
1.

= zeros(3,2)
0.
0.
= ones(2,3)
1.
1.

1.
1.
34 / 76

2.5. Vectores y matrices - Funciones sobre vectores


Comando

Descripci
on

length(x)
[m,n] = size(X)
matrix(X,m,n)
max(x)
max(X,r)
min(x)
min(X,r)

Retorna
Retorna
Retorna
Retorna
Retorna
Retorna
Retorna

-->Q = matrix(t,2,3)
Q =

-->t = 1:6
t =
1.

2.

3.

4.

5.

6.

-->length(t)
ans =

1.
2.

2.

-->u = ones(2,3)
u =
1.
1.

1.
1.

-->[m,n] = size(u)
n =

5.
6.

3.
=

4.

6.

-->max(Q)
ans =
6.
-->min(Q,r)
ans =
1.

3.
4.

-->max(Q,r)
ans =

6.

1.
1.

el n
umero de elementos de un vector x
el n
umero de filas y columnas de una matrix X
una matriz m n con elementos tomados de X
el mayor elemento de un vector x
vector fila con los elementos mayores de cada columna de X
el menor elemento de un vector x
vector fila con los elementos menores de cada columna de X

3.

5.

-->min(Q)
ans =

2.
1.
Computaci
on en Ingeniera de Procesos

35 / 76

2.5. Vectores y matrices - Algebra de matrices


-->X = [1 0 -1; 2 -3 5]
X =
1.
2.

0.
- 3.

- 1.
5.

-->Y = [-2 3 1; 2 4 -5]


Y =
- 2.
2.

3.
4.

1.
- 5.

3.
1.

0.
0.

3.
0.
4.

5.
3.
6.

- 3.
- 7.

- 2.
10.

0.
- 6.

- 2.
10.

-->2*X
ans =

-->-3*Y
ans =

-->A = [2 3 5 -3; 1 0 3 7; -2 4 6 0]
A =
2.
1.
- 2.

3.
0.

2.
4.

-->X+Y
ans =
- 1.
4.

-->X-Y
ans =

- 3.
7.
0.

6.
- 6.

- 9.
- 12.

- 3.
15.

-->2*X-3*Y
ans =
8.
- 2.

- 9.
- 18.

- 5.
25.

-->A + X
!--error 8

Computaci
on en Ingeniera de Procesos

36 / 76

2.5. Vectores y matrices - Algebra de matrices


-->P
ans =

-->M = [1 2; 3 4; 5 6]
M =
1.
3.
5.

1. + 4.i
- i
2.

2.
4.
6.

-->D = diag ([1, 2, 3])


D =

-->M
ans =
1.
2.

3.
2. - i
0

3.
4.

1.
0.
0.

5.
6.

-->N = [1; 3; 0; 5]
N =

0.
2.
0.

0.
0.
3.

-->clear, clc
-->x = [2 4 -2];

1.
3.
0.
5.

-->y = [1; 2; 3];


-->x*y
ans =

-->N
ans =

4.
1.

3.

0.

5.

-->P = [1-4*%i %i 2; 3 2+%i 0]


P =
1. - 4.i
3.

i
2. + i

2.
0

Computaci
on en Ingeniera de Procesos

-->S = y*x
S =
2.
4.
6.

4.
8.
12.

- 2.
- 4.
- 6.
37 / 76

2.5. Vectores y matrices - Producto de matrices


Operaci
on
Multiplicacion
Potencia

Matriz
*

-->T = [1 2 3; 3 4 5]
T =
1.
3.

2.
4.

3.
5.

-->S*T
!--error 10
Multiplicaci
on inconsistente.

56.
104.

- 28.
- 52.

-->R = [1 2 3; 4 5 6; 8 9 0]
R =
1.
4.
8.

-->R.*S
ans =
2.
16.
48.

2.
5.
9.

3.
6.
0.

Computaci
on en Ingeniera de Procesos

8.
40.
108.

- 6.
- 24.
0.

-->R.^3
ans =
1.
64.
512.

-->T*S
ans =
28.
52.

Elemento a elemento
.*
.

8.
125.
729.

27.
216.
0.

-->x.*x
ans =
4.

16.

4.

16.

4.

-->x.^2
ans =
4.

38 / 76

3. Graficos con Scilab

Computaci
on en Ingeniera de Procesos

39 / 76

3.1 Graficos en 2D con Scilab


Scilab dispone de dos funciones b
asicas para crear gr
aficos 2-D:
plot(): crea un gr
afico a partir de vectores y/o columnas de matrices,
con escalas lineales sobre ambos ejes.
plot2d(): crea un gr
afico con escala lineal o logartmica, seg
un las
opciones le demos.
Existen adem
as otras funciones que podemos utilizar con plot o plot2d:
title(ttulo) a
nade un ttulo al dibujo
xtitle, ytitle a
nade un ttulo a los ejes
legend()
xgrid
xgrid(off) desaparece xgrid

Computaci
on en Ingeniera de Procesos

40 / 76

3.1 Graficos en 2D con Scilab


El conjunto b
asico de argumentos de la funci
on plot es una tripleta formada
por dos vectores y una cadena de 1, 2 o
3 caracteres que indica: el color y el
tipo de lnea o de marker.

-->
-->
-->
-->
-->

clf()
t = (0:1/20:2)*%pi;
y = sin(t);
plot(t,y,ro-)
xtitle("sin(t) versus t")

La funci
on clf cierra la figura activa.
Computaci
on en Ingeniera de Procesos

41 / 76

3.1 Graficos en 2D con Scilab


La funci
on plot() permite tambien dibujar m
ultiples curvas. En este caso,
cada uno de los segundos vectores se dibujan en ordenadas como funci
on de los
valores del primer vector de la pareja, que se representan en abscisas.

-->
-->
-->
-->

clf()
x = linspace(0,6*%pi,50);
y=sin(x); z=cos(x);
plot(x,y,ro-,x,z,bd-)

Computaci
on en Ingeniera de Procesos

42 / 76

3.1 Graficos en 2D con Scilab


En la tabla siguiente se pueden observar las distintas posibilidades:
Smbolo
y
m
c
r
g
b
w
k

Color
yellow
magenta
cyan
red
green
blue
white
black

Smbolo
.
o
x
+
?
s
d

Marcadores
puntos
crculos
marcas en x
marcas en +
marcas en ?
marcas cuadradas
marcas en diamantes
tri
angulo

El comando plot puede utilizarse tambien con matrices como argumentos. Ejemplos:
plot(A): dibuja una lnea por cada columna de A en ordenadas, frente al ndice
de los elementos en abscisas
plot(x,A): dibuja las columnas (o filas) de A en ordenadas frente al vector x en
abscisas. Las dimensiones de A y x deben ser coherentes
plot(A,x): dibuja las columnas (o filas) de de A en abscisas, frente al valor de
x en ordenadas
plot(A,B): dibuja las columnas de B en ordenadas frente a las columnas de A
en abscisas, dos a dos. Las dimensiones deben coincidir.
Para mas informaciones presione: help plot.
Computaci
on en Ingeniera de Procesos

43 / 76

3.1 Graficos en 2D con Scilab


Con el comando subplot(m,n,i) una ventana gr
afica se puede dividir en m
particiones horizontales y n verticales, con objeto de representar m
ultiples gr
aficos en
ella. Cada una de estas subventanas tiene sus propios ejes, aunque otras propiedades
son comunes a toda la figura.

--> x=0:0.01:10; y=sin(x);


z=cos(x); w=exp(-x*.1).*y;
v=y.*z;
--> subplot(2,2,1), plot(x,y)
--> subplot(2,2,2), plot(x,z)
--> subplot(2,2,3), plot(x,w)
--> subplot(2,2,4), plot(x,v)

La funci
on clf(n) cierra la ventana o figura n
umero n.
Computaci
on en Ingeniera de Procesos

44 / 76

3.2 Graficos en 3D con Scilab

La primera forma de gr
afico 3D es la funci
on plot3d. Esta funci
on dibuja una
superficie en 3 dimensiones.

-->
-->
-->
-->
-->
-->

cfl()
x = -3:3;
y = x;
[xc yc] = meshgrid(x,y)
z = 9 - (x.2 + y .2 );
plot3d(x,y,z);

Otras funciones: grayplot, contour2d, plot3d1.

Computaci
on en Ingeniera de Procesos

45 / 76

4. Programacion en Scilab

Computaci
on en Ingeniera de Procesos

46 / 76

4.1 Scripts

En Scilab hay dos tipos de programas:


Scripts
Funciones
Un script es simplemente una secuencia de ordenes de Scilab. No tiene
par
amateros (argumentos) de entrada ni de salida. Mientras una funci
on si lo
tiene.
Las variables definidas en un script son globales. En una funci
on dejan de
existir una vez finalizada la ejecuci
on de la funci
on.
Los scripts son archivos de texto plano sin formato, con extensi
on .sce, que
contienen una una sucesi
on de comandos de Scilab.

Computaci
on en Ingeniera de Procesos

47 / 76

4.1 Scripts - Ejemplos de scripts

Computaci
on en Ingeniera de Procesos

48 / 76

4.1 Scripts - Ejemplos de scripts


hola mundo.sce
// Programa Hola mundo en Scilab
printf(Hola mundo );
promedio.sce
// Calcula el promedio de dos numeros reales
// Lee los valores de num1 y num2
num1 = input(Ingrese el primer numero: );
num2 = input(Ingrese el segundo numero: );
// Calcula el promedio y lo almacena en la variable prom
prom = (num1 + num2)/2;
// Imprime los numeros ingresados y su promedio
printf(El promedio de %g y %g es: %g , num1, num2, prom );

Computaci
on en Ingeniera de Procesos

49 / 76

Ejemplo 4.1.1
Escriba un programa (script) en Scilab que tenga como entradas los datos enteros A y
B y escriba el resultado de la siguiente expresi
on:
(A + B)2
3
Soluci
on
INIT

ejemplo411.sce
// Dados dos enteros A y B, calcula (A+B)^2/3

A, B

RES (A + B)2 /3

// Lee los valores de A y B


A = input(Ingrese A: );
B = input(Ingrese B: );
RES = (A+B)^2/3;

RES
// Imprime el contenido de la variable RES:
disp(RES);
FIN

Computaci
on en Ingeniera de Procesos

50 / 76


Ejemplo 4.1.2 (Area
y permetro de un rect
angulo)
Escriba un programa (script) en Scilab tal que dado como datos la base y la altura de
un rect
angulo, calcule su permetro y
area.
Soluci
on
INIT
rectangulo.sce
BASE , ALTURA

AREA BASE ALTURA


PERIMETRO 2 (BASE + ALTURA)

AREA, PERIMETRO

// Dados la base y la altura de un rectangulo, el programa


// alcula su aarea y su perimetro
// Lee los valores de A y B
BASE = input(Ingrese la base: );
ALTURA = input(Ingrese la altura: );
AREA = BASE*ALTURA;
PERIMETRO = 2*(BASE+ALTURA);
printf(El area es %f y el perimetro es %f , AREA, PERIMETRO );

FIN

Computaci
on en Ingeniera de Procesos

51 / 76

4.2 Funciones
Archivos de texto plano sin formato, con extensi
on .sci
Programas que resultan complejos por mediante de scripts, se simplifican por
medio de funciones
Una vez definidas, las funciones se invocan desde la lnea de comandos o desde
un script
Sintaxis de una funci
on
function [out1, out2, ...]
sentencias
endfunction

= nombre(in1, in2, ...)

donde out1 , out2, ... son los valores de retorno; in1, in2, ... son los argumentos de la
funci
on y nombre es el nombre de la funci
on.

cuadrado.sci
function y = cuadrado(x)
// Calcula el cuadrado de un nombre
y = x*x;
endfunction
Computaci
on en Ingeniera de Procesos

-->cuadrado(3)
ans =
9.
-->cuadrado(t)
!--error 4
Variable indefinida: t
52 / 76

4.2 Funciones - Ejemplo de funciones

Ejemplo 4.2.1 (Area


y permetro de un rect
angulo con funciones)
Resuelva el ejemplo (4.1.2) del rect
angulo utilizando funciones.
Soluci
on
rectangulo.sci
function z = cuadrado(x,y)
// Calcula el area de un cuadrado
// de lados x e y
z = x*y;

// Dados la base y la altura de un rectangulo,


// el programa calcula su area y su perimetro
// Lee los valores de A y B
BASE = input(Ingrese la base: );
ALTURA = input(Ingrese la altura: );

endfunction

AREA = BASE*ALTURA;
PERIMETRO = 2*(BASE+ALTURA);

function z = perimetro(x,y)
// Calcula el perimetro de un cuadrado
// de lados x e y

printf(El area es %f y el perimetro es %f , AREA, PERIMETRO );

z = 2*(x+y);
endfunction

Ingrese la base: 2
Ingrese la altura: 3
El area es 6.000000 y el perimetro es 10.000000

Computaci
on en Ingeniera de Procesos

53 / 76

4.2 Funciones - programacion


Scilab soporta una completa lista de herramientas de programaci
on incluyendo:
Estructuras selectivas:
I
I

Estructura selectiva simple: if - end


Estructura selectiva doble: if - else - end

Estructuras repetitivas:
I
I

for - end
while - end

Ruptura de ciclos y salida:


I
I
I

break
continue
return

a continuaci
on analizaremos cada una de estas instrucciones.

Computaci
on en Ingeniera de Procesos

54 / 76

4.3 Estructuras - Estructura selectiva simple

La instrucci
on selectiva determina si una instrucci
on particular se ejecuta
o no, seg
un el cumplimiento de una condici
on (P).
La representaci
on de una estructura selectiva se hace con palabras
(pseudoc
odigo pseudo code) o por medio de una figura geometrica
(diagrama de flujo flowchart).
Sintaxis
No

if P
Instrucciones;

Si

end
donde

Instrucciones

P: condici
on o condiciones a evaluar.
Instrucciones: Instrucciones a
evaluar si la condici
on P es
verdadera.

Computaci
on en Ingeniera de Procesos

55 / 76

4.3 Estructuras - Estructura selectiva doble


La instrucci
on selectiva doble (if else end) permite que el flujo del
diagrama se bifurque por dos ramas diferentes dependiendo del
cumplimiento de una condici
on P.
Si al evaluar la condici
on P el resultado es verdadero, entonces se ejecuta
un conjunto de instucciones; si el resultado es falso se ejecutan otro
conjunto de instrucciones.

Si

No
Sintaxis
if P

Instrucciones1

Instrucciones2

Instrucciones1;
else
Instrucciones2;
end

Computaci
on en Ingeniera de Procesos

56 / 76

4.3 Estructuras - Estructura selectiva anidada

Son estructuras selectivas que contienen a otras estructuras selectivas.

Si

P1

No
Sintaxis
if P1

Instrucciones1

Si

Instrucciones21

No

P2

Instrucciones22

Computaci
on en Ingeniera de Procesos

Instrucciones1;
elseif P2
Instrucciones21;
else
Instrucciones22;
end

57 / 76

4.3 Estructuras - Estructura selectiva anidada


Ejemplo 4.3.1
Realice un algoritmo tal que dado como dato un entero, determine si es par y en caso de no serlo, determine si es
divisble por 3.

Soluci
on
INIT

Si

par.sce

pmodulo(a, 2) == 0

el num
ero
es par

// Determina si un entero es par y en caso


// de no serlo, determina si es divisible
// por 3

No

// Lee entero
a = input(Ingrese un entero: );
Si

pmodulo(a, 3) == 0

El n
umero es
imapr y es
divisible por 3

No

El n
umero es
imapr y no es
divisible por 3

if (pmodulo(a,2) == 0) then
printf(El numero es par );
elseif (pmodulo(a,3) == 0) then
printf(El numero es impar y ...
es divisible por 3 );
else
printf(El numero es impar y ...
no es divisible por 3 );
end

FIN
Computaci
on en Ingeniera de Procesos

58 / 76

4.4 Estructura repetitiva para for


El ciclo para es una estructura de control en la que se puede indicar el n
umero
maximo de iteraciones
Elementos del bucle:
I V: variable de control del ciclo,
VI: valor inicial
I VF: valor final,
ID: incremento o decremento

V VI

V VF

No
Sintaxis

Si
Sentencias

for V=VI:ID:VF
Sentencias;
end

V V + ID

Computaci
on en Ingeniera de Procesos

59 / 76

4.4 Estructura repetitiva para for


Ejemplo 4.4.1
Realice una algoritmo (Scilab) que imprima los enteros desde el 1 hasta 10. No utilice
estructuras repetitivas.
Soluci
on

INIT

1,2,3,4,5
6,7,8,9,10

FIN

Computaci
on en Ingeniera de Procesos

naturales1.sce
disp(1);
disp(2);
disp(3);
disp(4);
disp(5);
disp(6);
disp(7);
disp(8);
disp(0);
disp(10);

60 / 76

4.4 Estructura repetitiva para for


Ejemplo 4.4.2
Resuelva el ejemplo (3.1) utilizando estructuras repetitivas. Implem
entelo en Scilab.
Soluci
on
INIT

i 1

i 10

No
Sintaxis

Si
i

for i=1:10
disp(i);
end

i i +1

FIN
Computaci
on en Ingeniera de Procesos

61 / 76

Ejemplo 4.4.3
Resuelva el ejemplo (4.4.1) que imprima los enteros impares desde 1 hasta 10.
Soluci
on
INIT

i 1

i 10

No
Sintaxis

Si
i

for i=1:2:10
disp(i);
end

i i +2

FIN

Computaci
on en Ingeniera de Procesos

62 / 76

4.4 Estructura repetitiva para for


Ejemplo 4.4.4
Resuelva el ejemplo (4.4.1) que imprima los enteros desde 10 hasta 1.
Soluci
on
INIT

i 10

i 1

No
Sintaxis

Si
i

for i=10:-1:1
disp(i);
end

i i 1

FIN
Computaci
on en Ingeniera de Procesos

63 / 76

4.4 Estructura repetitiva para for

Ejemplo 4.4.5
Realice un algoritmo que sume los n
umeros enteros desde 1 hasta N.
Soluci
on
Datos:
I

N: variable de tipo entero que representa el entero hasta donde


se realiza la suma
SUMA: variable de tipo entero que actua de acumulador;
almacena la suma de los primeros N n
umeros naturales
1 + 2 + ... + N

Variables de salida
I

SUMA

Computaci
on en Ingeniera de Procesos

64 / 76

INICIO

SUMA 0
sumaN.sce

i 1

N = input(Ingrese enteros a sumar: );

i N

No

Si
SUMA SUMA + 1

SUMA = 0;

// inicializa acumulador

for i=1:N
SUMA = SUMA+i;
end
disp(SUMA);

i i +1

SUMA
FIN
Computaci
on en Ingeniera de Procesos

65 / 76

4.4 Estructura repetitiva para for


Ejemplo 4.4.6
El factorial de un n
umero entero no negativo n se define como
n! = 1 2 . . . (n 1) n, con 0! = 1 y 1! = 1
Escriba un algoritmo que calcule el factorial de un entero N 1 e implementelo en
Scilab.
Soluci
on
Datos:
I

N: variable de tipo entero que representa el entero donde se


realiza el producto.
PROD: variable de tipo entero que actuara de acumulador;
almacena el producto de los primeros N n
umeros naturales
1 2 N

Variables de salida
I

PROD

Computaci
on en Ingeniera de Procesos

66 / 76

INICIO

PROD 1
factorial.sce

i 1

N = input(Ingrese enteros a multiplicar: );

i N

No

Si
PROD PROD 1

PROD = 1;

// inicializa acumulador

for i=1:N
PROD = PROD*i;
end
disp(PROD);

i i +1

SUMA
FIN
Computaci
on en Ingeniera de Procesos

67 / 76

4.4 Estructura repetitiva mientras while


La estructura repetitiva mientras es utilizada en un ciclo cuando no sabemos el
n
umero de veces que
este se ha de repetir.
Elementos del bucle:
I EXPRESION: sentencia booleana que determina si se ejecuta el bucle
I INSTRUCCIONES: sentencias a ejecutar si EXPRESION es verdadera

EXPRESION

No
Sintaxis

Si
Instrucciones

Computaci
on en Ingeniera de Procesos

while EXPRESION
INSTRUCCIONES;
end

68 / 76

4.4 Estructura repetitiva mientras while

Ejemplo 4.4.7
Realice un algoritmo que calcule el promedio de los primeros N n
umeros naturales.
Utilice las estructuras repetitivas mientras y para.
Soluci
on
Variables:
I

N: variable de tipo entero, almacena el u


ltimo entero

NUM: variable de tipo entero, almacena uno a uno cada n


umero
a sumar

SUM: variable de tipo entero que actuara de acumulador;


almacena la suma de los naturales

PROM: variable de tipo real, almacena el promedio de los datos

Computaci
on en Ingeniera de Procesos

69 / 76

INICIO

promedio mientras.sce
N = input(Ingrese N: );

N
NUM 1
SUM 0

SUM N

No

Si
SUM SUM + NUM

NUM = 1;
SUM = 0;
while NUM <= N
SUM = SUM + NUM;
NUM = NUM + 1;
end
PROM = SUM/N;
printf(Promedio = %g, \n, PROM);
promedio para.sce

NUM NUM + 1

PROM = SUM/N

PROM

FIN
Computaci
on en Ingeniera de Procesos

N = input(Ingrese N: );
NUM = 1;
SUM = 0;
for i=1:N
SUM = SUM + i;
end
PROM = SUM/N;
printf(Promedio = %g, \n, PROM);
70 / 76

4.4 Estructura repetitiva select


La forma general es:
select variable
case valor1 then
...
...
case valor2 then
...
...
case valor3 then
...
...
...
else
...
Al principio se eval
ua la variable, cuyo resultado debe ser un n
umero escalar o
una cadena de caracteres. Este resultado se compara con las valor, y se ejecuta
el bloque de las sentencias que corresponda con ese resultado. Si ninguno es
igual a variable se ejecutan las sentencias correspondientes a else.
Computaci
on en Ingeniera de Procesos

71 / 76

4.5 Ruptura de ciclos y salida


break:
I
I

Instrucci
on utilizada dentro de un bucle (for o while)
Permite terminar el bucle envolvente mas cercano que lo
contiene

continue:
I
I

Instrucci
on utilizada dentro de un bucle (for o while)
Se utiliza para saltarse parte de una iteraci
on del bucle y
continuar o con la siguiente iteraci
on del bucle (sin salirse)

return:
I
I

Instrucci
on utilizada dentro el cuerpo de una funcion
La instrucci
on return permite salir (retornar) a una funcion
de un ciclo anidado o una estructura selectiva

Computaci
on en Ingeniera de Procesos

72 / 76

5. Lectura y escritura de datos

Computaci
on en Ingeniera de Procesos

73 / 76

5. Lectura y escritura de datos

A vaces es muy u
til almacenar datos en un archivo en el disco para su posterior
consulta. Sobre todo si los datos son grandes o/y tienen muchas informaciones.
Scilab ofrece varias funciones diferentes que se pueden utilizar para escribir y
leer datos. Cada una de ellas est
a dise
nada para una situaci
on particular.
Scilab tiene dos familias de Lectura/Escritura (I/0) de datos: Fortran-I/0 y
C-I/0.
Antes de que uno puede leer o escribir en un archivo, el archivo debe ser
abierto.

Computaci
on en Ingeniera de Procesos

74 / 76

5. Lectura y escritura de datos


Primero hay que abrir el fechero con la instrucci
on :
--> [fid, [err]] = file(open, file-name, [status])
Tiene varios argumentos:
la primera filename es una cadena con el nombre del archivo a abrir
status: el modo del fichero, puede ser new, o old, o unknown
La funci
on file devuelve dos parametros:
fid: se utiliza como un descriptor de archivo
err: un entero, es un indicador de error.
Los archivos que se han abierto con file deben estar cerrados con
close(fid).

Computaci
on en Ingeniera de Procesos

75 / 76

Las funciones read y write sirven para leer y escribir datos en ficheros,
respectivamente
--> [x] = read(file-desc, m, n, format)
donde m y n son las dimensiones de la matriz a leer.
--> write(file-desc, a, k, format)
donde a es cadena con el nombre de la matriz a guardar.
ejemplo.sce
u = file(open,exple1,unknown)
for k=1:4
a = rand(1,4)
write(u,a)
end
file(rewind,u)
x = read(u,2,4)
file(close,u)
disp(x)
Para mas informaciones: help read. Otras instrucciones: writb, readb,
uigetfile, mopen, mclose.
Computaci
on en Ingeniera de Procesos

76 / 76