% vres = polyadd(v1,v2) % Performs polynomial addition, and returns the result. All polynomials % are expressed as vectors with the following format: % The first element describes the lowest order of the terms in the % polynomial, while the rest of the elements give the coefficients % of the terms starting with the lowest order term. % % e.g. v = [3 2 4 1] corresponds to 2*x^3+4*x^4+x^5 % % George Ginis, May 2001 function vres = polyadd(v1,v2); % polynomial length (must be equal for both v1 and v2) len = length(v1); if (length(v1) ~= length(v2)) disp('Vectors in polyadd have unequal length!'); exit; end d1 = v1(1); % lowest order of polynomial 1 d2 = v2(1); % lowest order of polynomial 2 p1 = v1(2:len); % coefficients of polynomial 1 p2 = v2(2:len); % coefficients of polynomial 2 if (d1 == d2) % polynomials have the same degree vres(1) = d1; vres(2:len) = p1+p2; elseif (d1 > d2) % first polynomial has higher degree diff = d1-d2; p1new=zeros(1,len-1); p1new(1+diff:len-1) = p1(1:len-diff-1); % perform "shift" of p2 vres(1) = d2; vres(2:len) = p1new+p2; else % (d1 < d2) second polynomial has higher degree diff = d2-d1; p2new=zeros(1,len-1); p2new(1+diff:len-1) = p2(1:len-diff-1); % perform "shift" of p1 vres(1) = d1; vres(2:len) = p1+p2new; end