• 大小: 4KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: Matlab
  • 标签: PID  

资源简介

实现BP神经网络自动控制PID三个参数,并用附加动量项和自学习速率法来改进BP神经网络容易掉入局部极小值的缺点

资源截图

代码片段和文件信息


clear all;
close all;
xite_1=0.2;
alfa=0.95;

IN=4;H=5;Out=3;
wi=[-0.6394  -0.2696  -0.3756   -0.7023;
    -0.8603  -0.2013  -0.5024  -0.2596; 
    -1.0000  0.5543   -1.0000   -0.5437;
    -0.3625  -0.0724  0.6463  -0.2859;
    0.1425  0.0279    -0.5406   -0.7660
    ]; %隐含层加入按系数初始化 
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  ]; %输出层加权系数初始化s
wo_1=wo;wo_2=wo;wo_3=wo;

ts=40%采样周期取值
x=[000]; %比例、积分、微分初值
u_1=0.0;u_2=0.0;u_3=0.0;u_4=0;u_5=0;
y_1=0.0;y_2=0.0;y_3=0;

Oh=zeros(H1);%隐含层的输出   
I=Oh;     %隐含层的输入        
error_2=0;
error_1=0;
de_1=0;

sys=tf(1.2[208 1]‘inputdelay‘80);%建立被控对象的传递函数 
% sys=tf([5][8 1]‘inputdelay‘80);%建立被控对象的传递函数 
dsys=c2d(systs‘zoh‘);%把传递函数离散化
[numden]=tfdata(dsys‘v‘);%离散化后提取分子、分母

for k=1:1:500 %仿真开始 共1000步
     time(k)=k;
     rin(k)=1.0;
     if(k==250)
         rin(k)=2.0;
     end

     yout(k)=-den(2)*y_1+num(2)*u_5;
     error(k)=rin(k)-yout(k);
     xi=[rin(k)yout(k)error(k)5]; 
    
     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)]; 
     I=xi*wi‘; %隐含层的输入,即输入层输入*权值
     for j=1:1:H 
      Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%在激活函数作用下隐含层的输出
     end
     K=wo*Oh; %输出层的输入,即隐含层的输出*权值
     for l=1:1:Out 
       K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));%输出层的输出,即PID三个参数      
     end 
     
     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         
        u(k)=10; 
    end 
    if u(k)<=-10   
         u(k)=-10; 
    end 
    
    de(k)=error(k)-error_1;
    if(de(k)>(de_1*1.04))
         xite(k)=0.7*xite_1;
%         alf

评论

共有 条评论