|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
Sparse multivariate polynomial. More...
#include <tpl_multi_polynomial.H>
Classes | |
| struct | FactorTerm |
| Factorization term: a factor polynomial with its multiplicity. More... | |
| struct | Pair_Candidate |
| struct | Pair_Candidate_Less |
| struct | Uni_Factor_Signature_Less |
| Deterministic ordering of primitive univariate factors by normalized signature. More... | |
| struct | Uni_Linear_Factor_Data |
| Primitive linear factor data \(a x + b\)for a chosen main variable. More... | |
| struct | Uni_Linear_Factor_Data_Less |
| Deterministic ordering of primitive univariate linear factors. More... | |
Public Types | |
| using | Coeff = Coefficient |
| using | Index = Array< size_t > |
| using | Order = MonomOrder |
Public Member Functions | |
| Gen_MultiPolynomial ()=default | |
| Default constructor: the zero polynomial with 0 variables. | |
| Gen_MultiPolynomial (const size_t nvars, const Coefficient &c=Coefficient{}) | |
| Constant polynomial. | |
| Gen_MultiPolynomial (const size_t nvars, const Array< size_t > &idx, const Coefficient &c) | |
| Single-term constructor. | |
| Gen_MultiPolynomial (const size_t nvars, const DynList< std::pair< Array< size_t >, Coefficient > > &ts) | |
| Construct from a list of (exponent-vector, coefficient) pairs. | |
| Gen_MultiPolynomial (const size_t nvars, std::initializer_list< std::pair< Array< size_t >, Coefficient > > ts) | |
| Construct from an initializer list of term pairs. | |
| bool | is_zero () const noexcept |
| True if this is the zero polynomial. | |
| bool | is_constant () const noexcept |
| True if constant or zero (total degree 0). | |
| size_t | num_vars () const noexcept |
| Number of variables. | |
| size_t | num_terms () const noexcept |
| Number of non-zero terms. | |
| size_t | degree () const noexcept |
| Total degree (maximum sum of exponents over all terms). | |
| size_t | degree_in (size_t var) const noexcept |
| Degree in a specific variable. | |
| std::pair< Array< size_t >, Coefficient > | leading_term () const |
| Leading term (largest monomial in the ordering). | |
| Coefficient | leading_coeff () const |
| Leading coefficient. | |
| Array< size_t > | leading_monomial () const |
| Leading monomial (exponent vector of the leading term). | |
| Coefficient | coeff_at (const Array< size_t > &idx) const |
| Read coefficient at a multi-index (0 if absent). | |
| template<class Op > | |
| void | for_each_term (Op &&op) const |
| Visit every non-zero term in ascending monomial order. | |
| template<class Op > | |
| void | for_each_term_desc (Op &&op) const |
| Visit every non-zero term in descending monomial order. | |
| DynList< std::pair< Array< size_t >, Coefficient > > | terms () const |
| All terms as a list (ascending order). | |
| void | add_to_coeff (const Array< size_t > &idx, const Coefficient &delta) |
Add delta to the coefficient at idx. | |
| void | remove_zeros () |
| Remove all terms whose coefficient is approximately zero. | |
| void | scale_inplace (const Coefficient &s) |
Multiply every coefficient by s in place. | |
| void | divide_scalar_inplace (const Coefficient &s) |
Divide every coefficient by s in place. | |
| Gen_MultiPolynomial | operator+ (const Gen_MultiPolynomial &q) const |
| Polynomial addition. | |
| Gen_MultiPolynomial & | operator+= (const Gen_MultiPolynomial &q) |
| In-place addition. | |
| Gen_MultiPolynomial | operator+ (const Coefficient &s) const |
| Add a scalar constant term. | |
| Gen_MultiPolynomial & | operator+= (const Coefficient &s) |
| In-place addition of a scalar constant term. | |
| Gen_MultiPolynomial | operator- (const Gen_MultiPolynomial &q) const |
| Polynomial subtraction. | |
| Gen_MultiPolynomial & | operator-= (const Gen_MultiPolynomial &q) |
| In-place subtraction. | |
| Gen_MultiPolynomial | operator- (const Coefficient &s) const |
| Subtract a scalar constant term. | |
| Gen_MultiPolynomial & | operator-= (const Coefficient &s) |
| In-place subtraction of a scalar constant term. | |
| Gen_MultiPolynomial | operator- () const |
| Unary negation. | |
| Gen_MultiPolynomial | operator* (const Gen_MultiPolynomial &q) const |
| Polynomial multiplication. | |
| Gen_MultiPolynomial & | operator*= (const Gen_MultiPolynomial &q) |
| In-place polynomial multiplication. | |
| Gen_MultiPolynomial | operator* (const Coefficient &s) const |
| Multiply by a scalar. | |
| Gen_MultiPolynomial & | operator*= (const Coefficient &s) |
| In-place scalar multiplication. | |
| Gen_MultiPolynomial | operator/ (const Coefficient &s) const |
| Divide by a scalar. | |
| Gen_MultiPolynomial & | operator/= (const Coefficient &s) |
| In-place scalar division. | |
| Gen_MultiPolynomial | pow (size_t n) const |
| Exponentiation \(p^n\)by repeated squaring. | |
| Coefficient | eval (const Array< Coefficient > &pt) const |
| Evaluate at a point. | |
| Coefficient | operator() (const Array< Coefficient > &pt) const |
| Evaluate at a point (function-call syntax). | |
| bool | operator== (const Gen_MultiPolynomial &q) const |
| Polynomial equality. | |
| bool | operator!= (const Gen_MultiPolynomial &q) const |
| Polynomial inequality. | |
| std::string | to_str (const DynList< std::string > &names=DynList< std::string >()) const |
| Human-readable string. | |
| Gen_MultiPolynomial | promote (size_t new_nv) const |
| Promote to a polynomial with more variables. | |
| Gen_MultiPolynomial | partial (size_t var, size_t n=1) const |
| Partial derivative with respect to a variable. | |
| Array< Gen_MultiPolynomial > | gradient () const |
| Gradient vector: array of all first-order partial derivatives. | |
| Array< Array< Gen_MultiPolynomial > > | hessian () const |
| Hessian matrix: all second-order partial derivatives. | |
| Array< Coefficient > | eval_gradient (const Array< Coefficient > &pt) const |
| Evaluate gradient at a point. | |
| Array< Array< Coefficient > > | eval_hessian (const Array< Coefficient > &pt) const |
| Evaluate Hessian at a point. | |
| std::string | to_json () const |
| Serialize polynomial to JSON string. | |
| void | to_binary (std::ostream &out) const |
| Serialize polynomial to binary stream. | |
| Array< Coefficient > | eval_batch (const Array< Array< Coefficient > > &pts) const |
| Evaluate polynomial at multiple points (with parallelism support). | |
| std::pair< Array< Gen_MultiPolynomial >, Gen_MultiPolynomial > | divmod (const Array< Gen_MultiPolynomial > &divisors) const |
| Multivariate division with remainder (Buchberger algorithm). | |
| Gen_MultiPolynomial | reduce_modulo (const Array< Gen_MultiPolynomial > &divisors) const |
| Polynomial reduction modulo an ideal (one-liner). | |
| Coefficient | content () const |
| Content of a multivariate polynomial: GCD of all coefficients. | |
| Gen_MultiPolynomial | primitive_part () const |
| Primitive part: polynomial divided by its content. | |
| Gen_Polynomial< Coefficient > | homomorphic_eval (size_t keep_var, const Array< Coefficient > &eval_pts) const |
| Homomorphic evaluation: reduce to univariate by substitution. | |
| DynList< FactorTerm > | factorize () const |
| Main multivariate factorization over the integers. | |
Private Types | |
| using | Pair_Key = std::pair< size_t, size_t > |
| using | Pair_Registry = DynMapTree< Pair_Key, bool > |
| using | Pair_Queue = DynBinHeap< Pair_Candidate, Pair_Candidate_Less > |
Private Member Functions | |
| Array< size_t > | norm (const Array< size_t > &idx) const |
| Pad an index to nvars_ trailing zeros. | |
Private Attributes | |
| size_t | nvars_ = 0 |
| DynMapTree< Array< size_t >, Coefficient, Avl_Tree, MonomOrder > | coeffs |
Sparse multivariate polynomial.
Represents a polynomial in \(n\)variables \(x_0, x_1, \ldots, x_{n-1}\)over a coefficient ring. Terms are stored in a balanced BST keyed by exponent vectors, ordered according to the monomial ordering MonomOrder.
| Coefficient | Coefficient type (default double). |
| MonomOrder | Strict-weak-order functor on Array<size_t> (default Grevlex_Order). |
Definition at line 414 of file tpl_multi_polynomial.H.
| using Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Coeff = Coefficient |
Definition at line 771 of file tpl_multi_polynomial.H.
| using Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Index = Array<size_t> |
Definition at line 772 of file tpl_multi_polynomial.H.
| using Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Order = MonomOrder |
Definition at line 773 of file tpl_multi_polynomial.H.
|
private |
Definition at line 460 of file tpl_multi_polynomial.H.
|
private |
Definition at line 498 of file tpl_multi_polynomial.H.
|
private |
Definition at line 461 of file tpl_multi_polynomial.H.
|
default |
Default constructor: the zero polynomial with 0 variables.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::gradient(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::hessian(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_power(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::interpolate(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::monomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::primitive_part(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::variable().
|
inlineexplicit |
Constant polynomial.
| [in] | nvars | Number of variables. |
| [in] | c | Constant value (default 0). |
Definition at line 813 of file tpl_multi_polynomial.H.
|
inline |
Single-term constructor.
| [in] | nvars | Number of variables. |
| [in] | idx | Exponent vector. |
| [in] | c | Coefficient. |
Definition at line 825 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::norm().
|
inline |
Construct from a list of (exponent-vector, coefficient) pairs.
| [in] | nvars | Number of variables. |
| [in] | ts | Term list. |
Definition at line 836 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), and Aleph::blossom_maximum_cardinality_matching().
|
inline |
Construct from an initializer list of term pairs.
| [in] | nvars | Number of variables. |
| [in] | ts | Initializer list of {exponent-vector, coefficient}. |
Definition at line 849 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), and Aleph::blossom_maximum_cardinality_matching().
|
inlinestatic |
Append value to vals if it is not already present.
Definition at line 3371 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and value.
|
inlinestatic |
Build a monic affine linear factor from root data.
Given root values of the kept variable at a base point and slopes for the remaining variables, constructs: x_main - (sum_i slope_i * x_i + intercept).
Definition at line 3592 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), and Aleph::intercept().
|
inlinestatic |
Build a primitive affine linear factor from specialized coefficients.
Given factors of the form \(a x_{\text{main}} + b(\mathbf{u})\)at a base specialization point, reconstructs:
\[ a x_{\text{main}} + \sum_i c_i u_i + d \]
where each \(c_i\)is the change in the specialized constant term after incrementing the corresponding variable by one.
Definition at line 3472 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), and Aleph::intercept().
|
inlinestatic |
Build the full homomorphic-evaluation point from active-variable coordinates.
Definition at line 3794 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inlinestatic |
Build a regular interpolation grid for the active non-main variables.
Definition at line 3742 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Array< T >::reserve(), and value.
|
inlinestatic |
Expand, primitive-normalize, and group factors by degree in a stable order.
Definition at line 3858 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), cmp(), Aleph::in_place_sort(), and Aleph::size().
|
inlinestatic |
Collect primitive linear factors from a univariate factorization in stable order.
Definition at line 3400 of file tpl_multi_polynomial.H.
References Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), and m.
|
inlinestatic |
Collect unique roots of monic linear factors from a univariate factorization.
Definition at line 3426 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inlinestatic |
Count active variables (positive degree) and remember the last one seen.
Definition at line 3449 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::count(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::degree_in(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::num_vars().
|
inlinestatic |
Decode a flat tensor-grid index into coordinates (last dimension fastest).
Definition at line 3779 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Array< T >::size().
|
inlinestaticprivate |
Test whether divisor divides f exactly over Z[x1,...,xn].
Uses the multivariate division algorithm directly and accepts the divisor only when the remainder is exactly zero.
Definition at line 4427 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::degree(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), and r.
|
inlinestatic |
Embed a coefficient polynomial in the ambient ring and multiply by x_main^exp.
Definition at line 3886 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), and exp().
|
inlinestatic |
Embed a univariate polynomial into the multivariate ring.
| [in] | u | Univariate polynomial. |
| [in] | nv | Number of variables in the target ring. |
| [in] | x_var | Variable index for the univariate variable. |
u in variable x_var. Definition at line 3356 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), exp(), and Aleph::Gen_Polynomial< Coefficient >::for_each_term().
|
inlinestaticnoexcept |
Return the evaluation-array position corresponding to variable var.
Definition at line 3443 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inlinestaticprivate |
Evaluate a monomial \(x^\alpha\)at a point.
Definition at line 4380 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::multi_poly_detail::int_power(), and Aleph::Array< T >::size().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_ridge(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_weighted().
|
inlinestaticprivate |
Compute exact quotient f / divisor over Z[x1,...,xn].
Uses the public multivariate division algorithm and returns the quotient only when the remainder vanishes exactly.
Definition at line 4447 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::num_vars(), and r.
|
inlinestatic |
Expand a univariate factorization into individual factors.
Definition at line 3806 of file tpl_multi_polynomial.H.
References Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), and m.
|
inlinestatic |
Factor a polynomial that is effectively univariate in one variable.
Projects the polynomial onto the active variable, delegates to the univariate integer factorizer, and embeds the factors back into the ambient multivariate ring while preserving multiplicities.
Definition at line 4048 of file tpl_multi_polynomial.H.
References Aleph::DynList< T >::append(), Aleph::blossom_maximum_cardinality_matching(), exp(), Aleph::Gen_Polynomial< Coefficient >::for_each_term(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::FactorTerm::multiplicity.
|
inlinestatic |
Reconstruct primitive factors by interpolation across specialization grids.
Factors are grouped by degree in the main variable and ordered deterministically by their univariate coefficient signatures at each specialization point. When that slot ordering remains consistent across the grid, each primitive factor can be interpolated back into the ambient ring and then verified by exact division.
Definition at line 3913 of file tpl_multi_polynomial.H.
References Aleph::and, Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), exp(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::interpolate(), and Aleph::size().
|
inlinestaticprivate |
Count elements in a DynList.
Definition at line 4414 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inlinestatic |
Recursive search for an affine linear multivariate lift.
Definition at line 3626 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inlinestaticprivate |
Substitute a single variable with a scalar value.
Definition at line 4394 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::multi_poly_detail::int_power(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
|
inlinestatic |
Try to extract a monic affine linear factor via multivariate lifting.
Definition at line 3712 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inlinestatic |
Try to extract an exact non-linear factor via coefficient interpolation.
Definition at line 4015 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inlinestatic |
Try to lift a monic affine linear factor for a fixed main variable.
Definition at line 3666 of file tpl_multi_polynomial.H.
References Aleph::and, Aleph::Array< T >::append(), and Aleph::blossom_maximum_cardinality_matching().
|
inlinestatic |
Try to lift a primitive affine linear factor from specialized coefficients.
Definition at line 3509 of file tpl_multi_polynomial.H.
References Aleph::and, Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), and Aleph::size().
|
inline |
Add delta to the coefficient at idx.
Inserts the term if absent; removes it if the result is zero.
| [in] | idx | Exponent vector. |
| [in] | delta | Value to add. |
Definition at line 1053 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::norm().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_build_affine_factor(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_build_affine_factor_from_linear_data(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_embed_coeff_poly_as_x_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_embed_univariate(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_substitute_var(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_parallel(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_ridge(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_weighted(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::from_binary(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::from_json(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator+=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator+=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::partial(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestaticprivate |
Definition at line 666 of file tpl_multi_polynomial.H.
References Aleph::and, Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_equal_polynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::make_monic_inplace(), r, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zero_and_duplicates().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis().
|
inlinestaticprivate |
Definition at line 578 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_equal_polynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::make_monic_inplace(), and r.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis().
|
inlinestaticprivatenoexcept |
Definition at line 463 of file tpl_multi_polynomial.H.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::enqueue_pair_if_needed(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::lcm_pair_less(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::make_pair_candidate(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pair_is_recorded(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pop_best_pair().
|
inline |
Read coefficient at a multi-index (0 if absent).
| [in] | idx | Exponent vector. |
Coefficient{} if the term is absent. Definition at line 988 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::norm().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator==(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestaticnoexcept |
Test whether a coefficient is (approximately) zero.
| [in] | c | Coefficient to test. |
c is zero (within epsilon for floats). Definition at line 794 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::epsilon().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divide_scalar_inplace(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_parallel(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_ridge(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::fit_weighted(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::homomorphic_eval(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::interpolate(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::make_monic_inplace(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator/(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator==(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::partial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::primitive_part(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zeros(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::scale_inplace(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_str().
|
inlinestaticprivate |
Definition at line 437 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduce_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduced_generators(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zero_and_duplicates().
|
inlinestatic |
Test whether ideal I contains ideal J: I ⊇ J.
An ideal I contains ideal J if and only if every generator of J belongs to I. Uses a precomputed Gröbner basis of I for efficiency.
| [in] | I_gens | Generators of ideal I (non-empty, no zeros). |
| [in] | J_gens | Generators of ideal J (non-empty, no zeros). |
| std::domain_error | if either ideal is empty or contains zero |
| std::invalid_argument | if nvars mismatch |
Definition at line 3067 of file tpl_multi_polynomial.H.
References ah_domain_error_if, ah_invalid_argument_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and remainder().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideals_equal(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Content of a multivariate polynomial: GCD of all coefficients.
For \(f = \sum_\alpha c_\alpha x^\alpha\), the content is \(\gcd(c_{\alpha_1}, c_{\alpha_2}, \ldots)\).
For the zero polynomial, returns zero. The sign follows the leading coefficient so that primitive_part() has a positive leading coefficient.
Definition at line 3236 of file tpl_multi_polynomial.H.
References Aleph::and, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_coeff().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::primitive_part(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinenoexcept |
Total degree (maximum sum of exponents over all terms).
Definition at line 922 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::multi_poly_detail::total_degree().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_divides_exactly(), main(), TEST(), TEST(), and TEST().
|
inlinenoexcept |
Degree in a specific variable.
| [in] | var | Variable index (0-based). |
var over all terms. Definition at line 935 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::Array< T >::size().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_count_active_vars(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::factorize(), and main().
|
inline |
Divide every coefficient by s in place.
| [in] | s | Scalar divisor (must not be zero). |
| std::domain_error | if s is zero. |
Definition at line 1113 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zeros().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator/=().
|
inline |
Multivariate division with remainder (Buchberger algorithm).
Divides this polynomial by the array of divisors and returns quotients and remainder. Each divisor must be non-zero and have the same number of variables as this polynomial.
| [in] | divisors | Array of non-zero divisor polynomials. |
| std::domain_error | if divisors is empty or contains a zero polynomial |
| std::invalid_argument | if a non-zero divisor has mismatched nvars |
Definition at line 2625 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), ah_domain_error_if, ah_invalid_argument_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::multi_poly_detail::divides_index(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::monomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, r, and Aleph::multi_poly_detail::sub_indices().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_divides_exactly(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_exact_quotient(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduce_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduced_generators(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_ideal(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::reduce_modulo(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestaticprivate |
Definition at line 552 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::canonical_pair(), Aleph::DynBinHeap< T, Compare >::insert(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_monomials_coprime(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pair_is_recorded(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::redundant_pair_by_chain_criterion().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::rebuild_groebner_pair_state().
|
inlinestaticconstexprnoexcept |
Machine epsilon for floating-point coefficients.
Definition at line 782 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero().
|
inline |
Evaluate at a point.
| [in] | pt | Array of values, one per variable. |
| std::domain_error | if pt has fewer elements than num_vars(). |
Definition at line 1395 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::multi_poly_detail::int_power(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Array< T >::size().
Referenced by Aleph::analyze_fit(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval_batch(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval_hessian(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator()(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Evaluate polynomial at multiple points (with parallelism support).
| [in] | pts | Array of evaluation points. |
Definition at line 2466 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval().
Referenced by TEST().
|
inline |
Evaluate gradient at a point.
| [in] | pt | Evaluation point (array of size >= num_vars). |
| std::domain_error | if pt.size() < num_vars(). |
Definition at line 2129 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::gradient(), k, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Array< T >::size().
|
inline |
Evaluate Hessian at a point.
| [in] | pt | Evaluation point (array of size >= num_vars). |
pt.| std::domain_error | if pt.size() < num_vars(). |
Definition at line 2150 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::hessian(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Array< T >::size().
|
inlinestatic |
Factor recombination: find true factors from lifted candidates.
Given candidate factors from specialization-based lifting, tests exact divisibility against the current remainder and extracts any verified factors it finds.
| [in] | f | Polynomial to factor (primitive). |
| [in] | candidates | Array of candidate factors from Hensel lifting. |
Definition at line 4087 of file tpl_multi_polynomial.H.
References Aleph::and, Aleph::DynList< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_constant(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), k, Aleph::product(), and Aleph::HTList::size().
|
inline |
Main multivariate factorization over the integers.
Combines content extraction, exact affine/non-linear factor lifting from specializations, homomorphic evaluation (reduction to univariate), univariate factorization (Layer 5), and factor recombination to factor a multivariate polynomial over \(\mathbb{Z}\).
Algorithm outline:
factorize() from Layer 5. Definition at line 4217 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::and, Aleph::DynList< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::degree_in(), LocateFunctions< Container, Type >::get_it(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::homomorphic_eval(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_constant(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), and m.
Referenced by main(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestatic |
Basic least-squares polynomial fitting.
Minimizes: \(\sum_i (y_i - p(x_i))^2\)
| [in] | data | Array of (point, value) pairs. |
| [in] | nvars | Number of variables. |
| [in] | basis | Array of monomial exponent vectors (basis monomials). |
| std::domain_error | if data or basis is empty, or normal equations singular. |
Definition at line 1608 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_eval_monomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), col, k, m, row, OhashCommon< HashTbl, Key >::size(), and y.
Referenced by TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestatic |
Parallel least-squares fitting.
Builds design matrix rows in parallel; solves normal equations sequentially.
| [in] | data | Array of (point, value) pairs. |
| [in] | nvars | Number of variables. |
| [in] | basis | Array of monomial exponent vectors. |
| std::domain_error | if data/basis empty or normal equations singular. |
Definition at line 2492 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), col, Aleph::multi_poly_detail::eval_monomial(), k, m, Aleph::pmaps(), row, rows, OhashCommon< HashTbl, Key >::size(), and y.
Referenced by TEST().
|
inlinestatic |
Regularized least-squares fitting with automatic GCV-based lambda selection.
Solves Tikhonov ridge regression: \(\min_c ||Ac - y||^2 + \lambda ||c||^2\) Automatically selects \(\lambda\)via Generalized Cross-Validation (GCV).
| [in] | data | Array of (point, value) pairs. |
| [in] | nvars | Number of variables. |
| [in] | basis | Array of monomial exponent vectors (basis monomials). |
| [out] | lambda_used | If non-null, receives the selected regularization parameter. |
| [out] | gcv_score | If non-null, receives the GCV score at selected lambda. |
| std::domain_error | if data/basis empty or normal equations singular. |
Definition at line 1841 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_eval_monomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), col, k, m, pred, row, OhashCommon< HashTbl, Key >::size(), and y.
|
inlinestatic |
Weighted least-squares polynomial fitting.
Production-grade fitting with per-point weights for importance-weighted regression. Minimizes: \(\sum_i w_i (y_i - p(x_i))^2\)
| [in] | data | Array of (point, value) pairs. |
| [in] | nvars | Number of variables. |
| [in] | basis | Array of monomial exponent vectors (basis monomials). |
| [in] | weights | Per-point weights (size must equal data.size()). |
| std::domain_error | if data/basis empty or weights size mismatch. |
Definition at line 1720 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_eval_monomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), col, k, m, row, OhashCommon< HashTbl, Key >::size(), and Aleph::Array< T >::size().
Referenced by TEST().
|
inline |
Visit every non-zero term in ascending monomial order.
| [in] | op | Callable void(const Array<size_t>&, const Coefficient&). |
Definition at line 1002 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_substitute_var(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::homomorphic_eval(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator+=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator/(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator==(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::partial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::primitive_part(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::promote(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::terms(), TEST(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_binary(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_json().
|
inline |
Visit every non-zero term in descending monomial order.
| [in] | op | Callable void(const Array<size_t>&, const Coefficient&). |
Definition at line 1015 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::DynList< T >::insert().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_str().
|
inlinestatic |
Deserialize polynomial from binary stream.
Reads format created by to_binary().
| [in] | in | Input stream. |
| std::ios_base::failure | if read fails or format is invalid. |
Definition at line 2423 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), and exp().
|
inlinestatic |
Deserialize from JSON.
Parses format created by to_json().
| [in] | s | JSON string. |
| std::domain_error | if JSON format is invalid. |
| std::invalid_argument | if coefficient conversion fails (from std::stod). |
| std::out_of_range | if coefficient value is out of range (from std::stod). |
Definition at line 2330 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), ah_domain_error_if, Aleph::and, Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
|
inline |
Gradient vector: array of all first-order partial derivatives.
Definition at line 2087 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), k, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::partial().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval_gradient(), TEST(), TEST(), and TEST().
|
inlinestatic |
Gröbner basis computation via Buchberger's algorithm.
Computes a Gröbner basis of the ideal generated by the input polynomials using a Buchberger-style algorithm with criterion B1 (coprime LMs), Buchberger's chain criterion for known-zero pairs, prioritized pair selection by lcm leading monomial, and incremental basis autoreduction whenever a new non-zero remainder is added. Generators are first made monic and autoreduced to remove exact duplicates and obvious ideal members before pair processing.
| [in] | generators | Array of generator polynomials (may contain zero). |
| std::domain_error | if generators is empty or contains zero polynomials |
| std::domain_error | if iteration limit (10000) is exceeded |
Definition at line 2751 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduce_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduced_generators(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::canonical_pair(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_equal_polynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), GraphCommon< GT, Node, Arc >::is_empty(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_monomials_coprime(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::make_monic_inplace(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pop_best_pair(), r, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::rebuild_groebner_pair_state(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::redundant_pair_by_chain_criterion(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::s_poly().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_ideal(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_member(), main(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::reduced_groebner_basis(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Hessian matrix: all second-order partial derivatives.
Definition at line 2103 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::partial().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval_hessian(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Homomorphic evaluation: reduce to univariate by substitution.
Substitutes all variables except keep_var with values from eval_pts, producing a univariate polynomial in \(x_{\text{keep\_var}}\).
| [in] | keep_var | Index of the variable to keep (0-based). |
| [in] | eval_pts | Array of size num_vars()-1 with substitution values, ordered by variable index (skipping keep_var). |
| std::domain_error | if keep_var >= num_vars(). |
| std::domain_error | if eval_pts.size() != num_vars()-1. |
Definition at line 3319 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_Polynomial< Coefficient >::get_coeff(), Aleph::multi_poly_detail::int_power(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Gen_Polynomial< Coefficient >::set_coeff().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::factorize(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestatic |
Test membership in an ideal via Gröbner basis.
A polynomial belongs to the ideal generated by the given generators if and only if its remainder modulo a Gröbner basis of the ideal is zero.
| [in] | f | Polynomial to test. |
| [in] | generators | Array of generator polynomials. |
f is in the ideal; false otherwise. | std::domain_error | if generators is empty or contains zero polynomials |
| std::domain_error | if iteration limit is exceeded |
Definition at line 2909 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis().
Referenced by main(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::radical_member(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestatic |
Power of an ideal: I^n = I · I · ... · I (n times).
Computes the nth power of an ideal by repeated ideal multiplication. Special cases: I^0 = ⟨1⟩ (the unit ideal), I^1 = I.
| [in] | gens | Generator polynomials (non-empty, no zeros). |
| [in] | n | Exponent (non-negative integer). |
| std::domain_error | if gens is empty or contains zero |
n. Definition at line 3021 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_product(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero().
|
inlinestatic |
Product of two ideals: I · J = ⟨a_i · b_j : a_i ∈ I, b_j ∈ J⟩.
Computes all pairwise products of generators from two ideals. The result is a set of |a| × |b| polynomials (may contain duplicates).
| [in] | a | First ideal generators (non-empty, no zeros). |
| [in] | b | Second ideal generators (non-empty, no zeros). |
| std::domain_error | if a or b is empty |
| std::domain_error | if any generator is zero |
| std::invalid_argument | if nvars mismatch |
Definition at line 2978 of file tpl_multi_polynomial.H.
References ah_domain_error_if, ah_invalid_argument_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), k, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Array< T >::size().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_power(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestatic |
Sum of two ideals: I + J = ⟨generators(I) ∪ generators(J)⟩.
Concatenates the generators of two ideals to form their sum. No Gröbner computation is performed; the result is the union of generators.
| [in] | a | First ideal generators (non-empty, no zeros). |
| [in] | b | Second ideal generators (non-empty, no zeros). |
| std::domain_error | if a or b is empty |
| std::domain_error | if any generator in a or b is zero |
| std::invalid_argument | if nvars mismatch between a and b |
Definition at line 2935 of file tpl_multi_polynomial.H.
References ah_domain_error_if, ah_invalid_argument_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Array< T >::size().
|
inlinestatic |
Test equality of two ideals: I = J.
Two ideals are equal if and only if each contains the other. Equivalent to: contains_ideal(I, J) && contains_ideal(J, I).
| [in] | I_gens | Generators of ideal I (non-empty, no zeros). |
| [in] | J_gens | Generators of ideal J (non-empty, no zeros). |
| std::domain_error | if either ideal is empty or contains zero |
| std::invalid_argument | if nvars mismatch |
Definition at line 3119 of file tpl_multi_polynomial.H.
References ah_domain_error_if, ah_invalid_argument_if, Aleph::and, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_ideal(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
|
inlinestatic |
Multivariate interpolation via Newton divided differences (Chung-Yao).
Constructs a polynomial that passes through all points in a tensor-product grid. Uses dimension-by-dimension Newton divided-differences table.
| [in] | grid | Array of size num_vars; grid[d] is array of nodes in dimension d (must be distinct). |
| [in] | values | Array of function values on the grid (must have size = product of grid sizes). |
| [in] | nvars | Number of variables. |
| std::domain_error | if grid sizes don't match data size, or duplicate nodes found. |
Definition at line 2184 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), dim(), m, nodes, Aleph::Array< T >::size(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::variable().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_interpolated_factors_for_main_var(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinenoexcept |
True if constant or zero (total degree 0).
Definition at line 898 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::multi_poly_detail::is_zero_index().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::factor_recombination(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::factorize(), main(), TEST(), TEST(), and TEST().
|
inlinenoexcept |
True if this is the zero polynomial.
Definition at line 892 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_divides_exactly(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduce_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_ideal(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::content(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::factor_recombination(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::factorize(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_power(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_product(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_sum(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideals_equal(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_term(), main(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::primitive_part(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::radical_member(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zero_and_duplicates(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_str().
|
inlinestaticprivate |
Definition at line 476 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::canonical_pair(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Pair_Candidate::i, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Pair_Candidate::j, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Pair_Candidate::lcm, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Pair_Candidate::lcm_degree.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Pair_Candidate_Less::operator()().
|
inline |
Leading coefficient.
| std::domain_error | if the polynomial is zero. |
Definition at line 966 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_term().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::content(), and main().
|
inline |
Leading monomial (exponent vector of the leading term).
| std::domain_error | if the polynomial is zero. |
Definition at line 975 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_term().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::minimize_groebner_basis().
|
inlinestaticprivatenoexcept |
Definition at line 446 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::enqueue_pair_if_needed(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis().
|
inline |
Leading term (largest monomial in the ordering).
| std::domain_error | if the polynomial is zero. |
Definition at line 955 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), and m.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_coeff(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_monomial(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestaticprivate |
Definition at line 426 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduce_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduced_generators(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::reduced_groebner_basis().
|
inlinestaticprivate |
Definition at line 510 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::canonical_pair(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Pair_Candidate::i, Aleph::multi_poly_detail::lcm_indices(), and Aleph::multi_poly_detail::total_degree().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::rebuild_groebner_pair_state().
|
inlinestaticprivate |
Definition at line 607 of file tpl_multi_polynomial.H.
References Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::multi_poly_detail::divides_index(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_monomial(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::reduced_groebner_basis().
|
inlinestatic |
A single monomial \(c \, x^{\alpha}\).
| [in] | nvars | Number of variables. |
| [in] | idx | Exponent vector \(\alpha\). |
| [in] | c | Coefficient (default 1). |
Definition at line 880 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), and Aleph::blossom_maximum_cardinality_matching().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), main(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::radical_member(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::s_poly(), and TEST().
|
inlineprivate |
Pad an index to nvars_ trailing zeros.
Definition at line 421 of file tpl_multi_polynomial.H.
References Aleph::multi_poly_detail::extend_index(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_at().
|
inlinenoexcept |
Number of non-zero terms.
Definition at line 914 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs.
Referenced by main(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator==(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_binary().
|
inlinenoexcept |
Number of variables.
Definition at line 908 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_count_active_vars(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_exact_quotient(), main(), Aleph::operator-(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Polynomial inequality.
Definition at line 1453 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching().
|
inline |
Evaluate at a point (function-call syntax).
| [in] | pt | Array of values. |
| std::domain_error | if pt has fewer elements than num_vars(). |
Definition at line 1423 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval().
|
inline |
Multiply by a scalar.
| [in] | s | Scalar. |
Definition at line 1308 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and r.
|
inline |
Polynomial multiplication.
| [in] | q | Multiplicand. |
Definition at line 1259 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::multi_poly_detail::add_indices(), Aleph::blossom_maximum_cardinality_matching(), Aleph::multi_poly_detail::extend_index(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::num_terms(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and r.
|
inline |
In-place scalar multiplication.
| [in] | s | Scalar. |
*this. Definition at line 1327 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::scale_inplace().
|
inline |
In-place polynomial multiplication.
| [in] | q | Multiplicand. |
*this. Definition at line 1294 of file tpl_multi_polynomial.H.
|
inline |
Add a scalar constant term.
| [in] | s | Scalar addend. |
s. Definition at line 1165 of file tpl_multi_polynomial.H.
References r.
|
inline |
Polynomial addition.
| [in] | q | Addend. |
Definition at line 1134 of file tpl_multi_polynomial.H.
References r.
|
inline |
In-place addition of a scalar constant term.
| [in] | s | Scalar addend. |
*this. Definition at line 1176 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
|
inline |
In-place addition.
| [in] | q | Addend. |
*this. Definition at line 1145 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::scale_inplace().
|
inline |
Unary negation.
Definition at line 1237 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and r.
|
inline |
Subtract a scalar constant term.
| [in] | s | Scalar subtrahend. |
s. Definition at line 1217 of file tpl_multi_polynomial.H.
References r.
|
inline |
Polynomial subtraction.
| [in] | q | Subtrahend. |
Definition at line 1186 of file tpl_multi_polynomial.H.
References r.
|
inline |
In-place subtraction of a scalar constant term.
| [in] | s | Scalar subtrahend. |
*this. Definition at line 1228 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
|
inline |
In-place subtraction.
| [in] | q | Subtrahend. |
*this. Definition at line 1197 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
|
inline |
Divide by a scalar.
| [in] | s | Scalar divisor (must not be zero). |
| std::domain_error | if s is zero. |
Definition at line 1338 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and r.
|
inline |
In-place scalar division.
| [in] | s | Scalar divisor (must not be zero). |
*this. | std::domain_error | if s is zero. |
Definition at line 1358 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divide_scalar_inplace().
|
inline |
Polynomial equality.
| [in] | q | Other polynomial. |
Definition at line 1436 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_at(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::eq(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::num_terms().
|
inlinestaticprivate |
Definition at line 500 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::canonical_pair(), and Aleph::DynMapTree< Key, Data, Tree, Compare >::contains().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::enqueue_pair_if_needed(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pair_is_zero_known().
|
inlinestaticprivate |
Definition at line 505 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pair_is_recorded().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::redundant_pair_by_chain_criterion().
|
inline |
Partial derivative with respect to a variable.
Computes \(\frac{\partial^n p}{\partial x_{\text{var}}^n}\) using the falling factorial rule.
| [in] | var | Variable index (0-based). |
| [in] | n | Order of derivative (default 1). |
| std::domain_error | if var >= num_vars(). |
\[ c \cdot \alpha_{\text{var}}^{\underline{n}} \cdot x^{\alpha - n \cdot e_{\text{var}}} \]
where \(\alpha^{\underline{n}}\) is the falling factorial.Definition at line 2056 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::multi_poly_detail::decrement_index_at(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), k, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::gradient(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::hessian(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestaticprivate |
Definition at line 543 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::canonical_pair(), Aleph::DynBinHeap< T, Compare >::getMin(), and Aleph::GenBinHeap< NodeType, Key, Compare >::is_empty().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis().
|
inline |
Exponentiation \(p^n\)by repeated squaring.
| [in] | n | Exponent. |
n == 0. Definition at line 1372 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
|
inline |
Primitive part: polynomial divided by its content.
Returns \(f / \text{content}(f)\). The result has \(\gcd\)of coefficients equal to 1 and positive leading coefficient.
is_zero().Definition at line 3272 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::content(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and r.
Referenced by TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Promote to a polynomial with more variables.
All existing terms are padded with trailing-zero exponents.
| [in] | new_nv | New number of variables (>= current num_vars). |
| std::domain_error | if new_nv < num_vars(). |
Definition at line 1573 of file tpl_multi_polynomial.H.
References ah_domain_error_if, Aleph::blossom_maximum_cardinality_matching(), Aleph::multi_poly_detail::extend_index(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and r.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::radical_member(), and TEST().
|
inlinestatic |
Test membership in radical of ideal: f ∈ √I.
Uses the Rabinowitsch trick: f ∈ √I (radical of I in k[x₀,...,x_{n−1}]) if and only if 1 ∈ I + ⟨1 − y·f⟩ in k[x₀,...,x_{n−1}, y]. Returns true if the augmented ideal contains 1.
| [in] | f | Polynomial to test (nvars must match generators if non-zero). |
| [in] | gens | Generators of ideal I (non-empty, no zeros). |
| std::domain_error | if gens is empty or contains zero |
| std::invalid_argument | if f is non-zero with mismatched nvars |
Definition at line 3163 of file tpl_multi_polynomial.H.
References ah_domain_error_if, ah_invalid_argument_if, Aleph::and, Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_member(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::monomial(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::promote().
Referenced by TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestaticprivate |
Definition at line 738 of file tpl_multi_polynomial.H.
References Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::enqueue_pair_if_needed(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::make_pair_candidate(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis().
|
inline |
Polynomial reduction modulo an ideal (one-liner).
Reduces this polynomial modulo a set of divisor polynomials by computing the division remainder.
| [in] | divisors | Array of divisor polynomials. |
| std::domain_error | if divisors is empty |
Definition at line 2889 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod().
|
inlinestatic |
Reduced Gröbner basis (minimized and normalized).
Computes a Gröbner basis and then reduces it by:
| [in] | generators | Array of generator polynomials. |
| std::domain_error | if generators is empty or contains zero polynomials |
| std::domain_error | if iteration limit is exceeded |
Definition at line 2840 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::make_monic_inplace(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::minimize_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, r, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zero_and_duplicates().
Referenced by main(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inlinestaticprivate |
Definition at line 522 of file tpl_multi_polynomial.H.
References Aleph::and, Aleph::blossom_maximum_cardinality_matching(), Aleph::multi_poly_detail::divides_index(), k, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pair_is_zero_known().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::enqueue_pair_if_needed(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis().
|
inlinestaticprivate |
Definition at line 651 of file tpl_multi_polynomial.H.
References Aleph::Array< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_equal_polynomial(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::autoreduce_groebner_basis(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::reduced_groebner_basis().
|
inline |
Remove all terms whose coefficient is approximately zero.
Definition at line 1071 of file tpl_multi_polynomial.H.
References Aleph::DynList< T >::append(), Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and k.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divide_scalar_inplace(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::scale_inplace().
|
inlinestatic |
S-polynomial (Sylvester polynomial) of two polynomials.
Computes the S-polynomial used in Buchberger's algorithm: S(f, g) = (lcm(lm(f), lm(g)) / lm(f)) * f - (lcm(lm(f), lm(g)) / lm(g)) * g
| [in] | f | First polynomial (non-zero). |
| [in] | g | Second polynomial (non-zero). |
| std::domain_error | if f or g is zero |
| std::invalid_argument | if f and g have different number of variables |
Definition at line 2700 of file tpl_multi_polynomial.H.
References ah_domain_error_if, ah_invalid_argument_if, Aleph::blossom_maximum_cardinality_matching(), gamma(), Aleph::multi_poly_detail::lcm_indices(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::monomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::multi_poly_detail::sub_indices().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
inline |
Multiply every coefficient by s in place.
| [in] | s | Scalar. |
Definition at line 1089 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeffs, and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zeros().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*=(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator+=().
|
inline |
All terms as a list (ascending order).
Definition at line 1032 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), and r.
Referenced by TEST().
|
inline |
Serialize polynomial to binary stream.
Format: nvars (uint64) | n_terms (uint64) | ( exponents (uint64×nvars) | coeff (double) )×n_terms
| [out] | out | Output stream. |
| std::ios_base::failure | if write fails. |
Definition at line 2394 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), exp(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::num_terms(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and out.
|
inline |
Serialize polynomial to JSON string.
Format: {"nvars":n,"terms":[{"e":[...exponents...],"c":coeff},...]}.
Definition at line 2294 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Array< T >::size().
|
inline |
Human-readable string.
Uses variable names x, y, z for up to 3 variables, or x0, x1, ... for more. Custom names can be supplied via names.
| [in] | names | Optional variable-name list. |
"3*x^2*y - 2". Definition at line 1470 of file tpl_multi_polynomial.H.
References Aleph::blossom_maximum_cardinality_matching(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_is_zero(), FunctionalMethods< Container, T >::for_each(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term_desc(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::multi_poly_detail::is_zero_index(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::nvars_, and Aleph::Array< T >::size().
Referenced by main(), Aleph::operator<<(), print_result(), TEST(), and TEST().
|
inlinestatic |
The polynomial \(x_i\)(a single variable).
| [in] | nvars | Number of variables. |
| [in] | var | Variable index (0-based). |
Definition at line 866 of file tpl_multi_polynomial.H.
References Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), ah_domain_error_if, and Aleph::blossom_maximum_cardinality_matching().
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::interpolate(), main(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), TEST(), and TEST().
|
private |
Definition at line 418 of file tpl_multi_polynomial.H.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::Gen_MultiPolynomial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::add_to_coeff(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::coeff_at(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::content(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::degree(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::degree_in(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divide_scalar_inplace(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::for_each_term_desc(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_constant(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::is_zero(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::leading_term(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::num_terms(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::primitive_part(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::remove_zeros(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::scale_inplace().
|
private |
Definition at line 416 of file tpl_multi_polynomial.H.
Referenced by Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::_substitute_var(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::contains_ideal(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::divmod(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval_gradient(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::eval_hessian(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::from_json(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::gradient(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::hessian(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::homomorphic_eval(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_product(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideal_sum(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::ideals_equal(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::minimize_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::norm(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::num_vars(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator*(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator+=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator+=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator-=(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::operator/(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::partial(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::pow(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::primitive_part(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::promote(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::rebuild_groebner_pair_state(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::reduced_groebner_basis(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::s_poly(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_binary(), Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_json(), and Aleph::Gen_MultiPolynomial< Coefficient, MonomOrder >::to_str().