具有 Neumann 边界条件的奇异二维泊松有限元的共轭梯度

计算科学 收敛 scipy 共轭梯度
2021-11-26 07:40:48

在我部分意识到问题所在后,对问题进行了大量编辑

我为泊松方程编写了一个简单的二维平方有限元解

Δu=f

源函数积分为零,我正在实施为自然边界条件。这导致了三对角块矩阵结构。如下:

A=[DeT1 T1DT1  T1De]
A是对称的,半正定的,但奇异的(在变换下不变u+c 自从Ωfdx=0我没有在右手边做任何事情来实施Ωgdx=0.

当然系统不是唯一可解的(直到一个常数),所以我在稀疏矩阵的底部包含一行 1 来表示Ωudx=0. 我还在右侧添加了一列表示要求解 (?) 的拉格朗日数。右下角为零。

这个答案有一些关于我的系统是如何设置的信息。

无论如何使用 scipy 的库解决稀疏系统是没有问题的。结果如下: 使用 scipy 的 spsolve 的解决方案

现在看看当我尝试用我自己的 CG 方法或 scipy 的方法解决时的结果,类似的结果:

解的 CG 近似 这些街区的中心价值明显下降。

有人有类似的经历吗?任何想法我做错了什么?我正在使用np.linalg.cond ,发现条件号是626。

错误有时会向上跳跃,这似乎是不正确的。

提前致谢

1个回答

我查看了scipy.sparse.linalg.eigsand产生的特征值np.linalg.eig,注意到在修改刚度矩阵的过程中,0 特征值被删除,但出现了两个新的特征值±n其中 n 是ARn×n.

所以矩阵现在有一个负特征值。解决此问题的方法是使用scipy.sparse.linalg.bicgstab梯度方法,该方法产生以下效果,效果更好但不是很好:

在此处输入图像描述

解决方案是编写我自己的 Bconjugate Gradient Stabilized 代码,这导致了这一点:

带有自编程 BiCGstab 的 Soln

对于不同的(随机生成的)源:

先前解决方案的源图