Está en la página 1de 17

RAÌCES DE POLINOMIOS

Método de BAIRSTOW
Ing Yamil Armando Cerquera Rojas – yacerque@gmail.com
Especialista en Sistemas Universidad Nacional
Docente Universidad Surcolombiana
Neiva - Huila

Preámbulo
En análisis numérico, el método de Bairstow es un algoritmo eficiente de
búsqueda de las raíces de un polinomio real de grado arbitrario. El
algoritmo apareció por primera vez en el apéndice del libro
"Aerodinámica Aplicada", escrito por Leonard Bairstow y publicado en
1920. El algoritmo se diferencia de otros métodos en que encuentra
tanto las raíces reales como las imaginarias (en parejas complejas
conjugadas), utilizando únicamente aritmética real.

Leonard Bairstow
Sir Leonard Bairstow (1880-1963), fue miembro de la Orden del
Imperio Británico y nació en 1880 en Halifax, West
Yorkshire. Es recordado principalmente por sus trabajos en
aviación y por el Método de Bairstow, mediante el cual se
pueden encontrar las raíces enteras e imaginarias de un
polinomio de grado arbitrario.

Sir Leonard Bairstow fue hijo de Uriah Bairstow, hombre acaudalado de


Halifax, West Yorkshire y matemático entusiasta. De niño, Leonard
asistió a la escuela Queens Road and Moorside Council Schools, antes de
ser inscrito en Heath Grammar School, en el cual permaneció de manera
breve para ser luego transferido a Council Secondary School - conocida
luego como Higher Grade School. Obtuvo una beca en el Royal College of
Science en donde obtuvo el patrocinio Whitworth Scholarship que le
permitió realizar investigaciones en explosión de gases.

Asistió luego al National Physical Laboratory (Reino Unido), en Bushy Park, en


donde fue puesto a cargo del área de investigación en aeronáutica.
Mantuvo la Dirección de la Oficina Zaharoff de Aviación en el Imperial
College durante el período de 1920-1949 para ser nombrado luego por la
monarquía como Sir Leonard Bairstow.

Fue también miembro de la Royal Society of London y de la Royal


Aeronautical Society.

Definición del Método


El método de BAIRSTOW, Es un método iterativo relacionado con los métodos
de Muller y Newton Raphson.
El método consiste en el cálculo de las raíces de un polinomio buscando
factores cuadráticos x 2 − rx − s del mismo, es decir, tales que:

p ( x) = ( x 2 − rx − s ) p1 ( x )

Evidentemente, si x 2 − rx − s no es un factor cuadrático de p(x) se tendrá:

p ( x) = ( x 2 − rx − s ) p1 ( x ) + Ax + B

Tomando el polinomio en orden descendente y los


coeficientes del mismo en orden ascendente:
Si en términos generales se tiene un polinomio descrito de la forma
p ( x)   = a 0 x n + a1 x n − 1 + ... + a n − 1 x + a n y para efectos del ejemplo se tiene
p ( x) = x 5 + 2 x 3 − x 2 + x − 5 , si se asume como valor inicial para r=1 y s=1, se
tiene que el polinomio factor cuadrático será: pc = x 2 − x − 1 . Si se divide p (x)
entre pc dará como resultado p1 ( x ) y residuo Ax + B .

De manera general se puede     p ( x)          pc      


bosquejar así: Ax + B        p1 ( x)

Donde Ax + B es el residuo de la división. Siendo A y B funciones de r y de s,


de forma que el método consiste en encontrar los valores de r y s que hacen

A = A(r , s ) = 0
(1)
B = B(r , s ) = 0

Para ello se aplica el método de newton raphson en la forma conocida, lo que


conlleva la evaluación de la matriz jacobiana del sistema (1), así como de las
funciones A y B, en cada iteración. Un modo de realizar estas evaluaciones, ya
que la forma explicita de las funciones A(r , s ) y B (r , s ) no es conocida
explícitamente, es construir el siguiente algoritmo:

As = A1 ,   Bs = B1
Ar = rA1 + B1 ,    Br = sA1

Y encontrar los valores de A, B, A1 y B1 mediante el proceso similar al de


Hörner siguiente que se obtiene al desarrollar los productos e identificar los
coeficientes:

