Documentos de Académico
Documentos de Profesional
Documentos de Cultura
G24 Freddy Solano Eje1A
G24 Freddy Solano Eje1A
Diferenciación Numérica
Video : http://youtu.be/tqzFjjlppU8?hd=1
(http://youtu.be/tqzFjjlppU8?hd=1)
Descripción del ejercicio:
Para determinar el valor aproximado de la primera y segunda derivada empleando esquemas de diferencia
finita hacia adelante, hacia atrás y central, en el punto 𝑥 = 1.33, con h = 0.5, h = 0.05 y h = 0.01. haremos
uso de las siguientes librerias las siguientes operaciones.
In [1]:
import numpy as np
import matplotlib.pyplot as plt
x=1.33
h=np.array([0.5,0.05,0.01])
der1=np.zeros((3, 4))
der2=np.zeros((3, 4))
′′
−x
f (x) =
2 1.5
((1 + x ) )
Primera derivada
f (xi + 1 ) − f (x i )
′
f (x i ) =
h
Segunda derivada
′′
f (xi + 2 ) − 2f (xi + 1 ) + f (x i )
f (x i ) =
2
h
for i in range(3):
der1[0,i]=(np.arcsinh(x+h[i])-np.arcsinh(x))/h[i]
der2[0,i]=(np.arcsinh(x+(2*h[i]))-(2*np.arcsinh(x+h[i]))+np.arcsinh(x))/(h[i]**2)
print(der1[0,i])
0.5366144535418695
0.5938270827307779
0.5995211035151105
Primera derivada
f (xi ) − f (xi − 1 )
′
f (x i ) =
h
Segunda derivada
f (xi ) − 2f (xi − 1 ) + f (xi − 2 )
′′
f (x i ) =
2
h
In [3]:
for i in range(3):
der1[1,i]=(np.arcsinh(x)-np.arcsinh(x-h[i]))/h[i]
der2[1,i]=(np.arcsinh(x)-(2*np.arcsinh(x-h[i]))+np.arcsinh(x-(2*h[i])))/(h[i]**2)
print(der1[1,i])
0.6813747749006205
0.6082608506822362
0.6024077360056834
Primera derivada
f (xi + 1 ) − f (xi − 1 )
′
f (x i ) =
2h
Segunda derivada
f (xi + 1 ) − 2f (xi ) + f (xi − 1 )
′′
f (x i ) =
2
h
for i in range(3):
der1[2,i]=(np.arcsinh(x+h[i])-np.arcsinh(x-h[i]))/(2*h[i])
der2[2,i]=(np.arcsinh(x+h[i])-(2*np.arcsinh(x))+np.arcsinh(x-h[i]))/(h[i]**2)
print(der1[2,i])
0.608994614221245
0.6010439667065071
0.6009644197603969
In [5]:
for i in range(3):
der1[i,3]=1/((1+(1.33**2))**0.5)
der2[i,3]=-1.33/((1+(1.33**2))**1.5)
Genere una tabla comparativa con los resultados obtenidos y la respuesta analítica, y en una
columna independiente calcule el error relativo para cada uno de los esquemas y cada tamaño de
paso h. Para obtener la solución analítica puede emplear algún software de ayuda como GeoGebra o
WolgramAlpha
Primera derivada
In [6]:
import pandas as pd
fig, ax = plt.subplots(figsize=(10,2))
# hide axes
fig.patch.set_visible(False)
ax.axis('off')
ax.axis('tight')
cell_text=der1
rows = ('Adelante', 'Atras', 'Centro')
column = ('0.5','0.05','0.01','Real')
fig.tight_layout()
ax.table(cellText=cell_text, colLabels=column, rowLabels=rows, loc='center')
plt.show()
Segunda derivada
In [7]:
fig, ax = plt.subplots(figsize=(10,2))
# hide axes
fig.patch.set_visible(False)
ax.axis('off')
ax.axis('tight')
cell_text=der2
rows = ('Adelante', 'Atras', 'Centro')
column = ('0.5','0.05','0.01','Real')
fig.tight_layout()
ax.table(cellText=cell_text, colLabels=column, rowLabels=rows, loc='center')
plt.show()
Los resultados mostraron una tendencia constante para los tres algoritmos de diferenciación. Entre mas
pequeño sea el tamaño de paso, menor es el error de la derivada. Esto es congruente con la teoria (Chapra,
2007) ya que el error para este algoritmo es directamente proporcional a h
(n+1)
f (ξ)
n+1
Rn = h
(n + 1)!
Ademas de esto concluimos que entre los 3 algoritmos el mas exacto es el centrado.
Chapra, S., Canale, R., (2007), Métodos numéricos para ingenieros, México DF,México: Mc Graw-Hill.
In [ ]: