Skip to main content

monomial_basis

Function monomial_basis 

Source
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

§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}");