function [sys,x0,str,ts]=nnbp(t,x,u,flag,T,xite,alfa,kF1,kF2)
switch flag,
case 0,
[sys,x0,str,ts] = mdlInitializeSizes(T);
case 3,
sys = mdlOutputs(t,x,u,T,xite,alfa,kF1,kF2);
case {1, 2, 4, 9},
sys = [];
otherwise,
error(['Unhandled flag = ',num2str(flag)]);
end;
function [sys,x0,str,ts,u] = mdlInitializeSizes(T)
global wi wo wi_1 wo_1 wi_2 wo_2
wi=0.05*rand(5,3);
wi_1=wi ;
wi_2=wi_1;
wo=0.05*rand(3,5);
wo_1=wo;
wo_2=wo_1;
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 4;
sizes.NumInputs = 7;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [T 0];
function sys = mdlOutputs(t,x,u,T,xite,alfa,kF1,kF2)
global wi wo wi_1 wo_1 wi_2 wo_2
xi=[u(6),u(4),u(1)];
xx=[u(1)-u(2); u(1); u(1)+u(3)-2*u(2)];
I=xi*wi';
Oh=non_transfun(I,kF1);
K=non_transfun(wo*Oh',kF2);
uu=K'*xx;
dyu=sign((u(4)-u(5))/(uu-u(7)+0.0000001));
dK=non_transfun(K,3);
delta3=u(1)*dyu*xx.*dK;
wo=wo_1+xite*delta3*Oh+alfa*(wo_1-wo_2);
dO=non_transfun(I,4);
wi=wi_1+xite*(dO.*(delta3'*wo))'*xi+alfa*(wi_1-wi_2);
sys=[uu; K];
wi_1=wi;
wo_1=wo;
wi_2=wi_1;
wo_2=wo_1;
function W1=non_transfun(W,key)
switch key
case 1, W1=(exp(W)-exp(-W))./(exp(W)+exp(-W));
case 2, W1=0.2*exp(W)./(exp(W)+exp(-W));
case 3, W1=2./(exp(W)+exp(-W)).^2;
case 4, W1=4./(exp(W)+exp(-W)).^2;
end