神经网络在数学建模竞赛中的应用 联系客服

发布时间 : 星期日 文章神经网络在数学建模竞赛中的应用更新完毕开始阅读

end

for i=3:(m-1) for j=1:n

X(i,j)=X(2,j)+(X(m,j)-X(2,j))*rand; end end

X=sort(X);

for i=1:m for j=1:n

x(i,j)=X(i+1,j)-X(i,j); end end x;

for i=1:m for j=1:n

c(i,j)=X(i,j)+x(i,j)*rand; end end c;

epoch=0; TT=[]; while J>tol J=0;

epoch=epoch+1; for k=1:n t=x(:,k);

w=f(c(:,k)); %w为网络权值 y=w'*t; EK=p-y;

u=1./(abs(t'*(df(c(:,k)))))^2; %学习率u的取值 c(:,k)=c(:,k)+u*(p-y)*t'*(df(c(:,k))); J=J+sum(EK.^2)/2; end

TT(epoch)=J; J

if J<=tol break; end end y

29

p epoch

plot(1:epoch,TT(1:epoch)); %画出性能指标J与迭代次数的变化图 输出结果说明:

用复化梯形计算此积分时,需把积分区间1048576等份,才能达到给定精度.积分准确值为0.0022138479.在神经网络算法中,取神经网络结构为50 ×1(即m=50),性能指标:J?10?8,在[0,π]上有50种分法,训练样本集为{((?x1j,?x2j,?,?xmj),d)|j?1,2,?,50}.得到结果为:0.002213848889,迭代590次.

3.2 神经网络算法在数值分析方面的应用

3.2.1 模拟异或函数问题

单层感知器网络不能模拟异或函数问题,这里用二层感知器神经网络来实现.异或问题真值表见表3-1.

表3-1 异或问题的真值表

输入p1 p2

输出a

0 0 0 1 0 1 0 1 1 1 1 0

首先,要创建、训练、储存感知器神经网络,接着是仿真,我们用MATLAB程序实现.

%多层感知器神经网络仿真的MATLAB程序 clear all;

%初始化随机感知器层

pr1=[0 1;0 1]; %设置随机感知器层输入向量每个元素的值域 net1=newp(pr1,3); %定义随机感知器层

net1.inputweights{1}.initFcn='rands'; %指定随机感知器层权值初始化函数为随%

机函数

net1.biases{1}.initFcn='rands'; %指定随机感知器层阀值初始化函数为随机函数 net1=init(net1); %初始化随机感知器层 iw1=net1.IW{1} %随机感知器层的权值向量 b1=net1.b{1} %随机感知器层的阀值向量

%随机感知器层仿真

p1=[0 0;0 1; 1 0;1 1]'; %训练样本值

[a1 pf]=sim(net1,p1); %随机感知器层仿真

%初始化第二感知器层

pr2=[0 1;0 1;0 1]; %设置第二感知器层输入向量每个元素的值域 net2=newp(pr2,1);

30

%训练第二感知器层

net2.trainParam.epochs=10; net2.trainParam.show=1;

p2=ones(3,4); %初始化第二感知器层的输入向量

p2=p2.*a1; %随机感知器层的仿真输出结果作为第二感知器层的输入向量 t2=[0 1 1 0]; %第二感知器层的目标向量 [net2,tr2]=train(net2,p2,t2); %训练第二感知器层

epoch2=tr2.epoch %输出训练过程经过的每一步长 perf2=tr2.perf %输出每一步训练结果的误差 iw2=net2.IW{1} %第二感知器层的权值向量 b2=net2.b{1} %第二感知器层的阀值向量

%存储训练后的网格 save net34 net1 net2

因为随机感知器的输出是随机的,所以整个网络可能达到训练误差指标,也可能达不到训练误差指标.因此,当达不到训练误差指标时,需要从新对感知器层的权值和阀值进行初始化赋值,在本例中,是通过将其初始化函数设置为随机函数,然后用intt函数重新初始化来实现的.该程序可能一次运行不到设计的限制,需要反复运行,直至达到要求为止.正因为如此,每次训练的结果也不尽相同.

其中达到训练误差指标的一种运行结果如下: iw1 =

-0.8379 -0.3614 0.7022 -0.2502 0.1241 0.7356 b1 =

0.6954 -0.5815 -0.0898

TRAINC, Epoch 0/10 TRAINC, Epoch 1/10 TRAINC, Epoch 2/10 TRAINC, Epoch 3/10 TRAINC, Epoch 4/10 TRAINC, Epoch 5/10 TRAINC, Epoch 6/10 TRAINC, Epoch 7/10 TRAINC, Epoch 8/10

TRAINC, Performance goal met.

epoch2 =

0 1 2 3 4 5 6 7 8 perf2 =

0.5000 0.7500 0.5000 0.7500 0.5000 1.0000 0.7500

0.5000 0

31

iw2 =

2 2 1 b2 = -3

训练误差性能曲线如图3-8所示. clear all

%加载训练后的网格 load net34 net1 net2

%随机感知器层仿真

p1=[0 0;0 1;1 0;1 1]'; %随机感知器输入向量 a1=sim(net1,p1);

%输出感知器层仿真,并输出仿真结果

p2=ones(3,4); %初始化第二感知器层的输入向量 p2=p2.*a1;

a2=sim(net2,p2)

a2 =

0 1 1 0

可以看出,所设计的网格可以正确模拟“异或”函数的功能.

Performance is 0, Goal is 010.90.8Training-Blue Goal-Black0.70.60.50.40.30.20.10012348 Epochs5678图3-8 训练误差性能曲线

3.2.2 基于神经网络的数字信号处理分析

早期的数字信号处理和图像处理主要以线性滤波器为主要处理手段.线性滤波器由

32