C++ 在特征库计算()中执行analyzePattern()和factorize()的成本

C++ 在特征库计算()中执行analyzePattern()和factorize()的成本,c++,eigen,C++,Eigen,我指的是Eigen文档中的章节: 在compute()函数中,矩阵通常被分解为: 准确地说,对于这类解算器, 计算步骤进一步细分为analyzePattern()和 factorize() analyzePattern()的目标是对 矩阵,以便分解步骤创建较少的填充。这 step仅利用矩阵的结构因此 这一步可用于矩阵具有以下性质的其他线性系统: 相同的结构。 在factorize()中,计算系数矩阵的因子。 每次矩阵值更改时都应调用此步骤。 但是,矩阵的结构模式不应改变 在多个通话之间。 文件

我指的是Eigen文档中的章节:

compute()
函数中,矩阵通常被分解为:

准确地说,对于这类解算器, 计算步骤进一步细分为
analyzePattern()
factorize()

analyzePattern()
的目标是对 矩阵,以便分解步骤创建较少的填充。这 step仅利用矩阵的结构因此 这一步可用于矩阵具有以下性质的其他线性系统: 相同的结构。

factorize()
中,计算系数矩阵的因子。 每次矩阵值更改时都应调用此步骤。 但是,矩阵的结构模式不应改变 在多个通话之间。

文件

计算列排列以最小化填充

  • 将此排列应用于输入矩阵-
  • 计算置换矩阵上的列消除树
  • 后序消除树与列置换

数字因式分解和符号因式分解交织在一起 退出,信息是

=0:成功的因式分解

0:如果info=i,且i为

ncol:U(i,i)正好是零。因子分解已经完成 已经完成,但因子U是单数, 如果用它来解a,就会出现被零除的情况 方程组

A->ncol:内存分配时分配的字节数 发生故障,加上->ncol。如果lwork=-1,则为 估计所需的空间量,加上->ncol

我的问题是,我们知道调用
analyzePattern()
factorize()
的相对成本吗

这个问题对我很重要,因为我的应用程序有一个稳定的矩阵结构,但系数矩阵不断变化。示例:在FEM模型中,FEM用户通常保持图元连接不变,但始终更改图元尺寸以获得最佳设计


因此,如果
analyzePattern()
factorize()
昂贵得多,那么我可以利用这一事实重写代码。如果没有,我可以坚持使用
compute()
函数,并在每次元素大小更改时重新运行
analyzePattern()

这在很大程度上取决于矩阵的结构。根据我的经验,符号部分通常比数字部分便宜得多,然而,根据对此的评论,有时恰恰相反。因此,恐怕在你坐上板凳之前,你永远无法确定。

为什么不测量你的特定图案的差异,然后根据差异做出决定?@AviGinsburg,我可以。但是我想,如果这两个函数的性能在互联网上被记录下来(作为一个SO Q&a),它将对整个互联网有益。我可以问一下,你使用稀疏解算器的目的是什么吗?我的模型是有限元模型。这里也是一样,但结构仍然很大程度上取决于域的尺寸(1D、2D、3D)和元素的种类。