Sean
p ( x)   = a 0 x n + a1 x n − 1 + ... + a n − 1 x + a n = ( x 2 − rx − s) p1 ( x) + Ax + B
p1 ( x ) = b0 x n − 2 + b1 x n − 3 + ... + bn − 3 x + bn − 2 = ( x 2 − rx − s ) p 2 ( x) + A1 x + B1
p 2 ( x ) = c0 x n − 4 + c1 x n − 5 + ... + c n − 5 x + c n − 4 , donde
b0 = a 0
b1 = a1 + rb0
b2 = a 2 + rb1 + sb0
bk = a k + rbk − 1 + sbk − 2 ,    k = 2,3,..., n − 2
A = a n − 1 + rbn − 2 + sbn − 3
B = a n +             + sbn − 2
c 0 = b0
c1 = b1 + rc 0
c 2 = b2 + rc1 + sc 0
c k = bk + rc k − 1 + sc k − 2 ,     k = 2,3,..., n − 4
A1 = bn − 3 + rc n − 4 + sc n − 5
B1 = bn − 2 +            + sc n − 4

Resumiendo

Dado un polinomio f n (x) se encuentran dos factores, un polinomio cuadrático


f 2 ( x) = x 2 − rx − s y f n− 2 ( x) .

El procedimiento general para el método de Bairstow es:

1. Dado f n (x) y r0 y s 0
2. Utilizando el método de Newton Raphson se calcula f 2 ( x) = x 2 − r0 x − s 0
y f n− 2 ( x) , tal que, el residuo de f n ( x) / f 2 ( x) sea igual a cero.
3. Se determinan la raíces f 2 ( x) , utilizando la formula general.
4. Se calcula f n − 2 ( x) = f n ( x) / f 2 ( x)
5. Se hace f n ( x) = f n− 2 ( x)
6. Si el grado del polinomio es mayor que tres se regresa al paso 2
7. Si no se termina

La principal diferencia de este método, respecto a otros, es que permite


calcular todas las raíces de un polinomio (reales e imaginarias).

Recuerde la forma factorizada de un polinomio por ejemplo:

f 5 ( x) = ( x + 1)( x − 4)( x − 5)( x + 3)( x − 2)

Si se divide entre un factor que no es una raíz (por ejemplo, x + 6 ), el


cociente podría ser un polinomio de cuarto orden. Sin embargo, en este caso,
podría haber residuo.

Con estas bases se puede elaborar un algoritmo para determinar la raíz de un


polinomio:
1. Suponiendo que el valor inicial de la raíz es x = t;
2. Al dividir el polinomio entre el factor x – t, y
3. Determinando si existe un residuo. Si no, el valor es perfecto y la raíz
es igual a t.

Si hay un residuo, el valor puede ser ajustado sistemáticamente y el


procedimiento repetirse hasta que el residuo desaparezca y la raíz sea
localizada.

El método de Bairstow se basa por lo general en esta aproximación. El proceso


matemático depende de dividir el polinomio entre un factor.

Por ejemplo, Tomando el polinomio general con coeficientes iguales o sea


a 0 x 0 ,   a1 x 1 ,  a 2 x 2 ,..., a n x n se tiene el polinomio general así:

f n ( x) = a0 + a1 x + a 2 x 2 + ... + a n x n

Consecuentemente el proceso matemático depende de dividir el polinomio


f n (x ) entre un factor, tomando en cuenta la discusión del polinomio de
deflación como sigue a continuación:

Supóngase que se tiene la raíz de orden n-esimo, y teniendo un adecuado


procedimiento para eliminar la raíz encontrada, a este procedimiento de
eliminar la raíz se le llama deflación polinomial.

Tomando el polinomio y coeficientes en Orden Ascendente:


De la forma general de un polinomio de orden n:
f n ( x ) = a0 + a1 x + a2 x 2 + ... + an x n Ec. 1

Se tiene un polinomio definido: f 5 ( x) = − 120 − 46 x + 79 x 2 − 3 x 3 − 7 x 4 + x 5


factorizando este polinomio resulta f 5 ( x) = ( x + 1)( x − 4)( x − 5)( x + 3)( x − 2) .
Y es claro que x = − 1,  4,  5,  − 3,  2 son todas las raíces que representan a cada
paréntesis individual, ahora suponga que se divide la función polinomial de
quinto orden por un factor de manera que se elimine una de sus raíces por
ejemplo el factor x + 3 y se tiene una función de cuarto orden:

f 4 ( x) = ( x + 1)( x − 4)( x − 5)( x − 2) = − 40 − 2 x − 27 x 2 − 10 x 3 − x 4 Con residuo cero


para este caso.

Así se tiene que la forma general f n ( x) = a0 + a1 x + a2 x 2 + ... + an x n entre un


factor x − t dará un segundo polinomio de un orden más bajo
f n − 1 ( x) = b1 + b2 x + b3 x 2 + ... + bn x n − 1 (Ec 2) con residuo R = b0 en donde los
coeficientes son obtenidos por la relación de recurrencia:
bn = a n
bn− 1 = an− 1 + rbn
bi = ai + rbi + 1 + sbi + 2 , para i=n-2 hasta 0.
Para permitir la evaluación de raíces complejas este método divide la función
entre el factor cuadrático:
x 2 − rx − s
Aplicándolo en la ecuación f n ( x) = a0 + a1 x + a2 x 2 + ... + an x n

n− 3 n− 2
Resultando: f n − 2 ( x) = b2 + b3 x + b4 x + ... + bn − 1 x + bn x
2

Con residuo:
R = b1 ( x − r ) + b0       Ec.3

Y aplicando la relación de recurrencia se obtiene los siguientes coeficientes


para la ecuación anterior:
bn = a n     Ec. 4a
bn− 1 = a n− 1 + rbn     Ec.4b
bi = ai + rbi + 1 + sbi + 2 , para i = n − 2   hasta   0     Ec. 4c

Se introduce el factor cuadrático para la determinación de las raíces


complejas, por que si los coeficientes del polinomio original son reales, las
raíces complejas se presentan en pares conjugados.

Si x 2 − rx − s es un divisor exacto del polinomio, las raíces complejas pueden


− b±
b 2 − 4ac
ser determinadas con la fórmula cuadrática x = , por lo que el
2a
método se reduce solo a determinar r y s que provocan que el factor
cuadrático sea un divisor exacto y por consiguiente se obtiene un residuo igual
a cero.

Entonces si R = b1 ( x − r ) + b0 = 0 , b1    y    b0 deben ser iguales a cero.

Esto para que los valores de inicio al evaluar r y s conduzcan a este resultado,
se debe de aplicar un camino para los valores iniciales o de inicio de manera
que b1 y b0 tiendan a cero para ello se utiliza una técnica similar a la de
Newton Raphson.

Pues b0 como b1 son funciones de r y s y se expanden utilizando la serie de


Taylor:
∂ b1 ∂b
b1 (r + dr , s + ds ) = b1 + dr + 1 ds
∂r ∂s
∂ b0 ∂b
b0 (r + dr , s + ds ) = b0 + dr + 0 ds     Ec.5
∂r ∂s
Los valores de la parte izquierda de la igualdad son evaluados en r y s.
Obsérvese que el segundo término y el término de orden superior se han
despreciado. Ya que en forma implícita – r y – s son muy pequeños y los
términos de orden superior pueden ser despreciados, pero otra consideración
es que los valores de inicio de son tan cercanos a los valores de r    y    s de las
raíces.

Para dar un valor inicial que se acerque a las raíces es el colocar la Ec. 5 igual
a cero y que resulte:
∂ b1 ∂ b1
∆r+ ∆ s = − b1     Ec.6
∂r ∂s
∂ b0 ∂ b0
∆r+ ∆ s = − b0    Ec.7
∂r ∂s
Si las variables ∆ r    y    ∆ s forman un sistema de ecuaciones de dos incógnitas
y el método de Bairstow muestra que las derivadas parciales pueden
resolverse por división sintética de las b en forma similar al camino en que
las b en sí mismas fueron derivadas:

c n = bn
c n− 1 = bn− 1 + rc n Para i = n − 2 a 0
ci = bi + rci + 1 + sci + 2

Entonces las derivadas parciales se obtienen por división sintética de las b, y


las b con las derivadas parciales son sustituidas en las ecuaciones 6 y 7 y se
obtiene:
c 2 ∆ r + c3 ∆ s = − b1
c1 ∆ r + c 2 ∆ s = − b0
Estas ecuaciones pueden ser resueltas para mejorar los valores de r y s, se
podría utilizar el error aproximado para cada paso pero no es para nuestro
caso realmente utilizado pero quedaría de la siguiente forma:
∆r
ε a ,r = 100%
r
y

∆s
ε a,s = 100%
s
Cuando los dos valores fallan bajo un criterio especificado las raíces pueden
determinarse con la siguiente ecuación:

r± r 2 + 4s
x=
2
Aquí pueden caber tres posibilidades:

– El cociente es un polinomio de tercer orden o mayor. Para este caso, el


método de Bairstow podría aplicarse al cociente para evaluar un nuevo
valor de r y s. Los valores anteriores de r y s pueden servir como
valores iniciales de para esta aplicación.
– El cociente es cuadrático. Para este caso, el residuo de las raíces puede
evaluarse con la ecuación 11)
– El cociente es un polinomio de primer orden. Para este caso, el residuo
es una sola raíz que puede evaluarse simplemente como: X = - s/r

