First, I define the following transfer functions using TransferFunctionModel:

tfmGc[s_, a_, t_] := TransferFunctionModel[(1 + a*t*s)/(1 + t*s), s];
tfmGp[s_, k_] := TransferFunctionModel[k/(s*(s + 5)), s];

Next, the two transfer functions above are connected in series using SystemsModelSeriesConnect, and a unity feedback connection is established using SystemsModelFeedbackConnect to produce the open loop and closed loop transfer functions respectively:

tfmOLTF[s_, a_, t_, k_] := SystemsModelSeriesConnect[tfmGc[s, a, t], tfmGp[s, k]];
tfmCLTF[s_, a_, t_, k_] := SystemsModelFeedbackConnect[tfmOLTF[s, a, t, k]];

Finally, I evaluate tfmCLTF with the following parameters:

a1 = 0.166521;
t1 = 12.010533;
k1 = 9;

tfmCLTF[s, a1, t1, k1] // TransferFunctionExpand

Mathematica produces the following result:

Result of tfmCLTF[s, a1, t1, k1] // TransferFunctionExpand

My question is: Is there a way to change this so that the coefficients are not too large?

Thanks in advance!


1 Answer 1


You can get rid of those large coefficients by using TransferFunctionCancel.

tfmCLTF[s, a1, t1, k1] // TransferFunctionCancel // TransferFunctionExpand // Chop

enter image description here

I'm not quite sure why it produces them in the first place.

(You may also consider using TransferFunctionFactor instead of TransferFunctionCancel, because the latter will also cancel common pole-zero pairs. This does not happen in this case.)

  • $\begingroup$ Thanks for your quick response! It worked! $\endgroup$
    – Patrick D
    May 14, 2020 at 16:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.