赵文来 杨俊秀 陈秋妹
(浙江理工大学 信息学院, 杭州 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%左右。