Skip to main content
torch.js has not been released yet.
torch.js logotorch.js logotorch.js
PlaygroundContact
Login
Documentation
IntroductionType SafetyTensor ExpressionsTensor IndexingEinsumEinopsAutogradTraining a ModelProfiling & MemoryPyTorch MigrationBest PracticesRuntimesPerformancePyTorch CompatibilityBenchmarksDType Coverage
airy_aibessel_j0bessel_j1bessel_y0bessel_y1chebyshev_polynomial_tchebyshev_polynomial_uchebyshev_polynomial_vchebyshev_polynomial_wentrerferfcerfcxerfinvgammaincgammaincchermite_polynomial_hhermite_polynomial_hei0ei1i1elaguerre_polynomial_llegendre_polynomial_plog_ndtrlogitmodified_bessel_i0modified_bessel_i1modified_bessel_k0modified_bessel_k1multigammalnndtrndtripolygammascaled_modified_bessel_k0scaled_modified_bessel_k1shifted_chebyshev_polynomial_tshifted_chebyshev_polynomial_ushifted_chebyshev_polynomial_vshifted_chebyshev_polynomial_wsincSpecialBinaryOptionsSpecialLogitOptionsSpecialPolynomialOptionsSpecialSoftmaxOptionsSpecialUnaryOptionsspherical_bessel_j0xlog1pyzeta
absacosacoshAdaptivePool1dShapeAdaptivePool2dShapeaddaddbmmAddbmmOptionsaddcdivAddcdivOptionsaddcmulAddcmulOptionsaddmmAddmmOptionsaddmvAddmvOptionsaddrAddrOptionsadjointallallcloseAllcloseOptionsAlphaBetaOptionsamaxaminaminmaxAminmaxOptionsangleanyapplyOutarangeare_deterministic_algorithms_enabledargmaxargminargsortargwhereas_stridedas_tensorasinasinhAssertNoShapeErrorAssertNotErrorAsStridedOptionsAtat_error_index_out_of_boundsatanatan2atanhatleast_1datleast_2datleast_3dAtShapeautocast_decrement_nestingautocast_increment_nestingautograd_gradient_mismatch_errorautograd_not_registered_errorAutogradConfigAutogradDeviceAutogradDTypeAutogradEntryAutogradHandleAutogradHandleImplAxesRecordBackwardFnbaddbmmBaddbmmOptionsbartlett_windowBaseKernelConfigbatch_dimensions_do_not_match_errorbernoulliBernoulliOptionsBinaryBackwardFnBinaryBroadcastResultBinaryDTypeBinaryKernelConfigCPUBinaryKernelCPUBinaryOpConfigBinaryOpNamesBinaryOpSchemaBinaryOptionsbincountBincountOptionsbitwise_andbitwise_left_shiftbitwise_notbitwise_orbitwise_right_shiftbitwise_xorblackman_windowblock_diagbmmBooleanDTypeRulebroadcast_error_incompatible_dimensionsbroadcast_shapesbroadcast_tensorsbroadcast_toBroadcastShapeBroadcastShapeRulebroadcastShapesbucketizeBucketizeOptionsBufferUsagebuildEinopsErrorbuildErrorMessagecanBroadcastTocartesian_prodcatCatOptionsCatShapeCauchyOptionscdistCdistOptionsceilceluCeluFunctionalOptionschain_matmulCheckShapeErrorCholeskyShapechunkchunk_error_dim_out_of_rangeChunkOptionsclampClampOptionsclear_autocast_cacheclearEinopsCacheclearEinsumCacheclonecolumn_stackcombinationsCombinationsOptionscompiled_with_cxx11_abicomplexconjconj_physicalcontiguousConv1dShapeConv2dShapeConv3dShapeConvTranspose2dShapecopysigncorrcoefcoscoshcount_nonzeroCountNonzeroOptionscovcoverage_reportcoverageReportCoverageReportCovOptionsCPUForwardFnCPUKernelConfigCPUKernelEntryCPUOnlyResultCPUTensorDatacreateCumExtremeResultcreateTorchCreationOpSchemaCumExtremeResultcummaxcummincumprodCumShapecumsumcumulative_trapezoidCumulativeOptionsCumulativeOptionsWithDimdeg2raddetachDeterministicOptionsDetShapeDevicedevice_error_requiresDeviceBufferDeviceCapabilitiesDeviceCheckedResultDeviceConfigDeviceContextDeviceEntryDeviceHandleDeviceInputDeviceOptionsDeviceRegistryDeviceTypediagdiag_embedDiagEmbedOptionsdiagflatDiagflatOptionsDiagFlatOptionsdiagonal_scatterDiagonalOptionsDiagonalScatterOptionsDiagOptionsDiagShapediffDiffOptionsdigammadimension_error_out_of_rangeDispatchConfigdistDistOptionsdivdotDotShapeRuleDoubleDoubleDimdropoutDropoutFunctionalOptionsdsplitdstackDTypedtype_already_registered_errordtype_components_mismatch_errordtype_not_found_errorDTypeComponentsDTypeConfigDTypeCoverageReportDTypeDisplayConfigDTypeEntryDTypeHandleDTypeHandleImplDTypeInfoDTypeRegistryDTypeRuleDTypeSerializationConfigDynamicShapeEigShapeeinops_error_ambiguous_decompositioneinops_error_anonymous_in_outputeinops_error_dimension_mismatcheinops_error_invalid_patterneinops_error_reduce_undefined_outputeinops_error_repeat_missing_sizeeinops_error_undefined_axiseinsumeinsum_error_dimension_mismatcheinsum_error_index_out_of_rangeeinsum_error_invalid_equationeinsum_error_invalid_sublist_elementeinsum_error_operand_count_mismatcheinsum_error_subscript_rank_mismatcheinsum_error_unknown_output_indexEinsumOptionsEinsumOutputShapeEllipsiseluelu_EluFunctionalOptionsembedding_bag_error_requires_2d_inputemptyempty_cacheempty_likeeqequalerferfcerfinvexpexp2expandexpand_asexpand_error_incompatibleExpandShapeexpm1ExponentialOptionseyeEyeOptionsfftFFTOptionsfindKernelWithPredicatefindSimilarPatternsflattenFlattenOptionsFlattenShapeflipflip_error_dim_out_of_rangefliplrFlipShapeflipudfloat_powerFloatDTypeRulefloorfloor_dividefmaxfminfmodformatEquationErrorformatShapefracfrexpfrombufferfullfull_likefunction_already_registered_errorFunctionConfigFunctionEntryFunctionHandlegathergather_error_dim_out_of_rangeGatherShapegcdgegeluGeometricOptionsget_autocast_cpu_dtypeget_autocast_gpu_dtypeget_autocast_ipu_dtypeget_autocast_xla_dtypeget_default_deviceget_default_dtypeget_deterministic_debug_modeget_device_configget_device_contextget_device_moduleget_dtype_infoget_file_pathget_float32_matmul_precisionget_num_interop_threadsget_num_threadsget_op_infoget_printoptionsget_real_dtypeget_rng_stategetAutogradgetDTypegetEinopsCacheSizegetEinsumCacheSizegetFunctiongetKernelgetMethodgetOpInfoGetOpKindGetOpSchemagetScalarKernelgluGluFunctionalOptionsGradContextGradFnGradientsForgtHalfHalfDimhamming_windowhann_windowhardshrinkhardsigmoidhardswishhardtanhhardtanh_HardtanhFunctionalOptionshas_autogradhas_devicehas_dtypehas_kernelhasAutogradhasDTypehasFunctionhasKernelhasMethodhasScalarKernelHasShapeErrorheavisidehistcHistcOptionshistogramHistogramOptionsHistogramResulthsplithstackhypoti0IdentityShapeifftimagindex_addindex_copyindex_fillindex_putindex_reduceindex_selectindex_select_error_dim_out_of_rangeIndexPutOptionsIndexSelectShapeIndexSpecIndicesOptionsIndicesSpecinitialize_deviceInputsForInsertDiminvalid_config_errorinverseInverseShapeirfftis_anomaly_check_nan_enabledis_anomaly_enabledis_autocast_cache_enabledis_autocast_cpu_enabledis_autocast_ipu_enabledis_autocast_xla_enabledis_complexis_complex_dtypeis_cpu_only_modeis_deterministic_algorithms_warn_only_enabledis_floating_pointis_floating_point_dtypeis_inference_mode_enabledis_nonzerois_tensoris_warn_always_enabledis_webgpu_availableIs2DIsAtLeast1DIsBinaryOpIsBinaryOpNameiscloseIscloseOptionsisfiniteisinisinfisnanisneginfisposinfisrealIsReductionOpIsReductionOpNameIsRegistryErrorIsShapeErroristftISTFTOptionsIsUnaryOpIsUnaryOpNameitem_error_not_scalarItemResultkaiser_windowKaiserWindowOptionskernel_not_registered_errorkernel_signature_mismatch_errorKernelConfigKernelConfigWebGPUKernelEntryKernelHandleKernelInfoKernelPredicateKernelRegistryKernelWebGPUkronkthvalueKthvalueOptionslcmldexpleleaky_reluleaky_relu_LeakyReluFunctionalOptionslerplevenshteinDistancelgammalinalg_error_not_square_matrixlinalg_error_requires_2dlinalg_error_requires_at_least_2dlinearlinspacelist_custom_deviceslist_custom_dtypeslist_deviceslist_dtypeslist_functionslist_kernelslist_methodslist_opslistCustomDTypeslistDTypeslistFunctionslistKernelsListKernelsOptionslistMethodslistOpsListOpsOptionsloglog_softmaxlog10log1plog2logaddexplogaddexp2logcumsumexplogical_andlogical_notlogical_orlogical_xorLogitOptionsLogNormalOptionsLogOptionslogsigmoidlogspacelogsumexpLogsumexpOptionsltLUShapeLuSolveOptionsmasked_fillmasked_selectmasked_select_asyncMaskSpecmatmulmatmul_error_inner_dimensions_do_not_matchMatmul2DShapeMatmulShapeMatmulShapeRuleMatrixTransposeShapemaxmaximummeanmedianmemory_statsmemory_summarymeshgridmethod_already_registered_errormethod_dtype_not_supported_errorMethodConfigMethodEntryMethodHandleminminimummishmmMMShapeRulemodemovedimmsortmulmultinomialmultinomial_asyncMultinomialAsyncOptionsMultinomialOptionsMultiplyBymvMVShapeRulenan_to_numnanmeannanmediannanquantileNanReductionOptionsnansumNanToNumOptionsnarrownarrow_copynarrow_error_length_exceeds_boundsnarrow_error_start_out_of_boundsNarrowShapeneneedsBroadcastnegNegativeDimnextafternonzeroNonzeroOptionsnormnormalNormalOptionsNormOptionsnumelonesones_likeop_kind_mismatch_errorop_not_found_errorOpCoverageEntryOpInfoOpKindOpNameOpSchemaOpSchemasouterOuterShapepackPackShapepermutepermute_error_dimension_count_mismatchPermuteShapepoissonpolarPool1dShapePool2dShapePool3dShapepositivepowpreluPrintOptionsprodprofiler_allow_cudagraph_cupti_lazy_reinit_cuda12promote_typesPromoteDTypeRulePutOptionsquantileQuantileOptionsrad2degrandrand_likerandintrandint_likeRandintLikeOptionsRandintOptionsrandnrandn_likeRandomLikeOptionsRandomOptionsrandpermRangeSpecRankravelrealrearrangeRearrangeOptionsRearrangeShapereciprocalreduceReduceOperationReduceOptionsReduceShapeReductionKernelConfigCPUReductionKernelCPUReductionOpNamesReductionOpSchemaReductionOptionsReductionShapeRuleregister_backwardregister_deviceregister_dtyperegister_forwardregister_functionregister_methodregister_scalar_forwardregisterAutogradRegisterBackwardOptionsregisterBinaryOpregisterDTypeRegisterDTypeOptionsRegisteredDTyperegisterFunctionRegisterFunctionOptionsregisterKernelRegisterKernelOptionsregisterMethodRegisterMethodOptionsregisterScalarKernelregisterUnaryOpregistration_failed_errorrelurelu_relu6ReluFunctionalOptionsremainderRemoveDimrepeatrepeat_interleaveRepeatInterleaveOptionsRepeatOptionsRepeatShapeReplaceDimrequireWebGPUreset_peak_memory_statsreshapeReshapeShaperesult_typerfftrollRollOptionsrot90Rot90Optionsroundrrelurrelu_RreluFunctionalOptionsrsqrtSafeExpandShapeSameDTypeRuleSameShapeRuleSaveForBackwardScalarCPUForwardFnScalarCPUKernelConfigScalarKernelEntryScalarKernelHandleScalarWebGPUKernelConfigScaleDimscatterscatter_addscatter_add_scatter_error_dim_out_of_rangescatter_reducescatter_reduce_ScatterReduceOptionsScatterShapesearchsortedSearchSortedOptionsselectselect_error_index_out_of_boundsselect_scatterSelectShapeseluset_default_deviceset_default_tensor_typeset_deterministic_debug_modeset_float32_matmul_precisionset_printoptionsset_warn_alwaysSetupContextFnShapeShapeCheckedResultShapedTensorShapeErrorMessageShapeOpSchemaShapeRulesigmoidsignsignbitsilusinsincsinhSizeOptionsslice_error_out_of_boundsslice_scatterSliceOptionsSliceScatterOptionsSliceShapeSliceSpecsoftmaxsoftmax_error_dim_out_of_rangeSoftmaxShapesoftminSoftminFunctionalOptionssoftplusSoftplusFunctionalOptionssoftshrinksoftsignsortSortOptionssplitsplit_error_dim_out_of_rangeSplitOptionssqrtsquaresqueezeSqueezeOptionsSqueezeShapestackStackOptionsStackShapestdstd_meanStdVarMeanOptionsStdVarOptionsstftSTFTOptionsStrideOptionssubSublistSublistElementSubscriptIndexsumSVDShapeswapaxessym_floatsym_intsym_notttaketake_along_dimTakeAlongDimOptionstantanhtanhshrinktensortensor_splitTensorCreatorTensorDatatensordotTensordotOptionsTensorLikeTensorMetaTensorOptionsTensorStoragethresholdthreshold_tileTileShapeToOptionstopkTopkOptionsTorchtraceTraceShapetransposetranspose_dims_error_out_of_rangetranspose_error_requires_2d_tensorTransposeDimsShapeTransposeDimsShapeCheckedTransposeShapetrapezoidTrapezoidOptionsTriangularOptionstriltril_indicesTriOptionsTripletriutriu_indicestrue_dividetruncTupleOfLengthTypedArrayTypedArrayForTypedStorageTypeOptionsUnaryBackwardFnUnaryDTypeUnaryKernelConfigCPUUnaryKernelCPUUnaryOpConfigUnaryOpFnUnaryOpNamesUnaryOpParamsUnaryOpSchemaUnaryOptionsunbindunbind_error_dim_out_of_rangeUnbindOptionsunflattenUniformOptionsuniqueunique_consecutiveUniqueConsecutiveOptionsUniqueOptionsunpackUnpackShapeunravel_indexunregister_deviceunsqueezeUnsqueezeOptionsUnsqueezeShapeuse_deterministic_algorithmsValidateBatchedSquareMatrixValidateChunkDimValidatedEinsumShapevalidateDeviceValidateDeviceValidatedRearrangeShapeValidatedReduceShapeValidatedRepeatShapevalidateDTypeValidateEinsumValidateOperandCountValidateRanksValidateScalarValidateSplitDimValidateSquareMatrixValidateUnbindDimValueOptionsvar_var_meanvdotviewview_as_complexview_as_realvmapvsplitvstackWebGPUKernelConfigWebGPUOnlyResultWebGPUTensorDatawhereWindowOptionsxlogyzeroszeros_like
torch.js· 2026
LegalTerms of UsePrivacy Policy
/
/
  1. docs
  2. torch.js
  3. torch
  4. special
  5. legendre_polynomial_p

