PolynomialArithmetic

Trait PolynomialArithmetic 

Source
pub trait PolynomialArithmetic: PolynomialProperties {
    // Required methods
    fn poly_div(
        &self,
        divisor: &Expression,
        var: &Symbol,
    ) -> Result<(Expression, Expression), PolynomialError>;
    fn poly_quo(
        &self,
        divisor: &Expression,
        var: &Symbol,
    ) -> Result<Expression, PolynomialError>;
    fn poly_rem(
        &self,
        divisor: &Expression,
        var: &Symbol,
    ) -> Result<Expression, PolynomialError>;
    fn is_divisible_by(&self, divisor: &Expression, var: &Symbol) -> bool;
}
Expand description

Trait for polynomial arithmetic operations

Provides methods for polynomial division operations. These operations require the expressions to be polynomials in the specified variable.

§Examples

use mathhook_core::core::polynomial::PolynomialArithmetic;
use mathhook_core::core::Expression;
use mathhook_core::symbol;

let x = symbol!(x);
// x^2 - 1
let dividend = Expression::add(vec![
    Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
    Expression::integer(-1),
]);
// x - 1
let divisor = Expression::add(vec![
    Expression::symbol(x.clone()),
    Expression::integer(-1),
]);

let (quotient, remainder) = dividend.poly_div(&divisor, &x).unwrap();
// quotient = x + 1, remainder = 0

Required Methods§

Source

fn poly_div( &self, divisor: &Expression, var: &Symbol, ) -> Result<(Expression, Expression), PolynomialError>

Perform polynomial long division

Divides self by divisor with respect to the variable var. Returns (quotient, remainder) such that self = quotient * divisor + remainder.

§Arguments
  • divisor - The polynomial to divide by
  • var - The variable to treat as the polynomial indeterminate
§Returns

Ok((quotient, remainder)) if both expressions are valid polynomials, Err(PolynomialError) otherwise.

§Examples
use mathhook_core::core::polynomial::PolynomialArithmetic;
use mathhook_core::core::Expression;
use mathhook_core::symbol;

let x = symbol!(x);
// x^2 - 1
let dividend = Expression::add(vec![
    Expression::pow(Expression::symbol(x.clone()), Expression::integer(2)),
    Expression::integer(-1),
]);
// x - 1
let divisor = Expression::add(vec![
    Expression::symbol(x.clone()),
    Expression::integer(-1),
]);

let (q, r) = dividend.poly_div(&divisor, &x).unwrap();
// q = x + 1, r = 0
Source

fn poly_quo( &self, divisor: &Expression, var: &Symbol, ) -> Result<Expression, PolynomialError>

Get quotient of polynomial division

§Arguments
  • divisor - The polynomial to divide by
  • var - The variable to treat as the polynomial indeterminate
§Returns

The quotient of the division

Source

fn poly_rem( &self, divisor: &Expression, var: &Symbol, ) -> Result<Expression, PolynomialError>

Get remainder of polynomial division

§Arguments
  • divisor - The polynomial to divide by
  • var - The variable to treat as the polynomial indeterminate
§Returns

The remainder of the division

Source

fn is_divisible_by(&self, divisor: &Expression, var: &Symbol) -> bool

Check if one polynomial divides another exactly

§Arguments
  • divisor - The potential divisor
  • var - The variable
§Returns

True if divisor divides self with zero remainder

Implementors§