资源简介

这是一个基于Matlab语言s函数的RBF网络自适应控制器的设计,可以方便的移植到其他系统!

资源截图

代码片段和文件信息

function [sysx0strts] = nnrbf_pid(txuflagTnnK_pideta_pidxitealfabeta0w0)
%
switch flag
  case 0
    [sysx0strts]=mdlInitializeSizes(Tnn);
  case 2
    sys=mdlUpdate(u);
  case 3
    sys=mdlOutputs(txuTnnK_pideta_pidxitealfabeta0w0);
  case {149}sys = [];
  otherwise
    error([‘Unhandled flag = ‘num2str(flag)]);
end
%
function [sysx0strts] = mdlInitializeSizes(Tnn)
sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 3;
sizes.NumOutputs     = 4+5*nn;
sizes.NumInputs      = 9+15*nn;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0  = zeros(31);
str = [];
ts  = [T 0];
%
function sys=mdlUpdate(u)

sys = [u(1)-u(2);u(1);u(1)+u(3)-2*u(2)];

function sys=mdlOutputs(txuTnnK_pideta_pidxitealfabeta0w0)
%
ci_3=reshape(u(7:6+3*nn)3nn);
ci_2=reshape(u(7+5*nn:6+8*nn)3nn);
ci_1=reshape(u(7+10*nn:6+13*nn)3nn);
bi_3=u(7+3*nn:6+4*nn);
bi_2=u(7+8*nn:6+9*nn);
bi_1=u(7+13*nn:6+14*nn);
w_3=u(7+4*nn:6+5*nn);
w_2=u(7+9*nn:6+10*nn);
w_1=u(7+14*nn:6+15*nn);
xx=u([6;4;5]);
if t==0
%     ci_1=rand(3nn);
%     bi_1=rand(nn1);
%     w_1=rand(nn1);
    ci_1=w0(1)*ones(3nn);
    bi_1=w0(2)*ones(nn1);
    w_1=w0(3)*ones(nn1);
%     ci_2=ci_1;ci_3=ci_2;
%     bi_2=bi_1;bi_3=bi_2;
%     w_2=w_1;w_3=w_2;
    K_pid0=K_pid;
else
%     ci_3=reshape(u(7:6+3*nn)3nn);
%     ci_2=reshape(u(7+5*nn:6+8*nn)3nn);
%     ci_1=reshape(u(7+10*nn:6+13*nn)3nn);
%     bi_3=u(7+3*nn:6+4*nn);
%     bi_2=u(7+8*nn:6+9*nn);
%     bi_1=u(7+13*nn:6+14*nn);
%     w_3=u(7+4*nn:6+5*nn);
%     w_2=u(7+9*nn:6+10*nn);
%     w_1=u(7+14*nn:6+15*nn);
    K_pid0=u(end-2:end);
end
xx=u([6;4;5]);
for j=1:nn
    h(j1)=exp(-norm(xx-ci_1(:j))^2/(2*bi_1(j)*bi_1(j)+eps));
end
ymout=w_1‘*h;
yout=u(4);
dym=yout-ymout;
w=w_1+xite*dym*h+alfa*(w_1-w_2)+beta0*(w_2-w_3);
for j=1:nn
    d_bi(j1)=xite*dym*w_1(j)*h(j)*(bi_1(j)^(-3))*norm(xx-ci_1(:j))^2;
    d_ci(:j)=xite*dym*w_1(j)*h(j)*(xx-ci_1(:j))*(bi_1(j)^(-2));
end
bi=bi_1+d_bi+alfa*(bi_1-bi_2)+beta0*(bi_2-bi_3);
ci=ci_1+d_ci+alfa*(ci_1-ci_2)+beta0*(ci_2-ci_3);
dJac=sum(w.*h.*(-xx(1)+ci(1:)‘)./bi.^2);
KK=K_pid0+u(1)*dJac*eta_pid.*x;
sys = [u(6)+KK‘*x;KK;ci(:);bi(:);w(:)];
%

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2283  2009-04-26 17:00  基于s函数的RBF网络pid控制器设计\nnrbf_pid.m

     文件         31  2009-04-28 10:32  基于s函数的RBF网络pid控制器设计\readme.txt

     目录          0  2009-04-28 10:32  基于s函数的RBF网络pid控制器设计

----------- ---------  ---------- -----  ----

                 2314                    3


评论

共有 条评论