我需要一些帮助来解决这个问题。
我想解决Ax = b
,
其中 A 是 n x n(方阵),b 是 n x 1 矩阵
。
但是 A 矩阵有这个属性: + 病态 (K >> 1)(可能大于 10 ^ 8) + 对称正定(因为是协方差矩阵)
我已经尝试过 Jacobi 方法,但不幸的是收敛速度很慢。我避免使用 Cholesky 分解。
而且我已经尝试过 Conjugate Gradient,但不幸的是,如果矩阵 A 的条件数太大,它就无法收敛。
更新:我需要一种可以在并行框架(如 MPI)中运行的方法。所以我不能在当前迭代中使用需要 x[i] 的 Gauss-seidal。
我可以用什么样的方法来解决这类问题?谢谢:)
最佳答案
我猜测您的问题是由于矩阵向量积的计算不准确造成的。 (我从未见过共轭梯度完全无法减少残差,除非矩阵向量乘积很差。重启后的第一次迭代只是做最速下降。)
您可以尝试再次运行共轭梯度,但使用扩展精度或 Kahan summation或计算矩阵向量积时的东西。
或者,如果您的矩阵具有某种已知结构,您可能会尝试找到一种不同的方法来编写矩阵向量积,以减少计算结果中的舍入。如果我能看到你的矩阵,我也许可以在这里给出更具体的建议。
关于algorithm - 矩阵正定和病态的迭代线性求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063741/