torch.special.legendre_polynomial_p

function legendre_polynomial_p<S extends Shape>(x: Tensor<S, 'float32'>, n: number | Tensor, _options?: SpecialPolynomialOptions<S>): Tensor<S, 'float32'>

Computes Legendre polynomial P_n(x).

The Legendre polynomials P_n(x) are orthogonal on [-1, 1] with constant weight (orthogonality with respect to Lebesgue measure). Fundamental to spherical harmonics and angular momentum analysis. Essential for:

  • Quantum mechanics: spherical harmonics Y_ℓ^m ∝ P_ℓ^m (associated Legendre); angular momentum eigenfunctions; atomic/molecular orbitals
  • Multipole expansions: gravitational/electrostatic potentials expanded in Legendre series (natural expansion for spherical symmetry)
  • Geophysics: spherical harmonics for Earth's magnetic field, gravitational field, seismic analysis
  • Numerical integration: Gauss-Legendre quadrature (optimal for polynomial integration on [-1, 1]; no weight function needed)
  • Approximation on [-1, 1]: natural basis for problems on symmetric interval with no weight function
  • Machine learning: spherical CNNs, graph neural networks on manifolds, spherical data (faces, molecules)

Spherical Symmetry: Legendre polynomials are "azimuthally symmetric" part (m=0) of associated Legendre polynomials. Angular momentum eigenfunctions require associated Legendre P_n^m, but standard P_n is fundamental building block.

