# Práctica 2: La Derivada y el polinomio de Taylor

## La Derivada:

### De la Recta Secante a....

1) Definimos la función que queremos representar:

f(x):=0.5*x^2-3*x$

2) Representamos su gráfica, definiendo un rango en X para su representación:

xmin:-1$
xmax:7$
wxplot2d(f(x), [x,xmin,xmax])$

3) A continuación definimos la ecuación de la recta secante:

PENDIENTE(a,b):=(f(b)-f(a))/(b-a)$

SECANTE(x,a,b):=PENDIENTE(a,b)*(x-a) + f(a)$

4) Definimos los puntos x1 y x2 (x2=x1+delta).
Nos podemos referir a x1 como el "punto de anclaje", que hacemos fijo.
La idea es ir variando el valor de la delta para ver que forma adopta la recta secante.
Para valores muy pequeños de delta, nos aproximamos a la recta tangente

x1:1$
delta:1$
x2:x1+delta$

5) Representamos la recta secante en el par de puntos [(x1,f(x1)), (x+delta,f(x+delta))]

wxplot2d(
    [[discrete,[x1,x2], [f(x1),f(x2)]],f(x),SECANTE(x,x1,x2)], 
    [x,xmin,xmax],
    [style, points, lines, lines],
    [title, "f(x) con recta secante"],
    [legend,"puntos de interseccíon","f(x)","secante"])$

### ... la Derivada

Definimos la derivada de la funcion f[x] que hemos definido anteriormente. 

f(x):=0.5*x^2-3*x;

La función diff nos vuelve la expresion de la primera derivada de f[x], hacia x.

fprima:diff(f(x),x,1);

Para definir una nueva función que es igual a la primera derivada utilizamos la siguente sintaxis:

define(fprima(x), fprima);

Comparamos el valor de la derivada en el punto x = 1 con la pendiente de la recta secante entre los puntos a = 1 y b = 1.1.

fprima(1);

PENDIENTE(1,1.05);

Dibujamos la funcion f(x) y su derivada f'(x): 

wxplot2d([f(x),fprima(x)],[x,xmin,xmax]);

La segunda derivada definimos de la misma manera.

define(fsegunda(x), diff(f(x),x,2));

fsegunda(1);

Ejemplos. 
Maxima sabe las derivadas de las funciones geométricas. 
Maxima sabe las reglas del cociente y el resto de reglas de derivación:

El seno:

diff(sin(x), x);

Maxima aplica la regla del cociente:

diff(x^2*cos(x^3),x);

## Polinomios de Taylor:

Los polinomios de Taylor de varios órdenes aproximan el valor de una función en un punto x en torno a otro punto x_i. 
Definimos la función:

f(x):=exp(x);

Aproximación de primer orden al función f(x) en torno a 1: 

      * paso 1: Primero se define la serie de Taylor de orden 1, para f(x) centrada en el punto 1:
                /T/ significa que maxima guarda la expresion dado como una expansión de Taylor.

t1:taylor(f(x),x, 1,1);

     * paso 2: Se define el polinomio como una función de x (para poder evaluarlo en otros puntos):

define(t1(x),t1);

Siguiendo con esta idea, podemos definir el polinomio de Taylor de órdenes 2, 3 y 4 para la misma función centrados en 1:

define(t2(x), taylor(f(x),x, 1,2));
define(t3(x), taylor(f(x),x, 1,3));
define(t4(x), taylor(f(x),x, 1,4));

Dibujamos la función exacta y las aproximaciones de los cuatro primeros órdenes.

wxplot2d([f,t1,t2,t3,t4],
    [x,-2,3],
    [legend,"e^x","orden 1","orden 2","orden 3","orden 4"],
    [title, "Aproximación a f(x)=e^x en el entorno de x=1"]
);

A continuación, definimos la función de error para poder representarla gráficamente.
Nótese que es necesario especificar el truncamiento (función 'trunc', es decir, la eliminación del resto), para obtener el error. 
De lo contrario, al evaluar globalmente el polinomio, Maxima incorpora el resto de forma automática, 
considerando que la aproximación es siempre perfecta en cualquier punto.

error1(x):= f(x)-trunc(t1(x))$
wxplot2d(error1, [x,-2,3],[title, "Error de la aproximación de primer orden (recta tangente) centrada en 1"]);

Siguiendo con el ejemplo anterior, definimos la función de error para los restantes órdenes de aproximación calculados anteriormente:

error2(x):= f(x)-trunc(t2(x))$
error3(x):= f(x)-trunc(t3(x))$
error4(x):= f(x)-trunc(t4(x))$

Dibujar los terminos residuales.

wxplot2d([error1(x), error2(x), error3(x), error4(x)], [x,-2,3],
    [legend,"Residual orden 1","Residual orden 2","Residual orden 3","Residual orden 4"],
    [title, "terminos residuales de varios ordenes"]
);