Professional Documents
Culture Documents
NDICE GENERAL
ndice general
Acerca de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Qu es Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
4
4
4
4
4
Estructuras de control
Sentencia if . . . . .
Bucle for . . . . . .
Bucle while . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
7
14
.
.
.
.
.
.
.
.
.
.
.
.
Acerca de
Acerca de
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.
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
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
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"
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
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()
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
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.
])
x = linspace(0,10)
y = cos(x)
plot(x,y)
show()
10
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
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()
12
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()
13
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()
14
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
1
2
3
4
5
6
7
8
9
16
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
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)
y = (x**2)*(np.sin(x))
fig = plt.figure()
17
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)
18
19
fig = plt.figure()
polar_axes = fig.add_subplot(111, projection="polar")
fig = plt.figure()
polar_axes = fig.add_subplot(111, polar=True)
20
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