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