现代控制理论(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 MATLAB在系统数学模型变换中的应用

本节主要介绍基于MATLAB的线性定常系统(LTI)建模分析的常用命令函数。

1.5.1 系统的模型

1.传递函数模型

设单输入单输出(SISO)连续系统的传递函数为

在MATLAB中,可用传递函数分子、分母多项式按s的降幂系数排列的行向量,即

num=[b1b2,…,bn-1bn]

den=[a0a1,…,an-1an]

描述式(1-211)所示传递函数Gs)的多项式模型。而由命令函数tf()则可建立系统的传递函数模型TF,其调用格式为

sys=tf(num,den)

其中,num、den分别是传递函数分子、分母多项式系数行向量,且系数均按s的降幂排列。

【例1-24】 已知系统传递函数为

则可以利用程序MATLAB Program 1_1将上述系统模型表示出来,并将其建立在MATLAB的工作空间(Workspace)中。

%MATLABProgram1_1
num=[29];                 %Gs)分子多项式按s的降幂系数排列的行向量
den=[1 3 2 4 6];          %Gs)分母多项式按s的降幂系数排列的行向量
G=tf(num,den)           %建立传递函数模型,存放于G

执行MATLAB Program 1_1后得到

Transfer function:
              2s+9
-----------------------
s4+3s3+2s2+4s+6

对SISO线性定常离散系统,其脉冲传递函数一般可表示为关于z的降幂多项式分式形式,即

在MATLAB中,对于式(1-212)所示离散系统,同样可用tf()命令建立其脉冲传递函数模型,调用格式为

nu m=[cmcm-1,…,c1c0];

den=[anan-1,…,a1a0];

sys=tf(num,den,Ts

其中,Ts为系统采样周期。

另外,系统的传递函数还可表示成零极点形式,即

在MATLAB中,可用传递函数的零点向量、极点向量及增益,即

描述式(1-213)所示传递函数Gs)的零极点模型。而由命令函数zpk()则可建立零极点模型ZPK,其调用格式为

sys=zpk(zpk

2.状态空间模型

r维输入、m维输出的MIM O线性定常系统的状态空间表达式为

式中,xyu分别为n×1、m×1、r×1维的列向量,ABCD分别为n×nn×rm×nm×r维的常数矩阵。

在MATLAB中,只要按照矩阵输入方式建立式(1-214)系统相应的系数矩阵,即

A=[a11a12,…,a1 na21a22,…,a2 n;…;an 1an 2,…,an n]

B=[b11b12,…,b1 rb21b22,…,b2 r;…;bn 1bn 2,…bn r]

C=[c11c12,…,c1 nc21c22,…,c2 n;…;cm 1cm 2,…,cm n]

D=[d11d12,…,d1rd21d22,…,d2r;…;dm 1dm 2,…,dmr]

即可描述式(1-214)系统的状态空间模型。而由命令函数ss()则可建立系统的状态空间模型SS,其调用格式为

sys=ss(ABCD

对线性定常离散系统

在按常数矩阵输入方式建立系数矩阵GHCD后,同样调用

sys=ss(GHCDTs

则可建立式(1-215)离散系统的状态空间模型。其中,Ts为系统采样周期。

3.组合系统模型

MATLAB提供了两个子系统G1、G2并联连接系统函数parallel()、串联连接系统函数series()及反馈连接系统函数feedback(),由此可计算相应组合系统的模型,其调用格式分别为

sys=parallel(G1,G2)

sys=series(G1,G2)

sys=feedback(G1,G2)

其中,G1、G2为子系统1、子系统2已建立的模型,其可均为传递函数模型TF,也可均为状态空间模型SS。

1.5.2 系统模型的转换

1.状态空间表达式向传递函数形式的转换

MATLAB提供了模型转换函数,可以完成系统数学模型的相互转换,利用ss2tf()函数可由系统状态空间表达式求其传递函数(阵)。对SISO系统,ss2tf()的调用格式为

[num,den]=ss2tf(ABCD

执行以上语句,可实现将描述为(ABCD)的系统状态空间模型中各系数矩阵转换为传递函数模型中分子、分母多项式系数行向量num、den。对多输入系统,ss2tf()的调用格式为

[num,den]=ss2tf(ABCD,iu)

其中,iu用于指定变换所使用的输入量,iu默认则为单输入情况。

【例1-25】 已知系统状态空间表达式为

试应用MATLAB求取系统的传递函数阵。

该系统为双输入单输出系统,因此其传递函数阵Gs)为1×2维向量,即

其中,G1s)、G2s)分别为输出量y与输入量u1u2之间的传递函数。利用ss2tf()函数可以进行指定输入的状态方程向传递函数的转换。MATLAB Program 1_2为求解本题的程序。

Gs)=[G1sG2s)]

