% Activate the following line by filling in the right side. If for example the name of the root file is Main.tex, write
% "...root = Main.tex" if the chapter file is in the same directory, and "...root = ../Main.tex" if the chapter is in a subdirectory.
 
%!TEX root = ../Metodos_Numericos.tex  

\chapter[Diferenciación e Integración]{Diferenciación e Integración}


\section[Derivadas ]{Diferenciación por diferencias divididas finitas atrás, adelante y centrales de exactitud simple}
Considerando la definición de la derivada 

$$
\frac{df(x)}{dx} =\lim_{h \rightarrow 0}  \frac{f(x) - f(x-h)}{h}
$$

entonces para valores pequeños de $h$ podemos hacer una aproximación de la derivada haciendo

$$
\frac{df(x)}{dx} \approx   \frac{f(x) - f(x-h)}{h}
$$

En el caso de considerar la diferencia hacia adelante podemos hacer 
$$
\frac{df(x)}{dx} \approx   \frac{f(x+h) - f(x)}{h}
$$
Considerando que los incrementos se dan hacia adelante y hacia atrás, podemos dar una representación de la derivada centrada como
$$
\frac{df(x)}{dx} \approx   \frac{f(x+h) - f(x-h)}{2h}
$$

%\section[Derivadas Mejoradas]{Diferenciación por diferencias divididas finitas atrás, adelante y centrales de exactitud mejorada}

\section{Integración por el método de barras}

En general todos los métodos de integración numérica hacen uso de la interpretación de la integral propia, esta interpretación nos dice que la integral en un intervalo $a$ y $b$ es el área bajo la curva. Así podemos hacer este cálculo del área suponiendo que nuestros rectángulos son de altura $f(a)$. Recordemos que el área de un rectángulo esta dado como
$$
A = (b-a) f(a)
$$

por lo que la integral la podemos aproximar por

$$
I = \int_a^b f(x) dx \approx  \int_a^b f(a) dx = \left . f(a) x \right |_a^b  = f(a)*(b-a)
$$

\subsection{Ejemplo}

Para la función $f(x) = 0.2 + 25 x - 200 x^2 + 675 x^3 - 900 x^4 + 400 x^5$, calcular la integral utilizando el método de barras  en el intervalo $a=0$  $b=0.8$ .

$$
I \approx  f(0)*(0.8-0) = 0.2 \times 0.8 = 0.16
$$

En Matlab 

\begin{verbatim}
>> Barras(@f1, 0, 0.8, 1)

ans =

    0.1600
\end{verbatim}

Para una mejor aproximación podemos hacer $N$ divisiones de la región de tamaño $h$ y aproximar la integral como:

$$
\int_a^b f(x) dx \approx  \sum_{k=0}^{N-1} f(a+k h)*h
$$

Esta aproximación da lugar al método de barras cuya codificación en Matlab se presenta a continuación

\begin{verbatim}
function I = Barras(f, a, b, N)

h = abs(b-a)/N;

suma = 0;
for k=0:N-1
    suma = suma + f(a+h*k);
end;

I = suma*h;

end
\end{verbatim}

\section{Integración por el método de trapezoides}

Suponer que todos los rectángulos son de altura constante es una suposición fuerte. En lugar de ello supondremos, para este método, que los rectángulos varían linealmente de acuerdo con la siguiente ecuación

$$
f(x) = f(a) + \frac{(x-a)}{b-a} (f(b)-f(a))
$$

A partir de esto podemos hacer la aproximación de nuestra integral
$$
I = \int_a^b f(x) dx \approx   \int_a^b \left( f(a) + \frac{(x-a)}{b-a} (f(b)-f(a))\right)  dx
$$

resolviendo la integral tenemos
$$
I \approx \left . \left( f(a) x + \frac{(x-a)^2}{2(b-a)} (f(b)-f(a))\right)  \right |_a^b
$$

$$
I \approx  \frac{f(b)+f(a)}{2}(b-a) 
$$