Ejemplo expresando el polinomio en orden


descendente:
Dado el polinomio f(x) = x 5 − 3.5x 4 + 2.75x 3 + 2.125x 2 − 3.875x + 1.25, determinar los
valores de r y s que hacen el residuo igual a cero. Considere valores iniciales para
r0 = − 1   y   s0 = 2. El factor cuadrático fc = x 2 − rx − s por ende será
fc = x 2 − ( − 1) x − 2 = x 2 + x − 2

    f ( x)          fc      


Solución. Teniendo que realizar
Ax + B        f 1 ( x )

   x 5 − 3.5 x 4 + 2.75 x 3 + 2.125x 2 − 3.875 x + 1.25        x 2 + x − 2  


30.750 61.75
− x 5 −      x 4 + 2.00 x 3                                                 x 3 − 4.5 x 2 + 9.25 x − 16.125 + −
x x2
   0    − 4.5 x 4 + 4.75 x 3 + 2.125 x 2 − 3.875 x + 1.25
         4.5 x 4 + 4.5 x 3   −   9.000 x 2                              
   0          0    + 9.25 x 3 − 6.875 x 2 − 3.875 x + 1.25
                  − 9.25 x 3    − 9.25 x 2     + 18.50 x              
   0          0            0 − 16.125 x 2 + 14.625 x + 1.25
                                 16.125 x 2 + 16.125 x − 32.25  
  0         0            0            0             30.750 x − 31 .00
                                                 − 30.750 x − 30.75  
 0         0             0           0                0          − 61.75
                                                                + 61.75
 0         0             0           0                0               0

Iteración 1 con:

f(x) = x 5 − 3.5 x 4 + 2.75 x 3 + 2.125 x 2 − 3.875 x + 1.25,


fc = x 2 + x − 2
f 1(x) = 1x 3 − 4.5 x 2 + 9.25 x − 16.125
Ax + B = 30.75 x − 31

La división sintética con el polinomio fc = x 2 + x − 2 da como resultado

f 1(x) = x 3 − 4.5 x 2 + 9.25 x − 16.125 y residuo Ax + B = 30.75 x − 31 .


El vector b tendría los siguientes datos: b5 = 1 , b4 = − 4.5 , b3 = 9.25 , b2 = − 16.125 , y
con un residuo de Ax + B = 30.75 x − 31 . Si se trata de eliminar dicho residuo se puden
conseguir los valores para b1 , b0 . Se elimina Ax con el monomio 30.75 y una vez
x
eliminado se elimina el ultimo termino B’ con el monomio − 61.75 , encontrando con esto
x2
los valores para b1 = 30.75, y b0 = − 61.75 .

Ahora realizando la división del polinomio resultado entre el polinomio factor


fc = x 2
+ x − 2 se tiene:

    x 3 − 4.5 x 2 + 9.25 x − 16.125 + 30.75 / x − 61.75 / x 2      x 2 + x − 2   


16.75 43.875 108.125
− x 3 −      x 2 + 2   x                       x − 5.5 + − +
x x2 x3
0      − 5.5 x 2 + 11.25 x − 16.125
       + 5.5 x 2 +   5.5 x    − 11
   .000        
0         0        16.75 x   −   27.125
                 − 16.75 x    − 16.750 + 33.5
x
                     0           − 43.875 + 64.25
x
                                    43.875 + 43 .875 − 87.75 / x 2
x
                                     0       + 108.125 − 149.50 / x 2
x
                                    − 108.125 − 108.125 / x 2
x
                                    − 257.625 / x 2
0
El vector c tendría los siguientes datos: c5 = 1 , c4 = − 5.5 , y con un residuo de
A' x + B ' = − 16.75 x − 27.125 , ahora eliminando este residuo para calcular los restantes
valores de ci asi: c3 = 16.75 , c2 = − 43.875 , c1 = 108.125 .
f 1(x) = 1x 3 − 4.5 x 2 + 9.25 x − 16.125
fc = x 2 + x − 2
f 2 ( x ) = x − 5.5
A' x + B ' = − 16.75 x − 27.125

Aplicando el método de Newton se tiene:

 c2 ∆ r + c3 ∆ s = − b1   − 43.875∆ r + 16.750∆ s = − 30.75


 c ∆ r + c ∆ s = − b  ≡  108.125∆ r − 43.875∆ s = 61.75 
 1 2 0  

Resolviendo el sistema se tiene que


