Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 假设我们知道多面体的顶点,并希望得到它的半空间表示a*x<;=B_Python_Algorithm_Matlab_Computational Geometry_Polyhedra - Fatal编程技术网

Python 假设我们知道多面体的顶点,并希望得到它的半空间表示a*x<;=B

Python 假设我们知道多面体的顶点,并希望得到它的半空间表示a*x<;=B,python,algorithm,matlab,computational-geometry,polyhedra,Python,Algorithm,Matlab,Computational Geometry,Polyhedra,我想获得半空间表示法A*x使用Python包,可以从多面体的顶点计算凸多面体的半空间表示法,如下所示: 从顶点表示到半空间表示 如何计算凸多面体的半空间表示。 多面体以顶点表示形式给出, 这个脚本展示了如何转换顶点表示 到半空间表示。 """ 将numpy作为np导入 进口多面体 顶点=np.数组([[2,-2],[2,2],-10,2],-10,-2]) 多边形=多边形.qhull(顶点)#凸壳 #'poly'是'polytope.polytope.polytope'类的实例, #用于表示凸多

我想获得半空间表示法
A*x使用Python包,可以从多面体的顶点计算凸多面体的半空间表示法,如下所示:

从顶点表示到半空间表示 如何计算凸多面体的半空间表示。 多面体以顶点表示形式给出, 这个脚本展示了如何转换顶点表示 到半空间表示。 """ 将numpy作为np导入 进口多面体 顶点=np.数组([[2,-2],[2,2],-10,2],-10,-2]) 多边形=多边形.qhull(顶点)#凸壳 #'poly'是'polytope.polytope.polytope'类的实例, #用于表示凸多面体。 #非凸多面体也可以表示, #使用类“polytope.polytope.Region”。 print('凸多面体的半空间表示:') 打印('矩阵'A`:') 印刷品(poly.A) 打印('向量'b`:') 印刷品(poly.b) #打印(多边形)#另一种打印方式 #多面体的半空间表示
问题中给出的半空间表示表示相同的多面体 这个问题使用了两个不同的软件包 每一个都提供了不同的半空间表示。 如下面代码所示,这两个半空间 表示表示相同的多面体。代码 还表明,它们与上面使用 Python包
polytope

显示问题的半空间表示为同一多面体的“
”。
任何多面体都有无穷多个最小半空间表示。
下面的表示恰好是最小的,等于缩放和缩放
A的行和b的元素的排列。
"""
将numpy作为np导入
进口多面体
#使用“多边形”计算的半空间表示法`
#根据问题中给出的顶点表示
顶点=np.数组([[2,-2],[2,2],-10,2],-10,-2])
多边形=多边形.qhull(顶点)
#问题中给出的第一个半空间表示
A=np.array([
[-0.00000000e+00,-1.00000000e+00],
[-1.00000000e+00,-0.00000000e+00],
[4.93432455e-17,1.00000000 E+00],
[1.00000000e+00,-0.00000000e+00]]
b=np.数组([2,10,2,2.]))
问题1=多面体。多面体(A,b)
#问题中给出的第二个半空间表示法
A=np.array([
[0.0, -0.4472],
[0.4472, -0.0000],
[0.0, 0.4472],
[-0.0995, -0.0000]])
b=np.数组([0.8944,0.8944,0.8944,0.9950])
问题2=多面体。多面体(A,b)
#检查以上所有半空间表达是否正确
#表示相同的多面体
断言多边形==问题\u多边形\u 1,(多边形,问题\u多边形\u 1)
断言多边形==问题\u多边形\u 2,(多边形,问题\u多边形\u 2)
上面的Python代码可用于
polytope

可以使用软件包安装程序从安装软件包
polytope

pip安装polytope

这个主题超出了我的专业知识范围,但是您的python代码
顶点=映射(数组,[[2,-2],[2,2],-10,2],-10,-2]])
似乎有些奇怪。您是否正在尝试制作多维numpy数组?因为结果变量
顶点
是一个
贴图对象
,而不是
np.array
。对于函数
compute\u polytope\u halfspace()
,这实际上与
np.array([[2,-2],[2,2],[10,2],-10,-2]])
相同吗?@mimocha,看看这里的例子:我没有仔细看,但似乎两个输出都与比例因子相同。@YvesDaoust我不确定,符号不匹配,是吗?@GPrathap:是的,它们似乎是(当有标志时)。
  from numpy import array
  from pypoman import compute_polytope_halfspaces

  vertices = map(array, [[2,-2],[2, 2], [-10, 2], [-10, -2]])
  A, b = compute_polytope_halfspaces(vertices)
  print(A)
  print(b)
A =      [[ -0.00000000e+00  -1.00000000e+00]
             [ -1.00000000e+00  -0.00000000e+00]
             [  4.93432455e-17   1.00000000e+00]
             [  1.00000000e+00  -0.00000000e+00]]
b = [  2.  10.   2.   2.]
  vertices = [2 -2; 2 2; -10 2; -10 -2];
  Xc = Polyhedron(vertices);
      >> Xc.A

      ans =

              0   -0.4472
          0.4472   -0.0000
              0    0.4472
      -0.0995   -0.0000

      >> Xc.b

      ans =

          0.8944
          0.8944
          0.8944
          0.9950