Cones
Introduction
Let $\mathbb{F}$ be an ordered field; the default is that $\mathbb{F}=\mathbb{Q}$ is the field of rational numbers and other fields are not yet supported everywhere in the implementation.
A set $C \subseteq \mathbb{F}^n$ is called a (polyhedral) cone if it can be written as the set of nonnegative linear combinations of finitely many vectors in $\mathbb{F}^n$. Equivalently, cones can be written as the intersection of finitely many homogeneous linear inequalities.
Any cone is a special case of a polyhedron. Conversely, intersecting a cone with a suitable affine hyperplane yields a polyhedron whose faces are in bijection with the faces of the cone. Going back and forth between polyhedra and their homogenizations, the cones, is a frequent operation. This is one reason for keeping cones as a distinct type.
Construction
positive_hull
— Methodpositive_hull([::Type{T} = fmpq,] R::AbstractCollection[RayVector] [, L::AbstractCollection[RayVector]]; non_redundant::Bool = false) where T<:scalar_types
A polyhedral cone, not necessarily pointed, defined by the positive hull of the rays R
, with lineality given by L
.
R
is given row-wise as representative vectors, with lineality generated by the rows of L
, i.e. the cone consists of all positive linear combinations of the rows of R
plus all linear combinations of the rows of L
.
This is an interior description, analogous to the $V$-representation of a polytope.
Redundant rays are allowed.
Examples
To construct the positive orthant as a Cone
, you can write:
julia> R = [1 0; 0 1];
julia> PO = positive_hull(R)
A polyhedral cone in ambient dimension 2
To obtain the upper half-space of the plane:
julia> R = [0 1];
julia> L = [1 0];
julia> HS = positive_hull(R, L)
A polyhedral cone in ambient dimension 2
secondary_cone
— Methodsecondary_cone(SOP::SubdivisionOfPoints)
Return the secondary cone of a subdivision of points, the closure of all the weight vectors inducing the given subdivision of points.
Examples
For a non-regular subdivision, the secondary cone can still contain non-trivial weights, but it will not be full-dimensional.
julia> moaepts = [4 0 0; 0 4 0; 0 0 4; 2 1 1; 1 2 1; 1 1 2];
julia> moaeimnonreg0 = IncidenceMatrix([[4,5,6],[1,4,2],[2,4,5],[2,3,5],[3,5,6],[1,3,6],[1,4,6]]);
julia> MOAE = SubdivisionOfPoints(moaepts, moaeimnonreg0)
A subdivision of points in ambient dimension 3
julia> C = secondary_cone(MOAE)
A polyhedral cone in ambient dimension 6
julia> dim(C)
4
Auxiliary functions
```@docs ambientdim(C::Cone) contains(C::Cone, v::AbstractVector) fvector(C::Cone) hilbertbasis(C::Cone{fmpq}) codim(C::Cone) dim(C::Cone) polarize(C::Cone{T}) where T<:scalartypes intersect(C0::Cone{T}, C1::Cone{T}) where T<:scalartypes ispointed(C::Cone) isfulldimensional(C::Cone) linealitydim(C::Cone) linealityspace(C::Cone{T}) where T<:scalartypes nfacets(C::Cone) nrays(C::Cone) rays(C::Cone{T}) where T<:scalartypes raysmodulolineality(C::Cone{T}) where T<:scalartypes