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”值。
多面体的方法和操作:
现在我们已经创建了一个简单的多面体,我们可以对它们执行一些基本操作。例如,多面体模块使我们能够比较两个多面体。
考虑两个多面体p1和p2 ,然后:
- p1 == p2:这意味着p1的每个元素都在p2中,并且p2的每个元素都在p1中。因此, p1和p2完全相同。
- p1 <= p2:这意味着p1是p2的子集。因此, p1的每个元素都在p2中,但p2可能并非如此。
- p2 <= p1:这意味着p2是p1的子集。因此, 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)
输出: