DSPRelated.com
Forums

"Unit-Circle" Equivalent of Matlab's roots()?

Started by Randy Yates September 15, 2004
Is there a function in Matlab that will take as input a complex
polynomial and return the points on the unit circle at which the
polynomial goes to zero?
-- 
%  Randy Yates                  % "...the answer lies within your soul
%% Fuquay-Varina, NC            %       'cause no one knows which side
%%% 919-577-9882                %                   the coin will fall."
%%%% <yates@ieee.org>           %  'Big Wheels', *Out of the Blue*, ELO
http://home.earthlink.net/~yatescr
"Randy Yates" <yates@ieee.org> wrote in message
news:llfb6w5k.fsf@ieee.org...
> Is there a function in Matlab that will take as input a complex > polynomial and return the points on the unit circle at which the > polynomial goes to zero?
Randy, I don't think so. Not all polynomials have zeros on the unit circle - in fact, not many unless the polynomical represents a filter design with a stop band. You can use something like "roots", convert them to polar coordinates and then search for magnitudes at or near 1.0. Fred
"Randy Yates" <yates@ieee.org> wrote in message
news:llfb6w5k.fsf@ieee.org...

> Is there a function in Matlab that will take as input a complex > polynomial and return the points on the unit circle at which the > polynomial goes to zero?
Have you tried the 90&#4294967295; rotation on the Riemann sphere w = (-i*z+1)/(z-i) ? You could make this substitution for P(w), multiply by (z-i)^length(P), isolate the real and imaginary parts of the resulting polynomial, and find roots of both parts. A common real root z could then be converted to the corresponding w on the unit circle. -- write(*,*) transfer((/17.392111325966148d0,6.5794487871554595D-85, & 6.0134700243160014d-154/),(/'x'/)); end
>>>>> "Randy" == Randy Yates <yates@ieee.org> writes:
Randy> Is there a function in Matlab that will take as input a complex Randy> polynomial and return the points on the unit circle at which the Randy> polynomial goes to zero? No, I don't. In addition to what others have said, you could do the following, if P(z) is your polynomial. Let z = exp(j*w), since you want roots on the circle. If there are roots on the circle, P(exp(j*w)) = 0. Expand P(exp(j*w)) out in terms of sin(w*n) and cos(w*n). Since sin(w*n) and cos(w*n) can be written as sums of powers of sin(w) and/or cos(w), you will have a polynomials in powers of sin(w) and cos(w). Solve one of these, and find possible values of w. Use these values in the other verify that it is a solution. Straight-forward, I think, but not builtin. There might be some gotcha's, though---I didn't work it all out in detail. Ray