Compute associated Legendre polynomials.
(r, nind)
| 1876 | |
| 1877 | |
| 1878 | def _tabular_legendre(r, nind): |
| 1879 | """Compute associated Legendre polynomials.""" |
| 1880 | r_n = np.sqrt(np.sum(r * r, axis=1)) |
| 1881 | x = r[:, 2] / r_n # cos(theta) |
| 1882 | L = list() |
| 1883 | for degree in range(nind + 1): |
| 1884 | L.append(np.zeros((degree + 2, len(r)))) |
| 1885 | L[0][0] = 1.0 |
| 1886 | pnn = np.ones(x.shape) |
| 1887 | fact = 1.0 |
| 1888 | sx2 = np.sqrt((1.0 - x) * (1.0 + x)) |
| 1889 | for degree in range(nind + 1): |
| 1890 | L[degree][degree] = pnn |
| 1891 | pnn *= -fact * sx2 |
| 1892 | fact += 2.0 |
| 1893 | if degree < nind: |
| 1894 | L[degree + 1][degree] = x * (2 * degree + 1) * L[degree][degree] |
| 1895 | if degree >= 2: |
| 1896 | for order in range(degree - 1): |
| 1897 | L[degree][order] = ( |
| 1898 | x * (2 * degree - 1) * L[degree - 1][order] |
| 1899 | - (degree + order - 1) * L[degree - 2][order] |
| 1900 | ) / (degree - order) |
| 1901 | return L |
| 1902 | |
| 1903 | |
| 1904 | def _sp_to_cart(cos_az, sin_az, cos_pol, sin_pol, b_r, b_az, b_pol): |
no test coverage detected