Python矩阵LU分解

这篇具有很好参考价值的文章主要介绍了Python矩阵LU分解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

scipy.linalg中提供了一系列矩阵分解函数,其中最基础的肯定是LU分解。

L和U

LU分解,即使得矩阵 A A A分解为 L U LU LU,其中 L L L为下三角阵, U U U为上三角阵。对于这两种矩阵,scipy.linalg中提供了tril, triu,可以将第 k k k条对角线下面或上面的所有元素置零,即可以此获取L矩阵或者U矩阵。

import numpy as np
import scipy.linalg as sl
x = np.random.rand(4,4)
print(sl.tril(x,-1))	# 返回见[1]

[ 0. 0. 0. 0. 0.62594216 0. 0. 0. 0.16043717 0.5820587 0. 0. 0.24560828 0.76599572 0.1922379 0. ] \begin{bmatrix} 0.&0.&0.&0.\\ 0.62594216&0.&0.&0.\\ 0.16043717&0.5820587&0.&0.\\ 0.24560828&0.76599572&0.1922379& 0.\\ \end{bmatrix} 0.0.625942160.160437170.245608280.0.0.58205870.765995720.0.0.0.19223790.0.0.0.

print(sl.triu(x,2))		#

[ 0. 0. 0.91943758 0.2531733 0. 0. 0. 0.76514452 0. 0. 0. 0. 0. 0. 0. 0. ] \begin{bmatrix} 0.&0.&0.91943758&0.2531733 \\ 0.&0.&0.&0.76514452\\ 0.&0.&0.&0.\\ 0.&0.&0.&0. \end{bmatrix} 0.0.0.0.0.0.0.0.0.919437580.0.0.0.25317330.765144520.0.

lu分解

LU分解几乎是任何有关矩阵算法的书籍中,第一个出现的矩阵分解方法。在scipy.linalg中,提供了lu, lu_factor, lu_solve等函数,分别用于LU分解,以及通过LU分解求解Ax=b类似的问题。

LU分解示例如下

import numpy as np
from scipy.linalg import lu
A = np.random.rand(4,4)
p, l, u = lu(A)
np.allclose(A - p @ l @ u, np.zeros((4, 4)))
# True

lu函数除了a和用于有限性校验以及a可覆盖性的参数之外,还有一个permute_l,默认为False,当其为True时,将返回两个参数pl, u。其中pl==p@l

lu_factor(a)以另一种形式返回LU分解的结果。其返回值有二,分别是lu, piv,其中LU就是 L + U − I L+U-I L+UI,其中 I I I为单位阵;piv表示矩阵 P P P中不为零的元素的位置。

lu_solve

lu_solve是根据 L U LU LU分解求解 P L U x − b PLUx-b PLUxb的问题,其输入为(lu, piv)b,测试如下

>>> b = np.array([1,2,3,4])
>>> lu, pix = sl.lu_factor(A)
>>> x = lu_solve((lu, pix), b)
>>> A@x-b
array([ 2.22044605e-16, -4.44089210e-16,  0.00000000e+00,  0.00000000e+00])

其中A就是上面生成的随机矩阵,值为

[ 0.2495995 0.59179571 0.34236803 0.78559552 0.39427709 0.36015762 0.23789732 0.09223244 0.79701282 0.40291763 0.93215531 0.10486747 0.46812908 0.58426202 0.16560106 0.96889267 ] \begin{bmatrix} 0.2495995&0.59179571&0.34236803&0.78559552\\ 0.39427709&0.36015762&0.23789732&0.09223244\\ 0.79701282&0.40291763&0.93215531&0.10486747\\ 0.46812908&0.58426202&0.16560106&0.96889267 \end{bmatrix} 0.24959950.394277090.797012820.468129080.591795710.360157620.402917630.584262020.342368030.237897320.932155310.165601060.785595520.092232440.104867470.96889267 文章来源地址https://www.toymoban.com/news/detail-719112.html

到了这里,关于Python矩阵LU分解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解

    第三章,矩阵,07-用初等变换求逆矩阵、矩阵的LU分解

    玩转线性代数(19)初等矩阵与初等变换的相关应用的笔记,例见原文 已知: A r ∼ F A^r sim F A r ∼ F ,求可逆阵 P P P ,使 P A = F PA = F P A = F ( F F F 为 A A A 的行最简形) 方法:利用初等行变换,将矩阵A左边所乘初等矩阵相乘,从而得到可逆矩阵P. 步骤: (1)对矩阵A进行l次初等

    2024年02月13日
    浏览(12)
  • C语言——利用矩阵LU分解法求逆、行列式

    C语言——利用矩阵LU分解法求逆、行列式

    本章介绍了LU分解法,以及如何利用LU分解法求逆、行列式,针对每个公式、原理、代码进行了详细介绍,希望可以给大家带来帮助。 LU分解法与高斯法求逆一样,可以进行较高维数的矩阵运算(可计算万维及以上,但是精度不能保证,并且占有内存大,高维矩阵需要进行分块

    2024年02月03日
    浏览(13)
  • 线性代数 --- LU分解(Gauss消元法的矩阵表示)

    线性代数 --- LU分解(Gauss消元法的矩阵表示)

                     首先, LU分解实际上就是用矩阵的形式来记录的高斯消元的过程 。其中,对矩阵A进行高斯消元后的结果为矩阵U,是LU分解后的两个三角矩阵中其中之一。U是一个上三角矩阵,U就是上三角矩阵upper triangle的首字母的大写。         高斯消元的每一步都

    2024年02月02日
    浏览(31)
  • MIT - 线性代数-LU_LDU分解|单位矩阵

    MIT - 线性代数-LU_LDU分解|单位矩阵

    U为消元结果(行变换),L为行变换矩阵的逆矩阵 D为主元(Pivot)A的主对角线元素,在这里为2、3,U为对D做列变换使其得到LU中的U 为什么要写成A=LU而不是E21A=U呢?因为A=LU中L只包含行变换信息,E21A=U还有额外的数字 2×2 2 3×3 3×2=6 4×4 4×3×2=24 结论:单位矩阵的逆=转置矩阵(

    2024年01月23日
    浏览(16)
  • 矩阵的谱分解 (详细推导步骤~~~特征值分解特征向量

    矩阵的谱分解 (详细推导步骤~~~特征值分解特征向量

           所谓矩阵的分解,就是将一个矩阵写成结构比较简单的或性质比较熟悉的另一些矩阵的乘积。矩阵的分解方法有很多种,包括三角分解、QR(正交三角)分解、最大秩分解、奇异值分解和谱分解,所有这些分解在数值代数和最优化问题的解法中都扮演着十分重要的角

    2024年02月05日
    浏览(11)
  • 矩阵分析:特征值分解

    矩阵分析:特征值分解

    伸缩 一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 因为这个矩阵M乘以一个向量(x,y)的结果是: 旋转 除了伸缩变换,也可以进行旋转变换。 上面的矩阵是对称的,所以这个变

    2023年04月24日
    浏览(11)
  • 一分钟读懂:矩阵的特征值分解、奇异值分解和伪逆矩阵

    通过把矩阵运算分解成多个矩阵的乘法,可以简化矩阵运算,也可发现对应线性变换的一些内在规律和特性。根据不同的目的,有不同的分解策略。本文我们讨论最常用的特征值分解和奇异值分解。 定义了矩阵的加、减、乘、除(逆)运算后,数学家们自然希望探索矩阵更多

    2024年02月03日
    浏览(10)
  • Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)

    考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给 定解 (例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代的一般程序; (2) 取阶数n=6,分别用 LU 分解法、 Jacobi 迭代、 Gauss-S

    2024年02月11日
    浏览(14)
  • 矩阵篇(五)-- 特征值分解(EVD)和奇异值分解(SVD)

    矩阵篇(五)-- 特征值分解(EVD)和奇异值分解(SVD)

            设 A n × n A_{n times n} A n × n ​ 有 n n n 个线性无关的特征向量 x 1 , … , x n boldsymbol{x}_{1}, ldots, boldsymbol{x}_{n} x 1 ​ , … , x n ​ ,对应特征值分别为 λ 1 , … , λ n lambda_{1}, ldots, lambda_{n} λ 1 ​ , … , λ n ​ A [ x 1 ⋯ x n ] = [ λ 1 x 1 ⋯ λ n x n ] Aleft[begin{array}{lll

    2024年02月08日
    浏览(9)
  • 特征值与特征向量: 矩阵的奇异值分解与主成分分析

    随着数据量的增加,数据处理和分析变得越来越复杂。在大数据领域,我们需要一种有效的方法来处理高维数据,以便更好地理解数据之间的关系和模式。这就是奇异值分解(Singular Value Decomposition, SVD)和主成分分析(Principal Component Analysis, PCA)发挥作用的地方。在本文中,我们将

    2024年02月19日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包