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

代码($A$为待分解矩阵,要求$A$的顺序主子式不为0)1

2

3

4

5

6

7

8

9

10n = size(A,1);

L = eye(n);

U = zeros(n);

U(1,:) = A(1,:);

L(:,1) = A(:,1)/U(1,1);

for i=2:n % 每次循环计算U的一行 L的一列

U(i,i:n) = A(i,i:n) - L(i,:)*U(:,i:n);

L(i:n,i) = (A(i:n,i) - L(i:n,:)*U(:,i))/U(i,i);

L = L - diag(diag(L)-1);

end

分解思路

首先我们回顾一下矩阵的LU分解,矩阵的LU分解就是将一个矩阵$A$,分解为两个矩阵的乘积,记为$LU$,其中$L$为下三角形矩阵,$U$为上三角矩阵。以4阶矩阵为例,数学表达式如下:

$$left[

begin{matrix}

a_{11} & a_{12} & a_{13} & a_{14}\

a_{21} & a_{22} & a_{23} & a_{24} \

a_{31} & a_{32} & a_{33} & a_{34} \

a_{41} & a_{42} & a_{43} & a_{44}

end{matrix}

right] =

left[

begin{matrix}

1 & 0 & 0 & 0 \

l_{21} & 1 & 0 & 0 \

1_{31} & l_{32} & 1 & 0 \

1_{41} & l_{42} & l_{43} & 1 \

end{matrix}

right]

left[

begin{matrix}

u_{11} & u_{12} & u_{13} & u_{14} \

0 & u_{22} & u_{23} & u_{24} \

0 & 0 & u_{33} & u_{34} \

0 & 0 & 0 & u_{44} \

end{matrix}

right] $$

其中$A$矩阵已知,需要求矩阵$L$和矩阵$U$。

求解思路是通过矩阵的乘法:需要求$u_{11}$就去寻找对应位置$a_{11}$是如何被计算的,需要求$l_{21}$就去寻找$a_{21}$是如何被计算的。

例如:我们需要求$u_{13}$,由矩阵的乘法可以知道:$a_{13}$等于$L$的第一行乘以$U$的第三列,那么自然地:$a_{13} = u_{13}$。那么我们就求得:$u_{13} = a_{13}$

代码解释

1-3行代码:初始化(自己去Matlab中运行以下就知道是什么意思了)

4-5行代码:计算$U$的第一行与$L$的第一列

6-10行代码:通过循环计算$U$的第$k$行与$L$的第$k$列

重点解析后四行代码

众所周知(任何一本书上都会详细的讲到),计算矩阵$U$的第$k$行与矩阵$L$的第$k$列的公式为:(推导思路和上述分解思路一致,可以自行验证)

$$u_{kj}=a_{kj}-sumlimits_{q=1}^{k-1}l_{kq}u_{qj},j=k,…,n$$

$$l_{ik}=frac{a_{ik}-sumlimits_{q=1}^{k-1}l_{iq}u_{qk}}{u_{kk}},i=k+1,k+2,…n$$

粗略分析,要计算$U$的第$k$行,那么就需要算$k-n+1$个元素,每个元素的计算中又有一个求和,再加上不仅要算$U$的第$k$行,还有$U$的第$k+1$到$n$行。因此没有分析错的话应该是三重循环。

下面来解释我通过利用矩阵的乘法来简化循环的思路:

以$n=4,i=2$为例,此时的矩阵形态为:

$$A=left[

begin{matrix}

a_{11} & a_{12} & a_{13} & a_{14}\

a_{21} & a_{22} & a_{23} & a_{24} \

a_{31} & a_{32} & a_{33} & a_{34} \

a_{41} & a_{42} & a_{43} & a_{44}

end{matrix}

right]

$$

$$

L =

left[

begin{matrix}

1 & 0 & 0 & 0 \

l_{21} & 1 & 0 & 0 \

1_{31} & 0 & 1 & 0 \

1_{41} & 0 & 0 & 1 \

end{matrix}

right],U=

left[

begin{matrix}

u_{11} & u_{12} & u_{13} & u_{14} \

0 & 0 & 0 & 0 \

0 & 0 & 0 & 0 \

0 & 0 & 0 & 0 \

end{matrix}

right] $$

需要计算矩阵$U$的第二行与矩阵$L$的第二列,可以观察到图中分块矩阵存在运算关系,因此可以利用此关系,直接运算得到$U$的第二行。

从而避免了对其单个元素计算,提升了代码的可读性。

matlab将矩阵分解成lu,10行代码实现矩阵的LU分解(matlab)相关推荐

  1. Matlab:连续按键、移动鼠标、鼠标点击、鼠标连点、输入字符,10行代码即可。

    Matlab也可以实现按键J灵的一些基本功能,比如:连续按键.移动鼠标.鼠标点击.鼠标连点和输入字符!其中, "连续按键":指间隔一定的时间(如:0.1s)按一下某个按键(如:键盘 ...

  2. 10 行代码玩转 NumPy!

    作者 | 天元浪子 来源 | Python作业辅导员 NumPy也可以画图吗?当然!NumPy不仅可以画,还可以画得更好.画得更快!比如下面这幅画,只需要10行代码就可以画出来.若能整明白这10行代码 ...

  3. 什么,PyTorch还能开发新药?哈佛推出这款工具包,10行代码训练“药神”模型...

    萧箫 编辑整理 量子位 报道 | 公众号 QbitAI 最近,来自哈佛大学等机构的研究人员,开发出了一个AI"药神"工具包,为加速新冠疫情下的新药研发助力. 这款名为DeepPur ...

  4. [Unity Editor]10行代码搞定Hierarchy排序

    在日常的工作和研究中,当给我们的场景摆放过多的物件的时候,Hierarchy面板就会变得杂乱不堪.比如这样:     过多的层次结构充斥在里面,根层的物件毫无序列可言,整个层次面板显示非常的杂乱不堪, ...

  5. python代码翻译-10 行代码,Python 教你自制屏幕翻译工具,有逼格!!

    原标题:10 行代码,Python 教你自制屏幕翻译工具,有逼格!! 1. 场景 大家如果平常遇到不认识的英文,相信大部分的人都会复制内容后,使用翻译软件,或者拷贝到网站上去执行翻译. 当然,对于 I ...

  6. Java学习的快速入门:10行代码学JQuery

    生活在快速发展时代的我们,如果不提速可能稍不留神就被时代淘汰了.快节奏的时代成就了快餐,亦成就了速成教育.尤其是身处互联网行业的我们,更新换代的速度更是迅速,快速掌握一门技术已经成为潮流趋势.怎样才能 ...

  7. python split函数 空格_python上手--10行代码读懂红楼梦

    取名10行代码看懂红楼梦,是将介绍使用python代码来读红楼梦获取其主要人物.这里的思想就是词频统计,通过分析红楼梦小说文字中出现最多的词语,来概括说明红楼梦的核心人物和事情.实际上如果你能跟着往下 ...

  8. python加密敏感信息_仅需10行代码,使用python加密用户敏感数据

    原标题:仅需10行代码,使用python加密用户敏感数据 数据分析师必须要遵守的一个规则就是数据保密,但在跨部门沟通的时候,难免会有数据泄露的情况,所以,对于用户的姓名.手机号.地址等敏感信息,一般需 ...

  9. 哈佛推出这款PyTorch工具包,10行代码训练“AI药神”模型

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:量子位 AI博士笔记系列推荐 周志华<机器学习> ...

最新文章

  1. Android Broadcast广播机制分析
  2. T-SQL里数据库工程师都不知道的秘密之SQL Server自定义函数UDF
  3. 编译原理之词法分析、语法分析、语义分析,【精炼总结】
  4. logstash 获取多个kafka_logstash 配置详解
  5. LODOP打印当前日期时间的方法
  6. c语言输出100以内的素数存放数组中,c语言素数(c语言输出100以内素数)
  7. 使用arduino控制多个PCA968516路舵机控制板从而达到最多可以控制992个伺服舵机
  8. matlab的句柄 图形对象 gca gco gcf set get
  9. Windows 10 版本 1507 中的新 AppLocker 功能
  10. 转载:林锐:大学十年(一个程序员的路程)(全)
  11. 端午特供——小朋友都会写的【狂扁·大粽子】
  12. getline()与cin.getline()函数用法详解
  13. mac 安装mysql 数据库
  14. Android Studio的安装 环境搭建
  15. android 电量控制
  16. 国外知名地球物理研究小组
  17. 2022-2028全球与中国智能家居监控和安全市场现状及未来发展趋势
  18. p1000_超级玛丽游戏
  19. qt延时 QT中简单的延时办法
  20. 网络工程基础——路由器路由器划分权限

热门文章

  1. 积分图像 Integral
  2. 怎么设置tomcat的默认应用
  3. Overflow属性详解(转载)
  4. Nginx的location配置详解
  5. Mac系统下SVN命令
  6. Hystrix面试 - 基于 Hystrix 线程池技术实现资源隔离
  7. 如何在Ubuntu 18.04上创建多节点MySQL集群
  8. NET Core 3.0 项目中使用 AutoFac
  9. 简说设计模式——策略模式
  10. Python3标准库:asyncio异步I/O、事件循环和并发工具