具有稀疏 b 的 MATLAB 线性最小二乘法
MATLAB linear least squares with sparse b
我正在尝试解决形式为 Ax = b
的 llsq 问题。我有一些巨大的矩阵,其中
size(A) = 26181 13090
size(b) = 26181 1
b
稀疏度约为 26%,A
接近稠密。从 mldivide
文档来看,如果 b
稀疏,A\b
似乎运行了一种特殊算法。
但是,目前求解需要30分钟以上(这个时间后我手动终止了,所以我不知道实际需要多长时间)。
正在寻找有关如何加速此计算的建议。
由于我还不能评论,我会在这里写一些建议。
稀疏性:
如果您将矩阵 A 或向量 b 声明为稀疏矩阵,请撤消它。对于非 0 项百分比高于 ~20% 的矩阵,稀疏系统上的微积分比密集微积分慢(不要在这里引用我的话,只是大约)。这不仅适用于求解,也适用于乘法和所有其他事情。
反斜杠运算符
反斜杠运算符在求解之前分析矩阵。根据属性,它使用不同的求解器(LU、Cholesky 等)。这样,它几乎总是最快捷、最舒适的解决方案。当矩阵稀疏时,反斜杠运算符会启动不同的例程,首先检查不同的属性。检查 backslash operator (bottom).
的 Matlab 文档中提供的方案
比反斜杠运算符更快地解决大问题的唯一方法是使用迭代求解器。这些求解器(例如 CG - 共轭梯度法)的计算量与矩阵大小的平方根线性相关。它们在大型矩阵系统上非常有效,但在小型系统上速度较慢。它们也不提供精确的解决方案,但可以将残差设置得非常低,从而提供几乎正确的解决方案。大多数迭代求解器的缺点是它们需要您的矩阵满足特定条件。在 CG 的情况下,您的矩阵必须是正定和对称的(例如)。恐怕,在您的情况下,这些迭代求解器中可能没有一个会有所帮助:/
希望我能澄清一下,祝你好运!
我正在尝试解决形式为 Ax = b
的 llsq 问题。我有一些巨大的矩阵,其中
size(A) = 26181 13090
size(b) = 26181 1
b
稀疏度约为 26%,A
接近稠密。从 mldivide
文档来看,如果 b
稀疏,A\b
似乎运行了一种特殊算法。
但是,目前求解需要30分钟以上(这个时间后我手动终止了,所以我不知道实际需要多长时间)。
正在寻找有关如何加速此计算的建议。
由于我还不能评论,我会在这里写一些建议。
稀疏性: 如果您将矩阵 A 或向量 b 声明为稀疏矩阵,请撤消它。对于非 0 项百分比高于 ~20% 的矩阵,稀疏系统上的微积分比密集微积分慢(不要在这里引用我的话,只是大约)。这不仅适用于求解,也适用于乘法和所有其他事情。
反斜杠运算符 反斜杠运算符在求解之前分析矩阵。根据属性,它使用不同的求解器(LU、Cholesky 等)。这样,它几乎总是最快捷、最舒适的解决方案。当矩阵稀疏时,反斜杠运算符会启动不同的例程,首先检查不同的属性。检查 backslash operator (bottom).
的 Matlab 文档中提供的方案
比反斜杠运算符更快地解决大问题的唯一方法是使用迭代求解器。这些求解器(例如 CG - 共轭梯度法)的计算量与矩阵大小的平方根线性相关。它们在大型矩阵系统上非常有效,但在小型系统上速度较慢。它们也不提供精确的解决方案,但可以将残差设置得非常低,从而提供几乎正确的解决方案。大多数迭代求解器的缺点是它们需要您的矩阵满足特定条件。在 CG 的情况下,您的矩阵必须是正定和对称的(例如)。恐怕,在您的情况下,这些迭代求解器中可能没有一个会有所帮助:/
希望我能澄清一下,祝你好运!