MN4 - Ecuaciones (Resuelta)

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 35

Lección MN4.

Ecuaciones no lineales

Álgebra Lineal y Métodos Numéricos


Dpto. Matemática Aplicada y Estadística

Grado en Ingeniería en Sistemas de Telecomunicación


Grado en Ingeniería Telemática Versión: 2022.07.22

Lección MN4. Ecuaciones no lineales


en una variable
1. Una idea gráfica para resolver ecuaciones
Imaginemos que nos interesa calcular la solución de la ecuación

x = cos x (1)

Una primera idea sería despejar x a la derecha de la igualdad tomando la función trigono-
métrica inversa arco coseno

arc cos x = arc cos(cos x) =⇒ arc cos x = x (2)

Nota: No se debe confundir la función inversa para la composición arc cos x (arco coseno)
con la función inversa para el producto sec x (secante)

Ahora nos aparece la trigonométrica inversa a la izquierda. Si aplicamos la función trigono-


métrica coseno para eliminarla

cos(arc cos x) = cos x =⇒ x = cos x (3)

con lo que volvemos a la ecuación original (1)

Está claro que así no avanzamos. Podemos reescribir la ecuación (1) pasando todos los
términos al lado izquierdo
x − cos x = 0 (4)
Eso nos permite la definición de la función

f (x) = x − cos x (5)

y, por lo tanto, resolver la ecuación (1) es tanto como calcular un cero de la función (5). Es
decir, que buscamos la intersección de la gráfica de la función f (x) con el eje X
Material docente realizado por David Javier López Medina, e-mail: david.lopez@upct.es. Tanto esta obra
como los scripts a los que hace referencia están liberados bajo licencia Creative Commons Reconocimiento-
NoComercial-CompartirIgual 4.0 España

1
Lección MN4. Ecuaciones no lineales

En la Figura 1 se puede ver que la f (x) corta al eje X en un punto c. Ése es el punto que
estamos buscando. También podemos apreciar que la función f (x) tiene signo distinto en
ambos extremos del intervalo, puesto que f (0) < 0 y f (1) > 0, y que la gráfica de la función
no presenta “saltos”, pudiéndose dibujar sin levantar el lápiz del papel

0.6
0.4
0.2
0
−0.2
−0.4
−0.6
−0.8
−1
0 0.2 0.4 0.6 0.8 1

Figura 1: f (x) = x − cos x para x ∈ [0, 1]

Como el corte de la función con el eje X parece producirse entre 0.6 y 0.8 realizamos un
“zoom” de la gráfica en este intervalo

0.15
0.1
0.05
0
−0.05
−0.1
−0.15
−0.2
−0.25
0.6 0.65 0.7 0.75 0.8

Figura 2: f (x) = x − cos x para x ∈ [0.6, 0.8]

2
Lección MN4. Ecuaciones no lineales

En la Figura 2 la situación se repite: sigue habiendo un corte con el eje X, a la izquierda


f (0.6) < 0 y a la derecha f (0.8) > 0 y, por supuesto, no hay ningún tipo de “salto” en la
función

Realizamos un último zoom al intervalo [0.7, 0.75]

0.02
0.01
0
−0.01
−0.02
−0.03
−0.04
−0.05
−0.06
−0.07
0.7 0.71 0.72 0.73 0.74 0.75

Figura 3: f (x) = x − cos x para x ∈ [0.7, 0.75]

Una vez más en la Figura 3 hay una repetición de las condiciones originales: cambio de signo
de la función en los extremos del intervalo, gráfica sin “saltos” y corte con el eje X. La
ventaja de esta última gráfica es que con ella llegamos a intuir que la solución de la ecuación
(1) es aproximadamente c ≃ 0.74

2∗ . El teorema de Bolzano
Uno de los teoremas más sencillos de interpretar del Cálculo Infinitesimal es el teorema
de Bolzano. Existen una demostración que puede completarse en apenas un párrafo usando
que en la recta real los intervalos cerrados y acotados son los únicos conjuntos conexos y
compactos. Sin embargo nos interesa trabajar con una basada en la bipartición de intervalos

Teorema
Sea f : [a, b] −→ R una función continua tal que f (a) < 0 y f (b) > 0. Entonces ∃c ∈ (a, b)
con f (c) = 0

Demostración: Llamemos a0 = a, b0 = b y
a0 + b 0
x1 = (6)
2
3
Lección MN4. Ecuaciones no lineales

Si f (x1 ) = 0, tomando el punto c = x1 ∈ (a, b) ya tendríamos la propiedad f (c) = 0. En


caso contrario existen 2 posibilidades
Si f (x1 ) < 0 tomaremos a1 = x1 y b1 = b0

Si f (x1 ) > 0 tomaremos a1 = a0 y b1 = x1


Nótese que en cualquiera de las dos situaciones

a0 ≤ a1 ≤ b (7)

y
b0 ≥ b 1 ≥ a (8)
y además el punto medio cumple la acotación

a1 ≤ x 1 ≤ b 1 (9)

Hemos encontrado un subintervalo [a1 , b1 ] con

f (a1 ) < 0 (10)

y
f (b1 ) > 0 (11)
pero de longitud la mitad que el original
b−a
b 1 − a1 = (12)
2
La idea es repetir el proceso de forma iterativa, construyendo los puntos medios
an−1 + bn−1
xn = (13)
2
Si tenemos la fortuna de que f (xn ) = 0 habremos encontrado el punto buscado c = xn , y en
caso contrario siempre realizaríamos la selección
Si f (xn ) < 0 tomaremos an = xn y bn = bn−1

Si f (xn ) > 0 tomaremos an = an−1 y bn = xn


Nótese que se verifican los análogos de todas las ecuaciones (7)–(11), es decir

an−1 ≤ an ≤ b (14)

bn−1 ≥ bn ≥ a (15)
an ≤ x n ≤ b n (16)
f (an ) < 0 (17)
f (bn ) > 0 (18)

4
Lección MN4. Ecuaciones no lineales

mientras que la longitud del nuevo subintervalo es


bn−1 − an−1 bn−2 − an−2 b 1 − a1 b−a
b n − an = = 2
= . . . = n−1 = n (19)
2 2 2 2
Si el proceso anterior se lleva “hasta el infinito” nos encontraremos con tres sucesiones {an },
{bn } y {xn }. Por (14) la sucesión de extremos izquierdos es creciente y está acotada su-
periormente, y por lo tanto es convergente. Otro tanto ocurre con la sucesión de extremos
derechos, que por (15) es decreciente y acotada inferiormente, y por lo tanto convergente.
Además, en virtud de la ecuación (19),
b−a
lı́m bn − n→∞ lı́m (bn − an ) = n→∞
lı́m an = n→∞ lı́m =0 (20)
n→∞ 2n
y por lo tanto
lı́m an = lı́m bn (21)
n→∞ n→∞

Entonces, en virtud de la acotación (16) y el criterio del emparedado, la sucesión {xn } ha se


ser igualmente convergente y

lı́m an = n→∞
n→∞
lı́m xn = n→∞
lı́m bn (22)

Llamemos
c = lı́m xn (23)
n→∞

que por la ecuación (22) también es el límite de las sucesiones {an } y {bn }. Para calcular
cuanto vale f (c) tenemos que hacer uso de la continuidad de f (x) y de la acotación (17)
   
f (c) = f lı́m xn = f lı́m an = lı́m f (an ) ≤ 0 (24)
n→∞ n→∞ n→∞

De forma análoga, por la continuidad de f (x) y la acotación (18)


   
f (c) = f lı́m xn = f
n→∞
lı́m f (bn ) ≥ 0
lı́m bn = n→∞
n→∞
(25)

No queda otro remedio que


f (c) = 0 (26)
lo que concluiría la demostración ■

Por comodidad en demostración se ha supuesto que f (a) < 0 y f (b) > 0. Si se tuviera que
f (a) > 0 y f (b) < 0 se aplicaría el teorema a la función

g(x) = −f (x) (27)

que se anularía en los mismos puntos que f (x), sería igualmente continua y cumpliría g(a) < 0
y g(b) > 0. Por lo tanto el enunciado es válido para funciones continuas que cambien de
signo, bien sea cambiando de negativo a positivo o bien de positivo a negativo. Esto se suele
representar como f (a) · f (b) < 0, y da lugar al conocido teorema de Bolzano

5
Lección MN4. Ecuaciones no lineales

Teorema de Bolzano
Sea f : [a, b] −→ R una función continua tal que f (a) · f (b) < 0. Entonces ∃c ∈ (a, b) con
f (c) = 0

Nótese que el teorema de Bolzano garantiza la existencia de algún cero de la función, pero no
la unicidad. Una función podría tener más de un valor que cumpliese f (c) = 0. Para analizar
la unicidad se debería hacer uso del crecimiento o decrecimiento de la función, para lo que
resulta útil la derivación

3. El método de la bisección
3.1. Construcción del método de la bisección
En la primera sección hemos visto un enfoque intuitivo y práctico del problema, basado
en hacer “zoom” en la gráfica para irnos aproximando a la solución c. Existen varios incon-
venientes: por un lado, las gráficas no son una herramienta muy precisa, ya que básicamente
son un conjunto de puntos unidos mediante segmentos. Además, en el caso de que la eva-
luación de la función f (x) tenga asociado un coste temporal o económico (por ejemplo, una
experimentación en un laboratorio) se estarían desperdiciando recursos calculando muchos
valores de f (x). Tampoco es desdeñable el inconveniente de que se requiere de la intervención
humana en cada paso para ir decidiendo los nuevos subintervalos a los que hacer “zoom”

Todos estos problemas los resuelve la demostración del teorema de Bolzano, que nos da un
enfoque riguroso no para calcular el punto c buscado, sino para aproximarlo de una forma
sistemática. El método de la bisección hace uso de esa demostración para calcular un cierto
número de valores intermedios xn

Ejemplo
Vamos a aplicar N = 4 iteraciones del método de la bisección para resolver la ecuación
(1). Lo primero que hacemos es reformular la ecuación como (4) y obtener la función asociada
(5). Nótese que esta función es trivialmente continua

Para aplicar el método de la bisección necesitamos, además de una función f (x) continua,
un intervalo en el que cambie de signo. Por ejemplo para
[a, b] = [0, 1]
se tiene que
f (0) = 0 − cos 0 = −1 < 0
y
f (1) = 1 − cos 1 = 1 − 0.5403 = 0.4597 > 0
Hemos comprobado por tanto la validez del intervalo inicial
[a0 , b0 ] = [0, 1]

6
Lección MN4. Ecuaciones no lineales

0.5 s

x2 = 0.75
s
a=0 0.25 x1 = 0.5 x3 = 0.625x4s = 0.6875 b=1
s

−0.5

s −1

Figura 4: N = 4 iteraciones del método de la bisección en [0, 1] para f (x) = x − cos x

La primera iteración es el punto medio


a0 + b 0 0+1
x1 = = = 0.5
2 2
y lo evaluamos
f (0.5) = 0.5 − cos 0.5 = 0.5 − 0.8776 = −0.3776 < 0
Comparamos los signos
f (0) < 0

f (0.5) < 0
f (1) > 0

Entre los subintervalos [0, 0.5] y [0.5, 1] de longitud 1/2 se elige el que mantiene los signos
opuestos en la función, que en este caso sería

a1 = 0.5
b1 = 1

7
Lección MN4. Ecuaciones no lineales

Se repite el proceso: la segunda iteración es el punto medio


a1 + b 1 0.5 + 1
x2 = = = 0.75
2 2
que se evalúa

f (0.75) = 0.75 − cos 0.75 = 0.75 − 0.7317 = 0.01831 > 0

y se comparan los signos


f (0.5) < 0
f (0.75) > 0

f (1) > 0
De nuestros subintervalos de longitud 1/4 candidatos [0.5, 0.75] y [0.75, 1] elegimos el primero
de ellos
a2 = 0.5
b2 = 0.75
La tercera iteración es el punto medio
a2 + b 2 0.5 + 0.75
x3 = = = 0.625
2 2
y la función en él vale

f (0.625) = 0.625 − cos 0.625 = 0.625 − 0.8110 = −0.1860 < 0

Tras la correspondiente comparación de signos

f (0.5) < 0

f (0.625) < 0
f (0.75) > 0

deducimos que el subintervalo de longitud 1/8 será [0.625, 0.75]

a3 = 0.625
b3 = 0.75

La última iteración construye el punto medio


a3 + b 3 0.625 + 0.75
x4 = = = 0.6875
2 2
con el valor de la función

f (0.6875) = 0.6875 − cos 0.6875 = 0.6875 − 0.7728 = −0.08533 < 0

8
Lección MN4. Ecuaciones no lineales

Comparando los signos


f (0.625) < 0

f (0.6875) < 0
f (0.75) > 0

Deducimos que el intervalo de longitud 1/16 es [0.6875, 0.75]

a4 = 0.6875
b4 = 0.75

Así pues, tras N = 4 iteraciones hemos obtenido la aproximación x4 = 0.6875 y hemos


podido encerrar la solución c ∈ (0.6875, 0.75)
Nota: Aunque la ecuación (23) es cierta, es posible que algún valor xn sea “peor” que otro
anterior, y que eso haga que puntualmente |f (xn )| crezca. Eso se puede apreciar por ejemplo
en x2 = 0.75, x3 = 0.625 y x4 = 0.6875:

|f (x3 )| = 0.1860 > 0.01831 = |f (x2 )| |f (x4 )| = 0.08533 > 0.01831 = |f (x2 )| ■

Se pruede programar el algoritmo de la bisección usando condicionales, que en OCTAVE tie-


nen la estructura if–elseif–else. Hemos realizado un programa que recibe un intervalo
[an−1 , bn−1 ] y devuelve el punto medio xn y el nuevo subintervalo [an , bn ]. Además incluye un
control por si f (an−1 ) y f (bn−1 ) tuvieran el mismo signo, lo que devolvería un mensaje de
error y detendría el programa

▲ biseccion: Función que aplica una iteración del método de la bisección

function [x,a,b]=biseccion(a,b)
x=(a+b)/2;
if (f(a)*f(x)<=0)
a=a; %Innecesario, solo solo por clarificar
b=x;
elseif (f(x)*f(b)<=0)
a=x;
b=b; %Innecesario, solo solo por clarificar
else
error(...no hay cambio de signo...);
endif
endfunction

La función f (x) de la ecuación (5) aparece en un script aparte, que deberíamos modificar si
quisiéramos cambiar de problema

▲ f: Función de la que se quiere calcular un cero

9
Lección MN4. Ecuaciones no lineales

function y=f(x)
y=x-cos(x);
endfunction

Para iterar un número fijo de veces N necesitamos realizar un bucle, lo que se realiza en
OCTAVE (y en casi cualquier lenguaje) con la sentencia for

▲ biseccionFijo: Función que aplica N iteraciones del método de la bisección en el intervalo


[a, b]

function biseccionFijo(I,N)
n=0; %Innecesario, por clarificar
a=I(1);
b=I(2);
for n=1:N
[x,a,b]=biseccion(a,b);
imprimeBiseccion(n,x,a,b);
endfor
endfunction

⋆ Ejercicio 1: Aplica en OCTAVE N = 4 veces el método de la bisección a (5) en el intervalo


[a, b] = [0, 1]
> > biseccionFijo([0,1],4)

Iteracion 1:
x(1)=0.5
f(0.5)=−0.377583 < 0
[a(1),b(1)]=[0.5,1]

Iteracion 2:
x(2)=0.75
f(0.75)=0.0183111 > 0
[a(2),b(2)]=[0.5,0.75]

Iteracion 3:
x(3)=0.625
f(0.625)=−0.185963 < 0
[a(3),b(3)]=[0.625,0.75]

Iteracion 4:
x(4)=0.6875
f(0.6875)=−0.0853349 < 0
[a(4),b(4)]=[0.6875,0.75]

10
Lección MN4. Ecuaciones no lineales

Podemos ver que los resultados numéricos de nuestro programa coinciden con los que obtu-
vimos “a mano”, lo que parece indicar la corrección del programa

Veamos lo que ocurre si intentamos aplicar el método de la bisección en un problema mal


planteado en el que f (a) y f (b) tengan el mismo signo y, por tanto, no pueda aplicarse el
teorema de Bolzano

⋆ Ejercicio 2: Aplica en OCTAVE N = 4 veces el método de la bisección a (5) en el intervalo


[a, b] = [1, 2]
> > biseccionFijo([1,2],4)
error: En el intervalo [1,2] no hay cambio de signo

Podemos ver como el programa no intenta calcular las N = 4 iteraciones pedidas sino que
se detiene inmediatamente

3.2. Error del método de la bisección


En virtud del teorema de Bolzano, la solución buscada c es el límite (23) cuando n → ∞,
mientras que el método de la bisección solo va calcular un número finito N de los puntos
medios xn . Es decir, el método numérico va a cometer un error teórico: la diferencia entre la
solución exacta c y la aproximación numérica xn

error = c − xn (28)

Esto supone un contrapunto por ejemplo a los métodos numéricos basados en la factorización
LU , que eran exactos (salvo errores de redondeo causados por la aritmética de coma flotante)

Siempre que un método numérico cometa un error teórico nos resultará imprescindible es-
tudiarlo. Raramente se podrá calcular de forma exacta dicho error, puesto que si fuéramos
capaces de ello, podríamos también calcular de forma exacta la solución

c = xn + error (29)

y no tendría mucho sentido aproximar numéricamente algo que podemos calcular de forma
exacta. Así pues, a lo máximo que se suele aspirar es a encontrar una cota de error

|error| ≤ C (30)

que, unida a la ecuación (28), sería tanto como buscar una acotación

|c − xn | ≤ C (31)

En nuestro caso sabemos que xn es uno de los extremos del intervalo [an , bn ] y que la solución
c ∈ (an , bn ), y por lo tanto se puede tomar como cota de error

C = b n − an (32)

11
Lección MN4. Ecuaciones no lineales

Teniendo en cuenta la ecuación (19) sobre las longitudes de subintervalos, nuestra cota de
error quedaría finalmente
b−a
C= n (33)
2
y la acotación (31) buscada sería simplemente

b−a
|c − xn | ≤ (34)
2n

Nota: La cota de error (34) se puede obtener sin llegar a aplicar el algoritmo de la bisección.
Es, por lo tanto, una cota de error “a priori”, que puede obtenerse sin necesidad de ningún
cálculo previo

Ejemplo
En el ejemplo en el que hemos trabajado comenzamos en el intervalo [a, b] = [0, 1] y
aplicamos N = 4 iteraciones, y por lo tanto la cota de error (33) es

b−a 1−0 1
C= N
= 4
= = 0.0625
2 2 16
Teniendo en cuenta que x4 = 0.6875 la acotación (34) quedaría como

|c − 0.6875| ≤ 0.0625 ■

3.3. Convergencia del método de la bisección


En algunas situaciones la acotación del error (34) puede no ser interesante, ya que no
involucra a la función f (x). Como nuestro objetivo es resolver la ecuación

f (x) = 0 (35)

es posible que lo que nos interese sea obtener una aproximación xn que cumpla

|f (xn )| ≪ 1 (36)

Aquí entra en juego un concepto distinto. En lugar de iterar un número de veces N prefijado,
se permite que sea el propio método quien elija cuantas iteraciones tomar, hasta obtener una
acotación
|f (xn )| ≤ tol (37)
siendo tol una tolerancia prefijada, obviamente pequeña

Si intentamos estimar cuál es número de iteraciones N necesario para conseguir dicha tole-
rancia, podemos empezar a partir del teorema del valor medio

f (c) − f (xn ) = f ′ (θ) · (c − xn ) (38)

12
Lección MN4. Ecuaciones no lineales

y, teniendo en cuenta que f (c) = 0, llegar a

−f (xn ) = f ′ (θ) · (c − xn ) (39)

Tomando valores absolutos


|f (xn )| = |f ′ (θ)| · |c − xn | (40)
Por simplicidad vamos a obviar completamente el factor f ′ (θ) y a considerar exclusivamente

|f (xn )| ≃ |c − xn | (41)

Usando las estimaciones (37) y (34) en esta última, tiene sentido pensar en

b−a
tol ≃ (42)
2N
Por otro lado sabemos que en doble precisión la mínima razonable es el épsilon de la máquina

ε = 2−52 ≃ 2.22045 · 10−16 (43)

Tomando nuestra tolerancia óptima tol = ε, en virtud del valor (43) llegaríamos a

b−a
2−52 ≃ =⇒ 2N ≃ 252 · (b − a) (44)
2N
Usando el logaritmo en base 2 podemos estimar el valor N para el error óptimo

N ≃ 52 + log2 (b − a) (45)

Siguiendo la idea de la ecuación (37) hemos creado un nuevo programa en OCTAVE que haga
uso de un bucle repetir do–until. También hemos añadido un control n ≤ 1000 para evitar
bucles infinitos

▲ biseccionTol: Función que aplica el método de la bisección en el intervalo [a, b] hasta


que |f (xn )| ≤ tol

function biseccionTol(I,tol)
.
.
.
tope=1000;
n=0;
a=I(1);
b=I(2);
do
n=n+1;
[x,a,b]=biseccion(a,b);
imprimeBiseccion(n,x,a,b);
until (abs(f(x))<=tol || n==tope)

13
Lección MN4. Ecuaciones no lineales

if (abs(f(x))<=tol)
imprimeExito(n,x,tol);
else
imprimeFracaso(tope,tol);
endif
endfunction

En nuestro ejemplo el intervalo es de longitud b − a = 1 y, por tanto, según la ecuación (45)


esperamos un valor N ≃ 52

⋆ Ejercicio 3: Aplica el método de la bisección a (5) en el intervalo [a, b] = [0, 1] hasta que
|f (xn )| ≤ ε
> > biseccionTol([0,1],eps)
.
.
.
EXITO para N=52
x(52)=0.7390851332151607
|f(0.7390851332151607)|=0 ≤ 2.22045 · 10−16

El resultado coincide con lo esperado. Veamos ahora qué ocurre al cambiar drásticamente el
tamaño del intervalo [a, b]

⋆ Ejercicio 4: Aplica el método de la bisección a (5) en el intervalo [a, b] = [0, 100] hasta
que |f (xn )| ≤ ε
> > biseccionTol([0,100],eps)
.
.
.
EXITO para N=58
x(58)=0.7390851332151606
|f(0.7390851332151606)|=1.11022 · 10−16 ≤ 2.22045 · 10−16

Es lógico que, al partir de un intervalo más grande, sean necesarias más iteraciones para
ajustar la solución. El nuevo tamaño b − a = 100 nos da la clave del aumento

⋆ Ejercicio 5: Calcula log2 (100)


> > log2(100)
ans = 6.6439

Según (45) se espera que en un intervalo de longitud b − a = 100 hagan falta 6 ó 7 iteraciones
más que un intervalo inicial de tamaño b − a = 1, luego los resultados del experimento se
han ajustado perfectamente a las predicciones teóricas
Nota: Aunque en los ejemplos realizados no hayamos apreciado nada extraño, es muy arries-
gado buscar tol = ε, porque cualquier error de redondeo puede impedirnos alcanzar esa
tolerancia mínima

14
Lección MN4. Ecuaciones no lineales

4. El método de Newton
4.1. Interpretación gráfica del método de Newton
En Matemáticas, y especialmente en Cálculo Numérico, no es infrecuente que existan
varios métodos útiles para resolver un mismo problema. Veamos ahora un enfoque totalmente
distinto de tratar el problema (35), que nos dará lugar a otro método numérico muy diferente
al de la bisección
Una idea fundamental en cualquier ciencia consiste en sustituir un problema difícil que no
se sepa resolver por otro más fácil que sí se sepa como hacerlo. En nuestro caso podemos
aproximar la función f (x) por una función r(x) más sencilla, y resolver
r(x) = 0 (46)
en vez de la ecuación f (x)=0
Sabemos que calcular un cero de una función es encontrar la intersección de ésta con el eje
X, que es una recta. Como calcular la intersección de dos rectas es sencillo vamos a tomar
r(x) como otra recta, como puede verse en la Figura 5

Figura 5: Intersección de la recta tangente (imagen obtenida de Wikimedia Commons)

4.2. Construcción del método de Newton


La ecuación de la recta tangente a f (x) por el punto x0 es
r(x) = f (x0 ) + f ′ (x0 ) · (x − x0 ) (47)
Si esta recta tangente no es paralela al eje X la solución de la ecuación (46) es el punto
f (x0 )
x1 = x0 − (48)
f ′ (x0 )

15
Lección MN4. Ecuaciones no lineales

que esperamos que se encuentre más cerca de c que el punto x0 original

El proceso anterior se podría repetir de forma iterativa tomando la recta tangente que pa-
sa por x1 para deducir x2 , luego la recta tangente por x2 para deducir x3 , etcétera. Eso
transformaría la fórmula (48) en

f (xn−1 )
xn = xn−1 − (49)
f ′ (xn−1 )

algoritmo que se conoce como método de Newton


Nota: Al igual que el método de la bisección, el método de Newton puede aplicarse un número
N de iteraciones fijo, o hasta que se cumpla una condición de tolerancia (37)

Ejemplo
Vamos a aplicar el método de Newton a la ecuación (1) con una tolerancia 10−3 . Es decir,
reescribimos de la forma (4) y aplicamos la ecuación (49) a la función (5) hasta encontrar
una iteración xn que cumpla |f (xn )| ≤ 10−3

Al contrario de lo que ocurre en el método de la bisección, en el método de Newton se utiliza


la derivada de la función, que será

f ′ (x) = 1 + sen x

Se necesita comenzar de un valor inicial, que vamos a tomar x0 = 0. Entonces

x0 = 0
f (x0 ) = f (0) = 0 − cos 0 = 0 − 1 = −1

Como
|f (x0 )| = 1 > 10−3
aún no hemos alcanzado la tolerancia buscada, así que obtenemos la siguiente iteración

f ′ (x0 ) = 1 + sen 0 = 1 + 0 = 1
f (x0 ) −1
x1 = x0 − ′
=0− =1
f (x0 ) 1
f (x1 ) = 1 − cos 1 = 1 − 0.5403023058681398 = 0.4596976941318602

Como
|f (x1 )| ≃ 4.596976941318602 · 10−1 > 10−3

16
Lección MN4. Ecuaciones no lineales

aún necesitamos al menos una iteración más


f ′ (x1 ) = 1 + sen 1 = 1 + 0.8414709848078965 = 1.8414709848078965
f (x1 ) 0.4596976941318602
x 2 = x1 − = 1 − = 0.7503638678402439
f ′ (x1 ) 1.8414709848078965
f (x2 ) = 0.7503638678402439 − cos 0.7503638678402439 =
= 0.7503638678402439 − 0.7314407940181265 =
= 0.01892307382211744

Como
|f (x2 )| = 1.892307382211744 · 10−2 > 10−3
aún no hemos alcanzado la tolerancia buscada, así vamos a por x3

f ′ (x3 ) = 1 + sen 0.7503638678402439 = 1 + 0.6819049529414878 = 1.6819049529414878


f (x2 ) 0.01892307382211744
x3 = x2 − ′
= 0.7503638678402439 − = 0.7391128909113617
f (x2 ) 1.6819049529414878
f (x3 ) = 0.7391128909113617 − cos 0.7391128909113617 =
= 0.7391128909113617 − 0.7390664350123709 =
= 4.645589899077152 · 10−5

Como
|f (x3 )| = 4.645589899077152 · 10−5 ≤ 10−3
ya hemos terminado el algoritmo. Fueron necesarias N = 3 iteraciones y los datos finales son

x3 = 0.7391128909113617 |f (x3 )| = 4.645589899077152 · 10−5

sin necesidad de calcular f ′ (x3 ) ■


Nota: En el método de la bisección los valores de las funciones f (xn ) no son importantes
en sí mismos, solamente su signo (positivo o negativo), por lo que no hay inconveniente en
calcularlos con muy pocas cifras. Sin embargo en el método de Newton es muy impor-
tante utilizar en todos los cálculos todas las cifras que proporcione la máquina.
Esto es cierto tanto para los puntos xn como para las funciones f (xn ) y f ′ (xn ), aunque pueda
resultar pesado en los ejemplos realizados “a mano”

OCTAVE tiene capacidades simbólicas que permiten derivar funciones. Sin embargo esto no
resulta tan cómodo como en MAXIMA, así que hemos optado por incluir f ′ (x) como una función
externa independiente

▲ fprima: Derivada de la función de la que se quiere calcular un cero

17
Lección MN4. Ecuaciones no lineales

function y=fprima(x)
y=1+sin(x);
endfunction

A la hora de programar en OCTAVE el algoritmo de Newton tendremos en cuenta que dicha


derivada no se puede anular

▲ Newton: Función que aplica una iteración del método de Newton

function x = Newton(x)
if (fprima(x)==0)
error(...la derivada se anula...);
endif
x=x-f(x)/fprima(x);
endfunction

Podemos fácilmente modificar los programas biseccionFijo y biseccionTol para adap-


tarlos al método de Newton. Veamos este último como ejemplo

▲ NewtonTol: Función que aplica el método de Newton comenzando en x0 hasta que


|f (xn )| ≤ tol

function NewtonTol(x0,tol)
tope=1000;
n=0;
x=x0;
do
n=n+1;
x=Newton(x);
imprimeNewton(n,x);
until (abs(f(x))<=tol || n==tope)
if (abs(f(x))<=tol)
imprimeExito(n,x,tol);
else
imprimeFracaso(tope,tol);
endif
endfunction

Comprobemos la validez de los resultados numéricos coinciden con los calculados “a mano”

⋆ Ejercicio 6: Aplica el método de Newton a (5) partiendo de la iteración inicial x0 = 0


hasta que |f (xn )| ≤ 10−3
> > NewtonTol(0,10^-3)

18
Lección MN4. Ecuaciones no lineales

Iteracion 1:
x(1)=1
f(1)=0.4596976941318602
f'(1)=1.841470984807897

Iteracion 2:
x(2)=0.7503638678402439
f(0.7503638678402439)=0.01892307382211744
f'(0.7503638678402439)=1.681904952941488

Iteracion 3:
x(3)=0.7391128909113617
f(0.7391128909113617)=4.645589899077152 · 10−5
f'(0.7391128909113617)=1.673632544224301

EXITO para N=3


x(3)=0.7391128909113617
|f(0.7391128909113617)|=4.64559 · 10−5 ≤ 0.001
Nota: Nuestro programa no está “optimizado”, en el sentido de que calcula la última derivada
f ′ (x3 ) aunque no llegue a utilizar

Como ya habíamos comentado, para imprimeBiseccion bastaba con unas pocas cifras de
f (xn ), ya que lo importante era el signo. Sin embargo la función imprimeNewton muestra
todas las cifras tanto de f (xn ) como de f ′ (xn )

4.3. Las claves del método de Newton


Al contrario que para el teorema de Bolzano, cuya demostración resulta de utilidad al ser
el germen del método de la bisección, la demostración del método de Newton incluye varios
artificios de tipo técnico y se sale completamente de los objetivos del curso. Lo fundamental
que se debe saber es que

1. Se necesita comenzar de un dato x0 que sea “suficientemente próximo” a la solución c

2. Cuando el método de Newton funciona bien, presenta convergencia cuadrática

|f ′′ (c)|
|c − xn | ≤ M · |c − xn−1 |2 para M > (50)
2 |f ′ (c)|

3. Es necesaria la condición f ′ (c) ̸= 0 para garantizar que los denominadores no se anulan


y que no se pierda esta convergencia cuadrática

Pasemos a estudiar estas propiedades

19
Lección MN4. Ecuaciones no lineales

4.3.1. La influencia de la iteración inicial en el método de Newton


Veamos en varios ejemplos la influencia del punto inicial x0 , comenzando en primer lugar
por valores x0 muy próximos a la solución c, y terminando por valores muy lejanos

