0 引言
希尔伯特矩阵是一种数学变换矩阵,正定,且高度病态,任何一个元素发生一点变动,
整个矩阵的行列式的值和逆矩阵都会发生巨大变化,病态程度和阶数相关。其形式为:
考虑方程组 HX=b 的求解,取 X=(1)
n*1
,得到右端项 b,分别用 Gauss 消去法,Jacobi
法,GS 迭代法和 SOR 迭代法求解该方程组。
1 初步分析
在 Windows 环境下使用 python 及 numpy 模块进行数值计算,首先对 Hilbert 矩阵
行范数的条件数进行分析,如表 1 所示,其病态程度随阶数迅速增大。
表 1
阶数
2 3 4 5 6 7 8 9 10
条件数
2.7e1 7.5e2 2.8e4 9.4e5 2.9e7 9.9e8 3.4e1
0
1.1e1
2
3.5e1
3
选择维数为 6,迭代次数 500,由于当松弛因子 w=1 时,SOR 法变为 GS 法,故用
SOR1.0 表示 GS 法。得到的结果如表 2 所示(保留 4 位小数)。
表 2
Gauss 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
Jacobi inf inf nan nan nan nan
SOR0.7 1.0027 0.9850 0.9952 1.0392 1.0219 0.9530
SOR1.0 1.0017 0.9953 0.9735 1.0491 1.0265 0.9516
SOR1.3 1.0004 1.0091 0.9387 1.0790 1.0186 0.9522
由表中结果可知,Jacobi 法不能收敛,Gauss 消去法和 SOR 迭代法都能得到结果,
其中 Gauss 消去法结果更精确。
改变维数后,Jacobi 法仍然不能收敛,原因分析(指标)?
2 迭代次数
考虑 SOR 迭代法的迭代速度,将计算解与精确解向量之差的无穷范数作为衡量精确度
的指标(取以 10 为底的对数,记为 emg),图 1 给出了 6 维时不同松弛因子下解的精度
随迭代次数的变化。
评论0