@ -47,16 +47,29 @@ def linregr2d_SZ(x, y, sigma=None):
detinv = 1.0 / ( d11 * d22 - d12 * d21 )
a = ( e1 * d22 - e2 * d12 ) * detinv
b = ( e2 * d11 - e1 * d21 ) * detinv
# Shiwei's old method of computing the uncertainty of the
# y-intersect (sigma_a):
varsum = sum ( ( xx * d11 - d12 ) * * 2 * ww )
var = varsum * detinv * * 2
sigma = sqrt ( var )
# New method based on NR chapter: sqrt(sigma_a2) must give
# identical result to sigma or else something is screwy!
sigma_a2 = d12 * ( - detinv )
sigma_b2 = d21 * ( - detinv )
print sigma_a2
print sigma_b2
return fit_result (
fit_method = ' linregr2d_SZ ' ,
fit_model = ' linear ' ,
a = a ,
b = b ,
sigma = sigma ,
sigma_a = sqrt ( sigma_a2 ) ,
sigma_b = sqrt ( sigma_b2 ) ,
)
@ -70,7 +83,9 @@ def Test_1():
' b ' : - 0.82241012516149792 ,
' fit_method ' : ' linregr2d_SZ ' ,
' fit_model ' : ' linear ' ,
' sigma ' : 0.00048320905704467775 }
' sigma ' : 0.00048320905704467775 ,
' sigma_a ' : 0.00048320905704467786 ,
' sigma_b ' : 0.080335909573397646 }
My wlinreg tool ( via ' dtextrap ' shell script alias gives :
@ -88,6 +103,7 @@ def Test_1():
a = - 1392.31823569246 + / - 0.000460341146124978 = - 1392.31824 ( 46 )
b = - 0.822098515674071 + / - 0.0803118207916705 = - 0.822 ( 80 )
which is close enough for this purpose !
"""
from wpylib . text_tools import make_matrix as mtx
M = mtx ( """