1、第 35 卷第 6 期大学物理实验Vol35 No62022 年 12 月PHYSICAL EXPEIMENT OF COLLEGEDec2022收稿日期:2022-07-21基金项目:“双万计划”国家一流专业(11120032341902)文章编号:1007-2934(2022)06-0085-06Python 在 LC 串联谐振实验数据处理中的应用赵文来,杨俊秀,陈秋妹(浙江理工大学 信息学院,浙江 杭州310018)摘要:LC 串联谐振实验是电学的实验之一,以加强对串联谐振电路谐振特性的理解。Python语言在数据分析与处理等方面有很好的应用。首先利用 Python 的第三方库 nump
2、y 对数据进行预处理;其次基于 scikit-learn 建立线性回归模型,通过数据训练、机器学习拟合数据并求解;为判定测试数据的质量,通过 sklearn 对拟合曲线进行均方误差回归损失分析,最后采用 matplotlib 绘制图形,实现数据的可视化。引入 Python 进行数据处理,能快速处理实验数据,绘制拟合曲线并分析测试数据的优劣,形象且直观,对教师评判实验报告的测试数据质量也具有一定的辅助作用。关键词:LC 串联谐振;归一化;幅频特性;拟合;Python;numpy;sklearn中图分类号:TN 30文献标志码:ADOI:1014139/jcnkicn22-122820220601
3、8LC 串联谐振电路是电学实验内容之一,旨在加强对串联谐振电路的谐振条件,及阻抗、电流、电压特点的理解1。对谐振现象的研究具有一定的实际意义,一方面谐振现象广泛应用于电子技术中实现选频及滤波,另一方面在电力系统中发生谐振却需要避免或抑制2。利用 Python的第三方机器学习库 Scikit-learn 来处理 LC 串联谐振实验数据,并通过 matplotlib 库实现数据及其分析结果的可视化3。1Python 工具Python 是面向对象的高级程序语言,其风格简洁,库类多样,且采用开源,具有丰富三方库和开源软件包接口,成为应用于科学计算、数据库、网络工程、GUI 设计等众多领域的高级语言。实
4、验 数 据 处 理 采 用 了 Python 的 numpy,Scikit-learn 和 Matplotlib 等库。Numpy 是数值计算库,提供快速的数组矩阵运算,将 LC 串联谐振实验测试数据通过相应函数转化为数组;Scikit-learn 是 Python 的机器学习库,是用于数据挖掘、数据分析的工具,通过数据训练,实现数据的拟合回归预测、聚类、模型选取等复杂算法,采用其中的一元线性回归模型来完成实验数据的拟合;Matplotlib 是 Python 二维画图库,可以简洁地画出折线,柱状,散点等二维图像,实现实验数据的可视化4。2原理及均方误差回归损失21实验原理交流电路的频率特性实
5、验是电路实验的一个基本内容,LC 串联谐振电路实验原理如图 1 所示。当信号源 Vs频率 f 改变时,回路中感抗、容抗受频率影响而改变,在频率 f=12LC处,Xl=XC,电路发生谐振,呈纯阻性且回路中电流达到最大5,6。图 1LC 串联谐振实验电路原理图其中,电路谐振时,回路电流 I 为:?I0=?Vs(1)任意频率时,回路电流 I 为:?I=?Vs+jX=?Vs+j L1C()(2)回路品质因数 Q 为:Q=0L=10C=1LC(3)归一化电流为:?I?I0=+j L1C()=11+jL1C()=11+j0L010C0()=11+jQ00()(4)幅频特性表现为:ImI0m=?I?I0=1
6、1+Q200()2(5)实际测量时,通常测量不同频率下的电阻电压、电感电压和电容电压,经计算得回路电流有效值,绘制出归一化电流频率特性曲线7-10。22均方误差回归损失“损失函数”是机器学习优化中至关重要的一部分,机器学习中的算法都需要最大化或最小化一个函数,被称为“目标函数”。一般把最小化的一类函数,称为“损失函数”。它能根据预测结果,衡量出模型预测能力的好坏。在实际应用中,选取损失函数会受到诸多因素的制约,比如是否有异常值、机器学习算法的选择、梯度下降的时间复杂度、求导的难易程度以及预测值的置信度等等11。最常用的损失函数是均方误差 MSE,定义如下:MSE(y,y)=ni=1yi yi(
7、)2n(6)上式中,yi为数据表中第 i 个数据值,而yi为神经网络给出的预测值,MSE 是求数据的平均误差函数。3测试数据处理分析31配置软件环境本方 法 在 Win7 操 作 系 统 上 实 现,基 于Python36 版本,并导入 Python 第三方软件库工具pip 安装 numpy,matplotlib,scikit-learn 等库。32拟合曲线实现框图首先录入 LC 串联谐振实验测试数据,再利用 numpy 进行数据预处理,调用 scikit-learn 建立一元多阶线性回归模型并求解,利用数据训练及机器学习,最后通过均分误差回归损失分析判定模型最佳阶数,并进行可视化输出。实验框
8、图如图 2 所示3。图 2拟合曲线实现框图33代码实现(1)导入第三方库文件:import numpy as npimport matplotlibpyplot as pltfrom sklearnpreprocessing importPolynomial Featuresfromsklearn linear _ modelimportLinearegression,Perceptronfrom sklearn metrics import mean _ squared _error,r2_scorefrom sklearnmodel_selection import train_test_
9、splitmplrcParams fontsans-serif=simHei(2)输入数据:基于 numpy 的数组 array()函数把数据转化成行向量,再结合 reshape()函数把行向量转化为列向量。X1=Y1=X=nparray()reshape(-1,1)y=nparray()reshape(-1,1)(3)数据拟合,机器学习:利用 numpy 的polyfit()函数进行数据拟合,及 polyld()函数进行机器学习。68大学物理实验2022 年coefn=nppolyfit(x,y,n)poly_fitn=nppoly1d(coefn)(4)画图,利用 matplotlib 的
10、 plot()函数,实现数据拟合曲线可视化。pltscatter(X1,y1,color=black,g:,label=五阶,=1K 欧)pltxlabel(频率(KHz)pltylabel(归一化电流)pltlegend(loc=2)pltshow()(5)数据分割及最优判断12,13:x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=03)rmses=degrees=nparange(1,10)min_rmse,min_deg,score=1e10,0,0for deg in degrees:poly=Polynomi
11、alFeatures(degree=deg,include_bias=False)x_train_poly=polyfit_transform(x_train)poly_reg=Linearegression()poly_regfit(x_train_poly,y_train)x_test_poly=polyfit_transform(x_test)y_test_pred=poly_regpredict(x_test_poly)poly_rmse=npsqrt(mean_squared_error(y_test,y_test_pred)rmsesappend(poly_rmse)r2score
12、=r2_score(y_test,y_test_pred)if min_rmse poly_rmse:min_rmse=poly_rmsemin_deg=degscore=r2scoreprint(degree=%s,MSE=%2f,r2 _ score=%2f%(deg,poly_rmse,r2score)fig=pltfigure()ax=figadd_subplot(111)axplot(degrees,rmses)axset_yscale(log)axset_xlabel(Degree)axset_ylabel(MSE)axset_title(Best degree=%s,MSE=%2
13、f,r2_score=%2f%(min_deg,min_rmse,score)pltshow()4实验结果当=330 时,某生测试的 2 组实验数据见表 1、表 2 所示。表LC 实验数据第一组(=330)频率/KHz电阻电压/mV回路电流/mA电流归一化1660018001128106032102115720606240416929608970571753631107118042612910831844761442092191516156411984761442092203426129108320936311071216296089705723320606240427910603210218
14、2060018001表 2LC 实验数据第二组(=330)频率/KHz电阻电压/mV回路电流/mA电流归一化7846101400999967102030131108060244015127110033302117336611090717538811760741794401333084183488147909419052315851196485147093198465140908920044113360852034071233078205384116407420736611090726712203702330587502650173078450256016代入程序,对应数据二阶、三阶、及高阶拟合
15、结果如图 3、图 4 所示。频率/kHz图 3=330 时第一组数据二阶、三阶及高阶拟合曲线78第 6 期赵文来,等:Python 在 LC 串联谐振实验数据处理中的应用频率/kHz图 4=330 时第二组数据二阶、三阶及高阶拟合曲线第一组数据均方误差回归损失决定系数与阶数的关系曲线如图 5 所示12,13。频率/kHz图 5=330 时第一组数据拟合曲线决定系数与阶数由上图 5 可知,=330 时均方误差回归损失第一组数据在阶数为 6 时最佳,拟合决定系数为 059,对应的六阶拟合曲线如图 6 所示。频率/kHz图 6=330 时第一组数据六阶拟合曲线第二组数据均方误差回归损失决定系数与阶数
16、的关系曲线如图 7 所示。由上图 7 可知,=330 时均方误差回归损失第二组数据在阶数为 4 时最佳,且决定系数为092,大于第一组数据 059,可见第二组数据更精确。利用均分误差回归与阶数的对应,比较拟合曲线的大致走势即可评估测试数据的优劣,决定系数越接近 1 越优11。频率/kHz图 7=330 时第二组数据拟合曲线决定系数与阶数当=1 K 时,测得的 2 组实验数据见表 3、表 4 所示。表 3LC 实验数据第一组(=1 K)频率/KHz电阻电压/mV回路电流/mA电流归一化19928003003787915801602081242880290379146418042055160538054070817064106408431777010700922191761076100120670107009222146410640843227538054070824841804205528828802903793871580160208850280030037表 4LC 实验数据第二组(=1 K)频率/KHz电阻电压/mV回路电流/mA电流归一化507900801070118012015