# How to calculate poles for a high order system?

I have a fourth order system which is fully controllable and observable, which needs to satisfy certain design criteria.

I am trying to design a full-state feedback controller for the following system:

$$\frac{-0.00198s + 2}{s^4 + 0.1201s^3 + 12.22s^2 + 0.4201s + 2}$$

Design Requirements:

<5% Overshoot
<2s settling time


The schematic of this type of control system is shown below where $$\K\$$ is a matrix of control gains. Note that here we feedback all of the system's states, rather than using the system's outputs for feedback. A related example, State-Space Methods for Controller Design.

While I am aware how to design second order systems using the above design requirements, I am struggling when it comes to higher order systems.

Below I present equations and working for finding poles for a second order system. Apologies if wording is hard to decipher. Poles for 2nd order @ -2.6 +- i*2.39

One would then proceed to use MATLAB place function as follows:

p2 = [-2.6 + 1i*2.39, -2.6 - 1i*2.39];
K = place(A,B,p2);

Acl = A - B*K;
mysys = ss(Acl,B,C,D);


Since this method only yields two poles, how can I satisfy my design requirements if I have a fourth order system?

This can also be thought of as designing a full state feedback controller to obtain the specific transient one requires. Closed loops dynamics and more specifically eigenvalues of matrix Acl have a lot to do with finding the desired poles. I am yet to fully understand how. Any suggestions would be appreciated.

• Are you permitted to turn this into a pair of 2nd order, with one band-pass and one low-pass? – jonk Nov 29 '18 at 21:23
• @jonk I would like to keep the system at 4th order. Using settling time and overshoot equations, one can extract a pair of complex poles. The other 2 poles might be obtained using a totally different method than the one presented above. I would also like to make the distinction between pole placement and pole calculation. I am not asking about pole placement per se (this is shown in MATLAB code), but how to find the poles required to satisfy the system requirements. Once calculated, one could proceed with pole placement. – Rrz0 Nov 29 '18 at 21:28
• I've not tackled this, directly. I'm a hobbyist and I would decompose everything down to 2nd order (and 1st order, if odd-ordered.) Looking at this as a math exercise, and not having any electronics training let alone for 4th order filters, I'd be looking at the amplitude response to get your overshoot equation. This would be a derivative of an 8th order, so a solution to a 7th order equation which must be zero at the peak, as I see it. Interesting problem, though. I don't have the time now to sit down with it but I hope to do so when I do, if someone else doesn't answer this. I already +1 it. – jonk Nov 29 '18 at 21:37
• This isn’t really an EE question. It’s all about solving a double quadratic equation and lies firmly in maths now matter how interesting it might be. One thought; solve it in excel or something similar by trial and error of two multiplied 2nd order equations. – Andy aka Nov 29 '18 at 21:44
• Google "Dominant pole". If it's a control problem you want to shove one pair of poles out to being significantly faster, then just design the second set of poles to your specifications. Alternately, start with a specification for a pole pair that would give you 2s settling and 2.5% overshoot, and set both pairs to that. Then see if you can tweak things a bit. – TimWescott Nov 29 '18 at 21:49

A second order system is relatively simple. It is straight forward to determine the overshoot and the settling time. This is not the case for a higher order system.

I will limit the discussion to linear systems having linear controllers.

For a higher order system you generally construct a cost function. There are many ways to do so. A good place to start is with the linear quadratic regulator (lqr in MATLAB). For your SISO system it will have the form $$\int_0^\infty (x^\top Q x + R u^2 + 2 x^\top N u) \ \mathrm{d} t.$$ A good place to start is to set $$\int_0^\infty (x^\top x + R u^2) \ \mathrm{d} t.$$ Then you can vary R until you get a satisfactory response. The lqr function in MATLAB will give you the feedback matrix.

Because you are after low overshoot and fast settling times the LQR is not really the best tool you can use. Instead the ITAE (integrated time absolute error) minimizes $$\int_0^\infty |e| t \ \mathrm{d}t.$$ This way you penalize errors more the further away they occur.

For a fourth order system your target transfer function is $$\frac{\omega_0^4}{s^4 + 2.1 \omega_0 s^3 + 3.4 \omega_0^2 s^2 + 2.7 \omega _0^3 s + \omega_0^4}.$$ You can find more information on page 21 here.

Setting omega to 10 yields For your system you do not need to control the zeros because the s term is small. If it were larger, you would need to remove the zeros.

• Many thanks for your answer. I have never used the ITAE to penalize errors as you describe. Could you kindly expand on how you got the target transfer function? Did you use MATLAB functions? – Rrz0 Dec 1 '18 at 11:12
• @Rrz0 there isn’t a function to give you the poles in MATLAB. You need to write an optimization program to calculate them. – user110971 Dec 1 '18 at 11:15
• @Rrz0 I think the poles I have are actually wrong. I’ll edit my answer to correct the mistake. – user110971 Dec 1 '18 at 11:18
• @Rrz0 I added a good reference to get you started on ITAE. If you look around, there was a MATLAB script to calculate the ITAE coefficients floating around a few year ago. The ITAE is just one method. You can use any cost function you want. I gave it more as an example of how to select the target transfer function. – user110971 Dec 1 '18 at 11:44