Page 205 - Chapra y Canale. Metodos Numericos para Ingenieros 5edición_Neat
P. 205

7.5  MÉTODO DE BAIRSTOW                                          181

                                            El seudocódigo del método de Müller para raíces reales se presenta en la figura 7.4.
                                         Observe que esta rutina toma un valor inicial único diferente de cero, que después se
                                         altera por el factor h para generar los otros dos valores iniciales. Por supuesto, el algo-
                                         ritmo puede programarse para considerarse tres valores iniciales. Con lenguajes pareci-
                                         dos a Fortran, el programa encontrará raíces complejas si las variables adecuadas se
                                         declaran como complejas.

                                  7.5    MÉTODO DE BAIRSTOW

                                         El método de Bairstow es un método iterativo relacionado de alguna manera con los
                                         métodos de Müller y de Newton-Raphson. Antes de hacer la descripción matemática de
                                         éste, recuerde la forma factorizada de un polinomio, por ejemplo
                                              (x) = (x + l)(x – 4)(x – 5)(x + 3)(x – 2)                   (7.28)
                                            ƒ 5



                                         FIGURA 7.4
                                         Seudocódigo para el método de Müller.


                                                      SUB Muller(xr, h, eps, maxit)
                                                      x 2  = x r
                                                      x 1  = x r  + h*x r
                                                      x 0  = x r  – h*x r
                                                      DO
                                                       iter = iter + 1
                                                       h 0  = x 1  – x 0
                                                       h 1  = x 2  – x 1
                                                       d 0  = (f(x 1 ) – f(x 0 )) / h 0
                                                       d 1  = (f(x 2 ) – f(x 1 )) / h 1
                                                       a = (d 1  – d 0 ) /(h 1  + h 0 )
                                                       b = a*h 1  + d 1
                                                       c = f(x 2 )
                                                       rad = SQRT(b*b – 4*a*c)
                                                       If |b+rad| > |b–rad| THEN
                                                         den = b + rad
                                                       ELSE
                                                         den = b – rad
                                                       END IF
                                                       dx r  = –2*c /den
                                                       x r  = x 2  + dx r
                                                       PRINT iter, x r
                                                       IF (|dx r | < eps*x r  OR iter > maxit) EXIT
                                                       x 0  = x 1
                                                       x 1  = x 2
                                                       x 2  = x r
                                                       END DO
                                                       END Muller





                                                                                                         6/12/06   13:51:25
          Chapra-07.indd   181                                                                           6/12/06   13:51:25
          Chapra-07.indd   181
   200   201   202   203   204   205   206   207   208   209   210