bundles / scipy latest / scipy / special / _orthogonal / sh_legendre
function
scipy.special._orthogonal:sh_legendre
source: build-install/usr/lib/python3.14/site-packages/scipy/special/_orthogonal.py:3587
Signature
def sh_legendre(n, monic = False)Summary
Shifted Legendre polynomial.
Extended Summary
Defined as for the nth Legendre polynomial.
Parameters
n: intDegree of the polynomial.
monic: bool, optionalIf True, scale the leading coefficient to be 1. Default is False.
Returns
P: orthopoly1dShifted Legendre polynomial.
Notes
The polynomials are orthogonal over with weight function 1.
Examples
The shifted Legendre polynomials :math:`P_n^*` are related to the non-shifted polynomials :math:`P_n` by :math:`P_n^*(x) = P_n(2x - 1)`. We can verify this on the interval :math:`[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))✓
TrueThe polynomials :math:`P_n^*` satisfy a recurrence relation obtained by the change of variables :math:`t = 2x - 1` in the standard Legendre recurrence: .. math:: (n+1) P_{n+1}^*(x) = (2n+1)(2x-1)\,P_n^*(x) - n\,P_{n-1}^*(x). This can be easily checked on :math:`[0, 1]` for :math:`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)✓
TrueOrthogonality over :math:`[0,1]` with weight 1 can be checked numerically; for example, :math:`P_2^*` is orthogonal to :math:`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)
✗np.True_
See also
- scipy.special.legendre
- scipy.special.roots_sh_legendre
Aliases
scipy.special.sh_legendre