sh_legendre#
- scipy.special.sh_legendre(n, monic=False)[source]#
Shifted Legendre polynomial.
Defined as \(P^*_n(x) = P_n(2x - 1)\) for \(P_n\) the nth Legendre polynomial.
- Parameters:
- nint
Degree of the polynomial.
- monicbool, optional
If True, scale the leading coefficient to be 1. Default is False.
- Returns:
- Porthopoly1d
Shifted Legendre polynomial.
Notes
The polynomials \(P^*_n\) are orthogonal over \([0, 1]\) with weight function 1.
Examples
The shifted Legendre polynomials \(P_n^*\) are related to the non-shifted polynomials \(P_n\) by \(P_n^*(x) = P_n(2x - 1)\). We can verify this on the interval \([0, 1]\):
>>> import numpy as np >>> from scipy.special import sh_legendre, legendre >>> from scipy.integrate import trapezoid >>> x = np.arange(0.0, 1.0, 0.01) >>> n = 3 >>> np.allclose(sh_legendre(n)(x), legendre(n)(2*x - 1)) True
The polynomials \(P_n^*\) satisfy a recurrence relation obtained by the change of variables \(t = 2x - 1\) in the standard Legendre recurrence:
\[(n+1) P_{n+1}^*(x) = (2n+1)(2x-1)\,P_n^*(x) - n\,P_{n-1}^*(x).\]This can be easily checked on \([0, 1]\) for \(n = 3\):
>>> n = 3 >>> x = np.linspace(0.0, 1.0, 101) >>> lhs = (n + 1) * sh_legendre(n + 1)(x) >>> rhs = ( ... (2*n + 1) * (2*x - 1) * sh_legendre(n)(x) ... - n * sh_legendre(n - 1)(x) ... ) >>> np.allclose(lhs, rhs) True
Orthogonality over \([0,1]\) with weight 1 can be checked numerically; for example, \(P_2^*\) is orthogonal to \(P_3^*\):
>>> x = np.linspace(0.0, 1.0, 400) >>> y = sh_legendre(2)(x) * sh_legendre(3)(x) >>> np.isclose(trapezoid(y, x), 0.0, atol=1e-12) True