4.3.1.1. Iteraciones iniciales cercanas a la solución: Cuando se parte del punto inicial
x0 = 0 la primera iteración que se obtiene es x1 = 1. Eso quiere decir que, si se iniciase desde
x0 = 1, se deberían repetir los mismos resultados que para x0 = 0 pero en una iteración
menos. Veámoslo

⋆ Ejercicio 7: Aplica el método de Newton a (5) partiendo de la iteración inicial x0 = 1


hasta que |f (xn )| ≤ 10−3
> > NewtonTol(1,10^-3)

Iteracion 1:
x(1)=0.7503638678402439
f(0.7503638678402439)=0.01892307382211744
f'(0.7503638678402439)=1.681904952941488

Iteracion 2:
x(2)=0.7391128909113617
f(0.7391128909113617)=4.645589899077152 · 10−5
f'(0.7391128909113617)=1.673632544224301

EXITO para N=2


x(2)=0.7391128909113617
|f(0.7391128909113617)|=4.64559 · 10−5 ≤ 0.001

Se puede ver que la primera iteración comenzando en x0 = 1 son justamente la segunda y


tercera empezando en x0 = 0, con lo que ganamos una iteración

Veamos qué ocurre empezando desde un punto diferente pero también cercano a la solución
c = 0.7390851332151617

⋆ Ejercicio 8: Aplica el método de Newton a (5) partiendo de la iteración inicial x0 = 0.5


hasta que |f (xn )| ≤ 10−3
> > NewtonTol(0.5,10^-3)

Iteracion 1:
x(1)=0.7552224171056364
f(0.7552224171056364)=0.02710331185746728
f'(0.7552224171056364)=1.685450631754473

20
Lección MN4. Ecuaciones no lineales

Iteracion 2:
x(2)=0.7391416661498792
f(0.7391416661498792)=9.461538061772412 · 10−5
f'(0.7391416661498792)=1.673653810758357

EXITO para N=2


x(2)=0.7391416661498792
|f(0.7391416661498792)|=9.46154 · 10−5 ≤ 0.001

El resultado obtenido es razonablemente lógico: como x0 = 1 y x0 = 0.5 están más o menos


a la misma distancia de c = 0.739085133215161, en ambos casos casos hemos necesitado
N = 2 iteraciones, una menos que para x0 = 0, que estaba un poco más lejos

Veamos qué pasa si tomamos un punto que se encuentre muy cercano a la solución, como
por ejemplo x0 = 0.75

⋆ Ejercicio 9: Aplica el método de Newton a (5) partiendo de la iteración inicial x0 = 0.75


hasta que |f (xn )| ≤ 10−3
> > NewtonTol(0.75,10^-3)
Iteracion 1:
x(1)=0.7391111387525791
f(0.7391111387525791)=4.352343016400528 · 10−5
f'(0.7391111387525791)=1.673631249261522

EXITO para N=1


x(1)=0.7391111387525791
|f(0.7391111387525791)|=4.35234 · 10−5 ≤ 0.001

Como hemos empezado ya muy cerca de la solución, con solamente N = 1 iteración se


obtuvo la precisión buscada. Esto pone de manifiesto la utilidad de comenzar con una buena
iteración inicial x0 ≃ c

4.3.1.2. Iteraciones iniciales lejanas a la solución: Hasta aquí hemos utilizado itera-
ciones iniciales x0 “suficientemente próximas” a la solución c, y todo ha funcionado razona-
blemente bien. La cosa cambia cuando elegimos un mal punto x0 del que empezar

⋆ Ejercicio 10: Aplica el método de Newton a (5) partiendo de la iteración inicial x0 = 100
hasta que |f (xn )| ≤ 10−3
> > NewtonTol(100,10^-3)

Iteracion 1:
x(1)=−100.832213848703

21
Lección MN4. Ecuaciones no lineales

f(−100.832213848703)=−101.7871805076572
f'(−100.832213848703)=0.7032868720704022

Iteracion 2:
x(2)=43.89845659308492
f(43.89845659308492)=42.90196915432232
f'(43.89845659308492)=0.91625763086485

Iteracion 3:
x(3)=−2.924584993840163
f(−2.924584993840163)=−1.94803889733762
f'(−2.924584993840163)=0.7846915668032358

Iteracion 4:
x(4)=−0.4420313641716827
f(−0.4420313641716827)=−1.345915923116799
f'(−0.4420313641716827)=0.5722235348916542

Iteracion 5:
x(5)=1.910049319422776
f(1.910049319422776)=2.242832073897604
f'(1.910049319422776)=1.94300351978354

Iteracion 6:
x(6)=0.7557374249453708
f(0.7557374249453708)=0.0279714286913334
f'(0.7557374249453708)=1.685825527883272

Iteracion 7:
x(7)=0.7391452994681547
f(0.7391452994681547)=0.0001006963024732244
f'(0.7391452994681547)=1.673656495947067

EXITO para N=7


x(7)=0.7391452994681547
|f(0.7391452994681547)|=0.000100696 ≤ 0.001

Aunque el resultado final N = 7 iteraciones no sea malo, las primeras iteraciones son com-
pletamente “caóticas”. No es que el método se esté aproximando a la solución, sino que va
obteniendo resultados “sin mucho sentido” hasta que “de casualidad” llega a un valor x6
muy próximo a la solución c, y a partir de ahí el método de Newton funciona

Cuando el valor de x0 no es bueno puede pasar cualquier cosa, incluso que no haya conver-
gencia

22
Lección MN4. Ecuaciones no lineales

⋆ Ejercicio 11: Aplica el método de Newton a (5) partiendo de la iteración inicial x0 = 17


hasta que |f (xn )| ≤ 10−3
> > NewtonTol(17,10^-3)

Iteracion 1:
x(1)=−430.5140134457477
f(−430.5140134457477)=−429.5207130765866
f'(−430.5140134457477)=1.11556113803724

Iteracion 2:
x(2)=−45.48741254397953
f(−45.48741254397953)=−45.55304626281089
f'(−45.48741254397953)=0.002156217160037444

Iteracion 3:
x(3)=21080.88478552342
f(21080.88478552342)=21080.1867027295
f'(21080.88478552342)=1.716017047867039
.
.
.
Iteracion 998:
x(998)=−2.314335970149115 · 1042
f(−2.314335970149115 · 1042 )=−2.314335970149115 · 1042
f'(−2.314335970149115 · 1042 )=1.656438395008563

Iteracion 999:
x(999)=−9.171599706534315 · 1041
f(−9.171599706534315 · 1041 )=−9.171599706534315 · 1041
f’(−9.171599706534315 · 1041 )=1.994267057903968

Iteracion 1000:
x(1000)=−4.572617002495703 · 1041
f(−4.572617002495703 · 1041 )=−4.572617002495703 · 1041
f’(−4.572617002495703 · 1041 )=0.5316272744155717

FRACASO
Tras 1000 iteraciones no se pudo alcanzar la tolerancia 0.001

Aunque x0 = 17 sea mejor dato inicial que x0 = 100 el método no ha conseguido converger.
Esto es debido a que en ninguno de los dos casos el punto x0 es “suficientemente próximo”,
por lo que, al no cumplirse las hipótesis del teorema, cualquier cosa puede pasar. Más aún,
para este tipo de resultados numéricos tan “caóticos” no es extraño que una diferencia en un
error de redondeo pueda provocar que incluso al ejecutar el mismo problema en máquinas
distintas en una converja y en otra no

23
Lección MN4. Ecuaciones no lineales

4.3.2. La convergencia cuadrática del método de Newton


Sin duda la propiedad más importante del método de Newton es la convergencia cuadrá-
tica de la ecuación (50). Profundicemos un poco más en ella

4.3.2.1. Predicciones de error: De una forma totalmente grosera podemos “obviar” la


existencia de la constante M en la ecuación (50) y predecir que los errores en cada iteración
tienden a elevarse al cuadrado
|c − xn | ≃ |c − xn−1 |2 (51)
Llevando esta idea a las funciones |f (xn )| y a la simplificación (41) llegaríamos a

|f (xn )| ≃ |f (xn−1 )|2 (52)

Podemos utilizar esto para hacer predicciones “a priori” sobre los errores

Ejemplo
Sabemos que, cuando comenzamos en x0 = 0, la tercera iteración cumple que

