pub fn monomial_basis(
argvals: &[f64],
nbasis: usize,
) -> Result<BasisSystem, FdarError>Expand description
Construct a monomial (polynomial power) basis over argvals with nbasis functions.
The j-th basis function is B_j(t) = t^j for j = 0, …, nbasis-1.
Returns a BasisSystem containing:
- a column-major evaluation matrix of shape
(n × nbasis), - an analytic 2nd-derivative Gram penalty matrix of shape
(nbasis × nbasis).
§Errors
FdarError::InvalidDimensionifargvals.len() < 2.FdarError::InvalidParameterifnbasis < 1.
§Examples
use fdars_core::monomial_basis;
let t = vec![0.0, 1.0, 2.0];
let bs = monomial_basis(&t, 3).unwrap();
// Column 0: B₀ = 1 → [1, 1, 1]
assert!((bs.eval_matrix[0] - 1.0).abs() < 1e-12);
assert!((bs.eval_matrix[1] - 1.0).abs() < 1e-12);
assert!((bs.eval_matrix[2] - 1.0).abs() < 1e-12);
// Column 1: B₁ = t → [0, 1, 2]
assert!((bs.eval_matrix[3] - 0.0).abs() < 1e-12);
assert!((bs.eval_matrix[4] - 1.0).abs() < 1e-12);
assert!((bs.eval_matrix[5] - 2.0).abs() < 1e-12);
// Column 2: B₂ = t² → [0, 1, 4]
assert!((bs.eval_matrix[6] - 0.0).abs() < 1e-12);
assert!((bs.eval_matrix[7] - 1.0).abs() < 1e-12);
assert!((bs.eval_matrix[8] - 4.0).abs() < 1e-12);
// P[2,2] for exponents [0,1,2], lfd_order=2, domain [0,2]:
// c₂=2, c₂=2, power=2+2-4+1=1, P=2*2*(2^1-0^1)/1 = 8.0
let p22 = bs.penalty_matrix[2 + 2 * 3];
assert!((p22 - 8.0).abs() < 1e-9, "P[2,2]={p22}");