∆ r = 2.7636812508572213
,
∆ s = 5.403374022767796
Como estos valores son diferentes de cero, se procede a calcular un nuevo valor para r y para
s asi:

rn = r + ∆ r = − 1.0 + 2.7636812508572213 = 1.7636812508572213


sn = s + ∆ s = 2.0 + 5.403374022767796 = 7.403374022767796
Con estos nuevos valores se realiza una segunda iteración.
Iteración 2.

La división sintética con el polinomio


f c(x) = x 2 − 1.7636812508572213x − 7.403374022767796 , Da como resultado
f 1(x) = x 3 − 1.7363187491427787 x 2 + 7.091061199392814 x − 1.776754563401905

Residuo = {51.75640698828836, 105.68578319650365}

Aplicando el método de Newton se tiene

27.628006 14.542693 dr -51.75640


208.148405 27.62800 ds -105.68578

∆ r = − 0.04728019113442016
∆ s = − 3.469106187802152
De donde

r2 = 1.7636812508572213 - 0.04728019113442016 = 1.7164010597228012


s2 = 7.403374022767796 - 3.469106187802152 = 3.934267834965644

Iteración 3.

La división sintética con el polinomio:


f 2(x) = x 2 - 1.7164010597228012 x - 3.934267834965644 , da como resultado

f 3(x) = x 3 − 1.7835989402771988 x 2 + 3.622896723753395 x + 1.3261878347051992

Residuo = {12.654716254544885, 28.1881465309956}

Aplicando el método de Newton se tiene:

13.83497 7.44182 dr -12.65471


65.679212 13.83497 ds -28.18814

De donde

r3 = 1.7164010597228012 - 0.11666951305731528 = 1.599731546665486


s3 = 3.934267834965644 - 1.4835870659929915 = 2.4506807689726524

Codigo para MatLab.

clear all;clc;j=1;
%r(1)=input('Digite valor para r');
r(1)=-1;
%s(1)=input ('Digite valor para s');
s(1)=2;
while j<=8
a=[1 -3.5 2.75 2.125 -3.875 1.25];
n=length(a);
b(1)=a(1);
c(1)=b(1);
b(2)=a(2)+r(j)*b(1);
c(2)=b(2)+r(j)*c(1);
i=3;
while (i<=n)
b(i)=a(i)+r(j)*b(i-1)+s(j)*b(i-2);
c(i)=b(i)+r(j)*c(i-1)+s(j)*c(i-2);
i=i+1;
end
m=[c(4) c(3); c(5) c(4)];
B=[-b(5); -b(6)];
v=inv(m)*B;
dr=v(1); ds=v(2);
j=j+1;
r(j)=r(j-1)+dr; s(j)=s(j-1)+ds;
end
disp([r' s'])

En resumen, los datos obtenidos con el código anterior serán

En resumen

k r s Residuo
0 -1.000000 2.000000 30.750000 -61.75000
1 1.763680 7.403374 51.756406 105.68578
2 1.716400 3.934260 12.654710 28.188140
3 1.599731 2.450680 2.8995800 8.154670
4 1.333540 2.186660 0.7601220 2.522228
5 1.118260 2.113020 0.2719400 0.607688
6 1.027050 2.023170 0.0431300 0.111850
7 1.001650 2.001530 0.0027700 0.006340
8 1.000000 2.000000 1.13930E-5 2.67534E-5

La solución es:

f 3(x) = x 3 − 2.53 x 2 + 2.25 x − 0.625 y f 2(x) = x 2 − x − 2

Las raíces de f 2(x) = x 2 − x − 2 , son

x1 = 2
x2 = -1

Si se repite el ejemplo pero ahora considerando el polinomio:


f 3(x) = x 3 − 2.53 x 2 + 2.25 x − 0.625 , se puede calcular el total de las raíces del
polinomio original.

Ejemplo tomando el polinomio en el mismo orden los dos términos:


Emplee el método de Bairstow para determinar las raíces del polinomio
f 5 ( x) = x 5 − 3.5 x 4 + 2.75 x 3 + 2.125 x 2 − 3.875 x + 1.25 , Use los valores iniciales de
r = s = − 1 e iterando a un nivel de ε s = 1%

Tomando el polinomio en términos de ai se tiene:


f 5 ( x) = a5 x 5 − a 4 x 4 + a3 x 3 + a 2 x 2 − a1 x + a 0 , donde

a5 = 1 , a 4 = − 3.5 , a3 = 2.75 , a 2 = 2.125 , a1 = − 3.875 y a 0 = 1.25 .


