polyh_rivols_gen
and polyh_rivols_ineq
generate iid samples
from the intrinsic volumes distribution of polyhedral cones.
polyh_rivols_gen(n, A, solver = "nnls", reduce = TRUE, tol = 1e-07) polyh_rivols_ineq(n, A, solver = "nnls", reduce = TRUE, tol = 1e-07)
n | number of samples |
---|---|
A | matrix |
solver | either "nnls" or "mosek" |
reduce | logical; if |
tol | tolerance used in the reduction step (single precision machine epsilon by default) |
The outputs of polyh_rivols_gen(n,A)
and polyh_rivols_ineq(n,A)
,
with the default value reduce==TRUE
,
are lists containing the following elements:
dimC
: the dimension of the linear span of C
,
linC
: the lineality of the cone C
,
QL
: an orthogonal basis of the orthogonal complement of the
linear span of C
,
set to NA
if dim(C)==d
,
QC
: an orthogonal basis of the projection of C
onto
the orthogonal complement of the lineality space of C
,
set to NA
if C
is a linear space,
A_reduced
: a matrix defining the reduced cone,
samples
: an n
-element vector of integers in linC,...,dimC
representing iid samples from the distribution on {0,1,...,d}
with the
probability for k
given by v_k(C)
, where
either C={Ax|x>=0}
or C={y|A^Ty<=0}
,
multsamp
: a (d+1)
-element vector of integers
in 0,...,n
that sum up to n
representing the frequency
table of the above categorical samples.
If reduce==FALSE
then the output is a list containing only
the vectors samples
and multsamp
.
The samples are from the intrinsic volumes distribution, which is the
distribution on {0,1,...,d}
with the
probability for k
given by v_k(C)
, where C
is the
polyhedral cone given by the matrix A
,
either through its columns spanning the cone, C={Ax|x>=0}
,
or through its rows giving the inequalities of the cone, C={y|A^Ty<=0}
.
If reduce==TRUE
(default), then a
reduced form of the cone will be computed and returned;
however, the intrinsic volumes distribution will be that of the original
(non-reduced) cone.
polyh_rivols_gen
: Interprets A
as generator matrix of the cone,
that is, the cone is given by {Ax|x>=0}
; the
matrix A_reduced
defines the reduced cone
in the same way.
polyh_rivols_ineq
: Interprets A
as inequality matrix of the cone,
that is, the cone is given by {y|A^Ty<=0}
; the
matrix A_reduced
defines the reduced cone
in the same way.
See this vignette for further info.
Package: conivol
# using the 'generators' interpretation set.seed(1234) out_gen <- polyh_rivols_gen(20, matrix(1:12,4,3)) print(out_gen)#> $dimC #> [1] 2 #> #> $linC #> [1] 0 #> #> $QL #> [1] NA #> #> $QC #> [,1] [,2] #> [1,] -0.4036176 -0.7328662 #> [2,] -0.4647441 -0.2898498 #> [3,] -0.5258707 0.1531666 #> [4,] -0.5869972 0.5961831 #> #> $A_reduced #> [,1] [,2] #> [1,] -5.258707 -21.1085440 #> [2,] 1.531666 -0.6552639 #> #> $samples #> [1] 2 0 0 1 1 1 2 0 1 1 0 1 1 0 1 0 1 1 1 1 #> #> $multsamp #> [1] 6 12 2 0 0 #>set.seed(1234) out_gen$linC + polyh_rivols_gen(20, out_gen$A_reduced, solver="mosek", reduce=FALSE)$samples#> [1] 2 0 0 1 1 1 2 0 1 1 0 1 1 0 1 0 1 1 1 1# using the 'inequalities' interpretation set.seed(1234) out_ineq <- polyh_rivols_ineq(20, matrix(1:12,4,3)) print(out_ineq)#> $dimC #> [1] 4 #> #> $linC #> [1] 2 #> #> $QL #> [1] NA #> #> $QC #> [,1] [,2] #> [1,] -0.4036176 -0.7328662 #> [2,] -0.4647441 -0.2898498 #> [3,] -0.5258707 0.1531666 #> [4,] -0.5869972 0.5961831 #> #> $A_reduced #> [,1] [,2] #> [1,] -5.258707 -21.1085440 #> [2,] 1.531666 -0.6552639 #> #> $samples #> [1] 2 4 4 3 3 3 2 4 3 3 4 3 3 4 3 4 3 3 3 3 #> #> $multsamp #> [1] 0 0 2 12 6 #>set.seed(1234) out_ineq$linC + polyh_rivols_ineq(20, out_ineq$A_reduced, solver="mosek", reduce=FALSE)$samples#> [1] 2 4 4 3 3 3 2 4 3 3 4 3 3 4 3 4 3 3 3 3