Gauss-Legendre Quadrature: Roots of P_n are optimal quadrature nodes for polynomial integration on [-1, 1]. Most widely used quadrature rule in numerical analysis.

Pn(x)=12nn!dndxn(x2−1)n (Rodrigues formula)Recurrence: P0(x)=1,P1(x)=x,(n+1)Pn+1(x)=(2n+1)xPn(x)−nPn−1(x)Generating function: 11−2xt+t2=∑n=0∞Pn(x)tnOrthogonality: ∫−11Pm(x)Pn(x)dx=22n+1δmnBoundary values: Pn(1)=1,Pn(−1)=(−1)n\begin{aligned} P_n(x) = \frac{1}{2^n n!} \frac{d^n}{dx^n}(x^2 - 1)^n \text{ (Rodrigues formula)} \\ \text{Recurrence: } P_0(x) = 1, \quad P_1(x) = x, \quad (n+1)P_{n+1}(x) = (2n+1)x P_n(x) - n P_{n-1}(x) \\ \text{Generating function: } \frac{1}{\sqrt{1 - 2xt + t^2}} = \sum_{n=0}^\infty P_n(x) t^n \\ \text{Orthogonality: } \int_{-1}^1 P_m(x) P_n(x) dx = \frac{2}{2n+1} \delta_{mn} \\ \text{Boundary values: } P_n(1) = 1, \quad P_n(-1) = (-1)^n \end{aligned}Pn​(x)=2nn!1​dxndn​(x2−1)n (Rodrigues formula)Recurrence: P0​(x)=1,P1​(x)=x,(n+1)Pn+1​(x)=(2n+1)xPn​(x)−nPn−1​(x)Generating function: 1−2xt+t2​1​=n=0∑∞​Pn​(x)tnOrthogonality: ∫−11​Pm​(x)Pn​(x)dx=2n+12​δmn​Boundary values: Pn​(1)=1,Pn​(−1)=(−1)n​
  • Interval [-1, 1]: Natural domain; no weight function (constant weight = 1)
  • Gauss-Legendre quadrature: Roots are optimal for numerical integration; most widely used quadrature rule
  • Boundary behavior: P_n(1) = 1, P_n(-1) = (-1)^n; bounded and simple boundary values
  • Parity: P_n(-x) = (-1)^n P_n(x) (even if n even, odd if n odd)
  • Orthogonality weight: Constant weight 1 (unlike others with nontrivial weights)
  • Recurrence: Simple three-term with coefficients (n+1), (2n+1), n; numerically stable
  • Spherical harmonics: Associated Legendre P_n^m forms basis for angular part of solutions in spherical coords
  • Multipole expansion: Natural basis for problems with spherical symmetry (Laplace, Poisson equations)
  • Domain [-1, 1]: Extrapolation outside [−1, 1] reasonable (polynomial growth, unlike Chebyshev oscillations)
  • Associated Legendre for quantum: Use associated Legendre P_n^m(x) for non-azimuthal spherical harmonics
  • Quadrature nodes: Gauss-Legendre nodes are roots of P_n; must be computed separately (not evaluation)

