求解稀疏线性系统

稀疏求解器列表

稀疏求解器概念

计算步骤

  • 在compute()函数中,矩阵通常被分解:自伴随矩阵的LLT,一般厄米特矩阵的LDLT,非厄米特矩阵的LU和矩形矩阵的QR。 这些是使用直接求解器的结果。 对于这类精确求解器,计算步骤进一步细分为analyzePattern()和factorize()。
  • analyzePattern()的目标是重新排序矩阵的非零元素,以便分解步骤创建更少的填充。 该步骤仅利用矩阵的结构。 因此,该步骤的结果可以用于矩阵具有相同结构的其他线性系统。 但请注意,有时,某些外部求解器(如SuperLU)要求在此步骤中设置矩阵的值,例如平衡矩阵的行和列。 在这种情况下,此步骤的结果不应与其他矩阵一起使用。
  • Eigen提供了一组有限的方法来重新排序此步骤中的矩阵,内置(COLAMD,AMD)或外部(METIS)。 这些方法在解算器的模板参数列表中设置:
  • 在factorize()中,计算系数矩阵的因子。 每次矩阵的值发生变化时,都应调用此步骤。 但是,矩阵的结构模式不应在多次调用之间发生变化。
  • 对于迭代求解器,计算步骤用于最终设置预处理器。 例如,利用ILUT预处理器,在该步骤中计算不完全因子L和U. 请记住,基本上,预处理器的目标是通过求解修正的线性系统来加速迭代方法的收敛,其中系数矩阵具有更多的聚类特征值。 对于实际问题,迭代求解器应始终与预处理器一起使用。 在Eigen中,通过简单地将其作为模板参数添加到迭代求解器对象来选择预处理器。

求解步骤

对于直接方法,解决方案以机器精度计算。 有时,解决方案不需要太精确。 在这种情况下,迭代方法更合适,并且可以在使用setTolerance()的求解步骤之前设置所需的精度。

猜你喜欢

转载自blog.csdn.net/LYKymy/article/details/83019486
今日推荐