• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Matlab
  • 标签: PID  RBF  MATLAB代码  

资源简介

这是非常实用的基于RBF神经网络的PID控制仿真代码,可以通过参数自适应整定来实现功能,请大家参考!

资源截图

代码片段和文件信息

clear; clc; %% 参数初始化 
lr=0.1;%学习速率 
beta=0.05;%动量因子 
x=[000]‘;%初始化输入
nn=6;%隐含层节点数 
%RBF网络3-6-1结构初始化参数
ci=30*ones(3nn);%节点基函数中心向量 
bi=40*ones(nn1);%节点基函数方差
w=10*ones(nn1); %输出层权重
h=zeros(nn1);%隐藏层输出向量 
ci_1=ci;ci_3=ci_1;ci_2=ci_1; bi_1=bi;bi_2=bi_1;bi_3=bi_2; w_1=w;w_2=w_1;w_3=w_1; 
u_1=0;y_1=0; ec=[000]‘;%误差变化率eceecc
error_1=0;error_2=0;error=0;
% PID 初始参数设置 
kp0 = 0.03; ki0 = 0.28; kd0 = 0.03; flag=1;%控制模式flag=0 PID&RBF;flag=1 PID
kp_1=kp0; kd_1=kd0; ki_1=ki0; %pid参数学习率
kp_lr=0.20; kd_lr=0.20; ki_lr=0.20; ts=0.01; %% 
for t = 1:1:200 time(t)=t*ts; r(t)=1.0*sign(sin(2*pi*t*ts));%系统参考输入 
    y(t)=(-0.3*y_1+u_1)/(6+y_1^2);%系统输出 
%% 前向传播 %1.计算每个节点RBF的输出 
for j=1:1:nn 
    h(j)=exp(-norm(x-ci(:j))^2/(2*bi(j)*bi(j))); 
end
%2. RBF网络输出 
ym(t)=w‘*h; %% 反向传播 %1. 输出权重更新计算 
d_w=0*w; 
for j=1:1:nn 
    d_w(j)=lr*(y(t)-ym(t))*h(j); 
end
w=w_1+d_w+beta*(w_1-w_2); %2. 节点基函数方差更新 
d_bi=0*bi; 
for j=1:1:nn 
    d_bi(j)=lr*(y(t)-ym(t))*w(j)*h(j)*(bi(j)^-3)*norm(x-ci(:j))^2; 
end
bi=bi_1+ d_bi+beta*(bi_1-bi_2); %3. 节点中心更新 
for j=1:1:nn
    for i=1:1:3 
        d_ci(ij)=lr*(y(t)-ym(t))*w(j)*h(j)*(x(i)-ci(ij))*(bi(j)^-2); 
    end
end
ci=ci_1+d_c

评论

共有 条评论