|
| | ProductsOfLinearsBlock () |
| | ProductsOfLinearsBlock (size_t num_vars, std::vector< Mat< complex_mp > > factors) |
| size_t | NumFunctions () const |
| | Number of functions (rows the block contributes to the system).
|
| std::vector< int > | Degrees () const |
| | Each function is a product of its linear factors, so its degree is the factor count.
|
| std::vector< int > | Degrees (VariableGroup const &) const |
| | Per-function degrees with respect to a given variable group (same as the total degrees).
|
| bool | IsHomogenized () const |
| | Whether Homogenize has folded the constant column onto a homogenizing variable.
|
| void | Homogenize (VariableGroup const &, std::shared_ptr< node::Variable > const &) |
| | Homogenize with respect to an affine variable group: fold each factor's constant column onto the homogenizing variable.
|
| bool | IsHomogeneous (VariableGroup const &) const |
| | Homogeneous once Homogenize has run, or when every factor's constant column is zero (the form the m-homogeneous start system builds directly).
|
| bool | IsPolynomial (VariableGroup const &) const |
| | Always true: a product of linear forms is a polynomial.
|
| size_t | NumVariables () const |
| | Number of variables the block expects in the input vector.
|
| std::vector< Mat< complex_mp > > const & | Factors () const |
| | The master (highest-precision) coefficient matrices, one per function; matrix i is (number of factors of f_i) x (num_vars+1), the last column being the constant/augmenting term.
|
| void | Describe (std::ostream &out, size_t &row, VariableGroup const &vars, bool verbose) const |
| | Human-facing description: terse shows prod of k linear forms; verbose shows the actual product of affine factors (x - 1) * (x + 1).
|
| bool | DependsOnPathVariable () const |
| | Products of linears do not depend on the path variable.
|
| bool | HasConstantJacobian () const |
| | The Jacobian is not constant (it depends on x), unlike a slice.
|
| void | Differentiate () const |
| | Analytic block: nothing symbolic to differentiate.
|
| unsigned | Precision () const |
| | Get the block's current working precision.
|
| void | Precision (unsigned new_precision) const |
| | Set the working precision; recasts the mpfr working coefficients from the master.
|
| template<typename T> |
| void | EvalInPlace (Eigen::Ref< Vec< T > > result, Vec< T > const &vars, T const &) const |
| | Evaluate the block's function values into a caller-provided segment.
|
| template<typename T> |
| void | JacobianInPlace (Eigen::Ref< Mat< T > > J, Vec< T > const &vars, T const &) const |
| | Evaluate the block's Jacobian (d f_i / d x_j) into a caller-provided block.
|
| template<typename T> |
| void | TimeDerivInPlace (Eigen::Ref< Vec< T > > result, Vec< T > const &, T const &) const |
| | Time-derivative into a caller-provided segment.
|
A block of system functions, each a product of linear forms.
Value-in / value-out: evaluation takes the variable vector and writes into a caller- provided segment, so the block is self-contained and unit-testable without a System.
Homogenize with respect to an affine variable group: fold each factor's constant column onto the homogenizing variable.
The System prepends the homogenizing variable to the ordering, so its column is the old constant column moved to the front – exactly what LinearFormsBlock does. The m-homogeneous start system builds its block already homogeneous (zero constant column, homogenizing variables among the columns) and is never asked; an affine block built by add_products_of_linears – a regeneration deformation, say – used to meet a no-op here and then be reported homogeneous, so a homogenized System kept an affine block with the wrong variable count and could neither be expanded to nodes nor tracked projectively (b2#376). A second affine group is not yet supported and throws.