我正在使用ublas :: Compressed Matrix与UMFPACK(一种稀疏线性求解器)一起工作。由于我正在做一个模拟,所以每当线性系统的构造略有不同时,可能会涉及放大/缩小系数矩阵和一些稀疏矩阵乘法。线性系统的规模约为25k。是否有任何有效的方法来动态更改boost中的compress_matrix?
即使有升压与UMFPACK工作,我还需要矩阵从不时改变,有时甚至搞清楚非零值的数量将是耗时的(理想情况下,我有一个结合补丁当我初始化矩阵时给出非零值的数量)。另外,我使用ublas :: range来动态追加列/行。
所以我的问题是:是否有任何有效的方式做到这一点?现在对我来说太慢了。转换一个像15k这样的维度的矩阵花费将近6秒,并且附加大约12k行很快(因为我猜它是一个行主矩阵),但是将相同数量的列附加到矩阵可能花费20s(我想对于相同的原因如上所以,即使我使用了列主矩阵,所需的总时间也是相同的)。
有点在这里变得绝望。任何建议都是值得欢迎的。
干杯。
由于我有近30个意见,但没有答案,我想也许我的问题不是很清楚。所以这里有一些细节。 – He01 2010-11-16 10:59:17
由于我正在做模拟,每一个时间步骤,我已经组装了一个线性系统并解决它,它基本上只是AX = B。然而,系数矩阵A通常由三个矩阵组成。一个权重矩阵,分别为软约束和硬约束的两个系数矩阵,不能预先计算。 (见下一条评论) – He01 2010-11-16 11:08:06
因为求解线性系统是最小二乘函数最小化的结果,所以我必须做一个矩阵 - 矩阵乘法来产生一个矩阵T和一个矩阵 - 向量相乘以使得B线性系统的软约束矩阵。然后,我必须将硬约束矩阵附加到T的底部和右边以便使A生成。最后,在A和B完成之后,我可以将它们输入到UMFPack中(请参见下一条评论)。 – He01 2010-11-16 11:08:22