(4) 令初始状态为零,输入为u(t)?3sin(5t)。用函数lsim( )计算状态响应和输出响应的数值解,并绘制系统的状态响应曲线、输出响应曲线和状态轨迹。 3. 已知系统
10??0?0??x??0?u ???0x01????????6?11?6???1??y??600?x
?1???且初始状态为x(0)?0。 ?????1??(1)当输入为u(t)??(t)时,用函数initial( )和impulse( )求解系统的状态响应和输出响应的数值解,并绘制系统的状态响应曲线、输出响应曲线和状态轨迹。
(2)当输入为u(t)?1(t)时,用函数initial( )和step( )求解系统的状态响应和输出响应的数值解,并绘制系统的状态响应曲线、输出响应曲线和状态轨迹。
(3)当输入为u(t)?t时,用函数initial( )和lsim( )求解系统的状态响应和输出响应的数值解,并绘制系统的状态响应曲线、输出响应曲线和状态轨迹。
(4)当输入为u(t)?sin(t)时,用函数initial( ) 和lsim( )求解系统的状态响应和输出响应的数值解,并绘制系统的状态响应曲线、输出响应曲线和状态轨迹。
三、附录
1、线性定常连续系统状态转移矩阵的计算
线性定常连续系统的状态转移矩阵为?(t)?eAt?L?1[(sI?A)?1]。 (3-2-1) 在MATLAB中, 状态转移矩阵可直接用指数矩阵法和拉氏反变换法计算。 例2-1 求系统矩阵A对应的状态转移矩阵。 A??1??0?
?2?3??指数矩阵法:
在命令窗中运行下列命令
>> A=[0 1;-2 -3];syms t; phet=expm(A*t) 返回 phet =
[ -exp(-2*t)+2*exp(-t), exp(-t)-exp(-2*t)] [ -2*exp(-t)+2*exp(-2*t), 2*exp(-2*t)-exp(-t)] 拉氏反变换法:
在命令窗中运行下列命令
>> A=[0 1;-2 -3]; syms s;G=inv(s*eye(size(A))-A) 返回 G =
[ (s+3)/(s^2+3*s+2), 1/(s^2+3*s+2)] [ -2/(s^2+3*s+2), s/(s^2+3*s+2)]
即(sI?A)?1。再对其进行拉氏逆变换,即在命令窗中输入语句 >>phet= ilaplace(G) 返回 phet =
[ -exp(-2*t)+2*exp(-t), exp(-t)-exp(-2*t)] [ -2*exp(-t)+2*exp(-2*t), 2*exp(-2*t)-exp(-t)]
2. 线性定常连续系统的状态方程求解
如果线性定常连续系统的状态空间表达式为
??Ax?Bu xy?Cx?Du
且初始状态为x(0),那么状态方程解的拉氏变换式为
x(s)?(sI?A)?1x(0)?(sI?A)?1Bu(s) (3-2-2)
其解为
tx(t)?ex(0)??eA(t??)Bu(?)d? (3-2-3)
At0其中零输入响应为 eAtx(0)或L?1{(sI?A)?1}x(0) (3-2-4) 零状态响应为
?t0eA(t??)Bu(?)d?或L?1{(sI?A)?1Bu(s)} (3-2-5)
?1?1?1系统的输出响应为 L{C(sI?A)x(0)?C(sI?A)Bu(s)}?Du(t) (3-2-6) 例2-2 已知系统的状态方程为
??? x1??0?0?x?u ?????2?3??1??1?试求初始状态为x(0)???,输入分别为u(t)?1(t)和 u(t)?t时状态方程的解。
??1?编制程序%ex22求输入为u(t)?1(t)时状态方程的解。该程序如下:
A=[0 1;-2 -3];syms s;G=inv(s*eye(size(A))-A);phet=ilaplace(G);X0=[1 -1]';Xt1=phet*X0; >> B=[0 1]';Xt2=ilaplace(G*B*(1/s)) 在命令窗中运行该程序,即 >> ex22 返回 xt1 =
[ exp(-t)] [ -exp(-t)] xt2 =
[ 1/2-exp(-t)+1/2*exp(-2*t)] [ exp(-t)-exp(-2*t)]
其中xt1为零输入响应,xt2为零状态响应。
将该程序中u(s)?11用u(s)?2代替可求出输入为单位斜坡函数时状态方程的解 ssxt1 =
[ exp(-t)] [ -exp(-t)] xt2 =
[ 1/2*t-3/4-1/4*exp(-2*t)+exp(-t)] [ 1/2-exp(-t)+1/2*exp(-2*t)]
上述得到的是状态方程的解析解,MATLAB提供的函数step( ) 、impulse( )、lsim( ) 和initial( )可以求得系统响应的数值解。
? 函数step( ) 可直接求取线性连续系统的单位阶跃响应。该函数的调用格式为:
y?step(G,t) 其中G为给定系统LTI模型,t为时间向量。通常取t=0:dt:t-end,
其中t-end为终值时间,而dt为时间步长。y为系统输出。
y?step(G) 这时时间向量t自动生成。
[y,t,x]?step(G,t) 或 [y,t,x]?ste(pG) 如果G为状态空间模型,则x为系统
状态向量,否则x将返回空矩阵。
step(G,t) 或 ste(pG) 此时不返回任何变量,而自动地绘制单位阶跃响应输出曲
线。
? 函数impulse( ) 可直接求取线性系统的单位脉冲响应。该函数的调用格式与函数
step( )的调用格式相似。
? 函数lsim( ) 可直接求取线性系统在任意输入信号作用下的响应。该函数的调用格式为:
y?lsim(G,u,t)
其中u为与时间向量t对应的输入向量。当然还可以和step( )函数一样有其它的调用格式。 ? 函数initial( ) 可求解系统的零输入响应。该函数的调用格式为
y?initial(G,x0) 或 [y,t,x]?initi(aG,lx0)
其中G为状态空间模型,x0为初始状态。 例2-3 已知系统为
1??0?0????xx?u ?????2?3??1?y??11?x
初始状态为x(0)???1?,试求u(t)为单位阶跃函数时系统状态响应和输出响应,并绘制???1?状态响应曲线和输出响应曲线。
在命令窗中运行下列命令,建立状态空间模型,计算系统在初始状态作用下的状态响应和输出响应,并绘制相应的响应曲线。
>> A=[0 1;-2 -3]; B=[0;1]; C=[1 1]; D=0; G=ss(A,B,C,D); t=0:0.5:10; x0=[1;-1];
[yo,t,xo]=initial(G,x0,t); plot(t,xo,':',t,yo,'-') 返回图1。
图1状态响应 图2 输出响应
在命令窗中继续运行下列命令,计算系统在输入作用下的状态响应和输出响应,并绘制相应的响应曲线。
>>figure('pos',[50 50 200 150],'color','w'); u=ones(size(t));
[yu,t,xu]=lsim(G,u,t); plot(t,xu,':',t,yu,'-') 返回图2。
再继续运行下列命令求系统总的状态响应和输出响应,并绘制相应的响应曲线。 >>y=yo+yu; x=xo+xu; plot(t,x,':',t,y,'-') 返回图3。
图3 图4 例2-4 已知系统
??? x1??0?2?x?u ?????5?6??0? y??12?x
求出系统在初始状态为零,且u(t)?e?t(t?0)时系统的状态响应和输出响应。
3. 线性定常离散系统状态方程的解
如果线性定常离散系统的状态空间表达式为
x(k?1)?Gx(k)?Hu(k)
y(k)?Cx(k)?Du(k) (3-2-7)
初始状态为x(0),那么状态方程的解为
x(k)?Z{(zI?G)z}x(0)?Z{(zI?G)HU(z)} (3-2-8) 系统的状态转移矩阵为?(k)?G?Z{(zI?G)z} (3-2-9) 系统的输出为
k?1?1?1?1?1?1