Research Article

Polynomial GCD Derived through Monic Polynomial Subtractions

Algorithm 1

function g = polygcd(p,q)
%*** Find GCD of two given polynomials ***
%   through “Monic polynomial subtraction”
%   by F C Chang 03/03/2011
%
  mz = min(length(p)-max(find(p)),length(q)-max(find(q)));
  p0 = p(min(find(p)):max(find(p)));
  q0 = q(min(find(q)):max(find(q)));
if min(length(p0),length(q0)) < 2,
  g = [1,zeros(1,mz)]; return, end;
  g1 = p0/p0(1);              P{1} = g1;
  g2 = q0/q0(1);              P{2} = g2;
for k = 3:length(p0) + length(q0),
  l12 = length(g1)-length(g2); l21 = -l12;
  g3 = [g2,zeros(1,l12)]-[g1, zeros(1,l21)];
  g3 = g3(min(find(abs(g3)>1.e-8)):max(find(abs(g3)>1.e-8)));
  if norm(g3,inf)/norm(g2,inf) < 1.e-3, break; end;
  if length(g1) >= length(g2),
  g1 = g2;            end;
  g2 = g3/g3(1);              P{k} = g2;
end;
  g = [g1,zeros(1,mz)];
                     % celldisp(P);