【发布时间】:2021-11-07 11:06:50
【问题描述】:
我的教授向我们发送了这段代码,用作拟合曲线或您想要拟合的任何函数的事实。即使写入函数类型是线性的函数,我也看不到没有方程可以在拟合的函数中表达它。有人可以帮我在已经编写的代码中实现这个等式吗?对我来说很好。我已经尝试实现代码,可能在 try except 块之后执行 finally 调用,但没有任何效果。这是教授发给我的代码:
def fit_pesato(x,y,yerr):
#N.B.: la funizione utilizza come formula della retta y=a+bx !
if len(x)!=len(y) or len(yerr)!=len(y):
raise Exception("Le liste di input non sono della stessa lunghezza!")
try:
chi_quadro = 0
y_err2 =[i**2 for i in yerr]
W,Y,X = 0,0,0
XX, XY= 0,0
for i in range(len(x)):
W += 1/y_err2[i]
X += x[i]/y_err2[i]
Y += y[i]/y_err2[i]
XX += (x[i]**2)/y_err2[i]
XY += (x[i]*y[i])/y_err2[i]
delta = W*XX-(X**2)
A_mc = (XX*Y-X*XY)/delta
B_mc = (W*XY-X*Y)/delta
sigmaAmc=np.sqrt(XX/delta)
sigmaBmc=np.sqrt(W/delta)
for i in range(len(x)):
chi_quadro += ((y[i]-A_mc-x[i]*B_mc)/yerr[i])**2
return ['A_mc:',A_mc,'B_mc:',B_mc,'sigmaA:', sigmaAmc,'sigmaB:', sigmaBmc,'chi^2:', chi_quadro]
except ZeroDivisionError:
return ['A_mc:',None,'B_mc:',None, 'sigmaA:', None,'sigmaB', None,'chi^2:',None]
#questa ultima linea di codice serve a fornire un risultato in casi
【问题讨论】:
-
似乎实施了卡方检验的拟合优度。因此它不适合函数,它会比较是否可能从参考中得出拟合。要使用此测试,您需要将观察值和参考值排列在足够填充的存储桶中。这种测试的基本假设是桶内的正常偏差。
-
感谢您的回答!我只是想知道如何实现一行代码来获取适合的参数作为输出
-
这个问题需要SSCCE。请参阅How to ask a good question。始终提供带有代码、数据、错误、当前输出和预期输出的完整minimal reproducible example,如formatted text。如果相关,只有绘图图像是可以的。如果您不包含 mre,则该问题可能会被否决、关闭和删除。
-
非常感谢,我会更仔细地研究一下
-
仔细阅读您的测试,似乎它同时执行线性回归和卡方检验。返回的字典包含函数 y = Bx + A 的 A 和 B 系数。
标签: numpy matplotlib data-analysis curve-fitting scipy-optimize