📄 bp_approximation_nolinear_fun.m
字号:
%设计一个BP网络用于对非线性函数逼近.对过改变该函数的参数及BP网络隐层神经元数目来观察训练时间及误差的变化情况
%***********************************
%逼近的非线性函数为正弦函数其频率参数可以调节
%建立非线性函数信号
p=[-1:.05:1];
k=1; %设k=1;
t=sin(k*pi*p); %正弦信号
figure(1);
plot(p,t,'-');
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
%**************************************
%newff函数建立BP网络,隐单元神经元数目n可以改变,先取为10,神经元的传递函数分别为tansig purelin
%BP网络反传函数为trainlm
net=newff(minmax(p),[10,1],{'tansig' 'purelin'},'trainlm'); %{}中一定要空格
%**************************************
%对建立的网络进行训练前看看利用sim()函数仿真结果
y1=sim(net,p); %对网络进行仿真
figure(2);
plot(p,t,'-',p,y1,'--'); %将原来信号与通过网络后信号画在一个图中.
title('没有训练的网络输出与原函数比较仿真结果');
xlabel('时间');
ylabel('仿真输出-- 原函数-');
%未经训练的仿真输出效果很差与原函数相差很大,而且每次运行后结果不一样
%***************************************
%对网络进行训练
%使用train对网络训练前,先设置训练参数,训练时间50个单位时间.训练目标误差小于0.01其他默认
net.trainParam.epochs=50;
net.trainParam.goat=0.01;
net=train(net,p,t);
%****************************************
%对网络进行测试
%先对训练好后的网络用sim进行仿真
y2=sim(net,p);
figure(3);
plot(p,t,'-',p,y1,'--',p,y2,'+')
title('网络训练后的仿真结果');
xlabel('时间');
ylabel('仿真输出');
%仿真结果表明函数逼近很好
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -