趙文來 楊俊秀 陳秋妹
(浙江理工大學(xué) 信息學(xué)院, 杭州 310018)
疊加原理的驗(yàn)證是“電路原理”實(shí)驗(yàn)課程中的基本內(nèi)容之一,旨在求解電路中多源工作時(shí),各支路的電流或端電壓。對(duì)疊加原理的研究具有一定的實(shí)際意義,一方面疊加現(xiàn)象廣泛應(yīng)用于線性電路,另一方面非線性電路大多可通過線性化進(jìn)行近似求解[1]。其實(shí)驗(yàn)數(shù)據(jù)量大,手工計(jì)算繁瑣,實(shí)驗(yàn)老師也需要花長時(shí)間檢查學(xué)生的實(shí)驗(yàn)數(shù)據(jù)質(zhì)量。學(xué)生大多的實(shí)驗(yàn)數(shù)據(jù)是課下處理,有時(shí)候會(huì)遇到實(shí)驗(yàn)老師實(shí)驗(yàn)現(xiàn)場未檢查出的測試數(shù)據(jù)問題,學(xué)生課下發(fā)現(xiàn)問題又不方便重新操作,利用Python的第三方庫來處理疊加原理實(shí)驗(yàn)的數(shù)據(jù),可與理論值進(jìn)行快速比較,且判斷測試數(shù)據(jù)誤差,發(fā)現(xiàn)問題數(shù)據(jù)及時(shí)分析處理;同時(shí),可通過簡單計(jì)算判斷疊加性及齊次性,且分析結(jié)果方便可視化,可大大提高數(shù)據(jù)處理的效率[2-3]。
Python是面向?qū)ο蟮母呒?jí)程序語言之一,其語句簡潔,庫類豐富,且采用開源設(shè)計(jì),具有眾多的第三方庫和開源軟件包的接口,已經(jīng)成為應(yīng)用于科學(xué)計(jì)算、數(shù)據(jù)庫、網(wǎng)絡(luò)工程等眾多領(lǐng)域的高級(jí)語言。
實(shí)驗(yàn)數(shù)據(jù)處理采用了Python的numpy,scipy和matplotlib等庫。numpy是開源的數(shù)值計(jì)算庫,提供快速的數(shù)組矩陣運(yùn)算,將疊加原理實(shí)驗(yàn)電路測試數(shù)據(jù)通過相應(yīng)函數(shù)轉(zhuǎn)化為數(shù)組;scipy是Python開源的數(shù)學(xué)、科學(xué)和工程計(jì)算包,可用于數(shù)據(jù)的最優(yōu)化、線性代數(shù)、積分、插值、擬合、特殊函數(shù)、快速傅里葉變換、信號(hào)處理、圖像處理、常微分方程求解器等;matplotlib是Python二維畫圖庫,可以畫出二維圖像,應(yīng)用該庫可實(shí)現(xiàn)實(shí)驗(yàn)數(shù)據(jù),及擬合曲線的可視化[4]。
疊加原理實(shí)驗(yàn)是電路實(shí)驗(yàn)的一個(gè)基本內(nèi)容,測試電路圖如圖1所示。要分別完成以下操作步驟[5-7]:
(1)E1=+12 V電源單獨(dú)作用時(shí)(將開關(guān)S1投向E1側(cè)、開關(guān)S2投向短路側(cè)),用直流數(shù)字電壓表和毫安表測量各支路電流及各電阻元件兩端電壓。
(2)E2=+6 V電源單獨(dú)作用時(shí)(將開關(guān)S1投向短路側(cè)、開關(guān)S2投向E2側(cè)),重復(fù)步驟(1)的測量和記錄。
(3)令E1=+12 V和E2=+6 V共同作用時(shí)(開關(guān)S1和S2分別投向E1和E2側(cè)),重復(fù)上述的測量和記錄。
(4)將E1、E2均下調(diào)一半,即E1=6 V,E2=3 V,重復(fù)上述的測量并記錄,驗(yàn)證齊次性規(guī)律。
(5)將R5換成一只二極管IN4007(即將開關(guān)S3投向二極管D側(cè)),重復(fù)上述第(1)~(3)項(xiàng)內(nèi)容,驗(yàn)證基爾霍夫定律定律的適用范圍。
圖1 疊加原理實(shí)驗(yàn)電路圖
實(shí)際測量時(shí),數(shù)據(jù)記錄情況見4測試數(shù)據(jù)部分。
本代碼在Win7系統(tǒng)上實(shí)現(xiàn),基于Python3.6,并需要提前導(dǎo)入Python第三方軟件庫工具pip安裝numpy,matplotlib,scipy等庫。
首先錄入疊加原理實(shí)驗(yàn)測試數(shù)據(jù),再利用numpy進(jìn)行數(shù)據(jù)預(yù)處理,調(diào)用scipy求解多元線性方程組,并進(jìn)行疊加性及齊次性驗(yàn)證。實(shí)現(xiàn)過程如下圖2所示[3]。
圖2 實(shí)驗(yàn)數(shù)據(jù)處理過程
(a)導(dǎo)入第三方庫文件:
import numpy as np
from scipy.linalg import solve
import matplotlib.pyplot as plt
(b)輸入數(shù)據(jù):
a = np.array([])
b = np.array([])
c1 = np.array([])
(c)求解理論值[8-9]:
x = solve(a, b) # 求解
(d)輸出電參數(shù)理論值:
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() # 生成網(wǎng)格
plt.scatter(l, e, color=‘black’)
plt.show()
以某生測試的實(shí)驗(yàn)數(shù)據(jù)為例,見下表1所示,基于Python進(jìn)行數(shù)據(jù)處理及誤差分析。
以E1單獨(dú)作用為例,將數(shù)據(jù)錄入代碼,理論求解為: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。與測試值進(jìn)行比較,得各電參數(shù)相對(duì)誤差分別為:
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
且可將相對(duì)誤差可視化,如下圖3所示。
以此類推,學(xué)生可通過簡單代碼判斷條件發(fā)生變化時(shí),測試數(shù)據(jù)的質(zhì)量。實(shí)驗(yàn)老師也可通過可視化誤差,對(duì)學(xué)生實(shí)驗(yàn)數(shù)據(jù)進(jìn)行快速判斷優(yōu)劣,大大提高實(shí)驗(yàn)數(shù)據(jù)處理效率。
表1 R5接入電路時(shí)電路參數(shù)
表2 二極管D取代R5接入電路時(shí)電路參數(shù)
圖3 實(shí)驗(yàn)數(shù)據(jù)相對(duì)誤差與理論值
線性電路滿足疊加原理,表現(xiàn)為疊加性及齊次性,以疊加原理的齊次性為例,基于Python對(duì)測試數(shù)據(jù)進(jìn)行處理。當(dāng)E1為+12 V,E2為+6 V共同作用,各電參數(shù)測試值如上表1第三行數(shù)據(jù)所示,與表1第四行E1為+6 V,E2為+3 V工作時(shí)的數(shù)據(jù)比較,齊次性誤差為: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取代,測試數(shù)據(jù)如下表2所示。
以疊加原理的疊加性為例,基于Python對(duì)測試數(shù)據(jù)進(jìn)行處理。當(dāng)E1為+12 V,E2為+6 V共同作用,各電參數(shù)測試值如上表2第三行數(shù)據(jù)所示,兩電源單獨(dú)作用時(shí)數(shù)據(jù)如第一、二行所示,代入程序?qū)?shù)據(jù)進(jìn)行處理,計(jì)算得疊加誤差為: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。從單獨(dú)作用相疊加與共同作用的差值看,顯然不滿足疊加性。
基于Python及第三方庫來處理疊加原理實(shí)驗(yàn)的數(shù)據(jù),通過與理論值比較,可判斷測試數(shù)據(jù)優(yōu)劣;同時(shí),可通過簡單計(jì)算判斷疊加性及齊次性,且分析結(jié)果方便可視化,學(xué)生可根據(jù)曲線自行判斷測試數(shù)據(jù)的質(zhì)量??梢奝ython語言靈活方便且資源豐富,電路實(shí)驗(yàn)數(shù)據(jù)運(yùn)用Python處理,學(xué)生數(shù)據(jù)處理時(shí)間大大縮短,實(shí)驗(yàn)后2~3天可處理好數(shù)據(jù),且實(shí)驗(yàn)教師通過實(shí)驗(yàn)數(shù)據(jù)的可視化曲線及數(shù)據(jù)分析結(jié)果,有效提高實(shí)驗(yàn)教學(xué)作業(yè)批改效率,實(shí)驗(yàn)報(bào)告的優(yōu)秀率由以前75%左右,上升為85%左右。