【神经网络】RBF神经网络逼近任意连续非线性函数的Simulink仿真

您所在的位置:网站首页 非线性系统怎么处理 【神经网络】RBF神经网络逼近任意连续非线性函数的Simulink仿真

【神经网络】RBF神经网络逼近任意连续非线性函数的Simulink仿真

2024-07-11 06:08| 来源: 网络整理| 查看: 265

前言:上周开始学习神经网络,觉得挺有意思,神经网络可以实现对任意非线性函数的逼近,而且可以作为控制器来实现对模型的自适应调节,让控制器能够不断学习不断修改自己的参数。

RBF神经网络逼近任意非线性函数

  RBF神经网络个人理解:RBF神经网络由输入层,隐含层和输出层构成,其中输入层到隐含层的激励函数为高斯基函数,隐含层到输出层为线性函数,高斯基函数的参数包括宽度矢量 b b b 和隐含神经元的中心矢量值 c c c。需要注意的是 b b b 和 c c c 需要设计在网络输入有效的映射范围内,否则会导致RBF网络失效而逼近失败。   RBF神经网络逼近包括基于梯度下降法的自适应控制和基于Lyapunov稳定性分析的在线自适应神经网络控制。基于梯度下降法的缺点是容易陷入局部最优且不能保证闭环系统的稳定性。

基于梯度下降法

  基于梯度下降法分为只调节权值 w w w 和调节权值及高斯基函数的参数 b b b, c c c, w w w 。通过误差来调节神经网络中的参数。

仿真模型:包括被控对象和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); otherwise DAStudio.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:5 h(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:5 deltaW(i) = xite * (y_out - ym) * h(i); end for i = 1:5 W_new(i) = W_new(i) + deltaW(i) + alpha*(W_new(i) - W_past(i)); end % 基宽带参数b的修正 deltab = zeros(1,5); for i = 1:5 deltab(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 end sys(1) = ym; W_past = W_new; B_past = B_new; C_past = C_new; 仿真结果:

真实输出与RBF神经网络输出对比

输出误差:

结论

   RBF神经网络可以很好的逼近非线性函数,稳态误差很小,根据这一特性可以用神经网络来实现对模型的精确控制,后续考虑结合神经网络与固定时间滑模控制来发文章。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3