matlab仿真 输入f(s),simulink s 函数仿真求助

%Single Neural Net PID Decouple Controller based on Hebb Learning

%Algorithm to adjust kp,ki,kd

function [sys,x0,str,ts]=sn_pidf(t,x,u,flag)

switch flag,

case 0           % initializations

[sys,x0,str,ts] = mdlInitializeSizes;

case 2           % discrete states updates

sys = mdlUpdates(x,u);

case 3           % computation of control signal

sys=mdlOutputs(t,x,u);

case {1, 4, 9}   % unused flag values

sys = [];

otherwise        % error handling

error(['Unhandled flag = ',num2str(flag)]);

end;

%==============================================================

% when flag=0, perform system initialization

%==============================================================

function [sys,x0,str,ts] = mdlInitializeSizes

sizes = simsizes;        % read default control variables    定义一个结构体

sizes.NumContStates = 0; % no continuous states

sizes.NumDiscStates = 3; % 3 states and assume they are the P/I/D components

sizes.NumOutputs = 1;    % 2 output variables: control u(t) and state x(3)

sizes.NumInputs = 4;     % 4 input signals

sizes.DirFeedthrough = 1;% input reflected directly in output

sizes.NumSampleTimes = 1;% single sampling period

sys = simsizes(sizes);   % 返回size数据结构所包含信息

x0 = [0; 0; 0];          % zero initial states

str = [];

ts = [-1 0];             % sampling period

%==============================================================

% when flag=2, updates the discrete states

%==============================================================

function sys = mdlUpdates(x,u)

% T=1;

sys=[ x(1)+1.2*u(1)*u(4)*u(1);

x(2)+8.2*u(1)*u(4)*u(2);

x(3)+0.2*u(1)*u(4)*u(3)];

% sys=[x(1);x(2);x(3);u(1)];

%==============================================================

% when flag=3, computates the output signals

%==============================================================

function sys = mdlOutputs(t,x,u)

% persistent wkp1_1 wki1_1 wkd1_1 u1_1

% xiteP=0.60;

% xiteI=0.60;

% xiteD=0.60;

%

% if t==0  %Initilizing kp,ki and kd

%     wkp1_1=0.3;

%     wki1_1=0.3;

%     wkd1_1=0.3;

%     u1_1=0;

% end

%

% %Adjusting NNC Weight Value by adopting hebb learning algorithm

%    wkp1=wkp1_1+xiteP*x(1)*u1_1*x(1);  %P      此处x(1)相当于e(k)

%    wki1=wki1_1+xiteI*x(1)*u1_1*x(2);  %I

%    wkd1=wkd1_1+xiteD*x(1)*u1_1*x(3);  %D

%

%    wadd1=abs(wkp1)+abs(wki1)+abs(wkd1);     %归一化处理

%    w111=wkp1/wadd1;

%    w122=wki1/wadd1;

%    w133=wkd1/wadd1;

%    w1=[w111,w122,w133];

%    k1=0.20;                             %非改进神经元PID控制中K值

%    u1=k1*w1*x;

%

%    wkp1_1=wkp1;

%    wkd1_1=wkd1;

%    wki1_1=wki1;

%

%    u1_1=u1;

sys=u(4)+(0.003+0.0002*abs(u(1))+0.075*abs(u(2))*(abs(1))*u(1)+abs(x(2))*u(2)+abs(x(3))*u(3))/(abs(x(1))+abs(x(2))+abs(x(3)));

上程序为一个单神经元PID simulink s函数,为何运行时出现输入参数数目不足,是在mdl中输入设置有关还是?本人刚刚接触simulink,希望大侠们能够详细解释一下,或者能够给一个单神经元PID控制的simulink例程也成,好让我仔细研究一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值