# posHull -- computes the positive hull of rays, cones, and the cone over a polyhedron

## Synopsis

• Usage:
C = posHull M
C = posHull(M,N)
C = posHull(C1,C2)
C = posHull P
C = posHull L
• Inputs:
• M, , with entries inZZ or QQ
• N, , with entries inZZ or QQ
• C1,
• C2,
• L, a list
• Outputs:

## Description

posHull computes the positive hull of the input. In the first two cases it considers the columns of M as a set of rays and the columns of N (if given) as generators of the lineality space and computes the cone that is the positive hull of the rays plus the lineality space. The two matrices must have the same number of rows, i.e. the columns must lie in the same ambient space. If N is not given or equal to 0 then the resulting cone is pointed. The rays need not be a minimal generating set of the cone. If two cones are inserted it computes their positive hull if they lie in the same ambient space. In the case of a polyhedron it computes the cone given by all positive multiples of points of the polyhedron. If applied to a list, it may contain a combination of the following in any order.

• Rays, given by a matrix R over ZZ or QQ
• Rays and a lineality space, given by a sequence (R,LS) of two matrices over ZZ or QQ
• Cone
• Polyhedron

Then posHull computes the positive hull of all inserted objects, if they are in the same ambient space, i.e. all matrices must have the same number of rows, which must equal the ambient dimension of all cones and polyhedra.

As a first example consider the following 2 dimensional cone in 3 space:

 i1 : R = matrix {{1,2},{2,1},{0,0}} o1 = | 1 2 | | 2 1 | | 0 0 | 3 2 o1 : Matrix ZZ <--- ZZ i2 : C = posHull R o2 = {ambient dimension => 3 } dimension of lineality space => 0 dimension of the cone => 2 number of facets => 2 number of rays => 2 o2 : Cone

We can construct a full dimensional cone out of this one by adding a lineality space for example:

 i3 : LS = matrix {{0},{0},{1}} o3 = | 0 | | 0 | | 1 | 3 1 o3 : Matrix ZZ <--- ZZ i4 : C1 = posHull (R,LS) o4 = {ambient dimension => 3 } dimension of lineality space => 1 dimension of the cone => 3 number of facets => 2 number of rays => 2 o4 : Cone

The resulting cone is not pointed anymore, because it contains the subspace spanned by (0,0,1). To get a full dimensional pointed cone we have to add another ray to C. For this we can apply posHull to a list containing C and the new ray:

 i5 : r = matrix {{0},{1},{2}} o5 = | 0 | | 1 | | 2 | 3 1 o5 : Matrix ZZ <--- ZZ i6 : C2 = posHull {C,r} o6 = {ambient dimension => 3 } dimension of lineality space => 0 dimension of the cone => 3 number of facets => 3 number of rays => 3 o6 : Cone

Another way would be, if we would have r not as a ray but already as a cone:

 i7 : r = posHull r o7 = {ambient dimension => 3 } dimension of lineality space => 0 dimension of the cone => 1 number of facets => 1 number of rays => 1 o7 : Cone

In this case we can just take the positive hull of the two cones:

 i8 : C3 = posHull(C,r) o8 = {ambient dimension => 3 } dimension of lineality space => 0 dimension of the cone => 3 number of facets => 3 number of rays => 3 o8 : Cone i9 : C3 == C2 o9 = true

## Ways to use posHull :

• "posHull(Cone,Cone)"
• "posHull(List)"
• "posHull(Matrix)"
• "posHull(Matrix,Matrix)"
• "posHull(Polyhedron)"

## For the programmer

The object posHull is .