神经网络与回归方法分析(数学建模)
多元回归与神经网络的应用
摘要
本文主要是通过整理分析数据, 以得出题目中所给出的x i 与y j 的函数关系. 由于数据并不是很充足,我们选择了所有数据为样本数据和部分数据为验证数据。我们首先采用了多元回归方法,由于数据之间并没有明显的线性或者其它函数关系,模型很难选择,得到的结论对于y 1来说残值偏大,效果很差,于是我们引用了BP 神经网络,经过选择合适的参数,多次训练得到合适的网络,拟合得到了相对精确的结果,并进行了验证,最后将三种模型进行了对比。
关键字: 多元线性回归 多元非线性回归 最小二乘法 牛顿法 BP神经网络
1. 问题重述
现实生活中, 由于客观事物内部规律的复杂性及人们认识程度的限制, 人们常收集大量的数据, 基于数据的统计分析建立合乎基本规律的数学模型, 然后通过计算得到的模型结果来解决实际问题. 回归分析法和神经网络是数学建模中常用于解决问题的有效方法. 本文要解决的主要问题是:通过对所给数据的分析, 分别用回归方法或神经网络来确立x i 与y 之间的函数关系,并验证结论。
i
2. 问题分析
题目要求我们使用神经网络或回归方法来做相关数据处理,相比较之下,我们对回归方法比较熟悉,所以首先选取了回归方法。得到相关函数,并分析误差,再利用神经网络模型建立合理的网络,进行误差分析并和前者比较,得出合理的结论。
3. 符号说明
1
4. 模型建立与求解
2
1
4.1多元回归方法
它是研究某个变量与另一些变量的函数关系. 主要内容是从一组样本数据出发, 通过合理分析得到正确的函数关系,建立相应的表达式,并通过相关软件处理得到相应的系数。
4.1.1多元线性回归方法
1. 回归模型的一般形式为:Y=β0+β1X 1+β2X 2+... +βm X m +ε
其中β0, β1,..., βm 是待估计参数,e 是随机误差即残差。残差ε服从均数为0,方差为σ2的正态分布。这就是线性回归的数学模型。
⎛β⎫
⎛⎫ 0⎪ ⎪ β⎪ 1x 11 x 14⎪ 1⎪⎧y ⎫⎛ε1⎫⎪1⎪ ⎪ ⎪ ⎪,β=β,ε= ⎪, Y =⎨⎬,X =
2⎪ ⎪
⎪⎪y ⎝ε2⎭ 1x x ⎪⎩2⎭ ⎪491494
⎪ β3⎪ 1⎪ ⎝x 501 x 504⎭ β⎪⎪
⎝4⎭ 那么多元线性回归数学模型可也写成矩阵形式:Y =X β+ε 其中ε的分量是独立的。
2. 参数β的最小二乘估计. 为了估计参数β,我们采用最小二乘估计法. 设
b 0, b 1,..., b 4分别是参数β0, β1,..., β4的最小二乘估计,则回归方程为
y =b 0+b 1x 1+... +b 4x 4
由最小二乘法知道,b 0, b 1,..., b 4应使得全部观察值y α与回归值y 的偏差平
α
^
^
方和Q 达到最小,即使
Q =∑
α
⎛⎫ y α-y α⎪⎝⎭
^
2
=最小
3 1
所以Q 是b 0, b 1,..., b 4的非负二次式,最小值一定存在。根据微积分中的极值原理,b 0, b 1,..., b 4应是下列正规方程组的解:
δQ
=-2δ0
⎧α⎨^⎫
⎩δQ =-2⎛ y -y ⎪=0, ∑α⎪x αj αδj
α⎝⎭
显然,正规方程组的系数矩阵是对称矩阵,用A 来表示,则A =X ' X ,则其右端常数项矩阵B 亦可以用矩阵X 和Y 来表示:B =X ' Y ,所以可以得到回归方程的回归系数:
b =A B =(X X )X ' Y
-1
'
-1
∑y α-y
⎛ ⎝
^
⎫⎪=0, α⎪⎭
3. 由于利用偏回归方程和Q i 可以衡量每个变量在回归中所起的作用大小(即影响程度),设S h 是p 个变量所引起的回归平方和,S 所引起的回归平方和(即除去x i ),则偏回归平方和Q i 为
Q =S h -S
i
1
h
1
是(p-1)个变量
h
=∑b j B j -∑b j
j =0
p
*
B j =
c
2
ii
就是去掉变量x i 后,回归平方和所减少的量。
4. 建立模型
y i =b 1+b 2⨯x 1+b 3⨯x 2+b 4⨯x 3+b 5⨯x 4
5. 模型的求解
我们通过MATLAB ,求得其回归系数,并最终得到x i 与y i 的函数关系:
⎧y =339.8499-16.8114x +11.5489x +67.5414x -15.5485x ,
1234⎪1
⎨
=-164.5580+0.1874x 1-1.7976x 2+29.9728x 3+12.4426x 4, ⎪⎩y 2
同时通过MATLAB 可以得出x i 与y i 的误差结果如下:
4 1
由此, 我们可得出结论, 采用多元线性回归得出的函数关系对于y 1残差太大, 效果很差, 对于y 2的拟合也并不是很完美。
4.1.2非线性回归方法
1. 数据标准化
我们选用的是非线性模型LSE 的Gauss-Newton 算法:
采用Z-score 标准化法,即对序列x 1, x 2,..., x m 进行变换:
为1.
。
首先考虑单参数的非线性回归模型: 其残差平方和函数为
Y
i
=f
(x , β)+ε
i
i
5 1
S (β)=
∑⎡⎣Y i -f (X i , β)⎤⎦
i =1
N 2
要使S (β)取极小值,则令其一阶导数为0,来求β. 一个近似的方法是用Taylor 近似展开来代替。设β的初值为β1,则在β1点附近函数有近似Taylor 展式: f
(X , β)≈f (X , β
i
i
1
)+
i
df
(, β)
i
d β
β1
(β-β)
1
可以求的其导数值,简记为: 则
Z (β
i
1
)=
df
(, β) d ββ1
2
⎡⎤
S (β)=∑⎡Y i -f (X i , β)-Z i (β)(β-β)⎤=∑Y i (β)-Z i (β). β111⎦11⎢⎥⎣
⎣⎦
N
2
N
i =1
i =1
即为线性回归
Y i (β
1
)=Z (β). β+ε
i
1
i
的残差和. 上式被称为拟线性模型. 其最小二乘估计是
β2=
∑Y (β) ⋅Z (β)
i
1
i
1
i =1
n
~
∑Z (β)
i
1
i =1
n
2
=[Z (β1) Z (β1)]Z (β1) Y (β1)
' -1'
~
如果我们有β的初值,就可以得到另一个新值,进而可以得到一个序列,写出一个迭代表达式,即
β
n +1
与
β
n
的关系。若在迭代过程中有
β
n +1
=
β
n
,即S (β)的一阶导数为0,
此时S (β)取得一个极值。
为了避免迭代时间过长或迭代来回反复,可以引入进步长控制函数
t
n
,
βn +1=βn -t n [Z(βn ) ' Z(βn )]-1
dS
d β
βn
=βn -2t n [Z(βn ) ' Z(βn )]-1Z (βn ) ' [Y-f (X,βn )]
t
n
由计算机程序根据误差自动调整. 上述算法一般称为Gauss-Newton 算法.
6 1
2.建立非线性回归模型:采用多元二次多项式函数 设函数:
y =b +b x +b x +b x +b x +b x +b x x +b x x +b x x +b x +b x x +b x x +b x +b x x +b x
2
2
1
1
1
2
2
3
3
4
4
5
1
6
1
2
7
1
3
8
1
4
9
2
10
2
2
2
11
2
4
12
3
13
3
4
14
4
3
通过Gauss-Newton 算法和MATLAB 计算最终得出以下结果:
⎧y =-12575.9401-29.4571+27.8190-1597.9960+1695.5778+0.87102-0.4665
x 1x 2x 3x 4x 1x 1x 2
⎪1
22⎪-35.3093+2.1549-1.2898+24.7977+0.9121+31.8946x 1x 3x 1x 4x 2x 2x 3x 2x 4x 3+94.3367x 3x 4
⎪
⎪-57.08592⎪x 4⎨2
⎪y 2=2483.4478-14.5988x 1-5.8585x 2+12.5802x 3-302.8910x 4+0.4888x 1+0.0955x 1x 2⎪22
⎪+8.7210x 1x 3-0.4971x 1x 4+0.2123x 2-3.0459x 2x 3-0.1410x 2x 4+24.6923x 3-5.2033x 3x 4⎪2⎪+10.1871x 4⎩
通过MATLAB 编写相应程序所得结果如下:
y , y
1
2
的残差图
7 1
由图可以明显看出误差很大,拟合效果不好。综合多元非线性和多元线性这两种模型,我们可以发现y1并不适合这两种模型,y2模拟相对较好,但误差并没有足够小,不再我们的预期效果之内。于是我们采用了BP 神经网络。
4.2神经网络
4.2.1模型的原理
BP (Back Propagation)神经网络是一种多层前馈神经网络。其由输入层、中间层、输出层组成的阶层型神经网络,中间层可扩展为多层。相邻层之间各神经元进行全连接,而每层各神经元之间无连接,网络按有教师示教的方式进行学习,当一对学习模式提供给网络后,各神经元获得网络的输入响应产生连接权值(Weight ),隐含层神经元将传递过来的信息进行整合,通常还会在整合过程添加一个阈值,这是模仿生物学中神经元必须达到一定阈值才会触发的原理。输入层神经元数量由输入样本的维数决定,输出层神经元数量由输出样本的维数决定,隐藏层神经元合理选择。然后按减小希望输出与实际输出误差的方向,从输出层经各中间层逐层修正各连接权,回到输入层。此过程反复交替进行,直至网络的全局误差趋向给定的极小值,即完成学习的过程。BP 网络的核心是数学中的“负梯度下降”理论,即BP 的误差调整方向总是沿着误差下降最快的方向进行。
.
相关传递函数(或激励函数):
阈值型(一般只用于简单分类的MP 模型中)
⎧0, x
f (x ) =⎨
⎩1, x >=0
线性型(一般只用于输入和输出神经元) f (x ) =x S型(常用于隐含层神经元)
11-e -x
f (x ) = 或 f (x ) =
1+e -x 1+
e -x
8 1
通常还会在激励函数的变量中耦合一个常数以调整激励网络的输出幅度。
4.2.2 模型的建立与求解
步骤1、准备训练网络的样本
我们此次的BP 网络是一个4输入2输出的网络,如下表所示:
9 1
步骤2、确定网络的初始参数 步骤3、初始化网络权值和阈值
因为是4个输入因子8个隐含层神经元,则第一层与第二层之间的权值w ij (t) 为8⨯4 的随机数矩阵:
[-0.044 0.325 -0.099 0.149 -0.031 0.180 0.332 0.350 0.2393 0.364 0.206 0.187 0.1475 0.248 0.394 0.322
10
1
-0.005 0.191 0.163 0.269 0.1475 0.307 0.139 0.192 -0.026 0.339 0.300 0.023 -0.072 0.394 0.013 0.233]
错误!未找到引用源。神经网络的阈值是用来激活神经元而设置的一个临界值,有多少个神经元就会有多少个阈值,则第二层神经元的阈值B ij (t)为8⨯1 的矩阵: [-0.058
0.212 0.230 0.264 0.345 0.391 0.284 0.190]T
同理,第二层与第三层之间的权值w jk (t) 为2⨯8 的随机数矩阵: [0.364 -0.091 0.331 0.322 0.176 -0.084 0.081 0.144 0.190 -0.039 0.142 0.004 0.214 0.20 -0.075 -0.003] 同理,第三层阈值B jk (t) 为2⨯1 的矩阵:
[-0.038 0.002] 步骤4、计算第一层神经元的输入与输出
假设第一层神经元中放置的是线性函数,所以网络第一层输入和输出都等于实际输入样本的值, 所以第一层输出值O 1=X 。
但是,因为输入和输出样本的量纲以及量级都不相同,所以须进行归一化处理。
步骤5、计算第二层神经元的输入
对于第二层,神经元的输入是第一层所有的神经元的值与阈值的和,即
I 2=w ij ⨯X +B ij ⨯ones ,其中ones 是一个全为1的矩阵,所以I 2 是一个8⨯50 的矩阵,很容易得出I 2。 步骤6、计算第二层神经元的输出
假设第二层神经元激励函数为单极S 型函数,即为f(x)=
1
,所以第二1+e -x
层神经元的输出O 2=
1
.所以第二层输出也是一个8⨯50 的矩阵。 -I 2
1+e
步骤7、计算第三层的输入和输出
第三层输入与第二层输入相似,即I 3=w jk ⨯O 2+B jk ⨯ones ,所以I 3 是一个
2⨯50 的矩阵。
步骤8、计算能量函数E
能量函数,即网络输出与实际输出样本之间的误差平方和,其目的是在达到预定误差就可以停止训练网络。Y 是归一化处理后的实际输出样本。则:
E =∑(Y-O 3) 2=136.9006
步骤9、计算第二层与第三层之间的权值和阈值调整量
权值调整量:∆w jk =-η
∂E
=-η⨯(Y-O 3) ⨯O 2 ,∆w jk 是一个2⨯8 的矩阵 ∂w jk
[-33.644 -39.7786 -38.55 -40.2511 -41.395 -41.33 -37.804 -38.256 -11.433 -11.8610 -12.38 -12.077 -12.935 -13.32 -12.509 -12.633]
同理,阈值调整量:∆B jk =
∂E
=-η⨯(Y-O 3) ⨯ones ,∆B jk 是一个2⨯1 ∂B jk
矩阵:
[-67.628 -22.343]
步骤10、计算第一层与第二层之间的权值和阈值调整量
因为对于传递函数f (x)=
1
,有 f ' (x)=f (x)[1-f (x)] , 故权值调整-x
1+e
量: ∆w ij =-η
∂E
=-η⨯w jk ⨯(Y-O 3) ⨯O 2⨯(1-O 2) ⨯X ∂w ij
所以∆w ij 是一个8⨯4 的矩阵: -0.183 0.482 0.710 -3.319 0.056 -0.135 -0.193 0.769 -0.099 0.547 0.615 -2.893 -0.138 0.635 0.438 -2.696 -0.072 0.132 0.615 -1.432 0.0764 -0.39 0.320 0.728 -0.062 0.251 -0.066 -0.730 -0.101 0.323 0.1105 -1.263 同理,阈值调整量:∆B ij =
∂E
=-η⨯w jk ⨯(Y-O 3) ⨯O 2⨯(1-O 2) ⨯ones ∂B ij
所以∆B ij 为8⨯1 的矩阵: [-7.113
1.674 -6.119 -5.1014
-3.945 0.2310 -0.9220 -2.335]T
步骤11 计算调整之后的权值和阈值
w jk (t+1) =-ηB jk (t+1) =-η
∂E
+w jk (t)=∆w jk +w jk (t)∂w jk
∂E
+B jk (t)=∆B jk +Bjk (t)∂B jk
∂E
w ij (t+1) =-η+w ij (t)=∆w ij +w ij (t)
∂w ij B ij (t+1) =-η
∂E
+B ij (t)=∆B ij +Bij (t)∂B ij
此算法是让网络沿着E 变化量最小的方向搜索,所以经过一段时间的训练之后,神经网络会慢慢蜷缩收敛,直到完全拟合成目标输出值或接近目标输出值。
下面是y1的神经网络训练动态图:
步骤12 还原网络输出的值
因为在训练网络时,将输入和输出的样本经过了归一化的处理,所以要将O 3 还原成原始数据的量级。
根据此算法,我们编出了matlab 程序,最终拟合结果如下:
可以看出结果并不理想,相对于回归模型,误差并没有减小。
4.2.3模型的修正
由于模型的参数没有选择好,隐含层数量不足,模拟的效果并不好,于是我们重
通过编写MATLAB 工具箱程序,训练得到了下面的结果:
由此得到的结果从视觉上非常完美。
我们用训练得到的网络验证了全部数据并提取了误差:
可以得到只有几个数据不是那么精确。
评价与总结
我们抽取了部分数据,分别检验了回归模型和通过神经网络算法训练得到的网络,得到了误差,在此我们进行了具体的对比:
Y1各种方法的误差如下表所示:
Y2各种方法的误差如下表所示:
显高于其他因素的变量是使用。多元回归分析法比较适用于实际经济问题,受多因素综合影响时使用。但是有时候在回归分析中,选用何种因子和该因子采用何种表达式只是一种推测,这影响了用电因子的多样性和某些因子的不可测性,使得回归分析在某些情况下受到限制。不管是哪种方法都有各自的优缺点。合理选择适合问题的方法是最重要的。
5. 参考文献
【1】姜启源. 数学模型. 北京:高等教育出版社,2003.
【2】赵静,但琦等,数学建模与数学实验,北京:高等教育出版社 施普林格出版社,2000年
【3】李庆扬,王能超,易大义. 数值分析(第四版)[M].北京:清华大学出版社,2001.
【4】张德丰.MATLAB 数值计算方法. 北京:机械工业出版社,2010.
【5】王惠文,《偏最小二乘回归方法及应用》,国防科技出版社,北京,1996.
【6】徐国章,等. 曲线拟合的最小二乘法在数据采集中的应用【J 】. 冶金自动化增刊,2004年
【7】(美)里德. 数值分析与科学计算. 北京:清华大学出版社,2008. 【8】(美)约翰逊. 数值分析与科学计算. 北京:科学出版社,2012.
【9】姜绍飞,张春丽,钟善桐.BP 网络模型的改进方法探讨【J 】哈尔滨建筑大学学报,2000.
【10】郝中华. 《B P 神经网络的非线性思想》. 洛阳师范学院学报2008.3(4) 【11】巨军让,卓戎. 《B P 神经网络在Matlab 中的方便实现 》. 新疆石油学院学报.2008.2
【12】 周开利,康耀红 编著. 《神经网络模型及其MATLAB 仿真程序设计》.2006:10-43
附录:程序1
x1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','B2:B51'); x2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','C2:C51'); x3=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','D2:D51'); x4=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','E2:E51'); y1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','F2:F51'); y2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','G2:G51'); x=[x1,x2,x3,x4];
x0=ones(size(x,1),1);
t=1:50;
X=[x0,x];
[b,bint,r,rint,statsl]=regress(y1,X);
[b1,bint,r1,rint,statsl]=regress(y2,X);
plot(t,r,t,r1)
legend('误差y1',' 误差y2');
程序2
M 文件
function f=myfun(beta,x)
f=beta(1)+beta(2)*x(:,1)+beta(3)*x(:,2)+beta(4)*x(:,3)+beta(5)*x(:,4)+beta(6)*x(:,1).*x(:,1)+beta(7)*x(:,1).*x(:,2)+beta(8)*x(:,1).*x(:,3)+beta(9)*x(:,1).*x(:,4)+...
beta(10)*x(:,2).*x(:,2)+beta(11)*x(:,2).*x(:,3)+beta(12)*x(:,2).*x(:,
4)+beta(13)*x(:,3).*x(:,3)+beta(14)*x(:,3).*x(:,4)+beta(15)*x(:,4).*x(:,4);
end
function f=myfun(beta1,x)
f=beta1(1)+beta1(2)*x(:,1)+beta1(3)*x(:,2)+beta1(4)*x(:,3)+beta1(5)*x(:,4)+beta1(6)*x(:,1).*x(:,1)+beta1(7)*x(:,1).*x(:,2)+beta1(8)*x(:,1).*x(:,3)+beta1(9)*x(:,1).*x(:,4)+...
beta1(10)*x(:,2).*x(:,2)+beta1(11)*x(:,2).*x(:,3)+beta1(12)*x(:,2).*x(:,4)+beta1(13)*x(:,3).*x(:,3)+beta1(14)*x(:,3).*x(:,4)+beta1(15)*x(:,4).*x(:,4);
end
x=[x1,x2,x3,x4];
[beta,r1] = nlinfit(x,y1,'myfun',rand(1,15)-0.5)
[beta1,r2] = nlinfit(x,y2,'myfun',rand(1,15)-0.5)
t=1:50;
plot(t,r1,t,r2)
legend('误差y2',' 实际y1');
legend('误差y1',' 实际y2');
程序3
function main()
clc
clear all;
close all;
warning off;
InputNum=50;%输入的数据个数
TestNum=50;%测试的数据个数
FutureNum=2;%预测的数据个数
HiddenNum=6;%隐藏神经元个数
Il=4; %输入神经元个数
Ol=2; %输出神经元个数
x1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','B2:B51')'; x2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','C2:C51')'; x3=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','D2:D51')'; x4=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','E2:E51')'; y1=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','F2:F51')'; y2=xlsread('F:\建模题\新建 Microsoft Excel 工作表.xls','G2:G51')';
XX=[x1;x2;x3;x4];
YY=[y1;y2];
[In,minp,maxp,tn,mint,maxt]=premnmx(XX,YY);%对样本进行初始化 Out=tn;
%TestIn=In;
%TestOut=Out;
count=50000;%训练次数
rate=0.035;%学习速率
E0=0.65*10^(-3);%目标误差
P1=0.5*rand(HiddenNum,Il)-0.1;%输入层与隐含层之间权值
T1=0.5*rand(HiddenNum,1)-0.1;%输入层与隐含层之间阈值
P2=0.5*rand(Ol,HiddenNum)-0.1;%隐含层与输出层层之间权值 T2=0.5*rand(Ol,1)-0.1; %隐含层与输出层之间的阈值
ErrHistory=[];
for i=1:count
Mid=logsig(P1*In+repmat(T1,1,InputNum));%传递
SOut=P2*Mid+repmat(T2,1,InputNum);
E=Out-SOut;%误差
SSE=sumsqr(E);
EH=[];
EH=[EH SSE];
%调整权值和阈值
if SSE
Adjust2=E;
Adjust1=P2'*Adjust2.*Mid.*(1-Mid);
dP2=Adjust2*Mid';
dT2=Adjust2*ones(InputNum,1);
dP1=Adjust1*In';
dT1=Adjust1*ones(InputNum,1);
%根据调整量进行改正权值和阈值
P2=P2+rate*dP2;
T2=T2+rate*dT2;
P1=P1+rate*dP1;
T1=T1+rate*dT1;
end
Mid=logsig(P1*In+repmat(T1,1,TestNum));
SOut=P2*Mid+repmat(T2,1,TestNum);
a=postmnmx(SOut,mint,maxt);
x=1:50;
newk=a(1,:);
newh=a(2,:);
figure;
subplot(2,1,1);
plot(x,newk,'r-o',x,y1,'b--+');
subplot(2,1,2);
plot(x,newh,'r-o',x,y2,'b--+');
程序4
clc;
close all;
clear all;
% 原始数据
x1=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','B2:B51')';
x2=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','C2:C51')';
x3=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','D2:D51')';
x4=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','E2:E51')';
y1=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','F2:F51')';
y2=xlsread('F:\建模题\新建 Microsoft Excel 工作
表.xls','G2:G51')';
%输入数据矩阵
p=[x1;x2;x3;x4];
%目标数据矩阵
t=[y1;y2];
%利用mapminmax 函数对数据进行归一化
[pn,input_str]=mapminmax(p);
[tn,output_str]=mapminmax(t);
%建立BP 神经网络
net=newff(p,t,[8 12 8],{,'logsig','tansig','purelin'});%purelin(训练函数)logsig (学习函数)purelin (性能函数)
%10轮回显示一次结果
net.trainParam.show=10;
%学习速度为0.05
net.trainParam.lr=0.05;
%最大训练次数为5000次
net.trainParam.epochs=5000;
%均方误差
net.trainParam.goal=0.65*10^(-3);
%网络误差如果连续6次迭代都没有变化,训练将会自动终止
%为了让程序继续运行,用以下命令取消这条设置
net.divideFcn= '';
%开始训练,其中pn,tn 分别为输入输出样本
net=train(net,pn,tn);
%利用训练好的网络,基于原始数据对BP 网络仿真
an=sim(net,pn);
an
%利用mapminmax 函数把仿真得到的数据还原为原始的数量级 a=mapminmax('reverse',an,output_str);
x=1:50;
newy1=a(1,:);
newy2=a(2,:);
figure(2);
%绘制y1对比图
subplot(2,1,1);plot(x,newy1,'r-o',x,y1,'b--+'); legend('仿真y1',' 实际y1');
xlabel('序号');ylabel('y1值');
title('运用神经网络y1学习和测试对比图');
%绘制y2对比图
subplot(2,1,2);plot(x,newy2,'r-o',x,y2,'b--+'); legend('仿真y2',' 实际y2');
xlabel('序号');ylabel('y2值');
title('运用神经网络y2学习和测试对比图');
%测试
xnew=[x1;x2;x3;x4]
xnew=mapminmax(‘apply ’,xnew,input_str);
ynewn=sim(net,xnewn);
ynew=mapminmax(‘reverse ’,xnew,output_str);