Alumno: Fracisco J. Navarro Brull
from __future__ import division
from sympy import *
x, y, z, t = symbols('x y z t')
k, m, n = symbols('k m n', integer=True)
f, g, h = symbols('f g h', cls=Function)
# El siguiente comando es opcional pero hará que la solución sea vea con LaTeX
init_printing(use_unicode=True)
%matplotlib inline
Para esta sesión utilizaremos los bucles for
. En Python, los bucles se escriben de la forma siguiente:
for j in range(0, 3):
print j
0 1 2
Como se observa, los intervalos del rango son cerrados al inicio y abiertos al final.
Podemos anidar bucles:
for i in range(0,3):
for j in range(0,3):
print i+j
0 1 2 1 2 3 2 3 4
Ejercicio, escribir desde i=1 hasta i=10 x=i+1
Como recordotario, al trabajar con numpy estamos trabajando de forma simbólica por lo que la siguiente expresión no se evalua.
y+1
Podemos combinar la potencia de SymPy con el lenguaje Python.
Creamos primeros un vector vacío de zeros
vector = zeros(1,3)
vector
for i in range(0,3):
vector[i] = x+i+1
vector
También podemos utilizar bucles anidados para completar matrices.
matriz = Matrix(3, 3, zeros(1,9))
matriz
for i in range(0,3):
for j in range(0,3):
matriz[(i,j)] = i+j+1+1
matriz
Nota: Los +1 se añadieron dado que estamos empezando por i=0 debido a que la indexación de la matriz debe empezar por 0
Las funciones en Python se definen de la siguiente forma
def f_siguiente(N):
"""Suma la unidad a n"""
N = N+1
return N
f_siguiente(10)
f_siguiente(23)
Ejercicio: Definir una funcion suma que devuelva la suma de los naturales de 1 hasta n
def f_suma(N):
"""Sumatorio de 1 a n"""
sumatorio = 0
for i in range (0,N+1):
sumatorio = sumatorio+i
return sumatorio
f_suma(2)
f_suma(3)
f_suma(100)
Para integrar por elementos finitios:
Primero veamos como generamos la matriz de elementos que irá dentro de la función:
n_elem = 5
matriz = Matrix(1, n_elem+1, zeros(1,n_elem+1))
matriz[0] = y+1
matriz[-1] = y+5
for i in range(1,n_elem):
matriz[i] = x+i
matriz
Teniendo esto claro, podemos crear la función directamente
def f_elem(f,a,b,n_elem):
"""Donde f es la función (simbólica)
a,b: intervalo
n: el número de elementos"""
# Calculamos la longitud del intervalo
l = (b-a)/n_elem
# Creamos primero el array vacío
matriz = Matrix(1, n_elem+1, zeros(1,n_elem+1))
# Establecemos los valores en los extremos
# Nota: en Python el último elemento se indica
# con el índice '-1'
matriz[0] = a
matriz[-1] = b
for i in range(1,n_elem):
matriz[i] = a+i*l
integral = 0
# Para depurar código activar siguiente línea
# import pdb; pdb.set_trace()
# Sumamos los valores de f(x) intermedios
for j in range(1,n_elem):
integral = integral + f.subs(x, matriz[j])
# Sumamos los valores de inicio y fin
integral = integral + (1/2)*(f.subs(x, matriz[0])+f.subs(x, matriz[-1]))
integral = integral*l
return integral.evalf()
f_elem(sin(x),0,1,2)
f_elem(sin(x),0,1,10)