t=Ts.*(1:N); figure(3);
subplot(2,1,1); plot(t,y,'b',t,yg,'r');
legend('预测输出曲线'); title('输出曲线'); xlabel('Time') ylabel('振幅') grid on
subplot(2,1,2); plot(t,u ,'g');
legend('控制作用u') title('控制作用'); xlabel('Time') ylabel('振幅') grid on
xite=0.50; alfa=0.05;
w2=rand(10,1);
w2_1=w2;w2_2=w2; w1=rand(6,10);
w1_1=w1;w1_2=w1;
dw1=0*w1;
u_1=0; y_1=0;
I=zeros(10,1); Iout=zeros(10,1); FI=zeros(10,1);
x=[0,0,0,0,0,0]';
for k=3:N
x(1)=yg(k); x(2)=yg(k-1); x(3)=yg(k-2); x(4)=u(k); x(5)=u(k-1); x(6)=u(k-2); for j=1:1:10
I(j)=x'*w1(:,j);
Iout(j)=1/(1+exp(-I(j))); end
es(k)=w2'*Iout; e1(k)=es(k)-e(k);
w2=w2_1-(xite*0.1*e1(k))*Iout+alfa*(w2_1-w2_2);
for j=1:1:10
FI(j)=exp(-I(j))/(1+exp(-I(j)))^2; end
for i=1:1:6
for j=1:1:10
dw1(i,j)=e1(k)*xite*FI(j)*w2(j)*x(i); end end
w1=w1_1+dw1+alfa*(w1_1-w1_2);
w1_2=w1_1;w1_1=w1; w2_2=w2_1;w2_1=w2; end
t=Ts.*(1:N); figure(2);
plot(t,es,'r',t,e,'b');
xlabel('times');ylabel('es and e'); grid on
for k=3:N
Uk_1=zeros(N-1,1); for i=1:N-1
if k-N+i<=0 Uk_1(i)=0; else
Uk_1(i)=u(k-N+i); end end
Y0=A0*Uk_1;
a(k)=1.2*(1-0.8*exp(-0.1*k)); yg(k)=a(k)*y_1/(1+y_1^2)+u_1; u_1=u(k); yg_1=yg(k);
e(k)=es(k);
Ysk=zeros(P,1); for i=1:P
Ysk(i)=Sv; end
Ek=zeros(P,1); for i=1:P
Ek(i)=0.1*i*e(k); end
dertu=K*(Ysk-Y0-Ek);
for i=1:m
if k+i-1<=N
u(k+i-1)=u(k+i-1-1)+dertu(i); end end
temp=0; for j=1:N-1 if k-j<=0 temp; else
if k-j-1<=0
temp=temp+a(j)*u(k-j); else
temp=temp+a(j)*(u(k-j)-u(k-j-1)); end end end
if k-N<=0
y(k)=temp; else
y(k)=temp+a(N)*u(k-N); end
for j=1:1:10 I(j)=x'*w1(:,j);
Iout(j)=1/(1+exp(-I(j))); end
es(k)=w2'*Iout; e(k)=es(k);
x(1)=yg(k); x(2)=yg(k-1); x(3)=yg(k-2); x(4)=u(k); x(5)=u(k-1); x(6)=u(k-2); end
t=Ts.*(1:N); figure(4);
subplot(2,1,1); plot(t,y,'b',t,yg,'r');
legend('预测输出曲线'); title('输出曲线'); xlabel('Time') ylabel('振幅') grid on
subplot(2,1,2); plot(t,u ,'g');
legend('控制作用u') title('控制作用'); xlabel('Time') ylabel('振幅') grid on
图4-1 神经网络辨识系统误差曲线
图4-2基于神经网络误差补偿的动态矩阵控制曲线
5.小结
本文在原有动态矩阵预测控制的基础上,利用预测误差的历史数据建立基于BP神经网络的误差预测模型,经过学习训练后可作为误差的预测器,由此得到误差的预测值,修正了纯基于数学模型的预测,这样可以使得利用更简单的数学模型来构造动态矩阵预测控制算法,而使得对模型失配具有较强的抑制能力.仿真结果表明了该算法的有效性。