案例背景
在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模。在这种情况下,可以建立BP神经网络表达这些非线性系统。该方法把未知系统看成一个黑箱,首先用系统输入输出数据训练神经网络,是网络能够表达函数,然后就可以用训练好的BP神经网络预测系统输出。
举例拟合的非线性函数为
z=X^2+y^2
函数图像为:
clc,clear
x=-5:0.01:5;
[x,y]=meshgrid(x);
z=x.^2+y.^2;
mesh(x,y,z)
利用MATLAB自带的工具箱实现,贴一下代码:
x1=unifrnd(-5,5,1,2000);
x2=unifrnd(-5,5,1,2000);
y=x1.^2+x2.^2;
input=[x1',x2'];
output=y';
k=rand(1,2000);
[m,n]=sort(k);
input_train=input(n(1:1900),:)';
output_train=output(n(1:1900),:)';
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000),:)';
%训练数据归一化
[inputn,inputs]=mapminmax(input_train);
[outputn,outputs]=mapminmax(output_train);
%bp神经网络构建
net=newff(inputn,outputn,[5,5]);
%网络配置参数
net.;
net.;
net.;
%train
net=train(net,inputn,outputn);
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputs);
%bp神经网络预测输出
an=sim(net,inputn_test);
%输出数据反归一化
BPoutput=mapminmax('reverse',an,outputs);
figure(1)
plot(BPoutput,'r-*')
legend('预测输出')
hold on
plot(output_test,'g--')
legend('实际')
结果:
在迭代次数十次左右就已经达到了精度要求;
可以看出拟合结果非常好,预测输出和实际值基本重合。