Derivabilidad de una función real de variable real: propiedades y aplicaciones

En esta práctica aprenderemos a usar los siguientes comandos y herramientas para aplicar los resultados teóricos de derivación aprendidos en la teoría de la asignatura:
         '   y D[ ]                         	derivación de funciones de una variable.
         /.{variable - > valor }           	para sustituir en una expresión una variable por un valor,
         //Comando          		otra forma de ejecutar algunos comandos de un sólo argumento,
         Series[ ]		               	para calcular el desarrollo de Taylor de una función,

Derivada de una función en un punto, cálculo directo con Mathematica

Como ya sabemos, la derivada de una función real de variable real f(x) en un punto a de su dominio se calcula (cuando existe) a través de cualquiera de los dos  límites siguientes:
                                                    f ' (x)=lí(Underscript[m, x -> a])\(TraditionalForm\`\(\(\(f(\ x\ ) - f(\ a\ )\)\/\(x - a\) = \(\(\(lím\)\(\ \)\)\+\(h -> 
                0\)\) \(f(\ a + h\ ) - f(\ a\ )\)\/h\)\(,\)\)\) 

y decir que una función es derivable en un conjunto es decir que lo es en cada uno de los puntos de ese conjunto.
Puesto que calcular derivadas no es más que calcular límites, ya estamos en condiciones de hacer cálculos de derivadas. No obstante Mathematica posee comandos directos para calcular la derivada de una función en un punto. 

Si hemos definido la función previamente en la forma f [ x_ ]:= ...  para calcular su derivada primera en un punto x genérico simplemente escribimos 
                         f ' [ x ] 
y ejecutamos. Para la derivada segunda pondremos dos "primas"    ( f '' [ x ] ) y así sucesivamente. 

Otra forma de calcular la derivada n-ésima de una función en un punto es usando el comando D de la siguiente forma 
    D[ f [ x ] , x ] para la derivada primera de f con respecto a x,
    D[ f [ x ] , { x , n } ] para la derivada n-ésima  de f con respecto a x.
Veamos algunos ejemplos.

f[x_] := x^2;       (* la derivada de x^2 en un punto a es 2  a *)
Limit[((f[x] - f[a])/(x - a)), 
        x -> a]

f[x_] := Log[x];  (* la derivada del logaritmo natural es 1/
              x cada punto x *)
f'[x]

(* y las siguientes derivadas: *)
Do[
        Print[n, "a. derivada de Log[x] es ",  D[f[x], {x, n}]], {n, 2, 
          10}]

f[x_] := Exp[x]; (* cualquier derivada de la exponencial es ella misma *)
\(Do[
      Print[n, \*""a. derivada de \!\(E\^x\) es "", \ 
        D[f[x], {x, n}]], {n, 1, 10}]\)

f[x_] := Cos[x];  (* la derivada del coseno es menos el seno*)
f'[x]

Interpretación geométrica de la derivada

La derivada de una función en un punto tiene una interpretación gráfica muy sencilla:  f ' (a) es la pendiente le la recta tangente a la gráfica de f en el punto 
( a, f (a) ). Veamos gráficamente en un ejemplo cómo la recta tangente es el límite de las rectas secantes siendo su pendiente f '(a) el límite de las pendientes de las rectas secantes (que es  ((f( a  + h) - f( a ))/h)).

f[x_] := (x - 2)^2/3;
a = 1;
secante[x_, h_] := 
        f[a] + ((f[a + h] - f[a])/h) (x - 
                a);
tangente[x_] := 
        f[a] + f'[a] (x - a);
Do[Plot[{f[x], secante[x, h], tangente[x]}, {x, 0, 5}, 
        PlotRange -> {-1, 2}, 
        PlotStyle -> {{Thickness[0.01], 
              RGBColor[0, 0, 0]}, {Thickness[0.01], 
              RGBColor[0, 0, 1]}, {Thickness[0.01], RGBColor[1, 0, 0]}}, 
        AxesLabel -> "Azul=secantes, Rojo=tangente"], {h, 2.5, 
        0.01, -0.06}]

Polinomio de Taylor de grado n

