MATLAB论文_李虹,宁煜茂,胡啓晏

(广东润星科技有限公司 523000)

摘要:利用MATLAB函数语言进行编程,开发出直观的、符合个性化的GUI用户界面,即操作方便又可以有效的预测。通过借助MATLAB软件可直观的对实验数据进行分析,为磨削力的预测提供了一个简单可行的方法,从而提高了预测效果。

关键词:MATLAB;用户界面;磨削力

一、磨削力预测的研究现状

在磨削加工过程中,磨削力评价材料科磨削性的一个重要指标。磨削力的大小是随磨削时间的增长而增长,这将会使磨削质量指标的变化,不能保证加工要求[1]。在以往传统的磨削力预测中,我们多是根据多元回归分析来建立经验公式,进行繁琐的运算,造成巨大的工作量,而且对于准确度也难以保证。

二、MATLAB对于磨削力预测的应用

现在运用MATLAB实现的人工神经网络已渐成趋势,主要用于模式识别与分类、数据压缩、预报和函数逼近等[ 2]。MATLAB提供了功能强大的模块集和神经网络工具箱,其强大的计算数据处理能力和出色的图形处理功能,在理论研究和工程应用方面得到了成熟的运用。通过MATLAB这款软件进行数据的处理,通过此界面可以对磨削参数数据的输入进行预测,并可以和实际数据进行对比,查看误差,对于磨削力的预测是一种有效和方便的方法。

三、GUI(面向用户的界面)的设计

3.1图形用户界面设计GUI

GUI是图形用户界面的意思,像很多高级编程语言一样,Matlab也有图形用户界面开发环境,随着计算机技术的飞速发展,人与计算机的通信方式也发生的很大的变化,现在绝大多数的应用程序都是在图形化用户界面下运行的[3]。利用GUI Design中直观的控件,可以自己合理规划自己想要的用户界面,而且它占用资源少、使用方便、简化了工作的性能,方便了用户。

3.2界面设计要求

1.首先控制训练样本和预测样本的导入,寻找需要的EXCEL数据的位置。

2.建立BP网络模型的主要参数,输入层的传递函数、输出层传递函数、训练函数、隐含层神经元个数,通过控件的下拉菜单鼠标选择用户所需的函数类型。

3.设定训练网络参数配置,有迭代次数,训练目标、学习率、显示间隔、限制时间,参数可通过键盘输入数字,由于需要合理的参数在callback函数中我们加入了可输入区间限制提醒。

4.开始训练网络,界面上会显示主程序所要求的切向和法向磨削力的预测图、输出误差图和预测平均误差执行结果

5.通过Slider ActiveX Control控件调节在Numberic LED ActiveX Control显示数字,调节砂轮速度、进给速度、磨削深度的参数。让用户通过自己设的输入参数,再加载最佳的网络模型进行预测,会在LED显示预测出输出值。

总体设计可分为六大部分:数据的导入、网络模型参数设置、训练网络参数设置、图形的显示、预测运算结果的显示和辅助功能。

3.3 界面设计

3.3.1GUI用户界面的结构布局

1.Panel控件:单层网络模型参数设置,网络训练参数设置

2.Push Button控件:输入训练,输入预测,训练网络,保存网络,加载网络,进行预测,退出。

3.Pop-up menu控件:输入-隐层传递函数,隐层-输出传递函数,训练函数,隐层神经元个数。

4.Edit txt控件:迭代次数,训练目标,学习率,显示间隔,时间限制,预测切向磨削力平均误差,预测法向磨削力平均误差。

5. ActiveX Control(Numberic LED ActiveX Control,Slider ActiveX Control):砂轮速度,进给速度,磨削深度,预测切向磨削力,预测法向磨削力。

6. Axes:切向磨削力预测图,法向磨削力预测图,切向磨削力输出误差图,法向磨削力输出误差图。

3.3.2 程序设计

1.训练数据和测试数据的输入[3]

变量:【输入训练】pushbutton1;【输入预测】pushbutton2

