在我的图像处理算法的实现中,我必须求解形式为 的大型线性系统A*x=b
,其中:
- 矩阵
A=L+D
是拉普拉斯矩阵 L 和对角矩阵 D 的和 - 拉普拉斯矩阵 L 是稀疏的,每行大约有 25 个非零
- 系统很大,未知数与输入图像中的像素一样多(通常 > 100 万)。
拉普拉斯矩阵 L 在算法的连续运行之间不会改变;我可以在预处理中构造这个矩阵,并可能计算它的分解。每次运行算法时,对角矩阵 D 和右侧向量 b 都会发生变化。
我正在尝试找出在运行时解决系统问题的最快方法;我不介意花时间进行预处理(例如,计算 L 的分解)。
我最初的想法是预先计算 L 的 Cholesky 分解,然后在运行时使用 D 中的值更新分解(使用 cholupdate 进行 rank-1 更新),并通过反向替换快速解决问题。不幸的是,Cholesky 分解不像原始 L 矩阵那样稀疏,仅从磁盘加载它就需要 5.48 秒;作为对比,直接求解带反斜杠的系统需要8.30s。
鉴于我的矩阵的形状,是否有任何其他方法可以建议您在运行时加快求解速度,无论预处理时间需要多长时间?