# finding poles of a function

Is there a command to find the poles of a function $f=f(z)$?

example: let $$f(z) = \frac{1}{z^2-1}$$ then we know that the poles are at $z=\pm 1$ but is there a special command in mathematica to do this?

• Solve[1/f[z] == 0, z]? – Michael E2 Jun 12 '13 at 15:38
• OK I thought there was some special command like Pole[f,z] or similar. Thanks, I'll try that. – mapel Jun 12 '13 at 15:40
• Or, if you want to handle things like Tan[]: Reduce[1/Tan[x] == 0, x]]. Should work nicely for rational functions, too. – J. M. is away Jun 12 '13 at 15:43
• @J. M. I think that is easier/smoother. – mapel Jun 12 '13 at 15:49
• sometimes I use Solve[Denominator[f[z]]==0,z], but I would say this question is good because I also expect something much easier and more automatic (in case one doesn't want to organize the expression of f[z]). – Leo Fang Jun 12 '13 at 16:31

There is a special function for this: it's called TransferFunctionPoles. For the case you asked for:

TransferFunctionPoles[TransferFunctionModel[{{1/(z^2 - 1)}}, z]]


which returns the expected answer that there are two poles at

{{{-1, 1}}}


TransferFunctionPoles can also handle multivariable input/output models of the kind that control engineers like to play with, including symbolic transfer functions and time-delay systems. There are a number of related commands including TransferFunctionZeros, TransferFunctionModel, StateSpaceModel ways of converting continuous to discrete models, and special plotting functions like RootLocusPlot and NyquistPlot.

• It doesn't work with Tan[z]. It complains about polynomial numerators and denominators. Is this method restricted to rational functions? – Michael E2 Jun 12 '13 at 17:18
• @@Michael E2 -- Whenever you see the phrase "transfer function," it implies rational functions. – bill s Jun 12 '13 at 18:12

Use FunctionDomain to find the real domain, then remove the whole line from the domain found. What is left are the poles. (this is all on the real line)

ClearAll[f,z]
f         = 1/(z^2-1)
domain    = FunctionDomain[f,z,Reals];
wholeLine = -Infinity < z < Infinity;

Reduce[ wholeLine && Not[domain],z,Reals]


f         = Tan[z];
domain    = FunctionDomain[f,z,Reals];
wholeLine = -Infinity<z<Infinity;

Reduce[ wholeLine && Not[domain],z,Reals]


It works for 2D also

ClearAll[f,x,y]
f         = 1/x Log[y];
domain    = FunctionDomain[f,{x,y},Reals];
wholeLine = {-Infinity<x<Infinity && -Infinity<y<Infinity};

Reduce[Join[wholeLine,{Not[domain]}],{x,y},Reals]