?? picwl.m
字號(hào):
% 神經(jīng)網(wǎng)絡(luò)PID控制程序
clear all;
close all;
% 賦初植
N=400; %迭代次數(shù)
yita1=0.4;
yita2=0.1;
beta=0.4;
e_1=0;
e_2=0;
% NNI的誤差
for i=1:1:10
e1_1(i)=0;e1_2(i)=0;
end
ts=1;
yOut(1)=0;
v_1(1)=2;
v_2(1)=2.5;
%v_3(1)=0.2;
% NNI的權(quán)系初值
wi= 0.03*rands(10,1);
%[-0.01,0.02,-0.025,0,0.01,0.025,0.015,0.005,-0.015,-0.005];
wo= 0.03*rands(10,1);
%[-0.015,0.025,-0.02,0,0.015,0.025,0.01,0.005,-0.005,-0.015];% 循環(huán)
for k=1:N
time(k)=k*ts;
end
for k=1:1:N+1
%rin(k)=sin(2.0*pi/1000*k); %sin輸入
rin(k) = sin(2*pi/100*k);
%rin(k)=1.0;
end
for k=1:1:N
% 輸入誤差
e(k)=rin(k)-yOut(k);
% 計(jì)算C1,C2,C3
c_1(k)=e(k);
c_2(k)=e(k)+e_1;
c_3(k)=e(k)-e_2;
e_1=e_1+e(k);
e_2=e(k);
% 實(shí)際輸入
u(k)=v_1(k)*c_1(k)+v_2(k)*c_2(k);
%u(k)=v_1(k)*c_1(k)+v_3(k)*c_3(k);
% 系統(tǒng)輸出
yOut(k+1)=0.8*sin(yOut(k))+yOut(k)/7+1.2*u(k);
% NNI的輸出
y(k+1)=1.2*u(k);
for i=1:1:10
o(i)=(1.0-exp(-wi(i)*yOut(k)))/(1.0+exp(-wi(i)*yOut(k)));
y(k+1)=y(k+1)+wo(i)*o(i);
end
% 調(diào)整NNI的權(quán)值
e1=yOut(k+1)-y(k+1);
for i=1:1:10
wo_1(i)=wo(i);
wo(i)=wo(i)+yita1*e1*o(i)+beta*e1_1(i);
e1_1(i)=wo(i)-wo_1(i);
fx=2.0*exp(wi(i)*yOut(k))/(exp(wi(i)*yOut(k))+1)^2;
wi_1(i)=wi(i);
wi(i)=wi(i)+yita1*e1*fx*wo_1(i)*yOut(k)+beta*e1_2(i);
e1_2(i)=wi(i)-wi_1(i);
end
% 調(diào)整NNC的權(quán)值
yPu=1.2; %yPu表示y對(duì)u求導(dǎo)
e3=rin(k+1)-y(k+1); %e3表示NNC的調(diào)整時(shí)輸入的誤差
%for i=1:1:10
%yPu=yPu+wo_1(i)*fx(i)*wi_1(i);
%end
v_1(k+1)=v_1(k)+yita2*e3*c_1(k)*yPu;
v_2(k+1)=v_2(k)+yita2*e3*c_2(k)*yPu;
% v_3(k+1)=v_3(k)+yita2*e3*c_3(k)*yPu;
end
%e(N+1)=rin(N+1)-yOut(N+1);
for k=1:N
r1(k)=rin(k);
y1(k)=yOut(k);
y2(k)=y(k);
end
figure(1);
subplot(4,1,1);
plot(time,r1,'r');
ylabel('ref');
subplot(4,1,2);
plot(time,y1,'r');
ylabel('Out');
subplot(4,1,3);
plot(time ,y2,'b');
ylabel('NNIOut');
subplot(4,1,4);
plot(time,e,'r');
ylabel('error');
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -