1. A = LU

之前在消元的过程中,我们看到可以将矩阵 \(A\) 变成一个上三角矩阵 \(U\),\(U\) 的对角线上就是主元。下面我们将这个过程反过来,通一个下三角矩阵 \(L\) 我们可以从 \(U\) 得到 \(A\), \(L\) 中的元素也就是乘数 \(l_{ij}\)。

如果有一个 3*3 的矩阵,假设不需要进行行交换,那我们需要三个消元矩阵 \(E_{21}, E_{31}, E_{32}\) 来分别使矩阵 \(A\) 的 (2, 1)、(3, 1) 和 (3, 2) 位置为零,然后我们就有

乘数 \(l_{ij}\) 正好就是 \(L\) 中 \((i, j)\) 处的元素。因为当我们计算 \(U\) 的第三行的时候,实际上是用 \(A\) 的第三行减去 \(U\) 的前两行的一些倍数。

因此有

下面看一个特殊的例子

如果 \(A\) 的某一行以 0 开始,说明该位置不需要进行消元,也即 \(L\) 中对应位置的元素为 0。

如果 \(A\) 的某一列以 0 开始,该位置元素在消元过程始终不会改变,也即 \(U\) 中对应位置的元素为 0。

由于 \(L\) 的对角线上都是 1,而 \(U\) 的对角线上为主元,因此,这是不对称的。我们可以进一步将 \(U\) 进行分解,使得 \(U\) 的对角线上元素也都为 1。

这时候,\(A\) 的分解就变成了 \(A = LU = LDU\),其中 \(D\) 是一个对角矩阵, \(L\) 是一个下三角矩阵, \(U\) 是一个上三角矩阵。

当我们从左边的 \(A\) 得到 \(L\) 和 \(U\) 后,我们就对右边的 \(b\) 进行同样的消元过程得到 \(Lc = b\),然后再通过回带 \(Ux=c\) 求出方程组的解。

2. 消元过程的计算复杂度

假设我们有一个 \(n*n\) 的矩阵,首先我们要将第一列主元以下的元素都变成 \(0\)。这时候,每一个元素变成 \(0\) 我们都需要 \(n\) 次乘法和 \(n\) 次减法,总共有 \(n-1\) 个元素需要变成 \(0\),总的乘法次数为 \(n(n-1)\),近似为 \(n^2\)。然后,我们要依次将后面列的主元下面的元素变成 \(0\),需要的总的乘法次数为 \(n^2+(n-1)^2+\cdots + 2 + 1 \approx \frac{1}{3}n^3\)。

也就是说对左边的 \(A\) 消元要进行 \(\frac{1}{3}n^3\) 次的乘法操作和 \(\frac{1}{3}n^3\) 次的加法操作。

再来看右边对 \(b\) 进行消元,首先我们需要将 \(b_2, b_3 \cdots b_n\) 都减去 \(b_1\),需要 \(n-1\) 次操作,往后我们依次需要 \(n-2, n-3 \cdots 1\) 次操作。回带的时候,求解最后一个方程的时候,我们只需要进行 1 次操作,依次往上我们需要 \(2, 3 \cdots n\) 次操作。因此,求解的过程总共需要 \(n^2\) 次的乘法操作和 \(n^2\) 次的加法操作

3. 转置和置换矩阵

\(A\) 的转置矩阵称为 \(A^T\),其中 \(A^T\) 的列就是 \(A\) 的行,也即 \((A^T)_{ij} = A_{ji}\)。

\[(A+B)^T = A^T + B^T\]
\[(AB)^T = B^TA^T\]

假设 \(B\) 是一个向量 \(x\),那么对 \((Ax)^T = x^TA^T\) 的理解就是:\(Ax\) 是对 \(A\) 的列的线性组合,\(x^TA^T\) 则是对 \(A^T\) 的行的线性组合,\(A\) 的列和 \(A^T\) 的行是一样的,所以线性组合后是一样的结果。

如果 \(B\) 有多列的话,我们就很容易得到

同理,针对更多的矩阵,我们也有

\[(ABC)^T = C^TB^TA^T\]

\[(A^{-1})^T = (A^T)^{-1}\]

\[AA^{-1} = I \to (AA^{-1})^T = I \to (A^{-1})^TA^T = I \to (A^{-1})^T = (A^T)^{-1}\]

转置形式的内积和外积

对称矩阵的转置等于它本身,也就是 \(A^T = A\)。而且,一个对称矩阵的逆矩阵也是对称的。

\[(A^{-1})^T = (A^T)^{-1} = A^{-1}\]

对于一个任意的矩阵 \(R\),可以是矩形的,\(R^TR\) 和 \(RR^T\) 都是一个对称的方阵。

\[(R^TR)^T = R^T(R^T)^T = R^TR\]

当 \(A=A^T\) 时,如果没有行交换,那么有 \(A = LDU = LDL^T\),此时 \(U\) 变成了 \(L^T\)

置换矩阵 \(P\) 每行每列都只有一个 1,而且 \(P^T\)、\(PP^T\) 和任意两个置换矩阵的乘积 \(P_1P_2\) 都还是置换矩阵。此外,所有的置换矩阵都有 \(P^T=P^{-1}\)。

