lu分解

编辑

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

目录

  1. 1简介
  2. 2算法
  3. 3示例程序
  4. 4改进

简介

编辑

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

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/U1iu[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的对角元全为正时,这种分解是唯一的。

lu分解 百度百科相关推荐

  1. Linux内核——百度百科

    https://baike.baidu.com/item/Linux%E5%86%85%E6%A0%B8 Linux内核 编辑 Linux是一种开源电脑操作系统内核.它是一个用C语言写成,符合POSI ...

  2. 中国科学院计算机研究所上级单位,陈援非(中国科学院计算技术研究所高工)_百度百科...

    陈援非 (中国科学院计算技术研究所高工) 语音 编辑 锁定 讨论 上传视频 陈援非,男,博士.1976年10月出生于山东省济宁市.中国科学院计算技术研究所高工(副研究员级).ACM 和IEEE会员,中 ...

  3. 计算机窗口是什么意思解释,界面(概念用语)_百度百科

    [jiè miàn] 界面 (概念用语) 语音 编辑 锁定 讨论 上传视频 界面是指物质相与相的分界面.因为我们周围的物质是以气.液.固三种状态存在,所以也就有了气.液.固三相.在各相之间存在着气-液 ...

  4. 广东工学院计算机教授,胡晓敏(广东工业大学计算机学院副教授)_百度百科...

    胡晓敏 (广东工业大学计算机学院副教授) 语音 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 胡晓敏,现为广东工业大学计算机学院副教授,硕士生导 ...

  5. 什么是字长(百度百科)

    链接:https://baike.baidu.com/item/%E5%AD%97%E9%95%BF 在计算机领域,对于某种特定的计算机设计而言,字(word)是用于表示其自然的数据单位的术语,是用来 ...

  6. Hadoop 百度百科

    Hadoop 百度百科 来源地址:https://baike.baidu.com/item/Hadoop/3526507?fr=aladdin 本词条由"科普中国"百科科学词条编写 ...

  7. LU分解求线性方程组的解

    LU分解是矩阵分解的一种,可以将一个矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积. LU分解可以用来求逆矩阵,解线性方程组等.本文将介绍LU分解求线性方程组的解. 1.定义 如果A是一个方阵,A的L ...

  8. 多媒体-百科知识(转百度百科)

    =======================百度百科知识============================== 多媒体的定义 多媒体(duō méi tǐ) 的英文单词是Multimedia, ...

  9. PET(聚对苯二甲酸乙二醇酯)——百度百科

    百度百科 聚对苯二甲酸乙二醇酯,化学式为[COC6H4COOCH2CH2O]n.(英文:Polyethylene terephthalate,简称PET),由对苯二甲酸二甲酯与乙二醇酯交换或以对苯二甲 ...

  10. 云大博士计算机系的刘明,刘明(西南大学计算机与信息科学学院讲师)_百度百科...

    刘明 (西南大学计算机与信息科学学院讲师) 语音 编辑 锁定 讨论 上传视频 中文名 刘明 国    籍 中国 民    族 汉族职    业 教师[1] 学位/学历 博士[1] 专业方向 人工智能与 ...

最新文章

  1. Java学习总结:17
  2. 2018年第十届ACM四川省省赛题解(10 / 11)
  3. linux 5.8 yum源,Centos5.8 |linux yum源不能用报404错误
  4. LINQ : 如何为LINQ TO SQL实现自定义业务逻辑
  5. 《研磨设计模式》chap9 原型模式Prototype
  6. linkedlist java 实现_Java LinkedList 实现原理
  7. 硬件信息修改大师_零成本学习之单片机硬件开发(1)
  8. c语言pwm调制方式,pwm调制原理同步调制_几种pwm调制方式介绍 - 全文
  9. SpringCloud Ribbon中的7种负载均衡策略!
  10. netcore开源框架_Mono和.NET Core 从比翼双飞到合体
  11. [Leetcode]141. Linked List Cycle
  12. LinQ To XML——用LinQ查询XML
  13. 20121214收藏
  14. 十九个国内外主流的三维GIS软件(转)
  15. 下载抖音无水印视频的微信小程序
  16. linux超级管理员密码设置
  17. 北京计算机暑期培训,北京暑期计算机培训心得体会.doc
  18. php的seeder是什么,Seeder(一)
  19. PS钢笔--制图抠图
  20. 微信分享中将链接图标替换成自定义图片的实例

热门文章

  1. OSPF不规则区域,远离Area 0的区域连通性解决方案
  2. 游戏开发之类的构造函数调用时机(规则)及类对象作为另一个类的成员变量(C++基础)
  3. RSTP比STP快在哪?
  4. [未完成]scikit-learn一般实例之九:用于随机投影嵌入的Johnson–Lindenstrauss lemma边界...
  5. 求助:使用foreach函数获取到后台数据时未在表格上渲染的问题
  6. 13 Zuul的配置
  7. Java HttpResponse 详解
  8. 后台执行命令的工具screen
  9. Java中== equals hashcode浅析[转]
  10. 技术随想--不求安稳,超越自我