|f (x3 )| = 4.645589899077152 · 10−5 ≃ 10−5

Por tanto podemos predecir “groseramente” que


 2
|f (x4 )| ≃ 10−5 = 10−10 ■

⋆ Ejercicio 12: Aplica N = 4 iteraciones del método de Newton a (5) partiendo de la


iteración inicial x0 = 0
> > NewtonFijo(0,4)

Iteracion 1:
x(1)=1
f(1)=0.4596976941318602
f'(1)=1.841470984807897

Iteracion 2:
x(2)=0.7503638678402439
f(0.7503638678402439)=0.01892307382211744
f'(0.7503638678402439)=1.681904952941488

Iteracion 3:
x(3)=0.7391128909113617
f(0.7391128909113617)=4.645589899077152 · 10−5
f'(0.7391128909113617)=1.673632544224301

24
Lección MN4. Ecuaciones no lineales

Iteracion 4:
x(4)=0.739085133385284
f(0.739085133385284)=2.847205804457076 · 10−10
f'(0.739085133385284)=1.67361202930895

Podemos ver que, pese a lo grosero de nuestra simplificación, el exponente de |f (x4 )| es


el esperado. No obstante, no hay que tomarse la ecuación (52) al pie de la letra, porque
depende de constantes que estamos “olvidando”. No hubiera sido extraño que |f (x4 )| = 10−9
o que |f (x4 )| = 10−11 . Sin embargo otros exponentes sí hubieran sido sospechosos. Más aún,
situaciones como las del método de la bisección, en las que no es infrecuente que algún valor
cumpla |f (xn )| > |f (xn−1 )|, no encajan con la convergencia cuadrática (50)

4.3.2.2. El número de iteraciones: Ya sabemos que el método de la bisección necesita


alrededor de N = 52 iteraciones para obtener toda la precisión posible ε. Veamos lo que
ocurre con el método de Newton

⋆ Ejercicio 13: Aplica el método de Newton a (5) partiendo de la iteración inicial x0 = 0


hasta que |f (xn )| ≤ ε
> > NewtonTol(0,eps)

Iteracion 1:
x(1)=1
f(1)=0.4596976941318602
f'(1)=1.841470984807897

Iteracion 2:
x(2)=0.7503638678402439
f(0.7503638678402439)=0.01892307382211744
f'(0.7503638678402439)=1.681904952941488

Iteracion 3:
x(3)=0.7391128909113617
f(0.7391128909113617)=4.645589899077152 · 10−5
f'(0.7391128909113617)=1.673632544224301

Iteracion 4:
x(4)=0.739085133385284
f(0.739085133385284)=2.847205804457076 · 10−10
f'(0.739085133385284)=1.67361202930895

Iteracion 5:
x(5)=0.7390851332151607

25
Lección MN4. Ecuaciones no lineales

f(0.7390851332151607)=0
f'(0.7390851332151607)=1.673612029183215

EXITO para N=5


x(5)=0.7390851332151607
|f(0.7390851332151607)|=0 ≤ 2.22045 · 10−16

El método de Newton obtiene muy rápidamente toda la precisión en la solución. Esto ocurre
gracias a que los exponentes del error tiendan a doblarse, siguiendo aproximadamente
una progresión tipo

|f (x1 )| ≃ 10−1 → |f (x2 )| ≃ 10−2 → |f (x3 )| ≃ 10−4 → |f (x4 )| ≃ 10−8 → |f (x5 )| ≃ 10−16 (53)

que no es más que seguir la ecuación (52) hasta el ε de la máquina. Por eso el método de
Newton ha obtenido las 16 cifras decimales que representan el tope en doble precisión con
solamente N = 5 iteraciones, mientras que para obtener el mismo resultado el método de la
bisección necesitó N = 52 iteraciones

Como el método de la bisección es “lento pero seguro”, mientras que el de Newton es más
rápido pero presenta más problemas de convergencia, ambos métodos pueden combinarse: se
aplica bisección hasta conseguir una aproximación suficientemente buena, y a partir de ahí
se usa Newton para que con su convergencia cuadrática obtenga toda la precisión posible

4.3.2.3∗ . La duplicación del número de cifras correctas: Para entender bien la ecuación
(53) y la potencia de la convergencia cuadrática vamos a trabajar con la función parte entera
(también llamada función suelo)

⌊x⌋ = máx{q ∈ Z ; q ≤ x} (54)

Esta función parte entera cumple trivialmente varias propiedades

x ≥ ⌊x⌋ (55)

x ≥ y =⇒ ⌊x⌋ ≥ ⌊y⌋ (56)


x ∈ Z =⇒ ⌊x⌋ = x (57)
(de hecho la ecuación (57) sería un “si y sólo si”, pero no lo vamos a necesitar)

A partir de estas propiedades (55)–(57) deducimos


(55) (56) (57)
α + β ≥ ⌊α⌋ + ⌊β⌋ =⇒ ⌊α + β⌋ ≥ ⌊⌊α⌋ + ⌊β⌋⌋ =⇒ ⌊α + β⌋ ≥ ⌊α⌋ + ⌊β⌋ (58)

cuya conclusión escribimos como una propiedad independiente

⌊α + β⌋ ≥ ⌊α⌋ + ⌊β⌋ (59)

26
Lección MN4. Ecuaciones no lineales

3 c

2 c

1 c

c
-3 -2 -1 1 2 3 4

c -1

c -2

c -3

Figura 6: Representación gráfica de la función suelo ⌊x⌋

Además aplicando (59) al caso particular α = β obtenemos una propiedad interesante

⌊2 α⌋ ≥ 2 ⌊α⌋ (60)

Veamos como razonar mediante la función suelo el significado numérico de la convergencia


cuadrática de la ecuación (50). Primero hemos de notar que el número de cifras (decimales)
nulas que tiene un número x ∈ (0, 1) se puede calcular mediante la función

N (x) = ⌊− log10 x⌋ (61)

Por tanto nos interesa aplicar el logaritmo decimal a (50). Al ser log10 una función creciente
 
log10 |c − xn | ≤ log10 M · |c − xn−1 |2 (62)

y, aplicando propiedades de los logaritmos,

log10 |c − xn | ≤ log10 M + 2 log10 |c − xn−1 | (63)

Al cambiar el signo cambia el sentido de la desigualdad

− log10 |c − xn | ≥ − log10 M − 2 log10 |c − xn−1 | (64)

27
Lección MN4. Ecuaciones no lineales

Deducimos entonces que la convergencia cuadrática en realidad significa que


N (|c − xn |) = ⌊− log10 |c − xn |⌋
(64), (56)
≥ ⌊− log10 M − 2 log10 |c − xn−1 |⌋
(59)
≥ ⌊− log10 M ⌋ + ⌊−2 log10 |c − xn−1 |⌋ (65)
(60)
≥ ⌊− log10 M ⌋ + 2 ⌊− log10 |c − xn−1 |⌋ =
= N (M ) + 2 N (|c − xn−1 |)
Por tanto cuando el método de Newton funciona bien, salvo que la cantidad
|f ′′ (c)
M≃ (66)
2 |f ′ (c)|
sea desmesurada, el error tiene el doble de ceros que en la iteración anterior. Eso justifica el
comportamiento previsto en la ecuación (52)

4.3.3∗ . Anulación de la derivada


4.3.3.2∗ . Caso f ′ (xn ) = 0: El método de Newton no se puede aplicar en un punto en el
que se anule la derivada, ya que el denominador de (49) sería nulo. Comprobémoslo en un
ejemplo

⋆ Ejercicio 14: Aplica N = 4 iteraciones del método de Newton a (5) partiendo de la


iteración inicial x0 = −π/2
> > NewtonFijo(-pi/2,4)
error: En el punto x=−1.570796326794897 la derivada se anula

Podemos ver que nuestro control de derivadas ha detectado que

f ′ (−π/2) = 1 + sen(−π/2) = 1 − 1 = 0 (67)

y ha detenido la ejecución

4.3.3.1∗ . Caso f ′ (c) = 0: Este caso es diferente, porque aunque las iteraciones xn ≃ c
esperamos que xn ̸= c, de forma que los denominadores de (49) no serán nulos, y el método
de Newton sí podría aplicarse