在 \(n\) 阶的情况下,置换矩阵的总的个数为 \(n!\)。例如 2 阶置换矩阵只有 2 个,3 阶置换矩阵有 6 个。

如果在需要行交换的情况下,我们可以先引入一个置换矩阵 \(P\) 使矩阵 \(A\) 的行有正确的顺序,然后再进行消元,这样的话我们就有

\[PA=LU\]

也可以进行消元,然后再用一个矩阵 \(P_1\) 来让主元有一个正确的顺序,这样的话我们就有

\[A=L_1P_1U_1\]

如果 \(A\) 是可逆的,置换矩阵 \(P\) 将会使它的行有一个正确的顺序然后分解成 \(PA=LU\) 的形式。

获取更多精彩,请关注「seniusen」!

线性代数之——A 的 LU 分解的更多相关文章

  1. 线性代数笔记10——矩阵的LU分解

    在线性代数中, LU分解(LU Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个单位下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积).LU分解主要应用在数值分析 ...

  2. matlab 求解线性方程组之LU分解

    线性代数中的一个核心思想就是矩阵分解,既将一个复杂的矩阵分解为更简单的矩阵的乘积.常见的有如下分解: LU分解:A=LU,A是m×n矩阵,L是m×m下三角矩阵,U是m×n阶梯形矩阵 QR分解: 秩分解 ...

  3. 矩阵分解---QR正交分解,LU分解

    相关概念: 正交矩阵:若一个方阵其行与列皆为正交的单位向量,则该矩阵为正交矩阵,且该矩阵的转置和其逆相等.两个向量正交的意思是两个向量的内积为 0 正定矩阵:如果对于所有的非零实系数向量x ,都有 x ...

  4. 矩阵LU分解分块算法实现

    本文主要描述实现LU分解算法过程中遇到的问题及解决方案,并给出了全部源代码. 1. 什么是LU分解? 矩阵的LU分解源于线性方程组的高斯消元过程.对于一个含有N个变量的N个线性方程组,总可以用高斯消去 ...

  5. LU分解,Javascript代码

    ///A 为矩阵,这里写成一维数组,如 [1],[1,2,3,4] function GetLU(a) { var n = a.length;//矩阵的总数据数目 var s = Math.sqrt( ...

  6. matlab实现高斯消去法、LU分解

    朴素高斯消去法: function x = GauElim(n, A, b) if nargin < 2 for i = 1 : 1 : n for j = 1 : 1 : n A(i, j) ...

  7. LU分解(2)

    接着上次LU分解的讲解,这次给出使用不同的计算LU分解的方法,这种方法称为基于GaxPy的计算方法.这里需要了解lapapck中的一些函数.lapack中有一个函数名为gaxpy,所对应的矩阵计算公式 ...

  8. LU分解(1)

    1/6 LU 分解          LU 分解可以写成A = LU,这里的L代表下三角矩阵,U代表上三角矩阵.对应的matlab代码如下: function[L, U] =zlu(A) % ZLU ...

  9. MATLAB矩阵的LU分解及在解线性方程组中的应用

    作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 三.实验程序 五.解答(按如下顺序提交电子版) 1.(程序) (1)LU分解源程序: function [ ...

随机推荐

  1. L2-001 紧急救援(dijkstra算法)

    题目: 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市 ...

  2. About Me - 关于

    0x00 简介 97年生 计算机相关专业,无线电安全攻防方向. 涉猎较多,喜欢研究无线.硬件.软件.网络.攻击.检测.防御等各类安全技术 精通较少,主要擅长的还是硬件.渗透.无线攻击方面. 现阶段在研 ...

  3. laravel 5.7 resources 本地化 简体中文

    使用方法: 新建目录[项目目录/resources/lang/zh] 按以下内容创建文件,并将内容复制到文件中 修改 config/app.php 'locale' => 'zh', 'fall ...

  4. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  5. 使用ContentType处理大量的外键关系

    问题分析 在之前的一个商城的项目中使用了mysql, 提到mysql就是外键, 多对多等等一系列的表关系 因为是一个商城的项目, 这里面有优惠券, 商品有很多的分类, 不同的商品又有不同的优惠券 其实 ...

  6. Redis,传统数据库,HBase,Hive区别联系

    首先介绍各个数据库: Redis: 传统数据库: HBase: Hive:

  7. hadoop生态搭建(3节点)-16.elk配置

    # ==================================================================ELK环境准备 # 修改文件限制 # * 代表Linux所有用户 ...

  8. python应用:日期时间

    计算时间差时,注意天数差引发的问题,获取天数差为 (date2-date1).days 此处,需谨记date2>date1,以保证结果的正确性 具体应用如下: # -*-coding:utf8- ...

  9. jenkins里面使用shell 获取jira的sprint信息

    需求 项目需要在jenkins自动发布中加入version.html来跟踪项目发布的版本信息,需要获取到jira中当前sprint的名字,和一个sprint中的发布次数(我这里用文件把次数存起来的傻方 ...

  10. vs2013工程配置

    1. 目标文件生成路径配置: 直接改在工程同级目录下 x64\debug目录下: 2. 调试工程路径配置: 命令-----参照物为工程 工作目录----参照物为运行程序 3.  拷贝工程: bat的写 ...