How to design controller for coupled 2 input 2 output system?

Hi everyone,
I am confused on this topic of designing an integral controller (c1 and c2 here are integral controller) for a multiple input multiple outout system which i have (Attached is the control structure of whole system). The structures which are standard on the control system toolbox are just SISO systems and if i force provide a matrix with 4 transfer functions (which represent my direct plant and coupled transfer function as shown in structure) matlab says: The model for "G" must be single input, single output. I thought of designing the controllers independently like treating each output as a seperate entity but then since they are coupled ignoring another part or another controller will not be correct we have to treat entire system as one. I have been stuck on this problem for too long i tried searching for other resources regarding this but there is no any clear explanation of how they designed a controller for a MIMO coupled system please if anybody can guide me on this that would be an immense help. and also out of curiosity how do you represent these kind of systems in state space ?
Thank you.

10 Comments

hello
have ypu the G transfer functions ? have you aleady started a code ?
so C1 and C2 are supposed to be only integrators ?
In Matlab, the 2x2 transfer function matrix can be represented like so:
G11 = tf(1,[1,11]);G12 = tf(1,[1,12]); G21 = tf(1,[1,21]); G22 = tf(1,[1,22]);
Gtf = [G11 G12;G21 G22]
Gtf = From input 1 to output... 1 1: ------ s + 11 1 2: ------ s + 21 From input 2 to output... 1 1: ------ s + 12 1 2: ------ s + 22 Continuous-time transfer function.
Gtf can be used directly in Simulink as specified in the LTI System.
A state space form can be obtained as
Gss = ss(Gtf);
Gss can specified in the LTI System block. Or, the specific matrices of Gss, such as
Gss.B
ans = 4×2
1 0 1 0 0 1 0 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
can be specified as the parameters in the State Space block.
Source of error message unclear w/o seeing the code that generated it.
If you look at the signal flows, you will see that C1–G11 and C2–G22 form closed loops, while C1–G21 and C2–G12 are open loops. If both C1 and C2 are constrained to be pure integral controllers , several restrictive conditions must be satisfied to ensure stable output responses:
  • The transfer functions G11 and G22 must be equivalent.
  • The transfer functions G12 and G21 must be equivalent.
  • The closed-loop systems C1–G11 and C2–G22, excluding influences from the open loops, must be stable.
  • Because the open-loop systems C1–G21 and C2–G12 have a pole at the origin, the error signals (inputs to C1 and C2) must converge to zero.
  • The reference setpoints r1 and r2 must be identical.
Block diagram
Error signals
Output signals
However, if the MIMO system is to be regulated at different reference setpoints and the plant transfer functions G11, G12, G21, and G22 differ, then the controllers C1 and C2 must be designed with care.
Hey @Sam Chak thanks for this input but like you said the refrence setpoints to my system is going to be different and the plant transfer functions are also different (They are modeled as second order TF with exponential delay term which i will represent with a transfer function block cascaded with a transport delay block. The integral controllers are not pure they have gain attched to them (Ki) which is what i am confused on about how to tune them properly.
Hey @Paul i got your answer on how to represent them as state space thanks for that, the error which i faced was on this code :
%% Laplace variable
s = tf('s');
%% 2x2 transfer function matrix
G11 = 5/(s^2 + 2*s + 25) * exp(-0.05*s);
G12 = 3/(s^2 + 4*s + 16) * exp(-0.10*s);
G21 = 10/(s^2 + 6*s + 100) * exp(-0.03*s);
G22 = 4/(s^2 + 1.5*s + 36) * exp(-0.08*s);
%% TITO system
G = [G11 G12;
G21 G22];
%% Control System Designer
controlSystemDesigner(G);
where i found that control system designer cannot be used for MIMO systems so how can i tune the integral controllers which i am planing to design for this system
@Mathieu NOE The G transfer functions are to be determined from experimental method (by curve fitting bode plot of the actuator which we are trying to control), i have not started the code cause i want to learn how to design the controller for such system first and yes c1 and c2 are supposed to be integrators with gain Ki how would you say to approach this problem ?
well, once you have identified your 4 tfs , you can simply "remove" the coupling terms in the output so you fall back to the design of two SISO (independant) systems
instead of using directly y1 in the first feedback loop use y1b = y1 - G12estimated * u2
idem for lower loop :
instead of using directly y2 in the second feedback loop use y2b = y2 - G21estimated * u1
I don't think the State Space block can explicitly model those delays, so you'd have to take the ss matrices as the block parameters to the State Space block and then model the input and output delays separately. I'm pretty sure, but not 100% certain, that G can be used directly in the LTI System block, as could ss(G).
What is the basis for all of the restrictive conditions cited in this comment? I will confess I haven't thought about it too much, but at best it would seem that those might be sufficient conditions, not necessary ("must be") conditions.
I'm not following the last condition at all. The external input has no influence on the stability of the closed loop system.
Thanks for pointing that out. I built the Simulink model quickly from the MIMO config @Eric posted earlier, before he shared the transfer functions. The conditions I reported come from empirical simulation results, not from a formal stability analysis. I’ve attached the Simulink model for anyone who wants to reproduce or inspect the setup.

Sign in to comment.

 Accepted Answer

Hi @Eric,
From your comments on your post, it looks like you would like to tune 2 I controllers for your MIMO system. As you've discovered, Control System Designer only supports SISO systems. For MIMO systems like yours, you should use Control System Tuner instead (Especially since you already have a fixed structure for your controller!).
First, let's define your system:
%% Laplace variable
s = tf('s');
%% 2x2 transfer function matrix
G11 = 5/(s^2 + 2*s + 25) * exp(-0.05*s);
G12 = 3/(s^2 + 4*s + 16) * exp(-0.10*s);
G21 = 10/(s^2 + 6*s + 100) * exp(-0.03*s);
G22 = 4/(s^2 + 1.5*s + 36) * exp(-0.08*s);
%% TITO system
G = [G11 G12;
G21 G22];
You can then import this system into Simulink using the LTI System block, which has built in support for MIMO transfer functions and delays. Here's an example diagram:
You can then launch Control System Tuner from the Apps tab in Simulink. From there, select your two I controllers as your tunable blocks, and design one or more tuning goals to achieve the performance you desire.
You can read more about Control System Tuner here: https://www.mathworks.com/help/control/ref/controlsystemtuner-app.html

More Answers (1)

Perhaps you can try this control architecture. With this approach, the PID controllers can be designed for plants G11 and G22 as if they were decoupled from G12 and G21. The desired outputs can likewise track different reference setpoints, as shown below.
Scope 3:

Asked:

on 3 Nov 2025

Commented:

on 6 Nov 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!