BP神经网络拟合sin(x)函数

1、BP网络的函数逼近

    BP网络有很强的映射能力,主要用于模式识别和函数逼近。可以采用BP网络函数逼近的能力来求解数学式难以表达的函数,下面以逼近正弦函数为例。

   针对y=sin(k*x),k=1、3、5,建立BP神经网络对y在区间-2<=x<=2上进行逼近

2、代码实现

k=1;
x=-2:.05:2;
y=sin(k*x);
n=20;
net=newff(x,y,[n,1],{'tansig' 'purelin'},'trainlm');
y1=sim(net,x);
plot(x,y,'g-',x,y1,'r.');
xlabel('x')
ylabel('sin(kx)');
title('k=1时,BP网络逼近sin(kx)');
legend('要逼近的正旋曲线','BP网络逼近曲线');

3、结果呈现


分析结果可知,可知拟合效果不尽人意,想想为什么?

5、模型改善

     所建立的BP网络模型未经过训练导致输出曲线与正弦曲线相差很大,逼近功能微弱,下面对网络进行训练。设置BP神经网络模型的训练时间取2000,训练精度取0.001。

k=1;
x=-2:.05:2;
y=sin(k*x);
n=20;
net=newff(x,y,[n,1],{'tansig' 'purelin'},'trainlm');
y1=sim(net,x);
net.trainParam.epochs=2000;
net.trainParam.goal=0.001;
net=train(net,x,y);
y2=sim(net,x);
plot(x,y,'g-',x,y1,x,y2,'r.');
xlabel('x')
ylabel('sin(kx)');
title('k=1时,BP网络逼近sin(kx)效果');
legend('要逼近的正旋曲线','未训练的BP网络逼近曲线','训练后的BP网络逼近曲线');

6、改善结果


7、结语

     所以经过训练后的网络模型逼近效果非常好,对k=2,3,4,5......逼近效果也是不错的。有兴趣的还可以探讨训练函数trainlm与traingdm训练结果有什么区别。


猜你喜欢

转载自blog.csdn.net/x_dmword/article/details/80346966