Gauss-Seidel 方法收敛

计算科学 迭代法 矩阵方程
2021-12-15 05:48:43

我目前正在编写代码以找到满足二维泊松方程的平衡函数。为了做到这一点,我使用有限差分方法,我想要满足的离散方程是:

Tj,i+1+Tj,i1+Tj+1,i+Tj1,i4Tj,ih2=qj,i,
在哪里Tj,i是矩形网格上的温度。为了找到结果数组T满足我把它写成矩阵方程的方程:
(41141114)(T1T2TN1TN)=(q1q2qN1qN),
数组在哪里q是一个常数数组。

我使用 Gauss-Seidel 方法迭代地求解这个方程,但是如果我永远运行它并查看平均值T每次迭代后,它永远不会收敛到零,即如果我永远运行迭代,平均值T. 迭代之间平均温度增加的步长最终变得恒定,但永远不会为零,如果不是通过平均温度变化的阈值,我如何建立这种方法的收敛性?

这是否意味着我的矩阵不收敛?我相当肯定我使用的矩阵应该是收敛的,因为它被许多可靠的来源广泛声称。

1个回答

如果您通过 q 函数不断向系统注入热量,我可以看到温度根据您的边界条件不断增长,但这是您需要考虑的公式问题。

停止求解方程的迭代方法是使用残差完成的:

如果我们有这样的系统:

A.x=b

我们将第 n 个残差定义为

rn=(bA.xn)

然后你只需要确定一个停止标准,通常是绝对或相对残差的范数 (L1, L2, Linf),其中相对残差是:

rr,n=rn/ri

i 通常取为零,即第一个残差,但根据各种因素,您可能会在系统稍微稳定后选择使用第五个或第十个残差。