Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >常见的几种矩阵分解方式

常见的几种矩阵分解方式

作者头像
全栈程序员站长
发布于 2022-09-02 01:51:19
发布于 2022-09-02 01:51:19
2.4K0
举报

大家好,又见面了,我是你们的朋友全栈君。

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步

1.三角分解(LU分解)

矩阵的LU分解是将一个矩阵分解为一个下三角矩阵与上三角矩阵的乘积。本质上,LU分解是高斯消元的一种表达方式。首先,对矩阵A通过初等行变换将其变为一个上三角矩阵。对于学习过线性代数的同学来说,这个过程应该很熟悉,线性代数考试中求行列式求逆一般都是通过这种方式来求解。然后,将原始矩阵A变为上三角矩阵的过程,对应的变换矩阵为一个下三角矩阵。这中间的过程,就是Doolittle algorithm(杜尔里特算法)。

转一个Tony Ma同学写的例子: 若AX=b是一个非奇异系统,那么高斯消元法将A化简为一个上三角矩阵。若主轴上没有0值,则无需交互行,因此只需进行第3类初等行变换(把第 i 行加上第 j 的 k 倍)即可完成此变换。例如

第3类行变换可以通过左乘相应的初等矩阵image实现,对上例来说进行的3个变换就是相应初等矩阵的乘积。注意最右边是一个下三角矩阵L

从而有 G 3 G 2 G 1 A = U G_3G_2G_1A = U G3​G2​G1​A=U,即 A = G 1 − 1 G 2 − 1 G 3 − 1 U A=G_1^{-1}G_2^{-1}G_3^{-1}U A=G1−1​G2−1​G3−1​U。因此 A = L U A=LU A=LU,为一个下三角与一个上三角矩阵的乘积,因此称为LU分解。 注意: 1)U是高斯消元的结果,且对角线上是主元 2)L对角线上是1,对角线下面的元素image恰恰是在式1中用于消去(i,j)位置上元素的乘子。

LU分解常用来求解线性方程组,求逆矩阵或者计算行列式。例如在计算行列式的时候, A = L U A=LU A=LU, d e t ( A ) = d e t ( L ) d e t ( U ) det(A) = det(L)det(U) det(A)=det(L)det(U)。而对于三角矩阵来说,行列式的值即为对角线上元素的乘积。所以如果对矩阵进行三角分解以后再求行列式,就会变得非常容易。

在线性代数中已经证明,如果方阵 A A A是非奇异的,即 A A A的行列式不为0,LU分解总是存在的。

并非所有矩阵都能进行LU分解,能够LU分解的矩阵需要满足以下三个条件:

1.矩阵是方阵(LU分解主要是针对方阵); 2.矩阵是可逆的,也就是该矩阵是满秩矩阵,每一行都是独立向量; 3.消元过程中没有0主元出现,也就是消元过程中不能出现行交换的初等变换。

2.QR分解

QR分解是将矩阵分解为一个正交矩阵与上三角矩阵的乘积。用一张图可以形象地表示QR分解:

这其中, Q Q Q为正交矩阵, Q T Q = I Q^TQ = I QTQ=I,R为上三角矩阵。 实际中,QR分解经常被用来解线性最小二乘问题。

3.Jordan分解

每次看到Jordan分解,就想起当年考研的那段时光。控制原理里面,就有大段关于Jordan分解的内容。可惜当时矩阵分析没有学到位,线性代数里头又没有提到Jordan分解,所以理解起来那个费劲。 废话这么多,先来看看Jordan到底是个什么鬼: 我们将下面的 k × k k \times k k×k 阶方阵 J K ( λ ) = [ λ 1 λ 1 ⋱ ⋱ λ 1 λ ] k × k J_K(\lambda) = \left[ \begin{matrix} \lambda & 1 & \\ & \lambda & 1 \\ & & \ddots & \ddots \\ & & & \lambda & 1\\ & & & & \lambda \end{matrix} \right] _{k \times k} JK​(λ)=⎣⎢⎢⎢⎢⎡​λ​1λ​1⋱​⋱λ​1λ​⎦⎥⎥⎥⎥⎤​k×k​ 称为Jordan块。同时,我们也将由若干个Jordan块组成的对角矩阵成为Jordan阵。 由Jordan块的定义不难看出,Jordan 阵与对角阵的差别仅在于它的上 (下)对角线的元素是0或1。因此,它是特殊的上三角阵。

为什么要进行Jordan分解呢?或者说,Jordan分解能解决什么问题呢? 我们先来复习一下,如果一个n阶方阵 A A A可以对角化,那么 A A A至少满足下列条件的一个: 1. A A A有n个线性无关的特征向量。 2. A A A的所有特征值的几何重数等于相应的代数重数,即 q i = p i q_i = p_i qi​=pi​。 3. A A A的极小多项式经标准分解后,每一项都是一次项,且重数都是1。

