点集的MATLAB线性分离

时间:2015-07-31 12:52:33

标签: matlab linear-programming convex

所以我有一组点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应该允许为此,但这也不起作用。

我很感激任何想法!

0 个答案:

没有答案