algorithm - 矩阵正定和病态的迭代线性求解器

标签 algorithm math parallel-processing numerical-methods discrete-mathematics

我需要一些帮助来解决这个问题。

我想解决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/

相关文章:

algorithm - 我应该使用哪种算法来找到未加权网格中从 A 到 B 的最短路径?

模运算符中的 C# 错误 %

java - 如何将 double 转换为 Java 中的精确小数?

python - 双调排序,mpi4py

java - 我如何知道映射器(或化简器)是否在Hadoop中并行运行?

algorithm - 从一个点找到最近的圆

algorithm - 从未排序数组生成二叉堆的时间复杂度

algorithm - 将 n 写成 2 的幂之和的方法数

c - OpenMP 基准并行计算

java - 使用有效的算法从数组中获取缺失的数字?‽?