Either a functor class satisfying the extended requirements
for unary operations, or
an untyped template of such a class wrapped into BuildUnary or BuildUnaryIt
(preferably expressed via the convenience typedef from namespace polymake::operations.
The exact return type is ListMatrix< SparseVector< typename GenericVector::element_type > > .
The exact return type is typename GenericMatrix::persistent_type .
Either a functor class satisfying the extended requirements
for binary operations, or
an untyped template of such a class wrapped into BuildBinary or BuildBinaryIt
(preferably expressed via the convenience typedef from namespace polymake::operations.
The exact return type is typename GenericVector::persistent_type .
This assertion is checked only in the DIMENSION_CHECKS compilation mode.
Prerequisits
#include <linalg.h>
using namespace polymake;
There is a very limited set of basic functions operating on
all template vector and matrix classes.
They are defined as template functions accepting any exact numerical type (first of all,
Rational), and as floating-point specializations doing some rudimentary rounding error checking.
The main focus of our interest lies on the exact computations; if you need high-quality numerical solutions
for floating-point input, you are definitely wrong here!
Find the linear subspace orthogonal to the rows of A or to V. The rows of the resulting matrix
are basis vectors of the subspace. The result has always the same column dimension as A (or V.dim()),
even if it has 0 rows.
The result of the oriented variant satisfies an additional restriction:
sign( det(Result/V) )==req_sign.
Allows for incremental computation of the orthogonal subspace. H holds the basis to start with;
it gets reduced in the course of iterating over v.
v must be end-sensitive.
row_basis_consumer and col_basis_consumer should be output iterators
consuming the row and column indices of the basis of the subspace spanned by v.
Apply the Gram-Schmidt orthogonalization to the vector sequence.
v must be end-sensitive.
The affine variant keeps the first coordinate untouched and does not involve it in the computations.
It is designed for vectors containing homogeneous coordinates of
hyperplanes, which should be made affinely orthogonal to each other.
A H-polyhedron (that is, given by inequalities) contains at least one affine line,
and therefore cannot be unambiguously described as a vertex set.
Currently polymake cannot handle such polyhedra.