%MATLABProgram 1_2
A=[2.25-5-1.25-0.5;2.25-4.25-1.25-0.25;
   0.25-0.5-1.25-1;1.25-1.75-0.25-0.75];
B=[46;24;22;02];
C=[0202];
D=[00];
[num1,den1]=ss2tf(A,B,C,D,1) %指定第一输入信号u1
所对应的转换
G1=tf(num1,den1)
[num2,den2]=ss2tf(A,B,C,D,2) %指定第二输入信号u2
所对应的转换
G2=tf(num2,den2)

程序MATLAB Program 1_2的运行结果为

num1=
        0  4.0000  14.0000  22.0000  15.0000
den1=
        1.0000  4.0000  6.2500  5.2500  2.2500
Transfer function:
              4s3+14s2+22s+15
        -----------------------------
        s4+4s3+6.25s2+5.25s+2.25
num2=
        0  12.0000  32.0000  37.0000  17.0000
den2=
        1.0000 4.0000 6.2500 5.2500 2.2500
Transfer function:
              12s3+32s2+37s+17
        -----------------------------
        s4+4s3+6.25s2+5.25s+2.25

由此得系统的传递函数阵为

与ss2tf()类似,应用MATLAB函数ss2zp()可由系统状态空间表达式求其零极点模型的参数(zpk)。对SISO系统,ss2zp()的调用格式为