Parameters

xTensor<S, 'float32'>
Input tensor with values in [-1, 1] (natural domain; symmetric interval)
nnumber | Tensor
Polynomial degree (non-negative integer). Can be scalar or Tensor
_optionsSpecialPolynomialOptions<S>optional

Returns

Tensor<S, 'float32'>– Tensor with P_n(x) values

Examples

// Basic evaluation
const x = torch.linspace(-1, 1, 5);
const P_0 = torch.special.legendre_polynomial_p(x, 0);  // [1, 1, 1, 1, 1]
const P_1 = torch.special.legendre_polynomial_p(x, 1);  // x
const P_2 = torch.special.legendre_polynomial_p(x, 2);  // (3*x^2 - 1) / 2

// Spherical harmonics basis (m=0 case)
const cos_theta = torch.linspace(-1, 1, 100);  // cos(θ) in spherical coords
const ell_max = 4;  // Maximum angular momentum
const spherical_basis = [];
for (let ell = 0; ell <= ell_max; ell++) {
  // Y_ell^0 ∝ P_ell(cos_theta) (azimuthally symmetric)
  spherical_basis.push(torch.special.legendre_polynomial_p(cos_theta, ell));
}
// Forms complete orthogonal basis on sphere (with azimuthal dependence for m ≠ 0)

