def weighted_least_squares(X,Y,W):
'''
Initialize power law fit
EPS = 1e-10
use = (X>EPS)&(Y>EPS)
weighted_least_squares(np.log(X+EPS)[use],np.log(Y+EPS)[use],1/(EPS+X[use]))
Parameters
----------
X: List of distances
Y: List of amplitudes
W: Weights for points
Returns
-------
result : object
Optimization result returned by scipy.optimize.minimize. See
scipy.optimize documentation for details.
'''
X = np.float64(X)
Y = np.float64(Y)
def objective(ab):
a,b=(a,b)
return np.sum( W*(Y-(X*a+b))**2)
a,b,_,_,_ = linregress(X,Y)
result = minimize(objective,[a,b])
if not result.success:
print(result.message)
warnings.warn('Optimization failed: %s'%result.message)
return result
评论列表
文章目录