C++ 在特征库计算()中执行analyzePattern()和factorize()的成本
我指的是Eigen文档中的章节: 在C++ 在特征库计算()中执行analyzePattern()和factorize()的成本,c++,eigen,C++,Eigen,我指的是Eigen文档中的章节: 在compute()函数中,矩阵通常被分解为: 准确地说,对于这类解算器, 计算步骤进一步细分为analyzePattern()和 factorize() analyzePattern()的目标是对 矩阵,以便分解步骤创建较少的填充。这 step仅利用矩阵的结构因此 这一步可用于矩阵具有以下性质的其他线性系统: 相同的结构。 在factorize()中,计算系数矩阵的因子。 每次矩阵值更改时都应调用此步骤。 但是,矩阵的结构模式不应改变 在多个通话之间。 文件
compute()
函数中,矩阵通常被分解为:
准确地说,对于这类解算器,
计算步骤进一步细分为analyzePattern()
和
factorize()
analyzePattern()
的目标是对
矩阵,以便分解步骤创建较少的填充。这
step仅利用矩阵的结构因此
这一步可用于矩阵具有以下性质的其他线性系统:
相同的结构。
在factorize()
中,计算系数矩阵的因子。
每次矩阵值更改时都应调用此步骤。
但是,矩阵的结构模式不应改变
在多个通话之间。
文件
计算列排列以最小化填充
- 将此排列应用于输入矩阵-
- 计算置换矩阵上的列消除树
- 后序消除树与列置换
analyzePattern()
和factorize()
的相对成本吗
这个问题对我很重要,因为我的应用程序有一个稳定的矩阵结构,但系数矩阵不断变化。示例:在FEM模型中,FEM用户通常保持图元连接不变,但始终更改图元尺寸以获得最佳设计
因此,如果
analyzePattern()
比factorize()
昂贵得多,那么我可以利用这一事实重写代码。如果没有,我可以坚持使用compute()
函数,并在每次元素大小更改时重新运行analyzePattern()
这在很大程度上取决于矩阵的结构。根据我的经验,符号部分通常比数字部分便宜得多,然而,根据对此的评论,有时恰恰相反。因此,恐怕在你坐上板凳之前,你永远无法确定。为什么不测量你的特定图案的差异,然后根据差异做出决定?@AviGinsburg,我可以。但是我想,如果这两个函数的性能在互联网上被记录下来(作为一个SO Q&a),它将对整个互联网有益。我可以问一下,你使用稀疏解算器的目的是什么吗?我的模型是有限元模型。这里也是一样,但结构仍然很大程度上取决于域的尺寸(1D、2D、3D)和元素的种类。