You are on page 1of 11

RACES DE POLINOMIOS

Mtodo de BAIRSTOW

Ing Yamil Armando Cerquera Rojas yacerque@gmail.com
Especialista en Sistemas Universidad Nacional
Docente Universidad Surcolombiana
Neiva - Huila


Prembulo
En anlisis numrico, el mtodo de Bairstow es un algoritmo eficiente de
bsqueda de las races de un polinomio real de grado arbitrario. El algoritmo
apareci por primera vez en el apndice del libro "Aerodinmica Aplicada",
escrito por Leonard Bairstow y publicado en 1920. El algoritmo se diferencia
de otros mtodos en que encuentra tanto las races reales como las
imaginarias (en parejas complejas conjugadas), utilizando nicamente
aritmtica real.
Leonard Bairstow
Sir Leonard Bairstow (1880-1963), fue miembro de la Orden del
Imperio Britnico y naci en 1880 en Halifax, West Yorkshire. Es
recordado principalmente por sus trabajos en aviacin y por el
Mtodo de Bairstow, mediante el cual se pueden encontrar las
races enteras e imaginarias de un polinomio de grado arbitrario.
Sir Leonard Bairstow fue hijo de Uriah Bairstow, hombre acaudalado de
Halifax, West Yorkshire y matemtico entusiasta. De nio, 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 explosin de gases.
Asisti luego al National Physical Laboratory (Reino Unido), en Bushy Park, en
donde fue puesto a cargo del rea de investigacin en aeronutica. Mantuvo
la Direccin de la Oficina Zaharoff de Aviacin en el Imperial College durante
el perodo de 1920-1949 para ser nombrado luego por la monarqua como Sir
Leonard Bairstow.
Fue tambin miembro de la Royal Society of London y de la Royal
Aeronautical Society.
Definicin del Mtodo

El mtodo de BAIRSTOW, Es un mtodo iterativo relacionado con los mtodos
de Muller y Newton Raphson.