Como nuestro ejemplo (5) cumple

f ′ (c) = 1.6736 ̸= 0 (68)

tenemos que cambiar de problema. Por ejemplo tanto

f (x) = x − cos x − sen(x − cos x) (69)

28
Lección MN4. Ecuaciones no lineales

como su derivada
f ′ (x) = 1 + sen x − cos(x − cos x) · (1 + sen x) (70)
se anulan en el punto c ≃ 0.7390851332151607, por lo que la función (69) es un ejemplo del
caso que estamos estudiando

Para aplicar el método de Newton a este problema es necesario modificar en OCTAVE tanto
f.m como fprima.m

function y=f(x)
y=x-cos(x)-sin(x-cos(x));
endfunction

function y=fprima(x)
y=1+sin(x)-cos(x-cos(x))*(1+sin(x));
endfunction

⋆ Ejercicio 15: Aplica el método de Newton a (69) partiendo de la iteración inicial x0 = 0


hasta que |f (xn )| ≤ ε
> > NewtonTol(0,eps)

Iteracion 1:
x(1)=0.3448549279575696
f(0.3448549279575696)=−0.03470987632662581
f'(0.3448549279575696)=0.2309007143466715

Iteracion 2:
x(2)=0.4951787432165939
f(0.4951787432165939)=−0.009419288334739429
f'(0.4951787432165939)=0.1078227896173416

Iteracion 3:
x(3)=0.5825377177726045
f(0.5825377177726045)=−0.002675534634010435
f'(0.5825377177726045)=0.04916592628876804
.
.
.
Iteracion 26:
x(26)=0.7390719724617512
f(0.7390719724617512)=−1.780947757974369 · 10−15
f'(0.7390719724617512)=4.059670377642988 · 10−10

Iteracion 27:
x(27)=0.7390763593887485

29
Lección MN4. Ecuaciones no lineales

f(0.7390763593887485)=−5.27687973612273 · 10−16
f'(0.7390763593887485)=1.804301152930066 · 10−10

Iteracion 28:
x(28)=0.739079284000157
f(0.739079284000157)=−1.563521176677768 · 10−16
f'(0.739079284000157)=8.019118702407013 · 10−11

EXITO para N=28


x(28)=0.739079284000157
|f(0.739079284000157)|=1.56352 · 10−16 ≤ 2.22045 · 10−16

Numéricamente se aprecia que el método pierde la convergencia cuadrática cuando f ′ (c) = 0.


Existen varias soluciones para solventar este pobre comportamiento numérico y recuperar la
convergencia cuadrática para este caso, aunque se escapan de los contenidos básicos de esta
lección

Resumen
Una ecuación no lineal se puede reescribir de la forma f (x) = 0. Con el teorema
de Bolzano se puede estudiar si una ecuación tiene alguna solución, pero para ver si
solamente hay una es necesario estudiar el crecimiento y decrecimiento de la función

Los métodos de la bisección y Newton son adecuados para aproximar la solución de


este tipo de ecuaciones hasta una determinada tolerancia

El método de Newton utiliza la derivada de la función, mientras que el método de la


bisección no

Para el método de Newton es muy importante utilizar muchas cifras en todos los
cálculos

El método de la bisección tiene unas condiciones de convergencia muy asequibles:


función continua con cambio de signo

Las condiciones para que el método de Newton sea convergente son mucho más restric-
tivas que las de la bisección, e incluyen una buena iteración inicial x0 y que la derivada
de la función no se anule

El método de la bisección converge lentamente: para obtener toda la precisión de la


máquina no es infrecuente que necesite unas N = 52 iteraciones

Cuando el método de Newton converge lo hace cuadráticamente, consiguiendo en cada


iteración doblar el numero de cifras correctas. Es tan rápido que no es extraño que
alcance con solo N = 5 iteraciones la precisión de la máquina

30
Lección MN4. Ecuaciones no lineales

Cuando la iteración inicial x0 del método de Newton es mala el comportamiento puede


ser caótico o incluso no convergente. En estas situaciones puede ser útil mezclar los
dos algoritmos: se empieza aplicando bisección (lenta pero segura), y cuando se ha
conseguido una aproximación suficientemente buena se usa Newton (muy rápido gracias
a la convergencia cuadrática)

Problemas para resolver con el ordenador

⋆ Ejercicio 1: Realiza un programa en OCTAVE que combine el método de la bisección


cuando |f (xn )| > 0.1 con el de Newton cuando |f (xn )| ≤ 0.1)
function biseccionNewtonTol(I,tol)
tope=1000;
cambio=0.1;
n=0;
a=I(1);
b=I(2);
do
n=n+1;
[x,a,b]=biseccion(a,b);
imprimeBiseccion(n,x,a,b);
until (abs(f(x))<=max(cambio,tol) || n==tope)
while (abs(f(x))>tol && n<tope)
n=n+1;
x=Newton(x);
imprimeNewton(n,x);
endwhile
if (abs(f(x))<=tol)
imprimeExito(n,x,tol);
else
imprimeFracaso(tope,tol);
endif
endfunction

Problemas para resolver sin ordenador

⋆ Ejercicio 2: Calcula con toda la precisión que permita la máquina los tres ceros de la
función f (x) = x3 − 6x2 + 5x + 1
c1 = −0.166012679457937, c2 = 1.21718432133585, c3 = 4.94882835812209

31
Lección MN4. Ecuaciones no lineales

Problemas de convocatorias anteriores

[ev. cont. 2011] Se considera la ecuación

x − 0.5 sen x − 0.9 = 0

a) Demuestra que la ecuación admite una única solución en el intervalo [0, 2]

b) Aplica 3 veces el método de la bisección comenzando en el intervalo [a0 , b0 ] = [0, 2]

c) Aplica el método de Newton comenzando en el valor x3 calculado en el apartado b),


hasta encontrar una iteración que cumpla |f (xn )| ≤ 10−8

Solución: a) f (0) · f (2) = −0.58082 < 0 (Bolzano),


f ′ (x) = 1 + 0.5 sen x ≥ 0.5 > 0 (f (x) estrictamente creciente)

b) [a0 , b0 ] = [0, 2], x1 = 1, f (1) = −0.32 < 0, [a1 , b1 ] = [1, 2], x2 = 1.5,
f (1.5) = 0.10 > 0, [a2 , b2 ] = [1, 1.5], x3 = 1.25

c) x3 = 1.25, f (x3 ) = −0.1244923096777931, f ′ (x3 ) = 0.8423388188023657,


x4 = 1.397793627574704, f (x4 = 0.005257467148359285, f ′ (x4 ) = 0.913929501729839,
x5 = 1.392041031626758, f (x5 ) = 8.146838701872383 · 10−6 ,
f ′ (x5 ) = 0.9110975799702669, x6 = 1.39203208984173 , f ′ (x6 ) = 1.96 · 10−11 < 10−8

[febrero 2011] Demuestre que la función f (x) = x3 + x + 1 admite una única solución real
y utilice el método de Newton con x0 = −0.5 hasta encontrar una iteración que cumpla
|f (xn )| ≤ 10−2
Solución: f (−1) · f (0) = −1 < 0 (Bolzano),
f ′ (x) = x2 + 1 ≥ 1 > 0 (f (x) estrictamente creciente),

x0 = −0.5, f (x0 ) = 0.375, f ′ (x0 ) = 1.75, x1 = −0.7142857142857143,


f (x1 ) = −0.07871720116618075, f ′ (x1 ) = 2.530612244897959,
x2 = −0.6831797235023042 , |f (x2 )| = −0.002 < 10−2

[junio 2011] Calcule 4 iteraciones del método de la bisección para f (x) = x + 2 log x,
partiendo del intervalo [a, b] = [1/2, 1]
Solución: [a0 , b0 ] = [1/2, 1], x1 = 3/4 = 0.75, f (x1 ) = 0.17 > 0,
[a1 , b1 ] = [1/2, 3/4], x2 = 5/8 = 0.625, f (x2 ) = −0.32 < 0,
[a2 , b2 ] = [5/8, 3/4], x3 = 11/16 = 0.6875, f (x3 ) = −0.062 < 0,
[a3 , b3 ] = [11/16, 3/4], x4 = 23/32 = 0.71875

[septiembre 2011] Aplica partiendo de x0 = 0 el método de Newton a f (x) = x − cos x


hasta encontrar una iteración que cumpla |f (xn )| ≤ 10−4

32
Lección MN4. Ecuaciones no lineales

Solución: f ′ (x) = 1 + sen x, x0 = 0, f (x0 ) = −1, f ′ (x0 ) = 1,


x1 = 1, f (x1 ) = 0.4596976941318602, f ′ (x1 ) = 1.841470984807897,
x2 = 0.7503638678402439, f (x2 ) = 0.01892307382211744, f ′ (x2 ) = 1.681904952941488,
x3 = 0.73911289091136 |f (x3 )| = 4.65 · 10−5 < 10−4

[ev. continua 2012] Se considera la ecuación

−0.9 + x − 0.1 cos x − 0.6 sen x,

Aplica el método de Newton comenzando en el valor x0 = 2 hasta encontrar una iteración


que cumpla |f (xn )| ≤ 10−6
Solución: f ′ (x) = 0.1 sen x − 0.6 cos x + 1,
x0 = 2, f (x0 ) = 0.5960362275593053, f ′ (x0 ) = 1.340617844610854,
x1 = 1.555401839565757, f (x1 ) = 0.05393354731485855, f ′ (x1 ) = 1.090751823214675,
x2 = 1.505955626259503, f (x2 ) = 7.36951853450351 · 10−4 , f ′ (x2 ) = 1.06091269284953
x3 = 1.505260986768037 |f (x3 )| = 1.46 · 10−7 < 10−6

[febrero 2012] Aplique el método de la bisección a la función f (x) = cos x − log x, comen-
zando por el intervalo [0.5, 2.5] e iterando hasta encontrar un punto con |f (xn )| ≤ 10−1
Solución: [a0 , b0 ] = [0.5, 2.5], x1 = 1.5, f (x1 ) = −0.33 < 0,
[a1 , b1 ] = [0.5, 1.5], x2 = 1, f (x2 ) = 0.54 > 0,
[a2 , b2 ] = [1, 1.5], x3 = 1.25

[junio 2012] Aplique el método de Newton a la función f (x) = x + cos x, comenzando por
el punto x0 = 0 e iterando hasta encontrar un punto con |f (xn )| ≤ 10−1
Solución: f ′ (x) = 1 − sen x, x0 = 0, f (x0 ) = 1, f ′ (x0 ) = 1,
x1 = −1, f (x1 ) = −0.4596976941318602, f ′ (x1 ) = 1.841470984807897,
x2 = −0.7503638678402439 |f (x2 )| = 1.89 · 10−2 < 10−1

[ev. continua 2013] Demuestra que la ecuación 0.1 − 0.4x − 0.1 sen x = 0 tiene alguna
solución en el intervalo [0, π] y aplica 8 iteraciones del método de la bisección comenzando
en dicho intervalo
Solución: f (0) · f (π) = −0.11 < 0 (Bolzano),
[a0 , b0 ] = [0, π], x1 = π/2 = 1.570796326794897, f (x1 ) = −0.62 < 0,
[a1 , b1 ] = [0, π/2], x2 = π/4 = 0.78539816339745, f (x2 ) = −0.28 < 0,
[a2 , b2 ] = [0, π/4], x3 = π/8 = 0.39269908169872, f (x3 ) = −0.10 < 0,
[a3 , b3 ] = [0, π/8], x4 = π/16 = 0.19634954084936, f (x4 ) = 0.0020 > 0,
[a4 , b4 ] = [π/16, π/8], x5 = 3π/32 = 0.29452431127404, f (x5 ) = −0.047 < 0,
[a5 , b5 ] = [π/16, 3π/32], x6 = 5π/64 = 0.2454369260617, f (x6 ) = −0.022 < 0,
[a6 , b6 ] = [π/16, 5π/64], x7 = 9π/128 = 0.22089323345553, f (x7 ) = −0.010 < 0,

33
Lección MN4. Ecuaciones no lineales

[a7 , b7 ] = [π/16, 9π/128], x8 = 17π/256 = 0.20862138715245

[junio 2013] Aplique 3 iteraciones el método de la bisección a la función f (x) = x + log x


comenzando por el intervalo [0.5, 1]
Solución: [a0 , b0 ] = [0.5, 1], x1 = 0.75, f (x1 ) = 0.46 > 0,
[a1 , b1 ] = [0.5, 0.75], x2 = 0.625, f (x2 ) = 0.15 > 0,
[a2 , b2 ] = [0.5, 0.625], x3 = 0.5625

[septiembre 2013] Resuelva mediante el método que desee la ecuación cos x = x con toda
la precisión que pueda
Solución: f (x) = x − cos x, método de Newton, x0 = 0, f ′ (x) = 1 + sen x
x0 = 0, f = −1, f ′ = 1,
x1 = 1, f = 0.459698, f ′ = 1.84147,
x2 = 0.750363867840244, f = 0.0189231, f ′ = 1.6819,
x3 = 0.739112890911362, f = 4.64559e − 05, f ′ = 1.67363,
x4 = 0.739085133385284, f = 2.84721e − 10, f ′ = 1.67361,
x5 = 0.739085133215161 , |f | = 0 < 2.22045e − 16

[febrero 2014] Se considera la ecuación x − log(2x2 + 2) = 0. Aplique 3 iteraciones del


método de la bisección comenzando en el intervalo [a0 , b0 ] = [2, 4] (Nota: la función log
representa el logaritmo neperiano)
Solución: [a0 , b0 ] = [2, 4], x1 = 3, f (x1 ) = 0.0043 > 0,
[a1 , b1 ] = [2, 3], x2 = 5/2 = 2.5, f (x2 ) = −0.17 > 0,
[a2 , b2 ] = [2.5, 3], x3 = 11/4 = 2.75

[septiembre 2014] Aplique el método de Newton para hallar una solución aproximada de la
ecuación f (x) = x − sen(x) − π/2 = 0. Comience el método en x0 = 1.5 y realice iteraciones
hasta encontrar xn tal que |f (xn )| ≤ 10−2 (utilice la calculadora en el modo radianes)
Solución: f ′ (x) = 1 − cos x,
x0 = 1.5, f (x0 ) = −1.068291313398951, f ′ (x0 ) = 0.9292627983322971,
x1 = 2.649611622585303, f (x1 ) = 0.6064424034948912, f ′ (x1 ) = 1.881398803393997,
x2 = 2.327275708264062, f (x2 ) = 0.02922243821043247, f ′ (x2 ) = 1.686365309789156
x3 = 2.309947055901019 , |f (x3 )| = 1.1 · 10−4 < 10−2

Temas sobre los que profundizar


Investiga el método de la secante como una modificación del método de Newton que
reemplaza la derivada por un cociente incremental

Investiga cómo conseguir convergencia cuadrática en el método de Newton en el caso


de raíces múltiples

34
Lección MN4. Ecuaciones no lineales

Referencias
Funciones trigonométricas inversas
https://es.wikipedia.org/wiki/Función_trigonométrica_inversa

Teorema de Bolzano
https://es.wikipedia.org/wiki/Teorema_del_valor_intermedio#Teorema_de_Bolzano

Conjunto conexo
https://es.wikipedia.org/wiki/Conjunto_conexo

Conjunto compacto
https://es.wikipedia.org/wiki/Espacio_compacto

Criterio del emparedado


https://es.wikipedia.org/wiki/Teorema_del_emparedado

Método de la bisección
https://es.wikipedia.org/wiki/Método_de_bisección

Condicional
https://es.wikipedia.org/wiki/Sentencia_condicional

Bucle
https://es.wikipedia.org/wiki/Bucle_(programación)

Bucle repetir
https://es.wikipedia.org/wiki/Bucle_repetir

Bucle infinito
https://es.wikipedia.org/wiki/Bucle_infinito

Método de Newton
https://es.wikipedia.org/wiki/Método_de_Newton

Convergencia cuadrática
https://en.wikipedia.org/wiki/Rate_of_convergence#quadratic_convergence

35

También podría gustarte