📄 ssnpr.m
字号:
%基HEBB学习算法的单神经元自适应PID控制器的程序
function [sys,x0,str,ts] = ssnpid(t,x,u,flag)
switch flag,
case 0
[sys,x0,str,ts] = mdlInitializeSizes;
case 2
sys = mdlUpdates(x,u);
case 3
sys = mdlOutputs(t,x,u);
case {1,4,9}
sys = []
otherwise
error(['Unhandled flag=',num2str(flag)]);
end;
%初始化子程序
function [sys,x0,str,ts] = mdlInitializeSizes
sizes = simsizes;%生成size数据结构
sizes.NumContStates = 0;%连续状态数
sizes.NumDiscStates = 2;%离散状态数
sizes.NumOutputs = 1;%输出量个数
sizes.NumInputs = 2;%输入量个数e(k)、(dlt)e(k)
sizes.DirFeedthrough = 1;%是否存在代数循环(1—存在)
sizes.NumSampleTimes = 1;%采样时间个数
sys=simsizes(sizes);%返回size数据结构所包含的信息
x0 = [0;0];%设置处置状态
str = [];%保留变量并置空
ts = [1e-5 0];%采样时间
% when flag=2,updates the discrete states
function sys = mdlUpdates(x,u)
T=1;
w=100*pi
sys = [u(1);(u(2)*T+2*u1-u1_1)/(1+w*T)];
%sys = [u(1);u(2)];
% when flag=3,computates the output signals
function sys = mdlOutputs(t,x,u)
persistent wkp1_1 wki1_1 u1_1 ;
xiteP = 0.58;
xiteI = 1.0;
if t==0%初始化KP,KI,KD
wkp1_1 = 1000;
wki1_1 = 5000;
u1_1 = 0;
end
%有监督的Hebb学习算法的权值调整规则
wki1 = wki1_1+xiteI*x(1)*u1_1*x(2);%I
wkp1 = wkp1_1+xiteP*x(1)*u1_1*x(1);%P
wadd1 = abs(wkp1)+abs(wki1);
w111 = wki1/wadd1;
w122 = wkp1/wadd1;
w1 = [w111,w122];
k1 = 0.2;
u1 = k1*w1*x;
wkp1_1 = wkp1;
wki1_1 = wki1;
u1_1 = u1;
sys = u1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -