【发布时间】:2010-07-14 14:39:01
【问题描述】:
我目前正在 Mathematica 中进行一些与量子力学相关的计算。随着我们从 1D 转移到 2D 晶格模型,问题的大小变得有问题
目前,我们有一个看起来像这样的总结:
corr[r1_, r2_, i_, j_] = Sum[Cos[f[x1, x2] Angle[i] r1 + f[y1, y2] Angle[j] r2], {x1, HL}, {x2, HL}, {y1, HL + 1, 2 HL}, {y2, HL + 1, 2 HL}];
f[。 , .] 是预计算相关函数的查找函数,Angle[.] 也是预计算的。
根本没有办法以任何方式进一步简化这一点。我们已经通过将复指数(虚部为零)转换为上面的余弦表达式进行了简单的优化。
最大的问题是这些 HL 是基于尺寸大小的:对于沿轴的线性尺寸 L,HL 对应于 L^d(这里 d = 2)。所以我们的计算实际上是 O(n^8),忽略 i, j 的总和。
如果不是因为我们对 r1 的 125 个值和 r2 的 125 个值进行迭代以创建 125 x 125 的图像,这通常对 L = 8 来说并不算太糟糕。
我的问题是:如何在 Mathematica 中最有效地进行计算?我会用另一种语言来做这件事,但是如果我用 C++ 之类的东西来尝试的话,有些问题会让它变得同样慢。
额外信息:这是一个 ND-ND(数密度)相关计算。所有的 x 和 y 指的是离散二维网格上的离散点。这里唯一不离散的就是我们的 r。
【问题讨论】:
-
您只是想计算相关性吗?在我看来,您需要找到一个可以从代码中调用的体面、流行、经过良好测试的库(不一定是 Mathematica 库)。至于切换语言 - 不要跳到 C++,切换到 Python + SciPy。 scipy.org/Cookbook/SchrodingerFDTD
-
HL 是否从一个图像更改为另一个图像?
-
f和Angle函数是否具有数字定义,或者它们是否是符号?以数字方式做事可以产生巨大的影响。 OTOH,鉴于您的问题的规模,您可能只是遇到了麻烦。我们在这里讨论 ~10^17 次操作。 -
使用蒙特卡洛积分方案不是更好吗?他们是为这类问题而生的......
-
@Hamish,是的,这是一个 ND-ND 相关计算。与 Mathematica 相比,Python + SciPy 处理这个问题的能力如何? @belisarius:没有 HL 不会改变,这仅适用于单个图像。 @Pillsy、f 和 Angle 实际上是预计算值的查找函数。对于这个问题,这就是我们计算相关性的方式。我不相信蒙特卡洛会很适合这个。
标签: optimization math physics wolfram-mathematica