劉雅嫻
(武漢東湖學(xué)院電子信息工程學(xué)院 湖北·武漢 430212)
早在1786年,蘇格蘭工程師威廉·普萊費(fèi)爾(William Playfair)因堅(jiān)信圖表比數(shù)據(jù)更有說(shuō)服力,在《商業(yè)與政治圖解集》中給出了線圖、柱圖、餅圖和面積圖,從此開(kāi)創(chuàng)了圖表的新紀(jì)元。
隨著大數(shù)據(jù)時(shí)代的到來(lái),數(shù)據(jù)分析應(yīng)用于生活的方方面面。數(shù)據(jù)分析的可視化研究更是進(jìn)入了熱點(diǎn)研究課題。大量數(shù)據(jù)不僅可以用如2D、3D圖形,直觀、簡(jiǎn)潔、實(shí)時(shí)呈現(xiàn)出來(lái),而且能從可視化中獲取更多有用的信息,成為人們關(guān)注的焦點(diǎn)。
數(shù)據(jù)分析的可視化工具,非常豐富,編程語(yǔ)言也非常多,如C++,Java。而Python語(yǔ)言作為一種解釋性的、交互式的、面向?qū)ο蟮木幊陶Z(yǔ)言,因其具有簡(jiǎn)單、優(yōu)雅的語(yǔ)法,同時(shí)具有開(kāi)源、免費(fèi)使用、豐富的第三方庫(kù)等特性,越來(lái)越受到學(xué)者們的關(guān)注與使用。
光學(xué)現(xiàn)象,看得見(jiàn)摸得著,而對(duì)于描述光學(xué)現(xiàn)象的方程,具有晦澀難懂的特性。因此,如何將描述光學(xué)現(xiàn)象的方程的解,用圖形表現(xiàn)出來(lái),對(duì)理解光學(xué)現(xiàn)象,顯得尤為重要。2019年,Aydogan Ozcan首次提出一種全新的光學(xué)——AI系統(tǒng),即全光衍射深度神經(jīng)網(wǎng)絡(luò),依靠光的傳播,實(shí)現(xiàn)幾乎零能耗、零延遲的深度學(xué)習(xí),它是光學(xué)工具、3D打印和神經(jīng)網(wǎng)絡(luò)的結(jié)合。基于光學(xué)衍射的研究逐漸成為研究熱點(diǎn)。仿真技術(shù)與手段,克服了光學(xué)器材的昂貴及實(shí)驗(yàn)過(guò)程不易操作、實(shí)驗(yàn)結(jié)果不易獲得等特性,將光學(xué)過(guò)程和現(xiàn)象用二維、三維或動(dòng)態(tài)圖像很好地呈現(xiàn)出來(lái)。
無(wú)論是光學(xué)仿真,還是光學(xué)仿真平臺(tái)的搭建,目前用的最多的軟件是MATLAB,用simulink搭建平臺(tái),組建模型,并對(duì)模型實(shí)施仿真。而對(duì)于使用Python進(jìn)行光學(xué)仿真,學(xué)者Vasudevan Lakshminarayanan在Understanding Optics with Python中對(duì)光學(xué)現(xiàn)象進(jìn)行了詳盡的闡述。本文對(duì)夫瑯禾費(fèi)單縫、雙縫衍射的強(qiáng)度分布圖形以及隨著單縫寬度的變化,引起的單縫衍射圖形的變化,用Python做了仿真。
目前為止,可視化軟件很多,如熟知的Matlab、Mathemetica、Excel等,也有比較多的商業(yè)化的可視化軟件,如:Datawrapper,Tableau Public,Smartbi,Chart.js等。
自1989年P(guān)ython語(yǔ)言由荷蘭工程師Guido van Rossum設(shè)計(jì)并開(kāi)發(fā)以來(lái),逐漸成為主流程序設(shè)計(jì)語(yǔ)言之一。在TIOBE編程語(yǔ)言排行榜2020年最新版名列第三。Python又被稱(chēng)為膠水語(yǔ)言,能夠很輕松地使用C/C++、Java等其他語(yǔ)言的各種模塊接口,這使Python語(yǔ)言用途更為廣泛。
Python具有強(qiáng)大的可視化能力,具有眾多可視化庫(kù),如2D及3D可視化庫(kù)Matplotlib、seaborn和pandas等,交互信息可視化庫(kù) Bokeh、Plotly和 Pyecharts等,地圖可視化庫(kù) folium、basemap、Geoplotlib、Mapbox、Pyecharts的Map和Geo 等等。
Matplotlib是Python的面向?qū)ο蟮睦L圖庫(kù),通過(guò)pyplot模塊提供了一整套和MATLAB類(lèi)似的繪圖函數(shù)集,可以進(jìn)行靜態(tài)、動(dòng)畫(huà)和交互式可視化。也可以很方便的將它作為繪圖控件,嵌入到GUI應(yīng)用程序中。Matplotlib附帶了幾個(gè)附加工具包,包括3D繪圖mplot3d??梢詽M足對(duì)2D、3D、動(dòng)畫(huà)的要求。
使用pyplot繪圖的一般過(guò)程為:
生成或讀入數(shù)據(jù)-〉折線圖、散點(diǎn)圖、柱狀圖、餅狀圖、雷達(dá)圖或三維曲線和曲面-〉設(shè)置坐標(biāo)軸標(biāo)簽、坐標(biāo)軸刻度、標(biāo)題等圖形屬性-〉顯示或保存繪圖結(jié)果。
Numpy是Python的一個(gè)擴(kuò)展庫(kù),支持?jǐn)?shù)組與矩陣運(yùn)算,也為數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。通常和SciPy(Scientific Python)和Matplotlib(繪圖庫(kù))一起用于科學(xué)計(jì)算及可視化,能替代Matlab,很好解決科學(xué)繪圖的問(wèn)題。
光的衍射是指可見(jiàn)光在傳播過(guò)程中,如果遇到障礙物或小孔,原本直線傳播的光將偏離直線傳播而繞到障礙物后面?zhèn)鞑ィ诮邮掌辽系玫矫靼迪嚅g的條紋。光的衍射和干涉一起證明了光具有波動(dòng)性。因此,光的衍射是波動(dòng)光學(xué)中的重要的一個(gè)現(xiàn)象。一般分為夫瑯禾費(fèi)衍射和菲涅爾衍射,而夫瑯禾費(fèi)衍射又分為狹縫衍射和圓孔衍射。本文以夫瑯禾費(fèi)單縫、雙縫衍射為例,使用Python開(kāi)展仿真研究。
夫瑯禾費(fèi)單縫衍射原理圖如圖1所示。平行入射光垂直入射到中間有一個(gè)窄縫的衍射屏上,通過(guò)透鏡后,折射到像屏上。單縫寬度為b,衍射角為,入射光波長(zhǎng)為。根據(jù)波動(dòng)理論,相鄰波帶的點(diǎn)發(fā)出的次波到達(dá) P點(diǎn)的光程差,當(dāng)時(shí),在像屏上得到明暗相間的圖像,即為夫瑯禾費(fèi)單縫衍射條紋。特別的,衍射角時(shí),中央明紋就在像屏的中心。
圖1:夫瑯禾費(fèi)單縫衍射原理圖
為了得到單縫衍射像屏上的衍射光強(qiáng)分布,根據(jù)波動(dòng)理論,設(shè)單縫上某點(diǎn)發(fā)出的點(diǎn)光源到達(dá)P點(diǎn)的場(chǎng)強(qiáng)為相鄰點(diǎn)平行光源到達(dá)P點(diǎn)的場(chǎng)強(qiáng)和為:
夫瑯禾費(fèi)雙縫衍射原理圖如圖2所示??p寬為a,b為雙縫之間的寬度,縫距為衍射角,入射光波長(zhǎng)為。根據(jù)波動(dòng)理論,
圖3:夫瑯禾費(fèi)雙縫衍射原理圖
首先引入第三方庫(kù)文件
import matplotlib.pyplot as plt
import numpy as np
定義單縫衍射函數(shù) single_slit_diffraction_intensity(slit_width,lamda,X)
定義雙縫衍射函數(shù)double_slit_diffraction_intensity(slit_width,lamda,X,d)
圖3:?jiǎn)慰p衍射光強(qiáng)分布仿真圖b=2.5×10-4m
圖4:?jiǎn)慰p衍射光強(qiáng)分布仿真圖b=2.5×10-4m
圖5:雙縫衍射光強(qiáng)分布仿真圖
通過(guò)Python,我們可以展現(xiàn)光學(xué)中的衍射、干涉等光學(xué)現(xiàn)象,并且能很詳細(xì)的反映出衍射的特征。