我在Python中绘制了一些实验数据,需要找到数据的立方拟合。我需要这样做的原因是因为立方体拟合将用于去除背景(在这种情况下是二极管中的电阻),您将留下明显的特征。这是我目前用于使立方体拟合的代码,其中Vnew和yone代表实验数据的数组。
answer1=raw_input ('Cubic Plot attempt?\n ')
if answer1 in['y','Y','Yes']:
def cubic(x,A):
return A*x**3
cubic_guess=array([40])
popt,pcov=curve_fit(cubic,Vnew,yone,cubic_guess)
plot(Vnew,cubic(Vnew,*popt),'r-',label='Cubic Fit: curve_fit')
#ylim(-0.05,0.05)
legend(loc='best')
print 'Cubic plotted'
else:
print 'No Cubic Removal done'
我对曲线平滑有所了解,但仅在理论上。我不知道如何实现它。我真的很感激任何帮助。
以下是目前为止生成的图表:
答案 0 :(得分:0)
为了使拟合的曲线“更宽”,您需要寻找外推法。虽然在这种情况下,您可以让Vnew
覆盖更大的间隔,在这种情况下,您可以将其放在plot
命令之前:
Vnew = numpy.linspace(-1,1, 256) # min and max are merely an example, based on your graph
plot(Vnew,cubic(Vnew,*popt),'r-',label='Cubic Fit: curve_fit')
"消隐"您看到的功能可以通过numpy's masked arrays完成,但也可以通过从原始Vnew
中移除您不想要的那些元素(我将调用xone
)和yone
:
mask = (xone > 0.1) & (xone < 0.35) # values between these voltages (?) need to be removed
xone = xone[numpy.logical_not(mask)]
yone = yone[numpy.logical_not(mask)]
然后重做曲线拟合:
popt,_ = curve_fit(cubic, xone, yone, cubic_guess)
这只适用于实际存在的数据(不是数据集中的许多点,从它的外观来看,所以要小心!)。