Transfer function with transfer function numerator greater than denominator
Show older comments
How can I make a linearized transfer functions with the numerator greater than denominator as below

Answers (1)
Not sure how to answer this. Evaluating from the mathematical perspective, you can probably understand the following and implement that in your work. I'll start with a general improper rational function:

which can be rewritten as follow:

I'll go with
first and perform the long division to obtain
.Next, perform the same procedure on 
Now, they can summed up and simplified as

where


Example:

a = 7;
b = 5;
c = 3;
p = 2;
q = 1;
s = tf('s');
G1 = (7*s^2 + 5*s + 3)/(2*s + 1)
kp = b/p - a*q/p^2; % p-gain
kf = (a*q^2)/p^2 - b*q/p + c; % f-gain
kd = a/p; % d-gain
G2 = kp + kf/(p*s + q) + kd*s
In this form,
, you isolate them and know what each term does.
Edit: If you want to implement this improper transfer function in Simulink, then this is one of the ways to do it.
a = 7;
b = 5;
c = 3;
p = 2;
q = 1;
kp = b/p - a*q/p^2; % p-gain
kf = (a*q^2)/p^2 - b*q/p + c; % f-gain
kd = a/p; % d-gain


8 Comments
Nguyen Bao Long
on 24 Jun 2022
Walter Roberson
on 24 Jun 2022
Simulink's transfer function block can never have a higher numerator degree than denominator degree.
I just experimented, and seem to have been successful in using MATLAB to build an "improper" transfer function (with numerator degree higher than denominator degree); I then used ss() on the transfer function to created a state-space model. I then extracted the A, B, C, D matrices from the state space representation, and entered them into a Simulink State Space block. The resulting code ran (I don't know if the result is "right" )
Nguyen Bao Long
on 24 Jun 2022
I don't think it is "right." With an improper tf, the state space model is in descriptor form, i.e., the E matrix is not an identity
sys = ss(tf([7 5 3],[2 1]));
sys.E
The State Space block doesn't operate with descriptor form (neither does the LTI System block).
Walter Roberson
on 24 Jun 2022
Thanks for pointing that out; I had not encounted that before.
Paul
on 24 Jun 2022
That model is technically correct, which is the best kind of correct, but using a derivative block for simulation is not recommended. Typically, it's replaced with a tf of the form s/(as + 1) with a small enough so that the tf has the same response as the derivative at the low frequencies of interest.
I have edited the Answer to demo how to implement the improper transfer function in Simulink using basic blocks. By the way, if you find the mini tutorial and Simulink model are helpful, please consider accepting ✔ and voting 👍 the Answer. Thanks!
Walter is right that Simulink cannot accept improper transfer function where the degree of the numerator is greater than the degree of the denominator.
Paul is right that another way to implement the improper transfer function in Simulink is to use the Descriptor State-Space. In fact, the improper transfer function is also similar to the ideal PID Controller. But I think it maybe a little advanced to explain that at this stage, if you haven't grasped the basic theory about state-space modeling.

Edit: Paul is also correct about replacing the ideal Derivative block with the Filtered Derivative for practical reasons.

Paul
on 24 Jun 2022
I did not know about that Descriptor State Space block, thanks for pointing it out. For singular E it looks like it implements a differential-algebraic equation (DAE). I've used Simulink in the past for DAE systems and it worked fine, albeit a bit more slowly, Having said that, I would avoid it if possible: Algebraic Loop Concepts.
There are other strategies for dealing with an improper transfer function in Simulink that may be applicable depending on the model. I'm pretty sure that there is a doc page that discusses this issue, but as usual can't find it when I need to, or maybe I'm imagining it.
Categories
Find more on Simulink in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!