MÉTODOS DE RESOLUCIÓN DE UNA ECUACIÓN NO LINEAL.

Método de la bisección

Ejemplo . 
Obtener, mediante el método de la bisección , una solución aproximada de la ecuación :
(Sqrt[(x^2)+1]) = tan(x), 0 < x < π/2 
En cada iteración se calcula también la longitud del intervalo. El proceso finalizará cuando la longitud del intervalo sea menor que 0.001 o el valor de la función en el resultado de la última iteración sea menor que 0.001.

Solución:
 En primer lugar realizamos la representación gráfica para obtener un intervalo [a,b] en el que la función cambie de signo

f[x_]=-(Sqrt[(x^2)+1])+Tan[x];

Plot[f[x],{x,0,π/2},PlotRange->{-1,1}]

Tomamos el intervalo [0.8,1]

a=0.8;b=1;c=(a+b)/2;lon=Abs[b-a];

While[lon>0.001∧Abs[ f[c]]>.001,If[f[c]*f[a]<0,b=c,a=c];c=(a+b)/2;lon=Abs[b-a];Print[c,"  ",lon,"  ",f[c]]]

Iteración de punto fijo

Ejemplo
La función : y = (x^2) - 3x + (e^x) - 2 tiene dos raíces, una positiva y la otra negativa. Obtener la más pequeña, con un error menor que 0.00001, mediante la iteración de punto fijo, eligiendo una función de iteración g(x) que verifique las condiciones del teorema de punto fijo.

Solución :
En primer lugar representamos gráficamente la función para obtener el intervalo de trabajo y la aproximación inicial.

f[x_]= (x^2)-3 x+Exp[x]-2;

Plot[f[x],{x,-1,3}]

Interesa que |g'(x)| < 1. Una forma de obtener g(x) es la siguiente:
f(x) = 0 ⟶ - α f(x) = 0 ⟶ x-α f(x) = x ⟶ g(x) = x - α f(x) ⟶ 
g'(x) = 1-αf'(x)
|g'(x)| < 1 ⟶ 0 < αf'(x) < 2.

En este caso f'(x) = 2x-3+(e^x). Representando f'[x] en el intervalo [-1,0] se ve que está comprendida entre -4.5 y -2, luego bastará con α=0.2.

Plot[2 x+Exp[x]-3,{x,-1,0}]

Plot[-.3*(2 x+Exp[x]-3),{x,-1,0}]

Probamos  con g(x) = x+ 0.2*f(x) ,  y comprobamos las condiciones del teorema.

g[x_]=x+0.3*f[x];Plot[g[x],{x,-1,0},PlotRange->{-1,0}]

Se comprueba que ∀ x ∈ [-1,0] , g(x) (también)  ∀ x ∈ [-1,0]. A continuación representamos g'(x) en valor absoluto en dicho intervalo:

Plot[Abs[g'[x]],{x,-1,0},PlotRange->{0,1}]

Una vez comprobadas las dos condiciones del teorema construimos la sucesión de aproximaciones. Podemos partir de cualquier valor perteneciente al intervalo [0,1], por ejemplo, (Subscript[x, 0])= -0.5 y utilizar el comando For y el comando SetPrecision con una precision de 10 dígitos.

For[k=1;(Subscript[x, 0])=-.5;error=1,error>.00001,k++,(Subscript[x, k])=SetPrecision[g[(Subscript[x, k-1])],10];error=Abs[(Subscript[x, k])-(Subscript[x, k-1])];Print["En la iter. ",k,"  el valor aprox es: ",(Subscript[x, k])]]

Método de Newton-Raphson

Ejemplo
Hallar mediante el método de Newton y con un error menor que (10^(-4)) las raices positivas de la ec.:
0.5 (e^(x/3))- sen(x) = 0.

Solución 
En primer lugar representamos gráficamente la función para determinar una buena aproximación inicial.

f[x_]=0.5*Exp[x/3]-Sin[x];Plot[f[x],{x,0,4}]

A la vista de la gráfica, dos buenas aproximaciones son : 0.6 y 2. Utilizamos esta vez el comando While para realizar las iteraciones del método de Newton-Raphson. Se utiliza como condición que la diferencia en valor absoluto entre las dos últimas iteraciones sea menor que eps y que el nº de iteraciones sea inferior a nmax.

xv=0.6;error=1;eps=(10^(-15));nmax=50;n=1;

While[error>eps&&n<nmax,xn=SetPrecision[xv-f[xv]/f'[xv],15];error=Abs[xn-xv];Print["En la iter. ",n,"  la sol.aprox.es  ",xn];xv=xn;n++]

Los comandos Solve y FindRoot

Una expresión como x^2 + 2 x - 7 == 0 representa en Mathematica una ecuación.Podemos utilizar el comando Solve para obtener los valores de x que verifican la ecuación:

Solve[x^2 + 2x - 7 == 0, x]

Si se quiere el valor aproximado :

NSolve[x^2 + 2x - 7 == 0, x]

El resultado es una lista de reglas en las que se asigna a x los valores de las raices. Para extraer de la solución el resultado :

sol=NSolve[x^2 + 2x - 7 == 0, x];a=x/.sol[[1]]

El comando Solve siempre intenta dar como resultado fórmulas explícitas para la solución de una ecuación. Sin embargo, si la ecuación es un poco compleja esto resultará imposible. Para ecuaciones algebráicas de grado menor o igual que 4 Mathematica proporciona el reusltado exacto, pero puede que esto sea imposible para grados mayores. 
Mathematica también puede resolver ecuaciones con funciones trascendentes . En muchos de estos casos da un mensaje indicando que en el resultado no están todas las soluciones,

Solve[ Sin[x] == 1.5 , x ]

Se puede obtener una solución numérica de la ecuación mediante el comando FindRoot. Este comando implementa una versión del método de Newton-Raphson y necesita una aproximación inicial. En la práctica esta aproximación se obtiene a partir de la representación gráfica.

FindRoot[ Cos[x] == x, {x, 1} ]

Resolución de sistemas no lineales. El método de Newton. El comando FindRoot.

Sea el sistema {({{f1(x,y) = 0}, {f2(x,y) = 0}}) , y sea J(x,y) la matriz Jacobiana de f1 y f2 respecto a x e y. Sea (Subscript[P, k]) ((Subscript[x, k]), (Subscript[y, k])) la aproximación de la solución correspondiente a la etapa k. Los pasos correspondientes a la siguiente etapa son:
1º.- Evaluar F((Subscript[P, k])) = (({{f1((Subscript[P, k]))}, {f2((Subscript[P, k]))}})).
2º.- Calcular la matriz jacobiana en (Subscript[P, k]), J((Subscript[P, k])).
3º.- Resolver el sistema lineal :  J((Subscript[P, k])).Δp = - F( J((Subscript[P, k])).)
4º.- Calcular la siguiente aproximación : (Subscript[P, k+1]) = (Subscript[P, k]) + Δp .

Ejemplo: 
Sea el sistema : 
	{({{(x^2) - y = 0.2}, {(y^2) - x = 0.3}}) , 
Representar gráficamente para obtener la aproximación inicial correspondiente a la raiz del primer cuadrante, y calcular 3 iteraciones del método de Newton .

f[x_,y_]=x^2-y-.2;g[x_,y_]=y^2-x-.3;

graf1=ImplicitPlot[f[x,y]==0,{x,-2,2}]

graf2=ImplicitPlot[g[x,y]==0,{x,-2,2}]

Show[graf1,graf2]

jacob[x_,y_]={{(∂_x) f[x,y],(∂_y) f[x,y]},{(∂_x) g[x,y],(∂_y) g[x,y]}};indep[x_,y_]={-f[x,y],-g[x,y]};

Print[MatrixForm[jacob[x,y]],"    ", MatrixForm[indep[x,y]]]

x0=1.2;y0=1.2;itermax=3;

Do[Print["Jacob= ",MatrixForm[jacob[x0,y0]],"  ","Term.In= ",MatrixForm[indep[x0,y0]]];sol=LinearSolve[jacob[x0,y0],indep[x0,y0]];Print["Delta= ",MatrixForm[sol]];x0=x0+sol[[1]];y0=y0+sol[[2]];Print["K= ",k," x= ",x0,"  y= ",y0],{k,itermax}]

El comando FindRoot

Como en el caso de una sola ec. no lineal, el comando FindRoot nos permite obtener una solución numérica (aproximada) de un sistema de ecuaciones no lineales partiendo de una aproximación inicial. Una de sus ociones nos permite especificar el nº máximo de iteraciones a realizar. Si se alcanza el nº máximo de iteraciones sin haber obtenido la solución el comando FindRoot nos devuelve la aproximación calculada en la última etapa que se puede utilizar como aproximación inicial de un nuevo comando FindRoot.
Es conveniente realizar una representación gráfica, cuando sea posible, para obtener una buena aproximación inicial.
El comando FindRoot puede resolver ec. no lineales en variable compleja. Para ello solo es preciso incluir la unidad imaginaria I en la aproximación inicial. Por ejemplo:

FindRoot[Sin[x] == 2, {x, 1}]

FindRoot[Sin[x] == 2, {x, I}]

Para resolver el sistema anterior utilizando el comando FindRoot:

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

Ejercicios

1º.- Comprobar gráficamente que la función f(x) = x- 0.2 sen(x) - 0,5 tiene una única raiz real en el intervalo [0.5 , 1]. Aplicar los métodos de la bisección, punto fijo y Newton-Raphson, contando en cada caso el número de iteraciones que se han realizado , para determinar la raiz con una precisión de (10^(-4)). Establecer un nº máximo de iteraciones a realizar igual a 50.

a) Bisección

b) Punto fijo

c) Newton-Raphson

2º.- Representar en una misma gráfica las funciones f(x) = 2 cos(x) y g(x) = (e^x) para obtener  aproximaciones  iniciales de las raices de 2cos(x) - (e^x)= 0. ¿Cuántas raíces tiene?. ¿Cuántas son positivas?. Determinar las raices positivas con una precisión de (10^(-8)) utilizando el método de Newton-Raphson .

3º.- Comprobar de forma gráfica que la ecuación .
		4 sen(x) = 1+x
tiene tres raices reales : (Subscript[r, 1])<(Subscript[r, 2])<(Subscript[r, 3]) . A continuación determinar con una precisión de (10^(-6)),
	a) (Subscript[r, 1]) utilizando el mdo de la secante.
	b) (Subscript[r, 2])       "        "   "     "   " bisección.
	c) (Subscript[r, 3])       "        "   "     "   Newton.

4º.- Encontrar una raiz aproximada de la ecuación :
		(x^3)-x-1 = 0
en el intervalo [1 , 2] con una precisión de (10^(-10)) primero por el método de Newton y luego por el de la secante. Contar el nº de iteraciones que se han realizado en ambos casos para comprobar cuál de los dos métodos tiene una convergencia más rápida.

5 º.- Sea f(x) = 8x-cos(x)-2(x^2), representar gráficamente f (x) en el intervalo [0, π/6]. Justificar que la expresión :
	g((Subscript[x, n])) = ((Subscript[cosx, n])/8)+(((Subscript[x, n])^2)/4), 
permitirá obtener una sucesión cuyo límite sea la raiz de la ecuación en el intervalo [0, π/6]. Hallar dicha raiz con una precisión de (10^(-4)).

6º.- Determinar la raiz cuadrada negativa de 0.5 con cuatro decimales y una precisión de (10^(-3))considerando la función f(x) = (x^2)-0.5 y resolviendo la ec. x = (x^2)+x-0.5 mediante el método de las aproximaciones sucesivas comenzando con (Subscript[x, 0])= -0.6. ¿Puede determinarse del mismo modo la raiz positiva?

7º.- Hacer una representación gráfica de las funciones f(x) = 2cosx y g(x) = (e^x) para obtener estimaciones iniciales de las raices de la ec. 2cosx - (e^x)=0. ¿Cuántas raices tiene ? ¿Cuántas son positivas?. Determinar las raices positivas con una precisión |f(r)| < (10^(-3)) utilizando el método de la secante y el de Newton-Raphson.

8º.- Resolver con un error relativo inferior al 0.05% la ec. f(x) = (e^(-x))-x = 0, mediante el método de la secante tomando como valores iniciales (Subscript[x, -1])=0, y (Subscript[x, 0])= 1, y sabiendo que la solución exacta es 0.56714329.  Trabajar con redondeo a seis cifras decimales.

9º.- Resolver el siguiente sistema no lineal primero utilizando el método de Newton y a continuación con el comando FindRoot:
3 x - cos(y.z) - 1/2 = 0
(x^2) - 81(((y+0.2))^2) + sen(z) + 1.06 = 0
(e^(-xy)) + 20 z + ((10π-3)/3) = 0
Tomar como aproximación inicial (x1^((0)))= 0.1, (x2^((0)))= 0.1 y (x3^((0)))= - 0.1

f1[x_,y_,z_]=3 x-Cos[y*z]-.5;f2[x_,y_,z_]=x^2-81 (y+.2)^2+Sin[z]+1.06;f3[x_,y_,z_]=Exp[-x*y]+20 z+(10 Pi-3)/3;