Está en la página 1de 4

Freddy Solano - Ejercicio 1A

Diferenciación Numérica

Video : http://youtu.be/tqzFjjlppU8?hd=1
(http://youtu.be/tqzFjjlppU8?hd=1)
Descripción del ejercicio:

A continuación, encontrará los argumentos para el desarrollo del ejercicio 1:

Dadas las siguientes funciones hiperbólicas:


−1
f(x) = sin h (x)

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

Las derivadas son:



1
f (x) =
2 0.5
((1 + x ) )

′′
−x
f (x) =
2 1.5
((1 + x ) )

Las aproximaciones por diferencias finitas hacia adelante son:

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

A continuación vemos la implementación para calcular las derivadas


In [2]:

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

Las aproximaciones por diferencias finitas hacia atras son:

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

A continuación vemos la implementación para calcular las derivadas

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

Las aproximaciones por diferencias finitas hacia el centro son

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

A continuación vemos la implementación para calcular las derivadas


In [4]:

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

Realice un análisis de resultados indicando claramente, y de forma argumentada, cuál considera es


el mejor esquema y tamaño de paso.

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 [ ]:

También podría gustarte