You are on page 1of 23

Python para Ingenieros

Pedro Jorge De Los Santos


2016 Pedro Jorge De Los Santos

NDICE GENERAL

ndice general
Acerca de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Qu es Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2
2

Tipos de datos y operadores


Enteros . . . . . . . . . .
De coma flotante . . . . .
Booleanos . . . . . . . .
Cadenas de caracteres . .
Listas . . . . . . . . . . .
Tuplas . . . . . . . . . .
Diccionarios . . . . . . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

3
3
3
4
4
4
4
4

Estructuras de control
Sentencia if . . . . .
Bucle for . . . . . .
Bucle while . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

5
5
6
6

Grficas con Matplotlib . . . . . . . . . . . . .


Aqu comenzamos . . . . . . . . . . . . .
Una primera aproximacin: utilizando pylab
Pyplot y lo bsico . . . . . . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

7
7
7
14

.
.
.
.

.
.
.
.

.
.
.
.

Python para Ingenieros - Borrador

Acerca de

Acerca de

Python para Ingenieros - Borrador

Introduccin

Introduccin
Qu es Python?
Generalmente cuando se define un lenguaje de programacin, se hace referencia a sus caractersticas
ms representativas. Siendo as, Python es un lenguaje de programacin desarrollado a finales de
los 80s y con sus primeras versiones liberadas en los albores de los 90s. Se caracteriza por ser
interpretado, de tipado dinmico , multiparadigma y multiplataforma. Posee una licencia de cdigo
abierto (PSFL) desarrollada por la Python Software Foundation (PSF), de modo que el acceso al
cdigo fuente del proyecto est disponible para los desarrolladores. Lo anterior ha permitido, en
gran medida, la proliferacin de una comunidad slida alrededor del mismo.
Es un lenguaje de propsito general, relativamente sencillo de aprender y con un potencial enorme.
Sus aplicaciones pueden pasar desde un simple script para uso personal en las tareas comunes con el
ordenador, el desarrollo web, la seguridad informtica, y desde luego, las aplicaciones en el mbito
cientfico y de ingeniera.

Python para Ingenieros - Borrador

Tipos de datos y operadores

Tipos de datos y operadores


Enteros
En matemticas se clasifican como enteros aquellos nmeros en el intervalo (-oo, oo), que no
contienen una parte decimal o fraccionaria. Dadas las limitaciones de los ordenadores es evidente
que no podr representarse un entero demasiado grande, generalmente el lmite de representacin
es dado por las caractersticas del procesador.
En Python existen 2 tipos de enteros: el tipo entero ordinario (int) y el entero largo (long). La
diferencia es precisamente el lmite de representacin de cada uno. Puede obtener informacin acerca
del mximo entero tecleando lo siguiente en el intrprete de Python:
1
2
3

>>> import sys


>>> max_int=sys.maxint
>>> max_intl=sys.maxsize

Siendo max_int el entero ordinario mximo representado, generalmente este valor equivale a (231)1. El valor de max_intl corresponde al mximo entero largo.
Para definir un tipo entero no hace falta declararlo de forma explcita, por ejemplo:
1
2
3
4
5
6
7
8
9

>>> a=1
>>> b=100
>>> type(a)
<type 'int'>
>>> type(b)
<type 'int'>
>>> c=-100
>>> type(c)
<type 'int'>

De coma flotante
Los nmeros de coma flotante son aquellos que normalmente conocemos como nmeros reales. En
Python para que un valor numrico sea reconocido como real, debe utilizarse la funcin float o
bien aadir la parte decimal del nmero, aun cuando esta sea nula:
Python para Ingenieros - Borrador

Tipos de datos y operadores

1
2
3
4
5

>>> a=3
>>> b=float(3)
>>> c=3.0
>>> type(a),type(b),type(c)
(<type 'int'>, <type 'float'>, <type 'float'>)

Booleanos
Tambin conocidos como valores lgicos, son un tipo de dato fundamental, cuyo valor slo puede
adquirir dos estados: verdadero y falso. Se utilizan comunmente para la toma de decisiones en
conjunto con las estructuras de control de flujo. Las constantes booleanas en Python se nombran
mediante True y False.
Por ejemplo, si comparamos dos nmeros enteros cualesquiera para ver si son iguales:
1
2
3
4
5
6
7
8

>>> a=10
>>> b=15
>>> a==b
False
>>> a>b
False
>>> a<b
True

Cadenas de caracteres
Listas
Tuplas
Diccionarios

Python para Ingenieros - Borrador

Estructuras de control

Estructuras de control
Sentencia if
La sentencia if es una estructura de control flujo simple, utilizada para la toma de decisiones en el
curso de ejecucin que sigue el programa. En casi todos los algoritmos existen porciones de cdigo
que slo deben ejecutarse cuando se cumpla una condicin establecida, es ah donde la sentencia if
tiene su utilidad. Vea el ejemplo dado a continuacin:
1
2
3

a = 10
if a > 0:
print "Nmero positivo"

Veamos: primero se define una variable a con valor 10, posteriormente se hace la comprobacin
que si a es mayor a cero, lo cual implicara imprimir en pantalla un mensaje, de lo contrario no
se realizar accin alguna. Para el ejemplo mostrado, puesto que a es 10, entonces es un nmero
positivo, y por ende se ejecutar la porcin de cdigo incluido en la sentencia if.
En muchas situaciones la sentencia if se utiliza en conjunto con la sentencia complementaria else,
para formar una bifurcacin doble, que permite seleccionar una opcin especificada o bien otra
por default. A manera de ejemplo vamos a desarrollar un programa que determinar si un nmero
ingresado es par o impar:
1
2
3
4
5

n = input("n = ")
if (-1)**n == 1:
print "Par"
else:
print "Impar"

Si la condicin propuesta se cumple entonces se ejecutar el bloque incluido dentro de la sentencia


if, en cualquier otro caso se ejecutar el bloque definido por la clusula else.
Adems de las anteriores, existe otra forma ms general definida por las sentencias if-elif-else
cuya estructura general es:

Python para Ingenieros - Borrador

Estructuras de control

1
2
3
4
5
6
7
8
9
10
11
12
13

if cond1:
# ...
elif cond2:
# ...
elif cond3:
# ...
.
.
.
elif condN:
# ...
else:
# ...

La anterior es un tipo de bifurcacin mltiple, que permite seleccionar entre varias condiciones
definidas en la clusula if y en las subsecuentes elif, y una opcin por defecto establecida en la
clusula else. Un ejemplo:
1
2
3
4
5
6
7

n = input("n = ")
if n>0:
print "Positivo"
elif n<0:
print "Negativo"
else:
print "Cero"

Bucle for
Bucle while

Python para Ingenieros - Borrador

Grficas con Matplotlib

Grficas con Matplotlib


Aqu comenzamos
Matplotlib es una librera de Python para el trazo de grficas, desarrollada inicialmente por John
Hunter. Tiene una sintaxis inspirada en MATLAB y comparte mucha similitud en las principales
funciones, aunque Matplotlib permite un desarrollo de grficas utilizando el enfoque orientado a
objetos, lo cual le convierte en una herramienta muy potente.

Una primera aproximacin: utilizando pylab


Este primer captulo tiene como objetivo mostrar algunas de las capacidades de Matplotlib de manera
breve y un tanto superficial, utilizando la interfaz de pylab, esto para familiarizar al lector con la
sintaxis y el uso de algunas funciones elementales.
El mdulo pylab integra las capacidades grficas de Matplotlib con algunas utilidades de NumPy,
proporcionando de esta manera una interfaz muy parecida a MATLAB para el manejo de grficas.
En este captulo vamos a suponer que, antes de todo, se ha importado pylab de la siguiente manera:
1

from pylab import *

Lo anterior nos permitir disponer de todas las funciones de pylab dentro de nuestro script.
Luego, graficar nuestro primer ejemplo ser tan sencillo como escribir.
1
2

plot([1,-2,5,-2,1,0,3])
show()

Python para Ingenieros - Borrador

Grficas con Matplotlib

La funcin plot, en el caso anterior, recibe como argumento un arreglo de valores numricos, que
puede ser un lista de Python ordinaria, una tupla, y de manera ms comn un array de NumPy. La
funcin show permite mostrar en pantalla la linea o grfica que se ha creado con plot.
Ahora, como se ha mencionado, pylab tambin permite utilizar funciones de NumPy para la
definicin de arrays. Por ejemplo, con linspace podemos crear un vector de valores numricos:
1

linspace(a,b,n)

Siendo a el extremo inferior, b el extremo superior, y n el nmero de particiones en el intervalo [a, b].
Por ejemplo:
1
2

>>> linspace(1,10,10)
array([ 1.,
2.,
3.,

4.,

5.,

6.,

7.,

8.,

9.,

10.])

Luego, a estos arrays de NumPy podemos aplicarles funciones matemticas predefinidas, por
ejemplo:
Python para Ingenieros - Borrador

Grficas con Matplotlib

1
2
3
4
5
6
7
8

>>> x = linspace(0,2*pi,10)
>>> y = cos(x)
>>> x
array([ 0.
, 0.6981317 ,
3.4906585 , 4.1887902 ,
>>> y
array([ 1.
, 0.76604444,
-0.93969262, -0.5
,

1.3962634 ,
4.88692191,

2.0943951 ,
5.58505361,

2.7925268 ,
6.28318531])

0.17364818, -0.5
, -0.93969262,
0.17364818, 0.76604444, 1.
])

Con lo anterior crearemos nuestra primer grfica de una funcin matemtica:


1
2
3
4

x = linspace(0,10)
y = cos(x)
plot(x,y)
show()

Python para Ingenieros - Borrador

10

Grficas con Matplotlib

Note que a linspace no le hemos indicado el nmero de particiones del intervalo, con lo cual se
toma por default un valor de 50.
Podemos cambiar el color y estilo de lnea pasando una cadena de dos caracteres como tercer
argumento, donde el primer caracter indica el color y el segundo el smbolo a utilizar, por ejemplo:
1
2
3
4

x = linspace(0,10)
y = cos(x)
plot(x,y,"ro")
show()

Puede consultar los caracteres vlidos para el color y estilo de lnea en la documentacin de la
funcin plot.
Es posible tambin especificar el color y estilo utilizando keyword arguments dentro de la funcin
plot:
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot
https://docs.python.org/2/tutorial/controlflow.html#keyword-arguments
Python para Ingenieros - Borrador

11

Grficas con Matplotlib

plot(x,y,linestyle="--",color="k")

Adems, el color tambin puede especificarse utilizando la notacin RGBA y la notacin hexadecimal, por ejemplo, las siguientes instrucciones son equivalentes:
1
2
3

plot(x,y,color="r")
plot(x,y,color="#FF0000")
plot(x,y,color=(1,0,0,1))

Podemos incluir etiquetas en los ejes utilizando las funciones xlabel y ylabel. Por ejemplo:
1
2
3
4
5
6
7
8

K = 525
n = 0.2
e = linspace(0,0.5)
s = K*e**n;
plot(e,s,'m')
xlabel(u"Deformacin (mm/mm)")
ylabel(u"Esfuerzo (MPa)")
show()

Python para Ingenieros - Borrador

12

Grficas con Matplotlib

Incluso se puede utilizar cdigo TeX en las etiquetas y ttulo de la grfica:


1
2
3
4
5
6
7
8
9

K = 525
n = 0.2
e = linspace(0,0.5)
s = K*e**n;
plot(e,s,'m')
xlabel(r"$\varepsilon$ (mm/mm)")
ylabel(r"$\sigma$ (MPa)")
title(r"Acero SAE 1008: $\sigma = K \varepsilon^n$")
show()

Python para Ingenieros - Borrador

13

Grficas con Matplotlib

Para poder graficar en dos o ms axes se puede utilizar la funcin subplot que permite crear un
arreglo de axes, vase el ejemplo a continuacin:
1
2
3
4
5
6
7
8
9
10
11
12
13

t = linspace(0,2)
x = 12*t**3 - 18*t**2 + 2*t + 5
v = diff(x)
# Grfica de posicin
subplot(2,1,1)
plot(t,x,"b")
ylabel(u"Posicin (m)")
# Grfica de velocidad
subplot(2,1,2)
plot(t[:-1],v,"g")
xlabel("Tiempo (s)")
ylabel(u"Velocidad (m/s)")
show()

Python para Ingenieros - Borrador

14

Grficas con Matplotlib

Mltiples axes

La funcin subplot recibe tres argumentos, los dos primeros especifican el nmero de filas y
columnas del arreglo de axes, respectivamente, y el tercer argumento indica la posicin del axes
a utilizar. La funcin diff calcula la n-sima derivada numrica de un vector dado.

Pyplot y lo bsico
En el Captulo 2 vimos una introduccin a pylab, un mdulo de matplotlib que integra las utilidades
grficas del mdulo pyplot y de la librera NumPy en un mismo espacio de nombres. El uso de pylab
hace recordar mucho la sintaxis y la filosofa de programacin de MATLAB. Por ello (y por razones
que iremos conociendo posteriormente) en el entorno de Matplotlib es preferible utilizar pyplot
y NumPy cmo mdulos independientes, permitiendo una estructuracin ms limpia de cdigo,
diferenciando la parte de proceso de datos y la de graficacin/visualizacin.
Un cdigo tpico utilizando pylab sera:
http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.diff.html
Python para Ingenieros - Borrador

15

Grficas con Matplotlib

1
2
3
4
5
6
7
8
9

from pylab import *


x = linspace(0,10)
y = cos(x)
plot(x,y,lw=2,ls="--")
xlabel("Tiempo (s)")
ylabel("Amplitud (mm)")
show()

Y utilizando pyplot + NumPy?


1
2
3
4
5
6
7
8
9
10

import matplotlib.pyplot as plt


import numpy as np
x = np.linspace(0,10)
y = np.cos(x)
plt.plot(x,y,lw=2,ls="--")
plt.xlabel("Tiempo (s)")
plt.ylabel("Amplitud (mm)")
plt.show()

Ambos cdigos producen exactamente lo mismo.


Ahora veremos una tercera forma (mejorada) de hacer lo anterior:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

import matplotlib.pyplot as plt


import numpy as np
x = np.linspace(0,10)
y = np.cos(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y,lw=2,ls="--")
ax.set_xlabel("Tiempo (s)")
ax.set_ylabel("Amplitud (mm)")
plt.show()

Python para Ingenieros - Borrador

16

Grficas con Matplotlib

Y s, en este texto vamos a utilizar esta manera de hacer las cosas, la diferencia?: objetos, mtodos
y esas cosas propias de la programacin orientada a objetos, que nos permitir organizar nuestro
cdigo de una mejor manera, sobre todo cuando este tiende a ser extenso. De manera breve, lo que se
hace es instanciar un objeto de la clase Figure, que es bsicamente el objeto grfico principal o lo que
denominaramos como ventana, y posteriormente se utilizan mtodos de clase para crear un Axes y
utilizar sus mtodos para trazar la grfica correspondiente y las etiquetas o leyendas necesarias.
Para las secciones siguientes se asumir que en todo momento se han importado el mdulo pyplot
y NumPy y que al final del cdigo se ha incluido la instruccin plt.show() para mostrar lo que se ha
graficado.
1
2
3
4
5
6

import matplotlib.pyplot as plt


import numpy as np
# .
# .
# .
plt.show()

