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