Vous êtes sur la page 1sur 22

METODOS MATEMATICOS EN INGENIER IA (Curso 2013-14)

M aster en Dise no Avanzado en Ingenier a Mec anica Departamento de Matem atica Aplicada II. Universidad de Sevilla

Ecuaciones y sistemas de ecuaciones no lineales Indice


1 Introducci on 2 Resoluci on de ecuaciones no lineales 2.1 El m etodo de Newton . . . . . . . . . . . . 2.2 Otros m etodos . . . . . . . . . . . . . . . . 2.2.1 El m etodo de bisecci on . . . . . . . 2.2.2 El m etodo de la secante . . . . . . 2.2.3 Comandos de Matlab y Octave . 1 3 3 5 5 7 9 10 10 14 16 19

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

3 Sistemas de Ecuaciones 3.0.4 El m etodo de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.0.5 Variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.0.6 Cuestiones de orden pr actico . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Cuestiones y Ejercicios Introducci on En las asignaturas de C alculo se han comentado en ocasiones, como aplicaciones del desarrollo de Taylor de una funci on, ciertos m etodos aproximados para el c alculo de los ceros de una funci on (los valores para los que dicha funci on se anula). En esta lecci on repasaremos estos conocimientos y los desarrollaremos de modo que permitan entender los algoritmos que hoy d a se utilizan para el c alculo de ceros de funciones.

Introducci on

Las ecuaciones y sistemas de ecuaciones no lineales aparecen con frecuencia en problemas t ecnicos y cient cos. Recordar a de cuando estudi o sistemas de ecuaciones diferenciales los modelos predadorpresa. La densidad u1 de miembros de una especie por unidad de supercie oscila en torno a su equilibrio natural que es la soluci on no nula de la ecuaci on u(1 u) = 0,

donde es la tasa de crecimiento (que depende de lo fecundo del h abitat) y es el factor limitador de crecimiento. El equilibrio natural viene dado entonces por u = 1/ (la otra soluci on u = 0 no es de inter es pr actico salvo en el caso de la inmunolog a). Efectuando el cambio de variable v = u , v (1 v ) = 0, que es equivalente a la ecuaci on deviene en v (1 v ) = 0. La situaci on se complica algo m as si la especie convive con un predador que se alimenta de ella. En este caso las densidades v1 de miembros de la especie en cuesti on y v2 del predador, son soluci on del sistema de ecuaciones v1 (1 v1 ) 1 v1 v2 = 0, v2 + 2 v1 v2 = 0, donde 1 es la tasa de mortalidad debida a la acci on del predador, es la tasa de mortalidad del predador y 2 es la tasa de crecimiento del predador debida a la presencia de presa. Estas ecuaciones son f aciles de resolver y tienen tres posibles soluciones, v= 0 0 , v= 1 0 , v= /2 (2 )/(1 2 ) ,

de las cuales (salve cat astrofe ecol ogica) s olo la tercera se da en la pr actica. La situaci on se complica cuando se tiene en cuenta la acci on del hombre. Si el hombre caza o pesca ambas especies (tal ser a el caso, por ejemplo, si v1 representase la densidad de boquerones y v2 de lubinas, pues ambas especies son preciadas por el hombre, y por tanto pescadas por el) las ecuaciones devienen entonces en v1 (1 v1 ) 1 v1 v2 (1 e0 v1 ) = 0, v2 + 2 v1 v2 (1 e0 v2 ) = 0, (1)

donde los t erminos a nadidos modelan la inuencia de las capturas de ambas especies, y los nuevos par ametros , 0 , y 0 , dependen de factores tales como el precio al que se paguen ambas especies en los mercados centrales, el estado de las otas pesqueras, las (malas) artes de pesca empleadas, etc. Lo que nos interesa aqu es que salvo que o bien o bien , sean nulos, la soluci on del sistema 1 de ecuaciones (1) no se puede expresar en t erminos de funciones elementales , y se debe acudir a alg un procedimiento para aproximarla. No es necesario que se trate de un sistema para que no se pueda expresar su soluci on en t erminos de funciones elementales, pues esta circunstancia se da con harta frecuencia en el caso de una sola ecuaci on. Los ejemplos pr acticos son abundantes pero, dado que no es el prop osito de esta asignatura su deducci on y discusi on, mencionaremos un ejemplo artical: cu al es la soluci on de f (x) = 0, donde f (x) = ex x? En lo que sigue, trataremos primero los m etodos num ericos para el caso de una sola ecuaci on no lineal, pasando despu es a comentar el caso de sistemas.
1

V ease por ejemplo [1], 2.1

2
2.1

Resoluci on de ecuaciones no lineales


El m etodo de Newton

Comentamos el m etodo de Newton para resolver la ecuaci on f (x) = 0, donde f es una funci on real de variable real. Si x es soluci on de dicha ecuaci on (f (x ) = 0) el razonamiento de donde surge este m etodo est a basado en el siguiente desarrollo de Taylor, 0 = f (x ) = f (x) + f (x)(x x) + f ( )(x x)2 /2, (2)

donde es un punto intermedio entre x y x . Si x est a lo sucientemente cerca del cero x de f , como para que (x x)2 |x x| de modo que podamos escribir (2) como 0 = f (x ) f (x) + f (x)(x x) sin cometer un error excesivo, dividiendo por f (x) tenemos entonces que (x x) f (x) f (x) x x f (x) . f (x)

Esta aproximaci on es la base del m etodo de Newton, que es como sigue. M etodo de Newton para aproximar x soluci on de f (x) = 0 1) T omese x[0] sucientemente cercano a x . 2) Para n = 0, 1, . . . x[n+1] = x[n] f (x[n] ) . f (x[n] ) (3)

