基于神经网络的仿真实验一、实验目的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神经网络为3-12-2结构,权值的初始取值取[-1,+1]之间的随机值,取η=0.70,α=0.05,训练最终目标为 。
3.被控对象为输入指令为一方波信号:))4sgn(sin(8.0)(t k rin π=,采样时间为1ms ,η=0.60,采用有监督Hebb 学习实现权值的学习,初始权值取[][]2.0,15.015.015.0321===K w w w W 五、实验程序1.clear all; 清除所有文件; close all; 关闭所有已开文件; xite=0.80; 惯性系数为0.8; alfa=0.06; 学习速率为0.06;w2=rands(6,1); 初始化隐含层与输出层6行1列的权值矩阵;s t k y k y k u k yout 5.0)1(1)1()()(23≤-+-+=)2(632.0)1(10.0)2(26.0)1(368.0)(-+-+-+-=k u k u k y k y k y 1010-=Ew2_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;for k=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个采样时间输入信号;for j=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); 隐含层与输出层之间的权值调整公式;for j=1:1:6FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;endfor i=1:1:2for j=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;for j=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('y and yn'); figure(2); plot(time,y-yn,'r');xlabel('times');ylabel('error');figure(3); plot(time,dyu);xlabel('times');ylabel('dyu');-0.0500.050.10.150.20.250.30.35timese r r o r2.62.833.23.43.63.8timesd y u00.10.20.30.40.50.60.70.80.91timey a n d y n2.clear all;close all; for j=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]'; for l=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; if s==NS NS=3; for s=1:1:NS while E>=1e-020 E=E+es(s); k=k+1; end times(k)=k; end for s=1:1:NS ey=y-yl; xs=[1,0,0; w2=w2_1+xite*Iout*ey+alfa*(w2_1-w2_2);0,1,0; for j=1:1:60,0,1]; S=1/(1+exp(-I(j))); ys=[1,0; FI(j)=S*(1-S); 0,0.5; end0,1; ]; for i=1:1:3 x=xs(s, : ); for j=1:1:6dw1(i,j)=xite*FI(j)*x(i)*(ey(1)*w2(j,1)+ey(2)*w2(j,2)); end endw1=w1_1+dw1+alfa*(w1_1-w1_2); w1_2=w1_1;w1_1=w1; w2_2=w2_1;w2_1=w2; end Ek(k)=E; end figure(1);plot(times,Ek,'r'); xlabel('k');ylabel('E'); save wfile w1 w2;I = 0 Iout= 0 FI = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000.10.20.30.40.50.60.7kE3. clear all; e_2 =0;close all; 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; for k=1:1:1000 w2_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('Position tracking'); 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)P o s i t i o n t r a c k i n g00.10.20.30.40.50.60.70.80.91-2-1.5-1-0.50.51time(s)e r r o r00.10.20.30.40.50.60.70.80.910.10.20.30.40.50.60.70.80.9time(s)w 100.10.20.30.40.50.60.70.80.91-0.4-0.20.20.40.60.81time(s)w 20.10.20.30.40.50.60.70.80.910.10.150.20.250.30.350.40.450.50.550.6time(s)w 3。