multicalc 0.8.0

Calculus, autodiff, nonlinear least squares, and Lie groups in pure no_std Rust: the same math from 64-bit servers to bare-metal microcontrollers
Documentation
//! Gaussian quadrature node and weight tables.
//!
//! The per-family data files are generated by
//! `scripts/build_gaussian_integration_tables.py`.

use crate::error::IntegrateError;
use crate::numerical_integration::mode::GaussianQuadratureMethod;

pub mod hermite;
pub mod laguerre;
pub mod legendre;

/// Highest supported quadrature order.
pub const MAX_ORDER: usize = 30;

/// Returns the `(weight, abscissa)` pairs for a quadrature method and order.
pub fn nodes(
    method: GaussianQuadratureMethod,
    order: usize,
) -> Result<&'static [(f64, f64)], IntegrateError> {
    let table: &[&[(f64, f64)]] = match method {
        GaussianQuadratureMethod::GaussLegendre => &legendre::LEGENDRE,
        GaussianQuadratureMethod::GaussHermite => &hermite::HERMITE,
        GaussianQuadratureMethod::GaussLaguerre => &laguerre::LAGUERRE,
    };

    table
        .get(order)
        .filter(|pairs| !pairs.is_empty())
        .copied()
        .ok_or(IntegrateError::QuadratureOrderOutOfRange)
}