N otese que la idea del m etodo es aproximar la funci on f por su recta tangente. As , la recta [0] tangente a f en el punto x tiene por ecuaci on y = f (x[0] ) + f (x[0] )(x x[0] ). El valor para el cual esta recta toma el valor y = 0 es el siguiente iterante x[1] del m etodo de Newton.

x[0]

f(x) x[1]

tangente

En la pr actica, el m etodo de Newton se itera hasta que dos iterantes consecutivos disten menos que una tolerancia prejada de antemano, que es el error con el que queremos la aproximaci on a x . Un algoritmo que implemente el m etodo de Newton puede ser el siguiente, 3

1) T omese x sucientemente cercano a x y h agase e = 2T OL |x|. 2) Mientras |e| > T OL |x|, h agase 2.1 e f (x) , f ( x) 2.2 x x e.

Puede ocurrir que el valor buscado x sea cero, que es imposible de aproximar con error relativo peque no. Por ello, suele ser frecuente cambiar el criterio en 2) por Mientras |e| > T OLr |x| + T OLa , donde T OLr es la tolerancia elegida para el error relativo y T OLa para el error absoluto. As mismo, es usual llevar un contandor de iteraciones realizadas y no permitir sobrepasar un n umero prejado de antemano. En ocasiones interesa no tanto el valor de x sino el que f (x ) = 0, con lo que 2) puede cambiarse por Mientras |f (x)| > T OLr |f0 | + T OLa , donde f0 es el primer valor de f (x) obtenido. El error del m etodo de Newton, para n sucientemente grande, verica que |x x[n+1] | |x x[n] |2 (4)

|f (x )/f (x )| (v ease por ejemplo [6], 2), esto es, para n sucientemente grande, el donde = 1 2 error en una iteraci on es el cuadrado del de la iteraci on anterior. En la pr actica esto se traduce en que de una iteraci on a la siguiente se dobla en el n umero de d gitos correctos en la aproximaci on. Por ejemplo, un cero de tan(x) 1 es x = /4. Si en Matlab tras ejecutar x=1, repetimos la linea, g=tan(x); x=x-(g-1)/(1+g^2); 4*x obtenemos que las sucesivas respuestas son 3.34911147325435 3.15272117132986 3.14162367191156 3.14159265383033 3.14159265358979 3.14159265358979 Observe c omo efectivamente de una iteraci on a la siguiente dobla el n umero de d gitos correctos. No obstante, la equivalencia en (4) s olo tiene sentido si f (x ) = 0. Cuando f (x ) = 0, el m etodo de Newton no converge tan r apido. De hecho, si todas las derivadas de f en x hasta el orden m 1 son nulas, y la m- esima derivada de f en x es no nula, se tiene entonces que |x x[n+1] | (1 1 )|x x[n] |. m

Debe saber, sin embargo, que el m etodo de Newton no tiene por qu e converger si el iterante inicial no est a lo suciententemte cerca del cero x . Un ejemplo viene dado por la funci on f (x) = arctan(x), 4

cuyo u nico cero es x = 0. Dado que f (x) = 1/(1 + x2 ), la iteraci on de Newton es en este caso, x[n+1] = x[n] f (x[n] )(1 + (x[n] )2 ), Ejecutando x=0.5, y a continuaci on repitiendo la l nea x=x-atan(x)*(1+x^2) las sucesivas respeustas son -0.07955951125101 3.353022040054748e-04 -2.513147361656726e-11 0 Sin embargo, tomando x=2, y repitiendo la l nea anterior, las sucesivas respuestas son -3.53574358897045 13.95095908692749 -2.793440665336173e+02 1.220169989179545e+05 -2.338600419793386e+10 8.590766671950356e+20 que claramente divergen. La raz on de este comportamiento puede verse sin m as que ejecutar el m etodo de Newton gr acamente. H agalo sobre la gr aca del arco tangente que a continuaci on mostramos. n = 0, 1, . . . .

2.2
2.2.1

Otros m etodos
El m etodo de bisecci on

F Es posible que conozca el m as pedrestre de los m etodos para resolver f (x) = 0, conocido como m etodo de bisecci on. A diferencia del m etodo de Newton en que s olo es necesario un iterante inicial, el m etodo de bisecci on necesita partir de dos valores para los cuales f toma signo distinto (de tal modo que, si f es continua, con toda seguridad hay al menos un cero de f entre ellos). En cada paso se sustituye uno de los dos valores por el punto medio del intervalo que forman, de modo que f tome signo distinto en la pareja de puntos resultante. Un algoritmo para este m etodo es como sigue.

1) T omense a y b con f (a)f (b) < 0. 2) Mientras |b a| > T OLr max(|a| , |b|), h agase lo siguiente: b 2.1) c a + 2 2.2) Si f (a)f (c) < 0, b c, y en caso contrario a c. El u ltimo valor de c obtenido por este procedimiento se toma como aproximaci on al cero x de f . Igual que en los casos anteriores, aparte de no superar un m aximo de iteraciones prejado de antemano, es frecuente cambiar el criterio en 2) por Mientras |b a| > T OLr max(|a| , |b|) + T OLa , con T OLr y T OLa los valores de las tolerancias para los errores relativo y absoluto respectivamente. Observe que en cada iteraci on, al tomar f signos distintos sobre a y b, siempre hay un cero de f entre ambos valores. Dado que en cada paso de la iteraci on la longitud del intervalo denido por los sucesivos valores de a y b se divide por dos, el m etodo converge, pues la cantidad max(|x a|, |x b|), se divide por dos en cada paso. Comparado con el m etodo de Newton pues tiene estas dos ventajas Converge siempre No requiere disponer de la derivada de f , pero tiene como desventaja que en general converge a x m as despacio que el m etodo de Newton. As por ejemplo, para f (x) = tan(x) 1, ejecutamos en Matlab a=0.5, b=1, y, tras asignar fa=tan(a)-1 y fb=tan(b)-1, que tienen signos opuestos, repetimos la l nea siguiente c=(a+b)/2; fc=tan(c)-1; if fa*fc<0; b=c;fb=fc; else; a=c; fa=fc; end; 4*c obteniendo las respuestas 3 3.5000 3.2500 3.1250 3.1875 3.1562 3.1406 3.1484 3.1445 3.1426 (Comp arese con el m etodo de Newton para la misma funci on en la secci on anterior). 6

