【发布时间】:2013-01-12 16:23:16
【问题描述】:
在我的图像处理算法的实现中,我必须解决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。
鉴于我的矩阵的形状,是否有任何其他方法可以建议您在运行时加快求解速度,无论预处理时间需要多长时间?
【问题讨论】:
-
试试 SVD,虽然我不知道这么多数据的速度有多快......
-
鉴于我的矩阵形式,我不明白为什么在这里应用 SVD 是个好主意。
-
是的,你可能是对的,我不是专家。以防万一你没有考虑到:)
标签: matlab system sparse-matrix factorization