El mtodo consiste en el clculo de las races de un polinomio buscando
factores cuadrticos s rx x
2
del mismo, es decir, tales que:

) ( ) ( ) (
1
2
x p s rx x x p =

Evidentemente, si s rx x
2
no es un factor cuadrtico de p(x) se tendr:

B Ax x p s rx x x p + + = ) ( ) ( ) (
1
2


Siendo A y B funciones de r y de s, de forma que el mtodo consiste en
encontrar los valores de r y s que hacen

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

Para ello se aplica el mtodo de newton raspn en la forma conocida, lo que
conlleva la evaluacin de la matriz jacobiana del sistema (1), as como de las
funciones A y B, en cada iteracin. Un modo de realizar estas evaluaciones, ya
que la forma explicita de las funciones ) , ( s r A y ) , ( s r B no es conocida
explcitamente, es construir el siguiente algoritmo:

1 1
, B B A A
s s
= =
1 1 1
, sA B B rA A
r r
= + =

Y encontrar los valores de A, B,
1
A y
1
B mediante el proceso similar al de
Hrner siguiente que se obtiene al desarrollar los productos e identificar los
coeficientes:

Sean



3 2 1
+ + =
n n n
sb rb a A
2

+ + =
n n
sb a B
0 0
b c =
0 1 1
rc b c + =
0 1 2 2
sc rc b c + + =
4 ,..., 3 , 2 ,
2 1
= + + =

n k sc rc b c
k k k k

5 4 3 1
+ + =
n n n
sc rc b A
4 2 1


+ + =
n n
sc b B
Resumiendo

Dado un polinomio ) (x f
n
se encuentran dos factores, un polinomio
cuadrtico s rx x x f =
2
2
) ( y ) (
2
x f
n
.

El procedimiento general para el mtodo de Bairstow es:

1. Dado ) (x f
n
y
0
r y
0
s
2. Utilizando el mtodo de Newton Raphson se calcula
0 0
2
2
) ( s x r x x f =
y ) (
2
x f
n
, tal que, el residuo de ) ( / ) (
2
x f x f
n
sea igual a cero.
3. Se determinan la races ) (
2
x f , utilizando la formula general.
4. Se calcula ) ( / ) ( ) (
2 2
x f x f x f
n n
=


5. Se hace ) ( ) (
2
x f x f
n n
=
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 mtodo, respecto a otros, es que permite
calcular todas las races de un polinomio (reales e imaginarias).

Recuerde la forma factorizada de un polinomio por ejemplo:

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

Si se divide entre un factor que no es una raz (por ejemplo, 6 + x ), el
cociente podra ser un polinomio de cuarto orden. Sin embargo, en este caso,
podra haber residuo.

Con estas bases se puede elaborar un algoritmo para determinar la raz de un
polinomio:

1. Suponiendo que el valor inicial de la raz 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 raz
es igual a t.

Si hay un residuo, el valor puede ser ajustado sistemticamente y el
procedimiento repetirse hasta que el residuo desaparezca y la raz sea
localizada.

El mtodo de Bairstow se basa por lo general en esta aproximacin. El proceso
matemtico depende de dividir el polinomio entre un factor. Por ejemplo, el
polinomio general

n
n n
x a x a x a a x f + + + + = ... ) (
2
2 1 0


Realizado esto puede repetirse el procedimiento hasta que el cociente
localice otra raz.

Consecuentemente el proceso matemtico depende de dividir el polinomio
entre un factor, tomando en cuenta la discusin del polinomio de deflacin
como sigue a continuacin:

Supngase que se tiene la raz de orden n-esimo, y teniendo un adecuado
procedimiento para eliminarla raz encontrada, a este procedimiento de
eliminar la raz se le llama deflacin polinomial.

Ejemplo:

De la forma general de un polinomio de orden n:
n
n n
x a x a x a a x f + + + + = ... ) (
2
2 1 0
Ec. 1
Se tiene un polinomio definido:
5 4 3 2
5
7 3 79 46 120 ) ( x x x x x x f + + =

factorizando este polinomio resulta ) 2 )( 3 )( 5 )( 4 )( 1 ( ) (
5
+ + = x x x x x x f .

Y es claro que x = -1, 4, 5, -3 y 2 son todas las races que representan a cada
parntesis individual ahora suponga que se divide la funcin polinomial de
quinto orden por un factor de manera que se elimine una de sus races por
ejemplo 3 + x y se tiene una funcin de cuarto orden:

4 3 2
4
10 27 2 40 ) 2 )( 5 )( 4 )( 1 ( ) ( x x x x x x x x x f = + = Con residuo cero
para este caso.

As se tiene que la forma general
n
(x)=a
0
+a
1
x+a
2
x
2
+...+a
n
x
n
entre un factor x
t dar un segundo polinomio de un orden mas bajo
n - 1
(x) = b
1
+ b
2
x + b
3
x
2

+ . . . + b
n
x
n 1
ec 2)

con residuo
0
b R =

en donde los coeficientes son
obtenidos por la relacin de recurrencia:
n n
a b =
n n n
rb a b + =
1 1

2 1 + +
+ + =
i i i i
sb rb a b , para i=n-1 hasta 0.
Para permitir la evaluacin de races complejas este mtodo divide la funcin
entre el factor cuadrtico:
s rx x
2

Aplicndolo en la ecuacin
n
(x)= a
0
+ a
1
x + a
2
x
2
+ . . . + a
n
x
n


Resultando:
n - 2
(x) = b
2
+ b
3
x + . . . . + b
n 1
x
3
+ b
n
x
n 2


Con residuo:
0 1
) ( b r x b R + =

Ec. 3

Y aplicando la relacin de recurrencia se obtiene los siguientes coeficientes
para la ecuacin anterior:
a Ec a b
n n
4 . =

b Ec rb a b
n n n
4 .
1 1
+ =


2 1 + +
+ + =
i i i i
sb rb a b , para i=n-2 hasta 0. Ec. 4c

Se introduce el factor cuadrtico para la determinacin de las races
complejas, por que si los coeficientes del polinomio original son reales, las
races complejas se presentan en pares conjugados.

Si s rx x
2
es un divisor exacto del polinomio, las races complejas pueden
ser determinadas con la formula cuadrtica por lo que el mtodo se reduce
solo a determinar r y s que provocan que el factor cuadrtico sea un divisor
exacto y por consiguiente se obtiene un residuo igual a cero.

Entonces si 0 ) (
0 1
= + = b r x b R ,b
1
y b
0
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 b
1
yb
0
tiendan a cero para ello se utiliza una tcnica similar a la de
Newton Raphson.

Pues
0
b

como
1
b son funciones de r y s y se expanden utilizando la serie de
Taylor:
ds
s
b
dr
r
b
b ds s dr r b

+ = + +
1 1
1 1
) , (
5 . ) , (
0 0
0 0
Ec ds
s
b
dr
r
b
b ds s dr r b

+ = + +
Los valores de la parte izquierda de la igualdad son evaluados en r y s.
Obsrvese que el segundo termino y el termino de orden superior se han
despreciado. Ya que en forma implcita r y s son muy pequeos y los
trminos de orden superior pueden ser despreciados, pero otra consideracin
es que los valores de inicio de son tan cercanos a los valores der y s de las
races.

Para dar un valor inicial que se acerque a las races es el poner la ec. 5) igual
a cero y que resulte:
7 .
6 .
0
0 0
1
1 1
Ec b s
s
b
r
r
b
Ec b s
s
b
r
r
b
=


Si las variables s y r forma un sistema de ecuaciones de dos incgnitas y
el mtodo de Bairstow muestra que las derivadas parciales pueden resolverse
por divisin sinttica de las b en forma similar en al camino en que las b en s
mismas fueron derivadas:

2 1
1 1
+ +

+ + =
+ =
=
i i i i
n n n
n n
sc rc b c
rc b c
b c
Para 2 = n i a 0

Entonces las derivadas parciales se obtienen por divisin sinttica de las b y
las b con las derivadas parciales son sustituidas en las ecuaciones 6 y 7 y se
obtiene:
0 2 1
1 3 2
b s c r c
b s c r c
= +
= +

Estas ecuaciones pueden ser resueltas para mejorar los valores de r y s, se
podra utilizar el error aproximado para cada paso pero no es para nuestro
caso realmente utilizado pero quedara de la siguiente forma:
% 100
,
r
r
r a

=
y
% 100
,
s
s
s a

=
Cuando los dos valores fallan bajo un criterio especificado las races pueden
determinarse con la siguiente ecuacin:
2
4
2
s r r
x
+
=
Aqu pueden caber tres posibilidades:

El cociente es un polinomio de tercer orden o mayor. Para este caso, el
mtodo de Bairstow podra 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 aplicacin.
El cociente es cuadrtico. Para este caso, el residuo de las races puede
evaluarse con la ecuacin 11)
El cociente es un polinomio de primer orden. Para este caso, el residuo
es una sola raz que puede evaluarse simplemente como: X =
- s
/
r


Ejemplo:

Emplee el mtodo de Bairstow para determinar las races del polinomio
25 . 1 875 . 3 125 . 2 75 . 2 5 . 3 ) (
2 3 4 5
5
+ + + = x x x x x x f
Use los valores iniciales de 1 = = s r e iterando a un nivel de % 1 =
s


Solucin: Se utilizan las ecuaciones apropiadas para calcular
1
5
= b
5 . 4
4
= b
25 . 6
3
= b
375 . 0
2
= b
5 . 10
1
= b
375 . 11
0
= b

Luego:

375 . 16
875 . 4
75 . 10
5 . 5
1
1
2
3
4
5
=
=
=
=
=
c
c
c
c
c


As, las ecuaciones simultneas para resolver r y s son

375 . 11 875 . 4 375 . 16
5 . 10 75 . 1 875 . 4
=
= +
s r
s r


Las cuales pueden resolverse para r =0.3558 y s =1.1381. Por lo tanto, los
valores iniciales pueden corregirse como:

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

Y el error aproximado puede ser calculado as:

% 1 . 824 % 100
1381 . 0
1381 . 1
% 23 . 55 % 100
6442 . 0
3558 . 0
,
,
= =
=

=
s a
r a
y



El siguiente clculo es repetir usando los valores revisados para r y s.

1304 . 2
8013 . 1
0276 . 2
5578 . 5
1442 . 4
1
0
1
2
3
4
5
=
=
=
=
=
=
b
b
b
b
b
b


Y luego:

1
5
= c
7884 . 4
4
= c
7806 . 8
3
= c
3454 . 8
2
= c
7874 . 4
1
= c

Por lo tanto se debe resolver

1304 . 2 3454 . 8 7874 . 4
8013 . 1 7806 . 8 3454 . 8
=
= +
s r
s r


Para 1331 . 0 = r y 3316 . 0 = s , los cuales pueden usarse para estimar la raz
correcta como

r = -0.6442 + 0.1331 = - 0.5111
s = 0.1381 + 0.3316 = - 2.1304

% 6 . 70
% 0 . 26
,
,
=
=
s a
r a
y



El clculo puede continuar, con el resultado despus de cuatro iteraciones, el
mtodo converge a los valores de r = -0.5 ( % 063 . 0
,
=
r a
) y s = 0.5
( % 040 . 0
,
=
s a
). La frmula general puede emplearse para evaluar las races
como

0 . 1 , 5 . 0
2
) 5 . 0 ( 4 ) 5 . 0 ( 5 . 0
2
=
+
= x

En este punto, el cociente es la ecuacin cbica

5 . 2 25 . 5 4 ) (
2 3
+ = x x x x f

El mtodo 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

i x 499 . 0 1
2
) 249 . 1 ( 4 ) 2 ( 2
2
=
+
=

En este punto, el cociente es un polinomio de primer orden que puede ser
directamente evaluado para determinar la quinta raz 2.

Aqu el cdigo de una funcin que saca los factores cuadrticos 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("Loss of precision\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;
}

ARCHIVO EN MATLAB DEL METODO DE BAIRSTOW

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 ecuacin
it=0; %se inicia el contador de iteraciones
limit_it=1000; %se define el limite en el numero de iteraciones
tol=.0001; %se define la tolerancia de la estimacin
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 races del polinomio
if (n-1>=3);
else break,end %condicin si el grado de la raz es mayor a 3
t=[1 r s]; %esta es el polinomio cuadrtico de inicio
it=it+1; %se incrementa en 1 la iteracin
[x,y]=deconv(z,t); %se divide la ecuacin 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 funcin 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 inversin de ellos
c(n-m)=z(i)+(-r*x(n-m-1))+(-s*x(n-m-2));%algoritmo de inversin
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 clculos de los coeficientes
m=n-i; %hasta el grado mximo 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 condicin 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 cuadrtico.
raiz(ri)=x2;
xx=[x1,x2]'; %valor del polinomio que divide exactamente a la ecuacin
tt=poly(xx); %cambio de variable para efectuar nuevamente la divisin
[x3,y]=deconv(z,tt); %se efecta la divisin
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) %condicin 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 ecuacin 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 ecuacin que se introduce es de primer
if (abs(z(2))>=tol)
ri=ri+1;
x1=-z(2)/z(1); %grado solamente se hace la sustitucin.
else
x1=0;
end
raiz(ri)=x1;
x1;
end
if (n-1)==0 %si el valor de la ecuacin 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

You might also like