蘇關東,李宮晟,張 鵬,張其星,邵 麒,張 瑛,全貞淳
(1.中國石油大學(北京), a.石油工程學院; b.理學院; c.機械與儲運工程學院, 北京 102249;2.華北電力大學 電氣與電子工程學院, 北京 102206)
Java面向?qū)ο蟪绦蛟O計在密立根油滴實驗中的應用
蘇關東1a,李宮晟1a,張 鵬1b,張其星1a,邵 麒1c,張 瑛1b,全貞淳2
(1.中國石油大學(北京), a.石油工程學院; b.理學院; c.機械與儲運工程學院, 北京 102249;2.華北電力大學 電氣與電子工程學院, 北京 102206)
在電子科技發(fā)達的時代背景下,為提高實驗數(shù)據(jù)處理的效率,實現(xiàn)物理實驗數(shù)據(jù)處理的自動化,以密立根油滴實驗為例,運用高效率、結構化、模塊化的編程語言,采取面向?qū)ο蟮木幊碳夹g,用Java編程語言編寫了適用于密立根油滴實驗數(shù)據(jù)處理的程序,計算出元電荷量為1.619×10-19C,和公認值相比,相對誤差為1.038%,并通過比較Visual Basic、Matlab、C語言、Java在物理實驗數(shù)據(jù)處理中的優(yōu)劣勢,說明了Java面向?qū)ο蟪绦蛟O計在數(shù)據(jù)處理乃至科學計算中的優(yōu)勢。
密立根油滴實驗; 靜態(tài)法; 面向?qū)ο? 程序設計; 實驗數(shù)據(jù)處理
密立根油滴實驗是近代物理史上具有重大意義的物理實驗之一,它在首次證明了電荷的不連續(xù)性的同時,進一步測定了基本電荷所帶電荷量e=1.60×10-16C[1],因而,它也成為了大學物理實驗課程中的經(jīng)典實驗之一。
由于密立根油滴實驗的數(shù)據(jù)具有數(shù)據(jù)量大、處理過程復雜、計算繁瑣等特點,對于該實驗的數(shù)據(jù)處理一直是物理實驗的熱門話題。隨著編程技術的發(fā)展和普及,同時由于使用Excel等辦公軟件處理數(shù)據(jù)時操作相對繁瑣,人為因素引起誤差的概率較大,使用計算機編程處理實驗數(shù)據(jù)的優(yōu)勢越來越明顯。Visual Basic[2-8],Visual C++[9],C語言[1],Matlab[10-12]編程語言在密立根油滴實驗數(shù)據(jù)處理中的應用均見報道,而關于Java這種近年來比較流行的編程語言在該物理實驗數(shù)據(jù)處理中的應用報道較少。
Java語言是一種面向?qū)ο蟮木幊陶Z言,具有跨平臺、高效優(yōu)勢而在智能手機普及的年代風靡IT行業(yè)。由于它是一種完全面向?qū)ο蟮恼Z言,符合人類對客觀世界的認知習慣,在科學計算、實驗數(shù)據(jù)處理方面也可大展身手,能夠極大地提高實驗數(shù)據(jù)處理效率。本文以密立根油滴實驗為例,編寫了處理實驗數(shù)據(jù)的程序,并通過與其他編程語言比較說明了Java語言在科學計算、數(shù)據(jù)處理上的優(yōu)勢。
測元電荷量既可采用靜態(tài)平衡測量法,也可以采用動態(tài)非平衡測量法[13]。本文采用靜態(tài)法測量電子電荷量,實驗中電荷受力分析如圖1所示,設帶電油滴在兩塊相距為d的水平電極板中運動,在豎直方向上受3個力的作用:空氣阻力,重力,電場力,分別用f,mg,Eq表示。
圖1 實驗中電荷受力示意圖[13]
對于空氣阻力,根據(jù)斯托克斯公式,在無限深廣的連續(xù)介質(zhì)中有[13]:
f=6πηvr
(1)
式中:η、v、r分別為介質(zhì)的黏滯阻力系數(shù)(即黏度)、小球下落速度、小球半徑。
由于帶電油滴半徑約在10-8m及10-7m之間,而在標準狀態(tài)下,空氣分子的平均自由程為69 μm[14],即不滿足連續(xù)介質(zhì)的理想條件,故需要對黏滯阻力系數(shù)進行修正:
(2)
式中:修正系數(shù)b=8 225 μm·Pa,p為標準大氣壓強(Pa)。
對于重力,由于油滴在下落過程中受到表面張力的作用,油滴呈球狀,故重力可表示為:
(3)
式中,ρo、r分別為油滴的密度和半徑。
對于電場力,由于在平行電極板的中間(非邊緣區(qū)),可看作勻強電場,故電場力可表示為:
(4)
式中,U、d分別為兩電極板之間的電壓及距離。
當電極板未加電壓時,電場力Eq=0,使小球在兩電極板間自由下落。小球在下落的過程中,起初小球的速度較小,mg>f,小球加速運動。隨著小球速度的增大,空氣阻力增大,合力減小,加速度減小,最終豎直方向上合力為0,金屬球在豎直方向做勻速直線運動。此時根據(jù)牛頓定律有:
mg=f=6πη0vr
(5)
當電極板加上電壓時,電場力Eq≠0,調(diào)節(jié)兩電極板間的電壓,使小球在重力和電場力的作用下達到平衡狀態(tài),此時根據(jù)牛頓定律有:
mg=Eq
(6)
聯(lián)立式(3)~(6)得:
(7)
將式(2)代入式(7),得[13]:
(8)
式(8)即為靜態(tài)法測量油滴帶電量表達式。
基本電荷量在本實驗中的測量值為:
(9)
相對誤差表達式為:
(10)
實驗中測量了在一定的平衡電壓下油滴下落相同距離所需的時間,選擇5滴適合的油滴,每滴油滴測5次,實驗測得的數(shù)據(jù)見表1。表2為計算油滴帶電量所需的物理參數(shù)。由表1、表2可見,實驗涉及的數(shù)據(jù)量比較大,數(shù)據(jù)的處理過程也較復雜。本文采用Java語言編程計算式(8)~(10),源代碼如下:
表1 實驗數(shù)據(jù)記錄
表2 物理參數(shù)
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(){//油滴所帶電荷數(shù) 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組時間數(shù)據(jù) ,{16.38,17.41,17.85,17.32,17.79} //第2組時間數(shù)據(jù) ,{18.40,18.25,18.73,17.91,18.40} //第3組時間數(shù)據(jù) ,{17.32,18.03,17.40,17.81,18.38} //第4組時間數(shù)據(jù) ,{32.37,35.64,36.06,39.51,38.71} //第5組時間數(shù)據(jù) }; double[][] U={{244,244,244,244,244} //第1組電壓數(shù)據(jù) ,{102,102,102,103,103}//第2組電壓數(shù)據(jù) ,{132,131,131,131,131}//第3組電壓數(shù)據(jù) ,{383,384,383,386,385}//第4組電壓數(shù)據(jù) ,{111,111,112,111,110}//第5組電壓數(shù)據(jù) }; 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集成開發(fā)環(huán)境中運行結果如圖2所示。由圖2可知,采用Java語言編程處理密立根油滴實驗的數(shù)據(jù),計算得出電子的電荷量為1.619×10-19C,和公認值相比,相對誤差為1.038%(取4位有效數(shù)字)。 圖2 運行結果 Java語言具有完全面向?qū)ο?、跨平臺、動態(tài)性等特點,程序結構靈活而嚴謹。 Java完全面向?qū)ο蟮奶攸c,面向?qū)ο蟮姆椒◤娬{(diào)以現(xiàn)實世界中的事物(對象)為問題的中心解決問題,相對于面向過程的方法更加貼近于世界的本質(zhì)[15],描述問題更完整、更準確、更自然,這和物理學認識世界本質(zhì)的過程是一致的,因而十分適合用于物理建模,解決物理問題,特別是解決涉及對象較多,對象間關系復雜的問題。 Java提供的數(shù)學類(Math)以及大量的實用工具類及接口,如:隨機數(shù)生成器、數(shù)組類(Array)、向量類(Vector)、比較器接口(Comparator)等,為實驗數(shù)據(jù)處理乃至科學技術提供了很好的底層基礎。 此外,Java語言所具有的跨平臺特性使得生成的*.jar文件可以在安卓手機上使用,更是方便實驗工作者在智能手機普及的年代隨時隨地進行實驗數(shù)據(jù)的處理,高效、方便、快捷。 相對于visual basic(VB)語言(結構化、模塊化、面向?qū)ο?、以事件?qū)動為機制的可視化程序設計語言),Java不僅具有結構更加嚴謹、邏輯更加清晰的優(yōu)勢,運行效率高、速度快、可讀性強、面向?qū)ο蟪潭雀撸欢襐B程序設計依賴于可視化界面,而Java可以根據(jù)解決問題的實際需要而選擇是否需要設計可視化界面(GUI),相對 VB 而言更加靈活。 相對于C++(C++是在C語言的基礎上開發(fā)的一種面向?qū)ο缶幊陶Z言,支持多種編程范式——面向?qū)ο缶幊獭⒎盒途幊毯瓦^程化編程),從計算機語言的發(fā)展史來看[16],Java是從C++語言發(fā)展而來的,它吸收了C++語言的各種優(yōu)點,摒棄了C++中難以理解的多繼承、指針等概念,以更簡單更精煉的方式實現(xiàn)了C++語言的所有功能。 相對于Matlab和C語言,Java語言面向?qū)ο蟮某绦蛟O計方法是它們所不具有的;同時,Matlab等數(shù)學軟件雖然功能強大,但由于其價格昂貴、入門門檻也比較高,普及程度比較低[17];C語言雖然本身運行效率高,但是通過dos窗口進行人機交互,一旦數(shù)據(jù)輸入錯誤,極有可能要從頭開始重新輸入,而Java語言則可以在eclipse開發(fā)集成環(huán)境,通過修改main方法中的代碼進行交互而不影響類中的其他方法,修改方便簡單安全。 綜上所述,用Java語言編程來處理實驗數(shù)據(jù)不僅具有面向過程程序設計結構化、模塊化的優(yōu)勢,而且可以在面向?qū)ο蟮某绦蛟O計方法上和物理建模的過程完美對接,應用前景廣闊。 通過密立根油滴實驗,用Java語言編程處理數(shù)據(jù),以靜態(tài)法快速測出了電子的電荷量為1.619×10-19C,和公認值相比,相對誤差為1.038%,得到滿意的結果。 在實驗數(shù)據(jù)處理方面,本實驗采用Java語言編程來處理數(shù)據(jù),并通過與C語言,Visual Basic語言,C++語言以及Matlab語言的對比,闡述了Java語言程序設計在物理實驗數(shù)據(jù)處理中的可行性、優(yōu)越性。總之,Java面向?qū)ο蟪绦蛟O計不失為一種處理數(shù)據(jù)的有效方法,具有廣闊的應用前景。 [1] 張 鑫,郭 勝,李金玉.C語言在密立根實驗數(shù)據(jù)處理中的應用[J].大學物理實驗,2015,28(1): 63-65. [2] 張麗娜.基于VB的密立根油滴實驗數(shù)據(jù)分析與處理[J].科技創(chuàng)新導報,2015(13): 23-24. [3] 楊會靜,李 童.用VB編寫密立根油滴實驗數(shù)據(jù)處理軟件[J].唐山師范學院學報,2003,25(5): 28-30. [4] 段 蘋.計算機編程在密立根油滴實驗中的應用[J].大學物理實驗,2014,27(1): 70-73. [5] 羅春梅.密立根油滴實驗數(shù)據(jù)的計算機處理[J].物理與工程,2008,18(6):28-29. [6] 李卓凡.密立根油滴實驗數(shù)據(jù)處理系統(tǒng)設計[J].大學物理實驗,2010,23(3): 69-71. [7] 周海濤,董有爾,楊保東.智能密立根油滴實驗系統(tǒng)的設計與開發(fā)[J].實驗技術與管理,2007,24(12): 51-56. [8] 周海濤,唐美玲.密立根油滴實驗數(shù)據(jù)分析軟件的設計[J].實驗室科學,2009(3): 73-75. [9] 蔡旭紅,盧 勁,宋振華.用VC++語言實現(xiàn)密立根油滴實驗數(shù)據(jù)處理系統(tǒng)[J].汕頭大學學報(自然科學版),2006,21(2): 77-80. [10] 劉 偉,郭立新,李江挺.基于Matlab的密立根油滴實驗數(shù)據(jù)處理軟件[J].西安郵電學院學報,2011,16(S2): 85-87. [11] 向前蘭.淺談基于Matlab的密立根油滴實驗[J].科技經(jīng)濟導刊,2016(15): 176. [12] 曹 彪,鄒文輝,代 偉.Matlab在密立根油滴實驗數(shù)據(jù)處理中的應用[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版.北京:電子工業(yè)出版社,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 北京市“人才培養(yǎng)共建項目-教育教學項目-教學改革立項-新形勢下本科人才培養(yǎng)模式改革與教學質(zhì)量監(jiān)控 研究”子課題:中國石油大學( 北京)2012重大教改項目(2012zdjgxm001). 蘇關東(1995-),男,廣東湛江人,本科生。 Tel.:18801322091; E-mail: su_gd@qq.com 張 鵬(1963-),女,黑龍江嫩江人,博士,教授,研究方向為凝聚態(tài)物理。 E-mail:zhangpeng1998@126.com O 4-39 :A 1006-7167(2017)07-0135-043 Java程序設計處理實驗數(shù)據(jù)的優(yōu)勢
4 結 語