I am working with Matlab to design a compensator capable to make a system attain the design requirements ($\omega_n\geq 0.3$ rad/s & $\xi\geq 0.5$).

In order to do so I have a discrete-time transfer function with a sampling time of 1 second, which is the following:

$$G(z)=\dfrac{0.5z+0.5}{z^2-2z+1} $$

The functions has already a zero = -1 and a double pole = 1.

I am also using Matlab SISOtool to see where is the feasible region in which I should have the root-locus to fulfill the design requirements. Such region is the following (the white one):

Feasible regions

The image shows the root-locus of the plant, G(z). Now I want to add a controller, C(z), that allows me to move the root locus into the white region (at least a part of it).

The controller should be in the form:


And therefore, $C(z)G(z)$ should be evaluated to see that part of the root locus is located into the white area.

I want to find the value of the poles and zeros of the controller $C(z)$ that allow me to have part of the root locus into the white region provided in the image, and then being able to fulfill the design requirements.

This is driving me crazy because I have tried all the possible ways of adding poles and zeros and I am unable to obtain a region of the root-locus inside of the white area. I only need some idea on where to place the zeros/poles or if it is even feasible to attain this design requirements (it should be).

Matlab code:

n=[0.5 0.5];
d=[1 -2 1];

After that, to run SISOtool just type sisotool('rlocus',G) in Matlab console.


1 Answer 1


I don't have access to matlab, but I have played with this in R (see code below) and can confirm that if you're trying to transform your $G(s)$ into: $$ H(s) = \frac{K G(s)} {1 + KG(s)} $$ using only a scalar $K$, then you cannot get to the target pole locations (based on the values of $\xi$ and $\omega_n$).

In the diagram:

  • The black circles are the starting root (pole) positions.
  • The green circles are the target pole positions.
  • The red circles are the root locus for varying values of $K$.
  • The large black circle is the unit circle.

enter image description here

R Code Below



xi <- 0.5
omega_n <- 0.3

target_den <- c(1, 2*xi*omega_n, omega_n*omega_n)

target_roots <- roots(target_den)

num <- c(0, 0.5, 0.5)
den <- c(1, -2, 1)

start_roots <- roots(den)

plot(Re(start_roots),Im(start_roots),xlim=c(-5,5),ylim=c(-5,5), col="black", lwd=5)
points(Re(target_roots), Im(target_roots), col="green", lwd = 3)
for (k in seq(-100.0, 100.0, 0.1))
  rts <- roots(k*num + den)
  points(Re(rts), Im(rts), col="red")

theta <- seq(-1,1,.01)*pi
lines(sin(theta), cos(theta), col="black")
  • $\begingroup$ Thank you for answering. But I don't think I understand your answer. I'm looking for a controller $C(z)=(z+z_1)(z+z_n)/(z+p_1)(z+p_n)$ (which is multiplying to the plant) in order to move the root-locus into the white region I provide in the image. I know I do not have to use a K only, but I have tried many combinations of poles and zeros and I haven't been able to move the root locus into the desired region. $\endgroup$ Apr 25, 2016 at 16:45
  • $\begingroup$ @user3780731 Please update your question, then. Your root locus shows only scalar $K$. $\endgroup$
    – Peter K.
    Apr 25, 2016 at 16:47

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.