def initial_values(self, tol=1e-10):
"""
Generate initial values by doing fixed point
iterations to solve for alpha
"""
n, a, b = self.n, self.a, self.b
if abs(b) < 1e-10:
alpha = inv_psi(a / n)
else:
alpha = 1.
z = tol + 1.
while abs(z) > tol:
z = n * psi(alpha) - \
b / numpy.clip(alpha, 1e-300, 1e300) - a
alpha -= z / (n * d_approx_psi(alpha) - b
/ (alpha ** 2 + 1e-300))
alpha = numpy.clip(alpha, 1e-100, 1e300)
return numpy.clip(alpha - 1 / (n + 1e-300), 1e-100, 1e300), \
alpha + 1 / (n + 1e-300), alpha
评论列表
文章目录