⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp_nn.m

📁 不用工具箱的BP神经网络曲线拟合
💻 M
字号:
x1=0:0.1:pi/2;
x2=pi/2:0.1:pi;
x3=pi:0.1:1.5*pi;
x4=1.5*pi:0.1:2*pi;
y1=x1-pi/2+1;
y2=sin(x2);
y3=2-2/pi*x3;
y4=sin(x4);
x=[x1,x2,x3,x4];
y=[y1,y2,y3,y4];
 ma=max(x);
 mi=min(x);
 len=length(x);

 %归一化
  % for i=1:len
 %  x(i)=(x(i)-mi)/(ma-mi);
 % end

totalerr = 0.001;%总误差
totalcount =10000;%最大运算次数
hidenum = 5;%隐含层节点数
w1=rand(hidenum,1)';
b1=rand(hidenum,1)';
w2=rand(hidenum,1)';
b2=0.5;
error =1;
alpha = 0.05;%学习速率
for i=1:totalcount %最大训练次数
    for j=1:len
        net1=logsig(x(j)*w1'+b1');%%计算第一个输出 
        net2(j)=w2*net1+b2;%%计算第二个输出
        e(j)=y(j)-net2(j);%%计算误差
        %%修正权值
        s2=-2*e(j);
        s1=diag((1-net1).*net1)*w2'*s2;
        w2=w2-alpha*s2*net1';
        b2=b2-alpha*s2;
        b1=b1-alpha*s1';
        w1=w1-alpha*s1'*x(j);
        e=0+0.5*e(j)*e(j);        
    end
    error = e;
    arr(i) =e;
    if(error<totalerr)%退出循环条件
        break;
    end
end


%输出权值和阈值
 i
 w1
 w2
 b1
 b2
 e
%    反归一化
   %for i=1:len
  % x(i)=x(i)*(ma-mi)+mi;
  %end
%绘图输出
figure;
plot(arr);%显示误差
%绘出拟合曲线
figure;
plot(x,y,'r');%实际值
hold on
plot(x,net2,'*b')
hold on%拟合值

 
%测试 
 x1=0.1:0.1:2*pi;
ma = max(x1);%寻找最大值
mi = min(x1);%寻找最小值
 


 
 len = length(x1);
 for i=1:len
        net3=logsig(x1(i)*w1'+b1');%%计算第一个输出 
        net4(i)=w2*net3+b2;%%计算第二个输出
end

figure
plot(x,y,'r')
hold on
plot(x1,net4,'*b')

        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -