首页 > 解决方案 > 有没有一种算法可以用来计算拟合线斜率的不确定性?

问题描述

因此,我最近进行了一项实验,任务是确定斯涅尔定律实验中反射角和折射角之间的关系。目标是通过绘制 Sin(theta_incident) 与 Sin(theta_refracted) 图并将一条线拟合到该图来确定丙烯酸介质的折射率。

inc_ang = [0,11,20.5,30.5,40.5,51,61,71.5]
ref_ang = [0,7.3,12,20,26,31.5,36,39.8]
inc_rad = np.radians(inc_ang)
ref_rad = np.radians(ref_ang)


# Data points 
y = []
x = []

#Evaluate each angle via for loop
for i in range(0,len(inc_ang)):
     y.append(np.sin(inc_rad[i]))


for j in range(0,len(ref_ang)):
     x.append(np.sin(ref_rad[j]))

我使用这段代码来评估实验中的每个角度

现在,我还导入了与实验中测量的每个角度相关的不确定性,并传播了每个评估条目的误差。

# Uncertainties for the refracted and reflected angles
uncer_refr = [1,0.5,0.5,0.5,1.5,1.5,2,2]
uncer_ref = [1,1,1,1,1,1,1.5,1.5]


# compute the propagated errors associated with the refracted angles
prop_refr = []

for i in range(0,len(ref_rad)):
    prop_refr.append(np.cos(np.deg2rad(ref_rad[i]))*(uncer_refr[i]*np.pi/180))

# compute the propagated errors associated with the reflected angles
prop_ref = []

for i in range(0,len(ref_rad)):
    prop_ref.append(np.cos(np.deg2rad(ref_rad[i]))*(uncer_ref[i]*np.pi/180))

计算出不确定性后,我使用 polyfit 生成一条线,然后用误差线和拟合线绘制数据点

# first order polynomial fit 
p = np.polyfit(x,y,1)

#plot the data points with error bars along with a fitted line
plt.plot(x,y,'go')
plt.ylabel('$\\sin(\\theta_{in})$',fontsize=18)
plt.xlabel('$\\sin(\\theta_{refr})$',fontsize=18)
plt.plot(x,np.polyval(p,x))
plt.errorbar(x,y,yerr=prop_ref,markersize=8,fmt='o',color='k',mfc='red',mec='k', elinewidth=2, capsize=6, mew=1.4,zorder=10)
plt.title('$\\sin(\\theta_{in}) \\quad ' 'vs.' '\\quad \\sin(\\theta_{refr})$',fontsize = 16)
plt.grid()
plt.show()

在大多数情况下,一切都按预期进行,但我仍然需要确定折射率(斜率)的不确定性。我可以用笔和纸手动执行此操作,但我想看看这里是否有人知道我如何设置某种算法来找到斜率的不确定性。

还值得注意的是,我绘制了反射角,而不是情节标题所说明的事件与反射角。我这样做是因为入射角没有任何相关的不确定性,而且我不确定如何通过这种方式传播错误。

对于粗略的格式,我深表歉意,并且我确信有一种更简洁的方法可以完成所有这些 - 所以我也对任何替代方案持开放态度。谢谢!

标签: regressionuncertainty

解决方案


推荐阅读