You are on page 1of 2

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=0.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);
endif (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