La cual es el área de un trapecio de altura menor $f(a)$ y altura mayor $f(b)$. 

\subsection{Ejemplo}

Para la función $f(x) = 0.2 + 25 x - 200 x^2 + 675 x^3 - 900 x^4 + 400 x^5$, calcular la integral utilizando el método de la Regla Trapezoidal en el intervalo $a=0$  $b=0.8$ .

$$
I \approx   \frac{f(b)+f(a)}{2}(b-a)  = \frac{(0.2320 + 0.2)(0.8-0)} {2}= 0.1728
$$

En Matlab la solución es
\begin{verbatim}
>> Regla_Trapezoidal(@f1, 0, 0.8, 1)

ans =

    0.1728
\end{verbatim}

Si aplicamos la formula para $N$ divisiones de tamaño $h$ tenemos que la regla trapezoidal la podemos calcular como

$$
I \approx (b-a) \frac{f(a) + 2 \sum_{k=1}^{N-1} f(a + kh) + f(b)}{2 N}
$$

La implementación en Matlab para la regla trapezoidal 

\begin{verbatim}
function I = Regla_Trapezoidal(f, a, b, N)

h = abs(b-a)/N;

suma = f(a); 

for k=1:N-1
    suma = suma + 2*f(a+h*k);
end;
suma = suma + f(b);

I = (b-a)*suma/(2*N);

end
\end{verbatim}

\section{Integración por el método de regla Simpson 1/3}

En general cuando se utiliza una función de interpolación de mayor grado la diferencia entre los valores estimados y los reales se vuelve pequeña. Para este método en lugar se suponer que la función se aproxima por lineas haremos la aproximación utilizando un polinomio de segundo orden. Pare este método utilizaremos los polinomios de Lagrange de segundo orden dado por

\begin{equation*}
f(x) = \frac{(x-x_1)(x-x_2)}{(x_0-x_1)(x_0-x_2)}f(x_0)+ \frac{(x-x_0)(x-x_2)}{(x_1-x_0)(x_1-x_2)}f(x_1) + \frac{(x-x_0)(x-x_1)}{(x_2-x_0)(x_2-x_1)}f(x_2)
\end{equation*}

Aplicando la integración de la función de interpolación tenemos:

$$
I \approx \int_a^b f(x) dx= (b-a) \frac{f(x_0) + 4 f(x_1) + f(x_2)}{6}
$$

\subsection{Ejemplo}

Para la función $f(x) = 0.2 + 25 x - 200 x^2 + 675 x^3 - 900 x^4 + 400 x^5$, calcular la integral utilizando el método Simpson 1/3 en el intervalo $a=0$  $b=0.8$ .

$$
I \approx   (b-a) \frac{f(x_0) + 4 f(x_1) + f(x_2)}{6}  = (0.8-0) \frac{f(0) + 4 f(0.4) + f(0.8)}{6}= 
$$
$$
I \approx  (0.8-0) \frac{(0.2 + 4 \times 2.4560+ 0.2320)}{6}= 1.3675
$$
En Matlab la solución es
\begin{verbatim}
>> Simpson13(@f1, 0, 0.8, 2)

ans =

    1.3675
\end{verbatim}

La implementación para $N$ divisiones de tamaño $h$ es:

$$
I \approx (b-a) \frac{f(x_a) + 4 \sum_{k=1,3,5,\cdots}^{N-1} f(a+k*h) + 2\sum_{k=2,4,6,\cdots}^{N-1} f(a+k*h) + f(b)}{3N}
$$

y la implementación en Matlab es:

\begin{verbatim}
function I = Simpson13(f, a, b, N)

h = abs(b-a)/N;

s_par = 0;
s_impar = 0;

for k=1:N-1
    if mod(k,2) == 1
        s_impar = s_impar + f(a+h*k);
    else
        s_par = s_par + f(a+h*k);        
    end;
end;

