Usando un cambio de variable $x - a = h$
\begin{equation*} f(x) \approx f(a) + f'(a) h + \frac{1}{2} f''(a) h^{2} + \frac{1}{6} f'''(a) h^{3} + \cdots \end{equation*}Reemplazando $a = x - h$
\begin{equation*} f(x) \approx f(x - h) + f'(x - h) h + \frac{1}{2} f''(x - h) h^{2} + \frac{1}{6} f'''(x - h) h^{3} + \cdots \end{equation*}Usando un cambio de variable $x = x_{i}$
\begin{equation*} f(x_{i}) \approx f(x_{i} - h) + f'(x_{i} - h) h + \frac{1}{2} f''(x_{i} - h) h^{2} + \frac{1}{6} f'''(x_{i} - h) h^{3} + \cdots \end{equation*}Reemplazando $x_{i} - h = x_{i-1}$
\begin{equation*} f(x_{i}) \approx f(x_{i-1}) + f'(x_{i-1}) h + \frac{1}{2} f''(x_{i-1}) h^{2} + \frac{1}{6} f'''(x_{i-1}) h^{3} + \cdots \end{equation*}Recorriendo los índices
\begin{equation} f(x_{i+1}) \approx f(x_{i}) + f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} + \frac{1}{6} f'''(x_{i}) h^{3} + \cdots \end{equation}La expansión hacia adelante puede escribirse como
\begin{equation*} f(x_{i} + h) \approx f(x_{i}) (h)^{0} + f'(x_{i}) (h)^{1} + \frac{1}{2} f''(x_{i}) (h)^{2} + \frac{1}{6} f'''(x_{i}) (h)^{3} + \cdots \end{equation*}Entonces la expansión hacia atrás será
\begin{equation*} f(x_{i} - h) \approx f(x_{i}) (-h)^{0} + f'(x_{i}) (-h)^{1} + \frac{1}{2} f''(x_{i}) (-h)^{2} + \frac{1}{6} f'''(x_{i}) (-h)^{3} + \cdots \end{equation*}Simplificando
\begin{equation} f(x_{i-1}) \approx f(x_{i}) - f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} - \frac{1}{6} f'''(x_{i}) h^{3} + \cdots \end{equation}Usando dos términos de la serie de Taylor expandida hacia adelante
\begin{equation*} f(x_{i+1}) \approx f(x_{i}) + f'(x_{i}) h \end{equation*}Despejando la primera derivada
\begin{equation} f'(x_{i}) = \frac{f(x_{i+1}) - f(x_{i})}{h} \end{equation}
In [1]:
def g(x):
resultado = - 0.1*x**4 - 0.15*x**3 - 0.5*x**2 - 0.25*x + 1.2
return resultado
def fx_adelante(f,x,h):
derivada = (f(x+h) - f(x))/h
return derivada
In [2]:
print('f\'(0.5) =', fx_adelante(g,0.5,0.25))
In [3]:
def fx_atras(f,x,h):
derivada = (f(x) - f(x-h))/h
return derivada
In [4]:
print('f\'(0.5) =', fx_atras(g,0.5,0.25))
Usando tres términos de la serie de Taylor expandida hacia adelante
\begin{equation} f(x_{i+1}) \approx f(x_{i}) + f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} \label{ecuacion6} \end{equation}Usando tres términos de la serie de Taylor expandida hacia atrás
\begin{equation} f(x_{i-1}) \approx f(x_{i}) - f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} \label{ecuacion7} \end{equation}Restando \eqref{ecuacion7} de \eqref{ecuacion6}
\begin{equation*} f(x_{i+1}) - f(x_{i-1}) \approx 2 f'(x_{i}) h \end{equation*}Despejando la primera derivada
\begin{equation} f'(x_{i}) = \frac{f(x_{i+1}) - f(x_{i-1})}{2 h} \end{equation}También puede escribirse como el promedio de una diferencia hacia adelante y una diferencia hacia atrás
\begin{equation*} f'(x_{i}) = \frac{\frac{f(x_{i+1}) - f(x_{i})}{h} + \frac{f(x_{i}) - f(x_{i-1})}{h}}{2} \end{equation*}
In [5]:
def fx_centrada(f,x,h):
derivada = (fx_adelante(f,x,h) + fx_atras(f,x,h))/2
return derivada
In [6]:
print('f\'(0.5) =', fx_centrada(g,0.5,0.25))
Usando tres términos de la serie de Taylor expandida hacia adelante una posición
\begin{equation*} f(x_{i+1}) \approx f(x_{i}) + f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} \end{equation*}Multiplicando por dos
\begin{equation} 2 f(x_{i+1}) \approx 2 f(x_{i}) + 2 f'(x_{i}) h + f''(x_{i}) h^{2} \label{ecuacion9} \end{equation}Usando tres términos de la serie de Taylor expandida hacia adelante dos posiciones
\begin{equation} f(x_{i+2}) \approx f(x_{i}) + 2 f'(x_{i}) h + 2 f''(x_{i}) h^{2} \label{ecuacion10} \end{equation}Restando \eqref{ecuacion10} de \eqref{ecuacion9}
\begin{equation*} 2 f(x_{i+1}) - f(x_{i+2}) \approx f(x_{i}) - f''(x_{i}) h^{2} \end{equation*}Despejando la segunda derivada
\begin{equation} f''(x_{i}) = \frac{f(x_{i+2}) - 2 f(x_{i+1}) + f(x_{i})}{h^{2}} \end{equation}
In [7]:
def fxx_adelante(f,x,h):
derivada = (f(x+2*h) - 2*f(x+h) + f(x))/h**2
return derivada
In [8]:
print('f\'\'(0.5) =', fxx_adelante(g,0.5,0.25))
Usando tres términos de la serie de Taylor expandida hacia atrás una posición
\begin{equation*} f(x_{i-1}) \approx f(x_{i}) - f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} \end{equation*}Multiplicando por dos
\begin{equation} 2 f(x_{i-1}) \approx 2 f(x_{i}) - 2 f'(x_{i}) h + f''(x_{i}) h^{2} \label{ecuacion12} \end{equation}Usando tres términos de la serie de Taylor expandida hacia atrás dos posiciones
\begin{equation} f(x_{i-2}) \approx f(x_{i}) - 2 f'(x_{i}) h + 2 f''(x_{i}) h^{2} \label{ecuacion13} \end{equation}Restando \eqref{ecuacion13} de \eqref{ecuacion12}
\begin{equation*} 2 f(x_{i-1}) - f(x_{i-2}) \approx f(x_{i}) - f''(x_{i}) h^{2} \end{equation*}Despejando la segunda derivada
\begin{equation} f''(x_{i}) = \frac{f(x_{i}) - 2 f(x_{i-1}) + f(x_{i-2})}{h^{2}} \end{equation}
In [9]:
def fxx_atras(f,x,h):
derivada = (f(x) - 2*f(x-h) + f(x-2*h))/h**2
return derivada
In [10]:
print('f\'\'(0.5) =', fxx_atras(g,0.5,0.25))
Usando tres términos de la serie de Taylor expandida hacia adelante
\begin{equation} f(x_{i+1}) \approx f(x_{i}) + f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} \label{ecuacion15} \end{equation}Usando tres términos de la serie de Taylor expandida hacia atrás
\begin{equation} f(x_{i-1}) \approx f(x_{i}) - f'(x_{i}) h + \frac{1}{2} f''(x_{i}) h^{2} \label{ecuacion16} \end{equation}Sumando \eqref{ecuacion16} a \eqref{ecuacion15}
\begin{equation*} f(x_{i+1}) + f(x_{i-1}) \approx 2 f(x_{i}) + f''(x_{i}) h^{2} \end{equation*}Despejando la segunda derivada
\begin{equation} f''(x_{i}) = \frac{f(x_{i+1}) - 2 f(x_{i}) + f(x_{i-1})}{h^{2}} \end{equation}También puede escribirse como la diferencia de una diferencia hacia adelante y una diferencia hacia atrás
\begin{equation*} f''(x_{i}) = \frac{\frac{f(x_{i+1}) - f(x_{i})}{h} - \frac{f(x_{i}) - f(x_{i-1})}{h}}{h} \end{equation*}
In [11]:
def fxx_centrada(f,x,h):
derivada = (fxx_adelante(f,x,h) - fxx_atras(f,x,h))/h
return derivada
In [12]:
print('f\'\'(0.5) =', fxx_centrada(g,0.5,0.25))