⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 picwl.m

📁 神经网络PID控制器设计,神经网络PID控制器设计?窬鏟ID控制器设计
💻 M
字号:
% 神经网络PID控制程序
clear all;
close all;

% 赋初植
N=400;                       %迭代次数
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的权系初值
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];% 循环
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);
    % 计算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);
    
    % 实际输入
    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);
    % 系统输出
    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
    % 调整NNI的权值
    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
    % 调整NNC的权值
    yPu=1.2;            %yPu表示y对u求导
    e3=rin(k+1)-y(k+1); %e3表示NNC的调整时输入的误差
    %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');    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -