function [time,w,y,u] = Basic_GPC(tend)
%---------------参数设置----------------------
Ts = 10; %采样周期
N = 5; %预测时域
Nu = 3; %控制时域
lambda = 0.5 ; %控制加权矩阵
deta = 1; %误差加权矩阵
alpha = 0.2; %输入滤波系数,越小性能越好
% Niter = 100; %PSO迭代次数
% tend=50; %仿真步数
U_length = 100;
Y_length = 100;
W_length = 200;
Niter = 100;
error = zeros(tend, Niter);
%--------------对象参数------------------
K = 1;
T = 35;
L = 40;
[p_A,p_B,p_d]=tf2AB(K, [T 1], L,Ts);
[p_na,p_nb]=rankn(p_A,p_B);
%--------------模型参数-----------------
Km = 1;
Tm = 35;
Lm = 40;
[m_A,m_B,m_d]=tf2AB(Km,[Tm 1],Lm,Ts);
m_A1=conv(m_A,[1 -1]);
[m_na,m_nb]=rankn(m_A,m_B);
[E,F]=diophantine(m_A,N,m_d);
G=getGij(m_B,E);
[Gk,Gpk,Gku]=getG(G,Nu);
%------------------仿真------------------
uk=zeros(U_length,1); %输入初值:uk(i)表示u(t-k)
duk=zeros(U_length,1); %控制增量初值
dU=zeros(Nu,1);
yk=zeros(Y_length,1); %输出初值
w=ones(W_length,1); %设定值
dist = 0;
u(1) = 0;
%------------仿真开始----------------------------
for k=1:tend
time(k)=k*Ts;
if k>25
dist = -0.1;
end
y(k)=-p_A(2:p_na+1)*yk(1:p_na)+p_B*(uk(p_d+1:p_nb+p_d+1)+dist); %采集输出数据
Yk=[y(k); yk(1:m_na)]; %构建向量Y(k)
dUk=duk(1:m_d+m_nb); %构建向量ΔU(k-j)
%----------参考轨迹-------------
r=filter((1-alpha),[1 -alpha],w);
Yr=zeros(N,1);
Yr=[r(k+m_d+1:k+m_d+N)]; %构建向量Yr(k)
%-----------求控制量-----------
dU=inv(Gku'*Gku+lambda*diag(ones(1,Nu)))*Gku'*(Yr-Gpk*dUk-F*Yk);
% [dU, fv] = SolveU(Nu,Yr,Gku,Gpk,dUk,F,Yk,lambda,Niter);
% error(k,:) = fv;
% if (dU(1)>0.5)
% dU(1) = 0.5;
% end
% if (dU(1)<-0.5)
% dU(1) = -0.5;
% end
du(k)=dU(1); u(k)=uk(1)+du(k);
%----------更新数据------------
for i=U_length:-1:2
uk(i)=uk(i-1);
duk(i)=duk(i-1);
end
uk(1)=u(k);
duk(1)=du(k);
for i=Y_length:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
end
%-------------绘图--------------------
% figure(1);
% plot(time(1:tend),w(1:tend),'r:',time(1:tend),y(1:tend));
% grid on;
% xlabel('time(s)'); ylabel('w,y');
% axis([0,tend*Ts,0,1.2]);
% legend('w','y');
% title('GPC solved by PSO');
% figure(2);
% plot(time,u);
% grid on;
% xlabel('time(s)'); ylabel('u');
% % axis([0,tend*Ts,-0.1,1.5]);
% legend('u');
% title('Control action');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
自适应广义预测控制算法MATLAB程序,控制对象为时滞惯性环节,系统模型参数采用PSO算法进行在线辨识,再采用GPC算法进行控制。 程序中有普通GPC算法和PSO-GPC算法性能的仿真对比。
资源推荐
资源详情
资源评论
收起资源包目录
Basic_GPCvsPSO_GPC.rar (16个子文件)
Basic_GPCvsPSO_GPC
control.emf 22KB
output_s.emf 24KB
PSO_GPC_S.m 3KB
getG.m 450B
fitness.m 291B
Basic_GPC.m 3KB
diophantine.m 740B
contrast.m 528B
getGij.m 174B
Basic_GPC.asv 3KB
rankn.m 85B
output.emf 24KB
control_s.emf 23KB
contrast.asv 652B
SolveU1.m 2KB
tf2AB.m 479B
共 16 条
- 1
无忧攻城狮
- 粉丝: 16
- 资源: 19
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页