基于神经网络的仿真实验一、实验目的1.熟悉神经网络的结构、特征及学习算法2.通过实验掌握利用神经网络进行样本学习与训练的方法。3.通过实验了解神经网络的结构、权值、学习速率、动量因子对控制效果的影响。4.通过实验掌握用Matlab实现神经网络控制系统仿真的方法二、实验内容1.给出仿真系统的设计过程和程序清单。2.记录实验数据和曲线三、实验步骤1.在Matlab下依据原理编写仿真程序并调试。2.给定输入信号,或训练样本,运行程序,记录实验数据和控制曲线3.修改神经网络结构参数,如权值、学习速率、动量因子、隐含层神经元个数等,重复步骤(2)四、实验要求1.使用BP网络逼近对象:采样时间取2ms,输入信号为u(k)=2sin(10πt),神经网络为3-10-2结构,权值W1,W2的初始取值取[-1,+1]之间的随机值,取η=0.80,α=0.06。2.取标准样本为3输入2输出样本,如表所示。输入输出101101100111100100100010101000神经网络为3-12-2结构,权值的初始取值取[-1,+1]之间的随机值,取η=0.70,α=0.05,训练最终目标为。3.被控对象为输入指令为一方波信号:))4sgn(sin(8.0)(tkrin,采样时间为1ms,η=0.60,采用有监督Hebb学习实现权值的学习,初始权值取2.0,15.015.015.0321K五、实验程序1.clearall;清除所有文件;closeall;关闭所有已开文件;xite=0.80;惯性系数为0.8;alfa=0.06;学习速率为0.06;w2=rands(6,1);初始化隐含层与输出层6行1列的权值矩阵;stkykykukyout5.0)1(1)1()()(23)2(632.0)1(10.0)2(26.0)1(368.0)(kukukykyky1010Ew2_1=w2;w2_2=w2_1;w1=rands(2,6);初始化输入层与隐含层;w1_1=w1;w1_2=w1;dw1=0*w1;x=[0,0]';给神经元的输入层的节点赋值;u_1=0;初始化;y_1=0;I=[0,0,0,0,0,0]';Iout=[0,0,0,0,0,0]';FI=[0,0,0,0,0,0]';ts=0.002;采样时间为2ms;fork=1:1:1000time(k)=k*ts;第k个采样时间;u(k)=2*sin(10*pi*ts);第k个采样时间输入信号;y(k)=u_1^3+y_1/(1+y_1^2);第k个采样时间输入信号;forj=1:1:6I(j)=x'*w1(:,j);Iout(j)=1/(1+exp(-I(j)));隐含层输出;endyn(k)=w2'*Iout;输出层输出=隐含层与输出层之间连接数*隐含层输出;e(k)=y(k)-yn(k);w2=w2_1+(xite*e(k))*Iout+alfa*(w2_1-w2_2);隐含层与输出层之间的权值调整公式;forj=1:1:6FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;endfori=1:1:2forj=1:1:6dw1(i,j)=e(k)*xite*FI(j)*w2(j)*x(i);输入层与隐含层之间的权值变化公式;endendw1=w1_1+dw1+alfa*(w1_1-w1_2);输入层与隐含层之间的权值调整公式;yu=0;forj=1:1:6yu=yu+w2(j)*w1(1,j)*FI(j);enddyu(k)=yu;x(1)=u(k);x(2)=y(k);w1_2=w1_1;w1_1+w1;w2_2=w2_1;w2_1=w2;u_1=u(k);y_1=y(k);endfigure(1);plot(time,y,'r',time,yn,'b');画图;xlabel('times');ylabel('yandyn');figure(2);plot(time,y-yn,'r');xlabel('times');ylabel('error');figure(3);plot(time,dyu);xlabel('times');ylabel('dyu');00.10.20.30.40.50.60.70.80.91-0.0500.050.10.150.20.250.30.35timeserror00.10.20.30.40.50.60.70.80.912.62.833.23.43.63.8timesdyu00.10.20.30.40.50.60.70.80.91-0.8-0.6-0.4-0.200.20.40.6timeyandyn2.clearall;closeall;forj=1:1:6xite=0.50;I(j)=x*w1(:,j);alfa=0.05;Iout(j)=1/(1+exp(-I(j)));w2=rands(6,2);endw2_1=w2;w2_2=w2_1;yl=w2'*Iout;w1=rands(3,6);yl=yl';w1_1=w1;w1_2=w1;el=0;dw1=0*w1;y=ys(s,:);I=[0,0,0,0,0,0]';forl=1:1:OUTIout=[0,0,0,0,0,0]';el=el+0.5*(y(1)-yl(1))^2;FI=[0,0,0,0,0,0]';endOUT=2;es(s)=el;k=0;E=0;E=1.0;ifs==NSNS=3;fors=1:1:NSwhileE=1e-020E=E+es(s);k=k+1;endtimes(k)=k;endfors=1:1:NSey=y-yl;xs=[1,0,0;w2=w2_1+xite*Iout*ey+alfa*(w2_1-w2_2);0,1,0;forj=1:1:60,0,1];S=1/(1+exp(-I(j)));ys=[1,0;FI(j)=S*(1-S);0,0.5;end0,1;];fori=1:1:3x=xs(s,:);forj=1:1:6dw1(i,j)=xite*FI(j)*x(i)*(ey(1)*w2(j,1)+ey(2)*w2(j,2));endendw1=w1_1+dw1+alfa*(w1_1-w1_2);w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;endEk(k)=E;endfigure(1);plot(times,Ek,'r');xlabel('k');ylabel('E');savewfilew1w2;I=0Iout=0FI=0000000000000000010203040506070809000.10.20.30.40.50.60.7kE3.clearall;e_2=0;closeall;y_1=0;y_2=0;x=[0,0,0]';u_1=0;u_2=0;xite=0.60;ts=0.001;w1_1=0.15;fork=1:1:1000w2_1=0.15;time(k)=k*ts;w3_1=0.15;r(k)=0.8*sign(sin(2*2*pi*k*ts));e_1=0;y(k)=0.368*y_1+0.26*y_2+0.1*u_1+0.632*u_2;e(k)=r(k)-y(k);endw1(k)=w1_1+xite*e(k)*u_1*x(1);figure(1);w2(k)=w2_1+xite*e(k)*u_1*x(2);plot(time,r,'b',time,y,'r');w3(k)=w3_1+xite*e(k)*u_1*x(3);xlabel('time(s)');ylabel('Positiontracking');K=0.2;figure(2);x(1)=e(k)-e_1;plot(time,e,'r');x(2)=e(k);xlabel('time(s)');ylabel('error');x(3)=e(k)-2*e_1+e_2;figure(3);w=[w1(k),w2(k),w3(k)];plot(time,w1,'r');u(k)=u_1+K*w*x;xlabel('time(s)');ylabel('w1');e_2=e_1;e_1=e(k);figure(4);u_2=u_1;u_1=u(k);plot(time,w2,'r');y_2=y_1;y_1=y(k);xlabel('time(s)');ylabel('w2');w1_1=w1(k);figure(5);w2_1=w2(k);plot(time,w3,'r');w3_1=w3(k);xlabel('time(s)');ylabel('w3');00.10.20.30.40.50.60.70.80.91-0.8-0.6-0.4-0.200.20.40.60.81time(s)Positiontracking00.10.20.30.40.50.60.70.80.91-2-1.5-1-0.500.51time(s)error00.10.20.30.40.50.60.70.80.910.10.20.30.40.50.60.70.80.9time(s)w100.10.20.30.40.50.60.70.80.91-0.4-0.200.20.40.60.81time(s)w200.10.20.30.40.50.60.70.80.910.10.150.20.250.30.350.40.450.50.550.6time(s)w3