Download Matematica Python - cremc - Universidad Interamericana de Puerto

Document related concepts
no text concepts found
Transcript
1
Universidad Interamericana de Puerto Rico - Recinto de Ponce
Matemáticas &&Python
Por: César A. Giraud Pérez
“Stop teaching calculating; start teaching math” -- Conrad Wolfram
“Stay hungry, stay foolish”-- Steve Jobs
Introducción
Tradicionalmente las matemáticas son asociadas con papel, lápiz y sentarse a
realizar procedimientos y fórmulas con el fin de obtener un resultado. Aún en nuestra era
del siglo XXI y con los avances tecnológicos alcanzados, la percepción de lo que son las
matemáticas sigue relativamente igual a lo que era en el pasado.
Lo ideal sería eliminar la parte mecánica de resolver ejercicios y dar un enfoque
distinto al aprendizaje; un enfoque donde se fomente más el análisis, la formulación de
problemas y la solución de problemas que serían en términos prácticos imposibles de
resolver mediante métodos tradicionales. He aquí donde entra la rama de la matemática
computacional.
Existen varios programas dirigidos a la matemática computacional, entre ellos
Wolfram Mathematica, Matlab y Maple; este artículo expone al lenguaje Python como una
alternativa a la entrada del mundo de la matemática computacional.
Revista 360/ No.7/ 2012
2
Universidad Interamericana de Puerto Rico - Recinto de Ponce
Python && Algebra Lineal
Python fue diseñado para finales de la década del 1980 por Guido Van Rossum, como
sucesor al lenguaje ABC.Python es un lenguaje de programación de propósito general es
decir que puede ser utilizado para varios propósitos ya sea web, bases de datos, cálculos,
etc. Python se caracteriza por tener una sintaxis limpia y relativamente fácil de entender en
comparación con otros lenguajes de programación, como por ejemplo C++. En este
artículo estaremos utilizando los siguientes recursos: (*Nota: Todos estos recursos son
código libre y libres de costo)

Python: lenguaje de programación


http://www.python.org/
Numpy: Librería para la manipulación de matrices n - dimensionales

