逼近函数为:y(k)=u(k)^3 +
y(k-1)/(1+y(k-1)^2),
其中u(k)=0.5sin(6pit),网络结构为“2-6-1”
%‘2-6-1’结构的BP神经网络
clc;
clear all;
close all;
xite=0.5;%学习速率
alfa=0.5;%动量因子
%……………………………………初始化………………………………%
w1=rands(2,6);%初始化输入层到隐含层的权值w1,2×6矩阵
w1_1=w1;%初始化k时刻隐含层到输出层的权值w1_1
w1_2=w1;%初始化k-1时刻隐含层到输出层的权值w1_2
w2=rands(6,1);%初始化隐含层到输出层的权值w2,6×1矩阵
w2_1=w2; %初始化k时刻隐含层到输出层的权值w2_1
w2_2=w2_1;%初始化k-1时刻隐含层到输出层的权值w2_2
dw1=0*w1;%初始化Δw1
x=[0,0]';%初始化二维输入x
u_1=0;%第1个输入信号赋初值
y_1=0;%第2个输入信号赋初值
I=[0 0 0 0 0 0]';%初始化输入层的输出,即隐含层的输入
Iout=[0 0 0 0 0 0]';%初始化隐含层的输出,即输出层的输入
FI=[0 0 0 0 0 0]';%初始化隐含层函数的函数的求导
%……………………………………初始化………………………………%
ts=0.001;%采样时间
for k=1:1:1000
time(k)=k*ts;%离散时间点
u(k)=0.5*sin(3*2*pi*k*ts);%第1个输入信号f(x)=0.5*sin(3*2*pi*t)
y(k)=u_1^3+y_1/(1+y_1^2);%初始化需要逼近的函数y(k)=u(k)^3+y(k-1)/(1+y(k-1)^2)
for j=1:1:6
I(j)=x'*w1(:,j);%输入层输出
Iout(j)=1/(1+exp(-I(j)));%隐含层输出,激活函数采用Sigmoid函数
end
yn(k)=w2'*Iout;%输出层实际输出
e(k)=y(k)-yn(k);%实际输出与理想值的偏差
w2=w2_1+(xite*e(k))*Iout+alfa*(w2_1-w2_2);%隐含层到输出层的权值更新,负梯度法,w2(k+1)=w2(k)+Δw2(k)+α(w2(k)-w2(k-1));
for j=1:1:6
FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;%激活函数求导
end
for i=1:1:2
for j=1:1:6
dw1(i,j)=e(k)*xite*FI(j)*w2(j)*x(i);%Δw1(k)
end
end
w1=w1_1+dw1+alfa*(w1_1-w1_2);%输入层到隐含层权值更新,负梯度法,w1(k+1)=w1(k)+Δw1(k)+α(w1(k)-w1(k-1));
%……………………jacobin信息更新………………%
yu=0;
for j=1:1:6
yu=yu+w2(j)*w1(1,j)*FI(j);
end
dyu(k)=yu;
%……………………jacobin信息更新………………%
x(1)=u(k);%第一个输入信号更新
x(2)=y(k);%第二个输入信号更新
w1_2=w1_1;%w1(k-1)更新
w1_1=w1;%w1(k)更新
w2_2=w2_1;%w2(k-1)更新
w2_1=w2;%w2(k)更新
u_1=u(k);%第1个输入信号更新
y_1=y(k);%第2个输入信号更新
end
%………………………………绘图…………………………%
figure(1);
plot(time,y,'r',time,yn,'b');
xlabel('times');
ylabel('y and yn');
figure(2);
plot(time,y-yn,'r');
xlabel('times');
ylabel('error');
figure(3);
plot(time,dyu);
xlabel('times');
ylabel('dyu');
%………………………………绘图…………………………%