单神经元PID控制的simulink仿真的S函数怎么写?S函数模块我连的一个输入三个输出 10
functionsys=mdlOutputs(t,x,u)persistentzxitePxiteIxiteDwkpwkiwkderrorwaddw11w22w33wKz...
function sys = mdlOutputs(t,x,u)
persistent z xiteP xiteI xiteD wkp wki wkd error wadd w11 w22 w33 w K
z=[0,0,0]'; %初始化神经元输入信号
xiteP=0.5;xiteI=0.6;xiteD=0.5; %初始化学习率参数
wkp(1)=0.1;wki(1)=0.1;wkd(1)=0.5; %初始化kp,ki,kd
error(1)=0; %初始化第一个单元的误差信号
for k=2:1:1000
error(k)=u(k);
wki(k)=wki(k-1)+xiteI*error(k)*u(k)*(2*error(k)-error(k-1));
wkp(k)=wkp(k-1)+xiteP*error(k)*u(k)*(2*error(k)-error(k-1));
wkd(k)=wkd(k-1)+xiteD*error(k)*u(k)*(2*error(k)-error(k-1));
K=0.12;
z(1)=error(k); %积分输入
z(2)=error(k)-error(k-1); %比例输入
z(3)=error(k)-2*error(k-1)+error(k-2); %微分输入
wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k));
w11(k)=wki(k)/wadd(k);
w22(k)=wkp(k)/wadd(k);
w33(k)=wkd(k)/wadd(k);
w=[w11(k),w22(k),w33(k)];
u(k)=u(k-1)+K*w*z; %控制律
sys(1)=w11(k);
sys(2)=w22(k);
sys(3)=w33(k);
error(k-1)=error(k);
end
% End of mdlOutputs.
这是我写的,但错误提示说Attempted to access u(2); index out of bounds because numel(u)=1
求大神指导 展开
persistent z xiteP xiteI xiteD wkp wki wkd error wadd w11 w22 w33 w K
z=[0,0,0]'; %初始化神经元输入信号
xiteP=0.5;xiteI=0.6;xiteD=0.5; %初始化学习率参数
wkp(1)=0.1;wki(1)=0.1;wkd(1)=0.5; %初始化kp,ki,kd
error(1)=0; %初始化第一个单元的误差信号
for k=2:1:1000
error(k)=u(k);
wki(k)=wki(k-1)+xiteI*error(k)*u(k)*(2*error(k)-error(k-1));
wkp(k)=wkp(k-1)+xiteP*error(k)*u(k)*(2*error(k)-error(k-1));
wkd(k)=wkd(k-1)+xiteD*error(k)*u(k)*(2*error(k)-error(k-1));
K=0.12;
z(1)=error(k); %积分输入
z(2)=error(k)-error(k-1); %比例输入
z(3)=error(k)-2*error(k-1)+error(k-2); %微分输入
wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k));
w11(k)=wki(k)/wadd(k);
w22(k)=wkp(k)/wadd(k);
w33(k)=wkd(k)/wadd(k);
w=[w11(k),w22(k),w33(k)];
u(k)=u(k-1)+K*w*z; %控制律
sys(1)=w11(k);
sys(2)=w22(k);
sys(3)=w33(k);
error(k-1)=error(k);
end
% End of mdlOutputs.
这是我写的,但错误提示说Attempted to access u(2); index out of bounds because numel(u)=1
求大神指导 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询