lu分解 百度百科

lu分解

编辑
线性代数中, LU分解(LU Decomposition)是 矩阵分解的一种,可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积)。LU分解主要应用在 数值分析中,用来解线性方程、求反矩阵或计算行列式。
中文名
lu分解
本    质
高斯消元法的一种表达形式
学    科
线性代数
应    用
数值分析

简介

编辑
系数矩阵A转变成等价两个矩阵L和U的乘积 ,其中L和U分别是下三角和上 三角矩阵。当A的所有 顺序主子式都不为0时,矩阵A可以分解为A=LU,且当L的对角元全为1时分解唯一。其中L是下三角矩阵,U是上三角矩阵。
4阶矩阵的LU分解 4阶矩阵的LU分解

算法

编辑
LU分解在本质上是 高斯消元法的一种表达形式。实质上是将A通过 初等行变换变成一个上三角矩阵,其 变换矩阵就是一个单位下三角矩阵。这正是所谓的杜尔里特算法(Doolittle algorithm):从下至 上地对矩阵A做初等行变换,将对角线左下方的元素变成零,然后再证明这些行变换的效果等同于左乘一系列单位下三角矩阵,这一系列单位下三角矩阵的乘积的逆就是L矩阵,它也是一个单位下三角矩阵。这类算法的 复杂度一般在(三分之二的n三次方) 左右。 [2]  

示例程序

编辑
Java
import java.util.Arrays;
/**
 * 矩阵的直接三角分解 ,调用示例:
 * 
 * DirectDecomposition dd = new DirectDecomposition(data);//data为一个二维double数组,代替一个矩阵
 * 
 * double[][] l = dd.getL();//获取L
 * 
 * double[][] u = dd.getU();//获取U
 * 
 * @author 清雨季
 */
public class DoolittleDecomposition {
    private double[][] data;
    private double[][] l;
    private double[][] u;
    private int n;
    /**
     * 创建一个n阶的矩阵
     * 
     * @param n
     */
    public DoolittleDecomposition(double[][] data) {
        if (data == null || data.length == 0 || data.length != data[0].length) {
            throw new RuntimeException("不是一个方阵");
        }
        this.data = data;
        n = data.length;
        l = new double[n][n];
        u = new double[n][n];
        countLU();
    }
    protected void countLU() {
        for (int i = 0; i < n; i++) {// 第一步,计算L的第一列和U的第一行:U1i=A1i,Li1=Ai1/U1i
            u[0][i] = data[0][i];
            l[i][0] = data[i][0] / u[0][i];
        }
        for (int r = 1; r < n; r++) {
            for (int i = r; i < n; i++) {
                u[r][i] = data[r][i] - sumLrkUki(r, i);
                l[i][r] = (data[i][r] - sumLikUkr(r, i)) / u[r][r];
            }
        }
    }
    /**
     * 求和:Lrk*Uki 对k求和:1<=k<=r-1
     * 
     * @param r
     * @param i
     * @return
     */
    private double sumLrkUki(int r, int i) {
        double re = 0.0;
        for (int k = 0; k < r; k++) {
            re += l[r][k] * u[k][i];
        }
        return re;
    }
    private double sumLikUkr(int r, int i) {
        double re = 0.0;
        for (int k = 0; k < r; k++) {
            re += l[i][k] * u[k][r];
        }
        return re;
    }
    public double[][] getData() {
        return data;
    }
    public double[][] getL() {
        return l;
    }
    public double[][] getU() {
        return u;
    }
    public static void main(String[] args) {
        double[][] data= {
                {1,2,6},
                {2,5,15},
                {6,15,46},
        };
        DoolittleDecomposition dd = new DoolittleDecomposition(data);
        double[][] l = dd.getL();
        double[][] u = dd.getU();
        int n = l.length;
        System.out.println("L阵:");
        for (int i = 0; i < n; i++) {
            System.out.println(Arrays.toString(u[i]));
        }
        System.out.println("---------------------");
        System.out.println("U阵:");
        for (int i = 0; i < n; i++) {
            System.out.println(Arrays.toString(l[i]));
        }
    }
}


改进

编辑
(i)Doolittle分解
对于 非奇异矩阵(任n阶 顺序主子式不全为0)的方阵A,都可以进行Doolittle分解,得到A=LU,其中L为单位下三角矩阵,U为上三角矩阵;这里的Doolittle分解实际就是Gauss变换;
(ii)Crout分解
对于非奇异矩阵(任n阶顺序主子式不全为0)的方阵A,都可以进行Crout分解,得到A=LU,其中L为下三角矩阵,U为单位上三角矩阵;
(iii)列主元三角分解
对于非奇异矩阵的方阵A,采用列主元三角分解,得到PA=LU,其中P为一个 置换矩阵,L,U与Doolittle分解的规定相同;
(iv)全主元三角分解
对于非奇异矩阵的方阵A,采用全主元三角分解,得到PAQ=LU,其中P,Q为置换矩阵,L,U与Doolittle分解的规定相同;
(v)直接三角分解
对于非奇异矩阵的方阵A,利用直接三角分解推导得到的公式(Doolittle分解公式或者Crout分解公式),可以进行递归操作,以便于计算机编程实现;
(vi)“追赶法”
追赶法是针对带状矩阵(尤其是 三对角矩阵)这一大 稀疏矩阵的特殊结构,得出的一种保带性分解的公式推导,实质结果也是LU分解;因为大稀疏矩阵在工程领域应用较多,所以这部分内容需要特别掌握。
(vii)Cholesky 分解法平方根法)和改进的平方根法
Cholesky分解法是是针对 正定矩阵的分解,其结果是 A=LDLT=LD(1/2)D(1/2)LT=L1L1T。如何得到L1,实际也是给出了 递归公式
改进的平方根法是Cholesky分解的一种改进。为避免公式中 开平方,得到的结果是A=LDLT=TLT, 同样给出了求T,L的公式。
小结:
(1) 从(i)~(iv)是用手工计算的基础方法,(v)~(vi)是用计算机辅助计算的算法公式指导;
(2) 这些方法产生的目的是为了得到线性方程组的解,本质是 高斯Gauss 消元法
参考资料
  • 1.  白峰杉.数值计算引论(第二版).北京:高等教育出版社,2010
  • 2.  LU分解 .csdn[引用日期2012-12-1]








14.高斯消元法的求解过程可大致分为两个阶段:(1)把原方程组化为上三角形方程组,称之为“消元”过程;(2)用逆次序逐一求出上三角方程组(原方程组的等价方程组)的解,称之为“回代”过程.
15.定义3.1: 设A为n阶矩阵,L为n阶下三角阵,U为n阶上三角阵。如果A=LU,则说明矩阵A实行了三角分解或LU分解。
16.定义3.2: 如果L为单位下三角阵,U为上三角阵,则称该三角分解为杜里特(Doolittle)分解;如果L为下三角阵,U为单位上三角阵,则称A=LU为克劳特(Crout)分解。
定理3.1:n阶(n≥2)矩阵A有唯一杜里特分解(或克劳特分解)的充要条件是A的前n-1个顺序主子式都不为零。
定理3.2:设A为对称正定矩阵,则有非奇异下三角阵L,使A=LLT;当限定L的对角元全为正时,这种分解是唯一的。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值