矩阵的LU分解
linalg.lu
 矩阵  的 LU 分解为:
P 是 M×M 的单位矩阵的一个排列,L 是下三角阵,U 是上三角阵。
可以使用 linalg.lu 进行 LU 分解的求解:
具体原理可以查看维基百科: https://en.wikipedia.org/wiki/LU_decomposition
A = np.array([[1,2,3],[4,5,6]])
P, L, U = linalg.lu(A)
结果:
# p
array([[0., 1.],
       [1., 0.]])
# L
array([[1.  , 0.  ],
       [0.25, 1.  ]])
# U
array([[4.  , 5.  , 6.  ],
       [0.  , 0.75, 1.5 ]])
scipy.linalg.lu_factor
scipy.linalg.lu_factor(a, 
                       overwrite_a=False, 
                       check_finite=True)
a:方阵,形状为(M,M),要求非奇异矩阵overwrite_a:一个布尔值,指定是否将结果写到a的存储区。check_finite:如果为True,则检测输入中是否有nan或者inf
返回:
lu:一个数组,形状为(N,N),该矩阵的上三角矩阵就是U,下三角矩阵就是L(L矩阵的对角线元素并未存储,因为它们全部是1)piv:一个数组,形状为(N,)。它给出了P矩阵:矩阵a的第i行被交换到了第piv[i]行
矩阵LU分解:
其中: 为转置矩阵,该矩阵任意一行只有一个1,其他全零;任意一列只有一个1,其他全零。 为单位下三角矩阵(对角线元素为1), 为上三角矩阵(对角线元素为0)
基本使用
矩阵 分解
import numpy as np
from scipy.linalg import lu_factor
a = np.array([[1,2,3],[4,9,1],[27,1,8]])
lu,piv=lu_factor(a)
结果:
# lu
array([[27.        ,  1.        ,  8.        ],
       [ 0.14814815,  8.85185185, -0.18518519],
       [ 0.03703704,  0.22175732,  2.74476987]])
为单位下三角矩阵(对角线元素为1), 为上三角矩阵
也可使使用上面的linalg.lu 求出