Source code for sympy.functions.special.spherical_harmonics

from sympy import C, pi, I
from sympy.core import Dummy, sympify
from sympy.functions import legendre, assoc_legendre
from sympy.functions.elementary.miscellaneous import sqrt

Pl = legendre
Plm= assoc_legendre

_x = Dummy("x")

[docs]def Plmcos(l, m, th): """ Plm(cos(th)). """ l = sympify(l) m = sympify(m) sin = C.sin cos = C.cos P = Plm(l, m, _x).subs(_x, cos(th)) # assume th in (0,pi) => sin(th) is nonnegative _sinth = Dummy("_sinth", nonnegative=True) P = P.subs(1-cos(th)**2, _sinth**2).subs(_sinth, sin(th)) return P
[docs]def Ylm(l, m, theta, phi): """ Spherical harmonics Ylm. Examples ======== >>> from sympy import symbols, Ylm >>> theta, phi = symbols("theta phi") >>> Ylm(0, 0, theta, phi) 1/(2*sqrt(pi)) >>> Ylm(1, -1, theta, phi) sqrt(6)*exp(-I*phi)*sin(theta)/(4*sqrt(pi)) >>> Ylm(1, 0, theta, phi) sqrt(3)*cos(theta)/(2*sqrt(pi)) """ l, m, theta, phi = [sympify(x) for x in (l, m, theta, phi)] factorial = C.factorial return sqrt((2*l+1)/(4*pi) * factorial(l-m)/factorial(l+m)) * \ Plmcos(l, m, theta) * C.exp(I*m*phi)
[docs]def Ylm_c(l, m, theta, phi): """Conjugate spherical harmonics.""" return (-1)**m * Ylm(l, -m, theta, phi)
[docs]def Zlm(l, m, th, ph): """ Real spherical harmonics. """ from sympy import simplify if m > 0: zz = C.NegativeOne()**m*(Ylm(l, m, th, ph) + Ylm_c(l, m, th, ph))/sqrt(2) elif m == 0: return Ylm(l, m, th, ph) else: zz = C.NegativeOne()**m*(Ylm(l, -m, th, ph) - Ylm_c(l, -m, th, ph))/(I*sqrt(2)) zz = zz.expand(complex=True) zz = simplify(zz) return zz