王艳萍,杨建宋
(杭州师范大学理学院,浙江杭州 310036)
VC++6.0与MATLAB联合编程实现物理实验数据智能处理
王艳萍,杨建宋*
(杭州师范大学理学院,浙江杭州 310036)
采用VC++6.0和MATLAB混合编程的方法,实现了物理实验数据处理系统的开发.实践表明二者联合编译能大大提高软件开发效率,缩短软件维护周期.
VC++6.0;MATLAB;混合编程;实验数据处理
MATLAB是由Mathworks公司推出的用于科学计算的软件,具有强大的矩阵计算和数据可视化处理能力,可以进行数值分析、信号处理、符号运算等多个领域的数学计算,也可以实现对图形图像的处理[1].不仅如此,MATLAB还具有与其他高级语言相似的编程特性[2].
VC++6.0是Microsoft公司开发的一种功能强大、行之有效的可视化编程工具,其友好的可视化界面方便用户开发Windows程序[3].但是,应用C++编写数据处理模块远没有MATLAB方便和简捷.MATLAB在数值分析和处理上是一流的,特别是在矩阵运算方面,其中许多复杂的数值计算在VC++中很难实现[4].当然,MATLAB也有它的不足.由于MATLAB程序是解释执行的,对程序只能解释一句执行一句,因此运行速度比较慢,在做循环运算、处理诸如遥感图像等信息量很大的图像时,问题就十分突出[4-5],而运行的高效率恰恰是C++程序的优势.另外MATLAB保存的M文件是源程序代码,安全保密性差,用户界面设计不如其他一些软件方便,对计算机底层的数据访问也不够灵活[6].通过VC++6.0调用MATLAB,实现VC++6.0与MATLAB混合编程,就可以很好地克服它们的弱点,实现速度和数据处理的双赢.VC++6.0负责开发可视化图形操作界面,并进行函数调用,MATLAB负责实现一些复杂的计算过程,二者联合编译生成软件系统.
实现在VC++6.0中调用MATLAB进行混合编程,有以下几种方法:通过COM组件调用MATLAB[4],采用MATLAB自带编译器mcc[7-8],用Matcom将MATLAB的M文件编译成C语言文件并嵌入VC[4],使用MATLABENGINE法[8-11]等.
MATLABENGINE方法实现起来较为简单,不要求连接整个MATLAB只需嵌入必要的MATLABENGINE库便可大大节省系统资源.文中系统即采用这种调用方法.
该系统在Windows95/98/2000等平台上,使用Visual C++6.0面向对象的程序设计语言设计.其主要功能体现在2个方面:
1)实现物理实验数据的手动输入,异常数据的判断和剔除,以不确定度传递公式进行不确定度的计算,按照误差理论和“四舍六入五成双”的数字修约法则进行数据的处理,实验结果的安全存储、自动评价与正常输出;
2)物理实验教师能浏览学生实验的原始数据,获取实验数据处理的结果.
系统采用基于对话框的应用程序框架,由一个主对话框和多个模态对话框组成,可分为3个模块(即子系统):主控子系统、学生实验数据处理子系统、教师实验数据查询子系统.系统采用ADO访问数据库技术.项目名称为PhyExperimentSys,打包后生成的安装程序名为PhyExperimentSys.exe.用户只需双击运行该程序即可使用物理实验数据处理系统.首先出现的界面如图1所示.点击“学生实验数据处理”按钮,将开始调用学生数据处理子系统,进入相应界面;点击“教师实验数据查询”,将开始调用教师实验数据查询子系统,进入相应界面;点击“退出系统”,将退出实验数据处理系统.
图1 系统启动界面Fig.1 The startup interface of the system
实验数据处理系统中的10个实验为大学物理实验,分为力学、电学、光学和热学4个部分[12].该文以力学部分的“物质密度测量实验”为例,说明实验数据处理模块的实现.
学生单击力学中的“物质密度测量”实验后便进入该实验的数据处理子模块.实验数据输入界面如图2所示.学生正确无误输入小钢球质量的2次测量数据和直径的5次测量数据后,单击“计算”命令按钮,由系统自动计算小钢球直径的平均值、直径的标准不确定度、小钢球质量的平均值、质量的标准不确定度、小钢球的密度和密度的标准不确定度.数据处理结果如图3所示.不确定度的计算特别是间接不确定度的计算在VC++中不易实现,但复杂的数值计算却是MATLAB的强项,此例中即是调用MATLAB来完成计算功能的.
以下是程序计算部分的一部分MATLAB函数源码(程序里出现的以符号“%”开始的文字说明皆为程序的注释):
在“物质密度测量”实验中需要测量小钢球直径5次、小钢球质量2次,共7个实验输入数据;计算并显示小钢球直径的平均值、直径的标准不确定度、小钢球质量的平均值、质量的标准不确定度、小钢球的密度和密度的标准不确定度,共6个实验输出数据.由此确定程序中需要7个输入变量,6个输出变量.程序设计思路如下:首先打开MATLAB引擎,创建6个mxArray型数据作为输出变量,创建7个mxArray型数据作为输入变量,并把7个输入变量写入MATLAB引擎工作空间.然后使用函数engEvalString向MATLAB发送命令字符串,完成计算功能.紧接着获取MATLAB引擎的输出结果,并将结果转换成double型.最后释放内存空间,关闭引擎.
VC++6.0中调用部分的程序源码见附录.
为测试实验数据处理系统的正确性,笔者以杭州师范大学物理系09级部分学生的实验数据作为测试用例数据(表1),将系统的数据处理结果与用手工方式计算的结果进行了比较。
按照物理实验中的密度计算公式以及有效数字和尾数“四舍六入五成双”的数字修约法则,用手工方式计算处理表1中的实验数据,结果见表2.
将两位学生的物质密度测量实验数据采用该系统进行处理,其结果见图4、图5所示.
表1 测试用例实验数据Tab.1 Examples for experimental data
表2 测试用例实验数据的手工计算结果Tab.2 The manual calculations results of examples for experimental data
比较表2与图4、图5所示结果,可以看出该系统对学生物质密度测量实验数据的处理结果是正确的.
其他实验数据处理模块的测试和物质密度实验数据处理模块的测试相同,此处不再一一给出.
由此表明,应用该系统处理物理实验数据的结果与按误差理论进行手工计算的实验结果一致,系统实验数据处理的正确性是可靠的.
物理实验数据处理系统目前处于试用阶段.试用该系统的学生普遍认为:该系统的界面设计友好、操作方便、数据处理正确且快速.同时,试用该系统的学生实验操作积极性普遍提高,实验教学效果较之以前有较大的改善.
开发物理实验数据处理系统的实践证明,利用MATLAB引擎可节省大量资源,应用程序整体性比较好,能最充分地利用MATLAB的功能,缩短软件的开发周期,为开发各种类型的数据处理系统提供了一种新的快速的方法.对要求较多复杂计算的数据处理系统,采用VC++与MATLAB联合编程更是得心应手.
[1]苏金明,阮沈勇.MATLAB实用教程[M].北京:电子工业出版社,2005.
[2]孙祥,徐流美,吴清.MATLAB7.0基础教程[M].北京:清华大学出版社,2005.
[3]王正军.Visual C++6.0程序设计从入门到精通[M].北京:人民邮电出版社,2006.
[4]景劼.在VC++中调用MATLAB混合编程的方法[J].四川兵工学报,2009(10):136-137.
[5]谢永华,傅德胜.VC++和Matlab混合编程在图像处理中的应用[J].计算机应用与软件,2005,22(2):120-121.
[6]叶鹏飞.MATLAB与VC++混合编程在系统辨识中的应用[J].电脑开发与应用,2009,22(1):66-68.
[7]刘蓉.Matlab与VC混合编程技术与实现[J].电脑编程技巧与维护,2010(8):15-16.
[8]姜长元.VC与MATLAB混合编程的方法及实现[J].电脑知识与技术,2004(14):22-25.
[9]张浩宇,张旭,赵敏.基于虚拟仪器技术的玻璃量器检定系统设计[J].山东师范大学学报:自然科学版,2009,24(3):19-21.
[10]闻斌,崔建昆.Matlab与Visual C++的联合应用[J].计算机与现代化,2004(2):14-16.
[11]孙亚萍,张慧熙.基于LABVIEW的自动热测试系统设计[J].杭州师范大学学报:自然科学版,2009,8(6):463-466.
[12]李寿松,苏平,王晓耕,等.物理实验教程[M].北京:高等教育出版社,1998.
附录:
以下是VC++6.0中调用部分的部分程序源码(以符号“//”开始的文字说明为程序的注释).
The Realization of Intelligent Processing about the Physical Experiment Data by VC++6.0and MATLAB Mixed Programming
WANG Yan-ping,YANG Jian-song
(College of Science,Hangzhou Normal University,Hangzhou 310036,China)
This paper used VC++6.0and MATLAB mixed programming method to realize the physics experiment data processing system development.The practice in the developing indicates that the combination of VC++6.0and MATLAB language can increase the developing efficiency of software greatly,and shorten the maintenance period.
VC++6.0;MATLAB;mixed programming;experiment data processing
TP312
A
1674-232X(2011)03-0268-07
10.3969/j.issn.1674-232X.2011.03.016
2010-11-17
王艳萍(1983—),女,江苏徐州人,科学教育专业硕士研究生,主要从事信息技术与科学教学整合研究.
*通信作者:杨建宋(1957—),男,浙江诸暨人,教授,主要从事物理教学和凝聚态物理研究.E-mail:88972208@163.com