2011 3 Contenido pgina 1. Errores 5 1.1 Sistemas numricos de punto flotante 5 1.2 Sistemas de punto flotante de computadoras reales 7 1.3 Algoritmos estables e inestables 14 2. Solucin de ecuaciones no lineales 15 2.1 Mtodo iterativo de punto fijo 15 2.2 Aceleracin de la convergencia 20 2.3 Mtodo de Newton-Raphson 22 2.4 Mtodo de la secante 24 2.5 Mtodo de la biseccin 27 2.6 Orden de convergencia 31 3. Solucin de sistemas de ecuaciones lineales 33 3.1 Eliminacin de Gauss 34 3.2 Pivoteo mximo de columna 38 3.3 Descomposicin LU 41 3.4 Solucin de sistemas tridiagonales 50 3.5 Mtodos iterativos: Jacobi y Gauss Seidel 54 4. Solucin de sistemas de ecuaciones no lineales 63 4.1 Mtodo de punto fijo multivariable 63 4.2 Mtodo de Newton Raphson multivariable 67 4.3 Mtodo de Broyden 72 5. Optimizacin 5.1 Bsqueda unidimensional con seccin dorada 5.2 Optimizacin sin restricciones de funciones multivariables 6. Aproximacin e interpolacin 101 6.1 Interpolacin de Lagrange 102 6.2 Interpolacin mediante splines 107 6.3 Interpolacin inversa 115 4 6.4 Aproximacin discreta de mnimos cuadrados 115 6.5 Regresin lineal mltiple 119 7. Derivacin e integracin numrica 7.1 Derivacin con polinomios de Lagrange 123 7.2 Frmulas de (n + 1) puntos 5 1. Errores El resolver problemas numricos mediante una computadora implica la presencia de dos tipos de errores: truncamiento y redondeo. Los errores de truncamiento tienen que ver con el mtodo matemtico empleado en la solucin del problema. Un ejemplo clsico es la aproximacin de la funcin exponencial mediante un polinomio de Taylor. Esta funcin se define con la serie McLaurin: Dado que no es factible calcular un nmero infinito de sumandos, es necesario entonces aproximar e a travs de un polinomio de un grado conocido. En una decisin de este tipo se x introduce un error de truncamiento, el cual siempre es una funcin exclusiva del mtodo empleado. Por ejemplo, si el polinomio de Taylor es de tercer grado
entonces el error de truncamiento estar dado por la suma de todos los trminos no incluidos en la aproximacin. Los errores de redondeo aparecen al ejecutar operaciones aritmticas con una computadora. Dado que los valores numricos no pueden ser representados en la memoria de una computadora con un nmero infinito de cifras, los errores de redondeo son inevitables. Para poder entender como se generan y se propagan este tipo de errores es necesario conocer la manera en que los valores numricos son representados dentro de una computadora, es decir, su sistema numrico de punto flotante. 1.1 Sistemas numricos de punto flotante Dentro de la memoria de una computadora los valores numricos son representados mediante aproximaciones conocidas como de punto flotante (floating point). La forma general de este tipo de representaciones es: 1 2 3 p . d d d ....... d * B e 1 2 3 p en la cual los p dgitos d d d ....... d son la mantisa del nmero, B la base y e el exponente. Si 1 d 0 entonces se trata de una representacin normalizada. Cuando la base es binaria (B = 2) y la 1 representacin normalizada, entonces d siempre ser un 1 y frecuentemente no se ocupa un bit 6 para almacenarlo (bit escondido). El nmero de dgitos p de la mantisa es conocido como precisin. Suponiendo una base B = 10 y una precisin de cinco dgitos (p = 5), los siguientes son ejemplos
de notacin normalizada: Nmero Representacin normalizada de punto flotante 27.39 .27390X10 2 -.000124 -.12400X10 -3 370285 .37029X10 6 3.141592 .31416X10 1 .66666667 .66667X10 0 Supngase un sistema normalizado muy simplificado con base binaria, bit escondido, una precisin p de dos dgitos y un exponente e tal que -2 # e # 3. En este sistema los nmeros posibles son: 2 2 .10 * 2 = 1/8 .11 * 2 = 3/16 -2 -2 2 2 .10 * 2 = 1/4 .11 * 2 = 3/8 -1 -1 2 2 .10 * 2 = 1/2 .11 * 2 = 3/4 0 0 2 2 .10 * 2 = 1 .11 * 2 = 3/2 1 0 2 2 .10 * 2 = 2 .11 * 2 = 3 2 2 2 2 .10 * 2 = 4 .11 * 2 = 6 3 3 El cero (0) tambin se incluye en el sistema no obstante que por definicin es una cantidad no normalizada. Considere la siguiente grfica que muestra los valores positivos arriba mostrados 7 Este sistema simplificado se puede utilizar para obtener algunas conclusiones vlidas para cualquier sistema de punto flotante: 1.- El nmero de valores que pueden ser representados es finito. 2.- La existencia de huecos y discontinuidades. Por ejemplo, en nuestro sistema simplificado, el valor 0.90 no tiene una representacin exacta por lo que ser aproximado por el nmero ms cercano; 1.0. 3.- Los nmeros de punto flotante no estn uniformemente espaciados. La distancia entre nmeros es ms pequea cerca del cero y ms grande cerca del mayor valor posible. La distancia entre 1.0 y el siguiente valor mayor que 1.0 se conoce como el psilon del sistema de punto flotante y es una medida de la exactitud del mismo. Para el sistema simplificado del ejemplo de arriba, psilon es igual a . En un sistema de punto flotante es posible que se generen algunos errores al tratar de representar ciertas cantidades. Sean N es el valor por representar, Nmax el nmero positivo ms grande y Nmin el nmero positivo ms pequeo entonces la tabla mostrada a continuacin muestra esos errores. Condicin Error N > Nmax Desbordamiento positivo (positive overflow) N < -Nmax Desbordamiento negativo (negative underflow) 0 < N < Nmin Subdesbordamiento positivo (positive underflow) -Nmin < N < 0 Subdesbordamiento negativo (negative underflow) Para el sistema simplificado del ejemplo; Nmax = 6 y Nmin = 1/8. 1.2 Sistemas de punto flotante de computadoras reales 8 Antes de 1985 cada fabricante de computadoras diseaba sus propios sistemas de punto flotante. Esta situacin tena el inconveniente de que potencialmente un mismo programa pidiera generar resultados diferentes en distintas arquitecturas. Para evitar esta situacin, el Instituto de Ingenieros Electricistas y Electrnicos, cuyas siglas en ingls son IEEE, defini un estndar para representaciones de punto flotante y resultados computacionales conocido como IEEE Std 754- 1985. A partir de 1985 los fabricantes de computadoras estn obligados a cumplir por lo menos con las disposiciones de este estndar asegurando entonces la consistencia de los programas. Las representaciones de punto flotante de simple y doble precisin segn IEEE Std 754-1985 son: precisin simple longitud de palabra de 32 bits mantisa de 24 dgitos (23 ms un dgito escondido) exponente de 8 bits signo de 1 bit nmero positivo ms grande: 1.701X10 38 nmero positivo ms pequeo: 1.1755X10 -38 precisin en dgitos decimales: 7 exponente mantisa 3130 2322 0 precisin doble longitud de palabra de 64 bits mantisa de 53 bits (52 ms un dgito escondido) exponente de 11 bits signo de 1 bit nmero positivo ms grande: 8.988X10 307 nmero positivo ms pequeo: 2.225X10 -308 precisin en dgitos decimales:16 exponente mantisa 63 5251 0 En ambos casos la base es binaria (B = 2). No es necesario usar en bit adicional para el signo del exponente ya que a este se le agrega una constante conocida como valor de sesgo. Por lo tanto el valor real del exponente ser el representado menos el valor de sesgo. En precisin simple el valor de sesgo es 127 y en precisin doble es 1023 . La representacin de resultados computacionales es: 9 0.0 000.... 000 000.... 000 Inf ( 4) 111.... 111 000.... 000 NaN (Not a Number: resultado de una operacin numrica invlida) 111.... 111 diferente de 0 Como referencia, una tabla con el resumen de distintos sistemas numricos de punto flotante. Sistema Longitud total, en bits Bits en la mantisa Bits en el exponente Base Exponente mximo Exponente mnimo Nmero positivo ms grande Nmero positivo ms pequeo Precisin, en dgitos decimales IEEE SP 32 23* 8 2 127 -126 1.701E38 1.1755E-38 7 IEEE DP 64 52* 11 2 1023 -1022 8.988E307 2.225E-308 16 Cray SP 64 48 14 2 8190 -8189 .273E2466 .367E-2465 15 Cray DP 128 96 14 2 8189 -8188 .273E2466 .367E-2465 30 VAX SP 32 23 8 2 127 -127 1.701E38 5.877E-39 7 VAX DP-1 64 55 8 2 127 -127 1.701E38 5.877E-39 16 VAX DP-2 64 52 11 2 1023 -1023 8.988E307 1.123E-308 15 IBM SP 32 24 7 16 63 -64 7.237E75 8.636E-78 7 IBM DP 64 56 7 16 63 -64 7.237E75 8.636E-78 16 HP 49G 16 12 3 10 499 -499 9.999E499 9.999E-499 12 Voyage 200 18 14 3 10 999 -999 9.999E999 9.999E-999 14 * ms el dgito escondido Dado que la longitud de palabra de una computadora no es infinita, la representacin de punto flotante implica una aproximacin y por lo tanto un error. Este tipo de error se conoce como de redondeo y est presente siempre que se usa una calculadora o una computadora para realizar clculos aritmticos. Las excepciones a esta regla ocurren cuando el nmero es una potencia entera de la base empleada. Al sumar, restar, multiplicar o dividir aproximaciones de punto flotante se generan errores 10 adicionales. Para mostrar esto, considere los tres siguientes ejercicios en los cuales se supone un sistema de punto flotante de base decimal (B = 10), cuatro dgitos en la mantisa (p = 4) y un exponente e que puede tomar valores en el intervalo -9 # e # 9. Ejercicio Suponga que a = 1/3 y b = 7/5. Calcule los errores absoluto y relativo para las siguientes operaciones: 1.- a + b 2.- b - a 3.- a b 4.- b a Las aproximaciones de punto flotante para a y b son, respectivamente, a* = .3333X10 y b* = 0 .1400X10 . 1 1.- Para sumar o restar dos aproximaciones de punto flotante es necesario que ambas tengan el miso exponente. Para determinar a* + b* , al segundo operando se le aplica un corrimiento de un dgito en la mantisa asegurando as que las dos representaciones tengan momentneamente el mismo exponente:
.3333X10 0 + 1.4000 X10 0 ---------------- 1.7333X10 0 El resultado se expresa tambin como una representacin de punto flotante .1733X10 1 error absoluto = | valor exacto - valor aproximado | = | 26/15 - .1733X10 | = | 26/15 - 1733/1000| 1 error absoluto = |1/3000| = 1/3000 | .00033 error relativo = error absoluto/| valor exacto| = (1/3000)/|(26/15)| = 1/5200 .00019 2.- En el clculo de b* - a* ahora el corrimiento es aplicado al sustraendo a*: .1400 X10 1 - .0333 X10 1 -------------- .1067 X10 1 error absoluto = | 16/15 - 1067/1000 | = 1/3000 .00033 error relativo = (1/3000)/| (16/15)| = 1/3200 .00031 11 3.- En el producto de aproximaciones de punto flotante las mantisas se multiplican y los exponentes se suman .3333X10 0 .1400X10 1 ---------------------- 0000 0000 13332 3333 ----------------------- .04666200X10 1 En este caso el resultado es expresado com .4666X10 . 0 error absoluto = | 7/15 - 4666/10000 | = 1/15000 .00007 error relativo = (1/150000)/|(7/15)| = 1/7000 .00014 4.- En b* a* las mantisas se dividen y los exponentes se restan: .42004 X10 1 ---------------------- .3333X10 | .140000000X10 0 1 13332 --------- 6680 6666 ------ 14000 13332 -------- 668 El resultado es la aproximacin .4200X10 . 1 error absoluto = | 21/5 - 4200/1000 | = 0 error relativo = 0/|(21/5)| = 0 Ejercicio 12 Considere u = 3785.7 y v=3785.3. Determine los errores absoluto y relativo correspondientes a la operacin u - v. Las aproximaciones de punto flotante son: u* = .3786X10 4 v* = .3785X10 4 .3786X10 4 - .3785X10 4 ------------- .0001X10 = .1000X10 4 1 La sustraccin de dos nmeros casi iguales implica una prdida de dgitos significativos. error absoluto = | .4 - .1000X10 | = | .4 - 1 | = | 4/10 - 10/10 | = 6/10 = .6000 1 error relativo = (6/10) / |(4/10)| = 3/2 = 1.5 Al restar dos cantidades casi iguales se obtienen errores absolutos y relativos grandes. Ejercicio Considere u = 27.14 y v = .000006 . Determine los errores absoluto y relativo que resultan de la operacin uv. Las aproximaciones de punto flotante son: u* = .2714X10 2 v* = .6000X10 -5
.45233X10 7 ----------------------------- .6000X10 | .27140000X10 -5 2 24000 ---------- 31400 30000 ----------- 14000 12000 ----------- 20000 18000 ----------- 20000 13 18000 --------- 2000 El resultado es la aproximacin .4523X10 . El valor exacto de u v es 7 u v = (2714/100) / (6/1000000) = 13570000/3 Por lo tanto los errores absoluto y relativo quedan error absoluto = | 13570000/3 - 4523000 | = 1000/3 333.33333 error relativo = (1000/3) / | 13570000/3 | = 1/13570 .00007 El dividir entre nmeros muy pequeos implica errores absolutos grandes con errores relativos pequeos. 1.3 Algoritmos estables e inestables Suponga que un error e es introducido en algn paso de un algoritmo y que el error despus de n n operaciones subsecuentes es E . n Si | E | . C n e donde C es una constante independiente de n, se dice que el crecimiento de error es lineal y que al algoritmo es estable. n Si | E | . k e para alguna constante k > 1, se dice que el n crecimiento de error es exponencial y que al algoritmo es inestable. La siguiente grfica muestra ambos crecimiento de errores
14 15 2. Solucin de ecuaciones no lineales Se trata de encontrar un valor x que cumple la igualdad f(x) = 0. Este valor se conoce como un cero o una raz de f(x). 2.1 Mtodo iterativo de punto fijo Dada una funcin g(x) , un valor x tal que x = g(x) es llamado un punto fijo de g. Una ecuacin no lineal f(x) = 0 puede ser transformada mediante operaciones algebraicas en una funcin x = g(x) de tal manera que un punto fijo de g(x) sea tambin una raz de f(x). Por ejemplo, considere a f(x) = x - x -2 = 0; cualquiera de las posibilidades 2
es una funcin cuyo punto fijo es una solucin de f(x) = 0. El primer paso de un procedimiento que puede encontrar un punto fijo de g(x) consiste en proponer una estimacin inicial x , evaluar g(x) en x para obtener una nueva aproximacin (0) (0) x , es decir, x = g(x ). La siguiente aproximacin se calcula mediante x = g(x ) y de esta (1) (1) (0) (2) (1) forma se van generando aproximaciones x , x , x , x , .... . El proceso definido por x = (3) (4) (5) (6) (k+1) g(x ) se da por terminado cuando se cumple alguno de los siguientes criterios de convergencia (k) para las dos ltimas iteraciones: 1.- *x - x * < (k+1) (k) 2.- *x - x * / *x * < (k+1) (k) (k+1) 3.- f(*x *) < (k+1) y entonces se considera que x es un punto fijo aproximado de g(x) y se dice que el proceso (k+1) alcanz la convergencia. La tolerancia es fijada antes de iniciar el clculo de las iteraciones. Este procedimiento es conocido como el mtodo de punto fijo o de iteracin funcional. 16 Geomtricamente un punto fijo de g(x) es la interseccin de la recta y = x con la curva y = g(x). La siguiente figura muestra las grficas de las cuatro funciones g(x) indicadas arriba y el comportamiento del mtodo de punto fijo para cada una de ellas. Ejemplo Encuentre una raz aproximada de f(x) = x - x - 2 = 0 con el mtodo de punto fijo. Use las 2 funciones g(x) descritas anteriormente. En todos los casos, inicie con x = 1.5 y considere un (0) criterio de convergencia *x - x * < 1X10 con un mximo de 20 iteraciones. (k+1) (k) -4 g(x) = x - 2 2 Iteracin k x *x - x * (k) (k) (k-1) 0 1.50000 1 0.25000 1.25000 2 -1.93750 2.18750 17 3 1.75391 3.69141 4 1.07619 0.67772 5 -0.84182 1.91801 6 -1.29134 0.44952 7 -0.33245 0.95889 8 -1.88948 1.55703 9 1.57013 3.45960 10 .46530 1.10483 11 -1.78350 2.24880 12 1.18087 2.96437 13 -0.60555 1.78642 14 -1.63331 1.02776 15 .66770 2.30101 16 -1.55417 2.22188 17 0.41545 1.96962 18 -1.82740 2.24585 19 1.33939 3.16679 20 -0.20603 1.54542 g(x) = %(x + 2) Iteracin k x *x - x * (k) (k) (k-1) 0 1.50000 1 1.87083 0.37083 2 1.96744 0.09661 3 1.99184 0.02440 4 1.99796 0.00612 18 5 1.99949 0.00153 6 1.99987 0.00038 7 1.99997 0.00010 g(x) = 1 + 2/x Iteracin k x *x - x * (k) (k) (k-1) 0 1.50000 1 2.33333 0.83333 2 1.85714 0.47619 3 2.07692 0.21978 4 1.96296 0.11396 5 2.01887 0.05590 6 1.99065 0.02821 7 2.00469 0.01404 8 1.99766 0.00704 9 2.00117 0.00351 10 1.99941 0.00176 11 2.00029 0.00088 12 1.99985 0.00044 13 2.00007 0.00022 14 1.99996 0.00011 15 2.00002 0.00005 g(x) = (x +2)/(2x -1) 2 Iteracin k x *x - x * (k) (k) (k-1) 0 1.50000 1 2.12500 0.62500 El lenguaje de pseudocdigo empleado est basado en el propuesto por Guillermo 1 Levine G., en su libro Computacin y Programacin Moderna, Pearson Educacin, Mxico2001. 19 2 2.00481 0.12019 3 2.00001 0.00480 4 2.00000 7.68X10 -6 La condicin suficiente pero no necesaria que garantiza la convergencia del mtodo de punto fijo est dada por el teorema: Si g(x) y gN(x) son continuas en un intervalo alrededor de un punto fijo x de la ecuacin x = g(x), y si *gN(x)* < 1 para toda x en el intervalo, entonces x = g(x ) , k = 0, 1, 2, ..., (k+1) (k) converge en el punto fijo x = x en el supuesto de que x se (0) escoja en el intervalo. A continuacin, un pseudocdigo de un procedimiento que encuentra un punto fijo de x = g(x) 1 proc punto_fijo(real func g, real &xinicial, real eps, entero maxiter, real &x, lgico &convergencia) ! ! Este procedimiento encuentra una aproximacin a la solucin del problema x = g(x) ! con el mtodo iterativo de punto fijo. ! Descripcin de parmetros: ! g Funcin externa que evala a la funcin g(x) . ! xinicial Estimacin inicial. ! eps Mximo error permisible. Cuando el valor absoluto de la diferencia de las ! dos ltimas iteraciones es menor que eps, se considera haber llegado a la ! solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es el punto fijo buscado. ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! entero iter convergencia=VERDADERO ejecuta iter = 1, maxiter { 20 x = g(xinicial) ! clculo de una nueva iteracin si ABS(x - xinicial) < eps entonces regresa ! se checa la convergencia xinicial = x ! preparacin de la siguiente iteracin } convergencia = FALSO regresa fin 2.2 Aceleracin de la convergencia El mtodo de punto fijo cuando converge, generalmente lo hace en forma muy lenta. Para acelerar su convergencia se pueden aplicar varias tcnicas, una de las ms usadas es la aceleracin de Aitken: las dos primeras iteraciones x y x se calculan con el mtodo de punto (1) (2) fijo mientras que la tercera se obtiene aplicando la frmula:
Las iteraciones x y x se calculan nuevamente con punto fijo y x se determina con la (4) (5) (6) frmula de Aitken pero aplicada a x , x y x . Es de esperarse que al aplicar la aceleracin de (3) (4) (5) Aitken cada tres iteraciones, el problema converja en un menor nmero de iteraciones. Este tcnica de Aitken puede aplicarse a cualquier proceso iterativo donde los errores decrezcan proporcionalmente, no slo a la iteracin de punto fijo. Ejemplo Obtenga un punto fijo aproximado de g(x) = 1 + 2/x. Inicie con x = 1.5 y termine cuando el (0) error absoluto de las ltimas dos iteraciones sea menor que 1X10 . Considere un nmero -4 mximo de iteraciones igual a 20. Iteracin k x *x - x * (k) (k) (k-1) 0 1.50000 1 2.33333 0.83333 2 1.85714 0.47619 3 2.03030 0.17316 21 4 1.98507 0.04523 5 2.00752 0.02244 6 2.00000 0.00744 7 1.99996 0.00011 8 2.00002 0.00006 Un pseudocdigo de un procedimiento que encuentra un punto fijo de g(x) con punto fijo y aceleracin de Aitken es: proc Aitken(real func g, real &xinicial, real eps, entero maxiter, real &x, lgico &convergencia) ! ! Este procedimiento encuentra una aproximacin a la solucin del problema x = g(x) ! empleando el mtodo iterativo de punto fijo con aceleracin de Aitken. ! Descripcin de parmetros: ! g Funcin externa que evala a la funcin g(x) . ! xinicial Estimacin inicial. ! eps Mximo error permisible. Cuando el valor absoluto de la diferencia de las ! dos ltimas iteraciones es menor que eps, se considera haber llegado a la ! solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es el punto fijo buscado. ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! entero iter real x1, x2 convergencia=VERDADERO x1 = g(xinicial) ! clculo de las dos primeras iteraciones x1 y x2 con punto fijo si ABS(x1 - xinicial) < eps entonces regresa x2 = g(x1) si ABS(x2 - x1) < eps entonces regresa ejecuta iter = 3, maxiter { ! ! se aplica la aceleracin de Aitken cada tres iteraciones ! si MOD(iter, 3) = 0 entonces 22 x = xinicial- (xinicial - x1)82 / (x2 - 2*x1+ xinicial) ! Aitken otro x= g(x2) ! punto fijo si ABS(x - x2) < eps entonces regresa ! se checa la convergencia xinicial = x1 ! preparacin de la siguiente iteracin x1 = x2 x2 = x } convergencia = FALSO regresa fin 2.3 Mtodo de Newton-Raphson
Si f(x) es un funcin continua y diferenciable n veces en un intervalo y si f existe en ese (n+1) 0 mismo intervalo , entonces el valor de la funcin f(x) alrededor de un punto x est dado por
0 0 0 0 0 0 0 0 0 f(x) = f(x ) + fN( x )(x - x ) + fNN(x )(x - x ) /2! + fNNN(x )(x - x ) /3! + ....... + f (x ) (x - x ) /n! + 2 3 (n) n n R donde n 0 R = f ((x)) (x - x ) /(n +1)! (n+1) n+1 0 Aplicando este resultado, conocido como teorema de Taylor, a un punto base x = x y a x = (k) x (k+1) f(x ) = f(x ) + fN( x )(x - x ) + fNN(x )(x - x ) /2! + fNNN(x )(x - x ) /3! + ....... + (k+1) (k) (k) (k+1) (k) (k) (k+1) (k) 2 (k) (k+1) (k) 3 n f (x )(x - x ) /n! + R (n) (k) (k+1) (k) n A continuacin se harn dos suposiciones: 1.- x . x , por lo que es razonable pensar que f(x ) .0 (k+1) (k+1) 2.- x y x son valores cercanos, por lo tanto (x - x ) .0 para j = 2, 3, 4,.... (k+1) (k) (k+1) (k) j las cuales simplifican a la ltima ecuacin: 0. f(x ) + fN( x )(x - x ) (k) (k) (k+1) (k) y entonces se despeja a x : (k+1) x = x - f(x )/fN( x ) (k+1) (k) (k) (k) 23 Esta ltima ecuacin es el mtodo de Newton-Raphson. Desde el punto de vista geomtrico; x es la interseccin del eje horizontal x con la recta (k+1) tangente a f(x) en (x , f( x )). (k) (k) Ejemplo Encuentre una raz aproximada de f(x) = 3x + sen(x) - e = 0. Tome como estimacin inicial x x (0) = 0 y un criterio de convergencia *x - x * < 1X10 . (k+1) (k) -4 f(x) = 3x + sen(x) - e x fN(x) = 3 + cos(x) - e x Iteracin k x *x - x * (k) (k) (k-1) 0 0.00000 1 0.33333 0.33333 2 0.36017 0.02684 3 0.36042 0.00025 4 0.36042 2.24843X10 -8 24 Newton Raphson casi siempre converge rpidamente, sin embargo para que funcione en forma adecuada se requiere de una estimacin inicial cercana a la raz. Una propuesta del pseudocdigo de un procedimiento que encuentra una raz aproximada de una funcin f(x) = 0 con Newton Raphson es: proc newton(real func f, real func f_prima, real &xinicial, real eps, entero maxiter, real &x, lgico &convergencia) ! ! Este procedimiento encuentra una aproximacin a una raz de f(x)=0 con el mtodo iterativo ! de Newton-Raphson. ! Descripcin de parmetros: ! f Funcin externa que evala a la funcin f(x) . ! f_prima Funcin externa que evala a la derivada de f(x). ! xinicial Estimacin inicial. ! eps Mximo error permisible. Cuando el valor absoluto de la diferencia de las ! dos ltimas iteraciones es menor que eps, se considera haber llegado a la ! solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es una raz de f(x). ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! entero iter convergencia=VERDADERO ejecuta iter = 1, maxiter { x = xinicial - f(xinicial)/f_prima(xinicial) ! clculo de una nueva iteracin si ABS(x - xinicial) < eps entonces regresa ! se checa la convergencia xinicial = x ! preparacin de la siguiente iteracin } convergencia = FALSO regresa fin 2.4 Mtodo de la secante Newton Raphson es un mtodo muy empleado por su simplicidad y rapidez, pero tiene el inconveniente de requerir la derivada de f(x). Esta situacin puede ser muy problemtica si la funcin es difcil de derivar. Una forma de evitar la derivacin es sustituir en la ecuacin de Newton Raphson 25 x = x - f(x )/fN( x ) (k+1) (k) (k) (k) fN( x ) por la frmula de diferencias finitas (k) quedando entonces x = x - f(x ) [x - x ] / [f(x ) - f(x )] (k+1) (k) (k) (k) (k-1) (k) (k-1) que define el mtodo de la secante. El nombre de este algoritmo se debe a que la interseccin de
la recta secante que pasa por los puntos (x , f(x )) , (x , f(x )) con el eje horizontal (k-1) (k-1) (k) (k) produce la nueva aproximacin x . (k+1) Ejemplo Repita el ejemplo anterior empleando el mtodo de la secante con x = 1.5 y x = 0.8. (0) (1) f(x) = 3x + sen(x) - e x 26 Iteracin k x *x - x * (k) (k) (k-1) 0 1.50000 1 0.80000 0.70000 2 -4.23482 5.03482 3 0.44708 4.68189 4 0.36549 0.08159 5 0.36025 0.00523 6 0.36042 0.00017 7 0.36042 3.06666X10 -7 Este mtodo es un miembro importante de una familia conocida como mtodos de dos puntos, llamada as porque incluye algoritmos que requieren de dos estimaciones iniciales. El precio que se paga por evitar la derivacin de f(x) es una convergencia ms lenta. Esto es, secante consumir ms iteraciones que Newton Raphson para un mismo problema. A continuacin, el pseudocdigo de un procedimiento que encuentra un cero aproximado de f(x) = 0 con el mtodo de la secante: proc secante(real func f, real &x0, real &x1, real eps, entero maxiter, real &x, lgico &convergencia) ! ! Este procedimiento encuentra una aproximacin a una raz de f(x)=0 con el mtodo iterativo ! de la secante. ! Descripcin de parmetros: ! f Funcin externa que evala a la funcin f(x) . ! x0 Primera estimacin inicial. ! x1 Segunda estimacin inicial. ! eps Mximo error permisible. Cuando el valor absoluto de la diferencia de las ! dos ltimas iteraciones es menor que eps, se considera haber llegado a la ! solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es una raz de f(x). ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! 27 entero iter real f0, f1 convergencia=VERDADERO f0 = f(x0) ejecuta iter = 2, maxiter { f1 = f(x1) x = x1 - f1*(x1 - x0)/(f1 - f0) ! clculo de una nueva iteracin si ABS(x - x1) < eps entonces regresa ! se checa la convergencia x0 = x1 ! preparacin de la siguiente iteracin x1 = x f0 = f1 } convergencia = FALSO regresa fin 2.5 Mtodo de la biseccin Mediante bisecciones sucesivas busca una raz contenida en un intervalo [a, b]. Desde luego, para que esta bsqueda funcione, el intervalo original deber contener un nmero impar de races. La condicin que garantiza tal situacin es: f(a) * f(b) # 0 Si lo anterior no se cumple, entonces o no existe raz alguna o existen un nmero par de races y en ambos caso no es factible emplear el mtodo de la biseccin. La grfica mostrada a continuacin puede ser de utilidad para apreciar mejor esta situacin. 28 Una vez aceptado un intervalo [a, b] tal que f(a) * f(b) # 0, entonces se calcula la primera iteracin x con (1) x = (a + b) / 2 (1) generndose dos nuevos intervalos: [a, x ] y [x , b]. Entonces se desecha el intervalo que no (1) (1) contiene la raz y el intervalo aceptado nuevamente es dividido en dos con la frmula x = (a + b) / 2 (2) suponiendo que los valores de a y b son actualizados en cada iteracin de tal forma que siempre sean los extremos del intervalo que contiene a la raz. El proceso se puede generalizar fcilmente para cualquier iteracin: x = (a + b) / 2 (k) y termina cuando se cumpla alguno de los criterios de convergencia usuales. La ltima frmula es mtodo de la biseccin. Ejemplo Calcule una raz aproximada de f(x) = x + 4x -10 = 0 con el mtodo de la biseccin en el 3 2 29 intervalo [1, 2]. Considere un criterio de convergencia *f(x )* < 1X10 y un nmero mximo de (k) -4 iteraciones igual a 20. Primeramente, se checa que en [1, 2] exista un nmero impar de races: f(1) = f(a) = 1 + 4(1) - 10 = -5 3 2 f(2) = f(b) = 2 + 4(2) - 10 = 14 3 2 como f(a)*f(b) = -5(14) <0 , es aplicable el mtodo de la biseccin en este intervalo. La primera iteracin es: x = (1 +2) / 2 = 1.50000 (1) y para averiguar en cual de los intervalos [1, 1.5] y [1.5, 2] est la raz, se evala f(x) en x (1) f(x ) = 1.50000 + 4(1.50000) - 10 = 2.37500 (1) 3 2 Como f(a)*f(x ) = f(1)*f(1.50000) = -5(2.37500) < 0, la raz se encuentra en [1, 1.5] y por lo (1) tanto a = 1 y b = 1.5. Iteracin k x *f(x )* (k) (k) 1 1.50000 2.37500 2 1.25000 1.79688 3 1.37500 0.16211 4 1.31250 0.84839 5 1.34375 0.35098 6 1.35938 0.09641 7 1.36719 0.03236 8 1.36328 0.03215 9 1.36523 0.00007
La convergencia del mtodo de biseccin es lenta pero casi nunca falla. Cuando todos los dems mtodos fracasan, la opcin obligada es emplear biseccin. El siguiente es el pseudocdigo de un procedimiento que encuentra una raz aproximada de f(x) 30 = 0 con el mtodo de biseccin. proc biseccion(real func f, real &a, real &b, real eps, entero maxiter, real &x, entero &error) ! ! Este procedimiento encuentra una aproximacin a una raz de f(x)=0 con el mtodo iterativo ! de la biseccin. ! Descripcin de parmetros: ! f Funcin externa que evala a la funcin f(x) . ! a Lmite inferior de un intervalo que contiene un nmero impar de races de ! f(x). ! b Lmite superior de un intervalo que contiene un nmero impar de races de ! f(x). ! eps Mxima magnitud posible de f(x). Cuando el valor absoluto de f evaluada ! en la ltima iteracin x es menor que eps, se considera haber llegado a la ! solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en error se devuelve el valor 0, entonces x ! tambin es una raz de f(x). ! error Bandera cuyo valor indica el tipo de situacin detectada: ! error = 0 sin error, se alcanz la convergencia ! error = 1 no se alcanz la convergencia ! error = 2 f(a)*f(b)>0 y entonces en el intervalo [a,b] no existe un ! nmero impar de races. ! entero iter real fa, fb, fx error = 2 fa = f(a) fb = f(b) si fa*fb > 0.0 entonces regresa error = 0 ejecuta iter = 1, maxiter { x = (a + b)/2 ! clculo de una nueva iteracin fx = f(x) si ABS(fx) < eps entonces regresa ! se checa la convergencia si fa*fx # 0.0 entonces ! preparacin de la siguiente iteracin b = x otro a = x fa = fx } error = 1 31 regresa fin 2.6 Orden de convergencia El orden de convergencia de un mtodo iterativo se define como sigue: n+1 n Si *e * tiende a K**e * cuando n tiende a infinito , se dice que p el mtodo es de orden p. Punto fijo exhibe convergencia lineal (orden de convergencia p = 1): n+1 n *e * = *gN()** e * Newton Raphson exhibe convergencia cuadrtica (orden de convergencia p = 2) para races simples: n+1 n *e * = gNN()* e * / 2 donde g(x) = x - f(x ) / fN(x ) 2 (n) (n) (n) Secante, orden de convergencia p: p = (1 + %5) / 2 . 1.62 Biseccin, convergencia lineal (orden de convergencia p = 1) : n+1 n *e * = 0.5* e * 32 33 3. Solucin de sistemas de ecuaciones lineales El sistema de n ecuaciones con n incgnitas 11 1 12 2 13 3 1n n 1 a x + a x + a x + .............. + a x = b 21 1 22 2 23 3 2n n 2 a x + a x + a x + .............. + a x = b 31 1 32 2 33 3 3n n 3 a x + a x + a x + .............. + a x = b . . . . . . . . . n1 1 n2 2 n3 3 nn n n a x + a x + a x + .............. + a x = b se puede escribir en forma matricial como Ax = b , donde A es la matriz de coeficientes, x es el vector de incgnitas y b el vector de trminos del lado derecho Existen dos tipos de mtodos para resolver el problema Ax = b; los exactos y los iterativos. Los mtodos exactos son llamados as porque, en ausencia de errores de redondeo, obtienen la solucin analtica o exacta y estn basados en la eliminacin de Gauss o en la factorizacin LU. Los mtodos del segundo tipo encuentran una solucin aproximada mediante procesos iterativos. 34 Para sistemas con matrices de coeficientes densas y relativamente pequeas, se prefieren los mtodos exactos. En el caso de sistemas con matrices de coeficientes de orden grande y poco densas, son recomendados los mtodos iterativos. 3.1 Eliminacin de Gauss Es un proceso que convierte a la matriz de coeficientes A de nxn en una matriz triangular superior mediante la aplicacin sistemtica de transformaciones elementales de rengln. Una vez obtenida la matriz triangular superior se aplica un procedimiento conocido como sustitucin hacia atrs para obtener el vector solucin x. Las transformaciones elementales de rengln son: 1.- La fila i de una matriz puede ser multiplicada por un constante 0 i i R 6R 2.- A la fila i de un matriz le puede ser sumada otra fila j de la misma matriz multiplicada por una constante j i i R + R 6R 3.- Las filas i y j de una matriz pueden ser intercambiadas i j R : R La eliminacin de Gauss consta en n-1 pasos de eliminacin y cada uno de ellos consiste en: 1.- Seleccionar un pivote: en el i-simo paso de eliminacin se escoge como pivote al i-simo elemento de la diagonal principal de A, estrategia conocida como pivoteo natural. 2.- Colocar ceros debajo del pivote en la misma columna. Ejemplo Resolver el sistema 1 2 3 x - x + x = -4 1 2 3 5x - 4x + 3x = -12 1 2 3 2x + x + x = 11 con eliminacin de Gauss y sustitucin hacia atrs. Use una estrategia de pivoteo natural. En primer lugar, se forma una matriz agregando una columna a la matriz de coeficientes. La columna aadida es el vector de trminos del lado derecho y la matriz as formada se conoce 35 como matriz aumentada del sistema: 1.00000 -1.00000 1.00000 - 4.00000 5.00000 -4.00000 3.00000 -12.00000 2.00000 1.00000 1.00000 11.00000
Primer paso de eliminacin: 11 El pivote es el primer elemento de la diagonal principal de la matriz de coeficientes, a = 1.00000. Ahora se trata de colocar ceros debajo del pivote en la primera columna; las transformaciones de rengln requeridas para tal efecto son: 1 2 2 -5R + R 6 R 1 3 3 -2R + R 6 R La fila del pivote es multiplicada por el negativo de una cantidad conocida como multiplicador y es el elemento que se quiere convertir en cero dividido entre el pivote. Aplicando esta transformaciones a la matriz aumentada, el resultado es: 1.00000 -1.00000 1.00000 -4.00000 0.00000 1.00000 -2.00000 8.00000 0.00000 3.00000 -1.00000 19.00000 Segundo paso de eliminacin: 22 El pivote es ahora a = 1.00000 y el multiplicador es m =3.00000/1.00000 = 3.00000. Por lo tanto la transformacin elemental requerida es: 2 3 3 -3R + R = R y la matriz aumentada se convierte en: 1.00000 -1.00000 1.00000 -4.00000 0.00000 1.00000 -2.00000 8.00000 0.00000 0.00000 5.00000 -5.00000 Con estos dos pasos termina la eliminacin de Gauss y la parte correspondiente a la matriz de coeficientes es una matriz triangular superior. La ltima matriz aumentada define un sistema cuya solucin es equivalente a la del sistema original: 1 2 3 1.00000x - 1.00000x + 1.00000x = -4.00000 36 2 3 1.00000x - 2.00000x = 8.00000 3 5.00000x = -5.00000 Esta solucin x se puede encontrar fcilmente: 3 x = -5.00000 / 5.00000 = -1.00000 2 3 x = (8.00000 + 2.00000x ) / 1.00000 = (8.00000+2.00000(-1.00000)) / 1.00000 = 6.00000 1 2 3 x = (-4.00000 + 1.00000x -1.00000x ) / 1.00000 1 x = (-4.0000 + 1.00000(6.00000) - 1.00000(-1.0000)) / 1.00000 = 3.00000 Este proceso es la sustitucin hacia atrs, conocido as porque se obtienen los valores de las n 1 incgnitas comenzando con la ltima x y terminando con la primera x . La siguientes frmulas describen la sustitucin hacia atrs y en ellas la letra a denota a los elementos de la matriz
aumentada: El ltimo ejercicio muestra que para poder calcular los multiplicadores en cada paso de eliminacin, el pivote necesariamente debe ser distinto de cero. Por lo tanto, si en el i-simo paso ii de eliminacin a es cero, se debe intercambiar la fila i con alguna otra colocada debajo de ella de tal forma que se lleve a la posicin del pivote un nmero distinto de cero. Si no es posible colocar un pivote diferente de cero, entonces el sistema lineal no tiene solucin nica. Otra posible situacin en la cual no existe solucin nica es aquella en la cual despus del ltimo nn paso de eliminacin el elemento a es igual a cero. Con eliminacin de Gauss tambin es factible calcular el determinante de la matriz de coeficientes: 37 ii donde ncf es el nmero de cambios de filas efectuados en la eliminacin y s representa los elementos de la diagonal principal de la matriz triangular superior resultado de la eliminacin. Por lo tanto, el determinante de la matriz de coeficientes del ltimo ejemplo es: det(A) = (-1) [(1.00000)(1.00000)(5.00000)] = 5.00000 0 Es posible contar el nmero de operaciones necesarias para resolver un sistema lineal con eliminacin de Gauss y sustitucin hacia atrs: Multiplicaciones o divisiones: n /3 + n - n/3 3 2 Sumas o restas: n /3 + n /2 - 5n/6 3 2 En anlisis numrico se emplea la notacin O(n ) la cual indica que el nmero de operaciones es 3 de orden n . La conclusin final es: la eliminacin gaussiana con sustitucin hacia atrs es un 3 proceso muy costoso en trminos de operaciones aritmticas. A continuacin, un pseudocdigo de un procedimiento que resuelve el sistema Ax = b con eliminacin gaussiana y sustitucin hacia atrs. Pivoteo natural es empleado. proc eliminacion_gauss(entero n, real &A[n, n+1], real &x[n], lgico &solucion_unica) ! ! Este procedimiento resuelve un sistema lineal de ecuaciones con eliminacin gaussiana y ! sustitucin hacia atrs. Se emplea una estrategia de pivoteo natural. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! A Matriz aumentada del sistema, de n filas y n+1 columnas. ! x Si en solucion_unica se devuelve el valor VERDADERO, entonces x ! es la solucin nica. De n elementos. ! solucion_unica Bandera que indica la existencia de una solucin nica: ! solucion_unica=VERDADERO el sistema tiene solucin nica. ! solucion_unica= FALSO la matriz de coeficientes es singular ! y no hay solucin nica. ! entero i, p, k, j real auxiliar, multiplicador, suma solucion_unica = FALSO ! Eliminacin de Gauss con pivoteo natural ejecuta i = 1, n-1 { ejecuta p = i, n ! seleccin del pivote si ABS(A[p, i]) $ 1X10 entonces salida -10 si p > n entonces regresa si p i entonces ! intercambio de las filas p e i, en caso necesario 38 ejecuta k = 1, n+1 auxiliar = A[p, k] A[p, k] = A[i, k] A[i, k] = auxiliar ejecuta j = i+1, n ! colocacin de ceros debajo del pivote multiplicador = A[j, i]/A[i, i] ejecuta k = i, n+1 A[j, k] = A[j, k] - multiplicador*A[i, k] } si ABS(A[n, n]) < 1X10 entonces regresa -10 solucion_unica = VERDADERO ! sustitucin hacia atrs x[n] = A[n, n+1]/A[n, n] ejecuta i = n-1, 1, -1 { suma = 0.0 ejecuta j = i+1, n suma = suma + A[i, j]*x[j] x[i] = (A[i, n+1] - suma)/A[i, i] } regresa fin 3.2 Pivoteo mximo de columna Si los clculo involucrados en la eliminacin gaussiana se efectuaran en una computadora o en una calculadora con longitud de palabra infinita, los resultados obtenidos seran exactos. Pero como lo anterior no es posible y las computadoras solo pueden representar y operar un nmero finito de dgitos, necesariamente los resultados sern aproximados debido a los inevitables errores de redondeo. Una forma de minimizar los errores de redondeo en la eliminacin de Gauss es emplear precisiones ms altas, es decir, usar un mayor nmero de dgitos en los clculos. Otra manera es emplear alguna tcnica de pivoteo. De todas las estrategias de pivoteo la ms simple y frecuentemente muy efectiva, es el pivoteo parcial o pivoteo mximo de columna: en cada paso de eliminacin siempre se escoge como pivote al elemento de mayor valor absoluto entre los colocados en y abajo de la diagonal principal: Pivoteo mximo de columna En el i-simo paso de eliminacin, se determina un valor p$i tal que: pi ki *a * = mx *a * para i = 1,2,....,n-1 pasos de eliminacin i#k#n Ejemplo Resuelva el sistema 39 1 2 3 x + 3x -2x = 7 1 2 3 4x - x + 3x = 10 1 2 3 -5x + 2x + 3x = 7 empleando eliminacin de Gauss con pivoteo mximo de columna. La matriz aumentada del sistema es: 1.00000 3.00000 -2.00000 7.00000 4.00000 -1.00000 3.00000 10.00000 -5.00000 2.00000 3.00000 7.00000 Primer paso de eliminacin: El pivote se escoge como el elemento con el mayor valor absoluto entre los elementos de la 31 primera columna desde la fila 1 hasta la 3, por lo tanto el pivote es a = -5.00000. Como el pivote est en la fila 3, es necesario intercambiar la fila 1 con la 3 para colocar en el primer rengln al -5.00000. 1 3 R : R -5.00000 2.00000 3.00000 7.00000 4.00000 -1.00000 3.00000 10.00000 1.00000 3.00000 -2.00000 7.00000 Los multiplicadores son ahora 4.00000/-5.00000 y 1.00000/-5.00000 y las transformaciones 11 elementales que colocan ceros debajo de a son: 1 2 2 -(4.00000/-5.00000)R + R 6R 1 3 3 -(1.00000/-5.00000)R + R 6R La matriz aumentada queda al final de este primer paso de eliminacin de esta manera: -5.00000 2.00000 3.00000 7.00000 0.00000 0.60000 5.40000 15.60000 0.00000 3.40000 -1.40000 8.40000 Segundo paso de eliminacin: 22 23 23 22 Aqu los posibles pivotes son a = 0.60000 y a = 3.40000. Como *a * > *a *, entonces el 23 pivote es a = 3.40000 y por lo tanto se requiere intercambiar las filas 2 y 3: 2 3 R :R -5.00000 2.00000 3.00000 7.00000 0.00000 3.40000 - 1.40000 8.40000 0.00000 0.60000 5.40000 15.60000 40 El multiplicador es 0.60000/3.40000 y la transformacin que coloca un cero debajo del pivote es: 2 3 3 -(0.60000/3.40000) R + R 6 R Entonces la matriz aumentada al final queda as: -5.00000 2.00000 3.00000 7.00000 0.00000 3.40000 - 1.40000 8.40000 0.00000 0.00000 5.64706 14.11765 La sustitucin hacia atrs genera el vector solucin x = [1.50000, 3.50000, 2.50000] . T Pseudocdigo de un procedimiento que resuelve un sistema lineal, con eliminacin de Gauss y pivoteo mximo de columna: proc eliminacion_gauss_pm(entero n, real &A[n, n+1], real &x[n], lgico &solucion_unica) ! ! Este procedimiento resuelve un sistema lineal de ecuaciones con eliminacin gaussiana y ! sustitucin hacia atrs. Se emplea una estrategia de pivoteo mximo de columna. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! A Matriz aumentada del sistema, de n filas y n+1 columnas. ! x Si en solucion_unica se devuelve el valor VERDADERO, entonces x ! es la solucin nica. De n elementos. ! solucion_unica Bandera que indica la existencia de una solucin nica: ! solucion_unica=VERDADERO el sistema tiene solucin nica. ! solucion_unica= FALSO la matriz de coeficientes es singular ! y no hay solucin nica. ! entero i, p, k, j real auxiliar, multiplicador, suma solucion_unica = FALSO ! Eliminacin de Gauss con pivoteo mximo de columna ejecuta i = 1, n-1 { p = i ejecuta j = i+1, n ! seleccin del pivote si ABS(A[j, i]) > ABS(A[p, i]) entonces p = j si ABS(A[p, i]) < 1X10 entonces regresa -10 si p i entonces ! intercambio de las filas p e i, en caso necesario ejecuta k = 1, n+1 auxiliar = A[p, k] A[p, k] = A[i, k] A[i, k] = auxiliar ejecuta j = i+1, n ! colocacin de ceros debajo del pivote multiplicador = A[j, i]/A[i, i] ejecuta k = i, n+1 41 A[j, k] = A[j, k] - multiplicador*A[i, k] } si ABS(A[n, n]) < 1X10 entonces regresa -10 solucion_unica = VERDADERO ! sustitucin hacia atrs x[n] = A[n, n+1]/A[n, n] ejecuta i = n-1, 1, -1 { suma = 0.0 ejecuta j = i+1, n suma = suma + A[i, j]*x[j] x[i] = (A[i, n+1] - suma)/A[i, i] } regresa fin 3.3 Descomposicin LU Dada una matriz A de nxn , es posible encontrar las matrices L y U tales que: A = LU Las matrices L y U son tambin de nxn. L es triangular inferior y U es triangular superior. Para mostrar los detalles de la descomposicin LU, considere una matriz A de 4x4: A = L U Para poder realizar la descomposicin es necesario asignar valores arbitrarios a una de los diagonales, ya sea la de L o la de U. Si los elementos de la diagonal principal de U se hacen iguales a uno, se trata de la descomposicin de Crout, como es el caso mostrado arriba. Si los elementos de la diagonal principal de L se toman iguales a uno, entonces es la descomposicin de Doolittle. Multiplicando los renglones de L por la primera columna de U: 11 11 l (1) = a 21 21 l (1) = a 31 31 l (1) = a 42 41 41 l (1) = a Multiplicando el primer rengln de L por las columnas de U: 11 11 l (1) = a 11 12 12 12 12 11 l u = a y por lo tanto u = a / l 11 13 13 13 13 11 l u = a y por lo tanto u = a / l 11 14 14 14 14 11 l u = a y por lo tanto u = a / l Multiplicando los renglones de L por la segunda columna de U: 11 12 12 l u = a 21 12 22 22 22 22 21 12 l u + l (1) = a y por lo tanto l = a - l u 31 12 32 32 32 32 31 12 l u + l (1) = a y por lo tanto l = a - l u 41 12 42 42 42 42 41 12 l u + l (1) = a y por lo tanto l = a - l u Multiplicando el segundo rengln de L por las columnas de U: 21 21 l (1) = a 21 12 22 22 l u + l (1) = a 21 13 22 23 23 23 23 21 13 22 l u + l u = a y por lo tanto u = ( a - l u ) / l 21 14 22 24 24 24 24 21 14 22 l u + l u = a y por lo tanto u = ( a - l u ) / l Multiplicando los renglones de L por la tercera columna de U: 11 13 13 l u = a 21 13 22 23 23 l u + l u = a 31 13 32 23 33 33 33 33 31 13 32 23 l u + l u + l (1) = a y por lo tanto l = a - l u - l u 41 13 42 23 43 43 43 43 41 13 42 23 l u + l u + l (1) = a y por lo tanto l = a - l u - l u Multiplicando el tercer rengln de L por las columnas de U: 31 31 l (1) = a 43 31 12 32 32 l u + l (1) = a 31 13 32 23 33 33 l u + l u + l (1) = a 31 14 32 24 33 34 34 34 34 31 14 32 24 33 l u + l u + l u = a y por lo tanto u = ( a - l u - l u ) / l Multiplicando los renglones de L por la cuarta columna de U: 11 14 14 l u = a 21 14 22 24 24 l u + l u = a 31 14 32 24 33 34 34 l u + l u + l u = a 41 14 42 24 43 34 44 44 44 44 41 14 42 24 43 34 l u + l u + l u + l (1) = a y por lo tanto l = a - l u - l u - l u Entonces, este procedimiento basado en las propiedades del producto de matrices, permite encontrar a los elementos desconocidos de L y U. Las siguientes ecuaciones representan a dicho procedimiento: Una vez obtenida la descomposicin LU de la matriz de coeficientes A, es posible resolver el 44 sistema Ax = b: como A = LU, el sistema original se puede escribir como (LU)x = b y si se define un vector z como z = Ux, entonces ahora queda el sistema Lz = b el cual se puede resolver mediante sustitucin hacia adelante. Conocido z, entonces se resuelve Ux = z con sustitucin hacia atrs encontrndose as al vector x. Ejemplo Resolver el sistema 1 2 3 3x - x + 2x = 12 1 2 3 x + 2x + 3x = 11 1 2 3 2x - 2x - x = 2 con descomposicin LU. 11 11 l = a = 3.00000 21 21 12 12 11 l = a = 1.00000 u = a / l = -1.00000/3.00000 = -0.33333 31 31 13 13 11 l = a = 2.00000 u = a / l = 2.00000/3.00000 = 0.66667 3 -1 2 3.00000 0 0 1 -0.33333 0.66667 22 23 1 2 3 = 1.00000 l 0 * 0 1 u 32 2 -2 -1 2.00000 l 3 3 0 0 1 l 22 22 21 12 l = a - l u = 2.00000 - (1.00000)(-0.33333) = 2.33333 32 32 31 12 l = a - l u = -2.00000 - (2.00000)(-0.33333) = -1.33333 23 23 21 13 22 u = ( a - l u ) / l = ( 3.00000 -(1.00000)(0.66667)) / 2.33333 = 1.00000 3 -1 2 1 2 3 = 2 -2 -1 3.00000 0 0 1 -0.33333 0.66667 1.00000 2.33333 0 * 0 1 1.00000 2.00000 -1.33333 3 3 0 0 1 l 33 33 31 13 32 23 l = a - l u - l u = -1.00000 - (2.00000)(0.66667) - (-1.33333)(1.00000) = -1.00000 Entonces, la descomposicin LU es: 3 -1 2 1 2 3 = 45 2 -2 -1 3.00000 0 0 1 -0.33333 0.66667 1.00000 2.33333 0 * 0 1 1.00000 2.00000 -1.33333 0 1 -1.00000 0 Lz = b es el sistema: 1 3.00000z 12.00000 1 2 1.00000z + 2.33333z 11.00000 1 1 3 2.00000z - 1.33333z -1.00000z = 2.00000 el cual se resuelve con sustitucin hacia adelante. Este algoritmo es llamado as porque la primera 1 n incgnita que se determina es z y la ltima z . 1 z = 12.00000 / 3.00000 = 4.00000 2 1 z = (11.00000 - z ) / 2.33333 = (11.00000 - 4.00000) / 2.33333 = 3.00000 3 1 2 z = (2.00000 - 2z + 1.33333z ) / (-1.00000) 3 z = ( 2.00000 - 2.00000(4.00000) + 1.33333(3.00000)) / (-1.00000) = 2.000000 Por ltimo, es necesario resolver el sistema Ux = z mediante sustitucin hacia atrs: 1 2 3 1.00000x - 0.33333x + 0.66667x = 4.00000 2 3 1.00000x + 1.00000x = 3.00000 3 1.00000x = 2.00000 3 x = 2.00000 / 1.00000 = 2.00000 2 3 x = (3.00000 - x ) / 1.00000 = (3.00000 - 2.00000) / 1.00000 = 1.00000 1 2 3 x =( 4.00000 + 0.33333x - 0.66667x ) / 1.00000 1 x = (4.00000 + 0.33333(1.00000) - 0.66667(2.00000)) / 1.00000 = 3.00000 La sustitucin hacia adelante que permite resolver a Lz = b se puede resumir con las frmulas: 46 El proceso de sustitucin hacia atrs empleado en la solucin de Ux = z se describe mediante: Si se conoce la descomposicin LU de A, la solucin de Ax = b implica solamente resolver Lz = b y Ux = z. El trabajo computacional asociado con cualquiera de estas soluciones es de O(n /2) 2 multiplicaciones o divisiones. Esta es la razn por la que se prefiere la descomposicin LU para resolver varios sistemas lineales con la misma matriz de coeficientes. La descomposicin LU junto con la solucin de Lz = b y de Ux = z requieren un total de O(n /3) multiplicaciones o 3 divisiones. En el algoritmo de la reduccin de Crout, los elementos de la diagonal principal de L deben ser ii distintos de cero. Si en algn momento, se detecta que l = 0 entonces es obligado un intercambio ii de filas. Ms especficamente; si l =0, se debe intercambiar la fila i con alguna de las filas colocadas debajo de ella, cuidando que el intercambio solo afecte a los elementos de la parte triangular inferior. El mismo intercambio de filas deber realizarse tambin en A y en b. ii Si no es posible encontrar un l 0 , entonces la matriz A es singular y el sistema Ax = b no tiene solucin nica. Despus de los cambios de renglones, al terminar la descomposicin LU la igualdad A = LU sigue siendo vlida, L sigue siendo triangular inferior y U triangular superior pero A ahora es la matriz original afectada por los cambios de filas. Es factible implementar un pivoteo mximo de columna en la descomposicin de Crout. En este ii caso, se busca colocar en la posicin l al elemento de mayor valor absoluto entre los colocados en y debajo de la diagonal principal de L. El intercambio de filas deber afectar solamente a la 47 parte triangular inferior de L y tambin deber ser aplicado a la matriz A y al vector b. A continuacin, el pseudocdigo de procedimientos que resuelven sistemas lineales con descomposicin LU: proc LU(entero n, real &A[n, n], real &L[n, n], real &U[n, n],entero &info_cambiosf[n], lgico &exito) ! ! Factorizacin A = LU mediante reduccin de Crout. ! Descripcin de parmetros: ! n Orden de las matrices cuadradas A, L y U. ! A Matriz por factorizar. Como resultado de la factorizacin, en el regreso ! A puede tener algunas filas intercambiadas. ! L Matriz triangular inferior. ! U Matriz triangular superior. ! info_cambiosf Vector que contiene informacin sobre los cambios de filas efectuados ! durante la factorizacin. ! exito Bandera cuyo valor indica el tipo de situacin detectada durante el ! proceso: ! exito = VERDADERO factorizacin exitosa, A = LU ! exito = FALSO no fue posible la factorizacin o A es ! singular. ! entero i, j, k, p real auxiliar, suma ejecuta i = 1,n info_cambiosf[i] = i ! cuando info_cambiosf[i] = i, no se ha intercambiado la fila i ejecuta i = 1,n U[i, i] = 1.0 ! se asigna el valor 1.0 a los elementos de la diagonal principal de U exito = FALSO ejecuta i = 1,n ! bsqueda de un L[1, 1] diferente de cero si ABS(A[i,1]) $ 1X10 entonces salir -10 si i > n entonces regresa si i 1 entonces { ejecuta j = 1,n ! intercambio de las filas 1 e i auxiliar = A[1,j] A[1, j] = A[i, j] A[i, j] = auxiliar ejecuta j = 1, n auxiliar = info_cambiosf[1] info_cambiosf[1] = info_cambiosf[i] info_cambiosf[i] = auxiliar } ejecuta i = 1,n ! clculo de la primera columna de L L[i,1] = A[i,1] ejecuta j = 2,n ! clculo de los elementos restantes de la primera fila de U 48 U[1, j] = A[1, j] / L[1,1] ejecuta k = 2,n-1 { ejecuta p = k,n ! bsqueda de un L[i, i] distinto de cero suma = 0.0 ejecuta j = 1,k-1 suma = suma + L[p, j]*U[j, k] auxiliar = A[p, k] - suma si ABS(auxiliar) $ 1X10 entonces salir -10 si p > n entonces regresar si p k entonces { ejecuta j = 1,n auxiliar = A[k, j] ! intercambio de las filas k y p en A A[k, j] = A[p, j] A[p, j] = auxiliar ejecuta j = 1,k-1 ! intercambio de las filas k y p en L auxiliar = L[k, j] L[k, j] = L[p, j] L[p, j] =auxiliar ejecuta j = 1,n auxiliar = info_cambiosf[k] ! intercambio de los info_cambiosf[k] = info_cambiosf[p] ! elementos con ndices k y p info_cambiosf[p] = auxiliar ! en info_cambiosf } ejecuta i = k,n suma = 0.0 ejecuta j = 1,k-1 ! clculo de columna k de L suma = suma + L[i, j]*U[j, k] L[i, k ] = A[i,k] - suma ejecuta i = k+1,n ! clculo de los elementos restantes de la fila k de U suma = 0.0 ejecuta j = 1,k-1 suma = suma + L[k, j]*U[j, i] U[k, i] = (A[k, i] - suma)/L[k, k] } suma = 0.0 ejecuta j = 1,n-1 ! clculo del ltimo elemento de la diagonal principal de L suma = suma + L[n, j]*U[j, n] L[n, n] = A[n, n] - suma si ABS(L[n, n]) < 1X10 entonces regresa -10 exito = VERDADERO regresa fin proc solve_lu(entero n, real L[n, n], real U[n, n], entero info_cambiosf[n], real b[n], real 49 &x[n], lgico &solucion_unica) ! ! Dada la factorizacin A = LU, este procedimiento determina el vector solucin x de Ax = b. ! Descripcin de parmetros: ! n Orden de las matrices cuadradas L y U. Tambin es el nmero de ! incgnitas. ! L Matriz triangular inferior. ! U Matriz triangular superior. ! info_cambiosf Vector que contiene informacin sobre los cambios de filas efectuados ! durante la factorizacin A = LU. ! b Vector de trminos del lado derecho del sistema lineal. ! x Vector solucin. ! solucion_unica Bandera cuyo valor indica la existencia de la solucin nica: ! solucion_unica = VERDADERO x es la solucin nica ! solucion_unica = FALSO el sistema no tiene solucin nica. ! entero i, j, auxiliar real z[n], suma ! ! Solucin de Lz = b ! solucion_unica = FALSO si ABS(L[1, 1]) < 1X10 entonces regresa -10 z[1] = b[info_cambiosf[1]]/L[1, 1] ! sustitucin hacia adelante ejecuta i = 2, n si ABS(L[i, i]) < 1X10 entonces regresa -10 suma = 0.0 ejecuta j = 1, i-1 suma = suma + L[i, j]*z[j] z[i] = (b[info_cambiosf[i]] - suma)/L[i, i] ! ! Solucin de Ux = z ! si ABS(U[n, n]) < 1X10 entonces regresa -10 x[n] = z[n]/U[n, n] ! sustitucin hacia atrs ejecuta i = n-1, 1, -1 si ABS(U[i, i]) < 1X10 entonces regresa -10 suma = 0.0 ejecuta j = i+1, n suma = suma + U[i, j]*x[j] x[i] = (z[i] - suma)/U[i, i] solucion_unica = VERDADERO regresa fin La matriz inversa, A , de una matriz A de n filas y n columnas se puede calcular mediante la -1 50 solucin de n sistemas lineales, ya que la i-sima columna de la matriz inversa es la solucin del i i sistema A x = e , en el cual el vector columna e es la i-sima columna de la matriz identidad I. Como los n sistemas lineales comparten la misma matriz de coeficientes A, es conveniente descomponer A como el producto LU y emplear a ste en la solucin de todos los sistemas. 3.4 Solucin de sistemas tridiagonales Un caso especial y muy importante ocurre cuando en el sistema lineal Ax = b, la matriz de coeficientes A es triadiagonal. Una matriz cuadrada es tridiagonal si sus elementos distintos de cero se concentran en tres diagonales: la principal y las colocadas arriba y abajo de ella:
Los algoritmos de factorizacin se simplifican considerablemente cuando son aplicados a una matriz tridiagonal. En la descomposicin LU de una matriz de este tipo, se tienen (3n-2) elementos diferentes de cero en A y si entonces se tendrn 2n-1 valores desconocidos en L y n-1 en U, lo que da un total de 3n-2 incgnitas. Ntese que la diagonal principal de U se considera formada de n unos (reduccin de Crout). Aplicando las propiedades de la multiplicacin matricial, es posible plantear las siguientes ecuaciones: 11 11 a = l 51 12 12 11 u = a / l i,i-1 i,i-1 a = l para i = 2,3,...,n i,i i,i-1 i-1,i ii a = l u + l para i = 2,3,...,n i,i+1 ii i,i+1 a = l u para i = 2,3,...,n-1 De la tercera ecuacin se pueden encontrar los elementos de la subdiagonal de L, de la cuarta se calculan los elementos restantes de la diagonal de L y con la quinta se completa la superdiagonal de U. El procedimiento para resolver el sistema Ax = b con A triadiagonal consiste en encontrar la descomposicin LU de A con las frmulas arriba descritas , aplicar entonces sustitucin hacia adelante para resolver Lz = b y por ltimo emplear sustitucin hacia atrs para resolver Ux = z. El sistema tridiagonal Ax = b tiene solucin nica si se cumplen las condiciones indicadas en el terorema: ij i,i-1 i,i+1 Supngase que A = {a } es tridiagonal con a a 0 para cada 11 12 ii i,i-1 i,i+1 i = 2,3,...,n-1. Si |a | > |a |, |a | $ |a | + |a | para nn n,n-1 cada i = 2,3,...,n-1, y |a | > |a |, entonces el sistema Ax = b tiene solucin nica, A es no singular y los elementos de la diagonal principal de L en A = LU, calculados mediante reduccin de Crout, son todos distintos de cero. Ejemplo Resuelva el sistema 1 2 3x + x = -1 1 2 3 2x + 4x + x = 7 2 3 2x + 5x = 9 mediante descomposicin LU especfica para un sistema tridiagonal. 11 11 l = a = 3 12 12 11 u = a / l = 1/3 = .33333 21 21 32 32 l = a = 2 l = a = 2 22 22 21 12 l = a - l u = 4 - 2*.33333 = 3.33334 23 23 22 u = a / l = 1/3.33334 = 0.30000 33 33 32 23 l = a - l u = 5 - 2*.30000 = 4.40000 52
El sistema Lz = b queda entonces 1 3z = -1 1 2 2z + 3.33334z = 7 2 3 2z + 4.40000z = 9 cuya solucin es z =[ -.33333, 2.30000, 1.00000] . Para calcular la solucin x se resuelve ahora el T sistema Ux = z: 1 2 x + .33333x = -.33333 2 3 x + .30000x = 2.30000 3 x = 1.00000 Por lo tanto la solucin del sistema es x = [-0.99999, 2.00000, 1.00000] . T La descomposicin LU para matrices triadiagonales junto con las sustituciones hacia adelante y hacia atrs requieren solamente de (5n-4) multiplicaciones o divisiones y (3n-3) adiciones o sustracciones. Con el objeto de almacenar en memoria solamente las tres diagonales y el vector de trminos del lado derecho, se recomienda ahora escribir el sistema lineal en trminos de vectores: 1 1 1 2 1 b x + c x = d 2 1 2 2 2 3 2 a x + b x + c x = d 3 2 3 3 3 4 3 a x + b x + c x = d . . . = . . . . = . n-1 n-2 n-1 n-1 n-1 n n-1 a x + b x + c x = d n n-1 n n n a x + b x = d La factorizacin LU queda entonces de la siguiente forma:
53
El procedimiento mostrado a continuacin resuelve un sistema tridiagonal expresado en trminos de los vectores a, b, c y d. El algoritmo supone satisfechas las condiciones que garantizan la solucin nica del sistema. proc tridiagonal(entero n, real a[n], real b[n], real c[n], real d[n], real &x[n]) ! ! Este procedimiento resuelve un sistema de ecuaciones tridiagonales mediante factorizacin ! LU. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! a Vector que almacena a la subdiagonal del sistema, de n elementos. El primer elemento de este vector, a[1], es igual a cero. ! b Vector que almacena a la diagonal del sistema, de n elementos. ! c Vector que almacena a la superdiagonal del sistema, de n elementos. ! El ltimo elemento de este vector, c[n], es igual a cero. ! x Vector solucin, de n elementos. ! entero i real v[n], r[n], w[n], z[n] r[1] = b[1] w[1] = c[1]/r[1] ejecuta i = 2, n-1 { v[i] = a[i] r[i] = b[i] - v[i]*w[i-1] ! i-sima fila de L w[i] = c[i]/r[i] ! (i+1)-sima columna de U } v[n]=a[n] ! n-sima fila de L r[n] = b[n] - v[n]*w[n-1] ! solucin de Lz = b z[1] = d[1]/r[1] ejecuta i = 2, n z[i] = (d[i] - v[i]*z[i-1])/r[i] ! solucin de Ux = z x[n] = z[n] ejecuta i = n-1, 1, -1 54 x[i] = z[i] - w[i]*x[i+1] regresa fin 3.5 Mtodos iterativos: Jacobi y Gauss Seidel Dado el sistema lineal 11 1 12 2 13 3 1n n 1 a x + a x + a x + .............. + a x = b 21 1 22 2 23 3 2n n 2 a x + a x + a x + .............. + a x = b 31 1 32 2 33 3 3n n 3 a x + a x + a x + .............. + a x = b . . . . . . . . . n1 1 n2 2 n3 3 nn n n a x + a x + a x + .............. + a x = b 1 2 3 es factible despejar a x de la primera ecuacin, a x de la segunda ecuacin, a x de la tercera y as sucesivamente: 1 1 12 2 13 3 1n n 11 x = ( b - a x - a x - .............. - a x ) / a 2 2 21 1 23 3 2n n 22 x = ( b - a x - a x - .............. - a x ) / a 3 3 31 1 32 2 3n n 33 x = ( b - a x - a x - .............. - a x ) / a . . . . . . . . . . . . . . . . n n n1 1 n2 2 n,n-1 n-1 nn x = ( b - a x - a x - .............. - a x ) / a Entonces se parte de una estimacin inicial de la solucin, x , la cual se sustituye en las ltimas (0) ecuaciones para producir un nueva estimacin, x : (1) 1 1 12 2 13 3 1n n 11 x = ( b - a x - a x - .............. - a x ) / a (1) (0) (0) (0) 2 2 21 1 23 3 2n n 22 x = ( b - a x - a x - .............. - a x ) / a (1) (0) (0) (0) 3 3 31 1 32 2 3n n 33 x = ( b - a x - a x - .............. - a x ) / a (1) (0) (0) (0) . . . . . . . . . . . . . . . . n n n1 1 n2 2 n,n-1 n-1 nn x = ( b - a x - a x - .............. - a x ) / a (0) (0) (0) (0) 55 El vector x se sustituye en esas mismas ecuaciones para obtener ahora a x . Este procedimiento (1) (2) se repite entonces para calcular las estimaciones x , x , x , .... . Lo anterior se puede generalizar (3) (4) (5) mediante las ecuaciones: 1 1 12 2 13 3 1n n 11 x = ( b - a x - a x - .............. - a x ) / a (k+1) (k) (k) (k) 2 2 21 1 23 3 2n n 22 x = ( b - a x - a x - .............. - a x ) / a (k+1) (k) (k) (k) 3 3 31 1 32 2 3n n 33 x = ( b - a x - a x - .............. - a x ) / a (k+1) (k) (k) (k) . . . . . . . . . . . . . . . . n n n1 1 n2 2 n,n-1 n-1 nn x = ( b - a x - a x - .............. - a x ) / a (k+1) (k) (k) (k) las cuales se pueden escribir en una forma ms compacta:
Estas ecuaciones definen al mtodo de Jacobi o de los desplazamientos simultneos. El proceso termina cuando se cumple alguno de estos criterios de convergencia: 1.- 2x - x 2 < (k+1) (k) 2.- 2x - x 2 / 2x 2 < (k+1) (k) (k+1) La tolerancia es fijada antes de iniciar los clculos. En ambos criterios, 2v2, define la norma de un vector v. La norma de un vector se calcula mediante cualquiera de esta dos definiciones: 2 4 1 2 3 n Las normas 2v2 y 2v2 del vector v = [v , v , v , ..., v ] estn T definidas por n y 2 i 4 i 2v2 =( 3 v ) 2v2 = mx *v * 2 i=1 i#i#n 2 A 2v2 se le conoce como norma euclidiana del vector v. La distancia entre dos vectores u y v es la norma de la diferencia u - v. Ejemplo Encuentre una solucin aproximada del sistema 1 2 10x - x = 9 56 1 2 3 -x + 10x - 2x = 7 2 3 - 2x +10x = 6 2 con el mtodo de Jacobi. Inicie con x = [0, 0, 0] y considere a 2x - x 2 < 1X10 como (0) T (k+1) (k) -4 criterio de convergencia. Al aplicar el mtodo de Jacobi se generan las ecuaciones: 1 2 x = (9.00000 + 1.00000x ) / 10.00000 (k+1) (k) 2 1 3 x = (7.00000 + 1.00000x + 2.00000x ) / 10.00000 (k+1) (k) (k) 3 2 x = (6.00000 + 2.00000x ) / 10.00000 (k+1) (k) que aplicadas a la estimacin inicial x permiten calcular la nueva iteracin x (0) (1) 1 2 x = (9.00000 + 1.00000x ) / 10.00000 (1) (0) 1 x = (9.00000 + 1.00000(0.00000) ) / 10.00000 = 0.900000 (1) 2 1 3 x = (7.00000 + 1.00000x + 2.00000x ) / 10.00000 (1) (0) (0) 2 x = (7.00000 + 1.00000(0.00000) + 2.00000(0.00000 )) / 10.00000 = 0.70000 (1) 3 2 x = (6.00000 + 2.00000x ) / 10.00000 (1) (0) 3 x = (6.00000 + 2.00000(0.00000 )) / 10.00000 = 0.60000 (1) Con x = [0.90000, 0.70000, 0.60000] se checa la convergencia del mtodo: (1) T 2 2x - x 2 = %((0.90000 - 0.00000) + (0.70000 - 0.00000) + (0.60000 - 0.00000) ) (1) (0) 2 2 2 2 2x - x 2 = 1.28841 (1) (0) 2 Como la distancia entre las dos ltimas iteraciones, 2x - x 2 , no es menor que 1X10 ser (1) (0) -4 necesario calcular al menos una iteracin ms. 1 2 x = (9.00000 + 1.00000x ) / 10.00000 (2) (1) 1 x = (9.00000 + 1.00000(0.70000) ) / 10.00000 = 0.970000 (2) 2 1 3 x = (7.00000 + 1.00000x + 2.00000x ) / 10.00000 (2) (1) (1) 2 x = (7.00000 + 1.00000(0.90000) + 2.00000(0.60000 )) / 10.00000 = 0.91000 (2) 3 2 x = (6.00000 + 2.00000x ) / 10.00000 (2) (1) 57 3 x = (6.00000 + 2.00000(0.70000 )) / 10.00000 = 0.74000 (2) 2 2x - x 2 = %((0.97000 - 0.90000) + (0.91000 - 0.70000) + (0.74000 - 0.60000) ) (2) (1) 2 2 2 2 2x - x 2 = 0.26192 (2) (1) 1 2 3 2 Iteracin k x x x 2x - x 2 (k) (k) (k) (k) (k-1) 0 0.00000 0.00000 0.00000 1 0.90000 0.70000 0.60000 1.28841 2 0.97000 0.91000 0.74000 0.26192 3 0.99100 0.94500 0.78200 0.05857 4 0.99450 0.95550 0.78900 0.01310 5 0.99555 0.95725 0.79110 0.00293 6 0.99573 0.95778 0.79145 0.00065 7 0.99578 0.95786 0.79156 0.00015 8 0.99579 0.95789 0.79157 0.00003 El siguiente es el pseudocdigo de un procedimiento que resuelve al sistema Ax = b con el mtodo de Jacobi: proc jacobi(entero n, real A[n, n], real b[n], real &xinicial[n], real eps, entero maxiter, real &x[n], lgico &convergencia) ! ! Este procedimiento encuentra una solucin aproximada x del sistema lineal ! Ax = b con el mtodo iterativo de Jacobi. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! A Matriz de coeficientes del sistema. ! b Vector de trminos del lado derecho del sistema. ! xinicial Vector de estimaciones iniciales. ! eps Mximo error permisible. Cuando la norma euclidiana de la diferencia ! entre las dos ltimas aproximaciones es menor que eps, se considera ! haber llegado a solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es el vector solucin de Ax=b. ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia 58 ! convergencia=FALSO no se alcanz la convergencia. ! entero iter, i, j real suma, norma2 convergencia=VERDADERO ejecuta iter = 1, maxiter { ejecuta i = 1, n ! clculo de la nueva aproximacin x { suma = 0.0 ejecuta j = 1, n si ij entonces suma = suma + A[i, j]*xinicial[j] x[i] = (b[i] - suma) / A[i, i] } suma = 0.0 ejecuta i =1, n suma = suma + (x[i] - xinicial[i])82 norma2 = SQRT(suma) si norma2 < eps entonces regresa ! se checa la convergencia ejecuta i = 1, n ! preparacin de la siguiente iteracin xinicial[i] = x[i] } convergencia = FALSO regresa fin Una forma de acelerar la convergencia del mtodo de Jacobi pudiera ser utilizar una estrategia de i desplazamientos sucesivos: una vez calculada x , se sustituye inmediatamente en la expresin (k+1) i+1 para calcular x . Las ecuaciones por emplear ahora son: (k+1) 1 1 12 2 13 3 1n n 11 x = ( b - a x - a x - .............. - a x ) / a (k+1) (k) (k) (k) 2 2 21 1 23 3 2n n 22 x = ( b - a x - a x - .............. - a x ) / a (k+1) (k+1) (k) (k) 3 3 31 1 32 2 3n n 33 x = ( b - a x - a x - .............. - a x ) / a (k+1) (k+1) (k+1) (k) . . . . . . . . . . . . . . . . n n n1 1 n2 2 n,n-1 n-1 nn x = ( b - a x - a x - .............. - a x ) / a (k+1) (k+1) (k+1) (k+1) las cuales se pueden representar en una forma ms condensada: 59 Esta estrategia define al mtodo de Gauss Seidel o de los desplazamientos sucesivos. Ejemplo Resolver el sistema lineal del ejemplo anterior empleando Gauss Seidel. Considere el mismo vector inicial y tambin idntico criterio de convergencia. Las ecuaciones del mtodo de Gauss Seidel son: 1 2 x = (9.00000 + 1.00000x ) / 10.00000 (k+1) (k) 2 1 3 x = (7.00000 + 1.00000x + 2.00000x ) / 10.00000 (k+1) (k+1) (k) 3 2 x = (6.00000 + 2.00000x ) / 10.00000 (k+1) (k+1) Comenzando con x = [0, 0, 0] , entonces (0) T 1 2 x = (9.00000 + 1.00000x ) / 10.00000 (1) (0) 2 1 3 x = (7.00000 + 1.00000x + 2.00000x ) / 10.00000 (1) (1) (0) 3 2 x = (6.00000 + 2.00000x ) / 10.00000 (1) (1) 1 x = (9.00000 + 1.00000(0.00000)) / 10.00000 = 0.90000 (1) 2 x = (7.00000 + 1.00000(0.90000) + 2.00000(0.00000)) / 10.00000 = 0.79000 (1) 3 x = (6.00000 + 2.00000(0.79000)) / 10.00000 = 0.75800 (1) Con x = [0.90000, 0.79000, 0.75800] se checa la convergencia del mtodo: (1) T 2 2x - x 2 = %((0.90000 - 0.00000) + (0.79000 - 0.00000) + (0.75800 - 0.00000) ) (1) (0) 2 2 2 2 2x - x 2 = 1.41727 (1) (0) Como = 1X10 , se requiere de al menos de una iteracin adicional: -4 1 2 x = (9.00000 + 1.00000x ) / 10.00000 (2) (1) 2 1 3 x = (7.00000 + 1.00000x + 2.00000x ) / 10.00000 (2) (2) (1) 3 2 x = (6.00000 + 2.00000x ) / 10.00000 (2) (2) 60 1 x = (9.00000 + 1.00000(0.79000)) / 10.00000 = 0.97900 (2) 2 x = (7.00000 + 1.00000(0.97900) + 2.00000(0.75800)) / 10.00000 = 0.94950 (2) 3 x = (6.00000 + 2.00000(0.94950)) / 10.00000 = 0.78990 (2) 2 2x - x 2 = %((0.97900 - 0.90000) + (0.94950 - 0.79000) + (0.78990 - 0.75800) ) (2) (1) 2 2 2 2 2x - x 2 = 0.18083 (2) (1) 1 2 3 2 Iteracin k x x x 2x - x 2 (k) (k) (k) (k) (k-1) 0 0.00000 0.00000 0.00000 1 0.90000 0.79000 0.75800 1.41727 2 0.97900 0.94950 0.78990 0.18083 3 0.99495 0.95748 0.79150 0.01790 4 0.99575 0.95787 0.79157 0.00090 5 0.99579 0.95789 0.79158 0.00004 En general, Gauss Seidel es ms rpido que Jacobi. Ahora, un procedimiento para resolver un sistema Ax = b con el mtodo de Gauss Seidel: proc gauss_seidel(entero n, real A[n, n], real b[n], real &xinicial[n], real eps, entero maxiter, real &x[n], lgico &convergencia) ! ! Este procedimiento encuentra una solucin aproximada x del sistema lineal ! Ax = b con el mtodo iterativo de Gauss Seidel. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! A Matriz de coeficientes del sistema. ! b Vector de trminos del lado derecho del sistema. ! xinicial Vector de estimaciones iniciales. ! eps Mximo error permisible. Cuando la norma euclidiana de la diferencia ! entre las dos ltimas aproximaciones es menor que eps, se considera ! haber llegado a solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es el vector solucin de Ax=b. ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! 61 entero iter, i, j real suma, norma2 convergencia=VERDADERO ejecuta iter = 1, maxiter { ejecuta i = 1, n ! clculo de la nueva aproximacin x { suma = 0.0 ejecuta j = 1, i - 1 suma = suma + A[i, j]*x[j] ejecuta j = i + 1, n suma = suma + A[i, j]*xinicial[j] x[i] = (b[i] - suma) / A[i, i] } suma = 0.0 ejecuta i =1, n suma = suma + (x[i] - xinicial[i])82 norma2 = SQRT(suma) si norma2 < eps entonces regresa ! se checa la convergencia ejecuta i = 1, n ! preparacin de la siguiente iteracin xinicial[i] = x[i] } convergencia = FALSO regresa fin La condicin suficiente pero no necesaria que garantiza la convergencia tanto de Jacobi como de Gauss Seidel para cualquier vector inicial x es que la matriz de coeficientes del sistema sea (o) estrictamente diagonal dominante. A continuacin, la definicin de una matriz estrictamente diagonal dominante. Una matriz A de nxn es estrictamente diagonal dominante si y slo si
n ii ij *a * > 3 *a * ,i = 1, 2, ...., n j=1 ji
En base a esta definicin, la matriz de coeficientes de los dos ltimos ejemplos es estrictamente diagonal dominante ya que *10* > *-1* + *0* *10* > *-1* + *-2* *10* > *0* + *-2* 62 Esto asegura la convergencia de ambos mtodos para cualquier estimacin inicial x . (0) 63 4. Solucin de sistemas de ecuaciones no lineales 1 2 3 n Se trata de encontrar un vector x = [x , x , x , ..., x ] = 0 que satisfaga las igualdades T 1 1 2 3 n f (x , x , x , ..., x ) = 0 2 1 2 3 n f (x , x , x , ..., x ) = 0 3 1 2 3 n f (x , x , x , ..., x ) = 0 . . . . . . . . . n 1 2 3 n f (x , x , x , ..., x ) = 0
Estas ecuaciones tambin se pueden representar en una forma ms compacta: i f (x) = 0 , para i = 1, 2, 3, ..., n 4.1 Mtodo de punto fijo multivariable i El sistema f (x) = 0, i = 1,2,3, ..., n es transformado en el conjunto de ecuaciones 1 1 x = g (x) 2 2 x = g (x) 3 3 x = g (x) . . . . . . n n x = g (x) mediante la aplicacin de operaciones algebraicamente vlidas. A cada una de esta ecuaciones se les aplica el mtodo iterativo de punto fijo: 1 1 x = g (x ) (k+1) (k) 2 2 x = g (x ) (k+1) (k) 3 3 x = g (x ) (k+1) (k) . . . . . . n n x = g (x ) (k+1) (k) 64 1 2 3 n Se comienza con una estimacin inicial x , la cual es sustituida en las ecuaciones g , g , g , ..., g (0) resultando una nueva aproximacin x . Estas funciones son evaluadas en x para generar x . (1) (1) (2) Este procedimiento es repetido para calcular las aproximaciones x , x , x ,.... . En el momento (3) (4) (5) en que se cumpla alguno de los criterios de convergencia usuales, se termina el proceso iterativo. Ejemplo Encuentre una solucin aproximada del sistema 1 1 2 1 1 2 f (x , x ) = x - 10x + x + 8 = 0 2 2 2 1 2 1 2 1 2 f (x , x ) = x x + x - 10x + 8 = 0 2 con el mtodo de punto fijo. Inicie con x = [0, 0] y considere el criterio de convergencia 2x (0) T (k+1) 2 - x 2 < 1X10 . (k) -3 1 2 Una posible manera de aislar las variables x y x sera: 1 1 2 x = ( 8 + x + x ) / 10 2 2 2 1 2 1 x = ( 8 + x x + x ) / 10 2 Aplicando la iteracin de punto fijo a estos despejes: 1 1 2 x = ( 8 + [x ] + [x ] ) / 10 (k+1) (k) 2 (k) (2) 2 1 2 1 x = ( 8 + x [x ] + x ) / 10 (k+1) (k) (k) 2 (k) Con x = [0, 0] y las ecuaciones anteriores , entonces x es: (0) T (1) 1 1 2 x = ( 8 + [x ] + [x ] ) / 10 = (8.00000 + 0.00000 + 0.00000 ) / 10.00000 = 0.80000 (1) (0) 2 (0) 2 2 2 2 1 2 1 x = ( 8 + x [x ] + x ) / 10 = ( 8.00000 + (0.00000)(0.00000 ) + 0.00000 ) / 10.00000 (1) (0) (k) 2 (0) 2 2 x = 0.80000 (1) 2 2x - x 2 = %((0.80000 - 0.00000) + (0.80000 - 0.00000) ) = 1.13137 (1) (0) 2 2 Como la distancia entre x y x es mayor o igual que 1X10 , se requiere por lo menos de una (1) (0) -3 iteracin ms: 1 1 2 x = ( 8 + [x ] + [x ] ) / 10 = (8.00000 + 0.80000 + 0.80000 ) / 10.00000 = 0.92800 (2) (1) 2 (1) 2 2 2 2 1 2 1 x = ( 8 + x [x ] + x ) / 10 = ( 8.00000 + (0.80000)(0.80000 ) + 0.80000 ) / 10.00000 (2) (1) (1) 2 (1) 2 2 x = 0.93120 (2) 65 2 2x - x 2 = %((0.92800 - 0.80000) + (0.93120 - 0.80000) ) = 0.18330 (2) (1) 2 2 1 2 Iteracin k x x (k) (k) 2 2x - x 2 (k) (k-1) 0 0.00000 0.00000 1 0.80000 0.80000 1.13137 2 0.92800 0.93120 0.18330 3 0.97283 0.97327 0.06148 4 0.98937 0.98944 0.02312 5 0.99578 0.99579 0.00903 6 0.99832 0.99832 0.00358 7 0.99933 0.99933 0.00143 8 0.99973 0.99973 0.00057 El mtodo iterativo de punto fijo multivariable converge, cuando lo hace, casi siempre de una forma lenta. Para tratar de acelerar su convergencia, frecuentemente se intenta aplicar un estrategia de desplazamientos sucesivos, similar a la aplicada en el mtodo de Gauss Seidel. Ejemplo Aplicar desplazamientos sucesivos al ejemplo anterior. En este caso, las ecuaciones del mtodo iterativo de punto fijo quedaran: 1 1 2 x = ( 8 + [x ] + [x ] ) / 10 (k+1) (k) 2 (k) 2 2 1 2 1 x = ( 8 + x [x ] + x ) / 10 (k+1) (k+1) (k) 2 (k+1) 2 1 En el clculo de x se sustituye inmediatamente el valor recin calculado x . Con x = [0, (k+1) (k+1) (0) 0] , entonces x es: T (1) 1 1 2 x = ( 8 + [x ] + [x ] ) / 10 = (8.00000 + 0.00000 + 0.00000 ) / 10.00000 = 0.80000 (1) (0) 2 (k) 2 2 2 2 1 2 1 x = ( 8 + x [x ] + x ) / 10 = ( 8.00000 + (0.80000)(0.00000 ) + 0.80000 ) / 10.00000 (1) (1) (0) 2 (1) 2 2 x = 0.88000 (1) 2 2x - x 2 = %((0.80000 - 0.00000) + (0.88000 - 0.00000) ) = 1.18929 (1) (0) 2 2 Ya que la distancia entre x y x es mayor o igual que 1X10 , se requiere al menos de una (1) (0) -3 66 iteracin adicional 1 1 2 x = ( 8 + [x ] + [x ] ) / 10 = (8.00000 + 0.80000 + 0.88000 ) / 10.00000 = 0.94144 (2) (1) 2 (1) 2 2 2 2 1 2 1 x = ( 8 + x [x ] + x ) / 10 = ( 8.00000 + (0.94144)(0.88000 ) + 0.94144 ) / 10.00000 (2) (2) (1) 2 (2) 2 2 x = 0.96705 (2) 2 2x - x 2 = %((0.94144 - 0.80000) + (0.96705 - 0.88000) ) = 0.16608 (2) (1) 2 2 1 2 Iteracin k x x (k) (k) 2 2x - x 2 (k) (k-1) 0 0.00000 0.00000 1 0.80000 0.88000 1.18929 2 0.94144 0.96705 0.16608 3 0.98215 0.99006 0.04676 4 0.99448 0.99693 0.01412 5 0.99829 0.99905 0.00435 6 0.99947 0.99970 0.00135 7 0.99983 0.99991 0.00042 En general; el mtodo de punto fijo multivariable con desplazamientos sucesivos, conocido tambin como Gauss Seidel no lineal, converge ms rpido que el mismo mtodo pero con desplazamientos simultneos (Jacobi no lineal). Ahora, el pseudocdigo de un procedimiento que resuelve en forma aproximada un sistema de ecuaciones no lineales descrito como x = g(x): proc punto_fijo_n(entero n, proc g, real &xinicial[n], real eps, entero maxiter, real &x[n], lgico &convergencia) ! ! Este procedimiento encuentra una solucin aproximada x del sistema no lineal ! descrito como x = g(x), con el mtodo iterativo de punto fijo multivariable. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! g Procedimiento que calcula una nueva aproximacin x = g(xinicial, x) ! proc g(entero n, real xinicial[n], real &x[n]) ! n Nmero de ecuaciones y de incgnitas. ! xinicial Vector de incgnitas en la iteracin inicial. ! x Vector de incgnitas en la nueva iteracin. ! xinicial Vector de estimaciones iniciales. 67 ! eps Mximo error permisible. Cuando la norma euclidiana de la diferencia ! entre las dos ltimas aproximaciones es menor que eps, se considera ! haber llegado a solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es un punto fijo de g(x). ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! entero iter, i real suma, norma2 convergencia=VERDADERO ejecuta iter = 1, maxiter { llama g(n, xinicial, x) ! clculo de la nueva aproximacin x suma = 0.0 ejecuta i =1, n suma = suma + (x[i] - xinicial[i])82 norma2 = SQRT(suma) si norma2 < eps entonces regresa ! se checa la convergencia ejecuta i = 1, n ! preparacin de la siguiente iteracin xinicial[i] = x[i] } convergencia = FALSO regresa fin 4.2 Mtodo de Newton Raphson multivariable Para deducir las ecuaciones de Newton Raphson multivariable, considere el caso particular de dos variables y dos ecuaciones (n=2): 1 1 2 f (x , x ) = 0 2 1 2 f (x , x ) = 0 1 2 Si todas las n-simas derivadas parciales de f(x , x ) son continuas en una regin cerrada y si las (n+1)-simas derivadas parciales existen en la regin abierta, se tiene: 68 n donde R es: 1 2 1 2 1 aplicando este resultado tanto a f como a f en el punto base (x , x ) y con incrementos h = (k) (k) 1 1 1 2 2 2 2 x - x en la direccin x y h = x - x en la direccin x : (k+1) (k) (k+1) (k) donde las derivadas parciales son evaluadas es el punto base x . (k) 1 1 2 2 1 2 Si suponemos que x . x es razonable tambin suponer que f (x , x ) .0 y f (x , x ) (k+1) (k+1) (k) (k+1) (k) 1 1 2 2 .0. Si adems x .x , entonces (x - x ) .0 y (x - x ) .0 para j = 2,3,4, ... . (k+1) (k) (k+1) (k) j (k+1) (k) j Despus de estas suposiciones las ecuaciones anteriores se simplifican considerablemente: 1 1 1 2 2 2 Como x - x = h y x - x = h , entonces (k+1) (k) (k+1) (k) 69 1 Esta ltimas ecuaciones definen un sistema de dos ecuaciones lineales con dos incgnitas (h y 2 h ). Resuelto este, la nueva aproximacin x se calcula mediante: (k+1) 1 1 1 x = x + h (k+1) (k) 2 2 2 x = x + h (k+1) (k) Las frmulas obtenidas arriba se pueden generalizar fcilmente para el caso de n variables: J(x ) h = - f(x ) (k) (k) Esta ltima ecuacin es la del mtodo de Newton Raphson multivariable. En ella, J es la matriz Jacobiana del sistema de ecuaciones y se define por: 1 2 3 n 1 2 3 n mientras que h = [h , h , h , ..., h ] y f = [f , f , f , ..., f ] . T T Por lo tanto, en cada iteracin de Newton Raphson multivariable ser necesario resolver un sistema lineal de n ecuaciones y n incgnitas. Si la matriz jacobiana es singular, entonces el sistema J(x ) h = - f(x ) no tiene solucin nica y por lo tanto Newton Raphson falla en la (k) (k) bsqueda de una raz x. Ejemplo Encuentre una raz aproximada del sistema 1 1 2 1 2 f (x , x ) = x + x - 4 = 0 2 2 2 1 2 1 2 f (x , x ) = x x - 1 = 0 mediante la aplicacin de Newton Raphson multivariable con x = [2, 0] . Considere el criterio (0) T 70 2 de convergencia 2x - x 2 < 1X10 . (k+1) (k) -4 1 2 1 2 1 2 f(x ) = [f (x ), f (x )] = [[x ] + [x ] - 4, x x - 1] (0) (0) (0) T (0) 2 (0) 2 (0) (0) T f(x ) = [2.00000 + 0.00000 - 4.00000, 2.00000(0.00000) - 1.00000] = [0.00000, -1.00000] (0) 2 2 T T
Por lo tanto, el sistema lineal J(x ) h = - f(x ) por resolver en esta iteracin es: (0) (0) 1 2 4.00000h + 0.00000h = 0.00000 1 2 0.00000h + 2.00000h = 1.00000 cuya solucin es h = [0.00000, 0.50000] . La nueva aproximacin x se obtiene con: T (1) 1 1 1 x = x + h = 2.00000 + 0.00000 = 2.00000 (1) (0) 2 2 2 x = x + h = 0.00000 + 0.50000 = 0.50000 (1) (0) 2 2 2x - x 2 = 2h2 = %(0.00000 + 0.50000 ) = 0.50000 (1) (0) 2 2 Dado que todava no se cumple con el criterio de convergencia, ser necesario calcular al menos una iteracin adicional. 1 2 2 Iteracin k x x 2x - x 2 (k) k) (k) (k-1) 0 2.00000 0.00000 1 2.00000 0.50000 0.50000 2 1.93333 0.51667 0.06872 3 1.93185 0.51764 0.00177 4 1.93185 0.51764 1.50229X10 -6 En el caso multivariable, Newton Raphson tambin presenta convergencia cuadrtica, es decir, su orden de convergencia es 2. Sin embargo, se requiere partir de una estimacin inicial cercana a la raz, para que el mtodo funcione adecuadamente. 71 El siguiente es el pseudocdigo de un procedimiento que resuelve en forma aproximada un sistema de n ecuaciones no lineales con Newton Raphson multivariable: proc newton_n(entero n, proc funs, proc jacobiana, real &xinicial[n], real eps, entero maxiter, real &x[n],lgico &convergencia) ! ! Este procedimiento encuentra una solucin aproximada x del sistema no lineal ! f (x) = 0, con el mtodo de Newton Raphson multivariable. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! funs Procedimiento que calcula las funciones f (x) = 0 ! proc funs(entero n, real x[n], real &f[n]) ! n Nmero de ecuaciones y de incgnitas. ! x Vector de variables x. ! f Vector de funciones f. ! jacobiana Procedimiento que calcula los elementos de la matriz jacobiana del ! sistema de ecuaciones ! proc jacobiana(entero n, real x[n], real &J[n, n]) ! n Nmero de ecuaciones y de incgnitas. ! x Vector de variables x. ! J Matriz jacobiana del sistema. J[i, j] = df[i] / dx[j] evaluada ! en x. ! xinicial Vector de estimaciones iniciales. ! eps Mximo error permisible. Cuando la norma euclidiana de la diferencia ! entre las dos ltimas aproximaciones es menor que eps, se considera ! haber llegado a solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es el vector solucin de f (x) = 0. ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! entero iter, i, j real f[n], J[n, n], A[n, n+1], h[n], suma, norma2 lgico solucion_unica convergencia=VERDADERO ejecuta iter = 1, maxiter { llama funs(n, xinicial, f) ! clculo de las funciones f evaluadas en xinicial llama jacobiana(n, xinicial, J) ! clculo de la matriz jacobiana J evaluada en xinicial ejecuta i = 1, n ! formacin de la matriz aumentada A del sistema lineal { ejecuta j = 1, n A[i, j] = jacobiana[i, j] A[i, n+1] = -f[i] } 72 llama eliminacion_gauss(n, A, h, solucion_unica) ! solucin del sistema lineal si no solucion_unica entonces { escribe El sistema lineal en la iteracin, iter, no tiene solucin nica convergencia = FALSO regresa } ejecuta i = 1, n x[i] = xinicial[i] + h[i] ! clculo de la nueva aproximacin x suma = 0.0 ejecuta i =1, n suma = suma + h[i]82 norma2 = SQRT(suma) si norma2 < eps entonces regresa ! se checa la convergencia ejecuta i = 1, n ! preparacin de la siguiente iteracin xinicial[i] = x[i] } convergencia = FALSO regresa fin El esfuerzo requerido para determinar analticamente las n derivadas parciales de la matriz 2 jacobiana puede llegar a ser considerable y frustrante, particularmente para n grande y/o ecuaciones complejas. En ese caso, se aconseja calcular las derivadas en forma aproximada empleando frmulas de diferencias finitas. Una de la ms usadas es: j j donde x es una cantidad pequea en valor absoluto, usualmente x = % (psilon) |x | , y e es un (k) vector cuyo nico elemento distinto de cero es un uno colocado en la j-sima coordenada. 4.3 Mtodo de Broyden Un notorio inconveniente del mtodo de Newton Raphson multivariable es que en cada iteracin se requiere resolver un sistema lineal de nxn, lo cual implica un esfuerzo computacional de O(n ). 3 Una generalizacin del mtodo de la secante aplicada a sistemas no lineales, conocida como el mtodo el Broyden, solo requiere de n evaluaciones funcionales por iteracin y reduce el nmero de clculos aritmticos a O(n ). Broyden pertenece a la familia de mtodos conocida como 2 actualizacin de la secante del mnimo cambio. El aporte de este mtodo es que la inversa de la matriz jacobiana ahora es actualizada en cada iteracin mediante la frmula de inversin de Sherman y Morrison: 73 donde A es la matriz jacobiana, y = f(x ) - f(x ) y s = x - x . Esta frmula solo incluye (k) (k) (k-1) (k) (k) (k-1) multiplicaciones matriciales y ,por lo tanto, demanda no ms de O(n ) clculos aritmticos. 2 La principal desventaja del mtodo de Broyden es que su convergencia es superlineal y ya no cuadrtica como en Newton Raphson. Una convergencia superlineal implica que:
donde p es la solucin de f(x) = 0. Sin embargo, una reduccin en el orden de convergencia de dos a superlineal es aceptable; ya que se compensa por la reduccin en el nmero de clculos requeridos por iteracin. Ejemplo Encuentre una raz aproximada del sistema 1 1 2 1 2 f (x , x ) = x + x - 4 = 0 2 2 1 1 2 1 2 f (x , x ) = x x - 1 = 0 con el mtodo de Broyden. Tome como estimacin inicial a x = [2, 0] y considere un criterio de (0) T 2 convergencia 2x - x 2 < 1X10 (k+1) (k) -4 1 2 1 2 1 2 v = f(x ) = [f (x ), f (x )] = [[x ] + [x ] - 4, x x - 1] (0) (0) (0) T (0) 2 (0) 2 (0) (0) T v = [2.00000 + 0.00000 - 4.00000, 2.00000(0.00000) - 1.00000] = [0.00000, -1.00000] 2 2 T T
74 Ahora se invierte la matriz J(x ) (0) y se calcula la primera iteracin: x = x + s = [2.00000, 0.00000] + [0.00000, 0.500000] = [2.00000, 0.50000] (1) (0) T T T 2 2s2 = p(0.00000 + 0.50000 ) = 0.50000 2 2 La inversin de la matriz jacobiana se lleva a cabo solamente en la primera iteracin. En las subsecuentes iteraciones, sta se aproximar mediante la frmula de Sherman y Morrison. Para determinar la segunda iteracin, se copia el vector v en w: w = [0.00000, -1.00000] T y se calculan los vectores v, y y z 1 2 1 2 1 2 v = f(x ) = [f (x ), f (x )] = [[x ] + [x ] - 4, x x - 1] (1) (1) (1) T (1) 2 (1) 2 (1) (1) T v = [2.00000 + 0.50000 - 4.00000, 2.00000(0.50000) - 1.00000] = [0.25000, 0.00000] 2 2 T T y = v - w = [0.25000, 0.00000] - [0.00000, -1.00000] = [0.25000, 1.00000] T T T Se procede a calcular la nueva matriz A, con la frmula de Sherman y Morrison: 75 En los clculos anteriores; la frmula de Sherman y Morrison se expres en trminos de los vectores y, z y w y de la matriz C. Con la nueva A, se procede a calcular x (2) x =x = [2.00000, 0.50000] + [-0.06250, 0.00000] = [1.93750, 0.50000] (1) (2) T T T 2 2s2 = p((-0.06250) + 0.00000 ) = 0.06250 2 2 2 El procedimiento continua hasta que se satisfaga el criterio 2x - x 2 < 1 X10 (k+1) (k) -4 La siguientes es una tabla con todas las iteraciones requeridas en este ejercicio: 1 2 Iteracin k x x (k) (k) 2 2x - x 2 (k) (k-1) 0 2.00000 0.00000 1 2.00000 0.50000 0.50000 76 2 1.93750 0.50000 0.06250 3 1.93443 0.51639 0.01668 4 1.93184 0.51763 0.00286 5 1.93185 0.51764 0.00001 A continuacin, un algoritmo en pseudocdigo, del mtodo de Broyden. proc broyden(entero n, proc funs, proc jacobiana, real &xinicial[n], real eps, entero maxiter, real &x[n],lgico &convergencia) ! ! Este procedimiento encuentra una solucin aproximada x del sistema no lineal ! f (x) = 0, con el mtodo de Broyden. ! Descripcin de parmetros: ! n Nmero de ecuaciones y de incgnitas. ! funs Procedimiento que calcula las funciones f (x) = 0 ! proc funs(entero n, real x[n], real &f[n]) ! n Nmero de ecuaciones y de incgnitas. ! x Vector de variables x. ! f Vector de funciones f. ! jacobiana Procedimiento que calcula los elementos de la matriz jacobiana del ! sistema de ecuaciones ! proc jacobiana(entero n, real x[n], real &J[n, n]) ! n Nmero de ecuaciones y de incgnitas. ! x Vector de variables x. ! J Matriz jacobiana del sistema. J[i, j] = df[i] / dx[j] evaluada ! en x. ! xinicial Vector de estimaciones iniciales. ! eps Mximo error permisible. Cuando la norma euclidiana de la diferencia ! entre las dos ltimas aproximaciones es menor que eps, se considera ! haber llegado a solucin. ! maxiter Nmero mximo de iteraciones. ! x ltima iteracin calculada. Si en convergencia se devuelve el valor ! VERDADERO, entonces x tambin es el vector solucin de f (x) = 0. ! convergencia Bandera cuyo valor indica si hubo convergencia: ! convergencia=VERDADERO se alcanz la convergencia ! convergencia=FALSO no se alcanz la convergencia. ! entero iter, i, j, informacion_cambiosf[n] real f[n], J[n, n], L[n, n], U[n, n], b[n], columna_inversa[n] real A[n, n], s[n], w[n], y[n], z[n], suma, norma2, p, s_mas_z[n], matriz[n, n], c[n, n] 77 real func multiplicacion_vector_transpuesto_vector lgico solucion_unica, exito_LU convergencia=VERDADERO llama funs(n, xinicial, f) ! clculo de las funciones f evaluadas en xinicial llama jacobiana(n, xinicial,J) ! clculo de la matriz jacobiana J evaluada en xinicial ! ! inversin de la matriz jacobiana ! llama LU(n, J, L, U, informacion_cambiosf, exito_LU) si no exito_LU entonces { escribe La matriz jacobiana evaluada en xinicial es singular o no es posible la factorizacin LU convergencia = FALSO regresa } ejecuta i = 1,n { ejecuta j = 1, n { si i = j entonces ! b es la i-sima columna de la matriz identidad b[j] = 1.0 otro b[j] = 0.0 } llama solve_lu(n, L, U, informacion_cambiosf, b, columna_inversa, solucion_unica) ejecuta j = 1, n A[j, i] = columna_inversa[j] ! i-sima columna de la inversa de la jacobiana } llama multiplicacion_matriz_vector(n, -A, f, s) ejecuta i = 1, n x[i] = xinicial[i] + s[i] ! clculo de una nueva iteracin suma = 0.0 ejecuta i = 1, n suma = suma +s[i]82 norma2 = SQRT(suma) si norma2 < eps entonces regresa ! se checa la convergencia en la primera iteracin ejecuta iter = 2, maxiter { ejecuta i = 1, n w[i] = f[i] ! copia f en w llama funs(n, x, f) ejecuta i = 1, n 78 y[i] = f[i] - w[i] llama multiplicacion_matriz_vector(n, -A, y, z) p = multiplicacion_vector_transpuesto_vector(n, -s, z) llama identidad(n, Ident) ! Ident es la matriz identidad de orden n ejecuta i = 1, n s_mas_z[i] = s[i] + z[i] llama multiplicacion_vector_vector_transpuesto(n, s_mas_z, s, matriz) llama suma_matrices(n, n, p*Ident, matriz, c) llama multiplicacion_matrices(n, n, n, c, A, matriz) ejecuta i = 1, n ejecuta j = 1, n A[i, j] = matriz[i, j] /p llama multiplicacion_matriz_vector(n, -A, f, s) ejecuta i = 1, n x[i] = x[i] + s[i] suma = 0.0 ejecuta i = 1, n suma = suma + s[i]82 norma2 = SQRT(suma) si norma2 < eps entonces regresa ! se checa la convergencia } convergencia = FALSO regresa fin proc multiplicacion_matriz_vector(integer n, real A[n, n], real b[n], real &r[n]) ! ! Este procedimiento calcula el producto de una matriz A por un vector b. ! Descripcin de parmetros: ! n Nmero de filas y de columnas de A; nmero de elementos de b; nmero ! de elementos de r. ! A Matriz ! b Vector ! r Vector, producto A*b ! entero i, j ejecuta i = 1, n { r[i] = 0.0 ejecuta j = 1, n r[i] = r[i] + A[i, j]*b[j] } regresa 79 fin func multiplicacion_vector_transpuesto_vector(integer n, real b[ n], real c[n]) ! ! Esta funcin calcula el producto traspuesto(b) por el vector c. ! Descripcin de parmetros: ! n Nmero de elementos de b y c. ! b Vector. ! c Vector. ! El resultado es el escalar r. ! entero i real r r = 0.0 ejecuta i = 1, n r = r + b[i]*c[i] regresa r fin proc multiplicacion_vector_vector_transpuesto(integer n, real b[ n], real c[n], real &r[n, n]) ! ! Este procedimiento calcula el producto del vector b por transpuesto(c). ! Descripcin de parmetros: ! n Nmero de elementos de b y c; nmero de filas y de columnas de r. ! b Vector. ! c Vector. ! r Matriz, producto b*transpuesto(c). ! entero i, j ejecuta i = 1, n { ejecuta j = 1, n r[i, j] = b[i]*c[j] } regresa fin proc identidad(entero n, real &I[n, n]) ! ! Este procedimiento genera la matriz identidad de orden n. ! Descripcin de parmetros: ! n Nmero de filas y de columnas de I. ! I Matriz identidad. 80 ! entero k, j ejecuta k = 1, n { ejecuta j = 1, n I[k, j] = 0.0 } ejecuta k = 1, n I[k, k] = 1.0 regresa fin proc multiplicacion_matrices(integer m, integer n, integer p, real A[m, n], real B[n, p], real &C[m, p]) ! ! Este procedimiento calcula el producto matricial C=A por B. ! Descripcin de parmetros: ! m Nmero de filas de A. ! n Nmero de columnas de B. ! p Nmero de columnas de A y nmero de filas de B ! C Matriz C = A*B. ! entero i, j, k ejecuta i = 1, m { ejecuta j = 1, p { C[i, j] = 0.0 ejecuta k = 1, n C[i, j] = C[i, j] + A[i, k]*B[k,j] } } regresa fin 81 5. Optimizacin 1 2 n Dada una funcin f(x) de n variables x , x , ..., x , se trata de encontrar un vector x tal que f(x ) * * sea un mnimo local de f(x). Para encontrar un mximo local, se determina el mnimo de -f(x), es decir, max f(x) = min -f(x). 5.1 Bsqueda unidimensional con seccin dorada Sea una funcin de una variable f(x) continua y unimodal en [a, b]. Una funcin es unimodal en un intervalo si en ste tiene un slo extremo. El proceso de encontrar un extremo de una funcin f(x) en un intervalo dado sin emplear derivadas, se conoce como bsqueda unidimensional. Considrese el problema de encontrar el mnimo de una funcin unimodal en el intervalo [a, b]. Es posible definir dos puntos intermedios, p = a + r(b - a) y q = b - r(b - a), tales como los mostrados en el siguiente diagrama: 1 <------------------------ L -----------------------> |----------------|--------------------|-----------------| a p q b 1 1 <---- rL ----> <---- rL ----> donde r es una razn por determinar. Las distancias entre a y p y entre q y b son las mismas e 1 iguales a rL .Entonces se elimina la regin que contiene los valores ms altos de f(x); esa regin puede ser [a, p] o [q, b]. Supngase que la regin eliminada es [a, p]: 1 <------------------------ L ------------------------> |----------------|--------------------|-----------------| a p q b 1 1 <---- rL ----> <---- rL ----> 1 <--- r(1 - r)L --->
|--------------------------------------| a b 82 1 2 <--------- (1- r)L = L ---------->
1 1 1 1 El segmento que une los puntos p y q tiene una longitud r(1 - r)L y es igual a L - rL - rL 1 1 1 1 1 1 1 r(1 - r)L = L - rL - rL = L -2rL = L (1 - 2r) r(1 - r) = 1 - 2r r - r = 1 - 2r 2 r -3r + 1 = 0 2 Resolviendo la ltima ecuacin, se encuentra que: r = (3 %((-3) - 4(1)(1))) / ((2)(1)) = (3 %5) / 2 2 Dado que |r| < 1, la nica solucin posible es r = (3 - %5) / 2 = .3819660112501..... . Esta razn r se conoce como seccin dorada y tiene propiedades matemticas muy interesantes, conocidas ya por los antiguos griegos. Como se elimin la regin [a, p], es conveniente actualizar los lmites del intervalo de bsqueda, de tal forma que el nuevo valor de a ser p, es decir, a = p. Se calculan los nuevos puntos p y q 2 2 2 colocados en el nuevo intervalo cuya longitud es L con las frmulas p = a + rL y q = b - rL . Si el valor de r es el determinado arriba, entonces uno de los nuevos puntos p y q coinciden con alguno de los p y q anteriores. Se continua con la eliminacin de regiones, los valores de los lmites a y b 1 se actualizan continuamente y la bsqueda finaliza hasta que # b - a# / L # mximo error permitido o hasta completar un nmero dado de experimentos o iteraciones. Ejemplo Minimizar f(x) = (x - 1)(x - 2)(x -3) en [1, 3] con bsqueda unidimensional con seccin dorada. 1 Tome como criterio de finalizacin a # b - a# / L # .02. a = 1, b = 3 r = (3 - %5) / 2 = .38197.... 1 L = b - a = 3 - 1 = 2
Primer experimento 1 1 p = a + rL = 1 + .38917(2) = 1.76393 q = b - rL = 3 - .38197(2) = 2.23607 fp = f(p) = (1.76393 - 1)(1.76393 - 2)(1.76393 - 3) = .22291 83 fq = f(q) = (2.23607 - 1)(2.23607 - 2)(2.23607 - 3) = -.22291 1 La condicin # b -a # / L = *3 - 1 * / 2 > .02 , es verdadera y por lo tanto se requieren ms iteraciones. Si fp # fq es verdadera, implica que la regin por eliminar es la de la derecha. En caso contrario, se elimina la regin colocada a la izquierda. fp # fq, .22291 # -.22291 tiene un valor falso. Por lo tanto se elimina la regin de la izquierda y se actualiza el lmite a: a = p = 1.76393 Segundo experimento p = q = 2.23607 q = b - r( b - a) = 3 - .38917(3 - 1.76393) = 2.52786 fp = f(p) = f(2.23607) = -.22291 fq = f(q) = f(2.52786) = (2.52786 - 1)(2.52786 -2)(2.52786 - 3) = -.38078 1 *b -a* / L = *3 - 1.76393* / 2 = .61804 > .02 , tiene un valor verdadero fp # fq -.22291 # -.38078 es falsa. Entonces se elimina la regin de la izquierda nuevamente: Tercer experimento a = p = 2.23607 p = q = 2.52786 q = b - r(b - a) = 3 - .38197(3- 2.23607) = 2.70820 fp = f(p) = -.38708 fq = f(q) = f(2.70820) = -.35300 1 *b - a* / L = *3 - 2.23607* / 2 = .38197 > .02, condicin verdadera fp # fq -.38708 # -.35300 es verdadera. Ahora, la regin eliminada es la de la derecha y se actualiza el lmite b: 84 Cuarto experimento b = q = 2.70820 q = p = 2.52786 p = a + r(b - a) = 2.23607 + .38197(2.70820 - 2.23607) = 2.41641 fp = f(p) = f(2.41641) = -.34420 fq = f(q) = -.38078 1 *b - a* / L = *2.70820 - 2.23607* / 2 = .23607 > .02 , la condicin sigue siendo verdadera.
La siguiente tabla muestra un resumen de los subsecuentes experimentos. 1 Experimento a p q b *b - a*/L 1 1.00000 1.76393 2.23607 3.00000 1.00000 2 1.76393 2.23607 2.52786 3.00000 0.61803 3 2.23607 2.52786 2.70820 3.00000 0.38197 4 2.23607 2.41641 2.52786 2.70820 0.23607 5 2.41641 2.52786 2.59675 2.70820 0.14590 6 2.52786 2.59675 2.63932 2.70820 0.09017 7 2.52786 2.57044 2.59675 2.63932 0.05573 8 2.52786 2.55418 2.57044 2.59675 0.03444 9 2.55418 2.50744 2.58049 2.59675 0.02129 10 2.57044 2.58049 2.58670 2.59675 0.01316 Al final, se evala la expresin f(p) # f(q); en caso verdadero el mnimo aproximado est en x = p, * en el caso contrario, el mnimo est en x = q. En consecuencia, x = 2.58049. Vale la pena * * recalcar que despus de la primera iteracin, solo se requiere de una evaluacin funcional por experimento. A continuacin, un algoritmo completo para la minimizacin de una funcin empleando bsqueda unidimensional con seccin dorada. 85 proc seccion_dorada(real func f, real &a, real &b, real error_max, entero max_exp, real &xmin) ! ! Este procedimiento encuentra una aproximacin al valor de xmin, donde la funcin tiene un ! mnimo. Se emplea bsqueda unidimensional con seccin dorada. ! Descripcin de parmetros: ! f Funcin externa que evala a la funcin f(x) . ! a Lmite inferior del intervalo de bsqueda. En el regreso, devuelve el ! ltimo valor calculado para el lmite inferior. ! b Lmite superior del intervalo de bsqueda. En el regreso, devuelve el ! ltimo valor calculado para el lmite superior. ! error_max Mximo error relativo permisible. ! max_exp Mximo nmero de experimentos. ! xmin Valor de la variable independiente donde existe un mnimo aproximado de ! f(x). Si el cociente de la longitud del ltimo intervalo entre la longitud del ! intervalo original es menor que error_max o el nmero de experimentos ! calculados es igual a max_nexp, se termina el proceso de bsqueda. !. entero nexp real r, p, q, fp, fq, L r =(3.0-SQRT(5.0))/2.0 ! seccin dorada nexp = 1 p = a + r*(b - a) q = b- r*(b - a) fp = f(p) fq = f(q) L = ABS(b -a) ! longitud del intervalo original mientras ABS(b - a) / L > error_max y nexp < max_exp { si fp #fq entonces ! eliminacin de regiones b = q q = p p = a + r*(b -a) fq = fp fp = f(p) otro a = p p = q q = b - r*(b - a) fp = fq fq = f(q) nexp = nexp +1 } si f(p) <= f(q) entonces ! clculo del resultado final 86 xmin = p otro xmin = q regresa fin
5.2 Optimizacin sin restricciones de funciones de varias variables Existen dos clases de mtodos para minimizar funciones f(x) de n variables: los que se caracterizan por emplear una direccin de bsqueda basada en el clculo de derivadas parciales (mtodos indirectos) y aquellos en los cuales su direccin de bsqueda se obtiene solamente con evaluaciones funcionales (mtodos directos). Los mtodos indirectos tienen la forma general: x = x + d (k+1) (k) (k) (k) en la cual una nueva aproximacin x se determina a partir de la estimacin anterior, x , y una (k+1) (k) direccin de bsqueda, d . El parmetro es un escalar cuyo valor indica que tanto se avanza (k) (k) en la direccin d . (k) Se dice que un algoritmo de optimizacin posee una propiedad de descenso si f(x ) < f(x ). (k+1) (k) Una posible direccin de bsqueda es el negativo del vector gradiente de f(x), d = - Lf(x ) = - (k) (k) grad(f(x )). Obviamente, esta direccin garantiza la propiedad de descenso. El mtodo as (k) construido se conoce como el del descenso ms brusco (steepest descent) o mtodo de Cauchy: x = x - Lf(x ) (k+1) (k) (k) (k) El escalar se determina mediante una bsqueda unidimensional para una funcin definida (k) por: () = f(x - Lf(x )) (k) (k) Conocidos los vectores x y Lf(x ) , es una funcin solamente de la variable . Se trata de (k) (k) encontrar el valor de que minimiza a . Para aplicar una tcnica de bsqueda unidimensional, tal como seccin dorada, se requiere de un intervalo que contenga al mnimo de () y para encontrarlo se ejecuta un procedimiento conocido como enmarcado (bracketing). Uno de estos procedimientos es el mtodo de Swann, en el cual los valores de se generan con: j+1 j = + 2 , para j = 0, 1, 2, ... j
0 donde es un valor inicial arbitrariamente seleccionado y es un incremento o tamao de paso, 0 0 0 fijado de antemano. El primer paso es la comparacin de ( ), ( + **) y ( - **). Si 87 0 0 0 ( - **) $ ( ) $ ( + **) 0 entonces , debido a la suposicin de unimodalidad de , el mnimo debe estar a la derecha de y delta por lo tanto es positivo. Si 0 0 0 ( - **) $ ( ) # ( + **) 0 0 implica que el mnimo est entre - ** y + *, lo cual finaliza el proceso de enmarcado. El caso restante: 0 0 0 ( - **) # ( ) $ ( + **) j indica que realmente no es unimodal. Entonces se procede a calcular valores hasta que se encuentre un intervalo que contenga al mnimo de . El proceso de enmarcado ms la bsqueda unidimensional conforman un procedimiento conocido como bsqueda a travs de una direccin (line search). Un criterio de convergencia usado frecuentemente en la optimizacin de funciones multivariables 1 2 es 2x - x 2 < o 2Lf(x )2 < . (k+1) (k) k+1) Ejemplo 1 2 1 2 Minimizar la funcin f(x) = x + x - 4x x con el mtodo del descenso ms brusco. Inicie con x 4 4 (0) = [.6, .7] y tome como criterio de convergencia a 2x - x 2 < .001 o 2Lf(x )2 < .0001. T (k+1) (k) k+1) () = f(x - Lf(x )) (0) (0) 0 Ahora, el procedimiento de enmarcado comenzando con = 0. Tome ** = .05. 0 ( ) = f([.6, .7] - 0[-1.93600, -1.02800] ) = f([.6, .7] ) = .6 + .7 -4(.6)(.7) = -1.31030 T T T 4 4 88 0 ( + **) = f(.05) = f([.6, .7] -.05[-1.93600, -1.02800] ) = f([.69680, .75140] ) = -1.53979 T T T 0 ( - **) = f(-.05) = f([.6, .7] -(-.05)[-1.93600, -1.02800] ) = -1.06441 T T 0 0 0 Como ( - **) $ ( ) $ ( + **) , -1.06411 $ -1.31030 $ -1.53979, entonces = .05. 0 ( ) = -1.31030 1 0 0 0 = + 2 = + = 0 + .05 = .05; ( ) = (.05) = -1.53979 0 2 1 1 1 = + 2 = +2 =.05 + .10 = .15; ( ) = (.15) = -1.88137 1 3 2 2 1 = + 2 = +4 =.15 + .20 = .35; ( ) = (.35) = -1.49020 2 3 Al llegar a , la funcin aument su valor, por lo tanto el mnimo de debe estar en el intervalo 1 3 [ , ] = [.05, .35]. Con esta conclusin termina el proceso de enmarcado y ahora comienza la 1 bsqueda unidimensional con a = .05 y b = .35. Terminar la bsqueda cuando *b -a* / L < .05. r = .38197 1 L = .35 - .05 = .30 Primer experimento p = a + r*(b - a) = .05 + .38197(.35 - .05) = .16459 q = b - r*(b - a) = .35 - .38197(.35 - .05) = .23541 fp = (p) = (.16459) = -1.91097 fq = (q) = (.23541) =-1.94830 1 *b - a* / L = *.35 - 05* / .30 = 1 > .05, lo que obliga a realizar ms experimentos
fp # fq, -1.91097 < -1.94830, es una condicin falsa y entonces se elimina la regin [a, p]. Segundo experimento a = p = 0.16459 p = q = .23541 q = b - a*(b - a) = .35 - .38197(.35 - .16459) = .27918 fp = fq = -1.94830 89 fq = (q) = (.27918) = -1.86178 1 b - a* / L = *.35 - .16459 * / .30 = .61803 > .05 La condicin fp < fq, -1.94830 < -1.86178 es ahora verdadera y entonces la regin eliminada es [q, b]. Tercer experimento b = q = .27918 q = p = .23541 p = a + r*(b - a) = .16459 +.38197(.27918 - .16459) = .20836 fq = fp = -1.94830
fp = (p) = (.20836) = -1.95707 1 *b - a* / L = *.27918 - .16459* / .30 = .38197 > .05 fp < fq, -1.95707 < -1.94830, la condicin es verdadera Cuarto experimento b = q = .23541 q = p = .20836 p = a + r*(b - a) = .16459 + .38197(.23541 - .16459) = .19164 fq = fp = -1.95707 fp = (p) = (.19164) = -1.44761
1 *b - a* / L = *.23541 - .16459* / .30 = .23607 > .05 La siguiente es una tabla con los experimentos restantes 1 Experimento a p q b *b - a*/L 1 .05000 .16459 .23541 .35000 1.00000 2 .16459 .23541 .27918 .35000 .61803 3 .16459 .20836 .23541 .27918 .38197 4 .16459 .19164 .20836 .23541 .23607 90 5 .19164 .20836 .21869 .23541 .14590 6 .20836 .21869 .22508 .23541 .09017 7 .20836 .21475 .21869 .22508 .05573 8 .20836 .21231 .21475 .21869 .03444 El mnimo, despus de ocho experimentos, se encuentra en = .21475. * Para terminar la primera iteracin, el clculo de x y la verificacin de la convergencia: (1) 2 2x - x 2 = %((1.01576 - .6) + (.92076 - .7) ) = .47073 (1) (0) 2 2 2 1 2 2 1 2 2Lf(x )2 = 2[4(x ) - 4x , 4 (x ) - 4x ] 2 (1) (1) 3 (1) (1) 3 (1) T
2 2 2 2Lf(x )2 =2[4(1.01576) - 4(.92076), 4(.92076) - 4(1.01576)] 2 = 2[.50908, -.94056]2 (1) 3 3 T 2 2Lf(x )2 = %(.50908 + (-.94056) ) = 1.06949 (1) 2 2 2 2 Ya que la condicin 2x - x 2 < .001 o 2Lf(x )2 < .0001 tiene un valor global falso, ser (1) (0) (1) necesario continuar con el clculo de ms iteraciones. Los siguientes son algoritmos en pseudocdigo para el proceso de enmarcado y el mtodo del descenso ms brusco. proc enmarcado_funcion(func real f, real xinicial, real &delta, real amax, real &a, real &b, entero &error) ! ! Este procedimiento encuentra un intervalo que contiene el mnimo de una funcin ! unimodal. Se emplea el algoritmo de Swann. ! Descripcin de parmetros: ! f Funcin externa que evala a la funcin f(x). ! xinicial Valor inicial para la bsqueda de los lmites del intervalo. ! delta Tamao de paso para la variable independiente usado en la frmula de ! Swann. ! amax Mximo valor permitido para el lmite inferior a. ! a Lmite inferior del intervalo que contiene un mnimo de la funcin f. ! b Lmite superior del intervalo que contiene un mnimo de la funcin f. 91 ! error Bandera que indica el tipo de error detectado en los clculos: ! error = 0 sin error ! error = 1 la funcin no es unimodal en [x0 - ABS(delta), x0 + ! ABS(delta) ! error = 2 El ltimo valor calculado del lmite inferior es mayor que ! amax. ! real x0, fx0, fizq, fder, x1, x2, fx1, fx2 entero j ! ! Se determina el signo correcto de delta ! error = 0 x0 = xinicial fx0 = f(x0) fizq = f(x0 - ABS(delta)) fder = f(x0 + ABS(delta)) si fizq $fx0 y fx0 $ fder entonces delta = ABS(delta) ! el signo de delta es positivo otro si fizq $fx0 y fx0 # fder entoces a = x0 - ABS(delta) ! el mnimo est entre x0 - ABS(delta) y x0 + ABS(delta) b = x0 + ABS(delta) regresa otro error = 1 ! f no es unimodal regresa j = 0 x1 = x0 + (28j)*delta fx1=fder mientras(x0 <= amax) ! clculo de los lmites del intervalo { j = j + 1 x2 = x0 + (28j)*delta fx2 = f(x2) si fx2 >= fx1 entonces { a = x0 b = x2 regresa } x0 = x1 x1 = x2 fx1 = fx2 92 } error = 2 regresa fin proc descenso_mas_brusco(entero n, real &x[n], real tolerancia1, real tolerancia2, entero maxiter, proc gradiente, func phi, entero &codigo_error) ! ! Clculo aproximado de un mnimo local de una funcin multivariable f(x) con el mtodo del ! descenso ms brusco. ! Descripcin de parmetros: ! n Nmero de variables. ! x Vector, de longitud n, que en la llamada contiene una estimacin inicial ! del punto donde se encuentra un mnimo local. En el regreso, devuelve ! la ltima iteracin calculada. ! tolerancia1, ! tolerancia2 Si la norma euclidiana de la diferencia entre las ltimas dos iteraciones es ! menor que tolerancia1 o si la norma euclidiana del vector gradiente de f(x) ! evaluado en la ltima iteracin es menor que tolerancia2, se considera ! haber llegado a un mnimo local de f(x). ! maxiter Nmero mximo de iteraciones. ! gradiente Procedimiento que calcula el gradiente de la funcin objetivo f(x) ! evaluado en el vector x: ! proc gradiente (entero n, real x[n], real nabla[n]) ! n Nmero de variables. ! x Vector de variables. De longitud n. ! nabla Vector gradiente de la funcin objetivo f(x) evaluado en x. ! phi Funcin que evala a phi(lamda) = f(x0 + lamda*d), donde f es la funcin ! objetivo f(x) ! func phi(real lamda) ! lamda Escalar que es la variable independiente de phi ! Los vectores x0 y d son variables globales y ambos de longitud n. ! codigo_error Bandera cuyo valor indica el tipo de situacin encontrada: ! codigo_error = 0 Sin error ! codigo_error = 1 No se alcanz la convergencia despus de maxiter ! iteraciones. ! codigo_error = 2 Error en la bsqueda a travs de una direccin. ! entero i, iter, error_enmarcado real x0[n], nabla[n], d[n], a, b, lamda_min, suma, norma_x, norma_gradiente global x0, d ! Se declaran a los vectores x0 y d como globales codigo_error = 0 ejecuta i = 1, n 93 x0[i] = x[i] ejecuta iter = 1, maxiter { llama gradiente(n, x0 ,nabla) ! evaluacin del vector gradiente ! ! bsqueda a travs de una direccin ! ejecuta i = 1,n ! d es el vector que representa a la direccin de bsqueda d[i] = - nabla[i] llama enmarcado_funcion(phi, 0.0, .05,10.0, a, b, error_enmarcado) si error_enmarcado 0 entonces codigo_error = 2 regresa llama seccion_dorada(phi, a, b, .05, 20, lamda_min) suma = 0.0 ejecuta i = 1, n { x[i] =x0[i] + alfa*d[i] ! clculo de la nueva iteracin x suma = suma + (x[i] - x0[i])82 } norma_x= SQRT(suma) llama gradiente(n, x ,nabla) ! evaluacin del vector gradiente en el vector x suma = 0.0 ejecuta i = 1, n suma = suma + nabla[i]82 norma_gradiente = SQRT(suma) ! ! se checa la convergencia ! si norma_x < tolerancia1 o norma_gradiente < tolerancia2 entonces regresa ejecuta i = 1, n x0[i] = x[i] ! se prepara una nueva iteracin } codigo_error = 1 ! sin convergencia regresa fin La siguiente es una tabla con el resumen de todas las iteraciones las iteraciones realizadas: 1 2 Iteracin k x x * (k) (2 2 2 2x - x 2 2Lf(x )2 (k) (k-1) (k) 1 0.21475 1.01576 0.92076 0.47072 1.06939 94 2 0.06885 0.98071 0.98551 0.07362 0.19357 3 0.12082 1.00114 0.99689 0.02339 0.04924 4 0.06443 0.99946 0.99958 0.00317 0.00562 5 0.11687 1.00002 0.99991 0.00066 0.00128
1 2 1 2 Una grfica de contornos para la funcin f(x) = x + x - 4x x confirma que un mnimo local se 4 4 encuentra en x = [1, 1]. 95 Frecuentemente el mtodo del descenso ms brusco se aproxima al mnimo lentamente y con un patrn en zigzag. Una aplicacin interesante del mtodo del descenso ms brusco es la solucin de sistemas de ecuaciones no lineales f(x) = 0, cuando no se conoce una estimacin inicial x cercana a la (0) solucin. En este caso, la funcin multivariable por minimizar es: ya que el mnimo de G(x) coincide con la solucin de f(x) = 0. Por ejemplo, para resolver el sistema: 1 1 1 2 1 1 f (x) = f (x , x ) = x + x - 4 = 0 2 2 2 2 1 2 1 2 f (x) = f (x , x ) = x x - 1 = 0 1 1 1 2 se minimiza G(x) = (x + x - 4) + (x x - 1) . Si x = [.2, .3] , el descenso ms brusco con los 2 2 2 2 (0) T criterios de convergencia 2x - x 2 < .001 o 2Lf(x )2 < .0001 da los resultados: (k+1) (k) k+1) 1 2 Iteracin k x x * (k) (2 2 2 2x - x 2 2Lf(x )2 (k) (k-1) (k) 1 0.24969 1.11386 1.55344 1.55121 .89594 2 0.74149 0.57491 1.94184 0.66432 1.14722 3 0.02902 0.55503 1.91513 0.03330 0.22020 4 0.16459 0.52420 1.93417 0.03624 0.16208 5 0.03024 0.52157 1.93003 0.00490 0.02507 6 0.12477 0.51913 1.93200 0.00313 0.02497 7 0.03222 0.51862 1.93137 0.00080 0.00662 Si ahora la direccin de bsqueda d se escoge como: (k) d = - [H(x )] Lf(x ) (k) (k) -1 (k) entonces un nuevo algoritmo es formado: x = x - [H(x )] Lf(x ) (k+1) (k) * (k) -1 (k) 96 el cual es conocido como mtodo de Newton o de Gauss Newton. De hecho, es Newton Raphson multivariable formulado para resolver el sistema de ecuaciones Lf(x) = 0, incluida una bsqueda a travs de una direccin para garantizar la propiedad de descenso. La matriz H(x), de n x n, es llamada matriz hessiana de la funcin f(x) y se define por: Si f(x) es continua, entonces la matriz hessiana H(x) es simtrica y nica. Como la inversin de una matriz es un procedimiento altamente costoso desde el punto de vista computacional, se prefiere calcular la direccin de bsqueda d con: (k) d = - [H(x )] Lf(x ) (k) (k) -1 (k) [H(x )] d = - [H(x )][H(x )] Lf(x ) (k) (k) (k) (k) -1 (k) [H(x )] d = - Lf(x ) (k) (k) (k) que implica resolver un sistema lineal de n x n en cada iteracin. Una vez conocida la direccin de bsqueda d , se aplica una bsqueda a travs de una direccin para calcular la nueva estimacin (k) x = x - [H(x )] Lf(x ) = x + d . (k+1) (k) * (k) -1 (k) (k) * (k)
Ejemplo 1 2 1 2 Minimizar f(x) = x + x - 4 x x con el mtodo de Newton. Tome como estimacin inicial a x 4 4 (0) 2 2 = [.9, .9] y considere el criterio de convergencia 2x - x 2 < .001 o 2Lf(x )2 < .0001. T (k+1) (k) (k+1) k = 0 97 Lf(x ) = [4(.9) -4(.9), 4(.9) -4(.9)] = [-.68400, -.68400] (0) 3 3 T T La direccin de bsqueda d es determinada al resolver el sistema lineal [H(x )] d = - Lf(x ): (k) (k) (k) (k) 0 El proceso de enmarcado arroja como resultado a = .35 y b =1.55 Se emplearon = 0 y ** = .05. 1 La bsqueda unidimensional con seccin dorada en este intervalo y un criterio de paro *b - a* / L < .05 determina que = .83390, por lo tanto, la nueva iteracin x es: * (1) x = x + d = [.9, .9] + .83390 [.11958, .11958] = [.99972, .99972] (k+1) (0) * (k) T T T 2 2x - x 2 = %((.99972 - .9) + (.99972 - .9) ) = .14102 (1) (0) 2 2 2 1 2 2 1 2 2Lf(x )2 = 2[4(x ) - 4x , 4 (x ) - 4x ] 2 (1) (1) 3 (1) (1) 3 (1) T
2 2 2 2Lf(x )2 =2[4(.99972) - 4(.99972), 4(.99972) - 4(.99972)] 2 = 2[-.00224, -.00224]2 (1) 3 3 T 2 2Lf(x )2 = %(-.00224) + (-.00224) = .00318 (1) 2 2 Las iteraciones restantes son mostradas en la siguiente tabla: 98 1 2 Iteracin k x x * (k) (2 2 2 2x - x 2 2Lf(x )2 (k) (k-1) (k) 1 0.83390 0.99972 0.99972 0.14102 0.00318 2 0.99922 1.00000 1.00000 0.00040 0.00000 A continuacin, un procedimiento en pseudocdigo para el algoritmo de Gauss Newton proc gauss_newton(entero n, real &x[n], real tolerancia1, real tolerancia2, entero maxiter, proc gradiente, proc hessiana, func phi, entero &codigo_error) ! ! Clculo aproximado de un mnimo local de una funcin multivariable f(x) con el mtodo de ! Gauss Newton. ! Descripcin de parmetros: ! n Nmero de variables. ! x Vector, de longitud n, que en la llamada contiene una estimacin inicial ! del punto donde se encuentra un mnimo local. En el regreso, devuelve ! la ltima iteracin calculada. ! tolerancia1, ! tolerancia2 Si la norma euclidiana de la diferencia entre las ltimas dos iteraciones es ! menor que tolerancia1 o si la norma euclidiana del vector gradiente de f(x) ! evaluado en la ltima iteracin es menor que tolerancia2, se considera ! haber llegado a un mnimo local de f(x). ! maxiter Nmero mximo de iteraciones. ! gradiente Procedimiento que calcula el gradiente de la funcin objetivo f(x) ! evaluado en el vector x: ! proc gradiente (entero n, real x[n], real nabla[n]) ! n Nmero de variables. ! x Vector de variables. De longitud n. ! nabla Vector gradiente de la funcin objetivo f(x) evaluado en x. ! hessiana Procedimiento que calcula la matriz hessiana de la funcin objetivo f(x) ! evaluada en el vector x: ! proc hessiana (entero n, real x[n], real H[n, n]) ! n Nmero de variables. ! x Vector de variables. De longitud n. ! H Matriz hessiana de la funcin objetivo f(x) evaluada en x. ! phi Funcin que evala a phi(lamda) = f(x0 + lamda*d), donde f es la funcin ! objetivo f(x) ! func phi(real lamda) ! lamda Escalar que es la variable independiente de phi ! Los vectores x0 y d son variables globales y ambos de longitud n. ! codigo_error Bandera cuyo valor indica el tipo de situacin encontrada: 99 ! codigo_error = 0 Sin error ! codigo_error = 1 No se alcanz la convergencia despus de maxiter ! iteraciones. ! codigo_error = 2 Error en la bsqueda a travs de una direccin. ! entero i, j, iter, error_enmarcado real x0[n], nabla[n], d[n], a, b, lamda_min, suma, norma_x, norma_gradiente real H[n, n], A_aumentada[n, n + 1] lgico solucion_unica global x0, d ! Se declaran a los vectores x0 y d como globales codigo_error = 0 ejecuta i = 1, n x0[i] = x[i] ejecuta iter = 1, maxiter { llama gradiente(n, x0 ,nabla) ! evaluacin del vector gradiente ! ! bsqueda a travs de una direccin ! llama hessiana(n, x0, H) ! clculo de la matriz hessiana ejecuta i = 1, n { ejecuta j = 1, n A_aumentada[i, j] = H[i, j] A_aumentada[i, n +1] = - nabla[i] } ! ! d es el vector que representa a la direccin de bsqueda ! llama eliminacion_gauss(n, A_aumentada, d, solucion_unica) llama enmarcado_funcion(phi, 0.0, .05,10.0, a, b, error_enmarcado) si error_enmarcado 0 entonces codigo_error = 2 regresa llama seccion_dorada(phi, a, b, .05, 20, lamda_min) suma = 0.0 ejecuta i = 1, n { x[i] =x0[i] + alfa*d[i] ! clculo de la nueva iteracin x suma = suma + (x[i] - x0[i])82 } norma_x= SQRT(suma) llama gradiente(n, x ,nabla) ! evaluacin del vector gradiente en el vector x 100 suma = 0.0 ejecuta i = 1, n suma = suma + nabla[i]82 norma_gradiente = SQRT(suma) ! ! se checa la convergencia ! si norma_x < tolerancia1 o norma_gradiente < tolerancia2 entonces regresa ejecuta i = 1, n x0[i] = x[i] ! se prepara una nueva iteracin } codigo_error = 1 ! sin convergencia regresa fin 101 6. Aproximacin e interpolacin La aproximacin es una tcnica que se emplea para: 1) Reemplazar una funcin f(x) difcil de evaluar, derivar o integrar; por otra funcin g(x) ms simple de manipular. 2) Manejar funciones cuya nica informacin disponible sobre ellas es un conjunto finito de puntos (puntos base): 0 0 x f(x ) 1 1 x f(x ) 2 2 x f(x ) . . . . . . n n x f(x ) Las funciones utilizadas en aproximacin frecuentemente pertenecen a uno de los siguientes tipos: n 0 1 2 n 1) polinomiales: g(x) = P (x) = a + a x + a x + ... + a x 2 n 0 0 1 1 2 2 n n 2) exponenciales: g(x) = a exp(b x) + a exp(b x) + a exp(b x) + ... + a exp(b x) 0 1 2 n 0 1 2 m n m 3) racionales: g(x) = ( a + a x + a x + ... + a x ) / ( b + b x + b x + ... + b x ) = P (x) / P (x) 2 n 2 m 0 1 2 n 1 2 4) series de Fourier: g(x) = a + a cos(x) + a cos(2x) + ... a cos(nx) + b sen(x) + b sen(2x) + ... + n b sen(nx). Los polinomios y sus derivadas presentan la ventaja de ser funciones continuas sobre toda la recta real. Adems, el teorema de aproximacin de Weierstrass garantiza la existencia de un polinomio que aproxima a f(x) tan cerca como se requiera: Si f est definida y es continua en [a, b), dado > 0, existe un polinomio P, definido en [a, b], con la propiedad de que |f(x) - P(x)| < para toda x 0 [a, b]. 0 1 2 n Si x , x , x , ..., x son (n + 1) nmeros diferentes y f(x) es una funcin cuyos valores estn dados en esos puntos, entonces existe un nico polinomio P de grado a lo ms n, con la propiedad de que k n k f(x ) = P (x ) para k = 0, 1, 2, ..., n. Un polinomio construido con este criterio se conoce como i i polinomio interpolante. Por ejemplo, en la figura siguiente se hace pasar por los puntos (x , f(x )), i 3 = 0, 1, 2, 3, un polinomio interpolante de grado a lo ms tres, P (x).
102
En esta grfica se observa una dificultad inherente a la interpolacin polinomial: el error cometido al aproximar a f(x) por un polinomio interpolante no se distribuye uniformemente en el intervalo 0 n [x , x ]. Hay que tomar en cuenta que los polinomios de grado alto presentan un comportamiento altamente oscilatorio ,el cual los descalifica como funciones interpolantes. Por esta situacin, se recomienda utilizar polinomios interpolantes de grado menor o igual a tres. 6.1 Interpolacin de Lagrange
Dados los puntos base: 0 0 x f(x ) 1 1 x f(x ) 2 2 x f(x ) . . . . . . n n x f(x ) i n con los valores distintos de x , i = 1, 2, 3, ...,n. Si el polinomio interpolante P (x) se escribe de la 103 forma: n 0 1 3 n 1 0 3 n 2 2 P (x) = A (x - x ) (x - x ) (x - x ) ... (x - x ) + A (x - x ) (x - x ) (x - x ) ... (x - x ) + 2 0 3 n n 0 3 n-1 1 1 A (x - x ) (x - x ) (x - x ) ... (x - x ) + ... + A (x - x ) (x - x ) (x - x ) ... (x - x ) n i i Al aplicar el criterio del polinomio interpolante, P (x ) = f(x ), para i = 0, 1, 2, ..., n n 0 0 0 0 1 0 2 0 3 0 n P (x ) = f(x ) = A (x - x ) (x - x ) (x - x ) ... (x - x ) n 1 1 1 1 0 1 2 1 3 1 n P (x ) = f(x ) = A (x - x ) (x - x ) (x - x ) ... (x - x ) n 2 2 2 2 0 2 1 2 3 2 n P (x ) = f(x ) = A (x - x ) (x - x ) (x - x ) ... (x - x ) . . . . . . n n n n n 0 n 1 n 2 n n-1 P (x ) = f(x ) = A (x - x ) (x - x ) (x - x ) ... (x - x ) Por lo tanto 0 0 0 1 0 2 0 3 0 n A = f(x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) 1 1 1 0 1 2 1 3 1 n A = f(x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) 2 2 2 0 2 1 2 3 2 n A = f(x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) . . . . . . n n n 0 n 1 n 2 n n-1 A = f(x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) Entonces el polinomio interpolante queda como: n 0 1 3 n 0 1 0 2 0 3 0 n 2 P (x) = f(x ) (x - x ) (x - x ) (x - x ) ... (x - x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) + 1 0 3 n 1 0 1 2 1 3 1 n 2 f(x ) (x - x ) (x - x ) (x - x ) ... (x - x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) + 2 0 3 n 2 0 2 1 2 3 2 n 1 f(x ) (x - x ) (x - x ) (x - x ) ... (x - x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) + ... + n 0 3 n-1 n 0 n 1 n 2 n n-1 1 f(x ) (x - x ) (x - x ) (x - x ) ... (x - x ) / (x - x ) (x - x ) (x - x ) ... (x - x ) En una notacin ms compacta
104 Esta frmula es conocida como la forma de Lagrange del polinomio interpolante. Ejemplo Use la frmula de Lagrange para encontrar el polinomio interpolante que pasa por los puntos i i i x f(x ) 0 0 -5 1 1 1 2 3 25 Como son tres puntos, entonces el grado del polinomio interpolante es a lo ms dos: 2 0 1 2 0 1 0 2 1 0 2 1 0 1 2 P (x) = f(x ) (x - x ) (x - x ) / (x - x ) (x - x ) + f(x ) (x - x ) (x - x ) / (x - x ) (x - x ) + 2 0 1 2 0 2 1 f(x ) (x - x ) (x - x ) / (x - x ) (x - x ) 2 P (x) = -5*(x - 1) (x - 3) / (0 - 1) (0 - 3) + 1*(x - 0) (x - 3) / (1 - 0) (1 - 3) + 25* (x - 0) (x - 1) / (3 - 0) (3 - 1) = -5*(x - 4x +3) / 3 + (x -3x) / (-2) + 25*(x - x) / 6 2 2 2 2 P (x) = 2x +4x - 5 2 Ejemplo Aproxime el valor de f(10) mediante polinomios de Lagrange de a) grado 1 b) grado 2 c) grado 3 i i i x f(x ) 0 3 1.0986 1 5 1.6094 2 8 2.0794 3 12 2.4849 4 15 2.7081 5 21 3.0445 6 30 3.4012 7 35 3.5553 105 a) Para un grado n=1, se requiere escoger dos puntos. La seleccin obvia es: i i i x f(x ) 0 8 2.0794 1 12 2.4849
Por facilidad, se vuelven a numerar los datos a partir del subndice cero, entonces la frmula de Lagrange queda: 1 0 1 0 1 1 0 1 0 P (x) = f(x ) (x - x ) / (x - x ) + f(x ) (x - x ) / (x - x ) que al ser evaluada en x = 10 da el resultado 1 f(10) P (10) = 2.0794 * (10 - 12) /(8 - 12) + 2.4849 * (10 - 8) / (12 - 8) = 2.2822 b) Con n = 2, las opciones ms viables son los intervalo [5, 12] y [8, 15] . En casos como ste el criterio empleado es seleccionar aquel intervalo [a, b] que contenga el argumento de la interpolacin lo ms cerca posible de (a + b) / 2. Para este inciso, hay un empate en este criterio y por lo tanto cualquiera de las opciones es adecuada. Si se toma [5, 12] y se numeran los puntos a partir del subndice cero: i i i x f(x ) 0 5 1.6094 1 8 2.0794 2 12 2.4849 2 0 1 2 0 1 0 2 1 0 2 1 0 1 2 P (x) = f(x ) (x - x ) (x - x ) / (x - x ) (x - x ) + f(x ) (x - x ) (x - x ) / (x - x ) (x - x ) + 2 0 1 2 0 2 1 f(x ) (x - x ) (x - x ) / (x - x ) (x - x ) 2 f(10) P (10) = 1.6094 * (10 - 8) (10 - 12) / (5 - 8) (5 - 12) + 2.0794 * (10 - 5) (10 - 12) / (8 -5) (8 - 12) + 2.4849 * (10 - 5) (10 - 8) / (12 -5) (12 - 8) = 2.3137 c) Si el polinomio interpolante es de tercer grado, la seleccin ms conveniente de los cuatro puntos requeridos es: i i i x f(x ) 106 0 5 1.6094 1 8 2.0794 2 12 2.4849 3 15 2.7081 3 0 1 2 3 0 1 0 2 0 3 P (x) = f(x ) (x - x ) (x - x ) (x - x ) / (x - x ) (x - x ) (x - x ) + 1 0 2 3 1 0 1 2 1 3 f(x ) (x - x ) (x - x ) (x - x ) / (x - x ) (x - x ) (x - x ) + 2 0 1 3 2 0 2 1 2 3 f(x ) (x - x ) (x - x ) (x - x ) / (x - x ) (x - x ) (x - x ) + 3 0 1 2 3 0 3 1 3 2 f(x ) (x - x ) (x - x ) (x - x ) / (x - x ) (x - x ) (x - x ) 3 f(10) P (10) = 2.3057 A continuacin, un pseudocdigo de una funcin que evala un polinomio de Lagrange. func lagrange(entero np, real x[np], real fx[np], real xint) ! ! Esta funcin evala un polinomio de Lagrange que pasa por los puntos (x, fx), en x = xint ! Descripcin de parmetros: ! np Nmero de puntos ! x Vector de valores de la variable independiente. Deben de ser nmeros ! diferentes ! fx Vector de valores de la variable dependiente f(x) ! xint Argumento de la interpolacin. ! entero i, j real fxint, producto fxint = 0.0 ejecuta i = 1, np { producto = 1.0 ejecuta j = 1, np si i j entonces producto = producto * (xint - x[j]) / (x[i] - x[j]) fxint = fxint + fx[i] * producto } regresa fxint ! el polinomio de Lagrange evaluado en x = xint es devuelto en fxint fin El siguiente teorema proporciona una manera de estimar, en el mejor de los casos como una cota mxima, el error cometido al aproximar f(x) mediante un polinomio interpolante calculado con la frmula de Lagrange. 107 0 1 2 n Si x , x , x , ..., x son distintos en el intervalo [a, b] y si f0C [a, b], entonces, para cada x en [a, b], existe un nmero n+1 n 0 1 (x) en (a, b) tal que f(x) = P (x) + f ((x)) (x - x ) (x - x ) (n+1) n ... (x - x ) / (n +1 )!. 6.2 Interpolacin mediante splines 0 1 2 n i Considere los puntos a = x < x < x < ... < x = b y sus correspondientes valores funcionales f(x ) , 0 1 2 n-1 i = 0, 1, 2, ..., n. Es posible trazar las funciones S , S , S , ..., S conocidas como splines cbicos interpolantes. La idea es trazar curvas distintas para cada par de nodos y que siguen a la funcin f(x) de manera muy cercana, como si fueran trazadas con una plantilla de curvas. Las funciones splines (trazadores) son ejemplos de un tipo interpolacin conocida como interpolacin 0 1 2 segmentaria. Por ejemplo, la siguiente grfica muestra los splines S , S y S que corresponden a i i los nodos (x , f(x )) , i = 0, 1, 2, 3. 0 1 2 n Un spline cbico interpolante de f relativo a la particin a = x < x < x < ... < x = b es una funcin S que satisface: j j+1 1.- En cada subintervalo [x , x ], j = 0, 1, 2, ..., n-1, S coincide con el polinomio cbico j j j j j j j j S(x) = S (x) = a + b (x - x ) + c (x - x ) + d (x - x ) 2 3 0 1 2 n 2.- S interpola a f en x , x , x , ..., x 3.- S es continua en [a, b] 4.- S' es continua en [a, b] 5.- S'' es continua en [a, b] 108 La funcin S est compuesta de n polinomios cbicos diferentes, cada uno con cuatro coeficientes, lo que da un total de 4n incgnitas. La interpolacin provee n + 1 ecuaciones y la continuidad del spline y de sus dos primeras derivadas aporta 3(n -1 ) ecuaciones, lo que da un total de n +1 + 3(n - 1) = n + 1 + 3n - 3 = 4n - 2 ecuaciones. Por lo tanto, para resolver el problema de interpolacin con splines es necesario fijar 4n - ( 4n - 2) = 2 condiciones ms. Como estas condiciones generalmente se especifican en el primero y ltimo nodos, se conocen como condiciones frontera. Las condiciones frontera ms comunes son: no anudadas (not-knot) , sujetas (clamped) o naturales (natural o free). j El criterio de polinomio interpolante aplicado a cada funcin S da como resultado: j j j j j j j j j j j S (x ) = f(x ) = a + b ( x - x ) + c ( x - x ) + d ( x - x ) = a , j = 0, 1, 2, ..., n - 1 2 3 j j+1 j+1 j+1 La continuidad entre splines consecutivos implica que S (x ) = S ( x ) j j j+1 j j j+1 j j j+1 j j+1 j+1 j+1 j+1 j+1 j+1 j+1 j+1 a + b ( x - x ) + c ( x - x ) + d ( x - x ) = a + b ( x - x ) + c ( x - x ) + d ( 2 3 2 j+1 j+1 x - x ) 3 j j j j j j j j+1 j j+1 j a + b h + c h + d h = a , j = 0, 1, 2, ..., n - 2 con h = x - x 2 3 n n Si adems definimos a = f(x ), entonces j j j j j j j j+1 a + b h + c h + d h = a , j = 0, 1, 2, ..., n - 1 2 3 j j+1 j+1 j+1 Tambin es requerida la continuidad de la derivada del spline, S '(x ) = S '( x ) j j j+1 j j j+1 j j+1 j+1 j+1 j+1 j j+1 j+1 j+1 b + 2c ( x - x ) + 3d ( x - x ) = b + 2c ( x - x ) + 3d ( x - x ) = b 2 2 j j j j j j+1 b + 2c h + 3d h = b , j = 0, 1, 2, ..., n - 2 2 n n Si b = S'(x ), la ltima ecuacin se extiende a j j j j j j+1 b + 2c h + 3d h = b , j = 0, 1, 2, ..., n - 1 2 j j+1 j+1 j+1 n Finalmente, la continuidad de segunda derivada del spline indica que S ''(x ) = S ''( x ) y si c n = S''(x ) / 2, entonces j j j+1 j j j+1 j+1 j+1 j+1 j+1 j+1 2c + 6d ( x - x ) = 2c ( x - x ) + 6d ( x - x ) = 2c j j j j+1 2c + 6d h =2 c , j = 0, 1, 2, ..., n - 2 j Despejando d de esta ltima ecuacin: j j+1 j j j+1 j j d = ( 2c - 2c ) / 6h = ( c - c ) / 3h (1) 109 j+1 j j j j j j j j+1 j j j j j Recordando que a = a + b h + c h + d h y b = b + 2c h + 3d h 2 3 2 j+1 j j j j j j+1 j j j j j j j j+1 j j a = a + b h + c h + [ ( c - c ) / 3h ] h = a + b h + [( 3c + c - c ) / 3] h 2 3 2 j+1 j j j j j+1 j a = a + b h + [( 2c + c ) / 3] h (2) 2 j+1 j j j j+1 j j j j j+1 j j b = b + 2c h + 3 [ ( c - c ) / 3h ] h = b + ( c + c ) h (3) 2 j Por ltimo, resolviendo (2) para b : j j+1 j j j j+1 j b = ( a - a ) / h - ( 2c + c ) h / 3 (4) Sustituyendo (4) en (3): j+1 j+1 j j j j+1 j j+1 j j b = ( a - a ) / h - ( 2c + c ) h / 3 + ( c + c ) h j+1 j+2 j+1 j+1 j+1 j+2 j+1 De (4) se deduce que b = ( a - a ) / h - ( 2c + c ) h / 3 y por lo tanto j+2 j+1 j+1 j+1 j+2 j+1 j+1 j j j j+1 j j+1 j j ( a - a ) / h - ( 2c + c ) h / 3 = ( a - a ) / h - ( 2c + c ) h / 3 + ( c + c ) h Disminuyendo una unidad a los subndices de la ltima expresin: j+1 j j j j+1 j j j-1 j-1 j-1 j j-1 j j-1 j-1 ( a - a ) / h - ( 2c + c ) h / 3 = ( a - a ) / h - ( 2c + c ) h / 3 + ( c + c ) h Agrupando y reduciendo trminos se llega a la ecuacin final que muestra la relacin entre los j j coeficientes a y c : j-1 j-1 j-1 j j j j+1 j+1 j j j j-1 j-1 h c + 2 ( h + h ) c + h c = 3 ( a - a ) / h - 3 ( a - a ) / h , j = 1, 2, 3,..., n -1 (5) Para la distintas condiciones en la frontera se tiene: 1 n-1 0 1 n-2 n-1 1) Condiciones no anudadas: S''' continua en x = x y en x = x y por lo tanto d = d y d = d . Entonces (5) para j = 2, 3, 4, ..., n-2 junto con: 0 1 0 1 1 1 0 1 2 2 1 1 1 0 0 ( 3h + 2h + h / h ) c + (h - h / h ) c = 3 ( a - a ) / h - 3 ( a - a ) / h 2 2 n-2 n-1 n-2 n-2 n-1 n-2 n-1 n-2 n-1 n n-1 n-1 n-1 n-2 n-2 ( h - h / h ) c + ( 3h + 2h + h / h ) c = 3 ( a - a ) / h - 3 ( a - a ) / h 2 2 1 2 3 n-1 j forman un sistema tridiagonal con incgnitas c , c , c , ..., c . Como h es por definicin positiva, la matriz de coeficientes de este sistema es estrictamente diagonal dominante y, por lo tano, 0 n siempre tendr solucin nica. Los coeficientes c y c se determinan con: 0 0 1 1 0 2 1 c = ( 1 + h / h ) c - h c / h 110 n n-1 n-2 n-2 n-1 n-2 n-1 c = - h c / h + ( 1 + h / h ) c 2) Condiciones sujetas: f '(a) y f '(b) son conocidas y la ecuacin (5) para j= 1, 2, 3, ..., n-1 junto con: 0 0 0 1 1 0 0 2h c + h c = 3 ( a - a ) / h - 3f '(a) n-1 n-1 n-1 n n n-1 n-1 h c + 2 h c = 3f '(b) - 3 ( a - a ) / h 0 1 2 n producen un sistema tridiagonal con incgnitas c , c , c , ..., c . Los coeficientes asociados con las condiciones de frontera sujetas forman una matriz estrictamente diagonal dominante, por lo tanto, siempre habr una solucin nica. El siguiente teorema trata del error cometido por aproximar f(x) por splines cbicos sujetos: Sea f continua, con cuatro derivadas continuas, en el intervalo [a, b] y S el spline cbico sujeto de f relativo a los puntos 0 1 2 n-1 n a = x < x < x < ... < x < x = b entonces mx | f(x) - S(x) | # (5 / 384) h mx | f (x) | 4 (4) x0[a,b] x0[a,b] +1 i donde h = mx ( x - x ) 0#i#n-1 0 n 3) Condiciones frontera libres: S''(a) = S''(b) = 0 y c = c = 0. Combinando estas dos ecuaciones 0 1 2 n junto con (5) para j = 1, 2, 3, ..., n-1 se obtiene un sistema tridiagonal con c , c , c , ..., c como incgnitas. La matriz de coeficientes de este sistema es estrictamente diagonal dominante, y por lo tanto, siempre habr una solucin nica. Ejemplo Construya un spline cbico de frontera libre que corresponde a los puntos: i i i x f(x ) 0 3 1.0986 1 5 1.6094 2 8 2.0794 3 12 2.4849 111 4 15 2.7081 Para n = 4, el sistema de ecuaciones lineales tridiagonales es: 0 c + 0 = 0 0 0 1 0 1 1 2 2 1 1 1 0 0 h c + 2 ( h + h ) c + h c = 3 ( a - a ) / h - 3 ( a - a ) / h 1 1 2 1 2 2 3 3 2 2 2 1 1 h c + 2 ( h + h ) c + h c = 3 ( a - a ) / h - 3 ( a - a ) / h
2 2 3 2 3 3 4 4 3 3 3 2 2 h c + 2 ( h + h ) c + h c = 3 ( a - a ) / h - 3 ( a - a ) / h 4 0 c = 0 Los valores de h y a se determinan con: j j+1 j j j h = x - x a = f(x ) 0 1 0 0 0 h = x - x = 5 - 3 = 2 a = f(x ) = 1.0986 1 2 1 1 1 h = x - x = 8 - 5 = 3 a = f(x ) = 1.6094 2 3 2 2 2 h = x - x = 12 - 8= 4 a = f(x ) = 2.0794 3 4 3 3 3 h = x - x = 15 - 12 = 3 a = f(x ) = 2.4849 4 4 a = f(x ) = 2.7081 El sistema tridiagonal final queda como: 0 c + 0 = 0 0 1 2 2 c + 10 c + 3 c = -.29620 1 2 3 3 c + 14 c + 4 c = -.16588 2 3 4 4 c + 14 c + 3 c = -.08093 4 0 + c = 0 0 1 2 3 4 y su solucin es c = 0, c = -.02827, c = -.00451, c = -.00449 y c = 0. Los coeficientes restantes se calculan de la siguiente manera: 112 0 1 0 0 0 1 0 0 1 0 0 b = ( a - a ) / h - ( 2c + c ) h / 3 = .27425 d = ( c - c ) / (3h ) = -.00471 1 2 1 1 1 2 1 1 2 1 1 b = ( a - a ) / h - ( 2c + c ) h / 3 = .21771 d = ( c - c ) / (3h ) = .00264 2 3 2 2 2 3 2 2 3 2 2 b = ( a - a ) / h - ( 2c + c ) h / 3 = .11938 d = ( c - c ) / (3h ) = 1.22088X10 -6 3 4 3 3 3 4 3 3 4 3 3 b = ( a - a ) / h - ( 2c + c ) h / 3 = .08339 d = ( c - c ) / (3h ) = .00050 Finalmente, los splines cbicos son: 0 0 0 0 0 0 0 0 S (x) = a + b ( x - x ) + c ( x - x ) + d ( x - x ) 2 3 = 1.0986 + .27425 ( x -3) - .00471 (x - 3) 3 1 1 1 1 1 1 1 1 S (x) = a + b ( x - x ) + c ( x - x ) + d ( x - x ) 2 3 = 1.6094 +.21771 (x - 5 ) - .02827 ( x - 5 ) + .00264 ( x - 5 ) 2 3 2 2 2 2 2 2 2 2 S (x) = a + b ( x - x ) + c ( x - x ) + d ( x - x ) 2 3 = 2.0794 +.11938 (x - 8 ) - .00451 ( x - 8 ) + 1.22088X10 ( x - 8 ) 2 -6 3 3 3 3 3 3 3 3 3 S (x) = a + b ( x - x ) + c ( x - x ) + d ( x - x ) 2 3 = 2.4849 +.08338 (x - 12 ) - .00449 ( x - 12 ) + .00050 ( x - 12 ) 2 3 2 2 3 Por ejemplo; para interpolar en x = 10, se usa S ( x) porque est definido en [ x , x ] = [8, 12] 2 f(10) S (10) = 2.0794 +.11938 (10 - 8 ) - .00451 ( 10 - 8 ) + 1.22088X10 (10 - 8 ) = 2.30015 2 -6 3 A continuacin, pseudocdigos de un procedimiento que determina los spines cbicos naturales correspondientes a un conjunto de datos y de una funcin que evala dichos splines. proc splines_naturales(entero np, real x[np], real fx[np], real &S[np - 1,4]) ! ! Este procedimiento calcula los splines cbicos naturales correspondientes a los datos x y fx ! Descripcin de parmetros: ! np Nmero de puntos. ! x Vector de la variable independiente. Los valores de x deben ser tales que ! x[1] < x[2] < x[3] < ... < x[np]. ! fx Vector de la variable dependiente. ! S Matriz que contiene los coeficientes de los splines cbicos naturales. ! entero j 113 real a[np], c[np], sub_diagonal[np], diagonal[np], super_diagonal[np], h[np -1], ld[np] ejecuta j = 1, np a[j] = fx[j] ejecuta j = 1, np -1 h[j] = x[j -1] - x[j] ! ! construccin del sistema tridiagonal correspondiente a los splines cbicos naturales ! sub_diagonal[1] = 0.0 diagonal[1] = 1.0 super_diagonal[1] = 0.0 ejecuta j = 2, np -1 { sub_diagonal[j] = h[j -1] diagonal[j] = 2.0*(h[j -1] + h[j]) super_diagonal[j] = h[j] } sub_diagonal[np] = 0.0 diagonal[np] = 1.0 super_diagonal[np] = 0.0 ld[1] = 0.0 ejecuta j = 2, np - 1 ld[j] = 3.0*(a[j +1] - a[j])/h[j] - 3.0*(a[j] - a[j -1])/h[j -1] ld[np] = 0.0 llama tridiagonal(np, sub_diagonal, diagonal, super_diagonal, ld, c) ! solucin del sistema ! tridiagonal ! ! clculo de los coeficientes de los splines cbicos naturales ! ejecuta j = 1, np -1 { S[j, 1] = a[j] S[j, 2] = (a[j +1] - a[j])/h[j] - h[j]*(2.0*c[j] + c[j + 1]))/3.0 S[j, 3] = c[j] S[j, 4] = (c[j + 1] - c[j])/(3.0*h[j]) } regresa fin func evaluar_splines(entero np, real x[np], real S[np - 1, 4], real xint) ! ! Esta funcin evala un spline cbico natural en xint ! Descripcin de parmetros: 114 ! x Vector de la variable independiente. Loa valores de x deben ser tales que ! x[1] < x[2] < x[3] < ... < x[np]. ! S Matriz que contiene los coeficientes de los splines cbicos naturales. Esta matriz ! puede ser calculada con el procedimiento splines_naturales. ! xint Argumento en el que ser evaluado el spline. ! real fxint entero l, h, m ! ! Bsqueda binaria para encontrar los subndices consecutivos l y h tales que x[l] # xint # x[h] ! si xint $ x[1] y xint # x[np] entonces { l = 1 h = np mientras ((h - l) 1) { m = INT((l + h)/2) si xint # x[m] entonces h = m otro l = m } } otro { si xint $ x[np] entonces { h = np l = np -1 } otro { l = 1 h =2 } } ! ! evaluacin del spline S[l] con regla de Horner ! fxint = ((S[l, 4] * (xint - x[l]) + S[l, 3])*(xint - x[l]) + S[l, 2]) *(xint - x[l]) + S[l, 1] regresa fxint fin 115 6.3 Interpolacin inversa En este problema se invierten los papeles de x y f(x). Es posible considerar a f(x) ahora como la variable independiente y a x como la variable dependiente. n 0 0 1 1 2 2 n n El polinomio P (f(x)) pasa ahora por los puntos (f(x ), x ) , (f(x ), x ), (f(x ), x ), ..., (f(x ), x ). 6.4 Aproximacin discreta de mnimos cuadrados i i Dado un conjunto de datos (x , f(x )) , i = 0, 1, 2, ..., n; es posible construir una funcin g(x) que pase cerca de esos puntos tal como se muestra en la siguiente figura: 1 donde se ha empleado como funcin de aproximacin g(x) a un polinomio de primer grado, P (x). Una forma de obtener una funcin de aproximacin g(x) es utilizar el criterio de mnimos cuadrados, el cual consiste en calcular los parmetros de g(x) que minimizan a la funcin: 116
que es conocida como error de mnimos cuadrados. Si la funcin de aproximacin g(x) es un n 0 1 2 n polinomio de grado n, P = a + a x + a x + ... + a x , entonces el error de mnimos cuadrados es: 2 n j donde el nmero de puntos es M+1. Las condiciones necesarias para minimizar a E son: ME / Ma = 0, para j = 0, 1, 2, ..., n. Las ecuaciones que resultan de aplicar estas condiciones son: Agrupando trminos esta ecuaciones quedan como: 117 Las expresiones obtenidas a partir del criterio de mnimos cuadrados son conocidas como ecuaciones normales. Una forma ms compacta de escribir las ecuaciones normales es:
i Las ecuaciones normales tienen solucin nica siempre y cuando los valores de x , i = 0, 1, 2, ...,M sean distintos. Ejercicio Encuentre el polinomio de mnimos cuadrados de a) grado 1 b) grado 2 correspondiente a los puntos indicados en la siguiente tabla. i i i x f(x ) 0 4 102.56 1 4.2 113.18 2 4.5 130.11 3 4.7 142.05 118 4 5.1 167.53 5 5.5 195.14 6 5.9 224.87 7 6.3 256.73 8 6.8 299.50 9 7.1 326.72 a) La tabla consta de 10 puntos, M = 9.El grado del polinomio es n = 1 (recta de mnimos cuadrados). Las ecuaciones normales por resolver son: 0 1 10 a + 54.10 a = 1958.39 0 1 54.1 a + 303.39 a = 11366.843 0 1 La solucin de este sistema es: a = -194.1382 y a = 72.0845. Por lo tanto, el polinomio de 1 mnimos cuadrados de grado 1 es P (x) = -194.1382 + 72.0845 x. b) Para un polinomio de grado n= 2, las ecuaciones normales quedan:
119 0 1 2 10 a + 54.1 a + 303.39 a = 1958.39 0 1 2 54.1 a + 303.39 a + 1759.831 a = 11366.843 0 1 2 303.39 a + 1759.831 a + 10523.1207 a = 68006.6811 0 1 2 cuya solucin es a = 1.2356, a =-1.1435 y a = 6.6182. Entonces, el polinomio de mnimos 2 cuadrados de segundo es P (x) = 1.2356 -1.1435 x + 6.6182 x . 2 Las ecuaciones normales tienden a ser sistemas mal condicionados, es decir, cuando se resuelven con eliminacin de Gauss o descomposicin LU, generan errores de redondeo considerables, particularmente para valores de n>=5. Por esta razn, se recomienda hacer ajustes polinomiales de mnimos cuadrados a lo ms de cuarto grado. 6.5 Regresin lineal mltiple i En el caso de ms de una variable independiente x , i = 0, 1, 2, ...,n; una posible funcin de 0 1 1 2 2 3 3 n n aproximacin sera la llamada funcin multilineal : g(x) = a + a x + a x + a x + ... + a x . Para el caso especial, n = 2, la funcin multilineal tambin se conoce como plano de mnimos cuadrados. 0 1 2 n El procedimiento para encontrar los coeficientes a , a , a , ..., a es idntico al empleado en la aproximacin polinomial de mnimos cuadrados: se define el error de mnimos cuadrados j y se recurre a las condiciones necesarias para minimizar E: ME / Ma = 0 para j = 0, 1, 2, ..., n. Las ecuaciones normales as obtenidas son: 120 i Nuevamente, M+1 es el nmero de puntos, y los valores de la variable dependiente son y , i = 0, 1, 2, ..., M. Ejemplo 0 1 1 2 2 Encuentre la ecuacin de mnimos cuadrados y = a + a x + a x que corresponde a los datos: 1i 2i i i x x y 0 120 550 310 1 130 600 300 2 108 520 275 3 110 420 250 4 84 400 220 5 90 300 200 6 80 230 190 7 55 120 150 8 64 190 140 9 50 100 100 En este caso, las ecuaciones normales del plano de mnimos cuadrados son: 121 0 1 2 10 a + 891 a + 3430 a = 2135 0 1 2 891 a + 86241 a + 349120 a = 207290 0 1 2 343 a + 349120 a + 1472700 a = 844800 0 1 2 La solucin es a = 38.17728, a = 1.16367 y a = .20886. Por lo tanto, la ecuacin multilineal de 1 2 mnimos cuadrados es y = 3.18728 + 1.16367 x + .20886 x . 122 123 7. Derivacin e integracin numrica n Si f(x) es aproximada mediante un polinomio, f(x) P (x), una manera de estimar f '(x) es n mediante la aproximacin f '(x) P ' (x). 3 En la siguiente figura , se muestran las rectas tangentes a las curvas f(x) y P (x) en x = 0.7. Aqu 3 3 se aprecia claramente que, si bien P (x) coincide exactamente con f(x) en ese punto, P' (x) tiene un valor muy diferente de f '(x).
De hecho, la derivacin de polinomios interpolantes tiende a producir errores de magnitud considerable, por lo que se recomiendas emplear valores de x cercanos entre si para construir el polinomio.
7.1 Derivacin con polinomios de Lagrange 0 1 2 n Suponiendo que {x , x , x , ..., x } son (n + 1) nmeros distintos en algn intervalo I y que f0C [I]: n+1 124 En este expresin aparecen ahora dos trminos de error. No obstante, la frmula que aproxima la derivada de f(x) mediante la derivada del polinomio de Lagrange de grado n es: Ejemplo Encuentre una aproximacin a f(9) mediante un polinomio de Lagrange de a) grado 1 b) grado 2
i i i x f(x ) 0 3 1.0986 1 5 1.6094 2 8 2.0794 3 12 2.4849 a) Para n=1, se toman los dos ltimos puntos de la tabla los cuales son numerados nuevamente: 125 i i i x f(x ) 0 8 2.0794 1 12 2.4849 b) La mejor opcin para n = 2, son los tres ltimos puntos de la tabla, los cuales al ser numerados nuevamente a partir del subndice cero, quedan:
i i i x f(x ) 0 5 1.6094 1 8 2.0794 2 12 2.4849 126
7.2 Frmulas de (n + 1) puntos 1 0 2 1 3 2 Cuando los nodos de la tabla estn uniformemente espaciados, esto es: x - x = x - x = x - x = .... n n-1 k = x - x = h, y las derivadas son evaluadas solamente en alguno de los valores x , k = 0, 1, 2, ..., n, entonces se obtienen frmulas sencillas a partir de la derivacin de polinomios interpolantes. k Como x = x con k = 0, 1, 2, ..., n, entonces
La ltima expresin se conoce como frmula de (n +1 ) puntos. Un caso especial muy frecuentes es n = 2, entonces 127 0 1 2 1 0 2 1 1 0 Como los nodos x , x , y x estn uniformemente espaciados, entonces x - x = x - x = h y x = x 2 0 + h, x = x + 2h, con h!0. k 0 Si x = x
k 1 Si x = x k 2 Si x = x k 0 Ahora, se renumeran los nodos de tal forma que x sea siempre x : 128 0 0 0 est entre x y x + 2h
1 0 0 est entre x - h y x + h 2 0 0 est entre x - 2h y x Las tres ltimas expresiones son conocidas como frmulas de tres puntos. En estas, el segundo trmino aparece multiplicado por h y se dice entonces que el error es de orden O(h ). Mientras ms 2 2 grande sea el exponente de h en el trmino de error, la frmula ser ms exacta, siempre que |h| < 1. Suponiendo que las segundas derivadas de f que aparecen en los trminos de error de las frmulas de tres puntos tienen valores absolutos similares; se deduce que la segunda frmula de las tres mostradas arriba, es la ms exacta, dado que su trmino de error sera alrededor de la mitad de los otros dos.