LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积。
LU分解可以用来求逆矩阵,解线性方程组等。本文将介绍LU分解求线性方程组的解。
1.定义
如果A是一个方阵,A的LU分解是将A分解成如下形式:
其中L,U分别为下三角矩阵和上三角矩阵。
2.例子
对于如下矩阵A,对A进行LU分解
首先将矩阵第一列对角线上元素A11下面的元素通过矩阵初等行变换变为0,
然后再将矩阵第二列对角线上元素A22 下面的元素通过矩阵初等行变换变为0。
则得到的上三角矩阵就是U。这个时候,L也已经求出来了。通过将下三角形主对角线上的元素
都置为1,乘数因子放在下三角相应的位置(放在消元时将元素变为0的那个元素的位置),就
可以得到下三角矩阵L。如下:
对于L的构造,举个例子。如将第一列的元素2变为0时,第二行减去第一行乘以2,于是A21
就变成了0。这个乘数因子将元素A21变成了0,对应的,下三角矩阵L中对应位置的元素L21就为
乘数因子2。其它的与之类似。
3.LU分解程序实现(java实现)
通过上面举的例子,我们应该对LU分解的过程有了一个大致的了解。接下来可以看看程序
是怎么实现LU分解的,进一步加深对LU分解的了解。
/**
* Get matrix L and U. list.get(0) for L, list.get(1) for U
* @param a - Coefficient matrix of the equations
* @return matrix L and U, list.get(0) for L, list.get(1) for U
*/
private static List decomposition(double[][] a) {
final double esp = 0.000001;
double[][] U = a;
double[][] L = createIdentiyMatrix(a.length);
for(int j=0; j
if(Math.abs(a[j][j])
throw new IllegalArgumentException("zero pivot encountered.");
}
for(int i=j+1; i
double mult = a[i][j] / a[j][j];
for(int k=j; k