def laguerre(n, a, x): """Laguerre polynomial L_n^(a)(x) as defined on A&S p. 775.""" return sum(choose(n + a, n - m) * (-x) ** m / fact(m) for m in range(0, n + 1))
def matrix(m, n, L): if m > n: return matrix(n, m, -L) else: return (exp(-g) * g ** (n - m) * fact(m)/fact(n)) ** 0.5 * \ laguerre(m, n - m, g) * sgn(L) ** (n - m)
def choose(n, k): """Choose function, n choose k.""" return fact(n, n - k) / fact(k)