Está en la página 1de 20

I

Solución de Ecuaciones
En la solución de muchos problemas aparece la necesidad de resolver ecuaciones de la forma

f (x) = 0 donde f : R → R.

Estas soluciones se llaman los ceros de f ó raı́ces de la ecuación. Pocos de estos problemas tienen una
solución simple dada por una fórmula como en el caso de las ecuaciones lineales y cuadráticas. Aún en el
caso de ecuaciones cúbicas, para las cuales existen fórmulas para las soluciones, resulta más fácil hacerlo
numéricamente porque las fórmulas son complicadas e involucran raı́ces cuadradas y cúbicas. Por lo tanto
es importante disponer de métodos efectivos para resolver ecuaciones. Vamos a discutir tres métodos: de
bisección, de iteración de punto fijo, y de Newton.

I.1 Método de Bisección


El método de bisección (o de Bolzano) se basa en el teorema del valor intermedio (TVI) o de Bolzano:
si F ∈ C[a, b] y f (a)f (b) < 0 entonces existe x ∈ (a, b) tal que f (x) = 0
La función puede tener más de un cero en [a, b], pero al menos uno. Si c = (a + b)/2 es el punto medio
de [a, b], entonces se tiene tres posibilidades exclusivas:
a. f (c) = 0: entonces x = c es un cero
b. f (a)f (c) < 0: entonces existe al menos un cero en [a, c]
c. f (c)f (b) < 0: entonces existe al menos un cero en [c, b]
Con base en esta observación se describe el método de la bisección: Dado un intervalo inicial [a0 , b0 ] = [a, b]
tal que f (a)f (b) < 0 y un valor  > 0 especificando el máximo error de aproximación deseado, se repite lo
siguiente en la n-ésima iteración, comenzando con n = 0 mientras que bn − an > :

1. cn = (an + bn )/2
2. si

a. f (cn ) = 0: entonces x = cn es un cero y termine la iteración


b. f (an )f (cn ) < 0: entonces [an+1 , bn+1 ] = [an , cn ] y continúe con n + 1
c. f (cn )f (bn ) < 0: entonces [an+1 , bn+1 ] = [cn , bn ] y continúe con n + 1

Al final cn es una aproximación a un cero de f en [a, b]. Note que en una iteración, la mitad del intervalo
que se descarta puede realmente contener ceros que no pueden ser detectados por el criterio del TVI. Lo
importante es que el intervalo que se preserva contiene al menos un cero.

Ejemplo. Usamos bisección para determinar el menor cero positivo de f (x) = tan x − x.

1
2 I. SOLUCIÓN DE ECUACIONES

Con ayuda de la función fplot de Matlab encontramos como primera


aproximación que el cero está en el intervalo [4.1, 4.6]. Podemos verificar
que existe una única raı́z en el intervalo examinando los valores de la función
en los extremos del intervalo y verificando que f es monótona en el intervalo:
f (4.1) = −2.676474 y f (4.6) = 4.260175, y f es creciente porque f 0 (x) =
sec2 x − 1 > 0 excepto en múltiplos de π, donde f 0 (x) = 0 pero no es máximo
ni mı́nimo.
La siguiente tabla muestra los resultados obtenidos con la función bisect,
modificada para imprimir esta tabla. Las columnas marcadas a c b lis-
tan los an , cn , bn y las marcadas s(a) s(c) s(b) listan los signos de f en
an , cn , bn .

>> f=@(x) (tan(x)-x);


>> [c err yc ] = bisect(f, 4.1, 4.6, 1e-3);

n+1 a s(a) c s(c) b s(b)

1 4.100000 -1 4.350000 -1 4.600000 1


2 4.350000 -1 4.475000 -1 4.600000 1
3 4.475000 -1 4.537500 1 4.600000 1
4 4.475000 -1 4.506250 1 4.537500 1
5 4.475000 -1 4.490625 -1 4.506250 1
6 4.490625 -1 4.498437 1 4.506250 1
7 4.490625 -1 4.494531 1 4.498437 1
8 4.490625 -1 4.492578 -1 4.494531 1
9 4.492578 -1 4.493555 1 4.494531 1
10 4.492578 -1 4.493066 -1 4.493555 1

c = 4.4931

err = 9.7656e-04

yc = -0.0069

Convergencia
Es claro que para cada n ≥ 1
1
bn − an = (bn−1 − an−1 )
2
y por lo tanto
b0 − a0 b−a
bn − an = n
= n .
2 2
Por lo tanto
lim (bn − an ) = 0
n→∞
y de aquı́ que limn→∞ an = limn→∞ bn . El algoritmo garatiza que hay una raı́z r de f tal que para cada
n ≥ 0, r ∈ [an , bn ]. Por lo tanto
1 b−a
|r − cn | ≤ (bn − an ) = n+1 .
2 2
Esto implica que
lim cn = r.
n→∞

Error
El error es En = r − cn . Entonces de acuerdo a lo anterior
b−a
|En | ≤ .
2n+1
I.1. MÉTODO DE BISECCIÓN 3

Dado  > 0, para asegurar que |En | ≤ , n debe satisfacer


b−a
≤ .
2n+1
Con ∆0 = b − a, entonces
n + 1 ≥ log2 (∆0 /)
Con    
∆0 ∆0
NB = log2 − 1 = log2 ,
 2
si n ≥ NB entonces |En | ≤ . (Note que como se ha usado n, si el algoritmo decide que c0 es un cero, o una
suficiente aproximación, entonces termina con c0 como resultado y el número de iteraciones es n = 0.)

Ejemplo. Para la función e intervalo inicial del problema anterior queremos determinar el número de
iteraciones necesarias para  = 10−3 . Entonces, ∆0 = b − a = 0.5 y
 
0.5
NB = log2 = 8.
2 · 10−3
La discrepancia con el ejemplo, en el que se listan 10 iteraciones, se debe primero a que allı́ se lista como
primera la iteración 0 (antes de dividir por primera vez), y segundo a que el programa mide el error como
b − a en lugar de (b − a)/2 como deberı́a ser.

Implementación en Matlab
La función Matlab bisect implementa el método de bisección. Aquı́ se muestra con el cambio para producir
la tabla del ejemplo en la sección.
function [c, err, yc] = bisect (f, a, b, delta)
% Entrada - f es la funcion introducida como una cadena de caracteres ’f’
% - a y b son los extremos izquierdo y derecho
% - delta es la tolerancia
% Salida - c es el cero
% - yc = f(c)
% - err es el error estimado para c
ya = feval(f, a);
yb = feval(f, b);
if ya*yb > 0, return, end
max1 = 1 + round((log(b-a) - log(delta)) / log(2));
fprintf(’\n n a s(a) c s(c) b s(b) \n\n’);
for k = 1:max1
c = (a + b) / 2;
x = [k a sign(f(a)) c sign(f(c)) b sign(f(b))];
fprintf(’%2i %8.6f %2i %8.6f %2i %8.6f %2i \n’, x);
yc = feval(f, c);
if yc == 0
a = c;
b = c;
elseif yb*yc > 0
b = c;
yb = yc;
else
a = c;
ya = yc;
end
if b-a < delta, break, end
end
c = (a + b) / 2;
x = [k+1 a sign(f(a)) c sign(f(c)) b sign(f(b))];
fprintf(’%2i %8.6f %2i %8.6f %2i %8.6f %2i \n’, x);
err = abs(b - a);
yc = feval(f, c);
4 I. SOLUCIÓN DE ECUACIONES

I.2 Método del Punto Fijo


Aunque la forma general que nos interesa es f (x) = 0, el método de punto fijo resuelve ecuaciones de la forma

x = g(x) donde g : R → R.

Si p es una solución de esta ecuación, es decir tal que p = g(p), entonces se dice que p es un punto fijo de g.
Dado un p0 ∈ R, una iteración de punto fijo es una iteración de la forma

pn+1 = g(pn ) para n ≥ 0.

Tal iteración determina una sucesión {pn }∞


n=0 . Como ejemplo, sea
 
1 3
g(x) = x+ .
2 x
Entonces la iteración de punto fijo está dada por
 
1 3
pn+1 = pn +
2 pn
y los primeros elementos de la sucesión con p0 = 2 son entonces
 
1 3
p1 = 2+ = 1.75
2 2
 
1 3
p2 = 1.75 + = 1.732143
2 1.75
 
1 3
p3 = 1.732143 + = 1.732051
2 1.732143
 
1 3
p4 = 1.732051 + = 1.732051
2 1.732051
..
.

Esta sucesión converge, pero no es siempre el caso para cualquier g(x) como lo muestra el siguiente ejemplo
que incluye la anterior función (g3 ) y otras dos funciones que tienen los mismos puntos fijos.

Ejemplo. Considere las funciones


 
1 3 1 3
g1 (x) = x + (x2 − 3), g2 (x) = , g3 (x) = x+ .
4 x 2 x

Es fácil verificar que cada una de las ecuaciones de punto fijo x = gi (x), i = 1, 2, 3,√es equivalente a la ecuacion
f (x) = 0 con f (x) = x2 − 3. Ası́ que cada una de las gi tiene puntos fijos en ± 3. Los primeros elementos
de las sucesiones para g1 , g2 , g3 con p0 = 2 son:
n=0 2.000000000000000 2.000000000000000 2.000000000000000
1 2.250000000000000 1.500000000000000 1.750000000000000
2 2.765625000000000 2.000000000000000 1.732142857142857
3 3.927795410156250 1.500000000000000 1.732050810014727
4 7.034689606167376 2.000000000000000 1.732050807568877
5 18.656404069947204 1.500000000000000 1.732050807568877

Mientras que la iteración de punto fijo de g3 converge a 3, las de g1 y g2 no lo hacen (la de g1 diverge
a ∞ y la de g2 oscila entre los valores 2 y 1.5). La figura muestra el comportamiento de las tres iteraciones.
I.2. MÉTODO DEL PUNTO FIJO 5

g1 g2

Iteración de punto fijo para g1 , g2 y g3 .


La lı́nea (en rojo) es la función y = x.

g3

En g3 del ejemplo anterior se puede reempazar 3 con cualquier a > 0 y entonces la iteración de punto
fijo, si converge, nos da un método para calcular raı́ces cuadradas usando multiplicaciones y divisiones. La
función g1 es un caso particular de lo siguiente: p es una solución de f (x) = 0 si y sólo si p es un punto fijo
de
g(x) = x + cf (x)

con c 6= 0. Aunque para g1 en el ejemplo no hay convegencia a 3, una elección diferente de c puede cambiar
la situación (ver ejemplo más tarde). Esto se puede incluso extender a

g(x) = x + φ(x)f (x)

donde φ es una función con φ(x) 6= 0 para todo x.

Existencia y Convergencia
Nos interesa entonces estudiar bajo que condiciones existen puntos fijos y bajo que condiciones se tiene
convergencia. Primero, el siguiente lema garantiza que si la iteración de punto fijo de g converge, lo hace a
un punto fijo de g.

Lema 1 Si g : R → R es continua y si la sucesión de punto fijo {pn }∞


n=0 de g converge a p, es decir
limp→∞ pn = p, entonces p es un punto fijo de g, es decir g(p) = p.

Dem. Se tiene
g(p) = g( lim pn ) = lim g(pn ) = lim pn+1 = p,
n→∞ n→∞ n→∞

donde g y lim se pueden intercambiar debido a la continuidad de g.

El siguiente teorema nos dice bajo que condiciones existe un punto fijo. Recuerde que C[a, b] denota el
conjunto de funciones R → R continuas en el intervalo [a, b].
6 I. SOLUCIÓN DE ECUACIONES

Teorema 2 (Existencia del punto fijo) Supongamos que g ∈ C[a, b] y que g(x) ∈ [a, b] para todo x ∈ [a, b].
Entonces g tiene un punto fijo en [a, b]. Si además g 0 existe para todo x ∈ [a, b], y existe K ∈ R, 0 < K < 1,
tal que |g 0 (x)| ≤ K, entonces el punto fijo es único.

