资源描述:
《动态矩阵控制算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.MATLAB环境下动态矩阵控制实验一算法实现设某工业对象的传递函数为:GP(s)=e-80s/(60s+1),采用DMC后的动态特性如图1所示。在仿真时采样周期T=20s,优化时域P=10,控制时域M=2,建模时域N=20。MATLAB程序1:g=poly2tfd(1,[601],0,80);%通用传递函数模型转换为MPC传递函数模型delt=20;%采样周期nt=1;%输出稳定性向量tfinal=1000;%截断时间model=tfd2step(tfinal,delt,nt,g);%传递函数模型转换为阶跃响应模型plant=model;%进行模型预
2、测控制器设计p=10;%优化时域m=2;%控制时域ywt=[];uwt=1;%设置输入约束和参考轨迹等控制器参数kmpc=mpccon(plant,ywt,uwt,m,p);%模型预测控制器增益矩阵计算tend=1000;r=1;%仿真时间[y,u,yrn]=mpcsim(plant,model,kmpc,tend,r);%模型预测控制仿真t=0:20:1000;plot(t,y)xlabel('图1DMC控制系统的动态阶跃响应曲线(time/s)');..ylabel('响应曲线');图中曲线为用DMC控制后系统的阶跃响应曲线。从图中可以看出:采用D
3、MC控制后系统的调整时间小,响应的快速性好,而且系统的响应无超调。该结果是令人满意的。二P和M对系统动态性能的影响1.P对系统性能的影响优化时域P表示我们对k时刻起未来多少步的输出逼近期望值感兴趣。当采样周期T=20s,控制时域M=2,建模时域N=20,优化时域P分别为6,10和20时的阶跃响应曲线如图2所示。MATLAB程序2:..g=poly2tfd(1,[601],0,80);%通用传递函数模型转换为MPC传递函数模型delt=20;%采样周期nt=1;%输出稳定性向量tfinal=1000;%截断时间model=tfd2step(tfinal,
4、delt,nt,g);%传递函数模型转换为阶跃响应模型plant=model;%进行模型预测控制器设计p1=6;p2=10;p3=20;%优化时域m=2;%控制时域ywt=[];uwt=1;kmpc1=mpccon(plant,ywt,uwt,m,p1);kmpc2=mpccon(plant,ywt,uwt,m,p2);kmpc3=mpccon(plant,ywt,uwt,m,p3);tend=1000;r=1;[y1,u,yrn]=mpcsim(plant,model,kmpc1,tend,r);[y2,u,yrn]=mpcsim(plant,mod
5、el,kmpc2,tend,r);[y3,u,yrn]=mpcsim(plant,model,kmpc3,tend,r);t=0:20:1000;plot(t,y1,t,y2,t,y3)legend('1-p=6','2-p=10','3-p=20');xlabel('图2P不同对系统性能的影响(time/s)');ylabel('响应曲线');..图中曲线1为P=6时的阶跃响应曲线;曲线2为P=10时的阶跃响应曲线;曲线3为P=20时的阶跃响应曲线。从图中可以看出:增大P,系统的快速性变差,系统的稳定性增强;减小P,系统的快速性变好,稳定性变差。所以
6、P的选择应该兼顾快速性和稳定性。..2.M对系统性能的影响控制时域M表示所要确定的未来控制量的改变数目。当采样周期T=20s,优化时域P=20,建模时域N=20,控制时域M分别取4,2和1时系统的响应曲线如图3所示。MATLAB程序3:..g=poly2tfd(1,[601],0,80);%通用传递函数模型转换为MPC传递函数模型delt=20;%采样周期nt=1;%输出稳定性向量tfinal=1000;%截断时间model=tfd2step(tfinal,delt,nt,g);%传递函数模型转换为阶跃响应模型plant=model;%进行模型预测控制
7、器设计p=20;%优化时域m1=4;m2=2;m3=1;%控制时域ywt=[];uwt=1;kmpc1=mpccon(plant,ywt,uwt,m1,p);kmpc2=mpccon(plant,ywt,uwt,m2,p);kmpc3=mpccon(plant,ywt,uwt,m3,p);tend=1000;r=1;[y1,u,yrn]=mpcsim(plant,model,kmpc1,tend,r);[y2,u,yrn]=mpcsim(plant,model,kmpc2,tend,r);[y3,u,yrn]=mpcsim(plant,model,km
8、pc3,tend,r);t=0:20:1000;plot(t,y1,t,y2,t,y3)leg