基于Eigen求解线性方程组Ax=b的性能分析

目录

1. 稠密矩阵求解

2. 稀疏矩阵求解

总结


在上一篇博客中,我们介绍了三维人脸参数化方法,链接:三维人脸参数化方法。在该算法中,涉及到求解线性方程AX=b的问题。这里的A为针对网格的拉普拉斯权重矩阵,规模是比较大的,尺度为N*N,N为网格点数。对于人脸数据,动则10000以上的点数,为线性方程求解带来挑战。Eigen提供了一系列的求解线性方程的解法,本博客就基于人脸参数化方法,对比下这些解法的性能特点,以帮助需要深入了解求解大规模线性方程的同学,选择合适的计算工具。


1. 稠密矩阵求解

在Eigen中,对于稠密矩阵求解,包含在Eigen/Dense,有如下工具:

可以看到,上述线性系统求解包括LU分解,SVD分解,QR分解等。在参数化任务中,上述方法的实际表现如下(测试用人脸子曲面顶点数为3837):

方法LLTLDLTFullPivLUHouseholderQRJacobiSVD
时间4.974s110.55s1826.19s376.725Nan

参数化方法结果:

可以看到LLT和LDLT的计算结果存在严重的误差,使得参数化后点的位置出现了极大的偏移。FullPivLU和HouseholderQR两个方法输出了正确的结果,但是时间开销过大。JacobiSVD对于大规模矩阵求解,时间开销过大,且在计算过程中崩溃。


2. 稀疏矩阵求解

可以看到,使用稠密矩阵求解,整体计算效率较低,且精度没有保障。究其原因,在参数化问题中,矩阵A不是稠密的,而是包含大量0元素的稀疏矩阵。因此,使用稀疏矩阵求解工具,比较适合解决曲面参数化中,邻接矩阵的线性求解问题。对于稀疏矩阵求解,包含在Eigen/Sparse,有如下工具:

对于上述方法,对应的计算时间为:

方法

Simplicial

Cholesky

SparseLU

LeastSquares

ConjugateGradient

Conjugate

Gradient

BiCGSTAB
时间0.827s2.401s7.157s0.732s1.308s

参数化结果比较:

可以看到,基于稀疏矩阵设计的求解器,在速度上远远优于前者,同时保持计算精度。


总结

针对线性求解问题矩阵数据分布的特性,选择合适的求解器至关重要。求解器从大类来说,可分为稠密矩阵求解和稀疏矩阵求解;从小类来说,包括LU分解,QR分解,SVD分解等。从对算法精度与效率的要求,各个求解器的表现差异不容忽视。因此,对于不同的线性求解问题,要选择与之匹配的求解方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿老甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值