MetodosHibridos

22
Sección Tecnologías de Internet Revista digital Matemática, Educación e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol. 9, N o 2. 2009 Métodos Híbridos para la Solución de Ecuaciones No Lineales. Implementaciones en VBA Excel Walter Mora F. [email protected] Escuela de Matemática Instituto Tecnológico de Costa Rica Introducción Cuando se enseña un curso introductorio de análisis numérico como una asignatura, usual- mente los métodos iterativos para resolver ecuaciones no lineales (tales como el método de Newton y el método de la secante), se presentan de manera aislada mientras que en la práctica computacional, estos métodos nunca se usan de forma aislada (conocidas sus debilidades), sino acompañados de otros métodos que les agregan robustez, como el método de bisección. Los paquetes más conocidos implementan, para resolver ecuaciones no lin- eales generales, un híbrido conocido como el método de Dekker-Brent que usa secante, interpolación cuadrática inversa y bisección. En este trabajo se construyen híbridos más elementales pero robustos: Newton-Bisección y Secante-Bisección y sus respectiva imple- mentación (elemental) en VBA para Excel. Palabras claves: Métodos Numéricos, ecuaciones no lineales, método de Newton, Bisec- ción, método de la secante, interpolación inversa. 1.1 Método de Newton.

Transcript of MetodosHibridos

  • Seccin Tecnologas de InternetRevista digital Matemtica, Educacin e Internet (www.cidse.itcr.ac.cr/revistamate/). Vol. 9, No 2. 2009

    Mtodos Hbridos para la Solucin deEcuaciones No Lineales. Implementaciones en

    VBA Excel

    Walter Mora [email protected] de Matemtica

    Instituto Tecnolgico de Costa Rica

    IntroduccinCuando se ensea un curso introductorio de anlisis numrico como una asignatura, usual-mente los mtodos iterativos para resolver ecuaciones no lineales (tales como el mtodode Newton y el mtodo de la secante), se presentan de manera aislada mientras que enla prctica computacional, estos mtodos nunca se usan de forma aislada (conocidas susdebilidades), sino acompaados de otros mtodos que les agregan robustez, como el mtodode biseccin. Los paquetes ms conocidos implementan, para resolver ecuaciones no lin-eales generales, un hbrido conocido como el mtodo de Dekker-Brent que usa secante,interpolacin cuadrtica inversa y biseccin. En este trabajo se construyen hbridos mselementales pero robustos: Newton-Biseccin y Secante-Biseccin y sus respectiva imple-mentacin (elemental) en VBA para Excel.Palabras claves: Mtodos Numricos, ecuaciones no lineales, mtodo de Newton, Bisec-cin, mtodo de la secante, interpolacin inversa.

    1.1 Mtodo de Newton.

  • 2 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    El mtodo de Newton es muy apetecido por su rapidez de convergencia, si la aproximacininicial (o alguna iteracin posterior) llega a estar suficientemente cercana un cero de f ,entonces se espera que se duplique, aproximadamente, la cantidad de decimales exactos encada iteracin.

    Informalmente, si f C2[a,b] y tiene un cero x en [a,b], entonces si x0 es una aproxi-macin suficientemente cercana a x, la iteracin

    xn+1 = xnf (xn)f (xn) ,

    correccin

    n = 0,1,2, ... converge a x

    x*x x x

    x

    1 2

    3

    0

    f(x*)=0

    x1x0

    Figura 1.1 Mtodo de Newton. Escogencias de x0.

    Qu significa suficientemente cercano a x?

    Esto se puede aclarar en el sentido del teorema

    Teorema 1.1 Sea x un cero simple de f y sea I = {x R : |x x| }. Asumamosque f C2(I) y que es lo suficientemente pequeo de tal manera que en este intervalo| f (x)| m > 0 y existe M > 0 tal que | f (x)| M. Si en el mtodo de Newton, algn x jsatisface

    x j I, y |x j x|< 2m

    M(1.1)

    Mtodos Hbridos. Walter Mora F.Derechos Reservados 2009 Revista digital Matemtica, Educacin e Internet (www.cidse.itcr.ac.cr/revistamate/)

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 3

    entonces limn

    xn = x

    De acuerdo al teorema, para asegurar la convergencia es suficiente escoger x0 y un intervaloI de tal manera que

    M|x0 x|2m

    < 1.

    La dificultad de aplicar este criterio es, por supuesto que desconocemos x (adems de m,M y ) Esto hace que la prctica usual sea proceder por ensayo y error, buscando una buenaaproximacin x0.

    Estimacin del error

    Recordemos que el mtodo de Newton lo podemos poner como un problema de punto fijo:xn+1 = g(xn).

    De acuerdo a la teora de punto fijo, en un intervalo alrededor de x suficientementepequeo que contiene a xn y a ,

    |xn x|=

    11g() (xn+1 xn)

    Esto nos dice que si g(x) 0 en un intervalo alrededor de x, la diferencia entre dositeraciones consecutivas nos sirve como un buen estimador del error.

    Sin embargo, aunque es de esperar que |xn+1 xn| decrece hasta que |xn x| < , loserrores de redondeo dominan (fenmeno de cancelacin) y es de esperar que |xn+1xn|vare irregularmente. As, un buen criterio de parada es

    Parar cuando |xn+1 xn| |xn xn1| y |xn xn1|< (1.2)

  • 4 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    Limitaciones

    Computacionalmente podramos tener que lidiar con problemas de overflow, divisinpor cero, convergencia a otra raz (no la raz deseada) o no convergencia, adems de queeste mtodo requiere la derivada de la funcin que es algo que no est al alcance paraalgunas funciones, por ejemplo, definidas por integrales, series infinitas o como solucinde ecuaciones diferenciales.

    EJEMPLO 1.1 Consideremos la funcin f (x) = 0.2sen(16x) x+1.75

    Esta funcin tiene un cero en [1,2]. Si iniciamos conx0 = 1.5, el mtodo de Newton presenta un compor-tamiento errtico. Es claro que el paso por una zona deextremos relativos es muy peligrosa para el mtodo deNewton.

    1 2

    Figura 1.2 Grfica de f (x)

    n Newton Errorxi Estimado

    92 1548.750089 661.60365193 3043.036515 1494.28642594 -16029.74436 20488.9251795 -11684.02425 4345.72010396 -20779.58784 9095.563587

    Tabla 1.1 Mtodo de Newton aplicado a 0.2sen(16x) x+1.75 = 0 con x0 = 1.5

    1.2 Mtodo de Biseccin.Si f es una funcin continua en [a,b] tal que f (a) f (b) < 0, entonces el mtodo debiseccin converge a un cero de f en [a,b] : Biseccin es un mtodo robusto. Este mtodosolo usa la funcin f para verificar cambios de signo. Si b a 1, el mtodo gana unaMtodos Hbridos. Walter Mora F.Derechos Reservados 2009 Revista digital Matemtica, Educacin e Internet (www.cidse.itcr.ac.cr/revistamate/)

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 5

    cifra decimal exacta aproximadamente cada tres iteraciones y aproxima un cero de f conun error estimado 0.510k en un nmero de iteracin igual o superior a

    ln(

    ba0.510k

    )/ ln2

    iteraciones

    El orden de convergencia del mtodo en algunos casos particulares es lineal y en general nose puede establecer un orden de convergencia (el lmite que define el orden de convergenciano existe en general).

    En el mtodo de biseccin construye tres sucesiones an , bn y mn ,

    Inicio: a1 = a y b1 = b y m1 = (a1 +b1)/2 = a1 + 12 (ba).

    El nuevo intervalo [ak,bk] se calcula con la frmula

    [ak,bk] =

    [mk,bk] si f (ak) f (mk) > 0

    [ak,mk] si f (ak) f (mk) < 0

    mk = ak +12 (bk ak)

    Estimacin del error de la aproximacin

    mk x con error menor o igual a bk ak

    2=

    ba2k

    1.3 Hibrido Newton-Biseccin.

  • 6 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    a bm

    a b

    a = mb = b

    x*

    x*

    b-a2con error

    m

    m x*

    a b

    x*

    m

    Actualizacin del intervalo.

    f(a)*f(m ) > 0, entonces

    1

    2

    3

    2 2

    3 3

    2

    2

    1

    0

    0

    Figura 1.3 Mtodo de Biseccin.

    Si el mtodo de Newton falla (en algn sentido) en una iteracin, podemos usar biseccinpara dar un pequeo salto y regresar al mtodo de Newton lo ms pronto posible.

    Supongamos que f (a) f (b) < 0. Sea x0 = a o x0 = b. En cada iteracin una nueva aprox-imacin x es calculada y a y b son actualizados como sigue

    1. si x = x0 f (x0)f (x0) cae en [a,b] lo aceptamos, sino usamos biseccin, es decir

    x =a+b

    2.

    2. Actualizar: a = x, b = b o a = a, b = x, de tal manera que f (a) f (b) 0.

    Para garantizar que x = x0 f (x0)f (x0) [a,b], no debemos usar directamente este clculo

    para evitar la divisin por f (x0) (que podra causar problemas de overflow o divisinpor cero). Mejor usamos un par de desigualdades equivalentes.

    Observemos que xn+1 ]an,bn[ si y slo si

    an < xnf (xn)f (xn) < bn,

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 7

    entonces

    Si f (xn) > 0, (an xn) f (xn) f (xn).

    Si f (x) < 0, (an xn) f (xn) > f (xn) y (bn xn) f (xn)

  • 8 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    1.3.1 Algoritmo e Implementacin en VBA Excel.

    Algoritmo 1.1: Hbrido Newton-biseccin.Entrada: Una funcin continua f , las aproximaciones iniciales a y b, y maxItrResultado: Una aproximacin xk del cero.k = 0,x0 = a ;1repeat2

    test1 = ( f (x0) > 0 (a x0) f (x0) 1 f (x0));3test2 = ( f (x0) < 0 (a x0) f (x0) >1 f (x0) (b x0) f (x0) maxItr ;22return x123

    Hoja Excel para el Hbrido Newton-biseccin.

    Para hacer una hoja Excel, usamos como referencia la figura (1.5).

    Esta implementacin usa el evaluador de funciones clsMathParser (para VBA Excel). Esteevaluador se descarga en http://digilander.libero.it/foxes/Desde este sitio Webse baja un comprimido con los archivos clsMathParser.clsy mMathSpecFun.bas. Am-

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 9

    bos se insertan abriendo el editor de VBA, seleccionando Hoja 1 y con el botn derechodel mouse se importa cada uno de ellos, por separado.

    Figura 1.5 Hoja Excel para el hbrido Newton-biseccin.

    Hay que observar que biseccin usa un nmero de iteraciones conocido para alcanzar latolerancia que se pide. El mtodo de Newton puede ser muy lento en el caso de racesmltiples. Es deseable establecer un nmero mximo de iteraciones y refinar el algoritmode tal manera que despus de este mximo se pase directamente a biseccin.

    El cdigo VBA para Excel es:

    Option Explicit

    Private Sub CommandButton1_Click()

    Dim fx, fpx, a, b, delta, maxItr, fi, co

    fx = Cells(3, 2)

    fpx = Cells(4, 2)

    a = Cells(8, 1)

    b = Cells(8, 2)

    delta = Cells(8, 3)

    maxItr = Cells(8, 4)

    Call hibridoNB(fx, fpx, a, b, delta, maxItr, 8, 5)

    End Sub

    Sub hibridoNB(fx, fpx, a0, b0, delta, maxItr, fi, co)

    Dim f As New clsMathParser

    Dim fp As New clsMathParser

  • 10 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    Dim test1 As Boolean, test2 As Boolean

    Dim k, x0, x1, dx, okfx, okfpx, fx0, fpx0, fx1, fa, a, b

    okfx = f.StoreExpression(fx)

    okfpx = fp.StoreExpression(fpx)

    If Not okfx Then

    MsgBox ("Error en f: " + f.ErrorDescription)

    Exit Sub

    End If

    If Not okfpx Then

    MsgBox ("Error en fp: " + fp.ErrorDescription)

    Exit Sub

    End If

    No modificar a y b

    a = a0

    b = b0

    If Sgn(f.Eval1(a)) = Sgn(f.Eval1(b)) Then

    MsgBox ("Error: f(a)f(b)>=0")

    Exit Sub

    End If

    k = 0

    x0 = a

    Do

    fx0 = f.Eval1(x0)

    fpx0 = fp.Eval1(x0)

    test1 = (fpx0 > 0 And (a - x0) * fpx0 < -1 * fx0 And (b - x0) * fpx0 > -1 * fx0)

    test2 = (fpx0 < 0 And (a - x0) * fpx0 > -1 * fx0 And (b - x0) * fpx0 < -1 * fx0)

    If test1 Or test2 Or fx0 = 0 Then

    x1 = x0 - fx0 / fpx0

    dx = Abs(x1 - x0)

    x0 = x1

    If Sgn(f.Eval1(a)) Sgn(f.Eval1(x1)) Then

    b = x1

    Else: a = x1

    End If

    Cells(fi + k, co) = x1

    Cells(fi + k, co + 1) = dx

    Cells(fi + k, co + 2) = "Newton"

    Else

    x1 = a + 0.5 * (b - a)

    dx = (b - a) / 2

    x0 = x1

    If Sgn(f.Eval1(a)) Sgn(f.Eval1(x1)) Then

    b = x1

    Else: a = x1

    End If

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 11

    Cells(fi + k, co) = x1

    Cells(fi + k, co + 1) = dx

    Cells(fi + k, co + 2) = "Bisecci\on"

    End If

    k = k + 1

    Loop Until dx < delta Or k > maxItr

    End Sub

    1.4 Mtodo de la SecanteAunque el mtodo de la secante es anterior al mtodo de Newton, a veces se hace unaderivacin de este mtodo basado en la iteracin de Newton cambiando la derivada f (xk)por una aproximacin, lo cual puede ser muy bueno pues para algunas funciones, comolas definidas por integrales o una serie, en los casos en los que la derivada no es fcil deobtener. Aqu vamos a proceder igual que antes, con una idea geomtrica. El mtodo dela secante tiene orden de convergencia de al menos p = 1.61803 pero en un sentido queharemos ms preciso al final de esta seccin, este mtodo es ms rpido que el mtodo deNewton.

    Iniciando con dos aproximaciones iniciales x0 y x1, en el paso k + 1, xk+1 se calcula,usando xk y xk1, como la interseccin con el eje X de la recta (secante) que pasa por lospuntos (xk1, f (xk1)) y (xk, f (xk))

    x1x0 x2 x3

    4xx1x

    0 x2x* xk-1xk

    x*

    xk+1

    Figura 1.6 Mtodo de la secante

    Entonces, si f (xk) f (xk1) 6= 0,

  • 12 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    xk+1 =xk1 f (xk) xk f (xk1)

    f (xk) f (xk1)

    Sin embargo, para cuidarnos del fenmeno de cancelacin (cuando xk xk1 y f (xk) f (xk1)>0), rescribimos la frmula como

    xk+1 = xk f (xk) (xk xk1)f (xk) f (xk1) , k 1,

    Aunque esta ltima versin no es totalmente segura, es al menos mejor que la anterior.

    Como criterio de parada podemos usar (1.2).

    EJEMPLO 1.3 Consideremos P(x)= x5100x4 +3995x379700x2 +794004x3160075.En la figura (1.7) se muestra la grfica de P con las primeras dos secantes usando x0 = 22.2y x1 = 17.

    10 16x

    xxx

    02

    31

    Figura 1.7

    P tiene un cero, x = 17.846365121..., en el intervalo [17,22,2]. Vamos a aproximar estecero usando x0 = 17 y x1 = 22.2 y tambin con x0 = 22.2 y x1 = 17.

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 13

    x0 = 22.2 x1 = 17 x0 = 22.2 x1 = 17k xk+1 |xk xk+1| f (xi) xk+1 |xk xk+1| f (xi)1 21.70509296 4.705 1.44 21.70509296 0.494 1.4462 21.64664772 0.058 1.36 21.63787473 0.067 1.3693 20.61844015 1.028 6.38 20.44319288 1.194 6.354...

    23 17.84697705 0.013 0.02 21.2200121 0.429 3.50324 17.84635118 0.000 -0.00 21.92553159 0.705 3.47525 17.84636513 1.39105 5.79283107 111.120 89.194 62726 17.84636512 1.37108 -1.86265109 21.925 89.194 3.475... ... ...

    77 20.57831656 5110.34 6.41078 20.57831656 1.061014 6.410

    Tabla 1.3

    La eleccin x0 = 22.2 y x1 = 17 muestra ser adecuada. Nos lleva a la aproximacin correctax26 = 17.84636512. En la otra eleccin hay un fenmeno de cuidado: La iteracin 78 podrainducirnos a error pues nos presenta a x78 = 20.57831656 como un cero aproximado conerror estimado 1.061014 pero f (x78) = 6.410!.

    Notemos que hay varios intervalos (con extremos xk,xk+1 ) que no contienen un cero.

    Convergencia

    El mtodo de la secante converge si elegimos aproximaciones iniciales adecuadas. La elec-cin terica puede ser en el sentido del siguiente teorema,

    Teorema 1.2 Sea x un cero simple de f . Sea I = {x R : |x x| }. Supongamosque f C2[I]. Para un suficientemente pequeo se define

    M = mxs,t I

    f(s)

    2 f (t) (1.3)

    y asumamos que es lo suficientemente pequeo de tal manera que se cumpla M < 1.Entonces, el mtodo de la secante converge a una nica raz x I para cualesquiera dosaproximaciones iniciales x0 6= x1 en I.

  • 14 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    Observe que el teorema exige que sea suficientemente pequeo de tal manera que lafuncin de dos variables g(s, t) =

    f(s)

    2 f (t) permanezca acotada en I y que M < 1.

    1.5 Un Mtodo Hibrido: Secante-Biseccin

    Uno de los problemas del mtodo de la secante es que aunque un cero x de f est entrelas aproximaciones iniciales x0 y x1, no se garantiza que el mtodo converja (si converge)a x, adems de posibles cadas.

    EJEMPLO 1.4 Consideremos f (x) = x20 1. Si aplicamos el mtodo de la secante conx0 = 0.5 y x1 = 1.5 tenemos un comportamiento no deseable, tal y como se muestra en latabla (1.4)

    n xn Error estimado2 0.5003007284 0.99969927163 0.5006013663 0.00030063794 25769.46097 25768.960375 0.5006013663041813 25768.960376 0.5006013663041813 0

    Tabla 1.4 Problemas con el mtodo de la secante

    Para evitar comportamientos no deseables y asegurar que siempre la nueva iteracin esten un intervalo que contenga al cero que se quiere aproximar, combinamos el mtodo de lasecante con el mtodo de biseccin.

    Para describir el procedimiento usamos int{b,c} para denotar el ms pequeo intervalocerrado que contiene a b y c, es decir int{b,c} es [c,b] o [b,c].

    El algoritmo es como sigue: iniciamos con un intervalo [a,b] en el que f (a) y f (b) tengansignos opuestos. Inicialmente el intervalo de biseccin es [c,b] pues iniciamos con c = a.En el proceso se actualizan a,b y c de la siguiente manera:

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 15

    i. Si f (a) y f (b) tienen signos opuestos, se aplica una iteracin del mtodo de lasecante (la cual actualiza a y b )

    ii. Si f (a) y f (b) tienen signos iguales, se aplicar una iteracin del mtodo de lasecante solo si se conoce que xn+1 estar en int{c,b}. Sino, se aplica biseccintomando como b el punto medio del intervalo int{c,b}.

    iii. Finalmente se actualiza el intervalo int{c,b} actualizando c por comparacin delsigno de f (c) y f (b).

    En la figura (1.8) se muestra un caso particular con las primeras dos iteraciones.

    abb

    c

    abx3 c

    b= (c+a)/2

    1ra Iteracin: secante 2da Iteracin: biseccin

    Figura 1.8

    La figura (1.9) ilustra una posible actualizacin de c.

  • 16 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    abc

    ab

    c

    =

    Iteracin n Iteracin n+1

    Figura 1.9

    El algoritmo requiere saber a priori si xn+1 int{c,b} pero sin aplicar la iteracin(para evitar una posible cada evitamos la divisin por f (xn) f (xn1) ). Digamos queint{c,b}= [p,q], entonces

    xn+1 = xn f (xn) (xn xn1)f (xn) f (xn1) [p,q]

    si y slo si

    p xn f (xn) (xn xn1)f (xn) f (xn1) q

    si ponemos f = f (xn) f (xn1) entonces xn+1 [p,q] si y slo si se cumple alguna delas dos condiciones siguientes

    i.) si f > 0 entonces (p xn) f < f (xn)(xn xn1) < (q xn) fii.) si f < 0 entonces (p xn) f > f (xn)(xn xn1) > (q xn) f

    1.5.1 Algoritmo e Implementacin en VBA Excel.

    En este algoritmo,TestSecante hace la prueba xn+1 int{c,b}, es decir, determina si lasiguiente iteracin de secante estar en le intervalo int{c,b}.

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 17

    SecanteItr(a,b) aplica una iteracin del mtodo de la secante con x0 = a y x1 = b yse procede a la actualizacin de a y b, es decir a = x1 y b = x2. Si los argumentos sereciben por referencia entonces son modificados en la subrutina. En cdigo VBA Excel sera

    Sub secanteItr(x0, x1)

    Dim x2

    If f(x1) f(x0) Then

    x2 = x1 - f(x1) * ((x1 - x0) / (f(x1) - f(x0)))

    x0 = x1

    x1 = x2

    End If

    End Sub

    Algoritmo 1.2: Hbrido secante-biseccin.Entrada: una funcin continua f y a, b tal que f (a) f (b) < 0 y Resultado: una aproximacin del cero.c = a ;1n = 0;2repeat3

    if f (a) f (b) < 0 then4Aplicar SecanteItr(a,b)5

    else6if TestSecante =true then7

    Aplicar SecanteItr(a,b)8else9

    Aplicar biseccin b = b0.5(cb) ;10

    Intervalo para biseccin;11if f (a) f (b) < 0 then12

    c = a13

    n = n+114until ( |cb|< (|b|+1) ) Or (n > maxItr Or f (b) < ) ;15return b ;16

    Implementacin en VBA Excel

  • 18 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    Para hacer una hoja Excel, usamos como referencia la figura (1.10).

    Figura 1.10 Hoja Excel para el hbrido secante-biseccion.

    La subrutina principal es HSecanteBiseccion. Esta subrutina usa el evaluador de fun-ciones clsmathparserhttp://digilander.libero.it/foxes/clsMathParser para leery evaluar la funcin f .

    Tambin implementamos dos funciones,

    secanteItr(a,b,f) y x2estaEntre(c,b,a,f).

    Ambas son llamadas desdeHSecanteBisecciony usan la funcin f . secanteItr(a,b,f)hace una iteracin del mtodo de la secante y actualiza a yb . La funcinx2estaEntre(c,b,a,f)devuelve true o false dependiendo de si la siguiente iteracin (en la que x0 = a y x1 = b )estar entre c y b.

    Option Explicit

    Private Sub CommandButton1_Click()

    Dim fx, a, b, delta, maxItr

    fx = Cells(4, 2)

    a = Cells(8, 1)

    b = Cells(8, 2)

    delta = Cells(8, 3)

    maxItr = Cells(8, 4)

    Call HSecanteBiseccion(fx, a, b, delta, maxItr, 8, 5)

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 19

    End Sub

    Sub HSecanteBiseccion(fx, aa, bb, delta, maxItr, fi, co)

    Dim f As New clsMathParser

    Dim okf As Boolean

    Dim test1 As Boolean

    Dim test2 As Boolean

    Dim a, b, n, c, fa, fb

    okf = f.StoreExpression(fx)

    If Not okf Then

    MsgBox ("error en f: " + f.ErrorDescription)

    Exit Sub

    End If

    a = aa

    b = bb

    c = a

    fa = f.Eval1(a)

    fb = f.Eval1(b)

    n = 0

    Do

    If Sgn(fa) Sgn(fb) Then

    Cells(fi + n, co) = b

    Cells(fi + n, co + 1) = c

    Call secanteItr(a, b, f) Actualiza a y b

    Cells(fi + n, co + 2) = "Secante1"

    Cells(fi + n, co + 3) = Abs(b - c)

    Else

    If x2estaEntre(b, c, a, f) Then

    Cells(fi + n, co) = b

    Cells(fi + n, co + 1) = c

    Call secanteItr(a, b, f) Modifica a y b

    Cells(fi + n, co + 2) = "Secante2"

    Cells(fi + n, co + 3) = Abs(b - c)

    Else

    biseccin

    Cells(fi + n, co) = b

    Cells(fi + n, co + 1) = c

    b = b + 0.5 * (c - b)

    Cells(fi + n, co + 2) = "Biseccin"

    Cells(fi + n, co + 3) = Abs(b - c)

  • 20 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    End If

    End If

    fa = f.Eval1(a)

    fb = f.Eval1(b)

    Cells(fi + n, co + 4) = fb

    If Sgn(fa) = Sgn(fb) Then

    nada

    Else: c = a

    End If

    n = n + 1

    Loop Until Abs(c - b) < delta Or n >= maxItr Or Abs(fb) < delta

    End Sub

    Sub secanteItr(x0, x1, f) Modifica x0 y x1

    Dim x2, fx1, fx0

    fx1 = f.Eval1(x1)

    fx0 = f.Eval1(x0)

    x2 = x1 - fx1 * ((x1 - x0) / (fx1 - fx0))

    x0 = x1

    x1 = x2

    End Sub

    Function x2estaEntre(b, c, a, f)

    Dim test1 As Boolean

    Dim test2 As Boolean

    Dim q, x0, x1, p, pf, Df, x2, fx1, fx0

    q = Application.Max(b, c)

    p = Application.Min(b, c)

    x0 = a

    x1 = b

    fx1 = f.Eval1(x1)

    fx0 = f.Eval1(x0)

    Df = fx1 - fx0

    pf = -1 * fx1 * (x1 - x0)

    test1 = (Df > 0 And (p - x1) * Df < pf And pf < (q - x1) * Df)

    test2 = (Df < 0 And (p - x1) * Df > pf And pf > (q - x1) * Df)

    x2estaEntre = test1 Or test2

    End Function

  • Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009. 21

    EJEMPLO 1.5 Considere la funcin f (x) = x5 100x4 + 3995x3 79700x2 + 794004x3160080. Sus ceros son x = 18,19,20,21,22. En la tabla (1.5) se muestra los valores deb y c al aplicar el mtodo hbrido secante-biseccin con x0 = 21.34 y x1 = 22.45 (paraaproximar x = 22)

    n b c Mtodo1 21.4370004 21.34 Secante12 21.54606717 22.45 Secante13 21.99803359 22.45 Biseccin4 22.00708175 22.45 Secante25 21.99997119 21.99803359 Secante16 21.99999958 22.00708175 Secante17 22 22.00708175 Secante2

    Tabla 1.5

    En la lnea 3 se observa que b = 21.54606717 y c = 22.45. En la siguiente iteracin seusa biseccin. Esto sucede porque si se aplica una iteracin de la secante con los valoresactuales a = 21.4370004035587,b = 21.5460671728629 (para los cuales no hay cambiode signo) entonces el valor futuro habra sido xn+1 = 20.7894316058807 y este valor noest en el intervalo actual [c,b] = [22.45, 21.54606717], Entonces se us biseccin. Si nose hubiera hecho esto, entonces el mtodo de la secante (clsico) hubiera convergido alcero x = 21 que no es el que est en el intervalo inicial.

    EJEMPLO 1.6 En la tabla (1.6) se muestra los valores de b y c al aplicar el mtodo hbridosecante-biseccin, con x0 = 0.5 y x1 = 2, para aproximar el cero x = 1 de f (x) = x201.Recordemos es desempeo desastroso del mtodo de la secante, que se mostr en la tabla(1.4), para este mismo problema.

  • 22 Revista digital Matemtica, Educacin e I nternet (www.cidse.itcr.ac.cr/revistamate/). Vol 9, No 2. , 2009.

    n b c Mtodo |b c|1 2.000000 0.500000 Secante1 1.430511062 0.500001 2.000000 Secante1 1.4999971393 0.500003 2.000000 Biseccin 0.7499985694 1.250001 0.500001 Secante1 0.0086467055 0.508648 1.250001 Secante1 0.732806286 0.517195 1.250001 Biseccin 0.366403147 0.883598 1.250001 Biseccin 0.183201578 1.066800 0.508648 Secante1 0.1531414819 0.661790 1.066800 Secante1 0.2939074031 0 0.772892 1.066800 Biseccin 0.14695370111 0.919846 1.066800 Biseccin 0.07347685112 0.993323 1.066800 Secante2 0.02592791813 1.040871942 0.99332301 Secante1 0.00440512814 0.997728138 1.040871942 Secante1 0.04163621715 0.999235725 1.040871942 Secante2 0.04085527116 1.000016672 0.999235725 Secante1 0.00076415417 0.999999879 1.000016672 Secante1 1.6671610518 1 1.000016672 Secante2 1.66716105

    Tabla 1.6

    Bibliografa

    [1] Press, W.; Teukolsky, S.; Vterling, W.; Flannery, B. Numerical Recipes in C. The Art ofScientific Computing. 2da Ed. Cambridge Universite Press. 1992.

    [2] Mathews, J; Fink, K.Mtodos Numricos con MATLAB. Prentice Hall, 3a. ed., 2000.[3] Dahlquist, G. Bjrk, A. Numerical Mathematics in Scientific Computation.

    (www.mai.liu.se/~akbjo). Consultada en Mayo, 2006.[4] Gautschi, W. Numerical Analysis. An Introduction. Birkhuser, 1997.[5] Stoer, J.; Burlish, R. Introduction to Numerical Analysis. 3rd ed.Springer, 2002.[6] Ralston, A.; Rabinowitz, P. A First Course in Numerical Analysis. 2nd ed. Dover, 1978.[7] Demidovich, B.; Maron, I. Clculo Numrico Fundamental. 2da ed. Paraninfo (Madrid),

    1985.[8] Moler, K. Numerical Computing with MATLAB.

    (http://www.mathworks.com/moler/). Consultada en Enero, 2006.

    Mtodos Hbridos. Walter Mora F.Derechos Reservados 2009 Revista digital Matemtica, Educacin e Internet (www.cidse.itcr.ac.cr/revistamate/)

    Introduccin Mtodo de Newton. Mtodo de Biseccin. Hbrido Newton-Biseccin.Algoritmo e Implementacin en VBA Excel.

    Mtodo de la SecanteUn Mtodo Hbrido: Secante-BiseccinAlgoritmo e Implementacin en VBA Excel.

    BibliografaBibliografa