因为有的矩阵不可以进行对角化,那么我们可以对它进行Jordan分解,达到简化计算的目的。

4.SVD分解

关于SVD分解,前面已经有文章专门介绍了。 http://blog.csdn.net/bitcarmanlee/article/details/52068118

参考文献

  1. https://zhuanlan.zhihu.com/p/54943042 矩阵分解—1-LU分解
  2. https://zhuanlan.zhihu.com/p/84415000 [数值计算] QR分解

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/139071.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
线性代数--MIT18.06(十九)
在上一讲我们介绍了行列式的性质,知道了行列式的性质,我们自然想知道如何求解行列式,首先回顾下行列式的三个基本性质
fireWang
2019/03/13
7470
化三角矩阵计算行列式的算法实现
前者的复杂度是 O(n!) 级别的,在计算约 12 阶的矩阵时就会需要超过 1s 的时间,而计算 1000 \times 1000 的矩阵需要进行约:
Clouder0
2022/09/28
9060
呆在家无聊?何不抓住这个机会好好学习!
本公众号一向坚持的理念是数据分析工具要从基础开始学习,按部就班,才能深入理解并准确利用这些工具。鼠年第一篇原创推送比较长,将从基础的线性代数开始。线性代数大家都学过,但可能因为联系不到实用情况,都还给了曾经的老师。线性代数是数理统计尤其是各种排序分析的基础,今天我将以全新的角度基于R语言介绍线性代数,并手动完成PCA分析,从而强化关于线性代数和实际数据分析的联系。
SYSU星空
2022/05/05
7800
呆在家无聊?何不抓住这个机会好好学习!
深度学习中的数学(二)——线性代数
线性可分的定义:线性可分就是说可以用一个线性函数把两类样本分开,比如二维空间中的直线、三维空间中的平面以及高维空间中的超平面。(所谓可分指可以没有误差地分开;线性不可分指有部分样本用线性分类面划分时会产生分类误差的情况。)
润森
2022/09/22
8660
深度学习中的数学(二)——线性代数
【Math for ML】矩阵分解(Matrix Decompositions) (上)
设\(λ=λ_i\)是矩阵\(A\)的一个特征值,则有方程\((A-λ_iv)x=0\),可求得非零解\(x=p_i\)即为\(λ_i\)对应的特征向量。(若\(λ_i\)为实数,则\(p_i\)可取实向量;\(λ_i\)为复数,则\(p_i\)可取复向量)
marsggbo
2018/12/27
1.1K0
LinearAlgebra_1
方程组的几何解释 linear equation row picture column picture 矩阵计算的两种方法 some questions 需要思考的其他问题 矩阵消元 回顾 主题 消元
用户1147754
2018/01/02
1K0
透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵
线性代数是用来描述状态和变化的,而矩阵是存储状态和变化的信息的媒介,可以分为状态(静态)和变化(动态)信息来看待。
周陆军
2018/03/27
7.3K7
透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵
【读书笔记】之矩阵知识梳理
这篇笔记,主要记录花书第二章关于线性代数知识的回顾。希望把常用的概念和公式都记录下来,同时标记编号(为了方便,标记序号与书中一致),在后续公式推导过程中可以直接关联使用。 梳理成文章,主要
用户1594945
2018/07/20
9050
关于矩阵之行列式、方阵、逆矩阵的理解
行列式在数学中,是一个函数,其定义域为det的矩阵A,取值为一个标量,写作det(A)或 | A | ,可以看作在几何空间中,一个线性变换对“面积”或“体积”的影响。
python与大数据分析
2022/03/11
2.1K0
关于矩阵之行列式、方阵、逆矩阵的理解
矩阵求逆c++实现[通俗易懂]
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来。将一个N * N单位矩阵 放在A 的右手边,形成一个N * 2N的分块矩阵B = [A,I] 。经过高斯消元法的计算程序后,矩阵B 的左手边会变成一个单位矩阵I ,而逆矩阵A ^(-1) 会出现在B 的右手边。假如高斯消元法不能将A 化为三角形的格式,那就代表A 是一个不可逆的矩阵。应用上,高斯消元法极少被用来求出逆矩阵。高斯消元法通常只为线性方程组求解。
全栈程序员站长
2022/09/25
1.7K0
矩阵求逆c++实现[通俗易懂]
机器学习数学基础--线性代数
换种表达方式,线性无关是说:其中任意一个向量都不在其他向量张成空间中,也就是对所有的
统计学家
2019/05/10
1.1K0
机器学习数学基础--线性代数
Python实现所有算法-矩阵的LU分解
大家不要愁,数值算法很快就会写完,之后会写一些有趣的算法。前面的文章里面写了一些常见的数值算法,但是却没有写LU分解,哎呦不得了哦!主要的应用是:用来解线性方程、求反矩阵或计算行列式。
云深无际
2022/08/05
8300
Python实现所有算法-矩阵的LU分解
我的机器学习线性代数篇观点向量矩阵行列式矩阵的初等变换向量组线性方程组特征值和特征向量几个特殊矩阵QR 分解(正交三角分解)奇异值分解向量的导数
前言: 线代知识点多,有点抽象,写的时候尽量把这些知识点串起来,如果不行,那就两串。其包含的几大对象为:向量,行列式,矩阵,方程组。 观点 核心问题是求多元方程组的解,核心知识:内积、秩、矩阵求逆,应用:求解线性回归、最小二乘法用QR分解,奇异值分解SVD,主成分分析(PCA)运用可对角化矩阵 向量 基础 向量:是指具有n个互相独立的性质(维度)的对象的表示,向量常 使用字母+箭头的形式进行表示,也可以使用几何坐标来表示向量。 单位向量:向量的模、模为一的向量为单位向量 内积又叫数量积
DC童生
2018/04/27
1.8K0
我的机器学习线性代数篇观点向量矩阵行列式矩阵的初等变换向量组线性方程组特征值和特征向量几个特殊矩阵QR 分解(正交三角分解)奇异值分解向量的导数
矩阵行列式、伴随矩阵、逆矩阵计算方法与Python实现
对于任意方阵,其行列式(determinant)为一个标量,可以看作线性变换对体积的影响或扩大率,行列式的正负号对应图形的镜像翻转。2阶方阵的行列式表示每列向量围成的平行四边形的面积,3阶方阵的行列式表示每列向量围成的平行六面积的体积。在多重积分的换元法中,行列式起到了关键作用。在研究概率密度函数根据随机变量的变化而产生的变化时,也要依靠行列式进行计算,例如空间的延申会导致密度的下降。另外,行列式还可以用来检测是否产生了退化,表示压缩扁平化(把多个点映射到同一个点)的矩阵的行列式为0,行列式为0的矩阵表示的必然是压缩扁平化,这样的矩阵肯定不存在逆矩阵。
Python小屋屋主
2023/12/13
4470
矩阵行列式、伴随矩阵、逆矩阵计算方法与Python实现
高斯消元法(Gauss Elimination)【超详解&模板】
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程
Angel_Kitty
2018/04/09
20K0
高斯消元法(Gauss Elimination)【超详解&模板】
C++实现矩阵类(附代码和功能)
阅读这篇文章需要掌握C++类的知识以及线性代数的知识,如果有疑问,可在文章下方评论,作者会尽快回复;本文是在作者阅读了平冈和幸的程序员的数学3:线性代数之后而写,在代码设计上借鉴了书中的方法。
全栈程序员站长
2022/09/13
2K0
C++实现矩阵类(附代码和功能)
矩阵可逆-我们能不能回到当初第一次见面的模样
标题的意思就是,能不能回到我送你进矩阵之前的模样,要是还能回去那就是可逆,可逆其实讲的是“原料”。有没有那么一个矩阵,可以把变换过的原料再变回去。
云深无际
2024/10/12
2000
矩阵可逆-我们能不能回到当初第一次见面的模样
博客 | MIT—线性代数(下)
1、 投影矩阵与最小二乘:向量子空间投影在机器学习中的应用最为广泛。就拿最小二乘的线性拟合来说,首先根据抽样特征维度假设线性方程形式,即假设函数。
AI研习社
2018/12/28
1.4K0
博客 | MIT—线性代数(下)
线性代数整理(三)行列式特征值和特征向量
比方说在二维平面中,这里有三组二维向量,每组都有两个向量,那么每组向量的面积就可以表示它们的不同。当然这里说面积是针对二维平面来说的,在三维空间中,就是体积;在更高维度中,可能就是一个体,但这个体比较抽象
算法之名
2021/03/04
2.7K0
利用 Numpy 进行矩阵相关运算
NumPy 是Python数据分析必不可少的第三方库,NumPy 的出现一定程度上解决了Python运算性能不佳的问题,同时提供了更加精确的数据类型。如今,NumPy 被Python其它科学计算包作为基础包,已成为 Python 数据分析的基础,可以说 NumPy 就是SciPy、Pandas等数据处理或科学计算库最基本的函数功能库。
fireWang
2019/03/13
2.3K0
推荐阅读
相关推荐
线性代数--MIT18.06(十九)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档