Está en la página 1de 2

% metodo de Bairstow para polinomios

clear all;
clc;

n=input('Grado del polinomio ');


for c=n+1:-1:1
fprintf('Coeficiente de graco %2.0f ',c-1);
A(c)=input(' ');

end

p=input('Valor inicial p ');


q=input('Valor inicial q ');
e=input('Error calculo ');
A(n+2)=0; A(n+3)=0;
B=A;
C=A;
dp=1;
dq=1;

while (abs(dp)>e && abs(dq)>e)


for c=n:-1:1
B(c) = A(c) - p*B(c+1)- q*B(c+2);
C(c) = B(c) - p*C(c+1)- q*C(c+2);
end
dp = (B(1)*C(4)-B(2)*C(3))/(C(2)*C(4)-C(3)*C(1));
p = p+dp;
dp = (B(2)*C(2)-B(1)*C(3))/(C(2)*C(4)-C(3)*C(1));
q = q+dq;
end
raizc=4*q-p*p
if raizc < 0
x1 = -p/2 + sqrt(-raizc);
x2 = -p/2 - sqrt(-raizc);
fprintf('La raiz es %10.6f i \n', x1);
fprintf('La raiz es %10.6f i \n', x2);
else
x1 = -p/2 + sqrt(raizc);
x2 = -p/2 - sqrt(raizc);
fprintf('La raiz es %10.6f \n', x1);
fprintf('La raiz es %10.6f \n', x2);
end
%generar grafica
i=0;
for x=k1-3:0.01:k1+3
i=i+1;
X(i) = x;
Y(i) = 0;
for c=n+1:-1:1
Y(i)=Y(i)+A(c)*x^(c-1);
end

end
plot(X,Y);
hold on;
plot(X,0);
plot(x1,0,'ro');

También podría gustarte