矩阵的三角分解是求解线性方程组常用的方法,包括LU分解,LDU分解,杜利特(Doolittle)分解,克劳特(Crout)分解,LLT(乔累斯基Cholesky)分解,LDLT(不带平方根乔累斯基)分解等,以及为了满足分解条件又加入行列变换的LPU分解,PLU分解,LUP分解,LDPU分解等。这里矩阵的三角分解系列教程主要是针对在学习三角分解时候的涉及到的一些细节,包括很多方法的来源和证明等,以及其中用到的一些矩阵操作的基础知识,主要包括:
这个系列后面文章会用到前面文章的理论和技术,所以建议按照顺序查看。
简介
上面介绍的都是三角分解的基础知识,可以了解每种三角分解具体含义,推导的过程以及适用的范围,有了前面的介绍其实自己去实现相应的三角分解方法也变得非常的简单。但在实际使用过程中,很少自己去实现这种复杂的矩阵三角分解,大部分情况下都是调用现成的矩阵运算的算法库。这里介绍比较常用的矩阵运算库Eigen的三角分解的一些使用方法。
安装命令
Eigen库的安装很简单,只有头文件,不包含lib文件。以ubuntu系统apt-get方式安装为例
sudo apt-get install libeigen3-dev
这里安装后会安装在/usr/include/eigen3/
目录下,但是在写程序的时候进行#include
时候一般都不会加eigen3
这个子目录路径,导致经常会找不到头头文件,所以通常安装完还需要执行
sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen
这样就可以按照习惯正常使用啦。
如果想使用最新版本一些新功能的话可以采用源码安装,请自行百度安装方式,这里就不做介绍了。
三角分解函数
Eigen库中主要包含下面这些三角分解函数
分解方法 |
Eigen函数 |
适用矩阵 |
分解公式 |
PartialPivLU |
Eigen::PartialPivLU |
可逆方阵 |
A
=
P
L
U
A=PLU
A=PLU |
FullPivLU |
Eigen::FullPivLU |
任意矩阵 |
A
=
P
−
1
L
U
Q
−
1
A=P^{-1}LUQ^{-1}
A=P−1LUQ−1 |
LLT |
Eigen::LLT |
对称正定方阵 |
A
=
L
L
T
A=LL^T
A=LLT |
LDLT |
Eigen::LDLT |
半正定或者半负定矩阵 |
A
=
P
T
L
D
L
T
P
A=P^TLDL^TP
A=PTLDLTP |
使用范例
待续~~~