Control System Toolbox 8.4
Using FEEDBACK to Close Feedback Loops
This demo shows why you should always use FEEDBACK to close feedback loops.
Contents
Two Ways of Closing Feedback Loops
Consider the following feedback loop
where
K = 2; G = tf([1 2],[1 .5 3])
Transfer function:
s + 2
---------------
s^2 + 0.5 s + 3
You can compute the closed-loop transfer function H from r to y in at least two ways:
- Using the feedback command
- Using the formula

To compute H using feedback, type
H = feedback(G,K)
Transfer function:
s + 2
---------------
s^2 + 2.5 s + 7
To compute H from the formula, type
H2 = G/(1+G*K)
Transfer function:
s^3 + 2.5 s^2 + 4 s + 6
-----------------------------------
s^4 + 3 s^3 + 11.25 s^2 + 11 s + 21
Why Using FEEDBACK is Better
A major issue with computing H from the formula is that it inflates the order of the closed-loop transfer function. In the example above, H2 has double the order of H. This is because the expression G/(1+G*K) is evaluated as a ratio of the two transfer functions G and 1+G*K. If

then G/(1+G*K) is evaluated as:

As a result, the poles of G are added to both the numerator and denominator of H. You can confirm this by looking at the ZPK representation:
zpk(H2)
Zero/pole/gain:
(s+2) (s^2 + 0.5s + 3)
---------------------------------
(s^2 + 0.5s + 3) (s^2 + 2.5s + 7)
This excess of poles and zeros can negatively impact the accuracy of your results when dealing with high-order transfer functions, as demonstrated in the next example. This example involves a 17th-order transfer function G. As you did before, use both approaches to compute the closed-loop transfer function for K=1:
load numdemo G H1 = feedback(G,1); % good H2 = G/(1+G); % bad
To have a point of reference, also compute an FRD model containing the frequency response of G and apply feedback to the frequency response data directly:
w = logspace(2,5.1,100); H0 = feedback(frd(G,w),1);
Then compare the magnitudes of the closed-loop responses:
h = sigmaplot(H0,'b',H1,'g--',H2,'r'); legend('Reference H0','H1=feedback(G,1)','H2=G/(1+G)','location','southwest' ) setoptions(h,'YlimMode','manual','Ylim',{[-60 0]})
The frequency response of H2 is inaccurate for frequencies below 2e4 rad/s. This inaccuracy can be traced to the additional (cancelling) dynamics introduced near z=1. Specifically, H2 has about twice as many poles and zeros near z=1 as H1. As a result, H2(z) has much poorer accuracy near z=1, which distorts the response at low frequencies. See the demo "Using the Right Model Representation" for more details.
Store