I = (b-a)*(f(a) + 4*s_impar + 2*s_par + f(b))/(3*N);

end
\end{verbatim}

\section{Integración por el método de regla Simpson 3/8 }

Para este método utilizaremos como función de integración un polinomio de Lagrange de tercer orden dado por

\begin{eqnarray*}
f(x) &=& \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0 - x_3)}f(x_0)\\
      &+& \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}f(x_1) \\
      &+& \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}f(x_2)\\
      &+& \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}f(x_3)
\end{eqnarray*}

Resolviendo para esta función polinomial

$$
I  \approx \int_a^b f(x) dx = (b-a) \frac{f(x_0) + 3f(x_1) + 3 f(x_2) + f(x_3)}{8}
$$

\subsection{Ejemplo}

Para la función $f(x) = 0.2 + 25 x - 200 x^2 + 675 x^3 - 900 x^4 + 400 x^5$, calcular la integral utilizando la regla Simpson 3/8 en el intervalo $a=0$  $b=0.8$ .

$$
I  \approx  (0.8-0) \frac{f(0) + 3f(0.2667) + 3 f(0.5333) + f(0.8)}{8}= 
$$

$$
I \approx  (0.8-0) \frac{(0.2 + 3 \times 1.4327 + 3 \times 3.4872 +  0.2320)}{8}= 1.5192
$$
En Matlab la solución es
\begin{verbatim}
>> Simpson38(@f1, 0, 0.8, 1)

ans =

    1.5192
\end{verbatim}

La implementación en Matlab de la regla de Simpson 3/8 para $N$ intervalos es

\begin{verbatim}
function I = Simpson38(f, a, b, N) 
h = abs(b-a)/N;

suma =0;

for k=0:N-1
    x0 = a + h*k;
    x1 = x0 + h/3;
    x2 = x0 + 2*h/3;
    x3 = x0 + h;
    suma = suma + f(x0) + 3*f(x1) + 3*f(x2) + f(x3);
end;

I = h*suma/8;
end
\end{verbatim}


\section{Ejemplos}

\subsection{Ejemplo 1}

Dada la función 
$$
f(x) = 0.2 + 25 x - 200 x^2 + 675 x^3 - 900 x^4 + 400 x^5
$$

Hacer la solución de las integral en el intervalo $a=0$  $b=0.8$ con $N=1$ aplicando los métodos vistos y comparar con la solución real dada por la ecuación. 

Comenzamos por calcular la integral de $f(x)$

$$
I(x) = \int_a^b f(x) dx = 0.2 x + \frac{25}{2} x^2 - \frac{200}{3} x^3 + \frac{675}{4} x^4 -\frac{900}{5} x^5 + \frac{400}{6} x^6
$$

La solución para cada uno de los métodos es

\begin{center}
\begin{tabular}{|c|c|c|}
    \hline
    Método & Solución & error \\
    \hline
    Barras             & 01600  &   1.4805\\
    R Trapezoidal & 0.1728  &  1.4677\\
    Simpson 1/3   & 1.3675  &  0.2731\\
    Simpson 3/8   & 1.5192  &  0.1214\\
    \hline
\end{tabular}
\end{center}

Note que el mejor desempeño lo tiene el método de Simpson 3/8 en virtud de utilizar polinomios de grado 3 para llevar a cabo la integración.

\subsection{Ejemplo 2}

Repetir el ejemplo anterior para $N=100$.
\begin{center}
\begin{tabular}{|c|c|c|}
    \hline
    Método & Solución & error \\
    \hline
    Barras             & 1.6401  &  0.0004\\
    R Trapezoidal & 1.6403  &  0.0003\\
    Simpson 1/3   & 1.6405   & 0.0000\\
    Simpson 3/8   & 1.6405   & 0.0000\\
    \hline
\end{tabular}
\end{center}
 
Note que a medida que se utilizan mas intervalos la solución en mucho mejor acercando a la solución real.
        
    