程序:%训练数据输入

if get(handles.pushbutton1,'value')==1 %使用回调函数,激活【输入训练】按钮

[filename,pathname,filterindex]=uigetfile({'*.xls';},'select data-file');%读取Excel文件

str=[pathname filename];%将路径及文件名赋值到结构变量str

data=xlsread(str);%读入结构变量str,并传递到data

end

whether1=1;%给定判断是否输入训练样本

input_train=data(:,1:3)';%读取训练样本的输入参数

output_train=data(:,4:5)';%读取训练样本的输出参数

%预测数据输入

if get(handles.pushbutton2,'value')==1%

[filename,pathname,filterindex]=uigetfile({'*.xls';},'select data-file');

str=[pathname filename];

date=xlsread(str);

end

whether2=2;

input_test=date(:,1:3)';

output_test=date(:,4:5)';

2.网络训练参数设置

变量:【迭代次数】epochs;【训练目标】goal;【学习率】lr;【显示间隔】show;【限制时间】time

程序:

Epochs=str2num(get(handles.epochs,'string'));%读取迭代次数参数

Show=str2num(get(handles.show,'string'));

Goal=str2num(get(handles.goal,'string'));

Lr=str2num(get(handles.lr,'string'));

Time=str2num(get(handles.time,'string'));

3.训练网络

变量:【训练网络】pushbutton3

程序:tap=1;%设置网络训练标志

cla(handles.axes1); %清空仿真预测图

cla(handles.axes3); %清空误差温度百分比

cla(handles.axes4); %清空温度误差图

[pn,minp,maxp,tn,mint,maxt]=premnmx(input_train,output_train);%训练样本归一化

net=newff(minmax(pn),[Nsize(output_train,2)],{fcn_hidden,fcn_output},fcn_learn);

net.trainParam.epochs=Epochs;%迭代次数

net.trainParam.show=Show;%显示间隔

net.trainParam.lr=Lr;%学习率

net.trainParam.goal=Goal;%训练精度

net.trainParam.time=Time;%限定时间

net=train(net,pn,tn);%进行训练,并生成网络

p3n=tramnmx(input_test,minp,maxp);%预测样本进行归一化范围到[-1,1]

a3n=sim(net,p3n);%运用生成的网络对预测样本进行预测

BPoutput=postmnmx(a3n,mint,maxt);%输出结果反归一化,显示预测结果

4.输出磨削力预测图

变量:【切向磨削力预测图】axes1

程序:axes(handles.axes1);

plot(BPoutput(1,:))

plot(BPoutput(1,:),':or')

hold on

plot(output_test(1,:),'-* ');

ylabel('切向磨削力','fontsize',12);

xlabel('样本','fontsize',12);

legend('预测值','期望值');

grid on

5.输出磨削力误差图

变量:【切向磨削力输出误差图】axes3

程序:axes(handles.axes3);%切向磨削力输出误差图

plot((output_test(1,:)- BPoutput(1,:)),':*r');%描绘出切向磨削力误差线框

grid on%打x、y轴框格线

6.保存网络模型

变量:【保存网络】pushbutton4

程序:[filename,pathname]=uiputfile('*.mat','save data as');%保存*.mat文件

file=strcat(pathname,filename);%将路径及文件名赋值到结构变量file

save(file,'net');%保存训练好的网络模型

7.载入模型

变量:【加载模型】pushbutton5

程序:tap = 2;%判断是否有新的网络输入

[filename,pathname,filterindex]=uigetfile('*.mat','select net-file');%读取*.mat文件

file=strcat(pathname,filename);%将路径及文件名赋值到结构变量file

load(file,'net');%载入已经训练好的模型网络

8.预测单个样本

变量:【预测样本】pushbutton6

程序:[pn,minp,maxp,tn,mint,maxt]=premnmx(input_train,output_train);%训练样本归一化

val1=get(handles.activex1,’value’);%输入调整好的砂轮速度参数

val2=get(handles.activex3,’value’);%输入调整好的工件速度参数