Prueba. Asumiendo la primera parte primero, si g(a) = a ó g(b) = b entonces ya se tiene un punto fijo.
Entonces asumiendo g(a) 6= a y g(b) 6= b esto implica que g(a) > a y g(b) < b. Definiendo f (x) = g(x) − x,
se tiene entonces f (a) > 0 y f (b) < 0 y por el teorema del valor intermedio existe c ∈ (a, b) tal que f (c) = 0.
Es decir g(c) = c, ası́ que c es un punto fijo de g. Si además |g 0 (x)| ≤ K < 1 para todo x ∈ [a, b] y si
p1 , p2 ∈ [a, b], p1 6= p2 , son puntos fijos, entonces por el teorema del valor medio para algún c ∈ (a, b)
g(p1 ) − g(p2 ) p1 − p2
g 0 (c) = = = 1.
p1 − p2 p1 − p2
lo cual es una contradicción. Entonces el punto fijo es único.

Note que para la existencia realmente una condición más débil es suficiente: si g ∈ C[a, b] y g(a) ≥ a y
g(b) ≤ b, entonces el mismo argumento de la prueba muestra que existe un punto fijo. El requerimiento de
que g(x) ∈ [a, b] para todo x ∈ [a, b] se necesita para la iteración de punto fijo de tal forma que la sucesión
permanezca en [a, b].
El siguiente teorema describe condiciones suficientes para la convergencia de la iteración de punto fijo.

Teorema 3 (Convergencia al punto fijo) Supongamos que


(i) g ∈ C[a, b],

(ii) para todo x ∈ [a, b], g(x) ∈ [a, b], y

(iii) g 0 existe para todo x ∈ [a, b].


Sea p ∈ [a, b] un punto fijo de g (existencia garantizada por (i-ii)). Entonces,
(a) si existe K ∈ R, 0 ≤ K < 1, tal que |g 0 (x)| ≤ K para todo x ∈ [a, b], entonces p es único y la sucesión
de punto fijo con p0 ∈ [a, b] converge a p; más precisamente

|pn − p| ≤ K n |p0 − p|

para n ≥ 0; y

(b) si existe K ∈ R, K > 1, tal que |g 0 (p)| ≥ K, entonces una sucesión de punto fijo de g presenta
divergencia local en [a, b]: si q está suficientemente cerca de p entonces |p − g(q)| > |p − q| (la distancia
a p aumenta con la iteración de punto fijo).

Prueba. Sea {pn }∞ n=0 la sucesión de punto fijo. Primero asumimos las condiciones en (a). Por el teorema
anterior, p es el único punto fijo de g en [a, b]. Para n ≥ 1, si se tiene que pn−1 ∈ [a, b], entonces por el
teorema del valor medio, existe c en el intervalo entre p y pn−1 tal que

|p − pn | = |g(p) − g(pn−1 )|
= |g 0 (c)(p − pn−1 )|
= |g 0 (c)| · |p − pn−1 |
≤ K|p − pn−1 |.

Como pn−1 ∈ [a, b] y pn = g(pn−1 ), entonces la condición (ii) implica que pn ∈ [a, b]. Ası́ que podemos aplicar
el argumento anterior iterativamente (inducción): primero obviamente

|p − p0 | ≤ K 0 |p − p0 | = |p − p0 |
I.2. MÉTODO DEL PUNTO FIJO 7

y entonces

|p − p1 | ≤ K|p − p0 |
|p − p2 | ≤ K|p − p1 | ≤ K(K|p − p0 |) = K 2 |p − p0 |
..
.
|p − pn−1 | ≤ K n−1 |p − p0 |
|p − pn | ≤ K|p − pn−1 | ≤ K(K n−1 |p − p0 |) = K n |p − p0 |.

Como K < 1 se tiene


lim K n = 0
n→∞
y
0 ≤ lim |pn − p| ≤ lim K n |p − p0 | = 0
n→∞ n→∞

Por lo tanto
lim |p − pn | = 0
n→∞
y
lim pn = p.
n→∞

Es decir, la sucesión de punto fijo {pn }∞


n=0 converge a p.
Ahora asumimos las condiciones en (b). Supongamos q esta suficientemente cerca de p de tal forma que
|g 0 (x)| > 1 para todo x entre p y q (esto es posible porque |g 0 (p)| > 1 implica que |g 0 (p)| > 1 +  para algún
 > 0). Entonces, para algún c entre p y q,

|p − g(q)| = |g(p) − g(q)| = |g 0 (c)(p − q)| = |g 0 (c)||p − q| > |p − q|.

En el caso (b), en el cual |g 0 (p)| > K > 1, no puede decirse simplemente que nunca hay convergencia.
Puede haber convergencia no asintótica, es decir que para algún n se tenga pn = p, como muestra la figura.
Por supuesto esto requiere una función y una elección de p0 muy especiales. Es cierto por otra parte que no
puede haber convergencia asintótica al punto fijo p (pero puede haber convergencia asintótica a otro punto
fijo).

4
5

Covergencia no asintótica a un punto fijo


2
1 p con |g 0 (p)| > 1. El punto (pi , g(pi )) está
indicado con el número i + 1. El quinto
3
es (p4 , g(p4 )) = (p, p), cuando se llega al
punto fijo.

p0 p

Ejemplo. Sea g(x) = 2−x . Queremos verificar que las condiciones para existencia y convergencia al punto
fijo se dan en el intervalo [0, 1]:

(i) g es una exponencial la cual sabemos que es continua en R y en [0, 1] en particular.

(ii) 2−x es decreciente (g 0 (x) < 0) y g(0) = 1 y g(1) = 1/2 entonces g(x) ∈ [0, 1] para todo x ∈ [0, 1].
8 I. SOLUCIÓN DE ECUACIONES

(iii) g 0 (x) existe para todo x ∈ [0, 1] y está dada por g 0 (x) = −2−x ln 2.

(iv) Para acotar |g 0 (x)| en [0, 1] determinamos el máximo y el mı́nimo de g 0 (x) en [0, 1]. Como ya sabemos
que 2−x es monótona entonces g 0 (x) también lo es y por lo tanto el max y el min están en los extremos
del intervalo: g 0 (0) = − ln 2 y g 0 (1) = − ln 2/2. Ası́ que |g 0 (x)| ≤ ln 2 = 0.693147 para todo x ∈ [0, 1].

Podemos concluir que existe un único punto fijo de g(x) en [0, 1] y que la iteración de punto fijo con p0 ∈ [0, 1]
converge a ese punto fijo. La iteración es, para n ≥ 1,

