我正在尝试使用具有矩形网格的有限差分方案在矩形域中求解泊松方程。
我很高兴地生成了需要求解的方程 Ax = b 的矩阵系统,但是当我尝试施加零梯度的 Neumann 边界条件(使用幽灵单元)时,我遇到了问题,我相信因为矩阵是奇异的.
我知道关于这个主题有几个类似的线程:Discrete Poisson Equation with Pure Neumann Boundary Conditions,Write the Poisson equation limited-difference matrix with Neumann boundary conditions,Solving a linear equation system with pure Neumann condition but I can't find how to fix我的问题。有人建议我应该在边界上的某个点施加狄利克雷条件,但是当我尝试这个时,我在这一点上得到了一个尖峰。
我正在使用 Gauss-Seidel 程序来求解系统,并且在每次迭代中,我都会将解决方案重新设置为平均值为 0。但是,由于这非常慢,我转而使用 Bicongugate Gradient Stabilized Method,这非常更快。但是,我看不到在这种情况下做类似事情的方法,所以欢迎任何帮助或建议。
我认为可能是这种情况的一个原因是我使用的测试问题可能是非物理的。对于我有 b 是正弦强迫的情况,在域上平均为零(-2 pi^2 cos(pi x)cos(pi y) from 0-1 in x and y),将一个角设置为狄利克雷条件似乎工作正常。但是,对于域中心的点源,在一个角落设置 Dirichlet 条件会导致那里出现尖峰。在我的头脑/物理推理中,具有诺伊曼条件的域中心的点源将继续“推动”,并且解决方案将随着不断增长的任意常数浮动到无穷大并且无法锚定。所以有某种条件说我需要 b 在我的封闭域上的零净强制必须为零,即跨域的源项的积分必须为零。
如果有帮助,它的应用是在流体动力学压力校正方案中求解压力的泊松方程。在这里,我不能保证 b 的平均值为零,尽管它应该很接近。
我很乐意根据需要提供更多信息。