RBF网络的学习过程与BP网络的学习过程类似,两者的主要区别在于各使用不同的作用函数。BP网络中隐层使用的是Sigmoid函数,其值在输入空间中无限大的范围内为非零值,因而是一种全局逼近的神经网络;而RBF网络中的作用函数是高斯基函数,其值在输入空间中有限范围内为非零值,因为RBF网络是局部逼近的神经网络。 RBF网络逼近程序如下: - % RBF Network approximation
- clc% 清屏
- clear all;%删除workplace变量
- close all;%关掉显示图形窗口
- % 网络学习参数
- alfa=0.08; %动量因子
- xite=0.7; %学习因子
- x=[0,0]';
- b=1.5*ones(4,1);
- c=0.5*ones(2,4);
- w=rands(4,1);
- w_1=w;
- w_2=w_1;
- c_1=c;
- c_2=c_1;
- b_1=b;
- b_2=b_1;
- d_w=0*w;
- d_b=0*b;
- y_1=0;
- ts=0.001;
- for k=1:1:2000
-
- time(k)=k*ts;
- u(k)=0.50*sin(1*2*pi*k*ts);
- y(k)=u(k)^3+y_1/(1+y_1^2);
- x(1)=u(k); %初值
- x(2)=y(k);
- for j=1:1:4
- h(j)=exp(-norm(x-c(:,j))^2/(2*b(j)*b(j)));% 高斯基函数
- end
- ym(k)=w'*h';
- em(k)=y(k)-ym(k);
- for j=1:1:4
- d_w(j)=xite*em(k)*h(j);
- d_b(j)=xite*em(k)*w(j)*h(j)*(b(j)^-3)*norm(x-c(:,j))^2;
- for i=1:1:2
- d_c(i,j)=xite*em(k)*w(j)*h(j)*(x(i)-c(i,j))*(b(j)^-2);
- end
- end
- w=w_1+ d_w+alfa*(w_1-w_2);
- b=b_1+d_b+alfa*(b_1-b_2);
- c=c_1+d_c+alfa*(c_1-c_2);
-
- %%Jacobian信息
- yu=0;
- for j=1:1:4
- yu=yu+w(j)*h(j)*(c(1,j)-x(1))/b(j)^2; % 敏感度
- end
- dyu(k)=yu;
- y_1=y(k);
- w_2=w_1;
- w_1=w;
- c_2=c_1;
- c_1=c;
- b_2=b_1;
- b_1=b;
- end
- figure(1);
- plot(time,y,'r',time,ym,'b'); % RBF网络辨识结果
- xlabel('time(s)');ylabel('y and ym');
- grid on
- title('RBF网络辨识结果')
- figure(2);
- plot(time,y-ym,'r'); % RBF网络辨识误差
- xlabel('time(s)');ylabel('identification error');
- grid on
- title('RBF网络辨识误差')
- figure(3);
- plot(time,dyu,'r'); % RBF网络敏感度Jacobian信息
- xlabel('times');ylabel('dyu');
- grid on
- title('RBF网络敏感度Jacobian信息')
复制代码 参考文献:MATLAB智能算法超级学习手册
|