1) Aproxime el valor de la derivada de la siguiente función cuando x=2 usando diferencias progresivas, regresivas y centrales. Para todos los casos emplee un h=0.2. Calcule el error cometido, el valor exacto y el valor aproximado.
In [1]:
from sympy import *
h = 0.2
p = 2
x = Symbol('x')
f = x / (x**2 + 4)**(1/3)
df = (x ** 2 + 12) / (3 * (x ** 2 + 4)**(4/3))
prog_df = (f.subs(x,p + h).evalf(5) - f.subs(x,p).evalf(5)) / h
reg_df = (f.subs(x,p).evalf(5) - f.subs(x,p - h).evalf(5)) / h
cent_df = (f.subs(x,p + h).evalf(5) - f.subs(x,p - h).evalf(5)) / (2 * h)
num_df = df.subs(x,2).evalf(5)
print ("Valor 'exacto': " + str(num_df))
print ("Aproximación progresiva: " + str(prog_df) + ", Error : " + str(num_df - prog_df))
print ("Aproximación regresiva: " + str(reg_df) + ", Error : " + str(num_df - reg_df))
print ("Aproximación centrada: " + str(cent_df) + ", Error : " + str(num_df - cent_df))
2) Aproxime el valor de la derivada de la siguiente función cuando x=0 usando diferencias progresivas, regresivas y centrales. Para todos los casos emplee un h=0.2. Calcule el error cometido el valor exacto y el valor aproximado.
In [2]:
p2 = 0
f2 = (log((1 - x**4)**(1/3)))
df2 = -((4*x**3)/(3*(1 - x**4)))
prog_df2 = (f2.subs(x,p2 + h).evalf(5) - f2.subs(x,p2).evalf(5)) / h
reg_df2 = (f2.subs(x,p2).evalf(5) - f2.subs(x,p2 - h).evalf(5)) / h
cent_df2 = (f2.subs(x,p2 + h).evalf(5) - f2.subs(x,p2 - h).evalf(5)) / (2 * h)
num_df2 = df2.subs(x,p2).evalf(5)
print ("Valor 'exacto': " + str(num_df2))
print ("Aproximación progresiva: " + str(prog_df2) + ", Error : " + str(num_df2 - prog_df2))
print ("Aproximación regresiva: " + str(reg_df2) + ", Error : " + str(num_df2 - reg_df2))
print ("Aproximación centrada: " + str(cent_df2) + ", Error : " + str(num_df2 - cent_df2))
3) Implemente y compare la regla del trapecio, de Simpson 1/3, Simpson 3/8, del trapecio compuesta y de Simpson compuesta para la siguiente integral:
In [5]:
a3 = 1
b3 = 2
h3 = (b3 - a3) / 2
f3 = x**3 / (1 + x**0.5)
fa3 = f3.subs(x,a3).evalf(5)
fb3 = f3.subs(x,b3).evalf(5)
itr_f3 = (b3 - a3) * ((fa3 + fb3)/2)
isim13_f3 = (h3 / 3) * (fa3 + fb3 + 4*f3.subs(x,((a3 + b3) / 2)).evalf(5))
isim38_f3 = (3 * h3 / 8) * (fa3 + fb3 + 3 * (f3.subs(x,(2 * a3 + b3) / 3).evalf(5)) + 3 * (f3.subs(x,(a3 + (2 * b3)) / 3).evalf(5)))
def trap_comp(a, b, n):
c = (b - a) / n
calc = (fa3 + fb3) / 2
for k in range(1, n):
calc += f3.subs(x,(a + k*c)).evalf(5)
return c * calc
def simp_comp(a, b, n):
k = a
i = 0
c = (b - a) / n
calc = 0
while k <= b:
if (i % 2)== 0:
calc += 2 * f3.subs(x,k).evalf(5)
else:
calc += 4 * f3.subs(x,k).evalf(5)
i += 1
k += c
return (c / 3) * calc
print ("Trapecio: " + str(itr_f3))
print ("Simpson 1/3: " + str(isim13_f3))
print ("Simpson 3/8: " + str(isim38_f3))
print ("Trapecio compuesto: " + str(trap_comp(a3, b3, 100)))
print ("Simpson compuesto: " + str(simp_comp(a3, b3, 100)))
4) Implemente y compare la regla del trapecio, de Simpson 1/3, Simpson 3/8, del trapecio compuesta y de Simpson compuesta para la siguiente integral:
In [7]:
a4 = 1
b4 = -1
h4 = (b4 - a4) / 2
f4 = (1/(2*pi))*(exp(-0.5*(x**2)))
fa4 = f4.subs(x,a4).evalf(5)
fb4 = f4.subs(x,b4).evalf(5)
itr_f4 = (b4 - a4) * ((fa4 + fb4)/2)
isim13_f4 = (h4 / 3) * (fa4 + fb4 + 4*f4.subs(x,((a4 + b4) / 2)).evalf(5))
isim38_f4 = (3 * h4 / 8) * (fa4 + fb4 + 3 * (f4.subs(x,(2 * a4 + b4) / 3).evalf(5)) + 3 * (f4.subs(x,(a4 + (2 * b4)) / 3).evalf(5)))
def trap_comp2(a, b, n):
c = (b - a) / n
calc = (fa4 + fb4) / 2
for k in range(1, n):
calc += f4.subs(x,(a + k*c)).evalf(5)
return c * calc
def simp_comp2(a, b, n):
k = a
i = 0
c = (b - a) / n
calc = 0
while k <= b:
if (i % 2)== 0:
calc += 2 * f4.subs(x,k).evalf(5)
else:
calc += 4 * f4.subs(x,k).evalf(5)
i += 1
k += c
return (c / 3) * calc
print ("Trapecio: " + str(itr_f4))
print ("Simpson 1/3: " + str(isim13_f4))
print ("Simpson 3/8: " + str(isim38_f4))
print ("Trapecio compuesto: " + str(trap_comp(a4, b4, 1000)))
print ("Simpson compuesto: " + str(simp_comp(a4, b4, 1000)))
In [ ]: