pub enum DuchonNullspaceOrder {
Zero,
Linear,
Degree(usize),
}Expand description
Duchon null-space polynomial degree.
Controls the polynomial null space of the Duchon / polyharmonic spline. The
Duchon seminorm ‖D^m f‖² annihilates all polynomials of total degree
< m, so those polynomials must be handled as explicit unpenalized columns.
The user-facing order knob selects the polynomial degree cutoff r, and
the resulting polynomial null space has dimension C(d + r, r) where d
is the covariate dimension. In the duchon(...) formula DSL:
order= | Variant | max total degree | null-space dim |
|---|---|---|---|
0 | Zero | 0 | C(d+0,0) = 1 |
1 | Linear | 1 | C(d+1,1) = d+1 |
k≥2 | Degree(k) | k | C(d+k,k) |
How the polynomial null space is consumed during basis construction:
polynomial_block_from_ordermaterialises an(n, C(d+r,r))blockPof monomials up to total degreerat the selectedcenters.kernel_constraint_nullspacecomputesZ = null(P_centers^T), a(k, k − C(d+r,r))matrix. Reparameterising the radial kernel coefficients asα = Z γenforces the side conditionP_centers^T α = 0and yieldsk − C(d+r,r)free kernel parameters.- The polynomial block
P_dataevaluated at the data rows is appended to the kernel blockΦ Z, giving a total of(k − C(d+r,r)) + C(d+r,r) = kcolumns before the spatial identifiability transform. Crucially, the total width equals the requested center countk, notk + C(d+r,r).
Example — duchon(PC1, PC2, PC3, centers=10, order=1) (d=3):
- Polynomial null space:
C(3+1,1) = 4monomials{1, x₁, x₂, x₃}. - Kernel columns after constraint:
10 − 4 = 6. - Appended polynomial block: 4 columns.
- Pre-identifiability total:
6 + 4 = 10columns, i.e. exactlycenters.
The variant naming matches the Duchon m parameter:
Zero → m=1, Linear → m=2, Degree(k) → m=k+1.
Variants§
Trait Implementations§
Source§impl Clone for DuchonNullspaceOrder
impl Clone for DuchonNullspaceOrder
Source§fn clone(&self) -> DuchonNullspaceOrder
fn clone(&self) -> DuchonNullspaceOrder
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for DuchonNullspaceOrder
Source§impl Debug for DuchonNullspaceOrder
impl Debug for DuchonNullspaceOrder
Source§impl<'de> Deserialize<'de> for DuchonNullspaceOrder
impl<'de> Deserialize<'de> for DuchonNullspaceOrder
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Eq for DuchonNullspaceOrder
Source§impl Hash for DuchonNullspaceOrder
impl Hash for DuchonNullspaceOrder
Source§impl PartialEq for DuchonNullspaceOrder
impl PartialEq for DuchonNullspaceOrder
Source§fn eq(&self, other: &DuchonNullspaceOrder) -> bool
fn eq(&self, other: &DuchonNullspaceOrder) -> bool
Tests for
self and other values to be equal, and is used by ==.Source§impl Serialize for DuchonNullspaceOrder
impl Serialize for DuchonNullspaceOrder
impl StructuralPartialEq for DuchonNullspaceOrder
Auto Trait Implementations§
impl Freeze for DuchonNullspaceOrder
impl RefUnwindSafe for DuchonNullspaceOrder
impl Send for DuchonNullspaceOrder
impl Sync for DuchonNullspaceOrder
impl Unpin for DuchonNullspaceOrder
impl UnsafeUnpin for DuchonNullspaceOrder
impl UnwindSafe for DuchonNullspaceOrder
Blanket Implementations§
impl<T> Allocation for T
impl<T> Boilerplate for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.