文章目录

  • 前言
  • 一、矩阵的LU分解(三角分解)定义
  • 二、LU分解实现
    • 1.matlab代码
    • 2.数据验证
  • 总结

前言

  矩阵AAA的LULULU分解是将矩阵A表示成一个下三角矩阵LLL和上三角矩阵UUU的乘积,即A=LUA=LUA=LU,这样的结构便于科学计算。


一、矩阵的LU分解(三角分解)定义

  设矩阵AAA是m×nm \times nm×n阶矩阵;LLL是m×mm \times mm×m阶下三角矩阵,主对角元素为1;UUU是m×nm \times nm×n阶上三角矩阵。称LULULU为矩阵AAA的一个三角分解,有:
Am×n=[a11a12a13⋯a1na21a22a23⋯a2na31a32a33⋯a3n⋮⋮⋮⋱⋮am1am2am3⋯amn](1-1)\tag{1-1} A_{m\times n}=\begin{bmatrix} a_{11} & a_{12} & a_{13} & \cdots & a_{1n} \\ a_{21} & a_{22} & a_{23} & \cdots & a_{2n} \\ a_{31} & a_{32} & a_{33} & \cdots & a_{3n} \\ \vdots&\vdots&\vdots&\ddots&\vdots\\ a_{m1} & a_{m2} & a_{m3} &\cdots& a_{mn}\\ \end{bmatrix} Am×n​=⎣⎢⎢⎢⎢⎢⎡​a11​a21​a31​⋮am1​​a12​a22​a32​⋮am2​​a13​a23​a33​⋮am3​​⋯⋯⋯⋱⋯​a1n​a2n​a3n​⋮amn​​⎦⎥⎥⎥⎥⎥⎤​(1-1)
Lm×m=[100⋯0l2110⋯0l31l321⋯0⋮⋮⋮⋱⋮lm1lm2lm3⋯1](1-2)\tag{1-2} L_{m\times m}= \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ l_{21} & 1 &0& \cdots & 0 \\ l_{31} & l_{32} & 1 & \cdots & 0\\ \vdots&\vdots&\vdots&\ddots&\vdots\\ l_{m1} & l_{m2} & l_{m3} &\cdots&1\\ \end{bmatrix} Lm×m​=⎣⎢⎢⎢⎢⎢⎡​1l21​l31​⋮lm1​​01l32​⋮lm2​​001⋮lm3​​⋯⋯⋯⋱⋯​000⋮1​⎦⎥⎥⎥⎥⎥⎤​(1-2)
Um×n=[u11u12u13⋯u1n0u22u23⋯u2n00u33⋯u3n⋮⋮⋮⋱⋮000⋯umn](1-3)\tag{1-3} U_{m\times n}=\begin{bmatrix} u_{11} & u_{12} & u_{13} & \cdots & u_{1n} \\ 0 & u_{22} & u_{23} & \cdots & u_{2n} \\ 0 & 0& u_{33} & \cdots & u_{3n} \\ \vdots&\vdots&\vdots&\ddots&\vdots\\ 0 & 0 & 0 &\cdots& u_{mn}\\ \end{bmatrix} Um×n​=⎣⎢⎢⎢⎢⎢⎡​u11​00⋮0​u12​u22​0⋮0​u13​u23​u33​⋮0​⋯⋯⋯⋱⋯​u1n​u2n​u3n​⋮umn​​⎦⎥⎥⎥⎥⎥⎤​(1-3)
Am×n=Lm×mUm×n⇒[a11a12a13⋯a1na21a22a23⋯a2na31a32a33⋯a3n⋮⋮⋮⋱⋮am1am2am3⋯amn]=[u11u12u13⋯u1nl21u11l21u12+u22l21u13+u23⋯l21u1n+u2nl31u11l31u12+l32u22l31u13+l32u23+u33⋯l31u1n+l32u2n+u3n⋮⋮⋮⋱⋮lm1u11lm1u12+lm2u22lm1u13+lm2u23+lm3u33⋯lm1u1n+lm2u2n+⋯+lm,m−1um−1,n+umn]A_{m\times n}=L_{m\times m}U_{m\times n} \begin{aligned} \Rightarrow \begin{bmatrix} a_{11} & a_{12} & a_{13} & \cdots & a_{1n} \\ a_{21} & a_{22} & a_{23} & \cdots & a_{2n} \\ a_{31} & a_{32} & a_{33} & \cdots & a_{3n} \\ \vdots&\vdots&\vdots&\ddots&\vdots\\ a_{m1} & a_{m2} & a_{m3} &\cdots& a_{mn}\\ \end{bmatrix} =\begin{bmatrix} u_{11} & u_{12} & u_{13} & \cdots & u_{1n} \\ l_{21}u_{11} & l_{21}u_{12}+u_{22} & l_{21}u_{13}+u_{23} & \cdots & l_{21}u_{1n}+u_{2n} \\ l_{31}u_{11} & l_{31}u_{12}+l_{32}u_{22} & l_{31}u_{13}+l_{32}u_{23}+u_{33} & \cdots & l_{31}u_{1n}+l_{32}u_{2n}+u_{3n} \\ \vdots&\vdots&\vdots&\ddots&\vdots\\ l_{m1}u_{11} & l_{m1}u_{12}+l_{m2}u_{22} & l_{m1}u_{13}+l_{m2}u_{23}+l_{m3}u_{33} &\cdots&l_{m1}u_{1n}+l_{m2}u_{2n}+\cdots+l_{m,m-1}u_{m-1,n}+u_{mn}\\ \end{bmatrix} \end{aligned} Am×n​=Lm×m​Um×n​⇒⎣⎢⎢⎢⎢⎢⎡​a11​a21​a31​⋮am1​​a12​a22​a32​⋮am2​​a13​a23​a33​⋮am3​​⋯⋯⋯⋱⋯​a1n​a2n​a3n​⋮amn​​⎦⎥⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎢⎡​u11​l21​u11​l31​u11​⋮lm1​u11​​u12​l21​u12​+u22​l31​u12​+l32​u22​⋮lm1​u12​+lm2​u22​​u13​l21​u13​+u23​l31​u13​+l32​u23​+u33​⋮lm1​u13​+lm2​u23​+lm3​u33​​⋯⋯⋯⋱⋯​u1n​l21​u1n​+u2n​l31​u1n​+l32​u2n​+u3n​⋮lm1​u1n​+lm2​u2n​+⋯+lm,m−1​um−1,n​+umn​​⎦⎥⎥⎥⎥⎥⎤​​
  由上式,比较矩阵AAA和LULULU中的各项,可以得出通项:
