1.5 MATLAB在系统数学模型变换中的应用
本节主要介绍基于MATLAB的线性定常系统(LTI)建模分析的常用命令函数。
1.5.1 系统的模型
1.传递函数模型
设单输入单输出(SISO)连续系统的传递函数为
在MATLAB中,可用传递函数分子、分母多项式按s的降幂系数排列的行向量,即
num=[b1,b2,…,bn-1,bn]
den=[a0,a1,…,an-1,an]
描述式(1-211)所示传递函数G(s)的多项式模型。而由命令函数tf()则可建立系统的传递函数模型TF,其调用格式为
sys=tf(num,den)
其中,num、den分别是传递函数分子、分母多项式系数行向量,且系数均按s的降幂排列。
【例1-24】 已知系统传递函数为
则可以利用程序MATLAB Program 1_1将上述系统模型表示出来,并将其建立在MATLAB的工作空间(Workspace)中。
%MATLABProgram1_1 num=[29]; %G(s)分子多项式按s的降幂系数排列的行向量 den=[1 3 2 4 6]; %G(s)分母多项式按s的降幂系数排列的行向量 G=tf(num,den) %建立传递函数模型,存放于G
执行MATLAB Program 1_1后得到
Transfer function: 2s+9 ----------------------- s∧4+3s∧3+2s∧2+4s+6
对SISO线性定常离散系统,其脉冲传递函数一般可表示为关于z的降幂多项式分式形式,即
在MATLAB中,对于式(1-212)所示离散系统,同样可用tf()命令建立其脉冲传递函数模型,调用格式为
nu m=[cm,cm-1,…,c1,c0];
den=[an,an-1,…,a1,a0];
sys=tf(num,den,Ts)
其中,Ts为系统采样周期。
另外,系统的传递函数还可表示成零极点形式,即
在MATLAB中,可用传递函数的零点向量、极点向量及增益,即
描述式(1-213)所示传递函数G(s)的零极点模型。而由命令函数zpk()则可建立零极点模型ZPK,其调用格式为
sys=zpk(z,p,k)
2.状态空间模型
r维输入、m维输出的MIM O线性定常系统的状态空间表达式为
式中,x,y、u分别为n×1、m×1、r×1维的列向量,A、B、C、D分别为n×n、n×r、m×n,m×r维的常数矩阵。
在MATLAB中,只要按照矩阵输入方式建立式(1-214)系统相应的系数矩阵,即
A=[a11,a12,…,a1 n;a21,a22,…,a2 n;…;an 1,an 2,…,an n]
B=[b11,b12,…,b1 r;b21,b22,…,b2 r;…;bn 1,bn 2,…,bn r]
C=[c11,c12,…,c1 n;c21,c22,…,c2 n;…;cm 1,cm 2,…,cm n]
D=[d11,d12,…,d1r;d21,d22,…,d2r;…;dm 1,dm 2,…,dmr]
即可描述式(1-214)系统的状态空间模型。而由命令函数ss()则可建立系统的状态空间模型SS,其调用格式为
sys=ss(A,B,C,D)
对线性定常离散系统
在按常数矩阵输入方式建立系数矩阵G,H,C,D后,同样调用
sys=ss(G,H,C,D,Ts)
则可建立式(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(A,B,C,D)
执行以上语句,可实现将描述为(A,B,C,D)的系统状态空间模型中各系数矩阵转换为传递函数模型中分子、分母多项式系数行向量num、den。对多输入系统,ss2tf()的调用格式为
[num,den]=ss2tf(A,B,C,D,iu)
其中,iu用于指定变换所使用的输入量,iu默认则为单输入情况。
【例1-25】 已知系统状态空间表达式为
试应用MATLAB求取系统的传递函数阵。
解 该系统为双输入单输出系统,因此其传递函数阵G(s)为1×2维向量,即
其中,G1(s)、G2(s)分别为输出量y与输入量u1、u2之间的传递函数。利用ss2tf()函数可以进行指定输入的状态方程向传递函数的转换。MATLAB Program 1_2为求解本题的程序。
G(s)=[G1(s)G2(s)]
%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: 4s∧3+14s∧2+22s+15 ----------------------------- s∧4+4s∧3+6.25s∧2+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: 12s∧3+32s∧2+37s+17 ----------------------------- s∧4+4s∧3+6.25s∧2+5.25s+2.25
由此得系统的传递函数阵为
与ss2tf()类似,应用MATLAB函数ss2zp()可由系统状态空间表达式求其零极点模型的参数(z,p,k)。对SISO系统,ss2zp()的调用格式为
[z,p,k]=ss2zp(A,B,C,D)
而对多输入系统,其调用格式为
[z,p,k]=ss2zp(A,B,C,D,iu)
2.传递函数到状态空间表达式的变换
利用MATLAB函数tf2ss()、zp2ss()可分别由多项式形式、零极点形式的传递函数求其状态空间模型中的各系数矩阵。其调用格式分别为
[A,B,C,D]=tf2ss(num,den)
[A,B,C,D]=zp2ss(z,p,k)
上面两条语句分别由已知的(num,den)、(z,p,k)经模型转换返回状态空间表达式中各系数矩阵(A,B,C,D)。
【例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(G,T)
其中,G、GT分别为变换前、后系统的状态空间模型,T为线性非奇异变换阵。或为
[At,Bt,Ct,Dt]=ss2 ss(A,B,C,D,T)
其中,(A,B,C,D)、(At,Bt,Ct,Dt)=(TAT-1,TB,CT-1,D)分别为变换前、后系统的状态空间模型的系数阵,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()的调用格式为
[T,J]=jordan(A)
执行以上语句,可得到化A为约当标准型J的变换阵T,即J=T-1AT,T由A的线性独立特征向量、广义特征向量为列向量构成。
【例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关系。或为
[At,Bt,Ct,Dt,P]=canon(A,B,C,D,type)T=[α β]
其中,(A,B,C,D)为对应x的原系统状态空间模型的系数阵,(At,Bt,Ct,Dt)则为对应新状态向量(仍满足=Px)的标准型状态空间模型的系数阵。
以上函数canon()调用中的字符串type确定标准型类型。它可以是模态(modal)标准型,也可以是伴随(companion)标准型形式。
当系统矩阵A可对角化但具有共轭复数特征值时,若仍用1.3.1节的方法化成对角标准型,计算特征向量将出现复数向量,且对角标准型及变换阵均为复数矩阵,给分析计算带来困难,且复数的物理意义也不清晰,此时,可将系统矩阵化为模态(modal)标准型。设二阶系统∑(A,B,C)具有共轭复数特征值λ1,2=σ±jω,则可用线性非奇异状态变换将系统矩阵化为形如
的模态(modal)标准型。且可证明变换阵为
式中,列向量α、β分别是对应特征值λ1=σ+jω的复数特征向量α+jβ的实部、虚部。
【例1-29】 已知系统∑(A,B,C,D)的系数阵为
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运行结果略。