所以我有一组点V,它是凸多面体的顶点,也是一个单独的点p。基本上,我想检查是否包含在V中。为此,我设置了一个线性程序,检查是否存在超平面,使得V中的所有点位于一侧,而p位于另一侧,如此(使用YALMIP):
z=sdpvar(size(p,1),1);
sdpvar z0;
LMI=[z'*vert-z0<=0,z'*probs-z0<=1];
solvesdp(LMI,-z'*probs+z0);
超平面由点集z定义,使得z'* x - z0 = 0,这样如果我得到点p大于零的值,并且对于所有顶点得到小于零的值,那么我知道他们被飞机分开了(第二个约束就是问题是有限的)。这很好用。但是,现在我想检查是否存在将两个点集分开的超平面,使其包含原点。为此,我只需设置z0 = 0,即完全删除它,得到:
z=sdpvar(size(p,1),1);
LMI=[z'*vert<=0,z'*probs<=1];
solvesdp(LMI,-z'*probs);
然而,现在,即使在我知道有解决方案的情况下,它也找不到它,而我却不知道为什么会这样。作为测试,我使用了顶点
v1=[0;0;0];v2=[1;0;0];v3=[0;1;0];v4=[1;1;1];
和点
p=[0.4;0.6;0.6];
绘制时,看起来像图片here。
所以很明显,应该有一个平面将孤立点与包含原点(多面体的前点和中心点)的多面体分开。
我已经尝试过的一件事是将原点上的多面体的顶点从原点偏移一点(10 ^ -5),这样平面就不会碰到多面体(虽然LP应该允许为此,但这也不起作用。
我很感激任何想法!