Java面向对象程序设计在密立根油滴实验中的应用
2017-08-16苏关东李宫晟张其星全贞淳
苏关东,李宫晟,张 鹏,张其星,邵 麒,张 瑛,全贞淳
(1.中国石油大学(北京), a.石油工程学院; b.理学院; c.机械与储运工程学院, 北京 102249;2.华北电力大学 电气与电子工程学院, 北京 102206)
Java面向对象程序设计在密立根油滴实验中的应用
苏关东1a,李宫晟1a,张 鹏1b,张其星1a,邵 麒1c,张 瑛1b,全贞淳2
(1.中国石油大学(北京), a.石油工程学院; b.理学院; c.机械与储运工程学院, 北京 102249;2.华北电力大学 电气与电子工程学院, 北京 102206)
在电子科技发达的时代背景下,为提高实验数据处理的效率,实现物理实验数据处理的自动化,以密立根油滴实验为例,运用高效率、结构化、模块化的编程语言,采取面向对象的编程技术,用Java编程语言编写了适用于密立根油滴实验数据处理的程序,计算出元电荷量为1.619×10-19C,和公认值相比,相对误差为1.038%,并通过比较Visual Basic、Matlab、C语言、Java在物理实验数据处理中的优劣势,说明了Java面向对象程序设计在数据处理乃至科学计算中的优势。
密立根油滴实验; 静态法; 面向对象; 程序设计; 实验数据处理
0 引 言
密立根油滴实验是近代物理史上具有重大意义的物理实验之一,它在首次证明了电荷的不连续性的同时,进一步测定了基本电荷所带电荷量e=1.60×10-16C[1],因而,它也成为了大学物理实验课程中的经典实验之一。
由于密立根油滴实验的数据具有数据量大、处理过程复杂、计算繁琐等特点,对于该实验的数据处理一直是物理实验的热门话题。随着编程技术的发展和普及,同时由于使用Excel等办公软件处理数据时操作相对繁琐,人为因素引起误差的概率较大,使用计算机编程处理实验数据的优势越来越明显。Visual Basic[2-8],Visual C++[9],C语言[1],Matlab[10-12]编程语言在密立根油滴实验数据处理中的应用均见报道,而关于Java这种近年来比较流行的编程语言在该物理实验数据处理中的应用报道较少。
Java语言是一种面向对象的编程语言,具有跨平台、高效优势而在智能手机普及的年代风靡IT行业。由于它是一种完全面向对象的语言,符合人类对客观世界的认知习惯,在科学计算、实验数据处理方面也可大展身手,能够极大地提高实验数据处理效率。本文以密立根油滴实验为例,编写了处理实验数据的程序,并通过与其他编程语言比较说明了Java语言在科学计算、数据处理上的优势。
1 密立根油滴实验原理简介
测元电荷量既可采用静态平衡测量法,也可以采用动态非平衡测量法[13]。本文采用静态法测量电子电荷量,实验中电荷受力分析如图1所示,设带电油滴在两块相距为d的水平电极板中运动,在竖直方向上受3个力的作用:空气阻力,重力,电场力,分别用f,mg,Eq表示。
图1 实验中电荷受力示意图[13]
对于空气阻力,根据斯托克斯公式,在无限深广的连续介质中有[13]:
f=6πηvr
(1)
式中:η、v、r分别为介质的黏滞阻力系数(即黏度)、小球下落速度、小球半径。
由于带电油滴半径约在10-8m及10-7m之间,而在标准状态下,空气分子的平均自由程为69 μm[14],即不满足连续介质的理想条件,故需要对黏滞阻力系数进行修正:
(2)
式中:修正系数b=8 225 μm·Pa,p为标准大气压强(Pa)。
对于重力,由于油滴在下落过程中受到表面张力的作用,油滴呈球状,故重力可表示为:
(3)
式中,ρo、r分别为油滴的密度和半径。
对于电场力,由于在平行电极板的中间(非边缘区),可看作匀强电场,故电场力可表示为:
(4)
式中,U、d分别为两电极板之间的电压及距离。
当电极板未加电压时,电场力Eq=0,使小球在两电极板间自由下落。小球在下落的过程中,起初小球的速度较小,mg>f,小球加速运动。随着小球速度的增大,空气阻力增大,合力减小,加速度减小,最终竖直方向上合力为0,金属球在竖直方向做匀速直线运动。此时根据牛顿定律有:
mg=f=6πη0vr
(5)
当电极板加上电压时,电场力Eq≠0,调节两电极板间的电压,使小球在重力和电场力的作用下达到平衡状态,此时根据牛顿定律有:
mg=Eq
(6)
联立式(3)~(6)得:
(7)
将式(2)代入式(7),得[13]:
(8)
式(8)即为静态法测量油滴带电量表达式。
基本电荷量在本实验中的测量值为:
(9)
相对误差表达式为:
(10)
2 实验数据的记录及其Java编程处理
实验中测量了在一定的平衡电压下油滴下落相同距离所需的时间,选择5滴适合的油滴,每滴油滴测5次,实验测得的数据见表1。表2为计算油滴带电量所需的物理参数。由表1、表2可见,实验涉及的数据量比较大,数据的处理过程也较复杂。本文采用Java语言编程计算式(8)~(10),源代码如下:
表1 实验数据记录
表2 物理参数
public class MilOilDrop {
private double t[];//时间5组
private double U[];//电压5组
final private double e=1.6021892*Math.pow(10,-19);
public MilOilDrop(double[] a,double[] b){//构造方法
t=a;
U=b;
}
public double avrgv(){//单个油滴平均速度
double s=0;
for(int i=0;i s=s+t[i]; } return (0.001/s*t.length); } public double avrgU(){//平均电压 double s=0; for(int i=0;i s=s+t[i]; } return (s/U.length); } public double r(){//油滴半径 return (Math.sqrt(9*1.83*Math.pow(10,-5)*this.avrgv()/2/981/9.8)); } public double q(){//油滴带电量 double k=0; k=18*5*Math.pow(10,-3)*3.1415*Math.pow(1.83*Math.pow(10,-5),1.5)/Math.sqrt(2*981*9.8); return (k/this.avrgU())*Math.pow(this.avrgv(),1.5)/Math.pow(1+6.17*Math.pow(10,-6)/76/this.r(),1.5); } public int eNum(){//油滴所带电荷数 double eN=this.q()/this.e; return (int) Math.round(eN); } public double myE(){//e的实验测量值 return this.q()/this.eNum(); } final public double uncertainty(double averageE){//相对不确定度 return (averageE-this.e)/this.e; } public static void main(String[] args) { double[][] t={{20.26,20.41,21.06,20.45,21.06} //第1组时间数据 ,{16.38,17.41,17.85,17.32,17.79} //第2组时间数据 ,{18.40,18.25,18.73,17.91,18.40} //第3组时间数据 ,{17.32,18.03,17.40,17.81,18.38} //第4组时间数据 ,{32.37,35.64,36.06,39.51,38.71} //第5组时间数据 }; double[][] U={{244,244,244,244,244} //第1组电压数据 ,{102,102,102,103,103}//第2组电压数据 ,{132,131,131,131,131}//第3组电压数据 ,{383,384,383,386,385}//第4组电压数据 ,{111,111,112,111,110}//第5组电压数据 }; double[] ele = {0,0,0,0,0} ; double s=0; for(int i=0;i ele[i]=new MilOilDrop(t[i],U[i]).myE(); s=s+ele[i]; } System.out.println("实验测得电子的电荷量为:"+"
"+s/ele.length); System.out.println("相对不确定度为:"+"
"+new MilOilDrop(t[0],U[0]).uncertainty(s/ele.length)*100+'%'); } } 在eclipse集成开发环境中运行结果如图2所示。由图2可知,采用Java语言编程处理密立根油滴实验的数据,计算得出电子的电荷量为1.619×10-19C,和公认值相比,相对误差为1.038%(取4位有效数字)。 图2 运行结果 Java语言具有完全面向对象、跨平台、动态性等特点,程序结构灵活而严谨。 Java完全面向对象的特点,面向对象的方法强调以现实世界中的事物(对象)为问题的中心解决问题,相对于面向过程的方法更加贴近于世界的本质[15],描述问题更完整、更准确、更自然,这和物理学认识世界本质的过程是一致的,因而十分适合用于物理建模,解决物理问题,特别是解决涉及对象较多,对象间关系复杂的问题。 Java提供的数学类(Math)以及大量的实用工具类及接口,如:随机数生成器、数组类(Array)、向量类(Vector)、比较器接口(Comparator)等,为实验数据处理乃至科学技术提供了很好的底层基础。 此外,Java语言所具有的跨平台特性使得生成的*.jar文件可以在安卓手机上使用,更是方便实验工作者在智能手机普及的年代随时随地进行实验数据的处理,高效、方便、快捷。 相对于visual basic(VB)语言(结构化、模块化、面向对象、以事件驱动为机制的可视化程序设计语言),Java不仅具有结构更加严谨、逻辑更加清晰的优势,运行效率高、速度快、可读性强、面向对象程度高;而且VB程序设计依赖于可视化界面,而Java可以根据解决问题的实际需要而选择是否需要设计可视化界面(GUI),相对 VB 而言更加灵活。 相对于C++(C++是在C语言的基础上开发的一种面向对象编程语言,支持多种编程范式——面向对象编程、泛型编程和过程化编程),从计算机语言的发展史来看[16],Java是从C++语言发展而来的,它吸收了C++语言的各种优点,摒弃了C++中难以理解的多继承、指针等概念,以更简单更精炼的方式实现了C++语言的所有功能。 相对于Matlab和C语言,Java语言面向对象的程序设计方法是它们所不具有的;同时,Matlab等数学软件虽然功能强大,但由于其价格昂贵、入门门槛也比较高,普及程度比较低[17];C语言虽然本身运行效率高,但是通过dos窗口进行人机交互,一旦数据输入错误,极有可能要从头开始重新输入,而Java语言则可以在eclipse开发集成环境,通过修改main方法中的代码进行交互而不影响类中的其他方法,修改方便简单安全。 综上所述,用Java语言编程来处理实验数据不仅具有面向过程程序设计结构化、模块化的优势,而且可以在面向对象的程序设计方法上和物理建模的过程完美对接,应用前景广阔。 通过密立根油滴实验,用Java语言编程处理数据,以静态法快速测出了电子的电荷量为1.619×10-19C,和公认值相比,相对误差为1.038%,得到满意的结果。 在实验数据处理方面,本实验采用Java语言编程来处理数据,并通过与C语言,Visual Basic语言,C++语言以及Matlab语言的对比,阐述了Java语言程序设计在物理实验数据处理中的可行性、优越性。总之,Java面向对象程序设计不失为一种处理数据的有效方法,具有广阔的应用前景。 [1] 张 鑫,郭 胜,李金玉.C语言在密立根实验数据处理中的应用[J].大学物理实验,2015,28(1): 63-65. [2] 张丽娜.基于VB的密立根油滴实验数据分析与处理[J].科技创新导报,2015(13): 23-24. [3] 杨会静,李 童.用VB编写密立根油滴实验数据处理软件[J].唐山师范学院学报,2003,25(5): 28-30. [4] 段 苹.计算机编程在密立根油滴实验中的应用[J].大学物理实验,2014,27(1): 70-73. [5] 罗春梅.密立根油滴实验数据的计算机处理[J].物理与工程,2008,18(6):28-29. [6] 李卓凡.密立根油滴实验数据处理系统设计[J].大学物理实验,2010,23(3): 69-71. [7] 周海涛,董有尔,杨保东.智能密立根油滴实验系统的设计与开发[J].实验技术与管理,2007,24(12): 51-56. [8] 周海涛,唐美玲.密立根油滴实验数据分析软件的设计[J].实验室科学,2009(3): 73-75. [9] 蔡旭红,卢 劲,宋振华.用VC++语言实现密立根油滴实验数据处理系统[J].汕头大学学报(自然科学版),2006,21(2): 77-80. [10] 刘 伟,郭立新,李江挺.基于Matlab的密立根油滴实验数据处理软件[J].西安邮电学院学报,2011,16(S2): 85-87. [11] 向前兰.浅谈基于Matlab的密立根油滴实验[J].科技经济导刊,2016(15): 176. [12] 曹 彪,邹文辉,代 伟.Matlab在密立根油滴实验数据处理中的应用[J].西华师范大学学报(自然科学版),2015,36(3): 317-319. [13] 孙 为,唐军杰,王爱军.大学物理实验[M].东营:中国石油大学出版社,2007:208-213. [14] 张三慧.大学物理学[M].北京:清华大学出版社,2009:11. [15] 沈显君.C++语言程序设计[M].4版.北京:清华大学出版社,2006:4-5. [16] 叶核亚.Java程序设计实用教程[M].4版.北京:电子工业出版社,2013:1-4. [17] 廖帮全.Excel作图和二分法结合解超越方程的一种方法[J].大学物理实验,2015,28(2):109-112. Application of the Java Object-oriented Programming in Millikan Oil Drop Experiment SUGuandong1a,LIGongsheng1a,ZHANGPeng1b,ZHANGQixing1a,SHAOQi1c,ZHANGYing1b,QUANZhenchun2 (1a.College of Petroleum Engineering; 1b.College of Science; 1c.College of Mechanical and Transportation Engineering,China University of Petroleum,Beijing 102249,China; 2.College of Electrical and Electronic Engineering,North China Electric Power University,Beijing 102206,China) In the era of well-developed electronic technology,in order to improve the efficiency of experiment data processing,realize the automation of data processing in physical experiment,this paper takes Millikan oil drop experiment as the carrier,uses efficient,structured and modular programming language and object-oriented programming technology,a Java language program is written to apply to the Millikan oil drop experiment.The elementary charge is calculated as 1.619×10-19C and the relative error is only 1.038%.Through comparisons with Visual Basic,Matlab,C language,Java has advantages in data processing of physical experiment.This paper further expounds the superiority of the Java programming language in data processing of physical experiment and scientific calculation. Millikan oil drop experiment; static method; object-oriented; programming; experimental data processing 2016-10-25 北京市“人才培养共建项目-教育教学项目-教学改革立项-新形势下本科人才培养模式改革与教学质量监控 研究”子课题:中国石油大学( 北京)2012重大教改项目(2012zdjgxm001). 苏关东(1995-),男,广东湛江人,本科生。 Tel.:18801322091; E-mail: su_gd@qq.com 张 鹏(1963-),女,黑龙江嫩江人,博士,教授,研究方向为凝聚态物理。 E-mail:zhangpeng1998@126.com O 4-39 :A 1006-7167(2017)07-0135-043 Java程序设计处理实验数据的优势
4 结 语