矩阵的LU分解——MATLAB实现
文章目录
- 前言
- 一、矩阵的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=⎣⎢⎢⎢⎢⎢⎡a11a21a31⋮am1a12a22a32⋮am2a13a23a33⋮am3⋯⋯⋯⋱⋯a1na2na3n⋮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=⎣⎢⎢⎢⎢⎢⎡1l21l31⋮lm101l32⋮lm2001⋮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=⎣⎢⎢⎢⎢⎢⎡u1100⋮0u12u220⋮0u13u23u33⋮0⋯⋯⋯⋱⋯u1nu2nu3n⋮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×mUm×n⇒⎣⎢⎢⎢⎢⎢⎡a11a21a31⋮am1a12a22a32⋮am2a13a23a33⋮am3⋯⋯⋯⋱⋯a1na2na3n⋮amn⎦⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎢⎡u11l21u11l31u11⋮lm1u11u12l21u12+u22l31u12+l32u22⋮lm1u12+lm2u22u13l21u13+u23l31u13+l32u23+u33⋮lm1u13+lm2u23+lm3u33⋯⋯⋯⋱⋯u1nl21u1n+u2nl31u1n+l32u2n+u3n⋮lm1u1n+lm2u2n+⋯+lm,m−1um−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−1likukj+uij∑k=1j−1likukjj=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−1likukj0i≤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−1likukj)/ujji<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实现相关推荐
- matlab将矩阵分解成lu,10行代码实现矩阵的LU分解(matlab)
最近由于数值分析实验课要求,需要通过matlab实现矩阵的LU分解.但是看了很多网友写的程序,基本上都是通过循环嵌套循环来实现矩阵的LU分解.略感琐碎,因此最近两天便一直在思考能否利用矩阵的乘v法,来 ...
- 怎样用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 ...
- 矩阵的LU分解初步:一个对角线上元素非零的方阵
上一篇我们对下三角矩阵的求解给出了一个方便的求解,利用消元代入可以在Θ(N2)\Theta(N^2)Θ(N2) 的时间内完成,对于上三角矩阵,我们仍然可以利用类似的方法在相同的时间内求解. 对于一个非 ...
- 矩阵的LU分解,LU分解的推广,LU分解有什么意义,为什么要用LU分解。
一点点数学!开干! 参考书籍:<矩阵分析与计算>李继根 张新发编著 矩阵的LU分解: LU分解定理:如果n阶方阵A的各阶顺序主子式≠0(K=1.2.3,-,n),即A的各阶顺序主子式矩阵都 ...
- LU分解Matlab算法分析
最近矩阵分析老师出了一道题目作为作业,是一道程序题,题目是对A矩阵做LU分解,要求能对A实现PA=LU的分解,并最终输出L,U,P矩阵. 先来解读下题目,寥寥几句话,里面囊括的信息量却不少,然后这些都 ...
- 线性代数:矩阵的LU分解
矩阵的LU分解 基础公式 示例说明 2x2 矩阵情况 3x3 矩阵情况 本节是网易公开课上的麻省理工大学线性代数课程第四节: A的LU分解 的学习笔记. 本篇主要讲解 矩阵的LU分解. 矩阵的LU分解 ...
- MIT线性代数笔记四 矩阵的LU分解
文章目录 1. 矩阵的LU分解 2. 消元法所需运算量 3. 行互换 Row exchanges 本节的主要目的是从矩阵的角度理解高斯消元法,最后找到所谓的 LLL矩阵,使得矩阵 AAA可以转变为 ...
- 两矩阵相乘的秩的性质_MIT—线性代数笔记04 矩阵的LU分解
第04讲 矩阵的LU分解 Factorization into A=LU 04 A的LU分解v.youku.com 本节的主要目的是从矩阵的角度理解高斯消元法,最后找到所谓的L矩阵,使得矩阵A可以转 ...
- 施密特正交化c语言,C语言实现矩阵的LU分解、施密特正交化、Givens分解、Householder分解...
<C语言实现矩阵的LU分解.施密特正交化.Givens分解.Householder分解>由会员分享,可在线阅读,更多相关<C语言实现矩阵的LU分解.施密特正交化.Givens分解.H ...
- Matlab与线性代数--矩阵的LU分解
本图文详细介绍了Matlab中有关矩阵LU分解的操作.
最新文章
- String.hashCode 哈希值出现重复?
- js 获取鼠标在画布的位置_javascript求鼠标在canvas画布里的坐标
- 一天一个Linux基础命令之复制文件或目录命令cp
- 7-2 停车场管理 (50分)
- html怎么让图标动起来,让ICON生动起来 纯CSS实现带动画的天气图标
- 虚拟时代将至:环绕计算才是未来
- ECMAScript6 模版字符串
- 利用sort对数组快速排序
- PHP获取一段时间内的每个周几, 每月几号, 遇到特殊日子就往后延
- java序列化与反序列化总结
- oracle中的多表连接
- 光盘放进电脑读不出来_U盘插入电脑读不出来?学会这3招,轻松解决USB无法读取的问题...
- rk3399_android7.1的HDMI显示实现固定分辨率
- Atitit 反模式 黑名单 异常处理 反模式(antipatterns) 目录 1.1. 记录并抛出(log and throw)	1 1.2. 抛出异常基类(Throwing Excepti
- (VS2013)MFC对话框中用多个按钮创建多个子对话框实现选项卡效果(自己有修改)
- java 线程池不抛异常 异常捕获失败问题
- MSP430 MSP430单片机软件开发集成环境CCS
- 移动前端开发跟Web前端开发一样吗?有什么区别?
- 【自动驾驶】浅谈自动驾驶在业界的发展
- 我喜欢的学科计算机 英文作文,我喜欢的学科写英语作文40字
热门文章
- 讯飞离线语音命令词+TTS离线发音,实现命令词交互(windows dll for unity插件)
- 武汉理工大学 计算机学院院长,熊盛武:武汉理工大学计算机科学与技术学院院长、教授...
- 邮件群发怎么发?解密邮件群发软件小技巧
- PTC骗子站目录1(0-M)
- centos刻录工具_centos u盘引导制作工具
- HealthKit Swift 教程: 开始
- Unity实时涂鸦绘画插件:RealTime Painting
- linux系统构建学习笔记
- 软件工程—01可行性研究报告
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本