Resolución de ecuaciones

El problema que se plantea en esta práctica consiste en encontrar las raíces reales (ceros) de una función  f(x) o, lo que es lo mismo, buscar las soluciones reales de la ecuación  f(x)=0. En multitud de ocasiones este problema no puede resolversede forma exacta, de modo que se recurre a diversas técnicas de aproximación.
En esta práctica aprenderemos algunos comandos y repasaremos otros:
         Solve[ ]               		resuelve analíticamente la mayoría de las ecuaciones,
         NSolve[ ]               		resuelve numéricamente la mayoría de las ecuaciones,
         FindRoot[ ]		       	resuelve ecuaciones por el método de "Newton-Raphson"

Resolución simbólica con el comando Solve

Para resolver una ecuación, o un sistema de ecuaciones, de forma simbólica podemos usar la orden
			 Solve[ecuación(es), incógnita(s)] 
que lo resuelve incluso si hay alguna dependencia paramétrica en alguna ecuación. La salida será una Lista de asignaciones con las soluciones (complejas). Veamos cómo funciona con algunos ejemplos:

Solve[x^3 - 4  x^2 + 7  x - 6 == 0, x] (*una ecuación y una incógnita x *)
Solve[x^2 == 9, 
      x]

Solve[Sin[x] Cos[x] == 0, x] (*una ecuación con ∞ soluciones *)

Solve[a x^2 + b x + c == 0, x]  (*una ecuación,  una incógnita x,  
          y 3 parámetros :  a,  b y c *)

Solve[{x*y == 1, x + y == 4}, {x, y}]  (*un sistema 2 x 2 *)

Solve[{x - 2  a y == 1, y - 2  x == 9}, {x, y}]  (*un sistema 2 x 2 con un parámetro a *)

Solve[{x - 2  a y == 1, y - 2  x == 9}, {y, a}]  (* obsérvese la diferencia *)

Pero NO todas las ecuaciones se pueden resolver con este comando:

Solve[x^5 - x + 1 == 0, x]

Solve[E^x + x == 0, x]

Para estos casos será mejor trabajar en numérico. Podemos hacerlo poniendo un punto decimal en alguna de nuestras ecuaciones...

Solve[x^5 - x + 1.  == 0, x]
Solve[E^x + x == 0. , x]

... o usando los comandos que siguen.

Resolución directa (numérica) con el comando NSolve

El comando NSolve[ecuación(es), incógnita(s)] funciona igual que el anterior pero resuelve numéricamente la ecuación (o el sistema).

NSolve[x^5 - x + 1 == 0, x]

Veamos cómo usarlo para buscar los ceros de las funciones siguientes y veamos que tampoco es infalible.

	f(x) = 
        (x^5) - 2  (x^3) + sen(x) - (e^(-4 x)), 	y	g(x) = 3  (x^6) - (x^3) + (x^2) - 2.
	
Primero dibujamos las funciones para "ver" aproximadamente sus ceros:

f[x_] :=  
        x^5  -  2  x^3  +  Sin[x]  -  E^(-4 x);
g[x_] :=  3 x^6  -  x^3  +  x^2  - 2;
Plot[f[x], {x, 0, 2}];
Plot[g[x], {x, -1, 1}];

Ahora intentamos buscar sus raíces usando NSolve.

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

Observamos entonces que  ¡El comando NSolve tampoco siempre proporciona la información deseada!; aunque ha encontrado con éxito todas las raices de g (seis en total incluyendo complejas puesto que g(x) es un polinomio de grado 6) no puede sin embargo hallar los ceros de la función f(x) que es "un poco más complicada".
Veamos otra forma de resolver este problema.

Resolución con el comando FindRoot

El comando FindRoot (Encontrar Raíces) usa un algoritmo numérico (llamado método de Newton-Raphson) para localizar sólo una raíz real. Este comando requiere de un valor inicial que esté "próximo" a la raíz buscada. Para ello podemos valernos de la representación gráfica de la función correspondiente para "intuir" ese valor inicial. 
La sintaxis del comando es:
		FindRoot[función==0,{incógnita, aproximación de la raíz}].

FindRoot[f[x] == 0, {x,  .3}]

FindRoot[f[x] == 0, {x,  .8}]

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

FindRoot[g[x] == 0, {x, - .8}]

FindRoot[g[x] == 0, {x,  .9}]

Ejercicios

1. Aproxima al menos dos soluciones  reales distintas de la ecuación: 
													
												(x^3) + 3  (x^2)  - 2  x  - 1=0  
	
mediante  los comandos NSolve, FindRoot .

2. Averigua dónde se cortan las funciones:
			(x^2) - 2  x  + 
                  1      y           (sen^2) (x)
	
representándolas previamente.

3. Realiza los ejercicios II 14 y II 15 de la relación de ejercicios.