📜  Python中的多面体

📅  最后修改于: 2022-05-13 01:55:16.433000             🧑  作者: Mango

Python中的多面体

Python为我们提供了一个第三方模块来操作多面体。对于不知道什么是多面体的人来说,多面体是与多边形或多面体相对应的 n 维几何中的一种几何形式。与其他几何图形(例如正方形或立方体)一样,多面体并不局限于单一维度。它可以是 2-D、3-D 或 nD。

多面体

n 维多面体通常表示为n-多面体。例如,2-D 多面体将表示为 2-多面体,3-D 多面体将表示为 3-多面体等。多面体使用半空间表示或 H 表示存储在Python中。这意味着多面体表示为两个矩阵和一个向量的向量矩阵乘法:

Ax <= B

这里,A 是一个 m*n 矩阵,x 是一组与 A 相乘的坐标,B 是一个 m*1 列矩阵。多面体模块将允许我们对这些多面体执行一些几何操作。让我们开始安装:

多面体是第三方模块,因此我们需要在我们的机器上安装它才能使用它。要安装模块,只需在终端中输入:

pip install polytope

安装后,我们将模块导入到我们的 IDE 中:

import polytope as pc

我们现在将使用 polytope 模块创建一个多面体:

# Python program to demonstrate
# polytopes
  
  
# Using numpy to create matrices
import numpy as np 
import polytope as pc
  
  
# Declaring numpy arrays
A = np.array([[1.0, 2.0],
              [3.0, -1.0],
              [-1.0, 4.0],
              [0.0, -2.0]])
  
b = np.array([2.0, 0.0, 3.0, 1.0])
  
p = pc.Polytope(A, b)
  
print(p)

输出:

多面体

在这里,我们使用 numpy 数组创建了矩阵 A 和 b。然后我们使用.Polytope()函数使用这些矩阵创建一个多面体。在这里,我们没有指定任何“x”值。

多面体的方法和操作:

现在我们已经创建了一个简单的多面体,我们可以对它们执行一些基本操作。例如,多面体模块使我们能够比较两个多面体。
考虑两个多面体p1p2 ,然后:

  • p1 == p2:这意味着p1的每个元素都在p2中,并且p2的每个元素都在p1中。因此, p1p2完全相同。
  • p1 <= p2:这意味着p1p2的子集。因此, p1的每个元素都在p2中,但p2可能并非如此。
  • p2 <= p1:这意味着p2p1的子集。因此, p2的每个元素都在p1中,但p1可能并非如此。

我们还可以使用以下方法检查元素是否在多面体中:

[4.0, 5.0] in p1

可用于多面体的一些基本数学运算包括:

  • p1.diff(p2)
  • p1.union(p2)
  • p1.intersect(p2)

例如:

# Python program to demonstrate
# polytopes
  
  
# Using numpy to create matrices
import numpy as np 
import polytope as pc 
  
# Declaring numpy arrays
A = np.array([[1.0,  2.0],
              [3.0, -1.0],
              [-1.0, 4.0],
              [0.0, -2.0]])
  
b = np.array([2.0, 0.0, 3.0, 1.0])
  
C = np.array([[1.0,  0.0],
              [2.0,  4.0],
              [3.0, -1.0],
              [1.0,  9.0]]) 
  
d = np.array([2.0, 0.0, -1.0, 3.0])
  
p1 = pc.Polytope(A, b)
p2 = pc.Polytope(C, d)
  
# Using diff method
p1.diff(p2)

输出:

多面体

我们可以迭代一个多面体区域。一个区域可以理解为一个包含两个多面体的容器,一个是开始,另一个是结束。考虑以下代码。

# Python program to demonstrate
# polytopes
  
  
import numpy as np 
import polytope as pc 
  
  
# Declaring numpy arrays
A = np.array([[1.0,  2.0],
              [3.0, -1.0],
              [-1.0, 4.0],
              [0.0, -2.0]])
  
b = np.array([2.0, 0.0, 3.0, 1.0])
  
C = np.array([[1.0,  0.0],
              [2.0,  4.0],
              [3.0, -1.0],
              [1.0,  9.0]]) 
  
d = np.array([2.0, 0.0, -1.0, 3.0])
  
p1 = pc.Polytope(A, b)
p2 = pc.Polytope(C, d)
r = pc.Region([p1, p2])

上面的代码将创建一个包含两个多面体的区域。这可以用作迭代器:

for polytope in r:
    print(polytope)

输出:

多面体