温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
Python
语言
大学物理
实验
数据
分析
中的
应用
牛相宏
第 35 卷第 6 期大学物理实验Vol35 No62022 年 12 月PHYSICAL EXPEIMENT OF COLLEGEDec2022收稿日期:2022-08-23基金项目:南京邮电大学教学改革研究项目(JG00721JX99)*通讯联系人文章编号:1007-2934(2022)06-0101-05Python 语言在大学物理实验数据分析中的应用牛相宏*,潘乘风,陈伟,李兴鳌(南京邮电大学 理学院,江苏 南京210023)摘要:对实验数据进行准确、严谨的处理是物理实验中至关重要的环节。对于作图精度要求高且复杂的物理实验,通过利用数值分析软件对实验数据进行有效处理,实现实验结果的可视化、精确化,在现代 大学物理实验 课程实践中发挥着重要作用。本文以常见的实验为例,介绍了如何利用 Python语言对实验数据进行快速准确的处理以及图像的可视化。尽管 Python 语言应用广泛,但在物理实验中的应用却少之又少。本文重点突出基于 Python 语言的数据处理、图像可视化、拟合等基本应用,并提供原始代码分析。关键词:Python;大学物理实验;数据处理;可视化;拟合中图分类号:O 4-39文献标志码:ADOI:1014139/jcnkicn22-1228202206021随着现代电子信息技术的飞速发展,Java、C+、Python 等计算机编程语言在大学课程中的应用愈加普遍。同时随着理论与实验的不断融合,大学物理实验 课程所涉及的实验内容更加前沿与广泛,部分实验涉及的参数较多、实验数据冗杂,分析精度也不断提高。能够科学有效地使用科学软件对实验数据进行准确地处理,理解实验中蕴含的物理意义也是大学物理实验 教学目的之一。Python 是一种开源免费的程序设计语言,其扩展库中的 numpy、matlotlib、sklearn 等,提供了相应的方法用以实现数据拟合和图像可视化。因其具有面向对象、支持动态语义、内置高级数据结构、语法简洁优美等优点,Python 在日常学习和科学研究中得到十分广泛的应用。通过对Python 语言的学习,掌握可编程的数据可视化、不同方式下的数据拟合,能够加深学生对于大学物理实验中相关理论知识的理解,进一步培养学生利用现代科学技术不断探索的创新意识,为其今后的课程学习和科研工作打下坚实的基础。1Python 语言在大学物理实验数据处理中的实践Python 作为一门功能强大的计算机编程语言,迄今为止已经发展得较为完善。Python 在软件设计、工业生产、自动化应用等方面展现出独特的魅力,但在 大学物理实验 课程中的应用却寥寥无几。本文对 Python 语言如何处理实验数据作详细的讨论。首先以受迫振动 实验为引例,介绍如何利用 Python 语言对其实验数据快速地进行可视化处理;随后通过电介质介电常数的测量 以及 热敏电阻和温差电动势的测量 两个实验分别介绍了线性拟合和对数拟合的操作方法,在每个实验中均附上运行代码,同时可以根据程序设计的“拟合参数”对拟合结果进行有效评价。11Python 图像可视化以 受迫振动的研究实验为例作图法是大学物理实验 课程中数据处理的一种基本方法。该传统方法利用坐标纸手工绘图处理数据,仅适用于自变量和因变量呈简单线性关系这一情况。当实验数据样本参数多以及呈现出非线性等复杂情况时,利用科学软件对其进行可视化处理,便可以得到既方便又可靠的结果。对这样冗杂的实验数据若仍采取坐标纸绘图的方法,极有可能由于人为误差,例如作图不规范等导致某些关键物理量的错误或丢失。在自变量和因变量呈非线性函数关系的情况下,极值点、拐点、边界点等特殊点往往代表着物理特性的转变或相变等,这对于理解该实验蕴含的原理和内在机制起到至关重要的作用。而采用坐标纸手绘作图法会很容易在特殊数据点的连接上忽略甚至丢失这些关键的特征数据。利用 Python 语言进行实验数据可视化处理,不仅易于保存完整的实验数据,更有助于掌握当前实验结果以及理解其蕴含的物理机制。在 受迫振动的研究 实验中,以表 1 中的数据为例:为了便于比较,实验要求在同一张纸上绘制出振幅、相位差 随频率比/0变化的幅频曲线和相频曲线。利用 Python 语言及其内置的扩展库,可以方便快捷地完成实验要求。以下给出相关代码并对关键处给予注释:import numpy as npimport matplotlibpyplot as pltfrom sklearnmetrics import r2_score#名称为 x,y,z 的列表中分别写入频率比/0、振幅、相位差 实验数据。x=0970,0971,0972,0974,0977,0982,0987,0994,0999,1002,1006,1016,1025,1035,1042,1045y=65,68,70,76,82,97,119,137,147,144,136,98,72,58,50,47z=25,26,27,30,32,40,50,69,87,99,113,137,149,155,159,161#使用 numpy 中的一种方法建立多项式模型。model_1=nppoly1d(nppolyfit(x,y,10)model_2=nppoly1d(nppolyfit(x,z,10)#指定行的显示方式,从 0970 开始至 1045结束。line_1=nplinspace(0970,1045,100)line_2=nplinspace(0970,1045,100)#用 r-squared 的值来衡量多项式回归拟合度,r 平方的数值范围属于 0-1,其中 0 表示不相关,而 1 则表示完全相关。print(r2_score(y,model_1(x)print(r2_score(z,model_2(x)#绘制散点图pltscatter(x,y)pltscatter(x,z)#画出多项式回归线pltplot(line_1,model_1(line_1),label=)pltplot(line_2,model_2(line_2),label=)pltlegend()#显示pltshow()图 1 受迫振动的研究 实验中的幅频曲线和相频曲线如图 1 所示,运行代码可以成功绘制出两条符合实验要求的曲线,充分体现了 Python 语言在可视化数据作图中的优越性。从控制台输出的内容可以发现两次拟合的 r-squared 的值分别为0999 36、0999 66,这也充分说明了程序给出的可视化图像是足够准确的。不仅如此,代码运行后生成的窗体还支持光标获取曲线上任意点的数值,这对数据分析和实验结果的理解也是大有裨益。根据处理后的图像显示,当/0在 1 附近时,产生共振现象(振幅达到最大值,相位差=90)。表 1 为测得的相应实验数据。表 1 受迫振动 实验数据/00970652509716826097270270974763009778232098297400987119500994137690999147871002144991006136113101698137102572149103558155104250159104547161201大学物理实验2022 年12Python 线性拟合以电介质介电常数测量 实验为例利用电桥法测量固体材料的介电常数 r,测得固体电介质样品直径 d,电介质面积 s=d2/4,电介质厚度 l,电容极板面积 s0=2 158 mm2,极板间距 D=5000 mm。C串=r0s/l+r(Dl)表示样品面积范围内电容和空气层电容串联得到的电容量;C0=0s/D 表示以空气为介质所对应的电容量;C分表示测量时引线及系统引发的分布电容之和;C边表示固体电介质面积以外的板极电容量和边界电容量之和。当极板间介质为空气和固体电介质时,分别测量其电容,两次测量过程中保持极板间距和系统状态不变,故以空气为介质下的电容量 Cair可以表示为 Cair=C0+C边+C分,放入固体电介质下的电容量 Cr可以表示为 Cr=C串+C边+C分。处理一下,可以得到固体电介质相对介电常数 r的表达式如下:r=l(CrCair+0s/D)/0s(CrCair+0s/D)(Dl)为了减小实验误差,采用多次测量取平均值的方法对相关参数进行测量,表 2 为测得的相应实验数据。在测量计算空气介电常数和系统分布电容过程中,不断增加极板间距并测量其相应的电容量,表 3 为测得的相应实验数据。表 2固体电介质介电常数测量的实验数据测量次数d/mml/mmCair/pFCr/pF144383368187721422445233241875214434458333918862159均值4449334418792148表 3空气介电常数和系统分布电容测量的实验数据D/mm100110120130140150160170180190C/pF3312315630182911281627142638257225142460由电磁学知识可知:C=0s0D+C分,其中 s0为电容极板面积,D 为平行极板间距。因此空气电容 C 和平行板间距倒数 1/D 应当满足斜率为 0s0,截距为 C分的线性关系。若采用传统的手绘作图法来求解待测量 0,极易因为绘制粗糙、显示范围不准确、特征数据点选取不合理等原因而导致较大的实验误差。因此为了结果的准确性,选择利用 Python 及其扩展库对已有的数据进行线性拟合的方法,对于学生们来说即可靠又十分便捷。以下给出相关代码并对关键处给出注释:import matplotlibpyplot as pltfrom scipy import statsimport numpy as npx=x_=100,110,120,130,140,150,160,170,180,190y=3312,3156,3018,2911,2816,2714,2638,2572,2514,2460for i in x_:xappend(1/i)#建立线性拟合模型slope,intercept,r,p,std_err=stats linregress(x,y)def myfunc(x):return slope*x+interceptmodel=list(map(myfunc,x)#获取线性拟合后的各项系数并在控制台输出coef=nppolyfit(x,y,1)print(“各项系数为:”,coef)print(r)pltscatter(x,y)pltplot(x,model,label=Linear Fitting)pltlegend()#对 x 轴,y 轴进行标签name_x=pltxlabel(d(mm)name_y=pltylabel(C(pF)#显示pltshow()d/mm图 2 电介质介电常数测量 中对测量数据线性拟合分析301第 6 期牛相宏,等:Python 语言在大学物理实验数据分析中的应用如图 2 所 示,得 到 线 性 拟 合 的 结 果。r-squared=0999 8,说明拟合效果非常好。同时可以在控制台上得到输出的关于线性拟合的系数分别为 18089、15109,即 0s0=1809,C分=1511。据此可以求得 0=8382103pF/mm,将 0带入r的表达式中,求得固体电介质的相对介电常数r=4157。将这一数据和手绘作图得到的固体电介质相对介电常数 4266 相比,差距明显,这是因为手动拟合人为不可控因素过多导致的较大误差,精度远远不及计算机拟合的高精度。从结果上看,利用 Python 及其自带的扩展库对实验数据进行拟合,不仅节约时间、提高准确率,并且在精确度上也有极大的提升。13Python 对数拟合以热敏电阻和温差电动势的测量 实验为例在一些物理实验中,所关注的物理量和待测量之间可能既不存在线性关系也不存在多项式关系的情况,如果直接对实验数据进行处理可能会造成结果失真。当所求物理量和待测量之间仅存在指数关系时,依据对数分析则可以简化处理过程,起到事半功倍的效果。在 热敏电阻和温差电动势的测量 实验中,采用负温度系数