
2.7 基于MATLAB的控制系统状态空间描述
MATLAB控制系统工具箱中提供了很多函数用来进行系统的状态空间描述。
2.7.1 利用MATLAB描述控制系统模型
(1)系统传递函数模型的MATLAB描述 已知单输入-单输出系统的传递函数为
在MATLAB中可以由其分子和分母多项式系数所构成的两个向量唯一描述出来,即
【例2-12】 若给定系统的传递函数为
利用MATLAB语句描述该系统模型。
解 MATLAB程序如下。
>>num=[6 12 6 10]; den=[1 2 3 1 1]
>>printsys(num,den)
执行结果为
num/den=
6 s^3+12 s^2+6 s+10
--------------------------------
s^4 + 2 s^3 + 3 s^2 + s + l
当传递函数的分子或分母由若干个多项式乘积表示时,它可由MATLAB提供的多项式乘法运算函数conv( )来处理,以获得分子和分母多项式系数向量,此函数的调用格式为
其中,a和b分别为由两个多项式系数构成的向量;c为a和b多项式的乘积多项式系数向量。conv( )函数的调用是允许多级嵌套的。
【例2-13】 若给定系统的传递函数为
利用MATLAB语句描述该系统模型。
解 可以用下列MATLAB语句表示。
>>num=4*conv([1 2],[1 6 6])
>>den= conv([1 0],conv([1 1],conv([1 1],conv([1 1],[1 3 2 5]))))
执行结果为
num=
4 32 72 48
den=
1 6 14 21 24 17 5 0
对于离散时间系统,其动态模型一般是以差分方程来描述的,假设在采样k时刻系统的输入信号为u(kT),且输出信号为y(kT),其中T为采样周期,则此系统的前向差分方程可表示为
对上述差分方程进行z变换,在初始条件为零时,可得系统的脉冲传递函数为
离散时间系统在MATLAB中也可以由其分子和分母系数构成的两个向量来唯一确定,即
num=[],den=[
]
对具有r个输入和m个输出的多变量系统,可把m×r的传递函数矩阵G(s)写成和单变量系统传递函数类似的形式,即
式中 B0,B1,…,Bm——m×r实常数矩阵;
sn+a1sn-1+…+an-1s+an——该传递函数矩阵的特征多项式。
在MATLAB中,多输入多输出系统的表示方法为
其中,分子系数包含在矩阵num中,num行数与输出y的维数一致,每行对应一个输出;den是行向量,为传递函数矩阵公分母多项式系数。
因此,系统的传递函数矩阵在MATLAB命令中也可以用两个系数向量来唯一描述。
(2)系统状态空间表达式模型的MATLAB描述 若线性定常连续系统的状态空间表达式如式(2-27)所示,则系统状态空间表达式的MATLAB描述通过例2-14来说明。
(2-27)
【例2-14】 设系统的状态空间表达式为
利用MATLAB语句描述该系统模型。
解 此系统可由下面的MATLAB语句唯一地描述出来。
>>A=[0 0 1; -3/2 -2 -1/2; -3 0 -4],B=[1 1; -l -1; -1 -3]
>>C=[1 0 0; 0 1 0],D=zeros(2,2)
执行结果为
A=
0 0 1.0000
-1.5000 -2.0000 -0.5000
-3.0000 0 -4.0000
B=
1 1
-1 -1
-1 -3
C=
1 0 0
0 1 0
D=
0 0
0 0
2.7.2 状态空间表达式与传递函数矩阵的相互转换
在控制系统分析和设计时,在一些场合下需要用到系统的一种模型,另一场合下可能又需要另一种模型,而这些模型之间又有某种内在的等效关系。应用MATLAB很容易实现由一种模型到另外一种模型的转换。
(1)状态空间表达式到传递函数的转换 如果系统的状态空间表达式如式(2-27)所示,则系统的传递函数矩阵可表示为
(2-28)
式中 B0,B1,…,Bm——m×r实常数矩阵。
在MATLAB控制系统工具箱中,给出一个根据状态空间表达式求取系统传递函数的函数ss2tf( ),其调用格式为
[num,den]=ss2tf(A,B,C,D,iu)
其中,A、B、C和D为状态空间表达式的各系数矩阵;iu为输入的序号,用来指定第几个输入,对于单输入单输出系统iu=1,对多输入多输出系统,不能用此函数一次地求出对所有输入信号的整个传递函数矩阵,而必须对各个输入信号逐个地求取传递函数子矩阵,最后获得整个传递函数矩阵;返回结果den为传递函数分母多项式按s降幂排列的系数;传递函数分子系数则包含在矩阵num中,num的行数与输出y的维数一致,每行对应一个输出。
【例2-15】 对于例2-14中给出的2输入2输出系统,利用MATLAB命令分别对各个输入信号求取传递函数向量,然后求出整个系统的传递函数矩阵。
解 利用下列MATLAB语句。
>>[num1,den1]=ss2tf(A,B,C,D,1),[num2,den2]=ss2tf(A,B,C,D,2)
结果显示为
从而可求得整个系统的传递函数矩阵为
(2)传递函数到状态空间表达式的转换 已知系统的传递函数模型,求取系统状态空间表达式的方法并不是唯一的,这里只介绍一种比较常用的实现方法。
对于单输入多输出系统
适当地选择系统的状态变量,则系统的状态空间表达式可以写成
在MATLAB控制系统工具箱中称这种方法为能控标准型实现方法,并给出了直接实现函数,该函数的调用格式为
[A,B,C,D]=tf2ss(num,den)
其中,num的每一行为相应于某输出的按s的降幂顺序排列的分子系数,其行数为输出的个数;行向量den为按s的降幂顺序排列的公分母系数;返回量A、B、C、D为状态空间表达式形式的各系数矩阵。
【例2-16】 在MATLAB中将系统
变换成状态空间表达式形式的模型。
解 MATLAB命令如下。
>>num=[0 2 3; 1 2 1]; den=[1 0.4 1]
>>[A,B,C,D]=tf2ss(num,den)
结果显示为
A=
-0.4000 -1.0000
1.0000 0
B=
l
0
C=
2.0000 3.0000
1.6000 0
D=
0
1
在MATLAB的多变量频域设计(MFD)工具箱中,对多变量系统的状态空间表达式与传递函数矩阵间的相互转换给出了更简单的转换函数,它们的调用格式分别为
[num,dencom]=mvss2tf(A,B,C,D)
[A,B,C,D]=mvtf2ss(num,dencom)
2.7.3 系统的线性变换
(1)矩阵的特征值与特征向量计算 矩阵的特征值与特征向量由MATLAB提供的函数eig( )可以很容易地求出,该函数的调用格式为
其中,A为要处理的矩阵;D为一个对角矩阵,其对角线上的元素为矩阵A的特征值,而每个特征值对应的V矩阵的列为该特征值的特征向量,该矩阵是一个满秩矩阵,它满足AV=VD,且每个特征向量各元素的平方和(即2范数)均为1。如果调用该函数时只给出一个返回变量,则将只返回矩阵A的特征值。即使A为复数矩阵,也同样可以由eig( )函数得出其特征值与特征向量矩阵。
【例2-17】 求矩阵A的特征向量与特征值。
解 MATLAB命令语句如下。
>>A=[0 l 0; 0 0 1; -6 -11 -6];
>>[V,D]=eig(A)
结果显示为
V=
-0.5774 0.2182 -0.1048
0.5774 -0.4364 0.3145
-0.5774 0.8729 -0.9435
D =
-1.0000 0 0
0 -2.0000 0
0 0 -3.0000
故系统的特征向量为
特征值为λ1=-1,λ2=-2,λ3=-3。
(2)矩阵的特征多项式、特征方程和特征根 MATLAB提供了求取矩阵特征多项式系数的函数ploy( ),其调用格式为
其中,A为给定的矩阵。返回值P为一个行向量,其各个分量为矩阵A的降幂排列的特征多项式系数,即
MATLAB中根据矩阵特征多项式求特征根的函数为roots( ),其调用格式为
其中,P为特征多项式的系数向量;V为特征多项式的解,即原始矩阵的特征根。
【例2-18】 求例2-17所示矩阵A的特征方程及其特征值。
解 MATIAB命令语句如下。
>>A=[0 1 0; 0 0 1; -6 -11 -6];
>>P=poly(A),V=roots(P)
结果显示为
P =
1.0000 6.0000 11.0000 6.0000
V=
-1.0000
-2.0000
-3.0000
故系统的特征方程为
特征根为λ1=-1,λ2=-2,λ3=-3。
(3)系统的线性变换 MATLAB控制系统工具箱给出了一个直接完成系统线性变换的函数ss2ss( ),该函数的调用格式为
【例2-19】 已知某系统的状态空间表达式为
将其变换为对角标准型。
解 由例2-17知系统的特征值为λ1=-1,λ2=-2,λ3=-3。变换矩阵P根据范德蒙德矩阵可得
MATLAB命令语句如下。
>>A=[0 l 0; 0 0 1; -6 -11 -6]; B=[ 0; 0; 6]; C=[l 0 0]; D=0;
>>P=inv([1 1 1; -1 -2 -3; 1 4 9]);
>>[A1,B1,C1,D1]=ss2ss(A,B,C,D,P)
结果显示为
A1=
-1.0000 0.0000 0.0000
0.0000 -2.0000 0.0000
0.0000 0.0000 -3.0000
B1=
3.0000
-6.0000
3.0000
C1=
1.0000 1.0000 1.0000
D1=
0
可得系统变换后的对角标准型为
2.7.4 系统模型的连接
在MATLAB控制系统工具箱中,提供了大量对控制系统的简单模型进行连接的函数。
(1)串联连接 在MATLAB控制系统工具箱中,提供了系统的串联连接处理函数series( ),它既可处理由状态方程表示的系统,也可处理由传递函数矩阵表示的单输入多输出系统,其调用格式为
[A,B,C,D]=series(A1,B1,C1,D1,A2,B2,C2,D2)
和
[num,den]=series(num1,den1,num2,den2)
其中,A1、B1、C1、D1和A2、B2、C2、D2分别为系统1和系统2的状态空间形式的系数矩阵; A、B、C、D为串联连接后系统的整体状态空间表达式形式的系数矩阵;num1、den1和num2、den2分别为系统1和系统2的传递函数矩阵的分子和分母多项式系数向量;num、den则为串联连接后系统的整体传递函数矩阵的分子和分母多项式系数向量。
(2)并联连接 在MATLAB控制系统工具箱中,提供了系统的并联连接处理函数parallel( ),该函数的调用格式为
[A,B,C,D]=parallel(A1,B1,C1,D1,A2,B2,C2,D2)
和
[num,den]=parallel(num1,den1,num2,den2)
其中,前一式用来处理由状态空间表达式表示的系统;后一式仅用来处理由传递函数(矩阵)表示的单输入多输出系统。
(3)反馈连接 在MATLAB控制系统工具箱中,还提供了系统反馈连接处理函数feedback( ),其调用格式为
[A,B,C,D]=feedback(A1,B1,C1,D1,A2,B2,C2,D2,sign)
和
[num,den]=feedback(num1,den1,num2,den2,sign)
其中,前一式用来处理由状态空间表达式表示的系统;后一式用来处理由传递函数(矩阵)表示的系统;sign为反馈极性,对于正反馈sign取1,对于负反馈取-1或默认。
特别地,对于单位反馈系统,MATLAB提供了更简单的处理函数cloop( ),其调用格式为
[A,B,C,D]=cloop(A1,B1,C1,D1,sign)
[num,den]=cloop(num1,den1,sign)
和
[A,B,C,D]=cloop(A1,B1,C1,D1,outputs,inputs)
其中,第三式表示将指定的输出outputs反馈到指定的输入inputs,以此构成闭环系统,outputs指定反馈的输出序号,inputs指定反馈输入序号。
【例2-20】 已知系统的结构图如图2-16所示,求系统的传递函数。

图2-16 例2-20系统结构图
解 MATLAB命令语句如下。
>>num1=[10]; den1=[1 1]; num2=[1]; den2=[2 0.5];
>>num3=[540]; den3=[1]; num4=[0.1]; den4=[1];
>>[na,da]=series(num1,den1,num2,den2);
>>[nb,db]=feedback(na,da,num4,den4,-1);
>>[nc,dc]=series(num3,den3,nb,db);
>>[num,den]=cloop(nc,dc,-1);
>>printsys(num,den)
结果显示为
num/den=
5400
------------------------
2s^2+2.5 s+5401.5