1 interpolaci´on y aproximaci´on 1.1 interpolaci´on mediante …mmarano/metnum.pdf ·...
TRANSCRIPT
1 Interpolacion y Aproximacion
1.1 Interpolacion mediante polinomios
En la seccion 8.2 de Matematicas vimos los metodos de Lagrange y Newton,
ambos para calcular el polinomio interpolante de un conjunto de n + 1 datos
(x0, y0), (x1, y1), · · · , (xn, yn), donde x0 < x1 < · · · < xn. De ahora en ade-
lante supondremos que estos datos provienen de una funcion f definida en
[x0, xn]. Esta funcion nos es desconocida y deseamos obtener informacion sobre
ella precisamente a partir de estos datos. El calculo del polinomio interpolante
constituye un primer intento en este sentido.
Si n es un entero no negativo, fijo, llamemos Pn al (unico) polinomio inter-
polante de grado a lo sumo n con respecto a los datos anteriores, es decir,
Pn(xj) = yj para todo j = 0, 1, · · · , n.
Cuando f es una funcion (n + 1)-veces continuamente diferenciable se puede
encontrar una expresion para la diferencia entre f y Pn. En efecto, probaremos
a continuacion que
f (x) = Pn(x) +f (n+1)(c(x))
(n + 1)!
n∏j=0
(x− xj),
donde x0 < c(x) < xn.
Demostracion: Por simple inspeccion se observa que la formula anterior es
correcta para x = xj, j = 0, 1, · · · , n. Sea x ∈ (x0, xn), x 6= xj para j =
0, 1, · · · , n, y para t ∈ [x0, xn] consideremos la funcion
F (t) = f (t)− Pn(t)− f (x)− Pn(x)∏nj=0(x− xj)
n∏j=0
(t− xj). (1)
Ella es (n + 1)-veces diferenciable y se anula en los n + 2 puntos distintos
x, x0, x1, · · · , xn. De aquı, una sucesiva aplicacion del Teorema de Rolle con-
duce a la existencia de un punto c(x), comprendido entre x0 y xn, tal que
1
F (n+1)(c(x)) = 0. Como P(n+1)n = 0 y
(∏nj=0(x− xj)
)(n+1)
= (n + 1)!, el
resultado se obtiene mediante un simple pasaje de terminos despues de derivar
n + 1 veces ambos lados de la igualdad (1) y reemplazar t por c(x).
Sea g una funcion continua definida en [x0, xn]. Definimos
‖g‖ = maxx∈[x0,xn]
|g(x)|.Una medida aceptable del error que produce Pn respecto de f es precisamente
‖f − Pn‖ = maxx∈[x0,xn]
∣∣∣∣∣∣f (n+1)(c(x))
(n + 1)!
n∏j=0
(x− xj)
∣∣∣∣∣∣.
Luego
‖f − Pn‖ ≤ ‖f (n+1)‖(n + 1)!
∥∥∥∥∥∥
n∏j=0
(x− xj)
∥∥∥∥∥∥.
La fraccion en el lado derecho de la desigualdad anterior es un numero que
depende de f y por lo tanto escapa a nuestro control. En cambio, sı podrıamos
controlar el factor ∥∥∥∥∥∥
n∏j=0
(x− xj)
∥∥∥∥∥∥eligiendo convenientemente los puntos xj. Obviamente, nuestro interes consiste
en minimizar este factor para, a su vez, alcanzar una cota de error mınima.
Veremos la forma de hacer esto despues del siguiente ejemplo.
Ejemplo
Sea n = 1. Luego ‖(x− x0)(x− x1)‖ = (x1−x0)2
4 y
‖f − P1‖ ≤ ‖f ′′‖8|x1 − x0|2.
Sea n = 2 y supongamos que los puntos xj estan en posicion equidistante, es
decir, xj = x0 + j h, donde j = 1, 2 y h es un numero positivo, fijo. Entonces
‖(x− x0)(x− x1)(x− x2)‖ =2
3√
3h3.
2
1 Interpolacion y Aproximacion 3
De aquı, en este caso
‖f − P2‖ ≤ ‖f ′′′‖9√
3h3.
Polinomios de Chebyshev
Para n ≥ 3, la distribucion equidistante de los puntos xj no produce un valor
mınimo de∏n
j=0(x− xj). Para conseguir esto introducimos los llamados poli-
nomios de Chebyshev. Ellos aparecen como consecuencia de la formula
cos mθ = Tm(cos θ),
donde Tm es un polinomio de grado m. Esta formula se prueba sin dificultad
por el metodo de induccion, usando la conocida igualdad trigonometrica
cos (k + 1)θ = 2 cos θ cos kθ − cos (k − 1)θ.
De aquı sigue que
Tk+1(cos θ) = 2 cos θ Tk(θ)− Tk−1(θ).
Reemplazando cos θ por x, nos queda la formula recurrente
Tk+1(x) = 2xTk(x)− Tk−1(x), k = 1, 2, · · · ,con T0(x) = 1, T1(x) = x, que nos permite definir todos los polinomios de
Chebyshev. Por ejemplo,
T2(x) = 2x2 − 1
T3(x) = 4x3 − 3x
T4(x) = 8x4 − 8x2 + 1.
Obviamente, ellos estan definidos en todo R, pero solo cuando x esta en [−1, 1]
es x = cos θ para algun valor de θ en el intervalo [0, π], y en este caso, Tm(x) =
cos mθ para ese mismo valor de θ. Este hecho facilita la tarea de encontrar
1 Interpolacion y Aproximacion 4
todas las raıces de cada uno de estos polinomios. En efecto, cos mθ se anula
para los valores de θ dados por
2k − 1
2mπ, k = 1, 2, · · · ,m.
Luego las m raıces de Tm son
zk(m) = cos2k − 1
2mπ, k = 1, 2, · · · ,m.
Observar que
z1(m) > z2(m) > · · · > zm(m).
Estos son los llamados puntos de Chebyshev. La disposicion que siguen los
puntos de Chebyshev en el intervalo [zn+1(n + 1), z1(n + 1)] se corresponde
linealmente con la que deben tener los n + 1 puntos x0, x1, · · · , xn para que∏nj=0(x − xj) tome un valor mınimo entre todas las posibles elecciones de
puntos xj en el intervalo [x0, xn]. En otras palabras, los n + 1 puntos xj que
minimizan la productoria anterior son la imagen de los puntos de Chebyshev
mediante la transformacion lineal que lleva el intervalo [zn+1(n + 1), z1(n + 1)]
en el intervalo [x0, xn].
De acuerdo con la discusion anterior, es de esperar que el polinomio inter-
polante obtenido en base a los puntos de Chebyshev de una mejor aproximacion
a f que otro basado en un conjunto diferente de puntos. Ilustraremos este hecho
con el siguiente ejemplo, debido al matematico Carl Runge.
Ejemplo
En el intervalo [-5,5] consideremos la funcion f , dada por f (x) = 1x2+1
. Se
puede demostrar que el polinomio interpolante Qn basado en puntos equidis-
tantes x0 < x1 < · · · < xn, con x0 = −5 y xn = 5, tiene el siguiente
comportamiento:
lim supn→∞
|f (x)−Qn(x)| =
{0 si |x| < 3, 633... ,
∞ si |x| > 3, 633... .
Para n = 10, se muestra a continuacion el calculo de Q10, y tambien su grafica,
con el programa Mathematica.
1 Interpolacion y Aproximacion 5
For[j = 0, j <= 10, j = j + 1, x[j] = -5 + j];
t = Table[{x[j], 1/(x[j]2 + 1)}, {j, 0, 10}];
tp = Table[{PointSize[.013], Point[{x[j],1/(x[j]2 + 1)}]}, {j, 0, 10}];
p[x−]=InterpolatingPolynomial[t,x];
Plot[p[x], {x, -5, 5}, Prolog −> tp]
-4 -2 2 4
0.5
1
1.5
2
Figura 1
Se observa en efecto un marcado alejamiento de Q10 en las zonas laterales.
Calcularemos ahora el polinomio interpolante P10 basado en los once puntos
de Chebyshev. Estos son cos 2k−122 π, k = 1, 2, · · · , 11. La aplicacion lineal
que lleva el intervalo [cos 2122 π, cos 1
22 π] al intervalo [−5, 5] es t 7→ α t, con
α = 5cos π
22. Luego los puntos xj que estamos buscando son
α cos21
22π = −5, α cos
19
22π, · · · , α cos
3
22π, α cos
1
22π = 5.
Clear["Global`*"]
alfa = 5/(Cos[(Pi/22)]);
For[j = 0, j <= 10, j = j + 1, x[j] = alfa Cos[(21 - 2j)Pi/22]];
t = Table[{x[j], 1/(x[j]2 + 1)}, {j, 0, 10}];
tp = Table[{PointSize[.013], Point[{x[j], 1/(x[j]2 + 1)}]}, {j, 0, 10}];
p[x−] = InterpolatingPolynomial[t, x];
Plot[p[x], {x, -5, 5}, PlotRange −> {0, 1}, Prolog −> tp]
1 Interpolacion y Aproximacion 6
-4 -2 2 4
0.2
0.4
0.6
0.8
1
Figura 2
Se observa ahora una notable mejora en la aproximacion de P10 a f , debida
a que los puntos xj obtenidos de los puntos de Chebyshev se concentran mas
en las zonas laterales del intervalo [−5, 5]. Como un resultado general, se sabe
que si f es continuamente diferenciable entonces el polinomio interpolante Pn,
basado en los puntos de Chebyshev, converge uniformemente a f para n →∞.
No obstante, este buen resultado no nos garantiza que el polinomio interpolante
sea un reflejo fiel del comportamiento de los n + 1 datos, aun para n grande.
En efecto, desearıamos obtener un polinomio interpolante que se mantenga
creciente (resp., decreciente) cuando los datos crecen (resp., decrecen). Ob-
servamos en la Figura 2 que P10 no cumple con este requisito. En realidad,
no es posible, en general, conseguir esta condicion con funciones interpolantes
que sean polinomios. Una manera de arreglar esto es considerar polinomios
“de a trozos”, es decir, funciones interpolantes que restringidas a cada intervalo
[xj, xj+1] sean polinomios. Trataremos este tema en la proxima seccion.
1.2 Interpolacion mediante splines
La posibilidad de cambiar ahora la expresion del polinomio en cada intervalo
[xj, xj+1], j = 0, 1, · · · , n− 1, hara que podamos conseguir una buena aproxi-
macion del spline interpolante a f aun con polinomios de grado bajo. Siempre
mantendremos el mismo grado en cada intervalo. Es evidente que el mınimo
grado posible es 1. Llamaremos S1 al spline interpolante que se compone de
polinomios de grado 1. Aquı tenemos un dibujo de S1 para los once datos del
ejemplo de Runge, con puntos equidistantes.
1 Interpolacion y Aproximacion 7
tab = Table[{x, 1/(x2 + 1)}, {x, -5, 5}];
For[j = 0, j <= 10, j = j + 1, x[j] = -5 + j];
tp = Table[{PointSize[.013], Point[{x[j], 1/(x[j]2 + 1)}]}, {j, 0, 10}];
int = Interpolation[tab, InterpolationOrder −> 1];
Plot[int[x], {x, -5, 5}, Prolog −> tp]
-4 -2 2 4
0.2
0.4
0.6
0.8
1
Figura 3
Se observa que S1 preserva el crecimiento – decrecimiento de los datos, cosa que
no se pudo lograr con el polinomio interpolante de grado 10 (ver Figura 1). Por
otra parte, S1 tiene el inconveniente de que su derivada no es continua en los
puntos xj. La continuidad de la derivada es una condicion que vamos a pedir
de ahora en mas. Como consecuencia de ello, estamos obligados a considerar
splines compuestos por polinomios de, al menos, grado 2. Concretamente, en lo
que sigue haremos un estudio de los splines interpolantes cuadraticos y cubicos,
es decir, de grado 2 y 3, respectivamente.
Splines interpolantes cuadraticos
Llamemos S2 a un spline interpolante compuesto por polinomios de grado 2,
con derivada continua. Ahora bien, hay infinitos polinomios de grado 2, in-
terpolantes en, por ejemplo, los datos (x0, y0) y (x1, y1). Esto hace que S2 no
este unıvocamente determinado, como sucedıa con S1. Pero una vez que se ha
elegido un polinomio, digamos L1, interpolante en esos datos, su prolongacion
a S2 sı esta unıvocamente determinada, ya que ahora tenemos que cumplir con
tres condiciones en cada uno de los restantes intervalos. Por ejemplo, en [x1, y1]
1 Interpolacion y Aproximacion 8
debemos hallar un polinomio interpolante L2 — dos condiciones — y ademas
satisfacer la condicion L′2(x1) = L′1(x1). Y ası sucesivamente con los restantes
intervalos. Si procedemos de esta manera, en el computo de L1 tendremos
la posibilidad de pedir una tercera condicion a nuestro gusto. Por ejemplo,
L′1(x0) = 0, o bien L′1(x0) = y1−y0x1−x0
.
Calcularemos ahora un polinomio interpolante S2. Para ello haremos uso
de un esquema que facilita tanto su interpretacion como su computo efectivo.
Aplicaremos este esquema en lo que resta de este capıtulo. Todo consiste en
pasar a la derivada. Esto es, calcularemos S ′2 y despues integraremos (recorde-
mos que S2 tiene derivada continua). Esta funcion derivada es un spline que se
compone de polinomios de grado 1.
Toda funcion que tenga derivada continua, salvo en un numero finito de
puntos, satisface la regla de Barrow. Este es el caso de S1. Luego
yj = S1(xj) = yj−1 +
∫ xj
xj−1
S ′1, j = 1, 2, · · · , n.
La formula anterior es valida para toda funcion interpolante, digamos S, con
derivada continua. Se deduce que∫ xj
xj−1
S ′ =∫ xj
xj−1
S ′1 = yj − yj−1, j = 1, 2, · · · , n. (2)
En particular, la ecuacion (2) es valida para S ′2 en el lugar de S ′. Y recıproca-
mente, si S ′2 satisface (2) en el lugar de S ′, entonces
S ′2(x) = y0 +
∫ x
x0
S ′2
es un spline interpolante. La derivada de S1 es una funcion escalonada. Luego,
para que quede clara una interpretacion visual del calculo de S2 a traves de
su derivada, digamos que S ′2 debe ser obtenido de forma que su integral sobre
cada intervalo
[xj−1, xj]
sea igual al area del rectangulo con base en [xj−1, xj] y altura determinada por
el valor constante de S ′1 en ese mismo intervalo. Ya estamos en situacion de
1 Interpolacion y Aproximacion 9
calcular un spline interpolante S2 para los datos del ejemplo de Runge, con
puntos equidistantes. Impondremos la condicion
S ′2(x0) = S ′1(x0) =y1 − y0
x1 − x0.
Primero calculamos S ′2.
For[j = 0, j <= 10, j = j + 1, x[j] = -5 + j; y[j] = 1/(x[j]2 + 1)];
For[j = 1, j <= 10, j = j + 1, d[j] = (y[j] - y[j - 1])/(x[j] - x[j - 1])];
plots1prima = Table[Plot[d[j], {x, x[j - 1], x[j]}, DisplayFunction −> Identity], {j, 1, 10}];
s2prima[1][t−] = d[1];
For[j = 2, j <= 10, j = j + 1,
v[j] = (2(d[j] - s2prima[j - 1][x[j - 1]]))/(x[j] - x[j - 1]);
s2prima[j][t−] = v[j](t - x[j - 1]) + s2prima[j - 1][x[j - 1]]];
plots2prima = Table[Plot[s2prima[j][t], {t, x[j - 1], x[j]}, DisplayFunction −> Identity], {j, 1, 10}];
Show[plots1prima, plots2prima, DisplayFunction −> $DisplayFunction,
AxesOrigin −> {-5, -1.6}]
-4 -2 2 4
-1.5
-1
-0.5
0.5
1
Figura 4. Graficos de S′1 (funcion escalonada) y S′2.
Ahora calculamos S2 mediante integracion de S ′2.
s2[0][x[0]] = y[0];
For[j = 1, j <= 10, j = j + 1,
s2[j][x−] = s2[j - 1][x[j - 1]] + Integrate[s2prima[j][t], {t, x[j - 1], x}]];
tp = Table[{PointSize[.012], Point[{x[j], 1/(x[j]2 + 1) }]}, {j, 0, 10}];
1 Interpolacion y Aproximacion 10
plots2 = Table[Plot[s2[j][x], {x, x[j - 1], x[j]}, DisplayFunction −> Identity], {j, 1, 10}];
Show[plots2, DisplayFunction −> $DisplayFunction, Prolog −> tp]
-4 -2 2 4
-0.2
0.2
0.4
0.6
0.8
1
Figura 5
Splines cuadraticos con un nodo intermedio
Como vemos en los dibujos, hasta ahora no hemos podido conseguir un
interpolante, con derivada continua, que preserve el crecimiento – decrecimiento
de los datos. En realidad, no es posible en general lograr esta propiedad con
splines cuadraticos (ni cubicos) que se compongan de un unico polinomio en
cada intervalo
[xj−1, xj].
Una solucion a este hecho es considerar un spline cuadratico, con derivada con-
tinua, que en cada intervalo [xj−1, xj] se componga de dos polinomios. Diremos
que una funcion interpolante de este tipo es un spline con un nodo interme-
dio (el nodo es, en cada intervalo, el valor de x donde cambia la expresion del
polinomio). Calcularemos a continuacion un tal interpolante, que seguiremos
llamando S2. Como ya se ha dicho, el procedimiento que seguiremos es el de hal-
lar primero su derivada S ′2. La introduccion del nodo intermedio, cuya posicion
debemos fijar, hara que tambien tengamos libertad para fijar los valores de
S ′2(xj), j = 0, 1, · · · , n.
Una estrategia muy razonable para hacer esto es la siguiente. Suponemos
n ≥ 2. Nos basaremos en la funcion escalonada S ′1. En [x0, xn] consideremos
1 Interpolacion y Aproximacion 11
la poligonal Q determinada por los puntos (mj, S′1(mj)), donde mj =
xj−1+xj
2 ,
j = 1, 2, · · · , n, y tal que Q tiene derivada continua en [x0, x1]∪ [xn−1, xn]. Los
valores de S ′2(xj) vendran dados por Q(xj).
For[j = 0, j <= 10, j = j + 1, x[j] = -5 + j; y[j] = 1/(x[j]2 + 1)];
For[j = 1, j <= 10, j = j + 1, d[j] = (y[j] - y[j - 1])/(x[j] - x[j - 1]);
m[j] = (x[j - 1] + x[j])/2];
plots1prima = Table[Plot[d[j], {x, x[j - 1], x[j]}, DisplayFunction −> Identity], {j, 1, 10}];
tq = Table[{m[j], d[j]}, {j, 1, 10}];
q = Interpolation[tq, InterpolationOrder −> 1];
plotq = Plot[q[x], {x, -5, 5}, DisplayFunction −> Identity];
tpq = Table[{PointSize[.01], Point[{x[j], q[x[j]]}]}, {j, 0, 10}];
Show[plots1prima, plotq, DisplayFunction −> $DisplayFunction,
Prolog −> tpq, AxesOrigin −> {-5, -.52}, AspectRatio −> 1]
-4 -2 0 2 4
-0.4
-0.2
0
0.2
0.4
Figura 6
Una vez que se han fijado los valores de contorno S ′2(xj) = Q(xj), j =
0, 1, · · · , n, debemos situar a los nodos intermedios en cada intervalo [xj−1, xj].
Hay dos casos, segun la posicion de los valores de contorno en los dos extremos
de ese intervalo respecto de dj :=yj−yj−1xj−xj−1
.
1 Interpolacion y Aproximacion 12
Primer caso: (Q(xj−1)− dj)(Q(xj)− dj) < 0.
Segundo caso: (Q(xj−1)− dj)(Q(xj)− dj) ≥ 0.
En el ejemplo de la Figura 6 todos los intervalos, con excepcion de [−1, 0] y
[0, 1], corresponden al primer caso.
En el primer caso fijaremos el nodo, digamos xj−1 + cj, de manera que
S ′2(xj−1 + cj) = dj. En el segundo caso el nodo sera el punto medio del
intervalo, mj =xj−1+xj
2 = xj−1 + δj, donde δj =xj−xj−1
2 . Ahora S ′2, restringido
en el intervalo [xj−1, xj], queda unıvocamente determinado por la condicion∫ xj
xj−1
S ′2 =
∫ xj
xj−1
S ′1 = yj − yj−1.
Ası, cj debe tomar un valor que satisfaga
cj(dj −Q(xj−1)) = (2δj − cj)(Q(xj)− dj).
Luego
cj =2δj(Q(xj)− dj)
Q(xj)−Q(xj−1).
Por otro lado, S ′2(mj) =: aj debe cumplir con la condicion
(aj −Q(xj−1))(δj/2) + Q(xj−1)(δj) + (aj −Q(xj))(δj/2) + Q(xj)(δj)
= yj − yj−1.
Luego
aj = 2dj − Q(xj−1) + Q(xj)
2.
En las Figuras 7 y 8 se ilustran el primero y segundo casos, respectivamente,
para los intervalos [−3,−2] y [−1, 0] del ejemplo de Figura 6.
c = (q[x[3]] - d[3])/(q[x[3]] - q[x[2]]);
pol = Interpolation[{{x[2], q[x[2]]}, {x[2] + c, d[3]}, {x[3], q[x[3]]}},
InterpolationOrder −> 1];
taq = {PointSize[.013], Point[{x[2], q[x[2]]}], Point[{x[3], q[x[3]]}]};
Plot[{pol[x], d[3]}, {x, x[2], x[3]}, PlotRange −> {.05, .21}, Prolog −> taq, AxesOrigin −> {-1.8, 0}, Aspec-
tRatio −> 1]
1 Interpolacion y Aproximacion 13
-3 -2.8 -2.6 -2.4 -2.2 -2
0.05
0.1
0.15
0.2
Figura 7. La poligonal S′2 en un intervalo correspondiente al primer caso.
a = 2d[5] - (q[x[4]] + q[x[5]])/2;
pol = Interpolation[{{x[4], q[x[4]]}, {m[5], a}, {x[5], q[x[5]]}},
InterpolationOrder −> 1];
taq = {PointSize[.013], Point[{x[4], q[x[4]]}], Point[{x[5], q[x[5]]}]};
Plot[{pol[x], d[5]}, {x, x[4], x[5]}, Prolog −> taq, AxesOrigin −> {.1, 0}, AspectRatio −> 1]
-1 -0.8 -0.6 -0.4 -0.2 0
0.2
0.4
0.6
0.8
Figura 8. La poligonal S′2 en un intervalo correspondiente al segundo caso.
Ahora obtenemos S ′2 en el intervalo completo [−5, 5].
Clear["Global`*"]
For[j = 0, j <= 10, j = j + 1, x[j] = -5 + j; y[j] = 1/(x[j]2 + 1)];
1 Interpolacion y Aproximacion 14
For[j = 1, j <= 10, j = j + 1, d[j] = (y[j] - y[j - 1])/(x[j] - x[j - 1]);
m[j] = (x[j - 1] + x[j])/2];
tq = Table[{m[j], d[j]}, {j, 1, 10}];
q = Interpolation[tq, InterpolationOrder −> 1];
plots1prima = Table[Plot[d[j], {x, x[j - 1], x[j]}, DisplayFunction −> Identity], {j, 1, 10}];
For[j = 1, j <= 10, j = j + 1, If[(q[x[j - 1]] - d[j])(q[x[j]] - d[j]) < 0, c[j] = (q[x[j]] - d[j])/(q[x[j]] - q[x[j - 1]]);
s2prima[j] = Interpolation[{{x[j - 1], q[x[j - 1]]}, {x[j - 1] + c[j], d[j]}, {x[j], q[x[j]]}}, InterpolationOrder −>
1], a[j] = 2d[j] - (q[x[j - 1]] + q[x[j]])/2; s2prima[j] = Interpolation[{{x[j - 1], q[x[j - 1]]}, {m[j], a[j]}, {x[j],
q[x[j]]}}, InterpolationOrder −> 1]]];
Show[Table[ Plot[s2prima[j][t], {t, x[j - 1], x[j]}, DisplayFunction −> Identity], {j, 1, 10}], plots1prima,
AxesOrigin −> {-5, -.85}, DisplayFunction −> $DisplayFunction, AspectRatio −> 1]
-4 -2 0 2 4
-0.75
-0.5
-0.25
0
0.25
0.5
0.75
Figura 9
Finalmente, se calcula S2.
s2[0][x[0]] = y[0];
For[j = 1, j <= 10, j = j + 1, s2[j][x−] = s2[j - 1][x[j - 1]] +
Integrate[s2prima[j][t], {t, x[j - 1], x}]];
tp = Table[{PointSize[.012], Point[{x[j], 1/(x[j]2 + 1)}]}, {j, 0, 10}];
1 Interpolacion y Aproximacion 15
Show[Table[Plot[s2[j][x], {x, x[j - 1], x[j]}, DisplayFunction −> Identity],
{j, 1, 10}], DisplayFunction −> $DisplayFunction, Prolog −> tp]
-4 -2 2 4
0.2
0.4
0.6
0.8
1
Figura 10
Hemos conseguido por fin un interpolante, con derivada continua, que preserva
el crecimiento – decrecimiento de los datos. No obstante, no debemos cantar
victoria antes de tiempo, ya que este hecho se ha dado en este ejemplo pero
puede no darse en otro. En efecto, consideremos los datos
{0, 0}, {1, 4}, {2, 5}, {3, 9}.Ellos estan en posicion estrictamente creciente. Por consiguiente, S ′2 deberıa
ser positivo. Sin embargo, esto no es ası, como muestra la siguiente figura.
0.5 1 1.5 2 2.5 3
1
2
3
4
5
1 Interpolacion y Aproximacion 16
Figura 11. Graficos de S′1 (funcion escalonada) y de S′2.
En este caso, S2 resultara decreciente en un entorno de x = 1, 5. Pero esta
situacion se arregla, en general, modificando los valores de contorno S ′2(xj).
Los intervalos [xj−1, xj] conflictivos, j = 2, 3, · · · , n − 1, seran aquellos en los
que valga
(Q(xj−1)− dj)(Q(xj)− dj) ≥ 0 y ajdj < 0.
Cuando esto ocurra se tomara
S ′2(xj−1) = S ′2(xj) = 2dj.
En los intervalos extremos [x0, x1] y [xn−1, xn] se procede analogamente. Por
ejemplo, si
Q(x0) < 0 < d1 o Q(x0) > 0 > d1,
se tomara
S ′2(x0) = 0.
Si d1 = 0, entonces se tomara S ′2(x0) = S ′2(x1) = 0.
Volviendo a los mismos datos anteriores, la derivada de S2, modificado segun
estas reglas, tiene el siguiente aspecto.
0.5 1 1.5 2 2.5 3
1
2
3
4
5
Figura 12
1 Interpolacion y Aproximacion 17
Ahora S2 resultara un interpolante estrictamente creciente.
A continuacion se da un programa, con Mathematica, que determina el
spline interpolante S2 con un nodo intermedio. Este interpolante preserva el
crecimiento – decrecimiento, ası como la convexidad – concavidad, de los datos.
Este ultimo concepto se refiere a que S ′2 crece y decrece segun el crecimiento –
decrecimiento de la funcion escalonada S ′1, respectivamente.
Clear["Global`*"]; nd = Input[nd; "numero de datos"]; n = nd - 1;
For[j = 0, j <= n, j = j + 1, {x[j] = Input[x[j]], y[j] = Input[y[j]]}];
For[j = 1, j <= n, j = j + 1,
d[j] = (y[j] - y[j - 1])/(x[j] - x[j - 1]); del[j] = (x[j] - x[j - 1])/2];
For[j = 1, j <= n - 1, j = j + 1,
q[j] = d[j] + (d[j + 1] - d[j])*del[j]/(del[j] + del[j + 1])];
q[0] = d[1] - (q[1] - d[1]); q[n] = 2 d[n] - q[n - 1];
For[j = 1, j <= n, j = j + 1, If[(q[j] - d[j])(q[j - 1] - d[j]) >= 0,
a[j] = 2 d[j] - (q[j - 1] + q[j])/2]];
For[j = 1, j <= n, j = j + 1, If[(q[j] - d[j])(q[j - 1] - d[j]) >= 0 && q[j]a[j] < 0, q[j] = 2d[j]; q[j - 1] = 2 d[j]]];
If[q[1] d[1] > 0 && q[0]d[1] < 0, q[0] = 0]; If[ d[1] == 0, q[0] = 0; q[1] = 0];
If[q[n - 1] d[n] > 0 && q[n]d[n] < 0, q[n] = 0];
If[d[n] == 0, q[n - 1]=0; q[n] = 0];
s2[0][x[0]] = y[0];
For[j = 1, j <= n, j = j + 1, If[(q[j] - d[j])(q[j - 1] - d[j]) < 0,
c[j] = 2 del[j](q[j] - d[j])/(q[j] - q[j - 1]);
s2prima[j] = Interpolation[{{x[j - 1], q[j - 1]}, {x[j - 1] + c[j], d[j]}, {x[j], q[j]}}, InterpolationOrder −> 1];
s2[j][x−] = s2[j - 1][x[j - 1]] + Integrate[s2prima[j][t], {t, x[j - 1], x}],
a[j] = 2 d[j] - (q[j - 1] + q[j])/2;
s2prima[j] = Interpolation[{{x[j - 1], q[j - 1]}, {x[j - 1] + del[j], a[j]}, {x[j], q[j]}}, InterpolationOrder −> 1];
s2[j][x−] = s2[j - 1][x[j - 1]] + Integrate[s2prima[j][t], {t, x[j - 1], x}]]];
For[j = 1, j <= n, j = j + 1, p2[j] = Plot[s2[j][x], {x, x[j - 1], x[j]},
DisplayFunction −> Identity]];
tp = Table[{PointSize[.01], Point[{x[j], y[j]}]}, {j, 0, n}];
tg = Table[p2[j], {j, 1, n}];
1 Interpolacion y Aproximacion 18
Show[tg, DisplayFunction −> $DisplayFunction, Prolog −> tp]
Estimacion del error
Daremos ahora, en general, una estimacion del error que se comete con
este metodo de interpolacion. Suponemos que f es dos veces continuamente
diferenciable. Consideremos un intervalo Ij := [xj−1, xj], 1 ≤ j ≤ n. Recorde-
mos que dj =yj−yj−1xj−xj−1
. Por el Teorema del valor medio se deduce que existe
θj ∈ (xj−1, xj) tal que f ′(θj) = dj. Para x ∈ Ij, tenemos que
|f ′(x)− S ′2(x)| ≤ |f ′(x)− dj| + |S ′2(x)− dj|. (3)
Por un lado,
|f ′(x)− dj| = |f ′(x)− f ′(θj)| ≤ ‖f ′′‖h, (4)
donde ‖f ′′‖ = maxx∈[x0,xn] |f ′′(x)| y h = max1≤j≤n |xj − xj−1|. Por otro lado,
ahora haremos una estimacion de |S ′2(x) − dj|. Para el Primer caso se tiene
(ver Figura 7)
|S ′2(x)− dj| ≤ max{|Q(xj)− dj|, |Q(xj−1)− dj|} si 1 ≤ j ≤ n,
donde |Q(x0) − d1| ≤ |Q(x1) − d1| y |Q(xn) − dn| ≤ |Q(xn−1) − dn|. Para
1 ≤ j ≤ n− 1, Q(xj) es un valor comprendido entre dj y dj+1. Como
|dj+1 − dj| = |f ′(θj+1)− f ′(θj)| ≤ 2‖f ′′‖h,
se deduce que
|S ′2(x)− dj| ≤ 2‖f ′′‖h.
Para el Segundo caso solo hay que considerar intervalos Ij con 2 ≤ j ≤ n− 1.
Se tiene que (ver Figura 8)
|aj − dj| =
∣∣∣∣dj − Q(xj−1) + Q(xj)
2
∣∣∣∣ ≤ max{|dj+1 − dj|, |dj − dj−1|}.
Luego
|S ′2(x)− dj| ≤ max{|dj+1 − dj|, |dj − dj−1|}= max{|f ′(θj+1)− f ′(θj)|, |f ′(θj)− f ′(θj−1)|} ≤ 2‖f ′′‖h.
1 Interpolacion y Aproximacion 19
Se deduce de aquı que para todo x en Ij, j = 1, 2, · · · , n, vale siempre que
|S ′2(x)− dj| ≤ 2‖f ′′‖h.
Por lo tanto, aplicando (3) y (4) se concluye que
|f ′(x)− S ′2(x)| ≤ 3‖f ′′‖h para todo x ∈ [x0, xn]. (5)
Finalmente, sea x en [x0, xn]. Luego x esta en algun Ij, j = 1, 2, · · · , n, por lo
que se obtiene
|f (x)− S2(x)| =
∣∣∣∣∣yj +
∫ x
xj
f ′ −(
yj +
∫ x
xj
S ′2
)∣∣∣∣∣ ≤ 3‖f ′′‖h2.
Una conclusion importante de estas dos ultimas estimaciones es que
|f ′ − S ′2| → 0 y |f − S2| → 0 cuando h → 0.
Splines interpolantes cubicos
Consideraremos ahora splines interpolantes, digamos S3, compuestos por poli-
nomios de grado 3 en cada intervalo [xj−1, xj], j = 1, 2, · · · , n. El subir el
grado de estos polinomios de 2 a 3 nos permitira aumentar nuestra exigencia
en cuanto a la suavidad de S3. Concretamente, ahora pediremos que S3 tenga
hasta la segunda derivada continua. Ademas, nos quedaran dos condiciones
libres que usaremos para fijar en x0 y xn valores de contorno que consideremos
apropiados. Usualmente, se establece
S ′′3(x0) = S ′′3(xn) = 0, (6)
o bien condiciones sobre las derivadas S ′3(x0) y S ′3(xn).
Con Mathematica es facil e instructivo hacer un programa para calcular estos
splines cubicos. Por ejemplo, haremos uno para obtener un spline interpolante
S3 que cumpla con (6). Siguiendo con el procedimiento empleado hasta ahora,
hallaremos la derivada segunda S ′′3 y despues integraremos dos veces. El spline
S ′′3 es una poligonal continua. De acuerdo con (6), su restriccion sobre [x0, x1]
1 Interpolacion y Aproximacion 20
es una funcion lineal t 7→ b0 + a1(t − x0), con b0 = 0. Dejaremos variable el
valor de la pendiente a1 y determinaremos m0 de forma tal que
y0 +
∫ x1
x0
(m0 +
∫ x
x0
[b0 + a1(t− x0)] dt
)dx = y1.
Esto da
m0 =y1 − y0 − a1(x1 − x0)
3/6− b0(x1 − x0)2/2
x1 − x0.
Ahora
b1 = b0 + a1(x1 − x0),
m1 = m0 +
∫ x1
x0
a1(t− x0)
y queda determinado un unico valor de pendiente a2 que satisface
y1 +
∫ x2
x1
(m1 +
∫ x
x1
[b1 + a2(t− x1)] dt
)dx = y2.
Esto da
a2 =6(y2 − y1 −m1(x2 − x1)− b1(x2 − x1)
2/2)
(x2 − x1)3.
De esta manera se continua con los restantes intervalos. Las variables aj+1, mj,
j = 0, 1, · · · , n− 1, y bj, j = 1, 2, · · · , n, dependen (linealmente) de la variable
original a1. Cuando se llega al intervalo [xn−1, xn] se debe cumplir la condicion
bn = bn−1 + an(xn− xn−1) = 0, ecuacion lineal de primer grado que determina
el unico valor de a1 que hace cumplir (6). Todos estos calculos se reflejan en el
siguiente programa.
Clear["Global`*"]
nd = Input[nd; "numero de datos"]; n = nd - 1;
For[j = 0, j <= n, j = j + 1, {x[j] = Input[x[j]], y[j] = Input[y[j]]}];
tp = Table[{PointSize[.009], Point[{x[j], y[j]}]}, {j, 0, n}];
a[1] = v; b[0] = 0;
m[0] = (y[1] - y[0] - a[1](x[1] - x[0])3/6 - b[0](x[1] - x[0])2/2)/(x[1] - x[0]);
For[j = 1, j <= n - 1, j = j + 1,
1 Interpolacion y Aproximacion 21
{b [j] = Simplify[b[j - 1]+a[j](x[j] - x[j - 1])],
m[j] = Simplify[m[j - 1] + a[j](x[j] - x[j - 1])2/2 + b[j - 1](x[j] - x[j- 1])],
a[j + 1] = Simplify[6(y[j + 1] - y[j] - m[j](x[j + 1] - x[j]) - b[j](x[j + 1] - x[j])2/2)/(x[j + 1] - x[j])3]}];
sol = Solve[b[n - 1]+a[n](x[n] - x[n - 1]) == 0, v]; v = v /. sol;
For[j = 1, j <= n, j = j + 1,
s3prima[j][u−] = m[j - 1] + Integrate[b[j - 1]+a[j](t - x[j -1]),{t, x[j - 1], u}];
s3[j][x−] = y[j - 1] + Integrate[s3prima[j][u], {u, x[j - 1], x}];
p[j] = Plot[s3[j][x], {x, x[j - 1], x[j]}, DisplayFunction −> Identity]];
tg = Table[p[j], {j, 1, n}];
Show[tg, DisplayFunction −> $DisplayFunction, Prolog −> tp]
Aplicaremos este programa para calcular el spline cubico interpolante S3 para
los siguientes datos. Ellos corresponden a un experimento real que mide la
energıa electronica molecular y, en Kcal, segun la rotacion x, en grados, de un
enlace sencillo de dos anillos.
(0, 0) (10, 0.1496) (20, 0.5941) (30, 1.3178) (40, 2.2762)
(50, 3.3848) (60, 4.5185) (70, 5.5235) (80, 6.2452) (90, 6.5766)
(100, 6.5123) (110, 6.1449) (120, 5.6123) (130, 5.0495) (140, 4.5677)
(150, 4.2418) (160, 4.0933) (170, 4.0754) (180, 4.0892)
Se obtiene la siguiente grafica.
25 50 75 100 125 150 175
1
2
3
4
5
6
Figura 13
En este ejemplo, S3 preserva tanto el crecimiento – decrecimiento, como la
convexidad – concavidad, de los datos. Sin embargo, puede haber casos donde
1 Interpolacion y Aproximacion 22
esto no sea ası. Si ocurre esta situacion, habra que introducir nodos intermedios,
como se hizo en el caso del spline interpolante cuadratico. Ahora sera necesario
considerar dos nodos intermedios, en lugar de uno, para conservar ademas la
continuidad del spline cubico y de sus dos primeras derivadas. Los detalles del
calculo de un interpolante de este tipo pueden verse en [4]. Suponiendo que
f es 3 veces continuamente diferenciable, en este artıculo tambien se da una
estimacion del error, a saber
|f − S3| ≤ 19, 25 ‖f ′′′‖h3.
En la Figura 14 se muestra el spline cubico interpolante que satisface (6).
Para los mismos datos, en la Figura 15 se ve la grafica de un spline cubico
interpolante, con dos nodos intermedios, que preserva la forma de los datos.
0.5 1 1.5 2 2.5 3
5
10
15
20
Figura 14
0.5 1 1.5 2 2.5 3
5
10
15
20
Figura 15
1.3 Mejor aproximacion de funciones
Las funciones interpolantes consideradas en las anteriores secciones coinci-
den con la funcion de la cual provienen los datos, digamos f , en los puntos
x0, x1, · · · , xn. Sin embargo, hemos visto que este hecho no implica necesaria-
mente que aquellas esten cerca de f en el intervalo [x0, xn]. Por lo tanto, si esto
ultimo es nuestro objetivo, una idea alternativa consiste en seleccionar, dentro
de una clase de funciones aproximantes, a aquella que este “mas proxima” a f .
Esto nos obliga a considerar una medida de proximidad, en el intervalo [x0, xn],
entre f y la clase de funciones aproximantes.
Supondremos que f es continua en [x0, xn], y llamemos Pn a la clase de los
1 Interpolacion y Aproximacion 23
polinomios de grado a lo sumo n restringidos en [x0, xn].
Aproximacion uniforme
Se puede probar que existe un unico polinomio P en Pn que satisface
maxx∈[x0,xn]
|f − P | ≤ maxx∈[x0,xn]
|f −Q| para todo Q ∈ Pn.
Este polinomio P se llama una mejor aproximacion uniforme de f en Pn.
Un inconveniente de este metodo de aproximacion es la dificultad del calculo
de P . Se sabe que existen n + 1 puntos z0 < z1 < · · · < zn en (x0, xn) tales
que
|f (zi)− P (zi)| = maxx∈[x0,xn]
|f − P |, i = 0, 1, · · · , n (7)
y
(f (zi)− P (zi))(f (zi+1)− P (zi+1)) < 0, i = 0, 1, · · · , n− 1. (8)
Y recıprocamente, si existen n+1 puntos zi en (x0, xn) que hacen valer las dos
condiciones anteriores, entonces P es una mejor aproximacion uniforme de f
en Pn. Pero esta caracterizacion no es nada constructiva. Por este motivo, es
usual el empleo de otros metodos de mejor aproximacion.
Aproximacion por p – normas
Sea p ≥ 1. Existe un unico polinomio P [p] en Pn, que llamamos mejor p –
aproximacion de f en Pn, que satisface∫ xn
x0
|f − P [p]| ≤∫ xn
x0
|f −Q| para todo Q ∈ Pn.
Para p > 1 se tiene la siguiente expresion, que caracteriza a P [p].∫ xn
x0
|f (x)−P [p](x)|p−1 sig (f (x)−P [p](x)) xi dx = 0, i = 0, 1, · · · , n. (9)
Para p = 1 la formula anterior es valida cuando P [p] coincide con f solo en un
conjunto de medida nula. Para p = 2, (9) se simplifica notablemente:∫ xn
x0
(f (x)− P [2](x)) xi dx = 0, i = 0, 1, · · · , n.
1 Interpolacion y Aproximacion 24
De aquı, si se escribe
P [2](x) = a0[2] + a1[2]x + · · · + an[2]xn,
la linealidad de la integral nos permite obtener una expresion explıcita para los
coeficientes a0[2], a1[2], · · · , an[2] resolviendo el siguiente sistema lineal de n+1
ecuaciones con n + 1 incognitas:
a0[2]
∫ xn
x0
xi dx+a1[2]
∫ xn
x0
xi+1 dx+· · ·+an[2]
∫ xn
x0
xi+n dx =
∫ xn
x0
f (x) xi dx,
i = 0, 1, · · · , n. Por esta relativa facilidad de resolucion, este metodo, llamado
aproximacion por mınimos cuadrados, esta muy difundido en las aplicaciones.
Mejor aproximacion e interpolacion
Es un hecho logico que un polinomio P de mejor aproximacion de una funcion
f sea tambien un polinomio interpolador de f , es decir, f−P debe anularse en
algunos puntos del intervalo [x0, xn]. En el caso de la mejor aproximacion uni-
forme, es una consecuencia inmediata de (7) y (8) (y del Teorema de Bolzano)
que f − P se anula en, al menos, n + 1 puntos distintos del intervalo (x0, xn).
En el caso de la mejor p – aproximacion, este hecho es tambien cierto.
En efecto, si p > 1 observar que (9) es equivalente a∫ xn
x0
|f (x)− P [p](x)|p−1 sig (f (x)− P [p](x)) Q(x) dx = 0 (10)
para todo Q ∈ Pn. Si hubiera exactamente r puntos ci en (x0, xn) tales que
f (ci)− P [p](ci) = 0, con r ≤ n, entonces Q(x) = (x− c1)(x− c2) · · · (x− cr)
esta en Pn y satisface que
sig (f (x)− P [p](x))Q(x) > 0
para todo x en [x0, xn] distinto de cualquier ci, o bien
sig (f (x)− P [p](x))Q(x) < 0
para todo x en [x0, xn] distinto de cualquier ci. Esto contradice (10).
1 Interpolacion y Aproximacion 25
Si p = 1 y f −P [1] no se anula en un conjunto de medida positiva, entonces
el argumento anterior es aplicable tambien aquı. Por lo tanto, en cualquier caso
f − P [1] se anula en al menos n + 1 puntos distintos del intervalo (x0, xn).
Se finaliza esta unidad con una observacion. Si f es una funcion n – veces
diferenciable en el intervalo [x0, xn], entonces Pn, el polinomio de Taylor de f de
grado n, desarrollado en un punto c ∈ [x0, xn], es tambien un polinomio inter-
polador de f de orden n+1. Pierde su capacidad de interpolar en n+1 puntos
distintos a cambio de coincidir en c con f en sus derivadas de orden 0, 1, · · · , n.
Es decir, c es un cero de multiplicidad, u orden, n + 1. Esta propiedad mas
debil de interpolacon puede conseguirse, a su vez, con una mınima condicion de
aproximacion para un polinomio P , muy razonable de pedir. Es la siguiente:
No debe existir ningun Q en Pn, distinto de P , que satisfaga
|f (x)−Q(x)| ≤ |f (x)− P (x)| para todo x ∈ [x0, xn].
En efecto, puede probarse que la propiedad anterior equivale a que f−P tenga
n + 1 ceros, pero no necesariamente distintos, sino contando su multiplicidad.
¿Y si la funcion f es solo continua? En este caso la equivalencia anterior es
tambien valida con una adecuada definicion de multiplicidad de un cero para
una funcion continua. Los detalles de esta demostracion pueden verse en [5].
Cabe destacar que tanto el polinomio de mejor aproximacion uniforme, como
el de mejor p – aproximacion, cumplen con esa propiedad.
2 Derivacion e Integracion numericas
En esta unidad veremos metodos aproximados para calcular derivadas e inte-
grales definidas de funciones. En general, puede decirse que esto se hace nece-
sario cuando solo se conoce una expresion empırica, o parcial, de la funcion, o
bien cuando el proceso exacto de derivacion o integracion se vuelve, por algun
motivo, complicado. Los metodos aproximados se basan, en principio, en la
interpolacion de la correspondiente funcion, tema visto en la anterior unidad.
2.1 Derivacion numerica
Aquı el problema es el siguiente. Dada una funcion f , derivable en el intervalo
[x0, xn], n ∈ N, y conociendo de f solo los valores yj = f (xj) que toma en los
n + 1 puntos
x0 < x1 < · · · < xn,
debemos aproximar el valor de f ′(xi) para algun i = 0, 1, · · · , n. Como es lo
usual en estos casos, conviene estimar una cota del error que se comete.
El metodo mas simple y directo consiste en hallar Pn, el unico polinomio en
Pn, interpolador de f en los puntos x0, x1, · · · , xn, y estimar f ′(xi) mediante
P ′n(xi). Si se supone que f es n + 1 – veces diferenciable, recordemos que
f (x) = Pn(x) + η(x),
donde η(x) =f (n+1)(c(x))
(n + 1)!
n∏j=0
(x− xj), con x0 < c(x) < xn. Luego
f ′(xi) = P ′n(xi) + η′(xi),
donde η′(xi) =f (n+1)(c(xi))
(n + 1)!
∏
j 6=i
(xi − xj). A raız de la presencia de la pro-
ductoria en la expresion del error, tenemos que la cota del error es mayor para
aquellos puntos xi que ocupan una posicion extrema en el intervalo [x0, xn].
Esto es logico, dado que la derivada depende del comportamiento de f tanto
26
2 Derivacion e Integracion numericas 27
a la derecha como a la izquierda de xi. Por lo tanto es conveniente tener la
misma cantidad de informacion de f a ambos lados de xi.
Para comprobar lo que se esta diciendo conviene volver al ejemplo de Runge
y a la Figura 1, que muestra el polinomio interpolador P10 para 11 puntos
equidistantes y para datos provenientes de la funcion f : [−5, 5] 7→ R, f (x) =1
x2+1. Para este ejemplo, en la figura siguiente vemos las graficas de f ′, en rojo,
y de P ′10, en azul.
Clear["Global`*"]
For[j = 0, j <= 10, j = j + 1, x[j] = -5 + j];
f[x−] = 1/(x2 + 1);
t = Table[{x[j], f[x[j]]}, {j, 0, 10}];
p[x−] = InterpolatingPolynomial[t, x];
Plot[{f ’[x], p’[x]}, {x, -5, 5}, PlotRange −> {-5, 5},
PlotStyle −> {Hue[0], Hue[.7]}, AxesOrigin −> {-5, -5}, AspectRatio −> 1]
-4 -2 0 2 4
-4
-2
0
2
4
Figura 16
Se observa que hay zonas en los extremos del intervalo donde la diferencia entre
f y P10 es notable. Se deduce que si el objetivo es evaluar f ′ en un punto xi
2 Derivacion e Integracion numericas 28
situado en una zona extrema del intervalo, tendremos que elegir los puntos
xj adecuadamente de modo que xi quede en una posicion central respecto de
ellos. Pero este procedimiento puede no ser posible en algunas situaciones, y
aun siendo posible, obliga a cambiar los puntos xj segun el valor de xi. En estos
casos, el metodo que veremos a continuacion funciona mejor, en el sentido de
que el error es homogeneo en todo el intervalo [x0, xn], y por tanto permite
dejar fijos los puntos de interpolacion.
Se trata de emplear el spline interpolante cuadratico S2, con un nodo inter-
medio, construido en la Seccion 1.2. Como muestra la desigualdad de (5), S ′2converge uniformemente a f ′ en [x0, xn]. De esta manera, aproximaremos f ′(x)
mediante S ′2(x) para cualquier x en [x0, xn]. Para el mismo ejemplo anterior,
la siguiente figura muestra a f ′, en rojo, y a S ′2, en azul.
-4 -2 0 2 4
-0.75
-0.5
-0.25
0
0.25
0.5
0.75
Figura 17
2.2 Integracion numerica
En esta seccion veremos metodos aproximados para calcular∫ xn
x0
f (x) dx.
2 Derivacion e Integracion numericas 29
Es necesario aplicar un metodo aproximado cada vez que el procedimiento
exacto, mediante la regla de Barrow, no funciona. A su vez, esto puede deberse
a las siguientes causas:
• No tenemos informacion completa del integrando f . Por ejemplo, podemos
conocer de f solo una tabla de valores.
• Aun conociendo la expresion analıtica de f , puede ser muy complicado,
sino imposible, obtener una primitiva de f que permita la aplicacion de la
regla de Barrow.
Como ocurre cada vez que se emplean metodos aproximados, es muy conve-
niente tener una estimacion del error que se comete. Como en el caso de la
derivacion numerica, vamos a suponer que conocemos de f una tabla de valores
yj = f (xj), x0 < x1 < · · ·xn.
Integracion de funciones interpolantes
Una primera regla de integracion aproximada consiste en integrar una funcion
interpolante de f en los puntos xj. Por ejemplo, la integracion del spline
interpolante S1, introducido en la Seccion 1.2, conocida como regla del trapecio.
Se tiene que∫ xn
x0
S1 =
n∑j=1
∫ xj
xj−1
S1 =1
2
n∑j=1
(xj − xj−1)(yj−1 + yj).
Si ahora suponemos que xj − xj−1 = h para todo j = 1, 2, · · · , n, entonces
queda ∫ xn
x0
S1 =h
2(y0 + 2y1 + 2y2 + · · · + 2yn−1 + yn).
Para estimar el error, observar que restringido en cada intervalo [xj−1, xj], S1
es el unico polinomio interpolante de f en P1. Por tanto se tiene (ver primera
pagina de esta unidad)
f (x) = S1(x) +f ′′(c(x))
2(x− xj−1)(x− xj),
2 Derivacion e Integracion numericas 30
donde xj−1 < c(x) < xj. Luego∫ xj
xj−1
f =
∫ xj
xj−1
S1 +
∫ xj
xj−1
f ′′(c(x))
2(x− xj−1)(x− xj).
Como (x− xj−1)(x− xj) no cambia de signo en [xj−1, xj], se deduce que∣∣∣∣∣∫ xj
xj−1
f ′′(c(x))
2(x− xj−1)(x− xj)
∣∣∣∣∣ ≤‖f ′′‖
2
∣∣∣∣∣∫ xj
xj−1
(x− xj−1)(x− xj)
∣∣∣∣∣
=‖f ′′‖
2
(xj − xj−1)3
6=‖f ′′‖h3
12.
Sumando estas estimaciones sobre los n intervalos [xj−1, xj], se concluye que∣∣∣∣∫ xn
x0
f −∫ xn
x0
S1
∣∣∣∣ ≤n‖f ′′‖h3
12=‖f ′′‖h2(xn − x0)
12.
La cota del error de esta regla de integracion es del orden de h2.
Regla de Simpson
Consiste en considerar tres puntos consecutivos xj−1, xj, xj+1 y calcular el
(unico) polinomio interpolante de f en P2. De esta manera, comenzamos con
x0, x1, x2, seguimos con x2, x3, x4, y ası sucesivamente hasta xn−2, xn−1, xn.
Para evitar una superposicion de intervalos, es necesario y suficiente que n sea
par, es decir, tener un numero impar de puntos. Se construye ası un spline
interpolante de f en [x0, xn], digamos T2, compuesto por polinomios de grado
2, y se estima∫ xn
x0f mediante
∫ xn
x0
T2 =
∫ x2
x0
T2 +
∫ x4
x2
T2 + · · · +∫ xn
xn−2
T2.
Observar que en la suma de integrales de arriba hay n/2 sumandos. Calculamos
ahora, genericamente, uno cualquiera de ellos. Lo hacemos con Mathematica,
para el primero de ellos, suponiendo que x1 = x0 + h y x2 = x0 + 2h.
Integrate[InterpolatingPolynomial[{{x0, y0}, {x0 + h, y1}, {x0 + 2h, y2}}, x], {x, x0, x0 + 2h}]
2 Derivacion e Integracion numericas 31
Se obtiene ∫ x2
x0
T2 =h
3(y0 + 4y1 + y2).
Luego, si suponemos que xj − xj−1 = h para j = 1, 2, · · · , n, sigue que∫ xn
x0
T2 =h
3(y0 + 4y1 + 2y2 + 4y3 + 2y4 + · · · + 2yn−2 + 4yn−1 + yn).
Estudiemos ahora el error que se produce con la regla de Simpson. Se tiene
que ∫ x2
x0
f =
∫ x2
x0
T2 +
∫ x2
x0
f ′′′(c(x))
6(x− x0)(x− x1)(x− x2).
En principio, no es difıcil probar que de esta igualdad se consigue una cota
de error del orden de h3. Sin embargo, cuando f es 4 veces continuamente
diferenciable es posible afinar este orden y obtener una cota de error del orden
de h4. A continuacion explicamos la forma de lograr esto.
Vamos a considerar el (unico) polinomio interpolante de f en P3, digamos T3,
que coincide con f en x0, x1 y x2, y ademas coincide con f ′ en x1. Probaremos
mas adelante que∫ x2
x0
f =
∫ x2
x0
T3 +
∫ x2
x0
f (4)(c(x))
24(x− x0)(x− x1)
2(x− x2). (11)
Calculemos con Mathematica la primera integral del lado derecho de (11).
Integrate[InterpolatingPolynomial[{{x0, y0}, {x0 + h, {y1, y1prima}}, {x0 + 2h, y2}}, x], {x, x0, x0 + 2h}]
¡Sorpresa! El resultado no depende de y1prima = f ′(x1) y coincide exactamente
con ∫ x2
x0
T2 =h
3(y0 + 4y1 + y2).
La importante consecuencia de esta coincidencia es que∫ xn
x0T2 produce el mismo
error que∫ xn
x0T3. Entonces estimemos una cota de este error a partir de la
segunda integral del lado derecho de (11). Como (x− x0)(x− x1)2(x− x2) no
2 Derivacion e Integracion numericas 32
cambia de signo, se deduce que∣∣∣∣∫ x2
x0
f (4)(c(x))
24(x− x0)(x− x1)
2(x− x2)
∣∣∣∣
≤ ‖f (4)‖24
∣∣∣∣∫ x2
x0
(x− x0)(x− x1)2(x− x2)
∣∣∣∣ =‖f (4)‖
24
4h5
15=‖f (4)‖h5
90.
Sumando estas estimaciones sobre los n/2 intervalos
[x0, x2], [x2, x4], · · · , [xn−2, xn],
se concluye que∣∣∣∣∫ xn
x0
f −∫ xn
x0
T2
∣∣∣∣ ≤‖f (4)‖h4(xn − x0)
180.
La cota del error es en efecto del orden de h4. La obtencion de este orden,
superior al esperado y conseguido sin esfuerzo adicional sobre la regla del
trapecio, hace que la regla de Simpson sea muy empleada en las aplicaciones.
Por otra parte, no hay que olvidar que aquı hace falta la continuidad de la
cuarta derivada y — requisito de menor importancia — el numero de puntos
de interpolacion debe ser impar.
La demostracion de la formula (11) es similar a la obtencion de la estimacion
del error del polinomio interpolador Pn, al comienzo de la Seccion 1.1. Para
cada x en [x0, x2] distinto de x0, de x1 y de x2, consideremos la funcion F3 :
[x0, x2] 7→ R, dada por
F3(t) = f (t)− T3(t)− f (x)− T3(x)
(x− x0)(x− x1)2(x− x2)(t− x0)(t− x1)
2(t− x2).
Tenemos que F3(x) = F3(x0) = F3(x1) = F ′3(x1) = F3(x2) = 0. Luego F ′
3 se
anula en x1 y ademas, por el Teorema de Rolle, en otros tres puntos distintos
entre sı. De aquı, y por el mismo motivo, F ′′3 se anula en tres puntos, F ′′′
3 en
dos, y por ultimo F(4)3 se anula en un punto c(x), x0 < c(x) < x2. Si ahora
derivamos cuatro veces la expresion de arriba de F3(t), queda
F(4)3 (t) = f (4)(t)− f (x)− T3(x)
(x− x0)(x− x1)2(x− x2)24.
2 Derivacion e Integracion numericas 33
Evaluando en t = c(x), sigue que
0 = f (4)(c(x))− f (x)− T3(x)
(x− x0)(x− x1)2(x− x2)24,
y usando la linealidad de la integral se deduce inmediatamente (11).
Ejemplo
Consideremos la funcion f : [−1, 1] 7→ R, f (x) = 11+x2 . En este caso
es posible usar la regla de Barrow y calcular exactamente∫ 1
−1 f mediante
2 arctg (1) = π/2. No obstante, aplicaremos las reglas del trapecio y Simp-
son para estimar analıtica y graficamente los errores que se cometen con ambos
metodos. Como puntos de interpolacion, usamos cinco puntos equidistantes,
con x0 = −1 y x4 = 1. Se tiene que∫ 1
−1
S1 = 1, 55 y
∫ 1
−1
T2 = 1, 56667.
Por otra parte,∫ 1
−1 f ∼= 1, 57080, con cinco decimales exactos. En las figuras 18
y 19 se muestra la grafica de f , en rojo, y ademas, respectivamente, las graficas
de S1 y T2, en azul.
f[x−] = 1/(1 + x2);
tp = Table[{PointSize[.01], Point[{i, f[i]}]}, {i, -1, 1, .5}];
s1 = Interpolation[Table[{i, f[i]}, {i, -1, 1, .5}], InterpolationOrder −> 1];
Show[Plot[f[x], {x, -1, 1}, DisplayFunction −> Identity, PlotStyle −> Hue[0]],
Plot[s1[x], {x, -1, 1}, DisplayFunction −> Identity, PlotStyle −> Hue[.7]],
DisplayFunction −> $DisplayFunction, AxesOrigin −> {0, 0.5},
Prolog −> tp]
2 Derivacion e Integracion numericas 34
-1 -0.5 0.5 1
0.6
0.7
0.8
0.9
1
Figura 18
f[x−] = 1/(1 + x2);
tp = Table[{PointSize[.01], Point[{i, f[i]}]}, {i, -1, 1, .5}];
t21[x−] = InterpolatingPolynomial[Table[{i, f[i]}, {i, -1, 0, .5}], x];
t22[x−] = InterpolatingPolynomial[Table[{i, f[i]}, {i, 0, 1, .5}], x];
t2[x−] = Which[-1 <= x <= 0, t21[x], 0 <= x <= 1, t22[x]];
Show[Plot[f[x], {x, -1, 1}, DisplayFunction −> Identity, PlotStyle −> Hue[0]], Plot[t2[x], {x, -1, 1},
DisplayFunction −> Identity, PlotStyle −> Hue[.7]], DisplayFunction −> $DisplayFunction, AxesOrigin −>
{0, 0.5}, Prolog −> tp]
-1 -0.5 0.5 1
0.6
0.7
0.8
0.9
1
Figura 19
2 Derivacion e Integracion numericas 35
Formulas de cuadratura
Las dos reglas vistas en el anterior apartado, la del trapecio y la de Simpson, se
basan en aproximar la funcion f mediante un spline interpolante. Es un hecho
cierto que si este interpolante esta proximo a f , entonces tambien la integral
definida del interpolante estara cerca de la integral definida de la funcion. Pero
la afirmacion recıproca no es en general verdadera. En efecto, por motivo de
compensacion de areas puede ocurrir que dos integrales definidas de sendas fun-
ciones, muy distantes entre sı, tengan valores proximos, o incluso sean iguales.
Este hecho tiene que ver, precisamente, con la situacion que se presenta en la
regla de Simpson, a saber, que a pesar de que estamos aproximando f por
trozos de polinomios en P2, el error que se comete depende directamente de
f (4), y por tanto la regla es exacta si f es un polinomio en P3. Comprobemos
esto con un sencillo ejemplo. Suponiendo que quisieramos aproximar∫ 1
−1
f (x) dx, f (x) = (x + 1)x(x− 1),
mediante la regla de Simpson basada en los puntos −1, 0 y 1, tendrıamos que
T2, en este caso en P2, es el polinomio nulo, que no puede considerarse una
buena aproximacion de f . Sin embargo,∫ 1
−1
T2 =
∫ 1
−1
(x + 1)x(x− 1) dx = 0.
Esta discusion muestra que los fundamentos de las reglas de cuadratura,
nombre con el que se conoce usualmente a los metodos de integracion nume-
rica, no descansan exclusivamente en la busqueda de una mejor aproximacion
de la funcion f , por lo que es un tema que merece una atencion independiente
de esa cuestion. En este aspecto, cabe destacar que la teorıa de cuadratura
numerica tiene un desarrollo importante ya a partir de la segunda mitad del
siglo XVII, con observaciones debidas a Isaac Newton, y se mantiene hasta el
presente.
Las formulas deducidas de las reglas del trapecio y de Simpson tienen la
2 Derivacion e Integracion numericas 36
forma siguiente: ∫ xn
x0
f =
n∑j=0
wjf (xj) + en(f ),
donde los pesos wj son numeros que no dependen de f . Es posible entonces
pensar en darle a esta formula un caracter mas general. Mas precisamente,
vamos a considerar la expresion∫ b
a
f =
n∑j=0
wjf (xj) + en(f ), (12)
donde ahora
a ≤ x0 < x1 < · · · < xn ≤ b,
y donde los pesos wj, que no dependeran de f , deben ser elegidos de manera
que (12) garantice una buena aproximacion de∫ b
a f . Es obvio que esta eleccion
debe obedecer a algun criterio que fijemos y que nos parezca razonable. Por
ejemplo, el criterio de que la formula (12) sea exacta, es decir, en(f ) = 0,
cuando f es cualquier polinomio en Pn. Recordemos la forma de Lagrange
del unico polinomio interpolador de una funcion f , digamos Pn, en los puntos
x0 < x1 < · · · < xn.
Pn =
n∑j=0
f (xj)Lj(x),
donde Lj(x) = Lj(x; x0, x1, · · · , xn) =
n∏i=0i6=j
x− xi
xj − xi. Cuando f es un polinomio
en Pn, coincide con su polinomio interpolador. Luego, en este caso,∫ b
a
f =
∫ b
a
Pn =
n∑j=0
wjf (xj) =
n∑j=0
wjPn(xj), (13)
con
wj = wj(a, x0, x1, · · · , xn, b) =
∫ b
a
Lj(x) dx. (14)
Se desprende de aquı que cuando f es un polinomio en Pn, la formula (12)
es exacta si los pesos estan dados por (14). Recıprocamente, si (12) es exacta
2 Derivacion e Integracion numericas 37
cuando f es un polinomio en Pn, entonces si aplicamos (13) a cada uno de
los n + 1 polinomios Lj(x), j = 0, 1, · · · , n, se deduce facilmente (14). En
conclusion, la formula (12) sera exacta para cualquier f en Pn si y solo si los
pesos son los dados por (14).
Formula de Newton – Cotes
La formula de Newton – Cotes es la estimacion de∫ b
a f mediante la formula
(12), con los pesos wj dados por (14). Por la segunda igualdad en (13), no es
por tanto otra cosa que la estimacion de∫ b
a f mediante∫ b
a Pn, la integral del
unico polinomio interpolador en Pn de la funcion f en los puntos x0, x1, · · · , xn.
Cuando a = x0, b = xn y los puntos xj estan situados en forma equidis-
tante, el programa Mathematica nos permite hallar, para cada n, el valor de
w0, w1 · · · , wn, ası como una cota del error en(f ). Para ello debe cargarse el
siguiente paquete.
<<NumericalMath`NewtonCotes`
Por ejemplo, el siguiente comando obtiene la 5-upla (w0, w1, w2, w3, w4) para
n + 1 = 5.
NewtonCotesWeights[5, x0, x4]
Ellos sonx4 − x0
90(7, 32, 12, 32, 7),
de modo que∫ x4
x0
P4 =x4 − x0
90(7P4(x0) + 32P4(x1) + 12P4(x2) + 32P4(x3) + 7P4(x4)).
La cota de error es
Simplify[NewtonCotesError[5, f, x0, x4]]
(x4 − x0)7‖f (6)‖
1935360=
8h7‖f (6)‖945
,
2 Derivacion e Integracion numericas 38
donde h = x1 − x0 = x4−x04 .
Formula de Gauss
En realidad, la importancia de la regla de cuadratura dada por la formula
(12) no ha surgido aun hasta este punto. En efecto, hasta ahora la regla solo
nos garantiza que (12) es exacta para funciones f en Pn, lo que equivale, como
hemos visto, a interpolar f mediante polinomios en Pn. Ahora bien, dado que
tenemos libertad para fijar la posicion de los n+1 puntos xj, cabe preguntarse si
podremos usar esta libertad para conseguir que (12) sea exacta para polinomios
de grado mas alto que n. Veremos a continuacion que la respuesta es afirmativa.
Concretamente, es posible hallar una determinada posicion de los puntos xj de
manera que (12), con pesos wj dados por (14), sea exacta para funciones f en
P2n+1. La formula ası obtenida es la llamada regla de cuadratura de Gauss.
Ella se fundamenta en el siguiente teorema. Sea
Gn+1(x) = Gn+1(x; x0, x1, · · · , xn) =
n∏j=0
(x− xj).
Teorema de Gauss. Dado un entero k, 1 ≤ k ≤ n + 1, la formula de
cuadratura (12) es exacta para cualquier funcion f en Pn+k si y solo si
valen las dos siguientes condiciones:
(a) Los pesos wj vienen dados por (14).
(b) La funcion Gn+1(x) satisface que∫ b
a
Gn+1(x)Qk−1(x) dx = 0 para todo Qk−1 ∈ Pk−1.
Se puede probar que siempre existe una determinada posicion de los puntos
x0, x1, · · · , xn de modo que (b) sea valido. En particular, para n par, k = 1
y una posicion equidistante de los puntos xj, con x0 = a y xn = b, vale que
Gn+1 es una funcion impar respecto del punto medio xn/2 = x0+xn2 , por lo que
∫ xn
x0
Gn+1(x) dx = 0.
2 Derivacion e Integracion numericas 39
Se deduce que en este caso la formula (12), con pesos dados por (14), es exacta
para f en Pn+1. Es decir, se gana un orden de exactitud. Esto es lo que
ocurre, por ejemplo, en la regla de Simpson, que — recordemos — se basa en
la interpolacion de f en tres puntos equidistantes mediante polinomios en P2.
La formula de cuadratura de Gauss resulta de aplicar este teorema para
k = n + 1. En este caso destacamos las siguientes observaciones:
• Si aplicamos (b) del Teorema de Gauss a Qn = 1, x, x2, · · · , xn, se obtiene
un sistema lineal de n+1 ecuaciones con las n+1 incognitas x0, x1, · · · , xn.
Basandose en propiedades de polinomios ortogonales, se puede probar que
en efecto la solucion se compone de n + 1 numeros distintos contenidos en
el intervalo abierto (a, b). Reordenando estos numeros si es necesario se
obtiene que
a < x0 < x1 < · · · < xn < b.
• Los pesos w0, w1, · · · , wn, obtenidos segun (14) con los puntos de interpo-
lacion anteriores, son todos positivos. Esto puede demostrarse ası:
0 <
∫ b
a
L2j =
n∑
k=0
wkL2j(xk) = wj,
donde la desigualdad es evidente, la segunda igualdad sigue inmediata-
mente de la forma de L2j , y la primera igualdad es consecuencia de que L2
j
esta en P2n y de que (12) es exacta para polinomios en P2n+1.
• Si f es continua en [a, b], entonces en(f ) → 0 cuando n → ∞. Para
demostrar esto, notemos primero que aplicando (12) al polinomio unidad,
sigue que∑n
j=0 wj = b − a. Por el Teorema de Weierstrass, existe una
sucesion de polinomios Qn ∈ Pn tales que
‖f −Qn‖ → 0 para n →∞.
Como en(Qn) = 0, se tiene que
|en(f )| = |en(f )− en(Qn)| = |en(f −Qn)|
2 Derivacion e Integracion numericas 40
=
∣∣∣∣∣∣
∫ b
a
(f (x)−Qn(x)) dx−n∑
j=0
wj(f (xj)−Qn(xj))
∣∣∣∣∣∣
≤∫ b
a
‖f −Qn‖ +
∣∣∣∣∣∣
n∑j=0
wj(f (xj)−Qn(xj))
∣∣∣∣∣∣
≤ (b− a)‖f −Qn‖ + ‖f −Qn‖n∑
j=0
wj
= 2(b− a)‖f −Qn‖.Esto termina la demostracion. Observar que en la segunda desigualdad
se ha usado que los pesos wj son todos positivos. Esta prueba no serıa
aplicable para la formula de Newton – Cotes, donde esa propiedad podrıa
no darse.
Con Mathematica es posible obtener los puntos de interpolacion xj y los
pesos wj para la formula de Gauss, ademas de una estimacion del error en(f ).
Para ello debe cargarse el siguiente paquete.
<<NumericalMath`GaussianQuadrature`
Por ejemplo, aquı tenemos los cinco pares (xj, wj) para el intervalo [a, b] y
n + 1 = 5.
GaussianQuadratureWeights[5, a, b]
(0, 953090a + 0, 046910b , 0, 118463(b− a))
(0, 769235a + 0, 230765b , 0, 239314(b− a))
(a/2 + b/2 , 0, 284444(b− a))
(0, 230765a + 0, 769235b , 0, 239314(b− a))
(0, 046910a + 0, 953090b , 0, 118463(b− a)).
Se observa que xj es una combinacion convexa de a y b. Por errores de redondeo,
la suma de todos los pesos no da b−a, como debiera ser, sino 0, 999998(b−a).
2 Derivacion e Integracion numericas 41
La cota del error es
GaussianQuadratureError[5, f, a, b]
3, 944965× 10−13(b− a)11‖f (10)‖.
Ejemplo
Vamos a calcular ∫ 5
−5
f (x) dx,
con f (x) =1
1 + x2, usando los cuatro metodos vistos en esta unidad, todos
ellos para n = 20. Sabemos que el valor exacto de esa integral es
2 arctg 5 ∼= 2, 7468,
con cuatro decimales exactos.
Regla del trapecio
f[x−] = 1/(1 + x2);
intp = Interpolation[Table[{i, f[i]}, {i, -5, 5, .5}], InterpolationOrder −> 1];
Integrate[intp[x], {x, -5, 5}]
2, 7462
Regla de Simpson
f[x−] = 1/(1 + x2);
For[i = 1, i <= 10, i = i + 1, t2[i][x−] = InterpolatingPolynomial[Table[{j, f[j]}, {j, i - 6, i - 5, .5}], x]];
For[i = 1, i <= 10, i = i + 1, integral[i] = Integrate[t2[i][x], {x, i - 6, i - 5}]];
Sum[integral[i], {i, 1, 10}]
2, 7429
Newton – Cotes (puntos de interpolacion equidistantes)
2 Derivacion e Integracion numericas 42
Integrate[InterpolatingPolynomial[Table[{i, f[i]}, {i, -5, 5, .5}], x], {x, -5, 5}]
−26, 8496
El error es muy grande. Nos convencemos cuando observamos la grafica del
polinomio interpolador P20
intnewton[x−] = InterpolatingPolynomial[Table[{i, f[i]}, {i, -5, 5, .5}], x];
Plot[intnewton[x], {x, -5, 5}, PlotRange −> {-60, 5}]
-4 -2 2 4
-60
-50
-40
-30
-20
-10
Figura 20
Gauss
<<NumericalMath`GaussianQuadrature`;
f[x−] = 1/(1 + x2);
xjywj = GaussianQuadratureWeights[21, -5, 5];
Sum[xjywj[[i]][[2]] f[xjywj[[i]][[1]]], {i, 1, 21}]
2, 7480
Aquı tenemos la grafica del polinomio interpolador de f en P20, con puntos de
interpolacion basados en la regla de cuadratura de Gauss.
intgauss[x− ] = InterpolatingPolynomial[Table[{xjywj[[i]][[1]], f[xjywj[[i]][[1]]]}, {i, 1, 21}], x];
datos = Table[{PointSize[.008], Point[{xjywj[[i]][[1]], f[xjywj[[i]][[1]]]}]}, {i, 1, 21}];
Plot[intgauss[x], {x, -5, 5}, PlotRange −> {0, 1.01}, Prolog −> datos]
2 Derivacion e Integracion numericas 43
-4 -2 2 4
0.2
0.4
0.6
0.8
1
Figura 21
Por ultimo, cabe mencionar que Mathematica utiliza para el calculo de
integrales definidas que no pueden resolverse exactamente, es decir, mediante
el comando NIntegrate, una variante mejorada de la regla de cuadratura de
Gauss.
3 Ecuaciones no lineales
3.1 Ecuaciones en una variable
Si f es una funcion continua definida en un intervalo de la recta, se presenta
en muchas situaciones la cuestion de encontrar ceros de f , es decir, valores de
x que cumplan con la ecuacion
f (x) = 0.
De un tal x se dice tambien que es una raız de esa ecuacion. Si f es un polinomio
en P4, entonces existen formulas exactas para la obtencion de todas las raıces
de la ecuacion. En todo otro caso esto no es generalmente ası, por lo que habra
que recurrir a tecnicas numericas de calculo. Todos estos metodos hallan un
cero de f por aproximacion, en el siguiente sentido. La reiterada aplicacion del
procedimiento encuentra una sucesion {cn}∞n=0 tal que, bien f (cn) = 0 para
algun n, bien cn → c cuando n → ∞ y f (c) = 0. Se dice en este caso que el
metodo es convergente (a una raız). El metodo mas simple es el llamado de
biseccion. Tiene la ventaja de que siempre es convergente.
Metodo de biseccion
Se parte de un intervalo [a, b] donde f (a)f (b) < 0. El Teorema de Bolzano
asegura la existencia de una raız en (a, b). Ahora se evalua f (c0), c0 = a+b2 .
Si f (c0) 6= 0, entonces f (a)f (c0) < 0, o bien f (c0) f (b) < 0. En este caso,
(solo) uno de estos dos subintervalos de [a, b] reune las mismas condiciones de
este, lo que permite reiterar el procedimiento. O bien se encuentra una raız de
manera exacta en un numero finito de iteraciones, o se obtiene una sucesion de
intervalos encajados
[a, b] ⊃ [a1, b1] ⊃ · · · ⊃ [an, bn] ⊃ · · · ,de manera que [an, bn] contiene en su interior una raız y bn− an = (b− a)/2n,
n ∈ N. Por consiguiente, si cn =an + bn
2se deduce que cn → c y f (c) = 0.
44
3 Ecuaciones no lineales 45
A continuacion se da un programa de este metodo usando Mathematica. Se
reitera el procedimiento n veces, donde n es la parte entera del numerolog b−a
tol
log 2,
de modo quean + bn
2difiere de un cero de f en menos de tol/2.
Clear["Global`*"];
f[x−] = Input[f[x]];
a = Input["a"; a]; b = Input["b"; b];
If[f[a] f[b] < 0, tol = Input["tol"; tol];
n = Ceiling[Log[(b - a)/tol]/Log[2]];
For[i = 0, i <= n, i = i + 1, c[i] = (a + b)/2;
If[f[c[i]] == 0, Print[{i+1, N[c[i]], N[f[c[i]]]}]; Break[ ]];
If[f[a] f[c[i]] < 0, b = c[i], a = c[i]]],
Print["entrada incorrecta"]; Print["f[a]=", N[f[a]]]; Print["f[b]=", N[f[b]]]];
If[f[c[n]]6= 0, Print[{n+1, N[(a + b)/2], N[f[(a + b)/2]]}]];
Orden de convergencia
Para cualquier metodo de aproximacion de raıces, si cn → c cuando n →∞ y
f (c) = 0, denotemos εn a una cota conocida del error |cn − c|, es decir,
|cn − c| ≤ εn para todo n ∈ N,
y tal que εn → 0 cuando n → ∞. Es conveniente estudiar el orden de esta
ultima convergencia. En efecto, supongamos que dos metodos, digamos A y B,
producen cotas de error εn y ε′n, respectivamente. Es razonable afirmar que el
metodo A es preferible al B si εn es mucho menor que ε′n para n grande. Ahora
bien, es conveniente tener un criterio intrınseco, basado exclusivamente en la
sucesion εn, que nos permita asegurar cuando un metodo puede ser preferible
a otro. Para clarificar las ideas, consideremos el metodo de biseccion. Aquı
tenemos que εn = (b− a)/2n. Luego, por un lado,
limn→∞
εn
1/2n= b− a,
3 Ecuaciones no lineales 46
y por otro,
limn→∞
εn+1
εn= 1/2.
La primera de estas condiciones compara la convergencia a cero de εn con la
convergencia a cero de la sucesion 1/2n. Concretamente, estas dos convergencias
son del mismo orden. La segunda de ellas involucra solamente a la sucesion εn.
Ahora con generalidad, estas dos condiciones pueden extenderse de la siguiente
forma:
(i) limn→∞
εn
kn< ∞ para algun k, 0 < k < 1.
(ii) limn→∞
εn+1
εn= η, 0 < η < 1.
Si un metodo satisface siempre (ii), entonces se dice que el metodo tiene un
orden (al menos) lineal de convergencia a la raız. El agregado de ‘al menos’
obedece a que εn es una cota del error, no el error mismo.
Si vale (i) con un valor positivo del lımite, entonces es facil probar que
tambien vale (ii) con η = k. En cuanto a la implicacion recıproca, de-
mostraremos a continuacion que si vale (ii), entonces o se cumple (i) con k = η,
o bien limn→∞ εnkn = 0 para k > η. En efecto, para n ∈ N se tiene que
εn+1
εn= η + δn, lim
n→∞δn = 0.
Luego
εn+1 = εn(η + δn) = εn−1(η + δn−1)(η + δn) = · · · = ε1
n∏i=1
(η + δi).
De aquı,εn+1
kn+1=
ε1
k
n∏i=1
η + δi
k.
Si k = η, esta productoria puede converger o no para n → ∞, pero si k > η
entonces converge a cero, ya que los factores que se agregan a partir de un n
suficientemente grande son menores que un numero menor que 1. Esto termina
la demostracion.
3 Ecuaciones no lineales 47
Podemos asegurar entonces que un orden lineal de convergencia implica que
εn tiende a cero con un orden igual o superior a la sucesion kn para algun k < 1.
Un orden de convergencia superior al lineal es el dado por la condicion
0 < limn→∞
εn+1
εpn
= γ < ∞, p > 1.
Se dice en este caso que el metodo converge con un orden p (cuadratico si p = 2,
cubico si p = 3). Aquı se tiene que
εn+1 = εpn(γ + δn) = εp2
n−1(γ + δn−1)p(γ + δn) = · · · = εpn
1
n∏i=1
(γ + δi)pn−i
.
Sea γ1 ≥ γ. Como γ1γp1γ
p2
1 · · · γpn−1
1 = γpn−1p−1
1 , sigue que
εpn
1
n∏i=1
(γ + δi)pn−i
=
(ε1γ
1p−11
)pn
γ1
p−11
n∏i=1
(γ + δi
γ1
)pn−i
.
Si γ1 = γ, esta productoria puede converger o no para n →∞, pero si γ1 > γ,
entonces tiende a cero. Como εn tiende a cero para n →∞, podemos suponer
sin perdida de generalidad que ε1γ1
p−11 < 1. Se concluye que un orden p de
convergencia implica que εn tiende a cero con un orden igual o superior a la
sucesion kpn
1 para un k1 < 1.
Comokpn
1
kn→ 0 para n →∞, (15)
se deduce que un metodo con orden p de convergencia dara posiblemente una
aproximacion mas rapida a la raız que un metodo con orden lineal de conver-
gencia. El termino ‘posiblemente’ se debe por un lado a que estamos estimando
cotas de error y no los propios errores de la aproximacion, y por otro lado a
que las dos sucesiones de cotas de error correspondientes a uno y otro metodo
pueden converger a cero con un orden superior al dado por las sucesiones de
(15).
3 Ecuaciones no lineales 48
Metodo de la posicion falsa
Como en el metodo de biseccion, se parte de un intervalo [a, b], donde f (a)f (b)
< 0. Supongamos, sin perdida de generalidad, que f (a) < 0 < f (b). La raız de
la ecuacion se aproxima ahora por c0, el cero del polinomio en P1, interpolador
de f en a y b. Se tiene que
c0 = b− f (b)(b− a)
f (b)− f (a).
O bien c0 es una raız, o solo uno de los dos subintervalos en que queda parti-
cionado [a, b], a saber [a, c0] o [c0, b], posee las mismas condiciones que [a, b],
lo que permite continuar el mismo procedimiento inicial. De no encontrarse la
raız de manera exacta en un numero finito de iteraciones, se forma una sucesion
de intervalos encajados
[a, b] ⊃ [a1, b1] ⊃ · · · ⊃ [an, bn] ⊃ · · · ,y una sucesion cn, dada por
cn = an − f (an)(bn − an)
f (bn)− f (an)= bn − f (bn)(bn − an)
f (bn)− f (an). (16)
No es difıcil probar que esta sucesion converge siempre a un cero c de f
para n → ∞. En efecto, tenemos dos sucesiones convergentes, an y bn, la
primera de ellas creciente, y la segunda decreciente. Sean a∗ = limn→∞ an y
b∗ = limn→∞ bn. Como f (an) < 0 < f (bn), sigue que f (a∗) ≤ 0 ≤ f (b∗).Supongamos b∗ = a∗. De aquı, f (a∗) = f (b∗) = 0. Por otro lado, como
an < cn < bn, se deduce que c := limn→∞ cn = a∗ = b∗. Por lo tanto, en este
caso es f (c) = 0. Supongamos ahora b∗ > a∗. Para cada n = 0, 1, 2, · · ·, cn
coincide con an+1 o con bn+1. Por consiguiente, si cn coincide siempre con an+1
a partir de un n, entonces
c := limn→∞
cn = limn→∞
an = a∗.
Tomando lımites para n →∞ en ambos lados de la primera igualdad de (16),
se obtiene
0 = limn→∞
f (an)(bn − an)
f (bn)− f (an)= f (c)
b∗ − a∗
f (b∗)− f (a∗),
3 Ecuaciones no lineales 49
donde b∗ − a∗ > 0 y f (b∗) > 0 ≥ f (a∗), lo que implica que
f (c) = 0.
Por ejemplo, esta situacion se da con la funcion de la siguiente figura.
a bc1c0 c2
Figura 22. Coincidencia permanente de cn con an+1.
A la misma conclusion se llega si cn coincide con bn+1 a partir de un n.
Queda por considerar el caso en que cn coincide con an+1 y con bn+1 para
infinitos valores de n. Bajo esta condicion, existen subsucesiones de cn de dos
tipos, a saber, subsucesiones de cn que son subsucesiones de an, y por tanto
convergen a a∗, y subsucesiones de cn que son subsucesiones de bn, y por tanto
convergen a b∗. Usando una subsucesion de cn del primer tipo en la primera
igualdad de (16) y tomando lımites se deduce que
limn→∞
f (an) = f (a∗) = 0.
Analogamente, usando tambien la segunda igualdad de (16), ası como una
subsucesion de cn del segundo tipo, y tomando lımites, se concluye que
limn→∞
f (bn) = f (b∗) = 0.
Por consiguiente, la sucesion
|f (a1)|, f (b1), |f (a2)|, f (b2), · · ·
3 Ecuaciones no lineales 50
converge a cero. Vamos a probar ahora que esta sucesion tiene una subsucesion
estrictamente creciente, lo que produce una contradiccion. Operando en (16)
se obtiene que
f (bn)(cn − an) = f (an)(cn − bn) = |f (an)|(bn − cn) para todo n ∈ IN.
Consideremos un par an, bn tal que a∗ − an < b∗ − a∗, bn − b∗ < b∗ − a∗ y
ademas que cn coincida con an+1 (por lo tanto bn+1 coincide con bn). Como
cn − an < a∗ − an < b∗ − a∗ < bn − cn,
de la igualdad anterior se deduce que
f (bn) > |f (an)|.Por la hipotesis del caso que estamos considerando, habra algun bm, con m > n,
tal que cm coincide con bm+1 pero bm = bm−1 = · · · = bn. Como
bm − cm < bm − b∗ < bn − b∗ < b∗ − a∗ < cm − am,
aplicando otra vez la igualdad anterior resulta ahora que
|f (am)| > f (bm) = f (bn).
Este argumento es recurrente, es decir, puede ser continuado de una forma
analoga, obteniendose — como se habıa afirmado — una subsucesion estricta-
mente creciente de una sucesion convergente a cero, que es un hecho contra-
dictorio. Luego el caso que estamos considerando no es posible y ası queda
probado que el metodo de la posicion falsa es convergente.
En cuanto al orden de convergencia, puede obtenerse rapidamente una esti-
macion cuando se supone ademas que existe la derivada f ′ y f ′(c) 6= 0. Usando
que f (c) = 0, de (16) sigue que
cn − c = cn−1 − c− bn − an
f (bn)− f (an)(f (cn−1)− f (c)),
ya que cn−1 es an, o bien bn. Se deduce que
cn − c
cn−1 − c= 1− bn − an
f (bn)− f (an)
f (cn−1)− f (c)
cn−1 − c. (17)
3 Ecuaciones no lineales 51
Si b∗ > a∗, entonces sigue de (17) que
limn→∞
cn − c
cn−1 − c= 1− b∗ − a∗
f (b∗)− f (a∗)f ′(c) = 1− f ′(c)
f ′(ξ),
donde a∗ < ξ < b∗ y en la ultima igualdad se ha usado el Teorema del valor
medio. Por lo visto en el analisis de la convergencia, en este caso cn debe
coincidir a partir de un n con an+1, o con bn+1, de forma excluyente. Por
consiguiente, el lımite anterior debe ser no negativo. Obviamente, no puede ser
mayor que 1. Cuando f ′(c)f ′(ξ) 6= 1, tendremos un orden lineal de convergencia, que
ahora sera exacto porque por cotas de error estamos considerando los propios
errores. Es facil ver que este es el caso cuando, por ejemplo, f ′ es positiva y
estrictamente creciente (o negativa y estrictamente decreciente si fuera f (a) >
0 > f (b)). En efecto, en este caso, cn−1 coincide siempre con an (ver Figura
22) y por tanto bn permanece fijo en b. Se concluye que a∗ = c, por lo que
ξ > c y f ′(ξ) > f ′(c).
Si b∗ = a∗, entonces
limn→∞
an = limn→∞
bn = c,
y se desprende de (17) que
limn→∞
cn − c
cn−1 − c= 1− 1
f ′(c)f ′(c) = 0.
Luego aquı tenemos un orden de convergencia superior al lineal.
Damos a continuacion un programa de calculo de aproximacion a una raız
por el metodo de la posicion falsa. Observese ahora el criterio de parada de las
iteraciones. Como el metodo converge, siempre se cumplira este criterio para
un n suficientemente grande.
3 Ecuaciones no lineales 52
Clear["Global`*"]; f[x−] = Input[f[x]];
a = Input["a"; a]; b = Input["b"; b];
If[f[a] f[b] < 0, n = Input["n"; n]; tol = Input["tol"; tol]; c[-1] = 2a - b;
For[i = 0, i <= n, i = i + 1, c[i] = N[b - ((f[b](b - a))/(f[b] - f[a]))];
If[f[c[i]] == 0, Print[{i+1, c[i], f[c[i]]}]; Break[ ]];
If[f[a] f[c[i]] < 0, b = c[i], a = c[i]];
If[Abs[c[i] - c[i - 1]] < tol && Abs[f[c[i]]] < 10−6,
Print[{i+1, c[i], f[c[i]]}]; Break[ ]]];
If[f[c[n]]6= 0 && Or[Abs[c[n] - c[n-1]] >= tol, Abs[f[c[i]]] >= 10−6],
Print["sin exito"]],
Print["entrada incorrecta"]; Print["f[a]=", N[f[a]]]; Print["f[b]=", N[f[b]]]];
Metodo de la secante
Este metodo es similar al de la posicion falsa en el sentido de aproximarse a una
supuesta raız mediante una sucesion de ceros de polinomios en P1, interpolantes
en dos puntos determinados por la funcion f . La diferencia esta en que f
no necesita tener distinto signo en los extremos del correspondiente intervalo.
Elegidos los dos primeros valores de la sucesion aproximante, c0 y c1, se prosigue
aplicando la formula recurrente
cn+1 = cn − f (cn)(cn − cn−1)
f (cn)− f (cn−1), n = 1, 2, · · · . (18)
Con respecto al metodo de la posicion falsa, el metodo de la secante tiene
la desventaja de que hay que imponer condiciones mas restrictivas a la funcion
f para que el metodo sea convergente. Esto ya se hace evidente por la misma
forma de la ecuacion (18), donde el denominador de la fraccion podrıa anularse
para algun valor de n, impidiendo ası el calculo de cn+1. Pero por otro lado
tiene la ventaja de que, bajo ciertas condiciones sobre la funcion f , converge
con un orden superior al lineal. Para ver esto ultimo, supongamos que c es
un cero de f . Recordando (ver Seccion 8.2 de Matematicas) la definicion y
notacion para las diferencias divididas de la funcion f , y usando que f (c) = 0,
3 Ecuaciones no lineales 53
de (18) sigue que
cn+1 − c = cn − c− f (cn)
f [cn−1, cn]
= (cn − c)
(1− f (cn)− f (c)
(cn − c)f [cn−1, cn]
)
= (cn − c)
(1− f [cn, c]
f [cn−1, cn]
)
= (cn − c)f [cn−1, cn]− f [cn, c]
f [cn−1, cn]
= (cn − c)(cn−1 − c)f [cn−1, cn, c]
f [cn−1, cn]. (19)
Si suponemos ademas que limn→∞ cn = c, que f tiene dos derivadas con-
tinuas y que f ′(c) 6= 0, se deduce que limn→∞ f [cn−1, cn, c] = f ′′(c)/2 y
limn→∞ f [cn−1, c] = f ′(c) 6= 0. Luego
limn→∞
cn+1 − c
cn − c= 0.
Se concluye que la convergencia es de un orden (exacto) superior al lineal.
Probaremos a continuacion que con las suposiciones dadas anteriormente para
f , puede asegurarse la convergencia de cn a c si se empieza el proceso con dos
valores iniciales c0 y c1 suficientemente proximos a c. Como f ′(c) 6= 0, existe
un intervalo I = [c− δ, c + δ], donde f ′ 6= 0. Es decir, f es en I estrictamente
creciente, o estrictamente decreciente. Como consecuencia, si elegimos c0 y c1
en I , c0 6= c1, entonces f (c0) 6= f (c1) y puede aplicarse (18) para calcular
c2. Ademas c2 6= c1, a menos que f (c1) = 0, en cuyo caso ya tendrıamos
la raız calculada exactamente. Si pudieramos asegurar que c2, ası como los
sucesivos cn para n > 2, caen en I , entonces — por el mismo motivo — o
f (cn−1) = 0 (raız calculada exactamente), o bien toda la sucesion cn puede
obtenerse mediante la formula (18). Veremos a continuacion que esa condicion
siempre puede conseguirse, si f tiene ademas dos derivadas continuas, cuando
δM < 1,
3 Ecuaciones no lineales 54
donde
M =maxx∈I f ′′(x)
2 minx∈I f ′(x).
Bajo esta condicion, probaremos ademas que
limn→∞
cn = c
y daremos con precision el orden de la convergencia de una determinada sucesion
de cotas de error εn.
La demostracion de que la aplicacion reiterada de (18) conduce a la obtencion
de la raız usa un argumento inductivo. Supongamos que c0, c1, · · · , cn estan en
I y cn 6= cn−1, n ≥ 1. De (18) se deduce inmediatamente que f (cn) = 0, o
bien cn+1 6= cn. En el primer caso el proceso culmina con la obtencion exacta
de la raız. En el segundo caso probaremos que cn+1 esta en I . Usando ahora
que f [cn−1, cn, c] = f ′′(α)/2 y f [cn−1, cn] = f ′(β), α y β en I , sigue de (19)
que
|cn+1 − c| ≤ |cn − c||cn−1 − c|M ≤ δ2M < δ,
por lo que cn+1 esta efectivamente en I . Hasta aquı hemos demostrado que bien
se obtiene la raız de forma exacta mediante un numero finito de aplicaciones de
la formula (18), es decir, cn = c para algun n, bien se construye una sucesion
cn. En este ultimo caso probaremos que limn→∞
cn = c. En efecto, de (19) sigue
que
|cn+1 − c| ≤ |cn − c|δM, n = 1, 2, · · · ,que aplicado sucesivamente da
|cn − c| ≤ (δM)n−1|c1 − c|, n = 1, 2, · · · .Como δM < 1, se tiene que limn→∞(δM)n−1 = 0 y se deduce lo que se deseaba
probar.
Para analizar el orden de convergencia, escribamos
En = M |cn − c|, n = 0, 1, 2, · · ·y sea
E = max{E0, E1/p1 },
3 Ecuaciones no lineales 55
donde p = 1+√
52 = 1, 61803..., que es el unico numero positivo que satisface
p2 = p + 1.
Probaremos ahora que
En ≤ Epn, n = 0, 1, 2, · · · . (20)
En efecto, esto es cierto para n = 0 y n = 1. Supongamos que es cierto para
n− 1 y n. De (19) se obtiene que
|cn+1 − c| ≤ |cn − c||cn−1 − c|M.
Multiplicando por M ambos lados de la igualdad anterior se deduce que
En+1 ≤ EnEn−1,
y usando la hipotesis inductiva y la propiedad del numero p sigue que
EnEn−1 ≤ EpnEpn−1
= Epn−1(p+1) = Epn−1p2= Epn+1
,
que prueba
En+1 ≤ Epn+1
y por lo tanto tambien (20). Como consecuencia de (20) se tiene que
|cn − c| =En
M≤ Epn
M=: εn.
Para i = 0, 1 vale que
Ei = M |ci − c| ≤ Mδ < 1.
Luego E < 1 y limn→∞ εn = 0. Ademas
εn+1
εpn
=Epn+1
/M
Epn+1/M p= M p−1.
Se concluye que la convergencia de las cotas de error εn es de orden p. Hemos
ası demostrado el siguiente
3 Ecuaciones no lineales 56
Teorema de convergencia para el metodo de la secante Sea f una
funcion con segunda derivada continua, f (c) = 0 y f ′(c) 6= 0. Entonces
existe un δ > 0 tal que el metodo de la secante es convergente cuando
los valores iniciales c0 y c1 son elegidos en [c − δ, c + δ], y el orden de la
convergencia es al menos 1+√
52 .
A continuacion se da un programa para el metodo de la secante. Observar
que es mas corto que el programa para el metodo de la posicion falsa, ya que no
es necesario verificar el cambio de signo de f en los extremos de cada intervalo.
Clear["Global`*"]; f[x−] = Input[f[x]];
c[0] = Input[c[0]]; c[1] = Input[c[1]]; n = Input["n"; n];
tol = Input["tol"; tol];
For[i = 1, i <= n, i = i + 1,
c[i+1] = N[c[ i] - ((f[c[i]](c[i] - c[i - 1]))/(f[c[i]] - f[c[i - 1]]))];
If[f[c[i+1]] == 0, Print[{i, c[i+1], f[c[i+1]]}]; Break[ ]];
If[Abs[c[i+1] - c[i]] < tol && Abs[f[c[i+1]]] < 10−6,
Print[{i, c[i+1], f[c[i+1]]}]; Break[ ]]];
If[f[c[n+1]] 6= 0 && Or[Abs[c[n+1] - c[n]] >= tol, Abs[f[c[i+1]]] >= 10−6],
Print["sin exito"]];
Metodo de Newton
La formula que este metodo aplica para obtener la sucesion aproximante cn es
la siguiente:
cn+1 = cn − f (cn)
f ′(cn). (21)
En cada iteracion se aproxima el cero de f por el cero de la recta tangente
a la funcion f en cn. Como en el metodo de la secante, hay que imponer
restricciones a f para que el metodo sea convergente. Por empezar, ya la
misma formula (21) exige que exista la derivada f ′ y no se anule en cn. Pero
esto no basta. Para conseguir un resultado local de convergencia tambien hay
que pedir aquı que f tenga segunda derivada continua y ademas que f ′(c) 6= 0,
3 Ecuaciones no lineales 57
donde c es el cero de f que se va a aproximar. Bajo estas suposiciones, veremos
que cuando el metodo es convergente el orden (exacto) de la convergencia es al
menos cuadratico. De (21) se obtiene que
cn+1 − c = cn − c− f (cn)− f (c)
f ′(cn)
= (cn − c)
(1− f [cn, c]
f [cn, cn]
)
= (cn − c)2f [cn, cn, c]
f [cn, cn].
Cuando limn→∞ cn = c se deduce que
limn→∞
cn+1 − c
(cn − c)2= lim
n→∞f [cn, cn, c]
f [cn, cn]=
f ′′(c)2f ′(c)
.
Luego el orden exacto de la convergencia es 2 cuando f ′′(c) 6= 0. Ahora pode-
mos enunciar el siguiente teorema, cuya demostracion no damos pues sigue las
mismas lıneas que las del teorema de convergencia para la secante.
Teorema de convergencia local para el metodo de Newton Sea f
una funcion con segunda derivada continua, f (c) = 0 y f ′(c) 6= 0. Entonces
existe un δ > 0 tal que el metodo de Newton es convergente cuando el valor
inicial c0 es elegido en [c − δ, c + δ], y el orden de la convergencia es al
menos cuadratico.
Observar que si la formula (21) produce una sucesion cn, convergente a c
cuando n →∞ , que cae dentro del dominio de f y f ′(c) 6= 0, entonces c debe
ser necesariamente un cero de f , pues tomando lımites queda
c = c− f (c)
f ′(c).
Cabe preguntarse entonces por condiciones sobre la funcion f que impliquen
las anteriores hipotesis. El siguiente teorema da una respuesta a esta cuestion.
Teorema de convergencia global para el metodo de Newton Sea f
una funcion definida en un intervalo [a, b], con segunda derivada continua.
Supongamos que f satisface las siguientes hipotesis:
3 Ecuaciones no lineales 58
• f ′ no cambia de signo ni se anula en [a, b]
• f ′′ no cambia de signo en [a, b]
• Las dos rectas tangentes a f en a y en b tienen sus respectivos ceros
en [a, b].
Entonces el metodo de Newton es convergente y por lo tanto su orden de
convergencia es al menos cuadratico (exactamente cuadratico si f ′′ no se
anula en [a, b]).
La siguiente figura muestra lo que sucede en este caso para la funcion
f :
[−1
2, 1
]7→ R, f (x) = 3x + senx− ex.
-0.4 -0.2 0.2 0.4 0.6 0.8 1
-2.5
-2
-1.5
-1
-0.5
0.5
1
Figura 23. La funcion f y sus dos rectas tangentes en los extremos del intervalo.
Se observa que, cualquiera sea c0 en [−1/2, 1], los sucesivos cn estaran a la
izquierda del cero de f formando una sucesion monotona creciente, y por lo
tanto convergente al cero de f con orden exactamente cuadratico (f ′′ 6= 0 en
[−1/2, 1]).
3 Ecuaciones no lineales 59
El siguiente programa aplica el metodo de Newton para resolver la ecuacion
3x + senx− ex = 0.
Clear["Global`*"]; f[x−] = 3x + Sin[x] - Ex;
c[0] = Input[c[0]]; n = Input["n"; n]; tol = Input["tol"; tol];
For[i = 1, i <= n, i = i + 1, c[i] = N[c[i - 1] - f[c[i - 1]]/f’[c[i - 1]]];
If[f[c[i]] == 0, Print[{i, c[i], f[c[i]]}]; Break[ ]];
If[Abs[c[i] - c[i - 1]] < tol && Abs[f[c[i]]] < 10−6,
Print[{i, c[i], f[c[i]]}]; Break[ ]]];
If[f[c[n]]6= 0 && Or[Abs[c[n] - c[n-1]] >= tol, Abs[f[c[i]]] >= 10−6],
Print["sin exito"]];
Si se ejecuta este programa con n = 20 y tol = 0, 000001, para c0 = −0, 5 la
respuesta es
{4, 0.360422,−6.745715× 10−13},es decir, se han realizado 4 iteraciones, obteniendose una raız aproximada c4 =
0, 360422 y f (c4) = −6, 745715 × 10−13. Para c0 = 1 y los mismos valores de
n y tol la respuesta es
{5, 0.360422,−3.120282× 10−13}.La razon de la diferencia en la evaluacion de f con el caso anterior, a pesar de
los mismos valores de raız, se debe a que la maquina trabaja internamente con
mayor numero de decimales que los seis que da en la respuesta.
Con los programas de los tres metodos vistos anteriormente se obtienen los
siguientes resultados. En los tres el intervalo de entrada es [−1/2, 1].
Metodo de la posicion falsa
{9, 0.360422, 3.472888× 10−7}.
Metodo de la secante
{6, 0.360422, 1.105421× 10−10}.
3 Ecuaciones no lineales 60
Metodo de biseccion
{20, 0.360422, 4.829014× 10−7}.Este ultimo es el mas ‘lento’ de todos. Para obtener un valor de raız de
0, 360422, que redondeando al sexto decimal tiene sus seis decimales exactos,
son necesarias veinte iteraciones.
La eficacia de un metodo depende en gran medida del tipo de ecuacion que se
esta considerando. No puede afirmarse que en todos los casos un determinado
metodo sea mejor que otro. Ademas, la bondad de un metodo no debe basarse
exclusivamente en el orden de convergencia, ya que hay que tener en cuenta que
el orden de convergencia refleja el comportamiento del metodo para un numero
de iteraciones n suficientemente grande.
El comando FindRoot de Mathematica usa el metodo de Newton para encon-
trar ceros de una funcion f cuando se le indica un valor inicial c0. En principio,
realiza un numero maximo de quince iteraciones y da una respuesta cuando
se alcanza un determinado grado de precision en la evaluacion de f . Si este
grado de precision no se alcanza en quince iteraciones, entonces responde con
un mensaje de advertencia y da el valor c15. Por ejemplo,
FindRoot[x20 - 1, {x, 2}]
deberıa obtener un cero de la funcion f (x) = x20 − 1 partiendo de un valor
inicial c0 = 2. Como en este caso no se obtiene el grado de precision prescrito,
advierte de este hecho y da c15 = 1, 00155 (f (c15) = 0, 0314436). La manera
de arreglar esto es permitirle realizar mas iteraciones:
FindRoot[x20 - 1, {x, 2}, MaxIterations −> 20]
Ahora responde con el valor exacto del cero, c = 1. Hay una forma de saber el
numero de iteraciones que ha realizado:
n=0;
FindRoot[n++; x20 - 1, {x, 2}, MaxIterations −> 20]
n-1
3 Ecuaciones no lineales 61
Le ha llevado 18 iteraciones. El motivo de este elevado numero de pasos obedece
al comportamiento de esta funcion en el intervalo [1, 2], donde se movera la
sucesion cn. La situacion se complica mas aun si utilizamos los metodos de
la posicion falsa y de la secante con valores iniciales relativamente alejados
del cero c = 1. Por ejemplo, con valores iniciales c0 = 0, 5 y c1 = 1, 5 al
metodo de la posicion falsa le llevara 6820 iteraciones alcanzar los criterios de
parada impuestos en nuestro programa de ese metodo. Para los mismos valores
iniciales, peor lo tiene el metodo de la secante, que interrumpira el proceso
de calculo de cn porque f (c3) − f (c2), que aparece en un denominador en la
formula para c4, si bien no es exactamente cero, sı lo es para la precision con
que trabaja internamente la maquina. Ocurre que la funcion es muy chata
hasta las proximidades de 1 y desde ahı en adelante crece muy rapidamente.
Este relativo fracaso de los metodos hace que se busquen modificaciones
de ellos que mejoren su comportamiento. Precisamente, el comando FindRoot,
ahora cuando se introducen dos valores iniciales, usa una variante mejorada del
metodo de la secante. Ası,
FindRoot[x20 - 1, {x, {0.5, 1.5}}]
utiliza 6 iteraciones para hallar el valor exacto del cero c = 1, con valores
iniciales 0, 5 y 1, 5. Curiosamente, le lleva 5 iteraciones cuando se entra con 0 y
2, valores iniciales supuestamente mas desfavorables por estar mas alejados del
cero. Para esta funcion f , esta variante del metodo de la secante llega antes al
cero de f que el metodo de Newton.
Metodos de punto fijo
Un punto fijo de una funcion continua ϕ es un valor c que satisface
ϕ (c) = c.
El hecho es que un cero de una funcion f puede ser tambien un punto fijo de
otra funcion ϕ . Por ejemplo, es claro que un cero de f (x) es un punto fijo de
3 Ecuaciones no lineales 62
ϕ (x) = x + f (x). Otro ejemplo menos obvio es el dado por
ϕ (x) = x− f (x)
f ′(x)(22)
cuando f ′ existe y no se anula en el cero de f .
Una manera de obtener un punto fijo de ϕ es aplicar la formula recurrente
cn+1 = ϕ (cn), n = 0, 1, 2, · · · , (23)
comenzando con un valor c0 que fijamos nosotros. Si la sucesion cn converge a
un numero c cuando n → ∞, entonces es evidente que c es un punto fijo de
ϕ . Observese que la aplicacion de este procedimiento a la funcion ϕ dada en
(22) equivale al metodo de Newton.
Suponiendo que la sucesion ası obtenida converge a c, que ϕ es p veces
continuamente diferenciable, p fijo, p ≥ 1, y ademas que
ϕ (c) = ϕ ′(c) = · · · = ϕ (p−1)(c) = 0, ϕ (p)(c) 6= 0, (24)
entonces es facil probar que el orden de la convergencia es precisamente p. En
efecto, por la formula de Taylor podemos escribir
ϕ (cn) = ϕ (c) + (cn − c)ϕ ′(c) + · · · + (cn − c)p−1
(p− 1)!ϕ (p−1)(c)
+(cn − c)p
p!ϕ (p)(ξn) = ϕ (c) +
(cn − c)p
p!ϕ (p)(ξn),
donde ξn es un numero comprendido entre c y cn y por tanto tiende a c cuando
n →∞. Como ϕ (cn) = cn+1 y ϕ (c) = c, se deduce que
cn+1 − c
(cn − c)p=
ϕ (p)(ξn)
p!,
por lo que
limn→∞
cn+1 − c
(cn − c)p=
ϕ (p)(c)
p!6= 0,
y ası se demuestra que el orden de la convergencia es p.
3 Ecuaciones no lineales 63
Con respecto a la propia convergencia de la sucesion cn, sea c un punto fijo
de una funcion derivable ϕ . Observemos que
|cn+1 − c| = |ϕ (cn)− ϕ (c)| = |ϕ ′(αn)||cn − c|, (25)
donde αn es un numero comprendido entre cn y c. Si suponemos que |cn−c| < δ
y que |ϕ ′(αn)| < 1, sigue que |cn+1 − c| < δ. Por consiguiente, si elegimos el
valor inicial c0 en un intervalo [c− δ, c + δ] donde — por hipotesis — |ϕ ′| < 1,
por una reiterada aplicacion de (25) se obtendra que
|cn − c| < Mnδ,
donde M = max |ϕ ′| en [c− δ, c + δ]. Como M < 1, se concluye que
limn→∞
cn = c.
Ası hemos probado el siguiente
Teorema de convergencia para un metodo de punto fijo Sea c un
punto fijo de una funcion derivable ϕ . Supongamos que existe un intervalo
[c− δ, c + δ] donde |ϕ ′| < 1. Entonces la sucesion cn construida mediante
(23) converge a c cuando el valor inicial c0 es elegido en el anterior in-
tervalo. Si ademas ϕ es p veces continuamente diferenciable y vale (24),
entonces el orden de convergencia es p.
Podemos aplicar este teorema a la funcion ϕ dada en (22), que da lugar al
metodo de Newton. Se tiene que
ϕ ′(x) = f (x)f ′′(x)
(f ′(x))2.
Sigue que ϕ ′ es continua en un entorno de c si f ′ y f ′′ lo son y f ′(c) 6= 0. Como
f (c) = 0, se deduce tambien que ϕ ′(c) = 0. Por consiguiente existira un δ tal
que |ϕ ′| < 1 en [c− δ, c + δ]. Esto asegura la convergencia de cn a c.
La derivada segunda de ϕ es
ϕ ′′(x) = f (x)
(f ′′(x)
(f ′(x))2
)′+
f ′′(x)
f ′(x).
3 Ecuaciones no lineales 64
Luego ϕ ′′(c) 6= 0 si f ′′(c) 6= 0, y el orden de convergencia es cuadratico. Si
f ′′(c) = 0 y la derivada tercera de ϕ existe y es continua, entonces el orden de
convergencia es, al menos, cubico.
3.2 Ecuaciones en varias variables
Formalmente, la ecuacion
f(x) = 0
puede ser usada tambien en este caso de varias variables si consideramos a f
una funcion continua,
f : D 7→ D,
donde D es Rr, o bien un subconjunto convexo de Rr, r ≥ 1. En esta seccion
nos ocuparemos del caso r > 1. En este caso, entonces, un cero c de la funcion
f , es decir, f(c) = 0, es una r-upla c = (c1, c2, · · · , cr) que simultaneamente
satisfacef1(c1, c2, · · · , cr) = 0
f2(c1, c2, · · · , cr) = 0... ... ...
fr(c1, c2, · · · , cr) = 0
donde f1, f2, · · · , fr, componentes de f , son funciones reales continuas definidas
en D.
Como en el caso de una variable vamos a considerar una funcion
ϕ : D 7→ D,
de manera que cada cero de f es un punto fijo de ϕ . Tambien aquı definimos
una sucesion cn en D mediante
cn+1 = ϕ (cn), n = 0, 1, 2, · · · . (26)
El teorema de la aplicacion contractiva nos dara condiciones suficientes sobre
la funcion ϕ para la existencia de un punto fijo como lımite de cn cuando
n → ∞. Antes necesitamos la siguiente definicion. Una norma (vectorial)
3 Ecuaciones no lineales 65
en Rr asigna a cada x ∈ Rr un numero, que denotamos ‖x‖, que satisface las
siguientes propiedades:
• ‖x‖ ≥ 0 para todo x ∈ Rr, donde la igualdad vale solo si x = 0.
• ‖x + y‖ ≤ ‖x‖ + ‖y‖ para todo x,y ∈ Rr (desigualdad triangular).
• ‖λx‖ = |λ|‖x‖ para todo λ ∈ R y todo x ∈ Rr.
Si x = (x1, x2, · · · , xr), entonces
‖x‖ = max1≤i≤r |xi|,‖x‖1 =
∑ri=1 |xi|,
‖x‖2 =(∑r
i=1 x2i
)1/2,
son ejemplos de normas en Rr.
Teorema de la aplicacion contractiva Sea
ϕ : D 7→ D,
donde D es Rr, o bien un subconjunto convexo y compacto de Rr. Suponga-
mos que ϕ es una aplicacion contractiva, es decir, existe un γ, 0 < γ < 1,
tal que
‖ϕ (x)− ϕ (x∗)‖ ≤ γ‖x− x∗‖ para todo x,x∗ ∈ D.
Entonces existe un unico punto fijo c en D, y la sucesion definida por
(26), cualquiera sea c0 en D, converge a c para n →∞. Ademas
‖cn − c‖ ≤ γ‖cn−1 − c‖ para todo n ∈ N.
Demostracion: Para n ∈ N tenemos que
‖cn+1 − cn‖ = ‖ϕ (cn)− ϕ (cn−1)‖ ≤ γ‖cn − cn−1‖.Aplicando reiteradamente esta desigualdad se obtiene
‖cn+1 − cn‖ ≤ γn‖c1 − c0‖.
3 Ecuaciones no lineales 66
Sea k ∈ N. Como
cn+k − cn = (cn+k − cn+k−1) + (cn+k−1 − cn+k−2) + · · · + (cn+1 − cn),
aplicando la desigualdad triangular sigue que
‖cn+k − cn‖ ≤k∑
i=1
‖cn+i − cn+i−1‖ ≤k∑
i=1
γn+i−1‖c1 − c0‖
≤ γn∞∑i=1
γi−1‖c1 − c0‖ =γn
1− γ‖c1 − c0‖.
Como limn→∞ γn = 0, se deduce que cn es una sucesion de Cauchy en D, y
por las hipotesis que estamos haciendo sobre D sigue que existe un c en D tal
que
limn→∞
cn = c.
Veamos ahora que c es un punto fijo de ϕ . En efecto,
‖cn − ϕ (c)‖ = ‖ϕ (cn−1)− ϕ (c)‖ ≤ γ‖cn−1 − c‖.De aquı, limn→∞ cn = ϕ (c), ya que limn→∞ ‖cn−1 − c‖ = 0, y por lo tanto
ϕ (c) = c. Como consecuencia, se obtiene la desigualdad de la tesis del teorema.
Ademas c es el unico punto fijo de ϕ en D, pues si hubiera otro, digamos c∗,tendrıamos
‖c− c∗‖ = ‖ϕ (c)− ϕ (c∗)‖ ≤ γ‖c− c∗‖,y como γ < 1, se concluye que necesariamente c = c∗.
La desigualdad que aparece en la tesis del teorema nos dice que el orden de
convergencia de los errores es al menos lineal.
El metodo de Newton en varias variables
Este metodo se basa en una formula que generaliza la correspondiente al caso
de una variable. Partiendo de un valor inicial c0 en un subconjunto convexo y
compacto D de Rr, se sigue con la formula recurrente
cn+1 = cn −A(cn)f(cn), n = 0, 1, 2, · · · , (27)
3 Ecuaciones no lineales 67
donde A(cn) es la inversa de la matriz Jacobiana de f evaluada en cn, esto es,
A−1(cn) =
[∂fi
∂xj(cn)
]r
i,j=1
,
y donde estamos suponiendo que f es continuamente diferenciable y que su
matriz Jacobiana evaluada en cn es no singular para n = 0, 1, 2, · · ·. Por
consiguiente, el metodo de Newton coincide con un proceso iterativo de punto
fijo si consideramos la funcion
ϕ (x) = x−A(x)f(x),
definida en un dominio de Rr con la propiedad de que para todo x en este
dominio la matriz Jacobiana de f , evaluada en x, sea no singular. Consideremos
las siguientes hipotesis:
(a) c es un cero de f
(b) La matriz Jacobiana de f , evaluada en c, es no singular
(c) f es 2 veces continuamente diferenciable.
Es claro que (a) y (b) implican que c es un punto fijo de ϕ . Por otro lado,
puede probarse que las tres hipotesis implican que la matriz Jacobiana de ϕ ,
evaluada en c, se anula. Aplicando ahora el teorema del valor medio en varias
variables a la funcion ϕ , y usando (c), se llega a la existencia de un entorno D
de c, a saber
D = {x ∈ D : ‖x− c‖ ≤ δ},tal que
• ‖ϕ (x)− ϕ (x∗)‖ ≤ γ‖x− x∗‖ para todo x,x∗ ∈ D, con 0 < γ < 1
• La matriz Jacobiana de f , evaluada en cada x ∈ D, es no singular.
Por lo tanto ϕ resulta contractiva y aplica D en D, ya que
‖ϕ (x)− c‖ = ‖ϕ (x)− ϕ (c)‖ ≤ γ‖x− c‖ < δ.
3 Ecuaciones no lineales 68
Podemos usar ahora el teorema de la aplicacion contractiva para concluir que la
sucesion definida mediante (27) converge al cero c cuando n → ∞ cualquiera
sea el valor inicial c0 en D. Tenemos ası un teorema de convergencia local
para el metodo de Newton en varias variables, analogamente al caso de una
variable. Tambien aquı puede probarse que el orden de convergencia es al
menos cuadratico.
El comando FindRoot del programa Mathematica utiliza el metodo de Newton
en varias variables cuando se indica un valor inicial para cada una de las vari-
ables involucradas. Por ejemplo, el sistema (ver Seccion 15.4 de Matematicas)
2x + zy2 + 2xyz = 0
2y + zx2 + 2xyz = 0
x2y + xy2 − 1 = 0
tiene tres ternas de soluciones reales (x0, y0, z0). Con referencia a las variables
x, y, las tiene en los cuadrantes primero, segundo y cuarto. Para cada una de
ellas, es
z0 =−2(x2
0 + y20)
3.
Con valores iniciales de x e y en el primer cuadrante, suficientemente proximos
a los valores de la raız, encuentra la solucion.
FindRoot[{2x + z y2 + 2x y z, 2y + z x2 + 2x y z, x2 y + x y2 - 1}, {x, .5}, {y, 1}, {z, -1}]
La respuesta es
(x0, y0, z0) = (0.793701, 0.793701,−0.839947).
Asimismo, encuentra las otras dos raıces reales si se dan valores iniciales de x
e y en el segundo y cuarto cuadrantes. Estas soluciones son, respectivamente,
(−1.618034, 0.618034,−2) y (0.618034,−1.618034,−2).
El comando Solve, o NSolve, utiliza en general metodos mas sofisticados de
busqueda de raıces. Ahora no hay que introducir valores iniciales. Para ecua-
ciones polinomicas en una variable de a lo mas cuarto grado, Solve emplea las
formulas exactas de calculo.
3 Ecuaciones no lineales 69
Para el ejemplo anterior,
Solve[2x + z y2 + 2x y z == 0 && 2y + z x2 + 2x y z == 0
&& x2 y + x y2 - 1 == 0, {x, y, z}]
da por respuesta todas las raıces, incluidas las complejas. Por la ındole del
problema que genera este sistema de ecuaciones, nos interesan solo las soluciones
en x e y. La siguiente forma del comando elimina la variable z y da las soluciones
del sistema resultante en x e y:
Clear[x, y, z];
Solve[2x + z y2 + 2x y z == 0 && 2y + z x2 + 2x y z == 0
&& x2y + x y2 - 1 == 0, {x, y}, z]
4 Solucion numerica de ecuacionesdiferenciales ordinarias
Las ecuaciones diferenciales juegan un papel importantısimo en la matematica
aplicada a la fısica y a las ciencias experimentales. Como sabemos, son ecua-
ciones donde intervienen simbolicamente las derivadas de una o varias funciones,
a su vez de una o varias variables. Por lo tanto, resolver (exactamente) una
ecuacion diferencial significa encontrar la funcion o funciones cuyas derivadas
satisfacen la ecuacion. Nos ocuparemos solamente de ecuaciones diferenciales
ordinarias, es decir, ecuaciones donde intervienen derivadas de funciones de
una unica variable t, donde t recorre un intervalo [a, b]. Mas precisamente,
comenzamos considerando un problema de valor inicial
y′(t) = f (t, y), a ≤ t ≤ b, y(a) = y0, (28)
donde
f : [a, b]× R 7→ Res una funcion, al menos, continua. La primera pregunta es sobre la existen-
cia de una funcion y = y(t) que resuelva el problema anterior. La siguiente
afirmacion da una respuesta a esta cuestion.
Supongamos que f (t, y) es continua con respecto a la variable t, y con
respecto a la variable y satisface una condicion de Lipschitz uniformemente
en t ∈ [a, b], es decir, existe un L > 0 tal que para todo t en [a, b] vale
|f (t, y)− f (t, y∗)| ≤ L|y − y∗|, y, y∗ ∈ R.
Entonces el problema (28) tiene una unica solucion y(t), a ≤ t ≤ b, para
cada valor inicial y0 en R. Mas aun, y(t) resulta continuamente diferen-
ciable y depende continuamente de y0.
Por otra parte, es facil probar que la anterior condicion de Lipschitz se satisface
si la derivada parcial∂f
∂y(t, y) es una funcion acotada en [a, b]× IR y continua
con respecto a y.
70
Solucion numerica de ecuaciones diferenciales ordinarias 71
Las demostraciones de existencia de soluciones son relativamente faciles pero
no constructivas. La parte complicada del problema es, en general, encontrar de
forma exacta una solucion. Mas aun, a veces es imposible hallar una solucion
en terminos de funciones elementales. En estos casos es necesario recurrir a
metodos numericos, que obtienen la solucion de una manera aproximada. Nos
centraremos en aquellos metodos que dan por respuesta un conjunto de puntos
(ti, vi), i = 0, 1, 2, · · · , n,
donde
a = t0 < t1 < t2 < · · · < tn = b, v0 = y(t0) = y0,
y para i = 1, 2, · · · , n se entiende que vi es una aproximacion a la evaluacion
de la solucion en ti, es decir, y(ti). La forma de hacer esto es por ‘pasos’,
obteniendo vi+1 despues de haber calculado v0, v1, · · · , vi, i = 0, 1, · · · , n − 1.
En los metodos de un paso se calcula vi+1 usando la informacion dada por ti, ti+1
y vi (tambien, por supuesto, la dada por la ecuacion diferencial y′ = f (t, y)).
En los metodos de k pasos (k > 1), se usa la informacion adicional dada por
los k puntos
(ti−k+1, vi−k+1), (ti−k+2, vi−k+2), · · · , (ti, vi).
Esto obliga a un proceso de inicializacion, que no es necesario en los metodos
de un paso.
4.1 Metodos de un paso
En general, un metodo de un paso esta determinado por una funcion
Φh : [a, b]× IR 7→ IR, h > 0,
que permite encontrar, partiendo del punto (ti, vi), i = 0, 1, · · · , n − 1, un
siguiente punto (ti+1, vi+1) de la forma que se indica a continuacion:
vi+1 = vi + (ti+1 − ti)Φhi(ti, vi),
donde ti+1 es un valor ya predeterminado o bien producido sobre la marcha por
el mismo metodo. Es usual considerar una particion por valores equidistantes,
Solucion numerica de ecuaciones diferenciales ordinarias 72
es decir, ti+1− ti = (b−a)/n para todo i = 0, 1, · · · , n− 1. En cualquier caso,
sea
h = max0≤i<n
|ti+1 − ti|.
Se dice que un metodo converge en [a, b] si
max0≤i≤n
|vi − y(ti)| → 0 cuando h → 0.
Daremos mas adelante una condicion suficiente para la convergencia de un
metodo. Para ese fin, necesitamos primero describir el comportamiento local de
un metodo. Para ello, supongamos que partimos de la solucion exacta evaluada
en un valor generico t, es decir y = y(t). Entonces el metodo determinado por
Φh produce una aproximacion de y(t + h) mediante la formula
y(t) + hΦh(t, y).
Damos ahora tres definiciones.
El error de truncamiento del metodo viene dado por
Th(t, y) =y(t) + hΦh(t, y)− y(t + h)
h= Φh(t, y)− y(t + h)− y(t)
h.
O sea, el error de truncamiento es la diferencia del cociente incremental aproxi-
mado, representado por Φh(t, y), y el cociente incremental exacto, ambos en el
intervalo [t, t + h].
Un metodo se llama consistente si
Th(t, y) → 0 cuando h → 0.
Por las igualdades de arriba, un metodo sera consistente si y solo si
T0(t, y) = limh→0
Th(t, y) = y′(t) = f (t, y).
Por ultimo, se dice que un metodo tiene orden p si existe una constante C,
independiente de t, y y h, tal que
|Th(t, y)| ≤ Chp,
uniformemente en [a, b]× IR.
Volviendo al tema de la convergencia de un metodo, se tiene la siguiente
afirmacion.
Solucion numerica de ecuaciones diferenciales ordinarias 73
Supongamos que existe una constante M > 0 tal que para todo h en un
intervalo [0, h0] y todo t ∈ [a, b] vale que
|Φh(t, y)− Φh(t, y∗)| ≤ M |y − y∗|, y, y∗ ∈ IR.
Si el metodo determinado por la funcion Φh es ademas consistente, en-
tonces converge en [a, b].
Todos los metodos que veremos en esta seccion convergen. En el caso particular
del metodo de Euler esto es inmediato de probar, usando la anterior afirmacion,
cuando f (t, y) satisface la condicion de Lipschitz.
Metodo de Euler
Este metodo esta determinado por la funcion
Φh(t, y) = f (t, y).
En realidad, no depende de h y por lo tanto es obviamente un metodo consis-
tente. Supongamos que y(t) es dos veces continuamente diferenciable en [a, b],
cosa que es cierta si f (t, y) es continuamente diferenciable en [a, b]× IR. Luego
Th(t, y) = y′(t)− y(t + h)− y(t)
h= y′(t)− y′(α) = (α− t)y′′(ξ),
donde t < α < t + h y t < ξ < α. De aquı,
|Th(t, y)| < ‖y′′‖h.
Como
y′′(t) = ft(t, y) + fy(t, y)y′(t) = ft(t, y) + fy(t, y)f (t, y),
y′′(t) es una funcion acotada en [a, b], uniformemente con respecto al valor
inicial y0. Luego el metodo de Euler resulta tener orden 1.
Ejemplo
El problema de valor inicial
y′ = y cos t, 0 ≤ t ≤ 2π, y(0) = 1,
Solucion numerica de ecuaciones diferenciales ordinarias 74
tiene la solucion exacta
y = esen t.
Veamos como funciona el metodo de Euler con valores equidistantes ti.
Clear["Global`*"]
f[t−, y−] = y Cos[t];
a = Input[a]; b = Input[b]; n = Input[n]; y0 = Input[y0];
h = (b - a)/n; t[0] = a; v[0] = y0;
For[i = 1, i <= n, i = i + 1, t[i] = t[i - 1] + h;
v[i] = N[v[i - 1] + h f[t[i - 1], v[i - 1]]]];
Show[Plot[ESin[t], {t, 0, 2 Pi}, DisplayFunction −> Identity],
ListPlot[Table[{t[i], v[i]}, {i, 0, n}], DisplayFunction −> Identity,
PlotStyle −> PointSize[.008]], DisplayFunction −> $DisplayFunction]
Con n = 10 tenemos la siguiente respuesta. Como se deduce de la lectura del
anterior programa, se muestran la grafica de y = esen t en el intervalo [0, 2π] y
los once puntos (ti, vi) obtenidos por el metodo de Euler.
1 2 3 4 5 6
0.5
1
1.5
2
2.5
3
Figura 24
Con n = 50 las aproximaciones son mas ajustadas, como es de esperar ya
que el metodo converge:
Solucion numerica de ecuaciones diferenciales ordinarias 75
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 25
Metodo de Taylor
La accion local del metodo de Euler consiste en aproximar la solucion evaluada
en t + h mediante el polinomio de Taylor de primer grado desarrollado en t:
y(t + h) = y(t) + hy′(t) = y(t) + hf (t, y).
Si la funcion f es suficientemente diferenciable, entonces esta aproximacion
puede realizarse mediante un polinomio de Taylor de mayor grado:
y(t + h) = y(t) + hy′(t) +h2
2y′′(t) + · · · + hp
p!y(p)(t), p ≥ 2.
Las sucesivas derivadas de y(t) dependen de la funcion f (t, y) y esta depen-
dencia puede ser expresada a traves del siguiente mecanismo recurrente, con-
secuencia de aplicar la regla de la cadena para las derivadas parciales.
y′(t) = f [0](t, y) := f (t, y)
y(j+1)(t) = f [j](t, y) := f[j−1]t (t, j) + f [j−1]
y (t, y)f (t, y), j = 1, 2, · · · , p− 1.
Estamos suponiendo aquı que f (t, y) es (p − 1) veces continuamente diferen-
ciable. Por consiguiente, la funcion Φh que determina el metodo de Taylor
Solucion numerica de ecuaciones diferenciales ordinarias 76
es
Φh(t, y) =
p−1∑j=0
hj
(j + 1)!y(j+1)(t)
= f [0](t, y) +h
2f [1](t, y) + · · · + hp−1
p!f [p−1](t, y).
Si se supone que f (t, y) es p veces continuamente diferenciable, se deduce
rapidamente de la formula de Taylor que
Th(t, y) = Φh(t, y)− y(t + h)− y(t)
h
= Φh(t, y)−p−1∑j=0
hj
(j + 1)!y(j+1)(t)− hp
(p + 1)!y(p+1)(ξ)
= − hp
(p + 1)!y(p+1)(ξ),
con t < ξ < t+h y y(p+1)(ξ) = f [p](ξ, y(ξ)), y por lo tanto el metodo de Taylor
tiene orden p, lo que implica su consistencia.
Para la misma funcion del ejemplo anterior, la implementacion del metodo de
Taylor en Mathematica se da a continuacion. Para p = 1 se tiene en particular
el metodo de Euler.
Clear["Global`*"]
f[t−, y−] = y Cos[t];
a = Input[a]; b = Input[b]; y0 = Input[y0]; p = Input[p]; n = Input[n];
h = (b - a)/n; t[0] = a; v[0] = y0; f[0][t−, y−] = f[t, y];
For[j = 1, j <= p - 1, j = j + 1,
f[j][t−, y−] = Simplify[D[f[j - 1][t, y], t] + D[f[j - 1][t, y], y]f[t, y]]];
For[i = 1, i <= n, i = i + 1, t[i] = t[i - 1] + h;
v[i] = N[v[i - 1] + h Sum[f[j][t[i - 1], v[i - 1]]hj/(j + 1)!, {j, 0, p - 1}]]];
Show[Plot[ESin[t], {t, 0, 2 Pi}, DisplayFunction −> Identity],
ListPlot[Table[{t[i], v[i]}, {i, 0, n}], PlotStyle −> PointSize[.008],
DisplayFunction −> Identity], DisplayFunction −> $DisplayFunction]
Solucion numerica de ecuaciones diferenciales ordinarias 77
La respuesta, para n = 10 y p = 2, se muestra en la siguiente figura. Si se
compara con la Figura 24, se observa que pasar solo de p = 1 a p = 2 produce
ya una apreciable mejor aproximacion.
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 26
Metodos mejorados de Euler
La accion local del metodo de Euler consiste en evaluar y(t + h) usando la
informacion dada por y′(t) = f (t, y). Como la funcion y′(t) varıa en el intervalo
[t, t+h], es una idea razonable utilizar en su lugar un valor que tenga en cuenta
de alguna manera esa variacion. Por ejemplo, tomar la media entre f (t, y) y
f (t + h, y + hf (t, y)). Si escribimos
k1 = k1(t, y) := f (t, y)
k2 = k2(t, y; h) := f (t + h, y + hk1),
entonces resulta
Φh(t, y) =k1 + k2
2.
El metodo determinado por esta funcion suele llevar el nombre de metodo de
Heun.
Solucion numerica de ecuaciones diferenciales ordinarias 78
Esta idea puede generalizarse un poco mas y considerar una media ponderada
Φh(t, y) = α1k1 + α2k2, α1 + α2 = 1,
donde ahora
k1 = f (t, y)
k2 = f (t + µh, y + µhk1), 0 < µ ≤ 1.
Los parametros α1, α2 y µ pueden determinarse de modo que el metodo re-
sultante tenga un orden p = 2. Aplicando la formula de Taylor, despues de
algunos calculos se llega a que esta condicion se consigue cuando
α2µ =1
2.
El metodo de Heun se corresponde con el caso µ = 1.
Metodos de Runge-Kutta
Una ulterior extension de los metodos mejorados de Euler permite llegar a la
siguiente formula:
Φh(t, y) =
r∑s=1
αsks,
r∑s=1
αs = 1
k1(t, y) = f (t, y)
ks(t, y; h) = f (t + µsh, y + hs−1∑j=1
λsjkj), s = 2, 3, · · · , r,
dondes−1∑j=1
λsj = µs, s = 2, 3, · · · , r.
Un metodo determinado por esta funcion Φh se conoce con el nombre de metodo
explıcito de Runge-Kutta de r etapas porque las funciones ks vienen determi-
nadas explıcitamente por recurrencia desde s = 1 hasta s = r. En el llamado
metodo implıcito estas funciones aparecen a ambos lados de las igualdades, lo
Solucion numerica de ecuaciones diferenciales ordinarias 79
que obliga a resolver un sistema de ecuaciones, por lo general trabajoso, para
calcularlas. En ambos casos los parametros involucrados se obtienen de forma
que el orden sea lo mas alto posible. Al respecto, Kutta probo en 1901 que
el maximo orden p que se puede alcanzar es p = r cuando 1 ≤ r ≤ 4. En
particular, la formula clasica de Runge-Kutta de orden p = 4 es la siguiente:
Φh(t, y) =k1 + 2k2 + 2k3 + k4
6
k1(t, y) = f (t, y)
k2(t, y; h) = f
(t +
1
2h, y +
1
2hk1
)
k3(t, y; h) = f
(t +
1
2h, y +
1
2hk2
)
k4(t, y; h) = f (t + h, y + hk3).
Cuando la funcion f no depende de y, y por tanto estamos ante un caso de
cuadratura numerica, el metodo determinado por la anterior funcion Φh co-
incide con la formula de Simpson. Esto no es casualidad, ya que Runge, des-
cubridor en 1895 del metodo que lleva su nombre, buscaba en sus investigaciones
generalizar precisamente esa formula para aplicarla a la solucion de ecuaciones
diferenciales.
A continuacion se da el programa del metodo clasico de Runge-Kutta y la
correspondiente respuesta grafica para n = 10 y valores ti equidistantes.
Solucion numerica de ecuaciones diferenciales ordinarias 80
Clear["Global`*"]
f[t−, y−] = y Cos[t];
a = Input[a]; b = Input[b]; y0 = Input[y0]; n = Input[n];
h = (b - a)/n; t[0] = a; v[0] = y0;
k2[t−, y−] = f[t + h/2, y + h f[t, y]/2];
k3[t−, y−] = f[t + h/2, y + h k2[t, y]/2];
k4[t−, y−] = f[t + h, y + h k3[t, y]];
For[i = 1, i <= n, i = i + 1, t[i] = t[i - 1] + h;
v[i] = N[v[i - 1] + h( f[t[i - 1], v[i - 1]] + 2 k2[t[i - 1], v[i - 1]]
+ 2k3[t[i - 1], v[i - 1]] + k4[t[i - 1], v[i - 1]])/6]];
Show[Plot[ESin[t], {t, 0, 2 Pi}, DisplayFunction −> Identity],
ListPlot[Table[{t[i], v[i]}, {i, 0, n}], DisplayFunction −> Identity,
PlotStyle −> PointSize[.008]], DisplayFunction −> $DisplayFunction]
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 27
Se observa un preciso ajuste de los puntos a la curva. Se ha de esperar todavıa
una mejor aproximacion, tanto en este metodo como en los precedentes, si se
usa un valor mayor de n, ya que, como se ha dicho anteriormente, todos estos
metodos convergen.
Solucion numerica de ecuaciones diferenciales ordinarias 81
4.2 Metodos de varios pasos
Los metodos de k pasos (k > 1) tienen a su favor el hecho de que permiten
aumentar el orden de una manera mas directa que en los metodos de un paso.
Por otra parte, su analisis es mas complicado que en estos, por lo que solo
daremos las ideas basicas necesarias para su construccion. El objetivo final es
el mismo que en los metodos de un paso, esto es, construir un conjunto de
puntos (ti, vi), a = t0 < t1 < · · · < tn = b, donde vi aproxima a y(ti). La
diferencia radica en que para calcular vm+k, con k ≤ m + k ≤ n, se usan los k
valores ya obtenidos vm, vm+1, · · · , vm+k−1. Como ahora k > 1, esto obliga a
calcular por algun otro metodo v1, · · · , vk−1 (v0 = y(t0)). Para ello, se aplica
usualmente un metodo de un paso.
Consideraremos metodos lineales de k pasos, con h = (b− a)/n (valores tiequidistantes). Se llaman ası porque
f (tm, vm), f (tm+1, vm+1), · · · , f (tm+k−1, vm+k−1)
intervienen linealmente en la expresion de calculo de vm+k. Esta queda deter-
minada por 2k + 1 coeficientes αj, βj, j = 0, 1, · · · , k (αk = 1), de la siguiente
forma:vm+k + αk−1vm+k−1 + · · · + α0vm
= h(βkfm+k + βk−1fm+k−1 + · · · + β0fm),(29)
donde fm+k−r := f (tm+k−r, vm+k−r), r = 0, 1, · · · , k. Si βk = 0, entonces
el metodo se llama explıcito, e implıcito en caso contrario. En este ultimo
caso vm+k aparece en ambos lados de la ecuacion (29). Por consiguiente, vm+k
debe obtenerse a traves de algun metodo numerico para busqueda de raıces
de ecuaciones no lineales. Lo usual es aplicar el metodo de punto fijo. Bajo
las hipotesis de f que estamos considerando (concretamente, que f (t, y) satis-
face una condicion uniforme de Lipschitz en [a, b]) puede probarse, usando el
Teorema de la aplicacion contractiva, que si h es suficientemente pequeno el
metodo de punto fijo converge a una solucion de (29) en la incognita vm+k.
En forma analoga a lo hecho en los metodos de un paso, damos las siguientes
definiciones. Si un metodo produce los valores vi, 0 ≤ i ≤ n, entonces se dice
Solucion numerica de ecuaciones diferenciales ordinarias 82
que converge cuando
limh→0
max1≤i≤n
|vi − y(ti)| = 0.
Para 0 ≤ m ≤ n − k, la coordenada m-esima del error de truncamiento Th
viene dada por
Th(m) =1
h
k∑j=0
αjy(tm+j)−k∑
j=0
βjf (tm+j, y(tm+j))
=1
h
k∑j=0
αjy(tm + jh)−k∑
j=0
βjy′(tm + jh). (30)
El metodo se dice consistente si
limh→0
max0≤m≤n−k
|Th(m)| = 0.
El orden del metodo es p si
max0≤m≤n−k
|Th(m)| = O(hp) cuando h → 0.
Es claro que si un metodo tiene orden p, con p > 0, entonces es consistente.
Por supuesto, se trata de conseguir convergencia y tambien que el orden sea lo
mayor posible. Esto se lograra con una adecuada eleccion de los coeficientes αj
y βj. Suponiendo que la funcion y(t) es suficientemente diferenciable y usando
la formula de Taylor para y(tm + jh) e y′(tm + jh), de la ecuacion (30) pueden
deducirse las relaciones que esos coeficientes deben cumplir para que el metodo
tenga orden p, p ≥ 1. En efecto, escribiendo (30) como 1h(γ0+γ1h+γ2h
2+· · ·),la anulacion de los coeficientes γ0, γ1, · · · γp produce las siguientes condiciones
(recordar que αk = 1):∑k
j=0 αj = 0∑k
j=0 jαj =∑k
j=0 βj
... ... ...∑k
j=0 jpαj = p∑k
j=0 jp−1βj.
(31)
Solucion numerica de ecuaciones diferenciales ordinarias 83
No obstante, estas condiciones no bastan para que el metodo converja. Para que
esto suceda deben cumplirse las propiedades (i)–(iv) que se dan a continuacion.
Escribimos α(z) =∑k
j=0 αjzj.
(i) Los valores v1, v2, · · · , vk−1, que dependen de h, tienden a y0 cuando h
tiende a cero;
(ii) α(1) = 0 y α′(1) =∑k
j=0 βj;
(iii) Todos los ceros de α(z) estan en el intervalo [−1, 1];
(iv) Si 1, o −1, son ceros de α(z), entonces son ceros simples.
Observar que (ii) es precisamente equivalente a las dos primeras igualdades de
(31), las cuales implican que el orden es al menos 1, y por tanto el metodo es
consistente. Notar tambien que (i) queda siempre garantizado si se calculan
v1, v2, · · · , vk−1 aplicando, por ejemplo, un metodo convergente de un paso.
Por ultimo, las propiedades (iii) y (iv) equivalen a la llamada estabilidad del
metodo.
Como ejemplo, en lo que sigue determinamos todos los metodos explıcitos
de 2 pasos,
vm+2 + α1vm+1 + α0vm = h(β1fm+1 + β0fm),
con ordenes 1, 2 y 3. Las ahora cuatro ecuaciones de (31) son
α0 + α1 + 1 = 0
α1 + 2 = β0 + β1
α1 + 4 = 2β1
α1 + 8 = 3β1.
El polinomio α(z) es α0 + (−1 − α0)z + z2, que tiene los ceros 1 y α0. Por
consiguiente, para que ademas se cumplan (iii) y (iv) debe valer que α0 caiga
en el intervalo [−1, 1).
Para obtener orden p = 3 tienen que valer las cuatro ecuaciones de arriba, que
determinan los cuatro coeficientes
α0 = −5, α1 = 4, β0 = 2, β1 = 4.
Solucion numerica de ecuaciones diferenciales ordinarias 84
Por lo tanto no se cumple (iii) y el metodo no es estable. Esto es ası en general.
Puede probarse que no existen metodos explıcitos y estables de k pasos con
orden p > k. Luego no es aconsejable aplicar este metodo ya que puede haber
casos donde las aproximaciones vi no convergen a la solucion.
Para obtener orden p = 2 deben cumplirse las tres primeras ecuaciones de
arriba. Esto deja libre un unico coeficiente:
α1 = −α0 − 1, β0 = −1
2α0 − 1
2, β1 = −1
2α0 +
3
2.
En particular, para α0 = −1 se tiene la llamada regla del punto medio:
vm+2 = vm + 2hfm+1.
Para α0 = 0 se obtiene el metodo de Adams-Bashforth de 2 pasos:
vm+2 = vm+1 +1
2h(3fm+1 − fm).
Por ultimo, cuando solo valen las dos primeras ecuaciones de arriba obten-
dremos orden p = 1, quedando libre dos coeficientes, uno en cada grupo α0, α1
y β0, β1.
Metodos de Adams
Para k ≥ 2 el metodo explıcito de Adams de k pasos, tambien llamado de
Adams-Bashforth, responde a la formula
vm+k = vm+k−1 + hk−1∑j=0
βk,jfm+j, (32)
donde los coeficientes βk,j pueden obtenerse a partir de (31), con p = k y
αj = 0 para j = 0, 1, · · · , k − 2. Como en este caso es
α(z) = zk − zk−1,
sigue que los unicos ceros de α(z) son 0 y 1, donde 1 es ademas un cero simple.
De esta manera el metodo resulta de orden k, estable y convergente. Una forma
Solucion numerica de ecuaciones diferenciales ordinarias 85
alternativa de obtener los coeficientes βk,j es a partir de la formula
y(tm+k) = y(tm+k−1) +
∫ tm+k
tm+k−1
y′(t) dt,
que se deduce inmediatamente de la regla de Barrow. Ahora se reemplaza el
integrando y′(t) por el unico polinomio en Pk−1 que interpola a y′(t) en los k
puntos (tj, y′(tj), m ≤ j ≤ m + k − 1. Si se usa la forma de Lagrange del
polinomio interpolador, la integral se transforma en la expresion
hk−1∑j=0
βk,jy′(tm+j),
donde
βk,j =
∫ 1
0
k−1∏r=0r 6=j
(u + k − 1− r
j − r
)du, j = 0, 1, · · · , k − 1.
Estos valores de βk,j satisfacen (31), con p = k y αj = 0 para j = 0, 1, · · · , k−2.
Por lo tanto son precisamente los coeficientes que deben utilizarse en (32).
A continuacion se da un programa del metodo explıcito de Adams de k pasos.
Se ha utilizado el metodo clasico de Runge-Kutta, de orden p = 4, para calcular
v1, v2, · · · , vk−1.
Clear["Global`*"]
f[t−, y−] = y Cos[t];
a = Input[a]; b = Input[b]; y0 = Input[y0]; n = Input[n]; k = Input[k];
h = (b - a)/n; t[0] = a; v[0] = y0;
k2[t−, y−] = f[t + h/2, y + h f[t, y]/2];
k3[t−, y−] = f[t + h/2, y + h k2[t, y]/2];
k4[t−, y−] = f[t + h, y + h k3[t, y]];
For[i = 1, i <= k - 1, i = i + 1, t[i] = t[i - 1] + h; v[i] = N[v[i - 1] + h( f[t[i - 1], v[i - 1]] + 2 k2[t[i - 1], v[i -
1]] + 2k3[t[i - 1], v[i - 1]] + k4[t[i - 1], v[i - 1]])/6]];
beta[0] = Integrate[Product[(u + k - 1 - r)/(-r), {r, 1, k - 1}], {u, 0, 1}];
beta[k - 1] = Integrate[Product[(u + k - 1 - r)/(k - 1 - r), {r, 0, k - 2}],
Solucion numerica de ecuaciones diferenciales ordinarias 86
{u, 0, 1}];
For[j = 1, j <= k - 2, j = j + 1,
beta[j] = Integrate[Product[(u + k - 1 - r)/(j - r), {r, 0, j - 1}]
Product[(u + k - 1 - r)/(j - r), {r, j + 1, k - 1}], {u, 0, 1}]];
For[i = k, i <= n, i = i + 1, t[i] = t[i - 1] + h;
v[i] = N[v[i - 1] + h(Sum[beta[j] f[t[j + i - k], v[j + i - k]], {j, 0, k - 1}])]];
Show[Plot[ESin[t], {t, 0, 2 Pi}, DisplayFunction −> Identity],
ListPlot[Table[{t[i], v[i]}, {i, 0, n}], DisplayFunction −> Identity,
PlotStyle −> PointSize[.008]], DisplayFunction −> $DisplayFunction]
Para una entrada de n = 10 y k = 4 se obtiene la siguiente respuesta.
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 28
La aproximacion a la solucion es pesima. Ocurre que si se usa un metodo de
k pasos, es obvio que en general n debe ser mucho mayor que k para que la
accion de este metodo sea significativa. Para una entrada de n = 50, k = 4,
tenemos la siguiente respuesta.
Solucion numerica de ecuaciones diferenciales ordinarias 87
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 29
El metodo implıcito de Adams, llamado tambien de Adams-Moulton, es el
analogo al metodo explıcito de Adams. Su formula es
vm+k = vm+k−1 + hk∑
j=1
βck,jfm+j.
Utilizando el mismo procedimiento del caso explıcito se obtiene la siguiente
expresion para los coeficientes βck,j.
βck,j =
∫ 1
0
k∏r=1r 6=j
(u + k − 1− r
j − r
)du, j = 1, 2, · · · , k.
Para deducir esta igualdad, ahora debe usarse el polinomio interpolador de y′(t)en los puntos
(tm+1, y′(tm+1)), (tm+2, y
′(tm+2)), · · · , (tm+k, y′(tm+k)).
En realidad la formula de arriba corresponde a un metodo de k− 1 pasos pero
de orden k.
Metodos predictor-corrector
Se llaman ası a metodos que usan en forma combinada metodos explıcitos e
implıcitos, usualmente del mismo orden, el primero para predecir la siguiente
Solucion numerica de ecuaciones diferenciales ordinarias 88
aproximacion y el segundo para corregirla. Lo habitual es emplear un metodo
explıcito de Adams de k pasos como predictor y el analogo implıcito de k − 1
pasos como corrector. Se da a continuacion el programa en Mathematica de
este metodo combinado. Se aplica el metodo de Runge-Kutta para el inicio.
Clear["Global`*"]
f[t−, y−] = y Cos[t]; a = Input[a]; b = Input[b]; y0 = Input[y0];
n = Input[n]; k = Input[k];
h = (b - a)/n; t[0] = a; v[0] = y0;
k2[t−, y−] = f[t + h/2, y + h f[t, y]/2];
k3[t−, y−] = f[t + h/2, y + h k2[t, y]/2];
k4[t−, y−] = f[t + h, y + h k3[t, y]];
For[i = 1, i <= k - 1, i = i + 1, t[i] = t[i - 1] + h; v[i] = N[v[i - 1] + h( f[t[i - 1], v[i - 1]] + 2 k2[t[i - 1], v[i -
1]] + 2k3[t[i - 1], v[i - 1]] + k4[t[i - 1], v[i - 1]])/6]];
beta[0] = Integrate[Product[(u + k - 1 - r)/(-r), {r, 1, k - 1}], {u, 0, 1}];
beta[k - 1] = Integrate[Product[(u + k - 1 - r)/(k - 1 - r), {r, 0, k - 2}],
{u, 0, 1}];
For[j = 1, j <= k - 2, j = j + 1,
beta[j] = Integrate[Product[(u + k - 1 - r)/(j - r), {r, 0, j - 1}]
Product[(u + k - 1 - r)/(j - r), {r, j + 1, k - 1}], {u, 0, 1}]];
betac[1] = Integrate[Product[(u + k - 1 - r)/(1 - r), {r, 2, k}], {u, 0, 1}];
betac[k] = Integrate[Product[(u + k - 1 - r)/(k - r), {r, 1, k - 1}], {u, 0, 1}];
For[j = 2, j <= k - 1, j = j + 1,
betac[j] = Integrate[Product[(u + k - 1 - r)/(j - r), {r, 1, j - 1}]
Product[(u + k - 1 - r)/(j - r), {r, j + 1, k}], u, 0, 1]];
For[i = k, i <= n, i = i + 1, t[i] = t[i - 1] + h;
v[i] = N[v[i - 1] + h(Sum[beta[j] f[t[j + i - k], v[j + i - k]], {j, 0, k - 1}])];
v[i] = N[v[i - 1] + h(Sum[betac[j] f[t[j + i - k], v[j + i - k]], {j, 1, k}])]];
Show[Plot[ESin[t], {t, 0, 2 Pi}, DisplayFunction −> Identity],
ListPlot[Table[{t[i], v[i]}, {i, 0, n}], DisplayFunction −> Identity,
PlotStyle −> PointSize[.008]], DisplayFunction −> $DisplayFunction]
Si entramos con n = 10 y k = 4 la respuesta la tenemos en la siguiente figura.
Solucion numerica de ecuaciones diferenciales ordinarias 89
Puede notarse la eficaz accion del metodo corrector si comparamos con la Figura
28.
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 30
La intervencion del metodo corrector en el programa anterior esta presente
en la cuarta lınea, contando de abajo hacia arriba,
v[i] = N[v[i - 1] + h(Sum[betac[j] f[t[j + i - k], v[j + i - k]], {j, 1, k}])]
Esta lınea, dentro del comando For, puede ser repetida cuantas veces quera-
mos con el proposito de mejorar la estimacion de v[i] (vm+k), pues recordemos
que si h es suficientemente pequeno el algoritmo del punto fijo nos conduce a
la verdadera solucion que determina el metodo implıcito. Para nuestro caso
anterior, repitiendo la lınea, por ejemplo tres veces, en efecto mejoramos la
aproximacion, tal como se muestra en la siguiente figura.
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 31
Solucion numerica de ecuaciones diferenciales ordinarias 90
El comando NDSolve de Mathematica utiliza un metodo de Adams implıcito,
de orden entre 1 y 12, para resolver un problema de valor inicial. Emplea un
metodo de Runge-Kutta de orden 4 o 5 para el proceso inicial. Por ejemplo,
para resolver el problema de valor inicial
y′ = y cos t, y′(0) = 1, 0 ≤ t ≤ 2π,
hacemos
sol[t−] = NDSolve[{y’[t] == y[t] Cos[t], y[0] == 1}, y[t], {t, 0, 2 Pi}]
La respuesta la da a traves de una funcion que interpola los puntos estimados
por el metodo empleado. Para representar la solucion obtenida hacemos
Plot[y[t] /. sol[t], {t, 0, 2 Pi}]
A fin de comprobar la bondad de ajuste de este metodo representamos 51
puntos equidistantes, obtenidos de la funcion interpolante, junto con la grafica
de la solucion exacta.
Show[ListPlot[Table[{j Pi/25, y[j Pi/25] /. sol[j Pi/25][[1]]}, {j, 0, 50}],
DisplayFunction −> Identity],
Plot[ESin[t], {t, 0, 2 Pi}, DisplayFunction −> Identity],
DisplayFunction −> $DisplayFunction]
1 2 3 4 5 6
0.5
1
1.5
2
2.5
Figura 32
Solucion numerica de ecuaciones diferenciales ordinarias 91
4.3 Sistemas de ecuaciones diferenciales
Un problema de valor inicial en un intervalo [a, b], para un sistema de r ecua-
ciones diferenciales con r incognitas y1(t), y2(t), · · · , yr(t), esta dado por la
siguiente formulacion:
y′1(t) = f1(t, y1, y2, · · · , yr), y1(a) = y0,1
y′2(t) = f2(t, y1, y2, · · · , yr), y2(a) = y0,2... ... ... ...
y′r(t) = fr(t, y1, y2, · · · , yr), yr(a) = y0,r
a ≤ t ≤ b.
Usando notacion vectorial este sistema puede escribirse formalmente como el
problema para el caso de una unica ecuacion:
y′(t) = f(t,y), a ≤ t ≤ b, y(0) = y0.
Pero esto no es solo una cuestion formal. De hecho, toda el desarrollo teorico
y practico del caso de una ecuacion puede aplicarse tambien, con mınimos
cambios, a la presente situacion. Para ejemplificar lo que se esta diciendo
veamos la forma que adopta el metodo clasico de Runge-Kutta aplicado a un
sistema de dos ecuaciones. Los demas metodos vistos en Secciones 4.1 y 4.2 se
tratan de un modo analogo.
Solucion numerica de ecuaciones diferenciales ordinarias 92
Clear["Global`*"]
f[1][t−, y1−, y2−] = Input[f1[t, y1, y2]]; f[2][t−, y1−, y2−] = Input[f2[t, y1, y2]];
a = Input[a]; b = Input[b]; y01 = Input[y01]; y02 = Input[y02]; n = Input[n];
h = (b - a)/n; t[0] = a; v[1][0] = y01; v[2][0] = y02;
For[r = 1, r <= 2, r = r + 1, k2[r][t−, y1−, y2−] =
f[r][t + h/2, y1 + h f[1][t, y1, y2]/2, y2 + h f[2][t, y1, y2]/2]];
For[r = 1, r <= 2, r = r + 1, k3[r][t−, y1−, y2−] =
f[r][t + h/2, y1 + h k2[1][t, y1, y2]/2, y2 + h k2[2][t, y1, y2]/2]];
For[r = 1, r <= 2, r = r + 1, k4[r][t−, y1−, y2−] =
f[r][t + h, y1 + h k3[1][t, y1, y2], y2 + h k3[2][t, y1, y2]]];
For[i = 1, i <= n, i = i + 1, For[r = 1, r <= 2, r = r + 1, t[i] = t[i - 1] + h;
v[r][i] = N[v[r][i - 1] + h( f[r][t[i - 1], v[1][i - 1], v[2][i - 1]] + 2 k2[r][t[i - 1], v[1][i - 1], v[2][i - 1]]
+ 2k3[r][t[i - 1], v[1][i - 1], v[2][i - 1]] + k4[r][t[i - 1], v[1][i - 1], v[2][i - 1]])/6]]];
For[r = 1, r <= 2, r = r + 1, ListPlot[Table[{t[i], v[r][i]}, {i, 0, n}], PlotStyle −> PointSize[.008]]]
Apliquemos este programa a resolver el sistema
y′1(t) = 2y1(1− y2), y1(0) = 1,
y′2(t) = −y2(1− y1), y2(0) = 3,0 ≤ t ≤ 10.
Para una entrada de n = 100, las Figuras 33 y 34 muestran las respuestas para
y1(t) e y2(t), respectivamente, junto con la correspondiente solucion dada por
el comando NDSolve, a saber,
sol[t−] = NDSolve[{y1’[t] == 2y1[t](1 - y2[t]), y2’[t] == -y2[t](1 - y1[t]),
y1[0] == 1, y2[0] == 3}, {y1[t], y2[t]}, {t, 0, 10}]
Solucion numerica de ecuaciones diferenciales ordinarias 93
2 4 6 8 10
1
2
3
4
Figura 33
2 4 6 8 10
0.5
1
1.5
2
2.5
3
Figura 34
La Figura 33 se obtiene ejecutando la orden
Show[ListPlot[Table[{t[i], v[1][i]}, {i, 0, n}], DisplayFunction −> Identity,
PlotStyle −> PointSize[.008]], Plot[y1[t] /. sol[t], {t, 0, 10},
DisplayFunction −> Identity], DisplayFunction −> $DisplayFunction]
Se procede analogamente para obtener la Figura 34.
Finalmente, observamos que para r > 1 el problema de valor inicial en la
incognita y(t),
y(r)(t) = f (t, y, y′, · · · , y(r−1)), a ≤ t ≤ b,
y(j−1)(a) = y0,j, j = 1, 2, · · · , r,
Solucion numerica de ecuaciones diferenciales ordinarias 94
puede ser transformado en el sistema de r ecuaciones con r incognitas
y1(t), y2(t), · · · , yr(t),
con y1(t) = y(t),
y′1(t) = y2, y1(a) = y0,1
y′2(t) = y3, y2(a) = y0,2
... ... ... ...
y′r−1(t) = yr, yr(a) = y0,r−1
y′r(t) = f (t, y1, y2, · · · , yr), yr(a) = y0,r
a ≤ t ≤ b.
Ejemplo
Consideremos la ecuacion
y′′(t) + sen y = 0, 0 ≤ t ≤ 10, y(0) = 0, y′(0) = 1,
que es del tipo de las que describen el movimiento de un pendulo (ver Seccion
16.1 de Matematicas). Mediante el programa Mathematica se obtiene la
solucion numerica ejecutando la orden
sol[t−] = NDSolve[{y”[t] + Sin[y[t]] == 0, y[0] == 0, y’[0] == 1}, y[t],
{t, 0, 10}]
Por otra parte, segun la observacion anterior podemos transformar esta
ecuacion en el sistema
y′1(t) = y2, y1(0) = 0
y′2(t) = −sen y1, y2(0) = 10 ≤ t ≤ 10,
donde y1(t) = y(t). Aplicamos ahora nuestro programa del metodo clasico de
Runge-Kutta para resolver un sistema de dos ecuaciones, con n = 100. En la
Figura 35 se muestran simultaneamente ambas soluciones para y(t). La curva
continua es la respuesta de Mathematica y los puntos son las aproximaciones
numericas de nuestro programa.
Solucion numerica de ecuaciones diferenciales ordinarias 95
2 4 6 8 10
-1
-0.5
0.5
1
Figura 35