生活随笔
收集整理的這篇文章主要介紹了
【神经网络】RBF神经网络逼近任意连续非线性函数的Simulink仿真
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言:上周開始學習神經網絡,覺得挺有意思,神經網絡可以實現對任意非線性函數的逼近,而且可以作為控制器來實現對模型的自適應調節,讓控制器能夠不斷學習不斷修改自己的參數。
RBF神經網絡逼近任意非線性函數
??RBF神經網絡個人理解:RBF神經網絡由輸入層,隱含層和輸出層構成,其中輸入層到隱含層的激勵函數為高斯基函數,隱含層到輸出層為線性函數,高斯基函數的參數包括寬度矢量 bbb 和隱含神經元的中心矢量值 ccc。需要注意的是 bbb 和 ccc 需要設計在網絡輸入有效的映射范圍內,否則會導致RBF網絡失效而逼近失敗。
??RBF神經網絡逼近包括基于梯度下降法的自適應控制和基于Lyapunov穩定性分析的在線自適應神經網絡控制。基于梯度下降法的缺點是容易陷入局部最優且不能保證閉環系統的穩定性。
基于梯度下降法
??基于梯度下降法分為只調節權值 www 和調節權值及高斯基函數的參數 bbb,ccc,www 。通過誤差來調節神經網絡中的參數。
仿真模型:包括被控對象和RBF神經網絡逼近。
Matlab代碼:
function [sys,x0,str,ts
] = Book2222_controller
(t,x,u,flag
)
% 基于梯度下降法的RBF神經網絡逼近
switch flag
case 0 %初始化
[sys,x0,str,ts
]=mdlInitializeSizes
;case {1,2,4,9
} %離散狀態計算,下一步仿真時刻,終止仿真設定
sys=[];case 3 %輸出信號計算
sys=mdlOutputs
(t,x,u
);otherwiseDAStudio.error
('Simulink:blocks:unhandledFlag', num2str
(flag
));
end
function [sys,x0,str,ts
]=mdlInitializeSizes %系統的初始化
sizes
= simsizes
;
sizes.NumContStates
= 0;
sizes.NumDiscStates
= 0;
sizes.NumOutputs
= 1;
sizes.NumInputs
= 2;
sizes.DirFeedthrough
= 1;
sizes.NumSampleTimes
= 0; sys
= simsizes
(sizes
);
x0
= [];
str
= [];
ts
= [];
% 權值初值的選擇
% 神經網絡PID控制器
2-5-1結構
global W_new W_past C_new C_past B_new B_past
C_new
= [-1
-0.5 0 0.5 1; -10 -5 0 5 10]; %2*5 中心矢量
C_past
= C_new
;
B_new
= [3 3 3 3 3]; %1*5 基寬度參數
B_past
= B_new
;
W_new
= rand
(1,5); %權值取0-1的隨機值
W_past
= W_new
;function sys
= mdlOutputs
(t,x,u
) %產生(傳遞)系統輸出
global W_new W_past C_new C_past B_new B_past
alpha
= 0.05;
xite
= 0.15;
u_in
= u
(1);
y_out
= u
(2);
some
= [u_in
; y_out
];
h
= zeros
(5,1);
for j
= 1:5h
(j
) = exp
(-
(norm
(some - C_new
(:,j
))^2/
(2* B_new
(j
)^2
))); %5*1矩陣 徑向基函數
end
% RBF的網絡輸出ym
ym
= W_new * h
;% 權值的調整 更新值
deltaW
= zeros
(1,5);
for i
= 1:5deltaW
(i
) = xite *
(y_out - ym
) * h
(i
);
end
for i
= 1:5W_new
(i
) = W_new
(i
) + deltaW
(i
) + alpha*
(W_new
(i
) - W_past
(i
));
end% 基寬帶參數b的修正
deltab
= zeros
(1,5);
for i
= 1:5deltab
(i
) = xite *
(y_out - ym
) * W_new
(i
) * h
(i
) *
(norm
(some - C_new
(:,i
))^2 / B_new
(i
)^3
);B_new
(i
) = B_new
(i
) + deltab
(i
) + alpha*
(B_new
(i
) - B_past
(i
));
end% 中心矢量c的修正
deltac
= zeros
(2,5);
for j
= 1:2
for i
= 1:5 deltac
(j,i
) = xite *
(y_out - ym
) * W_new
(i
) * h
(i
) *
((some(j) - C_new(j,i)) / B_new
(i
)^2
);C_new
(j,i
) = C_new
(j,i
) + deltac
(j,i
) + alpha*
(C_new
(j,i
) - C_past
(j,i
));end
endsys
(1) = ym
;W_past
= W_new
;
B_past
= B_new
;
C_past
= C_new
;
仿真結果:
真實輸出與RBF神經網絡輸出對比
輸出誤差:
結論
?? RBF神經網絡可以很好的逼近非線性函數,穩態誤差很小,根據這一特性可以用神經網絡來實現對模型的精確控制,后續考慮結合神經網絡與固定時間滑模控制來發文章。
總結
以上是生活随笔為你收集整理的【神经网络】RBF神经网络逼近任意连续非线性函数的Simulink仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。