Manual de Python, Mathlab y Latex

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

1.

Jupyter Notebook
Jupyter es una herramienta muy útil para programar. Es compatible con lenguajes de programación
como Python, R, C++ y julia. Es posible acceder a esta herramienta online o descargarla en su versión
de escritorio. Para acceder de manera online, accedemos a través de la url http://jupyter.org/try, donde
muestra las opciones disponibles. Allı́ procedemos a escoger Try Jupyter with Python. Una vez seleccionada
esta opción, nos redigirá hacia una notebook predeterminada donde muestra un tı́tulo de bienvenida y algo
de la información básica sobre Jupyter.
Es posible eliminar este contenido o en su defecto, crear una nueva notebook. Cada archivo creado es
Jupyter es una notebook, cada una de estas a su vez está formada por celdas. Una barra azul al lado
izquierdo, indica la celda actual. Las celdas pueden ser para código Python o para markdowns.

1.1. Notebook
Pueden ser creadas desde el menú File en la opción New Notebook y seleccionando después Python 3.
Al crear una nueva Notebook, podrá cambiar el nombre al archivo en la cabecera del documento. Además,
tendrá solo una celda.
Cada Notebook puede ser exportada a diferentes formatos. Entre ellos: LATEX, .ipynb que es el formato
en el que puede volver a cargar la notebook en Jupyter.
Es posible crear nuevas celdas o eliminar celdas existentes. Existen varios tipos de celdas que veremos
con detalle más adelante. Por ahora bastará con saber que en estas se puede ejecutar código Python y que
para ejecutar el código se puede hacer click en la opción run o usar el atajo ctrl+enter.

2. Python
Python es un lenguaje de programación bastante útil y muy popular hoy en dı́a. Es usado por Google,
NASA y otras compañı́as a nivel mundial. Esto es debido a la amplia gama de librerı́as disponibles que
abarcan distintas ramas de la ciencia y a su sintaxis sencilla, permitiendo ası́ resolver una amplia variedad
de problemas.

2.1. Comandos básicos y la librerı́a NumPy


A continuación están algunosm ejercicios de ejemplo para el proceso de familiarización con la sintaxis de
Python. Principalmente en lo que respecta a la parte matemática, partiendo inicialmente de las operaciones
básicas para luego pasar al uso de funciones como las trigonométricas y la exponencial, y el uso de constantes
como π o e;

2.1.1. Realice un programa que lea dos números digitados por el usuario y los sume

Suma de 2 números

1 num1 = input ( " Digite un n ú mero " )


2 num2 = input ( " Digite otro n ú mero " )
3 suma = num1 + num2
4 print ( " La suma de los n ú meros es : " , suma )

En este ejemplo se puede ver que primero se hace la lectura de los dos números mediante el comando
input(”Digite un número”. Esto lo que hace es, mediante la función input, leer el dato que digite el
usuario. Posteriormente en la linea 3 se realiza la suma, asignando a la variable suma el resultado de sumar
num1 y num2. Finalmente, en la 4 lı́nea se muestra el resultado de la operación mediante la función print,
que recibe un texto que describe lo que se va a mostrar por pantalla y el valor de la variable que se desea
mostrar.

1
2.1.2. Realice un programa en Python que calcule el resultado siguiente expresión:

n3
p
2 · (n + 1)

1 n = int ( input ( " Digite el valor de n " ) )


2 resultado = n **3/(2*( n +1) ) **(1/2)
3 print ( resultado )

En este ejemplo podemos ver algunos operadores matemáticos básicos y la forma en la que se usan
en Python. Siendo la operación de la exponenciación la que resulte más peculiar. En este lenguaje de
programación, este operación se indica mediante dos asteriscos, por ejemplo, si se quiere hallar el resultado
de ab , se debe escribir a**b.
A continuación se hará uso de funciones trigonométricas por medio de la librerı́a numpy . Esta libreria es
una herramienta fundamental para la computación cientı́fica en Python, gracias a que incorpora poderosas
herramientas para realizar cálculos cientı́ficos.

2.1.3. Realice un programa en Python que reciba del usuario un ángulo en grados, lo convierta
a radianes y finalmente calculo el seno de dicho ángulo.
Antes de proceder a resolver a este ejercicio, se hace necesario recordar cómo es el proceso de convertir
de grados sexagesimales a radianes.
Sea x un ángulo dado en grados, y sea y su equivalente en radianes, se tiene que:
x·π
y=
180
Dicho esto, se procede a realizar el programa.

Seno de un ángulo

1 import numpy as np
2 x = float ( input ( " Digite el angulo : " ) )
3 y = x * np . pi /180
4 seno = np . sin ( y )
5 print ( " El seno del á ngulo es : " , seno )

La primera lı́nea de este ejemplo cumple la función de importar la librerı́a numpy a nuestro programa.
Una vez importada, para ejecutar cualquier función o acceder a las constantes que incorpora se escribe el
nombre de la liberı́a seguida de un punto y el nombre de la función o la constante, como se puede observar
en las lı́neas 3 y 4. La razón por la que se escribe np y no numpy es debido a que se indicó que accederı́amos
a la librerı́a mediante el alias de np, como se puede observar en la primera lı́nea.
Al igual que la función seno, esta librerı́a incorpora muchas otras funciones que veremos más adelante.

2.1.4. Realice un programa en Python que reciba del usuario 2 matrices y las multiplique.
Para realizar este ejercicio se puede utilizar la fuerza bruta mediante 3 ciclos repetitivos anidados o bien,
usar la librerı́a NumPy que incorpora funcionalidades útiles para la manipulación de matrices.

Multiplicación de Matrices

1 ’’’
2 Este p r o g r a m a lee 2 m a t r i c e s para luego
3 mostrar por p a n t a l l a el r e s u l t a d o de m u l t i p l i c a r l a s
4 ’’’
5 import numpy as np
6 # Lectura de las dos m a t r i c e s

2
7 matA = np . mat ( input ( ’ Digite la matriz A : ’) )
8 matB = np . mat ( input ( ’ Digite la matriz B : ’) )
9 # C á lculo de la m u l t i p l i c a c i ó n
10 matC = np . matmul ( matA , matB )
11 # Muestra del r e s u l t a d o
12 print ( matC )

Como se puede ver, el procedimiento es muy sencillo. Primero se piden las 2 matrices al usuario, que
deben ser digitadas con el siguiente formato: [1 2 3; 4 5 6; 7 8 9]. Esto será la siguiente matriz:
 
1 2 3
4 5 6
7 8 9

Una vez se leen las dos matrices, se procede a realizar la multiplicación mediante la función matmul
de NumPy. Esta función recibe como datos de entrada las 2 matrices, y a la variable matC le asignamos el
resultado de tal multiplicación para ası́ finalmente mostrarlo por pantalla.
Mediante NumPy también se puede realizar la suma de matrices, producto interno, hallar la transpuesta,
el dato mayor, el menor, la media, etc.
Finalmente, nótese que en este ejemplo introducimos los comentarios en Python. Al igual que en otros
lenguajes, pueden ser multilı́nea o ser de solo una lı́nea. Los comentarios multilı́nea van encerrados entre
tres apóstrofes (’) a cada lado [Lı́neas 1-4]. Los comentarios de una sola lı́nea son indicados por el caracter
numeral (#) [Lı́neas 6, 9 y 11].

2.1.5. Realice un programa en Python que lea un número entero y ubique cada una de sus
cifras en un vector de modo que queden en el mismo orden del número, para luego
sumar todas las cifras diferentes a 5.
Por ejemplo: 1568 pasará a ser [1 5 6 8] y la suma será 15.
1 numero = int ( input ( " Digite un n ú mero : " ) )
2 aux = numero
3 v = []
4 while aux != 0:
5 digito = aux % 10
6 aux = aux // 10
7 v . insert (0 , digito )
8
9 suma = 0
10 for d in v :
11 if d != 5:
12 suma += d
13
14 print ( " La suma es : " , suma )

En este ejemplo se pueden apreciar algunas novedades: Ciclos mientras que, para y un condicional simple.
A diferencia de otros lenguajes, en Python no se manejan las comunes llaves, sino que los bloques de código
se indican con los dos puntos (:) y para que el lenguaje interprete cualquier sentencia como parte de un
bloque de código, es necesario que se encuentre con el mismo nivel de identación de las demás sentencias que
compongan tal bloque. En el ejemplo se observa que el ciclo mientras que (while) lleva seguido la condición
y los dos puntos, y lo que va dentro de este, tiene un nivel de identación mayor; de igual manera aplica esto
para el for de la linea 10 y para el if de la lı́nea 11.
Adicional a estos elementos, también se hizo uso de una lista. En la lı́nea 3 se inicializa como vacı́a y en
la lı́nea 7 se van añadiendo los elementos de esta. Para hacer tal inserción se utilizó la función insert propia
de la clase list, que recibe como parámetro la posición en la que se insertará el elemento y el elemento a
insertar. También se puede insertar mediante la función append, pero esta inserta los elementos siempre en
la última posición, de modo que si se hubiera usado, habrı́a sido también necesario usar la función reverse.
Quedando el ciclo de este modo:

3
4 while aux != 0:
5 digito = aux % 10
6 aux = aux // 10
7 v . append ( digito )
8
9 v . reverse ()

Por último, se puede observar que la división se hizo con dos barras inclinadas, la razón de esto es que
es la forma de realizar división entera en Python.

2.1.6. Realice una función en Python que calcule el n-ésimo término de la sucesión de Fibo-
nacci mediante su definición recursiva.
Antes de realizar el ejercicio, recordemos la definición recursiva de la sucesión de Fibonacci:

Fn = Fn−1 + Fn−2 F0 = 0, F1 = 1 n > 1 (1)

Esto quiere decir que el n-ésimo término es la suma de los 2 anteriores. Y que los 2 términos base, para
F0 y F1 son 0 y 1 respectivamente. De modo que la definición recursiva aplica desde el segundo término en
adelante. Dicho esto, procedemos a realizar el algoritmo.

Función Fibonacci

1 def fibonacci ( n ) :
2 if n ==0 or n ==1:
3 return n
4 else :
5 return fibonacci (n -1) + fibonacci (n -2)
6
7 n = int ( input ( " Digite el n ú mero del t é rmino a calcular " ) )
8 f = fibonacci ( n )
9 print ( " El %d - é simo t é rmino es : %d " % (n , f ) )

Como se puede apreciar, para definir una función, se utiliza la palabra clave def , seguido del nombre de
la función y entre paréntesis los parámetros que recibe, y al final los caracterı́sticos dos puntos (:). Dentro
de la función, definimos los casos base y el llamado recursivo.

2.1.7. Cree una clase en Python llamada Punto que reciba como parámetros las componentes
en x y y de un punto y que a la hora de asignar los atributos, lo haga en coordenadas
polares. Adicionalmente, defina un método que permita obtener el ángulo en grados
sexagesimales. Defina un objeto de esta clase y muestre sus 2 atributos.
Antes de realizar este ejercicio, es necesario recordar cómo se hace la conversión de coordenadas carte-
sianas a polares.

Componente pFórmula
r x2 + y 2
θ arctan xy

Hecho esto, procedemos a resolver el ejercicio, teniendo claro que es necesario el uso de la librerı́a NumPy.
1 # i m p o r t a c i ó n de la librer ı́ a numpy
2 import numpy as np
3
4 # e n c a b e z a d o de la clase
5 class Punto :
6
7 # constructor

4
8 def __init__ ( self , x , y ) :
9 self . radio = np . sqrt ( x **2+ y **2)
10 self . theta = np . arctan ( y / x )
11
12 # funci ó n para obtener el á ngulo en grados s e x a g e s i m a l e s
13 def d eg 2s e xa ge si m al ( self ) :
14 return np . rad2deg ( self . theta )
15
16 # i n s t a n c i a del objeto tipo punto
17 p1 = Punto (3 , 9)
18 # muestra por p a n t a l l a de los dos a t r i b u t o s de la clase
19 print ( p1 . radio )
20 print ( p1 . theta )

Como se puede ver, la para declarar una nueva clase se utiliza la palabra clave class, seguido del nombre
de la clase y los dos puntos. En Python, los métodos reservados de las clases están indicados por dos guiones
bajos antes y después del nombre del método. Por ejemplo, el constructor se señala por la palabra init y el
par de guiones bajos.
Los métodos que actúen sobre objetos de la clase, deben llevar siempre como primer parámetro la palabra
reservada self, que equivale a lo que en otros lenguajes es this. De modo que para la asignación y obtención
de un parámetro cualquiera dentro de la definición de la clase, se utiliza self ; como se puede observar en las
lı́neas 9 y 10. El paso de self como parámetro se puede observar en las 2 funciones definidas dentro de la
clase.
En la lı́nea 17 se realiza la instanciación del objeto, al que se le pasan los parámetros x e y. En las lı́neas
19 y 20 se realiza la muestra de los 2 atributos del objeto, obteniéndolos con el nombre del objeto seguido
de un punto y el nombre del atributo.

3. LATEX
3.1. Introducción
LATEXes un sistema de composición de textos principalmente usado para la creación de documentos
escritos. Las caracterı́sticas de este facilitan la creación de artı́culos académicos, libros cientı́ficos, tesis entre
otros, ya que este permite crear este tipo de documentos de manera muy práctica y ágil.
Para usarlo, es posible usar alguno de los editores que existen, los hay en versión web, como Sharelatex, y
en versión de escritorio, como TexStudio. En la versión de escritorio se requiere adicionalmente la instalación
de alguna de LATEX, ej:. MikTeX. En la versión web, para el caso de ShareLatex, solo se requiere de la
creación de una cuenta donde los proyectos que se realicen quedarán guardados.

3.2. Estructura del documento


Podemos dividir la estructura del documento en dos partes estas son el preámbulo y el cuerpo del texto

3.2.1. Preámbulo
El preámbulo se usa para darle a LATEXlas instrucciones principales para saber el tipo de documento que
va a ser, las caracterı́sticas que va a tener y los paquetes que se deben cargar. Este siempre inicia con la
siguiente instrucción:
1 \ documentclass [ < opciones >]{ < plantilla _ documento >}

Esta instrucción sirve para definir la plantilla y el formato que se va usar aquı́ un ejemplo:
1 \ documentclass [12 pt , letterpaper ]{ article }

5
El 12pt indica el tamaño de la letra, el letterpaper indica el tamaño del papel en este caso tamaño carta este
lo puedes cambiar por legalpaper, a4paper, entre otros y por ultimo donde dice article indica la plantilla que
se va a usar este puede ser cambiado por paper, book, report, entre otros.

Los paquetes en LATEXson extensiones que sirven para añadir funcionalidades existen muchos de estos y
cada unos de estos tiene diversas funcionalidades como poder insertar gráficos, definir colores, crear figuras,
poder añadir enlaces, entre otras.

Para añadir paquetes a nuestros documentos de LATEXnosotros vamos a crear un nuevo archivo en nuestro
paquete de LATEXen este caso llamado “packages.tex” y por cada paquete que necesitemos tenemos que
escribir en este archivo la siguiente instrucción:
1 \ usepackage [ < opciones >]{ < paquete >}

A continuación un ejemplo de cómo se usa:


1 \ usepackage { amsmath }
2 \ usepackage [ spanish ]{ babel }

En el primero se inserta el paquete amsmath que nos proporciona mas sı́mbolos matemáticos que los que ya
vienen por defecto en LATEXy en el segundo insertamos el paquete babel este es muy útil para escribir en un
lenguaje distinto al ingles ya que este traduce todo los textos al idioma deseado que le es indicado con la
instrucción anterior en este caso “spanish”.

Un paquete muy importante para nuestros documentos es el paquete:


1 \ usepackage [ utf 8]{ inputenc }

este nos permite el uso de caracteres especiales en LATEXque estan en nuestro idioma como letras con tildes o
la letra ñ entre otros. Lo que hace este paquete es decirle a LATEXque estamos usando la codificación UTF-8
que es el formato para almacenar caracteres UNICODE y este es la gran biblioteca donde están almacenados
los caracteres especiales de todos los idiomas del mundo para poder usarlos.

Para insertar el documento “packages.tex” creado para los paquetes en nuestro main debemos utilizar la
siguiente instrucción:
1 \ include { packages }

La instrucción include funciona para importar el archivo indicado al archivo actual, de modo que los
paquetes, variables y macros que se definan, estarán ahora disponibles en el archivo donde se importa.
Después de esto, se suele indicar el tı́tulo, autor y fecha del documento que se está escribiendo.
1 \ title { Introduction to Algorithms }
2 \ author { Cormen , T . , Leiserson , C . , Rivest , R . , Stein C .}
3 \ date {1989}

3.2.2. Cuerpo del texto


El cuerpo del texto es donde vamos a escribir toda la información de nuestro documento y este inicia con
la instrucción:
1 \ begin { document }

Y termina con la instrucción:


1 \ end { document }

6
Después de esta instrucción todo lo escrito en LATEXno se tendrá en cuenta y para tener la pre-visualización
del documento sobre el que se está trabajando, debemos escribir esta instrucción aunque no se haya termi-
nado porque sino, al compilar se generará un error.

Existen comandos que tienen parámetros que funcionan como la configuración de este mismo estos
parámetros van entre llaves o corchetes un ejemplo seria este:
1 \ documentclass [12 pt , twocolumn ]{ report }

Aquı́ vemos el comando documentclass que indica el tipo de documento que vamos a usar aquı́ podemos ver
entre llaves esta report que indica que vamos a hacer un reporte y esta dentro de corchetes 12pt que indica el
tamaño de la letra va a ser 12 y twocolumn que indica que escriba el texto a dos columnas estos son ejemplos
del uso de parámetros en algunos comandos que cambian la configuración de estos mismos.

3.2.3. Entornos
En LATEXexiste un concepto llamado environments (entornos) que por lo general requieren de algún
paquete para poder ser usados. Estos se delimitan como se muestra a continuación:
1 \ begin {...}[ < opciones >]
2 ...
3 \ end {...}

Cabe anotar que las opciones son siempre opcionales. Más adelante se podrá apreciar cómo se utilizan
los entornos y su utilidad. La más importante de estas es la que vimos anteriormente que limita el inicio y
el fin de nuestro documento.

Algunas cosas que tenemos que tener en cuenta para escribir en LATEXes que en este se escribe de manera
normal sin ninguna instrucción especial para que sea visible el texto, también hay que tener en cuenta que
si se pone más de un espacio entre palabras LATEXsiempre va a tomarlo como un solo espacio y además
LATEXtiene en cuenta que es un párrafo nuevo siempre que se dejan lineas en blanco dentro del texto.

3.3. Secciones y subsecciones


LATEXfacilita la organización del documento. Gracias a las secciones, subseccciones y subsubsecciones.
Estas, permiten -como su nombre lo indica- separar el documento en secciones y subsecciones. El mismo
LATEXse encarga de la numeración de estas.
1 \ section { Esta es una secci ó n }
2 Aqu ı́ va texto .
3
4 \ subsection { Esta es una subsecci ó n }
5 Aqu ı́ va texto .
6
7 \ subsubsection { Esta es una subsubsecci ó n }
8 Aqu ı́ va texto .
9
10 \ section { Otra secci ó n }

En este ejemplo, se crean 2 secciones; la primera con una subsección que a su vez tiene una subsubsección
y la segunda que no tiene subsección alguna. Tal como se muestra, estas solo requieren que se delimite el
inicio y que se indique el tı́tulo de la sección o subsección. Además, no es necesario indicar la numeración de
cada una, puesto que el mismo LATEXse encarga de esto.

7
3.4. Matemáticas en LATEX
Una de las mayores ventajas de LATEXes la facilidad con la que permite escribir textos con gran cantidad
de expresiones matemáticas, gracias a que cuenta con diversas herramientas (como paquetes y funciones)
que facilitan esta tarea. Es de resaltar que esta fue la principal motivación de Donald Knuth al crear TEX,
que es el sistema tipográfico sobre el que se basa LATEX.

3.4.1. Math Mode básico


Este es el entorno básico para la escritura de matemáticas en LATEX. Se inicializa mediante el doble signo
peso ($). Y se puede utilizar de dos maneras: Teniendo doble signo pesos a cada lado o uno solo; la diferencia
entre estos dos estilos radica en la forma en que se muestra al ser compilado. El que utiliza solo un signo a
cada lado de la expresión, se mostrará en la misma lı́nea en que se utilice, en tanto que el que utiliza doble
signo pesos se mostrará separado del texto. A continuación ilustramos esto.
1 $ x = 5^2$

Mostrará como resultado lo siguiente: x = 52


1 $$ x = 5^2$$

Producirá el siguiente resultado:


x = 52
Como se puede observar, el primer ejemplo deja la salida en la misma lı́nea y en el segundo, se produce
un salto de lı́nea para mostrar la expresión matemática.

3.4.2. Equation y Split


Además a estas 2 maneras de escribir ecuaciones en LATEX, tenemos otras opciones. La más básica de estas
es el entorno equation. Este entorno permite escribir expresiones matemáticas al igual que los dos vistos
anteriormente, siendo diferentes en que este entorno permite ser numerado, que a la ecuación/expresión se le
asigne un tı́tulo o que sea listada en el ı́ndice de ecuaciones (si está presente); y además, también es posible
referenciar la ecuación mediante la etiqueta que se le asigne. Es de resaltar que para poder hacer uso de
estos entornos, se requiere del paquete amsmath que debe ser importado, como se señaló antes, al inicio del
documento.
Ejemplo:
1 \ begin { equation }\ label { eq : subconjuntos }
2 \ sum _{ i =1}^{ n }{\ binom { n }{ i }}=2^ n
3 \ end { equation }
4
5 La ecuaci ó n \ eqref { eq : subconjuntos } nos muestra el n ú mero de subconjuntos posibles de un
conjunto de $ n $ elementos .

n  
X n
= 2n (2)
i=0
i
La ecuación (2) nos muestra el número de subconjuntos posibles de un conjunto de n elementos.
En este ejemplo se puede observar cómo se usa el entorno equation. Se define tal cual se explicó ante-
riormente, mediante las palabras claves begin y end . Luego de señalar el inicio del entorno, se usa label para
indicar la etiqueta de esta ecuación, posibilitando ası́ que sea referenciada, tal como se puede observar en la
lı́nea 5.
En la lı́nea 2 está la expresión matemática. Más adelante detallaremos sobre la escritura de estos sı́mbolos
en LATEX.
A continuación, mostraremos un ejemplo del entorno split que es usado en conjunto con el entorno
equation. Este entorno es muy útil en situaciones en las que una expresión matemática se toma varias lı́neas.
Ejemplo:

8
1 \ begin { equation *}
2 \ begin { split }
3 \ sum _{ i =0}{ n }{\ binom { n }{ i }} &= \ sum _{ i =0}{ n }{\ binom { n }{ i }1^{ n }\ cdot 1^{ n - i }}\\
4 &= (1+1) ^ n \\
5 &= 2^ n \\
6 \ sum _{ i =0}{ n }{\ binom { n }{ i }} &= 2^ n
7 \ end { split }
8 \ end { equation *}

n   n  
X n X n n n−i
= 1 ·1
i=0
i i=0
i
= (1 + 1)n
= 2n
n  
X n
= 2n
i=0
i

El entorno split anidado al entorno equation nos permite alinear expresiones matemáticas que no estén
en la misma fila. Cada fila se termina mediante el doble blacklash (\\) y la forma de indicar el punto donde
se produce la alineación es mediante el ampersand (&).

3.4.3. Sı́mbolos matemáticos


En la Tabla 1 están listados algunos sı́mbolos matemáticos y la manera en que se escriben en LATEX.
Todos estos deben estar siempre dentro de algún entorno matemático, de cualquier otra forma, se producirı́a
un error.

LATEX Resultado
\pi π
a
\frac{a}{b}
b
a
\binom{a}{b}
b
a\cdot b Pa · b
n
\sum_{i=1}^{n}{i} Qni=1 i
\prod_{i=1}^{n}{i} i=1 i

\sqrt{e} e
i sin α
e^{i\sin{\alpha}} e
f_{n+1} fn+1
Cuadro 1: Sı́mbolos matemáticos

En algunos casos, donde se esté trabajando con sı́mbolos matemáticos que tengan una altura mayor a la
mayorı́a de sı́mbolos y se desee que los paréntesis o corchetes coincidan con el tamaño de estos, se utilizan los
comandos \left\ y \right junto a los respectivos paréntesis o corchetes de apertura o cierre. Por ejemplo:
1 \ left [\ sum_ { i =1}^{ n }{\ binom { n }{ i }}\ right ]
 
n  

X n 
i=1
i

9
4. Librerı́a Matplotlib
Matplotlib es un modulo de Python que nos permite la fácil generación de gráficos en 2D y en 3D usando
datos que tenemos guardados en listas o arreglos. Matplotlib tiene una cantidad de librerı́as pero la que
principalmente usaremos es pyplot por las semejanzas con MATLAB. Para usar esta librerı́a debemos escribir
el comando:
1 import matplotlib . pyplot as plt

Los que hacemos aquı́ es importar la librerı́a pyplot de matplotlib y la renombramos como plt por comodidad
para usarlo después.

4.1. Generacion de gráficos en 2D


En Python para le generación de gráficas en 2D mediante la librerı́a pyplot, lo que se hace es generar
una tabla de valores en X y posteriormente calcular sobre estos los valores de la función que se desea
graficar, asignándolos a una variable Y . También es posible que manualmente indiquemos los valores de
ambos conjuntos, que es lo que vienen a ser X e Y . Posterior al cálculo de los valores para ambos conjuntos,
se pasan como parámetro a la función plot de pyplot.
Ejemplo 1

1 import numpy as np
2 import matplotlib . pyplot as plt
3
4 x = np . arange (0 , 2 * np . pi , 0.1)
5 y = np . sin ( x )
6 plt . plot (x , y )
7 plt . show ()

Figura 1: Ejemplo plot

Lo que hacemos aquı́ es primero importar las librerı́as numpy y matplotlib luego a x le asignamos
un vector con la función arange que recibe tres argumentos inicio del vector, final del vector y espacio
entre puntos; entonces lo que hacemos en nuestro ejemplo es asignarle a x un vector con puntos de 0 a 2π
distanciado en 0.1, a y le asignamos el otro vector con el seno de cada punto en x luego utilizamos el comando

10
plt.plot(x,y) para decirle que grafique la función en este caso seno de 0 a 2π y por ultimo el comando
plt.show para poder ver la gráfica, que puede apreciar en la Figura 1.
Ejemplo 2
En este ejemplo, los valores de los conjuntos no cumplen con ningún patrón, mostrando ası́ lo dicho acerca de
que es posible pasar arrays como parámetros sin necesidad de ser obtenidos mediante funciones matemáticas.
En este ejemplo creamos dos vectores, X e Y y los graficamos. Es de resaltar que deben cumplir con la
condición de tener igual número de elementos. El resultado se puede apreciar en la Figura 2.
1 import numpy as np
2 import matplotlib . pyplot as plt
3
4 X = [ -2 , 0 , 1 , 2 , 3 , 5]
5 Y = [ -1 , 0 , 15 , 8 , 7 , 19]
6
7 plt . plot (X , Y )
8 plt . show ()

Figura 2

Esto es útil en caso de que nuestros datos no estén representados por una función. Ya sea porque re-
presentan datos estadı́sticos, obtenidos a partir de algún banco de datos o cualquier origen diferente a una
función matemática.
Hasta ahora solo hemos mostrado ejemplos con una sola gráfica. También es posible mostrar dos gráficas
a la vez, tanto una junto a la otra como por separado.
Para la muestra de 2 gráficas juntas, se ejecuta el comando plt.plot(X, Y) tantas veces como gráficas
se deseen mostrar, pasando como argumento -claro está- los conjuntos de valores para el conjunto de entrada
y salida.
Veamos un ejemplo.
Ejemplo 3
En este ejemplo graficaremos al mismo tiempo las funciones seno y coseno.
1 import numpy as np
2 import matplotlib . pyplot as plt
3
4 x = np . linspace (0 , 2* np . pi )
5 y1 = np . sin ( x )
6 y2 = np . cos ( x )

11
7
8 plt . plot (x , y1 , ’g ’ , label = ’ sin ( x ) ’)
9 plt . plot (x , y2 , ’r ’ , label = ’ cos ( x ) ’)
10
11 plt . legend ()
12
13 plt . show ()

Figura 3: Ejemplo con 2 gráficas

Ejemplo 4
En este ejemplo, mostraremos cada gráfica por aparte, mediante el uso de subplot.
1 # librer ı́ as n e c e s a r i a s para g r a f i c a r
2 import numpy as np
3 import matplotlib . pyplot as plt
4
5 # valores de x para la gr á fica de 1/ cos ( x )
6 x1 = np . linspace ( - np . pi /4 , np . pi /4)
7 # c á lculo de los valore de y
8 y1 = 1/ np . cos ( x1 )
9
10 # valores de x para la gr á fica e ^ cos ( x )
11 x2 = np . linspace (0 , 10)
12 # c á lculo de los valores de y
13 y2 = np . exp ( np . cos ( x2 ) )
14
15 # crea la subgr á fica
16 plt . subplot (2 , 1 , 1)
17 # plotea la gr á fica de 1/ cos ( x )
18 plt . plot ( x1 , y1 , ’g ’ , label = ’$ \\ frac {1}{ cos ( x ) } $ ’)
19 # muestra la leyenda de la gr á fica
20 plt . legend ()
21
22 # crea la subgr á fica
23 plt . subplot (2 , 1 , 2)
24 # plotea la gr á fica de e ^ cos ( x )
25 plt . plot ( x2 , y2 , ’r ’ , label = ’ $e ^{ cos ( x ) } $ ’)
26 # muestra la leyenda de la gr á fica
27 plt . legend ()
28
29 plt . show ()

12
Figura 4: Ejemplo con subplots

En la Figura 3 se pueden apreciar las gráficas de las funciones seno y coseno. En las lı́neas 5 y 6 obtenemos
los valores para ambas funciones y luego en las lı́neas 8 y 9 se grafican. En este ejemplo, introducimos un
par de novedades sobre la librerı́a Pyplot: Etiquetas y modificaciones a las gráficas.
En la Figura 4 hay 2 subplots. Ambas con funciones diferentes y valores diferentes en el eje de las abscisas.
En este ejemplo se muestra que es posible utilizar texto LATEXpara las etiquetas de las gráficas [Lı́neas 18 y
25].
La función subplot recibe 3 parámetros básicos: Número de filas, número de columnas y el ı́ndice. Y
procede a crear en la figura actual una subgráfica en el ı́ndice (virtual) de una rejilla (también virtual) del
indicado número de filas y columnas. Tal como se puede apreciar en el ejemplo, al crear una subplot, todo
lo relacionado a esta debe ir antes del a creación de cualquier otra supblot. Es decir: Cuando se trabaja con
subplots, todo el contenido y configuración de la misma debe ir posterior a la creación de la misma y antes
de la creación de cualquier otra subplot. Es posible evitar esto mediante el uso de la función add subplot,
que es explicado con detalle en la documentación de la librerı́a.
Las etiquetas y las modificaciones (color, grosor) a las gráficas son solo una parte de la amplia variedad
de opciones que ofrece la librerı́a para mostrar las gráficas.

4.1.1. Configuración de las Gráficas


Antes de proceder a explicar con detalle las herramientas que nos provee pyplot para modificar la forma
en que se ven nuestras gráficas, es necesario explicar un detalle importante sobre una forma de ejecutar
funciones en Python. Esto se hizo en las lı́neas de los 2 ejemplos anteriores donde se ejecutó la función plot
y no es más que indicar el nombre del parámetro seguido de un igual (=) y el valor del parámetro. Esto es
muy útil en funciones con un número considerable de argumentos opcionales o en su defecto, que hagan uso
de **kwargs o *args1 .
Dicho esto, quizá ahora cobra más sentido algo de lo hecho en los 2 ejemplos anteriores.
La librerı́a pyplot permite ’personalizar’ las gráficas: Ya sea cambiar su color, estilo de las lı́neas, ancho
de las lı́neas o asignar tı́tulos a cada gráfica. También permite modificar el tamaño o cambiar las leyendas
de los ejes o incluso, ocultar estos últimos.

label: Establece el tı́tulo de la gráfica indicada. Como se mencionó antes, también pueden ir expresiones
matemáticas, yendo encerradas dentro de signos pesos ($).
1 Estas caracterı́sticas de Python permiten pasar un número variable de argumentos a las funciones en Python. Para más

información, recomendamos revisar la documentación de Python.

13
color: Establece el color para la gráfica.
linewidth: Ancho de las lı́neas.
linestyle: Estilo de las lı́neas.
alpha: Transparencia de la gráfica.
Estos parámetros también pueden usarse en la creación de otros tipos de figuras en pyplot, como lı́neas
o en la inserción de imágenes o texto. A continuación, mostramos 1 ejemplo para ilustrar esto.
Ejemplo 5

1 import numpy as np
2 import matplotlib . pyplot as plt
3
4 plt . figure ( figsize =(8 ,8) )
5
6 x = np . arange (0 , 5.01 , .01)
7 y1 = np . abs ( x )
8 y2 = np . floor ( x )
9
10 plt . plot (x , y1 , color = ’ red ’ , linestyle = ’ dashed ’ , linewidth =8 , label = ’ $y = abs ( x ) $ ’)
11 plt . plot (x , y2 , color = ’ green ’ , linestyle = ’ dotted ’ , linewidth =3 , label = ’ Funci ó n piso ’)
12 plt . legend ()
13
14 plt . show ()

Figura 5: Uso de parámetros en Pyplot

En este ejemplo se hace uso de las funciones abs y floor de la librerı́a NumPy. Graficando los valores de
estas funciones entre 0 y 5. Como se puede observar, cada una está con la configuración indicada. Tanto el
color como el ancho de lı́nea y el estilo. En uso de las label debe ir acompañado de la ejecución de la función
plt.legend que permite que estas sean mostradas en la gráfica.

14
En este ejemplo, hacemos uso de la función figure, que permite modificar la figura (que es quien contiene
a la gráfica). Modificando el tamaño de la figura a 8 pulgadas de ancho y alto.
La librerı́a Pyplot además permite la inserción de texto y lineas en las gráficas. Permitiendo además, que
estos sean modificados por algunos parámetros que se usan para plot, con algunas excepciones para el texto.
Para la muestra de texto, se usa la función text; los dos primeros argumentos son las componentes en x e
y y el tercer argumento es el texto que se desea ubicar. Adicionalmente, puede recibir algunos parámetros
opcionales:
fontsize: Tamaño de la fuente
horizontalalignment: Alineación del texto horizontalmente. Recibe las opciones ’center’, ’right’ y ’left’.
verticalalignment: Alineación en vertical del texto. Tiene las mismas opciones del alineamiento hori-
zontal.
color: Color del texto
Por otro lado, la función arrow permite crear lı́neas o flechas. Para esta, aplican los mismos parámetros
opcionales indicados arriba para plot; pero también incluye otras opciones propias de esta función como lo
son:
head width: Ancho total de la punta de la flecha.
head length: Longitud de la punta de la flecha.
width: Ancho de la cola de la flecha.
shape: Forma de la punta de la flecha. Se puede elegir entre mostrar la mitad derecha (’right’), izquierda
(’left’), o la opción predeterminada de mostrar completa la punta (’full’).

Ejemplo 6

En este ejemplo crearemos tanto texto como flechas en la figura, combinando algunas de las opciones que
nos permiten personalizarlas.
1 import numpy as np
2 import matplotlib . pyplot as plt
3
4 plt . axis ([ -6 , 2 , -7 , 1])
5
6 plt . arrow ( -5 , -5 , 5 , 0 , width = 0.2 , color = ’red ’ , head _ width = 1)
7 plt . arrow (1 , -5 , 0 , 5 , width = 0.15 , color = ’ blue ’ , shape = ’ right ’)
8 plt . arrow ( -5 , -5 , 0 , 5 , width = 0.18 , head _ length = 0.8 , color = ’ green ’)
9
10 plt . arrow ( -4 , 0.5 , 4 , 0 , color = ’ black ’ , linewidth =13 , head _ length = 0)
11
12 plt . text ( -2 , -3 , ’ Hola mundo ’ , fontsize =15 , h o r i z o n t a l a l i g n m e n t = ’ center ’)
13
14 plt . show ()

En este ejemplo, se hizo uso de la función axis para cambiar los lı́mites de los ejes. Recibe como parámetro
un vector donde la primera y segunda posición delimitan el eje X y la tercera y cuarta posición delimitan el
eje Y .
Es conveniente explicar que en la función arrow, los dos primeros parámetros corresponden a las coor-
denadas de origen, en tanto que el tercero y cuarto indican la diferencia en x e y -respectivamente- hacia el
punto final de la lı́nea o flecha.
Si se quisieran ocultar los ejes, se utiliza la función axis, pasando como parámetro ’off’, de este modo:
plt . axis ( ’ off ’)

15
Figura 6: Ejemplo con texto y flechas/lineas

5. LATEX
Hasta ahora hemos visto la manera en la que se escriben expresiones matemáticas en LATEX, y su fun-
cionamiento básico para la organización de los documentos. Ahora presentaremos un par de caracterı́sticas
más: Tablas, figuras, tabla de contenido, y la organización con otros archivos LATEXbajo un mismo proyecto.

5.1. Tablas
El entorno básico para la creación de tablas en LATEXes tabular. A continuación detallamos su uso:
1 \ begin { tabular }{|| l | c | r ||}
2 A~
n o & Nobel de Literatura & Pa ı́ s \\ \ hline
3 2015 & Svetlana Aleksi é vich & Ucrania \\ \ hline
4 2016 & Bob Dylan & Reino Unido \\ \ hline
5 2017 & Kazuo Ishiguro & Jap ó n \\\ hline
6 \ end { tabular }

Año Nobel de Literatura Paı́s


2015 Svetlana Aleksiévich Ucrania
2016 Bob Dylan Reino Unido
2017 Kazuo Ishiguro Japón
En la lı́nea 1 se inicializa el entorno y se definen las columnas del mismo. Las letras ’c’, ’l’, y ’r’ indican
la alineación del texto de cada columna, significando ”centro”, ”izquierda” y ’derecha” respectivamente.
Cada una de las barras horizontales indica una linea vertical separando la columna de las demás. Para las
tablas, al igual que para los entornos split, el ampersand sirve para señalar el lugar en el que termina cada
columna en cada fila. El doble backlash indica el final de cada fila y el comando \hline indica que allı́ se
debe posicionar una lı́nea horizontal.
El uso del entorno tabular por sı́ solo, no permite agregar tı́tulos ni referenciar las tablas creadas y
mucho menos la creación automática de un ı́ndice de tablas mediante el comando listoftables. Ası́ que
para lograr esto, se hace necesario el uso del entorno table, teniendo el entorno tabular anidado en este. Y
de manera opcional, seguido al entorno tabular, se pueden definir tanto un tı́tulo como una etiqueta -similar
a la usada para ecuaciones- para la tabla.
1 \ begin { table }[ h !]
2 \ centering
3 \ begin { tabular }{|| l | c | r ||}

16
4 \ hline
5 A~
n o & Nobel de Literatura & Pa ı́ s \\ \ hline
6 2015 & Svetlana Aleksi é vich & Ucrania \\ \ hline
7 2016 & Bob Dylan & Reino Unido \\ \ hline
8 2017 & Kazuo Ishiguro & Jap ó n \\ \ hline
9 \ end { tabular }
10 \ caption { Tabla de ejemplo }
11 \ label { tab : tbl - ejemplo }
12 \ end { table }

Año Nobel de Literatura Paı́s


2015 Svetlana Aleksiévich Ucrania
2016 Bob Dylan Reino Unido
2017 Kazuo Ishiguro Japón

Cuadro 2: Tabla de ejemplo

El comando \centering lo que hace es centrar la tabla. En tanto que caption asigna el tı́tulo a la tabla
y label la correspondiente etiqueta, que se usa para referenciar la tabla mediante el comando \ref. En lo
que respecta al resto del código, no es más que lo visto con el uso del paquete tabular. En la linea 1 se
puede observar que se está haciendo uso de los corchetes para establecer configuración sobre el entorno; en
este caso h!. La h indica que el contenido del entorno debe ir en el mismo lugar en el que se indica en el
código, y no desplazado hacia donde mejor se ajuste; el signo de admiración indica que debe hacer lo que
indica lo que lo acompaña omitiendo cualquier configuración.

5.2. Figuras
Para la inserción de figuras en LATEXse requiere del uso de del paquete graphicx. El comando para
insertar imágenes es includegraphics, que mayormente requiere del uso de los parámetros para ajustar el
tamaño de la imagen que se inserta, dado que a menudo es necesario ajustarla para que no se salga de los
márgenes o reducir la escala.
Algunas de las opciones de configuración disponibles son:

width: Permite ajustar el ancho de la imagen. Debe ser el número seguido de la unidad correspondiente;
en caso de no tener la unidad, corresponde a un porcentaje del ancho original.
height: Permite ajustar la altura de la imagen. Debe ser el número seguido de la unidad correspondiente;
en caso de no tener la unidad, corresponde a un porcentaje de la altura original.
scale: Permite ajustar la escala de la imagen. Debe ser un número entre 0 y 1.

Por ejemplo \includegraphics[scale=0.5]{imagenes/fig1.png} insertará la imagen fig1.png que


está dentro de la carpeta imagenes, en una escala del 50 % de su tamaño original.
Por otro lado, si se usa en la configuración [width=0.5] hará lo mismo, pero en un ancho del 50 % del
original; en cambio, también se puede usar [height=2cm] que insertará la figura, pero esta vez con una
altura de 2 centı́metros.
De manera similar a lo que hace el entorno table para con las tablas, existe el entorno figure con el
que se pueden añadir un tı́tulo y referencia a las imágenes.
1 \ begin { figure }[ h !]
2 \ centering
3 \ in cl u de gr ap h ic s [ scale =0.2]{ ejemplo 1. png }
4 \ caption { Imagen de ejemplo }
5 \ label { fig : imagen -1}
6 \ end { figure }
7
8 En la Figura \ ref { fig : imagen -1}...

17
Figura 7: Imagen de ejemplo

Como se puede observar en la Figura 7, no hay en realidad mayor novedad. El comando caption es
el que permite la asignación de un tı́tulo a la imagen. De igual modo, se le puede asignar una etiqueta
para referenciar la imagen mediante el comando ref. Tanto la etiqueta como el tı́tulo son completamente
opcionales.

5.3. Importación de archivos


En LATEXtambién es posible trabajar con archivos separados o de otros formatos (como PDF), siempre y
cuando estén dentro de la carpeta del proyecto.

5.3.1. Archivos TEX


Al igual que LATEX permite importar/incrustar imágenes, también permite incluir otros archivos de
formato tex, lo que es de gran utilidad para trabajar de manera más organizada y ágil, sobre todo cuando
se debe lidiar con documentos extensos. La manera de importar otro archivo TEX es mediante el comando
\include{archivo}. Donde archivo es el nombre del archivo a importar, cabe resaltar que no se debe anotar
el formato .tex al final del nombre. Por ejemplo, si se desea importar el archivo parte2.tex, se debe usar
de este modo el comando: \include{parte2}.

5.3.2. Archivos PDF


Similarmente, también es posible insertar archivos pdf dentro de nuestro documento. Para esto es ne-
cesario importar a nuestro proyecto el paquete pdfpages. Para incluir el archivo, se utiliza el comando
\includepdf[<opciones>]{archivo.pdf}.
En las opciones -que son opcionales- la más común es la de pages que permite definir cuáles páginas del
PDF serán importadas; permite definir páginas individuales o rangos de páginas.

pages = {1-5}: Inserta las páginas 1 a 5 del PDF.


pages = {4, 9}: Inserta las páginas 4 y 9 del documento.
pages = {1, {}, 2}: Inserta las páginas 1 y 2, pero con una página en blanco entre ambas.

pages = {1, 3-5, {}, 9}: Inserta la página 1, luego las páginas 3 a 5, una página en blanco y finalmente,
la página 9.

18
6. Python
6.1. Gráficas en 3D
La librerı́a matplotlib de python también nos permite hacer gráficas en tres dimensiones en python de
manera muy simple. A continuacion vamos a ver ejemplos para realizar graficas en 3D en python:
1 import numpy as np
2 import matplotlib . pyplot as plt
3 from mpl_toolkits import mplot3d
4 ax = plt . axes ( projection = ’3 d ’)
5
6 zline = np . linspace (0 , 15 , 1000)
7 xline = np . sin ( zline )
8 yline = np . cos ( zline )
9 ax . plot3D ( xline , yline , zline , ’ red ’)

Figura 8: Seno y Coseno

En este ejemplo lo que vamos a hacer

6.2. Colas de Prioridad


En Python también se puede hacer uso de las colas de prioridad. Esta estructura de datos se implementa
mediante un vector (que en Python vendrı́a a ser una lista) en la que el n-ésimo elemento tiene mayor
prioridad que los elementos en las posiciones 2n + 1 y 2n + 2. Los elementos se extraen de la cola en el
orden de prioridad que tengan. Tanto al eliminar como al agregar un nuevo elemento, los elementos siguen
conservando su orden de prioridad.
La librerı́a necesaria para el uso de esta estructura de datos es heapq y las funciones usadas son: heappush
que permite insertar un nuevo elemento; heappop que elimina y devuelve el primer elemento y heapify que
convierte una lista a cola de prioridad. Las 3 funciones deben recibir como primer argumento la lista sobre
la que se efectúan las operaciones.
Ejemplo 1

1 from heapq import heapify , heappop , heappush


2 # se i n i c i a l i z a una lista vac ı́ a
3 a = []

19
4 # se agregan e l e m e n t o s a la cola de p r i o r i d a d ( PQ )
5 heappush (a , (2 , ’ P1 ’) )
6 heappush (a , (9 , ’ P2 ’) )
7 heappush (a , (1 , ’ P3 ’) )
8 heappush (a , (5 , ’ P4 ’) )
9 # se muestra por p a n t a l l a la PQ
10 print ( a )
11 # se e l im i n a n uno por uno los e l e m e n t o s de la PQ
12 # y se mu e s t r a n por p a n t a l l a
13 while a :
14 e = heappop ( a )
15 print ( e )
16
17 a = [(1 , ’ P5 ’) ,(9 , ’ P6 ’) ,(4 , ’ P7 ’) , (7 , ’ P8 ’) ]
18 heapify ( a )
19 print ( a )

Salida:
[(1, ’P3’), (5, ’P4’), (2, ’P1’), (9, ’P2’)]
(1, ’P3’)
(2, ’P1’)
(5, ’P4’)
(9, ’P2’)
[(1, ’P5’), (7, ’P8’), (4, ’P7’), (9, ’P6’)]
Como se puede observar, primero está la lista con los elementos insertados. Luego, están los elementos
ordenados, luego de haber sido eliminados de la cola de prioridad.
Finalmente, está lo correspondiente a las lı́neas 17 y 18. En donde se crea una lista de tuplas (Lı́nea 17) y
luego de convierte a cola de prioridad mediante el uso de la función heapify. En la salida se puede observar
la lista luego de ser transformada, cumpliendo con la propiedad de que todo elemento en la posición n es
menor o igual a los elementos 2n + 1 y 2n + 2.

7. Python
7.1. Análisis del tiempo de ejecución de algoritmos
Para realizar el análisis de un algoritmo, se puede proceder mediante el análisis de complejidad del mismo
o bien, proceder mediante la evaluación del tiempo de ejecución del mismo con cierta cantidad de datos (n).
Este análisis mediante el tiempo de ejecución se realiza mediante una gráfica de los valores del tamaño de los
datos de entrada vs. el tiempo de ejecución para cada tamaño de datos. La tabla 3 es un ejemplo de cómo
debe ser la tabla de datos necesaria para realizar la gráfica.

n f (n)
1 0.001
2 0.002
3 0.005
4 0.011
5 0.027

Cuadro 3: Ejemplo de tabla de datos

Estos datos se grafican y es lo que corresponde a una gráfica aproximada del tiempo de ejecución del
programa. Es decir, se evalúa el programa desde un valor inicial hasta un valor final, obteniendo el tiempo
correspondiente para cada tamaño de datos. Es de vital importancia tener en cuenta que si para el análisis
es necesario la creación de algún objeto o estructura de datos, esto debe ir aparte del análisis de la función

20
deseada, dado que -en este caso- la creación del objeto no es lo que se desea analizar, sino una función que
necesita de tal objeto. También es posible que se desee analizar el tiempo de creación de un objeto, en tal
caso, la creación del objeto sı́ debe ir dentro de lo que se desee analizar.
A modo general, la estructura es la siguiente:
1 import time
2 import numpy as np
3
4 max_n = 100
5 # C o n j u n t o de tama ~ n os de datos para los que se
6 # e j e c u t a r á el p r o g r a m a
7 N = np . arange (1 , max_n , 1)
8 # Lista donde se ir á n a l m a c e n a n d o los tiempos de ejecuci ó n para cada N
9 Y = []
10 for n in N :
11 ’’’
12 Aqu ı́ debe ir la creaci ó n del objeto ,
13 en caso de ser necesaria , que debe tener
14 un tama ~ no n.
15 ’’’
16 obj = crear_objeto ( n )
17 # se toma el tiempo de inicio de ejecuci ó n
18 t_inicio = time . time ()
19 f ( obj )
20 # se toma el tiempo de fin de ejecuci ó n
21 t_fin = time . time ()
22 # se calcula el tiempo tomado por la funci ó n
23 tiempo = t_fin - t_inicio
24 Y = np . append (Y , tiempo )

Al final de este programa, se pueden mostrar los resultados, ya sea en formato tabla o mediante un
gráfico.
Esto mismo se puede extender con el objetivo de comparar dos algoritmos.
Ejemplo 1
En este ejemplo procederemos a realizar una gráfica con la comparación del tiempo de corrida del algoritmo
para hallar el enésimo término de la sucesión de Fibonacci en su versión recursiva y en su versión iterativa.
1 import time
2 import numpy as np
3 import matplotlib . pyplot as plt
4
5 def fibiter ( n ) :
6 # casos base
7 v = [0 , 1]
8 ’’’
9 Se hallan los valores a partir de la d e f i n i c i ó n r e c u r s i v a
10 a c c e d i e n d o a los valores ya g u a r d a r d o s en un vector .
11 ’’’
12 for i in range (2 , n + 1) :
13 v . append ( v [i -1]+ v [i -2])
14
15 return v [ n ]
16
17 def fibrec ( n ) :
18 if n <= 1:
19 return n
20 else :
21 return fibrec (n -1) + fibrec (n -2)
22
23
24 max_n = 12
25 N = np . arange (1 , max_n , 1)
26 # tiempos versi ó n r e c u r s i v a

21
27 YRecu = []
28 # tiempos versi ó n i t e r a t i v a
29 YIter = []
30 for n in N :
31 # se mide el tiempo de la versi ó n r e c u r s i v a
32 t_inicio = time . time ()
33 fibrec ( n )
34 t_fin = time . time ()
35 YRecu = np . append ( YRecu , t_fin - t_inicio )
36
37 # se mide el tiempo de la versi ó n i t e r a t i v a
38 t_inicio = time . time ()
39 fibiter ( n )
40 t_fin = time . time ()
41 YIter = np . append ( YIter , t_fin - t_inicio )
42
43
44 plt . plot (N , YIter , label = ’ Iterativo ’ , color = ’ Red ’)
45 plt . plot (N , YRecu , label = ’ Recursivo ’ , color = ’ Blue ’)
46 plt . legend ()
47 plt . show ()

Salida:

En la gráfica se puede observar que el tiempo tomado por la versión recursiva es mayor en gran medida
respecto a la versión iterativa. Ahora bien, la gráfica obtenida puede variar, puesto que depende de las
capacidades de la computadora sobre la que se realice la comparativa. También es posible que se lleguen a
presentar sobresaltos bastante abruptos en la gráfica, por lo cual es sugerido, para cada n, realizar un número
determinado de intentos y promediarlos, para que sea este promedio el tiempo correspondiente para cada n.
for i in N :
promedio = 0
for j in range (0 , nIntentos ) :
inicio = time . time ()
funcion ( n )
fin = time . time ()
promedio = promedio + ( fin - inicio )

promedio = promedio / nIntentos


Y = np . append (Y , promedio )

22
Esto es una forma general de lo que se menciona. Con cierto número de intentos, se atenúan los saltos
abruptos que puedan darse en la gráfica, dado que estará siempre alrededor de un valor promedio para cada
n a medida que el número de intentos aumente.

8. Algunos sı́mbolos especiales en LATEX


Existen algunos sı́mbolos matemáticos que no están disponibles con la librerı́a amsmath y que deben ser
importados mediante el uso de otras librerı́as.

8.1. Piso y Techo


Para el uso de estos sı́mbolos, se hace necesario la importación del paquete amsmath. Al importar este
paquete, se puede entonces hacer uso de los comandos lfloor (b), lceil (d) y rceil (e); estos comandos
solo pueden ser usados en entornos de ecuaciones. Por ejemplo:
1 \ begin { align *}
2 \ lceil - x \ rceil = -\ lceil x \ rceil \\
3 \ lfloor - x \ rfloor = -\ lfloor x \ rfloor \\
4 \ end { align *}

d−xe = −dxe
b−xc = −bxc

Es posible no tener que escribir cada sı́mbolo (el derecho e izquierdo) cada vez que se necesite. Para esto, se
necesita de la importación del paquete mathtools. Entre las diversas herramientas que ofrece este paquete,
se hará uso del comando DeclarePairedDelimiter. Este comando permite definir en el preámbulo del
documento, un comando que resuma 2 comandos en uno solo, por ejemplo, que mediante un solo comando
ubique tanto rfloor como lfloor. Para ello, se le deben pasar 3 argumentos: El primero corresponde a el
nuevo comando que se va a definir, el segundo es el comando de la parte izquierda del operador y el tercero
es el de la parte derecha. Por ejemplo, si se desea que el comando ceil sea usado para ubicar rceil y lceil
se procede de este modo:
1 \ D e c l a r e P a i r e d D e l i m i t e r {\ ceil }{\ lceil }{\ rceil }

Una vez hecho esto en el preámbulo, se puede hacer uso del comando nuevo.
1 \ ceil { - x } = -\ ceil { x }

d−xe = −dxe
En ocasiones, se desea que el operador sea un poco más grande para que se ajuste al contenido. En estos
casos de hace uso de algunos parámetros que ofrece LATEX como \Big, \big y similares.
1 \ ceil [\ Big ]{ -\ frac { a }{ b }} = -\ ceil [\ Big ]{\ frac { a }{ b }}

l am lam
− =−
b b

23
Figura 9: Cuadro de búsqueda de funciones

8.2. Valor absoluto


Para el uso de esta función, se debe usar el paquete commath, que incorpora el comando abs. Por ejemplo,
posterior a la importación del paquete, se puede usar del siguiente modo:
\ abs {\ frac { a }{ b }}

a

b

9. Excel
9.1. Funciones en Excel
Excel permite el uso de funciones que trae predefinidas en sus celdas. En las celdas donde se deseaeejecutar
una función o realizar alguna operación, se debe primero escribir el signo igual (=). Además de esto, en Excel
se maneja la notación prefija, es decir, el operador va antes de los operandos, con cada uno de los operandos
separados por un punto y coma y el nombre de la función seguido de paréntesis que abarcan a los operandos.
Por ejemplo, si se desea sumar 2 valores x e y, se escribirı́a =SUMAR(X;Y). Sin embargo, para algunas funciones,
permite le uso de notación entrefija (o infija), donde el operador va en medio de los operados, de modo que
-para la suma- también serı́a válido escribir = x + y.
Excel permite el acceso o búsqueda de las funciones que ofrece mediante el cuadro de búsqueda de
funciones (ver Figura 9). Para acceder a este cuadro, se hace click sobre el botón de insertar función, que
se encuentra ubicado a la izquierda de la barra de fórmulas.
En este cuadro es posible buscar alguna función por su descripción o algún fragmento de su nombre,
además de buscarlas por la categorı́a a la que pertenecen o en la lista de las funciones usadas recientemente.
Cuando se selecciona cualquier función, en la parte inferior del cuadro se muestra la sintaxis de la función
además de una breve descripción de lo que hace.

24
Figura 10: Activación de la opción Desarrollador

9.2. VBA
Excel incluye una herramienta llamada VBA (Visual Basic for Applications). Esta herramienta permite
la creación de módulos que facilitan la manipulación de las hojas de cálculo y creación de soluciones que si
se hicieran aplicando las fórmulas directamente a las celdas, podrı́an volverse complicadas. VBA maneja una
sintaxis muy simple y permite una rápida creación de formularios.
Esta herramienta se encuentra oculta por defecto, por lo que no es posible acceder a ella mediante la
cinta de opciones. Para activarla es necesario ir al menú Archivo, y en la las opciones que se despliegan del
lado izquierdo, hacer click en Opciones y en el diálogo que se abre, seleccionar Personalizar La Cinta de
Opciones y en en el menú de la parte derecha, activar la opción Desarrollador, tal como se muestra en la
Figura 10.
Una vez se active esta opción, la opción será visible en la cinta de opciones de Excel. Al desplegarla, se
nos muestran las herramientas que se pueden observar en la Figura 11.

Figura 11: Cinta de opciones luego de activar las Herramientas para Desarrolladores

25
Figura 12: Ventana inicial de VBA

9.3. CRAPS
Craps es un juego de azar basado en el lanzamiento de dados. Para efectos prácticos, nos enfocaremos en
un solo jugador. A continuación se describen las condiciones para que el jugador gane o pierda.
En el primer lanzamiento, si un jugador al lanzar los dados obtiene un 2, 3 o 12, perderá inmediatamente,
por el contrario, si saca 7 u 11, ganará. En caso de que saque cualquiera de las otras 5 opciones, tendrá que
volver a lanzar. El jugador seguirá lanzando hasta que saque nuevamente lo que sacó en el primer intento,
caso que significará una victoria para el jugador, o bien, hasta que en algún lanzamiento obtenga el número
7, caso en el que el jugador pierde.
Este juego lo implementaremos mediante el uso de macros que ofrece VBA.
Para la implementación seleccionaremos la opción Visual Basic, que se encuentra ubicada en la parte
derecha de las opciones que ofrece la cinta de Herramientas Para Desarrolladores. Una vez se de click
sobre esta opción, se abrirá una nueva ventana, que se muestra en la Figura 12.
En la parte derecha, está la vista del proyecto, donde aparecen listados los objetos de Excel (Hojas,
Libros) y también otros como los módulos. Los módulos consisten en código que se ejecuta sobre nuestro
proyecto, pudiendo ası́ modificar las celdas de Excel, leer información de estás y más. Para la implemnetación
de CRAPS, haremos uso de un módulo y dentro de este, de una subrutina. Para la creación de un módulo,
se hace click en el menú Insertar de la barra de herramientas y luego en módulo. Una vez hecho esto, se
abrirá una ventana con el tı́tulo de Módulo 1 y en la vista del proyecto, se podrá ver una carpeta con el
nombre módulos y dentro de la que se encuentra el recién creado módulo.
Una vez con el cursor ubicado en la ventana del módulo, hacemos un proceso similar al de crear un
módulo, haciendo click en el menú insertar, pero esta vez seleccionando la opción de Procedimiento, y en
el cuadro de diálogo que ahora aparece, escribir CRAPS como nombre del procedimiento y dejando las demás
opciones tal como están. Al hacer esto, en nuestro módulo estará ahora el procedimiento CRAPS vacı́o.
1 Public Sub CRAPS ()
2
3 End Sub

Tal como se muestra en el código, se logra apreciar una propiedad del código escrito en VBA, y es que
cada bloque de código, tiene un End propio definido, por ejemplo, si se escribiera un If-Then, el bloque de
código tendrı́a que terminar con un End If o si se escribiera un While, deberı́a terminar con un Wend.

26
Como ejemplo inicial, tomaremos los valores de las celdas A1 hasta A5, las guardaremos en un vector y
luego sumaremos los valores de estas que sean mayores a 7, y finalmente, mostrar el valor de la suma en la
celda B1.
1 Public Sub CRAPS ()
2 ’ Se usar á para tener el ı́ ndice de la columna actual
3 Dim columna As Integer
4 ’ Vector para a l m a c e n a r los valores de las c o l u m n a s
5 Dim v (5) As Integer
6 ’ V a r i a b l e donde se a l m a c e n a r á la suma
7 Dim suma As Integer
8 ’ V a r i a b l e para guardar el valor de la columna actual
9 Dim valorColumna As Integer
10
11 columna = 1
12 While columna <= 5
13 ’ El valor de la columna no es la letra que la representa ,
14 ’ sino el ı́ ndice , e m p e z a n d o a contar desde 1.
15 valorColumna = Cells (1 , columna )
16 If valorColumna > 7 Then
17 suma = suma + valorColumna
18 End If
19 ’ Se guarda el valor de la columna en el vector
20 v ( columna ) = valorColumna
21 columna = columna + 1
22 Wend
23 ’ En la celda B1 se escribe el r e s u l t a d o de la suma
24 Cells (2 , 1) = suma
25 End Sub

En este procedimiento, se muestran algunos aspectos básicos de VBA. El primero de estos es la manera
en que se hacen los comentarios en el código, mediante el uso del apóstrofe. En la tercera lı́nea, se realiza la
declaración de una variable, lo que siempre se hace mediante la estructura mostrada: Dim nombre as tipo.
En el caso de desear declarar un vector, se procede tal como se hace en la lı́nea 6, donde la única variación es
que al lado del nombre de la variable, se indica entre paréntesis el tamaño del vector. Respecto al resto del
código, no existe mayor diferencia respecto a la forma en que esas instrucciones se realizan en otros lenguajes
de programación. Sin embargo, lo que varı́a es el uso de la función Cells, que permite la lectura y escritura
en las celdas del libro de Excel. Esta función recibe como parámetros el ı́ndice de la fila y el ı́ndice de la
columna de la celda que se desea escribir o leer. Para la ejecución de este procedimiento, se puede hacer click
sobre el botón de ejecutar o también, ubicados en la hoja de Excel, haciendo click sobre la opción Macros,
seleccionando CRAPS y presionando la opción de ejecutar.
Una vez hecho esto, podemos proceder a realizar nuestra implementación de CRAPS, totalmente basada
en las reglas que antes definimos.
1 Public Sub CRAPS ()
2 Dim over As Boolean
3 Dim n As Integer
4 Dim dado1 As Integer
5 Dim dado2 As Integer
6 Dim resultado As Integer
7 Dim lanzamientos (100) As Integer
8 ’ Numero de l a n z a m i e n t o s
9 n = 1
10 While over = False
11 ’ Los valores de los dados se crean a l e a t o r i a m e n t e
12 dado1 = Int ((6 * Rnd ) + 1)
13 dado2 = Int ((6 * Rnd ) + 1)
14 resultado = dado1 + dado2
15 lanzamientos ( n ) = resultado
16 ’ V e r i f i c a c i ó n en el primer l a n z a m i e n t o
17 If n = 1 Then
18 If resultado = 7 Or resultado = 11 Then

27
19 Cells (1 , n + 1) = " Gan ó "
20 over = True
21 Else
22 If resultado = 2 Or resultado = 3 Or resultado = 12 Then
23 Cells (1 , n + 1) = " Perdi ó "
24 over = True
25 End If
26 End If
27 Else
28 If resultado = 7 Then
29 over = True
30 Cells (1 , n + 1) = " Perdi ó "
31 Else
32 If resultado = lanzamientos (1) Then
33 over = True
34 Cells (1 , n + 1) = " Gan ó "
35 End If
36 End If
37 End If
38 Cells (1 , n ) = resultado
39 n = n + 1
40 Wend
41 End Sub

Esta subrutina está basada en las reglas ya definidas, tal como se puede ver en la subrutina. La variable
over se utiliza para detener la ejecución del ciclo, lo que se hace necesario cuando el jugador pierde o gana. Al
ejecutar el procedimiento, cada lanzamiento se escribirá en la n-ésima columna y cuando el juego termina,
en la columna siguiente a la del valor del lanzamiento (n + 1), se escribe el resultado obtenido: ”Ganó.o
”Perdió”.
Los valores de los dados se generan aleatoriamente mediante la función Rnd, que genera valores en el
intervalo [0, 1), y para a partir de estos valores obtener un número entre 1 y 6, se multiplica su valor por 6,
lo que significará números en el intervalo [0, 6), y finalmente, para que el valor del 6 pueda estar incluido y
además, el valor de 0 excluı́do, se le suma una unidad a este valor y finalmente se redondea, devolviendo ası́
valores entre 1 y 6, que es el rango de posibles valores que se pueden obtener al lanzar un dado.
En la Figura 13 se puede observar un ejemplo del resultado de ejecutar nuestra macro.

Figura 13: Ejemplo de resultado de CRAPS

28

También podría gustarte