// Electrostatic/gravitational multipole expansion
const r = torch.linspace(0, 10, 50);  // Radial distance
const cos_angle = torch.linspace(-1, 1, 50);  // cos(angle from z-axis)
// Multipole potential Φ ∝ sum_n (a_n / r^{n+1}) * P_n(cos(angle))
const P_2_coeff = torch.special.legendre_polynomial_p(cos_angle, 2);  // Quadrupole term
// Physical potential naturally expanded in Legendre series

// Gauss-Legendre quadrature
// Roots of P_n give optimal quadrature nodes (no explicit computation shown)
// Integration on [-1, 1]: ∫_-1^1 f(x) dx ≈ sum_i w_i f(x_i)
// x_i = roots of P_n(x), w_i = 2 / ((1 - x_i^2) * (P'_n(x_i))^2)

// Approximation on [-1, 1]: function expansion
const x_approx = torch.linspace(-1, 1, 100);
const f_target = x_approx.pow(4);  // Target function to approximate
const n_terms = 5;
const legendre_series = [];
for (let n = 0; n < n_terms; n++) {
  legendre_series.push(torch.special.legendre_polynomial_p(x_approx, n));
}
// Project f onto Legendre basis; each term P_n has integral ∫ f*P_n*dx / ∫ P_n^2*dx

// Boundary behavior
const x_at_1 = torch.tensor([1.0]);
const x_at_neg1 = torch.tensor([-1.0]);
const P_5_at_1 = torch.special.legendre_polynomial_p(x_at_1, 5);      // P_5(1) = 1
const P_5_at_neg1 = torch.special.legendre_polynomial_p(x_at_neg1, 5);  // P_5(-1) = (-1)^5 = -1
// Boundary values always ±1 (no explosions unlike Chebyshev extrapolation)

// Symmetry and parity
const x_sym = torch.tensor([0.3, -0.3]);
const P_3 = torch.special.legendre_polynomial_p(x_sym, 3);
// P_3(-0.3) = -P_3(0.3) since P_n has parity (-1)^n

See Also

  • PyTorch torch.special.legendre_polynomial_p()
  • torch.special.chebyshev_polynomial_t - Chebyshev T_n on [-1, 1] with 1/√(1-x²) weight
  • torch.special.hermite_polynomial_h - Hermite on (-∞, ∞) with exp(-x²) weight
  • torch.special.laguerre_polynomial_l - Laguerre on [0, ∞) with exp(-x) weight
Previous
laguerre_polynomial_l
Next
log_ndtr