# Auto-tuning PI controller with maximum sensitivity

I am trying to design an auto-tuning controller in matlab with the help of the paper from Astrom and Hagglund: Design of PI Controllers based on Non-Convex Optimization* (1998). They use the maximum sensitivity and maximum complementary sensitivity as design parameters. They derive formulas for the center $$C$$ and radius $$R$$ that depend on max sensitivity $$(M_s)$$ and max comp. sensitivity $$(M_t)$$. They give the following function:

$$f(k,k_i,w) = \left|C + \left(k+\frac{k_i}{\omega i}\right)G(i\omega)\right|^2$$

And the sensitivity constraint:

$$f(k,k_i,\omega) \geq R^2$$

The objective is to maximize $$k_i$$, so the objective function

$$J = \dfrac{1}{k_i}\quad\text{or}\quad J = -k_i$$

The latter seems more robust to me, so I use that one. In the paper they do not give more constraints than this one, but obviously there are more constraints necessary.

I have found that the following constraints are necessary as well:

$$M_s \leq M_s^+\quad\text{and}\quad M_t \leq M_t^+$$

But with these two added, I still do not get the same results as in the paper. Am I missing another constraint?

I also tried adding these constraints from equation 12 in the paper.

\begin{align} \dfrac{\partial f}{\partial \omega} &\leq 0 \\ \dfrac{\partial f}{\partial k} &\leq 0 \end{align}

These did not work either.

I am trying to implement it with fmincon in matlab.

Is there anyone who is familiar with this method and able to help me out? I can share my code if necessary.

I have also tried solving equation 16 with fsolve, but it did not give me the same results as in the paper either. So I am clueless right now.