1、利用MATLAB提供的工具箱进行编程
clear
p1=[1.24,1.27;1.36,1.74;1.38,1.;1.38,1.82;1.38,1.90;
1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00
1.28,2.00;1.30,1.96];
p=[p1;p2]';
pr=minmax(p);
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o')
net=newff(pr,[3,2],{'logsig','logsig'});
net.trainParam.show = 10;
net.trainParam.lr = 0.05;
net.trainParam.goal = 1e-10;
net.trainParam.epochs = 50000;
net = train(net,p,goal);
x=[1.24 1.80;1.28 1.84;1.40 2.04]';
y0=sim(net,p)
y=sim(net,x)
2、直接进行编程
clear all; close all;
xite=0.25; alfa=0.05;
IN=4;H=5;Out=3; %NN Structure
wi=[-0.6394 -0.2696 -0.3756 -0.7023; -0.8603 -0.2013 -0.5024 -0.2596; -1.0749 0.5543 -1.6820 -0.5437; -0.3625 -0.0724 -0.63 -0.2859; 0.1425 0.0279 -0.5406 -0.7660]; %wi=0.50*rands(H,IN); wi_1=wi;wi_2=wi;wi_3=wi;
wo=[0.7576 0.2616 0.5820 -0.1416 -0.1325; -0.1146 0.2949 0.8352 0.2205 0.4508; 0.7201 0.4566 0.7672 0.4962 0.3632]; %wo=0.50*rands(Out,H); wo_1=wo;wo_2=wo;wo_3=wo;
x=[0,0,0];
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0; y_1=0;y_2=0;y_3=0;
Oh=zeros(H,1); %Output from NN middle layer %%I=Oh; %Input to NN middle layer error_2=0; error_1=0;
ts=0.001; for k=1:1:1000 time(k)=k*ts;
rin(k)=1.0;
%Unlinear model
a(k)=1.2*(1-0.8*(exp(-0.1*k)))^3; yout(k)=a(k)*y_1/(1+y_1^2)+u_1;
error(k)=rin(k)-yout(k);
xi=[rin(k),yout(k),error(k),1];
x(1)=error(k)-error_1; x(2)=error(k);
x(3)=error(k)-2*error_1+error_2;
epid=[x(1);x(2);x(3)];
计算隐层输入;%wi[5,4] xi[1,4] I[1,5] 计算隐层输出; 计算输出层输入;
计算输出层输出,并赋值给K(1*3的数组); kp(k)=K(1);ki(k)=K(2);kd(k)=K(3); Kpid=[kp(k),ki(k),kd(k)];
du(k)=Kpid*epid; u(k)=u_1+du(k);
if u(k)>=10 % Restricting the output of controller u(k)=10; end
if u(k)<=-10 u(k)=-10; end
%Output layer 计算输出值的阈值修正; %Hidden layer for i=1:1:H
dO(i)=2/(exp(I(i))+exp(-I(i)))^2; end
segma=delta3*wo; %wo[3,5] for i=1:1:H
delta2(i)=dO(i)*segma(i); %delta2[1,5] end
d_wi=xite*delta2'*xi;
%wi=wi_1+d_wi+alfa*(wi_1-wi_2); wi=wi_1+d_wi; %Parameters Update
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k); wo_3=wo_2; wo_2=wo_1; wo_1=wo; wi_3=wi_2;
wi_2=wi_1; wi_1=wi;
error_2=error_1; error_1=error(k); end figure(1);
plot(time,rin,'r',time,yout,'b'); xlabel('time(s)');ylabel('rin,yout'); figure(2);
plot(time,error,'r');
xlabel('time(s)');ylabel('error'); figure(3); plot(time,u,'r');
xlabel('time(s)');ylabel('u'); figure(4); subplot(311); plot(time,kp,'r');
xlabel('time(s)');ylabel('kp'); subplot(312); plot(time,ki,'g');
xlabel('time(s)');ylabel('ki'); subplot(313); plot(time,kd,'b');
xlabel('time(s)');ylabel('kd');