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