用matlab编BP神经网络预测程序 下载本文

建立BP神经网络预测模型

在进行BP网络预测模型设计时,主要考虑网络的层 数和每层中神经元的个数。

神经网络通过计算机程序实现对非线性映射逼近,在 众多语言中,MATLAB语言允许数学形式的语言编写程序, 比其他语言更接近我们书写计算公式的思维方式。因此编 程效率高,易学易懂。 年份 (万人) 人 口总数 1985 1986 1987 1988 1989 1990 105851 107507 109300 111026 112704 114333

1991 1992 1993 1994 1995 1996 1997 1998 115823 117171 118517 119850 121121 122389 123626 124761 [3]1999 2000 2001 2002 2003 2004 2005 125786 126743 127627 128453 129227 129988 130756 。建立两层神经网络,由于输入样本为 3 维的输入向

量,因此,输入层一共有 3 个神经元,根据 Kolmogorov[2]定理,网络应该为 3 × 7 × 3 的结构。 其中,threshold 设定了网络输入向量的取值范围[0,1],第一层神经元数为 3,传函类型为

‘LOGSIG’,第二层神经元数为 7,传函类型为‘PURELIN’,采用动量梯度下降反向传播算法对 网络进行训练。中间层的神经元个数是很难确定的,而这又在很大程度上影响着网络的预测 性能。当网络的预测误差最小时,网络中间层的神经元数目就是最佳值。进行对比后,可见 中间层神经元个数为 8 时,网络的预测性能最好。训练结果如图 1 所示,网络的预报误差如

采用单隐层的 BP 网络进行预测

10

0

Performance is 9.89455e-005, Goal is 0.0001

0.035 10

-1

T raining-B lue G oal-B la c k

10

-2

0.03

0.025 0.02 0.015 0.01 0.005 0 -0.005 0 50 100 155

Epochs

150

10

-3

10

-4

-0.01 1 1.2 1.4 1.6 1.8 2.4 2.6 2.8 3

2 2.2

图 1 训练结果(中间层神经元数目:8)

年份图 2 网络的预报误差(中间层神经元数目:8)

(万人) 总人口数2006 2007 2008 2009 140800 142500 146600 151000 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 155800 159600 162100 163300 163800 164000 164100 164100 164100 164100 164100

,每行语句前都有一个符号“>>”,此即命令提示符。在此符号后(也只能 在此符号后)输入各种语句并按 Enter 键,方可被 MATLAB 接收和执行。执行的结果通常 就直接显示在语句下方,如图 1.2 所示。

不同类型语句用不同颜色区分。在默认情况下,输入的命令、函数、表达式以及计算 结果等采用黑色字体,字符串采用赭红色,if、for 等关键词采用蓝色,注释语句用绿色。

因为 MATLAB 是一个多功能集成软件,不同的功能需要使用不同的文件格式去表现, 所以 MATLAB 的文件也有多种格式。最基本的是 M 文件、数据文件和图形文件,除此之 外,还有 MEX 文件、模型文件和仿真文件等。下面分别予以说明。

(1) M 文件,以.m 为扩展名,所以称为 M 文件。M 文件是由一系列 MATLAB 语句组 成的文件,包括命令文件和函数文件两类,命令文件类似于其他高级语言中的主程序或主 函数,而函数文件则类似于子程序或被调函数。

MATLAB 众多工具箱中的(函数)文件基本上是 M 函数文件。因为它们是由 ASCII 码表 示的文件,所以可由任一文字处理软件编辑后以文本格式存放。

(2) 数据文件,以.mat 为扩展名,所以又称 MAT 文件。在讨论工作空间窗口时已经涉 及到 MAT 文件。显然,数据文件保存了 MATLAB 工作空间窗口中变量的数据。

(3) 图形文件,以.fig 为扩展名。主要由 MATLAB 的绘图命令产生,当然也可用 File 菜单中的 New 命令建立。

(4) MEX 文件,以.mex 或.dll 为扩展名,所以称 MEX 文件。MEX 实际是由 MATLAB Executable 缩写而成的,由此可见,MEX 文件是 MATLAB 的可执行文件。

