对称/非对称线性系统的求解

计算科学 有限元 matlab 线性求解器 迭代法
2021-11-29 02:25:11

我想了解以下情况:

我有一个非常简单的一维泊松问题u0=uN=0. 我组装了刚度矩阵和右侧,并应用了 BC,然后强制A是对称的。

我正在研究解决这个线性系统的迭代方法的稳定性,同时增加N. 我放1e10作为宽容,一切顺利,直到N=35000在哪里1.2e10残差开始振荡。

作为测试,我尝试在 Matlab 中求解(使用A\b),并且残差没有低于1e10.

所以我从刚度矩阵中去除了对称性,我在Matlab上重试了,现在残差的顺序是1e11.

那么,使矩阵对称的简单操作是否可能导致我的解决方案“更糟”?

2个回答

它可能会不利地改变条件数,是的,这将使其更难解决。你如何强迫这个矩阵是对称的?应该说,如果你解决 10 阶线性问题,你可能做得很好。

正如 whpowell 在他们的评论中指出的那样,matlab 将为对称与非对称使用不同的求解程序。它将在对称矩阵的两个求解器之一和非对称矩阵的不同两个求解器之间进行选择。因此,您不仅要更改矩阵条件数,还要更改求解器。

不是真正的答案,但评论太长了。

根据我的经验,保持对称性和处理边界条件的最佳方法是仅使用内部点。“惩罚方法”(或大数字方法,我知道它有几个名称)是另一种可能性。

如果您的枚举是x1,,xn+1,然后继续工作x2,,xn,作为的值ux1,xn+1给出(在你的情况下,只是0)。ig他们不是0,它们将在 rhs-vector 上移动

您可以通过以下方式减少刚度矩阵的自由度1,并保持对称性。在 lin 之后,您将获得一个解向量。系统求解过程,仅由n1内部价值观。然后,您可以在 sol.txt 的末尾添加已知值。如果你愿意,矢量。