pub struct RationalPolynomial<D, O = Grevlex>where
D: Domain,
O: MonomialOrder,{
pub numerator: SparseMultivariatePolynomial<D, O>,
pub denominator: SparseMultivariatePolynomial<D, O>,
}Expand description
A rational polynomial $\frac{\text{num}}{\text{den}}$ over a domain D.
After construction via from_num_den, the fraction
is always in canonical form:
- numerator and denominator are coprime,
- the denominator’s leading coefficient is positive (for ordered domains) or equal to 1 (for finite fields).
Fields§
§numerator: SparseMultivariatePolynomial<D, O>The numerator polynomial.
denominator: SparseMultivariatePolynomial<D, O>The denominator polynomial (always non-zero).
Implementations§
Source§impl<D, O> RationalPolynomial<D, O>where
D: Domain,
O: MonomialOrder,
impl<D, O> RationalPolynomial<D, O>where
D: Domain,
O: MonomialOrder,
Sourcepub fn new(
numerator: SparseMultivariatePolynomial<D, O>,
denominator: SparseMultivariatePolynomial<D, O>,
) -> RationalPolynomial<D, O>
pub fn new( numerator: SparseMultivariatePolynomial<D, O>, denominator: SparseMultivariatePolynomial<D, O>, ) -> RationalPolynomial<D, O>
Create a rational polynomial without reduction.
The caller must ensure denominator is non-zero. For a canonicalized
version use from_num_den.
Sourcepub fn from_polynomial(
poly: SparseMultivariatePolynomial<D, O>,
) -> RationalPolynomial<D, O>
pub fn from_polynomial( poly: SparseMultivariatePolynomial<D, O>, ) -> RationalPolynomial<D, O>
Create a rational polynomial from a polynomial (denominator = 1).
Sourcepub fn zero(domain: &D, n_vars: usize) -> RationalPolynomial<D, O>
pub fn zero(domain: &D, n_vars: usize) -> RationalPolynomial<D, O>
Return the zero rational polynomial in n_vars variables.
Sourcepub fn one(domain: &D, n_vars: usize) -> RationalPolynomial<D, O>
pub fn one(domain: &D, n_vars: usize) -> RationalPolynomial<D, O>
Return the unit rational polynomial (1/1) in n_vars variables.
Sourcepub fn neg(&self) -> RationalPolynomial<D, O>
pub fn neg(&self) -> RationalPolynomial<D, O>
Return the negation: $-\frac{n}{d}$.
Sourcepub fn inv(&self) -> Option<RationalPolynomial<D, O>>
pub fn inv(&self) -> Option<RationalPolynomial<D, O>>
Return the multiplicative inverse: $\frac{d}{n}$.
Returns None if the numerator is zero.
Sourcepub fn pow(&self, k: u32) -> RationalPolynomial<D, O>
pub fn pow(&self, k: u32) -> RationalPolynomial<D, O>
Return the power $\left(\frac{n}{d}\right)^k$.
Source§impl<D, O> RationalPolynomial<D, O>where
D: EuclideanDomain,
O: MonomialOrder,
impl<D, O> RationalPolynomial<D, O>where
D: EuclideanDomain,
O: MonomialOrder,
Sourcepub fn from_num_den(
numerator: SparseMultivariatePolynomial<D, O>,
denominator: SparseMultivariatePolynomial<D, O>,
) -> RationalPolynomial<D, O>
pub fn from_num_den( numerator: SparseMultivariatePolynomial<D, O>, denominator: SparseMultivariatePolynomial<D, O>, ) -> RationalPolynomial<D, O>
Create a canonicalized rational polynomial from numerator and denominator.
The result has coprime numerator and denominator, with the denominator’s leading coefficient normalized.
Sourcepub fn add(&self, other: &RationalPolynomial<D, O>) -> RationalPolynomial<D, O>
pub fn add(&self, other: &RationalPolynomial<D, O>) -> RationalPolynomial<D, O>
Add two rational polynomials: $\frac{a}{b} + \frac{c}{d}$.
Uses the denominator-GCD strategy to minimize intermediate growth.
Sourcepub fn sub(&self, other: &RationalPolynomial<D, O>) -> RationalPolynomial<D, O>
pub fn sub(&self, other: &RationalPolynomial<D, O>) -> RationalPolynomial<D, O>
Subtract two rational polynomials.
Sourcepub fn mul(&self, other: &RationalPolynomial<D, O>) -> RationalPolynomial<D, O>
pub fn mul(&self, other: &RationalPolynomial<D, O>) -> RationalPolynomial<D, O>
Multiply two rational polynomials with cross-cancellation.
Computes $\gcd(a, d)$ and $\gcd(b, c)$ before multiplying to reduce intermediate coefficient growth.
Sourcepub fn div(
&self,
other: &RationalPolynomial<D, O>,
) -> Option<RationalPolynomial<D, O>>
pub fn div( &self, other: &RationalPolynomial<D, O>, ) -> Option<RationalPolynomial<D, O>>
Divide two rational polynomials: $\frac{a/b}{c/d} = \frac{ad}{bc}$.
Trait Implementations§
Source§impl<D, O> Clone for RationalPolynomial<D, O>
impl<D, O> Clone for RationalPolynomial<D, O>
Source§fn clone(&self) -> RationalPolynomial<D, O>
fn clone(&self) -> RationalPolynomial<D, O>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<D, O> Debug for RationalPolynomial<D, O>
impl<D, O> Debug for RationalPolynomial<D, O>
Source§impl<D, O> Display for RationalPolynomial<D, O>
impl<D, O> Display for RationalPolynomial<D, O>
impl<D, O> Eq for RationalPolynomial<D, O>
Source§impl<D, O> PartialEq for RationalPolynomial<D, O>
impl<D, O> PartialEq for RationalPolynomial<D, O>
Source§fn eq(&self, other: &RationalPolynomial<D, O>) -> bool
fn eq(&self, other: &RationalPolynomial<D, O>) -> bool
self and other values to be equal, and is used by ==.impl<D, O> StructuralPartialEq for RationalPolynomial<D, O>
Auto Trait Implementations§
impl<D, O> Freeze for RationalPolynomial<D, O>where
D: Freeze,
impl<D, O> RefUnwindSafe for RationalPolynomial<D, O>
impl<D, O> Send for RationalPolynomial<D, O>
impl<D, O> Sync for RationalPolynomial<D, O>
impl<D, O> Unpin for RationalPolynomial<D, O>
impl<D, O> UnsafeUnpin for RationalPolynomial<D, O>where
D: UnsafeUnpin,
impl<D, O> UnwindSafe for RationalPolynomial<D, O>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.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 moreSource§impl<T> Pointable for T
impl<T> Pointable 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>
self from the equivalent element of its
superset. Read moreSource§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).Source§unsafe fn to_subset_unchecked(&self) -> SS
unsafe fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.