趙文來 楊俊秀 陳秋妹
(浙江理工大學 信息學院, 杭州 310018)
疊加原理的驗證是“電路原理”實驗課程中的基本內容之一,旨在求解電路中多源工作時,各支路的電流或端電壓。對疊加原理的研究具有一定的實際意義,一方面疊加現象廣泛應用于線性電路,另一方面非線性電路大多可通過線性化進行近似求解[1]。其實驗數據量大,手工計算繁瑣,實驗老師也需要花長時間檢查學生的實驗數據質量。學生大多的實驗數據是課下處理,有時候會遇到實驗老師實驗現場未檢查出的測試數據問題,學生課下發現問題又不方便重新操作,利用Python的第三方庫來處理疊加原理實驗的數據,可與理論值進行快速比較,且判斷測試數據誤差,發現問題數據及時分析處理;同時,可通過簡單計算判斷疊加性及齊次性,且分析結果方便可視化,可大大提高數據處理的效率[2-3]。
Python是面向對象的高級程序語言之一,其語句簡潔,庫類豐富,且采用開源設計,具有眾多的第三方庫和開源軟件包的接口,已經成為應用于科學計算、數據庫、網絡工程等眾多領域的高級語言。
實驗數據處理采用了Python的numpy,scipy和matplotlib等庫。numpy是開源的數值計算庫,提供快速的數組矩陣運算,將疊加原理實驗電路測試數據通過相應函數轉化為數組;scipy是Python開源的數學、科學和工程計算包,可用于數據的最優化、線性代數、積分、插值、擬合、特殊函數、快速傅里葉變換、信號處理、圖像處理、常微分方程求解器等;matplotlib是Python二維畫圖庫,可以畫出二維圖像,應用該庫可實現實驗數據,及擬合曲線的可視化[4]。
疊加原理實驗是電路實驗的一個基本內容,測試電路圖如圖1所示。要分別完成以下操作步驟[5-7]:
(1)E1=+12 V電源單獨作用時(將開關S1投向E1側、開關S2投向短路側),用直流數字電壓表和毫安表測量各支路電流及各電阻元件兩端電壓。
(2)E2=+6 V電源單獨作用時(將開關S1投向短路側、開關S2投向E2側),重復步驟(1)的測量和記錄。
(3)令E1=+12 V和E2=+6 V共同作用時(開關S1和S2分別投向E1和E2側),重復上述的測量和記錄。
(4)將E1、E2均下調一半,即E1=6 V,E2=3 V,重復上述的測量并記錄,驗證齊次性規律。
(5)將R5換成一只二極管IN4007(即將開關S3投向二極管D側),重復上述第(1)~(3)項內容,驗證基爾霍夫定律定律的適用范圍。

圖1 疊加原理實驗電路圖
實際測量時,數據記錄情況見4測試數據部分。
本代碼在Win7系統上實現,基于Python3.6,并需要提前導入Python第三方軟件庫工具pip安裝numpy,matplotlib,scipy等庫。
首先錄入疊加原理實驗測試數據,再利用numpy進行數據預處理,調用scipy求解多元線性方程組,并進行疊加性及齊次性驗證。實現過程如下圖2所示[3]。

圖2 實驗數據處理過程
(a)導入第三方庫文件:
import numpy as np
from scipy.linalg import solve
import matplotlib.pyplot as plt
(b)輸入數據:
a = np.array([])
b = np.array([])
c1 = np.array([])
(c)求解理論值[8-9]:
x = solve(a, b) # 求解
(d)輸出電參數理論值:
print(‘I1=’,‘%.3f’ % x[0],‘mA’)
Uab=(-1)*x[1]*1
print(‘Uab=’,‘%.3f’ % Uab,‘V’)
(e)誤差分析并輸出:
l=np.array([x[0],x[1],x[2],Uab,Ucd,Uad,Ude,Ufa]) # 理論值
e= np.array(c1-l) # 誤差
print(‘I1 relative error =’,‘%.3f’ % (e[0]/x[0]))
print(‘Uab relative error =’,‘%.3f’ % (e[3]/x[0]))
plt.gcf().set_facecolor(np.ones(4)* 240 / 255)
# 生成畫布的大小
plt.grid() # 生成網格
plt.scatter(l, e, color=‘black’)
plt.show()
以某生測試的實驗數據為例,見下表1所示,基于Python進行數據處理及誤差分析。
以E1單獨作用為例,將數據錄入代碼,理論求解為:I1=8.704 mA;I2=-2.413 mA;I3=6.292 mA;Uab=2.413 V;Ucd= 0.796 V;Uad= 3.209 V;Ude= 4.439 V;Ufa= 4.439 V。與測試值進行比較,得各電參數相對誤差分別為:
I1 relative error = 0.003
I2 relative error = -0.008
I3 relative error = -0.011
Uab relative error = 0.010
Ucd relative error = -0.001
Uad relative error = -0.011
Ude relative error = -0.007
Ufa relative error = 0.002
且可將相對誤差可視化,如下圖3所示。
以此類推,學生可通過簡單代碼判斷條件發生變化時,測試數據的質量。實驗老師也可通過可視化誤差,對學生實驗數據進行快速判斷優劣,大大提高實驗數據處理效率。

表1 R5接入電路時電路參數

表2 二極管D取代R5接入電路時電路參數

圖3 實驗數據相對誤差與理論值
線性電路滿足疊加原理,表現為疊加性及齊次性,以疊加原理的齊次性為例,基于Python對測試數據進行處理。當E1為+12 V,E2為+6 V共同作用,各電參數測試值如上表1第三行數據所示,與表1第四行E1為+6 V,E2為+3 V工作時的數據比較,齊次性誤差為:I1 error=0.090 mA,I2 error=-0.080 mA,I3 error=0.030 mA,Uab error=0.070 V,Ucd error=0.030 V,Uad error=0.040 V,Ude error=0.060 V,Ufa error=0.050 V。
將R5用二極管D取代,測試數據如下表2所示。
以疊加原理的疊加性為例,基于Python對測試數據進行處理。當E1為+12 V,E2為+6 V共同作用,各電參數測試值如上表2第三行數據所示,兩電源單獨作用時數據如第一、二行所示,代入程序對數據進行處理,計算得疊加誤差為:I1 error=0.780 mA;I2 error=-2.360 mA;I3 error=-1.020 mA;Uab error=2.470V;Ucd error=-3.360 V;Uad error=-0.850 V;Ude error=0.420 V;Ufa error=0.480 V。從單獨作用相疊加與共同作用的差值看,顯然不滿足疊加性。
基于Python及第三方庫來處理疊加原理實驗的數據,通過與理論值比較,可判斷測試數據優劣;同時,可通過簡單計算判斷疊加性及齊次性,且分析結果方便可視化,學生可根據曲線自行判斷測試數據的質量。可見Python語言靈活方便且資源豐富,電路實驗數據運用Python處理,學生數據處理時間大大縮短,實驗后2~3天可處理好數據,且實驗教師通過實驗數據的可視化曲線及數據分析結果,有效提高實驗教學作業批改效率,實驗報告的優秀率由以前75%左右,上升為85%左右。