我指的是Eigen文档中的The Compute Step部分:
的文档在
compute()
函数中,矩阵通常是分解的:...
准确地说,对于这类求解器, 计算步骤进一步细分为
analyzePattern()
和factorize()
。
analyzePattern()
的目标是重新排序。的非零元素 矩阵,使分解步骤产生较少的填充。这个 步骤仅利用矩阵的结构。 因此,结果 此步骤可用于矩阵具有的其他线性系统 相同的结构。 ....在
factorize()
中,计算系数矩阵的因子。 每次矩阵的值发生变化时,都应调用此步骤。 但是,矩阵的结构模式不应该改变 多次通话之间。
计算列排列以最小化填充
- 将此排列应用于输入矩阵 -
- 计算置换矩阵
上的列消除树- 对排除树和列排列进行后序排列
数值分解与符号分解On交错 退出,信息是
= 0:成功分解
0:如果info = i,我就是
< = A-> ncol:U(i,i)正好为零。分解具有 已完成,但因子U完全是单数, 如果它用于解决a,则会出现除零 方程组。
A-> ncol:内存分配时分配的字节数 发生故障,加上A-> ncol。如果lwork = -1,那就是 所需的估计空间量加上A-> ncol。
我的问题是,我们是否知道调用analyzePattern()
和factorize()
的相对费用?
这个问题对我很重要,因为我的应用程序具有稳定的矩阵结构,但不断改变系数矩阵。示例:在FEM模型中,FEM用户经常保持元素连接不变,但始终更改元素大小以获得最佳设计。
因此,如果analyzePattern()
比factorize()
贵很多,那么我可以利用这个事实并重写我的代码。如果不是,我可以坚持使用compute()
函数,并在每次元素大小更改时重新运行analyzePattern()
。
答案 0 :(得分:1)
这很大程度上取决于矩阵的结构。根据我的经验,符号部分通常比数字部分便宜得多,但是,根据对此answer的评论,它有时是相反的。所以我担心在你替补之前你永远不会知道。