【发布时间】:2019-09-04 12:58:25
【问题描述】:
所以在我的非线性有限元求解器中,我使用 Eigen3 稀疏矩阵和 LDLT 分解。
问题是,这个因式分解需要在动态模拟过程中执行多次,并且花费大量时间在基于三元组的迭代矩阵中插入系数(保留存储空间)。
关于如何利用稀疏性不变和插入顺序相同的事实,有什么好的策略吗?当形成这个矩阵,循环模型中的元素、耦合等时,在模拟过程中的每个时间步,插入的顺序都是相同的。
使用 coeffref 将模拟时间增加了大约 10 倍。
我一直在考虑对模型进行一次传递并直接形成指向系数矩阵中相应位置的指针,但这似乎有点危险,尤其是因为 LDLT 分解是在两者之间运行的。
【问题讨论】:
-
LDLT 分解不会改变输入矩阵,所以你的想法应该被保存(当然,你应该用很多额外的断言运行一次)。
-
谢谢,这是一个很好的观点。如果有确保存储不被更改的好方法,那么形成一个指针数组可能会起作用......
标签: c++ performance sparse-matrix eigen numerical-methods