Paso 1:
Una forma de encontrar los valores de bi , es procediendo a realizar la división
polinomial de la siguiente manera:
   x 5 − 3.5 x 4 + 2.75 x 3 + 2.125 x 2 − 3.875 x + 1.25        x 2 + x + 1  
10.5 11.375
− x 5 −      x 4 −       x 3                                                   x 3 − 4.5 x 2 + 6.25 x + 0.375 − +
x x2
   0   − 4.5 x 4 + 1.75 x 3 + 2.125 x 2 − 3.875 x + 1.25       b5         b4           b3           b2           b1          b0
         4.5 x 4 + 4.5 x 3   +   4.5  x 2                              
   0         0    + 6.25 x 3 + 6.625 x 2 − 3.875 x + 1.25
                  − 6.25 x 3  −   6.25 x 2    − 6.250 x              
   0         0            0    + 0.375 x 2 − 10.125 x + 1.25
                                − 0.375 x 2 − 0.375 x − 0.375  
  0         0            0           0         − 10.5 x + 0.875
                                                + 10.50 x + 10.5  
 0         0            0           0               0        11.375
                                                             − 11.375
 0         0            0           0               0              0

O aprovechando las fórmulas apropiadas para el cálculo anterior se puede


realizar de la siguiente manera:

Formulas apropiadas:
bn = an
bn − 1 = a n − 1 + rbn
bi = ai + rbi + 1 + sbi + 2 , para i = n − 2   hasta   0
Cálculos:
b5 = a5 = 1
b4 = a 4 + rb5 = − 3.5 + ( − 1)1 = − 4.5
b3 = a3 + rb4 + sb5 = 2.75 + (− 1)(− 4.5) + (− 1)(1) = 6.25
b2 = a 2 + rb3 + sb4 = 2.125 + (− 1)(6.25) + (− 1)(− 4.5) = 0.375
b1 = a1 + rb2 + sb3 = − 3.875 + ( − 1)(0.375) + (− 1)(6.25) = − 10.5
b0 = a 0 + rb1 + sb2 = 1.25 + (− 1)(− 10.5) + (− 1)(0.375) = 11.375

Luego se realizan los cálculos de c:


c n = bn
c n− 1 = bn− 1 + rc n
ci = bi + rc i + 1 + sci + 2

c5 = b5 = 1
c 4 = b4 + rc5 = − 4.5 + (− 1)1 = − 5.5
c3 = b3 + rc 4 + sc5 = 6.25 + (− 1)(− 5.5) + (− 1)(1) = 10.75
c 2 = b2 + rc3 + sc 4 = 0.375 + (− 1)(10.75) + (− 1)(− 5.5) = − 4.875
c1 = b1 + rc 2 + sc3 = − 10.5 + (− 1)(− 4.875) + (− 1)(10.75) = − 16.375

Así, las ecuaciones simultáneas para resolver ∆ r y ∆ s son

c 2 ∆ r + c3 ∆ s = − b1 −   4.875∆ r + 10.750∆ s =     10.500



c1∆ r + c 2 ∆ s = − b0 − 16.375∆ r −   4.875∆ s = − 11.375

Resolviendo con MatLab y el siguiente código,

s=solve('-4.875*dr+10.75*ds=10.5','-16.375*dr-4.875*ds=-11.375')
» s.dr
ans =0.35583013998592320325330413701416
» s.ds
ans =1.1381090169703605224055681551576

Se tiene para ∆ r =0.3558 y ∆ s =1.1381. Por lo tanto, los valores supuestos


inicialmente para r y s, pueden corregirse así:

r = -1 + 0.3558 = -0.6442
s = -1 + 1.1381 = 0.1381

Y el error aproximado puede ser calculado así:

0.3558
ε a ,r = 100% = 55.23%
− 0.6442
y
1.1381
ε a ,s = 100% = 824.1%
0.1381

Como el error es demasiado grande entonces se realiza de nuevo el cálculo


usando los nuevos valores encontrados para s y r.

El siguiente cálculo es repetir usando los valores revisados para r y s.


b5 = 1
b4 = − 4.1442
b3 = 5.5578
b2 = − 2.0276
b1 = − 1.8013
b0 = 2.1304

Y luego:

c5 = 1
c4 = − 4.7884
c3 = 8.7806
c2 = − 8.3454
c1 = 4.7874

Por lo tanto se debe resolver

− 8.3454∆ r + 8.7806∆ s = 1.8013


4.7874∆ r − 8.3454∆ s = − 2.1304

Para ∆ r = 0.1331 y ∆ s = 0.3316 , los cuales pueden usarse para estimar la raíz
correcta como

r = -0.6442 + 0.1331 = - 0.5111


s = 0.1381 + 0.3316 = - 2.1304

ε a ,r = 26.0%
y
ε a ,s = 70.6%

El cálculo debe continuar, por los valores tan altos en el error que se calcula.
Con los resultados después de cuatro iteraciones, el método converge a los
valores de r = -0.5 ( ε a ,r = 0.063% ) y s = 0.5 ( ε a ,s = 0.040% ). La fórmula
general puede emplearse para evaluar las raíces como

− 0.5 ± (− 0.5) 2 + 4(0.5)


x= = 0.5,   − 1.0
2

En este punto, el cociente es la ecuación cúbica

f ( x) = x 3 − 4 x 2 + 5.25 x − 2.5
El método de Bairstow puede aplicarse a este polinomio usando resultados del
paso anterior, r = -0.5 y s = 0.5, como valores iniciales. Cinco iteraciones dan
un estimado de r = 2 y s = -1.249, el cual puede usarse para calcular

2± (2) 2 + 4(− 1.249)


x= = 1 ± 0.499i
2

En este punto, el cociente es un polinomio de primer orden que puede ser


directamente evaluado para determinar la quinta raíz 2.

Resumen del ejemplo anterior

Dado el polinomio f 5(x) = x − 3.5 x + 2.75 x + 2.125 x − 3.875 x + 1.25 , determinar


5 4 3 2

las raíces de este polinomio. Considere r0 = -1 y s0 = -1.

Paso 1. En este paso partiendo de dos supuestos valores de s y r para el


polinomio factor, se encuentran dos valores tal que dicho polinomio divida
exactamente al original.

f 5(x) = x 5 − 3.5 x 4 + 2.75 x 3 + 2.125 x 2 − 3.875 x + 1.25 Polinomio Original

f 5(x) = ( x 3 − 4 x 2 + 5.25 x − 2.5 )*( x 2 + 0.5 x − 0.5 ) Pol Resultado * Pol Factor

Las raíces del polinomio factor del Paso 1, dado por x 2 + 0.5 x − 0.5 = 0 son:
x1 = 0.5 y x 2 = − 1.0

Paso 2. Se repite el proceso anterior tomando como polinomio original el


polinomio resultado del paso anterior.

f 3(x) = x 3 − 4 x 2 + 5.25 x − 2.5 Polinomio Original


f 3(x) = (x − 2 )*(x − 2 x + 1.25 ) Polinomio Resultado * Polinomio Factor
2

Las raíces de x 2 − 2 x + 1.25 = 0 son

x3 = 1 + 0.5 j
x 4 = − 1 − 0.5 j

Paso 3. Acá no se realiza ninguna operación porque el polinomio original para


este paso es de orden 1. Es decir se trata de una recta.

f 1 ( x) = ( x − 2)

La raíz de este polinomio es

x5 = 2 ;
Todas la raíces de f 5 ( x) son x = [0.5, 1.0, (1.0 + j0.5), (1 - j0.5), 2]

Código en lenguaje C
Aquí el código de una función que saca los factores cuadráticos y lineales en
los que se debe dividir el polinomio:

void find_poly_roots(int n)
{ double r,s,dn,dr,ds,drn,dsn,eps;
int i,iter;
r = s = 0;
dr = 1.0;
ds = 0;
eps = 1e-14;
iter = 1;
while ((fabs(dr)+fabs(ds)) > eps)
{ if ((iter % 200) == 0)
{ r=(double)rand()/16000.;
}
if ((iter % 500) == 0)
{ eps*=10.0;
precision_error_flag=1;
printf("Perdida de Precisión \n");
}
b[1] = a[1] - r;
c[1] = b[1] - r;
for (i=2;i<=n;i++)
{ b[i] = a[i] - r * b[i-1] - s * b[i-2];
c[i] = b[i] - r * c[i-1] - s * c[i-2];
}
dn=c[n-1] * c[n-3] - c[n-2] * c[n-2];
drn=b[n] * c[n-3] - b[n-1] * c[n-2];
dsn=b[n-1] * c[n-1] - b[n] * c[n-2];
if (fabs(dn) < 1e-16)
{ dn = 1;
drn = 1;
dsn = 1;
}
dr = drn / dn;
ds = dsn / dn;
r += dr;
s += ds;
iter++;
}
for (i=0;i<n-1;i++)
a[i] = b[i];
a[n] = s;
a[n-1] = r;
}

