Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3.3.2 Método de Bairstow
3.3.2 Método de Bairstow
Ejemplo en MATLAB
% METODO DE BAIRSTOW
% JUAN CARLOS ALDAZ ROSAS (CREDITOS)
% UNIVERSIDAD DE GUADALAJARA
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 permitira ir evaluando las races del polinomio
if (n-1>=3);else break,end%condicion si el grado de la raiz es mayor a 3
t=[1 r s];%esta es el polinomio cuadratico de inicio
it=it+1;%se incrementa en 1 la iteracion
[x,y]=deconv(z,t);%se divide la ecuacion 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 funcion a
c(2)=z(2)+(-r*c(1));%evaluar, en virtud de que el coeficiente de mayor
raiz(ri)=x2;
xx=[x1,x2]';%valor del polinomio que divide exactamente a la ecuacion
tt=poly(xx);%cambio de variable para efectuar nuevamente la division
[x3,y]=deconv(z,tt);%se efectua la division
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)%condicion 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 ecuacion 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 ecuacion que se introduce es de primer
if (abs(z(2))>=tol)
ri=ri+1;
x1=-z(2)/z(1);%grado solamente se hace la sustitucion.
else
x1=0;
end
raiz(ri)=x1;
x1;
end
if (n-1)==0%si el valor de la ecuacion que se introduce es una constante
fprintf('El valor que introduciste es una constante igual a:\n\n')
constante=z
end
raices=raiz';
sort raices;
raices