Serie de Taylor

\begin{equation} f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x - a)^{n} \end{equation}

Expansión hacia adelante

\begin{equation*} f(x) \approx f(a) + f'(a) (x - a) + \frac{1}{2} f''(a) (x - a)^{2} + \frac{1}{6} f'''(a) (x - a)^{3} + \cdots \end{equation*}

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}

Expansión hacia atrás

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}

Primera diferencia hacia adelante

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


f'(0.5) = -1.1546875

Primera diferencia hacia atrás

Usando dos 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 \end{equation*}

Despejando la primera derivada

\begin{equation} f'(x_{i}) = \frac{f(x_{i}) - f(x_{i-1})}{h} \end{equation}

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


f'(0.5) = -0.7140625000000003

Primera diferencia centrada

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


f'(0.5) = -0.9343750000000002

Segunda diferencia hacia adelante

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


f''(0.5) = -2.362499999999999

Segunda diferencia hacia atrás

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


f''(0.5) = -1.3125000000000036

Segunda diferencia centrada

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


f''(0.5) = -4.1999999999999815