模型算法控制 1.docx
《模型算法控制 1.docx》由会员分享,可在线阅读,更多相关《模型算法控制 1.docx(13页珍藏版)》请在冰豆网上搜索。
模型算法控制1
MATLAB环境下模型算法控制实验
122030040仇磊
1.考虑如下的双输入双输出纯时延对象,其传递函数矩阵为:
解:
MATLAB程序如下:
%将传递函数模型转换为阶跃响应模型
g11=poly2tfd(12.8,[16.71],0,1);
g12=poly2tfd(6.6,[10.91],0,7);
g21=poly2tfd(-18.9,[21.01],0,3);
g22=poly2tfd(-19.4,[14.41],0,3);
delt=3;
ny=2;
tfinal=90;
model=tfd2step(tfinal,delt,ny,g11,g12,g21,g22);
%进行模型预测控制器设计
plant=model;
%预测时域长度为6
p=6;m=2;
ywt=[];uwt=[11];
%设置输入约束和参考轨迹等控制器参数
r=[11];
tend=30;%仿真时间为30
ulim=[-0.1-0.10.50.50.1100];
ylim=[];
[y,u,ym]=cmpc(plant,model,ywt,uwt,m,p,tend,r,ulim,ylim);
plotall(y,u,delt)
闭环系统的输出和控制量变化曲线如图所示:
2.设系统的传递函数矩阵为:
解:
MATLAB程序如下:
g11=poly2tfd(12.8,[16.71],0,1);
g12=poly2tfd(6.6,[10.91],0,7);
g21=poly2tfd(-18.9,[21.01],0,3);
g22=poly2tfd(-19.4,[14.41],0,3);
delt=3;
ny=2;
imod=tfd2mod(delt,ny,g11,g12,g21,g22);
pmod=imod;
p=6;m=2;
ywt=[];uwt=[11];
tend=30;
r=[01];
ulim=[-inf-0.15infinf0.1100];
ylim=[];
[y,u,ym]=scmpc(pmod,imod,ywt,uwt,m,p,tend,r,ulim,ylim);
plotall(y,u,delt)
闭环系统的输出和控制量变化曲线如图所示:
在添加对输出变量的约束后,再利用以下程序对系统进行模型预测控制器的设计
ulim=[-inf-0.15infinf0.1100];
ylim=[00infinf];
[y,u,ym]=scmpc(pmod,imod,ywt,uwt,m,p,tend,r,ulim,ylim);
plotall(y,u,delt)
得到闭环控制系统输出响应和控制量变化曲线如图:
3.考虑有如下传递函数距阵的多变量系统的状态空间模型预测控制器设计问题
解:
MATLAB程序如下:
%在进行模型预测控制器设计之前,首先将系统模型转换为状态空间形式
T=2;
g11=poly2tfd(12.8,[16.71],0,1);
g12=poly2tfd(6.6,[10.91],0,7);
g21=poly2tfd(-18.9,[21.01],0,3);
g22=poly2tfd(-19.4,[14.41],0,3);
umod=tfd2mod(T,2,g11,g12,g21,g22);
%定义扰动模型
g13=poly2tfd(3.8,[14.91],0,8)
g23=poly2tfd(4.9,[13.21],0,3)
dmod=tfd2mod(T,2,g13,g23);
%建立叠加了扰动的混合系统模型
pmod=addumd(umod,dmod);
%考虑精确建模的情况
imod=pmod;
ywt=[];uwt=[];
%预测时域和控制时域均为5
P=5;
M=P;
Ks=smpccon(imod,ywt,uwt,M,P);
tend=30;
r=[10];
[y,u]=smpcsim(pmod,imod,Ks,tend,r);
plotall(y,u,T)
得到闭环控制系统输出响应和控制量变化曲线如图:
增加预测时域长度,同时减少控制时域长度后,再利用以下程序
P=10;
M=3;
Ks=smpccon(imod,ywt,uwt,M,P);
tend=30;
r=[10];
[y,u]=smpcsim(pmod,imod,Ks,tend,r);
plotall(y,u,T)
可得闭环系统的输出和控制量变化曲线如图所示:
进一步改变控制时域长度,采用控制量分块的形式,即再利用以下程序
P=10;
M=[234];
tend=30;
r=[10];
Ks=smpccon(imod,ywt,uwt,M,P);
[y,u]=smpcsim(pmod,imod,Ks,tend,r);
plotall(y,u,T)
可得到的闭环系统的输出和控制量变化曲线:
增加输入控制量的加权矩阵系数,即再利用以下程序
uwt=[11];
P=5;
M=P;
Ks=smpccon(imod,ywt,uwt,M,P);
tend=30;
r=[10];
[y,u]=smpcsim(pmod,imod,Ks,tend,r);
plotall(y,u,T)
可得模型预测闭环控制系统输出控制量变化曲线如下图所示:
再利用以下程序将输出设定值均设为0,
ulim=[];Kest=[];
z=[];
v=[];
w=[1];
[y,u]=smpcsim(pmod,imod,Ks,tend,r,ulim,Kest,z,v,w);
plotall(y,u,T)
绘制闭环系统的输出和控制量变化曲线,如图所示:
利用以下程序采用估计器进一步改善系统性能
[Kest,newmod]=smpcest(imod,[15,15],[33]);
Ks=smpccon(newmod,ywt,uwt,M,P);
[y,u]=smpcsim(pmod,newmod,Ks,tend,r,ulim,Kest,z,v,w);
plotall(y,u,T)
对应的系统输出和控制量变化曲线如图所示:
4.考虑如下的多变量系统
解:
MATLAB程序如下:
g11=poly2tfd(12.8,[16.70],0,1);
g12=poly2tfd(6.6,[10.91],0,7);
g21=poly2tfd(-18.9,[21.01],0,3);
g22=poly2tfd(-19.4,[14.41],0,3);
delt=1;
ny=2;
imod=tfd2mod(delt,ny,g11,g12,g21,g22);
gw1=poly2tfd(3.8,[14.91],0,8)
gw2=poly2tfd(4.9,[13.21],0,3)
pmod=addumd(imod,tfd2mod(delt,ny,gw1,gw2));
%设计模型预测控制器
P=6;M=2;
ywt=[];uwt=[11];
Ks=smpccon(imod,ywt,uwt,M,P);
r=[];
ulim=[];
z=[];
v=[];
w=[1];
wu=[];
tend=30;
[y3,u3]=smpcsim(pmod,imod,Ks,tend,r,ulim,[],z,v,w,wu);
%设计状态估计器
Kest1=smpcest(pmod,1,0.001*eye(ny));
Ks1=smpccon(pmod,ywt,uwt,M,P);
[y1,u1]=smpcsim(pmod,pmod,Ks1,tend,r,ulim,Kest1,z,v,w,wu);
plotall(y1,u1,delt)
采用了状态估计器的闭环系统输出和控制量变化曲线如图所示:
下面进行简化的状态估计器设计
tau=[1010];
signoise=[33];
[Kest2,newmod]=smpcest(imod,tau,signoise);
Ks2=smpccon(newmod,ywt,uwt,M,P);
[y2,u2]=smpcsim(pmod,pmod,Ks1,tend,r,ulim,Kest1,z,v,w,wu);
plotall(y2,u2,delt)
采用简化的状态估计器的闭环系统输出和控制量曲线如图所示: