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