现代控制实验报告
指导老师 设计者 学 号 专业班级 设计日期
实验一 用MATLAB分析状态空间模型
1、实验设备
PC计算机1台,MATLAB软件1套。
2、实验目的
① 学习系统状态空间表达式的建立方法、了解系统状态空间表达式与传递函数相互转换的方法;
② 通过编程、上机调试,掌握系统状态空间表达式与传递函数相互转换方法。
3、实验原理说明
线性系统数学模型的常见的形式有,输入输出模式数学模型(传递函数和微分方程)和状态空间模式数学模型(状态空间表达式或动态方程)。传递函数模型一般可表示为:
mm1b(t)sb(t)sbm1(t)sbm(t)01 g(s)sna1(t)sn1an1(t)san(t)
若上式中分子分母各项系数为常数,则系统称为线性定常系统(linear time invariant,LTI) 利用下列命令可轻易地将传递函数模型输入MATLAB环境中。
>>num=[b0,b1,…,bn]; >>den=[1,a1,a2,…,an];
而调用tf()函数可构造出对应传递函数对象。调用格式为: >>G=tf(num,den);
其中(num,den)分别为系统的分子和分母多项式系数的向量,返回变量G为系统传递函数对象。
线性定常系统的状态空间模型可表示为
xAxBu
yCxDu
表示状态空间模型的基本要素是状态向量和常数矩阵A,B,C,D。用类似的方法可将其输入MATLAB环境,对单输入单输出系统,
>>A=[a11,a12,…a1n;a21,a22,…a2n;…;an1,an2,…ann]; >>B=[b1;b2;…;bn]; >>C=[c1,c2,…cn]; >>D=d;
调用ss()状态方程对象可构造状态方程模型,调用格式如下: >>ss(A,B,C,D)
对于两种模型之间的转换,则可分别调用tf()和ss()完成,即: >>G1=tf(G) >>G2=ss(G’)
4、实验步骤
① 根据所给系统的传递函数或A、B、C矩阵,依据系统的传递函数阵和状态空间表达
式之间的关系式,采用MATLAB编程。
② 在MATLAB界面下调试程序,并检查是否运行正确。 题1.1 已知SISO系统的传递函数为
g(s)s25s8s42s36s23s9
(1)将其输入到MATLAB工作空间; (2)获得系统的状态空间模型。
题1.2 已知SISO系统的状态空间表达式为
x1010x11x2001x23u,y1x3432x36(1)将其输入到MATLAB工作空间; (2)求系统的传递函数。
题1.1代码及结果
num=[1,5,8]; den=[1,2,6,3,9]; G=tf(num,den); G1=ss(G) a =
x1 x2 x3 x4 x1 -2 -1.5 -0.375 -1.125 x2 4 0 0 0 x3 0 2 0 0 x4 0 0 1 0 b =
u1 x1 1 x2 0 x3 0 x4 0 c =
x1 x2 x3 x4 y1 0 0.25 0.625 1 d =
u1 y1 0
Continuous-time model.
x100x2x3
题1.2代码及结果
A=[0,1,0;0,0,1;-4,-3,-2]; B=[1;3;-6]; C=[1,0,0]; D=0;
G=ss(A,B,C,D); G1=tf(G)
Transfer function: s^2 + 5 s + 3 ------------------------- s^3 + 2 s^2 + 3 s + 4
实验二 利用MATLAB求解系统的状态方程
1、实验设备
PC计算机1台,MATLAB软件1套。
2、实验目的
① 学习系统齐次、非齐次状态方程求解的方法,计算矩阵指数,求状态响应; ② 通过编程、上机调试,掌握求解系统状态方程的方法,学会绘制状态响应曲线; ③ 掌握利用MATLAB导出连续状态空间模型的离散化模型的方法。
3、实验原理说明
在MATLAB中,调用expm(A)可求得矩阵指数 e A ;调用step()可求取阶跃输入时系统的状态响应;调用lsim()可求取零状态响应;调用initial()可求取零输入响应。它们的调用格式分别如下:
>>expm(A)
>>[y,t,x]=step(G) >>[y,t,x]=lsim(G,u,t) >>[y,t,x]=initial(G,x0)
4、实验步骤
(1)根据所给系统的状态方程,依据系统状态方程的解的表达式,采用MATLAB编程。 (2)在MATLAB界面下调试程序,并检查是否运行正确。 题2.1 已知SISO系统的状态方程为
013xxu230 y11x(1)u0,x01,求当t=0.5时系统的矩阵系数及状态响应; 100(2)u1(t),x0,绘制系统的状态响应及输出响应曲线;
(3)u1ecos3t,x0,绘制系统的状态响应及输出响应曲线;
t00(4)u0,x0,绘制系统的状态响应及输出响应曲线;
12(5)在余弦输入信号和初始状态x0下的状态响应曲线。 题2.2 已知一个连续系统的状态方程是
11100xxu 2541若取采样周期T0.05秒
(1)试求相应的离散化状态空间模型;
(2)分析不同采样周期下,离散化状态空间模型的结果。
题2.1代码及结果 (1).
>> A=[0,1;-2,-3]; >> expm(A*0.5)
ans =
0.8452 0.2387 -0.4773 0.1292
>> x0=[1;-1];
>> x=expm(A*0.5)*x0 x =
0.6065
-0.6065 (2).
>>A=[0,1;-2,-3];B=[3;0];C=[1,1];D=0; >>G=ss(A,B,C,D);[y,t,x]=step(G);plot(t,x) 状态响应:
plot(t,y) 输出响应:
(3).
A=[0,1;-2,-3];B=[3;0];C=[1,1];D=0; t=[0:.04:4];u=1+exp(-t).*cos(3*t);
G=ss(A,B,C,D);[y,t,x]=lsim(G,u,t);plot(t,x) 状态响应:
plot(t,y) 输出响应:
(4).
A=[0,1;-2,-3];B=[3;0];C=[1,1];D=0;
t=[0:.04:7];u=0;x0=[1;2];G=ss(A,B,C,D); [y,t,x]=initial(G,x0,t);plot(t,x) 状态响应:
plot(t,y) 输出响应:
(5).
A=[0,1;-2,-3];B=[3;0];C=[1,1];D=zeros(1,1); x0=[1;1];t=[0:.04:15]; u=cos(t); G=ss(A,B,C,D); G1=tf(G);
[y1,t,x1]=initial(G,x0,t); [y2,t,x2]=lsim(G,u,t); y=y1+y2;
x=x1+x2; plot(t,x); 状态响应:
题2.2代码及结果
>>A=[0,1;-25,-4];B=[0;1]; >> [Gz,Hz]=c2d(A,B,0.05) Gz =
0.9709 0.0448 -1.1212 0.7915 Hz =
0.0012 0.0448
实验三 系统的能控性、能观测性分析
1、实验设备
PC计算机1台,MATLAB软件1套。
2、实验目的
① 学习系统状态能控性、能观测性的定义及判别方法;
② 通过用MATLAB编程、上机调试,掌握系统能控性、能观测性的判别方法,掌握将一般形式的状态空间描述变换成能控标准形、能观标准形。
3、实验原理说明
由系统状态方程求能控性矩阵Uc,调用函数rank()可求得Uc的秩,从而判断系统的能控性,同理求得能观性矩阵Uo,用rank()求其秩,再判断系统的能观性。
4、实验步骤
① 根据系统的系数阵A和输入阵B,依据能控性判别式,对所给系统采用MATLAB编
程;在MATLAB界面下调试程序,并检查是否运行正确。
② 根据系统的系数阵A和输出阵C,依据能观性判别式,对所给系统采用MATLAB编
程;在MATLAB界面下调试程序,并检查是否运行正确。
③ 构造变换阵,将一般形式的状态空间描述变换成能控标准形、能观标准形。 题3.1 已知系数阵A和输入阵B分别如下,判断系统的状态能控性
6.66610.66670.33330, B1
A1011201题3.2 已知系数阵A和输出阵C分别如下,判断系统的状态能观性。
6.66610.66670.3333, C102
A101120题3.3 已知系统状态空间描述如下
05x2y112110u12x 0010x(1)判断系统的状态能控性; (2)判断系统的状态能观测性;
(3)构造变换阵,将其变换成能控标准形; (4)构造变换阵,将其变换成能观测标准形;
题3.1代码及结果
A=[6.666,-10.6667,-0.3333;1,0,1;0,1,2];B=[0;1;1]; Uc=[B,A*B,A^2*B]; rank(Uc)
ans =
3
题3.2代码及结果
A=[6.666,-10.6667,-0.3333;1,0,1;0,1,2];C=[1,0,2]; Uo=[C;C*A;C*A^2]; rank(Uo)
ans =
3
题3.3代码及结果
A=[0,2,-1;5,1,2;-2,0,0];B=[1;0;-1];C=[1,1,0]; Uc=[B,A*B,A^2*B]; Uo=[C;C*A;C*A^2]; (1).判断能控性: rank(Uc)
ans =
3
(2).判断能观性: >> rank(Uo)
ans =
3
(3).构造变换阵,转化成能控标准型: A=[0,2,-1;5,1,2;-2,0,0];B=[1;0;-1];C=[1,1,0]; Uc=[B,A*B,A^2*B]; rank(Uc);
p1=[0,0,1]*inv(Uc); P=[p1;p1*A;p1*A^2] P =
0.13 0.0455 0.13 -0.0455 0.3182 -0.0455 1.6818 0.2273 0.6818
>> Ac=P*A*inv(P) Ac =
0 1.0000 0
0 0.0000 1.0000 -10.0000 12.0000 1.0000
>> Bc=P*B Bc =
0 0 1.0000
(4).构造变换阵,转化成能观标准型: A=[0,2,-1;5,1,2;-2,0,0];B=[1;0;-1];C=[1,1,0]; Uo=[C;C*A;C*A^2]; rank(Uo);
T1=inv(Uo)*[0;0;1]; T=[T1,A*T1,A^2*T1] T =
-0.5000 0 -1.0000 0.5000 0 2.0000 1.0000 1.0000 0
>> Ao=inv(T)*A*T
Ao =
0 0 -10 1 0 12 0 1 1
>> Co=C*T Co =
0 0 1
实验四 系统稳定性分析
1、实验设备
PC计算机1台,MATLAB软件1套。 2、实验目的
① 学习系统稳定性的定义及李雅普诺夫稳定性定理;
② 通过用MATLAB编程、上机调试,掌握系统稳定性的判别方法。 3、实验原理说明
根据李雅普诺夫第一第二方法判断系统的稳定性。 4、实验步骤
(1)掌握利用李雅普诺夫第一方法判断系统稳定性; (2)掌握利用李雅普诺夫第二方法判断系统稳定性。 题4.1 某系统状态空间描述如下
05x2y112110u12x 0010x(1)利用李雅普诺夫第一方法判断其稳定性; (2)利用李雅普诺夫第二方法判断其稳定性。
题4.1代码及结果
(1)李雅普诺夫第一方法: %存为stability.m %输入系统状态方程
A=[0,2,-1;5,1,2;-2,0,0];B=[1;0;-1];C=[1,1,0];D=0; %设立标志变量,判断是否稳定 flag=0;
%求解零极点及增益 [z,p,k]=ss2zp(A,B,C,D,1); %显示结果
disp('System zero-points,pole-points and gain are:'); z p k
%判断是否稳定 n=length(A); for i=1:n
if real(p(i))>0 flag=1; end end
if flag==1
disp('System is unstable'); else
disp('System is stable'); end
%运行 >> stability
System zero-points,pole-points and gain are: z =
1.0000 -4.0000 p =
-3.3978 3.5745 0.8234 k =
1
System is unstable
(2)李雅普诺夫第二方法: %存为stability2.m %系统状态方程模型 A=[0,2,-1;5,1,2;-2,0,0]; %选 Q=I Q=eye(3,3); %求解矩阵 P P=lyap(A,Q);
%显示矩阵P的各阶主子式的值并判断是否稳定 flag=0;
n=length(A); for i=1:n
det(P(1:i,1:i))
if(det(P(1:i,1:i))<=0) flag=1; end end
%显示结果 if flag==1
disp('System is unstable'); else
disp('System is stable'); end
%运行
>> stability2
ans =
-2.1250
ans =
-8.7813
ans =
6.1719
System is unstable
实验五 利用MATLAB实现极点配置、设计状态观测器
1、实验设备
PC计算机1台,MATLAB软件1套。
2、实验目的
① 学习闭环系统极点配置定理及算法,学习全维状态观测器设计方法;
② 通过用MATLAB编程、上机调试,掌握极点配置算法,设计全维状态观测器。
3、实验原理说明
采用直接计算反馈矩阵、Ackermann公式计算法、调用place函数法进行闭环系统极点配置。设计全维状态观测器。
4、实验步骤
(1)掌握采用直接计算法、采用Ackermann公式计算法、调用place函数法分别进行闭环系统极点配置;
(2)掌握利用MATLAB设计全维状态观测器。 题5.1 某系统状态方程如下
00x4y101013u01x 3260x理想闭环系统的极点为123,试
(1)采用直接计算法进行闭环系统极点配置;
(2)采用Ackermann公式计算法进行闭环系统极点配置; (3)采用调用place函数法进行闭环系统极点配置。 题5.2 某系统状态空间描述如下
010x001x13u4326 y100x设计全维状态观测器,要求状态观测器的极点为12
题5.1代码及结果
(1)直接计算法: %存为pole.m
%系统状态方程模型
A=[0,1,0;0,0,1;-4,-3,-2];B=[1;3;-6];C=[1,0,0];D=0; %理想闭环极点 P=[-1,-2,-3]; syms k1 k2 k3 s; K=[k1,k2,k3];
eg=simple(det(s*diag(diag(ones(size(A))))-A+B*K)); f=1; for i=1:3
f=simple(f*(s-P(i))); end f=f-eg;
[k1,k2,k3]=solve(subs(f,'s',0),subs((diff(f,'s')),'s',0),diff(f,'s',2))
%运行 >>pole k1 =
194/131 k2 =
3。
98/131 k3 =
-6/131
(2)采用Ackermann公式计算: %存为bijuan.m
%系统状态方程模型
A=[0,1,0;0,0,1;-4,-3,-2];B=[1;3;-6];C=[1;0;0]; %理想闭环极点 P=[-1,-2,-3]; K=acker(A,B,P) A-B*K
%运行 >>bihuan K =
1.4809 0.7481 -0.0458
ans =
-1.4809 0.2519 0.0458 -4.4427 -2.2443 1.1374 4.8855 1.4885 -2.2748
(3)调用place函数法: %存为bihuan.m %系统状态方程模型
A=[0,1,0;0,0,1;-4,-3,-2];B=[1;3;-6];C=[1;0;0]; eig(A)'
%理想闭环极点 P=[-1,-2,-3]; K=place(A,B,P) eig(A-B*K)'
%运行 >> bihuan
ans =
-1.6506 -0.1747 - 1.5469i -0.1747 + 1.5469i K =
1.4809 0.7481 -0.0458
ans =
-3.0000 -2.0000 -1.0000
题5.2代码及结果: %存为quanwei.m %系统状态方程
A=[0,1,0;0,0,1;-4,-3,-2];B=[1;3;-6];C=[1,0,0]; n=3;
%计算能观性矩阵 ob=obsv(A,C);
%计算能观性矩阵的秩 roam=rank(ob); %判断系统能观性 if roam==n
disp('System is observable'); elseif roam~=n
disp('System is not observable'); end
%运行 >>quanwei
System is observable
%设计全维状态观测器 %系统状态方程
A=[0,1,0;0,0,1;-4,-3,-2];B=[1;3;-6];C=[1,0,0]; %理想闭环极点 P=[-1,-2,-3];
A1=A';B1=C';C1=B'; K=acker(A1,B1,P); %求解系统矩阵 E=(K)'
aEc=A-E*C
%运行
>>quanwei E =
4 0 -10
aEc =
-4 1 0 0 0 1 6 -3 -2
实验心得:
通过这次实验,我对于Matlab的使用更加熟悉,深深的感受到了这个软件的魅力所在。它强大的运算功能让我深深的折服了!在自己编程的过程中,我对于相关的知识有了更深的认知,系统的能控性、能观测性,系统的极点配置等等,掌握的更加熟悉!我相信,这对于以后的学习,会有更大的帮助!
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务