pub struct PiecewiseLegendrePoly { /* private fields */ }Expand description
A single piecewise Legendre polynomial
Implementations§
Source§impl PiecewiseLegendrePoly
impl PiecewiseLegendrePoly
Sourcepub fn new(
data: Mat<f64>,
knots: Vec<f64>,
l: i32,
delta_x: Option<Vec<f64>>,
symm: i32,
) -> Result<PiecewiseLegendrePoly, Error>
pub fn new( data: Mat<f64>, knots: Vec<f64>, l: i32, delta_x: Option<Vec<f64>>, symm: i32, ) -> Result<PiecewiseLegendrePoly, Error>
Create a new PiecewiseLegendrePoly from data and knots
data holds the Legendre coefficients, one column per segment; the
nsegments + 1 knots bound the segments. delta_x (the segment
widths) is computed from the knots when None. symm is the parity of
the polynomial: 1 (even), -1 (odd) or 0 (no definite parity).
§Errors
Error::EmptyInputifdatahas no row or no columnError::InvalidParameterifknotsdoes not have one entry more thandatahas columns, a knot is not finite, or a segment lengthknots[i] - knots[i - 1]is not a positive normal double (this includes decreasing knots, NaN, lengths that overflow and subnormal lengths); or ifdelta_xdoes not have one entry per segment or differs from the knot spacingeby more thanmax(1e-10 * |e|, 8 * f64::EPSILON * max(|knots[i]|, |knots[i + 1]|))Error::InvalidParameterifsymmis not -1, 0 or 1
Sourcepub fn rescale_domain(
&self,
new_knots: Vec<f64>,
new_delta_x: Option<Vec<f64>>,
new_symm: Option<i32>,
) -> Result<PiecewiseLegendrePoly, Error>
pub fn rescale_domain( &self, new_knots: Vec<f64>, new_delta_x: Option<Vec<f64>>, new_symm: Option<i32>, ) -> Result<PiecewiseLegendrePoly, Error>
Rescale domain: create a new polynomial with the same data but different knots
This is useful for transforming from one domain to another, e.g., from x ∈ [-1, 1] to τ ∈ [0, β].
§Arguments
new_knots- New knot pointsnew_delta_x- Optional new segment widths (computed from knots if None)new_symm- Optional new symmetry parameter (keeps old if None)
§Returns
New polynomial with rescaled domain
§Errors
The errors of new for the new knots and widths
Sourcepub fn scale_data(&self, factor: f64) -> PiecewiseLegendrePoly
pub fn scale_data(&self, factor: f64) -> PiecewiseLegendrePoly
Sourcepub fn evaluate(&self, x: f64) -> f64
pub fn evaluate(&self, x: f64) -> f64
Evaluate the polynomial at a given point
§Panics
Panics if x is outside [xmin, xmax] or NaN; see Self::try_evaluate.
Sourcepub fn try_evaluate(&self, x: f64) -> Result<f64, Error>
pub fn try_evaluate(&self, x: f64) -> Result<f64, Error>
Self::evaluate returning an error instead of panicking
§Errors
Error::OutOfDomain if x is outside [xmin, xmax] or NaN
Sourcepub fn evaluate_many(&self, xs: &[f64]) -> Vec<f64>
pub fn evaluate_many(&self, xs: &[f64]) -> Vec<f64>
Evaluate the polynomial at multiple points
§Panics
Panics if a point is outside [xmin, xmax] or NaN; see
Self::try_evaluate_many.
Sourcepub fn try_evaluate_many(&self, xs: &[f64]) -> Result<Vec<f64>, Error>
pub fn try_evaluate_many(&self, xs: &[f64]) -> Result<Vec<f64>, Error>
Self::evaluate_many returning an error instead of panicking
§Errors
Error::OutOfDomain for the first point of xs that is outside
[xmin, xmax] or NaN; no point is evaluated then
Sourcepub fn split(&self, x: f64) -> (usize, f64)
pub fn split(&self, x: f64) -> (usize, f64)
Split x into segment index and normalized x
§Panics
Panics if x is outside [xmin, xmax] or NaN; see Self::try_split.
Sourcepub fn try_split(&self, x: f64) -> Result<(usize, f64), Error>
pub fn try_split(&self, x: f64) -> Result<(usize, f64), Error>
Self::split returning an error instead of panicking
§Errors
Error::OutOfDomain if x is outside [xmin, xmax] or NaN
Sourcepub fn evaluate_legendre_polynomial(&self, x: f64, coeffs: &[f64]) -> f64
pub fn evaluate_legendre_polynomial(&self, x: f64, coeffs: &[f64]) -> f64
Evaluate Legendre polynomial using recurrence relation
Sourcepub fn deriv(&self, n: usize) -> PiecewiseLegendrePoly
pub fn deriv(&self, n: usize) -> PiecewiseLegendrePoly
Compute derivative of the polynomial
The result has polyorder equal to the number of its coefficient rows
(at least 1).
Sourcepub fn derivs(&self, x: f64) -> Vec<f64>
pub fn derivs(&self, x: f64) -> Vec<f64>
Compute derivatives at a point x
Returns the values of the derivatives of order 0 to polyorder - 1.
§Panics
Panics if x is outside [xmin, xmax] or NaN; see Self::try_derivs.
Sourcepub fn try_derivs(&self, x: f64) -> Result<Vec<f64>, Error>
pub fn try_derivs(&self, x: f64) -> Result<Vec<f64>, Error>
Self::derivs returning an error instead of panicking
§Errors
Error::OutOfDomain if x is outside [xmin, xmax] or NaN
pub fn get_xmin(&self) -> f64
pub fn get_xmax(&self) -> f64
pub fn get_l(&self) -> i32
pub fn get_domain(&self) -> (f64, f64)
pub fn get_knots(&self) -> &[f64]
pub fn get_delta_x(&self) -> &[f64]
pub fn get_symm(&self) -> i32
pub fn get_data(&self) -> &Mat<f64>
pub fn get_norms(&self) -> &[f64]
pub fn get_polyorder(&self) -> usize
Trait Implementations§
Source§impl Clone for PiecewiseLegendrePoly
impl Clone for PiecewiseLegendrePoly
Source§fn clone(&self) -> PiecewiseLegendrePoly
fn clone(&self) -> PiecewiseLegendrePoly
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for PiecewiseLegendrePoly
impl RefUnwindSafe for PiecewiseLegendrePoly
impl Send for PiecewiseLegendrePoly
impl Sync for PiecewiseLegendrePoly
impl Unpin for PiecewiseLegendrePoly
impl UnsafeUnpin for PiecewiseLegendrePoly
impl UnwindSafe for PiecewiseLegendrePoly
Blanket Implementations§
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
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> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
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> ⓘ
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> ⓘ
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 moreimpl<T> MaybeSend for Twhere
T: Send,
impl<T> MaybeSendSync for T
impl<T> MaybeSync for Twhere
T: Sync,
§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.