PtolemyGUI/Raphael/assLegendreP.py

37 lines
955 B
Python
Executable File

#!/usr/bin/env python3
import numpy as np
def associated_legendre_array(maxL, maxM, theta_deg):
# Convert theta from degrees to radians
theta = np.radians(theta_deg)
x = np.cos(theta)
P = np.zeros((maxL + 1, maxM + 1))
# P^m_l for m = 0, l = 0
P[0, 0] = 1.0
# P^m_l for m = 0, l > 0
for l in range(1, maxL + 1):
P[l, 0] = ((2*l - 1) * x * P[l-1, 0] - (l - 1) * P[l-2, 0]) / l
# P^m_l for m > 0 (using recursion)
for m in range(1, maxM + 1):
# P^m_m
P[m, m] = (1 - 2*m) * P[m-1, m-1]
P[m, m] *= np.sqrt(1 - x**2)
for l in range(m + 1, maxL + 1):
# P^m_l for m < l
P[l, m] = ((2*l - 1) * x * P[l-1, m] - (l + m - 1) * P[l-2, m]) / (l - m)
return P
# Example usage
# L = 15 # Maximum l degree
# M = 3 # Maximum m order
# legendre_polynomials = associated_legendre_array(L, M, 10)
# print(legendre_polynomials)