37 lines
955 B
Python
Executable File
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) |