Coordenadas rectangulares
Hemos estado utilizando este tipo de grficas en todos los ejemplos anteriores, entendemos por
coordenadas rectangulares aquellas en donde cada punto del plano o espacio est dado por sus
coordenadas (x,y) o (x,y,z) y las cuales hemos tenido hasta en la sopa desde nuestro primer curso de
lgebra en el nivel secundario. Por ahora vamos a tomar el caso bidimensional, y en la mayora de
situaciones vamos a graficar un array que contiene los valores de la variable independiente (digamos
x) contra un array que contiene los valores de la variable dependiente (digamos f(x)), utilizando, claro
est, la funcin plot.
Por ejemplo supongamos que queremos graficar la funcin f (x) = x2 sin(x) en el intervalo [0, 2].
Primero debemos crear el vector o array de la variable independiente en el intervalo de inters, para
ello podemos utilizar linspace:
1

x = np.linspace(0,2*np.pi)

Enseguida definimos el array de la funcin o variable dependiente:


1

y = (x**2)*(np.sin(x))

Ahora creamos el objeto figure:


1

fig = plt.figure()

Utilizando el mtodo add_subplot del objeto fig creamos el axes a utilizar:


Python para Ingenieros - Borrador

17

Grficas con Matplotlib

ax = fig.add_subplot(111)

Con nuestro axes creado, podemos utilizar el mtodo plot para trazar la grfica correspondiente:
1

ax.plot(x, y)

Finalmente debemos utilizar la instruccin plt.show() para mostrar las grficas que hemos
generado. Juntando todo el cdigo anterior se tiene:
1
2
3
4
5
6
7

x = np.linspace(0,10)
y = np.cos(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)

Python para Ingenieros - Borrador

18

Grficas con Matplotlib

Etiquetas bsicas (xlabel, ylabel & title)


Naturalmente una grfica sin informacin extra ms que las lneas trazadas es intil desde donde se
vea, porque cuando vamos a graficar algo el objetivo es transmitir informacin legible y en cierto
punto amigable a terceros. Para ello en una grfica se debe incluir informacin acerca de los datos
que estamos representando.
En casi cualquier grfica que veamos en libros, artculos o cualquier otro tipo de publicacin vamos
a tener al menos etiquetados los ejes coordenados, y una ttulo o pequea descripcin que muestre
lo que se representa. Para colocar esa informacin bsica en una grfica, Matplotlib proporciona los
mtodos set_xlabel, set_ylabel y set_title de la clase Axes, que de manera respectiva, colocan
una etiqueta en el eje horizontal, una etiqueta en el eje vertical y un ttulo en la parte superior del
Axes.
En el siguiente cdigo se muestra cmo colocar las etiquetas mencionadas anteriormente:
1
2
3
4
5
6
7
8
9
10

T = [50, 60, 70, 80, 90, 100, 110, 120]


P = [12, 20, 33, 54, 90, 148, 244, 403]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(T, P)
ax.set_xlabel(u"Temperatura (C)")
ax.set_ylabel(u"Presin (KPa)")
ax.set_title(u"Relacin P-T")

Python para Ingenieros - Borrador

19

Grficas con Matplotlib

Estilos, colores y grosores de lneas


Coordenadas polares
Para trazar grficas en coordenadas polares en Matplotlib se utiliza tambin el mtodo plot, pero
cuando se crea el axes debemos cambiar el tipo de proyeccin que utilizaremos a coordenadas
polares, lo cual puede hacerse de las utilizando el keyword argument projection:
1
2

fig = plt.figure()
polar_axes = fig.add_subplot(111, projection="polar")

O bien utilizando polar:


1
2

fig = plt.figure()
polar_axes = fig.add_subplot(111, polar=True)

Por ejemplo, trazando la rosa polar r() = 0.25 cos(3):


Python para Ingenieros - Borrador

20

Grficas con Matplotlib

1
2
3
4
5
6
7

theta = np.linspace(0,2*np.pi,1000)
r = 0.25*np.cos(3*theta)
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(theta, r)

Scatter Plots
Grficas de barras
Grficas de pastel

Python para Ingenieros - Borrador

You might also like