M´etodos Num´ericos con Python y los Super Amigos · Los Super Amigos (software adicional para...

35
Introducci´on Operadores Variables y formatos Scripts y funciones etodos Num´ ericos con Python y los Super Amigos Departamento de Matem´aticas Facultad de Ciencias Exactas y Naturales Universidad de Antioquia Copyleft 2010. Reproducci´ on permitida bajo los erminos de la licencia de documentaci´ on libre GNU.

Transcript of M´etodos Num´ericos con Python y los Super Amigos · Los Super Amigos (software adicional para...

Introduccion Operadores Variables y formatos Scripts y funciones

Metodos Numericos con Pythony los Super Amigos

Departamento de MatematicasFacultad de Ciencias Exactas y Naturales

Universidad de Antioquia

Copyleft «2010. Reproduccion permitida bajo los

terminos de la licencia de documentacion libre GNU.

Introduccion Operadores Variables y formatos Scripts y funciones

Contenido

1 Introduccion

2 Operadores

3 Variables y formatos

4 Scripts y funciones

Introduccion Operadores Variables y formatos Scripts y funciones

Aspectos generales

http://www.python.org/

Lenguaje de programacion de alto nivel, interpretado

Creado por Guido van Rossum a principios de los anos 90

Multiplataforma (UNIX, Solaris, Linux, DOS, Windows, OS/2, Mac OS, etc.)

Software libre: Python Software Foundation License (PSFL)

Tipado dinamico

Fuertemente tipado

Orientado a objetos

Introduccion Operadores Variables y formatos Scripts y funciones

Los Super Amigos (software adicional para Python)

NumPy: paquete fundamental para computacion cientıfica

SciPy: librerıa para computacion cientıfica (extiende a NumPy)

matplotlib: librerıa para graficos 2D (soporta graficos 3D tambien)

Mayavi: librerıa para graficos y visualizacion de datos 3D

iPython: consola interactiva para python

Introduccion Operadores Variables y formatos Scripts y funciones

Lenguajes de programacion mas “populares”

Imagen tomada de http://www.tiobe.com/

Introduccion Operadores Variables y formatos Scripts y funciones

Instalacion de la Liga de la Justicia

GNU/Linux (distribuciones basadas en debian):

sudo apt-get install ipython python-scipy python-matplotlib mayavi2 \

python-sympy cython python-networkx python-pexpect python-nose \

python-setuptools python-sphinx python-pygments \

python-twisted python-foolscap

sudo apt-get build-dep python python-scipy python-matplotlib mayavi2 \

cython

Windows y Mac OSX:

Enthought Python Distribution

http://www.enthought.com/products/epd.php

(distribucion gratuita para fines academicos)

Introduccion Operadores Variables y formatos Scripts y funciones

Iniciando sesion en GNU/Linux

Sesion de Python

$ python

Python 2.5.2 (r252:60911, Jan 20 2010, 23:33:04)

[GCC 4.3.2] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

Sesion de iPython

$ ipython

Python 2.5.2 (r252:60911, Jan 20 2010, 23:33:04)

Type "copyright", "credits" or "license" for more information.

IPython 0.8.4 -- An enhanced Interactive Python.

? -> Introduction and overview of IPython’s features.

%quickref -> Quick reference.

help -> Python’s own help system.

object? -> Details about ’object’. ?object also works, ?? prints more.

In [1]:

Introduccion Operadores Variables y formatos Scripts y funciones

Iniciando sesion de iPython en Windows

Introduccion Operadores Variables y formatos Scripts y funciones

Operadores aritmeticos

Operador Operacion Ejemplo Resultado

** Potencia 2∗∗3 8* Multiplicacion 7 ∗ 3 21/ Division 10.5/2 5.25// Division entera 10.5//2 5.0+ Suma 3 + 4 7- Resta 6 − 8 −2% Modulo (residuo) 15%6 3

Operador Jerarquıa

() (mayor)**

*, /, //, % �

+, - (menor)

In [1]: 3+4Out[1]: 7

In [2]: 3/4Out[2]: 0

In [3]: 3.0/4.0Out[3]: 0.75

In [4]: 5.0/10*2+5Out[4]: 6

In [5]: 5.0/(10*2+5)Out[5]: 0.20000000000000001

In [6]: 2**3**2Out[6]: 512

In [7]: (2**3)**2Out[7]: 64

In [8]: 17 % 3 % 2Out[8]: 0

Introduccion Operadores Variables y formatos Scripts y funciones

Operadores relacionales (de comparacion)

Tipos de datos logicos:

False (0)

True (1)

Operador Operacion Ejemplo Resultado

== Igual a 4 == 5 False

!= Diferente de 2!=3 True

< Menor que 10 < 4 False

> Mayor que 5>-4 True

<= Menor o igual que 7<=7 True

>= Mayor o igual que 3.5 >= 10 False

In [9]: 1+2>7-3Out[9]: False

In [10]: 1<2<3Out[10]: True

In [11]: 1>2==2<3Out[11]: False

In [12]: 1>(2==2)<3Out[12]: True

In [13]: 3>4<5Out[13]: False

In [14]: 1.0/3<0.33333Out[14]: False

In [15]: 5.0/3>=11/7.0Out[15]: True

In [16]: 2**(2/3)<3**(3/4)Out[16]: True

Introduccion Operadores Variables y formatos Scripts y funciones

Operadores logicos (booleanos)

Operador Operacion Ejemplo Resultado

and conjuncion False and True False

or disyuncion False or True True

not negacion not True False

A B A and B A or B not A

True True True True False

True False False True False

False True False True True

False False False False True

Operador Jerarquıa

() (mayor)**

*, /, //, %==, !=, <, >, <=, >= �

notandor (menor)

In [17]: False and True or TrueOut[17]: True

In [18]: 0 and 1 or 1Out[18]: 1

In [19]: 0 and (1 or 1)Out[19]: 0

In [20]: 5*4 > 4 and 0 < 3Out[20]: True

In [21]: True or (2 == 1+2) == TrueOut[21]: True

In [22]: 2**(3 and 0/5)>45 % 6Out[22]: False

Introduccion Operadores Variables y formatos Scripts y funciones

Tipos de datos

Tipo Descripcion bits Rango Ejemplo

bool booleano 8 sin rango True o False

int entero 16h

−215, 215

− 1i

327

long int entero largo 32h

0, 232− 1

i

24334253234L

float real (punto flotante) 32h

−231, 231

− 1i

3.1416

complex complejo 32h

0, 232− 1

i

3.0 + 4.0j

str string (cadena) 32h

−231, 231

− 1i

’hola’

tuple tupla 32h

3.4 × 10−38, 3.4 × 1038

i

(1, ’aja’, 2.0)

list lista 64h

1.7 × 10−308, 1.7 × 10308

i

[1, ’aja’, 2.0]

dict diccionario 80h

3.4 × 10−4932, 3.4 × 104932

i

’a’:7.0, 23: True

Introduccion Operadores Variables y formatos Scripts y funciones

Identificadores y palabras reservadas

Palabras reservadas

and del for is raise assertelif from lambda return break elseglobal not try class except ifor while continue exec import passyield def finally in print del

Identificadores

Nombres que hacen referencia a los objetos que componen un programa:constantes, variables, funciones, etc.

Reglas para construir identificadores:

El primer caracter debe ser una letra o el caracter de subrayado

El primer caracter puede ir seguido de un numero variable de dıgitosnumericos, letras o caracteres de subrayado

No pueden utilizarse espacios en blanco, ni sımbolos de puntuacion

Python distingue mayusculas y minusculas

No pueden utilizarse palabras reservadas del lenguaje

Introduccion Operadores Variables y formatos Scripts y funciones

Variables

In [23]: base = 2

In [24]: print base2

In [25]: print "base"Out[25]: base

In [26]: base = base + 1

In [27]: baseOut[27]: 3

In [28]: alt = 4

In [29]: area = base*alt; a=3

In [30]: a=2*a

In [31]: area == 2*aOut[31]: True

In [32]: x = "uno"; y = "dos"

In [33]: xOut[33]: ’uno’

In [34]: print xuno

In [35]: x+yOut[35]: ’unodos’

In [36]: print x+yunodos

Introduccion Operadores Variables y formatos Scripts y funciones

Listas y tuplas

In [37]: milista=[a, "hola", 3.0, True]

In [38]: milistaOut[38]: [3, ’hola’, 3.0, True]

In [39]: milista[0]Out[39]: 3

In [40]: milista[1]Out[40]: ’hola’

In [41]: milista[2]Out[41]: 3.0

In [42]: milista[1:3]Out[42]: [’hola’, 3.0]

In [43]: milista[0] = 2.0

In [44]: milistaOut[44]: [2.0, ’hola’, 3.0, True]

In [45]: milista[-1]Out[45]: True

In [46]: milista.append("otro")

In [47]: milistaOut[47]: [2.0,’hola’, 3.0, True,’otro’]

In [48]: milista[:2]Out[48]: [2.0, ’hola’]

In [49]: milista[1:]Out[49]: [’hola’, 3.0, True, ’otro’]

In [50]: lista2[]

Introduccion Operadores Variables y formatos Scripts y funciones

Listas y tuplas

In [51]: milista=[a, "hola", 3.0, True]

In [52]: lista2Out[52]: []

In [53]: lista2.insert(1,"a")

In [54]: lista2Out[54]: [’a’]

In [55]: lista2.insert(2,"b")

In [56]: lista2Out[56]: [’a’, ’b’]

In [57]: lt = (1, 2, True, "python")

In [58]: ltOut[58]: (1, 2, True, ’python’)

In [59]: lt[0]=3-----------------------------------------------------TypeError Traceback (most recent call last)

TypeError: ’tuple’ object does not support item

assignment

In [60]: 3 in ltOut[60]: False

In [61]: range(8)Out[61]: [0, 1, 2, 3, 4, 5, 6, 7]

In [62]: range(3,7)Out[62]: [3, 4, 5, 6]

In [63]: range(4,10,2)Out[63]: [4, 6, 8]

Introduccion Operadores Variables y formatos Scripts y funciones

Conversiones de tipo, funciones basicas

Operacion Descripcion

int(x) Convierte x a enterolong(x) Convierte x a entero largofloat(x) Convierte x a punto flotante

complex(x) Convierte x al complejo x+0j

complex(x,y) Convierte al complejo x+yj

Funcion Descripcion

abs(x) Valor absoluto de x

max(sucesion) Mayor elemento de sucesionmin(sucesion) Menor elemento de sucesionround(x,n) Redondea al decimal ncmp(x,y) Retorna -1, 0, 1 si x<y, x==y, x>y

In [64]: x = -5

In [65]: y = 4

In [66]: p = 3.1416

In [67]: z = ’6.3’

In [68]: print int(p)3

In [69]: abs(x)5

In [70]: print float(z)6.0

In [71]: complex(x)Out[60]: (-5+0j)

In [72]: complex(x,y)Out[72]: (-5+4j)

In [73]: print round(p,2)3.14

In [74]: cmp(x,y)Out[74]: -1

Introduccion Operadores Variables y formatos Scripts y funciones

Instrucciones de entrada/salida

Entrada de datos:

raw input("entrada"): lee una lınea de entrada que es convertida a string

eval(string): convierte string en un valor numerico

In [75]: a = raw input("Ingrese a: ")Ingrese a: 2

In [76]: print aOut[76]: 2

In [77]: aOut[77]: ’2’

In [78]: type(a)Out[78]: <type ’str’>

In [79]: b = eval(a)

In [80]: print b, type(b)Out[80]: 2 <type ’int’>

In [81]:s=eval(raw input("Ingrese s: "))Ingrese a: 2*3

In [82]: print s, type(s)Out[82]: 6 <type ’int’>

In [83]:m=eval(raw input("Ingrese m: "))Ingrese a: hola

-----------------------------------------------------

TypeError Traceback (most recent call last)

TypeError: name ’hola’ is not defined

Introduccion Operadores Variables y formatos Scripts y funciones

Instrucciones de entrada/salida

Salida de datos:

print objeto1, objeto2, ...

print " %formato1 %formato2 · · · " % tupla

Entero d

Punto flotante f

Notacion exponencial e

In [84]: u = 6543

In [85]: v = 1234.56789

In [86]: print u, v6543 1234.56789

In [87]: print "u = %6d" % uu = 6543

In [88]: print "u = %06d" % uu = 006543

In [88]: print "v = %7.2f" % vv = 1234.57

In [88]: print "v = %9.2f" % vv = 1234.57

In [88]: print "v = %7.8f" % vv = 1234.56789000

In [81]: print "v = %.2e" % vv = 1.23e+03

In [81]: print "u= %6d y v= %8.4e" % (u,v)u= 6543 y v=1.2346e+03

Introduccion Operadores Variables y formatos Scripts y funciones

Programas

Scripts:

Archivos de texto plano sin formato

Tiene extension .py

Contienen una sucesion de comandos de Python

No tienen parametros (“argumentos”) de entrada ni de salida

Las variables definidas en los scripts son globales

Funciones:

Secuencia de sentencias que ejecuta una operacion deseada y tiene unnombre

Las funciones tienen sintaxis especial

Tienen parametros (“argumentos”) de entrada y de salida

Las variables definidas en funciones son locales

Introduccion Operadores Variables y formatos Scripts y funciones

Editores en Linux

Gedit: http://projects.gnome.org/gedit/

Introduccion Operadores Variables y formatos Scripts y funciones

Editores en Linux

Pymacs (Emacs + Python): http://pymacs.progiciels-bpi.ca/

Introduccion Operadores Variables y formatos Scripts y funciones

Editores en Linux

Geany: http://www.geany.org/

Introduccion Operadores Variables y formatos Scripts y funciones

Editores en Linux

SPE (Stani’s Python Editor): http://pythonide.blogspot.com/

Introduccion Operadores Variables y formatos Scripts y funciones

Editores en Linux

Erik: http://eric-ide.python-projects.org/

Introduccion Operadores Variables y formatos Scripts y funciones

Editores en Windows

Gedit: http://projects.gnome.org/gedit/

Introduccion Operadores Variables y formatos Scripts y funciones

Editores en Windows

IDLE

Introduccion Operadores Variables y formatos Scripts y funciones

HolaMundo1.py

# Progarma hola mundo, version "emo"

print "¡Hola, maldito mundo!"

HolaMundo2.py

#! /usr/bin/env python

print "¡Hola, maldito mundo!"

invitado@matematicas06:∼/scripts$ ls -ltotal 12-rw-r--r-- 1 invitado invitado 68 2010-02-03 14:02 HolaMundo1.py-rw-r--r-- 1 invitado invitado 54 2010-02-03 14:03 HolaMundo2.py

invitado@matematicas06:∼/scripts$ chmod a+x HolaMundo2.py

invitado@matematicas06:∼/scripts$ ls -ltotal 12-rw-r--r-- 1 invitado invitado 68 2010-02-03 14:02 HolaMundo1.py-rwxr-xr-x 1 invitado invitado 54 2010-02-03 14:03 HolaMundo2.py

invitado@matematicas06:∼/scripts$ python HolaMundo1.pyHola, maldito mundo!

invitado@matematicas06:∼/scripts$ ./HolaMundo2.pyHola, maldito mundo!

Introduccion Operadores Variables y formatos Scripts y funciones

HolaMundo3.py

#! /usr/bin/env python# Programa hola mundo version matematica

import sys, math # carga sistema y modulo matematicor = float(sys.argv[1]) # extrae argumento de la linea de comandoss = math.cos(r)print "Hola, maldito Mundo! cos("+ str(r) + ")="+ str(s)

invitado@matematicas06:∼/scripts$ ls -ltotal 12-rw-r--r-- 1 invitado invitado 68 2010-02-03 14:02 HolaMundo1.py-rw-r--r-- 1 invitado invitado 54 2010-02-03 14:03 HolaMundo2.py-rw-r--r-- 1 invitado invitado 267 2010-02-03 14:06 HolaMundo3.py

invitado@matematicas06:∼/scripts$ chmod a+x HolaMundo3.py

invitado@matematicas06:∼/scripts$ ls -l HolaMundo3.py-rwxr-xr-x 1 aleph aleph 267 2010-02-03 14:06 HolaMundo3.py

invitado@matematicas06:∼/scripts$ ./HolaMundo3.py 0Hola, maldito Mundo! cos(0.0)=1.0

Introduccion Operadores Variables y formatos Scripts y funciones

Ejemplos de scripts

Ejemplo 4.1 (Promedio de dos numeros)

Escriba un programa (script) en Python que reciba como entradas dos numeros Ay B y calcule su promedio.

Solucion

promedio.py

# Calcula el promedio de dos numeros

# Lee los valores de A y BA = eval(raw input("Ingrese A: "))B = eval(raw input("Ingrese B: "))

# Calcula el promedioPROM = (A+B)/2.0;

# Imprime el promedioprint "El promedio de %f y %f es %f" % (A, B, PROM)

Introduccion Operadores Variables y formatos Scripts y funciones

Ejemplos de scripts

Ejemplo 4.2 (Area y perımetro de un rectangulo)

Escriba un programa (script) en Python tal que dado como datos la base y laaltura de un rectangulo, calcule su perımetro y area.

Solucion

rectangulo.py

# Calcula el area y perimetro de un rectangulo

% Lee los valores de la base y la altura

BASE = eval(raw input("Ingrese la base: "))

ALTURA = eval(raw input("Ingrese la altura: "))

AREA = BASE*ALTURA;

PERIMETRO = 2.0*(BASE+ALTURA);

print "El area es %f y el perımetro es %f" % AREA, PERIMETRO);

Introduccion Operadores Variables y formatos Scripts y funciones

Funciones

Sintaxis de una funcion

def NOMBRE( LISTA DE PARAMETROS ):

SENTENCIAS

In [94]: def suma(x,y):...: print x+y...:...:

In [95]: suma(2,3)5

In [96]: a = -4

In [97]: b = 5

In [98]: suma(a,b)1

In [99]: suma(abs(-2),-3)-1

In [100]: def deja espacio():...: print # linea vacia...:...:

In [101]: 8*3; deja espacio(); 2*3Out[101]: 24

Out[101]: 6

In [102]: deja espacio(3)-----------------------------------------------------TypeError Traceback (most recent call last)

TypeError: deja espacio() takes no arguments (1 given)

Introduccion Operadores Variables y formatos Scripts y funciones

Funciones definidas en scripts

Ejemplo 4.3 (Promedio de dos numeros)

Escriba una funcion en Python que reciba como entradas dos numeros A y B ycalcule su promedio.

Solucion

promedio.py

# Funcion que calcula el promedio de dos numeros

def prom(A,B):

C = (A+B)/2.0

print "El promedio de %f y %f es %f" % (A, B, C)

In [103]: from promedio import *

In [104]: prom(2,3)El promedio de 2.000000 y 3.000000 es 2.500000

Introduccion Operadores Variables y formatos Scripts y funciones

Ejemplos de scripts

Ejemplo 4.4 (Area y perımetro de un rectangulo)

Escriba un script en Python que contenga funciones que calculen el

perımetro y el area de un rectangulo, dados su base y altura.

Solucion

rectangulo.py

def area(base,altura):

ar = base*altura

print "El area es %f" % ar

def perimetro(base,altura):

per = 2.0*(base+altura)

print "El perimetro es %f" % per

In [103]:from rectangulofun import area

In [104]: area(2,3)El area es 6.000000

In [107]: ar-----------------------------------------------------NameError Traceback (most recent call last)

NameError: name ’ar’ is not defined

In [108]: perimetro(2,3)-----------------------------------------------------NameError Traceback (most recent call last)

NameError: name ’perimetro’ is not defined

In [103]:from rectangulofun importperimetro

In [104]: perimetro(2,3)El perimetro es 10.000000

Introduccion Operadores Variables y formatos Scripts y funciones

Referencias

J. Elkner, A. Downey, C. MeyersHow to Think Like a Computer Scientist: Learning with Python

http://openbookproject.net//thinkCSpy/index.html

R. GonzalesPython para todos

http://mundogeek.net/tutorial-python/

J. KiusalaasNumerical Methods in Engineering with Python

Cambridge University Press, 2005