【发布时间】:2020-03-24 19:43:36
【问题描述】:
我想在 Python 中设置一个长度为L 和周期性边界条件的二维框。一种方法是将参考框架固定在左下角,然后我有:
L = 5 # box length
x, y = 2, 3 # initial values
# step in my algorithm
x = (x + 4) % L
y = (y - 4) % L
显然,输出是x, y = (1, 4)。我们可以保证,对于每一步,粒子的位置都将保持在长度为 L 的盒子内。
好的,但是如果我想将参考框架设置在框的中心怎么办?下面的代码当然是行不通的:
x = (x + 4) % L/2
y = (y - 4) % L/2
我想要发生的是,如果一个粒子从 x=+L/2 一侧逃逸,那么它会以 x=-L/2 出现(对于 y 也是如此),但是模块运算符不能同时处理这个问题方式与前一种情况相同。
【问题讨论】:
-
模运算符“环绕”轴上
0点周围的值,按比例,因此它可能无法执行您需要的操作 - 这意味着您可能需要实际编写代码分别处理每种可能的情况。 -
保留你的定义,但在你修改它们之后从它们中减去 L/2。
x=((x-4) % L) - L/2等。内部操作确保您的坐标在 0 和 L 之间,然后通过减去 L/2 将其转换为以框为中心的坐标。新 x 的范围是(0-L/2, L-L/2)->(-L/2, L/2)。 -
@SyntaxVoidsupportsMonica 但这不起作用,因为例如,如果我的盒子的长度为 L=6,并且我最初在 x=2 处有一个粒子,那么通过减去 2 之后它应该在x=-2(因为它没有到达任何边),然而,它返回 1
标签: python python-3.x periodicity