Está en la página 1de 9

■ ESCUELA POLITÉCNICA SUPERIOR DE JAÉN.

DEPARTAMENTO DE
MATEMÁTICAS.
MATEMÁTICAS II. CURSO 2021_22.
Prof. Manuel Gómez (mnavarre@ujaen.es)
Semana 14/02/2022
▲ RESOLUCIÓN NUMÉRICA DE ECUACIONES NO LINEALES (I).
ÍNDICE
1. Planteamiento general del problema de resolución numérica de ecuaciones no lineales.
Existencia y unicidad de solución.
2. Métodos cerrados de resolución numérica de ecuaciones no lineales.
2.1. Método de bisección.
2.2. Método de regula falsi.

1. Planteamiento general del problema. Existencia y unicidad de solución.


El problema que se plantea es de resolver la ecuación f(x)=0, donde f(x) no es una función lineal.
También puede presentarse como el de encontrar dónde dos funciones se igualan, es decir, dónde f(x)=g(x). En
este caso se reformula el problema definiendo la función F(x)=f(x)-g(x), y por lo tanto el objetivo será encontrar
las soluciones de F(x)=0.
Un paso importante previo a la resolución del problema es la de encontrar/comprobar un intervalo
en el que podemos estar seguros de que la ecuación tiene solución y además es única. El teorema de Bolzano y
un corolario del teorema de Rolle nos van a ayudar en este paso.
Teorema de Bolzano
Dada una función f(x) continua en un intervalo [x1 ,x2 ]. Si la función toma valores de distinto signo en los
extremos del intervalo, es decir, f(x1 )· f(x2 ) < 0 entonces existe un valor r ∈ (x1 ,x2 ) tal que f(r)=0.
En definitiva, este teorema nos ayudará a localizar/comprobar si la función tiene un cero en un
determinado intervalo (lo que equivale a que la ecuación tiene una solución)
Teorema de Rolle
Si la función f(x) del teorema de Bolzano es además derivable en el intervalo (x1 ,x2 ) y f’(x)≠0 en
cualquier x∈(x1 ,x2 ), entonces el valor r del teorema de Bolzano es único en este intervalo.
Con este corolario podremos comprobar la unicidad de la solución.
Ejemplo 1.
Comprueba que la ecuación x·lnx=2 tiene una única solución en el intervalo [1.5,3]
En este caso nos dan el intervalo y nos tenemos que limitar a comprobar los teoremas. Si disponemos
de Mathematica podemos representar gráficamente tanto la función como la derivada para analizar el
problema. En todo caso la función es continua en ese intervalo (el logaritmo es continuo para valores mayores
que 0).

Printed by Wolfram Mathematica Student Edition


2 MATII 21_22 Semana 14022022corregido .nb

In[1]:= Clear["Global`*"]
borra
f[x_] := x * Log[x] - 2
logaritmo
f[1.5] * f[3]
Solve[f '[x] ⩵ 0, x] // N
resuelve valor numérico
Plot[f[x], {x, 0.5, 3.5}]
representación gráfica
Plot[f '[x], {x, 0.5, 3.5}]
representación gráfica

Vamos a explicar cada una de las líneas:


- Con el comando Clear, limpiamos todas las asignaciones a valores anteriores. Es conveniente
empezar cada ejercicio con él, para que las expresiones que utilicemos después no tengan valores asigna-
dos.
- En la siguiente línea hemos definido la función siguiendo las reglas de Mathematica. Al poner los
dos puntos delante del igual (:=), evitamos que nos muestre en pantalla la expresión de la función.
- En la tercera hemos comprobado el signo del producto de la función en los extremos del inter-
valo, que resulta ser negativo, por lo tanto hasta ahora la función cumple el teorema de Bolzano y tiene un
cero en el intervalo (la ecuación tiene una solución).
- Resolvemos la ecuación f’(x)=0 para saber dónde la primera derivada se anula. Lo hace en un
punto que no es del intervalo, por lo tanto se cumple el corolario del teorema de Rolle y la solución es
única.
- Las siguientes línea representan gráficamente tanto la función como su derivada. En la de la
función podemos ver que efectivamente en el intervalo dado hay una solución y en la de la derivada que
no se anula.

2. Métodos cerrados de resolución numérica de ecuaciones no lineales.


Las características de estos métodos son:
- Se parte de dos valores iniciales x0 y x1 de tal forma que el intervalo [x0 ,x1 ] contiene una única
solución de la ecuación (se tantean o se comprueban con los teoremas vistos en el apartado anterior).
- Cada iteración reduce el intervalo que contiene a la raíz.
- Los métodos cerrados son convergentes, aunque la convergencia puede ser lenta.
Vamos a estudiar dos métodos: Métodos de BISECCIÓN y de REGULA FALSI.
2.1. Método de Bisección.
Partimos de dos valores iniciales x0 y x1 de tal forma que f(x0 ) ·f(x1 ) < 0. Calculamos el punto medio
x0 + x1
de x0 y x1 , es decir, xm = 2
, de esta forma tenemos la primera aproximación de la solución. Evaluamos
los productos f(x0 ) ·f(xm ) y f(xm ) ·f(x1 ) y aquél que sea negativo, nos determinará cuál será el intervalo en el
que tendremos que seguir buscando, redefiniendo los valores de x0 y x1 . Si observamos el gráfico sigu-
iente:

Printed by Wolfram Mathematica Student Edition


MATII 21_22 Semana 14022022corregido .nb 3

La solución se encuentra en el intervalo [xm ,x1 ] ya que se cumple que f(xm )·f(x1 )<0. Redefinimos
ahora los valores x0 y x1 de tal forma que x0 = xm y x1 = x1 y calculamos nuevamente xm (segunda
iteración). Gráficamente:

La alternancia de signo es ahora en el intervalo [x0 ,xm ] por lo que los valores del intervalo para la
siguiente iteración serán
x0 =x0 y x1 = xm . Así seguiremos iterando hasta que se cumpla el criterio de parada.
Ejemplo 2.
Calcula 3 iteraciones del método de bisección para encontrar la solución de la ecuación x+senx=1
In[7]:= Clear["Global`*"]
borra
f[x_] = x + Sin[x] - 1
seno
Plot[f[x], {x, - 3, 3}]
representación gráfica
Plot[f '[x], {x, - 3, 3}]
representación gráfica

La función tiene un cero en el intervalo [0,1] y su derivada en este intervalo es positiva, por lo que
tiene solución única en este intervalo. Definimos los valores iniciales y calculamos la primera
iteración:

Printed by Wolfram Mathematica Student Edition


4 MATII 21_22 Semana 14022022corregido .nb

In[11]:= x0 = 0
x1 = 1
x0 + x1
xm = // N
2 valor numérico

f[x0] * f[xm] // N
valor numérico
f[xm] * f[x1] // N
valor numérico

La alternancia de signo se produce entre los valores xm y x1 por lo tanto


In[16]:= x0 = xm
x1 = x1
x0 + x1
xm = // N
2 valor numérico

f[x0] * f[xm] // N
valor numérico
f[xm] * f[x1] // N
valor numérico

En esta segunda iteración, la solución es 0.75 y el intervalo a considerar para la siguiente iteración
será el de extremos x0 y xm
In[21]:= x0 = x0
x1 = xm
x0 + x1
xm = // N
2 valor numérico

f[x0] * f[xm] // N
valor numérico
f[xm] * f[x1] // N
valor numérico

En esta iteración, la solución es 0.625, como el criterio de parada se ha alcanzado (tres iteraciones),
daríamos esta aproximación como solución.

Ejemplo 3.
Utilizando el método de bisección, calcula la solución de la ecuación x+sen x = 1 con un error menor que 10 -3

Printed by Wolfram Mathematica Student Edition


MATII 21_22 Semana 14022022corregido .nb 5

In[26]:= Clear["Global`*"]
borra
f[x_] = x + Sin[x] - 1
seno
x0 = 0
x1 = 1
x0 + x1
xm1 = // N
2 valor numérico

f[x0] * f[xm1] // N
valor numérico
f[xm1] * f[x1] // N
valor numérico
epsilon = 10 ^ - 3

In[34]:= x0 = xm1
x1 = 1
x0 + x1
xm2 = // N
2 valor numérico

f[x0] * f[xm2] // N
valor numérico
f[xm2] * f[x1] // N
valor numérico
If [Abs[xm2 - xm1] < epsilon, Print["La solución es ", xm2], Print["Sigue iterando."]]
si valor absoluto escribe escribe

In[40]:= x0 = x0
x1 = xm2
x0 + x1
xm3 = // N
2 valor numérico

f[x0] * f[xm3] // N
valor numérico
f[xm3] * f[x1] // N
valor numérico
If [Abs[xm3 - xm2] < epsilon, Print["La solución es ", xm3], Print["Sigue iterando."]]
si valor absoluto escribe escribe

In[46]:= x0 = x0
x1 = xm3
x0 + x1
xm4 = // N
2 valor numérico

f[x0] * f[xm4] // N
valor numérico
f[xm4] * f[x1] // N
valor numérico
If [Abs[xm4 - xm3] < epsilon, Print["La solución es ", xm4], Print["Sigue iterando."]]
si valor absoluto escribe escribe

Printed by Wolfram Mathematica Student Edition


6 MATII 21_22 Semana 14022022corregido .nb

In[52]:= x0 = x0
x1 = xm4
x0 + x1
xm5 = // N
2 valor numérico

f[x0] * f[xm5] // N
valor numérico
f[xm5] * f[x1] // N
valor numérico
If [Abs[xm5 - xm4] < epsilon, Print["La solución es ", xm5], Print["Sigue iterando."]]
si valor absoluto escribe escribe

In[58]:= x0 = x0
x1 = xm5
x0 + x1
xm6 = // N
2 valor numérico

f[x0] * f[xm6] // N
valor numérico
f[xm6] * f[x1] // N
valor numérico
If [Abs[xm6 - xm5] < epsilon, Print["La solución es ", xm6], Print["Sigue iterando."]]
si valor absoluto escribe escribe

In[64]:= x0 = x0
x1 = xm6
x0 + x1
xm7 = // N
2 valor numérico

f[x0] * f[xm7] // N
valor numérico
f[xm7] * f[x1] // N
valor numérico
If [Abs[xm7 - xm6] < epsilon, Print["La solución es ", xm7], Print["Sigue iterando."]]
si valor absoluto escribe escribe

In[70]:= x0 = xm7
x1 = x1
x0 + x1
xm8 = // N
2 valor numérico

f[x0] * f[xm8] // N
valor numérico
f[xm8] * f[x1] // N
valor numérico
If [Abs[xm8 - xm7] < epsilon, Print["La solución es ", xm8], Print["Sigue iterando."]]
si valor absoluto escribe escribe

Printed by Wolfram Mathematica Student Edition


MATII 21_22 Semana 14022022corregido .nb 7

In[76]:= x0 = x0
x1 = xm8
x0 + x1
xm9 = // N
2 valor numérico

f[x0] * f[xm9] // N
valor numérico
f[xm9] * f[x1] // N
valor numérico
If [Abs[xm9 - xm8] < epsilon, Print["La solución es ", xm9], Print["Sigue iterando."]]
si valor absoluto escribe escribe

In[82]:= x0 = xm9
x1 = x1
x0 + x1
xm10 = // N
2 valor numérico

f[x0] * f[xm10] // N
valor numérico
f[xm10] * f[x1] // N
valor numérico
If Abs[xm10 - xm9] < epsilon,
si valor absoluto
Print"La solución, con un error menor que 10-3 , es ", xm10,
escribe
Print["Sigue iterando."]
escribe

2.2. Método de Regula Falsi.


Igual que en el método de Bisección, en el método REGULA-FALSI partimos de dos valores iniciales
x0 y x1 de tal forma que f(x0 ) · f(x1 ) < 0. Una vez comprobado que en el intervalo [x0 , x1 ] hay una única
solución, procederemos de la siguiente forma:
1º Calculamos el punto de corte de la recta que une los puntos (x0 ,f( x0 )) y (x1 ,f( x1 )) con el
eje de abscisas, xf .
2º Si es la solución, hemos terminado. Si no es la solución, comprobamos en qué inter-
valo se cumple el teorema de Bolzano [x0 , xf ] o [xf , x1 ]. Asignamos los nuevos valores a
los puntos x0 y x1 y volvemos al punto anterior. Repetimos este proceso tantas veces como necesite-
mos para cumplir con el criterio de parada.
Gráficamente:

Printed by Wolfram Mathematica Student Edition


8 MATII 21_22 Semana 14022022corregido .nb

Ejemplo 4.
Utilizando el método regula-falsi, calcula la solución de la ecuación x+sen x = 1 con un error menor que 10 -3
In[88]:= Clear["Global`*"]
borra
f[x_] := x + Sin[x] - 1
seno
x0 = 0
x1 = 1
x1 - x0 * f[x0]
xf1 = x0 - // N
f[x1] - f[x0] valor numérico

f[x0] * f[xf1] // N
valor numérico
f[xf1] * f[x1] // N
valor numérico
epsilon = 10 ^ - 3

In[96]:= x0 = x0
x1 = xf1
x1 - x0 * f[x0]
xf2 = x0 - // N
f[x1] - f[x0] valor numérico

f[x0] * f[xf2] // N
valor numérico
f[xf2] * f[x1] // N
valor numérico
If [Abs[xf2 - xf1] < epsilon, Print["La solución es ", xf2], Print["Sigue iterando."]]
si valor absoluto escribe escribe

Printed by Wolfram Mathematica Student Edition


MATII 21_22 Semana 14022022corregido .nb 9

In[108]:= x0 = x0
x1 = xf2
x1 - x0 * f[x0]
xf3 = x0 - // N
f[x1] - f[x0] valor numérico

f[x0] * f[xf3] // N
valor numérico
f[xf3] * f[x1] // N
valor numérico
If [Abs[xf3 - xf2] < epsilon, Print["La solución es ", xf3], Print["Sigue iterando."]]
si valor absoluto escribe escribe

In[114]:= x0 = x0
x1 = xf3
x1 - x0 * f[x0]
xf4 = x0 - // N
f[x1] - f[x0] valor numérico

f[x0] * f[xf4] // N
valor numérico
f[xf4] * f[x1] // N
valor numérico
If [Abs[xf4 - xf3] < epsilon, Print["La solución es ", xf3], Print["Sigue iterando."]]
si valor absoluto escribe escribe

Observa que hemos necesitado cuatro iteraciones en este método para conseguir
la tolerancia pedida, mientras que en el de bisección fueron 10 iteraciones.

Printed by Wolfram Mathematica Student Edition

También podría gustarte