http://numpy.scipy.org/
Se exhorta al lector a buscar la documentación oficial que se encuentra en los
enlaces dados arriba como referencia, en caso de tener duda con el código presentado. A
través del documento se utilizan instrucciones similares de diferentes formas como método
de aprendizaje.
Comenzamos con el encabezado de nuestro archivo de Python y varios ejemplos
simples de álgebra lineal. Todos los fragmentos presentados tienen comentarios explicando
el código.
(*Nota: En este caso el archivo es llamado article.py. Los archivos de Python tienen la
extensión .py).
Revista 360/ No.7/ 2012
3
Universidad Interamericana de Puerto Rico - Recinto de Ponce
#
#
#
#
#
El símbolo # se utiliza en Python para escribir comentarios
article.py
autor: César A. Giraud
Esta instrucción permite tener acentos en los comentarios de Python
coding: utf-8
# Primero importar las librerías que se van a utilizar
from numpy import *
from numpy.linalg import *
En programación las matrices son representadas por un tipo de data llamada
arreglos que se denotan como a [ ]. Por ejemplo podemos definir un arreglo A = [1, 2, 3];
este arreglo es equivalente a la matriz 1 x 3; B = [1 2 3]. De la misma forma si
tuviéramos una matriz 𝑖 𝑥 𝑗; i.e. la matriz 2 x 2
𝐶=[
7
10
2
], la podríamos representar como un arreglo de la forma D = [[7, 2], [10 ,9]].
9
Considerando la matriz C arriba podemos referirnos a cada elemento 𝐶𝑖𝑗 como
𝐶11 = 7, 𝐶12 = 2, 𝐶21 = 10, 𝐶22 = 9; análogamente podemos referirnos a cada elemento
del arreglo D, de la forma; D [0, 0] = 7, D [0, 1] = 2, D [1, 0] = 10, D [1,1] = 9. En los
ejemplos próximos, se utiliza la función array( ), de la librería Numpy; ya que facilita la
creación y manipulación de matrices.
Revista 360/ No.7/ 2012
4
Universidad Interamericana de Puerto Rico - Recinto de Ponce
# Crear una matrix 2 X 2 y multiplicarla por un escalar
# La función array([]) permite la creación de matrices
# La función print se utiliza para mostrar resultados en la pantalla.
# i.e. - print a mostraría en pantalla en valor de la variable a
# print “El valor de a= ” escribirá el texto entre “ “ en la pantalla.
# Suma, resta, multiplicación y división se expresan: +, - , * , /
# i.e. a = 2 + 2, b = 2 – 2, c = 2 * 2, d = 2/2
A = array([(1,2),(3,4)])
print "Ver la matriz original"
print A
print "Multiplicación por un escalar"
print 2*A
-------------------------------------------------Ver la matriz original
[[1 2]
[3 4]]
Multiplicación por un escalar
[[2 4]
[6 8]]
# Sumar y restar 2 matrices
A = array([(3,7),(10,4)])
B = array([(5,14),(13,11)])
print "A= \n", A
print "B= \n", B
print "A+B = "
print A+B
print "A-B ="
print A-B
Resultados
-------------------------------------------------A=
[[ 3 7]
[10 4]]
B=
[[ 5 14]
[13 11]]
A+B =
[[ 8 21]
[23 15]]
A-B =
[[-2 -7]
[-3 -7]]
Revista 360/ No.7/ 2012
5
Universidad Interamericana de Puerto Rico - Recinto de Ponce
# Multiplicación de matrices
# Para la multiplicación de matrices se utiliza la función dot()
# Por ejemplo A.dot(B) donde A y B son matrices
# No se utiliza la notación A*B por que dará un resultado incorrecto
A = array([(3.,6.7,0.50), (7.2,5.,10.2), (8.7,0.15,9.1)])
B = array([(5.,10.7,3.6), (9.9,8.,5.2), (7.7,0.75,9.7)])
C = array([(7.1,1.5,2.2),(8.6,5.9,4.4)])
print "A= \n", A
print "B= \n", B
print "C= \n", C
print "Resultado incorrecto: AxB = "
print A*B
print "Resultado correcto: AxB = "
print A.dot(B)
print "CxA = "
print C.dot(A)
print "Obtenemos un error si tratamos de hacer una multiplicación no
definida"
print A.dot(C)
Resultados
-------------------------------------------------A=
[[ 3.
6.7
0.5 ]
[ 7.2
5.
10.2 ]
[ 8.7
0.15
9.1 ]]
B=
[[ 5.
10.7
3.6 ]
[ 9.9
8.
5.2 ]
[ 7.7
0.75
9.7 ]]
C=
[[ 7.1 1.5 2.2]
[ 8.6 5.9 4.4]]
Resultado incorrecto: AxB =
[[ 15.
71.69
1.8
]
[ 71.28
40.
53.04 ]
[ 66.99
0.1125 88.27 ]]
Resultado correcto: AxB =
[[ 85.18
86.075
50.49 ]
[ 164.04
124.69
150.86 ]
[ 115.055 101.115 120.37 ]]
CxA =
[[ 51.24
[ 106.56
55.4
87.78
38.87]
104.52]]
Obtenemos un error si tratamos de hacer una multiplicación no definida
print A.dot(C)
ValueError: matrices are not aligned
Revista 360/ No.7/ 2012
6
Universidad Interamericana de Puerto Rico - Recinto de Ponce
#
#
#
#
#
#
#
#
Transpuesta, determinante y sistemas de ecuaciones
La transpuesta se calcula con la función .transpose()
El determinante se calcula con la función det(a)
La función solve(a,b) resuelve sistemas de ecuaciones
Considere el siguiente ejemplo:
2x + y - z = 1
2y + 3z = 5
x + y + z = 7
A = array([[2,1,-1], [0,2,3], [1,1,1]])
x = array([[1],[5],[7]])
print "A = \n", A
print "La transpuesta de A = "
print A.transpose()
print "El determinante de A =", det(A)
print "La solución al sistema de ecuaciones sería:"
S = solve(A,x)
print S
print "Por lo tanto x =", S[0,0], ", y =", S[1,0], ", z =", S[2,0]
-------------------------------------------------A =
[[ 2 1 -1]
[ 0 2 3]
[ 1 1 1]]
La transpuesta de A =
[[ 2 0 1]
[ 1 2 1]
[-1 3 1]]
El determinante de A = 3.0
La solución al sistema de ecuaciones sería:
[[ 8.]
[-8.]
[ 7.]]
Por lo tanto x = 8.0, y = -8.0, z = 7.0
Revista 360/ No.7/ 2012
7
Universidad Interamericana de Puerto Rico - Recinto de Ponce
# Matriz cero o nula se puede crear con la función zeros((a,b))
# La matriz identidad se puede crear con la función eye(a)
print "Por ejemplo una matriz nula 4 x 4"
print zeros((4,4))
print "La matriz identidad 6 x 6"
print eye(6)
-------------------------------------------------Por ejemplo una matriz nula 4 x 4
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
La
[[
[
[
[
[
[
matriz identidad 6 x 6
1. 0. 0. 0. 0. 0.]
0. 1. 0. 0. 0. 0.]
0. 0. 1. 0. 0. 0.]
0. 0. 0. 1. 0. 0.]
0. 0. 0. 0. 1. 0.]
0. 0. 0. 0. 0. 1.]]
Podemos darnos cuenta rápidamente de la flexibilidad y capacidad que brinda utilizar un
lenguaje de programación como Python para resolver problemas matemáticos. Además de
contar con la librería Numpy para la manipulación de arreglos/matrices, existen otras
librerías enfocadas en las matemáticas y computación científica, entre ellas:

SciPy: librería con módulos para optimización, estadística, interpolación, entre
otros.


matplotlib: librería para la creación de gráficas. Permite utilizarTeX /LaTeX.


http://www.scipy.org/
http://matplotlib.sourceforge.net/index.html
Sympy: librería para matemática simbólica.

http://code.google.com/p/sympy/
Revista 360/ No.7/ 2012
8
Universidad Interamericana de Puerto Rico - Recinto de Ponce
Para concluir, veamos una implementación básica del Algoritmo de Euclides en Python.
# coding: utf-8
# Algoritmo de Euclides
# Calcular el MCD (máximo común divisor) de dos números
# Los valores a los cuales se les busca el MCD
a = 2812
b = 95
x = a
y = b
# El ciclo se ejecuta hasta que se encuentra el MCD
while x != y:
if x>y:
x = x-y
if x<y:
y = y-x
print "El MCD entre %s" % a + " y %s" % b + " es: %s" % x
-------------------------------------------------El MCD entre 2812 y 95 es: 19
Referencias
Euclidean algorithm. (2012). Recuperado de
http://en.wikipedia.org/wiki/Euclidean_algorithm
Langtangen, H. P. (2011). A primer on scientific programming with Python (2nd ed.).
London: Springer.
The Python Standard Library. (2011). Recuperado de
http://docs.python.org/library/index.html
César A. Giraud Pérez, [email protected] Especialista en Sistemas de Información. Universidad
Interamericana de Puerto Rico – Recinto de Ponce.
Revista 360/ No.7/ 2012