Práctica num. 7 de Fundamentos Matemáticos E. M. A.

A. Cálculo de derivadas con Mathematica

El modo más sencillo de calcular la derivada de una función  f[x] usando Mathematica es escribir  f'[x]  como sigue:

f[x_] :=  (x^21) + (Sqrt[x]) + 2

f'[x]

Otro procedimiento para hacer lo mismo es usar el comando  D  así:

D[f[x], x]

El segundo modo es más conveniente cuando no se hace una definición previa de la función, así:

D[Sin[x] Cos[x]  +  Log[Sin[x]], x]

Como ejercicio, calcular las  derivadas de las siguientes funciones

1)	g(x)=(Sqrt[x])                  2)	f(x) = (x/((x^23) + 7  (x^2) + 1))                         3)	y=((x + 1)^(1/10))

B. Como dibujar las gráficas de las funciones, sus rectas tangentes, y el punto en el que son tangentes

Cuando se dibuja una curva junto con su recta tangente en un punto, también ayuda ver el punto en la gráfica de la función. Un buen modo de hacer eso es dibujar cada pieza por separado y juntarlas luego usando el comando :Show.

Ejemplo 4. Como ejemplo, tratemos de añadir el punto (π, f(π)) y la gráfica de la recta tangente  a f(x) = sin(x) en π a la gráfica de la propia función  f.  Primero introducimos la función f y luego, a la vez que introducimos el dibujo de su gráfica, le damos un nombre a ese dibujo, así:

Clear["@"]

f[x_] := Sin[x]

curve = Plot[f[x], {x, 0, 2  π}];

Ahora usamos Graphics para dibujar un punto y darle un nombre, así

point = 
        Graphics[{PointSize[0.02], Point[{π, f[π]}]}];

(obsérvense las reglas usadas para dibujar un punto)

Podemos añadir más puntos si queremos

point2 = 
        Graphics[{PointSize[0.02], 
            Point[{(π/2), f[(π/2)]}]}];

point3 = 
        Graphics[{PointSize[0.02], 
            Point[{((3  π)/2), f[((3  π)/2)]}]}];

Y usar Show para ver la curva y los puntos juntos

Show[curve, point, point2, point3];

También puedes cambiar el PointSize y ver lo que ocurre.