aij={uijj=1,i=1,2,⋯,m∑k=1i−1likukj+uiji≤j,i=2,3,⋯m,j=i,i+1,⋯,n∑k=1j−1likukji>j,j=2,3,⋯,n,i=j+1,⋯,m(1-5)a_{ij}= \begin{cases} u_{ij} & j=1,i=1,2,\cdots,m\\ \sum_{k=1}^{i-1} l_{ik}u_{kj}+u_{ij}&i \leq j,i=2,3,\cdots m,j=i,i+1,\cdots,n\\ \sum_{k=1}^{j-1}l_{ik}u_{kj} & i>j,j=2,3,\cdots,n,i=j+1,\cdots,m \end{cases} \tag{1-5} aij​=⎩⎪⎨⎪⎧​uij​∑k=1i−1​lik​ukj​+uij​∑k=1j−1​lik​ukj​​j=1,i=1,2,⋯,mi≤j,i=2,3,⋯m,j=i,i+1,⋯,ni>j,j=2,3,⋯,n,i=j+1,⋯,m​(1-5)
  可以求得上三角矩阵Um×nU_{m \times n}Um×n​的表达式为:
uij={aij−∑k=1i−1likukji≤j0i>j(1-6)u_{ij}=\begin{cases} a_{ij}-\sum_{k=1}^{i-1} l_{ik}u_{kj} &i \leq j \\ 0 & i>j \end{cases} \tag{1-6} uij​={aij​−∑k=1i−1​lik​ukj​0​i≤ji>j​(1-6)
  同理,可以求得下三角矩阵Lm×mL_{m \times m}Lm×m​的表达式为:
lij={0i<j1i=j(aij−∑k=1j−1likukj)/ujji>j(1-7)l_{ij}=\begin{cases} 0 &i<j \\ 1 & i=j \\ (a_{ij}-\sum_{k=1}^{j-1} l_{ik}u_{kj} )/u_{jj}& i>j \end{cases} \tag{1-7} lij​=⎩⎪⎨⎪⎧​01(aij​−∑k=1j−1​lik​ukj​)/ujj​​i<ji=ji>j​(1-7)
  从LLL的表达式(1-7)可以看出,当ujj=0u_{jj}=0ujj​=0时,递推表达式产生了问题。返回表达式(1-4),这时候不难看出,当ujj=0u_{jj}=0ujj​=0时,lijl_{ij}lij​可以为任意值,等式恒成立。为了简化计算,当ujj=0u_{jj}=0ujj​=0时,取lij=0(i>j)l_{ij}=0(i>j)lij​=0(i>j)。
  当矩阵AAA的各阶主子式det(Ak)=det(A(1:k,1:k)),k=1,2,⋯,mdet(A_{k})=det(A(1:k,1:k)),k=1,2,\cdots ,mdet(Ak​)=det(A(1:k,1:k)),k=1,2,⋯,m不为0时,LULULU分解式唯一;当矩阵AAA的kkk阶主子式为000时,LULULU分解式有无数个。通常在实际应用中,我们只需要一组LULULU分解式,为了简化计算,本文中,当ujj=0u_{jj}=0ujj​=0时,取lij=0(i>j)l_{ij}=0(i>j)lij​=0(i>j)。
  当然了,当ujj=0u_{jj}=0ujj​=0时,我们也可以通过对矩阵AAA进行初等行交换,使其各阶主子式不为000。上述过程相当于对矩阵左乘一个置换矩阵,来找到一组LULULU分解式,即PA=LUPA=LUPA=LU,PPP为一置换矩阵,此为MATLAB中的做法(函数lu)。
  LULULU分解的更多信息参考:https://en.wikipedia.org/wiki/LU_decomposition#Closed_formula


二、LU分解实现

1.matlab代码

function [L,U] = lu_decompose(A)
%   lu decompose
%   L:下三角矩阵
%   U:上三角矩阵
%   A:输入矩阵
[m,n]=size(A);L=eye(m);
L(:,1)=A(:,1)/A(1,1);%L第一列赋值U=zeros(m,n);
U(1,:)=A(1,:);%U第一行赋值for i=2:mfor j=2:nif i<=jU(i,j)=A(i,j)-sum(L(i,1:i-1).*U(1:i-1,j)');%递推表达式(1-6)elseif U(j,j)==0L(i,j)=0;elseL(i,j)=(A(i,j)-sum(L(i,1:j-1).*U(1:j-1,j)'))/U(j,j);%递推表达式(1-7)endendend
endend

2.数据验证

>> A=[1,2,3;4,5,6;7,8,9];
>> [L,U,P]=lu(A)
L =1              0              0       1/7            1              0       4/7            1/2            1
U =7              8              9       0              6/7           12/7     0              0              0
P =0              0              1       1              0              0       0              1              0
>> [L1,U1]=lu_decompose(A)
L1 =1     0     04     1     07     2     1
U1 =1     2     30    -3    -60     0     0
>> [L1,U1]=lu_decompose(P*A)
L1 =1              0              0       1/7            1              0       4/7            1/2            1
U1 =7              8              9       0              6/7           12/7     0              0              0

总结

  从矩阵的乘积的性质出发的得到上三角矩阵和下三角矩阵的表达式,并考虑上三角矩阵主对角元素为0的情况下上三角矩阵和下三角矩阵的表达式。


矩阵的LU分解——MATLAB实现相关推荐

  1. matlab将矩阵分解成lu,10行代码实现矩阵的LU分解(matlab)

    最近由于数值分析实验课要求,需要通过matlab实现矩阵的LU分解.但是看了很多网友写的程序,基本上都是通过循环嵌套循环来实现矩阵的LU分解.略感琐碎,因此最近两天便一直在思考能否利用矩阵的乘v法,来 ...

  2. 怎样用matlab做矩阵的LU分解,矩阵LU分解程序实现(Matlab)

    n=4;%确定需要LU分解的矩阵维数 %A=zeros(n,n); L=eye(n,n);P=eye(n,n);U=zeros(n,n);%初始化矩阵 tempU=zeros(1,n);tempP=z ...

  3. 矩阵的LU分解初步:一个对角线上元素非零的方阵

    上一篇我们对下三角矩阵的求解给出了一个方便的求解,利用消元代入可以在Θ(N2)\Theta(N^2)Θ(N2) 的时间内完成,对于上三角矩阵,我们仍然可以利用类似的方法在相同的时间内求解. 对于一个非 ...

  4. 矩阵的LU分解,LU分解的推广,LU分解有什么意义,为什么要用LU分解。

    一点点数学!开干! 参考书籍:<矩阵分析与计算>李继根 张新发编著 矩阵的LU分解: LU分解定理:如果n阶方阵A的各阶顺序主子式≠0(K=1.2.3,-,n),即A的各阶顺序主子式矩阵都 ...

  5. LU分解Matlab算法分析

    最近矩阵分析老师出了一道题目作为作业,是一道程序题,题目是对A矩阵做LU分解,要求能对A实现PA=LU的分解,并最终输出L,U,P矩阵. 先来解读下题目,寥寥几句话,里面囊括的信息量却不少,然后这些都 ...

  6. 线性代数:矩阵的LU分解

    矩阵的LU分解 基础公式 示例说明 2x2 矩阵情况 3x3 矩阵情况 本节是网易公开课上的麻省理工大学线性代数课程第四节: A的LU分解 的学习笔记. 本篇主要讲解 矩阵的LU分解. 矩阵的LU分解 ...

  7. MIT线性代数笔记四 矩阵的LU分解

    文章目录 1. 矩阵的LU分解 2. 消元法所需运算量 3. 行互换 Row exchanges   本节的主要目的是从矩阵的角度理解高斯消元法,最后找到所谓的 LLL矩阵,使得矩阵 AAA可以转变为 ...

  8. 两矩阵相乘的秩的性质_MIT—线性代数笔记04 矩阵的LU分解

    第04讲 矩阵的LU分解 Factorization into A=LU 04 A的LU分解​v.youku.com 本节的主要目的是从矩阵的角度理解高斯消元法,最后找到所谓的L矩阵,使得矩阵A可以转 ...

  9. 施密特正交化c语言,C语言实现矩阵的LU分解、施密特正交化、Givens分解、Householder分解...

    <C语言实现矩阵的LU分解.施密特正交化.Givens分解.Householder分解>由会员分享,可在线阅读,更多相关<C语言实现矩阵的LU分解.施密特正交化.Givens分解.H ...

  10. Matlab与线性代数--矩阵的LU分解

    本图文详细介绍了Matlab中有关矩阵LU分解的操作.

最新文章

  1. String.hashCode 哈希值出现重复?
  2. js 获取鼠标在画布的位置_javascript求鼠标在canvas画布里的坐标
  3. 一天一个Linux基础命令之复制文件或目录命令cp
  4. 7-2 停车场管理 (50分)
  5. html怎么让图标动起来,让ICON生动起来 纯CSS实现带动画的天气图标
  6. 虚拟时代将至:环绕计算才是未来
  7. ECMAScript6 模版字符串
  8. 利用sort对数组快速排序
  9. PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
  10. java序列化与反序列化总结
  11. oracle中的多表连接
  12. 光盘放进电脑读不出来_U盘插入电脑读不出来?学会这3招,轻松解决USB无法读取的问题...
  13. rk3399_android7.1的HDMI显示实现固定分辨率
  14. Atitit 反模式 黑名单 异常处理 反模式(antipatterns) 目录 1.1. 记录并抛出(log and throw) 1 1.2. 抛出异常基类(Throwing Excepti
  15. (VS2013)MFC对话框中用多个按钮创建多个子对话框实现选项卡效果(自己有修改)
  16. java 线程池不抛异常 异常捕获失败问题
  17. MSP430 MSP430单片机软件开发集成环境CCS
  18. 移动前端开发跟Web前端开发一样吗?有什么区别?
  19. 【自动驾驶】浅谈自动驾驶在业界的发展
  20. 我喜欢的学科计算机 英文作文,我喜欢的学科写英语作文40字

热门文章

  1. 讯飞离线语音命令词+TTS离线发音,实现命令词交互(windows dll for unity插件)
  2. 武汉理工大学 计算机学院院长,熊盛武:武汉理工大学计算机科学与技术学院院长、教授...
  3. 邮件群发怎么发?解密邮件群发软件小技巧
  4. PTC骗子站目录1(0-M)
  5. centos刻录工具_centos u盘引导制作工具
  6. HealthKit Swift 教程: 开始
  7. Unity实时涂鸦绘画插件:RealTime Painting
  8. linux系统构建学习笔记
  9. 软件工程—01可行性研究报告
  10. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本