資源簡介
由BP神經網絡完成PID參數自適應,這是其中由M文件編寫的S函數
代碼片段和文件信息
function?[sysx0strts]=my_exppidf(txuflag)
switch?flag
????case?0
????????[sysx0strts]=mdlInitializeSizes;
????case?2
????????sys=mdlUpdates(xu);
????case?3
????????sys=mdlOutputs(txu);
????case?{149}
????????sys=[];
????otherwise
????????error([‘unhandled?flag=‘num2str(flag)]);%異常處理
end
function[sysx0strts]=mdlInitializeSizes
????sizes=simsizes;%用于設置模塊參數的結構體用simsizes來生成
????sizes.NumContStates=0;%模塊連續狀態變量的個數
????sizes.NumDiscStates=3;%模塊離散狀態變量的個數
????sizes.NumOutputs=4;%模塊輸出變量的個數
????sizes.NumInputs=7;%模塊輸入變量的個數
????sizes.DirFeedthrough=1;%模塊是否存在直接貫通,1表示存在直接貫通,若為0,則mdlOutputs函數里不能有u
????sizes.NumSampleTimes=1;%模塊的采樣時間個數至少是一個
????sys=simsizes(sizes);%設置完后賦給sys輸出
????x0=zeros(31);%系統狀態變量設置
????str=[];
????ts=[0.1?0];%采樣周期設為0表示是連續系統,%?????ts=[0.001?0];%采樣周期設為0表示是連續系統,
????
function?sys=mdlUpdates(xu)
????????T=0.001;
????????x=[u(5);x(2)+u(5)*T;(u(5)-u(4))/T];%3個狀態量(偏差、偏差和以及偏差變化量),u(5)是偏差,u(4)是上一次的偏差,x(2)則是之前的偏差和
????????sys=[x(1);x(2);x(3)];
function?sys=mdlOutputs(txu)
????????????xite=0.2;
????????????alfa=0.05;
????????????IN=3;H=5;OUT=3;
????
????????????Oh=zeros(51);%產生一個1*5的零矩陣(行矩陣)
????????????I=Oh;
????????????xi=[u(1)u(3)u(5)];%神經網絡訓練的3個輸入,期望值、誤差以及實際值
????????????epid=[x(1);x(2);x(3)];%3個狀態變量(偏差、偏差和、偏差變化量)(3*1矩陣,列向量)
????????????I=xi*wi‘;%隱層的輸入
???????
評論
共有 條評論