<span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Python en ciencias e ingeniería: tutoriales basados en ejemplos</span> por <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Sergio Gutiérrez Rodrigo y Adrián Navas Montilla</span> se distribuye bajo una Licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional.
a = 42 #entero
b = 3.1416 #real
bexp = 3.14e0 #exponencial
c = 3+7j #complejo
d = "Ejemplo de cadena de caracteres " #Cadena de caracteres
#Imprimir por pantalla
print (a,b,bexp,c,d)
#Tipos de variables
print (type(a))
print (type(b))
print (type(c))
print (type(d))
a,b=3.0,2.0
suma=a+b
resta=a-b
multip=a*b
div=a/b
div_entera=a//b
exp=a**b
print('a=',a,'b=',b)
print("a+b=",suma)
print("a-b=",resta)
print("a*b=",multip)
print("a/b=",div)
print("División entera a/b=",div_entera)
print("a^b=",exp)
a= "Hola\n"
b = "\t Este es un ejemplo de cadena de caracteres \n"
c = """ Es posible escribir saltos de linea sin necesidad de utilizar los códigos
de escape"""
print(a,b,c)
d= a + b #concatenación
e = " repite "
f = 3*e #repetición
g = e*3 #equivale a lo anterior
print(d,f,g)
# Usos del if
'''
Ejemplo: ¿contiene la variable un número negativo?
'''
print("Ejemplo 1: usos del if")
a=-27.0
if(a<0.0): #Los paréntesis no son necesarios
print(a," es un número negativo.")
elif (a==0):
print(a," es cero.")
else:
print(a," es un número positivo.")
'''
Ejemplo: utilizando la función isintance() nos preguntamos si la variable
a contiene un número real
'''
print("\n Ejemplo 2: usos del if")
a=37.0
print("Tipo de variable=",type(a))
if(isinstance(a,float)):
print(a," es un número real")
else:
print(a," no es un número real")
#Bucle for
'''
Ejemplo: utilizando el método range proporciona una lista de números,
comprobamos si un número es postivo o negativo
'''
print("Ejemplo 1: bucle for")
rango=list(range(-5,5)) # Más adelante entenderemos qué hace el método list
print("De los siguientes números ",rango,"comprobamos cuáles son negativos")
for a in range(-5,5):
if(a<0.0): #Los paréntesis no son necesarios
print(a," es un número negativo.")
'''
Ejemplo: una forma compacta de escribir el mismo loop..
'''
print("\n Ejemplo 2: bucle for")
[print(a," es un número negativo.") for a in range(-5,5) if(a < 0.0)]
'''
Ejemplo: Python permite bucles en cualquier objeto que sea iterable
'''
print("\n Ejemplo 3: bucle for")
lista = ["manzana","pera","gato"] #Más adelante veremos qué tipo de dato representa lista
for palabra in lista:
print(palabra)
# Bucle while
'''
Ejemplo: Se representan los números pares empezando por 2 hasta llegar al número 20 (incluido).
OJO: los bucles while producen fácilmente bucles infinitos. En el ejemplo ocuure si se elimina
la condición de parar cuando el número llega a 20.
'''
print("Ejemplo 1: bucle for")
nopar= 2
while (nopar > 0):
print (nopar)
nopar = nopar + 2
if (nopar > 20):
break
Información adicional sobre otros tipos de datos: https://docs.python.org/3/tutorial/datastructures.html
# Tuplas
'''
Un tupla es una secuencia inmutable y ordenada de elementos. Pueden ser de
de cualquier tipo (básico o no). Se pueden indexar.
Sintaxis para declarar una tupla: especificar los elementos separados por una coma (,)
'''
tupla_vacia = ( )
tupla1 = 1 ,2 ,3 ,4 ,6 ,
tupla1b = (1 , 2 , 3 , 4 , 6)
tupla2 = "hola" , 2 ,3
tupla3 = tupla2 , 90
tupla4 = tuple ("ejemplo")
print("Tuplas")
print(tupla1)
print(tupla1[0:2])
print(tupla1b)
print(tupla2)
print(tupla3)
print(tupla4)
# Listas
'''
Una lista es una secuencia mutable y ordenada de elementos. Sus elementos
se pueden modificar a diferencia de las tuplas. Se pueden indexar.
Sintaxis para declarar una lisat: los elementos de la lista se seprar usando comas.
Se especifica que es una lista cerrando el conjunto entre corchetes [,].
'''
lista_vacia = []
lista1 = [1 ,2 ,3 ,4 ,6]
lista2 = ["hola" , 2 ,3]
lista3 = lista2+[90]
lista4 = list("ejemplo")
print("Listas")
print(lista1)
print(lista1[0:2])
print("lista2=",lista2)
print(lista3)
print(lista4)
# Funciones
'''
Ejemplo: encapsulamos parte del código de los ejemplos previos en una función
'''
print("Ejemplo 1: funciones")
def isnegative(x):
if(a<0.0): #Los paréntesis no son necesarios
print(a," es un número negativo.")
rango=list(range(-5,5)) # Más adelante entenderemos qué hace el método list
print("De los siguientes números ",rango,"comprobamos cuáles son negativos")
for a in range(-5,5):
isnegative(a)
'''
Ejemplo: cálculo de un polinomio de grado n
'''
print("\n Ejemplo 2: funciones")
def polynomial(x,a):
result=0
n=len(a)-1
i=0
for factor in a:
result=result+factor*x**i
i=i+1
return result
a=[1.0,1.0,1.0] # a_0*x**(0)+a_1*x**(1)+...a_n*x**n, donde n=len(a)
x=2.0
pol_x=polynomial(x,a)
txt="Polinomio de grado n="+str(len(a)-1)+"\n y coeficientes [$a_0,a_{1},..,a_{n-1},a_n$]="+str(a)
txt=txt+", en x="+str(x)+" tiene un valor igual a ="+str(pol_x)
print(txt)
'''
Ejemplo: cuerpo caída libre
'''
print("\n Ejemplo 3: funciones")
def y_t(t,y0,v0):
g=9.81
return y0+v0*t-0.5*g*t**2
y0=100.0 #m
v0= 50.0 #m/s
t = 5 #s
print("Para la condición inicial (y0,v0)=(",y0,"m,",v0,"m/s)")
print("La velocidad para un cuerpo en caída libre en t=",t,'(s), será de',y_t(t,y0,v0),
'm/s')
import numpy as np # numpy es la biblioteca con la que crear y operar con vectores/matrices y en general "tensores"
'''
Ejemplos básicos
'''
print("\n Ejemplo 1: Ejemplos básicos")
x=np.array([[1,2,3,4],[1,2,3,4],[1,2,3,4]])
print("Dimensión=",x.ndim,"Shape=",x.shape,"Tipo=",x.dtype)
print(x)
y=np.zeros(x.shape) # Crear una matriz con las mismas características que otra y rellenarla de ceros
print(y)
z=np.identity(3) # Crea una matriz identidad nxn. En el ejemplo n=3
print(z)
'''
Ejemplos : operaciones con vectores de tipo element-wise
'''
print("\n Ejemplo 2: operaciones con vectores de tipo element-wise ")
tmin,tmax= 0.0,20.0 #s
nopto=20
t=np.linspace(tmin,tmax,nopto) #Se define un vector de dimensión (nopto,), con valores en el intervalo [tmin,tmax]
y=np.array(t) # copia el vector, matriz, en general tensor t.
def y_t(t,y0,v0):
g=9.81
return y0+v0*t-0.5*g*t**2
y0=100.0 #m
v0= 5.0 #m/s
'''
Python permite cálculos "element-wise": un cálculo elemento a elemento de un vector.
No hay problema en sustituir en un función lo que
en principio son escalares (el tiempo t), por un vector/matriz/.... De la misma forma,
el resultado de la función que en principio es un escalar, puede devolver un vector/matriz/...
'''
y=y_t(t,y0,v0)
print(t)
print(y)
'''
Ejemplo 1: representación gráfica de una función
'''
print("\n Ejemplo 1: cuerpo en caída libre")
import numpy as np
tmin,tmax= 0.0,10.0 #s
nopto=100
t=np.linspace(tmin,tmax,nopto) #Se define un vector de dimensión (nopto,), con valores en el intervalo [tmin,tmax]
y=np.array(t) # copia el vector, matriz, en general tensor t.
def y_t(t,y0,v0):
g=9.81
return y0+v0*t-0.5*g*t**2
y0=100.0 #m
v0= 5.0 #m/s
y=y_t(t,y0,v0)
print("Para la condición inicial (y0,v0)=(",y0,"m,",v0,"m/s)")
'''
Elementos esenciales en una representación gráfica
'''
# Se llama a las bibliotecas necesarias
import matplotlib.pyplot as plt
import numpy as np
fig,ax = plt.subplots(figsize=(5,5))
ax.plot(t,y, color="blue", linewidth=0,linestyle='--',marker=".",markersize=12)
ax.set_ylabel("y(m)")
ax.set_xlabel("t(s)")
ax.legend()
plt.show()
'''
Ejemplo 2: representación gráfica de una función
'''
print("\n Ejemplo 2: representación de un polinomio")
def polynomial(x,a):
result=0
n=len(a)-1
i=0
for factor in a:
result=result+factor*x**i
i=i+1
return result
# Se llama a las bibliotecas necesarias
import matplotlib.pyplot as plt
import numpy as np
a=[0.0,1.0,-1.0] # a_0*x**(0)+a_1*x**(1)+...a_n*x**n, donde el grado del polinomio es n=len(a)-1
txt="Polinomio de grado n="+str(len(a)-1)+" \n y coeficientes [$a_0,a_{1},..,a_{n-1},a_n$]="+str(a)
print(txt)
xmin,xmax,nopto=-10.3,10.5,100
'''
Para cada valor asignado al vector x mediante el método np.linspace,
la función polynomial calcula su valor volcándolo en el vector y.
'''
x=np.linspace(xmin,xmax,nopto) #Se define un vector de dimensión (nopto,), con valores en el intervalo [xmin,xmax]
y1=polynomial(x,a)
'''
La forma equivalente utilizando el bucle for sería la siguiente (se parte de la definición previa de x)
'''
y2=np.array(x) #Crea un array idéntico a x
for i in range(0,len(x)):
y2[i]=polynomial(x[i],a)
'''
Elementos esenciales en una representación gráfica
'''
fig,ax = plt.subplots(figsize=(8,8))
ax.plot(x,y1, color="blue", linewidth=0,linestyle='--',marker=".",markersize=12,label=txt)
ax.plot(x,y2, color="red", linewidth=3,linestyle='-')
ax.set_title("$a_0+a_{1} x+...a_{n-1} x^{n-1}+a_n x^n$")
ax.set_ylabel("y")
ax.set_xlabel("x")
ax.legend()
plt.show()