我想了解以下情况:
我有一个非常简单的一维泊松问题. 我组装了刚度矩阵和右侧,并应用了 BC,然后强制是对称的。
我正在研究解决这个线性系统的迭代方法的稳定性,同时增加. 我放作为宽容,一切顺利,直到在哪里残差开始振荡。
作为测试,我尝试在 Matlab 中求解(使用A\b
),并且残差没有低于.
所以我从刚度矩阵中去除了对称性,我在Matlab上重试了,现在残差的顺序是.
那么,使矩阵对称的简单操作是否可能导致我的解决方案“更糟”?
我想了解以下情况:
我有一个非常简单的一维泊松问题. 我组装了刚度矩阵和右侧,并应用了 BC,然后强制是对称的。
我正在研究解决这个线性系统的迭代方法的稳定性,同时增加. 我放作为宽容,一切顺利,直到在哪里残差开始振荡。
作为测试,我尝试在 Matlab 中求解(使用A\b
),并且残差没有低于.
所以我从刚度矩阵中去除了对称性,我在Matlab上重试了,现在残差的顺序是.
那么,使矩阵对称的简单操作是否可能导致我的解决方案“更糟”?
它可能会不利地改变条件数,是的,这将使其更难解决。你如何强迫这个矩阵是对称的?应该说,如果你解决 10 阶线性问题,你可能做得很好。
正如 whpowell 在他们的评论中指出的那样,matlab 将为对称与非对称使用不同的求解程序。它将在对称矩阵的两个求解器之一和非对称矩阵的不同两个求解器之间进行选择。因此,您不仅要更改矩阵条件数,还要更改求解器。
不是真正的答案,但评论太长了。
根据我的经验,保持对称性和处理边界条件的最佳方法是仅使用内部点。“惩罚方法”(或大数字方法,我知道它有几个名称)是另一种可能性。
如果您的枚举是,然后继续工作,作为的值在给出(在你的情况下,只是)。ig他们不是,它们将在 rhs-vector 上移动
您可以通过以下方式减少刚度矩阵的自由度,并保持对称性。在 lin 之后,您将获得一个解向量。系统求解过程,仅由内部价值观。然后,您可以在 sol.txt 的末尾添加已知值。如果你愿意,矢量。