Research Article

Polynomial GCD Derived through Monic Polynomial Subtractions

Algorithm 3

function Z = poly_roots(p)
%*** Solve multiple-root polymonials ***
%
  mz = length(p)-max(find(p));
  p0 = p(min(find(p)):max(find(p)));
  q0 = polyder(p0);
if length(p0) < 2, Z = [0,mz]; return, end;
  g = polygcd(p,q);
  u0 = deconv(p0,g0);
  v0 = deconv(q0,g0);
  w0 = polyder(u0);
  z0 = roots(u0);
  m0 = polyval(v0,z0)./polyval(w0,z0);
  Z = [z0,round(abs(m0))];
if mz > 0, Z = [Z; 0,mz]; end;