使用MATLAB构建BP神经网络模型进行应力预测

本文介绍使用MATLAB构建BP神经网络模型进行应力预测的步骤,包括数据预处理、神经网络创建、训练和验证。代码示例展示了如何利用样本数据训练神经网络,并使用验证数据评估其预测性能。

代码示例

clear
%% 
%归一化阶段
%读取应力样本数据
p1=xlsread('C:\Users\Administrator\Desktop\样本数据汇总\铁素体\大范围数据\总处理.xlsx','sheet1');
%p3=p1';
%[p1,p2]=mapminmax(p1,0,1);
for i=1:9
    p3(:,i)=(p1(:,i)-60)/2500;
end
p3(:,10)=p1(:,11);  %矩阵定义的事,
t1=xlsread('C:\Users\Administrator\Desktop\样本数据汇总\铁素体\大范围数据\总处理.xlsx','sheet2');


t2(:,1)=(t1(:,2)-100)/400;
t2(:,2)=(t1(:,3)-t1(:,4)-20)/280;
t2(:,3)=(t1(:,4)-20)/480;
p4=p3';
t4=t2';
a1=0;

for i8=[100,500,1000,2000,5000]
    a1=a1+1;
    for i7=1:i8
        p(:,i7)=p4(:,i7);
        t(:,i7)=t4(:,i7);
    end
%end
%%
%创建net
%创建BP网络和定义训练函数及参数
    a2=0;
for i5=[6,10,16,26,35]
    a2=a2+1;
    i10=round(i5*.618);
    net=newff(minmax(p),[i10,i5,3],{'logsig','logsig','purelin'},'trainscg');
    net.trainParam.lr=0.1;                                         %学习速率
    net.trainParam.mc=0.9;                                         %动量因子
    net.trainParam.epochs=10000;                                    %最大的训练次数
    net.trainParam.goal=1.0e-4;                                      %训练要求精度
    net.trainParam.show = 50;
    net=init(net);                                                 %初始化神经网络
    %训练神经网络 
    [net,tr]=train(net,p,t);   %[神经网络的名称(随意命名),展示训练记录按钮]
    a14= strcat('F:\神经网络算法\训练好的神经网络撒双层4(汇总)\net', num2str(1),'.mat');  %strcat将字符型变量连接起来
    save(a14,'net');      %把训练好的神经网络保存起来(save文件位置+名称,'要保存的神经网络结构名称')
    %%
    %神经网络的验证环节
    %B1=[395;418;463;526;609;699;797;895;957;0.00494;0.34578]'; %奥氏体数据
    %B1=[269;280;301;330.5;365;403.8;440.4;470.2;483.8;0.00267;0.167]';%铁素体数据
   
    %低应变奥氏体数据
    %B1=zeros();
    %B2=zeros();
    
       B1=xlsread('C:\Users\Administrator\Desktop\神经网络结构确定\铁素体50组验证\excel1.xls','sheet1');
       for i6=1:50
       B2=zeros();
       for i2=1:9
           B2(1,i2)=B1(i6,i2);
       end
       B2(1,10)=B1(i6,11);
       
       for i=1:9
           B2(1,i)=(B2(1,i)-60)/2500;
       end
       a12=sim(net,B2');  %[训练出来的神经网络算法名称,要预测的变量]
       %a13(1,i1-4)=a12(1,1)*15+45;
       %a13(2,i1-4)=a12(2,1)*130+180;
       %a13(4,i1-4)=a12(4,1)*320+30;
       %a13(3,i1-4)=a12(3,1)*160+40+a13(4,i1-4);
       %a13(1+4*(i3-5),i1)=55;
       %a13(2+4*(i3-5),i1)=a12(1,1)*400+100;
       %a13(4+4*(i3-5),i1)=a12(3,1)*480+20;
       %a13(3+4*(i3-5),i1)=a12(2,1)*380+20+a13(4,i1);
       a13(1,(a1-1)*250+50*(a2-1)+i6)=55;
       a13(2,(a1-1)*250+50*(a2-1)+i6)=a12(1,1)*400+100;
       a13(4,(a1-1)*250+50*(a2-1)+i6)=a12(3,1)*480+20;
       a13(3,(a1-1)*250+50*(a2-1)+i6)=a12(2,1)*280+20+a13(4,(a1-1)*250+50*(a2-1)+i6);
       end
end
end

%end
xlswrite('C:\zuhe1.xls',a13','sheet1','A1');

代码解释

  1. 第一行代码 'clear' 的作用是清除当前工作区的所有变量。
  2. 第三行代码是注释,表示下面的代码是进行归一化阶段。
  3. 第五行代码通过xlsread函数读取Excel文件中的样本数据,并将读取的数据存储在变量p1中。
  4. 第六行代码将p1中的数据进行归一化处理,将数据映射到0到1之间。
  5. 第七行代码使用循环将p1中的数据进行归一化处理,将数据缩放到指定的范围内。
  6. 第八行代码将p1中的应力数据(第11列)存储在变量p3的最后一列中。
  7. 第九行代码使用xlsread函数读取Excel文件中的样本数据,并将读取的数据存储在变量t1中。
  8. 第十一行代码将t1中的数据进行归一化处理,将数据映射到0到1之间,并存储在变量t2中。
  9. 第十三行代码将p3和t2分别转置,存储在变量p4和t4中。
  10. 第十四行代码将变量a1初始化为0。
  11. 第十五行代码使用循环,循环次数为变量i8的值(100, 500, 1000, 2000, 5000)。
  12. 第十六行代码将变量a1加1。
  13. 第十七行代码使用循环,循环次数为1到i8。
  14. 第十八行代码将p4和t4的部分数据存储在变量p和t中。
  15. 第二十一行代码创建一个新的BP神经网络,输入层节点数为minmax(p)(p的最小值和最大值),隐藏层节点数为[i10,i5,3],激活函数分别为'logsig'、'logsig'和'purelin'。
  16. 第二十二行代码设置神经网络的训练参数,包括学习速率、动量因子、最大训练次数和训练精度要求。
  17. 第二十三行代码对神经网络进行初始化。
  18. 第二十六行代码使用train函数对神经网络进行训练,并将训练记录存储在变量tr中。
  19. 第二十七行代码将训练好的神经网络保存在指定位置和名称的.mat文件中。
  20. 第三十一行代码创建一个空的矩阵a13。
  21. 第三十二行代码使用xlsread函数读取Excel文件中的验证数据,并将读取的数据存储在变量B1中。
  22. 第三十三行代码使用循环,循环次数为1到50。
  23. 第三十四行代码创建一个空的矩阵B2。
  24. 第三五行代码将B1中的部分数据存储在变量B2中。
  25. 第三十六行代码将B2中的应力数据进行归一化处理。
  26. 第三七行代码使用sim函数对训练好的神经网络进行验证,并将结果存储在变量a12中。
  27. 第四十行代码将验证结果反归一化,并存储在变量a13中。
  28. 第四十一行代码将a13的转置写入Excel文件中。

总结

代码示例展示了如何利用MATLAB构建BP神经网络模型进行应力预测。通过数据预处理、神经网络创建、训练和验证等步骤,可以建立一个能够预测应力的模型。需要注意的是,实际应用中需要根据具体需求调整神经网络参数,以获得最佳预测效果。


原文地址: https://www.cveoy.top/t/topic/qvcr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录