随机生成若干个 n n n 阶方阵与 n n n 阶向量构成 A x = b Ax=b Ax=b
- 建议直接生成对称正定矩阵
- 取 0 < ω < 2 0
- 用充分条件判断该矩阵 A A A 是否对 SOR 迭代法收敛
- 实现用 SOR 法解该方程组
- 与精确解对比并计算误差
首先生成一个对称正定矩阵。由对称阵的三角分解定理,先随机生成一个下三角矩阵 L,再生成一个元素均为正数的对角矩阵 D D D,计算 L D L T LDL^T LDLT 就可以得到一个对称正定矩阵。
对称阵的三角分解定理:设 A A A 为 n n n 阶对称矩阵,且 A A A 的所有顺序主子式均不为零,则 A A A 可以唯一分解为 A = L D L T A=LDL^T A=LDLT.
其中 L L L 为单位下三角矩阵, D D D 为对角矩阵,且 D D D 的元素 d i d_i di 均为正数。
通过高斯消元,先算一个精确答案出来。再枚举 ω omega ω 的值,调用 SOR 迭代法。SOR 迭代法内部统计迭代次数与绝对误差,将这些信息都输出出来。
放一张程序运行截图:
可以看到,在这个例子中,当 ω omega ω 为 1.6 1.6 1.6 的时候,迭代次数最少。
代码内部迭代终止条件为
m
a
x
1
≤
i
≤
n
∣
x
i
(
k
+
1
)
−
x
i
(
k
)
∣
<
ε
max_{1 le i le n}|x_i^{(k+1)}-x_i^{(k)}|
ε
varepsilon
ε 的取值会影响迭代次数,以及误差。 程序刚运行时,需要输入矩阵的阶数。不要输入太大的数,否则要运行很久。#include