val3=get(handles.activex4,’value’);%输入调整好的切削深度参数

input_test=[val1,val2,val3;];%将输入的磨削参数转置成矩阵

p3n=tramnmx(input_test,minp,maxp);%预测样本集输入数据归一化

a3n=sim(net,p3n);%输出结果反归一化,显示预测结果

Sigleoutput=postmnmx(a3n,mint,maxt);%BP网络预测输出

p=Sigleoutput;%赋值

Ployval(p,0);% 拟合后的函数计算拟合值用的

Set(handles.activesx7,’value’,ans);%将单个样本预测输出到LED

3.4 辅助功能设计

在网络训练参数设置中,我们需要输入合适的区间范围,避免出现输入的错误,所以我们可以编程输入范围限制,进行人性化的提醒。例如:训练目标、学习率。还设计了退出键,使更人性化[4]。

1.变量【迭代次数】epochs

程序:global Epochs

epochs=get(handles.epochs,'string');

Epochs=str2num(epochs);

flag=~isequal(Epochs,round(Epochs));

if Epochs<=0 || flag

warndlg('最大训练次数必须是正整数','Input Error');

else

if Epochs<=50

warndlg('训练次数太小','Input Warning');

end

end

2.变量:【训练目标】goal

程序:global Goal

goal=get(handles.goal,'string');

Goal=str2num(goal);

if Goal <0

warndlg('必须是正数','Input Error');

else

if Goal >1

warndlg('训练目标设置太大','Input Warning');

elseif Goal <1e-6

warndlg('训练目标设置太大','Input Warning');

end

end

2.变量:【学习率】Lr

程序:global Lr

lr=get(handles.lr,'string');

Lr=str2num(lr);

if Lr<0 || Lr>1

warndlg('建议在0-1之间','Input Warning');

end

3.变量:【退出】pushbutton8

程序:ss=questdlg('你真的要退出吗?','系统提示!','不,我还想看看!','是的,我要退出!','是的,我要退出!');

switch ss

case '是的,我要退出!'

delete(handles.figure1);

end

3.5 ActiveX Control的使用

利用Slider ActiveX Control 滑动条来调节Numberic LED ActiveX Control的砂轮速度、进给速度、磨削深度的参数。例如:砂轮速度。

变量:【砂轮速度】activex1

程序:function activex11_MouseDown(hObject,eventdata,handles)

global flag

flag = 1;

function activex1_MouseMove(hObject,eventdata,handles)

global flag

if flag

val = get(hObject,'value');

set(handles.activex10,'value',val);

end

function activex1_MouseUp(hObject,eventdata,handles)

global flag

flag = 0;

3.6界面设计生成

四、总结与展望

在通过人工神经网络预测磨削力,改变了传统的预测方式,利用MATLAB的GUI界面设计,设计出方便操作的预测磨削力界面,通过控件完成输入、参数选择、训练网络,保存和单个样本预测等命令这种可操作界面操作方便及人性化,实现对磨削力的实时预测。当然,这个设计还是有不断改进的空间,我们还可以将它更优化,做到误差范围更小,精度更高。因此,在后继的工作中,应进一步完善、加强其功能,使之更实用化、科学化。

参考文献:

[1]黄伟,谢红梅,BP神经网络在其磨削力序列预测中的应用。博士论文,2000,北京航空航天大学

[2]高 隽. 人工神经网络原理及仿真实例[M]. 机械工业出版社,2007:43-54.

[3]陈垚光,毛涛涛,王正林. 精通MATLAB GUI设计[M]. 北京:电子工业出版社,2011.

[4]韩力群. 人工神经网络理论、设计及应用[M]. 北京:化学工业出版社,2007:47-66.

论文作者:李虹,宁煜茂,胡啓晏

论文发表刊物:《河南电力》2018年4期

论文发表时间:2018/8/20

标签:;  ;  ;  ;  ;  ;  ;  ;  

MATLAB论文_李虹,宁煜茂,胡啓晏
下载Doc文档

猜你喜欢