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, cgiraud@ponce.inter.edu Especialista en Sistemas de Información. Universidad Interamericana de Puerto Rico – Recinto de Ponce. Revista 360/ No.7/ 2012