[zpk]=ss2zp(ABCD

而对多输入系统,其调用格式为

[zpk]=ss2zp(ABCD,iu)

2.传递函数到状态空间表达式的变换

利用MATLAB函数tf2ss()、zp2ss()可分别由多项式形式、零极点形式的传递函数求其状态空间模型中的各系数矩阵。其调用格式分别为

[ABCD]=tf2ss(num,den)

[ABCD]=zp2ss(zpk

上面两条语句分别由已知的(num,den)、(zpk)经模型转换返回状态空间表达式中各系数矩阵(ABCD)。

【例1-26】 已知系统传递函数为

应用MATLAB的模型转换函数求状态空间模型的系数矩阵。

MATLAB Program 1_3为求解本题的程序。

%MATLABProgram1_3
num=[18,36];
den=[140.4391150];
[A,B,C,D]=tf2ss(num,den)

程序MATLAB Program 1_3的运行结果为

A=
        -40.4000-391.0000  -150.0000
        1.0000          0         0
              0      1.0000         0
B=
        1
        0
        0
C=
        0   18   36
D=
        0

应该指出,函数ss()不仅可用于建立系统的状态空间模型SS,而且可将任意LTI系统模型sys(传递函数模型TF、零极点模型ZPK)转换为状态空间模型SS,其调用格式为

SYS=ss(sys)

事实上,MATLAB中建立LTI系统3种模型的3个函数tf()、zpk()及ss()均可用类似的调用格式实现由一种模型到另一种模型的转换。

1.5.3 系统的线性非奇异变换与标准型状态空间表达式

1.系统的线性非奇异变换

MATLAB中函数ss2ss()可实现对系统的线性非奇异变换。其调用格式为

GT=ss2ss(GT

其中,GGT分别为变换前、后系统的状态空间模型,T为线性非奇异变换阵。或为

[AtBtCtDt]=ss2 ss(ABCDT

其中,(ABCD)、(AtBtCtDt)=(TAT-1TBCT-1D)分别为变换前、后系统的状态空间模型的系数阵,T为线性非奇异变换阵。

【例1-27】 已知系统状态空间表达式的系数阵为

A=

B=

C=[0.5-0.4375 0.4375],D=0

试应用ss2ss()函数进行系统的线性非奇异变换。

变换阵T只要保证其非奇异即可,在此选择单位反对角阵作为变换阵。MATLAB Program 1_4为求解本题的程序。

%MATLABProgram 1_4
A=[10-42;800;020];
B=[2;0;0];
C=[0.5 -0.4375 0.4375];
D=0;
G1=ss(A,B,C,D);     %建立变换前原状态空间模型G1
T=fliplr(eye(3));    %构造线性非奇异变换阵T为单位反对角阵
GT=ss2ss(G1,T)         %获得变换后状态空间模型GT

程序MATLAB Program 1_4运行结果略。

MATLAB没有提供将一般状态空间表达式化为约当标准型的函数,但可先利用其计算约当标准型函数jordan()求出化约当标准型的变换阵,再利用函数ss2ss()得约当标准型。jordan()的调用格式为

[TJ]=jordan(A

执行以上语句,可得到化A为约当标准型J的变换阵T,即J=T-1ATTA的线性独立特征向量、广义特征向量为列向量构成。

【例1-28】 应用MATLAB求解例1-11。

MATLAB Program 1_5为求解本题的程序。

%MATLABProgram 1_5
A=[010;001;230];
B=[0;0;1];
C=[100];
D=0;
G=ss(A,B,C,D);     %建立变换前状态空间模型
[T,J]=jordan(A);     %求化A为约当标准型的变换阵T及约当阵J
GT=ss2ss(G,inv(T))  %状态空间模型变换,变换阵为T-1

程序MATLAB Program 1_5运行结果略。

2.标准型状态空间表达式的实现

MATLAB提供了标准型状态空间表达式的实现函数canon(),以得到LTI系统模型sys的标准型状态空间表达式的实现。其调用格式为

G1=canon(sys,type)

若LTI系统模型sys为对应状态向量x的状态空间模型,可应用函数canon()将其变换为在新的状态向量下的标准型状态空间表达式,其调用格式为

[G1,P]=canon(sys,type)

其中,sys为原系统状态空间模型,P是返回的线性非奇异状态变换阵,满足=Px关系。或为

[AtBtCtDtP]=canon(ABCD,type)T=[α β]

其中,(ABCD)为对应x的原系统状态空间模型的系数阵,(AtBtCtDt)则为对应新状态向量(仍满足=Px)的标准型状态空间模型的系数阵。

以上函数canon()调用中的字符串type确定标准型类型。它可以是模态(modal)标准型,也可以是伴随(companion)标准型形式。

当系统矩阵A可对角化但具有共轭复数特征值时,若仍用1.3.1节的方法化成对角标准型,计算特征向量将出现复数向量,且对角标准型及变换阵均为复数矩阵,给分析计算带来困难,且复数的物理意义也不清晰,此时,可将系统矩阵化为模态(modal)标准型。设二阶系统∑(ABC)具有共轭复数特征值λ1,2=σ±jω,则可用线性非奇异状态变换将系统矩阵化为形如

的模态(modal)标准型。且可证明变换阵为

式中,列向量αβ分别是对应特征值λ1=σ+jω的复数特征向量α+jβ的实部、虚部。

【例1-29】 已知系统∑(ABCD)的系数阵为

A=

B=

C=[1 2 5 2],D=0

将其变换为模态标准型或对角标准型,并给出变换阵。

应用状态方程的规范实现函数canon()容易进行该变换,MATLAB Program 1_6为求解本题的程序。

%MATLABProgram 1_6
A=[5210;0460;0-3-50;0-3-6-1];
B=[1;2;3;4];C=[1252];D=0;
sys=ss(A,B,C,D);
[G,T]=canon(sys,′modal′)

程序MATLAB Program 1_6运行结果略。