• 大小: 393KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-09-02
  • 语言: Matlab
  • 标签: simulink  PID  

资源简介

simulink中,基于BP神经网络的PID 控制在柴油机调速系统中的应用。其中有系统的模型,数学模型分析,简单的PID控制仿真,及BP神经网络的PID控制。带有simulink模块,BP神经网络通过S函数实现,还有对应的word文档说明。

资源截图

代码片段和文件信息

function [sysx0strts]=nnbp_pid(txuflagTnhxitealfakF1kF2)
switch flag
   case 0 [sysx0strts] = mdlInitializeSizes(Tnh);
   case 3 sys = mdlOutputs(txuTnhxitealfakF1kF2);
    case {1 2 4 9}sys = [];
   otherwise error([‘Unhandled flag = ‘num2str(flag)]);
end;
%  初始化函数
function [sysx0strts] = mdlInitializeSizes(Tnh)
sizes = simsizes; % 读入模板,得出默认的控制量
sizes.NumContStates = 0; sizes.NumDiscStates = 0;
sizes.NumOutputs = 4+7*nh; sizes.NumInputs = 7+14*nh;
sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1;
sys = simsizes(sizes); x0 = []; str = []; ts = [T 0];
% 系统输出计算函数
function sys = mdlOutputs(txuTnhxitealfakF1kF2)
wi_2=reshape(u(8:7+4*nh)nh4);
wo_2=reshape(u(8+4*nh:7+7*nh)3nh);
wi_1=reshape(u(8+7*nh: 7+11*nh)nh4);
wo_1=reshape(u(8+11*nh:7+14*nh)3nh);
xi=[u([641])‘ 1]; xx=[u(1)-u(2); u(1); u(1)+u(3)-2*u(2)];
I=xi*wi_1‘; Oh=non_transfun(IkF1); K=non_transfun(wo_1*Oh‘kF2);
uu=u(7)+K‘*xx; dyu=sign((u(4)-u(5))/(uu-u(7)+0.0000001));
dK=non_transfun(K3); delta3=u(1)*dyu*xx.*dK;
wo=wo_1+xite*delta3*Oh+alfa*(wo_1-wo_2)+alfa*(wo_1-wo_2);
dO=2*non_transfun(I3);
wi=wi_1+xite*(dO.*(delta3‘*wo))‘*xi+alfa*(wi_1-wi_2);
sys=[uu; K;wi(:);wo(:)];
% 激活函数近似
function W1=non_transfun(Wkey)
switch key
   case 1 W1=(exp(W)-exp(-W))./(exp(W)+exp(-W));
   case 2 W1=exp(W)./(exp(W)+exp(-W));
   case 3 W1=2./(exp(W)+exp(-W)).^2;
end

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

     文件       1453  2012-04-08 15:36  nnbp_pid.m

     文件      46895  2012-04-11 20:53  PID_controller.mdl

     文件     871424  2012-04-23 09:22  过程控制.doc

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

               919772                    3


评论

共有 条评论