2.2.2

El m etodo de la secante

Aparte de los procedimientos de iteraci on de punto jo, de los que una excelente descripci on puede encontrar en [5], 9.4, la mayor parte de los procedimientos utilizados en la pr actica para resolver f (x) = 0 son variantes del m etodo de Newton. Uno de ellos es el conocido como m etodo de la [n] secante , en el cual el valor de f (x ) en (3) se sustituye por el cociente incremental f (x[n] ) f (x[n1] ) , x[n] x[n1] quedando pues el m etodo siguiente. M etodo de la secante para aproximar x soluci on de f (x) = 0. 1) T omense x[0] y x[1] sucientemente cercanos a x . 2) Para n = 1, 2, . . . x[n+1] = x[n] f (x[n] ) x[n] x[n1] . f (x[n] ) f (x[n1] ) (5)

Si en el m etodo de Newton lo que se hace en cada paso es reemplazar f (x) por su recta tangente en x[n] (de ecuaci on y = f (x[n] ) + f (x[n] )(x x[n] )) en el m etodo de la secante, se cambia f por la [n] [n1] recta que para las abcisas x y x tiene por ordenadas lo que vale f en dichos puntos, esto es, f (x[n] ) y f (x[n1] ) respectivamente, recta que tiene por ecuaci on y = f (x[n] ) + f (x[n] ) f (x[n1] ) (x x[n] ). x[n] x[n1]

El valor de x[n+1] es aquel para el que y toma el valor 0, tal y como indicamos en el siguiente dibujo.

f(x) x[0] x[1] x[2]


secante

A diferencia del m etodo de bisecci on, no es necesario que f tenga signos opuestos en los dos [0] [1] puntos iniciales x y x . Por ejemplo, para f (x) = arctan(x), cuyo u nico cero es x = 0, tomamos x[0] = 1/2 y x[1] = 2, para los cuales (vea la gr aca del arco tangente que mostramos en la Secci on 2.1) por ser ambos positivos, se tiene f (x[0] ) > 0, f (x[1] ) > 0.

(De hecho, los primeros d gitos signicativos de estos valores son 0.4636 y 1.1071, respectivamente). Aplicamos el m etodo de la secante partiendo de estos valores. As , en Matlab ejecutaremos primero 7

x=0.5;y=2;fx=atan(x);fy=atan(y); y a continuaci on repetiremos la l nea p=(fy-fx)/(y-x); z=y-fy/p; obteniendo las respuestas siguientes: -0.5808 0.2506 -0.0139 2.7058e-04 -1.7156e-08 4.1865e-16 Igual que en el m etodo de Newton, observamos c omo a partir de un iterante determinado (el tercero en este ejemplo) se observa que cada error (el propio valor, pues x = 0) es el aproximadamente cuadrado del anterior. En realidad, para el m etodo de la secante se tiene que a partir de una iteraci on sucientemente avanzada cada error es proporcional a la potencia p- esima del error anterior, con apida que en el p = (1 + 5)/2 = 1.618 . . . < 2. Luego la convergencia es ligeramente menos r m etodo de Newton. Igual que en el m etodo de Newton, en el m etodo de la secante, es importante que los dos iterantes iniciales est en sucientemente cerca del cero x . Tomemos ahora x[0] = 3 y x[1] = 6. Para estos valores, aunque se verica que f (x[0] ) < 0, f (x[1] ) > 0, y por tanto, la ra z x est a entre ambos valores, si aplicamos el m etodo de la secante ejecutando primero x=-3;y=6;fx=atan(x);fy=atan(y); y repitiendo despu es la l nea p=(fy-fx)/(y-x); z=y-fy/p; obtenemos que los valores de y son, 1.2345 -6.9900 -1.9223 14.4568 4.9703 -95.5662 -42.0740 6.1802e+03 3.0455e+03 -2.9556e+07 que nos sugirere que los valores obtenidos jam as se acercar an a la ra z x = 0. 8 x=y; fx=fy; y=z; fy=atan(y); y x=y; fx=fy; y=z; fy=atan(y); y

2.2.3

Comandos de Matlab y Octave

Hemos visto que el m etodo de bisecci on tiene a su favor la robustez o abilidad (siempre converge) mientras que el m etodo de Newton, o su versi on m as pr actica del m etodo de la secante, tiene a su favor la velocidad de convergencia hacia el cero buscado. Parece que lo ideal ser a un m etodo que reuniese ambas cualidades. En realidad dicho m etodo est a inventado hace mucho tiempo, y es el que utiliza el comando de Matlab fzero. Para la descripci on de dicho m etodo, v ease por ejemplo [2]. En este m etodo, como en el m etodo de bisecci on, siempre se tienen x[n] e y [n] de modo que [n] [n] [n ] f (x )f (y ) < 0, siendo y la mejor aproximaci on a la ra z encontrada hasta el momento. La [n] decisi on de dar un paso del m etodo de la secante (usando y e y [n1] ) o un paso de bisecci on se [n] [n1] 2 basa en si |f (y )| < |f (y )| o no. Para utilizar el comando fzero basta indicar la funci on f de la que queremos encontrar el cero, [0] as como o bien un punto inicial x , o bien dos valores x[0] e y [0] en los que la funci on f tiene signo distinto. Por ejemplo, si 5 9 (6) f (x) = x sen(x) , 10 6 y tenemos esta funci on escrita en el chero unafun.m function f=unafun(x) % funcion de prueba para buscar un cero f=x-0.9*sin(x)-5/6; tomando como x[0] = 0 bastar a ejecutar xestrella=fzero(@unafun,0) para obtener el resultado xestrella = 1.7229 Dado que todos los comandos que implementan un m etodo iterativo tienen un contador m aximo de iteraciones conviene siempre comprobar que lo que nos devuelve Matlab es efectivamente un cero de la funci on f . Esto lo podemos hacer ejecutando unafun(xestrella) obteniendo la respuesta ans = -1.1102e-16 valor del orden de la unidad de redondeo. El comando fzero de Matlab utiliza como tolerancia para detener la iteraci on el valor de la unidad de redondeo (que se puede obtener con el comando eps de Matlab). Las opciones
Si como criterio de parada se utiliza que |f (y [n] )| sea sucientemente peque no, la decisi on de dar un paso con el m etodo de bisecci on en vez de con el m etodo de la secante se toma si y [n] e y [n1] est an excesivamente cerca.
2

que utiliza por defecto el comando fzero se pueden cambiar mediante el comando optimset. Por ejemplo, cuando f es muy costosa de evaluar, puede interesar no calcular con excesiva precisi on x y tardar menos en obtener un valor aproximado. Si en el caso que nos ocupa queremos solamente un error del uno por mil, podemos ejecutar misopts=optimset(TolX,0.001) y a continuaci on xestrella2=fzero(@unafun,0,misopts) obteniendo la respuesta xestrella2 = 1.7228 para la que ejecutando unafun(xestrella2) se obtiene ans = -1.4329e-04 que efectivamente nos indica que es una aproximaci on peor al cero x de f . Otros posibles valores por defecto que utiliza fzero y que se pueden cambiar con el comando optimeset pueden verse con la ayuda sobre este u ltimo comando. Octave tambi en dispone de los comandos fzero y optimset, pero tambi en dispone del comando fsolve para resolver sistemas de ecuaciones no lineales como los que tratamos en la secci on siguiente. El comando fsolve tambi en se encuentra disponible en el toolbox de optimizac on de Matlab.

3
3.0.4

Sistemas de Ecuaciones
El m etodo de Newton

Aunque es asombrosa la cantidad de p aginas que se pueden encontrar en los libros de texto sobre m etodos para encontrar una ra z de la ecuaci on f (x) = 0 con f funci on real de variable real, pr acticamente nada se encuentra sobre procedimientos para resolver sistemas de ecuaciones como el que mostramos en (1) en la Secci on 1. Para sistemas de ecuaciones, los procedimientos usados en la pr actica son variantes del m etodo de Newton. En efecto, todo sistema de m ecuaciones con m inc ognitas se puede expresar como la ecuaci on f (x) = 0, donde f es un campo de m componentes y x es un vector de m componentes. As , si por sencillez y por concreci on en el sistema (1) de la Secci on 1 tomamos = 2 = 0 = 3, dicho sistema deviene en 3v1 (1 v1 ) v1 v2 (1 e5v1 ) = 0, v2 + 3v1 v2 (1 e3v2 ) = 0. 10 (7) 1 = = 1, 0 = 5,

Denotando entonces v= v1 v2 , y f (v ) = 3v1 (1 v1 ) v1 v2 (1 e5v1 ) v2 + 3v1 v2 (1 e3v2 ) f (v ) = 0. En general si f es un campo de m componentes, cada una de ellas funci on de m variables x1 , . . . , xm que agruparemos en el vector x, y x satisface que f (x ) = 0, sabemos entonces que, para x cercano a x se tiene el desarrollo de Taylor siguiente, 0 = f (x ) = f (x) + Df (x)(x x) + D2 f (x, x )(x x, x x), (9) , (8)

el sistema (7) se abrevia entonces como

donde Df (x) es la matriz diferencial de f en x, que, si denotamos como f (1) , . . . , f (m) las m componentes del campo f , podemos escribir como x1 f (1) (x) . . . xm f (1) (x) . . ... . . Df (x) = [x1 f (x), . . . , xm f (x)] = , . . (m) (m) x1 f (x) . . . xm f (x) y las m componentes de D2 f (x, x )(x x, x x) vienen dadas por
1

(x x)T
0

(1 s)D2 f (j ) ((1 s)x + sx ) ds (x x),

j = 1, . . . , m,

(10)

siendo D2 f (j ) la matriz Hessiana del campo escalar f (j ) , (j ) 2 (j ) 2 f ( x ) x f ( x ) . . . x1 xm 1 x1 . . .. . . D2 f (j ) (x) = . . . . 2 2 x f (j ) (x) . . . x f (j ) (x) m x1 m xm Si x est a lo sucientemente cerca del cero x de f , como para que x x de modo que podamos escribir (9) como 0 = f (x ) f (x) + Df (x)(x x) sin cometer un error excesivo, multiplicando por la inversa de la matriz diferencial J = Df (x), tenemos entonces que (x x) J 1 f (x) x x J 1 f (x).
2

x x

Esta aproximaci on es la base del m etodo de Newton, que, en el caso de sistemas es como sigue, 11

