PHYSICALEXPERIMENTOFCOLLEGE
大学物理实验
Vol.32No.3Jun.2019
文章编号:1007 ̄2934(2019)03 ̄0112 ̄04
基于Python的牛顿环实验数据拟合及分析方法
马天成ꎬ李全彬∗
(江苏师范大学物理与电子工程学院ꎬ江苏徐州 221116)
摘
Python的第三方库对牛顿环实验数据进行拟合分析ꎬ利用numpy进行数据的预处理和不确定度的计算ꎬ利用scikit ̄learn建立线性回归模型拟合数据并求解ꎬ最后利用matplotlib绘制图像实现数据的可视化ꎮ本方法能快速处理实验数据ꎬ绘制拟合曲线并输出相对不确定度ꎬ形象而又直观ꎬ对牛顿环实验数据的分析和处理有很好的辅助作用ꎮ关
键
词:pythonꎻ牛顿环ꎻ拟合ꎻ一元线性回归ꎻ不确定度
文献标志码:A
DOI:10.14139/j.cnki.cn22 ̄1228.2019.03.028
中图分类号:O4 ̄39
要:牛顿环实验是经典的大学物理实验ꎬ其实验数据量大ꎬ手工计算非常容易出错ꎮ基于
牛顿环是牛顿发现的一种薄膜干涉现象ꎮ当一个曲率很大的凸透镜的凸面紧贴平滑的玻璃时ꎬ凸透镜和玻璃之间形成两边厚而中间薄的空气薄膜ꎬ经单色光垂直入射凸透镜平表面ꎬ便会产生明暗相间、间距随中心点的距离而逐渐变窄的同心牛顿环ꎮ作为经典的光学实验ꎬ牛顿环实验被广泛收录于各大学物理实验ꎬ但是其数据量大、数据计算复杂等问题也影响着此实验的数据处理效率ꎮ因此ꎬ使用计算机处理实验数据进而达到化难为易、缩减时间的目的ꎬ显得尤为重要ꎮ
赵昆涛[1]利用Python的PyqQt模块设计了图形用户界面让实验数据录入更加直观ꎬ但是在分析数据不确定度时ꎬ仅考虑了A类不确定度而忽略了B类不确定度的影响ꎻ徐海英[2]使用Origin7.0得到了相关性很强的拟合结果ꎬ但是代码可读性不高ꎬ不易让人准确理解ꎮ徐少刚[3]利用Matlab对牛顿环数据进行处理ꎬ但Matlab在物理教育学生中并不十分普及ꎬ软件门槛相对较高ꎮ郭晓春[4]使用Excel实现了对数据的线性拟合ꎬ但还需手动计算不确定度ꎬ没有明显减轻计算量ꎮ
利用Python的第三方机器学习库scikit ̄learn来处理牛顿环实验的数据ꎬ并通过matplotlib库实现数据及其分析结果的可视化ꎮ
对象的高级程序设计语言ꎬ其设计风格优雅ꎬ功能丰富ꎬ使得初学者也很容易入门ꎮ此外ꎬ该软件采用开源设计ꎬ具有丰富的专用第三方库和众多开源科学计算软件包的接口ꎬ已经成为应用于科学计算、数据库、网络工程、GUI设计等多领域的高级语言ꎮ
采用Python的numpyꎬscikit ̄learn和matplotlib三个第三方库ꎮnumpy是一个开源的、高性能的数值计算库ꎬ提供快速高效的数组矩阵运算ꎮ将牛顿环的实验数据全部通过该库转化为数组格式ꎬ避免了循环语句的使用ꎬ简化了处理的难度ꎮscikit ̄learn是Python的机器学习库ꎬ是用于数据挖掘、数据分析的工具ꎬ通过数据训练ꎬ可以轻松实现数据的拟合回归预测、聚类、模型选取等复杂算法ꎮ采用其中的一元线性回归模型来完成牛顿环实验数据的拟合ꎮmatplotlib是Python经典的二维画图库ꎬ可以简单地画出折线图ꎬ柱状图ꎬ散点图等各类二维图像ꎬ应用该库实现数据的可视化ꎮ
2 实验原理及不确定度分析
2.1 实验原理
牛顿环是光等厚干涉的典型实验ꎮ当一束单色平行光垂直入射时ꎬ形成明暗相间的干涉条纹ꎮ实验中是对暗纹进行测量ꎬ根据波动光学的知识ꎬ产生暗纹的条件和平凸透镜曲率半径的几何关系
1 工具介绍
Python[5]是由GuidovanRossum创造的面向
收稿日期:2019 ̄12 ̄10
基金项目:江苏高校优势学科建设工程资助项目(PAPD)ꎻ2016年江苏省教育科学“十三五”规划课题(C ̄a/2016/01/09)ꎻ江苏省
高校自然科学基金项目(BK20171166)ꎻ2015年江苏省高等教育教改研究课题(2015JSJG157)
∗通讯联系人
基于Python的牛顿环实验数据拟合及分析方法
113
可知[6]:
R=
一元线性回归模型y=a+bxꎬ设x=kꎬy=D2kꎬ有b=4λRꎬ则:
bR=(3)4λ
实验中采用钠光灯作为光源ꎬ波长λ=589.3nmꎮ只要拟合出以环数k为x轴、以第k环直径的平方D2k为y轴的数据的斜率bꎬ即可求出凸透镜的曲率半径Rꎮ2.2 不确定度分析
牛顿环实验数据的不确定度包括A类不确定度和B类不确定度ꎮ
(1)不确定度的A类分量由实验标准差表征ꎬ参考文献[7]给出了一元线性回归的方差估计公式:
1n
e2=∑i=1(yi ̄yi)2(4)
n ̄2UA=e2(5)式子中n-2为自由度ꎮ
(2)不确定度的B类分量大体上认为由两个因素导致ꎬ分别为单次测量而引入的仪器误差限Δ仪所导致的不确定度UB1和测量过程中条纹的定位精度所引入的不确定度UB2ꎮ由参考文献[8]可知:
Δ仪
UB1=(6)
3(((4kλ即:
=4λRkD2k
D2k
(1)(2)
1
(Emax+Emin)ꎬEmax、Emin为测量范围2
中最大环与最小环的条纹宽度
(3)合成不确定度为Uyꎬ即:
其中e=
Uy=UB12+UB22(8)(4)设拟合出的斜率的不确定度为Ub:
Uy
Ub=(9)
2
(Xi ̄x)
(5)曲率半径的不确定度为UR:
Ub=UR(10)4λ
最后结果为:R=R±URꎬ相对不确定度为:
UR
ER=×100%(11)
R
UB2=
1e3
(7)
3 实现过程
3.1 软件环境配置
本方法在Win10操作系统上实现ꎬ基于Py ̄thon3.6版本ꎬ并利用Python自带的安装第三方库工具pip安装numpyꎬmatplotlib和scikit ̄learn三个库ꎮ
3.2 实现框图
首先录入牛顿环实验数据ꎬ再用numpy进行数据的预处理ꎬ然后调用scikit ̄learn建立线性回归模型并求解ꎬ最后用numpy分析不确定度并用matplotlib画出图像ꎮ实现框图如图1所示ꎮ
图1 实现框图
3.3 实现代码
(1)导入第三方库:importnumpyasnp
importmatplotlib.pyplotaspltfromsklearnimportlinear_model
(2)输入数据ꎬ使用numpy的array()函数把数据转化成行向量ꎬ再用reshape()函数把行向量转化为列向量ꎬ从而满足sklearn中线性回归模型只接收列向量的要求ꎮ
d_left=np.array([])
d_right=np.array([]) #从第一环开始输入数据ꎬ数据用逗号隔开
y=(d_left ̄d_right)∗∗2
x=np.arange(3ꎬ22).reshape(-1ꎬ1)y=np.array(y).reshape(-1ꎬ1)
(3)定义scikit ̄learn库的线性回归模型lrmodel=linear_model.LinearRegression()
(4)利用线性回归模型的fit()函数进行数据训练:
lrmodel.fit(xꎬy)
114
基于Python的牛顿环实验数据拟合及分析方法
表2 牛顿环实验数据第二组
环数345678109
d左/mmd右/mm35.34435.52835.68935.82035.91136.09036.21036.31932.66032.48932.33532.19032.06531.92831.81331.694环数1314151617181920d左/mmd右/mm36.62536.72236.80836.91036.98437.07037.15037.23031.39531.30031.21531.12231.02430.99830.87030.780(5)求解模型并用result、b接收拟合出来的结果:
result=lrmodel.predict(x)#线性回归模型拟合出的数值
b=lrmodel.coef_#斜率
R=b/(4∗589.3e ̄6) #r为求得的曲率半径
(6)利用numpy的矩阵运算函数进行不确定度分析:
ne_2=u_B1=y.size
np.sum((y ̄result)∗∗2)u_B2=0.001/np.sqrt(3)#/(n-2)#方差合成不确定度u_y==np.sqrt(e_20.04/6#不确定度不确定度B1+u_B1∗∗2B2
+u_B2∗∗2)#∗∗2)) u_b=u_yU/np.sqrt(y
np.sum((x ̄np.mean(x))不确定度u_R=u_b#斜率的不确定度/(4∗589.3e ̄6)Ub
#曲率半径的E_Rprint(\"=Uu_RR
/R#百分差(7)E_R=%f\"%E_R)plt.figure()
画图出实验数据的散点图
plt.scatter(xꎬyꎬlabel=”truevalue”) #画#画出拟合直线
plt.plot(xꎬresultꎬ”r”ꎬlabel=”predictvalue”) #在图上方标出数据
plt.title(“b=%f R=%.2fmm”%(bꎬR)) plt.xlabel(“k”)#xplt.ylabel(“D^2”)#y轴名称plt.legend() plt.show()
#显示示例轴名称4 实验结果
两组实验数据见表1、表2ꎮ
表1 牛顿环实验数据第一组
环数d左/mmd右/mm环数d左/mmd右/mm3419519.1620619.49816.4311320.7211515.719.66281416.14820.94415.272151620.81215.24215020.15.1289981720.14.06110920.07915.1821.89414.1120.20521815.8691921.97905014.98512
20.42615.7566482021.21.15114.90082820..524620
15.53615..458349
21
21.241.288308
14.74214..671600
11123636..420532
3131..591489
21
37.320
30.710
数据拟合结果如图2和图3所示ꎮ
图2 第一组数据
图3 第二组数据
利用逐差法[3]计算第一、二组数据的百分差分别为1.08%、0.552%ꎬ可见第二组的数据精确ꎮ实验(0.404%)数据表(0.702%)ꎬ小明于第第二一组组数数据据的的相相对对不不确确定定度度确ꎮ由图也大致可以看出也说明第二组数据要比第一组数据精ꎬ图3直线的拟合度的确高于图2ꎮ利用相对不确定度大小的比较或拟合直线的形态即可评估牛顿环实验数据的优劣ꎬ相对不确定度小的数据为优ꎬ相对不确定度大的数据为劣ꎮ
基于Python的牛顿环实验数据拟合及分析方法
115
5 结 论
利用Python软件ꎬ借助一元线性回归模型对牛顿环实验数据进行拟合ꎬ绘制拟合曲线并计算不确定度ꎬ实现了牛顿环实验数据的可视化分析ꎮ消除了手动计算耗时较长ꎬ易出错的弊端ꎮ将本代码移植到移动终端上运行ꎬ为实验数据处理提供更灵活更便利的条件ꎮ参考文献:
[1] 赵昆涛.Python语言在牛顿环实验数据处理中的应[2] 徐海英ꎬ唐曙光ꎬ阚彩侠ꎬ等.逐差法和Origin7.0软
件在牛顿环实验数据处理中的比较[J].大学物理用[J].物理与工程ꎬ2016ꎬ26(4):83 ̄85+91.
[3] 徐少刚ꎬ夏雪琴.Matlab软件在牛顿环实验数据处理[4] 郭晓春.逐差法和Excel在牛顿环实验数据处理中[5] Python.AboutPythonTM[EB/OL].https://www.[6] 徐红ꎬ宋蓓ꎬ王海军ꎬ等.牛顿环曲率半径测量的多[7] 史彭ꎬ王占民.一元线性回归的不确定度评定方法[8] 李平.牛顿环实验数据处理方法的回顾与讨论[J].
物理与工程ꎬ2002(2):31 ̄33+62.(1):82 ̄85.2014ꎬ33(4):26 ̄30.
python.org/about/ꎬ2018 ̄10 ̄17.
的比较[J].大学物理实验ꎬ2017ꎬ30(1):128 ̄130.97 ̄99.
实验ꎬ2015ꎬ28(1):99 ̄100.
方法上的创新[J].大学物理实验ꎬ2014ꎬ27(5):
种数据处理方法[J].延安大学学报(自然科学版)ꎬ
[J].西安建筑科技大学学报(自然科学版)ꎬ2000
TheMethodofDataFittingandUncertaintyAnalysisinNewtonRingsExperimentBaesedonPython
MATianchengꎬLIQuanbin∗
(CollegeofPhysicsandElectronicsEngineeringꎬJiangsunormaluniversityꎬXuzhou221116ꎬChina)
Abstract:Newtonringsexperimentisaclassicuniversityphysicsexperiment.Itsexperimentaldataislargeꎬmanualcalculationisoftenerrorprone.InordertocontributetosimpledataprocessingofNewtonringsexperi ̄ontheexperimentaldatabasedonthethird ̄partyfunctionlibrariesofpythonꎬdatapreprocessingandcalcula ̄assolvetheequationandusingmatplotlibtoachievedatavisualization.Keywords:pythonꎻNewton’sringsꎻfittingꎻunarylinearregressionꎻuncertainty
mentandavisualrepresentationoftheresultofthatꎬthereisaconvenientmethodcomposedoffittinganalysistionontheuncertaintybynumpyꎬestablishingalinearregressionmodelwithscikit ̄learntofitthedataaswell
因篇幅问题不能全部显示,请点此查看更多更全内容