pn = 2−pn−1 .

Con p0 = 0.5, en Matlab obtenemos (con tolerancia .5 · 10−4 para que las cifras obtenidas con format short
sean significativas, y máximo número de iteraciones 20 lo cual resulta suficiente):
>> [p, k, err, P] = fixpt(f,0.5,0.5e-4,20)
p = 0.6412
k = 13
err = 2.8178e-05
P = 0.5000
0.7071
0.6125
0.6540
0.6355
0.6437
0.6401
0.6417
0.6410
0.6413
0.6411
0.6412
0.6412

Ejemplo. Veamos que podemos rescatar la idea de la función g1 del primer ejemplo si escogemos una
constante c apropiada en
g(x) = x + c(x2 − 3).

Se tiene que
g 0 (x) = 1 + 2cx.

Ası́ que podemos √ tratar de escoger c de tal forma que la condición (a) del teorema se satisfaga. En particular
conviene tener g 0 ( 3)√cerca de cero (para tener un intervalo alrededor donde |g 0 (x)| ≤ K <√1 para algún K. Es
decir c cerca de −1/2 3. Escojamos c = −1/4 y entonces g 0 (x) = 1 − x/2. Sabemos que 3 ∈ [3/2, 2]. Ahora
veamos qué constante K en |g 0 (x)| < K podemos garantizar en este intervalo. g 0 (x) es monótona decreciente
(porque g 00 (x) = −1/2), ası́ que es suficiente investigar los valores extremos: g 0 (3/2) = 1 − (3/2)/2 = 1/4 y
g 0 (2) = 1 − 2/2 = 0. Ası́ que |g 0 (x)| ≤ K en [3/2, 2] con K = 1/4. Concluı́mos que escogiendo cualquier p0
en [3/2, 2], la secuencia de punto fijo de

1
g4 (x) = x − (x2 − 3)
4

converge a su punto fijo en [3/2, 2] (el cual es 3). Por otra parte, observamos que para
√ la función original
g1 , por ejemplo con p0 = −1, la secuencia de punto fijo converge, pero al punto fijo − 3:
I.2. MÉTODO DEL PUNTO FIJO 9

n=0 -1.000000000000000
1 -1.500000000000000
2 -1.687500000000000
3 -1.725585937500000
4 -1.731174230575562
5 -1.731933176423340
6 -1.732035044524380
7 -1.732048695659237
8 -1.732050524625521
9 -1.732050769661635

Esto es consistente con √ x


g10 (− 3) = 1 + |x=−√3 = 0.1339..
2
Finalmente observamos que la variación
1
g5 (x) = x + (x2 − 3)
2

presenta convergencia oscilatoria a − 3:

n=0 -1.000000000000000
1 -2.000000000000000
2 -1.500000000000000
3 -1.875000000000000
4 -1.617187500000000
5 -1.809539794921875
6 -1.672322660218924
7 -1.773991120278074
8 -1.700468872865346
9 -1.754671679073376
10 -1.715235328402286

En este último caso √


g50 (− 3) = 1 + x |x=−√3 = −.0.732050..

Error
El error absoluto En es la diferencia entre el puto fijo y la aproximación pn :

En = p − pn .

Queremos estudiar como se puede garantizar que |En | ≤  donde  > 0 es un dato especificado. El teorema
anterior, en el caso de convergencia, da la cota

|En | ≤ K n |p − p0 |.

La constante K se determina analizando g. Pero puesto que no conocemos p, realmente no conocemos |p−p0 |.
Ası́ que debemos encontrar una cota superior conocida ∆0 para |p − p0 |. Como p0 , p ∈ [a, b] entonces

|p − p0 | ≤ b − a,

pero una cota posiblemente un poco mejor (es decir, menor) es

|p − p0 | ≤ max{p0 − a, b − p0 }
10 I. SOLUCIÓN DE ECUACIONES

(donde max{x, y} denota el máximo entre x y y), porque si p ∈ [a, p0 ] entonces |p − p0 | ≤ |p0 − a|, y si
p ∈ [p0 , b] entonces |p − p0 | ≤ b − p0 (como no sabemos donde está p entonces debemos usa el máximo de estas
dos posibilidades). Aún otra cota que puede ser mejor se puede obtener de la siguiente manera: se tiene que
(usando la desigualdad triangular y que |p1 − p| ≤ K|p0 − p|)

|p − p0 | ≤ |p − p1 | + |p1 − p0 | ≤ K|p − p0 | + |p1 − p0 |

y por lo tanto
(1 − K)|p − p0 | ≤ |p1 − p0 |
y
1
|p − p0 | ≤ |p1 − p0 |.
1−K
Dependiendo de los valores de K y |p1 − p0 | esta última puede ser una mejor cota para |p − p0 |. En conclusión

|En | ≤ K n ∆0

donde  
1
∆0 = min max{p0 − a, b − p0 }, |p1 − p0 | .
1−K
(Note por qué en este caso se usa min: ambas cotas son siempre válidas, entonces la mejor es la menor de
ellas.) Si se desea determinar una aproximación pn tal que |En | ≤  para un dado  > 0 pequeño entonces el
número de iteraciones se debe tener que
K n ∆0 ≤ 
y por lo tanto

Kn ≤
∆0
Tomando logaritmos se obtiene

n log K ≤ log
∆0
Dividiendo por ln K se tiene que (note que K < 1 implica ln K < 0 y por lo tanto la desigualdad se invierte)
log(/∆0 ) log(∆0 /)
n≥ =
log K log(1/K)
(invirtiendo arriba y abajo para tener el cociente de dos números positivos; se debe tener ∆0 >  porque de
lo contrario no hay nada que hacer.) Entonces, puesto que debe ser entero, n se escoge como el menor entero
mayor o igual al cociente de la derecha. Finalmente obtenemos que si (usando la notación dxe para el menor
entero mayor o igual a x)
 
log(∆0 /)
NP F = ,
log(1/K)
entonces para todo n ≥ NP F , |En | ≤ . Esto nos dice como calcular el número de iteraciones necesarias n
para que lograr |En | ≤ .
Por otra parte, en una implementación del método de punto fijo es deseable tener un criterio para
terminación que no requiera el conocimiento de K. Como tampoco se conoce p, entonces con frecuencia se
hace uso de la condición
|pn+1 − pn | ≤ 
aún cuando esto no necesarimente implica un cota para el error real |pn − p|. Si examina la función fixpt
(más adelante) notará que controla tanto éste como el error relativo
|pn+1 − pn |
≤ .
|pn+1 |
I.2. MÉTODO DEL PUNTO FIJO 11

Ejemplo. Continuando con g(x) = 2−x , queremos determinar el número de iteraciones necesarias para
garantizar error menor o igual a  = 10−6 . Aquı́ tenemos a = 0, b = 1, p0 = 0.5 y entonces
max(1 − 0.5, 0.5 − 0) = 0.5
Por otra parte p1 = 0.7071 y K = 0.693147,
|p1 − p0 |
= 0.6749
1−K
y entonces
∆0 = min(0.5, 0.6749) = 0.5
Reemplazando en la cota del error tenemos
0.5(0.693147)n ≤ 10−6 .
Despejando n se obtiene
log(2 · 10−6 )
n≥ = 35.8032
log 0.693147
Ası́ que son suficientes 36 iteraciones para garantizar error 10−6 .

Implementación Matlab
En la librerı́a de funciones provista con el texto [Mathews,Fink], la función que implementa el método de
punto fijo se llama fixpt y se muestra abajo. La descripción de todos los parámetros de entrada y salida de
la función se encuentran como comentarios después de la primera lı́nea de la función. Y se pueden ver en la
ventana de comandos con el comando “help fixpt”. Como se habı́a mencionado antes, como el punto fijo
es desconocido, se usa más bien el error |pk − pk−1 | para decidir si se detiene la iteración. Además también
se examina el error relativo
|pk − pk−1 |
|pk |
Para evitar división por cero, se divide por abs(P(k))+eps donde eps es un número muy pequeño predefinido
en Matlab. La iteración se interrumpe cuando se alcance la tolerancia especificada por el parámetro tol o
cuando se alcance el número de máximo max1 de iteraciones especificadas.
function [p, k, err, P] = fixpt (g, p0, tol, max1)
% Entrada - g es la funcion iteracion
% - p0 es el supuesto inicial para el punto fijo
% - tol es la tolerancia
% - max1 es el numero maximo de iteraciones
% Salida - p es la aproximacion del punto fijo
% - k es el numero de iteraciones realizadas
% - err es el error en la aproximacion
% - P’ contiene la secuencia {pn}
P(1) = p0;
for k = 2:max1
P(k) = feval(g, P(k-1));
err = abs(P(k) - P(k-1));
relerr = err / (abs(P(k)) + eps);
p = P(k);
if (err < tol) | (relerr < tol), break; end
end
if k == max1
disp(’maximum number of iterations exceeded’)
end
P = P’;
Note que k=2 en la primera iteración, y entonces realmente el valor k regresado es el número de iteraciones
más 1.
12 I. SOLUCIÓN DE ECUACIONES

Problema. Emplear el método de punto fijo para determinar los ceros ó raı́ces de la ecuación f (x) = 0
donde
f (x) = 2(1 − x)ex − 1.

Solución. Primero analizamos las posibles posiciones de los ceros, si existen. Pusto que

f (0) = 0, lim = −∞, y lim = −1,


x→+∞ x→−∞

se tiene al menos un cero en (−∞, 0) y al menos un cero en (0, +∞). Podemos analizar la derivada

f 0 (x) = −2ex + 2(1 − x)ex = −2xex

para obtener más información: f 0 (x) = 0 para x = 0, f 0 (x) > 0


para x < 0 y f 0 (x) < 0 para x > 0. Ası́ que f es creciente en
(−∞, 0) y decreciente en (0, +∞), y por lo tanto f tiene exacta-
mente un cero en cada uno de esos intervalos, los que denotamos
por c1 , c2 respectivamente. El comportamiento se puede observar
en la gráfica. Allı́ se puede ver que c1 ∈ [−2, −1] y c2 ∈ [0.5, 1] (y si
se quiere se puede verificar calculando f (−2) = −0.1880, f (−1) =
0.4715 y f (0.5) = 0.6487, f (1) = −1).
Una ecuación de punto fijo equivalente se puede obtener despejando x en f (x) = 0. Se ven dos formas
directas de hacerlo: despejando x en (1 − x) y despejando x en ex . Los resultados son x = g1 (x) y x = g2 (x)
donde
1
g1 (x) = 1 − e−x , g2 (x) = − ln 2(1 − x).
2
Se observa que g1 está definida para todo x, pero g2 sólo este.finida para x < 1. La figura mustra las gráficas
de g1 y g2 . También se observa que los dos ceros aparecen como puntos fijos de g1 y de g2 , pero es evidente

Funciones g1 y g2
respectivamente. La lı́nea en cada caso es y = x.

que en cada gi sólo uno de los puntos fijos exhibe convergencia (g10 (c1 ) > 1, 0 < g10 (c2 ) < 1, 0 < g20 (c1 ) < 1, y
g20 (c2 ) > 1). Para verificar el comportamiento encontramos las derivadas

1 1
g10 (x) = e−x , g20 (x) = .
2 1−x
Para x ≥ 0, g10 (x) es decreciente con limx→∞ g10 (x) = 0; por lo tanto |g10 (x)| ≤ |g10 (0)| = 1/2. Por lo tanto g1
puede ser usada para aproximar c2 con p0 = 0. Para x ≤ 0, g20 (x) es creciente con limx→−∞ g20 (x) = 0; por lo
tanto |g20 (x)| ≤ |g20 (0)| = 1. Ası́ que se tiene |g20 (x)| < 1 para x < 0 y sólo |g20 (x)| = 1 para x = 0. Por esto
no se aplica estrictamente el teorema que garantiza la convergencia. Sin embargo, se observa que la primera
iteración comenzando con p0 = 0 producirá p1 < 0 y allı́ ya se puede garantizar.
I.2. MÉTODO DEL PUNTO FIJO 13

Las gráficas en el problema anterior fueron obtenida con los comandos

>> f=@(x) 2*(1-x)*exp(x)-1


>> figure
>> hold on
>> fplot(f,[-3,1])
>> grid on
>> g1=@(x)1-0.5*exp(-x)
>> figure
>> hold on
>> fplot(g1,[-2.5 2])
>> fplot(’x’,[-2.5 2],’r’)
>> g2=@(x) -log(2*(2-x))
>> grid on
>> figure
>> hold on
>> fplot(g2,[-2.5 0.99])
>> fplot(’x’,[-2.5 0.99],’r’)
>> grid on

Las funciones también se pueden definir con el comando “inline”: por ejemplo,

f=inline(’2*(1-x)*exp(x)-1’);

Finalmente se determinan aproximaciones a los puntos fijos usando la función fixpt con p0=0, tol=10−6
(seleccionado arbitrariamente ya que no está especificado), y max1=20 (que resulta suficiente para la tolerancia
especificada):

>> [p1 k1 err1 P1] = fixpt(g1,0,1e-6,20) >> [p2 k2 err2 P2] = fixpt(g2,0,1e-6,20)
p1 = 7.6804e-01 p2 = -1.6783e+00
k1 = 12 k2 = 17
err1 = 4.8112e-07 err2 = 9.1531e-07
P1 = 0 P2 = 0
5.0000e-01 -6.9315e-01
6.9673e-01 -1.2197e+00
7.5090e-01 -1.4905e+00
7.6403e-01 -1.6056e+00
7.6711e-01 -1.6508e+00
7.6782e-01 -1.6680e+00
7.6799e-01 -1.6745e+00
7.6803e-01 -1.6769e+00
7.6804e-01 -1.6778e+00
7.6804e-01 -1.6781e+00
7.6804e-01 -1.6783e+00
-1.6783e+00
-1.6783e+00
-1.6783e+00
-1.6783e+00
-1.6783e+00
14 I. SOLUCIÓN DE ECUACIONES

I.3 Método de Newton


Motivación como método de punto fijo. La ecuación f (x) = 0 se puede transformar en un problema
de punto fijo x = g(x) definiendo
g(x) = x + φ(x)f (x)
donde φ : R → R es una función tal que φ(p) 6= 0 si f (p) = 0 (si no para todo tal p, al menos para los p
que sean de inteéres. Cómo escoger φ ? Para convergencia, |g 0 (p)| < 1 y cuanto más cercano a cero mejor.
Tenemos que
g 0 (x) = 1 + φ0 (x)f (x) + φ(x)f 0 (x)
y usando f (p) = 0 se obtiene
g 0 (p) = 1 + φ(p)f 0 (p).
Se observa que la elección φ(x) = −1/f 0 (x) implica g 0 (p) = 0. Ası́ que obtenemos la función de punto fijo
f (x)
g(x) = x − ,
f 0 (x)
y la iteración de punto fijo, para n ≥ 0,

f (pn )
pn+1 = pn − .
f 0 (pn )

Motivación geométrica.
La figura muestra el gráfico de la función f con la recta tangente en el punto
(pn , f (pn )), la cual se usa para aproximar el cero de f Ñ
f (pn ) − 0
= f 0 (pn ).
pn − pn+1
De donde f(pn )
f (pn )
pn+1 = pn − 0 .
f (pn ) p
p p
n+1 n

Motivación con aproximación de Taylor. La aproximación de Taylor de primer orden para f alrededor
de x es
1
f (y) = f (x) + f 0 (x)(y − x) + f 00 (ξy )(y − x)2
2
para algún ξy entre x y y. Para |y − x| pequeño de tal forma que 21 f 00 (ξy )(y − x)2 ≈ 0 (aproximadamente 0)
se tiene la aproximación f˜(y) de f (y):

f (y) ≈ f˜(y) = f (x) + f 0 (x)(y − x).

Entonces una aproximación p̃ del cero p de f se puede obtener haciendo y = p̃ y f˜(p̃) = 0. Es decir

0 = f˜(p̃) = f (x) + f 0 (x)(p̃ − x),

y de aquı́
f (x)
p̃ = x − .
f 0 (x)
Lo que da origen a la iteratión
f (pn )
pn+1 = pn −
f 0 (pn )
como un método para obtener una aproximación para p.
I.3. MÉTODO DE NEWTON 15

Ejemplo. Queremos aproximar la raı́z de f (x) = 0 para f (x) = xe−x (la cual podemos ver está en x = 0).
Tenemos que f 0 (x) = e−x − xe−x = (1 − x)e−x , y entonces
f (x) xe−x x x(1 − x) − x −x2
g(x) = x − = x − = x − = = .
f 0 (x) (1 − x)e−x 1−x 1−x 1−x
La iteración de Newton es entonces
−p2n
pn+1 = .
1 − pn
Se obtiene la secuencia
p0 = 0.50000000
−0.500000002
p1 = f (p0 ) = = −0.50000000
1 − 0.50000000
−(−0.50000000)2
p2 = f (p1 ) = = −0.16666667
1 − (−0.50000000)
−(−0.16666667)2
p3 = f (p2 ) = = −0.02380952
1 − (−0.16666667)
−(−0.02380952)2
p4 = f (p3 ) = = −0.00055370
1 − (−0.02380952)
−(−0.00055370)2
p5 = f (p4 ) = = −0.00000030
1 − (−0.00055370)
−(−0.00000030)2
p6 = f (p5 ) = = −0.000000000
1 − (−0.00000030)

Orden de Convergencia
Puesto que el método de Newton es un método de punto fijo, el análisis de este da la cota
|p − pn | ≤ K|p − pn−1 |
donde K es una cota superior de |g 0 (x)| en el intervalo de interés. Como g 0 (p) = 0 entonces K → 0 a medida
que la sucesión se acerca a p. Resulta que suficientemente cerca de p un análisis más refinado es posible: una
cota de la forma
|p − pn | ≤ A |p − pn−1 |2
es válida suficientemente cerca del cero p de f .
Supongamos que la sucesión {pn }∞ n=0 converge a p y sea En = p − pn el error para cada n ≥ 0. Se dice

que la sucesión {pn }n=0 converge a P con orden de convergencia R, donde R > 0 es una constante, si
|p − pn+1 | |En+1 |
lim = lim =A
n→∞ |p − pn |R n→∞ |En |R

donde A > 0 es una constante.


Teorema 4 Supongamos que f ∈ C 2 [a, b] y que existe p ∈ [a, b] tal que f (p) = 0. Si f 0 (p) 6= 0 entonces
existe un δ > 0 tal que la sucesión {pn }∞
n=0 definida por la iteración de Newton, para n ≥ 0,

f (pn )
pn+1 = pn − ,
f 0 (pn )
con p0 ∈ Iδ donde Iδ = [p − δ, p + δ], converge a p. Además, el orden de convergencia es 2 y
|p − pn+1 | f 00 (p)

lim = 0 .
n→∞ |pn − p|2 2f (p)
16 I. SOLUCIÓN DE ECUACIONES

Prueba. Regresado a la justificación a partir del método de punto fijo. Tenemos

f (x)
g(x) = x −
f 0 (x)
y
(f 0 (x))2 − f · f 00 (x)
g 0 (x) = 1 − .
(f 0 (x))2
Puesto que f (p) = 0 y f 0 (p) 6= 0, entonces g 0 (p) = 0. Por lo tanto existe δ > 0 tal que |g 0 (x)| < 1 para x ∈ Iδ
donde Iδ = [p − δ, p + δ]. Por lo tanto si p0 ∈ Iδ entonces la secuencia de punto fijo {pn }∞ n=0 converge a p.

Ahora consideramos el orden de convergencia. Usando la aproximación de Taylor, con ξn entre x y pn ,

f 00 (ξ)
f (x) = f (pn ) + (x − pn )f 0 (pn ) + (x − pn )2 .
2
Con x = p y despejando p se tiene

f (pn ) (p − pn )2 f 00 (ξn )
p = pn − 0 − · 0
f (p ) 2 f (pn )
| {z n }
pn+1

(p − pn )2 f 00 (ξn )
= pn+1 − · 0
2 f (pn )

y entonces
f 00 (ξn )
p − pn+1 = −(p − pn )2 · .
f 0 (pn )
y
|p − pn+1 | f 00 (ξn )

= 0 .
|p − pn |2 f (pn )
Ahora, cuando n → ∞ entonces, como ya se concluyó, pn → p y por lo tanto ξn → p. De aquı́ que

|p − pn+1 | f 00 (p)

lim = 0 .
n→∞ |p − pn |2 2f (p)

Error
Veamos que implicación tiene la convergencia cuadrática sobre el error; en particular, cuantas iteraciones se
necesitan para lograr cierto error . Sea

maxx∈Iδ |f 00 (x)|
Aδ = ,
minx∈Iδ |f 0 (x)|

y se escoge δ > suficientemente pequeño tal que Aδ |p − p0 | < 1. Como antes p0 ∈ Iδ . Entonces

|p − pn | ≤ Aδ |p − pn−1 |2

y
Aδ |p − pn | ≤ (Aδ |p − pn−1 |)2 .
Repitiendo este argumento iterativamente (inducción) se obtiene
n
Aδ |p − pn | ≤ (Aδ |p − pn−1 |)2 ≤ (Aδ |p − pn−2 |)4 ≤ (Aδ |p − pn−3 |)8 ≤ · · · ≤ (Aδ |p − p0 |)2 .
I.3. MÉTODO DE NEWTON 17

y despejando se obtiene que


1 n
|p − pn | ≤ (Aδ |p − p0 |)2

Sea ∆0 tal que |p − p0 | ≤ ∆0 (puede ser ∆0 = b − a, la longitud del intervalo inicial) y supongamos queremos
|p − pn | ≤ . Entonces se debe tener
1 n
(Aδ ∆0 )2 ≤ ,

y de aquı́    
log(Aδ ) log(1/Aδ )
n ≥ log2 = log2 .
log(Aδ ∆0 ) log(1/Aδ ∆0 )
Finalmente, con
  
log(1/Aδ )
NN R = log2 ,
log(1/Aδ ∆0 )
se tiene que para n ≥ NN R , |En | ≤ .

Comparemos los valores obtenidos NP F y NN R . Tomamos ∆0 = 1, K = 1/2, Aδ = 1/2. En la siguiente


tabla y figura k = 10−k . Con estos valores se tiene

NF P = dlog2 (1/k )e = dk log2 10e ≈ d3.32 ke


NN R = dlog2 log2 (2/k )e = dlog2 (k log2 10 + 1)e ≈ dlog2 k + 1.75e

En palabras, mientras que el número de iteraciones es logarı́tmico en el inverso del error para la convergencia
lineal del método de punto fijo, el número de iteraciones es doble logarı́tmico en el inverso del error para la
convergencia cuadrática del método de Newton. Alternativamente, estos números son lineales y logarı́tmicos
en el n˘’mero de cifras significativas deseadas.

k PF NR
1 4 3
2 7 3
3 10 4
4 14 4
5 17 5
6 20 5
7 24 5
8 27 5
9 30 5
10 34 6
11 37 6
12 40 6
13 44 6
14 47 6 El error especificado k es 10−k . Las otras dos colum-
15 50 6 nas, PF y NR, y curvas en la figura, muestran los
números de iteraciones NP F y NN R requeridos para
acotar el error con k .

Es claro el efecto significativo de la convergencia cuadrática en el número de iteraciones requeridas.

Multiplicidad de la Raı́z
El análisis anterior no es válido si f 0 (p) = 0. Esto sucede cuando p es una raı́z múltiple. La raı́z x = p es de
orden M si
f (p) = 0, f 0 (p) = 0, f 00 (p) = 0, . . . f (M −1) (p) = 0, f (M ) (p) 6= 0.
18 I. SOLUCIÓN DE ECUACIONES

si f es suficientemente diferenciable, esto es equivalente a la existencia de una función h continua y con


h(p) 6= 0, tal que
f (x) = (x − p)M h(x).
Esto se deriva de la aproximación de Taylor, donde ξ(x) está entre x y p,

f 00 (p) f (M −1) (p)


f (x) = f (p) + f 0 (p)(x − p) + (x − p)2 + · · · + (x − p)M −1 +
2 (M − 1)!
f (M ) (p) f (M +1) (ξ(x))
(x − p)M + (x − p)M +1
M! (M + 1)!
f (M ) (p) f (M +1) (ξ(x))
= (x − p)M + (x − p)M +1
M! (M + 1)!
!
f (M ) (p) f (M +1) (ξ(x))
= (x − p)M + (x − p)
M! (M + 1)!
= (x − p)M · h(x)

Ejemplo. Verifiquemos que la función f (x) = e−x − 1 + x tiene un cero en x = 0 de orden 2:

f (0) = 0; f 0 (0) = −e−x + 1 |x=0 = 0; f 0 (0) = e−x |x=0 = 1.

Alternativamente, la expansión de Taylor de e−x es

1 1
e−x = 1 − x + x2 − x3 + · · ·
2 6
y  
−x 1 1 1 1
e − 1 + x = x2 − x3 + · · · = x2 − x + ··· .
2 6 2 6

La multiplicidad de un cero tiene un efecto importante sobre la rapidez de la convergencia. Más precisa-
mente, la convergencia cuadrática se pierde como se puede ver en el siguiente ejemplo.

Ejemplo. Consideramos las funciones f1 (x) = ex + x y f2 (x) = (ex + x)2 , las cuales tienen el mismo cero
pero con multiplicidades 1 y 2 respectivamente. A continuación está el resultado de resolver estas ecuaciones
con la función newton en Matlab.

>> f1= @(x) exp(x)+x


>> df1 = @(x) exp(x)+1
>> f2 = @(x) (exp(x)+x)^2
>> df2 = @(x) 2*(exp(x)+x)*(exp(x)+1)
>> [p1, err1, k1, y1]=newton(f1,df1,0,1e-8,1e-20,100)
p1 = -0.567143290409784
err1 = 2.886579864025407e-15
k1 = 5
y1 = 1.110223024625157e-16
>> [p2, err2, k2, y2]=newton(f2,df2,0,1e-8,1e-20,100)
p2 = -0.567143285057670
err2 = 5.352114418322174e-09
k2 = 27
y2 = 7.035066142827077e-17
Y las sucesiones correspondientes son
I.3. MÉTODO DE NEWTON 19
0
-0.500000000000000 0
-0.566311003197218 -0.250000000000000
-0.567143165034862 -0.398639686946376
-0.567143290409781 -0.480194115423827
-0.567143290409784 -0.522966807453253
-0.544876120719794
-0.555964542595883
-0.561542572005131
-0.564340088372214
-0.565740977843932
-0.566441956135348
-0.566792578761598
-0.566967923456313
-0.567055604150499
-0.567099446584479
-0.567121368323212
-0.567132329323018
-0.567137809855531
-0.567140550129940
-0.567141920269182
-0.567142605339313
-0.567142947874506
Las funciones f1 y f2 con el mismo cero -0.567143119142134
de multiplicidad uno y dos. -0.567143204775956
-0.567143247592869
-0.567143269001326
-0.567143279705555
-0.567143285057670

Se observa que la convergencia en el caso de un cero es doble es muy lenta (lineal).

A continuación analizamos la iteración de Newton para el caso de una raı́z múltiple en p. Sea

f (x) = (x − p)M h(x)

con h(p) 6= 0 y h(x) continua en x = p. Tenemos la iteración de punto fijo (Newton)

f (x)
pn+1 = g(pn ) donde g(x) = x − .
f 0 (x)

Con la expresión arriba para f (x) se tiene

f 0 (x) = M (x − p)M −1 h(x) + (x − p)M h0 (x) = (x − p)M −1 (M h(x) + (x − p)h0 (x))

y entonces
(x − p)M h(x) (x − p)h(x)
g(x) = x − −1 0
=x− .
(x − p)M (M h(x) + (x − p)h (x)) M h(x) + (x − p)h0 (x)
Ası́ que realmente no hay división por cero. Ahora para analizar la convergencia de la iteración de punto fijo
debemos calcular g 0 (p):

h(x)
g 0 (x) = 1 −
M h(x) + (x − p)h0 (x)
h0 (x)(M h(x) + (x − p)h0 (x)) − h(x)(M h0 (x) + h0 (x) + (x − p)h00 (x))
−(x − p)
(M h(x) + (x − p)h0 (x))2
20 I. SOLUCIÓN DE ECUACIONES

y de aquı́
1
g 0 (p) = 1 − .
M
Ası́ que la covergencia es lineal con constante
1 M −1
K =1− = .
M M
De esto se observan dos posibles modificaciones del método de Newton para manejar raı́ces múltiples:

(i) En los cálculos anteriores se observa que si g se cambia a

f (x)
g(x) = x − M ·
f 0 (x)
entonces
1
g 0 (p) = 1 − M · =0
M
y se recupera la convergencia cuadrática. La iteración de punto fijo con la nueva función g(x) se llama
la fórmula de iteración acelerada de Newton.

(ii) Se observa que la función


f (x) (x − p)h(x)
u(x) = 0
=
f (x) M h(x) + (x − p)h0 (x)
tiene una raı́z simple en x = p. Entonces con

u(x)
g(x) = x −
u0 (x)

la correspondiente iteración de punto fijo converge a p cuadráticamente. Esto se conoce como el método
de Newton modificado.

Implementación en Matlab
La siguiente es la implementación en Matlab provista con el texto [MF]. Las variables δ y  son las tolerancias
en la aproximación del cero y de la función en el cero. Usualmente  debe ser más pequeña para que la
terminación sea por la aproximación del cero.

function [p0, err, k, y] = newton (f, df, p0, delta, epsilon, max1)
% Entrada - f es la funcion objetivo introducida como cadena de caracteres ’f’
% - df es la derivada de f introducida como cadena de caracteres ’df’
% - p0 es la aproximacion inicial a cero de f
% - delta es la tolerancia para p0
% - epsilon es la tolerancia para los valores de la funcion y
% - max1 es el numero maximo de iteraciones
% Salida - p0 es la aproximacion de Newton hacia cero
% - err es el error estimado para p0
% - k es el numero de iteraciones
% - y es el valor de la funcion f(p0)
for k = 1:max1
p1 = p0 - feval(f, p0) / feval(df, p0);
err = abs(p1 - p0);
relerr = 2 * err / (abs(p1) + delta);
p0 = p1;
y = feval(f, p0);
if (err < delta) | (relerr < delta) | (abs(y) < epsilon), break, end
end

También podría gustarte