M etodo de Newton para aproximar x soluci on del sistema f (x) = 0. 1) T omese x[0] sucientemente cercano a x . 2) Para n = 0, 1, . . . 2.1) Calcular J = Df (x[n] ), 2.2) Resolver el sistema Je[n] = f (x[n] ), 2.3) x[n+1] = x[n] + e[n] . Ejemplo 1 La matriz diferencial del campo (8) es Df (v ) = 3 6v1 v2 5e5v1 3v2 v1 1 + 3v1 3e3v2

En este ejemplo tomaremos = 0.2 y = 4 , (10 + 2 )2

(reejando el hecho que se pescan bastantes m as boquerones que lubinas). Las funciones de Matlab fun.m y funjac.m que mostramos a continuaci on calculan el campo f y su matriz diferencial. function f=fun(u,lambda) % funcion del modelo Lubina-boqueron con pesca beta=lambda^2; beta=beta/(10+beta);beta=beta^2; f1=3*u(1)*(1-u(1))-u(1)*u(2)-lambda*(1-exp(-5*u(1))); f2=-u(2)+3*u(1)*u(2)-beta*(1-exp(-3*u(2))); f=[f1;f2];

function J=funjac(u,lambda) % Diferencial del campo dado por fun.m beta=lambda^2; beta=beta/(10+beta);beta=beta^2; J=[3-6*u(1)-u(2)-5*lambda*exp(-5*u(1)), -u(1) 3*u(2), -1+3*u(1)-3*beta*exp(-3*u(2))]; Aplicamos el m etodo de Newton a este sistema ejecutando las siguientes l neas de c odigo % datos lambda=0.2; TOL=1e-12; maxit=10; % valor inicial (solucion cuando lambda=0) u0=[1/3 2];

12

elerr=2*TOL*norm(u0); u=u0; n=0; while (elerr>TOL*norm(u) & n<maxit) n=n+1; J=funjac(u,lambda); f=fun(u,lambda); e=-J\f; elerr=norm(e) u=u+e; end % mostramos la solucion calculada u N otese que la l nea donde se calcula el error (la norma de la diferencia entre dos iterantes consecutivos) no lleva punto y coma al nal, con lo que veremos la progresi on del algoritmo. Ejecutando dichas l neas obtenemos las siguientes respuestas elerr = 0.4867 elerr = 2.2498e-06 elerr = 8.0896e-12 elerr = 1.6029e-17 u = 0.3333 1.5133 Si evaluamos el campo f en u con el comando fun(u,lambda) obtenemos ans = 1.0e-15 * -0.0278 -0.2863 que muestra que efectivamente y hasta donde permite el error de redondeo, el valor calculado es un cero del campo f . Obs ervese tambi en c omo el error en cada iteraci on es aproximadamente el cuadrado del error en la iteraci on anterior, salvo en la segunda y en la u ltima (en el caso de la segunda porque, como ya hemos mencionado, se debe estar lo sucientemente cerca de x para que cada error sea proporcional al cuadrado del error en la iteraci on anterior; pero en el caso de la u ltima iteraci on, por qu e no es el error del orden del cuadrado del de la pen ultima?).

13

3.0.5

Variantes

Es frecuente en la pr actica modicar el m etodo de Newton explicado en la secci on anterior con el objeto de hacerlo m as econ omico o m as robusto. Quedan fuera del a mbito de este curso dichas variantes, pues es muy poco probable que antes de acabar sus estudios tenga que resolver problemas realmente dif ciles donde sea necesario emplearlas. Dada su gran difusi on, mencionaremos sin embargo el conocido como m etodo de la cuerda. En este m etodo lo que se intenta es abaratar el costo de cada iteraci on del m etodo de Newton. Notemos que cada una de estas iteraciones requiere resolver un sistema lineal de m ecuaciones con m inc ognitas, cuyo costo, como bien sabemos es (m3 m)/3 ops para el proceso de eliminaci on 2 y m para los procesos de sustitucion progresiva y regresiva. En el m etodo de la cuerda, en cada iteraci on, se sustituye J = Df (x[n] ) por la primera de estas [0] matrices, J = Df (x ), y se aprovecha la factorizaci on LU hecha en el primer paso, con objeto de que en cada iteraci on s olo haya que resolver sistemas con los factores L y U , con un costo total de m2 ops, ahorr andose as los (m3 m)/3 ops de una eliminaci on. El m etodo resultante ser a como sigue M etodo de la cuerda para aproximar x soluci on del sistema f (x) = 0 1) T omese x[0] sucientemente cercano a x y calc ulese J = Df (x[0] ). 2) Para n = 0, 1, . . . 2.1) Resolver el sistema Je[n] = f (x[n] ), 2.2) x[n+1] = x[n] + e[n] . Este m etodo no converge tan r apido como el m etodo de Newton (y, como este, no tiene por [0] qu e converger si x no est a sucientemente cerca de x ) esto es, partiendo del mismo x[0] que el m etodo de Newton, el m etodo de la cuerda suele necesitar m as iteraciones que el de Newton para conseguir un nivel de precisi on o error determinado. Sin embargo, si m es grande, este mayor n umero de iteraciones suele verse compensado por la sustancial reducci on del costo operativo de cada iteraci on. Ejemplo 2 (Continuaci on del Ejemplo 1) Si en ejemplo de la secci on anterior cambiamos el m etodo de Newton por el de la cuerda, el correspondiente programa de Matlab ser a el siguiente. % datos lambda=0.2; TOL=1e-12; maxit=10; % valor inicial (solucion cuando lambda=0) u0=[1/3 2]; % su Jacobiano y su descomposicion LU J=funjac(u0,lambda); [L,U]=lu(J); elerr=2*TOL*norm(u0); 14

u=u0; n=0; while (elerr>TOL*norm(u0) & n<maxit) n=n+1; f=fun(u,lambda); e=-U\(L\f); elerr=norm(e) u=u+e; end % mostramos la solucion calculada u Si lo ejecutamos, obtenemos lo siguiente elerr = 0.4867 elerr = 1.7188e-06 elerr = 4.0183e-07 elerr = 9.7779e-08 elerr = 2.3793e-08 elerr = 5.7898e-09 elerr = 1.4089e-09 elerr = 3.4283e-10 elerr = 8.3422e-11 elerr = 2.0300e-11 u = 0.3333 1.5133 Vemos primero que efectivamente la convergencia es bastante m as lenta que en el caso del m etodo de Newton en la secci on anterior. De hecho, se ha llegado al m aximo de iteraciones permitidas (diez) sin que los errores obtenidos sean menores que la tolerancia de 1012 puesta a priori. Si ejecutamos fun(u,lambda) obtenemos ans = 15

1.0e-10 * 0.0376 -0.1127 que nos indica que si bien el valor u obtenido es una buena aproximaci on al cero de f , es peor que la obtenida en la secci on anterior. N otese sin embargo que para dimensiones tan peque nas como la de este ejemplo, m = 2, el m etodo de la cuerda realmente no compensa. Regla de Armijo. Mencionaremos por u ltimo una variante del m etodo de Newton de gran difusi on pr actica. El objeto de esta variante, conocida como regla de Armijo , es dotar de mayor robustez (o abilidad) al m etodo de Newton. Consiste en cambiar la relaci on x[n+1] = x[n] + e[n] , del m etodo de Newton (o de la cuerda) por x[n+1] = x[n] + 1 [n] e , 2kn

donde, kn es en principio distinto para cada iteraci on, siendo kn el primer entero no negativo (incluido el 0) para el que se verica que f (x[n] + 1 [n ] e ) < (1 ) f (x[n] ) , 2kn 2kn

siendo (0, 1) un valor peque no, t picamente = 104 . N otese que si al aplicar la regla de Armijo obtenemos que kn = 0 para todos los pasos n = 0, 1, . . . , el m etodo resultante es el m etodo de Newton. Sin embargo, en buena parte de los casos en los que con un iterante inicial x[0] el m etodo de Newton no converge, se consigue convergencia aplicando la regla de Armijo, donde t picamente el valor de kn es grande para las primeras iteraciones, y kn = 0 (m etodo de Newton puro) para las u ltimas. M as detalles e informaci on sobre el m etodo de Newton pueden encontrarse en [4]. 3.0.6 Cuestiones de orden pr actico

Mencionaremos tres. Una es el error m as com un que suele cometerse cuando se utiliza el m etodo de Newton y c omo detectarlo. La segunda se reere a qu e hacer cuando no se dispone del Jacobiano. [0] La u ltima se reere a c omo conseguir que x est e cerca de x . En muchas situaciones pr acticas a todos nos ha ocurrido el habernos desesperado intentando hacer converger al m etodo de Newton. Por m as que hemos probado diferentes x[0] siempre diverg a (piense que esto le ocurre terminando el proyecto de n de carrera). Con horror descubrimos en su momento que no es que el m etodo estuviese mal programado o que los x[0] fuesen inadecuados (daba la casualidad de que se trataba de uno de esos problemas donde el m etodo de Newton tiene lo que se conoce como convergencia global, esto es, que converge sea cual sea x[0] ). Entonces, d onde demontre estaba el error? Como cientos antes de nosotros y como cientos despu es, el error estaba en haber calculado mal la diferencial Df . El que esto escribe ha visto docenas de veces c omo compa neros suyos han arruinado tardes enteras de trabajo por la dichosa diferencial Df 16

(normalmente en epoca de ex amenes, que es cuando hay que entregar los trabajos de pr acticas, y cuando menos se puede permitir uno el lujo de perder una tarde). Si no se lo cree, all a Vd. Pero luego no diga que no le hemos advertido. Tremendismos aparte, suele ser efectivamente uno de los errores m as frecuentes y que con mayor facilidad arruinan la convergencia del m etodo de Newton. Cada vez son m as los paquetes de Software que, no andose del usuario, ofrecen la posibilidad de calcular ellos mismos Df a base de cocientes incrementales, aunque esta t ecnica requiere ser cuidadadoso en la elecci on de los incrementos (vea por ejemplo la obra citada de Kelley [4]). Si somos nosotros los que elaboramos un programa o funci on que calcule la diferencial, siempre debemos probarla. Recuerde que para e con e sucientemente peque no se tiene que si f es sucientemente regular, f (x + e) f (x) Df (x)e = O( e 2 ). (11)

En los ejemplos de las secciones anteriores, probamos que la funci on funjac.m efectivamente calculaba la diferencial de la funci on f del programa fun.m con las siguientes l neas de c odigo. x=randn(2,1); e=randn(2,1); lambda=rand(1); mu=0.1; f0=fun(x,lambda); J=funjac(x,lambda); for j=1:6 f1=fun(x+mu*e,lambda); norm(f1-f0-mu*J*e) mu=mu/10; end Al ejecutarlas obtuvimos lo siguiente, ans = 0.1103 ans = 0.0012 ans = 1.1854e-05 ans = 1.1862e-07 ans = 1.1863e-09 ans = 1.1863e-11 Observamos c omo efectivamente al dividir la norma del incremento e por 10, la norma del residuo f (x + e) f (x) Df (x)e se divide por 100 conrmando (11) con lo que podemos dar por bien programada la funci on funjac.m. Note sin embargo que conviene ejecutar estas l neas varias veces con incrementos e diferentes. La segunda cuesti on que comentamos es qu e hacer cuando, pudi endose calcular (o aproximar) f (x), no se dispone de un procedimiento para obtener su jacobiano. Una soluci on consiste en 17

aproximarlo mediante cocientes incrementales. Comentamos aqu como elegir en la pr acitca los incrementos. Comenzamos con su elecci on para el c alculo de una derivada. Observe que para una funci on real de variable real el desarrollo de Taylor muestra que h f (x + h) f (x) = f (x) + f ( ) h 2 para cierto punto entre x y x + h. La f ormula anterior nos sugiere que podemos aproximar f (x) tanto como queremos tomando h tan peque no como sea necesario. Pero bien sabemos que en la pr actica siempre se comenten errores, aunque sean los de redondeo. En tal caso, si, en vez de f (x + h) y f (x) tenemos aproximaciones (x + h) = f (x + h) + f tendremos entonces que (x + h) f (x) f h = f (x) + f ( ) + h 2
1 1,

(x) = f (x) + f

2, ,

con

| 1| , | 2| ,

Vemos ahora que junto al error anterior, f ( )h/2, tenemos ahora un segundo t ermino de error cuyo valor absoluto se incrementa al disminuir h. Por otro lado si tomamos h demasiado grande para no incrementar ( 1 2 )/h, es el valor absoluto de f ( )h/2 el que se incrementa. Por ello en la pr actica se intenta equilibrar (una cota de) ambas fuentes de error. Para ello, dado que
1

2 , h

y con frecuencia no se conoce el tama no de f , se suele tomar h = sign(x) , (lo del signo es para evitar cancelaci on num erica) pues en este caso h 1 1 2 f ( ) = f ( ) , y 2 , 2 2 h (ambos t erminos proporcionales a ). En la pr actica, para evitar sumar n umeros de muy diferente magnitud, se toma h = max(1, |x|)sign(x) . Para una funci on de m componentes y m variables, podemos aproximar entonces cada una de las columnas de su Jacobiano J = Df (x), J = [x1 f (x), . . . , xm f (x)], como xk f ( x ) f (x + k hek ) f (x) , k h 18

k = 1, . . . , m

donde e1 , . . . , em son los vectores coordenados de Rm , k = max(1, |xk |)sign(xk ), k = 1, . . . , m, y h= ,

siendo una cota del error cometido en el c alculo de f . La u ltima cuesti on que comentaremos es la elecci on del iterante inicial x[0] . Sobre este punto no hay nada est andar, pero quiz a merezca la pena destacar la posibilidad de utilizar un m etodo de continuaci on para resolver f (x) = 0. Consiste en crear una familia de problemas dependientes de un par ametro, g (x, ) = 0 de modo que para = 1 se tenga que g (x, 1) = f (x) y que para = 0 g (x, 0) = 0 sea f acil de resolver. No queda m as que ir resolviendo problemas g (x, ) = 0 para valores de creciendo hasta llegar a uno, y utilizar la soluci on de cada problema como iterante inicial del problema siguiente. C omo crear la familia de problemas g (x, ) = 0? Esto se puede hacer con sentido com un tras analizar el problema. En cualquier caso, se sorprender a de saber que suele ser justo al contrario. Con frecuencia lo que se tiene en la pr actica es una funci on que depende de varios par ametros f (x, 1 , 2 , . . . , n ) = 0 y no se sabe por d onde empezar a dar valores. Una excelente referencia moderna sobre los m etodos de continuaci on es [3], aunque encontrar a sin duda bastante m as u til la obra citada de Eusebius Doedel [1].

Cuestiones y Ejercicios
CUESTIONES

Ejercicio 1 En la Secci on 2.1 hemos escrito tanto el m etodo de Newton, como un algoritmo que lo implementa. En la Secci on 2.2.1, s olo hemos escrito un algoritmo para el m etodo de bisecci on. Escriba dicho m etodo. Ejercicio 2 Hemos estudiado procedimientos para hallar los ceros de una funci on. C omo encontrar a todas las ra ces de un polinomio de grado n? Qu e hace el comando roots de Matlab para encontrarlas? Ejercicio 3 El m etodo de la cuerda, aunque cuando m as sentido tiene es en sistemas de dimensi on grande, tambi en se puede emplear para una sola ecuaci on f (x) con f funci on real de variable real. Haga una interpretaci on gr aca del m etodo de la cuerda similar a la hecha en esta lecci on para el m etodo de Newton y el m etodo de la secante. Ejercicio 4 En la p agina 5 hemos visto que si aplicamos el m etodo de Newton a f (x) = atan(x) partiendo de x = 2 diverge. Apl quelo pero con la regla de Armijo. Ejercicio 5 Mediante desarrollo de Taylor es f acil comprobar que h2 f (x + h) f (x h) = f (x) + f ( ), 2h 6 (12)

para cierto entre x h y x + h. A tenor de lo visto en la p. 18 sobre la aproximaci on de derivadas por cocientes incrementales, qu e valor de h elegir a para aproximar f (x) con la f ormula (12) si el error en el c alculo de f (x + h) y f (x h) se sabe acotado (en valor absoluto) por ? 19

PROBLEMAS Problema 1 Para la = 0, 1, 2 encontrar el vector x = [x1 , x2 , x3 ]T tal que Ax + g (x) = b, donde 6 1 2 4 3 , A = 1 2 3 5 2 2 4x1 e2x1 +x2 1 2 2 g (x) = 2x2 e2x1 +x2 1 + 5 sinh(5x2 x3 ) , sinh(5x2 x3 ) 1 b = 2 . 3

