【发布时间】:2016-11-24 00:16:03
【问题描述】:
我广泛使用 julia 的线性方程求解器res = X\b。由于参数变化,我必须在我的程序中使用它数百万次。这工作正常,因为我使用的是小尺寸(高达30)。现在我想分析更大的系统,直到1000,线性求解器不再有效。
我认为可以解决这个问题。但是我必须说,有时我的 X 矩阵是密集的,有时是稀疏的,所以我需要在这两种情况下都能正常工作的东西。
b 向量是一个全为零的向量,除了一个始终为 1 的条目(实际上它始终是最后一个条目)。此外,我不需要所有的res 向量,只需要它的第一个条目。
【问题讨论】:
-
这可能不是您想要的,但我已经非常迷恋 GPU 的强大功能。如果您可以访问该硬件,它可能对您的情况非常有用。
-
你必须解决它数百万次。保存 LU 分解呢?如果您不更改 X 每次迭代,这将起作用。只需执行
X=lufact(X)然后X\b应该会更快。但这是如果你改变b(这发生在很多 PDE 求解器中)。 -
也许它会起作用,但
X确实会有所不同。它以X = x*eye(N,N) - T的形式编写,其中T是一个固定矩阵。 x是我必须解决系统res = X\b的参数。 -
减去与单位矩阵成比例的东西会以难以预测的方式改变分解,所以我认为分解在这里没有帮助。 You may want to ask here 如果有人有数学技巧可以更快地解决这个问题(使用
x*eye(N,N) - T的因式分解来获得不同x的因式分解)。有人可能有一篇研究文章,因为这可能与进行相关的特征值计算有多么相关,但我认为做好这件事在数学上比预期的要困难。 -
如果 GPU 是一个选项,您可能想尝试cublas<t>getrfBatched() 和cublas<t>getrsBatched(),它们针对一次解决一批小型线性系统进行了优化。
标签: julia linear-algebra numerical-methods