【问题标题】:Fast, approximate solution to linear equations?线性方程的快速近似解?
【发布时间】:2011-06-22 08:24:16
【问题描述】:

作为数值优化器的中间步骤,我需要求解 N 个线性方程组。 AFAIK 相当简单的算法恰好是 O(N^3) (尽管我在一些数学论文中看到了一个非常复杂的算法,它可以用像 O(N^2.8) 这样的巨大常数来实现)。在某些情况下,N 很大,即几千。

有什么好的方法可以在小于 O(N^3) 的时间内得到一个线性方程组的近似解吗?

编辑:

如果有帮助的话,这里有更多细节。

  1. 我的矩阵是对称的,而不是稀疏的。

  2. 它是 Newton-Raphson 的二阶导数矩阵。我正在尝试在 2000 维空间中优化某些东西。

【问题讨论】:

  • 为什么不使用经过验证的实现,例如 LAPACK:en.wikipedia.org/wiki/LAPACK
  • 是的,有很多。哪一个合适取决于您的特定系数矩阵。如果您告诉我们它的外观,我们或许可以推荐特定的算法。
  • wikipedia 上描述了几个,虽然我没有使用任何一个。
  • 嗯,这取决于你的系统Ax= b,如果它有 1) A 中的特殊结构,或者 2) A 将承认低秩近似,或者 3) 它是密集的并且接近满级。因此,在情况 3) 中没有希望获得任何重要的东西,但如果 1) 或 2) 适用,请详细说明您的详细信息。谢谢
  • @Andrey:两个原因:第一,目标语言是 D,没有成熟的 LAPACK 绑定。其次,这是针对大型开源库的一小部分,我正在避免像瘟疫这样的第三方依赖项。

标签: algorithm performance matrix linear-algebra approximation


【解决方案1】:

对于对称矩阵,conjugate gradient method 易于实现,并且将优于大多数其他迭代方法(例如 Gauss-Seidel、SOR)。主循环由矩阵向量乘法和一些其他向量操作组成。

一旦你得到它的工作,你可以使用preconditioning来进一步提高收敛性。

【讨论】:

    【解决方案2】:

    有Jacobi、Gauss-Seidel、cg、GMRES等迭代方法。

    【讨论】:

      【解决方案3】:

      是的,如果你从他们的系数中得到的矩阵是稀疏的。例如,如果您有一个以 O(N) 运行的三对角矩阵,则有“右行”的方法(在保加利亚语中,不确定确切的翻译)。还有其他算法仍然是 O(N^3),但如果矩阵符合它们需要的一些不变量(稀疏、对角占优、三角形等),则可以取得令人难以置信的结果。

      如果您坚持使用基于不变量的特定方法,那么进一步加快速度的唯一方法就是使用多线程。

      尝试this 搜索。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 2017-06-28
        • 2012-03-11
        • 1970-01-01
        • 2011-06-29
        相关资源
        最近更新 更多