?? 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 + -