5

我正在用球体上的粒子进行 Metropolis Monte Carlo 模拟,并且对给定时间步长内的随机运动有疑问。

我知道要在球体上获得均匀分布的随机点,首先使用天真的最简单的方法是不够的(使用具有恒定 R 的球面坐标并选择随机角度 theta 和 phi),但必须例如使用这些方法之一:http: //mathworld.wolfram.com/SpherePointPicking.html

查看球体上蒙特卡洛的另一个代码,我看到了一种相当复杂的生成随机移动的方法:选择一个随机粒子,计算将其移动到北极的旋转矩阵,找到一个小于一定长度的随机笛卡尔向量并移动将其指向北极,对笛卡尔向量进行归一化,然后将其旋转回原始粒子位置附近。

这一切都是为了得到一个无偏的新随机位置。尽管我怀疑它与详细的平衡有关,但我并不完全理解其中的原理。但我的感觉是应该有一种更简单(即更快)的方法来做到这一点。实际上,直觉上我觉得在这种情况下可以找到两个小的随机角度 theta 和 phi 并将它们添加到粒子的位置 - 或者这会是一个错误吗?

4

2 回答 2

1

您描述的算法背后的基本原理是将点映射到极点,生成切平面,以通常的方式均匀生成笛卡尔向量,然后将其映射回球体,最终反转旋转。由于切平面是导数,因此对于大球体和小步长,这是一个很好的近似值。

我们能做得更好吗?或者至少窃取别人的代码?也许。考虑一下:由于MathWorld 上的那篇文章,您已经可以在球体上生成均匀分布的随机点。

不失一般性,您可以将当前点视为球体的一极。如果你使用 MathWorld 算法生成一个随机点,你就知道生成的点在任何方位角的概率是一致的。

然后问题被简化为在给定两个点的 phi/theta 值的情况下找到球体上的方位,然后沿该方位的大圆路线生成一个增量表面距离的新点。

对于这个新版本的问题,您可以通过导入您喜欢的 GIS 或投影库并使用地球的球形模型(具有适当的缩放比例)来获得所需的所有代码。

许多人似乎将此站点称为在球形导航方面拥有大量出色的数学知识。

于 2012-10-15T18:32:40.693 回答
0

我想自己使用评论来回答上面的评论,但我不能使用为评论保留的有限空间来回答。如果这违反了准则,我很抱歉。

既然你问了,万一其他人在这里结束 - 我确实对这个问题有一些新的见解:

这里我们真正需要担心的是细节平衡;如果 P(a) 是处于状态 a 的概率并且 P(a->b) 是转换到状态 b 的概率,那么详细的平衡需要 P(a)P(a->b)=P(b) P(b->a)。

Metropolis 算法基本上通过使 P(a->b)=1 如果 P(b)/P(a) > 1 和 P(a->b)=P(b)/P(a) 来满足这一点。在我的(量子力学)系统中,我使用 P(a)~|psi(a)|^2,波函数的平方(在统计力学应用中,我猜我们会使用 P(a)~exp[-beta*E]) .

在一个球体上使用它的问题是从角度空间 {theta,phi}={t,p} 中的均匀分布获得的步骤如下:假设我们在一个具有给定角度 t 的点(一个测量角度从北极沿 z 轴)。从表面元素 dS=sin(t) dt dp 我们看到,如果我们的随机角位移是 Dt 和 Dp,则选择的新试验点位于区域 S=4*Dp*sin(Dt)*sin(t) 内,所以选择给定点 p_b 的机会是 ~1/S ~ 1/sin(t)。

除了评估 |psi(a)|^2 之外,尝试给定点的概率当然会影响 P(a->b);事实上,我们看到它会将后者除以因子 sin(t)。因此,保存详细平衡的一种简单方法是乘以相同的: P(a->b) --> P(a->b)sin(t) 其中 t 是粒子 a 的 theta 角。

这将恢复详细的平衡。另一个问题是这将如何影响收敛等,因为两极附近的粒子现在有小步长但接受概率大。

于 2012-10-16T15:19:34.873 回答