Explique c omo lo ha hecho y escriba en su hoja de respuestas el valor x2 con 8 cifras signicativas correctas. Problema 2 El m etodo de Newton para encontrar el cero de una funci on f , se basa en sustituir una funci on por su desarrollo de Taylor de primer orden. El m etodo de Halley, es similar, pues se basa en desarrollos de Taylor hasta el segundo orden. 1. Elabore una funci on de Matlab que programe el m etodo de Newton. Los argumentos de entrada deben ser los nombres de los cheros donde se encuentran la funci on f de la cual se desea el cero y su derivada, la aproximaci on inicial x0 , la tolerancia T OL para la cual la iteraci on se detiene cuando |f (x)| T OL (siendo x la u ltima aproximaci on encontrada) y el n umero m aximo de iteraciones permitidas maxiter. Los argumentos de salida deben ser la u ltima aproximaci on encontrada y el n umero de iteraciones realizadas. 2. Ejecute el programa del apartado anterior con la funci on f (x) = tan(x) 1, T OL = 1012 , maxiter = 4, x0 = 0. Escriba las 7 primeras cifras signicativas de la aproximaci on encontrada. 3. En el m etodo de Halley cada nueva aproximaci on x(n) se obtiene de la anterior mediante la f ormula en , x(n+1) = x(n) 1 1 g e 2 n n donde en = f (x(n) )/f (x(n) ) y gn = f (x(n) )/f (x(n) ). Modique el programa del apartado 1 para que implemente el m etodo de Halley. En los argumentos de entrada deber a incluir tambi en el nombre del chero donde se encuentra la funci on derivada segunda de f . Escriba el listado del programa. 4. Repita el punto 2 con el m etodo de Halley. NOTA: En los apartados 2 y 4 escriba los resultados que obtiene al ejecutar sus programas con un m aximo de cuatro iteraciones, aunque Vd. sospeche o est e seguro de que algunas de las u ltimas cifras signicativas no sean del todo correctas. 20

Problema 3 En el m etodo de la secante para encontrar el cero de una funci on f , cada nueva aproximaci on es el cero de la recta secante a f (o interpolante lineal) en las dos aproximaciones anteriores. El m etodo de Muller es similar, pues cada nueva aproximaci on es una ra z del interpolante cuadr atico de f en las tres aproximaciones anteriores. 1. Elabore una funci on en Matlab que programe el m etodo de la secante. Los argumentos de entrada deben ser el nombre del chero donde se encuentra la funci on f de la cual se desea el cero, las dos aproximaciones iniciales x0 y x1 , la tolerancia T OL para la cual la iteraci on se detiene cuando |f (x)| T OL (siendo x la u ltima aproximaci on encontrada) y el n umero m aximo de iteraciones permitidas maxiter. Los argumentos de salida deben ser la u ltima aproximaci on encontrada y el n umero de iteraciones realizadas. 2. Ejecute el programa anterior con la funci on f (x) = tan(x) 1, con T OL = 1012 , maxiter=4, x0 = 1 y x1 = 0. Escriba las 7 cifras signicativas de la aproximaci on encontrada. 3. Si p(x) = a + b(x x2 ) + c(x x2 )(x x1 ), expresando x x1 = (x x2 ) + (x2 x1 ), encuentre el valor para el cual p tambi en se escribe como p(x) = a + (x x2 ) + c(x x2 )2 . Explique c omo se puede utilizar esta segunda forma de escribir el pol gono p para encontrar sus ra ces. 4. Modique el programa del apartado uno para que implemente el m etodo de Muller. En los argumentos de entrada deber a incluir tambi en una tercera aproximaci on x2 . En cada iteraci on, de las dos ra ces del correspondiente polinomio interpolador deber a escoger aquella que diste menos de la u ltima aproximaci on obtenida (la encontrada en la iteraci on anterior). 5. Repita el punto 2 con el m etodo de Muller con x0 = 1, x1 = 0 y x2 = 1. Problema 4 1. Resuelva la ecuaci on 4y + ey cativos correctos. 2. Resuelva el sistema de ecuaciones x(3 + 4e2x y 1 ) + 2z = 1, 2 3 4y + e2x y 1 + 4senh(z 2x) = 0, y (1 senh(z 2x)) + 4z = 2, donde senh denota el seno hiperb olico. Observe que la segunda ecuaci on se cumple cuando y toma el valor encontrado en el apartado anterior y x = z = 0. Explique c omo ha calculado la soluci on y escriba esta con seis d gitos signicativos correctos.
2 3 3 1

= 0 y escriba la soluci on con seis d gitos signi-

Bibliograf a
[1] E. J. Doedel, Lecture Notes on Numerical Analysis of Bifurcation Problems, Lecture notes from Sommerschule u ber Nichtlineare Gleichungssysteme, Hamburg, Germany, March 1721, 1997. (Available by anonymous ftp to ftp.cs.concordia.ca in pub/doedel/doc/hamburg.ps.Z 21

[2] G. E. Forsythe, M. A. Malcom & C. B. Moler Computer methods for mathematical computations Prentice-Hall International, Englewood Clis, N.J. 1977 [3] W. J. F. Govaerts, Numerical Methods for Bifurcations of Dynamical Equilibria , SIAM, Philadelphia, 2000. [4] C. T. Kelley, Solving Nonlinear Equations with Newtons method , SIAM, Philadelphia, 2003. [5] J. M. Sanz-Serna, Diez Lecciones de C alculo Num erico , Universidad de Valladolid, 1998. [6] G. W. Stewart, Afternotes on Numerical Analysis , SIAM, Philadelphia, 1996.

22

Vous aimerez peut-être aussi