資源簡介
這是非常實用的基于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
- 上一篇:RBF插值算法Matlab代碼
- 下一篇:用GUI實時更改simuli
nk仿真參數
評論
共有 條評論