MÉTODO
DE BAIRSTOW
INTEGRANTES:
DANIELA OROZCO MARTÍNEZ
MATÍAS CORTEZ CORTEZ
RENNY ANTONIO CHOQUE RODRIGUEZ
KATHERINE MICALSALGUERO AJHUACHO
RISTER YASIR ARCE CUELLAR
INTRODUCCION:
• El método de Bairstow es un algoritmo eficiente de búsqueda de las raíces de un polinomio real de
grado arbitrario; es un método iterativo relacionado con los métodos de Muller y Newton Raphson.
• En qué consiste?
El método de Bairstow consiste en un
proceso iterativo en que primero, la
función dada se le da un valor inicial, el
cual se introduce a un factor que se usará
para dividir el polinomio entre él.
Leonard Bairstow
(1880-1963)
REQUISITOS PREVIOS DEL MÉTODO
• Función declarada.
-Se requieren de valores r y s para la creación de un factor
- Un error / tolerancia
DIFERENCIA ENTRE EL MÉTODO BAIRSTOW Y
OTROS MÉTODOS.
-El método de Bairstow es un algoritmo eficiente de búsqueda de las raíces de
un polinomio real de grado arbitrario. Es un método iterativo, basado en el método de
Müller y de Newton Raphson.
-Para poder encontrar raíces con este método necesitamos conocer el grado del polinomio a resolver,
cuáles son sus coeficientes y dos factores, r y s, los cuales son necesarios para efectuar la división
sintética.
La principal diferencia de este método, respecto a otros, es que permite calcular todas las raíces de
un polinomio (reales e imaginarias), utilizando únicamente aritmética real.
DEDUCCION DE LA FORMULA DE BAIRSTOW
Requisitos para realizar el método de Bairstow:
• Función declarada
• Valores iniciales del divisor (r y s)
• Error
DEDUCCIÓN
Divide el polinomio:
Pn(x)= a0+a1x+a2x2+…+anxn,a0≠0
Entre el factor cuadrático:
X2-rx-s
Obteniendo:
Pn-2(x)= b2+b3x+…+bn-1xn-3+bnxn-2
Con un residuo:
R=b1(x-r)+b0
DEDUCCIÓN
El factor cuadrático se introduce para permitir la determinación de las
raíces complejas, si los coeficientes del polinomio original son reales,
las raíces se presentan en pares conjugados, asi si x2-rx-s es un divisor
exacto, las raíces complejas pueden determinarse mediante la formula
cuadrática:
R= b1(x-r)+b0=0 b1 y b0 =0
Como b1 y b0 son función de r y s se pueden expandir usando una serie
de Taylor, así:
DEDUCCIÓN
Igualando a cero:
Que es el sistema de ecuaciones a resolver
DEDUCCIÓN
Para hacerlo, Bairstow demostró que las derivadas parciales se pueden
obtener haciendo un procedimiento similar a la división sintética. Así:
DEDUCCIÓN
Por lo tanto se obtienen las siguientes igualdades:
Y el sistema de ecuaciones a resolver se puede reescribir de la
siguiente manera:
DEDUCCIÓN
Para calcular errores:
EJEMPLO Y IMPLEMENTACIÓN DEL MÉTODO
BIRSTOW EN UN LENGUAJE DE PROGRAMACIÓN
IMPLEMENTACION
a=input('Ingrese punto a: '); %pide ingresar puntos (r,s) y tolerancia
IMPLEMENTACION EN EL SOFTWARE MATLABb=input('Ingrese punto b: ');
tool=input('\nIngrese la tolerancia: ');
y(1)=1;% asegura que el primer termino de cada division sea 1
clear all; %limpio variables
z(1)=1;
clc; %Limpio pantalla while t(1)~=1 %Este ciclo obliga a que el termino que acompa�a la variable de mayor grado deba ser igual a 1
fprintf('\n\nerror el primer termino deber ser de valor 1, vuelva a ingresar polinomio...' )
syms x % declaro variables simbolicas clear all; %limpio variables
syms x % declaro variables simbolicas
t =[]; %declaro variables a usar t =[]; %declaro variables a usar
y =[];
y =[]; %guarda primer division sintetica
e=[];
e=[]; %permite reducir orden del polinomio u=0;
z=[]; %guarda segunda division sintetica n=2;
u=0; %permite edentificar cada caso g=0;
n=2; %permite asegurar el orden del polinomio se reduzca de dos en dos h=[];
g=0; o=[];
errora=1; %inicializo error
h=[]; %guarda salidas raices
errorb=1;
o=[]; %guarda salidas raices tool=0; %inicializo tolerancia
errora=1; %inicializo error f=input('\nIngrese la funcion: '); %pide ingresar la funcion
errorb=1; coeffs(f); %calcula coeficientes polinomio
tool=0; %inicializo tolerancia t=sym2poly(f); %reorganiza polinomio
f=input('\nIngrese la funcion: '); %pide ingresar la funcion k=length(t); %calcula grado del polinomio
u=length(t); %variable por conveniencia, permite diferenciar si polinomio es mayor a grado 3
p=length(t); % variable por conveniencia, se usa como contador
coeffs(f); %calcula coeficientes polinomio x=k; % variable por conveniencia, permite imprimir cada caso
t=sym2poly(f); %reorganiza polinomio a=input('Ingrese punto a: '); %pide ingresar puntos y tolerancia
k=length(t); %calcula grado del polinomio b=input('Ingrese punto b: ');
u=length(t); %variable por conveniencia, permite diferenciar si polinomio es mayor a grado tool=input('\nIngrese la tolerancia: ');
3 y(1)=1;
z(1)=1;
p=length(t); % variable por conveniencia, se usa como contador
end
x=k; % variable por conveniencia, permite imprimir cada caso
if tool>abs(errora) | tool>abs(errorb) & u>=3 %si polinomio del cociente es de grado
if u==2 %si el polinomio a resolver es de grado 1 la raiz sale y=fliplr(y);%reorganiza polinomios resultantes de las 3 o mayor
directamente divisiones respectivas r1=(a+(a^2+4*b)^(1/2))/2;
r1=-t(2); z=fliplr(z); r2=(a-(a^2+4*b)^(1/2))/2;
tool=1; da=(y(1)*z(3)-y(2)*z(2))/((z(2))^2-z(1)*z(3));%calculo g=g+1;
end pasos del metodo o(g)=r1; %guarda las raices
if u==3 %Si el polinomio es de grado 2 se realiza el siguiente ciclo db=(y(2)*z(1)-y(1)*z(2))/((z(2))^2-z(1)*z(3)); h(g)=r2; %guarda las raices
r1=(-t(2)+((t(2))^2-4*t(3))^(1/2))/2; %calcula raices y=fliplr(y); %reorganiza polinomios resultantes de las for j=1:p-n %permite reducir orden del polinomio resultante
r2=(-t(2)-((t(2))^2-4*t(3))^(1/2))/2; divisiones respectivas e(j)=y(j);
end z=fliplr(z); end
while u>3 %si el polinomio ingresado es de grado 3 o mayor se realiza errora=da/a;%recalcula errores y=e; %se asignan nuevos valores a variables necesarias
el siguiente ciclo errorb=db/b; z=[];
for i=1:k-1 a=a+da; %calcula nuevos valores de a y b z(1)=1;
if i<2 b=b+db; t=e;
y(i+1)=a*t(i)+t(i+1);%permite calcular primer division sintetica u=length(y);%calcula el grado del polinomio obtenido k=length(y);
else como cociente u=length(y);
y(i+1)=a*y(i)+b*y(i-1)+t(i+1); if tool>abs(errora) | tool>abs(errorb) & u==1 %si n=n+2; % asegura que el grado del polinomio se disminuya de 2 en 2
end polinomio del cociente es de grado 1 errora=1; %reinicia errores
end r5=(-a/b); errorb=1;
for i=1:k-2 %permite calcular segunda division sintetica end e=[];
if i<2 if tool>abs(errora) | tool>abs(errorb) & u==2 %si end
z(i+1)=a*y(i)+y(i+1); polinomio del cociente es de grado 2 end
else r3=(a+(a^2+4*b)^(1/2))/2;
z(i+1)=a*z(i)+b*z(i-1)+y(i+1); r4=(a-(a^2+4*b)^(1/2))/2; fprintf('Las raices son: \n\n');
end end
end if x==2
r1
end