边值问题的快速算法

时间:2011-07-07 13:33:22

标签: algorithm performance pde boundary

我正在寻找解决以下问题的最快方法:

在3D网格中给定一定量的格点,一些点b_i(边界)满足f(b_i)=0,而另一个点a_0满足f(a_0)= 1

所有其他点(非边界)是周围26点的线性组合。例如,我可能想要

f(i, j, k)= .05*f(i+1, j, k)+.1*f(i, j+1, k)+.07*f(i, j, k+1)+...

系数.05+.1+.07+...的总和将加起来为1。我的目标是为卷中的所有f(x_i)求解x_i

目前,我正在使用连续过度放松(SOR)方法,该方法基本上初始化体积的边界,为每个点分配26个周围点的加权平均值,并重复。 SOR方法在最近的迭代之后只需要f(x_i)和之前的迭代之后的f(x_i)

我想知道是否有人知道任何更快的方法来解决大小为102x102x48的3D网格问题。 SOR目前需要大约500-1000次迭代才能收敛到我想要的水平(根据使用的系数而变化)。我最愿意使用matlab,idl和c ++。有没有人知道SOR与将问题转换为线性系统和使用矩阵方法(如BCGSTAB)相比有多快?此外,哪种方法最有效(和容易)并行化?我可以访问250核心集群,并且一直试图使用mpi和c ++使SOR方法并行,但是没有看到我想要的速度增加(理想情况下将是100倍)。关于加快解决这个问题的方法,我将非常感谢。谢谢。

2 个答案:

答案 0 :(得分:3)

如果您对多线程感到满意,那么使用红黑方案进行SOR可以获得不错的加速。对于2D问题,想象一下棋盘 - 红色方块仅取决于黑色方块(可能还有自己),因此您可以并行更新所有红色方块,然后重复所有黑色方块。请注意,此 收敛速度比简单排序慢,但它允许您将工作分散到多个线程上。

共轭梯度法通常比SOR收敛得更快(如果我没记错的话,约为一个数量级)。我从未使用BCGSTAB,但我记得GMRES在非对称问题上运作良好,并且它们可能都可以从预处理中受益。

对于并行化的机会,大多数CG类型方法只需要您计算矩阵向量乘积A*x,因此您永远不需要形成完整矩阵。这可能是每次迭代的最大成本,因此您应该考虑多线程。

有两个很好的参考资料是Golub and Van LoanTrefethen and Bau。后者更易读恕我直言。

希望有帮助...

答案 1 :(得分:2)

我(我认为)是一个确切的解决方案,但是,它可能很长。主要的问题是计算一个非常大的(希望是稀疏的)矩阵。

假设您的音量有N分。我们打电话给p1...pN这些点。您要找的是f(p1)...f(pN)

我们来点pi。它有26个邻居。我们称他们为pi-1...pi-26。我想你可以访问每个点pi到线性组合的系数。我们称之为ci-1...ci-j...ci-26(“点pi的线性组合系数为其第j个邻居”

让我们做得更好,您可以认为pi是空间中所有点的线性组合,除了大多数(26除外)等于0。你有系数ci-1...ci-N

您现在可以构建这些N*N系数的大矩阵ci-j

+---------------------    -------+   
|  0  | c1-2 | c1-3 | ... | c1-N |   |f(p1)|    |f(p1)|
+---------------------    -------+   |     |    |     |
| c2_1|   0  | c2-3 | ... | c1-N |   |f(p2)|    |f(p2)|
+---------------------    -------+ * .     . =  .     .
|                                |   .     .    .     .
.                                .   .     .    .     .
+---------------------    -------+   .     .    .     .
| cN-1| cN-2 | cN-3 | ... |   0  |   |f(pN)|    |f(pN)|
+---------------------    -------+

惊人! 您正在寻找的解决方案是与特征值1对应的特征向量之一!

使用优化的矩阵库来有效地计算特征向量(对于稀疏矩阵)并希望它已经并行化了!

编辑:很有趣,我只是重读了你的帖子,似乎我刚给你你的BCGSTAB解决方案......对不起! ^^

重新编辑:事实上,我不确定,你在谈论“Biconjugate Gradient Stabilized Method”吗?因为如果你正在做梯度下降,我没有看到你所谈论的线性方法......

重新编辑:我喜欢数学=)我甚至可以证明,条件sum of the ci = 1 1实际上是一个特征值。我不知道相应空间的尺寸,但它至少是1!