(5) 模型和仿真文件,模型文件以.mdl 为扩展名,由 Simulink 仿真工具箱在建立各种 仿真模型时产生。仿真文件以.s 为扩展名。

键盘输入语句(input) 其调用格式有

(1) x = input('prompt'):显示提示字符串'prompt',要求用户键盘输入 x 的值。(2) x = input('prompt','s'):显示提示字符串'prompt',要求用户键盘输入字符型变量 x 的 值,不至于将输入的数字看成是数值型数据。 6.3.2 屏幕输出语句(disp)

屏幕输出最简单的方法是直接写出欲输出的变量或数组名,后面不加分号。此外,可 以采用 disp 语句,其调用格式为 disp(x)。

6.3.3 M 数据文件的存储/加载(save / load)

1. save 语句 其调用格式有

(1) save:将所有工作空间变量存储在名为 MATLAB.mat 的文件中。 (2) save filename:将所有工作空间变量存储在名为 filename 的文件中。 (3) save filename X Y Z:将工作空间的指定变量 X、Y、Z 存于名为 filename 的文件中。 2. load 语句 其调用格式有

(1) load:如果 MATLAB.mat 文件存在,则加载 MATLAB.mat 文件中存储的所有变量 到工作空间;否则返回一错误信息。

(2) load filename:如果 filename 文件存在,则加载 filename 文件中存储的所有变量到 工作空间;否则返回一错误信息。

(3) load filename X Y Z:如果 filename 文件及存储的变量 X、Y、Z 存在,则加载 filename 文件中存储的变量 X、Y、Z 到工作空间;否则返回一错误信息。

在 MATLAB 中,主要的二维绘图函数如下:

(1) plot:x 轴和 y 轴均为线性刻度。 (2) loglog:x 轴和 y 轴均为对数刻度。(3) semilogx:x 轴为对数刻度,y 轴为线性刻度。

(4) semilogy:x 轴为线性刻度,y 轴为对数刻度。 (5) plotyy: 绘制双纵坐标图形。 其中 plot 是最基本的二维绘图函数,其调用格式有 ① plot(Y):若 Y 为实向量,则以该向量元素的下标为横坐标,以 Y 的各元素值为纵 坐标,绘制二维曲线;若 Y 为复数向量,则等效于 plot(real(Y),imag(Y));若 Y 为实矩阵, 则按列绘制每列元素值相对其下标的二维曲线,曲线的条数等于 Y 的列数;若 Y 为复数矩 阵,则按列分别以元素实部和虚部为横、纵坐标绘制多条二维曲线。

② plot(X,Y):若 X、Y 为长度相等的向量,则绘制以 X 和 Y 为横、纵坐标的二维曲 线;若 X 为向量,Y 是有一维与 Y 同维的矩阵,则以 X 为横坐标绘制出多条不同色彩的曲 线,曲线的条数与 Y 的另一维相同;若 X、Y 为同维矩阵,则绘制以 X 和 Y 对应的列元素 为横、纵坐标的多条二维曲线,曲线的条数与矩阵的列数相同。

③ plot(X1,Y1,X2,Y2,…Xn,Yn):其中的每一对参数 Xi 和 Yi(i=1,2,...,n)的取值和所绘图 形与②中相同。

④ plot(X1,Y1,LineSpec,...):以 LineSpec 指定的属性,绘制所有 Xn、Yn 对应的曲线。 ⑤ plot(...,'PropertyName',PropertyValue,...):对于由 plot 绘制的所有曲线,按照设置的 属性值进行绘制,PropertyName 为属性名,PropertyValue 为对应的属性值。

⑥ h = plot(...):调用函数 plot 时,同时返回每条曲线的图形句柄 h(列向量)。 ① 在工作空间查看各个变量,或在命令窗口用 who, whos( 注意大小写) 查看各个 变量。

② 在工作空间双击变量,弹出 Array Editor 窗口(数组编辑器窗口),即可修改变量。 ③ 使用 save 命令把工作空间的全部变量保存为 my_var.mat 文件。

>>save my_var.mat

④ 输入下列命令:

>>clear all %清除工作空间的所有变量

观察工作空间的变量是否被清空。使用 load 命令把刚才保存的变量载入工作空间。

>>load my_var.mat

⑤ 清除命令窗口命令:

>>clc