Para calcular y dibujar la recta tangente a la función f(x\(TraditionalForm\`\_0\)) en el punto x\(TraditionalForm\`\_0\), tenemos en cuenta que la ecuación de esta recta es  y=f'(x\(TraditionalForm\`\_0\))x + n, de donde, como la recta ha de pasar por (x\(TraditionalForm\`\_0\),f(x\(TraditionalForm\`\_0\))),   f(x\(TraditionalForm\`\_0\)) = f'(x\(TraditionalForm\`\_0\)) x\(TraditionalForm\`\_0\) + n, de donde  n=f(x\(TraditionalForm\`\_0\)) - f'(x\(TraditionalForm\`\_0\)) x\(TraditionalForm\`\_0\) y la ecuación de la recta tangente es y=f'(x\(TraditionalForm\`\_0\)) x + f(x\(TraditionalForm\`\_0\)) - f'(x\(TraditionalForm\`\_0\)) x\(TraditionalForm\`\_0\), lo que es equivqlente a        y  =  f(x\(TraditionalForm\`\_0\)) + f'(x\(TraditionalForm\`\_0\)) (x - x\(TraditionalForm\`\_0\)).         Usando esta expresión para dibujar las rectas tangentes a la función anterior en los tres puntos que hemos definido,  tenemos:

tangenteenpoint[x_] := 
      f[π/2]  +  f'[π/2] (x  -  π/2)

tangenteenpoint2[x_] := 
      f[π]  +  f'[π] (x  -  π)

tangenteenpoint3[x_] := 
      f[3 π/2]  +  f'[
            3 π/2] (x  -  π/2)

tangente1 = 
        Plot[tangenteenpoint[x], {x, 0, π}, 
          PlotStyle -> Hue[0]];

tangente2 = 
        Plot[tangenteenpoint2[x], {x, π/2, 3 π/2}, 
          PlotStyle -> Hue[0.3]];

tangente3 = 
        Plot[tangenteenpoint3[x], {x, π, 2 π}, 
          PlotStyle -> Hue[0.6]];

Show[curve, point, point2, point3,  tangente1,  tangente2,  
      tangente3]

Donde el PlotStyle se ha usado para definir los colores de la rectas tangentes. "Hue" puede tomar cualquier valor decimal entre 0 y 1, a cada uno de los cuales corresponde un color.

Las pendientes de las rectas tangentes dibujadas son f'(π/2) =cos(π/2)= 0,  f'(π) =cos(π)= -1, y f'(3π/2)=cos(3 π/2)=0.

Ejemplo 5.   Vamos ahora a dibujar la gráfica de la parábola  y = (x^2) + 2  x junto con su recta tangente en el punto (-3, 3) .  
          Actuamos igual que lo hicimos en el ejemplo anterior:

Clear["@"]

f[x_] := (x^2) + 2  x

pendienteenmenos3 =  f'[-3]

tangent[x_] := 3 + f'[-3] (x + 3)

curve = 
        Plot[{f[x], tangent[x]}, {x, -4, -2}, 
          PlotStyle -> {{}, Hue[0]}];

point = 
        Graphics[{PointSize[0.02], Point[{-3, f[-3]}]}];

Show[curve, point];

En este caso, como hemos dibujado una lista de dos funciones {f[x], tangent[x]},hemos dado también una lista de dos plot styles:{ {} , Hue[0] }. El primer "style" es solo un par de corchetes vacios , que indica que no cambiamos el estilo que ha de ser usado para la función f[x] , el segundo "style" Hue[0] indica que la recta tangente ha de ser roja.

Obsérvese que, en general,  un punto y coma suprime la salida (output), pero, cuando se trata de un Plot, lo único que suprime es la palabra ⁃Graphics⁃., así es que no resulta tan útil usarlo.

Más ejercicios:

Determoinar la pendiente de la tangente y dibujar la función junto con el punto y la recta tangente en el punto en cada uno de los siguientes casos

6)	f(x)=(x^3)+3  x+2, 	en el punto (1, f(1))               7)	y=1/(Sqrt[x]),   en (1, 1)
8)	y=(x^3),   en (a, (a^3)) (los cálculos se deben de hacer con un a genérico , pero los dibujos requieren 				dar valores concretos a a).
9)    f(x)=2(x^3)-x+4, en (0, 4)    10)	y=(Sqrt[x + 1]), en (1, (Sqrt[2]))   11)  y = x + 1/x, en (2, 5/2)

C. Solución de ecuaciones

El método de Newton

El método de Newton para resolver una ecuación se basa en una idea muy simple: la función cuya gráfica es la recta tangente a una función  f en un punto es una "buena aproximación" de la función f, por lo tanto, encontrar donde es cero la función de la que la recta tangente es la gráfica dará una buena aproximación del punto donde es cero la función  f . De este modo, comenzando por una buena conjetura sobre donde se anula la función, es posible encontrar una conjetura mejor. Veamos primero un ejemplo sencillo que ilustra la idea. Supongamos que queremos encontrar una solución de la ecuación

(x^3) - x + 1 = 0

Comenzamos dibujando la gráfica de la función que queremos valga cero

Clear["@"]

f[x_] := (x^3) - x + 1

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

De la gráfica deducimos que una solución está cerca de  (Subscript[x, 1]) = -1.  Tomamos este valor como nuestra primera aproximación (lo que antes llamabamos "conjetura").  La recta tangente en  ((Subscript[x, 1]), f((Subscript[x, 1]))) dará la siguiente mejor aproximación.

tang[x_] := f[-1] + f'[-1] (x + 1)

Plot[{f[x], tang[x]}, {x, -2, 2}, 
        PlotStyle -> {{}, Hue[0]}];

Si repetimos el proceso, tomando la intersección de la recta con el eje  X  como nuestra próxima aproximación, obtendremos una solución más próxima al valor real:

Solve[tang[x] == 0, x]

Luego tomamos (Subscript[x, 2])=-(3/2), y repetimos la operación:

tang2[x_] := 
      f[-(3/2)] + f'[-(3/2)] (x + (3/2))

Plot[{f[x], tang2[x]}, {x, -2, 2}, 
        PlotStyle -> {{}, Hue[0.5]}];

Solve[tang2[x] == 0, x]

Tomamos ahora (Subscript[x, 3])=-(31/23). Continuando de este modo, obtenemos aproximaciones cada vez mejores (suponiendo que la primera conjetura estuviese razonablemente cerca de una solución).
En cada paso determinamos la intersección de la recta tangente en  x = (Subscript[x, n   ])con el eje  X, que se obtiene resolviendo la ecuación   f((Subscript[x, n])) + f' ((Subscript[x, n])) (x - (Subscript[x, n])) = 0

cuya solución nos da la siguiente aproximación  (Subscript[x, n + 1]).  Resolviendo esta ecuación obtenemos la siguiente fórmula para  (Subscript[x, n + 1]):      (Subscript[x, n + 1])=(Subscript[x, n])-((f((Subscript[x, n])))/(f' ((Subscript[x, n]))))

que es la que se usa para obtener una lista de aproximaciones a la solución cada vez mejores.

Método de Newton en película

(Esto es a título ilustrativo, se mostrará en clase la película, pero el programa no ha de hacerlo el alumno, porque es demasiado técnico).  A continuación, listamos el programa que permite obtener una película de  Mathematica que muestra gráficamente las etapas del método de Newton. Corresponde a los cálculos del ejercicio anterior. Para ver la película una vez puesto en marcha el programa, actuar como siempre.

Clear["@"];  f[x_] := (x^3) - 6; r[1] = 1;  
    r[n_] := r[n - 1] - f[r[n - 1]]/(f')[r[n - 1]]; 
    tangent[x_, n_] := f[r[n]] + f'[r[n]] (x - r[n]);
\(\(Table[
        If[Mod[n, 2] == 
            1, 
		Plot[\ \ {f[x], tangent[x, Floor[\((n + 1)\)/2]]}, {x, 
              0, 4}, PlotRange -> {{0, 3.5}, {\(-10\), 30}}, 
	
            PlotStyle -> {{}, Hue[0]}, 
            Prolog -> {PointSize[0.02], 
                Point[{r[Floor[\((n + 1)\)/2]], 
                    f[r[Floor[\((n + 1)\)/2]]]}\ \ ], 
                Point[{r[\((n + 1)\)/2 + 1], 0}\ ]}], 	
          Plot[
			{f[x], tangent[x, Floor[\((n)\)/2]], 
              99999 \((x - r[Floor[n/2 + 1]])\)}, {x, 0, 4}, 
            PlotRange -> {{0, 3.5}, {\(-10\), 30}}, 
	
            PlotStyle -> {{}, Hue[0], Dashing[{0.02}]}, 
            Prolog -> {PointSize[0.02], Point[{r[\((n)\)/2 + 1], 0}\ ], 
                Point[{r[\((n)\)/2 + 1], f[r[\((n)\)/2 + 1]]}]}]], 
	{n, 1, 
          8}];\)\)
Null

Ejemplo: Usar el método de Newton para calcular  (6^(1/3)) con 5 cifras decimales.  
Sugerencia: elegir f(x)=(x^3) - 6  y  comenzar con (Subscript[x, 1])=1.

Primero definimos la función y escribimos el primer valor que le damos a x: x[1]=(Subscript[x, 1])=1

Clear["@"]

f[x_] := (x^3) - 6

x[1] = 1

Ahora escribimos la fórmula del método de Newton, pero considerando (Subscript[x, n]) como una función de n.

x[n_] := x[n - 1] - f[x[n - 1]]/(f')[x[n - 1]]

OJO: si se aplica la fórmula anterior sin escribir previamente quien es x[1], el ordenador se quedará colgado. Si esto te ocurre aprieta  ⌘. 
El mejor modo de producir una lista de aproximaciones es con el comando Table.  También es bueno usar el comando N para ver las aproximaciones decimales.  Esto ayuda a ver que tan precisas son las sucesivas aproximaciones. La regla general es que si sucesivas aproximaciones coinciden en  k decimales, entonces dan la solución de la ecuación con una precisión de esos  k decimales.

approximations = Table[{N[x[n], 10], N[f[x[n]]]}, {n, 1, 8}]

Se pueden presentar estos resultados de una forma más clara así

TableForm[approximations]

La primera columna da las aproximaciones, la segunda da los valores de la función en cada aproximación, que se observa como se va acercando más a 0. La repuesta a la pregunta de obtener una solución aproximada con cinco decimales exactos es  1.81712.

Soluciones aproximadas usando Mathematica

Hasta ahora, hemos usado el comando Solve para resolver ecuaciones, y NSolve para dar soluciones numéricas aproximadas. Sin embargo, esos comandos difícilmente funcionarán cuando las ecuaciones a resolver no son polinómicas, veamos un ejemplo:
Dada la función  f(x)=  tan(x)  +  (x^6), encontrar las soluciones de la ecuación  f '' (x)=0  en el intervalo  -1 ≤ x ≤ 1.
Intentemos primero encontrar la solución usando los comandos conocidos:

f[x_]:= tan(x)  +  (x^6); Solve[f''[x] == 0, x]

Mathematica responde que esta ecuación parace necesitar, para  encontrar su solución, métodos no algebraicos (que son los que usa el comando Solve) y, por lo tanto, da como respuesta la simple reescritura de la ecuación.  Si ahora intentamos la solución con NSolve:

NSolve[f''[x] == 0, x]

la respuesta es la misma porque, aunque NSolve trata de resolver la ecuación numéricamente, el procedimiento para intentar la solución sigue siendo algebraico. El otro comando que usa Mathematica para encontrar soluciones aproximadas es FindRoot, que, en lugar de métodos algebraicos, usa un algoritmo basado en el método  de Newton visto en teoría. Recuérdese que ese método requería comenzar por un valor de la variable x (que podemos considerar como una conjetura de la solución) e ir luego dando pasos que mejoran la aproximación a la solución. Para conjeturar una primera solución que esté en el intervalo  -1 ≤ x ≤ 1, dibujamos la gráfica de la función entre -1 y 1

Plot[f''[x], {x, -1, 1}];

Vemos en ella que parece haber dos soluciones, una cerca de 0 y otra entre -0'4 y -0'5. Usamos esta información para pedirle que calcule dos soluciones, una empezando por  -0'4 y otra empezando por 0.

FindRoot[f''[x] == 0, {x, -0.4}]

FindRoot[f''[x] == 0, {x, 0}]

Las dos soluciones aproximadas son (Subscript[x, 1]) ≈ -0.444115 y (Subscript[x, 2]) ≈ 0.  Si queremos los resultados con más precisión, usamos la opción WorkingPrecision, que da exactas todas las cifras menos la última, así

FindRoot[f''[x] == 0, {x, -0.4}, 
      WorkingPrecision -> 25]

Ejecicios

1—3 □ Usar el método de Newton, y el FindRoot (ayudándose de la gráfica de la función si se considera necesario) para encontrar una solución (correcta hasta la cuarta cifra decimal) de cada una de las ecuaciones siguientes:

1)	(x^5) + 9  x + 1 = 0  	      2)          (x^4) - (x^3) + (x^2) = 
        1 - x   	   3)        cos x = x

4—6 □ Usar el método de Newton, y el FindRoot (ayudándose de la gráfica de la función si se considera necesario) para encontrar una solución (correcta hasta la sexta cifra decimal) de cada una de las ecuaciones siguientes:

4)	(10^(1/5))		     5)       La solución de  (x^3) - 3  (x^2) + 1 = 0 que está en el intervalo [0, 1].

6)	La coordenada  x del punto de intersección de las curvas   x y = 1 e  y = (x^3) - 6  x + 9.