韓 帥,許家華,張思齊,文 源
(河南科技大學(xué),河南 洛陽 471003)
電磁場理論(或電磁場與電磁波)是電子信息工程類專業(yè)和電氣工程類專業(yè)的專業(yè)基礎(chǔ)課[1],該課程理論抽象,公式繁多,計算復(fù)雜,理解困難,是電子信息類專業(yè)課程中最為難學(xué)、難教和難懂的課程[2]。同時與電磁場課程配套的實驗系統(tǒng)設(shè)備昂貴,因此多數(shù)高校電磁場理論課程不開設(shè)課程實驗,即使少數(shù)學(xué)校具有成套的實驗設(shè)備,也只是對學(xué)生進行實驗演示。抽象理論、復(fù)雜的公式加上實驗的缺少更加增加了電磁場課程學(xué)習(xí)的難度,使得該課程成為學(xué)生學(xué)習(xí)的噩夢。
雖然利用實際的實驗系統(tǒng)開設(shè)電磁場實驗非常困難,但是利用數(shù)值計算軟件對電磁場系統(tǒng)進行模擬是一種有效的實驗方法。在電磁場數(shù)值模擬中常用的是有限元和數(shù)值計算方法[3]。由于有限元方法過于專業(yè)和復(fù)雜,不適合在非電磁場專業(yè)的本科教學(xué)中開展,因此利用數(shù)值計算方法實現(xiàn)電磁場數(shù)值模擬開設(shè)課程實驗對于本科學(xué)生來說是一種可行的方法[4]。常用的數(shù)值計算軟件由Matlab和Python,相對于Matlab,Python是開源軟件,無需任何版權(quán)授權(quán),同時由于機器學(xué)習(xí)、人工智能等課程也使用Python軟件,因此基于Python語言設(shè)計電磁場數(shù)值模擬軟件不但可以彌補電磁場教學(xué)無法開設(shè)實驗的缺點,而且還可以加強學(xué)生對Python語言的掌握能力。因此設(shè)計基于Python的電磁場數(shù)值模擬軟件對于電磁場課程教學(xué)具有重要的促進意義。
Python是一種開源的軟件開發(fā)平臺,目前大量的機器學(xué)習(xí)和人工智能系統(tǒng)都是基于Python開發(fā)。Python中數(shù)值計算模塊Numpy、科學(xué)計算模塊Scipy、數(shù)據(jù)處理模塊Pandas和數(shù)據(jù)可視化模塊Matplotlib,這些模塊為Python實現(xiàn)數(shù)值計算提供了解決途徑。下面簡單介紹這些數(shù)值計算模塊的主要功能。
NumPy提供了高效存儲和操作密集數(shù)據(jù)緩存的接口。NumPy 數(shù)組與 Python 內(nèi)置的列表類型非常相似。但是在大維度數(shù)組處理方面, NumPy 數(shù)組提供了更加高效的存儲和數(shù)據(jù)操作。 NumPy 數(shù)組幾乎是整個 Python 數(shù)據(jù)科學(xué)工具生態(tài)系統(tǒng)的核心。Numpy模塊中包含由線性代數(shù)、多項式運算、矩陣運算、邏輯函數(shù)、統(tǒng)計等功能,這些數(shù)值計算功能基本上涵蓋了常用的數(shù)值計算方法。利用Numpy函數(shù)可以方便實現(xiàn)大量的數(shù)值計算功能。
Scipy是專門為科學(xué)計算開發(fā)的數(shù)值計算模塊,其中包括數(shù)值積分、特殊函數(shù)、傅里葉學(xué)習(xí)、信號處理、圖像處理、優(yōu)化、插值和統(tǒng)計等功能。相對于Numpy模塊,Scipy提供更加專業(yè)、更加復(fù)雜的數(shù)值計算功能,是解決復(fù)雜數(shù)值計算問題的有效工具。
Pandas是基于Python開發(fā)的強大的數(shù)據(jù)處理模塊,主要用于大數(shù)據(jù)的分析和處理。Pandas可以實現(xiàn)大量數(shù)據(jù)的排序、處理、特征分析、歸一化等處理功能,它提供的Series和DadaFrame數(shù)據(jù)結(jié)構(gòu)可以方便處理大型數(shù)據(jù)。Pandas提供和豐富的輸入輸出接口,可以方便實現(xiàn)對xlsx、csv和txt文件的操作。Pandas已經(jīng)成為Python數(shù)據(jù)處理中必不可少的重要工具。
數(shù)據(jù)可視化模塊Matplotlib的功能類似Matlab的數(shù)據(jù)可視化功能。Matplotlib具有良好的操作系統(tǒng)兼容性和圖形顯示底層接口兼容性,支持幾十種圖形顯示接口與輸出格式,這使得用戶無論在哪種操作系統(tǒng)上都可以輸出自己想要的圖形格式。這種跨平臺、多功能的特點已經(jīng)成為Matplotlib 最強大的功能之一, Matplotlib也因此吸引了大量用戶,形成了一個活躍的開發(fā)者團隊,晉升為 Python 科學(xué)領(lǐng)域不可或缺的強大武器。
Python中的Numpy、Scipy、Pandas和Matplotlib等模塊功能強大,能夠提高主機計算功能和數(shù)據(jù)可視化功能,利用這些功能可以實現(xiàn)電磁場數(shù)值計算和相應(yīng)的可視化界面設(shè)計。
本文利用Python平臺中提供的數(shù)值計算模塊下開發(fā)電磁場實驗系統(tǒng),該實驗系統(tǒng)可以實現(xiàn)靜態(tài)電磁場數(shù)值計算和可視化顯示。電磁場實驗系統(tǒng)主要包括靜態(tài)電磁場的數(shù)值積分計算和二維拉普拉斯方程的求解。
靜態(tài)電磁場解析解中通常包含復(fù)雜的積分運算,這些積分計算通常不能直觀反映靜態(tài)電磁場的結(jié)構(gòu)。圓柱坐標(biāo)和求坐標(biāo)系中靜態(tài)場的解析解中經(jīng)常出現(xiàn)復(fù)雜的橢圓積分,這些橢圓積分通常不能表示為簡單的代數(shù)函數(shù),這樣更加增加了學(xué)生理解靜態(tài)電磁場的困難。利用數(shù)值積分方法,將這些復(fù)雜的積分計算轉(zhuǎn)換為微元的求和可以直接求出靜態(tài)場場結(jié)構(gòu)的數(shù)值解,再利用繪圖函數(shù)可以繪制靜態(tài)場的可視化圖形,從而實現(xiàn)靜態(tài)電磁場可視化顯示[5]。
目前在Python平臺上利用數(shù)值積分設(shè)計有限長線電荷的電場分布、帶點圓盤電場的空間分布、載流圓環(huán)磁場的空間分布、亥姆霍茲線圈的磁場結(jié)構(gòu)等實驗程序,利用格林函數(shù)的數(shù)值積分實現(xiàn)帶電球殼內(nèi)部的電場分布、帶電圓柱體外部的電場分布等實驗。這些實驗程序可以提供靜態(tài)電磁場的可視化圖形輸出,有效加強了學(xué)生對靜態(tài)電磁場的直觀理解。
無源空間靜電場的結(jié)構(gòu)通常通過求解拉普拉斯方程得到[5]。但是拉普拉斯方程的求解結(jié)果通常是級數(shù)表示,很難從級數(shù)表達式中直觀看出靜電場的電勢分布。而有限差分法可以實現(xiàn)拉普拉斯迭代求解,從而求出靜電場的電勢分布,集合Matplotlib中的contourf函數(shù)可以實現(xiàn)電場線的可視化顯示。拉普拉斯方程最常用的求解方法是有限差分法和超松弛法。超松弛法是有限差分法的改進,可以有效加快迭代的收斂速度。利用有限差分法求解而二維拉普拉斯方程可以獲得三種邊界條件下的靜電場的電勢分布。目前已經(jīng)完成矩形帶電槽、同軸矩形帶電槽和混合邊界下帶電槽的靜電場有限差分法求解,這些求解結(jié)果都可以給出電勢的可視化分布圖。下圖是在Python平臺下利用超松弛法求解二維拉普拉斯方程的結(jié)果。矩形槽上邊電勢為100 V,左邊電勢為50 V,下邊和右邊電勢為0 V。從中可以清楚看出電勢的分布。
圖1 二維矩形槽的電勢分布
Python作為開源軟件開發(fā)平臺目前已經(jīng)得到廣泛應(yīng)用,Python開發(fā)平臺提供的Numpy、Scipy、Pandas和Matplotlib等模塊提供了豐富的數(shù)值計算功能和數(shù)據(jù)可視化功能,利用這些模塊開發(fā)電磁場數(shù)值仿真實驗系統(tǒng)可以有效彌補電磁場理論教學(xué)中的不足,增加學(xué)生對電磁場的直觀認識和理解,有效提高教學(xué)質(zhì)量。