MN4 - Ecuaciones (Resuelta)
MN4 - Ecuaciones (Resuelta)
MN4 - Ecuaciones (Resuelta)
Ecuaciones no lineales
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
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)
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
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
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
2
Lección MN4. Ecuaciones no lineales
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
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
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)
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
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
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→∞
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
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
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
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.5) < 0
f (0.625) < 0
f (0.75) > 0
a3 = 0.625
b3 = 0.75
8
Lección MN4. Ecuaciones no lineales
f (0.6875) < 0
f (0.75) > 0
a4 = 0.6875
b4 = 0.75
|f (x3 )| = 0.1860 > 0.01831 = |f (x2 )| |f (x4 )| = 0.08533 > 0.01831 = |f (x2 )| ■
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
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
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
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
Podemos ver como el programa no intenta calcular las N = 4 iteraciones pedidas sino que
se detiene inmediatamente
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 ■
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
12
Lección MN4. Ecuaciones no lineales
|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
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
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
⋆ 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
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
15
Lección MN4. Ecuaciones no lineales
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 )
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
f ′ (x) = 1 + sen x
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
Como
|f (x2 )| = 1.892307382211744 · 10−2 > 10−3
aún no hemos alcanzado la tolerancia buscada, así vamos a por x3
Como
|f (x3 )| = 4.645589899077152 · 10−5 ≤ 10−3
ya hemos terminado el algoritmo. Fueron necesarias N = 3 iteraciones y los datos finales son
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
17
Lección MN4. Ecuaciones no lineales
function y=fprima(x)
y=1+sin(x);
endfunction
function x = Newton(x)
if (fprima(x)==0)
error(...la derivada se anula...);
endif
x=x-f(x)/fprima(x);
endfunction
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”
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
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 )
|f ′′ (c)|
|c − xn | ≤ M · |c − xn−1 |2 para M > (50)
2 |f ′ (c)|
19
Lección MN4. Ecuaciones no lineales
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
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
Veamos qué ocurre empezando desde un punto diferente pero también cercano a la solución
c = 0.7390851332151617
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
Veamos qué pasa si tomamos un punto que se encuentre muy cercano a la solución, como
por ejemplo x0 = 0.75
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
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
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
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
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
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
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 ≥ ⌊x⌋ (55)
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
⌊2 α⌋ ≥ 2 ⌊α⌋ (60)
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)
27
Lección MN4. Ecuaciones no lineales
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
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
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
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
Para el método de Newton es muy importante utilizar muchas cifras en todos los
cálculos
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
30
Lección MN4. Ecuaciones no lineales
⋆ 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
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
[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),
[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
32
Lección MN4. Ecuaciones no lineales
[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
[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
[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
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
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