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 = 0Required Methods§
Sourcefn poly_div(
&self,
divisor: &Expression,
var: &Symbol,
) -> Result<(Expression, Expression), PolynomialError>
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 byvar- 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