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