is.inCH
returns TRUE
if and only if
p
is contained in the convex hull of the points given as
the rows of M
. If p
is a matrix, each row is tested individually, and
TRUE
is returned if all rows are in the convex hull.
is.inCH(p, M, verbose=FALSE, ...)
M
is a
$d$-dimensional vector.p
is (or all rows of p
are) in the closed convex hull of the points
in M
.
p
is in the convex hull of the $d$-vectors
forming the rows of M
if and only if there exists no separating
hyperplane between p
and the rows of M
. This condition
may be reworded as follows:
Letting $q=(1 p')'$ and $L = (1 M)$, if the maximum value of
$z'q$ for all $z$ such that $z'L \le 0$ equals zero
(the maximum must be at least zero since z=0 gives zero), then there is no
separating hyperplane and so p
is contained in the convex hull
of the rows of M
. So the question of interest becomes a
constrained optimization problem.
Solving this problem relies on the package lpSolve
to solve
a linear program. We may put the program in "standard form" by
writing $z=a-b$, where $a$ and $b$ are nonnegative
vectors. If we write $x=(a' b')'$, we obtain the linear program
given by:
Minimize $(-q' q')x$ subject to $x'(L -L) \le 0$ and
$x \ge 0$. One additional constraint arises because whenever any
strictly negative value of $(-q' q')x$ may be achieved, doubling
$x$ arbitrarily many times makes this value arbitrarily large
in the negative direction, so no minimizer exists. Therefore, we
add the constraint $(q' -q')x \le 1$.
This function is used in the "stepping" algorithm of Hummel et al
(2012).