预测控制1预测控制作业程序调试8-1:考虑一个单输入单输出的对象,其传递函数为:21()36sGsss解:采用下面的MATLAB程序对该对象进行脉冲响应模型辨识,脉冲响应模型预测输出与预测误差曲线:%将多项式的传递函数模型转换为MPC传递函数模型num=[11];den=[136];h=tf(num,den);%获得脉冲信号x[u,t]=gensig('pulse',2,10,0.1);x=u;%求解LTI对象的单位脉冲响应yt=0:0.1:10;[y,x,t]=lsim(h,x,t);%输入脉冲信号x的归一化处理[ax,mx,stdx]=autosc(x);mx=0;Sx=scal(x,mx,stdx);%生成用于线性回归计算的输入/出数据矩阵n=35;[xreg,yreg]=wrtreg(Sx,y,n);%基于多变量最小二乘法的脉冲响应模型辨识ninput=1;plotopt=2;[theta,yres]=mlr(xreg,yreg,ninput,plotopt);结果如图所示:预测控制28-2:考虑一个双输入单输出的对象,其传递函数矩阵为:14155.721.52601251()sseessGs采样时间为7秒解:采用下面的MATLAB程序对该对象进行脉冲响应模型辨识,脉冲响应模型预测输出与预测误差曲线:num1=5.72;den1=[601];g1=poly2tfd(num1,den1,0,14);num2=1.52;den2=[251];g2=poly2tfd(num2,den2,0,15);%将MPC传递函数模型转换为MPC状态空间模型mod=tfd2mod(7,1,g1,g2);%将MPC状态空间模型转换为通用状态空间模型[A,B,C,D]=mod2ss(mod);%将通用状态空间模型转换LTI对象的状态空间模型sys=ss(A,B,C,D);h=tf(sys);%获得脉冲信号x[u,t]=gensig('pulse',8,10,0.1);x=[uu];%求解LTI对象的单位脉冲响应yt=0:0.1:10;[y,x1,t1]=lsim(h,x,t);%输入脉冲信号x的归一化处理[ax,mx,stdx]=autosc(x);mx=[00];Sx=scal(x,mx,stdx);%生成用于线性回归计算的输入/出数据矩阵n=35;[xreg,yreg]=wrtreg(Sx,y,n);%基于多变量最小二乘法的脉冲响应模型辨识ninput=2;plotopt=2;[theta,yres]=mlr(xreg,yreg,ninput,plotopt);结果如图所示:预测控制38-3:考虑一个单输入单输出的对象,其传递函数为:21()36sGsss解:采用下面的MATLAB程序对该对象进行脉冲响应模型辨识,脉冲响应模型预测输出与预测误差曲线%将多项式的传递函数模型转换为MPC传递函数模型num=[11];den=[136];h=tf(num,den);%获得脉冲信号x[u,t]=gensig('pulse',2,10,0.1);x=[u];%求解LTI对象的单位脉冲响应yt=0:0.1:10;[y,x1,t1]=lsim(h,x,t);%生成用于线性回归计算的输入/输出数据矩阵n=30;[xreg,yreg]=wrtreg(Sx,y,n);%基于部分最小二乘法的脉冲响应模型辨识ninput=2;lv=10;plotopt=2;[theta,yres]=mlr(xreg,yreg,ninput,plotopt);结果如图所示:预测控制48-4:考虑一个单输入单输出的对象,其传递函数为:21()36sGsss解:采用下面的MATLAB程序对该对象进行脉冲响应模型辨识,脉冲响应模型预测输出与预测误差曲线:num=[11];den=[136];h=tf(num,den);%获得脉冲信号x[u,t]=gensig('pulse',2,10,0.1);x=[u];%求解LTI对象的单位脉冲响应yt=0:0.1:10;[y,x1,t1]=lsim(h,x,t);%输入脉冲信号x的归一化处理[ax,mx,stdx]=autosc(x);mx=[0];Sx=scal(x,mx,stdx);%生成用于线性回归计算的输入/输出数据矩阵n=35;[xreg,yreg]=wrtreg(Sx,y,n);%基于多变量最小二乘法的脉冲响应模型辨识ninput=1;plotopt=2;[theta,yres]=mlr(xreg,yreg,ninput,plotopt);%脉冲响应模型转换为阶跃响应模型theta=scal(theta,mx,stdx);nout=1;预测控制5delt=1;model=imp2step(delt,nout,theta);plotstep(model);结果如图所示:8-12:考虑如下的双输入双输出纯时延对象,其传递函数距阵为:73312.86.616.7110.9118.919.421114.41()sssseesseessGs解: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;%预测时域长度为6p=6;m=2;ywt=[];uwt=[11];%设置输入约束和参考轨迹等控制器参数r=[11];tend=30;%仿真时间为30预测控制6ulim=[-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)闭环系统的输出和控制量变化曲线如图所示:8-15:设系统的传递函数距阵为:73312.86.616.7110.9118.919.421114.41()sssseesseessGs解: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)预测控制7闭环系统的输出和控制量变化曲线如图所示:在添加对输出变量的约束后,再利用以下程序对系统进行模型预测控制器的设计,得到闭环控制系统输出响应和控制量变化曲线如图: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)8-16:考虑有如下传递函数距阵的多变量系统的状态空间模型预测控制器设计问题73312.86.616.7110.9118.919.421114.41()sssseesseessGs解:MATLAB程序如下:预测控制8%在进行模型预测控制器设计之前,首先将系统模型转换为状态空间形式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=[];%预测时域和控制时域均为5P=5;M=P;Ks=smpccon(imod,ywt,uwt,M,P);tend=30;r=[01];[y,u]=smpcsim(pmod,imod,Ks,tend,r);plotall(y,u,T)得到闭环控制系统输出响应和控制量变化曲线如图:增加预测时域长度,同时减少控制时域长度后,再利用以下程序可得闭环系统的输出和控制量变化曲线如图所示:P=10;M=3;预测控制9Ks=smpccon(imod,ywt,uwt,M,P);[y,u]=smpcsim(pmod,imod,Ks,tend,r);plotall(y,u,T)进一步改变控制时域长度,采用控制量分块的形式,即再利用以下程序可得到的闭环系统的输出和控制量变化曲线M=[234];Ks=smpccon(imod,ywt,uwt,M,P);[y,u]=smpcsim(pmod,imod,Ks,tend,r);plotall(y,u,T)增加输入控制量的加权距阵系数,即再利用以下程序可得模型预测闭环控制系统输出控制量变化曲线uwt=[11];P=5;预测控制10M=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=[];R=[];z=[];v=[];w=[1];[y,u]=smpcsim(pmod,imod,Ks,tend,r,ulim,Kest,z,v,w);plotall(y,u,T)利用以下程序采用估计器进一步改善系统性能,对应的系统输出和控制量变化曲预测控制11线如图所示[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)8-17:考虑如下的多变量系统73312.86.616.7110.9118.919.421114.41()sssseesseessGs解: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));%设计模型预