Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Topic: Help with a function for plotting zeros and poles
Replies: 4   Last Post: Mar 19, 2014 4:24 AM

 Messages: [ Previous | Next ]
 Bob Hanlon Posts: 906 Registered: 10/29/11
Re: Help with a function for plotting zeros and poles
Posted: Mar 19, 2014 4:24 AM

Clear[zeroPole]

zeroPole[tf_TransferFunctionModel] :=
First /@
Map[{Re[#], Im[#]} &,
Flatten[Through@{TransferFunctionZeros, TransferFunctionPoles}@tf,
1], {3}];

tf1 = TransferFunctionModel[(3 (13/8 + s))/(2 (3/2 (13/8 + s) +
s (1 + s) (2 + s) (5 + s))), s];

tf2 = TransferFunctionModel[(199 +
344 s)/(16 (s (1 + s) (2 + s) (5 + s) + 1/16 (199 + 344 s))), s];

N@zeroPole[tf1]

{{{-1.625, 0.}}, {{-0.5, 0.}, {-0.5, 0.}, {-5.08114, 0.}, {-1.91886, 0.}}}

N@zeroPole[tf2]

{{{-0.578488, 0.}}, {{-0.5, 0.}, {-5.97986,
0.}, {-0.760068, -1.89264}, {-0.760068, 1.89264}}}

Bob Hanlon

On Tue, Mar 18, 2014 at 5:20 PM, Eduardo M. A. M. Mendes <
emammendes@gmail.com> wrote:

> Dear Bob
>
> Many thanks but there is a problem: in the output of the new zeroPole
> function there is no distinction between poles and zeros (Please see the
> output of the old zeroPole function).
>
> Again I have no idea how to get this right. Changes on the level of
> Flatten won't do.
>
> Cheers
>
> Ed
>
>
> On Mar 18, 2014, at 12:18 PM, Bob Hanlon <hanlonr357@gmail.com> wrote:
>
> Clear[zeroPole]
>
> zeroPole[tf_TransferFunctionModel] :=
> {Re[#], Im[#]} & /@
> Flatten[
> Through@
> {TransferFunctionZeros, TransferFunctionPoles}@
> tf];
>
> tf1 = TransferFunctionModel[
> (3 (13/8 + s))/(2 (3/2 (13/8 + s) + s (1 + s) (2 + s) (5 + s))), s];
>
> tf2 = TransferFunctionModel[
> (199 + 344 s)/(16 (s (1 + s) (2 + s) (5 + s) + 1/16 (199 + 344 s))), s];
>
> N@zeroPole[tf1]
>
> {{-1.625, 0.}, {-0.5, 0.}, {-0.5, 0.}, {-5.08114, 0.}, {-1.91886, 0.}}
>
> N@zeroPole[tf2]
>
> {{-0.578488, 0.}, {-0.5, 0.}, {-5.97986,
> 0.}, {-0.760068, -1.89264}, {-0.760068, 1.89264}}
>
>
> Bob Hanlon
>
>
>
> On Sat, Mar 15, 2014 at 3:46 AM, Eduardo M. A. M. Mendes <
> emammendes@gmail.com> wrote:
>

>> Hello
>>
>> Sometime ago I found a couple of functions that are used for plotting the
>> poles and zeros of a transfer function. Here they are:
>>
>>
>> xyPoints[values_]:=Module[{xy},xy=Flatten[Replace[values,{Complex[x_,y_]:>{x,y},x_?NumericQ:>{x,0}},{3}],1];Cases[xy,{_?NumericQ,_?NumericQ},{2}]
>> ];
>>
>> zeroPole[tf_]:=Module[{zp,zp0},zp0=Through@
>> {TransferFunctionZeros,TransferFunctionPoles}@tf;
>> zp=FixedPoint[ReplaceAll[#,{}->{-100}]&,zp0];
>> xyPoints/@zp];
>>
>> zeroPole is a modification of the actual plot function (I have only
>> removed the plot command).
>>
>> Here are two examples of using the functions
>>
>> tf1=TransferFunctionModel[(3 (13/8+s))/(2 (3/2 (13/8+s)+s (1+s) (2+s)
>> (5+s))),s]
>> tf2=TransferFunctionModel[(199+344 s)/(16 (s (1+s) (2+s) (5+s)+1/16
>> (199+344 s))),s]
>>
>> N@zeroPole[tf1]
>> {{{-1.625,0.}},{{-0.5,0.},{-0.5,0.},{-5.08114,0.},{-1.91886,0.}}}
>>
>> N@zeroPole[tf2]
>> {{{-0.578488,0.}},{{-0.5,0.},{-5.97986,0.},{-0.760068-1.89264
>> I,0.},{-0.760068+1.89264 I,0.}}}
>>
>> The functions does what I expected for the first example, but not for the
>> second example (the real and imaginary parts of the complex poles are not
>> dealt with).
>>
>> Can someone tell me what is wrong? And how to modify xyPoints (Although
>> I understand what the functions does I am not sure what to do)?
>>
>> Many many thanks
>>
>> Ed
>>
>>
>>

>
>

Date Subject Author
3/19/14 Bob Hanlon
3/19/14 emammendes@gmail.com
3/19/14 Bob Hanlon