Manual de Introduccion A Scilab
Manual de Introduccion A Scilab
Manual de Introduccion A Scilab
E.P. DE QUÍMICA
E.P. DE INGENIERÍA QUÍMICA
E.P. DE INGENIERIA AGROINDUSTRIAL
N O T A S DE CURSO
PREPARADO POR:
ÍNDICE GENERAL
INTRODUCCIÓN ............................................................................................................................................ 4
1. DOCUMENTACIÓN Y AYUDA ON-LINE .................................................................................................. 4
2. NATURALEZA Y SINTAXIS BÁSICO ......................................................................................................... 5
2.1 CONSTANTES Y OPERADORES ......................................................................................................... 6
SECCIÓN 1. SCILAB como calculadora científica ........................................................................................... 7
2.2 EMPLEO DE SCILAB COMO CALCULADORA CIENTÍFICA .................................................................. 9
2.3 VARIABLES ..................................................................................................................................... 10
2.4 ALGUNOS UTILITARIOS DE CONSULTA ......................................................................................... 11
2.5 FORMATOS.................................................................................................................................... 12
2.6 FUNCIONES DE LIBRERÍA BÁSICAS ................................................................................................ 12
3. MATRICES............................................................................................................................................ 13
3.1 OPERADORES ELEMENTALES DE CONSTRUCCIÓN DE MATRICES ................................................. 13
3.2 FUNCIONES DE LIBRERÍA MATRICIALES ESPECIALES: ................................................................... 15
3.3 OPERACIONES MATRICIALES......................................................................................................... 15
3.4 FUNCIONES DE LIBRERÍA MATRICIALES ........................................................................................ 17
3.5 MANIPULACIÓN DE LOS ELEMENTOS DE UNA MATRIZ: Extracción, inserción y eliminación ...... 18
3.6 OTROS EJEMPLOS DE MATRICES: ......................................................................................................... 19
4. IMPORTACIÓN Y EXPORTACIÓN DE DATOS (EXCEL) ¿???................................................................... 19
5. SISTEMA DE ECUACIONES LINEALES ................................................................................................... 20
5.1 RESOLUCIÓN INICIAL DE UN SISTEMA DE ECUACIONES LINEALES ............................................... 20
5.2 OTRAS FUNCIONES DE INTERÉS: ................................................................................................... 21
6. POLINOMIOS ....................................................................................................................................... 22
6.1 FUNCIONES DE LIBRERIA............................................................................................................... 22
6.2 INTERPOLACION Y EXTRAPOLACION ............................................................................................ 24
7. REPRESENTACIONES GRAFICAS CON SCILAB ...................................................................................... 25
7.1 CURVAS PLANAS (GRÁFICAS 2D)................................................................................................... 25
7.2 CURVAS EN EL ESPACIO (GRÁFICAS 3D)........................................................................................ 28
8. ENLACE CON LOS PROGRAMAS DE MAT LAB: .................................................................................... 30
SECCIÓN 2. SCILAB como lenguaje de programación ................................................................................. 31
9. CODIFICACION DE PROGRAMAS: ........................................................................................................ 33
9.1 SCRIPTS ......................................................................................................................................... 33
9.2 ESTRUCTURAS DE CONTROL BASICAS........................................................................................... 35
INTRODUCCIÓN
Scilab es un conjunto de programas de código abierto para computación científica, orientado al cálculo
numérico, a las operaciones matriciales y especialmente a las aplicaciones en ciencias e ingeniería.
Puede ser utilizado simplemente como una calculadora matricial, pero su interés principal radica en los
cientos de funciones de librería que posee, tanto de propósito general como especializados en las ciencias.
Así como en sus posibilidades para la visualización gráfica y codificación de programas avanzados.
Scilab posee además un lenguaje de programación propio, muy próximo a los habituales en cálculo
numérico que permite al usuario escribir sus propios scripts (conjunto de comandos escritos en un fichero
que se pueden ejecutar con una única orden) para resolver un problema concreto y también escribir
nuevas funciones con, por ejemplo, sus propios algoritmos. Scilab dispone, además de numerosas
Toolboxes, que le añaden funcionalidades especializadas.
La versión actual es la 6.0.1 Tanto los binarios para varias plataformas (GNU Linux, Windows
2000/XP/Vista, Hp-Ux) como las fuentes están disponibles en http://www.scilab.org/download.
El autor estará muy agradecido por los comentarios, sugerencias y observaciones enviados a:
mleyvac@unmsm.edu.pe o maxleyvac2@hotmail.com
Scilab dispone de un manual de usuario que se puede consultar en una ventana de ayuda (Help Browser).
La ayuda se puede invocar desde la barra de herramientas (?- Scilab Help en Windows, Help-Help
Browser en Linux).
También escribiendo el tema (sobre valor absoluto) de consulta en la línea de comandos -->help abs se
puede acceder fácilmente a la descripción de la función, que en muchos casos se acompaña de ejemplos
de uso ilustrativo.
También dispone de un conjunto de Demos que pueden ayudar mucho el aprendizaje de Scilab ya que se
acompañan, en general, del código que genera la demostración.
Sin embargo, Scilab no dispone de un tutorial propiamente dicho que facilite los primeros pasos que
explique la filosofía general del lenguaje o que indique como resolver problemas técnicos concretos.
La estructura básica de trabajo de Scilab es una matriz bidimensional cuyos elementos son números reales
o complejos. Escalares y vectores son casos particulares de matrices. También es posible construir otro
tipo de estructuras de datos definidos por el usuario.
En Scilab por defecto, los números son codificados como números reales en coma flotante de doble
precisión.
Algunas constantes numéricas están predefinidas. Su nombre comienza con 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 maquina
(mayor número real doble precisión para el que 1+%eps/2 es indistinguible de 1), %inf es el infinito-
máquina (overflow: cualquier número que supere al mayor número real representable en doble
precisión), %nan es el símbolo de NaN (Not a Number) para una operación inválida (por ejemplo, 0/0 es
%nan)
La codificación de Scilab es interpretado, esto es, las instrucciones se traducen a lenguaje de 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.
Se puede recuperar comandos anteriores, usando las teclas de flecha arriba y abajo. Con las flechas
izquierda y derecha nos podemos desplazar sobre la línea de comando y modificarlo.
CONSTANTES:
TABLA DE OPERADORES:
Operadores Aritméticos
Operadores Descripción
+ Adición o suma
- Sustracción o resta
* Multiplicación
‘ Traspuesta
^ Potenciación
/ División derecha
\ División izquierda
.* Producto elemento a elemento
. / y .\ División elemento a elemento
.^ Elevar a una potencia elemento a elemento
Operadores de Relación
Operadores Descripción
> Mayor que
>= Mayor que o igual
< Menor que
<= Menor que o igual
== Igual que
~= (ó <>) Diferente
Operadores Lógicos
Operadores Descripción
& y (p AND q)
| o (p OR q)
~ negación (NOT p)
Sección Uno
SECCIÓN 1. SCILAB como calculadora científica
SCILAB
como
calculadora
científica
1
Se puede utilizar Scilab como simple calculadora, escribiendo las relaciones aritméticas directamente en
la línea de comandos ( -->) finalizados por Enter (<E>). Para la evaluación tener en cuenta los operadores
aritméticos, de relación y lógicos.
Se obtiene el resultado inmediatamente a través de la variable del sistema ans (answer). Si no se desea
que Scilab escriba el resultado en el terminal, debe terminarse la orden por punto y coma (;). Esta
alternativa es útil, sobre todo en la codificación de programas de muchas líneas.
EJEMPLOS
-->(5+3)/(9-1) -->5*(1/2)*4*(2/3)
ans = ans =
1.0 6.6666667
-->(2^3)-(4/(5+3)) -->sqrt(32*exp(2))/(cos(27.3)+10)
ans = ans =
7.5 1.6292082
-->exp(1+2*%i) -->5*exp(5/4)+5.34
ans = ans =
- 1.1312044 + 2.4717267i 22.791715
En todos los cálculos matemáticos es importante entender el orden en que se realizan las operaciones:
Primero realiza los cálculos dentro del paréntesis, desde el conjunto más interno hasta el más externo.
A continuación, realiza operaciones de exponenciación.
Luego realiza operaciones de multiplicación y división de izquierda a derecho.
Finalmente, realiza operaciones de suma y resta de izquierda a derecho.
CASO: EJEMPLOS
--> // valores de las variables -->// cálculo
-->a=3.2 -->m=(𝑎^ 2+b*c+x)
--> b=-2.3 m=
--> c=%pi/3 8.46806540
--> x=2/%pi -->// cálculo
--> y= 2 ^ ½ -->q= (𝑎 + 𝑐) ^2 / b
q=
-7.8429074
EJEMPLOS EJEMPLOS
--> //cálculo --> // cálculo --> // cálculo --> //cálculo
--> a==b -->(2*a+b)/x^2 <1 --> a>=c --> 2*a*c ==2*c*b
--> F --> F -->T --> F
EJERCICIO EJERCICIO
2.3 VARIABLES
Las variables en Scilab nunca son declaradas explícitamente, 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 real, número complejo, a continuación una matriz de 25x40 de
números enteros y luego para almacenar un texto.
EJEMPLOS
-->a=11 -->x=9; y=8;
a= -->x>=y & x<=15
11. ans=
--> pepsi=exp(2.4/3) T
pepsi = -->modulo(y,2)==0 | modulo(y,3)==0
2.2255409 ans=
-->z=a+pepsi*(4-0.5*%i) T
z= -->pepsi <E>
19.902164 - 1.1127705i pepsi =
2.2255409
Las variables se crean automáticamente al asignarles un contenido. Asimismo, es posible eliminar una
variable de la memoria si ya no se utiliza.
Atención: recuérdese que las variables AB ab Ab y aB SON DISTINTAS, ya que Scilab distingue entre
mayúsculas y minúsculas.
Para conocer en cualquier instante el valor almacenado en una variable, basta con teclear su nombre y
presionar <E>.
EJEMPLOS
-->who <E> -->whos
-->chdir -->date()
ans = ans =
EJEMPLOS
-->pwd <E> menú File
ans = © Current Working Directory
C:\Users\TOSHIBA\Documents -->
-->chdir ‘E:\PractiC\’ C:\Users\TOSHIBA\Documents
ans = -->date()
T ans =
-->exec serie.txt 22-Nov-2019
2.5 FORMATOS
Por defecto, Scilab muestra los números en formato “variable” con 10 dígitos. Se puede modificar esto
mediante el comando format:
format(14) 14 dígitos
format(‘e’) formato científico o exponencial, coma flotante
format(‘v’) formato variable (por defecto)
format(‘v’,20) formato variable con 20 dígitos
format(‘e’,15) formato científico con 15 dígitos
Ejemplos
Los nombres de las funciones elementales son los habituales. Algunas de ellas:
Los argumentos pueden ser, siempre que tenga sentido, reales o complejos y el resultado se devuelve en
el mismo tipo del argumento
CASO: EJEMPLOS
--> // valores de las variables -->p= 1/(cos(c)+ln(x))
-->a=3.2 -->P=
--> b=-2.3 20.6537746
--> c=%pi/3 -->n=sin(c) +y/c
--> x=2/%pi -->n=
--> y= 2 ^ ½ 2.21649987
-->z=0.50 -->modulo(4,3)
ans =
1.0
3. MATRICES
Como ya se ha dicho, las matrices bidimensionales de números reales o complejos son los objetos básicos
con los que trabaja Scilab. Los vectores y escalares son casos particulares de matrices.
La forma más elemental de introducir matrices en Scilab es escribiendo sus elementos, por filas, entre
corchetes rectos ([ ]). Los elementos de una fila se separan unos de otros por comas y una fila de la
siguiente por punto y coma.
La forma más elemental de introducir matrices en Scilab es escribiendo sus elementos, por filas, entre
corchetes
-->v(3)
-->v([1 $])=9
-->v(10)=1
Se pueden también utilizar los vectores/matrices como objetos para construir otras matrices (bloques):
Función Descripción
diag(v) Si v es un vector, diag(v) es una matriz cuadrada de ceros con diagonal principal = v
Los operadores aritméticos representan las correspondientes operaciones matriciales siempre que
tengan sentido. Cuando van precedidos de un punto deben entenderse en el sentido de que la operación
se efectúa “elemento a elemento”.
EJEMPLO
Usando las matrices A, B y C, hallar las evaluaciones:
--> A=[4 5 -2;1 -2 0;4 -1 -2]
--> B=[-4 5 -%pi;-1 -1 10;0 4 -2]
--> C=[5 2;1 -3;4 2]
--> A+B --> B*A
ans = ans =
0 10 −5.1415927 −23.566371 −26.858407 14.283185
(0 −3 10 ) ( 35 −13 −18 )
4 3 −4 −4 −6 4
Función Descripción
sum(A) suma de las componentes de la matriz A
sum(A,1), sum(a;'r') es un vector fila (row) conteniendo la suma de los elementos de cada columna de
A
sum(A,2), sum(a;'c') es un vector columna conteniendo la suma de los elementos de cada fila de A
v(i) Si v es un vector es vi
A(i,j) Si A es una matriz, es aij
A(k) Si A es una matriz, es el k-ésimo elemento de A, en el orden en que está
almacenada en la memoria (por columnas)
Pero Scilab posee un buen número de facilidades para designar globalmente un conjunto de elementos
de una matriz o vector, consecutivos o no.
Si B es un vector booleano (sus elementos son %t para verdadero y %f para falso) entonces A(B)
especifica la submatriz que se obtiene considerando o no cada elemento en función del valor verdadero
o falso del vector booleano:
−−> 𝑣 = 𝑙𝑖𝑛𝑠𝑝𝑎𝑐𝑒(1,5,9)
−−> 𝑏 = [%𝑡, %𝑡, %𝑡 %𝑓 %𝑓 %𝑡 %𝑡 %𝑓 %𝑓]
−−> 𝑤 = 𝑣(𝑏)
Esta sintaxis para designar conjuntos de elementos de un matriz puede usarse tanto para recuperar los
valores que contienen (para, por ejemplo, utilizarlos en una expresión), como para asignarles valores.
Cuando estas expresiones aparecen a la izquierda de un signo igual (es decir, en una instrucción de
asignación) pueden tener distintos significados:
--> [a, b] = max (N(:,1)); // nota mas alta (a) del alumno (b) en el primer curso
-->N(:, 6)=[];
-->f5=N($, :); // extracción de las notas del ultimo alumno
-->[c k]=gsort(f5, ‘c’); // notas del ultimo alumno ordenadas y sus
…..correspondientes cursos
Los sistemas de ecuaciones lineales simultáneas consisten en un conjunto de dos o más ecuaciones, con
igual número de incógnitas, por ejemplo, para resolver un sistema de dos incógnitas se requiere un
sistema con dos ecuaciones linealmente independientes. Para resolver un sistema de tres incógnitas se
requiere un sistema con tres ecuaciones y así para cualquier otro número de incógnitas.
En el siguiente ejemplo veremos un sistema de ecuaciones lineales de 3 incógnitas y se podrá denotar
usando notación de matrices
x+2y+z=8
2x+2y+z=9
3x+3y+5z=24
Se crea la matriz de los coeficientes de las incógnitas y la llamamos matriz A, en este caso será una
matriz de 3x3. Creamos un vector X, con las incógnitas de dimensión 3x1. Y finalmente el vector B, con el
valor de las constantes, que se encuentran en el lado derecho de las ecuaciones, este vector también es
de dimensión 3 x 1.
Ahora lo que queremos es resolver la ecuación A * X = B y obtener el valor del vector X.
A*X=B
A-1 *A * X = A-1 * B
Recordemos que A-1 *A = I (la matriz identidad) y que
A-1 * B = A\B es la división izquierda.
X = A\B
Así que la solución en Scilab de un sistema de ecuaciones lineales se reduce a crear la matriz A de
coeficientes y la matriz B de constantes y hacer la operación de división izquierda.
Para la resolución “rápida” de sistemas de ecuaciones lineales Scilab dispone del “operador” \ :
Si A es una matriz cuadrada n x n no singular y b es un vector columna de longitud n, entonces
-->A\b
Calcula la solución del sistema lineal de ecuaciones Ax=b. Para recordar la sintaxis, debe asimilarse el
operador \ con una “división por la izquierda”, es deir A\b es como A-1b.
Este operador debe ser usado con precaución: Si la matriz A es singular o mal condicionada, la instrucción
A\b emite un mensaje de advertencia y devuelve una solución del correspondiente problema de mínimos
cuadrados.
Si la matriz A no es cuadrada (teniendo el mismo número de líneas que el segundo miembro) entonces la
instrucción A\b devuelve directamente una solución de minimos cuadrados sin advertir absolutamente
nada. En el caso en que la solución de mínimos cuadrados no es única (la matriz A no es de rango máximo),
la solución que devuelve NO es la de norma mínima.
Para obtener esta última es mejor utilizar la instrucción siguiente, que utiliza la pseudo-inversa de la
matriz A:
-->pinv(A)*b
Los autovalores de una matriz se pueden calcular mediante la función spec:
-->spec(A)
Si se desean obtener, los vectores propios, hay que llamar a la función spec de la siguiente forma:
--> [x,v]=spec(A)
Mediante la cual se obtienen: v matriz cuadrada diagonal con los autovalores y x: matriz cuadrada
invertible cuya i-ésima columna es un vector propio asociado al i-esimo autovalor.
También se puede resolver utilizado la función linsolve la cual resuelve una ecuación de forma:
A*X + B = 0
donde:
X = linsolve(A,B)
Hay que tomar en consideración que el signo de los valores del vector B que se utiliza con la función
linsolve son el negativo de los valores del vector b utilizados cuando se utiliza la división izquierda. La
razón es que para resolver linsolve se está pasando el vector del lado derecho de la ecuación al lado
izquierdo de la ecuación.
A*X=b
A*X + (-b) = 0
A*X + B = 0
Donde B = -b
EJEMPLO
// ejem B=-b
A=[1 -1 1; 2 1 0; 0 1 -2]
b=[3 -2 -1 ]
B=[-3 2 1]
linsolve(A,B)
ans =
0.75
-3.5
-1.25
6. POLINOMIOS
Scilab puede manipular obejtos de tipo “polinomio”. Algunas formas de generar polinomios son las
siguientes:
-->p=poly(a, “x”)
Siendo a una matriz cuadrada nxn es el polinomio característico de la matriz a, con variable simbolica x
-->a=companion(p)
Siendo v un vector numérico es el polinomio, con variable simbolica s, cuyos coeficientes son las
componentes del vector v( en orden de menor a mayor grado)
-->t=poly(0, “t”)
-->p=1+t-4*t^2+%pi*t^5
Define t como un símbolo que permite definir otros polinomios con variable t mediante su expresión
algebraica.
-->roots(p)
Función Descripción
// ejem:
--> a=[1,2,3;4,5,6;7,8,-9];
--> p=poly(a, "t")
p =
2 3
-54 -126t +3t +t
--> p=poly([1,2,3,4], "x" ,"coeff")
p =
2 3
1 +2x +3x +4x
--> roots(p)
ans =
-0.0720852 + 0.6383267i
-0.0720852 - 0.6383267i
-0.6058296
Un polinomio se puede definir de dos maneras: por sus coeficientes o por sus raíces. Es necesario además
indicar la variable simbólica para el polinomio.
La orden p = poly([2 3 5 7], "x", "coeff")
Define en la variable p el polinomio 2 + 3x + 5x^2 + 7x^3 .
La orden q = poly([2 3 5], "x", "roots")
Define en la variable q el polinomio −30 + 31x − 10x 2 + x 3 cuyas raíces son exactamente 2, 3 y 5.
Escribir q = poly([2 3 5], "x") produce exactamente el mismo resultado, o sea, "roots" es el tipo de
definición por defecto.
La doble comilla " puede ser remplazada por la comilla sencilla ’. Más aun, se puede remplazar ’coeff’
por ’c’ y ’roots’ por ’r’ . Es permitido escribir
r = poly([6 7 8], ’y’, ’c’) .
La función roots calcula las raíces de un polinomio, sean ´estas reales o complejas. Por ejemplo roots(p)
Con polinomios se pueden hacer sumas, multiplicaciones, restas, multiplicación por un numero. Deben
ser polinomios en la misma variable. Por ejemplo:
v = p + q + p*q - 3.1*q
También se puede elevar un polinomio a una potencia, por ejemplo,
r = p^3
La función coeff tiene dos parámetros, el primero es el polinomio y el segundo la potencia. La siguiente
orden asigna a la variable k el valor −10, el coeficiente de x 2 en el polinomio q.
k = coeff(q, 2)
Si se utiliza simplemente c = coeff(q) Se obtendrán todos los coeficientes. La variable c será un.
Si se utiliza p = poly(a, ’x’), donde a es una matriz cuadrada, se obtiene el polinomio característico de la
matriz a.
Para evaluar un polinomio p en un valor t se usa horner(p, t). Por ejemplo horner(q, 1) dará como
resultado −8. Si q es un polinomio, es lícito utilizar la orden r = horner(p, q) para obtener p(q(x)).
Dados los polinomios P(x)=2x4-8x3+3x2+5 y Q(x)=x2+2x-3, Calcula -3P(x)+5Q(x), P(x).Q(x), Q5(x) y (x)/Q(x).
EJEMPLO
// ejem:
-->P=poly([5,0,3,-8,2],"x","coeff"), Q=poly([-3,2,1],"x","coeff")
P =
2 3 4
5 + 3x - 8x + 2x
Q =
2
- 3 + 2x + x
-->-3*P+5*Q
ans =
2 3 4
- 30 + 10x - 4x + 24x - 6x
-->P*Q
ans =
2 3 4 5 6
- 15 + 10x - 4x + 30x - 19x - 4x + 2x
-->Q^5
ans =
2 3 4 5 6 7 8 9 10
- 243 + 810x - 675x - 360x + 570x + 92x - 190x - 40x + 25x + 10x + x
-->[R,C]=pdiv(P,Q)
C =
2
33 - 12x + 2x
R =
104 - 102x
-->Q*C+R
ans =
2 3 4
5 + 3x - 8x + 2x
CASOS:
Temperatura (°C) Presión de vapor (torr)
0 4.6
5 6.5
10 9.2
15 12.8
16 13.6
17 14.5
18 15.5
19 16.5
20 17.5
21 18.6
22 19.8
23 21.2
24 22.4
25 23.8
26 25.2
27 26.7
28 28.3
29 30
30 31.8
40 55.3
50 92.5
60 149.4
70 233.7
80 355.1
90 525.8
100 760
110 1074.6
a) Representación grafica
b) Ajustes del polinomio (grado)
c) Interpolación para 75
d) Extrapolación para 120
Estas notas pretenden expones algunos de los comandos más básicos de que dispone Scilab para generar
gráficos. En principio se exponen, exclusivamente, los comandos de dibujo y posteriormente se explicará
cómo modificar los distintos (y numerosos) parámetros que determinan sus características.
El comando básico de Scilab para dibujar curvas planas es plot2d y otras variantes se resume en la
siguiente tabla:
Función Descripción
Plot2d
(*) Para dibujar una única curva, es diferente que los vectores x e y sean filas columnas sin embargo,
cuando se desean dibujar varias curvas juntas no lo es. Por ellos, usaremos siempre vectores-columna.
(**) Obsérvese que, puesto que se calculan todas las ordenadas “de una sola vez”, es preciso “vectorizar”
la escritura de la formula, para que, al ser el argumento x un vector, la formula devuelva un vector de las
mismas dimensiones calculando elemento a elemento.
-->plot2d(y)
Dibuja la curva que pasa por los puntos
(1,y1)…….(n,yn)
Ejemplo:
x=linspace(-5,5)’;
y=2*sin(x/2).*cos(3*x);
plot2d(y)
-->plot2d(x,y)
Siendo x un vector e y una matriz dibuja una curva
por cada columna de y
x=linspace(-5,5)’;
y=2*sin(x/2).*cos(3*x);
z=2*sin(x);
w=[y,z];
plot2d(x,w)
-->plot2d(x,y)
siendo x e y matrices de las mismas dimensiones,
dibuja una curva por cada par(columna de x,
columna de y)
Ejemplo:dibujar en [-2 pi, 2 pi] la gráfica de
función:
𝟐𝒔𝒆𝒏(𝒙), 𝒔𝒊 𝒙 ≤ 𝟎
𝒚={ 𝒙 }
𝟐𝒔𝒆𝒏 ( ) 𝒄𝒐𝒔(𝟑𝒙), 𝒔𝒊 𝒙 > 𝟎
𝟐
x1=linspace(-2*%pi,0)’;
x2=linspace(0,2*%pi)’;
y1=2*sin(x1);
y2=2*sin(x2/2).*cos(3*x2);
plot2d([x1,x2],[y1,y2])
Observaciones:
Obsérvese que, por defecto, graficas sucesivas se superponen. Para evitar, hay que borrar la grafica
anterior antes de dibujar de nuevo. Ello puede hacerse o bien cerrando la ventana grafica o bien
borrando su contenido desde la barra de menús (EditErase Figure) o mediante un comando
(xbasc()).
Cuando se borra el contenido de la ventana grafica, pero no se cierra, se conservan sus características.
Si por ejemp lo, se ha modificado la carta de colores de esa ventana, se seguirá conservando la
carta al borrarla, pero no al cerrarla.
Cuando plot2d dibuja varias curvas, les asigna distintos colores. El orden de los colores asignados
viene predeterminado por la carta de colores activa.
-->plot2d3(x,y)
es similar a plot2d, pero dibuja función
utilizando líneas verticales
-->plod2d4(x,y)
es similar a plot, pero dibuja una curva
utilizando puntas de flecha(por ejemplo
para señala la dirección de una
trayectoria)
Gráficas polares
polarplot
-->polarplot(theta,rho)
siendo theta y rho vectores de la misma
dimensión, dibuja la curva que pasa por
los puntos de coordenadas polares
(theta_1, rho_1)……..(theta_n, rho_n)
Ejemplo: ρ = sen(2θ)cos(3θ)
theta=linspace(0,2*%pi)’;
rho=sin(2*theta).*cos(3*theta);
polarplot(theta,rho)
Esta función se puede utilizar también con otros argumentos, como plot2d y su funcionamiento es
similar.
Función Descripción
param3d
Param3d1
Param3d
--> param3d(x,y,z)
donde x, y , z son tres vectores de la misma
dimensión
Ejemplo:
t=linspace(0,8*%pi);
param3d(t.*sin(t),t.*cos(t),3*t)
Param3d1
--> param3d1(x,y,z)
es similar a param3d, pero permite dibujar
varias curvas,Aquí x, y , z son tres matrices de
la misma dimensión cuyas columnas
determinan las distintas curvas.
--> param3d1(x,y,list(z,colors))
donde colors es un vector de números
enteros, dibuja la i-esima curva del color
definido por el i-esimo elemento de colors.
Ejemplo:
t=linspace(0,5*%pi)';
x=[zeros(t),12*sin(2*t)];
y=[10*cos(t),12*cos(2*t)];
z=[10*sin(t),12*sin(t)];
param3d1(x,y,list(z,[6,2]))
EJERCICIOS DE GRAFICAS:
1) En la siguiente tabla se tiene los datos correspondientes a las ventas de una empresa X desde el año
2012 a 2018. Haga una representación gráfica simple de la tendencia.
Año 2012 2013 2014 2015 2016 2017 2018
Ventas(millones) 8 12 20 22 18 24 27
Codificación:
x=[2012 2013 2014 2015 2016 2017 2018];
y=[8 12 20 22 18 24 27];
plot2d(x,y)
2) Dada la función y=3x3-26x+6. Dibujar dicha f(x) así como su primera y segunda derivada, en el
intervalo -2<=x<=4. Todas las funciones deben representarse juntas en el mismo gráfico.
x=linspace(-2,4)';
y=3*x^3-26*x+6;
z=9*x^2-26;
w=18*x;
plot2d(x,y), plot2d(x,z), plot2d(x,w)
4) Para el ejercicio 1 presente una gráfica de barras verticales, otra de barras horizontales y una gráfica
de líneas verticales (grafico detallado).
GRAFICA DE BARRAS VERTICAL
x=[2012 2013 2014 2015 2016 2017 2018];
y=[8 12 20 22 18 24 27];
bar(x,y)
5) En la siguiente tabla se muestra las notas (en letras: A, B, C, D y E) obtenidas por los alumnos de una
promoción (69)
Utilizar estos datos para crear un gráfico circular.
Notas A B C D E
Número de 11 18 26 9 5
alumnos
5.1)
x=[11 18 26 9 5], sp=[0 0 0 0 0], txt=["A","B","C","D","E"]
scf(0);
5.2)
x=[11 18 26 9 5]
pie(x), legend("A","B","C","D","E")
6) Los siguientes datos representan las notas (sobre 100) obtenidos por los alumnos de una promoción
(30) del semestre 2018-2:
58,73,73,53,50,48,56,3,73,69,69,63,74,82,84,91,93,89,91,80,59,69,56,64,63,66,64,74,63,69
Presentar un histograma que represente dichos datos por defecto (tamaño 10).
x=[58 73 73 53 50 48 56 73 73 69 69 63 74 82 84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69]
histplot(30, x, style=10)
Sección Dos
SECCIÓN 2. SCILAB como lenguaje de programación
SCILAB
como un
lenguaje de
programación
2
9. CODIFICACION DE PROGRAMAS:
En Scilab hay dos tipos de programas: los guiones o libretos (scripts) y las funciones. Un guion es
simplemente una secuencia de órdenes de Scilab. No tiene parámetros (“argumentos”) de entrada ni de
salida. En cambio, una función sí los tiene. Por otro lado, las variables definidas en un guion son globales,
es decir, después del llamado del guion estas variables siguen existiendo. En cambio, en una función, las
variables definidas dentro de la función dejan de existir una vez finalizada la ejecución de la función, son
variables locales.
9.1 SCRIPTS
Así, para llevar a cabo una tarea, en vez de escribir las instrucciones una por una en la línea de comandos
de Scilab, se pueden escribir una detrás de otra en un fichero. Para ello se puede utilizar el Editor Integrado
de Scilab: botón “Editor” de la barra de menús o bien usando el orden.
-scipad()
Por convenio, los scripts de Scilab tienen el sufijo *. Sce y para ejecutar un script se usa la orden
Lógicamente en el nombre del fichero hay que incluir el path, caso de que el fichero no esté en el directorio
actual. El nombre del fichero debe ir entre apóstrofes o comillas dobles, puesto que es una cadena de
caracteres.
** Un guion es simplemente un archivo ASCII en el que hay una sucesión de órdenes de Scilab.
Generalmente tiene la extensión .sce, pero eso no es obligatorio. Puede estar colocado en cualquier
carpeta.
EJEMPLO
// prueba01
n = [12, 14, 8, 16, 10],
y =mean(n)
ans=12
D=max(n)
ans=16
exec (“d:\PractiC\prueba01.txt”)
Esto hace que se ejecuten todas las ordenes contenidas en el archivo. Mediante who, o de cualquier otra
forma, se puede verificar que las variables n, y, D ... fueron creadas y todavía existen.
Dar la orden exec (“d:\PractiC\prueba01.txt”) también se puede hacer por medio de la barra de menú
con las opciones File y después exec. Subiendo y bajando de nivel se busca la carpeta adecuada y se hace
doble clic con el botón derecho del ratón en el archivo prueba01.txt
Si se desea, se puede editar el archivo, hacer algunos cambios, guardarlos y de nuevo activar el guion
mediante el comando exec.
Sea (d:\PractiC\prueba02.sce) el archivo que define los datos y lleva a cabo este proceso. Su contenido
puede ser:
EJEMPLO
// prueba02
//solución
//En que curso se obtuvo la nota más alta.
N= [20, 5, 8, 11, 14, 17;
3, 16, 9, 12, 15, 8;
14, 7, 10, 3, 18,19;
5, 8, 11, 14, 17, 10;
16, 9, 12, 15, 16, 2]
max(N)
ans=20.
Las líneas que empiezan por // son líneas de comentarios (como en C++)
De manera natural aparece la pregunta: ¿Cómo hacer el mismo proceso con otro sistema de ecuaciones
sin tener que cambiar el archivo? Las funciones son la respuesta.
En esta parte del manual es bueno reiterar que el lector ya tiene algún conocimiento sobre la
implementación de códigos desde las estructuras básicas de control: estructura secuencial, condicional
simple, condicional múltiple, repetitiva mientras y repetitiva desde.
Es decir aquí ya no se explica cómo es el funcionamiento de la estructura while. Simplemente se presenta
algunos ejemplos sobre su escritura en Scilab.
entrada y salida
if
select y case
while
for
entrada y salida con formato (printf, mprintf (fprintf))
EJEMPLO
if condición then
...
...
end
La palabra then puede ser reemplazada por una coma o por un cambio de línea. Entonces se puede escribir
if condición
...
...
end
Obviamente también existe la posibilidad else:
if condición
...
else
...
end
Estas estructuras se pueden utilizar directamente dentro del ambiente interactivo de Scilab. Por ejemplo,
se puede escribir directamente, sin necesidad de un guion
Resulta ineficiente hacer un guion únicamente para las órdenes de la línea anterior. Pero, cuando hay
muchas órdenes y muchos controles y es necesario depurar el proceso, es casi indispensable hacer un
guion o una función.
EJEMPLO
Escribir un algoritmo para leer 3 números enteros diferentes y a continuación escribir el mayor de
los tres
// mayor
//
a = input('digite valor para a');
b = input('digite valor para b');
c = input('digite valor para c');
if a>b
if a>c
max = a;
else
max = c;
end
else
if b > c
max = b;
else
max = c;
end
end
disp ('el mayor de los tres es:'), disp (max);
La palabra then puede ser reemplazada por una coma o por un cambio de línea. La parte else es opcional.
Entonces se puede escribir
select variable
case valor 1
…
case valor 2 , …
case valor 3
…
case valor 4
…
end
Por ejemplo
select indic
case 0, a = b;
case 1
a = b*b;
b= 1;
case 3
a = max(a,b);
b= a*a;
else
a = b;
b = 0;
end
EJEMPLO
Diseñar un algoritmo para leer el número del día de la semana y luego visualizar la descripción del
día correspondiente. Asumir:
// diasem // analice el cambio respecto al enunciado
//
ndia=input('ingrese el numero del dia-semana: '); // diasemc
select ndia //
case 1,msj='lunes' ndia=input('ingrese el numero del dia-semana: ');
case 2,msj='martes' switch ndia
case {1 3 5}
case 3
msj='miercoles' msj='dia impar';
case 4,msj='jueves' case {2 4 6}
msj='dia par';
case 5,msj='viernes';
case 6,msj='sabado' case 7, msj='dia feriado';
case 7,msj='domingo' otherwise msj='error';
end
else msj='error'
disp(msj);
end
disp(msj);
por ejemplo
e = 1;
while e + 1 > 1
e = e/2;
end
EJEMPLOS
Desarrollar un algoritmo, para leer un número entero y visualizar dicho número y un mensaje “si es
primo” o “no es primo”.
// nprimo
primo= 0;
i= 1;
num = input (‘ingrese un numero entero ‘);
while 1 <= num
if (mod(num,i)) == 0
primo = primo + 1 ;
end
i = i + 1;
end
if primo ==2
disp(num) , disp(‘si es primo’);
else
disp(num), disp(‘no es primo’);
end
for var=lim1:incr:lim2
…
…
end
Esto quiere decir que la variable var empieza en el límite inferior lim1, después va a incrementar el valor
en el incremento incr (puede ser negativo). Si el incremento es 1 , este se puede suprimir.
for i= 2:3:14
...
…
end
for j= 2:-3:-10
…
…
end
for k=2:8
…
…
end
EJEMPLO
Una estructura for puede estar anidada dentro de otro for o dentro de un if.
La orden break permite la salida forzada (en cualquier parte interna) de un bucle for o de un bucle while.
La orden 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.
La orden printf es una emulación de la orden del mismo nombre del lenguaje C. Por ejemplo se podría
utilizar la orden: printf (’ a = %3d b = %3d r = %3d’ , a, b, r).
Esta emulación utiliza una comilla en lugar de la comilla doble. Además, al acabar una orden de escritura,
automáticamente hay cambio de línea. Aquí no se necesita el \n de C.
Función Descripción
%i
%f
%5.2f
%d
%3d
%c
%g
EJEMPLO
EJEMPLO
Estas funciones permiten definir procedimientos enteramente análogas a las funciones de librería, con su
nombre, sus argumentos y sus valores de retorno.
Las funciones definidas en ficheros *.sci se caracterizan porque la primera línea (que no sea un
comentario) comienzan por la palabra function, seguida por los valores de retorno (entre corchetes [ ] y
separados por comas, si hay más de uno), el signo igual (=) y el nombre de la función, seguido de los
argumentos (entre paréntesis y separados por comas).
Las funciones definidas on-line están disponibles de modo inmediato, veamos algunos ejemplos:
Deff se puede usar para definir funciones de secuencias de instrucciones escritas en cadenas de texto. El
objeto de función resultante tiene las mismas propiedades de cualquier otra función definida en un
archivo de texto y cargada con exec.
Ejemplo
Use la facilidad de ayuda (help) de SCILAB`s para encontrar información acerca de deff y su empleo para
definir la función y = f(x) = 2x+1. Evaluar para x=4.
La primera línea en el editor es la definición de la función que comienza con la palabra clave function,
luego se escribe las instrucciones para obtener algún resultado y se finaliza con endfunction.
sentencias
endfunction
nombre_funcion, es el nombre significativo que se le asigna a la función y coincide con el nombre del
fichero de extensión .m en el que se guarda el código de dicha función. Las reglas para nombrar un
función son las mismas que para las variables, los nombres no deben de incluir espacios, ni se pueden
utilizar palabras reservadas.
variables_salida, es el valor o conjunto de valores de las variables devueltos por la función. Las
variables de salida van después de la palabra reservada function entre corchetes cuadrados y
separados por comas si hay varios.
sentencias, líneas de código que tomando los valores de los parámetros de entrada calculan mediante
expresiones los valores que devuelve la función.
endfunction, marca el final de la función es opcional (salvo en las funciones anidadas) pero es
conveniente acostumbrarse a ponerlo al finalizar la función.
A la función suma se le pasan dos datos en las variables x e y, y devuelve el resultado en la variable z.
A la función estad se le pasan dos datos en el vector x, y devuelve los resultados en las variables prom y
stdev.
Una función se llama del mismo modo que las funciones de librería. Las funciones se pueden llamar desde
la ventana de comandos, desde un fichero script o desde otra función. Todas las variables en una función
son locales a dicha función, incluyendo las de entrada y las de salida.
La llamada a la función se puede hacer desde la ventana de comandos. Diferenciar archivos creados 0n-
line y los almacenados con extensión *.txt
En la llamada a la función summa su parámetro x adquiere el valor del primer argumento a, el segundo
parámetro y toma el valor del argumento b, se efectúa la suma en el cuerpo de la función, se guarda el
resultado en la variable z que devuelve la función. El valor que guarda z se copia en la variable res. Las
variables x, y y z son locales a la función y por tanto, no aparecen en la ventana Workspace, no se puede
acceder a ellas desde la ventana de comandos.
Como hemos visto hay que pasar los valores que guardan las variables a y b a la función summa por que
una función no tiene acceso a las variables declaradas en un script o en la ventana de comandos.
En la llamada a la función estad su parámetro x adquiere el valor de un vector único, y retorna dos
resultados:
EJEMPLO
function [maxcd, indic] = mcd(a, b)
// Maximo comun divisor de a, b enteros positivos.
// indic valdrá 1 si se calculó el m.c.d
// 0 si los datos son inadecuados.
indic = 0
maxcd = 0
if round(a) ~= a | round(b) ~= b
return
end
if a < 1 | b < 1
return
end
if a < b
t=a
a=b
b=t
end
indic = 1
while 1 == 1
r = modulo(a, b)
if r == 0
maxcd = b
return
end
a=b
b=r
end
endfunction
En el ejemplo anterior, el ´ultimo return ésta anidado en un solo bucle y después acaba la función, luego
se podría cambiar por un break. La condición del while siempre es cierta, luego la salida del bucle se
obtiene siempre en la mitad del cuerpo del while.
En una función no es necesario el punto y coma después de una orden, pues de todas maneras Scilab no
muestra el resultado de la asignación. Si definitivamente, en una función, se desea mostrar en pantalla
algunos valores intermedios se debe hacer por medio de disp o por medio de printf. Por ejemplo, después
del cálculo de r se puede utilizar la orden
disp (a, b, r)
Observe que primero escribe el valor de r, después el de b y finalmente el de a.
fplot2d
-->flpot2d
donde x es un vector y f es el nombre de una
función Scilab, dibuja la curva que pasa por
los puntos (xi,f(xi)).La función debe
responder a la forma [y]=f(x).
Ejemplo:
x=linspace(-%pi,%pi);
exec(“gf1.sci”,-1)
fplot2d(x,gf1)
FICHERO gf1.sci
Function [y]=gf1(x) Puede resultar interesante observa cómo se “vectoriza”
y= ones(x); el cálculo de esta función:
y(x>=0)= cos(x(x>=0)); 1.La orden y=ones(x) crea un vector de unos, con las
endfunction mismas dimensiones que x: así y será fila o columna (u
otra matriz) según lo sea x
2.La operación de comparación x>=0 produce un vector
booleano de las mismas dimensiones que x. Así, y(>=0)
extrae de y solo aquellas componentes tales que la
correspondiente componente del vector x es mayor o
igual que cero
Paramfplot2d: animaciones
--> paramfplot2d(f,x,t)
donde f es el nombre de una función Scilab
[y]=f(x,t), y x y t son vectores, dibuja una
animación de la función f(x,t), es decir,
dibuja sucesivamente f(x,t1), f(x,t2),……
f(x,tn).
Ejemplo:
X=linspace(-2*%pi,2*%pi);
t=linspace(-1,1,60);
paramfplot2d(gfun2,x,t)
FICHERO gfun2.sci
Function[y]=gfun2(x,t)
y=zeros(x);
b=-%pi<=x & x<=%pi;
y(b)=-t*sin(x(b));
endfunction