由于我还不能发表评论,我将在这里写一些建议。
-
如果你声明你的矩阵A或向量b是稀疏的,撤销它。稀疏系统上的微积分比密集矩阵上的微积分慢,非0项的百分比大于20%(这里不要引用我的话,只是大约)。这不仅适用于求解,也适用于乘法和所有其他事情。
Link to sparse questions, SO
-
反斜杠运算符
反斜杠运算符在求解矩阵之前对其进行分析。根据属性,它使用不同的解算器(LU、Cholesky等)。这样,它几乎总是最快捷和最舒适的解决方案。当矩阵稀疏时,反斜杠操作符启动不同的例程,首先检查不同的属性。请检查Matlab文档中提供的方案,以了解
backslash operator (bottom)
.
唯一比反斜杠运算符更快地解决大问题的方法是使用迭代求解器。这些解算器(例如CG-共轭梯度法)的计算量与矩阵大小的平方根成线性关系。它们在大型矩阵系统上效率极高,但在小型矩阵系统上效率较低。它们也不能提供精确的解,但是残差可以设置得很低,从而给出一个几乎正确的解。大多数迭代求解器的缺点是,它们要求矩阵满足某些条件。在CG的情况下,你的矩阵必须是正定的和对称的(作为一个例子)。恐怕,在您的情况下,这些迭代解算器中的任何一个都会有所帮助:/