我正在尝试使用biCGstab,例如以强形式离散的泊松方程。
由于只有自然的 Neumann 边界条件,因此必须给出至少一个 Dirichlet 条件。我只是将条件中行。结果收敛,但梯度场在处的误差很大。
这是什么原因,我应该如何施加这个条件?
我正在尝试使用biCGstab,例如以强形式离散的泊松方程。
由于只有自然的 Neumann 边界条件,因此必须给出至少一个 Dirichlet 条件。我只是将条件中行。结果收敛,但梯度场在处的误差很大。
这是什么原因,我应该如何施加这个条件?
纯诺依曼问题是唯一的,直到一个常数。我最喜欢的两种解决方案策略:
将方程修改为对于一些小的。如果您执行缩减积分,这大致相当于将添加到系统矩阵的对角线。
使用拉格朗日乘数强加那么你的系统将是
即使包括一个 Dirichelt 条件也会改变您尝试解决的问题,并且不会给您正确的解决方案!您必须满足离散兼容性标准,例如参见: http ://eprints.ma.man.ac.uk/894/2/covered/MIMS_ep2007_156_Sample_Chapter.pdf 的第一页和第二页
它基本上指出,对于所有诺依曼问题, b的每个元素的总和必须等于零,否则您的解决方案将漂移,因为没有任何东西将它保持在边界上。
如果您以双精度求解,您只需在求解之前在代码中添加一行说明b = b - mean( b )。在单精度中,可能还需要确保在每隔一次迭代中,biCGstab 中的残差也符合离散兼容性标准。
我试图通过在单个点上施加狄利克雷条件来使用 CG 来解决全诺伊曼问题,例如某些教授通常会告诉人们这样做,然后将其与使用离散余弦变换方法进行比较。它不会产生相同的结果,而是使用离散兼容性标准。
我记得具有纯 Neumann 边界条件的 Poisson 方程的矩阵是奇异的。适合您的情况吗?如果是这样,您就不能使用 BiCGSTAB 来求解生成的线性系统。