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