Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
[Programacion, Scilab]
Este curso está diseñado para llevar de la mano a personas totalmente ajenas al uso de esta
herramienta, iniciando con la etapa analizar y desglosar un problema en sentencias simples y
entendibles, para finalmente llegar a comprender y utilizar uno de los lenguajes más utilizados
en el área científica como lo es el Scilab.
[PROGRAMACIÓN, SCILAB]
Contenido
Introducción ........................................................................................................................................ 2
Scilab ................................................................................................................................................... 3
I.1 Conociendo la nueva herramienta .............................................................................................. 3
Principios de Programación ................................................................................................................ 6
II.1 Conceptos básicos de programación......................................................................................... 6
II.2 Operaciones básicas.................................................................................................................. 9
II.3 Principios de programación. ................................................................................................... 10
Tipos de Datos........................................................................................................................... 12
Instrucciones Condicionales ...................................................................................................... 13
Operadores relacionales ............................................................................................................ 14
Operadores lógicos .................................................................................................................... 15
Tablas de verdad de los operadores lógicos .............................................................................. 15
Instrucciones Cíclicas ................................................................................................................ 17
II.4 Vectores y matrices ............................................................................................................... 21
Vectores desde el teclado .......................................................................................................... 21
Matrices desde el teclado .......................................................................................................... 22
Operaciones matriciales. ........................................................................................................... 23
Algunas funciones matriciales. ................................................................................................. 26
II.5 Funciones y procedimientos ................................................................................................... 26
II.6 Manejo de archivos en Scilab ................................................................................................. 28
II.7 Gráficas................................................................................................................................... 32
ATOMS ............................................................................................................................................. 41
GUI Builder ................................................................................................................................... 41
Bibliografía ....................................................................................................................................... 42
Anexo No.1 ....................................................................................................................................... 44
Introducción
La programación en el área científica es una herramienta importante e indispensable, sin la ella sería
imposible resolver algoritmos que requieren de un elevado número de operaciones o cuando
simplemente se tienen problemas donde la solución analítica no es una opción viable.
Empecemos imaginando que tenemos que resolver un sistema de tres incógnitas con sus respectivas
tres ecuaciones constitutivas, lo más sencillo es iniciar un modelo tradicional donde trabajemos
directamente en papel buscando la solución. Lo más probable es que no lleve poco tiempo y que la
exactitud de nuestro resultado dependa en gran medida del número de decimales después del punto
utilizadas en nuestra calculadora.
Ahora imaginemos que tenemos que resolver un sistema de cien incógnitas con sus respectivos cien
ecuaciones constitutivas, resolver dicho problema del modo tradicional nos llevaría demasiado
tiempo y quizás el resultado final este plagado de errores. Hacer lo mismo programando un método
numérico tal vez nos lleve un par de horas de trabajo, pero de solo pocos minutos para que la
computadora pueda resolverlo.
A pesar de que la programación se puede utilizar en un sin número de áreas del conocimiento, ha sido
encasillada como de uso exclusivo para aquellos que tienen una formación en el área de la informática
y de sistemas de computación. No obstante es una solución indispensable para todas las áreas del
conocimiento que requieren llevar más allá de lo ordinario su trabajo.
Este curso está diseñado para llevar de la mano a personas totalmente ajenas al uso de esta
herramienta, iniciando con la etapa analizar y desglosar un problema en sentencias simples y
entendibles, para finalmente llegar a comprender y utilizar una de las herramientas más utilizadas en
el área científica como lo es Scilab. A pesar de que el curso se enfoca en el uso de Scilab, el alumno
será capaz de programar en una diversidad de lenguajes como lo puede ser C, C++, MatLab, Pascal,
Java, Python etc.
Gran parte de la información aquí presentada ha sido recopilada de la lectura de muchos otros cursos
existentes en la red, como lo puede ser la plataforma edx.org, libros de principios de programación,
cursos de otras instituciones educativas, etc. Sin embargo la información ha sido adaptada y es
actualizada de acuerdo a las necesidades específicas de los alumnos de este curso en particular.
Scilab
SciLab es un lenguaje interpretado para cálculo científico, que fue desarrollado en 1990 por el
reconocido instituto francés de investigación INRIA (Institut National de Recherche en Informatique
et Automatique). Posteriormente colaboró en su desarrollo, la escuela de ingenieros ENPC (Ecole
Nationale de Ponts et Chaussées).
Desde mayo del 2003, es mantenido y desarrollado por “SciLab Consortium”, un consorcio de
empresas colaboradoras como Renault, Peugeot-Citroën, CEA (Commissariat à l'Energie Atomique),
CNES (Centre National d'Etudes spatiales), Dassault Aviation, EDF (Electricité de France), entre
otras.
Las facilidades de este software, es que nos permite hacer cálculos numéricos y algunos cálculos
simbólicos, como derivadas de funciones polinómicas y racionales. Posee cientos de funciones
matemáticas y la posibilidad de integrar programas en los lenguajes más usados (FORTRAN, Java y
C y C++).
Incluye numerosas herramientas: Gráficos 2D y 3D, álgebra lineal, matrices, resolución de sistemas
de ecuaciones diferenciales (explícita e implícita) y muchas cosas más que resultan de suma utilidad
para el estudio de las ciencias (matemática, física, química, astronomía, biología, etc.)
Scilab cuenta con un entorno de desarrollo que presenta distintas ventanas, las cuales cumplen con
una función en específico para facilitar la programación y el análisis del flujo de información en todo
momento.
La primera y más importante es la consola de Scilab (ver Figura No. 1), esta consola tiene como
finalidad correr cada uno de los comandos o instrucciones que vayamos tecleando y presentar los
resultados. Tiene la peculiaridad de poder acceder a comandos antes tecleados mediante el uso de las
teclas de navegación del teclado.
La segunda ventana llamada visualizador de variables o variable browser, nos permite observar las
variables que en este momento están en memoria activa, su tamaño y acceder directamente a sus
valores actuales (ver Figura No. 2).
La tercera ventana con la que podemos contar dentro de Scilab es la del historial de comandos, en
esta podemos encontrar listados todos los comando utilizados durante una sesión de trabajo (ver
Figura No. 3), la ventana también permite exportar la tabla de contenido a un archivo de texto si se
desea consultar posteriormente.
Principios de Programación
II.1 Conceptos básicos de programación.
Es importante iniciar con los conceptos básicos que nos permitirán adentrarnos poco a poco a la
programación, aprender su léxico, su función y el uso más cotidiano. El conocer la sintaxis y un
lenguaje de programación no nos convierte en programadores. La programación va más de la
mano en poder observar un problema y poder desglosarlo, de tal forma que, usando instrucciones
simples, que vayan paso a paso se pueda obtener el resultado deseado.
Algoritmo: En ocasiones hemos escuchado esta palabra, que en un inicio parece complicada de
describir pero podemos definirla simplemente como un método para resolver un problema mediante
una serie de pasos precisos, definidos y finitos. Precisos porque en todo momento debemos de tener
conocimiento del orden que sigue el flujo de mi información, definido porque conocemos la
transformación que sufre dicha información y finitos porque así como tiene un inicio debe de tener
un fin.
Entradas: Estos son los datos que alimentan a nuestro programa, por lo regular estos
provienen del teclado, archivos de texto, base de datos, etc.
Procesos: Las operaciones que se realizan sobre los datos de entrada, es donde los datos
sufren una transformación.
Salidas: Los resultados que salen de procesar la información inicial. Estas pueden ser
gráficas, imágenes, archivos de textos, registros en bases de datos, etc.
Metodología: El proceso de la programación implica tener una metodología que nos guíe, para ello
se sugieren una serie de pasos que desglosan nuestro problema hasta llevarlo a un punto donde es más
sencillo comprender y entonces codificar. Sin embargo estos pasos son relativos al estilo de cada
programador, por ejemplo: habrá quienes con la experiencia prefieren realizar los pasos en el
momento de la codificación y otros que a pesar de esa experiencia prefieren hacerlo antes de la
codificación.
1. Leer el problema: Un problema simple puede tornarse en uno sumamente complejo sino
entendemos de primera mano cual la problemática a resolver. Aquí es cuando la mayoría de los
novatos se diferencian de aquellos que tienen alguna experiencia previa. Para ello es
recomendable leer una y otra vez nuestro problema en busca de lagunas de información, conforme
leemos en repetidas ocasiones quizás esas lagunas vayan desapareciendo.
¿Qué tenemos?: Con que información contamos para resolver nuestro problema.
Si después del análisis nos damos cuenta que la información con la que contamos no es suficiente
para llegar a nuestro resultado deducimos lo siguiente:
3. Diseñar el algoritmo de solución: Ya que sabemos que nuestro problema si tiene solución, en lo
posible realizar un algoritmo en papel que resuelva mi problema. (Esta etapa generalmente
desaparece conforme el programador adquiere la suficiente experiencia del lenguaje de
programación y el control que tiene para visualizar los algoritmos al momento de codificar).
4. Codificar: Finalmente pasar este algoritmo al lenguaje de programación ideal para la resolución
de mi problema.
5. Comparar los resultados obtenidos contra los esperados, si no cumplen con nuestras expectativas
se procede a modificar de nuevo el algoritmo.
Nota:
Los problemas de la vida real son un buen reflejo de programación, sin darnos cuenta
vivimos tomando decisiones, repitiendo patrones y procesando información.
Variable: En programación, una variable está formada por un espacio en el sistema de almacenaje
(memoria principal de un ordenador) y un nombre simbólico (un identificador) que está asociado a
dicho espacio. Ese espacio contiene información conocida o desconocida, es decir un valor. El
nombre de la variable es la forma usual de referirse al valor almacenado: esta separación entre nombre
y contenido permite que el nombre sea usado independientemente de la información exacta que
representa. Scilab diferencia las letras minúsculas de las mayúsculas, por lo cual una variable T y una
t minúscula pueden ser parte del mismo algoritmo y tener valores distintos. Los nombres en Scilab
constan hasta de 24 caracteres, el primero debe ser una letra o $, los subsecuentes pueden ser letras,
números, #, _, $, !.
Constante: En programación, una constante es un valor que no puede ser alterado/modificado durante
la ejecución de un programa, únicamente puede ser leído. Por ejemplo el valor de 𝜋 (%pi) o la
constante de Euler (%e).
Suma:
Si x=3.5 calcular y= x+2.8
x=3.5
y=x+2.8
Resta:
Si x=31.75, calcular y=x-7.32
x=31.75
y=x-7.32
Multiplicación:
Si x=9.45, calcular y=6.92x+2.67
x=9.45
y=6.92*x+2.67
División:
Si x=32.97, calcular y=9.78/45.21x
x=32.97
y=9.78/(45.21*x)
Potenciación:
Si x=3, calcular x3
x=3
x^3
Raíz cuadrada:
Si x=81, calcular raíz cuadrada de x
x=81
sqrt(x)
Nota:
La presencia de punto y coma al final de las ordenes hacen que Scilab no muestre el
resultado en pantalla. Sin embargo, la orden tuvo efecto.
Ejercicio No.1: Transforme la siguiente ecuación en sentencias que puedan ser comprendidas por la
computadora y evalúe la expresión suponiendo que x=3.28.
Ejercicio No.2: Transforme la siguiente ecuación en sentencias que puedan ser comprendidas por la
computadora y evalúe la expresión suponiendo que x=9.67, y=1.98.
Ejercicio No.3: Consideremos la ecuación general de segundo grado (ecuación cuadrática) que tiene
la forma:
𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0
Resolver esta ecuación implica encontrar el valor o los valores de 𝑥 que cumplen con la expresión,
si es que existen. Para ello utilizamos la fórmula general que tiene la siguiente expresión:
−𝑏 ± √𝑏 2 − 4𝑎𝑐
𝑥=
2𝑎
𝑎 = 15.35, 𝑏 = 200.9, 𝑐 = 34
Para poder crear un programa debemos de hacerlo fuera de la consola de Scilab para ello hacemos
uso de SciNotes, esta herramienta nos permite crear un archivo con extensión .sce que posteriormente
mandaremos correr en la consola para obtener resultados.
Ejemplo No.1 Crearemos un programa que le solicite al usuario un par de números y que finalmente
presente las operaciones básicas aplicadas sobre estos: suma, resta, multiplicación y división.
Ejemplo No.2 Crearemos un programa que calcule el área de un triángulo si el usuario proporciona
la base y la altura.
Ejercicio No.4: Crea un programa que permita calcular el volumen de un pirámide de base
rectangular.
Ejercicio No.5: Crea un programa que permita calcular el área de una corona circular.
Ejercicio No.6: Crea un programa que implemente la fórmula general, permitiendo resolver las
ecuaciones de segundo grado que tienen la siguiente forma 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0.
Nota:
Si en algún momento surge la duda de cómo usar un comando en particular solo basta
usar el comando help comando_a_buscar en la consola de Scilab para que aparezca la
ayuda sobre ese comando. Conforme vayan subiendo la complejidad de los ejemplos y
ejercicios se irán incorporando a nuestro léxico nuevos comandos y aprenderemos su
utilidad.
Hasta este momento hemos visto pequeños ejemplos utilizando siempre valores numéricos, sin
embargo Scilab cuenta con diferentes tipos de datos que puede manejar y dependiendo del tipo de
dato tiene restricciones aplicables sobre estos.
Tipos de Datos
Scilab tiene la peculiaridad de siempre trabajar con el tipo real de doble precisión, aun así cuenta con
la posibilidad de trabajar datos enteros, booleanos, strings, matrices, hipermatrices (arreglos de más
de dos dimensiones), estructuras de datos (agrupaciones bajo un mismo nombre de datos de naturaleza
diferente) y vectores o matrices de celdas (son vectores o matrices cuyos elementos pueden ser
cualquier otro tipo de dato).
Existen algunos comandos que se pueden utilizar en la consola para conocer los límites máximos y
mínimos que pueden usarse en este tipo de datos.
%eps devuelve la diferencia entre 1.0 y el número de coma flotante inmediatamente superior.
Da una idea de la precisión o número de cifras almacenadas.
number_properties("tiny") devuelve el número más pequeño con que se puede trabajar.
number_properties("huge") devuelve el número más grande con que se puede trabajar.
%i
Constantes
ans nombre por defecto de la variable utilizada en los resultados no asignados a otra variable
directamente.
%pi número pi.
%e número de Euler.
%nan indefinido.
%inf infinito.
Instrucciones Condicionales
Son aquellas instrucciones en donde se tienen dos caminos, un camino cuando la condición es
verdadera y otra cuando es falsa. Si la condición dentro de la instrucción condicional es verdadera
entonces el programa entra en su estructura y efectúa una o más instrucciones que ahí están definidas,
de ser falsa la condición, el programa evita entrar en esa secuencia y continúa con el cuerpo del
programa ver Figura No. 7.
También se cuentan con condicionales compuestas, estas consisten en una serie de condicionales
simples encadenadas, lo que permite que existan múltiples caminos y acciones antes de regresar al
cuerpo principal del programa ver Figura No. 9.
Operadores relacionales
Para formar una condición que pueda ser evaluada dentro de las sentencias IF es necesario conocer
los operadores relacionales.
Si la condición se cumple los operadores relacionales regresan un valor verdadero en caso contrario
un valor de falso.
Operadores lógicos
Los operadores lógicos de Scilab son los siguientes:
& and
| or
~ negación lógica
Ejemplo No.3: Crearemos un programa que dados dos valores de entrada, imprima siempre la
división del mayor entre el menor de los números.
//Programa que compara un par de números y regresa siempre la división del mayor entre el
menor
clear;
clc;
divi=0;
a=input("Introduce el valor de a:");
b=input("Introduce el valor de b:");
if a >= b then
divi = a/b;
else
divi = b/a;
end
disp(divi,"El resultado de la división es:");
Ejemplo No.4: Crearemos un programa que pida que se le den tres números, el programa deberá
de ser capaz de identificar cuál de los tres es el mayor.
Ejercicio No.7: Crea un programa que implemente la fórmula general, permitiendo resolver las
ecuaciones de segundo grado que tienen la siguiente forma 𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0, siempre y cuando el
resultado no sea un número complejo. El programa debe de avisar al usuario que con los valores
que está introduciendo no se puede realizar el cálculo si así se amerita.
Ejercicio No.8: Escribe un programa que pida al usuario tres números, el primero de ellos asignado
a una variable día, el segundo al mes y finalmente el año, con los tres dígitos comprobar si la fecha
introducida es válida o invalida e informarle al usuario mediante un mensaje. Nota importante,
tomaremos en cuenta que febrero tiene 28 días y los años validos solo serán a partir del año 1.
Ejercicio No.9: Escribe un programa que dado un valor de x y z este sea evaluado en la siguiente
función discontinua y pueda determinar el valor de f(x,z).
𝑥 3 + 3𝑧 − 28 𝑠𝑖 𝑥 < 0 𝑦 𝑧 < 0
−𝑧 𝑠𝑖 𝑥 = 0 𝑜 𝑧 = 0
√4𝑥 2 𝜋 + 3.25
𝑓(𝑥, 𝑧) = 𝑠𝑖 𝑥 > 0 𝑦 𝑧 < 0
350 − 2.9𝑧
𝜋
9.45𝑥𝑧 3 + 2.93
{ 𝑒 𝑥𝑧 𝑠𝑖 𝑥 > 0 𝑦 𝑧 > 0
Ejercicio No.10: Escribe un programa que permita al usuario usar al Ley de Ohm. La ley de Ohm
establece una relación entre la intensidad de corriente (I) que circula por el circuito, la diferencia
de potencial (V) y la resistencia del mismo (R):
𝑉
𝐼=
𝑅
El programa deberá de presentar un mensaje donde indique que si el usuario quiere calcular la
intensidad debe de presionar el número 1, si desea el voltaje debe de presionar el número 2, si desea
el voltaje presionar el número 3. Una vez que conozcas la decisión del usuario solicita los datos
necesarios para realizar cada cálculo; por ejemplo si el usuario presiona el 1, es necesario solicitarle
el voltaje y la resistencia para poder realizar el cálculo de la intensidad. Finalmente el programa
debe de presentar el resultado.
Instrucciones Cíclicas
Las computadoras están diseñadas especialmente para todas aquellas pequeñas aplicaciones en las
cuales una operación o conjunto de ellas deben repetirse muchas veces. Las estructuras que repiten
una secuencia de instrucciones un número determinado de veces se denominan bucles y se denomina
iteración al hecho de repetir la ejecución de una secuencia de acciones.
<comandos o instrucciones>
end
for índice=valor_inicial:valor_final
<comandos o instrucciones>
end
Ejemplo No.5: Hacer un programa que imprima los números del 10000 al 0, en orden decreciente
en decrementos de 2.5 en 2.5.
//Programa que imprime los números en orden decreciente del 10000 al 0 en decrementos de 2.5
clear;
clc;
for i=10000: -1: 0
disp(i);
end
Ejemplo No.6: Crear un programa que despliegue las tablas de multiplicar de un número n que desee
el usuario desde (n x 1) hasta llegar a (n x m) según sea indicado. Por ejemplo el usuario indica que
desea la tabla del 5 hasta llegar al 5x4, en este ejemplo n=5 y m=4;
//Programa que pide la tabla y el número de veces que deseamos que se calcule
clear;
clc;
n = input("Dame el valor de la tabla que deseas calcular:");
m = input("Hasta que número deseas llegar:");
for i=1:m
disp(n*i);
end
Ejercicio No.11: Hacer un programa que pida un número y calcule el factorial de este. Recordemos
el factorial de un número es el producto de todos los enteros desde 1 hasta el número dado inclusive,
ejemplo. Factorial de 5 = 5x4x3x2x1= 120. Hay que verificar que el número que introduzca el
usuario sea mayor a 0 antes de realizar las operaciones sobre este.
Ejercicio No.12: Hacer un programa que pida un número y presente la suma del número a la
potencia del mismo hasta llegar a 1. Ejemplo. 5 = 54+43+32+21+10
Ejercicio No.13: Escribe un programa que solicite un número y realice una sumatoria desde ese
número hasta llegar al 1, con la siguiente condición, si el número es par se eleva al cubo, si es impar
se eleva al cuadrado antes de ser sumado. Te puedes auxiliar del comando pmodulo. Ejemplo. 8 =
83+72+63+52+43+32+23+12
Es decir, f1=1, f2=1, y cada uno de los siguientes términos de la sucesión se calculan sumando los
dos anteriores: fi = fi-1+fi-2. El programa debe de pedir al usuario cuantos valores de la serie se desean
calcular y presentarlos al usuario.
Ejercicio No.15: Crea un programa que lance n veces un dado virtual utilizando el comando
variable=floor(rand()*6)+1, tendrás que calcular cuantas veces apareció cada uno de los números
del 1 al 6. El valor de n será solicitado al usuario.
while (condicional)
<comandos o instrucciones>
end
Ejemplo No.7: Crear un programa que pida al usuario un número, si el número introducido es mayor
a cero deberá de sumarlo a una variable acumulativa y volver a preguntar por otro número, sin
embargo si el número es menor o igual a 0, dejara de preguntar, procederá a calcular y presentar el
promedio de los anteriores n dígitos introducidos.
//Programa que pide n veces un número y si es menor o igual a 0 salir y dar el promedio de los n-
1 números anteriores
clear;
clc;
conta = 0;
acumu = 0;
prom = 0;
x = input("Dame un número:");
while (x > 0)
conta = conta+1;
acumu = acumu+x;
x = input("Dame un número:");
end
prom = acumu/conta;
disp(conta,"El número de valores capturados es:")
disp(prom,"El promedio de todos los número introducidos es:");
Ejercicio No.16: Escribe un programa que pida al usuario tres números, el primero de ellos asignado
a una variable día, el segundo al mes y finalmente el año, con los tres dígitos comprobar si la fecha
introducida es válida. Mostrar un mensaje al usuario de si la fecha está correctamente o no escrita,
el programa terminara hasta que el usuario introduzca una fecha válida. Nota importante,
tomaremos en cuenta que febrero tiene 28 días y los años serán a partir del año 1.
Ejercicio No. 17: Escribe un programa que pueda calcular el máximo común divisor de un par de
números enteros positivos a y b. Como recordatorio, el máximo común divisor es el número entero
más grande que divide a cada uno de los números sin tener residuo. Por ejemplo:
Un tip es comenzar a probar con un número igual al más pequeño de ambos números introducidos
por el usuario y reducir iterativamente este valor de prueba en 1 hasta llegar al caso donde dicho
valor pueda dividir tanto a a como a b sin dejar residuo o simplemente finalizar si ese valor de prueba
llego a 1.
Ejercicio No. 18: Escribe un programa que le permita a la computadora adivinar un número entero
entre 0 y 100 que el usuario introduzca por medio del teclado, utilizando el siguiente algoritmo:
𝑙𝑖+𝑙𝑠
Calcular un número entero intermedio entre el límite inferior y el superior 2 (utiliza el
comando int para truncar la parte decimal).
Presentarle el número al usuario y preguntarle lo siguiente: Este es tu número presiona 1,
el número es más pequeño al número que introdujiste presiona 2, el número es más grande
al número que introdujiste presiona 3.
Si el usuario eligió la opción 1, el programa deberá de decir, “Te adivine tu número, el
número es” y presentar el número.
Ejercicio No.19: Realizar un programa que calcule la raíz cuadrada mediante un método iterativo.
El cálculo de √𝑥 puede realizarse de forma aproximada mediante un método iterativo. Se estima
𝑥
inicialmente la solución como 𝑆𝑖 = lo cual sólo es cierto en el caso de x=4. Seguidamente
2
𝑆𝑖2 −𝑥
calculamos una nueva aproximación 𝑆𝑖+1 = 𝑆𝑖 − .
2𝑆𝑖
Si la diferencia en valor absoluto entre las dos aproximaciones es inferior a cierto umbral o error,
|𝑆𝑖+1 − 𝑆𝑖 | < 𝑒𝑟𝑟𝑜𝑟 damos por buena la última aproximación, sino realizamos una nueva
aproximación. El programa deberá de solicitar el umbral de error y el valor de x al cual se le quiere
calcular la raíz.
Lo ideal en una serie de Taylor es que n tienda al infinito y entonces estaremos más cerca del valor
real de sin(x), sin embargo nosotros terminaremos el programa cuando la diferencia entre la
aproximación en k y de k+1 sea menor a un error dado por el usuario. Realizar un programa que
pida el valor de x en grados, lo convierta a radianes y aplique la aproximación y dé como resultado
el sin de ese valor x.
Operaciones matriciales.
Suma y resta de matrices: La suma o resta de dos matrices A ± B con dimensiones 𝑚 − 𝑝𝑜𝑟 − 𝑛, se
calcula como sigue:
donde 1 ≤ 𝑖 ≤ 𝑚 𝑦 1 ≤ 𝑗 ≤ 𝑛.
Ejemplo:
Ejemplo No.8: Realizar un programa que haga la suma de un par de matrices utilizando el
procedimiento de la suma antes descrita.
𝑘[𝐴]𝑖,𝑗 = 𝑘 ∙ 𝐴𝑖,𝑗
Ejemplo:
Ejemplo No.9: Realizar un programa que haga la multiplicación de una matriz por un escalar
utilizando el procedimiento antes descrito.
Ejemplo:
Ejemplo No.10: Siguiendo el procedimiento anterior generar un programa que saque la transpuesta
de una matriz.
Producto matricial: El producto matricial de dos matrices se define sólo si el número de columnas
de la matriz de la izquierda es el mismo que el número de filas de la matriz de la derecha. Si A es una
matriz 𝑚 − 𝑝𝑜𝑟 − 𝑛 y B es una matriz 𝑛 − 𝑝𝑜𝑟 − 𝑝, entonces su producto matricial AB es la matriz
𝑚 − 𝑝𝑜𝑟 − 𝑝 cuyas entradas vienen dadas por producto escalar de la fila correspondiente de A y la
correspondiente columna de 𝐵:
𝑛
0 1000
2 3 4 3 2340
[ ] [1 100 ] = [ ]
1 0 0 0 1000
0 10
Ejercicio No.21: Realizar un programa que calcule la multiplicación de un par de matrices, A y B.
Multiplicación de elemento por elemento correspondiente: El producto matricial sigue una serie de
reglas que permiten determinar la matriz resultante a partir de la iteración y suma entre sus filas por
columnas. Sin embargo en ocasiones podemos requerir multiplicar una matriz contra otra pero que
cada elemento se multiplique únicamente contra el elemento en la misma posición pero de la otra
matriz, dicho de otro modo.
Ejemplo:
Ejercicio No.22: Realizar un programa que calcule la multiplicación elemento por elemento de un
par de matrices, A y B.
Nota:
La forma vista para realizar operaciones sirve para que los alumnos comprendan los procesos
que tiene que realizar una computadora para sumar matrices, multiplicar etc. Sin embargo Scilab
tiene predefinidas funciones para evitar tal disyuntiva.
Sumar dos matrices en Scilab: Si A es una matriz y B otra matriz es tan sencillo como poner A+B,
restar una matriz a otra A-B, multiplicar una matriz A*B.
𝑆𝑢𝑚𝑎 = ∑ ∑ 𝐴𝑖,𝑗
𝑖=1 𝑗=1
Ejercicio No.25: Realice un programa que dada un matriz m x n aleatoria, busque el valor máximo
y su posición dentro de la matriz.
Nota:
Existe el comando min que es semejante al max la diferencia está en que este busca el
mínimo.
Mean es otro comando que se puede usar en los vectores o las matrices, este calcula el
promedio de la matriz o el vector.
Median comando semejante a mean pero para la mediana.
St-deviation semejante a mean pero para la desviación estándar.
Sum semejante a mean pero para la suma.
Prod semejante a mean pero para el producto.
Norm(x) calcula la norma euclidiana del vector x.
Una función o procedimiento tiene la finalidad de realizar tareas específicas que por alguna razón se
repetirán un número de veces en el programa principal. Los subprogramas ayudan a tener más legible
nuestro código y localizar errores.
function [var_sa11,var_sal2,…,var_saln]=nombre_funcion(var_entra1,var_entra2,…,var_entran)
proceso1
proceso2
proceson
endfunction
Ejemplo No.11: Convertiremos los Ejercicios No.4, No.5, No.8, No.17, No.19 en funciones.
Ejercicio No.26 Hacer una función para la sucesión de Fibonacci utilizando vectores. La sucesión
de Fibonacci es la siguiente: 1, 1, 2, 3, 5, 8, 13, 21, 34,…
Es decir, f1=1, f2=1, y cada uno de los siguientes términos de la sucesión se calculan sumando los
dos anteriores: fi = fi-1+fi-2. La función tendrá como parámetros de entrada el número de términos
que desea el usuario se calculen y devolver el vector con los elementos de la serie de Fibonacci.
Ejercicio No. 27: Hacer una función que implemente la criba de Eratóstenes. Eratóstenes era un
griego que se dio cuenta que si en una lista de números tachaba todos los múltiplos de cada primo,
en la lista solo quedaban primos. La función deberá de utilizar este método para calcular los número
primos existentes de 1 hasta el límite superior que desee el usuario. Los parámetros de entrada es el
límite superior y de salida la función debe de regresar en un vector la lista de número primos
comprendidos entre el 1 y el límite superior. Ejemplo:
Iniciamos buscando los números primos a partir del número 2, tachando todos los múltiplos de dos,
esto lo hacemos brincando de dos en dos las posiciones del vector y sustituyendo el valor por un 0.
Seguido de esto se procede a buscar la siguiente posición en el vector que sea distinta a 0, y
procedemos a brincar entre posiciones de acuerdo al número seleccionado.
Continuamos haciendo esta acción hasta que hayamos recorrido todo el vector en busca de un
número por borrar.
Scilab maneja algunos comandos para el manejo de archivos, en este momento analizaremos la
utilización de dos de ellos que a nuestro punto de vista son los más sencillos.
variable = read(“nombre_del_archivo”,no_filas,no_columnas);
En la variable se cargara el archivo, si este consta de varias columnas y renglones entonces la variable
se convertirá en una matriz. Si en nuestro archivo no conocemos de antemano el número de filas
podemos poner como dato -1, esto le dirá a Scilab que cargue todas las filas del archivo.
Algo muy importante a tomar en cuenta, es que el archivo debe de estar guardado en la carpeta de
trabajo de Scilab de lo contrario jamás se podrá cargar el archivo en la variable. Sin embargo podemos
hacer uso de un par de comandos para cambiar esa carpeta de trabajo originalmente dispuesta por
Scilab a la carpeta donde trabajas actualmente.
Primeramente usamos el comando pwd() este comando nos mostrara la ruta actual de trabajo de
Scilab, si esta ruta no es la ruta donde tienes el archivo entonces procedemos a utilizar el comando
chdir(“nuevaruta”), este comando se encargara de cambiar la ruta anterior por la ruta que tu
dispongas y donde se supones tendrás el archivo de texto guardado.
Ejercicio No.28: Crear una función que reciba los valores de un vector x proveniente del archivo
datos28.txt y determinar lo siguiente:
𝑆 = ∑ 𝑥𝑖
𝑖=1
𝑆𝑐 = ∑ 𝑥𝑖2
𝑖=1
La media:
𝑆
𝑀=
𝑛
La varianza:
𝑆𝑐
𝑉= − 𝑀2
𝑛
La desviación típica:
𝑠 = √𝑉
La función debe de recibir el vector x con los datos y regresar en una sola variable cada uno de los
cálculos solicitados. Para este ejercicio revisar el uso del comando struct.
El primer ordenamiento que presentamos es quizá el más ampliamente conocido entre los estudiantes
que se inician en la programación. Una de las características de este ordenamiento es que es fácil
de entender y programar. Aunque, es uno de los algoritmos más ineficiente.
La idea básica subyacente en el ordenamiento de burbuja es pasar a través del arreglo de datos
varias veces en forma secuencial. Cada paso consiste en la comparación de cada elemento en el
arreglo con su sucesor (x[i] con x[i+1]) y el intercambio de los dos elementos si no están en el orden
correcto. Considérese el siguiente arreglo de datos:
25 57 48 37 12 92 86 33
25 48 37 12 57 86 33 92
Obsérvese que después del primer paso, el elemento mayor (en este caso 92) está en la posición
correcta dentro del arreglo. En general x[n-i] estará en su posición correcta después de la iteración
i. El método se lama ordenamiento de burbuja porque cada número “burbujea” con lentitud hacia
su posición correcta.
Tips:
Para intercambiar un valor entre dos variables distintas o dos posiciones de una matriz o de
un vector se utiliza una variable auxiliar de la siguiente manera.
A=10, B = 15 intercambiar el valor de A a B y viceversa.
aux = A
A=B
B = aux
Crea una función que reciba un vector con los elementos en desorden y regrese el mismo vector pero
ordenado.
Este método de ordenación consta de los siguientes pasos (suponiendo ordenación de menor a
mayor).
Crea una función que reciba un vector con los elementos en desorden y regrese el mismo vector pero
ordenado.
Ejemplo 12: Hacer uso del comando gsort(x','lr','i'), para poder hacer el ordenamiento de datos más
simple, utilizando herramientas propias de Scilab.
II.7 Gráficas
Una de las funcionalidades que identifica más a Scilab es la forma relativamente fácil de graficar. A
diferencia de muchos lenguajes de programación donde tienes que apoyarte de elementos externos
para graficar o donde tienes que desarrollar el programa que grafique lo que deseamos, Scilab
incorpora herramientas que con simples comandos puede llegar a presentar gráficas de muy alta
calidad y funcionalidad.
Ejemplo No.13: Crearemos un programa que dada una función en un intervalo grafiquemos los
resultados. En este primer ejemplo de graficación usaremos la programación de funciones.
En un intervalo de [0.1,38.5]
RUBEN CASTAÑEDA BALDERAS 32
[PROGRAMACIÓN, SCILAB]
y=fx(x);
plot(x,y);
xlabel("$0\le x\le 38.5$","fontsize",4,"color","red");
ylabel("$y(x)=\frac{x^3(2x^2+3.56x-5.21)}{\sqrt{3x+2.3}$","fontsize",4,"color","red");
title("Gráfica de la función","color","red","fontsize",4);
plot(varx,vary,”LíneaColorMarca”)
Ejemplos:
plot(x,y,”-r.”);
plot(x,y,”-g+”);
plot(x,y,”y”);
plot(x,y,”s”);
En un intervalo de [0.1,38.5]
y=fx(x);
z=fxy(x,y);
plot(x,y,"red");
plot(x,z,"blue");
xlabel("$0\le x\le 38.5$","fontsize",4,"color","black");
ylabel("Valores de la funcion 1 y 2","fontsize",4,"color","black");
title("Gráfica de las funciones","color","black","fontsize",4);
legend(["$y=\frac{x^3(2x^2+3.56x-
5.21)}{\sqrt{3x+2.3}$";"$z=(10x+y\sqrt{3xy^4+y^2})(x^3+xy^2+5.9)$"]);
Ejemplo No.15: Crear un programa basado en el ejemplo anterior pero utilizando subplot.
En un intervalo de [0.1,38.5]
y=fx(x);
z=fxy(x,y);
subplot(2,1,1);
plot(x,y,"red");
xlabel("$0\le x\le 38.5$","fontsize",4,"color","black");
ylabel("Valores de la función1","fontsize",4,"color","black");
legend("$y=\frac{x^3(2x^2+3.56x-5.21)}{\sqrt{3x+2.3}$","color","black","fontsize",4);
subplot(2,1,2);
plot(x,z,"blue");
xlabel("$0\le x\le 38.5$","fontsize",4,"color","black");
ylabel("Valores de la funcion2","fontsize",4,"color","black");
legend("$z=(10x+y\sqrt{3xy^4+y^2})(x^3+xy^2+5.9)$","color","black","fontsize",4);
Ejemplo No.16: Crear un programa basado en el ejemplo anterior pero utilizando gráficas
separadas.
y=fx(x);
z=fxy(x,y);
scf;
plot(x,y,"red");
xlabel("$0\le x\le 38.5$","fontsize",4,"color","black");
ylabel("$y=\frac{x^3(2x^2+3.56x-5.21)}{\sqrt{3x+2.3}$","fontsize",4,"color","black");
scf;
plot(x,z,"blue");
xlabel("$0\le x\le 38.5$","fontsize",4,"color","black");
ylabel("$z=(10x+y\sqrt{3xy^4+y^2})(x^3+xy^2+5.9)$","fontsize",4,"color","black");
𝑍 = 𝑋 sin 𝑋 2 cos 𝑌
Donde −𝜋 ≤ 𝑋 ≤ 𝜋 y −𝜋 ≤ 𝑌 ≤ 𝜋
x = -%pi:0.1:%pi;
y = -%pi:0.1:%pi;
[X,Y] = meshgrid(x,y);
tamano = size(X);
for i=1:tamano(1)
for j=1:tamano(2)
Z(i,j)=X(i,j)*sin(X(i,j))^2*cos(Y(i,j));
end
end
xset("colormap",jetcolormap(128));
surf(X,Y,Z);
xlabel('X');
ylabel('Y');
zlabel('Z');
• Grafique la función densidad de probabilidad de X siendo una v.a. Gaussiana con media 0
y una desviación estándar de 1.
• Grafique la función densidad de probabilidad de Y siendo una v.a. Gaussiana con media 5
y una desviación estándar de 1/2.
1 𝑥−𝜇
𝑓(𝑥) = 𝑒𝑥𝑝 (− )
√2𝜋 2𝜎 2
//Probabilidad y estadística
xdel(winsid());
clear;
clc;
stacksize('max');
//Primera parte distribución de X
des_es = 1;
media = 0;
x = -5:0.1:5;
fx = (1/(sqrt(2*%pi)*des_es))*exp(-(x-media).^2/(2*des_es^2));
subplot(2,1,1);
plot(x,fx,"r");
//Segunda parte distribución de Y
des_es = 1/2;
media = 5;
y = 0:0.1:10;
fy = (1/(sqrt(2*%pi)*des_es))*exp(-(y-media).^2/(2*des_es^2));
subplot(2,1,1);
plot(y,fy,"b");
//Tercera parte distribucion conjunta
C=fy'*fx;
subplot(2,1,2);
xset("colormap",jetcolormap(2500));
surf(x,y,C);
Ejemplo No.19: Crearemos un programa que presente la gráfica de la siguiente ecuación, solicite el
límite inferior y superior para posteriormente pintar el área deseada por el usuario. La grafica va
de -3 a 3.
2 2
𝑓(𝑥) = 𝑒 −𝑥
√𝜋
x=-3:0.01:3;
fx=2/sqrt(%pi)*exp(-x.^2);
plot(x,fx);
x2 = a:0.01:b;
xpoly([a x2 b],[0 2/sqrt(%pi)*exp(-x2.^2) 0],"lines",1);
p=get("hdl");
p.polyline_style = 5;
p.foreground = 20;
Ejemplo No.20: Generar un programa que permita plotear varias graficas que comparten el eje x
pero no el eje y de tal modo que puedan ser vistos sus valores correctamente.
𝑓(𝑥) = 𝑠𝑒𝑛𝑥
𝑥
𝑔(𝑥) = 𝑐𝑜𝑠
5
donde 1 ≤ 𝑥 ≤ 30
Ejemplo No.21: Utilizar las gráficas de contorno, junto con las gráficas la de superficie para
presentar los resultados de la siguiente ecuación:
𝑧 = 𝑥 sin 𝑥 2 cos 𝑦
Donde −𝜋 ≤ 𝑥 ≤ 𝜋 y −𝜋 ≤ 𝑦 ≤ 𝜋
// Ejemplo No.19
xdel(winsid());
clear;
clc;
function [z]=superficie(x, y)
z=sin(x)^2*cos(y)
endfunction
x = -%pi:0.1:%pi;
y = -%pi:0.1:%pi;
z=feval(x,y,superficie);
contour(x,y,z+0.2*abs(z),20,flag=[0 2 4]);
plot3d(x,y,z);
Ejemplo No.22: Realizar la gráfica de pie de acuerdo a los siguientes datos recolectados en una
escuela, donde se encuestaron a un total de 200 alumnos de cuál era su deporte favorito.
//Grafica de pie
xdel(winsid());
clear;
clc;
ATOMS
Conocidos en otros lenguajes como toolboxs (MATLAB), a diferencia de otros lenguajes Scilab no
provee herramientas adicionales a la paquetería propia del software. Sin embargo crea una cultura de
colaboración, en donde los usuarios crean módulos de herramientas para propósito específico y
permite al resto de los usuarios la posibilidad de utilizarlos a su favor.
Módulos externos que extienden las capacidades de Scilab en campos específicos algunos
ejemplos son: Reconocimiento de patrones, redes neuronales, manejo del puerto serie,
comunicación con Arduino, manejo de imágenes, robótica, estadística aplicada etc.
Estos módulos pueden ser puestos a disposición de los usuarios directamente desde la consola
de Scilab a través de una nueva función denominada ATOMS (gestión automática de
módulos para Scilab), si el autor del módulo lo desea.
Módulo Función
Serial Communication Toolbox Un kit de herramientas para la comunicación a través del puerto
serie.
ANN Toolbox Un kit de herramientas para las redes neuronales artificiales,
basado en el libro "Matrix ANN“.
Lolimot Kit de herramientas para el desarrollo de redes neuronales.
Java Interaction Mechanism in Scilab Permite manipular algunos objetos de JAVA desde Scilab
GUI Builder Permite crear entornos de interfaz gráfica
GUI Builder
Scilab cuenta con una serie de comandos para generar pequeñas interfaces graficas que permitan
hacer programas más sencillos y atractivos para los usuarios. Sin embargo lamentablemente no son
sencillos de usar, la mayoría utiliza un gran número de parámetros que dificultan un poco su
construcción y manipulación.
Para hacer este proceso más sencillo existe una de las herramientas de creación de GUIs de manera
intuitiva, con esto se logra que el usuario dedique mayormente su tiempo en el desarrollo de los
cálculos y no en la construcción de la interfaz.
Bibliografía
Scilab and SIP for Image Processing, Ricardo Fabbri1, Odemir Martinez Bruno, Luciano
da Fontoura Costa, Institute of Mathematical and Computer Sciences, University of S˜ao
Paulo, Brazil, Physics Institute of S˜ao Carlos, University of S˜ao Paulo, Brazil, Polytechnic
Institute, State University of Rio de Janeiro, Brazil.
Curso de Scilab, Introducción Parte I y II. Prof. Enrique Eduardo Gavorskis Souto, Prof.
Francisco M. Gonzalez-Logatt.
DSP Notes: Sound I/O and Spectrums, Dr. Fred DePiero, CalPoly State University.
Image Processing with Scilab and Image Processing Design Toolbox, Dr. Eng. (J) Harald
Galda, 2011.
Fundamentos y aplicaciones de Scilab, version 1.0, Andrés Alfonso Caro, Cesar Valero
Sepúlveda.
Scilab for very beginners, Scilab Enterprises S.A.S -- 143 bis rue Yves Le Coz --‐ 78000
Versailles (France) --‐ www.scilab--‐enterprises.com
Anexo No.1
Comando Función
clear Clear sin argumentos, clear elimina todas las variables
creadas previamente (excepto las variables globales),
funciona de la misma manera si usamos clear all.
clear A,b borra las variables indicadas de la memoria
del computador.
clc clc borra toda la entrada y la salida de la ventana de
comandos (dicho en otras palabras borra la pantalla de
comandos).
disp Muestra en pantalla la información que se requiere, ya
sea mensajes o valores de variables.
disp(‘El valor es’);
disp(xi)
// El uso de las dos diagonales le indica a Scilab que lo
que le sigue en la misma línea es un comentario, que
sirve para documentar nuestro código pero que jamás es
ejecutado por el computador.
input x= input(‘Dame el valor de x’);
Permite almacenar en x el valor de lo solicitado por
pantalla.
abs( ) Valor absoluto
acosh ( ) Arcocoseno hiperbólico
asinh( ) Arcoseno hiperbólico
atanh( ) Arcotangente hiperbólico
cosh( ) Coseno hiperbólico
coth( ) Cotangente hiperbólico
log( ) Logaritmo natural
acos( ) Arcocoseno
asin( ) Arcoseno
atan( ) Arcotangente
cos( ) Coseno
cotg( ) Cotangente
exp( ) Función exponencial ex
log10( ) Logaritmo decimal
log2( ) Logaritmo en base dos
max( ) Máximo
min( ) Mínimo
pmodulo( ) Residuo entero
rand() Número aleatorio
round() Redondeo
xgrid Activa la inclusión de una cuadrícula en el dibujo. Con
xgrid(‘off’) desaparece la cuadrícula.
plot2d2 Dibuja un diagrama de escalera
plot2d3 Dibuja un diagrama de barras
plot2d4 Diagrama de flechas
fplot2d Dibuja una función
contour2d Dibuja curvas de nivel en 2 dimensiones