现代控制理论实验指导书自动化Word格式文档下载.doc
《现代控制理论实验指导书自动化Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《现代控制理论实验指导书自动化Word格式文档下载.doc(115页珍藏版)》请在冰点文库上搜索。
》den=[24622];
》sys=tf(num,den)
相应的
(2)系统的MATLAB程序为:
借助多项式乘法函数conv来处理:
》num=4*conv([1,2],conv([1,6,6],[1,6,6]));
》den=conv([1,0],conv([1,1],conv([1,1],conv([1,1],[1,3,2,5]))));
2、零极点增益模型
零极点增益模型为:
若已知系统的
其中:
K为系统增益,zi为零点,pj为极点。
则在MATLAB中零极点增益模型建立函数为:
sys=zpk(z,p,k)
z=[z1,z2,…,zm]
p=[p1,p2,...,pn]
K=[k]
例:
已知系统的零极点增益模型:
则在MATLAB中建立零极点增益模型的程序如下:
》z=[-3];
p=[-1,-2,-5];
k=6;
》sys=zpk(z,p,k)
3、状态空间模型
状态方程与输出方程的组合称为状态空间表达式,又称为动态方程,经典控制理论用传递函数将输入—输出关系表达出来,而现代控制理论则用状态方程和输出方程来表达输入—输出关系,揭示了系统内部状态对系统性能的影响。
若已知系统的状态空间模型为:
则在MATLAB中状态空间模型建立函数为:
sys=ss(A,B,C,D)。
已知系统的状态空间模型为:
系统为一个两输入两输出系统,则在MATLAB中状态空间模型建立程序如下:
》A=[16910;
31268;
47911;
5121314];
》B=[46;
24;
22;
10];
》C=[0021;
8022];
》D=zeros(2,2);
》sys=ss(A,B,C,D)
二、模型的转换
在一些场合下需要用到某种模型,而在另外一些场合下可能需要另外的模型,这就需要进行模型的转换。
模型转换的函数包括:
(1)ss2tf:
状态空间模型转换为传递函数模型。
格式为:
[num,den]=ss2tf(a,b,c,d)
(2)ss2zp:
状态空间模型转换为零极点增益模型。
[z,p,k]=ss2zp(a,b,c,d)
(3)tf2zp:
传递函数模型转换为零极点增益模型。
[z,p,k]=tf2zp(num,den)
(4)tf2ss:
传递函数模型转换为状态空间模型。
[a,b,c,d]=tf2ss(num,den)
(5)zp2ss:
零极点增益模型转换为状态空间模型。
[a,b,c,d]=zp2ss(z,p,k)
(6)zp2tf:
零极点增益模型转换为传递函数模型。
[num,den]=zp2tf(z,p,k)
三、模型的连接
1、并联:
parallel
格式:
[a,b,c,d]=parallel(a1,b1,c1,d1,a2,b2,c2,d2)
%并联连接两个状态空间系统。
[num,den]=parallel(num1,den1,num2,den2)
%将并联连接的传递函数进行相加。
2、串联:
series
[a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2)
%串联连接两个状态空间系统。
[num,den]=series(num1,den1,num2,den2)
%将串联连接的传递函数进行相乘。
3、反馈:
feedback
[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2)
%将两个系统按反馈方式连接,一般而言,系统1为对象,系统2为反馈控制器。
[num,den]=feedback(num1,den1,num2,den2,sign)
%可以得到类似的连接,只是子系统和闭环系统均以传递函数的形式表示。
sign的含义与前述相同。
4、闭环:
cloop(单位反馈)
[ac,bc,cc,dc]=cloop(a,b,c,d,sign)
%通过将所有的输出反馈到输入,从而产生闭环系统的状态空间模型。
当sign=1时采用正反馈;
当sign=-1时采用负反馈;
sign缺省时,默认为负反馈。
[numc,denc]=cloop(num,den,sign)
%表示由传递函数表示的开环系统构成闭环系统,sign意义与上述相同。
举例应用:
已知系统1和系统2分别为:
求按串联、并联、正反馈、负反馈连接时的系统状态方程及系统1按单位负反馈连接时的状态方程。
程序如下:
》clc
》clear
》a1=[01;
-1-2];
b1=[0;
1];
c1=[13];
d1=[1];
》a2=[01;
-1-3];
b2=[0;
c2=[14];
d2=[0];
》disp('
串联连接'
)
》[a,b,c,d]=series(a1,b1,c1,d1,a2,b2,c2,d2)
并联连接'
》[a,b,c,d]=parallel(a1,b1,c1,d1,a2,b2,c2,d2)
正反馈连接'
》[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2,+1)
负反馈连接'
》[a,b,c,d]=feedback(a1,b1,c1,d1,a2,b2,c2,d2)
单位负反馈连接'
》[a,b,c,d]=cloop(a1,b1,c1,d1)
[实验内容]
1、熟悉MATLAB的基本操作命令,查看控制系统工具箱的主要命令及功能;
(提示:
在命令窗口输入helpcontrol按回车)
2、已知四个系统的传递函数分别为:
在MATLAB环境下建立它们的系统模型,直接用传递函数模型来表达,并将其转换成零极点模型和状态空间模型。
将用到conv)
3、求第二题中前三个系统串联、并联后的数学模型,并且求前三个系统的闭环系统(反馈环节是H(s)的数学模型。
用series、parallel、feedback)
4、建立下面多变量系统的传递函数模型。
实验二系统的传递函数阵和状态空间表达式的转换
[实验目的]
1学习多变量系统状态空间表达式的建立方法、了解系统状态空间表达式与传递函数相互转换的方法;
2通过编程、上机调试,掌握多变量系统状态空间表达式与传递函数相互转换方法。
一、设系统的模型如式(2.1)所示。
(2.1)
其中A为n×
n维系数矩阵、B为n×
m维输入矩阵C为p×
n维输出矩阵,D为传递阵,一般情况下为0,只有n和m维数相同时,D=1。
系统的传递函数阵和状态空间表达式之间的关系如式(2.2)示。
(2.2)
式(2.2)中,表示传递函数阵的分子阵,其维数是p×
m;
表示传递函数阵的按s降幂排列的分母。
二、实验步骤
①根据所给系统的传递函数或(A、B、C阵),依据系统的传递函数阵和状态空间表达式之间的关系如式(2.2),采用MATLAB的file.m编程。
注意:
ss2tf和tf2ss是互为逆转换的指令;
②在MATLAB界面下调试程序,并检查是否运行正确。
③[例2.1]已知SISO系统的状态空间表达式为(2.3),求系统的传递函数。
(2.3)
程序:
%首先给A、B、C阵赋值;
A=[010;
001;
-4-3-2];
B=[1;
3;
-6];
C=[100];
D=0;
%状态空间表达式转换成传递函数阵的格式为[num,den]=ss2tf(a,b,c,d,u)
[num,den]=ss2tf(A,B,C,D,1)
程序运行结果:
num=
01.00005.00003.0000
den=
1.00002.00003.00004.0000
从程序运行结果得到:
系统的传递函数为:
……………………..(2.4)
④[例2.2]从系统的传递函数(2.4)式求状态空间表达式。
num=[0153];
%在给num赋值时,在系数前补0,使num和den赋值的个数相同;
den=[1234];
[A,B,C,D]=tf2ss(num,den)
A=
-2-3-4
100
010
B=
1
0
C=
153
D=
由于一个系统的状态空间表达式并不唯一,[例2.2]程序运行结果虽然不等于式(2.3)中的A、B、C阵,但该结果与式(2.3)是等效的。
不防对上述结果进行验证。
⑤[例2.3]对上述结果进行验证编程
%将[例2.2]上述结果赋值给A、B、C、D阵;
A=[-2-3-4;
100;
010];
B=[1;
0;
0];
C=[153];
D=0;
[num,den]=ss2tf(A,B,C,D,1)
程序运行结果与[例2.1]完全相同。
1、在运行以上[例]程序的基础上,应用MATLAB对(2.5)系统仿照[例2.2]编程,求系统的A、B、C、阵;
然后再仿照[例2.3]进行验证。
(2.5)
提示:
num=[0012;
0153];
2、在MATLAB下建立下面系统的状态空间模型。
3、若对上述系统实行非奇异变换,且已知变换阵为T=,求其变换后的状态空间描述。
(提示;
Tsys=ss2ss(sys1,T)
4、建立下述系统的状态空间模型,并将其转换成传递函数模型和零极点增益模型。
实验三状态空间控制模型系统仿真及状态方程求解
[实验目的]
1、熟悉线性定常离散与连续系统的状态空间控制模型的各种表示方法。
2、熟悉系统模型之间的转换功能。
3、利用MATLAB对线性定常系统进行动态分析
1、给定系统,求系统的零极点增益模型和状态空间模型,并求其单位脉冲响应及单位阶跃响应。
num=[1213];
den=[10.521];
sys=tf(num,den);
sys1=tf2zp(sys);
sys2=tf2ss(sys);
impulse(sys2);
step(sys2)
sys=tf(num,den)
Transferfunction:
s^3+2s^2+s+3
-----------------------
s^3+0.5s^2+2s+1
sys1=tf2zp(num,den)
sys1=
-2.1746
0.0873+1.1713i
0.0873-1.1713i
a=-0.5000-2.0000-1.0000
1.000000
01.00000
b=1
c=1.5000-1.00002.0000
d=1
单位脉冲响应:
图3.1系统的单位脉冲响应
单位阶跃响应:
图3.2系统的单位阶跃响应
2、已知离散系统状态空间方程:
采样周期。
在域和连续域对系统性能进行仿真、分析。
g=-1-3-2
020
012
>
h=2
-1
c=100
d=0
u=1;
dstep(g,h,c,d,u)
Z域性能仿真图形:
图3.3离散系统的阶跃响应
sysd=ss(g,h,c,d,0.05)
a=x1x2x3
x1-1-3-2
x2020
x3012
b=x12
x21
x3-1
c=x1x2x3
y1100
d=u1
y10
Samplingtime:
0.05
Discrete-timemodel.
sysc=d2c(sysd,'
zoh'
a=x1x2x3x4
x1-9.467e-008-17.45-9.242-62.83
x24.281e-01513.863.115e-0152.733e-015
x3-1.41e-0141013.86-1.396e-014
x462.8348.8741.899.467e-008
b=u1
x11.035
x213.86
x3-17.73
x4-66.32
c=x1x2x3x4
y11000
step(sysc);
连续域仿真曲线:
图3.4离散系统转连续系统后的阶跃响应
1、进行模型间的相互转换。
2、绘出系统单位阶跃及脉冲曲线。
3、已知系统矩阵A=,输入矩阵B=,且,C=[10],单输入u(t)为单位阶跃函数,试求系统的状态响应和输出响应。
用lsim命令,格式为:
[y,x]=lsim(A,B,C,D,输入表达式,初始状态))
4、对于如下状态空间方程:
求系统的阶跃响应y(k),x1(k)和x2(k)。
实验四用MATLAB求线性系统响应的方法
1、了解控制系统工具箱的组成、特点及应用;
2、掌握线性定常系统状态转移矩阵的计算;
3、掌握线性系统状态空间描述的规范型的求法;
4、掌握求线性定常连续和离散系统状态响应和输出响应的方法。
[实验指导]
1求取线性连续系统的阶跃响应函数为(step)
基本格式为:
step(sys)
step(num,den)
step(A,B,C,D)
2求取线性连续系统的单位脉冲响应(impulse)
3求取线性连续系统的零初始响应(initial)
4求取线性连续系统对任意输入的响应(lsim)
5求取线性连续系统的阶跃响应函数为(dstep)
dstep(sys)
dstep(num,den)
dstep(A,B,C,D)
6求取线性连续系统的单位脉冲响应(dimpulse)
7求取线性连续系统的零初始响应(dinitial)
8求取线性连续系统对任意输入的响应(dlsim)
对一系统,其开环传递函数为,求系统的阶跃响应和脉冲响应。
sys=zpk([-2,-1],[0,-3,-4,-4],2)
sys1=tf(sys)转换成传递函数模型
step(sys1)求系统的阶跃响应
impulse(sys1)求系统的脉冲响应
9、具有离散系统状态空间方程的系统动态响应设计
离散系统的状态空间方程为,求其动态响应可用下述步骤:
(1)[num,den]=ss2tf(G,H,C,D)
(2)y=filter(num,den,u)
(3)[num1,den1]=ss2tf(G,H,F,D)
x1=filter(num1,den1,u)F=[10]
(4)[num2,den2]=ss2tf(G,H,J,D)
x2=filter(num2,den2,u)J=[01]
对于如下状态空间方程:
MATLAB程序清单:
G=[01;
-0.16–1];
H=[0;
C=[1.161];
D=[0];
F=[10];
J=[01];
[num,den]=ss2tf(G,H,C,D);
k=0:
50;
u=ones(1,51);
y=filter(num,den,u);
plot(k,y,’g-‘),grid;
xlabel(‘k’);
ylabel(‘y(k)’)
axis([03001.2]);
[num1,den1]=ss2tf(G,H,F,D);
x1=filter(num1,den1,u);
figure;
plot(k,x1,’g-‘),grid;
ylabel(‘x1(k)’)
axis([030–0.31.3]);
[num2,den2]=ss2tf(G,H,J,D);
x2=filter(num2,den2,u);
plot(k,x2,’g-‘),grid;
ylabel(‘x2(k)’)
end
补充:
离散系统输入函数的输入形式
(1)脉冲函数:
u(0)=1,u(k)=0(k=1,2,3,…)
若k=1,2,3,…,60,则在MATLAB程序中可以写成:
u=[1zeros(1,60)]
若脉冲幅值是8,则u=[8zeros(1,60)]
(2)阶跃输入:
u(k)=1(k=0,1,2,…)
若k=0,2,3,…,100,则在MATLAB程序中可以写成:
u=[1ones(1,100)]
或u=ones(1,101),
若幅值为5,则u=5*ones(1,101)
(3)单位斜坡输入:
u=t(t>
=0),在离散系统中t=kT,(k=0,2,3,…),则在MATLAB程序中可以写成:
k=0:
u=(k*T);
如:
T=0.2s,k=50,则有k=0:
u=(k*0.2);
(4)加速度输入:
u(k)=(k=0,1,2,3,…)
如:
k=10,T=0.2s时,MATLAB程序为:
10;
u=[0.5*(0.2*k).^2];
1、已知系统矩阵为A=,试用化矩阵A为对角线规范型方法求系统的状态转移矩阵。
先用eig()函数求A的特征值,然后求非奇异变