Codigo en MatLAb
clear
clc
z=input ('TECLEE LOS COEFICIENTES DEL POLINOMIO ENTRE CORCHETES:\n');
%z=[1 -3.5 2.75 2.125 -3.875 1.25];
n=length(z); % Se define la longitud de la ecuación
it=0; % Se inicia el contador de iteraciones
limit_it=1000; % Se define el limite en el numero de iteraciones
tol=0.0001; % Se define la tolerancia de la estimación
raiz(1:n-1)=0;
ri=0;
r=2; % Se supone el valor de r que es el coeficiente de primer grado
s=2; % Se supone el valor de s que es el termino independiente
err=1; % Se inicializa el valor del error en r igual a 1
ers=1; % Se inicializa el valor del error en s igual a 1
if z(1)==0
fprintf('EL PRIMER COEFICIENTE NO DEBE SER CERO:\n\n')
break
end
while 1 % Ciclo que nos permitirá ir evaluando las raíces del polinomio
if (n-1>=3);
else break,end % Condición si el grado de la raíz es mayor a 3
t=[1 r s]; % Esta es el polinomio cuadrático de inicio
it=it+1; % Se incrementa en 1 la iteración
[x,y]=deconv(z,t); % Se divide la ecuación entre el polinomio de inicio
length(x); % Se define la longitud del polinomio resultante
length(y); % Se define la longitud del residuo resultante
x=[x,0,0]; % Se ajusta la variable x para poder sumarla al residuo
x=[x+y]; % Suma del cociente mas residuo
c(1)=z(1); % Valor de los coeficientes de la función a
c(2)=z(2)+(-r*c(1)); % Evaluar, en virtud de que el coeficiente de mayor
for i=3:n % Grado será equivalente al coeficiente de menor grado
m=n-i; % Y en este ciclo se realiza la inversión de ellos
c(n-m)=z(i)+(-r*x(n-m-1))+(-s*x(n-m-2));%algoritmo de inversión
end
d(1)=c(1); %valor de los coeficientes de las derivadas parciales
d(2)=c(2)+(-r*d(1)); %valor de los coeficientes de las derivadas parciales
for i=3:(n-1); %se realizan los cálculos de los coeficientes
m=n-i; %hasta el grado máximo del polinomio
d(n-m)=c(i)+(-r*d(n-m-1))+(-s*d(n-m-2));%algoritmo de calculo
end
e=[d(n-2),d(n-3);d(n-1),d(n-2)]\[-c(n-1);-c(n)];%calculo del
d_r=e(1); %nuevo valor del coeficientes de primer grado
d_s=e(2); %nuevo valor del termino independiente
if r==0
else
err=d_r/r; %calculo del error para coeficiente de primer grado
end
if s==0
else
ers=d_s/s; %calculo del error para termino independiente
end
r=r-d_r; %valor del coeficiente de primer grado
s=s-d_s; %valor del termino independiente
if ((abs (err))&(abs(ers))<=tol) %si se cumple la condición de
ri=ri+1;
x1=(-r+sqrt(r^2-4*s))/2; % tolerancia entonces se calcula el valor del
raiz(ri)=x1;
ri=ri+1;
x2=(-r-sqrt(r^2-4*s))/2; % polinomio cuadrático.
raiz(ri)=x2;
xx=[x1,x2]'; %valor del polinomio que divide exactamente a la ecuación
tt=poly(xx); %cambio de variable para efectuar nuevamente la división
[x3,y]=deconv(z,tt); %se efectúa la división
z=x3; %se hace cambio de variable
n=length(x3-1); %se determina el grado del polinomio
r=tt(1);
s=tt(2);
end
if (it>limit_it) %condición de iteraciones
fprintf ('Exceso en el limite de iteraciones. \n');break
end %si hay exceso en el numero de iteraciones se termina el programa
end
if (n-1)==2 %si la ecuación que se introduce es de segundo grado
ri=ri+1;
x1=(-z(2)+sqrt(z(2).^2-4*z(1)*z(3)))/(2*z(1));%se calcula normalmente por
raiz(ri)=x1;
x2=(-z(2)-sqrt(z(2).^2-4*z(1)*z(3)))/(2*z(1));%medio de la formula tradicional
ri=ri+1;
raiz(ri)=x2;
end
if (n-1)==1 %si el valor de la ecuación que se introduce es de primer
if (abs(z(2))>=tol)
ri=ri+1;
x1=-z(2)/z(1); %grado solamente se hace la sustitución.
else
x1=0;
end
raiz(ri)=x1;
x1;
end
if (n-1)==0 %si el valor de la ecuación que se introduce es una constante
fprintf('El valor que introdujo es una constante igual a:\n\n')
constante=z
end
raices=raiz';
sort raices;
raices

También podría gustarte