蘇關東,李宮晟,張 鵬,張其星,邵 麒,張 瑛,全貞淳
(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面向對象程序設計在數據處理乃至科學計算中的優勢。
密立根油滴實驗; 靜態法; 面向對象; 程序設計; 實驗數據處理
密立根油滴實驗是近代物理史上具有重大意義的物理實驗之一,它在首次證明了電荷的不連續性的同時,進一步測定了基本電荷所帶電荷量e=1.60×10-16C[1],因而,它也成為了大學物理實驗課程中的經典實驗之一。
由于密立根油滴實驗的數據具有數據量大、處理過程復雜、計算繁瑣等特點,對于該實驗的數據處理一直是物理實驗的熱門話題。隨著編程技術的發展和普及,同時由于使用Excel等辦公軟件處理數據時操作相對繁瑣,人為因素引起誤差的概率較大,使用計算機編程處理實驗數據的優勢越來越明顯。Visual Basic[2-8],Visual C++[9],C語言[1],Matlab[10-12]編程語言在密立根油滴實驗數據處理中的應用均見報道,而關于Java這種近年來比較流行的編程語言在該物理實驗數據處理中的應用報道較少。
Java語言是一種面向對象的編程語言,具有跨平臺、高效優勢而在智能手機普及的年代風靡IT行業。由于它是一種完全面向對象的語言,符合人類對客觀世界的認知習慣,在科學計算、實驗數據處理方面也可大展身手,能夠極大地提高實驗數據處理效率。本文以密立根油滴實驗為例,編寫了處理實驗數據的程序,并通過與其他編程語言比較說明了Java語言在科學計算、數據處理上的優勢。
測元電荷量既可采用靜態平衡測量法,也可以采用動態非平衡測量法[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)

實驗中測量了在一定的平衡電壓下油滴下落相同距離所需的時間,選擇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-04
3 Java程序設計處理實驗數據的優勢
4 結 語