I've modelled a system in simulink and used operspec and linearise to extract a state space system. While the activity has worked well, I have a downstream process which requires the state space to be expressed in a different form. Without modifying the simulink model, is there a matlab command or series of commands that is capable of rearranging a state space system such that some parameters which where previously ouputs become states. For context, my downstream process will also be dropping a number of states. I've been using simulink, simulink control, system identification and the control system toolbox.
Kshitij Singh answered .
2025-11-20
>> sys1 = minreal(ss(zpk([tf(1,[1 1]);tf(1,conv([1 1],[1 2]));tf(1,conv([1 1],[1 3]))])))
sys1 =
A =
x1 x2 x3
x1 -2.067 -0.2775 -0.1388
x2 0.2401 -1.212 0.894
x3 0.03861 0.5588 -2.721
B =
u1
x1 0.9679
x2 0.6052
x3 1.303
C =
x1 x2 x3
y1 0.1629 0.6703 0.3352
y2 -0.6095 0.4695 0.2348
y3 0.06517 0.4681 -0.2659
D =
u1
y1 0
y2 0
y3 0
Continuous-time state-space model.
Let's look at its transfer function matrix in zpk form (note the cancellations in the individual elements):
>> zpk(sys1)
ans =
From input to output...
(s+2) (s+3)
1: -----------------
(s+2) (s+3) (s+1)
(s+3)
2: -----------------
(s+2) (s+3) (s+1)
(s+2)
3: -----------------
(s+2) (s+3) (s+1)
Continuous-time zero/pole/gain model.
Now defne a new state space realization using the augmented state vector and check its transfer function in zpk form:
>> sys2=ss([[sys1.a ; sys1.c(1:2,:)*sys1.a] zeros(5,2)],[sys1.b;sys1.c(1:2,:)*sys1.b],[zeros(2,3) eye(2);sys1.c(3,:) zeros(1,2)],[zeros(2,1);sys1.d(3,:)]);
>> zpk(sys2)
ans =
From input to output...
s (s+2) (s+3)
1: -------------------
s (s+3) (s+2) (s+1)
s (s+3)
2: -------------------
s (s+3) (s+2) (s+1)
(s+2)
3: -----------------
(s+3) (s+2) (s+1)
Continuous-time zero/pole/gain model.
The transfer function matrices are the same (after cancellation), but additional poles at the origin show up because of the non-minimal realization. As must be the case, the first two outputs are state variables.
>> sys2.c
ans =
0 0 0 1.0000e+00 0
0 0 0 0 1.0000e+00
6.5167e-02 4.6814e-01 -2.6593e-01 0 0
>> T=[sys1.c(1:2,:);[0 0 1]]
T =
1.6292e-01 6.7034e-01 3.3517e-01
-6.0951e-01 4.6951e-01 2.3476e-01
0 0 1.0000e+00
>> rank(T)
ans =
3
This tansformation T is called a similarity transformation and can used to define a new realization in terms of z (instead of x)
>> sys3=ss2ss(sys1,T)
sys3 =
A =
x1 x2 x3
x1 -1 -4.857e-17 -4.441e-16
x2 1 -2 -4.441e-16
x3 0.7396 0.1343 -3
B =
u1
x1 1
x2 2.116e-16
x3 1.303
C =
x1 x2 x3
y1 1 0 -5.551e-17
y2 0 1 0
y3 0.6513 0.06717 -0.5
D =
u1
y1 0
y2 0
y3 0
Continuous-time state-space model.
>> zpk(sys3)
ans =
From input to output...
(s+2) (s+3)
1: -----------------
(s+1) (s+2) (s+3)
(s+3)
2: -----------------
(s+1) (s+2) (s+3)
(s+2)
3: -----------------
(s+1) (s+2) (s+3)
Continuous-time zero/pole/gain model.
As expected, the first two outputs of sys3 are now state variables and the transfer function matrix of sys3 is the same as that of sys1.