TALLER DE DERIVACIÓN E INTEGRACIÓN

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.

$f(x)=\frac{x}{\sqrt[3]{x^2+4}}$
$f'(x)=\frac{x^2+12}{3(x^2+4)^{\frac{4}{3}}}$


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))


Valor 'exacto': 0.33333
Aproximación progresiva: 0.319967269897461, Error : 0.0133662223815918
Aproximación regresiva: 0.347752571105957, Error : -0.0144190788269043
Aproximación centrada: 0.333859920501709, Error : -0.000526428222656250

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.

$f(x)=ln \sqrt[3]{1-x^4}$
$f'(x)=-\frac{4x^3}{3(1-x^4)}$


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))


Valor 'exacto': 0
Aproximación progresiva: -0.00266880262643099, Error : 0.00266880262643099
Aproximación regresiva: 0.00266880262643099, Error : -0.00266880262643099
Aproximación centrada: 0, Error : 0

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:

$f(x)=\int\limits_1^2 \frac{x^3dx}{1+x^{\frac{1}{2}}}$


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)))


Trapecio: 1.9069
Simpson 1/3: 1.64697011311849
Simpson 3/8: 2.47056770324707
Trapecio compuesto: 1.64713867187500
Simpson compuesto: 1.63772623697917

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:

$f(x)=\int\limits_{-1}^{1} \frac{1}{\sqrt{2 \pi}}e^{\frac{-x^2}{2}}dx$


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)))


Trapecio: -0.19306
Simpson 1/3: -0.276561419169108
Simpson 3/8: -0.411146163940430
Trapecio compuesto: 0.00361771774291992 - 0.122678100585938*I
Simpson compuesto: -0.0

In [ ]: