2

所以我有一组点 V,它们是凸多面体的顶点,还有一个单独的点 p。基本上,我想检查 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];

绘制时,它看起来像这里的图片。

所以很明显,应该有一个平面将孤点和包含原点的多面体(多面体的前点和中心点)分开。

我已经尝试过的一件事是将现在位于原点上的多面体的顶点从原点偏移一点(10^-5),这样飞机就不会接触到多面体(尽管 LP 应该允许这样做) ,但这也不起作用。

我很感激任何想法!

4

0 回答 0