SISO系统
线性定常连续系统一般以常系数线性常微分方程来描述。对于一个SISO线性定常连续系统,其常微分方程描述为:
对应的经拉氏变换得到的传递函数模型为
在Matlab中,多项式
常用数组表达,如n阶多项式可用n+1个元素的数组表达为[a0 a1 … an],其中,数组元素按多项式中“s”的降幂顺序排列,其中的“0”不能省略。因此传递函数的分子与分母多项式可以用2个数组表达
num=[b0 b1 … bn]
den=[a0 a1 … an]
在Matlab中,传递函数模型变量的数据结构为‘tf’类,可采用函数命令tf()来描述分子和分母多项式的数组组合,建立控制系统的传递函数模型。
tf()函数命令的主要调用格式为
sys=tf(num,den)或直接为sys=tf([b0 b1 … bn], [a0 a1 … an])
经过上述命令,变量sys即表示上述连续系统传递函数模型。类似地,对于SISO线性定常离散系统,其高阶差分方程模型和z域传递函数模型分别为
建立Matlab的离散定常系统传递函数模型可采用函数命令tf(),其建立离散系统传递函数的语句为:
num=[b0 b1 … bn]
den=[a0 a1 … an]
sys=tf(num, den, Ts)
或直接为:
sys=tf([b0 b1 … bn], [a0 a1 … an] , Ts)
其中,Ts为采样周期的值。当Ts=-1或者Ts=[]时,则系统的采样周期未定义。经过上述命令,变量sys即表示上述离散系统传递函数模型。
eg:
num_1=[1 2 1];
den_1=[1 5 6];
sys_1=tf(num_1,den_1,-1)
MIMO系统
MIMO线性定常连续系统的传递函数阵G(s)可以表示为
其中,Gij(s)=nij(s)/dij(s)描述了第i个输出与第j个输入之间的动态传递关系,nij(s)和dij(s)分别为其分子与分母多项式.
eg:
num={[1 2 1] [1 5]; [2 3] [6]};
den={[1 5 6] [1 2]; [1 6 11 6] [2 7]};
sys_1=tf(num,den)
状态空间模型
线性定常连续系统的状态空间模型为
ss()函数的主要调用格式为:
sys=ss(A,B,C,D)
式中,A,B,C,D为已经赋值的适宜维数的数组(矩阵)。
若输入的矩阵维数不匹配,ss()函数将显示出错信息,指出系统矩阵维数不匹配。对线性定常离散系统S(G,H,C,D),则用函数ss()来建立状态空间模型的调用格式为:
sys=ss(G,H,C,D,Ts)
式中,Ts为输入的采样周期,与建立离散系统传递函数的Matlab函数tf()的格式一致。
eg:
A_2=[0 1; -2 -3];
B_2=[0; 1]; C_2=[1 0];
D_2=0;
sys_2=ss(A_2,B_2,C_2,D_2)
状态空间模型到传递函数模型的转换
由状态空间模型求解传递函数模型问题的调用格式为:
连续系统: con_tf=tf(con_ss)
离散系统: dis_tf=tf(dis_ss)
传递函数模型到状态空间模型的转换
(1) 转换函数ss()
连续系统: con_ss=ss(con_tf)
离散系统: dis_ss=ss(dis_tf)
(2) 规范形转换函数canon()
Matlab提供的规范形转换函数canon()可以将传递函数模型转换得到状态空间的模态规范形,即对角规范形,其调用格式为:
连续系统: con_ss=canon (con_tf, 'modal')
离散系统: dis_ss=canon (dis_tf, 'modal')
(3) 常微分方程(传递函数)转换为状态空间模型函数dif2ss()
函数dif2ss()的主要调用格式为:
sys_ss=dif2ss (sys_tf,type)
sys_ss=dif2ss (sys_num, sys_den,type)
eg:
![](https://i-blog.csdnimg.cn/direct/d75d143416af4f09ae4ad42b8751827f.png)
num_1=[2 14 24]; den_1=[1 5 8 4];
sys_1=tf(num_1,den_1);
sys_comp=dif2ss(sys_1,'companion')
sys_jord=dif2ss(num_1,den_1,'jordan')
状态空间模型的变换
Matlab提供在给定变换矩阵下,计算状态空间模型变换的可直接调用函数ss2ss(),其调用格式为:
sysT = ss2ss(sys,T)
其中,sys和sysT分别为变换前与变换后(输入与输出)的状态空间模型变量;T为给定的变换矩阵。
eg:
![](https://i-blog.csdnimg.cn/direct/8bdd022d6fbf4a86a67df3e8a266d998.png)
![](https://i-blog.csdnimg.cn/direct/747a6c2c12004dcd8e6a8e264affd554.png)
A=[0 1 0; 0 0 1; -6 -11 -6];
B=[0; 0; 6]; C=[1 0 0]; D=0;
P=[1 1 1; -1 -2 -3; 1 4 9];
sys_in=ss(A,B,C,D);
sys_out=ss2ss(sys_in,inv(P))
![](https://i-blog.csdnimg.cn/direct/747a6c2c12004dcd8e6a8e264affd554.png)
特征值、特征向量与广义特征向量的计算
Matlab提供直接计算特征值和特征向量的函数为eig(),其调用格式为:
d = eig(A)
[V,D] = eig(A)
Matlab的函数eig()不能直接计算广义特征向量,要计算广义特征向量则需要符号计算工具箱的函数jordan(),其调用格式为
J = jordan(A)
[V,J] = jordan(A)
eg:
A=[0 1 0; 0 0 1; -4 -8 -5];
B=[0; 0; 1]; C=[1 0 0]; D=0;
sys_in=ss(A,B,C,D);
[P,J]=jordan(A);
sys_out=ss2ss(sys_in,inv(P))