Recordamos que el polinomio de Taylor de grado n de una función f en un punto a viene dado por 
                      \(TraditionalForm\`\(T\_\(n, f\)\)(x; 
          a) = \(f(a) + 
              f' \((a)\) \((x - a)\) + \(1\/2\) 
                f'' \((a)\) \((x - a)\)\^2 +  ... \) + \(1\/\(n!\)\) \(\(f\^\(\(\ \)\(n\)\()\)\)\)(a)\) \((x - a)\)\^n\).
En Mathematica existe un comando directo que genera este polinomio: Series[ f ( x ) , { x, a, n} ] y proporciona una pequeña información sobre el orden del resto de Lagrange.

Series[E^x,  {x, 0, 10}] (* observar el efecto de añadir el comando Normal[]  *)
Normal[Series[E^x,  {x, 0, 10}]]

Como sabemos, el polinomio de Taylor es el polinomio "más cercano" a la función f(x) en torno al punto a. Usemos esta herramienta para aproximar el valor del número π, teniendo en cuenta que π = 4 arcsen ((Sqrt[2])/2).

Series[4*ArcSin[x],  {x, 0, 11}]

4 x + ((2 (x^3))/3) + ((3 (x^5))/10) + ((5 (x^7))/28) + ((35 (x^9))/288) + ((63 (x^11))/704) /. {x -> (Sqrt[2])/2. }

Hemos usado aquí otro comando básico de Mathematica 
                           ( 
          expresión que depende de x )  /. {x -> valor}
da como salida el resultado de evaluar la expresión cuando x toma el valor dado sin asignar este valor a la variable x.

Veamos ahora con un ejemplo (la función seno), cómo el polinomio de Taylor se acerca cada vez más a la función si aumentamos el grado; en este caso optamos por construir "a mano" el polinomio de Taylor:

f[x_] := Sin[x];
a = 0. ;
taylor[x_, n_] := 
        Sum[(D[f[t], {t, k}] /. {t -> a})/k! (x - a)^k, {k, 
            0, n}];
Do[Plot[{Sin[x], taylor[x, n]}, {x, -2 Pi, 2  Pi}, 
        PlotRange -> {-2, 2}, 
        PlotStyle -> {{Thickness[0.01], 
              RGBColor[0, 0.6, 1]}, {Thickness[0.005], RGBColor[1, 0, 0]}}, 
        AxesLabel -> "orden" n], {n, 1, 9, 2}]

Comprobemos que el error cometido al aproximar el sen(π) (que es cero) por el de su polinomio de Taylor en x=0 de grado 9 ya es tan sólo de un 7%.

taylor[Pi, 9]

Aplicación: cálculo de extremos y optimización

Ejemplo 1.
Calcula los extremos relativos y absolutos (si existen) de la siguiente función:
                        f(x) = 3 (x^3) - 5  (x^2) + x - 4.
Como la función es derivable en todo su dominio (-∞, ∞), sabemos que los extremos relativos anulan a la derivada. Por lo tanto buscamos los puntos que anulan a la derivada. Para resolver la ecuación f ' (x) = 0 utilizaremos el comando ya aprendido
                   Solve[ ecuación, incógnita/s ].
Observamos que la salida de este comando es una lista cuyos elementos son asignaciones de las soluciones a la incógnita {incógnita - > valor} idóneas para ser usadas después con la opción "/.".

f[x_] := 2 (x^3) - 10  (x^2) + x - 4 ;
sol = Solve[f'[x] == 0, x]

sol // N

Para ver si son máximos o mínimos calculamos la derivada segunda en dichos puntos. Para ello hemos asignado la salida del comando Solve a la variable sol.

f''[x] /. sol[[1]] // N
f''[x] /. sol[[2]] // N

Por lo tanto, en el primer punto x = 0.0507 ..  f alcanza  un máximo relativo y en el otro  x = 3.28 ... un mínimo relativo. No existen máximos ni mínimos absolutos ya que f tiende a infinito en infinito y a menos infinito en menos infinito.  Por último, dibujamos la gráfica para confirmar los resultados.

Plot[f[x], {x, -10, 10}];

Ejemplo 2.
Se pretende construir un silo cuya base sea una semiesfera y cuyas paredes verticales tengan forma de cilindro (ver figura) de manera que su capacidad sea de 1.000 (m^3). Calcula el radio y la altura de la pared lateral óptimos para minimizar el gasto de material en la construcción de dicho silo, teniendo en cuenta que todas las paredes han de tener un grosor uniforme de h = 50 cm pero que el material empleado en la superficie esférica cuesta 200 Euros/(m^3) mientras que el correspondiente al cilindro cuesta sólo 120 Euros/(m^3).

Expandir para ver más dibujos

f[x_] := 
        Which[0 ≤ x < 1, (Sqrt[1 - (((x - 1))^2)]), 
          1 ≤ x, 1, x <= 0, 0];
fext[x_] := 1.3*f[(x + 0.3)/1.3];
Plot[{f[x], fext[x]}, {x, -0.3, 2}];

n = 
        10;   
Do[ParametricPlot3D[{{Cos[t]*f[z], Sin[t]*f[z], 
            z}, 
{Cos[t]*fext[z], Sin[t]*fext[z], 
            z}, 
{Cos[t]*(1 + 0.15 z), 
            Sin[t]*(1 + 0.15 z), 2}}, 
{t, 0, 
          2  π}, {z, -0.3, 2}, 
Axes -> False, 
        AspectRatio -> 1, PlotPoints -> 40, Boxed -> False, 
        ViewPoint -> {0,  
            4*Cos[0.4 + Sin[2  i Pi/n]],   4*
              Sin[0.4 + Sin[2  i Pi/n]]}], {i, 0, n - 1}]

El hecho de que el volumen interior sea constante determinará una relación entre la altura y el radio. Llamamos a a la altura (en metros), r al radio (en metros) y h al grosor de la pared (en metros).
1.000 = Volumen = volumen cilindro + volumen semiesfera = (Base cilindro x altura) + (vol. esfera) / 2
          = π (r^2)a + (4/3)π (r^3)/2
de donde a = (1/(π (r^2))) (1000 - 
              2/3  π (r^3)).  Definimos pues a como función de r.

Clear[a, h, V, r, x, f]
a[r_] := (1000 - (2/3) Pi r^3)/(Pi r^2)

El material a usar tanto en la semiesfera como en el cilindro será igual al volumen de las paredes correspondientes. En cada caso este volumen será igual al que encierra la cara externa menos el que encierra la cara interna. Distinguimos entre la semiesfera y el cilindro, ya que los costes son distintos.
        Volumen (en (m^3)) de material en el cilindro = π (((r + h))^2)a  - π(r^2)a,
                 coste del cilindro (en Euros)  = 120 ( π(((r + h))^2)a- π(r^2)a ).
        Volumen (en (m^3)) de material en la semiesfera = (2/3)π (((r + h))^3)-(2/3)π (r^3),
                   coste de la semiesfera (en Euros) = 200 ( (2/3)π(((r + h))^3)-(2/3)π(r^3) ).
Definimos la función de coste dependiente del radio (sin olvidar que a es función de r):

h = 1/2;
f[r_] := 
      120 (Pi (r + h)^2 a[r] - Pi r^2 a[r]) + 
        200 (2/3 Pi (r + h)^3 - 
              2/3 Pi r^3)
f[r] // Simplify
Plot[f[r], {r, 1, 30}];

Nota: Aunque no se haya dicho, es evidente que la función  f  sólo está definida para valores positivos (¡ha de existir radio!).
Buscamos el mínimo de  f, por lo que procederemos igual que en el ejemplo anterior. (Nota: obsérvese la diferencia entre Solve y NSolve)

sol = NSolve[f'[r] == 0, r]

La segunda y tercera solución no tienen sentido ya que son complejas y la cuarta tampoco ya que es negativa. Por lo tanto la única solución posible sera la primera. Confirmamos que es un mínimo evaluando la derivada segunda:

f''[r] /. sol[[1]]

El radio y la altura óptimos  son:

Print["radio óptimo = ", 
      r /. sol[[1]], " m."]
Print["altura óptima = ", 
      a[r] /. sol[[1]], " m."]

Y el coste:

Print["Coste mínimo = ", 
      f[r] /. sol[[1]], " Euros"]
Print["             = ", 
      166.386*f[r] /. sol[[1]], " Pesetas"]

Ejercicios

1. Calcula  y simplifiqua las derivadas de las siguientes funciones:
    i)    f(
          x) = ((Ln((x^2) + x + 1))^(1/2)) - (1/(Sqrt[6])) arctg((2  x + 
                    1)/(Sqrt[3])),
    ii)   f(x) = (((((cos(x))^x)))^(tg(x))).
2. Repite el problema del silo suponiendo que el precio del material de la semiesfera y del cilindro es el mismo y observa la altura resultante.
3. Calcula (en metros) la altura óptima que ha de tener una caja de base cuadrada para que pueda contener 1000 litros y el coste del material para hacerla sea mínimo (suponemos para simplificar que los lados de la caja no tienen grosor). 
4. Hallar los puntos de la curva y = (x^2) - 3  x + 5en los cuales la recta tangente es perpendicular a la recta  y + x = 0.
     Ayuda: Pensar qué pendiente tienen las rectas perpendiculares a la curva  y + x = 0 y tener en cuenta que dos vectores ((Subscript[x, 1]), (Subscript[y, 1])) y ((Subscript[x, 2]), (Subscript[y, 2])) de (R^2) son perpendiculares cuando su producto escalar es cero:  (Subscript[x, 1]) (Subscript[x, 2])  + (Subscript[y, 1]) (Subscript[y, 2]) = 0.