将系统转化为能控标准型的步骤如下:
1.构造判别矩阵Mc,判断系统是否能控。
2.构造变换矩阵Tp,Tp的计算如下:
其中:a1...an为特征多项式的各项系数。
3.计算出变换矩阵,然后通过下列式子转化矩阵A、B、C,得到系统的能控标准型
在matlab中,对系统能控标准型的转化主要会用到下列函数 :
函数 | 用法说明 |
det(B) | 返回方阵的行列式 |
diag(B,x) | 生成在主对角线上方第x条对角线为向量B的矩阵,x为负时为对角线下方第x条对角线 |
ctrb(A,B) | 返回系统的能控性判别矩阵Mc,其中A为系统矩阵,B为输入矩阵 |
sys=ss(A,B,C,D) | 由A、B、C、D矩阵得到连续系统的状态空间模型 |
[A,B,C,D]=ssdata(sys) | 得到连续系统的A、B、C、D矩阵 |
syst=ss2ss(sys,TM) | 通过非奇异变换矩阵TM变换系统sys的空间表达式 |
num=sym2poly(p) | 返回符号多项式p的系数向量num。返回的系数向量c包括所有系数,包括等于0的系数 |
下面通过一个例子来演示将一个线性定常系统的状态空间模型转化为能控标准型。
例:已知线性定常系统的状态空间模型模型为
采用MATLAB将系统变化为能控标准型。
解: 程序如下
%先编写trancon.m函数,用于求系统的能控标准型。
function sysc=trancon(sys) %函数输入为ss模型传递函数,输出为ss模型传递函数
[A,B,C,D]=ssdata(sys); %得到原系统的的矩阵A,B,C,D
n=length(A); %得到系统矩阵A的维度n
Mc=ctrb(A,B); %求能控型判别矩阵Mc
if rank(Mc)<n %若判别矩阵Mc不满秩,说明系统不可控,无法转化为能控标准型
disp('Uncontrollable system');
else %若系统满秩,说明可以转化为能控标准型
T1=[];
T2=zeros(n); %矩阵T1和T2用来求变换矩阵Tp
I=eye(size(A)); %单位矩阵I
syms s
F=det(s*I-A); %求系统的特征多项式
a=sym2poly(F); %提取系统的特征多项式的系数向量
for i=1:1:n %求得矩阵T1,T2
T1=[A^(i-1)*B T1];
T2=T2+diag(a(i)*ones(1,n+1-i),1-i);
end
Tp=T1*T2 %计算变换矩阵Tp
sysc=ss2ss(sys,inv(Tp));%求得变换为能控标准型的状态空间模型
end
然后在命令窗口中输入
>> A=[0 1 2 ;-2 -3 0;-1 1 -3];
>> B=[0 1 2]';
>> C=[0 0 1];
>> D=0;
>> sys=ss(A,B,C,D);
>> sysc=trancon(sys)
运行结果如下:
Tp =
17 5 0
-6 3 1
3 7 2
sysc =
A =
x1 x2 x3
x1 0 1 0
x2 0 0 1
x3 -16 -13 -6
B =
u1
x1 0
x2 0
x3 1
C =
x1 x2 x3
y1 3 7 2
D =
u1
y1 0
Continuous-time state-space model.
可以从结果看到变换矩阵Tp以及化为能控能控标准型后的矩阵A、B、C、D。